summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2002-10-11 08:52:17 +0000
committerru <ru@FreeBSD.org>2002-10-11 08:52:17 +0000
commit127e61728bacf1fb90edd8be1b0c406619e78bc8 (patch)
tree8c45b0385e4d4d3172ddd7926de65d06c5b2e88b
parent737a9b93ec94c55fd85de176c9de9302f1a9f95f (diff)
downloadFreeBSD-src-127e61728bacf1fb90edd8be1b0c406619e78bc8.zip
FreeBSD-src-127e61728bacf1fb90edd8be1b0c406619e78bc8.tar.gz
Virgin import of FSF groff v1.18.1
-rw-r--r--contrib/groff/ChangeLog3841
-rw-r--r--contrib/groff/INSTALL7
-rw-r--r--contrib/groff/INSTALL.gen117
-rw-r--r--contrib/groff/MANIFEST152
-rw-r--r--contrib/groff/MORE.STUFF30
-rw-r--r--contrib/groff/Makefile.ccpg2
-rw-r--r--contrib/groff/Makefile.comm79
-rw-r--r--contrib/groff/Makefile.cpg2
-rw-r--r--contrib/groff/Makefile.in194
-rw-r--r--contrib/groff/Makefile.man2
-rw-r--r--contrib/groff/Makefile.sub27
-rw-r--r--contrib/groff/NEWS598
-rw-r--r--contrib/groff/PROBLEMS788
-rw-r--r--contrib/groff/README2
-rw-r--r--contrib/groff/REVISION2
-rw-r--r--contrib/groff/VERSION2
-rw-r--r--contrib/groff/aclocal.m4199
-rwxr-xr-xcontrib/groff/configure4148
-rw-r--r--contrib/groff/configure.ac29
-rw-r--r--contrib/groff/contrib/eqn2graph/Makefile.sub19
-rw-r--r--contrib/groff/contrib/eqn2graph/eqn2graph.man97
-rw-r--r--contrib/groff/contrib/eqn2graph/eqn2graph.sh74
-rw-r--r--contrib/groff/contrib/groffer/ChangeLog460
-rw-r--r--contrib/groff/contrib/groffer/Makefile.sub47
-rw-r--r--contrib/groff/contrib/groffer/TODO53
-rw-r--r--contrib/groff/contrib/groffer/groffer.man2836
-rw-r--r--contrib/groff/contrib/groffer/groffer.sh4419
-rw-r--r--contrib/groff/contrib/mm/ChangeLog96
-rw-r--r--contrib/groff/contrib/mm/Makefile.sim12
-rw-r--r--contrib/groff/contrib/mm/Makefile.sub19
-rw-r--r--contrib/groff/contrib/mm/README8
-rw-r--r--contrib/groff/contrib/mm/groff_mm.man591
-rw-r--r--contrib/groff/contrib/mm/groff_mmse.man4
-rw-r--r--contrib/groff/contrib/mm/m.tmac148
-rw-r--r--contrib/groff/contrib/mm/mm.tmac3
-rw-r--r--contrib/groff/contrib/mm/mmroff.man7
-rwxr-xr-xcontrib/groff/contrib/mm/mmroff.pl9
-rw-r--r--contrib/groff/contrib/mm/mmse.tmac3
-rw-r--r--contrib/groff/contrib/mom/BUGS76
-rw-r--r--contrib/groff/contrib/mom/ChangeLog390
-rw-r--r--contrib/groff/contrib/mom/Makefile.sub125
-rw-r--r--contrib/groff/contrib/mom/NEWS183
-rw-r--r--contrib/groff/contrib/mom/TODO21
-rw-r--r--contrib/groff/contrib/mom/copyright24
-rw-r--r--contrib/groff/contrib/mom/examples/README.mom56
-rw-r--r--contrib/groff/contrib/mom/examples/elvis_syntax130
-rw-r--r--contrib/groff/contrib/mom/examples/letter.mom34
-rw-r--r--contrib/groff/contrib/mom/examples/macros.mom668
-rw-r--r--contrib/groff/contrib/mom/examples/penguin.ps461
-rw-r--r--contrib/groff/contrib/mom/examples/typeset.mom534
-rw-r--r--contrib/groff/contrib/mom/examples/typewrite.mom233
-rw-r--r--contrib/groff/contrib/mom/groff_mom.man95
-rw-r--r--contrib/groff/contrib/mom/mom.tmac3
-rw-r--r--contrib/groff/contrib/mom/momdoc/appendices.html185
-rw-r--r--contrib/groff/contrib/mom/momdoc/cover.html49
-rw-r--r--contrib/groff/contrib/mom/momdoc/definitions.html653
-rw-r--r--contrib/groff/contrib/mom/momdoc/docelement.html2320
-rw-r--r--contrib/groff/contrib/mom/momdoc/docprocessing.html1799
-rw-r--r--contrib/groff/contrib/mom/momdoc/goodies.html926
-rw-r--r--contrib/groff/contrib/mom/momdoc/headfootpage.html1305
-rw-r--r--contrib/groff/contrib/mom/momdoc/inlines.html595
-rw-r--r--contrib/groff/contrib/mom/momdoc/intro.html386
-rw-r--r--contrib/groff/contrib/mom/momdoc/letters.html316
-rw-r--r--contrib/groff/contrib/mom/momdoc/rectoverso.html257
-rw-r--r--contrib/groff/contrib/mom/momdoc/reserved.html1044
-rw-r--r--contrib/groff/contrib/mom/momdoc/toc.html208
-rw-r--r--contrib/groff/contrib/mom/momdoc/typemacdoc.html169
-rw-r--r--contrib/groff/contrib/mom/momdoc/typesetting.html3744
-rw-r--r--contrib/groff/contrib/mom/momdoc/using.html223
-rw-r--r--contrib/groff/contrib/mom/om.tmac9265
-rw-r--r--contrib/groff/contrib/pic2graph/Makefile.sub19
-rw-r--r--contrib/groff/contrib/pic2graph/pic2graph.man123
-rw-r--r--contrib/groff/contrib/pic2graph/pic2graph.sh83
-rw-r--r--contrib/groff/doc/Makefile.in136
-rw-r--r--contrib/groff/doc/Makefile.sub202
-rw-r--r--contrib/groff/doc/fdl.texi403
-rw-r--r--contrib/groff/doc/gnu.eps1018
-rw-r--r--contrib/groff/doc/gnu.pngbin0 -> 7260 bytes
-rw-r--r--contrib/groff/doc/gnu.xpm198
-rw-r--r--contrib/groff/doc/grnexmpl.me2
-rw-r--r--contrib/groff/doc/groff297
-rw-r--r--contrib/groff/doc/groff-11386
-rw-r--r--contrib/groff/doc/groff-10208
-rw-r--r--contrib/groff/doc/groff-111536
-rw-r--r--contrib/groff/doc/groff-21683
-rw-r--r--contrib/groff/doc/groff-31374
-rw-r--r--contrib/groff/doc/groff-41316
-rw-r--r--contrib/groff/doc/groff-51185
-rw-r--r--contrib/groff/doc/groff-61415
-rw-r--r--contrib/groff/doc/groff-71608
-rw-r--r--contrib/groff/doc/groff-81268
-rw-r--r--contrib/groff/doc/groff-9931
-rw-r--r--contrib/groff/doc/groff.texinfo9931
-rw-r--r--contrib/groff/doc/pic.ms1529
-rw-r--r--contrib/groff/doc/texinfo.tex1134
-rw-r--r--contrib/groff/doc/webpage.ms969
-rw-r--r--contrib/groff/font/devX100-12/CB104
-rw-r--r--contrib/groff/font/devX100-12/CBI104
-rw-r--r--contrib/groff/font/devX100-12/CI104
-rw-r--r--contrib/groff/font/devX100-12/CR104
-rw-r--r--contrib/groff/font/devX100-12/HB140
-rw-r--r--contrib/groff/font/devX100-12/HBI114
-rw-r--r--contrib/groff/font/devX100-12/HI110
-rw-r--r--contrib/groff/font/devX100-12/HR110
-rw-r--r--contrib/groff/font/devX100-12/NB120
-rw-r--r--contrib/groff/font/devX100-12/NBI114
-rw-r--r--contrib/groff/font/devX100-12/NI110
-rw-r--r--contrib/groff/font/devX100-12/NR108
-rw-r--r--contrib/groff/font/devX100-12/S11
-rw-r--r--contrib/groff/font/devX100-12/TB156
-rw-r--r--contrib/groff/font/devX100-12/TBI110
-rw-r--r--contrib/groff/font/devX100-12/TI110
-rw-r--r--contrib/groff/font/devX100-12/TR110
-rw-r--r--contrib/groff/font/devX100/CB108
-rw-r--r--contrib/groff/font/devX100/CBI104
-rw-r--r--contrib/groff/font/devX100/CI108
-rw-r--r--contrib/groff/font/devX100/CR106
-rw-r--r--contrib/groff/font/devX100/HB108
-rw-r--r--contrib/groff/font/devX100/HBI108
-rw-r--r--contrib/groff/font/devX100/HI108
-rw-r--r--contrib/groff/font/devX100/HR114
-rw-r--r--contrib/groff/font/devX100/NB118
-rw-r--r--contrib/groff/font/devX100/NBI108
-rw-r--r--contrib/groff/font/devX100/NI106
-rw-r--r--contrib/groff/font/devX100/NR110
-rw-r--r--contrib/groff/font/devX100/S9
-rw-r--r--contrib/groff/font/devX100/TB108
-rw-r--r--contrib/groff/font/devX100/TBI110
-rw-r--r--contrib/groff/font/devX100/TI108
-rw-r--r--contrib/groff/font/devX100/TR110
-rw-r--r--contrib/groff/font/devX75-12/CB106
-rw-r--r--contrib/groff/font/devX75-12/CBI106
-rw-r--r--contrib/groff/font/devX75-12/CI106
-rw-r--r--contrib/groff/font/devX75-12/CR106
-rw-r--r--contrib/groff/font/devX75-12/HB110
-rw-r--r--contrib/groff/font/devX75-12/HBI106
-rw-r--r--contrib/groff/font/devX75-12/HI108
-rw-r--r--contrib/groff/font/devX75-12/HR112
-rw-r--r--contrib/groff/font/devX75-12/NB114
-rw-r--r--contrib/groff/font/devX75-12/NBI114
-rw-r--r--contrib/groff/font/devX75-12/NI112
-rw-r--r--contrib/groff/font/devX75-12/NR108
-rw-r--r--contrib/groff/font/devX75-12/S9
-rw-r--r--contrib/groff/font/devX75-12/TB108
-rw-r--r--contrib/groff/font/devX75-12/TBI114
-rw-r--r--contrib/groff/font/devX75-12/TI108
-rw-r--r--contrib/groff/font/devX75-12/TR136
-rw-r--r--contrib/groff/font/devX75/CB108
-rw-r--r--contrib/groff/font/devX75/CBI106
-rw-r--r--contrib/groff/font/devX75/CI106
-rw-r--r--contrib/groff/font/devX75/CR106
-rw-r--r--contrib/groff/font/devX75/HB106
-rw-r--r--contrib/groff/font/devX75/HBI108
-rw-r--r--contrib/groff/font/devX75/HI108
-rw-r--r--contrib/groff/font/devX75/HR108
-rw-r--r--contrib/groff/font/devX75/NB116
-rw-r--r--contrib/groff/font/devX75/NBI112
-rw-r--r--contrib/groff/font/devX75/NI110
-rw-r--r--contrib/groff/font/devX75/NR116
-rw-r--r--contrib/groff/font/devX75/S11
-rw-r--r--contrib/groff/font/devX75/TB110
-rw-r--r--contrib/groff/font/devX75/TBI108
-rw-r--r--contrib/groff/font/devX75/TI106
-rw-r--r--contrib/groff/font/devX75/TR110
-rw-r--r--contrib/groff/font/devascii/R.proto1
-rw-r--r--contrib/groff/font/devcp1047/R.proto99
-rw-r--r--contrib/groff/font/devdvi/CW24
-rw-r--r--contrib/groff/font/devdvi/CWEC280
-rw-r--r--contrib/groff/font/devdvi/CWI24
-rw-r--r--contrib/groff/font/devdvi/CWIEC281
-rw-r--r--contrib/groff/font/devdvi/CWITC139
-rw-r--r--contrib/groff/font/devdvi/CWTC138
-rw-r--r--contrib/groff/font/devdvi/DESC.in7
-rw-r--r--contrib/groff/font/devdvi/HB36
-rw-r--r--contrib/groff/font/devdvi/HBEC1578
-rw-r--r--contrib/groff/font/devdvi/HBI296
-rw-r--r--contrib/groff/font/devdvi/HBIEC1579
-rw-r--r--contrib/groff/font/devdvi/HBITC139
-rw-r--r--contrib/groff/font/devdvi/HBTC138
-rw-r--r--contrib/groff/font/devdvi/HI36
-rw-r--r--contrib/groff/font/devdvi/HIEC1579
-rw-r--r--contrib/groff/font/devdvi/HITC139
-rw-r--r--contrib/groff/font/devdvi/HR295
-rw-r--r--contrib/groff/font/devdvi/HREC1578
-rw-r--r--contrib/groff/font/devdvi/HRTC138
-rw-r--r--contrib/groff/font/devdvi/MI4
-rw-r--r--contrib/groff/font/devdvi/Makefile.sub12
-rw-r--r--contrib/groff/font/devdvi/S19
-rw-r--r--contrib/groff/font/devdvi/SA4
-rw-r--r--contrib/groff/font/devdvi/TB346
-rw-r--r--contrib/groff/font/devdvi/TBEC1706
-rw-r--r--contrib/groff/font/devdvi/TBI352
-rw-r--r--contrib/groff/font/devdvi/TBIEC1768
-rw-r--r--contrib/groff/font/devdvi/TBITC139
-rw-r--r--contrib/groff/font/devdvi/TBTC138
-rw-r--r--contrib/groff/font/devdvi/TI353
-rw-r--r--contrib/groff/font/devdvi/TIEC1768
-rw-r--r--contrib/groff/font/devdvi/TITC139
-rw-r--r--contrib/groff/font/devdvi/TR429
-rw-r--r--contrib/groff/font/devdvi/TREC1706
-rw-r--r--contrib/groff/font/devdvi/TRTC138
-rwxr-xr-xcontrib/groff/font/devdvi/generate/CompileFonts2
-rw-r--r--contrib/groff/font/devdvi/generate/Makefile115
-rw-r--r--contrib/groff/font/devdvi/generate/ec.map206
-rw-r--r--contrib/groff/font/devdvi/generate/msam.map4
-rw-r--r--contrib/groff/font/devdvi/generate/tc.map58
-rw-r--r--contrib/groff/font/devdvi/generate/texb.map24
-rw-r--r--contrib/groff/font/devdvi/generate/texi.map26
-rw-r--r--contrib/groff/font/devdvi/generate/texmi.map2
-rw-r--r--contrib/groff/font/devdvi/generate/texr.map24
-rw-r--r--contrib/groff/font/devdvi/generate/texsy.map12
-rw-r--r--contrib/groff/font/devdvi/generate/textt.map16
-rw-r--r--contrib/groff/font/devhtml/DESC.proto2
-rw-r--r--contrib/groff/font/devhtml/Makefile.sub2
-rw-r--r--contrib/groff/font/devhtml/R.proto478
-rw-r--r--contrib/groff/font/devlatin1/R.proto99
-rw-r--r--contrib/groff/font/devlbp/CB61
-rw-r--r--contrib/groff/font/devlbp/CI61
-rw-r--r--contrib/groff/font/devlbp/CR61
-rw-r--r--contrib/groff/font/devlbp/EB61
-rw-r--r--contrib/groff/font/devlbp/EI61
-rw-r--r--contrib/groff/font/devlbp/ER61
-rw-r--r--contrib/groff/font/devlbp/HB100
-rw-r--r--contrib/groff/font/devlbp/HBI100
-rw-r--r--contrib/groff/font/devlbp/HI100
-rw-r--r--contrib/groff/font/devlbp/HNB100
-rw-r--r--contrib/groff/font/devlbp/HNBI100
-rw-r--r--contrib/groff/font/devlbp/HNI100
-rw-r--r--contrib/groff/font/devlbp/HNR100
-rw-r--r--contrib/groff/font/devlbp/HR100
-rw-r--r--contrib/groff/font/devlbp/Makefile.sub5
-rw-r--r--contrib/groff/font/devlbp/TB100
-rw-r--r--contrib/groff/font/devlbp/TBI100
-rw-r--r--contrib/groff/font/devlbp/TI100
-rw-r--r--contrib/groff/font/devlbp/TR100
-rw-r--r--contrib/groff/font/devlj4/ALBB295
-rw-r--r--contrib/groff/font/devlj4/ALBR295
-rw-r--r--contrib/groff/font/devlj4/AOB289
-rw-r--r--contrib/groff/font/devlj4/AOI292
-rw-r--r--contrib/groff/font/devlj4/AOR288
-rw-r--r--contrib/groff/font/devlj4/CB281
-rw-r--r--contrib/groff/font/devlj4/CBI281
-rw-r--r--contrib/groff/font/devlj4/CI281
-rw-r--r--contrib/groff/font/devlj4/CLARENDON281
-rw-r--r--contrib/groff/font/devlj4/CORONET281
-rw-r--r--contrib/groff/font/devlj4/CR281
-rw-r--r--contrib/groff/font/devlj4/GB292
-rw-r--r--contrib/groff/font/devlj4/GBI295
-rw-r--r--contrib/groff/font/devlj4/GI294
-rw-r--r--contrib/groff/font/devlj4/GR297
-rw-r--r--contrib/groff/font/devlj4/LGB281
-rw-r--r--contrib/groff/font/devlj4/LGI281
-rw-r--r--contrib/groff/font/devlj4/LGR281
-rw-r--r--contrib/groff/font/devlj4/MARIGOLD281
-rw-r--r--contrib/groff/font/devlj4/OB294
-rw-r--r--contrib/groff/font/devlj4/OBI295
-rw-r--r--contrib/groff/font/devlj4/OI297
-rw-r--r--contrib/groff/font/devlj4/OR297
-rw-r--r--contrib/groff/font/devlj4/TB299
-rw-r--r--contrib/groff/font/devlj4/TBI300
-rw-r--r--contrib/groff/font/devlj4/TI302
-rw-r--r--contrib/groff/font/devlj4/TR296
-rw-r--r--contrib/groff/font/devlj4/UB293
-rw-r--r--contrib/groff/font/devlj4/UBI292
-rw-r--r--contrib/groff/font/devlj4/UCB293
-rw-r--r--contrib/groff/font/devlj4/UCBI293
-rw-r--r--contrib/groff/font/devlj4/UCI295
-rw-r--r--contrib/groff/font/devlj4/UCR293
-rw-r--r--contrib/groff/font/devlj4/UI294
-rw-r--r--contrib/groff/font/devlj4/UR293
-rw-r--r--contrib/groff/font/devlj4/generate/Makefile4
-rw-r--r--contrib/groff/font/devlj4/generate/text.map99
-rw-r--r--contrib/groff/font/devps/AB544
-rw-r--r--contrib/groff/font/devps/ABI104
-rw-r--r--contrib/groff/font/devps/AI104
-rw-r--r--contrib/groff/font/devps/AR546
-rw-r--r--contrib/groff/font/devps/BMB546
-rw-r--r--contrib/groff/font/devps/BMBI104
-rw-r--r--contrib/groff/font/devps/BMI104
-rw-r--r--contrib/groff/font/devps/BMR546
-rw-r--r--contrib/groff/font/devps/CB535
-rw-r--r--contrib/groff/font/devps/CBI99
-rw-r--r--contrib/groff/font/devps/CI99
-rw-r--r--contrib/groff/font/devps/CR533
-rw-r--r--contrib/groff/font/devps/HB541
-rw-r--r--contrib/groff/font/devps/HBI103
-rw-r--r--contrib/groff/font/devps/HI131
-rw-r--r--contrib/groff/font/devps/HNB541
-rw-r--r--contrib/groff/font/devps/HNBI103
-rw-r--r--contrib/groff/font/devps/HNI131
-rw-r--r--contrib/groff/font/devps/HNR567
-rw-r--r--contrib/groff/font/devps/HR567
-rw-r--r--contrib/groff/font/devps/Makefile.sub4
-rw-r--r--contrib/groff/font/devps/NB537
-rw-r--r--contrib/groff/font/devps/NBI104
-rw-r--r--contrib/groff/font/devps/NI104
-rw-r--r--contrib/groff/font/devps/NR538
-rw-r--r--contrib/groff/font/devps/PB542
-rw-r--r--contrib/groff/font/devps/PBI102
-rw-r--r--contrib/groff/font/devps/PI103
-rw-r--r--contrib/groff/font/devps/PR540
-rw-r--r--contrib/groff/font/devps/S362
-rw-r--r--contrib/groff/font/devps/TB536
-rw-r--r--contrib/groff/font/devps/TBI103
-rw-r--r--contrib/groff/font/devps/TI104
-rw-r--r--contrib/groff/font/devps/TR540
-rw-r--r--contrib/groff/font/devps/ZCMI100
-rw-r--r--contrib/groff/font/devps/ZD372
-rw-r--r--contrib/groff/font/devps/ZDR372
-rw-r--r--contrib/groff/font/devps/generate/Makefile46
-rw-r--r--contrib/groff/font/devps/generate/dingbats.map3
-rw-r--r--contrib/groff/font/devps/generate/dingbats.rmap3
-rw-r--r--contrib/groff/font/devps/generate/lgreekmap3
-rw-r--r--contrib/groff/font/devps/generate/symbolchars3
-rw-r--r--contrib/groff/font/devps/generate/textmap104
-rw-r--r--contrib/groff/font/devps/prologue.ps25
-rw-r--r--contrib/groff/font/devps/symbolmap110
-rw-r--r--contrib/groff/font/devps/text.enc7
-rw-r--r--contrib/groff/font/devutf8/NOTES54
-rw-r--r--contrib/groff/font/devutf8/R.proto117
-rw-r--r--contrib/groff/man/Makefile.sub5
-rw-r--r--contrib/groff/man/ditroff.man199
-rw-r--r--contrib/groff/man/groff.man3067
-rw-r--r--contrib/groff/man/groff_char.man939
-rw-r--r--contrib/groff/man/groff_diff.man3650
-rw-r--r--contrib/groff/man/groff_font.man441
-rw-r--r--contrib/groff/man/groff_out.man2072
-rw-r--r--contrib/groff/man/groff_tmac.man1124
-rw-r--r--contrib/groff/man/roff.man1544
-rw-r--r--contrib/groff/src/devices/grodvi/Makefile.sub4
-rw-r--r--contrib/groff/src/devices/grodvi/dvi.cc82
-rw-r--r--contrib/groff/src/devices/grodvi/grodvi.man239
-rw-r--r--contrib/groff/src/devices/grohtml/Makefile.sub11
-rw-r--r--contrib/groff/src/devices/grohtml/grohtml.man96
-rw-r--r--contrib/groff/src/devices/grohtml/html-table.cc687
-rw-r--r--contrib/groff/src/devices/grohtml/html-table.h130
-rw-r--r--contrib/groff/src/devices/grohtml/html-text.cc581
-rw-r--r--contrib/groff/src/devices/grohtml/html-text.h124
-rw-r--r--contrib/groff/src/devices/grohtml/html.h3
-rw-r--r--contrib/groff/src/devices/grohtml/output.cc56
-rw-r--r--contrib/groff/src/devices/grohtml/post-html.cc2417
-rw-r--r--contrib/groff/src/devices/grolbp/Makefile.sub4
-rw-r--r--contrib/groff/src/devices/grolbp/grolbp.man79
-rw-r--r--contrib/groff/src/devices/grolbp/lbp.cc1038
-rw-r--r--contrib/groff/src/devices/grolbp/lbp.h2
-rw-r--r--contrib/groff/src/devices/grolj4/Makefile.sub4
-rw-r--r--contrib/groff/src/devices/grolj4/grolj4.man21
-rw-r--r--contrib/groff/src/devices/grolj4/lj4.cc59
-rw-r--r--contrib/groff/src/devices/grops/Makefile.sub6
-rw-r--r--contrib/groff/src/devices/grops/TODO3
-rw-r--r--contrib/groff/src/devices/grops/grops.man381
-rw-r--r--contrib/groff/src/devices/grops/ps.cc258
-rw-r--r--contrib/groff/src/devices/grops/ps.h3
-rw-r--r--contrib/groff/src/devices/grops/psrm.cc34
-rw-r--r--contrib/groff/src/devices/grotty/Makefile.sub4
-rw-r--r--contrib/groff/src/devices/grotty/grotty.man227
-rw-r--r--contrib/groff/src/devices/grotty/tty.cc319
-rw-r--r--contrib/groff/src/include/Makefile.sub5
-rw-r--r--contrib/groff/src/include/color.h87
-rw-r--r--contrib/groff/src/include/config.hin150
-rw-r--r--contrib/groff/src/include/driver.h8
-rw-r--r--contrib/groff/src/include/errarg.h7
-rw-r--r--contrib/groff/src/include/font.h6
-rw-r--r--contrib/groff/src/include/geometry.h27
-rw-r--r--contrib/groff/src/include/getopt.h25
-rw-r--r--contrib/groff/src/include/html-strings.h6
-rw-r--r--contrib/groff/src/include/htmlhint.h37
-rw-r--r--contrib/groff/src/include/lib.h57
-rw-r--r--contrib/groff/src/include/nonposix.h26
-rw-r--r--contrib/groff/src/include/paper.h37
-rw-r--r--contrib/groff/src/include/posix.h14
-rw-r--r--contrib/groff/src/include/printer.h61
-rw-r--r--contrib/groff/src/include/stringclass.h5
-rw-r--r--contrib/groff/src/libs/libbib/Makefile.sub10
-rw-r--r--contrib/groff/src/libs/libbib/index.cc5
-rw-r--r--contrib/groff/src/libs/libbib/linear.cc6
-rw-r--r--contrib/groff/src/libs/libbib/map.c9
-rw-r--r--contrib/groff/src/libs/libbib/search.cc7
-rw-r--r--contrib/groff/src/libs/libdriver/Makefile.sub4
-rw-r--r--contrib/groff/src/libs/libdriver/input.cc2156
-rw-r--r--contrib/groff/src/libs/libdriver/printer.cc119
-rw-r--r--contrib/groff/src/libs/libgroff/Makefile.sub97
-rw-r--r--contrib/groff/src/libs/libgroff/color.cc363
-rw-r--r--contrib/groff/src/libs/libgroff/errarg.cc20
-rw-r--r--contrib/groff/src/libs/libgroff/font.cc158
-rw-r--r--contrib/groff/src/libs/libgroff/fontfile.cc9
-rw-r--r--contrib/groff/src/libs/libgroff/geometry.cc286
-rw-r--r--contrib/groff/src/libs/libgroff/getopt.c349
-rw-r--r--contrib/groff/src/libs/libgroff/getopt1.c16
-rw-r--r--contrib/groff/src/libs/libgroff/htmlhint.cc59
-rw-r--r--contrib/groff/src/libs/libgroff/invalid.cc60
-rw-r--r--contrib/groff/src/libs/libgroff/itoa.c17
-rw-r--r--contrib/groff/src/libs/libgroff/matherr.c6
-rw-r--r--contrib/groff/src/libs/libgroff/maxfilename.cc2
-rw-r--r--contrib/groff/src/libs/libgroff/mksdir.cc34
-rw-r--r--contrib/groff/src/libs/libgroff/mkstemp.cc34
-rw-r--r--contrib/groff/src/libs/libgroff/nametoindex.cc9
-rw-r--r--contrib/groff/src/libs/libgroff/new.cc5
-rw-r--r--contrib/groff/src/libs/libgroff/paper.cc84
-rw-r--r--contrib/groff/src/libs/libgroff/putenv.c6
-rw-r--r--contrib/groff/src/libs/libgroff/searchpath.cc8
-rw-r--r--contrib/groff/src/libs/libgroff/strerror.c6
-rw-r--r--contrib/groff/src/libs/libgroff/string.cc38
-rw-r--r--contrib/groff/src/libs/libgroff/strtol.c7
-rw-r--r--contrib/groff/src/libs/libgroff/tmpfile.cc157
-rw-r--r--contrib/groff/src/libs/libgroff/tmpname.cc116
-rw-r--r--contrib/groff/src/preproc/eqn/Makefile.sub36
-rw-r--r--contrib/groff/src/preproc/eqn/box.cc26
-rw-r--r--contrib/groff/src/preproc/eqn/eqn.cc225
-rw-r--r--contrib/groff/src/preproc/eqn/eqn.h7
-rw-r--r--contrib/groff/src/preproc/eqn/eqn.man16
-rw-r--r--contrib/groff/src/preproc/eqn/lex.cc8
-rw-r--r--contrib/groff/src/preproc/eqn/limit.cc12
-rw-r--r--contrib/groff/src/preproc/eqn/main.cc58
-rw-r--r--contrib/groff/src/preproc/eqn/other.cc12
-rw-r--r--contrib/groff/src/preproc/eqn/over.cc13
-rw-r--r--contrib/groff/src/preproc/eqn/script.cc16
-rw-r--r--contrib/groff/src/preproc/eqn/sqrt.cc18
-rw-r--r--contrib/groff/src/preproc/grn/Makefile.sub10
-rw-r--r--contrib/groff/src/preproc/grn/README10
-rw-r--r--contrib/groff/src/preproc/grn/gprint.h2
-rw-r--r--contrib/groff/src/preproc/grn/grn.man29
-rw-r--r--contrib/groff/src/preproc/grn/hdb.cc23
-rw-r--r--contrib/groff/src/preproc/grn/hgraph.cc30
-rw-r--r--contrib/groff/src/preproc/grn/main.cc6
-rw-r--r--contrib/groff/src/preproc/html/Makefile.sub6
-rw-r--r--contrib/groff/src/preproc/html/pre-html.cc1005
-rw-r--r--contrib/groff/src/preproc/html/pushback.cc333
-rw-r--r--contrib/groff/src/preproc/html/pushback.h54
-rw-r--r--contrib/groff/src/preproc/pic/Makefile.sub22
-rw-r--r--contrib/groff/src/preproc/pic/common.cc1
-rw-r--r--contrib/groff/src/preproc/pic/common.h4
-rw-r--r--contrib/groff/src/preproc/pic/lex.cc70
-rw-r--r--contrib/groff/src/preproc/pic/main.cc18
-rw-r--r--contrib/groff/src/preproc/pic/object.cc141
-rw-r--r--contrib/groff/src/preproc/pic/object.h9
-rw-r--r--contrib/groff/src/preproc/pic/output.h8
-rw-r--r--contrib/groff/src/preproc/pic/pic.cc5565
-rw-r--r--contrib/groff/src/preproc/pic/pic.h8
-rw-r--r--contrib/groff/src/preproc/pic/pic.man221
-rw-r--r--contrib/groff/src/preproc/pic/pic.y196
-rw-r--r--contrib/groff/src/preproc/pic/pic_tab.h33
-rw-r--r--contrib/groff/src/preproc/pic/tex.cc26
-rw-r--r--contrib/groff/src/preproc/pic/troff.cc83
-rw-r--r--contrib/groff/src/preproc/refer/Makefile.sub14
-rw-r--r--contrib/groff/src/preproc/refer/command.cc7
-rw-r--r--contrib/groff/src/preproc/refer/label.cc13
-rw-r--r--contrib/groff/src/preproc/refer/refer.cc22
-rw-r--r--contrib/groff/src/preproc/refer/refer.h7
-rw-r--r--contrib/groff/src/preproc/soelim/Makefile.sub4
-rw-r--r--contrib/groff/src/preproc/soelim/soelim.cc5
-rw-r--r--contrib/groff/src/preproc/tbl/Makefile.sub6
-rw-r--r--contrib/groff/src/preproc/tbl/main.cc34
-rw-r--r--contrib/groff/src/preproc/tbl/table.h10
-rw-r--r--contrib/groff/src/preproc/tbl/tbl.man346
-rw-r--r--contrib/groff/src/roff/groff/Makefile.sub4
-rw-r--r--contrib/groff/src/roff/groff/groff.cc55
-rw-r--r--contrib/groff/src/roff/groff/groff.man1894
-rw-r--r--contrib/groff/src/roff/groff/pipeline.c24
-rw-r--r--contrib/groff/src/roff/groff/pipeline.h5
-rw-r--r--contrib/groff/src/roff/grog/Makefile.sub9
-rw-r--r--contrib/groff/src/roff/grog/grog.man7
-rw-r--r--contrib/groff/src/roff/grog/grog.pl28
-rw-r--r--contrib/groff/src/roff/grog/grog.sh12
-rw-r--r--contrib/groff/src/roff/nroff/nroff.man20
-rwxr-xr-xcontrib/groff/src/roff/nroff/nroff.sh15
-rw-r--r--contrib/groff/src/roff/troff/Makefile.sub20
-rw-r--r--contrib/groff/src/roff/troff/TODO3
-rw-r--r--contrib/groff/src/roff/troff/charinfo.h38
-rw-r--r--contrib/groff/src/roff/troff/dictionary.cc2
-rw-r--r--contrib/groff/src/roff/troff/div.cc23
-rw-r--r--contrib/groff/src/roff/troff/div.h2
-rw-r--r--contrib/groff/src/roff/troff/env.cc607
-rw-r--r--contrib/groff/src/roff/troff/env.h33
-rw-r--r--contrib/groff/src/roff/troff/input.cc1685
-rw-r--r--contrib/groff/src/roff/troff/node.cc650
-rw-r--r--contrib/groff/src/roff/troff/node.h51
-rw-r--r--contrib/groff/src/roff/troff/number.cc9
-rw-r--r--contrib/groff/src/roff/troff/request.h10
-rw-r--r--contrib/groff/src/roff/troff/symbol.cc14
-rw-r--r--contrib/groff/src/roff/troff/symbol.h9
-rw-r--r--contrib/groff/src/roff/troff/token.h21
-rw-r--r--contrib/groff/src/roff/troff/troff.h18
-rw-r--r--contrib/groff/src/roff/troff/troff.man2595
-rw-r--r--contrib/groff/src/utils/addftinfo/Makefile.sub6
-rw-r--r--contrib/groff/src/utils/addftinfo/addftinfo.cc5
-rw-r--r--contrib/groff/src/utils/afmtodit/afmtodit.man59
-rw-r--r--contrib/groff/src/utils/afmtodit/afmtodit.pl5
-rw-r--r--contrib/groff/src/utils/hpftodit/Makefile.sub4
-rw-r--r--contrib/groff/src/utils/hpftodit/hpftodit.cc23
-rw-r--r--contrib/groff/src/utils/indxbib/Makefile.sub6
-rw-r--r--contrib/groff/src/utils/indxbib/indxbib.cc26
-rw-r--r--contrib/groff/src/utils/indxbib/signal.c6
-rw-r--r--contrib/groff/src/utils/lkbib/Makefile.sub4
-rw-r--r--contrib/groff/src/utils/lkbib/lkbib.cc5
-rw-r--r--contrib/groff/src/utils/lookbib/Makefile.sub4
-rw-r--r--contrib/groff/src/utils/lookbib/lookbib.cc9
-rw-r--r--contrib/groff/src/utils/pfbtops/Makefile.sub4
-rw-r--r--contrib/groff/src/utils/pfbtops/pfbtops.c5
-rw-r--r--contrib/groff/src/utils/tfmtodit/Makefile.sub4
-rw-r--r--contrib/groff/src/utils/tfmtodit/tfmtodit.cc5
-rw-r--r--contrib/groff/src/utils/tfmtodit/tfmtodit.man20
-rw-r--r--contrib/groff/src/xditview/ChangeLog50
-rw-r--r--contrib/groff/src/xditview/DviChar.c1024
-rw-r--r--contrib/groff/src/xditview/Imakefile.in8
-rw-r--r--contrib/groff/src/xditview/parse.c27
-rw-r--r--contrib/groff/src/xditview/xditview.c4
-rw-r--r--contrib/groff/stamp-h.in1
-rwxr-xr-xcontrib/groff/test-groff13
-rw-r--r--contrib/groff/tmac/Makefile.sub12
-rw-r--r--contrib/groff/tmac/README20
-rw-r--r--contrib/groff/tmac/X.tmac77
-rw-r--r--contrib/groff/tmac/Xps.tmac87
-rw-r--r--contrib/groff/tmac/an-old.tmac128
-rw-r--r--contrib/groff/tmac/andoc.tmac5
-rw-r--r--contrib/groff/tmac/cp1047.tmac105
-rw-r--r--contrib/groff/tmac/doc-common20
-rw-r--r--contrib/groff/tmac/doc-ditroff29
-rw-r--r--contrib/groff/tmac/doc-nroff29
-rw-r--r--contrib/groff/tmac/doc.tmac120
-rw-r--r--contrib/groff/tmac/dvi.tmac801
-rw-r--r--contrib/groff/tmac/e.tmac40
-rw-r--r--contrib/groff/tmac/ec.tmac57
-rw-r--r--contrib/groff/tmac/groff_man.man62
-rw-r--r--contrib/groff/tmac/groff_mdoc.man104
-rw-r--r--contrib/groff/tmac/groff_ms.man1103
-rw-r--r--contrib/groff/tmac/groff_trace.man546
-rw-r--r--contrib/groff/tmac/groff_www.man415
-rw-r--r--contrib/groff/tmac/html.tmac706
-rw-r--r--contrib/groff/tmac/hyphen.us21
-rw-r--r--contrib/groff/tmac/latin1.tmac196
-rw-r--r--contrib/groff/tmac/lbp.tmac4
-rw-r--r--contrib/groff/tmac/lj4.tmac17
-rw-r--r--contrib/groff/tmac/ps.tmac605
-rw-r--r--contrib/groff/tmac/psold.tmac2
-rw-r--r--contrib/groff/tmac/pspic.tmac146
-rw-r--r--contrib/groff/tmac/s.tmac132
-rw-r--r--contrib/groff/tmac/trace.tmac54
-rw-r--r--contrib/groff/tmac/troffrc13
-rw-r--r--contrib/groff/tmac/troffrc-end10
-rw-r--r--contrib/groff/tmac/tty-char.tmac385
-rw-r--r--contrib/groff/tmac/tty.tmac104
-rw-r--r--contrib/groff/tmac/www.tmac626
-rw-r--r--contrib/groff/win32-diffs698
544 files changed, 131755 insertions, 43708 deletions
diff --git a/contrib/groff/ChangeLog b/contrib/groff/ChangeLog
index 452d4fe..926b60b 100644
--- a/contrib/groff/ChangeLog
+++ b/contrib/groff/ChangeLog
@@ -1,3 +1,3793 @@
+2002-10-08 Werner LEMBERG <wl@gnu.org>
+
+ * doc/webpage.ms, NEWS: Updated.
+
+2002-10-07 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/doc-common (Ss): Add final `.ns' (similar to `.Sh') to
+ suppress additional whitespace after the header.
+
+ * tmac/doc-ditroff, tmac/doc-nroff (Am): New string to be in sync
+ with NetBSD.
+
+ * src/preproc/grn/grn.man, tmac/groff_mdoc.man, NEWS: Updated.
+
+2002-10-07 Ruslan Ermilov <ru@FreeBSD.org>
+
+ * tmac/doc-common(doc-volume-operating-system-ateol): New flag.
+ (Dt): Use it to improve language localization (especially Russian
+ and French).
+
+2002-10-07 Daniel Senderowicz <daniel@synchrods.com>
+
+ * src/preproc/grn/gprint.h (BSPLINE, BEZIER): New macros.
+ * src/preproc/grn/hdb.cc (DBGetType): Parse spline and bezier
+ drawing commands.
+ * src/preproc/grn/hgraph.cc (drawwig): Add parameter to control
+ curve type.
+ Call `picurve' for BSPLINE.
+ (HGPrintElt): Handle BSPLINE.
+ * src/preproc/grn/README: Document it.
+
+2002-10-03 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/node.cc (break_char_node::col): New variable.
+ Updated constructor.
+ (space_node::tprint, word_space_node::tprint): Call `fill_color'
+ unconditionally.
+ (space_node::space_node): Remove assertion.
+ (break_char_node::add_self): Pass color argument to space node.
+ * src/roff/troff/input.cc (token::add_to_node_list, token::process):
+ Ditto.
+ * src/roff/troff/env.cc (environment::do_break,
+ environment::add_padding): Ditto.
+
+2002-10-02 Werner LEMBERG <wl@gnu.org>
+
+ Redesigning color support in troff. Colors are no longer
+ represented as separate nodes but are now part of glyph nodes and
+ friends. This fixes the current formatting misbehaviour due to the
+ changes introduced on 2002-09-20. Some extra code is necessary for
+ proper grotty support: Without adding color variables to
+ space-related nodes, the background color would be changed too late.
+
+ * src/roff/troff/node.h, src/roff/troff/node.cc:
+ s/current_pagecolor/current_fill_color/.
+ s/current_glyphcolor/current_glyph_color/.
+ (glyph_color_node, fill_color_node): Removed.
+ (node::get_glyph_color, node::get_fill_color): New virtual member
+ functions.
+ (space_node::col): New variable.
+ Updated constructors of space_node and derived classes accordingly.
+ (hmotion_node::col): New variable.
+ Updated constructors of hmotion_node and space_char_hmotion_node
+ accordingly.
+ (vmotion_node::col): New variable.
+ Updated constructor accordingly.
+ (draw_node::gcol, draw_node::fcol): New variables.
+ Updated constructor accordingly.
+ (special_node::gcol, special_node::fcol): New variables.
+ Updated constructors accordingly.
+ (troff_output_file::put_char, troff_output_file::put_charwidth,
+ troff_output_file::draw): Set glyph and fill color.
+ (troff_output_file::start_special): Set glyph and fill color.
+ Always set current font.
+ (troff_output_file::fill_color, troff_output_file::glyph_color):
+ Don't call `do_motion'.
+ (glyph_node::gcol, glyph_node::fcol): New variables.
+ Updated constructors of glyph_node and ligature_node accordingly.
+ (glyph_node::get_glyph_color, glyph_node::get_fill_color): New
+ member functions.
+ (glyph_node::merge_glyph_node,
+ kern_pair_node::add_discretionary_hyphen,
+ node::add_discretionary_hyphen): Updated.
+ (break_char_node::merge_self): Updated.
+ (word_space_node::tprint, space_node::tprint, hmotion_node::tprint,
+ vmotion_node::tprint): Handle color.
+ (make_glyph_node, make_node, node::add_char): Updated.
+
+ * src/roff/troff/env.cc (environment::space_newline,
+ environment::space, environment::output_line, environment::do_break,
+ environment::make_tab_node, environment::add_padding, title):
+ Updated.
+ (environment_switch, environment_copy): Don't add color nodes.
+
+ * src/roff/troff/input.cc (do_glyph_color, do_fill_color): Return
+ nothing.
+ (token::next): Updated.
+ \m and \M now are as transparent as \s.
+ (process_input_stack, token::add_to_node_list, token::process,
+ read_draw_node): Updated.
+ (charinfo_to_node_list): Don't add color nodes.
+
+ * doc/groff.texinfo: Updated.
+
+2002-09-27 Ruslan Ermilov <ru@FreeBSD.org>
+
+ * tmac/doc-common (ds-operating-system-FreeBSD-4.*): New version
+ strings.
+
+2002-09-27 Colin Watson <cjwatson@debian.org>
+
+ * src/roff/troff/node.cc (bracket_node::copy): Check `list' != 0.
+
+2002-09-23 Werner LEMBERG <wl@gnu.org>
+
+ * src/devices/grolbp/lbp.cc: Replace `300' with `font::res' where
+ appropriate.
+ (DEFAULT_LINEWIDTH_FACTOR): New macro.
+ (linewidth_factor): New global variable.
+ (lbp_printer::set_line_thickness): Fix case for size < 0, using
+ linewidth_factor.
+ (long_options): Add -w/--linewidth option.
+ (usage): Updated.
+ (main): Handle -w option to set linewidth_factor.
+ (lbp_printer::lbp_printer): Initialize req_linethickness, not
+ line_thickness.
+
+ * src/devices/grolbp/grolbp.man, NEWS, doc/webpage.ms: Updated.
+
+2002-09-22 Paco Andrés Verdú <pandres@dragonet.es>
+
+ Fixed a bug in the line thickness setting code.
+
+ * src/devices/grolbp/lbp.cc (lbp_printer::req_linethickness): New
+ variable.
+ (lbp_printer::set_line_thickness): Pass environment as second
+ parameter.
+ Implement it actually.
+ (lpb_printer::set_char, lbp_printer::draw): Use `req_linethickness'
+ and `set_line_thickness, depending on the current font size.
+
+2002-09-21 Werner LEMBERG <wl@gnu.org>
+
+ Some Debian patches.
+
+ * src/roff/groff/pipeline.h (MAX_COMMANDS): Increase to 12.
+ * src/roff/troff/node.cc (bracket_node::copy): Initialize
+ `list->last'.
+
+2002-09-20 Werner LEMBERG <wl@gnu.org>
+
+ * configure: Regenerated with autoconf 2.54.
+
+2002-09-20 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/env.h (environment): Rename cur_glyph_color to
+ glyph_color.
+ Rename cur_fill_color to fill_color.
+ * src/roff/troff/env.cc: Updated.
+
+2002-09-20 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/env.cc (title): Copy color status after processing
+ title.
+ * src/roff/troff/input.cc (charinfo_to_node_list): Emit glyph and
+ fill color nodes to reset colors properly.
+
+ * tmac/www.tmac (DC): Fix color handling.
+
+ * src/preproc/pic/pic.man, doc/pic.ms: Document some color issues.
+ * doc/groff.texinfo: Fixing documentation of `tl' request.
+ * doc/webpage.ms: Updated.
+
+2002-09-19 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/env.cc (environent_switch, environment_copy):
+ Emit glyph and fill color nodes to initialize colors properly.
+
+2002-09-17 Colin Watson <cjwatson@debian.org>
+
+ * src/roff/troff/env.cc (environment::set_glyph_color,
+ environment::set_fill_color): Fix typo which prevented \m[] work
+ correctly.
+
+2002-09-17 Werner LEMBERG <wl@gnu.org>
+
+ Add left and right italic correction to non-slanted PS fonts. This
+ is an experimental feature to improve image rendering of grohtml.
+
+ * font/devps/generate/Makefile (RFLAG): New variable, set to `-i 0'.
+ ({T,H,C,P,N,BM,A,HN}{R,B}, ZD, S, ZDR): Use it.
+ * font/devps/*: All non-slanted fonts regenerated.
+ * NEWS: Updated.
+
+2002-09-16 Werner LEMBERG <wl@gnu.org>
+
+ Add a site-specific font directory.
+
+ * Makefile.in (localfontdir, legacyfontdir): New variables.
+ (fontpath): Use them.
+ (MDEFINES, uninstall_dirs): Updated.
+ * Makefile.comm (.man.n): Add `LOCALFONTDIR' and `LEGACYFONTDIR'.
+ Remove `FONTPATH' and `MACROPATH'.
+
+ * src/roff/troff/troff.man, NEWS: Updated.
+ * doc/groff.texinfo (Font Directories): New section.
+ Other minor fixes.
+
+ * src/devices/grodvi/grodvi.man, src/devices/grohtml/grohtml.man,
+ src/devices/grolbp/grolbp.man, src/devices/grolj4/grolj4.man,
+ src/preproc/grn/grn.man: Minor fixes.
+
+ * src/devices/grohtml/post-html.cc (html_printer::do_tab_ts):
+ Remove unused variable.
+
+2002-09-11 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo, man/groff_font.man: Clarify argument of \N.
+ * man/groff_out.man: Fix documentation of 'N'.
+
+2002-09-09 Gaius Mulley <gaius@glam.ac.uk>
+
+ * doc/Makefile.in (webpage.html): Depend on gnu.eps also.
+ * src/roff/troff/env.cc (indent): Emit html tag only if break_flag is
+ set.
+ * src/devices/grohtml/post-html.cc (text_glob::is_br_ni): Removed.
+ (text_glob::is_br, html_printer::lookahead_for_tables): Updated.
+ (html_printer::do_tab_ts): Call `emit_table_header' with `FALSE'.
+ * src/devices/grohtml/html-text.cc (html_text::start_tag) <P_TAG,
+ PRE_TAG>: Call `begin' with `FALSE'.
+
+2002-09-09 Ralph Corderoy <ralph@inputplus.demon.co.uk>
+
+ * src/libs/libgroff/string.cc (string::extract): Fix position of
+ terminating null byte.
+
+2002-09-08 Werner LEMBERG <wl@gnu.org>
+
+ Add global option `nospaces' to tbl so that leading and trailing
+ spaces in data items are ignored.
+
+ * src/libs/libgroff/string.cc (string::remove_spaces): New member
+ function to remove leading and trailing spaces.
+ * src/include/stringclass.h: Updated.
+
+ * src/preproc/tbl/table.h (table): Add flag `NOSPACES'.
+
+ * src/preproc/tbl/main.cc (process_options): Handle `nospaces'
+ option.
+ Fix typo in error messages.
+ (process_data): Implement `nospaces' option.
+ * src/preproc/tbl/tbl.man, NEWS, doc/webpage.ms: Updated.
+
+2002-09-07 Werner LEMBERG <wl@gnu.org>
+
+ * src/include/config.hin: Add `HAVE_ISATTY'.
+ * src/libs/libgroff/tmpfile.cc (xtmpfile_list): Drop `const' for
+ `fname' member.
+ * src/libs/libgroff/tmpname.cc: Include `time.h'.
+ * src/libs/libdriver/input.cc (Char): Add `operator==' and
+ `operator!=' for `char'.
+ * doc/groff.texinfo: Replace @ifnottex block for top node with
+ @ifhtml block.
+
+2002-09-06 Werner LEMBERG <wl@gnu.org>
+
+ * doc/Makefile.in (.texinfo.html): Add -I switch.
+ * doc/groff.texinfo: Add @ifnottex block for top node to make
+ translation to HTML work.
+
+2002-09-05 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/preproc/html/pre-html.cc (LETTER_LENGTH): Removed.
+ (get_papersize, determine_vertical_offset): Removed.
+ (char_buffer::do_image): Always specify letter size.
+ (main): Updated.
+ (imageList::createPage): Use -dDEVICEHEIGHTPOINTS instead of
+ -sPAPERSIZE.
+
+2002-09-05 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo, tmac/groff_man.man: Improve documentation of
+ default indentation.
+
+2002-09-04 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/preproc/html/pre-html.cc (imageList::createPage): Use
+ -sPAPERSIZE for gs.
+ (generateImages): Clean up push-back buffer.
+
+2002-09-04 Ralph Corderoy <ralph@inputplus.demon.co.uk>
+
+ * doc/groff.texinfo: Minor fixes.
+
+2002-08-21 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/preproc/html/pre-html.cc (DEFAULT_LINE_LENGTH): New macro.
+ (MAX_WIDTH, A4_LENGTH, A4_OFFSET, LETTER_OFFSET): Removed.
+ (gsPaper): Removed.
+ (determine_vertical_offset): Use LETTER_LENGTH.
+ (createPage): Moved to ...
+ (imageList::createPage): This.
+ Call gs with -dDEVICEWIDTHPOINTS to avoid cropping.
+ (imageList::getMaxX): New function.
+ (createImage): Moved to ...
+ (imageList::createImage): This.
+ (imageList::createImages): New function.
+ (generateImages): Read `maxx' directly.
+ Updated.
+ (scanArguments): Don't specify `gsPaper' for `-o'.
+ (makeTempFiles): Call `xtmpfile' with the last argument set to
+ `TRUE'.
+
+2002-08-24 Werner LEMBERG <wl@gnu.org>
+
+ * src/include/nonposix.h (mkdir, WAIT, creat) [_MSC_VER]: Define.
+ (WAIT, _WAIT_CHILD) [!_MSC_VER]: Define.
+ * src/preproc/html/pre-html.cc (waitForChild): Use WAIT.
+ * src/preproc/html/pushback.cc: Include nonposix.h.
+ * src/roff/groff/pipeline.c: Define strcasecmp and strncasecmp
+ conditionally.
+
+2002-08-23 Werner LEMBERG <wl@gnu.org>
+
+ Use $(OBJEXT) for the object file extension.
+
+ * Makefile.comm (.SUFFIXES): Add .obj.
+ (.cc.obj, .c.obj): New implicit rules.
+ * Makefile.in (OBJEXT): New variable, initialized from autoconf.
+ (MDEFINES): Add EXEEXT and OBJEXT.
+ * */Makefile.sub: s/.o/.$(OBJEXT)/.
+
+2002-08-22 Werner LEMBERG <wl@gnu.org>
+
+ * INSTALL: Mention texinfo 4.2 as a prerequisite.
+
+2002-08-21 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/devices/grohtml/post-html.cc (colType): Make enum global to
+ the file.
+ (html_printer::update_min_max, html_printer::add_table_end): New
+ methods.
+ (html_printer::lookahead_for_tables): Use them.
+ Reset page offset correctly.
+ (html_printer::~html_printer): Add creation of creator comment up.
+
+2002-08-20 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/an-old.tmac (T&): New dummy macro to avoid warning.
+ * man/groff_tmac.man: Fix typos.
+ * man/groff_font.man: Minor reordering.
+ * contrib/eqn2graph/eqn2graph.man (Tp): New macro.
+ * contrib/groffer/groffer.man: Fix typos.
+
+2002-08-18 Gaius Mulley <gaius@glam.ac.uk>
+
+ Avoid endless loops while scanning for tables.
+
+ * src/devices/grohtml/post-html.cc (list::insert): Set
+ ptr->right->left.
+ (html_printer::next_horiz_pos): Add `text_glob' argument; update
+ all callers.
+ Return immediately if that argument is NULL.
+ (html_printer::calc_nf): Don't test if `g' is NULL.
+ (html_printer::lookahead_for_tables): Use
+ `glyphs.move_right_get_data'.
+ Don't test if `g' is NULL.
+
+2002-08-18 Gaius Mulley <gaius@glam.ac.uk>
+
+ A better fix, replacing fix 2002-08-15, for increasing SIZE.
+
+ * src/devices/grohtml/post-html.cc (char_block): Make `buffer'
+ a pointer.
+ (char_block::char_block): Allocate `buffer'.
+ (char_buffer::add_string): Use it.
+
+2002-08-15 Werner LEMBERG <wl@gnu.org>
+
+ * src/devices/grops/grops.man, src/devices/grolj4/grolj4.man,
+ src/devices/grodvi/grodvi.man: Document default line thickness.
+
+2002-08-15 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/devices/grohtml/post-html.cc (char_block): Increase SIZE to
+ 8192.
+
+2002-08-14 Werner LEMBERG <wl@gnu.org>
+
+ * doc/webpage.ms: Updated.
+
+2002-08-09 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/node.cc (node::add_char): Call `freeze_space' for
+ unbreakable space.
+
+2002-08-08 Aaron Campbell <aaron@monkey.org>
+
+ * src/preproc/pic/object.cc (object_spec::make_move): Fix typo
+ (&& -> &).
+
+2002-08-08 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (read_rgb, read_cmy, read_cmyk): Call
+ tok.next().
+ (read_gray): Ditto.
+ Don't push back a space but a newline onto the stack.
+
+2002-08-07 Gaius Mulley <gaius@glam.ac.uk>
+
+ Add fonts `CI', `CB', and `CBI' to grohtml which have been omitted
+ inadvertently.
+
+ * src/devices/grohtml/post-html.cc (html_printer::end_font,
+ html_printer::start_font): Handle them.
+ * src/devices/grohtml/html-text.cc (html_text::do_italic): Don't
+ reset bold and tt.
+ (html_text::do_bold): Don't reset italic and tt.
+ (html_text::do_tt, html_text::do_pre): Don't reset bold and italic.
+ * font/devhtml/DESC.proto: Add those fonts.
+ * font/devhtml/Makefile.sub (PROTOFONTS): Updated.
+
+2002-08-07 Werner LEMBERG <wl@gnu.org>
+
+ * MORE.STUFF: Added gpresent.
+
+ * tmac/trace.tmac: Show nesting level by a corresponding amount of
+ whitespace before printing the logging message.
+
+2002-07-31 Colin Watson <cjwatson@debian.org>
+
+ * src/devices/grohtml/html-table.cc (html_table::finish_row):
+ Initialize `n' to zero. This fixes a segfault on ARM.
+
+2002-07-30 Werner LEMBERG <wl@gnu.org>
+
+ * doc/grnexmpl.me: Remove calls to .st and .sc which are undefined.
+
+2002-07-29 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/pic/pic.y (print_arg, relative_path): Add missing
+ final semicolon.
+
+2002-07-28 Colin Watson <cjwatson@debian.org>
+
+ * src/devices/grohtml/post-html (html_printer::troff_tag): Handle
+ `.ps'.
+ (html_printer::html_printer): Initialize `pointsize'.
+
+2002-07-26 Werner LEMBERG <wl@gnu.org>
+
+ * doc/Makefile.sub (PROCESSEDEXAMPLEFILES): Remove gnu.eps and
+ gnu.png.
+ (CLEANNOTSRCDIRADD): Add gnu.eps and gnu.png.
+ (gnu.eps): Add -rle switch to pnmtops.
+ (distfiles): Add gnu.eps and gnu.png.
+
+2002-07-25 Petter Reinholdtsen <pere@hungry.com>
+
+ * src/libs/libdriver/input.cc (Char): Add const to `operator=='.
+ Add `operator!='.
+
+2002-07-24 Werner LEMBERG <wl@gnu.org>
+
+ * doc/Makefile.in, doc/Makefile.sub (groff_bin_path): Don't use
+ ' \+' but ' *' for sed.
+ (GROFF): Set GROFF_COMMAND_PREFIX to empty value.
+
+2002-07-23 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Document `papersize' keyword.
+ * NEWS, man/groff_font.man: Updated.
+
+2002-07-23 Colin Watson <cjwatson@debian.org>
+
+ Extend papersize keyword to accept more than a single entry. The
+ first valid will be used.
+
+ * src/libs/libgroff/font.cc (font::load_desc): Implement it.
+ (font::scan_papersize): Really skip final newline.
+ * src/preproc/html/pre-html.cc (get_papersize): Ditto.
+
+2002-07-23 Werner LEMBERG <wl@gnu.org>
+
+ * configure.ac: Test for isatty.
+ * configure: Regenerated.
+ * src/include/posix.h: Check HAVE_ISATTY.
+ * src/roff/troff/input.cc [ISATTY_MISSING]: Removed.
+ * src/utils/lookbib/lookbib.cc: Include posix.h.
+ Don't declare isatty.
+
+2002-07-21 Werner LEMBERG <wl@gnu.org>
+
+ * NEWS: Add `output' request.
+
+ * REVISION: Increased to 1.
+
+Version 1.18.0 released
+=======================
+
+2002-07-19 Gaius Mulley <gaius@glam.ac.uk>
+
+ Allow internal glyph indices > 0xFF in grohtml for input characters.
+
+ * src/devices/grohtml/post-html.cc (to_unicode): Use `unsigned int'
+ as parameter.
+ (html_printer::add_to_sbuf): Use `unsigned int' as first parameter.
+ Updated all callers.
+ (html_printer::sbuf_continuation, html_printer::overstrike): Ditto.
+ (html_printer): Updated.
+
+2002-07-19 Werner LEMBERG <wl@gnu.org>
+
+ * font/devhtml/R.proto: Updated to HTML 4, adding many glyphs.
+ * font/devutf8/R.proto: Adding some missing glyphs.
+ * font/devutf8/NOTES: Updated.
+
+ * tmac/dvi.tmac: Add more composite glyphs.
+ * tmac/html.tmac: Updated.
+
+ * man/groff_char.man: Add `sum' and `product' entities.
+
+ * NEWS: Updated.
+
+2002-07-18 Gaius Mulley <gaius@glam.ac.uk>
+
+ Improved table, tab, and indenting support.
+
+ * src/roff/troff/input.cc (file_iterator::suppress_newline_flag,
+ string_iterator::suppress_newline_flag): Removed. Updated all
+ function which have used it.
+
+ * src/roff/troff/env.cc: Include `input.h'.
+ (environment::add_node): Accept 0 as parameter.
+ (environment::add_html_tag): Add `force' parameter.
+ Updated all callers.
+ (environment::add_html_tag_tabs): Ditto.
+ For the moment, support left-aligned tabs only.
+ (environment::make_html_tag): New function.
+ (fill, no_fill): Set .br html tag additionally.
+ (environment::newline): Emit `eol.ce' or `eol' tag for html.
+ (environment::add_html_tag_eol): Removed.
+ (tab_stops::distance_to_next_tab): Add variant for handling
+ nextpos'.
+ (environment::distance_to_next_tab): Ditto.
+ Updated all callers.
+ (environment::handle_tab): Handle tabs for html.
+
+ * src/roff/troff/env.h: Updated.
+
+ * src/roff/troff/div.cc: Updated all callers of
+ `environment::add_html_tag'.
+
+ * src/devices/grohtml/html-table.cc,
+ src/devices/grohtml/html-table.h: New files.
+
+ * src/devices/grohtml/html-text.cc (html_text): New members
+ `blank_para' and `start_space'.
+ (html_text::issue_tag): Don't emit TABLE_TAG.
+ Handle indentation for PRE_TAG and P_TAG.
+ (html_text::end_tag): Updated.
+ (html_text::table_is_void, html_text::issue_table_begin,
+ html_text::issue_table_end): Removed.
+ (html_text::do_push): Simplified.
+ [DEBUGGING]: Small fix.
+ (html_text::push_para): Add new parameter for indentation; updated
+ all callers.
+ Handle PRE_TAG.
+ (html_text::do_indent, html_text::do_table, html_text::done_table,
+ html_text::is_in_table): Removed.
+ (html_text::do_pre): Handle P_TAG also.
+ (html_text::shutdown): Handle p->indent.
+ (html_text::check_emit_text): Simplified.
+ (html_text::do_emittext): Reset `blank_para'.
+ (html_text::do_para): Add new parameter for indentation; updated
+ all callers.
+ (html_text::remove_indent): New function.
+ (html_text::do_space): Handle verbatim text properly.
+ (html_text::ever_emitted_text, html_text::starts_with_space,
+ html_text::remove_para_align): New functions.
+ (html_text::dump_stack_element, html_text::dump_stack): Updated.
+
+ * src/devices/grohtml/html_text.h (HTML_TAG): Remove TABLE_TAG.
+ Updated.
+
+ * src/devices/grohtml/post-html.cc: Include html-table.h.
+ (INDENTATION): Removed.
+ (text_glob): Added many `is_<foo>' functions.
+ Added table description `tab'.
+ Added `get_arg',`get_tab_args', `remember_table', and `get_table'
+ member functions.
+ (list): Add `insert' and `move_to' member functions.
+ (page): Add `insert_tag' member function.
+ (page::dump_page) [DEBUG_TABLES]: Improved.
+ (html_printer): Add `table' and `max_linelength' elements.
+ Add many `do_<foo>', `insert_<foo>', `next_horiz_pos',
+ `lookahead_for_tables', `shutdown_table', `calc_nf', `calc_po_in',
+ `remove_tabs', `remove_courier_tabs'.
+ (html_printer::emit_raw): Handle indentation.
+ (html_printer::do_center, html_printer::write_header): Updated.
+ (html_printer::is_courier_until_eol): Check for tag.
+ (html_printer::do_linelength): Handle max_linelength.
+ (html_printer::do_page_offset, html_printer::do_indentation): Handle
+ fill_on.
+ (html_printer::do_tempindent): Updated.
+ (html_printer::do_indentedparagraph): Removed.
+ (html_printer::do_indent): Simplified.
+ (html_printer::do_eol): Use `ever_emitted_text'.
+ (html_printer::do_flush, html_printer::do_links): Don't call
+ done_table.
+ (html_printer::do_break): Handle end_tempindent.
+ (html_printer::troff_tag): Get argument.
+ Don't handle `.ip'.
+ Handle `.tab-ts', `.tab-te', `.col', `tab', and `tab0' tags.
+ (html_printer::flush_page): Call `lookahead_for_tables'.
+ Don't call `done_table'.
+ (html_printer::add_to_sbuf): Always call do_indent.
+
+ * src/devices/grohtml/Makefile.sub: Updated.
+
+ * tmac/an-old.tmac (TP): Don't handle html device specially.
+ (an-do-tag-html): New function which will be used instead of
+ `an-do-tag' if html device is used.
+
+ * tmac/html.tmac: Call .po to pass default page offset to grohtml.
+
+ * tmac/s.tmac (@IP): Don't handle html device specially.
+ (@IP-html): New function which will be used instead of `@IP' if
+ html device is used.
+
+ * tmac/www.tmac (HTML-NS, HTML-TAG-NS): New auxiliary macros -- this
+ is a hack which will eventually vanish again.
+ (PIMG): Handle `-C' option correctly if not html.
+ (HR): Use HTML-NS.
+
+2002-07-17 Werner LEMBERG <wl@gnu.org>
+
+ * src/utils/afmtodit/afmtodit.pl: Don't use `-P-' for invoking perl.
+
+2002-07-14 Eric S. Raymond <esr@thyrsus.com>
+
+ * contrib/pic2graph/pic2graph.*: Use convert(1).
+ * contrib/eqn2graph/eqn2graph.*: Minor fixes.
+
+2002-07-14 Bernd Warken <bwarken@mayn.de>
+
+ * tmac/groff_trace.man: New file.
+ * tmac/Makefile.sub: Updated.
+ * NEWS: Updated.
+
+2002-07-13 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/groff/groff.man: Add some cross references.
+
+2002-07-12 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (substring_request): Add warnings for
+ string indices out of range.
+
+2002-07-11 Werner LEMBERG <wl@gnu.org>
+
+ * font/devdvi/generate/ec.map: Fix typo (`(l' -> `/l').
+ * font/devdvi/*EC: Regenerated.
+
+2002-07-10 Bernd Warken <bwarken@mayn.de>
+
+ * man/groff_char.man: Updated and extended.
+
+2002-07-10 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (length_macro): Renamed to...
+ (length_request): This.
+ Move call of `tok.next()' to the very end, otherwise the register
+ value hasn't been updated yet.
+ (init_input_requests): Updated.
+
+2002-07-09 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (substring_macro): Renamed to...
+ (substring_request): This.
+ (init_input_requests): Updated.
+ * src/roff/troff/request.h: Updated.
+
+2002-07-08 Robert D. Goulding <goulding@Princeton.EDU>
+
+ * src/roff/grog/grog.sh: Fix typo.
+
+2002-07-08 Werner LEMBERG <wl@gnu.org>
+
+ * win32-diffs: Updated.
+
+ Handle `papersize' keyword properly in DESC.
+
+ * src/libs/libgroff/font.cc (font::scan_papersize): Fix argument
+ type.
+ Updated all callers.
+ * src/libs/libgroff/paper.cc: Add four more paper formats used by
+ grolj4.
+ * src/include/paper.h: Updated.
+
+ * src/devices/grolbp/lbp.cc: Remove unnecessary semicolons.
+ Other minor C syntax fixes.
+ (papersize, paperlength, paperwidth): Renamed to `user_*'.
+ (lbp_printer): Add `papersize', `paperlength', and `paperwidth'
+ members.
+ (lbp_printer::lbp_printer): Pass three arguments.
+ Set paper dimensions properly.
+ (make_printer, main): Updated.
+ (handle_unknown_desc_command): Fix error messages.
+ (main): Handle papersize keyword in DESC properly.
+
+ * src/devices/grolj4/lj4.cc (paper_size): Renamed to
+ `user_paper_size'.
+ (lbp_printer::lbp_printer): Pass an argument.
+ Set paper_size properly.
+ (handle_unknown_desc_command): Removed.
+ (make_printer, main): Updated.
+ * src/devices/grolj4/grolj4.man: Minor documentation fix.
+
+ * man/groff_font.man, NEWS: Updated.
+
+2002-07-07 Werner LEMBERG <wl@gnu.org>
+
+ Integrated eqn2graph, contributed by Eric S. Raymond.
+
+ * contrib/eqn2graph/{Makefile.sub, eqn2graph.sh, eqn2graph.man}: New
+ files.
+ * Makefile.in, NEWS: Updated.
+
+2002-06-04 Werner LEMBERG <wl@gnu.org>
+
+ Changing the substring request to make it fit better with other
+ string manipulation functions in other programming languages:
+ Index 0 is now the first character in the string, and index -1
+ indicates the last character. Since this request didn't work
+ properly anyway in the last release, it doesn't harm too much to
+ change the syntax.
+
+ * src/roff/troff/input.cc (substring_macro): Use loops to get
+ the real string length (ignoring COMPATIBLE_SAVE and
+ COMPATIBLE_RESTORE) and offsets.
+ Implement change described above.
+
+ * man/groff_char.man, tmac/doc-common (doc-header), tmac/doc.tmac
+ (doc-do-Bd-args, doc-do-Bl-args: Changed accordingly.
+
+ * NEWS, doc/groff.texinfo, man/groff_diff.man: Updated.
+
+2002-06-03 Werner LEMBERG <wl@gnu.org>
+
+ Make .chop work with .de1 and friends. COMPATIBLE_SAVE and
+ COMPATIBLE_RESTORE are completely ignored.
+
+ * src/roff/troff/input.cc (char_list::set, char_list::get): New
+ functions.
+ (macro): `length' field renamed to `len'.
+ Added new field `empty_macro' (1 if macro is empty), to be used
+ instead of checking `len'.
+ Updated all callers.
+ (macro::empty): Updated.
+ (macro::length, macro::set, macro::get): New functions.
+ (macro::append): Ignore COMPATIBLE_SAVE and COMPATIBLE_RESTORE.
+ Set `empty_macro'.
+ (chop_macro): Check and remove trailing COMPATIBLE_SAVE/
+ COMPATIBLE_RESTORE pairs.
+ (asciify): Ignore COMPATIBLE_SAVE and COMPATIBLE_RESTORE.
+ * src/roff/troff/request.h: Updated.
+
+ * doc/groff.texinfo: Document .chop's behaviour better.
+
+2002-06-02 Werner LEMBERG <wl@gnu.org>
+
+ * doc/pic.ms: Fix documentation for the addition of positions.
+
+ * tmac/doc.tmac, tmac/an-old.tmac: Need groff version 1.18.
+
+2002-06-29 Werner LEMBERG <wl@gnu.org>
+
+ Implementation of string arguments of the form \*[foo arg1 arg2 ...]
+
+ * src/roff/troff/input.cc (have_string_arg): New global variable.
+ (read_mode): New enumeration.
+ (read_escape_name): Use it. Update all calls.
+ (read_long_escape_name): Use it. Update all calls.
+ Set have_string_arg if appropriate.
+ (get_char_for_escape_name): Add parameter for handling space
+ character.
+ (interpolate_string_with_args, decode_string_args): New functions.
+ (get_copy, token::next): Call it if necessary.
+ (interpolate_string): Fix error message.
+
+ * NEWS, doc/groff.texinfo, man/groff.man, man/groff_diff.man:
+ Document it.
+
+2002-06-24 Bernd Warken <bwarken@mayn.de>
+
+ * man/groff_tmac.man: Updated and extended.
+
+2002-06-24 Werner LEMBERG <wl@gnu.org>
+
+ * doc/pic.ms, src/preproc/pic/pic.man: Fix description of `:='.
+
+2002-06-23 Werner LEMBERG <wl@gnu.org>
+
+ * doc/pic.ms: Improve documentation of composite block objects.
+
+2002-06-22 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (init_registers): Add three registers
+ `seconds', `minutes', and `hours' to hold the current time.
+
+ * NEWS, doc/groff.texinfo, man/groff.man, man/groff_diff.man:
+ Updated.
+
+2002-06-20 Werner LEMBERG <wl@gnu.org>
+
+ Make \X accept both `\ ' and `\~', converting them to single space
+ characters.
+
+ * src/roff/troff/token.h (token): Add TOKEN_UNSTRETCHABLE_SPACE.
+ (token::unstretchable_space): New inline function.
+ * src/roff/troff/input.cc (token::next, token::delimiter,
+ token::description, token::add_to_node_list, token::process): Handle
+ TOKEN_UNSTRETCHABLE_NODE.
+ (encode_char): Handle tok.stretchable_space and
+ tok.unstretchable_space.
+
+ * NEWS, doc/groff.texinfo: Document it..
+
+2002-06-19 Werner LEMBERG <wl@gnu.org>
+
+ * src/devices/grops/ps.cc (ps_printer::special): Fix error message.
+
+ * src/devices/grotty/tty.cc (tty_printer::special): Add `sgr'
+ keyword to enable/disable SGR output.
+ (tty_printer::change_fill_color): New function.
+ * NEWS, src/devices/grotty/grotty.man: Document `sgr' special.
+
+ * src/roff/troff/input.cc (output_request): Add missing `tok.next()'
+ call.
+
+2002-06-18 Werner LEMBERG <wl@gnu.org>
+
+ Add a `color' request and a `.color' register to control usage of
+ colours.
+
+ * src/roff/troff/input.cc (disable_color_flag): Replaced with...
+ (color_flag): This (which is the inverse).
+ (activate_color): New function.
+ (main, init_input_requests): Updated.
+ * src/roff/troff/troff.h, src/roff/troff/node.cc
+ (troff_output_file::fill_color, troff_output_file::glyph_color):
+ Updated.
+
+ * NEWS, doc/groff.texinfo, man/groff_diff.man, man/groff.man:
+ Document the changes.
+
+2002-06-17 Colin Watson <cjwatson@debian.org>
+
+ Circumvent bug in autoconf 2.53 regarding top_builddir.
+
+ * aclocal.m4 (GROFF_BUILDDIR): s/top_builddir/groff_top_builddir/.
+ * Makefile.in, doc/Makefile.in:
+ s/@top_builddir@/@groff_top_builddir@/.
+ * configure: Regenerated (with autoconf 2.53).
+
+2002-06-17 Werner LEMBERG <wl@gnu.org>
+
+ * src/libs/libgroff/font.cc (font::load_desc): Fix computation of
+ `paperwidth' and `paperlength' for the `papersize' keyword.
+
+2002-06-16 P. Alejandro Lopez-Valencia <dradul@007mundo.com>
+
+ * src/devices/grops/grops.man: Add info about Type 42 fonts.
+
+2002-06-15 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/devices/grohtml/post-html.cc (html_printer::emit_raw,
+ html_printer::do_linelength, html_printer::do_pageoffset,
+ html_printer::do_indentation, html_printer::do_tempindent,
+ html_printer::do_break, html_printer::begin_page): Clear indented
+ text.
+ * tmac/html.tmac: Disable hyphenation.
+
+2002-06-15 Werner LEMBERG <wl@gnu.org>
+
+ Don't produce HTML files if utility programs are missing.
+
+ * Makefile.in (make_html, make_install_html): New variables.
+ (MDEFINES): Updated.
+
+ * aclocal.m4 (GROFF_HTML_PROGRAMS): New function to test for HTML
+ utility programs.
+ * configure.ac: Use it.
+ * configure: Regenerated.
+
+ * doc/Makefile.sub (PROCESSEDEXAMPLEFILES): Move webpage.html to...
+ (HTMLEXAMPLESFILES): This new variable.
+ (EXAMPLESIMAGEFILES): Renamed to...
+ (HTMLEXAMPLEIMAGEFILES): This.
+ (CLEANADD): Add HTMLEXAMPLEFILES.
+ (all): Use `make_html'.
+ (html): New target.
+ (install_data): Use `make_install_html'.
+ Move html stuff to...
+ (install_html): This new target.
+ (uninstall_sub): Updated.
+
+2002-06-14 Bernd Warken <bwarken@mayn.de>
+
+ * src/roff/grog/Makefile.sub (grog): Renamed to...
+ (grog.old): This.
+ (grog): New rule to always install grog.sh as grog.
+
+2002-06-08 Bernd Warken <bwarken@mayn.de>
+
+ * src/roff/grog/grog.pl: Fix typo.
+
+2002-06-07 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Add more info on .tr arguments.
+
+2002-06-05 Werner LEMBERG <wl@gnu.org>
+
+ * NEWS, src/roff/grog/grog.man, doc/groff.texinfo: Updated.
+
+ * aclocal.m4 (GROFF_MKSTEMP): Include unistd.h.
+ * configure: Regenerated.
+
+2002-06-05 Ralph Corderoy <ralph@inputplus.demon.co.uk>
+
+ * src/roff/troff/symbol.cc (table_sizes): Add more values.
+
+ * src/roff/grog/grog.pl, src/roff/grog/grog.sh: Recognize mom.
+
+2002-06-04 Werner LEMBERG <wl@gnu.org>
+
+ * aclocal.m4 (GROFF_PAGE): Don't use `prefix' directly since it
+ is not initialized at the time we need it in case `--prefix' hasn't
+ been set. Check for `ac_default_prefix' also.
+ Test for `papersize' keyword also and generalize allowed whitespace.
+ * configure: Regenerated.
+
+ * font/devps/Makefile.sub (DESC): Use `papersize' instead of
+ `paperlength'.
+
+ * src/libs/libgroff/Makefile.sub (version, revision): Replaced
+ with...
+ (src_version, src_revision): New variables to avoid overwriting
+ from parent make process.
+ (version.cc): Updated.
+
+ * src/preproc/html/pre-html.cc: Include paper.h and font.h.
+ (linebuf, linebufsize): New global variables.
+ (sys_fatal): Use `fatal' to abort properly.
+ (get_line): New function.
+ (get_resolution): Use it.
+ Improve error messages.
+ (get_papersize): Check `papersize' also.
+ Use `get_line'.
+ Improve error messages.
+
+2002-06-03 Werner LEMBERG <wl@gnu.org>
+
+ * Makefile.comm (CLEANNOTSRCDIRADD): New target for files which
+ should be removed only if builddir is not srcdir.
+ (mostlyclean): Handle `CLEANNOTSRCDIRADD'.
+ (clean): Depend on `mostlyclean'.
+ (distclean): Depend on `clean'.
+ (realclean, extraclean): Depend on `distclean'.
+ (.y.cc, .y.o): Simplified. The output files are no longer written
+ to srcdir but to builddir.
+ * Makefile.in (MDEFINES): Add `version' and `revision'.
+ (uninstall_dirs): Fix order of directories.
+ * doc/Makefile.sub (version, revision): Removed.
+ (CLEANADD): Removed grnexmpl.g, groff, groff-*.
+ Added `HTMLDOCFILES'.
+ (CLEANNOTSRCDIRADD): New target for grnexmpl.h, groff, groff-*.
+ * src/preproc/eqn/Makefile.sub, src/preproc/pic/Makefile.sub,
+ src/preproc/refer/Makefile.sub (YTABC, YTABH): Don't use `srcdir'
+ as prefix.
+
+ * doc/texinfo.tex (\authortt): New macro.
+ (\shortcontt): Define.
+ (\titlepage): Set \tt to \authortt while defining \authorfont.
+ (\appendixbox): New macro.
+ (\chapmacro, \appendixentry): Use \appendixbox to get even
+ indentation for letters.
+ (\summarycontents): Set \tt.
+ (\internalpagesize): Add two arguments for real paper width and
+ height as needed by pdfTeX.
+ (\letterpaper, \smallbook, \afourpaper, \afivepaper, \afourlatex):
+ Updated.
+ (\tempdima, \tempdimb): New temporary dimensions.
+ (\pagesizesyyy): Updated.
+
+2002-06-02 Werner LEMBERG <wl@gnu.org>
+
+ Adding a new keyword `papersize' to the DESC file format (similar
+ but not completely identical to grolbp's extension). grops now has
+ a -p command line option to override `papersize'. Finally, grolbp
+ has been adapted to the new syntax.
+
+ * src/libs/libgroff/paper.cc, src/include/paper.h: New files. It
+ defines and initializes the `papersizes[]' array with NUM_PAPERSIZES
+ elements.
+ * src/libs/libgroff/Makefile.sub (OBJS): Add `paper.o'.
+ (CCSRCS): Add `paper.cc'.
+
+ * src/include/font.h (font): Add `papersize' element.
+ * src/libs/libgroff/font.cc (font::unit_scale): New helper function.
+ (font::scan_papersize): New function.
+ (font::load_desc): Use it for handling `papersize' keyword.
+ * src/libs/libgroff/fontfile.cc: Initialize `font::papersize'.
+
+ * src/devices/grops/ps.cc: Include paper.h.
+ (user_paper_length): New global variable.
+ (ps_printer): Use paper length as initializer.
+ (make_printer): Updated.
+ (main): Handle new `-p' option.
+ * src/devices/grops/grops.man: Updated.
+
+ * src/devices/grolbp/lbp.cc: Include paper.h.
+ s/papersizes/lbp_papersizes/.
+ (set_papersize): Use new `papersizes' array.
+ (handle_unknown_desc_command): Don't handle `papersize'.
+ (main): Use `font::scan_papersize' for handling `-p' option.
+ * src/devices/grolbp/grolbp.man: Updated.
+
+ * man/groff_font.man: Document `papersize'.
+ * NEWS: Updated.
+
+2002-05-30 Werner LEMBERG <wl@gnu.org>
+
+ * src/devices/grops/TODO: Updated.
+ * src/devices/grops/grops.man: More info on paper formats.
+ * man/groff_font.man: Document `paperheight' and `paperwidth'.
+
+2002-05-29 Werner LEMBERG <wl@gnu.org>
+
+ * doc/Makefile.sub (CLEANADD): Add grnexmpl.g, groff, and groff-*
+ to list only if srcdir != currdir.
+ (distfiles): New target.
+
+ * Makefile.in (EXTRADIRS): Add font/devlj4/generate.
+ (NOMAKEDIRS): New variable.
+ (DISTDIRS): Use it.
+
+2002-05-26 Werner LEMBERG <wl@gnu.org>
+
+ Add .output request, similar to \! at top-level.
+
+ * src/roff/troff/input.cc (transparent): Remove unused declaration.
+ (output_request): New function.
+ (init_input_requests): Add it.
+ Sorted.
+ * NEWS, doc/groff.texinfo, man/groff_diff.man, man/groff.man:
+ Document it.
+
+ * Makefile.in (MDEFINES): Add INSTALL_INFO.
+ (prepare_examples): Fix typo.
+ * doc/groff.texinfo (@direntry): Fix it.
+
+2002-05-25 Werner LEMBERG <wl@gnu.org>
+
+ Including the doc subdir into groff's Makefile system.
+
+ * aclocal.m4 (GROFF_INSTALL_INFO): New function.
+ * configure.ac: Use it.
+ Generate `doc/Makefile'.
+ * configure: Regenerated.
+
+ * Makefile.in (infodir, INSTALL_INFO): New variables.
+ (MDEFINES, uninstall_dirs): Updated.
+ (OTHERDIRS): Add `doc'.
+ * Makefile.comm (CLEANDIRADD): New variable.
+ (mostlyclean): Use it.
+
+ * doc/Makefile.sub, doc/Makefile.in: New files.
+ * doc/Makefile: Removed.
+
+ * NEWS, INSTALL: Updated.
+
+2002-05-24 Werner LEMBERG <wl@gnu.org>
+
+ * doc/homepage.ms: Renamed to ...
+ * doc/webpage.ms: This.
+ Use `.NHR'.
+
+2002-05-23 Werner LEMBERG <wl@gnu.org>
+
+ Integrating the `mom' macro package, contributed by Peter Schaffter
+ <df191@ncf.ca>.
+
+ * contrib/mom/*: New subdirectory tree.
+ * Makefile.in (docdir, exampledir, htmldocdir): New variables to
+ be used for documentation files.
+ (MDEFINES, uninstall_dirs): Use them.
+ (OTHERDIRS): Add contrib/mom.
+ * Makefile.comm (.man.n): Add @DOCDIR@, @EXAMPLEDIR@, and
+ @HTMLDOCDIR@.
+ * MANIFEST, NEWS: Updated.
+
+2002-05-22 Gaius Mulley <gaius@glam.ac.uk>
+
+ Change syntax of \O: \O[0] suppresses output, \O[1] enables output
+ if at outer level; at start-up we are at outer level.
+
+ * src/roff/troff/input.cc (do_suppress): Implement it.
+ Simplify \O[3].
+
+ Add option -p to show progress information.
+ pre-grohtml will now render only one page at a time, reducing the
+ size of needed disk resources enormously.
+
+ * src/preproc/html/pre-html.cc (imagePageStem): Replaced with...
+ (imagePageName): New global variable.
+ (psPageName, show_progress, currentPageNo): New global variables.
+ (html_system): Close saved stderr and stdout handles.
+ (write_end_image): Accept a parameter to control \O escape.
+ (write_start_image): Adapted to new \O meaning.
+ (char_buffer::write_upto_newline): Updated.
+ (createAllPages): Replaced with...
+ (createPage): This new function to create a single page for images.
+ It uses `psselect' from the psutils package.
+ (removeAllPages): Removed.
+ (createImage): Updated.
+ Handle progress display.
+ (char_buffer::do_html, char_buffer::do_image) [DEBUGGING]: Removed.
+ (scanArguments): Add option -p.
+ (makeTempFiles): Updated to create temp files for psPageName and
+ imagePageName.
+ (removeTempFiles): Removed.
+ (main): Updated.
+
+ * src/devices/grohtml/post-html.cc (header_desc::write_headings,
+ html_printer::write_header): Append `\0' to `buffer'.
+ (html_printer::do_eol): Depend on `current_paragraph->emitted_text'.
+ (main): Handle -p.
+ * src/devices/grohtml/html-text.cc (html_text::dump_stack_element):
+ Handle `text_emitted'.
+ (html_text::table_is_void): Slightly rewritten.
+ (stop): New external symbol.
+ (html_text::do_push) [DEBUGGING]: Use it and simplify.
+ (html_text::shutdown): Call `dump_stack'.
+ (html_text::do_space): Rewritten.
+ * src/devices/grohtml/grohtml.man: Document -p and the need of
+ `psselect'.
+
+ * tmac/www.tmac (DC, HTML-DO-IMAGE, HTML-IMAGE-END): Updated to
+ new \O syntax.
+ Call \O[0] if `ps4html' is active.
+ * tmac/s.tmac (@EQ, @EN): Handle html better.
+ (@TS, TE): Ditto.
+ * tmac/html.tmac: Don't use black for background colour.
+
+ * src/roff/troff/node.cc: Include `div.h'.
+ (troff_output_file::really_print_line): Don't use `is_on'.
+ (troff_output_file::word_marker, troff_output_file::flush_tbuf
+ troff_output_file::check_charinfo,
+ troff_output_file::put_char_width, troff_output_file::put_char,
+ troff_output_file::determine_line_limits, troff_output_file::draw,
+ real_output_file::begin_page, glyph_color_node::tprintf,
+ fill_color_node::tprint, hline_node::tprint, vline_node::tprint):
+ Use `is_on'.
+ (troff_output_file::really_on): Call `do_motion'.
+ (suppress_node::tprint): Use `get_page_number' instead of `%'
+ register.
+ Call `reset_output_registers' conditionally on `is_on'.
+
+ * doc/groff.texinfo: Document new syntax of \O.
+ * NEWS, man/groff_diff.man: Updated.
+
+2002-05-22 Werner LEMBERG <wl@gnu.org>
+
+ * MORE.STUFF: Add info about David Frey's deroff implementation.
+ Mention troff.org.
+
+2002-05-16 Werner LEMBERG <wl@gnu.org>
+
+ Pic's `with' attribute now accepts positions.
+
+ * src/preproc/pic/pic.y: Make `.', BOX, CIRCLE, ELLIPSE, ARC, LINE,
+ ARROW, SPLINE, and `[' left-associative tokens to fix shift/reduce
+ conflicts.
+ (object_spec): Add rule for `WITH' and `position'.
+ (relative_path): Give `corner' the precedence of `CHOP'.
+ * src/preproc/pic/object.h (path): New members `pos' and
+ `is_position'.
+ * src/preproc/pic/object.cc: Updated initializers of `path'.
+ (path::follow): Handle `is_position'.
+
+ * doc/pic.ms: Completely updated grammar description.
+ Many typographical improvements.
+
+2002-05-15 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/env.cc(hyphen_trie::hpf_getc): Accept ^^x (char
+ code of x in range 0-127) also.
+ * doc/groff.texinfo, man/groff_diff.man: Updated.
+
+ Added keywords `north', `south', `east', and `west' for corners
+ in pic.
+
+ * src/preproc/pic/lex.cc (lookup_keyword): Add NORTH, SOUTH, EAST,
+ and WEST.
+ (yylex): Handle them.
+ * src/preproc/pic/pic.y: Add tokens NORTH, SOUTH, EAST, and WEST.
+ (corner): Handle them.
+
+2002-05-14 Werner LEMBERG <wl@gnu.org>
+
+ * src/devices/grops/grops.man: Clarify handling of `download' file.
+
+2002-05-11 Werner LEMBERG <wl@gnu.org>
+
+ Adding `warnscale' and `spreadwarn' requests, based on a patch from
+ Jeffrey Friedl <jfriedl@yahoo.com>.
+
+ * src/roff/troff/input.cc (spread_limit, warn_scale,
+ warn_scaling_indicator): New global variables.
+ (warnscale_request, spreadwarn_requests): New functions.
+ (main): Initialize `warn_scale' and `warn_scaling_indicator'.
+ (init_input_requests): Updated.
+ (error_type): Add `OUTPUT_WARNING'.
+ (do_error): Handle it.
+ (output_warning): New warning function which shows output location.
+ * src/roff/troff/env.h (spread_limit): New external variable.
+ * src/roff/troff/env.cc (environment::choose_breakpoint): Use
+ `output_warning'.
+ (distribute_space): Emit warning if added space is larger than
+ `spread_limit'.
+ (environment::possibly_break_line): Emit warning if a line can't
+ be adjusted on both sides.
+
+ * doc/groff.texinfo, man/groff_diff.man, man/groff.man: Document it.
+
+2002-05-08 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/node.cc (special_node::special_node): Use
+ env_definite_font(curenv) instead of curenv->get_font(). Otherwise
+ \X''\% crashes, for example.
+
+ * doc/groff.texinfo: Document \! and \? used at top-level.
+
+2002-05-06 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/pic/pic.man: Fix some keyword syntax.
+ Other minor typographical fixes.
+
+ * src/roff/groff/groff.man: Fix typos.
+
+2002-05-04 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/groff/groff.man ([ShortOpt]): Renamed to...
+ (ShortOpt[]): This to avoid problems with refer.
+
+ * doc/pic.ms: Fix typo.
+ Fix pic grammar description.
+
+ * tmac/an-old.tmac (ne): Use de1, not de.
+
+2002-05-03 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Finished separation of glyphs and characters.
+ Don't use the string `Appendix' for appendix headers (both in
+ the text and the table of contents).
+ * man/groff_tmac.man, src/roff/troff/troff.man: Fix order of tmac
+ directories.
+
+ Use registers LL and LT (similar to -ms) for controlling the
+ length of title and line, respectively, in the -man and -mdoc
+ macro packages.
+
+ * tmac/doc-ditroff (doc-setup-page-layout), tmac/doc-nroff
+ (doc-setup-page-layout): Use \n[LL] and \n[LT].
+ * tmac/an-old.tmac: Set \n[LL] and \n[LT] if not defined.
+ (TH): Use \n[LL].
+ (an-header, an-p-footer): Use \n[LT].
+ * NEWS, tmac/groff_man.man, tmac/groff_mdoc.man,
+ doc/groff.texinfo: Document it.
+
+2002-05-02 Werner LEMBERG <wl@gnu.org>
+
+ * doc/fdl.texi: New file.
+ * doc/groff.texinfo: Include it.
+ Define and use @copying.
+ Starting with separating glyph, symbol, and character.
+
+2002-04-27 Werner LEMBERG <wl@gnu.org>
+
+ * Makefile.in (EXEEXT): Set it.
+ * src/*/Makefile.sub (PROG): Add $(EXEEXT) for all non-script
+ programs.
+
+ * src/include/nonposix.h: Define GS_NAME.
+ * src/preproc/html/pre-html.cc (createAllPages): Use GS_NAME.
+
+ Some preliminary changes for EMX support under OS/2.
+
+ * src/preproc/pic/main.cc (main), src/roff/groff/pipeline.c: Add
+ __EMX__ similar to __MSDOS__.
+ * src/utils/indxbib/indxbib.cc (main) [__EMX__]: Use `unlink'.
+
+2002-04-25 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Integrated groff_out.man.
+ Some macro fixes.
+
+2002-04-23 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff_out.man: Minor fixes.
+
+2002-04-23 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Moving @cindex entries after @Def* to get
+ correct page references.
+ Fixed many index entries.
+
+2002-04-23 Bernd Warken <bwarken@mayn.de>
+
+ * man/roff.man: Enlarged.
+
+2002-04-22 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: More examples, other fixes.
+
+2002-04-20 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (pipe_output): Multiple calls to `pi'
+ will now form a chain, e.g.
+
+ .pi foo
+ .pi bar
+
+ is now the same as
+
+ .pi foo | bar
+
+ This is for compatibility with plan 9's troff.
+
+ * tmac/tty.tmac: Set default tab values to 0.8i to be compatible
+ with UNIX troff.
+ * NEWS: Updated.
+
+ * doc/groff.texinfo: Add documentation of remaining requests and
+ registers.
+
+2002-04-19 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Add documentation of remaining escapes.
+
+ * font/devdvi/generate/tc.map: Remove entry for `sr'.
+ * font/devdvi/*TC: Regenerated.
+
+2002-04-18 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (token::next): Make \H behave consistently
+ if not in compatibility mode, i.e., increment relative to the
+ previous height.
+ * doc/groff.texinfo: Updated accordingly.
+
+2002-04-17 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Document \\, \e, \E, \., and \c.
+
+2002-04-16 Bernd Warken <bwarken@mayn.de>
+
+ * src/roff/groff/groff.man: Improve documentation of -P option.
+ Other minor fixes.
+
+2002-04-15 Werner LEMBERG <wl@gnu.org>
+
+ Add new escape \F to switch font family.
+
+ * src/roff/troff/input.cc (token::next): Handle \F.
+ * src/roff/troff/env.cc (environment::set_family): Handle
+ `interrupted' flag.
+ * NEWS, doc/groff.texinfo, man/groff_diff.man, man/groff.man:
+ Document it.
+
+2002-04-14 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/doc.tmac (doc-tag-list): Use \Z to avoid stretching of
+ spaces in tags.
+
+2002-04-13 Werner LEMBERG <wl@gnu.org>
+
+ Implement \f[] as an alternative to \fP. Change \mP and \MP to
+ \m[] and \M[], respectively.
+
+ * src/roff/troff/symbol.cc (EMPTY_SYMBOL): New global variable.
+ (symbol::symbol): Handle NULL string and empty string differently.
+ * src/roff/troff/symbol.h (symbol::is_empty): New inline function.
+ * src/roff/troff/input.cc (read_escape_name, read_long_escape_name):
+ Add optional parameter.
+ Updated calling functions.
+ (get_copy, do_glyph_color, do_fill_color, token::next): Use
+ `symbol::is_empty'.
+ * src/roff/troff/env.cc (environment::set_font): Ditto.
+
+ * src/preproc/pic/troff.cc (troff_output::set_fill,
+ troff_output::reset_color: Updated.
+
+ * tmac/www.tmac: Updated.
+
+ * NEWS, man/groff_diff.man, man/groff.man, doc/groff.texinfo,
+ doc/homepage.ms, src/devices/grotty/grotty.man, tmac/groff_www.man:
+ Updated.
+
+ * tmac/Xps.tmac: Remove some redundant code.
+
+ * tmac/doc-common, tmac/doc-ditroff, tmac/doc-nroff, tmac/doc.tmac,
+ tmac/dvi.tmac, contrib/groffer/groffer.man, man/roff.man,
+ man/groff_out.man, man/groff.man, man/groff_diff.man,
+ src/roff/groff/groff.man: Replace \f[P] with \f[].
+
+2002-04-13 Bernd Warken <bwarken@mayn.de>
+
+ * src/include/printer.h, src/libs/libdriver/printer.cc
+ (printer::change_fill_color): New member function.
+ * src/libs/libdriver/input.cc (parse_D_command): Use it.
+
+2002-04-12 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Completed pass on gtroff reference.
+
+2002-04-11 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: More fixes.
+
+2002-04-11 Bernd Warken <bwarken@mayn.de>
+
+ * src/include/color.h: Decorate with `const'.
+ Use `size_t'.
+ Include `stddef.h'.
+ * src/libs/libgroff.color.cc: Decorate with `const'.
+ Use `size_t'.
+ (color::color): Initialize members.
+ * src/libs/libdriver/input.cc (parse_D_command): Handle `f'
+ command according to the documentation.
+
+ * man/groff_out.man: Updated.
+ Minor fixes.
+
+2002-04-11 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/preproc/html/pre-html.cc (write_start_image): Remove
+ redundant output.
+ * tmac/www.tmac (DC, HTML-DO-IMAGE): Ditto.
+
+ * src/devices/grohtml/post-html.cc (page::add_and_encode): Using
+ \C'hy' caused an assertion failure.
+
+ * src/roff/troff/env.cc (environment::environment): Initialize
+ `emitted_node'.
+ (environment::copy): Handle `ignore_next_eol' and `emitted_node'.
+
+2002-04-10 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff_diff.man, man/groff.man, NEWS, doc/groff.texinfo:
+ Document pvs request and .pvs register.
+
+2002-04-09 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Improve and fix documentation of diversions
+ and environments.
+
+2002-04-08 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Fix documentation of drawing functions.
+ Other minor fixes.
+
+2002-04-07 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Better documentation of double quotes as
+ arguments.
+ Other minor fixes.
+
+2002-04-06 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff_font.man: Document names of special characters better.
+ * doc/groff.texinfo: Minor improvements.
+
+ * tmac/lbp.tmac: Load latin1.tmac.
+ * tmac/X.tmac, tmac/Xps.tmac: Load latin1.tmac or cp1047.tmac.
+
+ * font/devX*/*: Regenerated (all chars > 0x80 removed).
+
+2002-04-05 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/tty.tmac: Don't use shc request.
+ * tmac/latin1.tmac, tmac/cp1047.tmac: Translate soft hyphen to `\%'.
+ * NEWS: Updated.
+
+ * man/groff_diff.man: Minor fixes.
+
+ * font/devlbp/*: Remove all `charXXX' entities.
+
+ * src/libs/libgroff/font.cc (font::~font): Deallocate
+ `special_device_coding'.
+ (font::load): Use `new' for allocating `special_device_coding'.
+ * src/libs/libgroff/nametoindex.cc (character_indexer::lookup_char):
+ Removed unused member.
+
+2002-04-05 Werner LEMBERG <wl@gnu.org>
+
+ * src/drivers/grops/psrm.cc (skip_possible_newline): New function.
+ (resource_manager::do_begin_binary,
+ resource_manager::do_begin_data): Use it.
+
+ * doc/texinfo.tex: Updated to version 4.2.
+
+ * src/roff/troff/token.h: Add TOKEN_ZERO_WIDTH_BREAK for `\:'.
+ (token::zero_width_break): New inline function.
+ * src/roff/troff/input.cc (token::next): Use it.
+ (token::description): Updated.
+ (encode_char): Ignore `\%', `\&', `\)', and `\:'.
+ (token::add_to_node_list, token::process): Use it.
+ * NEWS, doc/groff.texinfo: Updated.
+
+ * src/preproc/eqn/over.cc (over_box::output): Fix typo.
+ * tmac/tty.tmac: Add missing backslash.
+
+2002-04-04 Tadziu Hoffmann <hoffmann@usm.uni-muenchen.de>
+
+ * src/preproc/eqn/box.cc (set_script_size, box::top_level): Use
+ `.ps' register instead of `.s' to handle fractional point sizes.
+ * src/preproc/eqn/limit.cc (limit_box::compute_metrics,
+ limit_box::output): Ditto.
+ * src/preproc/eqn/other.cc (size_box::compute_metrics,
+ size_box::output): Ditto.
+ * src/preproc/eqn/over.cc (over_box::compute_metrics,
+ over_box::output): Ditto.
+ * src/preproc/eqn/script.cc (script_box::compute_metrics,
+ script_box::output): Ditto.
+ * src/preproc/eqn/sqrt.cc (sqrt_box::compute_metrics,
+ sqrt_box::output): Ditto.
+
+2002-04-03 Michael Selway <mas@ssl.co.uk>
+
+ * src/drivers/grops/psrm.cc (resource_manager::do_begin_binary):
+ Fix typo.
+
+2002-04-03 Werner LEMBERG <wl@gnu.org>
+
+ * doc/homepage.ms: Reduce title size.
+ * doc/groff.texinfo: Fix documentation of .t register.
+ Fix handling of colon.
+ Fix `\' vs. `\\'.
+
+ * src/roff/troff/input.cc (exit_troff): Emit LAST_PAGE_EJECTOR
+ only if page length is positive to avoid a loop.
+
+ * tmac/an-old.tmac (ne): Increase page length to avoid problems with
+ tbl.
+
+2002-04-02 P. Alejandro Lopez-Valencia <dradul@yahoo.com>
+
+ * src/include/nonposix.h, src/roff/groff/pipeline.c:
+ s/__CYGWIN32__/__CYGWIN__/.
+
+2002-03-28 Gaius Mulley <gaius@glam.ac.uk>
+
+ * doc/gnu.xpm: New image contributed by Emily Mulley.
+ * doc/Makefile (gnu.eps, gnu.png): Use pnmdepth.
+ (homepage.html): Be dependent on gnu.eps.
+ * doc/homepage.ms: Updated to new image.
+
+ * src/devices/grohtml/post-html.cc (html_printer): New member
+ `sbuf_prev_hpos'.
+ (html_printer::flush_sbuf, html_printer::set_char): Set it.
+ (html_printer::sbuf_continuation): Use it.
+
+2002-03-28 Werner LEMBERG <wl@gnu.org>
+
+ * src/libs/libgroff/getopt.c: Updated to latest version.
+
+ * tmac/README: More on hyphen.tex license.
+
+2002-03-26 Larry Kollar <kollar@alltel.net>
+
+ * doc/groff.texinfo: Add documentation of most missing requests.
+
+2002-03-25 Werner LEMBERG <wl@gnu.org>
+
+ Add three glyphs `t+-', `tmu', and `tdi' which are textual variants
+ of `+-', `mu', and `di', respectively.
+
+ * font/devascii/R.proto, font/devutf8/R.proto,
+ font/devlatin1/R.proto, font/devhtml/R.proto,
+ font/devcp1047/R.proto, font/devlpb/*: Add them.
+ * font/devps/generate/textmap: Ditto.
+ * font/devps/*: Regenerated.
+ * font/devlj4/generate/text.map: Add them.
+ * font/devlj4/*: Regenerated.
+ * font/devdvi/generate/tc.map: Use them.
+ * font/devdvi/generate/texsy.map: Add them.
+ * font/devdvi/*: Regenerated.
+ * font/devX*/*: Regenerated.
+
+ * tmac/latin1.tmac, tmac/cp1047.tmac, tmac/tty.tmac,
+ tmac/tty-char.tmac: Updated.
+
+ * NEWS, man/groff_char.man: Updated.
+
+2002-03-24 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/dvi.tmac, tmac/X.tmac, tmac/ps.tmac, tmac/html.tmac,
+ tmac/lj4.tmac, tmac/tty.tmac: Replace most `.char' with `.fchar'.
+ * tmac/ec.tmac: Remove `.rchar' calls (no longer necessary since
+ we use `.fchar' in dvi.tmac.
+ * tmac/dvi.tmac: Improve definition of \[Fo] and \[Fc].
+ * tmac/Xps.tmac: Simplify some char definitions.
+ Add definition for \[f/].
+ * man/groff_char.man: Updated for new X.tmac.
+
+ * tmac/README: New file.
+
+2002-03-23 Phil Lobbes <phil@perkpartners.com>
+
+ * Makefile.comm (.y.o): New rule for make on Solaris 2.5.1 -- the
+ internal .y.o rule took precendence over the .y.cc rule, compiling
+ the yacc files with gcc instead of g++.
+
+2002-03-23 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/dvi.tmac: Add replacement font for `CB'.
+
+ * tmac/doc.tmac: s/request/macro/ in messages.
+ (doc-generic-macro): Improve error message.
+ * tmac/groff_mdoc.man: Minor improvements.
+
+2002-03-22 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Document possible conflict between `tr' and
+ `char' requests.
+
+2002-03-21 Werner LEMBERG <wl@gnu.org>
+
+ Improve handling of hyphenation patterns. It is now possible to
+ use most of TeX's pattern files unmodified. To make the process
+ more flexible, a new request `hpfcode' has been added which
+ provides a character code mapping for the `hpf' request. See
+ comment before hpf_getc() for more details.
+
+ * src/roff/troff/env.cc (insert_hyphenation, hpf_getc): New
+ functions.
+ (read_patterns_file): Additional parameter for exception dictionary.
+ Extended to recognize \pattern, \hyphenation, and \endinput.
+ (do_hyphenation_patterns_file): Updated.
+ * src/roff/troff/env.h (hpf_code_table): New extern.
+
+ * src/roff/troff/input.cc (hpf_code_table): New array.
+ (init_hpf_code_table, hyphenation_patterns_file_code): New
+ functions.
+ (hyphenation_code): Handle translation from `trin' correctly.
+ (main, init_input_requests): Updated.
+ (charinfo::set_translation): Handle hyphenation code also.
+
+ * src/roff/troff/charinfo.h (charinfo::get_translation_input): New
+ inline function.
+
+ * src/roff/troff/env.cc (WORD_MAX): Reduced to 256 since `unsigned
+ char' is used for offsets in hyphenation exceptions.
+
+ * tmac/hyphen.us: Replace with contents of unmodified `hyphen.tex'.
+
+ * NEWS, man/groff_diff.man, man/groff.man: Document it.
+
+2002-03-20 Larry Kollar <kollar@alltel.net>
+
+ * doc/groff.texinfo: Add documentation for `hpfa' and `trin'
+ requests.
+
+2002-03-18 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/html.tmac: Fix serious typo.
+
+2002-03-17 Larry Kollar <kollar@alltel.net>
+
+ * doc/groff.texinfo: Add documentation for `writec' request.
+
+2002-03-17 Werner LEMBERG <wl@gnu.org>
+
+ Added request `hpfa' to append hyphenation patterns.
+
+ * src/roff/troff/env.cc (hyphen_trie::read_patterns_file): Add
+ parameter `append'.
+ (hyphenation_patterns_file): Renamed to...
+ (do_hyphenation_patterns_file): This.
+ (hyphenation_patterns_file, hyphenation_patterns_file_append): New
+ functions.
+ (init_hyphen_requests): Updated.
+ * NEWS, man/groff.man, man/groff_diff.man: Document it.
+
+2002-03-16 Werner LEMBERG <wl@gnu.org>
+
+ Added request `writec' in analogy to `tmc'.
+
+ * src/roff/troff/input.cc (write_request): Renamed to...
+ (do_write_request): This.
+ Added one parameter.
+ (write_request, write_request_continue): New functions.
+ (init_input_requests): Updated.
+ * NEWS, man/groff.man, man/groff_diff.man: Document it.
+
+ * font/devdvi/DESC.in (sizes): Allow all sizes in the range
+ 5-10000pt.
+ * NEWS: Document it.
+
+2002-03-15 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff.man: Add writem request.
+
+ Add request `trin' (translate input) to make `.asciify' work
+ correctly. This is necessary since `charXXX' entity names are no
+ longer hardcoded in font definition files.
+
+ * src/roff/troff/charinfo.h (charinfo): Add `asciify_code' and
+ `translate_input' members.
+ (charinfo::set_asciify_code, charinfo::get_asciify_code,
+ charinfo::set_translation_input): New methods.
+ (charinfo::set_translation): Add third argument.
+ * src/roff/troff/input.cc (charinfo:set_translation): Set
+ `asciify_code'.
+ (do_translate): Add second argument.
+ (translate_input): New function.
+ (init_input_requests): Updated.
+ * src/roff/troff/node.cc (glyph_node::asciify,
+ composite_node::asciify): Use `get_asciify_code'.
+
+ * tmac/cp1047.tmac, tmac/latin1.tmac: Use `trin'.
+
+ * NEWS, man/groff.man, man/groff_diff.man: Updated.
+
+2002-03-14 Larry Kollar <kollar@alltel.net>
+
+ * doc/groff.texinfo: Improve documentation of .RS and .RE.
+
+2002-03-14 Werner LEMBERG <wl@gnu.org>
+
+ Add a new request `sizes' similar to the `sizes' command in DESC
+ files.
+
+ * src/roff/troff/env.cc (override_sizes): New function.
+ (init_env_requests): Use it.
+ * src/roff/troff/token.h: Export `read_string'.
+ * NEWS, man/groff_diff.man, man/groff.man: Document it.
+
+2002-03-12 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: More fixes for texinfo 4.1 and higher.
+
+2002-03-10 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/pspic.tmac: Add support for -Tdvi.
+ * tmac/dvi.tmac: Include pspic.tmac.
+ * src/devices/grodvi/grodvi.man: Document it.
+ * NEWS: Updated.
+
+ * font/devlj4/generate/Makefile: Fix URL of metric files.
+
+2002-03-09 Werner LEMBERG <wl@gnu.org>
+
+ * PROBLEMS: The static constructor bug has been fixed in z/OS V1R3.
+
+2002-03-09 Larry Kollar <kollar@alltel.net>
+
+ * tmac/groff_ms.man: Add documentation for RS and RE macros.
+
+2002-03-08 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Fixes for texinfo 4.1.
+
+2002-03-07 Werner LEMBERG <wl@gnu.org>
+
+ * src/include/lib.h: Include getopt.h if groff-getopt.h can't be
+ included.
+ Handle CYGWIN properly.
+
+2002-03-07 Paco Andrés Verdú <pandres@dragonet.es>
+
+ * font/devlbp/Makefile.sub (DEVFILES): Add some missing fonts.
+ * tmac/lbp.tmac: Add some font translations.
+
+2002-03-02 Werner LEMBERG <wl@gnu.org>
+
+ * font/devcp1047/R.proto, font/devlatin1/R.proto,
+ font/devhtml/R.proto: Remove `charXXX' entries.
+ * tmac/tty.tmac, tmac/html.tmac: Load latin1.tmac or cp1047.tmac
+ where appropriate.
+
+ * font/devlj4/generate/text.map: Remove `charXXX' entries.
+ * font/devlj4/*: Regenerated all font definition files.
+ * tmac/lj4.tmac: Load latin1.tmac.
+
+ * src/utils/hpftodit/hpftodit.cc (do_file): Partially undo change
+ from 2000-06-17: LJ4 metric files are *not* text files.
+
+ * tmac/troffrc, tmac/dvi.tmac, tmac/ps.tmac: Don't use .T string
+ register to test for EBCDIC.
+
+2002-03-01 Werner LEMBERG <wl@gnu.org>
+
+ * src/utils/afmtodit/afmtodit.pl: Skip comment lines in encoding
+ files (as grops already does).
+ * src/utils/afmtodit/afmtodit.man: Document comment lines in map
+ files.
+ * src/devices/grops/grops.man: Document comment lines in encoding
+ files.
+
+ * tmac/cp1047.tmac: New file.
+ * tmac/dvi.tmac, tmac/tty-char.tmac: Use it.
+ * tmac/ps.tmac: Load latin1.tmac or cp1047.tmac.
+ * tmac/Makefile.sub (NORMALFILES): Updated.
+
+ * tmac/ec.tmac: Don't load latin1.tmac again.
+
+ * font/devps/generate/lgreekmap, font/devps/generate/symbolchars,
+ font/devps/generate/dingbats.map,
+ font/devps/generate/dingbats.rmap, font/devps/text.enc,
+ font/devps/generate/Makefile (symbolmap): Add header comment.
+ * font/devps/generate/textmap: Ditto.
+ Remove `charXXX' entries.
+ * font/devps/symbolmap: Regenerated.
+ * font/devps/*: Regenerated all font definition files.
+
+2002-02-28 Werner LEMBERG <wl@gnu.org>
+
+ Add color support to grodvi (for drawing colors are currently
+ translated to gray values).
+
+ * src/devices/grodvi/dvi.cc (FILL_MAX): Removed.
+ (dvi_printer): Add `cur_color' member.
+ (dvi_printer::set_color): New function.
+ (draw_dvi_printer): Remove `fill'.
+ (draw_dvi_printer::fill_next): Pass environment as parameter.
+ Update code for new color support translated to gray.
+ (dvi_printer::set_char): Updated.
+ (dvi_printer::begin_page, dvi_printer::end_page): Handle color
+ changes crossing the page border.
+ (dvi_printer::draw): Updated.
+ Remove cases `f' and `F'.
+ * tmac/dvi.tmac: Add color definitions.
+ * NEWS, src/devices/grodvi/grodvi.man: Updated.
+
+ * tmac/an-old.tmac (R): Make this a macro to emit a warning if
+ used incorrectly.
+
+ * aclocal.m4 (GROFF_NEED_DECLARATION): Use test similar to recent
+ versions of autoconf.
+ * configure: Updated.
+
+ * doc/homepage.ms: Use `.blm'.
+ * tmac/www.tmac (www-depth): New auxiliary variable.
+ (www-pop-level): Don't issue HTML tag.
+ (ULS, ULE, LI): Use absolute indentation.
+
+ * src/devices/grops/ps.cc (ps_printer::begin_page,
+ ps_printer::end_page): Switch forth and back to default color while
+ starting a new page.
+
+2002-02-27 Werner LEMBERG <wl@gnu.org>
+
+ Add EC and TC fonts to devdvi.
+
+ * src/utils/tfmtodit/tfmtodit.man: Document patching of exbase.mf.
+ * font/devdvi/generate/cork.map: Renamed to...
+ * font/devdvi/generate/ec.map: This.
+ Remove entry for `aq'.
+ * font/devdvi/generate/tc.map: New file.
+ * font/devdvi/generate/Makefile (*EC, *TC): New creation rules for
+ EC and TC fonts.
+ (FONTS): Updated.
+ * font/devdvi/*EC, font/devdvi/*TC: New font definition files.
+ * font/devdvi/Makefile.sub (DEVFILES): Updated.
+ * tmac/ec.tmac: New file.
+ * tmac/Makefile.sub (NORMALFILES): Updated.
+ * NEWS, src/devices/grodvi/grodvi.man: Updated.
+ * man/groff_char.man: Check `ECFONTS' register.
+
+ * font/devdvi/{TR,TI,TB,TBI,HR}: Fix `name' field.
+
+2002-02-26 Werner LEMBERG <wl@gnu.org>
+
+ * font/devdvi/generate/*.map: Remove all `charXXX' entries.
+ * font/devdvi/generate/cork.map: Add 'y and 'Y.
+ * font/devdvi/*: Updated.
+ * tmac/dvi.tmac: Formatting.
+
+ Add font `HBI' for the dvi output.
+ Add support for font families `T' and `H'.
+
+ * font/devdvi/HBI: New file.
+ * font/devdvi/B: Renamed to ...
+ * font/devdvi/TB: This.
+ * font/devdvi/BI: Renamed to ...
+ * font/devdvi/TBI: This.
+ * font/devdvi/I: Renamed to ...
+ * font/devdvi/TI: This.
+ * font/devdvi/R: Renamed to ...
+ * font/devdvi/TR: This.
+ * font/devdvi/H: Renamed to ...
+ * font/devdvi/HR: This.
+ * font/devdvi/Makefile.sub (DEVFILES): Updated.
+ * font/devdvi/generate/Makefile (HBI): New rule.
+ (FONTS): Updated.
+ (R, I, B, BI, H): Renamed to ...
+ (TR, TI, TB, TBI, HR): This, respectively.
+ (srcdir): Fixed.
+ * NEWS, src/devices/grodvi/grodvi.man: Updated.
+ * font/devdvi/DESC.in: Don't mount R, I, B, BI, and CWI.
+ Add `styles' and `family' keywords.
+ * tmac/dvi.tmac: Alias `H' to `HR'.
+ Add some fspecial requests for italic fonts.
+ Add TR and TI as special.
+ Add support for `_' with font CWI.
+
+ * src/roff/troff/number.cc (parse_expr): Add missing `break' for
+ operator `:'. Until now, the expression `0:1' would return 2
+ instead of 1.
+
+2002-02-25 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff_char.man: Added some missing PS glyph names (from the
+ Adobe Glyph List).
+ * font/devps/generate/textmap, font/devps/symbolmap: Add
+ `arrowupdn'.
+
+ * doc/groff.texinfo: Minor additions and fixes.
+ * man/groff_diff.man: Remove documentation of fp request. This
+ is already covered in the original troff manual.
+ Updated to be consistent with other doc files.
+ * NEWS: Updated.
+
+2002-02-24 Werner LEMBERG <wl@gnu.org>
+
+ * aclocal.m4 (GROFF_EBCDIC): Don't include `font/devutf8' in
+ TTYDEVDIRS.
+ Define new variable OTHERDEVDIRS (containing `font/devlj4
+ font/devlbp' if not EBCDIC).
+ * Makefile.in (TTYDEVDIRS): Always include `font/devutf8'.
+ (OTHERDEVDIRS): New variable.
+ (MDEFINES, DEVDIRS, ALLDIRS, DISTDIRS): Updated.
+ * configure: Regenerated.
+
+ * NEWS, src/devices/grotty/grotty.man: Updated.
+
+2002-02-23 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (do_overstrike, do_bracket,
+ get_line_arg): Honour input level.
+
+ Add new symbol `mc' corresponding to U+00B5 MICRO SIGN.
+
+ * font/*/*: Implement it in all font files.
+ * font/devps/generate/textmap, font/devps/generate/symbolchars,
+ * font/devps/symbolmap: Updated.
+ * font/devlj4/generate/text.map: Updated.
+ * font/devdvi/generate/CompileFonts (sizes): Add LaTeX sizes.
+ * font/devdvi/generate/texmi.map: Updated.
+
+ * font/devutf8/R.proto: Remove all `charXXX' entries.
+ * font/devutf8/NOTES: Updated.
+
+ * font/devX*/*: Regenerated with xtotroff, using fonts from XFree86
+ version 4.1.0.
+
+ * tmac/latin1.tmac, tmac/psold.tmac, tmac/tty-char.tmac: Updated.
+
+ * NEWS, man/groff_char.man: Updated.
+
+2002-02-21 Phil Lobbes <phil@perkpartners.com>
+
+ * src/include/lib.h [HAVE_SNPRINTF]: Include stdarg.h.
+
+2002-02-20 Ralph Corderoy <ralph@inputplus.demon.co.uk>
+
+ * src/roff/grog/grog.pl: Fix computation of $refer.
+
+2002-02-19 Werner LEMBERG <wl@gnu.org>
+
+ * src/include/lib.h [!HAVE_SNPRINTF]: Add declarations for
+ `snprintf' and `vsnprintf'.
+
+ * src/include/htmlindicate.h: Renamed to...
+ * src/include/htmlhint.h: This.
+ * src/include/Makefile.sub: Updated.
+ * src/preproc/eqn/main.cc: Updated.
+
+2002-02-18 Werner LEMBERG <wl@gnu.org>
+
+ * man/roff.man, man/groff_out.man, man/groff.man,
+ man/groff_diff.man, man/ditroff.man, src/roff/groff/groff.man,
+ src/roff/troff/troff.man: Updated to latest changes in www.tmac.
+
+ * win32-diffs: Updated.
+
+2002-02-17 Werner LEMBERG <wl@gnu.org>
+
+ * doc/Makefile (clean): Add *.eps.
+ (MEMACROS): Removed.
+ (TFLAG): New variable.
+ (TROFF): Use it.
+ Add -ww.
+ (GROFF): Use TFLAG, FFLAG, -U, -p, -e, -t, and -ww.
+ (.me.dit): Fixed.
+ (.ms.html, .ms.ascii, .ms.ps, homepage.html): Simplify.
+
+ * tmac/www.tmac: Use dummy diversion while resetting and disabling
+ `.tl'.
+ * tmac/e.tmac: Inserted some more `\"' to remove warnings if used
+ unstripped.
+ * src/roff/troff/troff.man: Fix order of parameter description.
+
+ * NEWS: Updated.
+
+2002-02-16 Gaius Mulley <gaius@glam.ac.uk>
+
+ Simplify image handling for grohtml.
+ Fix <p> bug.
+
+ * src/devices/grohtml/html-text.cc (DEBUGGING): Don't undefine but
+ comment out.
+ (html_text::dump_stack): Don't emit newline while debugging.
+ (html_text::do_push) [DEBUGGING]: Print more info.
+ (html_text::check_emit_text): Fix handling of <p>.
+ * src/devices/grohtml/html.h: Updated.
+ * src/devices/grohtml/output.cc (FPUTC, FPUTS, PUTC): New macros,
+ replacing `fputc', `fputs', `putc'. If DEBUGGING is defined, they
+ send its data to stderr also.
+ Update all callers.
+ (simple_output::space_or_newline) [DEBUGGING]: Removed.
+ * src/devices/grohtml/post-html.cc (html_printer::do_links,
+ html_printer::html_printer): Remove `DEBUGGING' conditionals.
+
+ * src/include/html-strings.h (HTML_IMAGE_{CENTERED,LEFT,RIGHT,END}):
+ Removed.
+ * src/libs/libgroff/htmlhint.cc (is_in_graphic_start,
+ is_inline_image): Removed.
+ (html_begin_suppress, html_end_suppress): Don't take a parameter.
+ (graphic_start, graphic_end): Removed.
+ * src/include/htmlindicate.h: Updated.
+ * src/preproc/html/pre-html.cc (DEBUG_HTML): Removed.
+ (macroset_template): New global variable.
+ (makeFileName): Use `macroset_template'.
+ (write_end_image): Don't take a parameter.
+ Don't emit newline.
+ (write_start_image: Don't emit newline.
+ (char_buffer::write_upto_newline): Updated.
+ (char_buffer::skip_to_newline): Renamed to ...
+ (char_buffer::skip_until_newline): This.
+ Fix code.
+ (char_buffer::write_file_troff, char_buffer::write_file_html):
+ Simplified.
+ (createAllPages, createImage) [DEBUGGING]: Handle `debug' flag.
+ (removeAllPages): Remove `DEBUGGING' conditionals.
+ (addRegDef, dump_args): New functions.
+ (char_buffer::do_html, char_buffer::do_image): Handle
+ `www-image-template' command line variable.
+ Add more debugging code.
+ (addps4html): Removed.
+ (removeTempFiles) [DEBUGGING]: Handle `debug' flag.
+
+ * src/preproc/eqn/main.cc: Include `ctype.h'.
+ (suppress_html): Removed.
+ (do_file): Updated.
+ (inline_equation): Use `html_begin_suppress' and
+ `html_end_suppress'.
+ * src/preproc/pic/troff.cc: Don't include `htmlindicate.h'.
+ (troff_output::start_picture, troff_output::finish_picture):
+ Updated.
+ * src/preproc/tbl/main.cc: Don't include `htmlindicate.h'.
+ (process_input_file): Updated.
+
+ * src/roff/troff/div.cc (page_number): Set page number only if the
+ `ps4html' register isn't defined.
+ * src/roff/troff/input.cc (image_no): New external variable.
+ (do_suppress): Use it.
+ * src/roff/troff/node.h (suppress_node::image_id): New member.
+ * src/roff/troff/node.cc (image_no): Remove `static' keyword.
+ (suppress_node::suppress_node): Initialize `image_id' member.
+ (suppress_node::same): Handle `image_id' also.
+ (suppress_node::copy): Updated.
+ (last_image_id): New global variable.
+ (suppress_node::tprint): Use it.
+
+ * tmac/an-old.tmac (TS, TE, EQ, EN): Use HTML-IMAGE and
+ HTML-IMAGE-END.
+ * tmac/pspic.mac (PSPIC): Fix html support.
+ * tmac/s.tmac (@EQ, @EN, @TS, TE, PS, PE): Ditto.
+ * tmac/www.tmac (www-image-template): Set up.
+ (HTMLINDEX): Renamed to...
+ (HX): This.
+ (BODYCOLOR): Renamed to...
+ (BCL): This.
+ (BACKGROUND): Renamed to...
+ (BGIMG): This.
+ (URL): Change order of parameters for consistency.
+ (MAILTO): Renamed to...
+ (MTO): This.
+ (IMAGE, PNG-IMAGE, MARGIN-PNG-IMAGE): Renamed to...
+ (IMG, PIMG, MPIMG): This.
+ (HTML-H-BEGIN, HTML-H-END): Renamed to...
+ (HnS, HnE): This.
+ (LINKS): Renamed to...
+ (LK): This.
+ (LINE): Renamed to...
+ (HR): This.
+ (NO-AUTO-RULE): Renamed to...
+ (NHR): This.
+ (HTML-TL): Renamed to...
+ (HTL): This.
+ (UL-BEGIN, UL-END): Renamed to...
+ (ULS, ULE): This.
+ (DROPCAP): Renamed to...
+ (DC): This.
+ (TS, TE, EQ, EN): Provide default definitions.
+ (www-make-unique-name): Updated.
+ (HTML-IMAGE-INLINE): Fix typo.
+ * tmac/groff_www.man: Updated.
+
+ * doc/Makefile (homepage.html): Add option -r to grohtml.
+ Use shortened image name.
+ * doc/groff.texinfo: Updated info on grohtml strings and macros.
+ * doc/homepage.ms: Updated and extended.
+
+2002-02-14 Werner LEMBERG <wl@gnu.org>
+
+ Don't use `CSI 39 m' and `CSI 49 m' but `CSI 0 m'.
+
+ * src/devices/grotty/tty.cc (SGR_DEFAULT_COLOR,
+ SGR_BACK_DEFAULT_COLOR): Replaced with ...
+ (tty_printer::put_color): Use it.
+ (ttr_printer::end_page): Simplify.
+
+2002-02-13 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/groff_tmac.man: Moved to...
+ * man/groff_tmac.man: This place.
+ * tmac/Makefile.sub, man/Makefile.sub: Updated.
+
+2002-02-12 Werner LEMBERG <wl@gnu.org>
+
+ * src/libs/libgroff/Makefile.sub (snprintf.o): Don't use
+ $(COMPILE.c) to not include groff's assert.h.
+
+ * src/drivers/grotty/tty.cc (main): Add GROFF_NO_SGR environment
+ variable.
+ * NEWS, src/drivers/grotty/grotty.man: Document it.
+
+2002-02-11 Werner LEMBERG <wl@gnu.org>
+
+ * src/libs/snprintf/snprintf.c: Updated to latest version
+ (2002-02-11).
+
+ * src/roff/grog/grog.pl (process): Fix handling of `.['. We now
+ test whether there is `.]' also.
+ Don't check for spaces after `.['.
+ * src/roff/grog/grog.sh: Do the same.
+
+2002-02-10 Werner LEMBERG <wl@gnu.org>
+
+ Illegal -> Invalid.
+
+ * src/libs/libgroff/illegal.cc: Renamed to ...
+ * src/libs/libgroff/invalid.cc: This.
+ (illegal_char_table): Renamed to ...
+ (invalid_char_table): This.
+ * src/libs/libgroff/Makefile.sub: Updated.
+ * win32-diffs: Updated.
+
+ * doc/groff.texinfo, src/devices/grops/psrm.cc (ps_get_line),
+ src/libs/libdriver/input.cc (fatal_command, parse_color_command,
+ parse_x_command), src/libs/libgroff/font.cc (text_file::next,
+ font::load), src/preproc/eqn/main.cc (read_line, main),
+ src/preproc/eqn/lex.cc (file_input::read_line),
+ src/preproc/pic/lex.cc (file_input::read_line,
+ simple_file_input::get, simple_file_input::peek),
+ src/preproc/pic/main.cc (top_input::get, top_input::peek),
+ src/preproc/pic/pic.man, src/preproc/refer/main.cc
+ (input_stack::push_file), src/preproc/refer/refer.cc (do_file,
+ do_bib), src/preproc/tbl/main.cc (table_input::get),
+ src/preproc/grn/grn.man, src/preproc/grn/main.cc (interpret),
+ src/roff/troff/input.cc (file_iterator::fill, file_iterator::peek,
+ do_zero_width, read_request, encode_char, ps_get_line,
+ transparent_file, get_char_for_escape_name, transparent_translate,
+ asciify, input_char_description, read_string, set_string),
+ src/roff/troff/env.cc (environment::add_html_tag),
+ src/roff/troff/troff.man, tmac/e.tmac (`@(', `(f'): Do it.
+
+ * src/include/lib.h: Updated.
+
+ * src/preproc/eqn/eqn.cc: Removed.
+
+ * NEWS: Updated.
+
+ * src/preproc/grn/hdb.cc (DBRead): Fix fscanf() fields.
+
+2002-02-09 Werner LEMBERG <wl@gnu.org>
+
+ * doc/gnu.xpm: New image.
+ * doc/Makefile (DOCS): Add homepage.ps.
+ Add rules for converting xpm->png and xpm->eps.
+ Use `gnu.{xpm,eps}' as image names.
+ * doc/homepage.ms: Updated.
+
+2002-02-09 Gaius Mulley <gaius@glam.ac.uk>
+
+ * tmac/www.tmac (www-error): New macro, replacing calls to `@error'.
+ (IMAGE): Change image position parameters to `-L', `-R', and `-C'.
+ Remove calls to `B1' and `B2'
+ (PNG-IMAGE): New macro for inclusion of images in PNG format.
+ (www-left-ll-trap, www-left-po-trap, www-right-ll-trap): New
+ auxiliary variables for MARGIN-PNG-IMAGE.
+ (www-finish-left-po, www-finish-right-ll, www-finish-left-ll): New
+ auxiliary macros for MARGIN-PNG-IMAGE.
+ (MARGIN-PNG-IMAGE): New macro to put an image in PNG format into
+ the margin.
+ (www-heading-no): New auxiliary variable for HTML-H-{BEGIN,END}.
+ (HTML-H-BEGIN, HTML-H-END): New macros to begin and end a heading.
+ (DROPCAP): New macro to produce dropcap characters.
+ (www-do-image): Renamed back to...
+ (HTML-DO-IMAGE): This.
+ Updated all callers.
+
+ * doc/Makefile (gnubw.eps): Updated.
+ * doc/homepage.ms: Updated.
+
+2002-02-08 Werner LEMBERG <wl@gnu.org>
+
+ * doc/pic.ms: Fixed typos (\(*tx -> \*(tx).
+ Added `linethick' to table in section `Style Variables'.
+
+2002-02-08 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/libs/libdriver/input.cc (get_extended_arg): Fix conditional.
+
+2002-02-07 Werner LEMBERG <wl@gnu.org>
+
+ Adding options -C (compatibility mode) and -c (grotty's old output
+ scheme) to nroff.
+
+ * src/roff/nroff/nroff.sh: Implement it.
+ Remove `-Wall'.
+ * NEWS, src/roff/nroff/nroff.man: Updated.
+
+ * PROBLEMS: Document bison 1.32 bug.
+
+ Some fixes to make groff compile on z/OS 1.2 UNIX (was OS/390).
+
+ * src/roff/troff/node.cc (make_tfont): Define it earlier.
+ * src/roff/troff/div.h: Add prototype for `end_diversions'.
+ * src/roff/troff/input.cc: Add prototype for `process_input_stack'.
+ * src/roff/troff/env.h: Add prototype for `title'.
+
+ Adding EBCDIC support to grotty.
+
+ * src/devices/grotty/tty.cc (CSI): New macro.
+ (SGR_*, tty_printer::put_color): Use it.
+
+2002-02-06 Werner LEMBERG <wl@gnu.org>
+
+ Implementing color support in grotty. The new switch -c activates
+ the old drawing scheme, disabling color at the same time. The new
+ switch `-i' selects italic instead of underlining (SGR only).
+
+ * src/devices/grotty/tty.cc (putstring): New define instead of
+ `fputs'. Updated all callers.
+ (old_drawing_scheme): New global variable.
+ (COLOR_CHANGE): New enum value.
+ (SGR_*): New defines containing color handling escape sequences.
+ (TTY_MAX_COLORS, DEFAULT_COLOR_IDX): New defines.
+ (glyph): New members `back_color_idx' and `fore_color_idx'.
+ (glyph::order): Add COLOR_CHANGE.
+ (tty_printer): New members `cur_fore_idx', `curr_back_idx',
+ `is_underline', `is_bold', `cu_flag', `tty_colors'.
+ New methods `make_underline', `make_bold', `color_to_idx',
+ `change_color', `put_color'.
+ (cu_flag): Moved into `tty_printer' class.
+ (tty_printer::tty_printer): Initialize colors.
+ (tty_printer::add_char, tty_printer::set_char, tty_printer::special,
+ tty_printer::draw, tty_printer::end_page): Handle colors also.
+ (main): Add options `-c' and `-i'.
+ (usage): Updated.
+ * NEWS, src/devices/grotty/grotty.man: Updated.
+
+ * src/include/errarg.h (errarg): Add support for `unsigned int'.
+ * src/libs/libgroff/errarg.c: Implement it.
+
+ * src/include/printer.h (printer): Add `change_color' method
+ (currently used by grotty only).
+ * src/libs/libdriver/printer.cc: Implement it.
+ * src/libs/libdriver/input.cc (parse_D_command, do_file): Add
+ call to `pr->change_color'.
+
+ * src/roff/troff/node.cc (troff_output_file::fill_color,
+ troff_output_file::glyph_color): Call `do_motion'.
+
+ * tmac/tty.tmac: Add color definitions.
+
+ * src/roff/groff/groff.man: Minor fixes.
+
+2002-02-05 Bernd Warken <bwarken@mayn.de>
+
+ * src/libs/libdriver/input.cc: Introduce `EnvInt' typedef and use
+ it. This is a preparation for future changes.
+
+2002-02-05 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (process_input_stack): Fix the case
+ where leading spaces are followed by \f or \s; previously, an
+ incorrect space width has been used.
+
+ * doc/roff.man (quoted_char): Fix argument.
+ (comment): Define string.
+
+2002-02-04 Larry Kollar <kollar@alltel.net>
+
+ * doc/groff.texinfo: More fixes.
+
+2002-02-04 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/eqn/box.cc (output_string): Don't use \\*[...].
+ * src/preproc/eqn/main.cc (do_file, inline_equation): Call
+ `restore_compatibility' before `output_string' -- the LINE_STRING
+ register now already contains proper switches from and to
+ compatibility mode.
+
+ * man/groff_char.man: Add Euro symbol.
+ * man/groff_diff.man: Improve documentation of `.am1' and `.as1'.
+ * tmac/tty.tmac: Add `EUR' as replacement for `eu' and `Eu'.
+ * doc/groff.texinfo (Defstr*): Print strings with full syntax.
+ Other minor fixes.
+
+ * doc/Makefile (.SUFFIXES, .texinfo.pdf, clean): Add support for
+ texinfo->pdf.
+ (.texinfo.html): Add support for texinfo->html.
+
+2002-02-03 Werner LEMBERG <wl@gnu.org>
+
+ Added three new requests `ds1', `as1', and `ami'. The former two
+ are equivalent to `ds' and `as' with the difference that
+ compatibility mode is saved on entry, switched off during string
+ expansion, and restored on exit. The latter is the pendant to `dei'
+ for `am'.
+
+ (do_define_string): Use `define_mode' and `calling mode'.
+ Insert COMPATIBLE_SAVE and COMPATIBLE_RESTORE at the beginning and
+ end of string, respectively.
+ (define_string, append_string): Use `calling_mode'.
+ (define_nocomp_string, append_nocomp_string,
+ define_string_indirect): New functions.
+ (init_input_requests): Updated.
+ * NEWS, man/groff_diff.man, man/groff.man: Document it.
+
+ * src/preproc/eqn/box.cc (box::top_level, box::extra_space): Use
+ `as1' for assigning LINE_STRING (this is `10' usually). Sun's
+ mm macro package accesses this string register directly.
+ * src/preproc/eqn/main.cc (inline_equation): Use `as1'.
+
+ * tmac/trace.tmac: Trace calls to `am' also. Make it work in
+ compatibility mode.
+
+2002-02-02 Larry Kollar <kollar@alltel.net>
+
+ * doc/groff.texinfo, tmac/groff_ms.man: More fixes.
+
+2002-01-31 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/an-old.tmac (I): Use \, and \/ to improve spacing.
+
+2002-01-31 Bernd Warken <bwarken@mayn.de>
+
+ * src/devices/grolbp/lbp.cc (main): Delete `pr'.
+ * man/groff_out.man: Revised and updated.
+
+2002-01-30 Bernd Warken <bwarken@mayn.de>
+
+ * src/libs/libdriver/input.cc [USE_ENV_STACK]: New macro to comment
+ out the unused `{' and `}' commands. Undefined by default.
+ (IntArray): Make `data' private.
+ (IntArray::operator[], IntArray::get_data, IntArray::len): Use these
+ new methods instead.
+ (skip_line_D, skip_to_end_of_line): New functions.
+ (get_D_fixed_args): Use `skip_line_D'.
+ Changed to handle dummy odd arguments by ...
+ (get_D_fixed_args_odd_dummy): This new function.
+ (get_D_variable_args): Split some code into ...
+ (get_possibly_integer_args): This new function.
+ (send_draw): Use more `const'.
+ (delete_current_env): New function.
+ (position_to_end_of_args): Use `size_t'.
+ Updated.
+ (send_draw): Updated.
+ (parse_D_command): Handle `c', `C', and `t' better.
+ Updated.
+ (do_file): Updated.
+
+2002-01-29 Werner LEMBERG <wl@gnu.org>
+
+ * NEWS: Revised.
+ * doc/groff.texinfo: Introduce @Def...List, @Def...Item, and
+ @Def...ListEnd which replaces @Def...x. This is necessary to get
+ proper HTML output -- see the comment in the file for more
+ information.
+ Updated all calls.
+
+2002-01-29 Gaius Mulley <gaius@glam.ac.uk>
+
+ Fixes to make color changes of 2002-01-21 work with grohtml.
+
+ * src/devices/grohtml/post-html.cc (style): Updated.
+ (html_printer): Remove unused methods.
+ (html_printer::do_font, html_printer::draw, html_printer::set_char,
+ html_printer::special): Updated.
+ * src/devices/grohtml/html-text.cc (debugStack, turnDebug,
+ html_text::dump_stack_element, html_text::dump_stack) [DEBUGGING]:
+ Added some debugging code.
+ (html_text::start_tag): Updated.
+ (html_text::do_push): New method.
+ (html_text::push_para): Call it.
+ Add method for handling color.
+ (html_text::do_color): Updated.
+ (html_text::shutdown): Handle color.
+ * src/devices/grohtml/html-text.h (tag_definition): New member
+ `col'.
+ Updated.
+
+2002-01-28 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/ps.tmac, tmac/html.tmac: Fix compatibility mode issues.
+
+2002-01-27 Gaius Mulley <gaius@glam.ac.uk>
+
+ Add two switches -a and -g to control the antialiasing bits for
+ text and graphics, respectively.
+
+ * src/devices/grohtml/post-html.cc (main): Dummy code for `-a' and
+ `-g'.
+ * src/devices/grohtml/grohtml.man: Document them.
+ * src/preproc/html/pre-html.cc (MIN_ALPHA_BITS, MAX_ALPHA_BITS):
+ New macros.
+ (textAlphaBits, graphicAlphaBits, antiAlias): New global variables.
+ (setupAntiAlias): New function.
+ (createAllPages): Updated.
+ (scanArguments): Handle `-a' and `-g'.
+ (main): Call `setupAntiAlias'.
+ * NEWS: Updated.
+
+2002-01-27 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo (Def*): Call index function after deffn.
+
+ * tmac/html.tmac: Call `nroff' request.
+
+2002-01-26 Larry Kollar <kollar@alltel.net>
+
+ * tmac/groff_ms.man: Add some omissions.
+
+2002-01-25 Larry Kollar <kollar@alltel.net>
+
+ * tmac/groff_ms.man: Typographical improvements.
+
+2002-01-25 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Updated version and copyright.
+ * src/devices/grops/grops.man: Updated.
+
+ * tmac/groff_tmac.man: Fix `ig' macro.
+
+ * tmac/an-old.tmac (ne): Redefine `ne' request to be a no-op in
+ nroff mode.
+ Use `.ne' unconditionally everywhere.
+ (TS): Only insert some vertical space. Doing a page break is no
+ longer necessary due to the redefinition of the `ne' request.
+
+ * src/libs/libdriver/input.cc (parse_D_command): Don't emit a
+ warning for unknown subcommands but parse and pass them to the
+ device driver.
+
+2002-01-24 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/groff_www.man, NEWS: Fix typos.
+
+2002-01-21 Werner LEMBERG <wl@gnu.org>
+
+ Complete revision of color support:
+
+ Adapt programs to the new libdriver/input.cc.
+
+ Color spaces are no longer converted to RGB but transferred as-is
+ in the troff intermediate output format.
+
+ Handle default color gracefully. troff now supports a `default'
+ color (which can't be changed).
+
+ grops will now use the proper color space functions if available.
+
+ Update pic.
+
+ Note that currently grohtml doesn't handle colors properly. This
+ has to be fixed.
+
+ * src/libs/libgroff/itoa.c (UINT_DIGITS): New macro.
+ (ui_to_a): New function.
+ * src/include/lib.h: Updated.
+
+ * src/include/color.h (color_scheme): Replace `NONE' with `DEFAULT'.
+ (color): Simplified; removed all `double' members and methods.
+ A new array `components' now holds the color parameters.
+ (color::is_default, color::get_components): New methods.
+ (color::operator==, color:operator!=): New.
+ (Red, Green, Blue, Cyan, Magenta, Yellow, Black, Gray): New macros
+ to make access to the `components' array more comprehensible.
+ * src/libs/libgroff/color.cc: Implement new color support.
+ (atoh): Small fixes.
+ (color::read_encoding): Simplified for new troff intermediate color
+ output format.
+ (default_color): New global variable.
+
+ * src/roff/troff/input.cc (default_symbol): New global variable.
+ (lookup_color): Use it.
+ (default_black): Removed.
+ (do_glyph_color, do_fill_color): Simplified.
+ (define_color): Handle default color.
+ Improve warnings.
+ (do_if_request): Handle default color.
+ * src/roff/troff/env.cc (environment::environment): Initialize
+ colors with `default_color'.
+ * src/roff/troff/node.cc (troff_output_file::put): Add method
+ for `unsigned int'.
+ (troff_output_file::hex): Removed.
+ (troff_output_file::fill_color, troff_output_file::glyph_color):
+ Updated to include/color.h and libdriver/input.cc.
+
+ * src/preproc/pic/object.cc (draw_arrow): New parameter to set
+ fill color properly (identically to the outline color). \D'f...'
+ doesn't work any more.
+ All function calls to it updated.
+
+ * src/devices/grohtml/post-html.cc (html_printer::do_body, main):
+ Updated.
+ * src/devices/grohtml/html-text.cc (html_text::issue_color_begin):
+ Updated.
+
+ * src/devices/grops/ps.cc (ps_output::put_color): New method.
+ (ps_printer::sbuf_color): Make a real member instead of pointer.
+ (ps_printer::fill_color, ps_printer::output_color): Removed.
+ (ps_printer::ps_printer): Updated.
+ (ps_printer::set_char): Ditto.
+ (ps_printer::set_color): Use various color schemes.
+ Use `put_color' method.
+ (ps_printer::flush_sbuf): Don't set color.
+ (ps_printer::fill_path): Take `environment' as parameter.
+ Simplify color handling.
+ (ps_printer::set_line_thickness): Renamed to ...
+ (ps_printer::set_line_thickness_and_color): This (and updated).
+ (ps_printer::set_color): Change second parameter from `complete'
+ to `fill' which better describes what it does.
+ (ps_printer::draw): Call `flush_sbuf' to output graphic commands
+ and text in the right order.
+ Updated.
+ Remove branches for `f' and `F'; this is handled by
+ libdriver/input.cc.
+ * src/devices/grops/ps.h: Updated.
+ * font/devps/prologue (FL): Redefined.
+ ({F,C}r,k,g: New color functions (with and without filling).
+
+ * doc/pic.ms, src/preproc/pic/pic.man: Small fixes.
+ * man/groff_diff.man, man/groff.man, man/groff_out.man,
+ doc/groff.texinfo, NEWS: Updated.
+
+2002-01-20 Bernd Warken <bwarken@mayn.de>
+
+ * src/libs/libdriver/input.cc: Completely rewritten. See comments
+ in this file for what has been changed.
+
+2002-01-19 Werner LEMBERG <wl@gnu.org>
+
+ * test-groff: Fix GROFF_FONT_PATH.
+ * tmac/andoc.tmac: Add dummy macros for equation support -- eqnrc
+ is read before .TH or .Dd is parsed.
+
+2002-01-18 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/libs/libgroff/geometry.cc (check_output_arc_limits): Fix
+ quadrant boundaries.
+
+2002-01-18 Werner LEMBERG <wl@gnu.org>
+
+ * devices/grops/ps.cc: Aargh! Fix the fix of the incorrectly
+ applied last patch.
+
+2002-01-17 Ruslan Ermilov <ru@FreeBSD.org>
+
+ * tmac/doc.common: Initialize %I register for the %I macro to
+ avoid (harmless) warning.
+ * tmac/doc.tmac (Bd): There is no reason to enforce -compact
+ when in the SYNOPSIS section.
+
+2002-01-17 Bruno Haible <haible@clisp.cons.org>
+
+ * src/preproc/pic/lex.cc (get_token): Fix typo.
+
+2002-01-17 Werner LEMBERG <wl@gnu.org>
+
+ * devices/grops/ps.cc: Fix incorrectly applied last patch.
+
+2002-01-17 Larry Kollar <kollar@alltel.net>
+
+ * tmac/groff_ms.man: Completely rewritten.
+
+2002-01-16 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/an-old.tmac (TS): Force break, inserting some vertical space.
+
+2002-01-15 Gaius Mulley <gaius@glam.ac.uk>
+
+ * devices/grops/ps.cc (ps_printer::fill_path): Fix handling of
+ fill colors.
+ (ps_printer::draw): Ditto.
+
+2002-01-14 Ruslan Ermilov <ru@FreeBSD.org>
+
+ * tmac/groff_mdoc.man: Minor fixes.
+
+2002-01-13 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff_out.man: Some fixes.
+
+2002-01-13 Gaius Mulley <gaius@glam.ac.uk>
+
+ * doc/pic.ms: Fix typos.
+
+2002-01-12 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo, doc/groff.man: More on a printable backslash.
+
+2002-01-10 Werner LEMBERG <wl@gnu.org>
+
+ * font/devutf8/R.proto, font/devhtml/R.prot: Add `Eu' and `eu'
+ symbols.
+ * NEWS: Updated.
+
+2002-01-09 Bernd Warken <bwarken@mayn.de>
+
+ * man/groff_out.man: Revised.
+ * man/roff.man: Minor fixes.
+ * src/roff/troff/troff.man: Some reordering.
+
+2002-01-09 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/an-old.tmac: Add dummy macros for equation support.
+
+2002-01-07 Werner LEMBERG <wl@gnu.org>
+
+ doc/groff.texinfo: Fix documentation of glyph searching algorithm.
+
+ * tmac/an-old.tmac: Revert change 2001-12-23. This breaks too many
+ man pages.
+ * tmac/groff_man.man: Small improvements.
+
+2002-01-07 Bernd Warken <bwarken@mayn.de>
+
+ * man/groff_diff.man: Revised.
+
+2002-01-06 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/www.tmac: Remove extraneous backslash.
+
+2002-01-06 Bernd Warken <bwarken@mayn.de>
+
+ * man/ditroff.man, src/roff/groff/groff.man, man/groff.man: Revised.
+
+2002-01-05 Werner LEMBERG <wl@gnu.org>
+
+ Integrated groffer, contributed by Bernd Warken.
+
+ * contrib/groffer/*: New.
+ * Makefile.in, NEWS: Updated.
+
+2002-01-04 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Added macros `@Defmpreg' and `@Defmpregx' for
+ registers defined in macro packages.
+ Revising the ms part.
+
+2002-01-04 Larry Kollar <kollar@alltel.net>
+
+ * doc/groff.texinfo: Add documentation for ms macros.
+
+2002-01-02 Werner LEMBERG <wl@gnu.org>
+
+ First step in adding PS support for the Euro symbol. `eu' is the
+ official Euro logo, `Eu' is a font-specific glyph variant.
+
+ * font/devps/text.enc: Add `Euro' at position 9.
+ * font/devps/generate/textmap: Add `Euro' as symbol `Eu'.
+ * font/devps/symbolmap: Regenerated.
+
+ * NEWS: Updated.
+
+2002-01-02 Bernd Warken <bwarken@mayn.de>
+
+ * man/roff.man: Revised.
+
+2002-01-01 Bernd Warken <bwarken@mayn.de>
+
+ * src/roff/groff/groff.man: Completely rewritten.
+
+2001-12-31 Werner LEMBERG <wl@gnu.org>
+
+ * doc/Makefile: Updated.
+
+2001-12-30 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/www.tmac: Make all names of internal macros/registers/strings
+ lowercase, and prepend `www-'.
+ Other minor changes.
+ * src/roff/troff/troff.man: Add preprocessor string at BOF.
+
+2001-12-30 Gaius Mulley <gaius@glam.ac.uk>
+
+ Implement option `-b' in grohtml to set the HTML background colour.
+
+ * src/devices/grohtml/post-html.cc (default_background): New global
+ variable.
+ (html_printer::html_printer): Initialize `background' to
+ `default_background'.
+ (main): Implement option `-b'.
+ (usage): Updated.
+ * src/preproc/html/pre-html.cc (scanArguments): Add dummy handling
+ of `-b' option.
+ * src/devices/grohtml/grohtml.man: Updated.
+ * doc/Makefile (.ms.html): Use `-b'.
+ * tmac/html.tmac: Don't set background color.
+
+ Add new grohtml tag `.html-tl'.
+
+ * src/devices/grohtml/post-html.cc (title_desc): Add `with_h1'
+ member variable.
+ (title_desc::title_desc): Updated.
+ (html_printer::troff_tag): Handle `.html-tl'.
+ (html_printer::write_title): Use `with_h1'.
+ * tmac/www.tmac (www-end-nowhere): New auxiliary macro.
+ (HTML-TL): New macro.
+
+ Add support for unordered lists in HTML.
+
+ * tmac/www.tmac (www-level): New auxiliary register.
+ (www-level1, www-level2, www-level3): New auxiliary strings.
+ (www-push-level, www-pop-level): New auxiliary macros
+ (UL-BEGIN, UL-END, LI): User macros for unordered lists.
+
+ Miscellaneous.
+
+ * src/preproc/html/pre-html.cc (DEFAULT_IMAGE_RES): Increase to 100.
+ (DEFAULT_VERTICAL_OFFSET): Removed.
+ (IMAGE_BOARDER_PIXELS): Set to 0.
+ (A4_LENGTH, A4_OFFSET, LETTER_LENGTH, LETTER_OFFSET): New macros.
+ (vertical_offset): Initialize with 0.
+ (gsPaper): New global variable.
+ (get_resolution): Scan for and return unsigned int.
+ (get_papersize): New function to get paper length from devps/DESC.
+ (determine_vertical_offset): New function.
+ (createAllPages): Produce gray-level images and use proper page
+ length.
+ (createImage): Use `-quiet' option of pnmcrop.
+ (addZ): Fix passing of `-Z'.
+ (scanArguments): Fix handling of `-o'.
+ (main): Call `determine_vertical_offset'.
+ * src/devices/grohtml/post-html.cc (html_printer::draw): Comment out
+ code for `l'.
+
+ * src/libs/libgroff/tmpfile.cc (add_tmp_file): Fix buffer length.
+ * src/roff/troff/node.cc (troff_output_file::check_charinfo): Handle
+ glyph descenders properly.
+
+ * doc/homepage.ms: Include `gnubw.eps'.
+ * doc/Makefile (gnubw.eps): New rule.
+ (homepage.html): Depend on `gnubw.eps'.
+
+2001-12-25 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (default_black): Fix return value.
+
+2001-12-24 Ruslan Ermilov <ru@FreeBSD.org>
+
+ * tmac/doc-common (Dt): Change output of architecture strings.
+ Do some syntax cleanup.
+ * tmac/groff_mdoc.man: Updated.
+
+2001-12-23 Werner LEMBERG <wl@gnu.org>
+
+ Adding an `itc' request (input line trap accepting \c).
+
+ * src/roff/troff/env.h (environment): New member
+ `continued_input_trap'.
+ Make `do_input_trap' a friend function instead of `input_trap'.
+ * src/roff/troff/env.cc (environment::environment,
+ environment::copy): Updated.
+ (environment::newline): Implement it.
+ (do_input_trap): New function.
+ (input_trap): Call `do_input_trap'.
+ (input_trap_continued): New function.
+ (init_env_requests): Updated.
+ * src/roff/troff/TODO: Updated.
+
+ * tmac/an-old.tmac (SH, SS, B, I, SM, SB, TP): Use `.itc' instead of
+ `.it'.
+
+ * src/preproc/grn/hdb.cc (DBRead): Really chop after 127 characters.
+
+2001-12-22 Ruslan Ermilov <ru@FreeBSD.org>
+
+ * tmac/doc-common, tmac/doc-syms: Small updates.
+
+2001-12-22 Colin Watson <cjwatson@debian.org>
+
+ * tmac/an-old.tmac (an-p-footer): Set title length in environment 1.
+
+2001-12-22 Bernd Warken <bwarken@mayn.de>
+
+ * MANIFEST: New file.
+
+2001-12-22 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/grn/grn.man: Updated.
+
+2001-12-22 Solar Designer <solar@openwall.com>
+
+ * src/preproc/grn/hdb.cc (MAXSTRING_S): New macro.
+ (DBRead): Use it.
+
+2001-12-19 Werner LEMBERG <wl@gnu.org>
+
+ Implement a fallback character request `.fchar'.
+
+ * src/roff/troff/charinfo.h (charinfo): New flag `fallback'.
+ (is_fallback): New inline function.
+ * src/roff/troff/input.cc (do_define_character): New function.
+ (define_character): Call `do_define_character'.
+ (define_fallback_character): New function.
+ (init_input_requests): Add `fchar'.
+ (charinfo::charinfo): Updated.
+ (charinfo::set_macro): New argument to set `fallback' flag.
+ * src/roff/troff/node.cc (make_glyph_node, make_node,
+ node::add_char): Check `fallback' flag.
+ * NEWS, man/groff_diff.man, man/groff_man: Updated.
+
+2001-12-16 Werner LEMBERG <wl@gnu.org>
+
+ * groff.texinfo: Document exact search algorithm for glyphs.
+
+2001-12-15 Werner LEMBERG <wl@gnu.org>
+
+ * Makefile.cpg, Makefile.ccpg, Makefile.man: Add dummy file to
+ the left side of $(MANPAGES) rule to make it always non-empty.
+
+2001-12-14 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (default_black): Define default color
+ `black' if not yet defined.
+
+2001-12-13 Werner LEMBERG <wl@gnu.org>
+
+ Implement new string-valued register `.fn' to return the current
+ real (internal) font name.
+
+ * env.cc (environment::get_font_name_string): New function.
+ (init_env_requests): Add `.fn' register.
+ * env.h (environment): Updated.
+ * node.cc (font_info): Make `get_font_name' a friend.
+ (get_font_name): New function.
+ * node.h: Updated.
+
+ * man/groff_diff.man, man/groff.man, NEWS: Updated.
+
+2001-12-12 Ralph Corderoy <ralph@inputplus.demon.co.uk>
+
+ * src/preproc/eqn/main.cc (inline_equation): Fix typos.
+
+2001-12-12 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/groff_man.man, doc/groff.texinfo: There is no .R macro.
+
+2001-12-10 Gaius Mulley <gaius@glam.ac.uk>
+
+ * man/groff_diff.man: Adding documentation for \O.
+
+2001-12-10 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/html/pre-html.cc (TROFF_COMMAND): Removed.
+ (scanArguments): Use PROG_PREFIX for the name of the troff binary.
+
+2001-12-09 Werner LEMBERG <wl@gnu.org>
+
+ * man/roff.man: Revised.
+ * src/roff/groff/groff.man: Replace man page references with a
+ pointer to roff.man.
+
+2001-12-09 Bernd Warken <bwarken@mayn.de>
+
+ * man/roff.man: Completely rewritten.
+
+2001-12-06 Ralph Corderoy <ralph@inputplus.demon.co.uk>
+
+ * src/preproc/eqn/main.cc (inline_equation): Improve error message.
+
+2001-12-05 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (get_delim_file_name): Removed since no
+ longer used.
+ * src/devices/grohtml/post-html.cc (html_printer::html_printer): Fix
+ order of initializers.
+ * NEWS: Updated.
+
+2001-12-05 Gaius Mulley <gaius@glam.ac.uk>
+
+ * doc/groff.texinfo: Fix documentation of \O.
+
+ * src/devices/grohtml/html-text.cc (html_text::do_indent,
+ html_text::do_table, html_text::do_emittext, html_text::do_para):
+ Use `const' for first argument.
+ (html_text::do_table): Use cast.
+ * src/devices/grohtml/html-text.h: Updated.
+ * src/devices/grohtml/output.cc (simple_output::put_string): Add
+ method for `const string &s'.
+ * src/devices/grohtml/html.h: Updated.
+ * src/devices/grohtml/post-html.cc (MAX_STRING_LENGTH): Removed.
+ (ANCHOR_TEMPLATE): Modified.
+ (manufacture_headings): New global variable to handle `-h' option.
+ (is_subsection): Removed.
+ (char_buffer::add_string): Add `const' to first argument.
+ Protect against invalid string argument.
+ Add method for `const string &s'.
+ (text_glob): Completely redesigned.
+ (page): Use `const' for strings and remove string length variable.
+ (page::add_html): Removed.
+ (page::add_end_encode): New member function.
+ (to_unicode): Moved upwards.
+ (title_desc, header_desc): Updated.
+ (header_desc::write_headings): Updated to new ANCHOR_TEMPLATE
+ definition.
+ (html_printer::is_bold, html_printer::make_bold): New member
+ functions.
+ (html_printer::end_of_line): Updated.
+ (generate_img_src, html_printer::do_auto_image,
+ html_printer::do_title, html_printer::write_header,
+ html_printer::determine_header_level, html_printer::do_heading,
+ html_printer::do_linelength, html_printer::do_pageoffset,
+ html_printer::do_indentation, html_printer::do_tempindent,
+ html_printer::do_indentedparagraph, html_printer::do_break,
+ html_printer::flush_sbuf, get_html_translation,
+ html_printer::begin_page, html_printer::special): Rewritten to get
+ rid of static string length limit.
+ (html_printer::troff_tag): Added `.no-auto-rule'.
+ (html_printer::flush_globs): Small fix.
+ (html_printer::determine_space): Don't compute `space_width'.
+ (html_printer::translate_to_html): Renamed to ...
+ (html_printer::emit_html): This (with updates).
+ (html_printer::write_header): Implement `-h' option.
+ (html_printer::draw): Remove commented-out code. Handle `F'
+ command.
+ (html_printer::add_char_to_sbuf): Removed.
+ (html_printer::add_to_sbuf): Rewritten.
+ (html_printer::sbuf_continuation): Fixed.
+ (html_printer::seen_backwards_escape, reverse,
+ html_printer::remove_last_char_from_sbuf): Removed.
+ (char_translate_to_html, str_translate_to_html): Removed.
+ (html_printer::overstrike): New function member.
+ (html_printer::set_char): Use it.
+ (html_printer::do_body): New function member.
+ (html_printer::~html_printer): Use it.
+ (main): Handle `-h' option.
+ (usage): Updated.
+ * src/devices/grohtml/grohtml.man: Document -h switch.
+
+ * src/preproc/html/pre-html.cc: Include searchpath.h
+ Replace `POSTSCRIPTRES' macro with `postscriptRes' variable.
+ (get_resolution): New function.
+ (checkImageDir): Use `0777' permissions in mkdir()
+ (write_start_image): Rewritten to use `\O[5...]'.
+ (createImage, generateImages): Updated.
+ (main): Handle `F' and `h' options.
+ Use `get_resolution'.
+
+ * src/roff/troff/input.cc (begin, end, image): Removed.
+ (do_suppress): Take parameter.
+ Handle modified syntax of `\O'.
+ (token::next): Updated.
+ (init_markup_requests): Removed.
+ (main): Updated.
+
+ * src/roff/troff/div.h: Add declaration for begin_page().
+
+ * tmac/color-html.tmac: Removed. Contents moved to...
+ * tmac/html.tmac: Here. Set background color.
+ * tmac/color.tmac: Removed. Contents moved to...
+ * tmac/ps.tmac: Here.
+ * tmac/www.tmac: Remove the title command when generating images
+ for html.
+ (NO_AUTO_RULE): New macro.
+ (HTML_DO_IMAGE): Use revised `\O' escapes.
+ * tmac/Makefile.sub, tmac/groff_www.man, tmac/troffrc: Updated.
+
+2001-12-02 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/groff_mdoc.man: Fix typo.
+
+2001-12-01 Colin Watson <cjwatson@debian.org>
+
+ * man/roff.man: Fix typo.
+
+2001-11-29 Werner LEMBERG <wl@gnu.org>
+
+ * src/libs/libbib/map.c, src/utils/pfbtops/pfbtops.c: Include
+ stdlib.h.
+
+ * src/roff/troff/input.cc (read_draw_node): Emit error message if
+ more than one argument to \D'f ...'.
+
+ * tmac/Makefile.sub (NORMALFILES): Add lbp.tmac.
+
+2001-11-28 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/an-old.tmac, tmac/doc.tmac: Assure that the macro package is
+ loaded only once.
+
+ * tmac/groff_man.man: Minor cosmetic fix.
+
+2001-11-27 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/groff/groff.man, tmac/groff_tmac.man,
+ tmac/groff_www.man: s/mwww/www/.
+
+2001-11-26 Werner LEMBERG <wl@gnu.org>
+
+ * aclocal.m4 (GROFF_MKSTEMP): Implement test using C++ linkage.
+ * configure: Regenerated.
+ * win32-diffs: Updated.
+
+ * tmac/groff_mwww.tmac: Renamed to ...
+ * tmac/groff_www.tmac: This.
+ * tmac/mwww.tmac: Removed.
+ * NEWS, tmac/Makefile.sub: Updated.
+
+2001-11-21 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Improve documentation of the `\v' escape.
+ Fix explanation of `\D' and `rt'.
+
+2001-11-20 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/an-old.tmac (an-header): Set header length equal to page
+ width.
+ * doc/groff.texinfo: Improve documentation of `ne' request. Other
+ minor fixes.
+ * NEWS: Small fix.
+
+2001-11-19 Werner LEMBERG <wl@gnu.org>
+
+ * NEWS, man/Makefile.sub: Updated.
+
+2001-11-19 Bernd Warken <bwarken@mayn.de>
+
+ * man/ditroff.man: New file.
+
+2001-11-17 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff_differences.man: Renamed to ...
+ * man/groff_diff.man: This. Updated.
+ * man/Makefile.sub, src/roff/troff/troff.man, NEWS: Updated.
+
+ * src/preproc/html/pushbackbuffer.cc: Renamed to ...
+ * src/preproc/html/pushback.cc: This. Updated.
+ * src/preproc/html/pushbackbuffer.h: Renamed to ...
+ * src/preproc/html/pushback.h: This.
+ * src/preproc/html/Makefile.sub, src/preproc/html/pre-html.cc:
+ Updated.
+
+ * src/libs/libgroff/htmlindicate.cc: Renamed to ...
+ * src/libs/libgroff/htmlhint.cc: This.
+ * src/libs/libgroff/Makefile.sub: Updated.
+
+ * tmac/an-old.tmac (an-end): Fix page length.
+
+2001-11-16 Werner LEMBERG <wl@gnu.org>
+
+ * NEWS, man/groff_differences.man, doc/groff.texinfo: Updated.
+ * man/Makefile.sub: Include groff_differences.man.
+ * VERSION: Set to 1.18.
+ * REVISION: Set to 0.
+
+2001-11-16 Bernd Warken <bwarken@mayn.de>
+
+ * src/roff/troff/input.cc (do_define_macro): Allow whitespace before
+ the second dot (or ending macro name) to end a macro.
+ * doc/groff.texinfo: Doc fix.
+
+2001-11-16 Ruslan Ermilov <ru@FreeBSD.org>
+
+ * tmac/doc-common (doc-header): Handle very long document titles
+ better.
+
+2001-11-16 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/doc.tmac (doc-do-Bl-args): Fix .substring requests.
+
+2001-11-15 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/troff.man: Revised and split into troff.man and...
+ * man/groff_differences.man: New file.
+ * NEWS: Updated.
+
+2001-11-13 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/an-old.tmac (TS, TE): New macros for table support.
+
+2001-11-12 Werner LEMBERG <wl@gnu.org>
+
+ * src/include/lib.h: Provide a fix for emx to not include
+ groff-getopt.h.
+
+2001-10-27 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/input.cc (substring_macro): Fix computation of
+ boundary values.
+
+2001-10-20 Werner LEMBERG <wl@gnu.org>
+
+ Undo change from 2001-08-28.
+
+ * src/roff/troff/input.cc (have_input): New global variable.
+ (token::next): Set `have_input' for \f, \H, \R, \s, and \S if not
+ in compatibility mode.
+ (process_input_stack): Use it.
+
+2001-10-19 Ruslan Ermilov <ru@FreeBSD.org>
+
+ * tmac/doc.tmac (doc-flag-recursion): Protect arguments against
+ being handled as end-of-sentence characters,
+
+2001-10-10 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/roff/troff/input.cc (file_iterator): New members
+ `suppress_newline_flag' and `seen_escape'.
+ (file_iterator::next_file): Updated.
+ (file_iterator::fill): Use it.
+ (string_iterator): New member `suppress_newline_flag'.
+ (string_iterator::fill): Set it.
+ (get_color_element): Use MAX_COLOR_VAL.
+ * src/roff/troff/env.cc (environment): Remove `need_eol'.
+ (no_fill): Don't set `env->ignore_next_eol'.
+ (environment::newline): Handle `eol' tag properly.
+ Emit `eol.ce'.
+ (environment::add_html_tag): Set `env->ignore_next_eol'.
+ Don't handle `.ce'.
+ * src/roff/troff/env.h (environment): Updated.
+
+ * src/devices/grohtml/post-html.cc (text_glob::is_eol_ce): New
+ member function.
+ (html_printer::outstanding_eol): New member function.
+ (html_printer::do_title): Use new functions.
+ (html_printer::troff_tag): Test `id_eol_ce'.
+
+2001-10-10 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/color.tmac, tmac/color-html.tmac: Use `.do' to make those
+ files work with -C also.
+
+2001-10-05 Werner LEMBERG <wl@gnu.org>
+
+ * doc/pic.ms: Minor fix.
+ * src/preproc/html/pre-html.cc (scanArguments): Don't handle `-?'
+ as a valid command line switch.
+ * src/devices/grohtml/post-html.cc (main): Ditto.
+ (usage): Updated.
+ * src/devices/grohtml/grohtml.man: Updated.
+ * src/roff/groff/groff.cc (main): Pass `-v' to predriver also.
+
+2001-10-04 Werner LEMBERG <wl@gnu.org>
+
+ Implementing color support in troff, pic, grops, and grohtml. These
+ changes are based on a major patch provided by Gaius Mulley
+ <gaius@glam.ac.uk>.
+
+ New request: `defcolor', supporting rgb, cmy, cmyk, and gray
+ definitions with both hex values and fractions.
+
+ New escapes: \m and \M for drawing and background color,
+ respectively. This corresponds to the troff output commands `m'
+ and `DF'.
+
+ groff and troff accept command line switch `-c' to disable color
+ output (which is automatically disabled in compatibility mode).
+
+ New scaling indicator `f' for fractions (1f = 65536u).
+
+ New conditional operator `m' to test for defined colors with `if'
+ and `ie'.
+
+ New keywords `color' (or `colour', `colored', `coloured'), `outline'
+ (or `outlined'), and `shaded' added to pic.
+
+ * src/include/color.h: New file.
+ * src/include/driver.h: Include it.
+ * src/include/printer.h: Include color.h.
+ (environment): New members `col' and `fill'.
+ (printer): Remove `adjust_arc_center' member function.
+ * src/include/Makefile.sub: Updated.
+
+ * src/libs/libdriver/input.cc (do_file): Initialize `env.col' and
+ `env.fill'.
+ Handle `m' and `DF' troff commands.
+ * src/libs/libgroff/color.cc: New file.
+ * src/libs/libgroff/Makefile.sub: Updated.
+
+ * src/preproc/html/pre-html.cc (IMAGE_BORDER_PIXELS): Set to 2.
+ (stop): Removed.
+ (createImage): Fix computation of `y2'.
+ Use `pnmcrop' also.
+ (buffer::write_file_html): Remove calls to `stop'.
+
+ * src/preproc/pic/common.h (common_output): New abstract function
+ members `set_color', `reset_color', `get_last_filled', and
+ `get_outline_color'.
+ * src/preproc/pic/object.h: Add `IS_SHADED' and `IS_OUTLINED'.
+ (object_spec): Add members `shaded' and `outlined'.
+ * src/preproc/pic/output.h (output): `command' is now abstract.
+ New function members `set_color', `reset_color', `get_last_filled',
+ and `get_outline_color'.
+ * src/preproc/pic/lex.cc (lookup_keyword): Recognize `colo[u]r[ed]',
+ `outline[d]', and `shaded'.
+ * src/preproc/pic/object.cc (output::command): Removed.
+ (output::set_location): Moved to output.h.
+ (graphic_object): Add protected members `outline_color' and
+ `color_fill'.
+ Add member functions `set_outline_color', `get_outline_color', and
+ `set_fill_color'.
+ (closed_object): Add member function `set_fill_color'.
+ Add member `color_fill'.
+ (graphic_object::print_text): Use `out->set_color' and
+ `out->reset_color'.
+ (box_object::print, ellipse_object::print, circle_object::print,
+ line_object::print, spline_object::print, arc_object::print): Ditto.
+ (object_spec::make_object): Implement `IS_OUTLINED' and `IS_SHADED'.
+ * src/preproc/pic/pic.y: Add tokens `COLORED', `OUTLINED', and
+ `SHADED', making them `%left'.
+ Add rules `object_spec [SHADED|COLORED|OUTLINED] text'.
+ * src/preproc/pic/tex.cc (tex_output): New dummy function members
+ `set_color', `reset_color', `get_last_filled', and
+ `get_outline_color'.
+ * src/preproc/pic/troff.cc (simple_output): New abstract function
+ members `set_color', `reset_color', and `get_last_filled'.
+ (simple_output::polygon, simple_output::circle,
+ simple_output::ellipse): Use `get_last_filled'.
+ (troff_output): New members `last_filled' and `last_outlined'.
+ New function members `set_color', `reset_color', `get_last_filled',
+ and `get_outline_color'.
+ (troff_output::finish_picture): Use `reset_color'.
+ (troff_output::set_fill): Test `last_filled'.
+ * src/preproc/pic/pic.man: Updated.
+
+ * src/roff/groff/groff.cc (main): Implement `-c' option.
+ (synopsis, help): Updated.
+ src/roff/groff/groff.man: Updated.
+
+ * src/roff/troff/troff.h: Include color.h.
+ (warning_type): Add WARN_COLOR.
+ * src/roff/troff/env.h (environment): New members
+ `{cur,prev}_{glyph,fill}_color'.
+ New member functions `get_{prev_,}{glyph,fill}_color'.
+ * src/roff/troff/env.cc: Initialize and implement them.
+ * src/roff/troff/input.cc: New global variable `disable_color_flag'.
+ Replace `NULL' with `0' everywhere for consistency.
+ (lookup_color, default_black, do_glyph_color, do_fill_color,
+ get_color_element, read_rgb, read_cmy, read_cmyk, read_gray,
+ define_color): New functions.
+ (token::next): Implement \M and \m escapes.
+ (do_if_request): Implement `m' operator.
+ (usage): Updated.
+ (main): Implement `-c' option.
+ (init_markup_requests): Add `defcolor' request.
+ (warning_table): Add `color' warning.
+ * src/roff/troff/node.h (glyph_color_node, fill_color_node): New
+ classes.
+ * src/roff/troff/node.cc (troff_output_file): New members
+ `current_{page,glyph}color'. New member functions `put_hex',
+ `glyph_color', and `fill_color'.
+ (glyph_color_node::*, fill_color_node::*): Implement it.
+ * src/roff/troff/number.cc (SCALE_INDICATOR_CHARS): Add `f'.
+ (parse_term): Add support for `f'.
+ * src/roff/troff/troff.man: Updated.
+
+ * src/devices/grodvi/dvi.cc (draw_dvi_printer::draw): Add dummy
+ entry for `F'.
+ * src/devices/grolbp/lbp.cc (lbp_printer::draw): Ditto.
+ * src/devices/grolj4/lj4.cc (lj4_printer::draw): Ditto.
+
+ * src/devices/grohtml/html-text.h (HTML_TAG): Add COLOR_TAG.
+ (tag_definition): Use `void *' for arg1.
+ (html_text): New member functions `do_color' and `done_color'.
+ Use `void *' for second parameter of `push_para' member function.
+ New `push_para' member function with a single parameter.
+ Use `char *' for parameter of `issue_table_begin' member funtion.
+ New `issue_color_begin' member function.
+ * src/devices/grohtml/html-text.cc (html_text::end_tag): Handle
+ COLOR_TAG.
+ (html_text::issue_color_begin): New function.
+ (html_text::issue_table_begin): Use `char *' for parameter.
+ (html_text::start_tag, html_text::shutdown,
+ html_text::check_emit_text): Updated.
+ (html_text::push_para): Use `void *' for second parameter.
+ Add same function with only one parameter.
+ (html_text::do_*): Updated.
+ (html_text::do_color, html_text::done_color): New functions.
+ * src/devices/grohtml/post-html.cc (style): New member `col'.
+ Mew member `style' with 6 parameters.
+ (style::style, style::operator==): Updated.
+ (html_printer::do_font): Use it.
+ (html_printer::draw): Add dummy entry for `F'.
+ (html_printer::set_char): Updated.
+ * src/devices/grohtml/grohtml.man: Updated.
+
+ * src/devices/grops/ps.cc (ps_output::put_float): Use `%g' to have
+ trailing zeroes removed.
+ (ps_printer): New members `sbuf_color', `fill_color', and
+ `output_color'.
+ Removed member `fill'.
+ New member function `set_color'.
+ (ps_printer::ps_printer, ps_printer::set_char): Updated.
+ (ps_printer::flush_sbuf, ps_printer::set_line_thickness,
+ ps_printer::fill_path, ps_printer::draw): Use `set_color'.
+
+ * tmac/color-html.tmac, tmac/color.tmac: New files.
+ * tmac/troffrc: Include them.
+ * tmac/www.tmac (URL, FTP, MAILTO): Use blue color.
+ * tmac/Makefile.sub: Updated.
+
+ * NEWS, doc/groff.texinfo, doc/pic.ms, man/groff_out.man,
+ man/groff.man: Updated.
+ * font/devps/prologue.ps: Define FC and CO functions.
+
+2001-10-04 Gaius Mulley <gaius@glam.ac.uk>
+
+ Fix incorrect cropping of images and incorrect handling of special
+ characters. Fix handling of file names in \O.
+
+ * src/include/geometry.h: New file.
+ * src/libs/libgroff/geometry.cc: New file.
+ * src/libs/libdriver/printer.cc (printer::adjust_arc_center): Moved
+ to `geometry.cc'.
+ * src/roff/troff/input.cc (get_delim_file_name): Fixed problem with
+ initial spaces.
+ (do_suppress): Updated.
+ * src/roff/troff/node.cc: Include geometry.h.
+ (troff_output_file::flush_tbuf): Fixed parameters to
+ `check_output_limits'.
+ (troff_output_file::check_charinfo): Ditto.
+ (troff_output_file::determine_line_limits): Add support for `Da'
+ and `Dl' commands.
+
+ * src/devices/grohtml/post-html.cc (str_translate_to_html):
+ Add new parameter `is_special' to decode special characters from
+ escape sequences.
+ (html_printer::do_title, html_printer::do_heading,
+ html_printer::do_indentedparagraph,
+ html_printer::translate_to_html, html_printer::special): Updated.
+
+2001-10-03 Werner LEMBERG <wl@gnu.org>
+
+ * Makefile.sub (DISTCLEANFILES): Add stamp-h.
+ Fix entry for config.h.
+ * test-groff (GROFF_BIN_PATH): Add $builddir/roff/groff.
+ * tmac/troffrc: Translate nonbreakable space character to `\~'.
+ * src/preproc/eqn/eqn.man: Document -d command line option.
+
+2001-09-27 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff.man: Use
+
+ .ev xxx
+ .na
+ .nh
+ <table>
+ .ev
+
+ instead of the old code (`.ad .hy' after the table) to suppress
+ incorrect hyphenation for grohtml output.
+
+2001-09-22 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff_font.man, man/groff_out.man: Minor fixes.
+
+2001-09-20 Werner LEMBERG <wl@gnu.org>
+
+ * PROBLEMS: Updated, reordered. Improved EPS section (thanks to
+ Arnold Robbins <arnold@skeeve.com>).
+
+2001-09-09 Werner LEMBERG <wl@gnu.org>
+
+ * configure: Regenerated with autoconf 2.52.
+
+ * doc/groff.texinfo: Complete revision of indices.
+
+2001-09-07 Werner LEMBERG <wl@gnu.org>
+
+ * doc/Makefile (clean): Updated to delete all indices.
+
+2001-09-05 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/troff.man: Remove superfluous line.
+
+ * tmac/s.tmac: Enable all warnings only if no -W or -w option is
+ given on the command line (or rather, if only the default warnings
+ are set).
+
+2001-09-03 Werner LEMBERG <wl@gnu.org>
+
+ * man/groff.man, src/preproc/eqn/eqn.man, tmac/groff_mdoc.man: Don't
+ use .ne for TTY devices.
+
+2001-08-31 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/token.h, src/roff/troff/input.cc:
+ s/TOKEN_TRANSPARENT_ESCAPE/TOKEN_OPAQUE_ESCAPE/.
+
+2001-08-28 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/token.h (token_type): Add TOKEN_TRANSPARENT_ESCAPE.
+ * src/roff/troff/input.cc (token::next): Return
+ TOKEN_TRANSPARENT_ESCAPE for \f, \H, \R, \s, and \S if not in
+ compatibility mode.
+ (token::description): Updated.
+ (process_input_stack): Reset `bol' for TOKEN_TRANSPARENT_ESCAPE.
+ (token::add_to_node_list, token::process): Ignore
+ TOKEN_TRANSPARENT_ESCAPE.
+
+2001-08-27 Werner LEMBERG <wl@gnu.org>
+
+ * tmac/an-old.tmac: Fix `S' string.
+
+2001-08-26 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/troff.man: Don't use .ne for TTY devices.
+
+2001-08-25 Werner LEMBERG <wl@gnu.org>
+
+ * doc/pic.ms: Replace `\\' with `\e' (and fixing some single
+ backslashes).
+ Many other minor fixes.
+
+ * configure.ac: Add message at end to inform how to compile
+ xditview.
+ * configure: Regenerated.
+
+2001-08-24 Werner LEMBERG <wl@gnu.org>
+
+ * src/include/getopt.h, src/libs/libgroff/{getopt.c, getopt1.c}:
+ Updated to latest version of libc.
+
+2001-08-23 Werner LEMBERG <wl@gnu.org>
+
+ * configure.ac: Don't create subdirectories before AC_CONFIG_FILES.
+ Autoconf 2.50 and newer can handle this.
+ * configure: Regenerated.
+
+2001-08-21 Werner LEMBERG <wl@gnu.org>
+
+ * doc/pic.ms: Fix typo.
+ * src/preproc/tbl/tbl.man: Document case of global options.
+
+2001-08-21 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/devices/grohtml/post-html.cc (html_printer::end_font): Fix
+ handling of `CR' font.
+
+2001-08-20 Werner LEMBERG <wl@gnu.org>
+
+ Use a config.h file.
+
+ * src/include/lib.h: Include config.h.
+ * All C files: Ditto (if necessary).
+ * All C++ source and header files: Include lib.h first (if
+ necessary).
+
+ * src/include/config.hin: New file (autogenerated by autoheader).
+ * stamp-h.in: New file.
+ * configure.ac: Updated.
+ * aclocal.m4: Add third parameters to AC_DEFINE macros.
+ (GROFF_ARRAY_DELETE): Simplified.
+ * Makefile.sub (DISTCLEANFILES): Updated.
+ Added targets for remaking config.status, config.hin, config.h,
+ stamp-h.in, and stamp-h.
+ * configure: Regenerated.
+
+2001-08-19 Werner LEMBERG <wl@gnu.org>
+
+ * NEWS: Updated.
+
+2001-08-18 Sebastian Krahmer <krahmer@suse.de>
+
+ * src/preproc/pic/pic.y (format_number): Use do_sprintf().
+ (do_sprintf): Use snprintf().
+
+2001-08-18 Werner LEMBERG <wl@gnu.org>
+
+ * src/libs/snprintf/*: Added an snprintf module written by Mark
+ Martinec.
+ * src/libs/libgroff/Makefile.sub: Updated.
+ * configure.ac: Add test for snprintf().
+ * Makefile.in: Updated.
+ * configure: Regenerated.
+
+ * src/preproc/html/pre-html.cc (make_message): Reactivate code which
+ uses snprintf().
+
+2001-08-14 Ruslan Ermilov <ru@FreeBSD.org>
+
+ * tmac/doc.tmac (Ex): New implementation.
+ * tmac/doc-common, tmac/groff_tmac.man: Updated.
+
+2001-08-13 Ruslan Ermilov <ru@FreeBSD.org>
+
+ * tmac/doc.tmac (Rv): Implement support for 0 or more than 1
+ argument.
+ * tmac/groff_tmac.man: Updated.
+
+2001-08-13 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/tbl/tbl.man: Minor documentation update.
+
+2001-08-13 John David Anglin <dave@hiauly1.hia.nrc.ca>
+
+ * src/libs/libgroff/tmpname.cc: Add prototype for gettimeofday().
+ * configure.ac: Add declaration test for gettimeofday().
+ * Makefile.in: Document NEED_DECLARATION_GETTIMEOFDAY defines.
+ * aclocal.m4: Include sys/time.h for gettimeofday declaration test.
+ * configure: Regenerated.
+
+2001-08-11 Werner LEMBERG <wl@gnu.org>
+
+ * aclocal.m4 (GROFF_MKSTEMP): Define HAVE_MKSTEMP.
+ * configure.ac: Add declaration test for strcasecmp().
+ * Makefile.in: Updated.
+ * configure: Regenerated.
+ * src/include/lib.h [!HAVE_MKSTEMP]: Add prototype for mkstemp() --
+ this is necessary because groff's mkstemp.cc is C++.
+ Add declaration conditionally for strcasecmp().
+
+2001-08-10 Werner LEMBERG <wl@gnu.org>
+
+ Integrated pic2graph, contributed by Eric S. Raymond.
+
+ * contrib/pic2graph/{Makefile.sub, pic2graph.sh, pic2graph.man}: New
+ files.
+ * Makefile.in, NEWS: Updated.
+
+ * src/preproc/tbl/tbl.man: Revised.
+
+2001-08-09 Eric S. Raymond <esr@thyrsus.com>
+
+ * src/preproc/tbl/tbl.man: Extended to cover all tbl features.
+
+2001-08-09 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/tbl/main.cc (process_data): Fix recognition of .lf
+ requests.
+
+2001-08-08 Paul Eggert <eggert@twinsun.com>
+
+ * Makefile.sub (configure): Depend on configure.ac, not
+ configure.in.
+ * INSTALL.gen: Upgrade to autoconf 2.52's INSTALL.
+
+2001-08-07 Werner LEMBERG <wl@gnu.org>
+
+ * src/utils/afmtodit/afmtodit.man, src/roff/groff/groff.man: Minor
+ fixes.
+
+2001-08-06 Werner LEMBERG <wl@gnu.org>
+
+ * src/roff/troff/troff.man: Improve documentation of -E option.
+
+2001-07-28 Ralph Corderoy <ralph@inputplus.demon.co.uk>
+
+ * src/preproc/html/pushbackbuffer.cc (pushBackBuffer::readNumber):
+ Simplified.
+
+2001-07-27 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/refer/refer.cc: Undo last change.
+ * src/devices/grohtml/post-html.cc: Ditto.
+
+2001-07-26 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/refer/refer.cc: Include `lib.h'.
+ * src/devices/grohtml/post-html.cc: Ditto.
+
+2001-07-25 Gaius Mulley <gaius@glam.ac.uk>
+
+ * aclocal.m4 (GROFF_PAGE): Add `AC_DEFINE(PAGEA4)'.
+ * src/preproc/html/pre-html.cc: Use it for DEFAULT_VERTICAL_OFFSET.
+ * Makefile.in: Comment updated.
+ * configure: Regenerated.
+
+2001-07-25 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/pic/pic.cc: Removed.
+ * src/preproc/pic/pic_tab.h: Removed.
+ * src/preproc/refer/label.cc: Removed.
+
+ * doc/Makefile (.ms.html): Don't use a file name extension in
+ argument to grohtml's -I option.
+ * Makefile.in (dist): Remove CVS directories.
+ Call `distfiles' target.
+
+ * src/devices/grohtml/grohtml.man: Add information about valid
+ versions of pnmtopng.
+ * src/preproc/html/pre-html.cc (TRANSPARENT): Use `white' as colour
+ name instead of number.
+
+2001-07-24 Werner LEMBERG <wl@gnu.org>
+
+ * doc/groff.texinfo: Minor fixes.
+
+2001-07-21 Gaius Mulley <gaius@glam.ac.uk>
+
+ * doc/Makefile (.ms.html): Put image files into a subdirectory.
+ (clean): Updated.
+
+2001-07-20 Werner LEMBERG <wl@gnu.org>
+
+ * src/libs/libgroff/tmpname.cc: New file, defining get_tempname().
+ * src/libs/libgroff/mkstemp.cc: New file.
+ * src/libs/libgroff/mksdir.cc: New file.
+ * src/libs/libgroff/tmpfile.cc [HAVE_MKSTEMP_PROTO]: Removed.
+ (xtmpfile) [!HAVE_MKSTEMP]: Removed.
+ * src/libs/libgroff/Makefile.sub: Updated.
+ * src/include/lib.h: Add mksdir() prototype.
+ * src/include/posix.h: Define S_IXUSR if not yet defined.
+
+ * src/preproc/html/pre-html.cc (MAX_RETRIES): Removed.
+ (createAllPages): Use mksdir() instead of current code.
+ * src/utils/indxbib/indxbib.cc [HAVE_MKSTEMP_PROTO]: Removed.
+ (main): [!HAVE_MKSTEMP]: Removed.
+
+ * aclocal.m4 (GROFF_MKSTEMP): Updated to use new mkstemp.cc file.
+ (GROFF_INTTYPES_H, GROFF_UNSIGNED_LONG_LONG, GROFF_UINTMAX_T): New
+ macros.
+ * configure.ac: Add tests for stdint.h, sys/time.h, and
+ gettimeofday().
+ Call new GROFF_xxx macros.
+ * configure: Regenerated.
+ * Makefile.in: Comments updated.
+
+2001-07-20 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/preproc/html/pre-html.cc (scanArguments): Use getopt_long()
+ instead of current code.
+ * src/devices/grohtml/post-html.cc (main): Handle `-d' option.
+ * src/roff/groff/groff.cc (possible_command::insert_args): New
+ function.
+ (main): Use it for predriver handling instead of insert_arg().
+
+2001-07-19 Werner LEMBERG <wl@gnu.org>
+
+ * doc/Makefile: Added GROFF_BIN_PATH to make it work with uninstalled
+ groff also.
+
+ * src/include/posix.h: Define S_IWUSR if not yet defined.
+
+2001-07-18 Werner LEMBERG <wl@gnu.org>
+
+ * NEWS: Updated.
+
+2001-07-18 Ruslan Ermilov <ru@FreeBSD.org>
+
+ * tmac/groff_mdoc.man: Document new -width and -column syntax.
+ Some other minor fixes.
+ * tmac/an-old.tmac: Add `AT' and `UC' macros.
+
+2001-07-17 Gaius Mulley <gaius@glam.ac.uk>
+
+ Replace call to `troff' with `groff -Z' to make it aware of
+ GROFF_BIN_PATH.
+
+ * src/preproc/html/pre-html.cc (TROFF_COMMAND): New macro.
+ (troff_command, command_prefix): Removed.
+ (alterDeviceTo): Use groff.
+ (addZ): New function.
+ (char_buffer::do_html): Use it.
+ (scanArguments): Use TROFF_COMMAND.
+ (findPrefix): Removed.
+ (main): Updated.
+ * src/roff/groff/groff.cc (main): Handle zflag for preprocessors.
+
+2001-07-17 Eric S. Raymond <esr@snark.thyrsus.com>
+
+ * doc/pic.ms: Documentation fixes.
+
+2001-07-17 Werner LEMBERG <wl@gnu.org>
+
+ Replace atexit() with global destructor.
+
+ * src/libs/libgroff/tmpfile.cc (xtmpfile_list): Add constructor.
+ (xtmpfile_list_init): New global structure to deallocate
+ xtmpfile_list on exit. Its destructor inherits most code from
+ remove_tmp_files().
+ (remove_tmp_files): Deleted.
+ (add_tmp_file): Simplified.
+
+2001-07-16 Werner LEMBERG <wl@gnu.org>
+
+ Replace strdup() with strsave().
+
+ * src/devices/grolbp/lbp.cc [!HAVE_STRDUP]: Removed.
+ (set_papersize): Use strsave() and a_delete.
+ (main): Use strsave().
+ * src/preproc/html/pre-html.cc (make_message, createAllPages,
+ removeAllPages): Use strsave() and a_delete.
+
+ * configure.ac: Remove test for strdup.
+ * Makefile.in: Comment updated.
+ * configure: Regenerated.
+
+2001-07-15 Werner LEMBERG <wl@gnu.org>
+
+ * win32-diffs: Updated.
+
+2001-07-14 Werner LEMBERG <wl@gnu.org>
+
+ * src/preproc/html/pre-html.cc (makeTempFiles): Activate new code,
+ removing the old one.
+ * src/utils/indxbib/indxbib.cc (main): Remove compiler warning.
+
+2001-07-14 Ralph Corderoy <ralph@inputplus.demon.co.uk>
+
+ * src/libs/libgroff/tmpfile.cc (xtmpfile): Fix guard for `namep'.
+
+2001-07-12 Ruslan Ermilov <ru@FreeBSD.org>
+
+ Merge -xwidth into -width. Add -xwidth functionality to -column
+ also.
+
+ * tmac/doc.tmac (Bl): Add dummy doc-typeXXX and doc-spaceXXX to
+ avoid warning.
+ (doc-do-Bl-args): Merge -xwidth code with -width. Test whether
+ string immediately following a leading dot starts with a valid mdoc
+ argument.
+ Add similar code to the -column branch.
+ (doc-Bl-usage): Updated.
+ * groff_mdoc.man: s/-xwidth/-width/.
+
+2001-07-12 Gaius Mulley <gaius@glam.ac.uk>
+
+ * src/devices/grohtml/post-html.cc (text_glob::is_br): Stop titles
+ running into centered or non-formatted text.
+
+2001-07-11 Werner LEMBERG <wl@gnu.org>
+
+ Introduce short and long prefixes to have the selection at run-time
+ whether there is a 8+3 limit for names of temporary files.
+
+ * src/libs/libgroff/tmpfile.cc (TMPFILE_PREFIX): Replaced with...
+ (TMPFILE_PREFIX_SHORT, TMPFILE_PREFIX_LONG): This.
+ (tmpfile_prefix, tmpfile_prefix_len, use_short_prefix): New
+ variables.
+ (temp_init): New global structure to initialize above three
+ variables.
+ (xtmptemplate): Use two parameters for long and short prefix.
+ Simplify code use above three variables.
+ (xtmpfile): Use long and short prefixes as parameters.
+ * src/include/lib.h: Updated.
+
+ * src/preproc/html/pre-html.cc ({PAGE,PS,REGION}_TEMPLATE): Replace
+ with ...
+ ({PAGE,PS,REGION}_TEMPLATE_{SHORT,LONG}): This.
+ (createAllPages, makeTempFiles): Updated.
+
+2001-07-09 Werner LEMBERG <wl@gnu.org>
+
+ * REVISION: Increased to 3.
+
+Version 1.17.2 released
+=======================
+
2001-07-07 Werner LEMBERG <wl@gnu.org>
* src/utils/indxbib/indxbib.cc (main): Change type of `name_max'
@@ -190,10 +3980,6 @@ Version 1.17.1 released
* src/roff/troff/input.cc (read_size): Fix special case `\s0'.
-2001-05-16 Bruce Lilly <blilly@erols.com>
-
- * contrib/mm/m.tmac (TH): Fix incorrect error message.
-
2001-05-16 Werner LEMBERG <wl@gnu.org>
* src/roff/troff/input.cc (read_size): Emit warning if value becomes
@@ -469,8 +4255,8 @@ Version 1.17 released
* src/devices/grohtml-old/*: Removed.
* font/devhtml-old/*: Removed.
- * src/libgroff/htmlindicate.cc (graphic_start, graphic_end): Remove
- comments.
+ * src/libs/libgroff/htmlindicate.cc (graphic_start, graphic_end):
+ Remove comments.
* Makefile.in (CCPROGDIRS, DEVDIRS): Updated.
* test-groff (PATH): Updated.
* tmac/Makefile.sub (NORMALFILES): Updated.
@@ -482,11 +4268,11 @@ Version 1.17 released
* tmac/www.tmac: Remove special code for html-old device.
Replace `html-or-html-old' register with `www-html'.
- * src/libgroff/tmpfile.cc (remove_tmp_files),
- src/libgroff/htmlindicate.cc (graphic_end), include/htmlindicate.h,
- src/preproc/grn/*.cc, src/roff/groff/env.{cc,h}: Remove `void'
- parameter if used as a single argument for consistency with rest of
- source code.
+ * src/libs/libgroff/tmpfile.cc (remove_tmp_files),
+ src/libs/libgroff/htmlindicate.cc (graphic_end),
+ include/htmlindicate.h, src/preproc/grn/*.cc,
+ src/roff/groff/env.{cc,h}: Remove `void' parameter if used as a
+ single argument for consistency with rest of source code.
* aclocal.m4, tmac/an-old.tmac: Fix copyright.
@@ -548,10 +4334,6 @@ Version 1.17 released
* src/devices/grohtml/html-text.cc (issue_table_begin): Set
`frame=void', not `frame=none'. Add `border=0'.
-2001-04-12 Ruslan Ermilov <ru@FreeBSD.org>
-
- * contrib/mm/groff_mm.man: Fixing some typos.
-
2001-04-12 Werner LEMBERG <wl@gnu.org>
* PROBLEMS: Add some words on how to avoid wrapper macros.
@@ -1599,10 +5381,10 @@ Version 1.17 released
files. Add home directory to unsafe path for consistency. Don't
include the home directory in the font path.
- * src/lib/libgroff/macropath.cc: Add `config_macro_path', change
+ * src/libs/libgroff/macropath.cc: Add `config_macro_path', change
`macro_path'.
* src/include/macropath.h: Add `config_macrp_path'.
- * src/lib/libgroff/fontfile.cc: Fix font path.
+ * src/libs/libgroff/fontfile.cc: Fix font path.
* src/roff/troff/input.cc (process_startup_file): Use
`config_macro_path'.
(main): Select unsafe path if -U is given.
@@ -1758,8 +5540,8 @@ Version 1.17 released
* configure.in: Fix typo in comment.
* configure: Regenerated.
- * src/libgroff/*, src/include/*, src/roff/troff/*: Fixing copyright
- dates.
+ * src/libs/libgroff/*, src/include/*, src/roff/troff/*: Fixing
+ copyright dates.
2000-11-08 Werner LEMBERG <wl@gnu.org>
@@ -2035,11 +5817,6 @@ Version 1.17 released
* src/roff/troff/TODO: Updated.
-2000-08-28 Bruno Haible <haible@clisp.cons.org>
-
- * contrib/mm/Makefile.sub: New target 'all', makes all prerequisites
- of 'install'.
-
2000-08-25 Werner LEMBERG <wl@gnu.org>
* doc/groff.texinfo: Fix comment how to compile the DVI file.
@@ -2336,7 +6113,7 @@ Version 1.16.1 released
(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.
+ * src/libs/libbib/search.cc: #include nonposix.h.
(search_list::add_file): Open the file in binary mode.
* src/libs/libbib/linear.cc: #include nonposix.h.
@@ -2401,7 +6178,7 @@ Version 1.16.1 released
src/roff/groff/groff.cc: Use it.
* Makefile.in, configure: Updated.
-2000-06-07 Paco Andres Verdu <pandres@dragonet.es>
+2000-06-07 Paco Andrés Verdú <pandres@dragonet.es>
* src/devides/grolbp/lbp.h: Removed unused variables.
@@ -2895,7 +6672,7 @@ Version 1.16 released
* src/roff/grog/grog.man: Updated copyright date.
-2000-03-14 Francisco Andres Verdu <pandres@dragonet.es>
+2000-03-14 Francisco Andrés Verdú <pandres@dragonet.es>
* configure.in: Added test for strdup.
@@ -2948,7 +6725,7 @@ Version 1.16 released
2000-03-07 OKAZAKI Tetsurou <okazaki@be.to>
- * Makefile.in, contrib/mm/Makefile.sub, src/preproc/eqn/Makefile.sub,
+ * Makefile.in, Makefile.sub, src/preproc/eqn/Makefile.sub,
src/roff/groff/Makefile.sub, src/roff/nroff/Makefile.sub,
src/utils/afmtodit/Makefile.sub: Use $(INSTALL_SCRIPT) for script
files.
@@ -2980,7 +6757,7 @@ Version 1.16 released
Implement it.
* src/roff/troff/env.h: Add prototype.
-2000-03-05 Francisco Andres Verdu <pandres@dragonet.es>
+2000-03-05 Francisco Andrés Verdú <pandres@dragonet.es>
Adding strsep() -- Solaris 8 doesn't have it.
@@ -3004,7 +6781,7 @@ Version 1.16 released
* tmac/troffrc: Add tmac.lbp.
-2000-03-03 Francisco Andres Verdu <pandres@dragonet.es>
+2000-03-03 Francisco Andrés Verdú <pandres@dragonet.es>
* tmac/tmac.lbp: New file.
* src/devices/grolbp/grolbp.man: Add documentation of `lbpname'
@@ -3089,7 +6866,7 @@ Version 1.16 released
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>.
+ Francisco Andrés Verdú <pandres@dragonet.es>.
* src/devices/grolbp/*: The grolbp output device.
* font/devlpb/*: The font description files.
@@ -3248,7 +7025,7 @@ Version 1.16 released
Some other changes:
- * Man pages no depend on the files `VERSION' and `REVISION'.
+ * Man pages now depend on the files `VERSION' and `REVISION'.
* The added shell script `mkinstalldirs' will replace `mkdir' in
almost all cases.
diff --git a/contrib/groff/INSTALL b/contrib/groff/INSTALL
index cdf7eb9..0fb618e 100644
--- a/contrib/groff/INSTALL
+++ b/contrib/groff/INSTALL
@@ -41,9 +41,10 @@ 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 a DVI, PDF, or HTML version of the groff texinfo manual, say `make
+groff.dvi', `make groff.pdf', or `make groff.html', respectively, in the
+`doc' subdirectory (after compiling the groff package). Note that you
+need texinfo version 4.2 or newer as a prerequisite.
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 50dbe43..666ffd9 100644
--- a/contrib/groff/INSTALL.gen
+++ b/contrib/groff/INSTALL.gen
@@ -8,20 +8,27 @@ various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
- The file `configure.in' is used to create `configure' by a program
-called `autoconf'. You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
The simplest way to compile this package is:
@@ -55,14 +62,15 @@ Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
-the `configure' script does not know about. You can give `configure'
-initial values for variables by setting them in the environment. Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
- CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for variables by setting
+them in the environment. You can do that on the command line like this:
-Or on systems that have the `env' program, you can do it like this:
- env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+ ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+ *Note Environment Variables::, for more details.
Compiling For Multiple Architectures
====================================
@@ -75,7 +83,7 @@ directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
- If you have to use a `make' that does not supports the `VPATH'
+ If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a time
in the source code directory. After you have installed the package for
one architecture, use `make distclean' before reconfiguring for another
@@ -122,22 +130,36 @@ you can use the `configure' options `--x-includes=DIR' and
Specifying the System Type
==========================
- There may be some features `configure' can not figure out
+ There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of host the package
will run on. Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
+a message saying it cannot guess the host type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
CPU-COMPANY-SYSTEM
-See the file `config.sub' for the possible values of each field. If
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.
- If you are building compiler tools for cross-compiling, you can also
+ If you are _building_ compiler tools for cross-compiling, you should
use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the host
+platform (i.e., that on which the generated programs will eventually be
+run) with `--host=TYPE'. In this case, you should also specify the
+build platform with `--build=TYPE', because, in this case, it may not
+be possible to guess the build platform (it sometimes involves
+compiling and running simple test programs, and this can't be done if
+the compiler is a cross compiler).
Sharing Defaults
================
@@ -150,20 +172,44 @@ default values for variables like `CC', `cache_file', and `prefix'.
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
-Operation Controls
-==================
+Environment Variables
+=====================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to configure. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+will cause the specified gcc to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+`configure' Invocation
+======================
`configure' recognizes the following options to control how it
operates.
-`--cache-file=FILE'
- Use and save the results of the tests in FILE instead of
- `./config.cache'. Set FILE to `/dev/null' to disable caching, for
- debugging `configure'.
-
`--help'
+`-h'
Print a summary of the options to `configure', and exit.
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
`--quiet'
`--silent'
`-q'
@@ -175,9 +221,6 @@ operates.
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
-`--version'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`configure' also accepts some other, not widely useful, options.
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
diff --git a/contrib/groff/MANIFEST b/contrib/groff/MANIFEST
new file mode 100644
index 0000000..b45c046
--- /dev/null
+++ b/contrib/groff/MANIFEST
@@ -0,0 +1,152 @@
+MANIFEST
+
+Last update: 21 Dec 2001
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2001 Free Software Foundation, Inc.
+written by Bernd Warken <bwarken@mayn.de>
+maintained by Werner Lemberg <wl@gnu.org>
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHORS, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+
+########################################################################
+
+This file gives an overview of the directories and the main files of
+the groff source distribution.
+
+
+1) The top directory.
+
+ BUG-REPORT A template for bug-reports.
+ ChangeLog Log of the changes in the different groff versions.
+ COPYING The GNU General Public License (GPL).
+ FDL The Free Documentation License (FDL).
+ INSTALL Information on compiling and installing groff.
+ INSTALL.gen Generic information on configuration and compiling.
+ MANIFEST The file you are reading.
+ MORE.STUFF Useful stuff in other packages.
+ NEWS Recent user-visible changes in groff.
+ PROBLEMS Tips to handle known critical situations.
+ PROJECTS Long-term additions to groff.
+ README Availability and contact information for groff.
+ README.WIN32 Documentation of the Win32 port of groff.
+ TODO Things planned for future groff versions.
+
+ All other files in the top directory are related to the configuration,
+ compilation, and install processes.
+
+
+2) The directory structure
+
+./arch Data that is special for different architectures.
+ djgpp Data special for the 32-bit DOS compiler djgpp.
+
+./contrib Part of groff, but maintained by other people.
+ groffer A wrapper to conveniently view roff files.
+ mm The groff mm macro package.
+ mom The groff mom macro package.
+ pic2graph Convert PIC diagrams into different graphical formats.
+
+./doc Manuals and tutorials to groff aspects.
+
+./font Device information and fonts.
+ devX100 100dpi device for X Window System.
+ devX100-12 100dpi device with narrower font (for 12pt base font).
+ devX75 75dpi device for X Window System.
+ devX75-12 75dpi device with narrower font (for 12pt base font).
+ devascii Text device for ASCII output.
+ devcp1047 EBCDIC device.
+ devdvi TeX DVI device.
+ devhtml HTML device.
+ devlatin1 Text device for latin-1 (ISO 8859-1) output.
+ devlbp Device for Canon CAPSL laser printers.
+ devlj4 Device for HP Laserjet 4, PCL 5, and compatible printers.
+ devps PostScript device.
+ devutf8 Text device for Unicode output.
+
+./man Some groff manual pages of more general character.
+
+./src Everything written in programming languages.
+
+./src/devices The postprocessors.
+ grodvi TeX DVI output.
+ grohtml HTML output.
+ grolbp Canon printers.
+ grolj4 HP Laserjet 4, PCL 5, and compatible printers.
+ grops PostScript output.
+ grotty Text output.
+
+./src/include The *.h C/C++ include files.
+
+./src/libs C++ code common to several parts of the groff sources.
+ libbib Library of bibliographic functions.
+ libdriver Parser for intermediate output and postprocessor code.
+ libgroff Library for general support functions used everywhere.
+ snprintf An implementation of snprintf() and friends.
+
+./src/preproc Preprocessors.
+ eqn Mathematical formulae.
+ grn Gremlin pictures.
+ html The preprocessor part of grohtml.
+ pic Diagram drawer.
+ refer Bibliographic references.
+ soelim File inclusion using tmac path.
+ tbl Tables.
+
+./src/roff Front-end programs.
+ groff Wrapper around troff. This is the main user program.
+ grog Guess groff command line options.
+ nroff Emulate classical nroff text formatter.
+ troff Main roff formatter program.
+
+./src/xditview A groff (pre)viewer for the X Window System.
+
+./src/utils Utility programs around groff.
+ addftinfo Add information to old troff font files for use with groff.
+ afmtodit Create font description files for the PostScript device.
+ hpftodit Create font description files for the LJ4 device.
+ indxbib Make inverted index for bibliographic databases.
+ lkbib Search bibliographic databases.
+ lookbib Interactively search bibliographic databases.
+ pfbtops Translate a PostScript font in .pfb format to ASCII.
+ tfmtodit Create font description files for TeX DVI device.
+
+./tmac Macro files.
+
+
+3) Documentation
+
+The groff documentation is scattered upon several places.
+
+- The main directory contains documents related to the groff source.
+ The README file contains the information needed to get the groff
+ package, report bugs, and contact the developers.
+
+- The man-page of each program (section 1) is kept in the source
+ directory of the program.
+
+- The man-pages for the other sections are found in `src/man'.
+
+- Documentation in other formats are located in the `doc' directory,
+ including the groff info file, tutorials, and manuals.
+
+
+4) The roff parser
+
+The parsing of the roff language is done by troff. The input is
+transformed into "nodes" by `src/roff/troff/node.cc'. From these, the
+intermediate output is generated.
+
+
+5) Postprocessing
+
+The parser for the intermediate output and the postprocessing is in
+`src/libs/libdriver/input.cc'. This is used by all postprocessors.
diff --git a/contrib/groff/MORE.STUFF b/contrib/groff/MORE.STUFF
index a35ea97..46107a9 100644
--- a/contrib/groff/MORE.STUFF
+++ b/contrib/groff/MORE.STUFF
@@ -14,14 +14,14 @@ Here two ports using the gcc compiler and other GNU tools:
http://sources.redhat.com/cygwin/mirrors.html
- At any of this mirrors, groff can be found in the directory
+ At any of those mirrors, groff can be found in the directory
latest/groff.
. Kees Zeelenberg <c.zeelenberg@hccnet.nl>:
http://gnuwin32.sourceforge.net/packages/groffl.htm
- This port includes grap-1.10 and deroff-1.7.
+ This port includes recent versions of grap and deroff.
dos
---
@@ -117,13 +117,24 @@ Win95, Win98, WinNT) is available from
and its mirrors.
-A win32 port of version 1.7 is available from
+A win32 port of version 1.8 is available from
http://gnuwin32.sourceforge.net/
+David Frey <dfrey@debian.org> has also written a deroff implementation
+for Debian; it is available from
+
+ ftp://ftp.debian.org/debian/pool/main/d/deroff/
+
miscellaneous
-------------
+. Ralph Corderoy's excellent page on troff:
+
+ www.troff.org
+
+ There are links for virtually everything related to troff.
+
. Dr. Robert Hermann's groff gems are available from
http://www.eas.slu.edu/People/RBHerrmann/GROFF/index.html
@@ -163,6 +174,19 @@ miscellaneous
http://perso.libertysurf.fr/baruchel/
+. gpresent, written by Bob Diertens <bobd@science.uva.nl>. From the README
+ file:
+
+ gpresent is a package for making presentation with groff and acroread.
+ It consist of a set of macros to be used with groff and a post-processor
+ for manipulating the PostScript output of groff. Without the use of the
+ PAUSE macro, it can also be used for making slides.
+
+ It is available from
+
+ www.science.uva.nl/~bobd/useful/gpresent/
+
+
documentation
-------------
diff --git a/contrib/groff/Makefile.ccpg b/contrib/groff/Makefile.ccpg
index 02b5d66..b89fab1 100644
--- a/contrib/groff/Makefile.ccpg
+++ b/contrib/groff/Makefile.ccpg
@@ -24,7 +24,7 @@ TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
Makefile: $(MAKEFILEPARTS)
Makefile.dep:
touch Makefile.dep
-$(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
+$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
pure: $(PROG).pure
diff --git a/contrib/groff/Makefile.comm b/contrib/groff/Makefile.comm
index b9c9c85..6d246c5 100644
--- a/contrib/groff/Makefile.comm
+++ b/contrib/groff/Makefile.comm
@@ -1,4 +1,4 @@
-# Copyright (C) 1989-2000 Free Software Foundation, Inc.
+# Copyright (C) 1989-2000, 2002 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
@@ -25,7 +25,7 @@ INCLUDES=-I. -I$(srcdir) \
ALL_CCFLAGS=$(INCLUDES) $(CCDEFINES) $(CCFLAGS) $(CPPFLAGS)
COMPILE.cc=$(CCC) $(ALL_CCFLAGS) -c
ALL_CFLAGS=$(INCLUDES) $(CDEFINES) $(CFLAGS) $(CPPFLAGS)
-COMPILE.c=$(CC) $(ALL_CFLAGS) -c
+COMPILE.c=$(CC) $(ALL_CFLAGS) -c
LINK.cc=$(CCC) $(CCFLAGS) $(LDFLAGS)
LINK.c=$(CC) $(CFLAGS) $(LDFLAGS)
LIBGROFF=$(top_builddir)/src/libs/libgroff/libgroff.a
@@ -38,6 +38,8 @@ YTABC=
GRAM=
LIBCLEAN=
CLEANADD=
+CLEANDIRADD=
+CLEANNOTSRCDIRADD=
MOSTLYCLEANFILES=$(MANCLEAN) $(PROG) $(OBJS) $(GENSRCS) $(GENHDRS) \
depend.temp core y.output $(CLEANADD)
CLEANFILES=$(LIBCLEAN)
@@ -69,23 +71,32 @@ prefix_must_exist:
mostlyclean:
-rm -f $(MOSTLYCLEANFILES)
+ -rm -rf $(CLEANDIRADD)
+ -@if test `cd $(srcdir); pwd` = `pwd`; then \
+ :; \
+ else \
+ rm -f $(CLEANNOTSRCDIRADD); \
+ fi
-clean:
- -rm -f $(CLEANFILES) $(MOSTLYCLEANFILES)
+clean: mostlyclean
+ -rm -f $(CLEANFILES)
-distclean:
- -rm -f $(DISTCLEANFILES) $(CLEANFILES) $(MOSTLYCLEANFILES)
+distclean: clean
+ -rm -f $(DISTCLEANFILES)
+ -@if test `cd $(srcdir); pwd` = `pwd`; then \
+ :; \
+ else \
+ rm -f $(YTABC) $(YTABH); \
+ fi
-realclean:
- -rm -f $(REALCLEANFILES) $(DISTCLEANFILES) $(CLEANFILES) \
- $(MOSTLYCLEANFILES)
+realclean: distclean
+ -rm -f $(REALCLEANFILES)
-extraclean:
- -rm -f $(DISTCLEANFILES) $(CLEANFILES) $(MOSTLYCLEANFILES) \
- \#* *~ =* core junk grot old temp tmp tem
+extraclean: distclean
+ -rm -f \#* *~ =* core junk grot old temp tmp tem
.SUFFIXES:
-.SUFFIXES: .o .cc .c .y .man .n
+.SUFFIXES: .o .obj .cc .c .y .man .n
.cc.o:
$(COMPILE.cc) $<
@@ -93,6 +104,12 @@ extraclean:
.c.o:
$(COMPILE.c) $<
+.cc.obj:
+ $(COMPILE.cc) $<
+
+.c.obj:
+ $(COMPILE.c) $<
+
.y.cc:
if test -n "$(YTABH)"; then \
$(YACC) $(YACCFLAGS) -d $<; \
@@ -101,31 +118,36 @@ extraclean:
fi
-test -f y.tab.h && mv y.tab.h y_tab.h
-test -f y.tab.c && mv y.tab.c y_tab.c
- mv y_tab.c $@
-# Avoid ending up with two versions of $(YTABH).
+ mv y_tab.c $(YTABC)
+ if test -n "$(YTABH)"; then mv y_tab.h $(YTABH); fi
+
+# The next rule is needed for make of Solaris 2.5.1 to override its
+# built-in .y.o rule (which takes precedence over the .y.cc rule above).
+.y.o:
if test -n "$(YTABH)"; then \
- if test -f $(srcdir)/$(YTABH); then \
- rm -f $(YTABH); \
- mv y_tab.h $(srcdir)/$(YTABH); \
- else \
- mv y_tab.h $(YTABH); \
- fi; \
+ $(YACC) $(YACCFLAGS) -d $<; \
+ else \
+ $(YACC) $(YACCFLAGS) $<; \
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`
+ -test -f y.tab.h && mv y.tab.h y_tab.h
+ -test -f y.tab.c && mv y.tab.c y_tab.c
+ mv y_tab.c $(YTABC)
+ if test -n "$(YTABH)"; then mv y_tab.h $(YTABH); fi
+ $(COMPILE.cc) $(YTABC)
.man.n:
@echo Making $@ from $<
@-rm -f $@
@sed -e "s|@BINDIR@|$(bindir)|g" \
-e "s|@FONTDIR@|$(fontdir)|g" \
- -e "s|@FONTPATH@|$(fontpath)|g" \
+ -e "s|@LOCALFONTDIR@|$(localfontdir)|g" \
+ -e "s|@LEGACYFONTDIR@|$(legacyfontdir)|g" \
-e "s|@MACRODIR@|$(tmacdir)|g" \
-e "s|@SYSTEMMACRODIR@|$(systemtmacdir)|g" \
-e "s|@LOCALMACRODIR@|$(localtmacdir)|g" \
- -e "s|@MACROPATH@|$(tmacpath)|g" \
+ -e "s|@DOCDIR@|$(docdir)|g" \
+ -e "s|@EXAMPLEDIR@|$(exampledir)|g" \
+ -e "s|@HTMLDOCDIR@|$(htmldocdir)|g" \
-e "s|@DEVICE@|$(DEVICE)|g" \
-e "s|@DEFAULT_INDEX@|$(indexdir)/$(indexname)|g" \
-e "s|@DEFAULT_INDEX_NAME@|$(indexname)|g" \
@@ -239,7 +261,7 @@ depend_src: depend.temp
depend.temp: FORCE
> depend.temp;
- test -z "$(CCSRCS)$(YTABC)" \
+ test -z "$(CCSRCS)$(YTABC)" \
|| $(CCC) $(ALL_CCFLAGS) -MM $(CCSRCS) $(YTABC) >>depend.temp
test -z "$(CSRCS)" \
|| $(CC) $(ALL_CFLAGS) -MM $(CSRCS) >>depend.temp
@@ -254,6 +276,7 @@ TAGS_src:
test -z "$(GRAM)$(HDRS)" \
|| $(ETAGS) $(ETAGSFLAGS) -a $(ETAGSCCFLAG) $(GRAM) $(HDRS)
+# This rule is only considered for the subdir_Makefile target.
Makefile:
-rm -f Makefile
echo srcdir=$(srcdir) >>Makefile
diff --git a/contrib/groff/Makefile.cpg b/contrib/groff/Makefile.cpg
index 4cb514f..b7af68c 100644
--- a/contrib/groff/Makefile.cpg
+++ b/contrib/groff/Makefile.cpg
@@ -24,4 +24,4 @@ TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
Makefile: $(MAKEFILEPARTS)
Makefile.dep:
touch Makefile.dep
-$(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
+$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
diff --git a/contrib/groff/Makefile.in b/contrib/groff/Makefile.in
index e3349d9..411d8b9 100644
--- a/contrib/groff/Makefile.in
+++ b/contrib/groff/Makefile.in
@@ -1,4 +1,4 @@
-# Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+# Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
@@ -20,10 +20,10 @@
srcdir=@srcdir@
top_srcdir=@top_srcdir@
VPATH=@srcdir@
-top_builddir=@top_builddir@
+top_builddir=@groff_top_builddir@
version=`cat $(top_srcdir)/VERSION`
-# No additional number if revision is zero
+# No additional number if revision is zero.
revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
# Define `page' to be letter if your PostScript printer uses 8.5x11
@@ -54,18 +54,22 @@ PAGE=@PAGE@
# with a printer that requires page reversal.
BROKEN_SPOOLER_FLAGS=@BROKEN_SPOOLER_FLAGS@
-# DEVICE is the default device.
+# `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@
+# `TTYDEVDIRS' is either `font/devascii font/devlatin1' (for
+# ASCII) or `font/devcp1047' (for EBCDIC) plus font/devutf8.
+TTYDEVDIRS=@TTYDEVDIRS@ font/devutf8
-# PSPRINT is the command to use for printing a PostScript file,
+# `OTHERDEVDIRS' is either `font/devlj4 font/devlbp' (for ASCII) or
+# empty (for EBCDIC).
+OTHERDEVDIRS=@OTHERDEVDIRS@
+
+# `PSPRINT' is the command to use for printing a PostScript file,
# for example `lpr'.
PSPRINT=@PSPRINT@
-# DVIPRINT is the command to use for printing a TeX dvi file,
+# `DVIPRINT' is the command to use for printing a TeX dvi file,
# for example `lpr -d'.
DVIPRINT=@DVIPRINT@
@@ -82,44 +86,62 @@ g=@g@
prefix=@prefix@
exec_prefix=@exec_prefix@
-# bindir says where to install executables.
+# `bindir' says where to install executables.
bindir=@bindir@
-# libdir says where to install platform-dependent data
+# `libdir' says where to install platform-dependent data.
libdir=@libdir@
libprogramdir=$(libdir)/groff
-# datasubdir says where to install platform-independent data files
+# `datasubdir' says where to install platform-independent data files.
datadir=@datadir@
dataprogramdir=$(datadir)/groff
datasubdir=$(dataprogramdir)/$(version)$(revision)
-# fontdir says where to install dev*/*.
+# `infodir' says where to install info files.
+infodir=@infodir@
+
+# `docdir' says where to install documentation files.
+docdir=$(datadir)/doc/groff/$(version)$(revision)
+
+# `exampledir' says where to install example files.
+exampledir=$(docdir)/examples
+
+# `htmldocdir' says where to install documentation in HTML format.
+htmldocdir=$(docdir)/html
+
+# `fontdir' says where to install dev*/*.
fontdir=$(datasubdir)/font
-# fontpath says where to look for dev*/*.
-fontpath=$(fontdir):/usr/lib/font
+# `localfontdir' says where local fonts will be installed (as dev*/*).
+localfontdir=$(dataprogramdir)/site-font
+
+# `legacyfontdir' is for compatibility with non-GNU troff.
+legacyfontdir=/usr/lib/font
-# tmacdir says where to install macros.
+# `fontpath' says where to look for dev*/*.
+fontpath=$(localfontdir):$(fontdir):$(legacyfontdir)
+
+# `tmacdir' says where to install macros.
tmacdir=$(datasubdir)/tmac
-# systemtmacdir says where to install platform-dependent macros
+# `systemtmacdir' says where to install platform-dependent macros.
systemtmacdir=$(libprogramdir)/site-tmac
-# localtmacdir says where local files will be installed
+# `localtmacdir' says where local files will be installed.
localtmacdir=$(dataprogramdir)/site-tmac
-# tmacpath says where to look for macro files.
+# `tmacpath' says where to look for macro files.
# The current directory will be prepended in unsafe mode only; the home
# directory will be always added.
# `troffrc' and `troffrc-end' (and `eqnrc') are searched neither in the
# current nor in the home directory.
tmacpath=$(systemtmacdir):$(localtmacdir):$(tmacdir)
-# sys_tmac_prefix is prefix (if any) for system macro packages
+# `sys_tmac_prefix' is prefix (if any) for system macro packages.
sys_tmac_prefix=@sys_tmac_prefix@
-# tmac_wrap is list of system macro packages that should be made
+# `tmac_wrap' is list of system macro packages that should be made
# available to groff by creating a corresponding macro package
# in the groff macro directory that references the system macro
# package.
@@ -157,51 +179,78 @@ indexname=Ind
# otherwise the supplied eign file will be used.
common_words_file=$(datasubdir)/eign
-# manroot is the root of the man page directory tree.
+# `manroot' is the root of the man page directory tree.
mandir=@mandir@
manroot=$(mandir)
-# man1ext is the man section for user commands.
+# `man1ext' is the man section for user commands.
man1ext=1
man1dir=$(manroot)/man$(man1ext)
-# man5ext is the man section for file formats.
+# `man5ext' is the man section for file formats.
man5ext=5
man5dir=$(manroot)/man$(man5ext)
-# man7ext is the man section for macros.
+# `man7ext' is the man section for macros.
man7ext=7
man7dir=$(manroot)/man$(man7ext)
+# The configure script checks whether all necessary utility programs for
+# grohtml are available -- only then we can build the HTML documentation.
+make_html=@make_html@
+make_install_html=@make_install_html@
+
# DEFINES should include the following:
# -DHAVE_MMAP if you have mmap() and <sys/mman.h>
# -DARRAY_DELETE_NEEDS_SIZE if your C++ doesn't understand `delete []'
-# -DHAVE_SYS_SIGLIST if you have sys_siglist[]
+# -DSYS_SIGLIST_DECLARED if you have sys_siglist[]
# -DWCOREFLAG=0200 if the 0200 bit of the status returned by
# wait() indicates whether a core image was
# produced for a process that was terminated
# by a signal
-# -DHAVE_UNISTD_H if you have <unistd.h>
-# -DHAVE_CC_OSFCN_H if you have a C++ <osfcn.h>
+#
# -DHAVE_DIRENT_H if you have <dirent.h>
# -DHAVE_LIMITS_H if you have <limits.h>
# -DHAVE_CC_LIMITS_H if you have a C++ <limits.h>
-# -DHAVE_SYS_DIR_H if you have <sys/dir.h>
+# -DHAVE_MATH_H if you have <math.h>
+# -DHAVE_CC_OSFCN_H if you have a C++ <osfcn.h>
+# -DHAVE_STDINT_H if you have <stdint.h>
# -DHAVE_STDLIB_H if you have <stdlib.h>
+# -DHAVE_STRING_H if you have <string.h>
# -DHAVE_STRINGS_H if you have <strings.h>
-# -DHAVE_RENAME if you have rename()
+# -DHAVE_SYS_DIR_H if you have <sys/dir.h>
+# -DHAVE_SYS_TIME_H if you have <sys/time.h>
+# -DHAVE_UNISTD_H if you have <unistd.h>
+#
+# -DHAVE_FMOD if you have fmod()
+# -DHAVE_GETCWD if you have getcwd()
+# -DHAVE_GETTIMEOFDAY if you have gettimeofday()
+# -DHAVE_ISATTY if you have isatty()
# -DHAVE_MKSTEMP if you have mkstemp()
-# -DHAVE_STRDUP if you have strdup()
-# -DHAVE_STRSEP if you have strsep()
+# -DHAVE_MMAP if you have mmap()
+# -DHAVE_PUTENV if you have putenv()
+# -DHAVE_RENAME if you have rename()
+# -DHAVE_SNPRINTF if you have snprintf()
# -DHAVE_STRCASECMP if you have strcasecmp()
+# -DHAVE_STRNCASECMP if you have strncasecmp()
+# -DHAVE_STRERROR if you have strerror()
+# -DHAVE_STRSEP if you have strsep()
+# -DHAVE_STRTOL if you have strtol()
+#
+# -DNEED_DECLARATION_GETTIMEOFTODAY
+# if your C++ <sys/time.h> doesn't declare
+# gettimeofday()
# -DNEED_DECLARATION_HYPOT if your C++ <math.h> doesn't declare hypot()
-# -DNEED_DECLARATION_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_POPEN if your C++ <stdio.h> doesn't declare popen()
+# -DNEED_DECLARATION_PUTENV if your C++ <stdlib.h> doesn't declare putenv()
+# -DNEED_DECLARATION_STRCASECMP if your C++ <string.h> doesn't declare
+# strcasecmp()
# -DNEED_DECLARATION_STRNCASECMP
# if your C++ <string.h> doesn't declare
# strncasecmp()
-# -DRET_TYPE_SRAND_IS_VOID if your srand() returns void or int
+#
+# -DRET_TYPE_SRAND_IS_VOID if srand() returns void not int
# -DHAVE_SYS_NERR if you have sysnerr in <errno.h> or <stdio.h>
# -DHAVE_SYS_ERRLIST if you have sys_errlist in <errno.h> or
# <stdio.h>
@@ -211,13 +260,17 @@ man7dir=$(manroot)/man$(man7ext)
# -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
+# -DPAGEA4 if the the printer's page size is A4
DEFINES=@DEFS@
-# Include fmod.o, strtol.o, getcwd.o, strerror.o, putenv.o in LIBOBJS if
-# your C library is missing the corresponding function.
+# Include
+#
+# {fmod,getcwd,mkstemp,putenv,snprintf,strerror,strtol}.$(OBJEXT)
+#
+# in LIBOBJS if your C library is missing the corresponding function.
LIBOBJS=@LIBOBJS@
-# CCC is the compiler for C++ (.cc) files.
+# `CCC' is the compiler for C++ (.cc) files.
CCC=@CXX@
CC=@CC@
# CCDEFINES are definitions for C++ compilations.
@@ -231,6 +284,8 @@ LDFLAGS=@LDFLAGS@
YACC=@YACC@
YACCFLAGS=-v
+EXEEXT=@EXEEXT@
+OBJEXT=@OBJEXT@
LIBS=@LIBS@
LIBM=@LIBM@
RANLIB=@RANLIB@
@@ -238,6 +293,7 @@ INSTALL=@INSTALL@
INSTALL_PROGRAM=@INSTALL_PROGRAM@
INSTALL_SCRIPT=@INSTALL_SCRIPT@
INSTALL_DATA=@INSTALL_DATA@
+INSTALL_INFO=@INSTALL_INFO@
LN_S=@LN_S@
AR=ar
ETAGS=etags
@@ -249,7 +305,7 @@ PERLPATH=@PERLPATH@
# Sed command with which to edit sh scripts.
SH_SCRIPT_SED_CMD=@SH_SCRIPT_SED_CMD@
-# the program to create directory hierarchies
+# The program to create directory hierarchies.
mkinstalldirs=$(top_srcdir)/mkinstalldirs
PURIFY=purify
@@ -266,8 +322,11 @@ MDEFINES= \
"BROKEN_SPOOLER_FLAGS=$(BROKEN_SPOOLER_FLAGS)" \
"DEVICE=$(DEVICE)" \
"TTYDEVDIRS=$(TTYDEVDIRS)" \
+ "OTHERDEVDIRS=$(OTHERDEVDIRS)" \
"PSPRINT=$(PSPRINT)" \
"DVIPRINT=$(DVIPRINT)" \
+ "version=$(version)" \
+ "revision=$(revision)" \
"top_srcdir=$(top_srcdir)" \
"top_builddir=$(top_builddir)" \
"prefix=$(prefix)" \
@@ -276,10 +335,16 @@ MDEFINES= \
"datadir=$(datadir)" \
"dataprogramdir=$(dataprogramdir)" \
"datasubdir=$(datasubdir)" \
+ "infodir=$(infodir)" \
+ "docdir=$(docdir)" \
+ "exampledir=$(exampledir)" \
+ "htmldocdir=$(htmldocdir)" \
"libdir=$(libdir)" \
"libprogramdir=$(libprogramdir)" \
"bindir=$(bindir)" \
"fontdir=$(fontdir)" \
+ "localfontdir=$(localfontdir)" \
+ "legacyfontdir=$(legacyfontdir)" \
"fontpath=$(fontpath)" \
"tmacdir=$(tmacdir)" \
"systemtmacdir=$(systemtmacdir)" \
@@ -296,12 +361,16 @@ MDEFINES= \
"man5dir=$(man5dir)" \
"man7ext=$(man7ext)" \
"man7dir=$(man7dir)" \
+ "make_html=$(make_html)" \
+ "make_install_html=$(make_install_html)" \
"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)" \
+ "EXEEXT=$(EXEEXT)" \
+ "OBJEXT=$(OBJEXT)" \
"CCC=$(CCC)" \
"CC=$(CC)" \
"CCDEFINES=$(CCDEFINES)" \
@@ -319,6 +388,7 @@ MDEFINES= \
"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
"INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
"INSTALL_DATA=$(INSTALL_DATA)" \
+ "INSTALL_INFO=$(INSTALL_INFO)" \
"ETAGS=$(ETAGS)" \
"ETAGSFLAGS=$(ETAGSFLAGS)" \
"ETAGSCCFLAG=$(ETAGSCCFLAG)" \
@@ -364,9 +434,7 @@ DEVDIRS=\
font/devX75-12 \
font/devX100 \
font/devX100-12 \
- font/devlj4 \
- font/devhtml \
- font/devlbp
+ font/devhtml
ALLTTYDEVDIRS=\
font/devascii \
font/devlatin1 \
@@ -378,16 +446,30 @@ OTHERDIRS=\
src/utils/afmtodit \
src/roff/grog \
src/roff/nroff \
- contrib/mm
+ contrib/mm \
+ contrib/pic2graph \
+ contrib/eqn2graph \
+ contrib/groffer \
+ contrib/mom \
+ doc
ALLDIRS=$(INCDIRS) $(LIBDIRS) $(PROGDIRS) \
- $(DEVDIRS) $(TTYDEVDIRS) $(OTHERDIRS)
+ $(DEVDIRS) $(OTHERDEVDIRS) $(TTYDEVDIRS) $(OTHERDIRS)
EXTRADIRS=\
font/devps/generate \
font/devdvi/generate \
+ font/devlj4/generate \
src/xditview \
doc
-DISTDIRS=$(INCDIRS) $(LIBDIRS) $(PROGDIRS) \
- $(DEVDIRS) $(ALLTTYDEVDIRS) $(OTHERDIRS) $(EXTRADIRS)
+NOMAKEDIRS=\
+ arch/djgpp \
+ contrib/mm/examples \
+ contrib/mm/mm \
+ contrib/mom/examples \
+ contrib/mom/momdoc \
+ src/libs/snprintf
+DISTDIRS=\
+ $(INCDIRS) $(LIBDIRS) $(PROGDIRS) $(DEVDIRS) $(OTHERDEVDIRS) \
+ $(ALLTTYDEVDIRS) $(OTHERDIRS) $(EXTRADIRS) $(NOMAKEDIRS)
TARGETS=all install install_bin install_data clean distclean mostlyclean \
realclean extraclean distfiles TAGS depend uninstall_sub
@@ -460,7 +542,7 @@ $(CCPROGDIRS): FORCE
-f $(top_srcdir)/Makefile.ccpg \
-f Makefile.dep $(do)
-$(DEVDIRS) $(TTYDEVDIRS): FORCE
+$(DEVDIRS) $(OTHERDEVDIRS) $(TTYDEVDIRS): FORCE
@$(ENVSETUP); \
if test $(srcdir) = .; \
then srcdir=.; \
@@ -498,10 +580,14 @@ dist:
cd tmp; \
$(LN_S) ../Makefile .; \
$(LN_S) $$srcdir/* . 2>/dev/null || true; \
+ rm -rf CVS; \
for d in $(DISTDIRS); do \
- (cd $$d; $(LN_S) $$srcdir/$$d/* . 2>/dev/null || true); \
+ (cd $$d; \
+ $(LN_S) $$srcdir/$$d/* . 2>/dev/null; \
+ rm -rf CVS || true); \
done; \
- $(MAKE) srcdir=$$srcdir VPATH=$$srcdir extraclean; \
+ $(MAKE) srcdir=. VPATH=. distfiles; \
+ $(MAKE) srcdir=. VPATH=. extraclean; \
for d in $(EXTRADIRS); do \
(cd $$d; $(MAKE) extraclean); \
done; \
@@ -519,6 +605,8 @@ dist:
.PHONY: $(ALLDIRS) dot $(TARGETS) FORCE
+# Create a Makefile in $(subdir). This is useful for development since it
+# avoids running make recursively.
subdir_Makefile: Makefile.cfg
$(MAKE) do=Makefile $(subdir)
@@ -536,10 +624,12 @@ uninstall: uninstall_sub uninstall_dirs
.PHONY: uninstall_dirs
uninstall_dirs:
-# Use rmdir here so that the directories are only removed if they're empty
+# Use `rmdir' here so that the directories are only removed if they are empty.
-rmdir $(man1dir) $(man5dir) $(man7dir) $(manroot) \
- $(tmacdir) $(systemtmacdir) $(localtmacdir) $(fontdir) $(bindir) \
- $(datasubdir) $(dataprogramdir) $(datadir) \
+ $(tmacdir) $(systemtmacdir) $(localtmacdir) \
+ $(fontdir) $(localfontdir) $(bindir) \
+ $(datasubdir) $(dataprogramdir) $(datadir) $(infodir) \
+ $(exampledir) $(htmldocdir) $(docdir) \
$(libprogramdir) $(libdir)
diff --git a/contrib/groff/Makefile.man b/contrib/groff/Makefile.man
index 2fecd11..6eaf311 100644
--- a/contrib/groff/Makefile.man
+++ b/contrib/groff/Makefile.man
@@ -2,4 +2,4 @@ all: $(MANPAGES)
install_data: install_man
install_man: $(MANPAGES)
uninstall_sub: uninstall_man
-$(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
+$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION $(top_srcdir)/REVISION
diff --git a/contrib/groff/Makefile.sub b/contrib/groff/Makefile.sub
index 77c701f..8dc3c71 100644
--- a/contrib/groff/Makefile.sub
+++ b/contrib/groff/Makefile.sub
@@ -1,8 +1,27 @@
-DISTCLEANFILES=config.status config.log config.cache Makefile \
- src/xditview/Imakefile
+DISTCLEANFILES=\
+ config.status \
+ config.log \
+ config.cache \
+ stamp-h \
+ Makefile \
+ src/xditview/Imakefile \
+ src/include/config.h
CLEANADD=Makefile.cfg conftest*
distfiles: configure
-configure: configure.in aclocal.m4
- cd $(srcdir); autoconf
+$(scrdir)/configure: configure.ac aclocal.m4
+ cd $(srcdir) && autoconf
+
+config.status: configure
+ $(SHELL) config.status --recheck
+
+# autoheader might not change config.hin, so touch a stamp file.
+$(srcdir)/config.hin: stamp-h.in
+$(srcdir)/stamp-h.in: configure.ac aclocal.m4
+ cd $(srcdir) && autoheader
+ echo timestamp > $(srcdir)/stamp-h.in
+
+config.h: stamp-h
+stamp-h: config.hin config.status
+ $(SHELL) config.status
diff --git a/contrib/groff/NEWS b/contrib/groff/NEWS
index eec9d72..f93d10c 100644
--- a/contrib/groff/NEWS
+++ b/contrib/groff/NEWS
@@ -1,5 +1,513 @@
This file describes recent user-visible changes in groff. Bug fixes are not
-described. There are more details in the man pages.
+described. There are more details in the man and info pages.
+
+VERSION 1.18.1
+==============
+
+Troff
+-----
+
+o The non-slanted PostScript font definition files have been regenerated to
+ include left and right italic correction values. Applying those to a glyph
+ (this is, prepending the glyph with `\,' and appending `\/' to the glyph)
+ sets the glyph width to the real value given by the horizontal bounding
+ box values. Without those escapes, the advance width for the particular
+ glyph is used (which can differ considerably).
+
+ Most users will neither need this feature nor notice a difference in
+ existing documents (provided \, and \/ is used as advertised, namely for
+ italic fonts only); its main goal is to improve image generation with
+ grohtml.
+
+ This is an experimental change, and feedback is welcome.
+
+Tbl
+---
+
+o Added global option `nospaces' to ignore leading and trailing spaces in
+ data items.
+
+Grolbp
+------
+
+o The option -w (--linewidth) has been added (similar to other device
+ drivers) to set the default line width.
+
+Grn
+---
+
+o Support for b-spline and Bezier curves has been added.
+
+Groffer
+-------
+
+o New option `--shell' to select the shell under which groffer shall run.
+
+Macro Packages
+--------------
+
+o The string `Am' (producing an ampersand) has been added to mdoc for
+ compatibility with NetBSD.
+
+o `.IX' is now deprecated for mom; you should use `.IQ' (Indent Quit)
+ instead.
+
+o In mom, new inlines `FWD', `BCK', `UP', and `DOWN' deal with horizontal
+ and vertical movements; please refer to contrib/mom/NEWS for more
+ details.
+
+o New macro ENDNOTES_HDRFTR_CENTER for mom to better control headers.
+
+Miscellaneous
+-------------
+
+o The `papersize' keyword in the DESC file now accepts multiple arguments.
+ It is scanned from left to the right, and the first valid argument is
+ used. This makes it possible to provide a fallback paper size.
+
+ Example:
+
+ papersize /etc/papersize a4
+
+o A local font directory has been prepended to the default font path; it
+ defaults to /usr/local/share/groff/site-font. Similar to the normal
+ font searching process, files must be placed into a devXXX subdirectory,
+ e.g.
+
+ /usr/local/share/groff/site-font/devps/FOO
+
+ for a PostScript font definition file FOO.
+
+
+VERSION 1.18
+============
+
+***************************************************************************
+* *
+* PLEASE READ THE CHANGES BELOW REGARDING GROTTY, GROFF'S TTY FRONTEND. *
+* *
+***************************************************************************
+
+Troff
+-----
+
+o Color support has been added to troff and pic (and to the device drivers
+ grops, grodvi, grotty, and grohtml -- other preprocessors and drivers will
+ follow). A new function `defcolor' defines colors; the escape sequence
+ `\m' sets the drawing color, the escape sequence `\M' specifies the
+ background color for closed objects created with \D'...' commands.
+ `\m[]' and `\M[]' switch back to the previous color. `\m' and `\M'
+ correspond to the new troff output command sets starting with `m' and
+ `DF'. The device-specific default color is called `default' and can't be
+ redefined.
+
+ Use the `color' request to toggle the usage of colors (default is on); the
+ read-only register `.color' is 0 if colors are not active, and non-zero
+ otherwise.
+
+ The old `Df' output command is mapped onto `DFg'; all color output
+ commands don't change the current font position (consequently, `Df'
+ doesn't either).
+
+ Outputting color can be disabled in troff and groff with the option -c
+ (it is always disabled in compatibility mode). See the section on grotty
+ for the GROFF_NO_SGR environment variable also.
+
+ For defining color components as fractions between 0 and 1, a new scaling
+ indicator `f' has been introduced: 1f = 65536u. For testing whether a
+ color is defined (with .if and .ie), a new conditional operator `m' is
+ available.
+
+ More details can be found in the groff_diff.7 manual page and in
+ groff.texinfo.
+
+o Similar to \m and \M, \f[] switches back to the previous font. \fP
+ (and \f[P]) is still valid for backwards compatibility.
+
+o The new escape \F is the same as `.fam'; \F[] switches back to previous
+ family -- \F[P] selects family `P'.
+
+o Two new glyph symbols are available: `eu' is the official Euro symbol;
+ `Eu' is a font-specific glyph variant.
+
+o The new glyph symbols `t+-', `tdi', and `tmu' are textual variants of
+ `+-', `di', and `mu', respectively.
+
+o Latin-1 character 181 (PS name `mu', Unicode name U+00B5 MICRO SIGN) has
+ got the troff glyph name `mc'.
+
+o -Tutf8 is now available on EBCDIC hosts.
+
+o Strings can take arguments, using this syntax: \*[foo arg1 arg2 ...].
+ Example:
+
+ .ds xxx This is a \\$1 test.
+ \*[xxx nice]
+
+o It is now possible to have whitespace between the first and second dot (or
+ the name of the ending macro) to end a macro definition. Example:
+
+ .de !
+ ..
+ .
+ .de foo
+ . nop Hello, I'm `foo'.
+ . nop I will now define `bar'.
+ . de bar !
+ . nop Hello, I'm `bar'.
+ . !
+ ..
+
+o `.fn' is a new string-valued register which returns the (internal) real
+ font name; styles and families are properly concatenated.
+
+o Three new read/write registers `seconds', `minutes', and `hours' contain
+ the current time, set at start-up of troff. Use the `af' request to
+ control their output format.
+
+o The new request `fchar' can be used to provide fallback characters. It
+ has the same syntax as the `char' request; the only difference is that a
+ character defined with `.char' hides the glyph with the same name in the
+ current font, whereas a character defined with `.fchar' is checked only if
+ the particular glyph isn't found in the current font. This test happens
+ before checking special fonts.
+
+o In analogy to the `tmc' request, `.writec' is the same as `.write' but
+ doesn't emit a final newline.
+
+o The new request `itc' is a variant of `.it' for which a line interrupted
+ with \c counts as one input line.
+
+o Two new requests `ds1' and `as1' which are similar to `ds' and `as' but
+ with compatibility mode disabled during expansion of strings defined by
+ them.
+
+o The syntax of the `substring' request has been changed: The first
+ character in a string now has index 0, the last character has index -1.
+ Note that this is an incompatible change.
+
+o To emit strings directly to the intermediate output, a new `output'
+ request has been added; it is similar to `\!' used at the top level.
+
+o `.hpf' has been extended. It can now handle most TeX hyphenation
+ pattern files without modification. To do that, the commands \patterns,
+ \hyphenation, and \endinput are recognized. Please refer to groff_diff.7
+ for more information.
+
+o `hpfcode' is a new request to provide an input encoding mapping for the
+ `hpf' request.
+
+o The new request `hpfa' appends hyphenation patterns (`hpf' replaces
+ already existing patterns).
+
+o A new request `ami' (append macro indirect) has been added. The first and
+ second parameter of `ami' are taken from string registers rather than
+ directly; this very special request is needed to make `trace.tmac'
+ independent from the escape character (which might even be disabled).
+
+o The new request `sizes' is similar to the `sizes' command in DESC files.
+ It expects the same syntax; the data must be on a single line, and the
+ final `0' can be omitted.
+
+o `trin' (translate input) is a new request which is similar to `tr' with
+ the exception that the `asciify' request will use the character code (if
+ any) before the character translation. Example:
+
+ .trin ax
+ .di xxx
+ a
+ .br
+ .di
+ .xxx
+ .trin aa
+ .asciify xxx
+ .xxx
+
+ The result is `x a'. Using `tr', the result would be `x x'.
+
+o The request `pvs' isn't new, but hasn't been documented before. It
+ adds vertical space after a line has been output. This makes it an
+ alternative to the `ls' request to produce double-spaced documents.
+ The read-only register `.pvs' holds the current amount of the
+ post-vertical line space.
+
+o For compatibility with plan 9's troff, multiple `pi' requests are
+ supported:
+
+ .pi foo
+ .pi bar
+
+ is now equivalent to
+
+ .pi foo | bar
+
+o A new escape sequence `\O' is available to disable and enable glyph
+ output. Please see groff_diff.7 and groff.texinfo for more details.
+
+o The escapes `\%', `\&', `\)', and `\:' no longer cause an error in \X;
+ they are ignored now. Additionally `\ ' and `\~' are converted to
+ single space characters.
+
+o The default tab distance in nroff mode is now 0.8i to be compatible
+ with UNIX troff.
+
+o Using the latin-1 input character 0xAD (soft hyphen) for the `shc'
+ request was a bad idea. Instead, it is now translated to `\%', and
+ the default hyphenation character is again \[hy]. Note that the glyph
+ \[shc] is not useful for typographic purposes; it only exists to have
+ glyph names for all latin-1 characters.
+
+Macro Packages
+--------------
+
+o Peter Schaffter <df191@ncf.ca> has contributed a new major macro package
+ called `mom', mainly for non-scientific writers, which takes care of
+ many typographic issues. It comes with a complete reference (in HTML
+ format) and some examples. `mom' has been designed to format documents
+ for PostScript output only.
+
+o Two macros `AT' (AT&T) and `UC' (Univ. of California) have been added to
+ the man macros for compatibility with older BSD releases.
+
+o Both the man and mdoc macro packages now use the LL and LT registers for
+ setting the line and title length, respectively (similar to those
+ registers in the ms macro package). If not set on the command line or
+ in a macro file loaded before the macro package itself, they default to
+ 78n in nroff mode and 6.5i in troff mode.
+
+o The `-xwidth' specifier in the mdoc macro package has been removed. Its
+ functionality is now integrated directly into `-width'. Similarly,
+ `-column' has been extended to provide this functionality also.
+
+o A new macro `Ex' has been added to the mdoc macro package to document an
+ exit status.
+
+o The PSPIC macro has been extended to work with DVI output (`pspic.tmac' is
+ now automatically loaded for -Tdvi), using a dvips special to load the EPS
+ file.
+
+o The trace.tmac package now traces calls to `am' also. Additionally, it
+ works in compatibility mode.
+
+o `troff.1' has been split. Differences to UNIX troff are now documented
+ in the new man page `groff_diff.7'.
+
+o `groff_mwww.7' has been renamed to `groff_www.7'. The file mwww.tmac
+ has been removed.
+
+o `groff_ms.7' has been completely rewritten. It now contains a complete
+ reference to the ms macros.
+
+o `groff_trace.7' documents the trace macro package.
+
+o Changes in www.tmac:
+
+ Note that HTML support is still in alpha change, so it is rather likely
+ that both macro names and macro syntax will change. Some of the macros
+ mentioned below aren't really new but haven't been documented properly
+ before.
+
+ The following macros have been renamed:
+
+ MAILTO -> MTO
+ IMAGE -> IMG
+ LINE -> HR
+
+ For consistency, the macros `URL', `FTL', and `MTO' now all have the
+ address as the first parameter followed by the description.
+
+ By default, grohtml generates links to all section headings at the top
+ of the document. Use the new `LK' macro to specify a different place.
+
+ For specifying the background color and a background image, use the
+ new macros `BCL' and `BGIMG', respectively.
+
+ The macro `NHR' has been added; it suppresses the generation of top and
+ bottom rules which grohtml emits by default.
+
+ The new macro `HX' determines the cut-off point for automatic link
+ generation to headings.
+
+ The image position parameter names in `IMG' have been changed to `-L',
+ `-R', and `-C'.
+
+ New macro `PIMG' for inclusion of a PNG image (it will automatically
+ convert it into an EPS file if not -Thtml is used).
+
+ New macro `MPIMG' for putting a PNG image into the left or right margin
+ (it will automatically convert it into an EPS file if not
+ -Thtml is used).
+
+ New macros `HnS', `HnE' to start and end a header line block.
+
+ New macro `DC' to produce dropcap characters.
+
+ New macro `HTL' to generate an HTML title line only but no H1 heading.
+
+ New macros `ULS' and `ULE' to start and end an unordered list. The new
+ macro `LI' inserts a list item.
+
+Groff
+-----
+
+o The new command line option `-c' disables color output (which is always
+ disabled in compatibility mode).
+
+Nroff
+-----
+
+o Two new command line options `-c' and `-C'; the former passes `-c' to
+ grotty (switching to the old output scheme); the latter passes `-C' to
+ groff (enabling compatibility mode).
+
+Pic
+---
+
+o New keywords `color' (or `colour', `colored', `coloured'), `outline' (or
+ `outlined'), and `shaded' are available. `outline' sets the color of the
+ outline, `shaded' the fill color, and `color' sets both. Example:
+
+ circle shaded "green" outline "black" ;
+
+ Filled arrows always use the outline color for filling.
+
+ Color support for TeX output is not implemented yet.
+
+Pic2graph
+---------
+
+o A new script contributed by Eric S. Raymond <esr@thyrsus.com>. It
+ converts a PIC diagram into a cropped image. Since it uses gs and the PNM
+ library, virtually all graphics formats are available for output.
+
+Eqn2graph
+---------
+
+o A new script contributed by Eric S. Raymond <esr@thyrsus.com>. It
+ converts an EQN diagram into a cropped image. Since it uses gs and the PNM
+ library, virtually all graphics formats are available for output.
+
+Groffer
+-------
+
+o A new script contributed by Bernd Warken <bwarken@mayn.de>. It displays
+ groff files and man pages on X and tty, taking care of most parameters
+ automatically.
+
+Grog
+----
+
+o Documents using the mom macro package are recognized.
+
+Grops
+-----
+
+o Color support has been added.
+
+o A new option `-p' is available to select the output paper size. It has
+ the same syntax as the new `papersize' keyword in the DESC file.
+
+Grodvi
+------
+
+o By default, font sizes are now available in the range 5-10000pt, similar
+ to PS fonts. If you want the old behaviour (i.e., font sizes at discrete
+ values only), insert the following at the start of your document:
+
+ .if '\*[.T]'dvi' \
+ . sizes 500 600 700 800 900 1000 1095 1200 1400 1440 1600 \
+ 1728 1800 2000 2074 2200 2400 2488 2800 3600
+
+o A new font file HBI (using cmssbxo10; this is slanted sans serif bold
+ extended) has been added.
+
+o Two font families are now available: `T' and `H'.
+
+o EC and TC fonts have been integrated. Use `-mec' (calling the file
+ ec.tmac) to switch to them. Those fonts give a much better coverage of
+ the symbols defined by groff than the CM fonts.
+
+ Note that ec.tmac must be called before any language-specific files; it
+ doesn't take care of hcode values.
+
+o Color support has been added. For drawing commands, colors are translated
+ to gray values currently.
+
+Grotty
+------
+
+o Color support has been added, using the SGR (ISO 6429, sometimes called
+ ANSI color) escape sequences.
+
+o SGR escape sequences are now used by default for underlining and bold
+ printing also, no longer using the backspace character trick. To revert
+ to the old behaviour, use the `-c' switch.
+
+ Note that you have to use the `-R' option of `less' to make SGR escapes
+ display correctly. On the other hand, terminal programs and consoles like
+ `xterm' which support SGR sequences natively can directly display the
+ output of grotty. Consequently, the options `-b', `-B', `-u', and `-U'
+ work only in combination with `-c' and are ignored silently otherwise.
+
+ For the `man' program, it may be necessary to add the `-R' option of
+ `less' to the $PAGER environment variable; alternatively, you can use
+ `man's `-P' option (or adapt its configuration file accordingly). See
+ man(1) for more details.
+
+o If the environment variable GROFF_NO_SGR is set, SGR output is disabled,
+ reverting to the old behaviour.
+
+o A new special \X'tty: sgr n' has been added; if n is non-zero or missing,
+ enable SGR output (the default).
+
+o If the new option `-i' is used (only in SGR mode), grotty sends escape
+ sequences to set the italic font attribute instead of the underline
+ attribute for italic fonts. Note that many terminals don't have support
+ for this (including xterm).
+
+Grohtml
+-------
+
+o Color support for glyphs has been added.
+
+o New option `-h' to select the style of headings in HTML output.
+
+o New option `-b' to set the background colour to white.
+
+o New options `-a' and `-g' to control the number of bits for anti-aliasing
+ used for text and graphics, respectively. Default value is 4; 0 means
+ no anti-aliasing.
+
+o groff character/glyph entities now map onto HTML 4 character entities.
+
+Grolbp
+------
+
+o Valid paper sizes are now specified as with the new `papersize' keyword
+ in the DESC file. Specifically, the old custom paper type format
+ `custAAAxBBB' is no longer supported.
+
+Miscellaneous
+-------------
+
+o A new manual page `ditroff.7' is available.
+
+o The groff texinfo manual will now be installed, together with a bunch
+ of examples.
+
+o A new keyword `papersize' has been added to the DESC file format. Its
+ argument is either
+
+ . a predefined paper format (e.g. `A4' or `letter')
+
+ . a file name pointing to a file which must contain a paper size
+ specification in its first line (e.g. `/etc/papersize')
+
+ . a custom paper size definition like `35c,4i'
+
+ See groff_font(5) for more details. This keyword only affects the
+ physical dimensions of the output medium; grops, grolj4, and grolbp use it
+ currently. troff completely ignores it.
VERSION 1.17.2
==============
@@ -27,8 +535,8 @@ o Two new requests `de1' and `am1' which are similar to `de' and `am' but
o Added request `brp'. This is the same as `\p'.
-o Similar to other versions of troff, `.ns' now works in all diversions,
- not only in the top-level one.
+o Similar to other versions of troff, the `ns' request now works in all
+ diversions, not only in the top-level one.
o New read-only number register `.ns'. Returns 1 if in no-space mode,
0 otherwise.
@@ -58,15 +566,15 @@ Groff
o `-mFOO' now searches first for `FOO.tmac' and then for `tmac.FOO'. The
old behaviour has been changed to overcome problems with platforms which
have an 8+3 file name limit, and platforms which have other versions of
- troff installed also. Additionally, all macro files have been renamed
+ troff installed also. Additionally, all macro files have been renamed
using the latter scheme to avoid 8+3 name clashes.
o The new environment variable GROFF_BIN_PATH is checked for programs groff
is calling (preprocessors, troff, and output devices) before PATH. If not
- set, it defaults to the directory where the groff binary is located.
+ set, it defaults to the directory where the groff binary is located.
Previously, it was PATH only. The nroff script only uses GROFF_BIN_PATH
to find the groff binary but passes both the GROFF_BIN_PATH and PATH
- environment variable to groff.
+ environment variables to groff.
Troff
-----
@@ -75,11 +583,11 @@ o The mdoc package has been completely rewritten, using the full power of
GNU troff to remove limitations of Unix troff (which is no longer
supported). Most important changes are:
- . No argument limit.
- . Almost all macros are parsed and callable (if it makes sense).
+ . No argument limit
+ . Almost all macros are parsed and callable (if it makes sense)
. `.Lb': prints library names
. `.Nm <punctuation>' now works as expected; `.Nm "" <punctuation>' has
- been withdrawn.
+ been withdrawn
. Updated `.St' command
. `.Fx': prints FreeBSD
. `.Ox': prints OpenBSD
@@ -87,18 +595,18 @@ o The mdoc package has been completely rewritten, using the full power of
. `.Brq', `.Bro', `.Brc': brace enclosure macros
. `.Bd -centered': center lines
. `.Bl -xwidth <string>': interpret <string> and use the resulting width
- . support for double-sided printing (-rD1 command line switch)
- . support for 11pt and 12pt document sizes (-rS11, -rS12 command line
+ . Support for double-sided printing (-rD1 command line switch)
+ . Support for 11pt and 12pt document sizes (-rS11, -rS12 command line
switches)
- `groff_mdoc.man' replaces `groff_mdoc.samples.man'; it now completely
+ `groff_mdoc.7' replaces `groff_mdoc.samples.7'; it now completely
documents the mdoc package.
Great care has been taken to assure backwards compatibility. If you
encounter any abnormal results, please report them to bug-groff@gnu.org.
o A new command line option for the `man' macros (similar to the `mdoc'
- package has been implemented: `-rcR=1' (now the default in nroff mode)
+ package) has been implemented: `-rcR=1' (now the default in nroff mode)
produces one single, very long page instead of multiple pages. `-rcR=0'
deactivates it.
@@ -194,6 +702,17 @@ o Two new requests `tm1' and `tmc' have been added to improve writing
messages to the terminal. `tm1' is similar to `tm' but allows leading
whitespace. `tmc' is similar to `tm1' but doesn't emit a final newline.
+o For compatibility with sqtroff, the request `output' has been added.
+ The behaviour is similar to `\!' at the top-level, that is, it directly
+ inserts its argument into the intermediate output format. The syntax
+ is similar to .tm1, allowing leading whitespace.
+
+o The new `spreadwarn' request will make troff warn if spaces in an output
+ line are widened by a given limit or more.
+
+o Use `warnscale' to change the scaling indicator troff will use for
+ warning messages.
+
o A new request `dei' (define indirect) has been added. The first and
second parameter of `dei' are taken from string registers rather than
directly; this very special request is needed to make `trace.tmac'
@@ -239,12 +758,12 @@ o The grog script now works in non-compatibility mode also (which is the
Grops
-----
-A new option `-P' resp. a new environment variable `GROPS_PROLOGUE' has been
-added to select a different prologue file.
+o A new option `-P' resp. a new environment variable `GROPS_PROLOGUE' has
+ been added to select a different prologue file.
-The effect of the former `-mpsnew' option to access more Type 1 characters
-is now the default and no longer available. To get the old behaviour (i.e.,
-emulation of some glyphs by composition) use `-mpsold'.
+o The effect of the former `-mpsnew' option to access more Type 1 characters
+ is now the default and no longer available. To get the old behaviour
+ (i.e., emulation of some glyphs by composition) use `-mpsold'.
Miscellaneous
-------------
@@ -259,7 +778,7 @@ o For security reasons the following changes have been done:
. Files specified with the .mso request or given with the `-m' command
line option, and hyphenation patterns loaded with `.hpf' are no longer
searched in the current directory by default (besides the usual tmac
- path). Instead, the home directory is used. To add the current
+ path). Instead, the home directory is used. To add the current
directory, either use the `-U' or `-M' command line option or set the
GROFF_TMAC_PATH environment variable to an appropriate value.
@@ -446,8 +965,8 @@ 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
+A partial port to win32 (for use with Microsoft Visual C++ 6.0) is now part
+of the distribution. It has been contributed by Blake McBride
<blake@florida-software.com>.
More information about programs, macros, documentation, etc., which is
@@ -462,44 +981,43 @@ VERSION 1.12
============
Finally, there are new maintainers for groff. Mailing lists and a CVS
-repository are available also. See the file README for details. Not
-all reported bug could be fixed, so please send mails again if
-something is still not working.
+repository are available also. See the file README for details. Not all
+reported bugs could be fixed, so please send mails again if something is
+still not working.
Most of the installation problems should have vanished now (most
notably the $(tmac_wrap) bug).
-There is now a man page called groff_man.man which documents the
-basics of the -man macros. It has been originally written by Susan
-G. Kleinmann <sgk@debian.org>.
+There is now a man page called groff_man.7 which documents the basics of the
+-man macros. It has been originally written by Susan G. Kleinmann
+<sgk@debian.org>.
-A (still incomplete) groff reference manual in texinfo format
-originally contributed by Trent A. Fisher <trent@gnurd.portland.or.us>.
+A (still incomplete) groff reference manual in texinfo format originally
+contributed by Trent A. Fisher <trent@gnurd.portland.or.us>.
me.man and msafer.man have been renamed to groff_me.man
resp. groff_msafer.man for consistency.
-Default strings for macros in doc-common resp. tmac.an no longer
-contain the word `UNIX'.
+Default strings for macros in doc-common resp. tmac.an no longer contain the
+word `UNIX'.
groff should now be Y2k safe (fixes contributed by Paul Eggert
<eggert@twinsun.com>).
-Following the GNU standards, groff will now use the prefix
-`/usr/local/' as the default instead of replacing an existent groff
-binary.
+Following the GNU standards, groff will now use the prefix `/usr/local/' as
+the default instead of replacing an existent groff binary.
groff, troff, nroff, and pic now support the -U flag to activate unsafe
-behaviour (without -msafer); the -S flag for using the -msafer macros
-is now the default.
+behaviour (without -msafer); the -S flag for using the -msafer macros is now
+the default.
Grohtml
-------
-This is a new output device for producing HTML output contributed by
-Gaius Mulley <gaius@glam.ac.uk>. It is still very alpha but has been
-included into the distribution so that a lot of people have a chance
-to test it. Bug reports are highly welcome.
+This is a new output device for producing HTML output contributed by Gaius
+Mulley <gaius@glam.ac.uk>. It is still very alpha but has been included
+into the distribution so that a lot of people have a chance to test it. Bug
+reports are highly welcome.
Grolj4
------
diff --git a/contrib/groff/PROBLEMS b/contrib/groff/PROBLEMS
index 001610e..e3e6a7b 100644
--- a/contrib/groff/PROBLEMS
+++ b/contrib/groff/PROBLEMS
@@ -4,6 +4,13 @@ other improvements to this file are welcome.
----------------------------------------------------------------------
+
+
+Generic Problems
+================
+
+
+
* My document says that the current year is 19100, not 2000.
In groff, as in traditional troff, the yr number register yields the
@@ -28,151 +35,8 @@ or, if you want to be portable to older troff versions, as follows:
----------------------------------------------------------------------
-* I get lots of `numeric overflow' error messages whenever I run
- groff; I compiled groff with AT&T C++ 2.0 with an ANSI C compiler.
-
-Make sure -DCFRONT_ANSI_BUG is included in DEFINES in the top-level
-Makefile. If that doesn't solve the problem, define INT_MIN as
--INT_MAX in libgroff/lib.h.
-
-----------------------------------------------------------------------
-
-* 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.
-
-Groff requires header files that are moderately compatible with AT&T
-C++ and ANSI C. With some versions of Sun C++, the supplied header
-files need some of the following changes to meet this requirement:
-<string.h> must declare the mem* functions, (just add `#include
-<memory.h>' to <string.h>); the first argument to fopen and freopen
-should be declared as `const char *'; the first argument to fread
-should be declared as `void *'; the first argument to fwrite should be
-declared as `const void *'; malloc should be declared to return
-`void *'; in <alloca.h>, the declaration `extern "C" { void
-*__builtin_alloca(int); }' should be added; in <sys/signal.h> the
-return type and the second argument type of signal() should be changed
-to be `void (*)(int)'.
-
-You can either change them in place, or copy them to some other
-directory and include that directory with a -I option.
-
-----------------------------------------------------------------------
-
-* 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
-
- Stop.
-
- for no apparent reason.
-
-Use GNU make.
-
-----------------------------------------------------------------------
-
-* I'm having problems compiling groff on 386BSD 0.1.
-
-If you're using ash as /bin/sh, you'll need the following patch.
-
-*** gendef.sh.org Sun Jun 30 13:30:36 1991
---- gendef.sh Sun Feb 28 10:23:49 1993
-***************
-*** 3,9 ****
- file=$1
- shift
-
-! defs="#define $1"
- shift
- for def
- do
---- 3,10 ----
- file=$1
- shift
-
-! x=$1
-! defs="#define $x"
- shift
- for def
- do
-
-You'll also need to change dirnamemax.c so that it doesn't use
-pathconf().
-
-----------------------------------------------------------------------
-
-* While compiling on Xenix, ranlib libgroff.a fails.
-
-The system ranlib can't handle externals longer than 40 characters.
-Use the ranlib included in demon.co.uk:/pub/xenix/g++-1.40.3a.v1
-instead.
-
-----------------------------------------------------------------------
-
-* 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.
+* 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
option. Alternatively there's the sed script `tmac/fixmacros.sed'
@@ -181,6 +45,18 @@ with groff without the -C flag.
----------------------------------------------------------------------
+* gtroff doesn't understand lines like `.ce99' with no space between
+ the name of the request or macro and the arguments.
+
+gtroff requires a space between macro or request and its arguments
+because it allows the use of long names for macros and requests. You
+can use the -C option or the `cp' request to put gtroff into a
+compatibility mode in which it is not possible to use long names for
+macros but in which no space is required between macros and their
+arguments. The use of compatibility mode is strongly discouraged.
+
+----------------------------------------------------------------------
+
* groff -Tdvi produces dvi files that use fonts at weird
magnifications.
@@ -191,92 +67,17 @@ slow computers.)
----------------------------------------------------------------------
-* pic output is not centered horizontally; pictures sometimes run off
- the bottom of the page.
-
-The macro package you are using is not supplying appropriate
-definitions of PS and PE. Give groff a -mpic option.
-
-----------------------------------------------------------------------
-
-* 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
-Structuring Conventions; it must contain a BoundingBox line; it must
-be ``well-behaved''. The BoundingBox line should be of the form:
-
- %%BoundingBox: llx lly urx ury
-
-where llx, lly, urx, ury are the coordinates of the lower left x,
-lower left y, upper right x, upper right y of the bounding box of
-marks on the page expressed as integers in the default PostScript
-coordinate system (72 units per inch, origin at bottom left corner).
-A useful tactic is to print out the illustration by itself (you may
-need to add a `showpage' at the end), and physically measure the
-bounding box. For more detail on these requirements, read the
-specification of Encapsulated PostScript format. (This is available
-from the Adobe file server; send a message with a body of `help' to
-ps-file-server@adobe.com.)
-
-----------------------------------------------------------------------
-
-* I've configured groff for A4 paper, but gtroff still seems to think
- that the length of a page (as returned by `\n(.p') is 11 inches.
-
-This is intentional. The PAGE option 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 produces wrapper macros for `ms' and friends which call the
- system's original macros. Then, to get groff's ms macro package I
- have to use `-mgs' instead `-ms'. Can I avoid this?
-
-Yes. Configure and compile groff as usual, but install it with
-
- make install tmac_wrap=""
-
-Then no wrapper files are produced, and `-ms' will use groff's `ms'
-macros.
-
-----------------------------------------------------------------------
-
* Groff doesn't use the font names I'm used to.
Use the `ftr' request. See (g)troff(1).
----------------------------------------------------------------------
-* I get errors using the Unix -ms macros with groff -e -C.
-
-Apply this change:
+* pic output is not centered horizontally; pictures sometimes run off
+ the bottom of the page.
-*** /usr/lib/ms/ms.eqn Tue Apr 25 02:14:28 1989
---- ms.eqn Sun Nov 11 10:33:59 1990
-***************
-*** 22,29 ****
- ..
- . \" EN - end of a displayed equation
- .de EN
-! .if !\\*(10 .br
- .di
- .rm EZ
- .nr ZN \\n(dn
- .if \\n(ZN>0 .if \\n(YE=0 .LP
---- 22,30 ----
- ..
- . \" EN - end of a displayed equation
- .de EN
-! .if \\n(.k>0 .br
- .di
-+ .ds 10 \\*(EZ\\
- .rm EZ
- .nr ZN \\n(dn
- .if \\n(ZN>0 .if \\n(YE=0 .LP
+The macro package you are using is not supplying appropriate
+definitions of PS and PE. Give groff a -mpic option.
----------------------------------------------------------------------
@@ -295,67 +96,6 @@ 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.
-
-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.
-
-This is a bug in the page reversal filter in early versions of
-TranScript. Change the `broken' parameter in
-/usr/local/lib/groff/font/devps/DESC to 7.
-
-----------------------------------------------------------------------
-
-* When I preview groff -Tps output using the Sun OpenWindows 2.0
- pageview program, all the pages are displayed on top of each other.
-
-This is a defect in pageview. Change the `broken' parameter in
-/usr/local/lib/groff/font/devps/DESC to 2.
-
-----------------------------------------------------------------------
-
-* With groff -TX75, -TX100 or -X, I can only view the first page.
-
-The left mouse button brings up a menu that allows you to view other
-pages.
-
-----------------------------------------------------------------------
-
-* When I print the output of groff -Tdvi, I just get a black dot in
- upper left corner.
-
-Some dvi drivers (notably early versions of xtex) do not correctly
-handle dvi files that use a resolution different from that used by dvi
-files produced by TeX. Try getting a more up to date driver.
-
-----------------------------------------------------------------------
-
-* I get lots of errors when I use groff with the AT&T -mm macros.
-
-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.
-
-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).
@@ -394,6 +134,26 @@ to
----------------------------------------------------------------------
+* Where can I get grap?
+
+Ted Faber <faber@lunabase.org> has written a freely available grap:
+
+ http://www.lunabase.org/~faber/Vault/software/grap/
+
+----------------------------------------------------------------------
+
+* The \n(st and \n(sb registers don't seem to work. I thought \w set
+ them to the height and depth of its argument, but the registers
+ always seem to be 0.
+
+\n(st and \n(sb aren't supposed to give the height and depth of the
+string rather they give the minimum and maximum vertical displacement
+of the baseline. For example for \v'2u'\v'-3u', \n(st will be 1 and
+\n(sb will be -2. The height and depth of the string is available in
+the \n[rst] and \n[rsb] registers: these are groff extensions.
+
+----------------------------------------------------------------------
+
* While formatting a manual page, groff complains about not being able
to break lines. The problem seems to be caused by a line like:
.TP \w'label'+2
@@ -416,57 +176,6 @@ The solution is to fix the manual page:
----------------------------------------------------------------------
-* I'm having problems formatting Ultrix man pages with groff -man.
-
-The Ultrix man pages use a number of non-standard extensions to the
-Unix man macros. One solution is to use the Ultrix -man macros with
-groff. Copy /usr/lib/tmac/tmac.an to
-/usr/local/share/groff/site-tmac/an.tmac and apply the following patch
-(from Frank Wortner):
-
-*** /usr/local/lib/groff/tmac/tmac.an Wed Sep 9 12:29:28 1992
---- /usr/lib/tmac/tmac.an Fri Jul 24 19:58:19 1992
-***************
-*** 489,495 ****
- . \" make special case of shift out of italic
- .de }S
- .ds ]F
-! .if \\$12 .if !\\$5 .ds ]F \^
- .ie !\\$4 .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
- .el \\$3
- .}f
---- 489,495 ----
- . \" make special case of shift out of italic
- .de }S
- .ds ]F
-! .if \\$12 .if !\\$5 .ds ]F\^
- .ie !\\$4 .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
- .el \\$3
- .}f
-
-Another possible solution is to install tmac/man.ultrix as
-/usr/local/share/groff/site-tmac/man.local.
-
-----------------------------------------------------------------------
-
-* I'm having problems formatting HP-UX 9.0 man pages with groff -man.
-
-Copy HP's tmac.an into /usr/local/share/groff/site-tmac/an.tmac, and
-either put `.cp 1' at the beginning or filter it (and any files it .so's)
-through tmac/fixmacros.sed.
-
-----------------------------------------------------------------------
-
-* On HP-UX, the compiler complains about missing symbol `alloca'.
-
-Say
-
- export LDFLAGS=-lPW
-
-before starting the configure script.
-
-----------------------------------------------------------------------
-
* I'm having problems formatting man pages produced by the perl
wrapman script.
@@ -546,25 +255,6 @@ following patch:
$prog \\- whatever
.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.
-
-Use groff -X -Tps.
-
-----------------------------------------------------------------------
-
-* When I try to run gxditview, I get the error:
- Error: Widget viewport has zero width and/or height
-
-This error means you haven't correctly installed the application
-defaults file, GXditview.ad; ``make install'' does this for you
-automatically, so either you didn't do ``make install'', or you don't
-have imake configured correctly.
-
----------------------------------------------------------------------
* groff uses up an enormous amount of memory processing large files.
@@ -602,13 +292,114 @@ and recompile groff:
else
exprstmt = 0;
+
+
+Printing and Display Problems
+=============================
+
+
+
+* I'm having problems including PostScript illustrations (EPS) using
+ the PSPIC macro and/or \X'ps: import ...'.
+
+A PostScript document must meet three requirements in order to be
+included with the PSPIC macro: it must comply with the Adobe Document
+Structuring Conventions; it must contain a BoundingBox line; it must
+be ``well-behaved''. The BoundingBox line should be of the form:
+
+ %%BoundingBox: llx lly urx ury
+
+where llx, lly, urx, ury are the coordinates of the lower left x,
+lower left y, upper right x, upper right y of the bounding box of
+marks on the page expressed as integers in the default PostScript
+coordinate system (72 units per inch, origin at bottom left corner).
+
+The most convenient program to get the bounding box of a document is
+the `ps2epsi' script coming with GhostScript.
+
+If you can't use this program, another useful tactic is to print out
+the illustration by itself (you may need to add a `showpage' at the
+end), and physically measure the bounding box. For more detail on
+these requirements, read the specification of Encapsulated PostScript
+format. (This is available from the Adobe file server; send a message
+with a body of `help' to ps-file-server@adobe.com.)
+
+If an EPS file to be included via \X'ps: import' does not start with
+%!PS-Adobe-...', gtroff will still include the file, but grops will
+not add any fonts to the generated output file that are listed in the
+EPS file, even though the files are listed in the `download' file and
+are available in the devps directory.
+
----------------------------------------------------------------------
-* Where can I get grap?
+* 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.
-Ted Faber <faber@lunabase.org> has written a freely available grap:
+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.
- http://www.lunabase.org/~faber/Vault/software/grap/
+----------------------------------------------------------------------
+
+* 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.
+
+Make sure that PAGE is defined to be `letter' in the top-level
+Makefile.
+
+----------------------------------------------------------------------
+
+* When I try to run gxditview, I get the error:
+ Error: Widget viewport has zero width and/or height
+
+This error means you haven't correctly installed the application
+defaults file, GXditview.ad; ``make install'' does this for you
+automatically, so either you didn't do ``make install'', or you don't
+have imake configured correctly.
+
+----------------------------------------------------------------------
+
+* When I preview documents using -TX75 or -TX100, the layout is not
+ the same as when I print the document with -Tps: the line and page
+ breaks come in different places.
+
+Use groff -X -Tps.
+
+----------------------------------------------------------------------
+
+* When I try to print the output of groff -Tps, I get no output at all
+ from the printer, and the log file shows the error
+ %%[ error: undefined; offendingcommand: BP ]%%
+ I'm using TranScript spooling software.
+
+This is a bug in the page reversal filter in early versions of
+TranScript. Change the `broken' parameter in
+/usr/local/lib/groff/font/devps/DESC to 7.
+
+----------------------------------------------------------------------
+
+* When I preview groff -Tps output using the Sun OpenWindows 2.0
+ pageview program, all the pages are displayed on top of each other.
+
+This is a defect in pageview. Change the `broken' parameter in
+/usr/local/lib/groff/font/devps/DESC to 2.
+
+----------------------------------------------------------------------
+
+* With groff -TX75, -TX100 or -X, I can only view the first page.
+
+The left mouse button brings up a menu that allows you to view other
+pages.
+
+----------------------------------------------------------------------
+
+* When I print the output of groff -Tdvi, I just get a black dot in
+ upper left corner.
+
+Some dvi drivers (notably early versions of xtex) do not correctly
+handle dvi files that use a resolution different from that used by dvi
+files produced by TeX. Try getting a more up to date driver.
----------------------------------------------------------------------
@@ -637,17 +428,99 @@ Structuring Conventions. The output generated by groff should be
printable on any PostScript printer. Problems with groff output's not
printing are most often caused by the spooling system.
+
+
+Platform-Dependent Macro Problems
+=================================
+
+
+
+* I get lots of errors when I use groff with the AT&T -mm macros.
+
+Use the groff -mm macros.
+
----------------------------------------------------------------------
-* 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.
+* groff produces wrapper macros for `ms' and friends which call the
+ system's original macros. Then, to get groff's ms macro package I
+ have to use `-mgs' instead `-ms'. Can I avoid this?
-\n(st and \n(sb aren't supposed to give the height and depth of the
-string rather they give the minimum and maximum vertical displacement
-of the baseline. For example for \v'2u'\v'-3u', \n(st will be 1 and
-\n(sb will be -2. The height and depth of the string is available in
-the \n[rst] and \n[rsb] registers: these are groff extensions.
+Yes. Configure and compile groff as usual, but install it with
+
+ make install tmac_wrap=""
+
+Then no wrapper files are produced, and `-ms' will use groff's `ms'
+macros.
+
+----------------------------------------------------------------------
+
+* I'm having problems formatting HP-UX 9.0 man pages with groff -man.
+
+Copy HP's tmac.an into /usr/local/share/groff/site-tmac/an.tmac, and
+either put `.cp 1' at the beginning or filter it (and any files it
+.so's) through tmac/fixmacros.sed.
+
+----------------------------------------------------------------------
+
+* I get errors using the Unix -ms macros with groff -e -C.
+
+Apply this change:
+
+*** /usr/lib/ms/ms.eqn Tue Apr 25 02:14:28 1989
+--- ms.eqn Sun Nov 11 10:33:59 1990
+***************
+*** 22,29 ****
+ ..
+ . \" EN - end of a displayed equation
+ .de EN
+! .if !\\*(10 .br
+ .di
+ .rm EZ
+ .nr ZN \\n(dn
+ .if \\n(ZN>0 .if \\n(YE=0 .LP
+--- 22,30 ----
+ ..
+ . \" EN - end of a displayed equation
+ .de EN
+! .if \\n(.k>0 .br
+ .di
++ .ds 10 \\*(EZ\\
+ .rm EZ
+ .nr ZN \\n(dn
+ .if \\n(ZN>0 .if \\n(YE=0 .LP
+
+----------------------------------------------------------------------
+
+* I'm having problems formatting Ultrix man pages with groff -man.
+
+The Ultrix man pages use a number of non-standard extensions to the
+Unix man macros. One solution is to use the Ultrix -man macros with
+groff. Copy /usr/lib/tmac/tmac.an to
+/usr/local/share/groff/site-tmac/an.tmac and apply the following patch
+(from Frank Wortner):
+
+*** /usr/local/lib/groff/tmac/tmac.an Wed Sep 9 12:29:28 1992
+--- /usr/lib/tmac/tmac.an Fri Jul 24 19:58:19 1992
+***************
+*** 489,495 ****
+ . \" make special case of shift out of italic
+ .de }S
+ .ds ]F
+! .if \\$12 .if !\\$5 .ds ]F \^
+ .ie !\\$4 .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
+ .el \\$3
+ .}f
+--- 489,495 ----
+ . \" make special case of shift out of italic
+ .de }S
+ .ds ]F
+! .if \\$12 .if !\\$5 .ds ]F\^
+ .ie !\\$4 .}S \\$2 \\$1 "\\$3\f\\$1\\$4\\*(]F" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
+ .el \\$3
+ .}f
+
+Another possible solution is to install tmac/man.ultrix as
+/usr/local/share/groff/site-tmac/man.local.
----------------------------------------------------------------------
@@ -727,3 +600,186 @@ To get PostScript output from 'man -t', you also need to create a
# This shell script is intended for use with man, so warnings are
! # probably not wanted.
! exec groff -Wall $T $opts $rest
+
+
+
+Compilation Problems
+====================
+
+
+
+* Compilation dies with
+
+ y.tab.c: In function `int yyparse()':
+ y.tab.c: `size_t' undeclared in namespace `std'
+
+This is a bug in bison 1.32. Don't use this version. 1.28 or 1.33 works
+fine. Alternatively, use yacc or byacc.
+
+----------------------------------------------------------------------
+
+* There are many empty `Makefile.dep' files. Is this a bug?
+
+No. Real dependency files are created with a `make depend' call.
+
+----------------------------------------------------------------------
+
+* On HP-UX, the compiler complains about missing symbol `alloca'.
+
+Say
+
+ export LDFLAGS=-lPW
+
+before starting the configure script.
+
+----------------------------------------------------------------------
+
+* The configure script fails on OS/390 (z/OS) Unix.
+
+[This has been fixed in z/OS V1R3 (aka OS/390 R13).]
+
+There is a bug in the Language Environment (LE) whereby the test
+program for static destructors fails. You will see the message
+`configure: error: a working C++ compiler is required'
+
+Applying PTF UQ42006 is supposed to fix this, but the test program is
+still returning the wrong value (1). To work around this problem, you
+can comment out the following in the configure script (near line 2029).
+This will effectively bypass the test (static constructors and
+destructors do actually work properly):
+
+#if { (eval echo "$as_me:2029: \"$ac_link\"") >&5
+# (eval $ac_link) 2>&5
+# ac_status=$?
+# echo "$as_me:2032: \$? = $ac_status" >&5
+# (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+# { (eval echo "$as_me:2034: \"$ac_try\"") >&5
+# (eval $ac_try) 2>&5
+# ac_status=$?
+# echo "$as_me:2037: \$? = $ac_status" >&5
+# (exit $ac_status); }; }; then
+# echo "$as_me:2039: result: yes" >&5
+#echo "${ECHO_T}yes" >&6
+#else
+# echo "$as_me: program exited with status $ac_status" >&5
+#echo "$as_me: failed program was:" >&5
+#cat conftest.$ac_ext >&5
+#echo "$as_me:2045: result: no" >&5
+#echo "${ECHO_T}no" >&6;{ { echo "$as_me:2046: error: a working C++ compiler is required" >&5
+#echo "$as_me: error: a working C++ compiler is required" >&2;}
+# { (exit 1); exit 1; }; }
+#fi
+
+----------------------------------------------------------------------
+
+* I get errors when I try to compile groff with DEC C++.
+
+Fix the declaration of write() in <unistd.h> so that the second
+argument is a const char *. Fix the declaration of open() in
+<sys/file.h> so that the first argument is a const char *.
+
+----------------------------------------------------------------------
+
+* On a host using Unix make (e.g. Solaris), if you are compiling for
+ multiple architectures by building in a subdirectory, the make stops
+ with a message like this:
+
+ make: Fatal error: Don't know how to make target `assert.o'
+
+ or like this:
+
+ make: Fatal error: Can't find /u/src/groff/src/include/Makefile.sub': No such file or directory
+
+This occurs because GNU make and Unix make handle VPATH differently,
+and the groff build relies on GNU make's VPATH handling.
+
+Use GNU make 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
+
+ Stop.
+
+ for no apparent reason.
+
+Use GNU make.
+
+----------------------------------------------------------------------
+
+* I'm having problems compiling groff on 386BSD 0.1.
+
+If you're using ash as /bin/sh, you'll need the following patch.
+
+*** gendef.sh.org Sun Jun 30 13:30:36 1991
+--- gendef.sh Sun Feb 28 10:23:49 1993
+***************
+*** 3,9 ****
+ file=$1
+ shift
+
+! defs="#define $1"
+ shift
+ for def
+ do
+--- 3,10 ----
+ file=$1
+ shift
+
+! x=$1
+! defs="#define $x"
+ shift
+ for def
+ do
+
+You'll also need to change dirnamemax.c so that it doesn't use
+pathconf().
+
+----------------------------------------------------------------------
+
+* While compiling on Xenix, ranlib libgroff.a fails.
+
+The system ranlib can't handle externals longer than 40 characters.
+Use the ranlib included in demon.co.uk:/pub/xenix/g++-1.40.3a.v1
+instead.
+
+----------------------------------------------------------------------
+
+* I get errors when I try to compile groff with Sun C++ version 3 or
+ earlier.
+
+Groff requires header files that are moderately compatible with AT&T
+C++ and ANSI C. With some versions of Sun C++, the supplied header
+files need some of the following changes to meet this requirement:
+<string.h> must declare the mem* functions, (just add `#include
+<memory.h>' to <string.h>); the first argument to fopen and freopen
+should be declared as `const char *'; the first argument to fread
+should be declared as `void *'; the first argument to fwrite should be
+declared as `const void *'; malloc should be declared to return
+`void *'; in <alloca.h>, the declaration `extern "C" { void
+*__builtin_alloca(int); }' should be added; in <sys/signal.h> the
+return type and the second argument type of signal() should be changed
+to be `void (*)(int)'.
+
+You can either change them in place, or copy them to some other
+directory and include that directory with a -I option.
+
+----------------------------------------------------------------------
+
+* I get errors when I try to compile groff with 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 lots of `numeric overflow' error messages whenever I run
+ groff; I compiled groff with AT&T C++ 2.0 with an ANSI C compiler.
+
+Make sure -DCFRONT_ANSI_BUG is included in DEFINES in the top-level
+Makefile. If that doesn't solve the problem, define INT_MIN as
+-INT_MAX in libgroff/lib.h.
diff --git a/contrib/groff/README b/contrib/groff/README
index 88f8f87..fffada7 100644
--- a/contrib/groff/README
+++ b/contrib/groff/README
@@ -72,7 +72,7 @@ Three mailing lists are available:
commitments to the CVS repository
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.
+subscribed to the `groff' list 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
diff --git a/contrib/groff/REVISION b/contrib/groff/REVISION
index 0cfbf08..d00491f 100644
--- a/contrib/groff/REVISION
+++ b/contrib/groff/REVISION
@@ -1 +1 @@
-2
+1
diff --git a/contrib/groff/VERSION b/contrib/groff/VERSION
index b48f322..adc97d8 100644
--- a/contrib/groff/VERSION
+++ b/contrib/groff/VERSION
@@ -1 +1 @@
-1.17
+1.18
diff --git a/contrib/groff/aclocal.m4 b/contrib/groff/aclocal.m4
index 83a6839..c3e6b64 100644
--- a/contrib/groff/aclocal.m4
+++ b/contrib/groff/aclocal.m4
@@ -1,5 +1,5 @@
dnl Autoconf macros for groff.
-dnl Copyright (C) 1989-1995, 2001 Free Software Foundation, Inc.
+dnl Copyright (C) 1989-1995, 2001, 2002 Free Software Foundation, Inc.
dnl
dnl This file is part of groff.
dnl
@@ -58,6 +58,31 @@ AC_DEFUN(GROFF_PROG_YACC,
[AC_CHECK_PROGS(YACC, byacc 'bison -y', yacc)])dnl
dnl
dnl
+dnl The following programs are needed for grohtml.
+dnl
+AC_DEFUN(GROFF_HTML_PROGRAMS,
+[make_html=html
+make_install_html=install_html
+AC_CHECK_PROG(pnmcut, pnmcut, found, missing)
+AC_CHECK_PROG(pnmcrop, pnmcrop, found, missing)
+AC_CHECK_PROG(pnmtopng, pnmtopng, found, missing)
+AC_CHECK_PROG(gs, gs gsos2, found, missing)
+AC_CHECK_PROG(psselect, psselect, found, missing)
+case "x$pnmcut$pnmcrop$pnmtopng$gs$psselect" in
+*missing*)
+ make_html=
+ make_install_html=
+ AC_MSG_WARN([
+
+ Since one or more of the above five programs can't be found in the path,
+ the HTML backend of groff (grohtml) won't work properly. Consequently,
+ no documentation in HTML format is built and installed.
+]) ;;
+esac
+AC_SUBST(make_html)
+AC_SUBST(make_install_html)])dnl
+dnl
+dnl
dnl GROFF_CSH_HACK(if hack present, if not present)
dnl
AC_DEFUN(GROFF_CSH_HACK,
@@ -86,7 +111,8 @@ if grep '[34]\.' /usr/options/cb.name >/dev/null 2>&1
changequote([,])dnl
then
AC_MSG_RESULT(yes)
- AC_DEFINE(_SYSV3)
+ AC_DEFINE(_SYSV3, 1,
+ [Define if you have ISC 3.x or 4.x.])
else
AC_MSG_RESULT(no)
fi])dnl
@@ -97,7 +123,8 @@ AC_DEFUN(GROFF_POSIX,
AC_LANG_PUSH(C++)
AC_TRY_COMPILE([#include <stdio.h>
extern "C" { void fileno(int); }],,
-AC_MSG_RESULT(yes);AC_DEFINE(_POSIX_SOURCE),
+AC_MSG_RESULT(yes);AC_DEFINE(_POSIX_SOURCE, 1,
+ [Define if -D_POSIX_SOURCE is necessary.]),
AC_MSG_RESULT(no))
AC_LANG_POP(C++)])dnl
dnl
@@ -109,7 +136,8 @@ AC_DEFUN(GROFF_SRAND,
AC_MSG_CHECKING([for return type of srand])
AC_TRY_COMPILE([#include <stdlib.h>
extern "C" { void srand(unsigned int); }],,
-AC_MSG_RESULT(void);AC_DEFINE(RET_TYPE_SRAND_IS_VOID),
+AC_MSG_RESULT(void);AC_DEFINE(RET_TYPE_SRAND_IS_VOID, 1,
+ [Define if srand() returns void not int.]),
AC_MSG_RESULT(int))
AC_LANG_POP(C++)])dnl
dnl
@@ -120,7 +148,9 @@ AC_MSG_CHECKING([for sys_nerr in <errno.h> or <stdio.h>])
AC_TRY_COMPILE([#include <errno.h>
#include <stdio.h>],
[int k; k = sys_nerr;],
-AC_MSG_RESULT(yes);AC_DEFINE(HAVE_SYS_NERR),
+AC_MSG_RESULT(yes);AC_DEFINE(HAVE_SYS_NERR, 1,
+ [Define if you have sysnerr in <errno.h> or
+ <stdio.h>.]),
AC_MSG_RESULT(no))
AC_LANG_POP(C++)])dnl
dnl
@@ -130,7 +160,9 @@ AC_DEFUN(GROFF_SYS_ERRLIST,
AC_TRY_COMPILE([#include <errno.h>
#include <stdio.h>],
[int k; k = (int)sys_errlist[0];],
-AC_MSG_RESULT(yes);AC_DEFINE(HAVE_SYS_ERRLIST),
+AC_MSG_RESULT(yes);AC_DEFINE(HAVE_SYS_ERRLIST, 1,
+ [Define if you have sys_errlist in <errno.h>
+ or in <stdio.h>.]),
AC_MSG_RESULT(no))])dnl
dnl
dnl
@@ -139,7 +171,8 @@ AC_DEFUN(GROFF_OSFCN_H,
AC_MSG_CHECKING([C++ <osfcn.h>])
AC_TRY_COMPILE([#include <osfcn.h>],
[read(0, 0, 0); open(0, 0);],
-AC_MSG_RESULT(yes);AC_DEFINE(HAVE_CC_OSFCN_H),
+AC_MSG_RESULT(yes);AC_DEFINE(HAVE_CC_OSFCN_H, 1,
+ [Define if you have a C++ <osfcn.h>.]),
AC_MSG_RESULT(no))
AC_LANG_POP(C++)])dnl
dnl
@@ -149,7 +182,8 @@ AC_DEFUN(GROFF_LIMITS_H,
AC_MSG_CHECKING([C++ <limits.h>])
AC_TRY_COMPILE([#include <limits.h>],
[int x = INT_MIN; int y = INT_MAX; int z = UCHAR_MAX;],
-AC_MSG_RESULT(yes);AC_DEFINE(HAVE_CC_LIMITS_H),
+AC_MSG_RESULT(yes);AC_DEFINE(HAVE_CC_LIMITS_H, 1,
+ [Define if you have a C++ <limits.h>.]),
AC_MSG_RESULT(no))
AC_LANG_POP(C++)])dnl
dnl
@@ -160,7 +194,9 @@ AC_MSG_CHECKING([for declaration of time_t])
AC_TRY_COMPILE([#include <time.h>],
[time_t t = time(0); struct tm *p = localtime(&t);],
AC_MSG_RESULT(yes),
-AC_MSG_RESULT(no);AC_DEFINE(LONG_FOR_TIME_T))
+AC_MSG_RESULT(no);AC_DEFINE(LONG_FOR_TIME_T, 1,
+ [Define if localtime() takes a long * not a
+ time_t *.]))
AC_LANG_POP(C++)])dnl
dnl
dnl
@@ -168,18 +204,19 @@ AC_DEFUN(GROFF_STRUCT_EXCEPTION,
[AC_MSG_CHECKING([struct exception])
AC_TRY_COMPILE([#include <math.h>],
[struct exception e;],
-AC_MSG_RESULT(yes);AC_DEFINE(HAVE_STRUCT_EXCEPTION),
+AC_MSG_RESULT(yes);AC_DEFINE(HAVE_STRUCT_EXCEPTION, 1,
+ [Define if <math.h> defines struct exception.]),
AC_MSG_RESULT(no))])dnl
dnl
dnl
AC_DEFUN(GROFF_ARRAY_DELETE,
[AC_LANG_PUSH(C++)
AC_MSG_CHECKING([whether ANSI array delete syntax supported])
-AC_TRY_COMPILE(,
-changequote(,)dnl
-char *p = new char[5]; delete [] p;changequote([,]),
+AC_TRY_COMPILE(, [char *p = new char[5]; delete [] p;],
AC_MSG_RESULT(yes),
-AC_MSG_RESULT(no);AC_DEFINE(ARRAY_DELETE_NEEDS_SIZE))
+AC_MSG_RESULT(no);AC_DEFINE(ARRAY_DELETE_NEEDS_SIZE, 1,
+ [Define if your C++ doesn't understand
+ `delete []'.]))
AC_LANG_POP(C++)])dnl
dnl
dnl
@@ -188,7 +225,9 @@ AC_DEFUN(GROFF_TRADITIONAL_CPP,
[AC_LANG_PUSH(C++)
AC_MSG_CHECKING([traditional preprocessor])
AC_TRY_COMPILE([#define name2(a,b) a/**/b],[int name2(foo,bar);],
-AC_MSG_RESULT(yes);AC_DEFINE(TRADITIONAL_CPP),
+AC_MSG_RESULT(yes);AC_DEFINE(TRADITIONAL_CPP, 1,
+ [Define if your C++ compiler uses a
+ traditional (Reiser) preprocessor.]),
AC_MSG_RESULT(no))
AC_LANG_POP(C++)])dnl
dnl
@@ -207,7 +246,11 @@ main()
exit(i != 0200);
#endif
}],
-AC_MSG_RESULT(yes);AC_DEFINE(WCOREFLAG,0200),
+AC_MSG_RESULT(yes);AC_DEFINE(WCOREFLAG, 0200,
+ [Define if the 0200 bit of the status returned
+ by wait() indicates whether a core image was
+ produced for a process that was terminated by
+ a signal.]),
AC_MSG_RESULT(no),
AC_MSG_RESULT(no))])dnl
dnl
@@ -221,23 +264,32 @@ dnl
dnl
AC_DEFUN(GROFF_PAGE,
[AC_MSG_CHECKING([default paper size])
+groff_prefix=$prefix
+test "x$prefix" = xNONE && groff_prefix=$ac_default_prefix
if test -z "$PAGE"; then
descfile=
- if test -r $prefix/share/groff/font/devps/DESC; then
- descfile=$prefix/share/groff/font/devps/DESC
- elif test -r $prefix/lib/groff/font/devps/DESC; then
- descfile=$prefix/lib/groff/font/devps/DESC
+ if test -r $groff_prefix/share/groff/font/devps/DESC; then
+ descfile=$groff_prefix/share/groff/font/devps/DESC
+ elif test -r $groff_prefix/lib/groff/font/devps/DESC; then
+ descfile=$groff_prefix/lib/groff/font/devps/DESC
else
- for f in $prefix/share/groff/*/font/devps/DESC; do
+ for f in $groff_prefix/share/groff/*/font/devps/DESC; do
if test -r $f; then
descfile=$f
break
fi
done
fi
- if test -n "$descfile" \
- && grep "^paperlength 841890" $descfile >/dev/null 2>&1; then
- PAGE=A4
+ if test -n "$descfile"; then
+changequote(,)dnl
+ if grep '^paperlength[ ]\+841890' $descfile
+ >/dev/null 2>&1; then
+ PAGE=A4
+ elif grep '^papersize[ ]\+[aA]4' $descfile \
+ >/dev/null 2>&1; then
+ PAGE=A4
+ fi
+changequote([,])dnl
fi
fi
if test -z "$PAGE"; then
@@ -260,6 +312,10 @@ changequote(,)dnl
changequote([,])dnl
fi
test -n "$PAGE" || PAGE=letter
+if test "x$PAGE" = "xA4"; then
+ AC_DEFINE(PAGEA4, 1,
+ [Define if the printer's page size is A4.])
+fi
AC_MSG_RESULT($PAGE)
AC_SUBST(PAGE)])dnl
dnl
@@ -380,6 +436,12 @@ ac_dir=`cd $ac_aux_dir; pwd`
ac_install_sh="$ac_dir/install-sh -c"])dnl
dnl
dnl
+dnl Test whether install-info is available.
+dnl
+AC_DEFUN(GROFF_INSTALL_INFO,
+[AC_CHECK_PROGS(INSTALL_INFO, install-info, :)])dnl
+dnl
+dnl
dnl At least one UNIX system, Apple Macintosh Rhapsody 5.5,
dnl does not have -lm.
dnl
@@ -398,8 +460,8 @@ dnl
dnl This simplifies Makefile rules.
dnl
AC_DEFUN(GROFF_BUILDDIR,
-[top_builddir=`pwd`
-AC_SUBST(top_builddir)])dnl
+[groff_top_builddir=`pwd`
+AC_SUBST(groff_top_builddir)])dnl
dnl
dnl
dnl Check for EBCDIC - stolen from the OS390 Unix LYNX port
@@ -416,11 +478,14 @@ make an error "Character set is not EBCDIC"
groff_cv_ebcdic="yes"
TTYDEVDIRS="font/devcp1047"
AC_MSG_RESULT(yes)
- AC_DEFINE(IS_EBCDIC_HOST),
+ AC_DEFINE(IS_EBCDIC_HOST, 1,
+ [Define if the host's encoding is EBCDIC.]),
groff_cv_ebcdic="no"
- TTYDEVDIRS="font/devascii font/devlatin1 font/devutf8"
+ TTYDEVDIRS="font/devascii font/devlatin1"
+ OTHERDEVDIRS="font/devlj4 font/devlbp"
AC_MSG_RESULT(no))
-AC_SUBST(TTYDEVDIRS)])dnl
+AC_SUBST(TTYDEVDIRS)
+AC_SUBST(OTHERDEVDIRS)])dnl
dnl
dnl
dnl Check for OS/390 Unix. We test for EBCDIC also -- the Linux port (with
@@ -458,29 +523,85 @@ AC_CACHE_VAL(groff_cv_decl_needed_$1,
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef HAVE_MATH_H
#include <math.h>
#endif],
-[char *(*pfn) = (char *(*)) $1],
+[#ifndef $1
+ char *p = (char *) $1;
+#endif],
groff_cv_decl_needed_$1=no,
groff_cv_decl_needed_$1=yes)])
AC_MSG_RESULT($groff_cv_decl_needed_$1)
if test $groff_cv_decl_needed_$1 = yes; then
- AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]))
+ AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]), 1,
+ [Define if your C++ doesn't declare ]$1[().])
fi
AC_LANG_POP(C++)])dnl
dnl
dnl
-dnl Check for mkstemp() and its function prototype.
+dnl If mkstemp() isn't available, use our own mkstemp.cc file.
dnl
AC_DEFUN(GROFF_MKSTEMP,
-[AC_CHECK_FUNC(mkstemp,
-[AC_DEFINE(HAVE_MKSTEMP)
-AC_MSG_CHECKING([for mkstemp prototype in <stdlib.h>])
-AC_EGREP_CPP(mkstemp,
-[#include <stdlib.h>],
-AC_MSG_RESULT(yes);AC_DEFINE(HAVE_MKSTEMP_PROTO),
-AC_MSG_RESULT(no))])])
+[AC_MSG_CHECKING([for mkstemp])
+AC_LANG_PUSH(C++)
+AC_LIBSOURCE(mkstemp.cc)
+AC_TRY_LINK([#include <stdlib.h>
+#include <unistd.h>
+int (*f) (char *);],
+[f = mkstemp;],
+AC_MSG_RESULT(yes);AC_DEFINE(HAVE_MKSTEMP, 1,
+ [Define if you have mkstemp().]),
+AC_MSG_RESULT(no);_AC_LIBOBJ(mkstemp))
+AC_LANG_POP(C++)])dnl
+dnl
+dnl
+dnl Test whether <inttypes.h> exists, doesn't clash with <sys/types.h>,
+dnl and declares uintmax_t. Taken from the fileutils package.
+dnl
+AC_DEFUN(GROFF_INTTYPES_H,
+[AC_LANG_PUSH(C++)
+AC_MSG_CHECKING([for inttypes.h])
+AC_TRY_COMPILE([#include <sys/types.h>
+#include <inttypes.h>],
+[uintmax_t i = (uintmax_t)-1;],
+groff_cv_header_inttypes_h=yes,
+groff_cv_header_inttypes_h=no)
+AC_MSG_RESULT($groff_cv_header_inttypes_h)
+AC_LANG_POP(C++)])dnl
+dnl
+dnl
+dnl Test for working `unsigned long long'. Taken from the fileutils package.
+dnl
+AC_DEFUN(GROFF_UNSIGNED_LONG_LONG,
+[AC_LANG_PUSH(C++)
+AC_MSG_CHECKING([for unsigned long long])
+AC_TRY_LINK([unsigned long long ull = 1; int i = 63;],
+[unsigned long long ullmax = (unsigned long long)-1;
+return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
+groff_cv_type_unsigned_long_long=yes,
+groff_cv_type_unsigned_long_long=no)
+AC_MSG_RESULT($groff_cv_type_unsigned_long_long)
+AC_LANG_POP(C++)])dnl
+dnl
+dnl
+dnl Define uintmax_t to `unsigned long' or `unsigned long long'
+dnl if <inttypes.h> does not exist. Taken from the fileutils package.
+dnl
+AC_DEFUN(GROFF_UINTMAX_T,
+[AC_REQUIRE([GROFF_INTTYPES_H])
+if test $groff_cv_header_inttypes_h = no; then
+ AC_REQUIRE([GROFF_UNSIGNED_LONG_LONG])
+ test $groff_cv_type_unsigned_long_long = yes \
+ && ac_type='unsigned long long' \
+ || ac_type='unsigned long'
+ AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
+ [Define uintmax_t to `unsigned long' or
+ `unsigned long long' if <inttypes.h> does not
+ exist.])
+fi])dnl
diff --git a/contrib/groff/configure b/contrib/groff/configure
index e5b6580..fc28d84 100755
--- a/contrib/groff/configure
+++ b/contrib/groff/configure
@@ -1,22 +1,192 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by Autoconf 2.50.
+# Generated by GNU Autoconf 2.54.
#
-# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
# Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
set -o posix
fi
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in LANG LANGUAGE LC_ALL LC_COLLATE LC_CTYPE LC_NUMERIC LC_MESSAGES LC_TIME
+do
+ if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
# Name of the executable.
-as_me=`echo "$0" |sed 's,.*[\\/],,'`
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conftest.sh
+ echo "exit 0" >>conftest.sh
+ chmod +x conftest.sh
+ if (PATH="/nonexistent;."; conftest.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conftest.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
if expr a : '\(a\)' >/dev/null 2>&1; then
as_expr=expr
@@ -42,24 +212,20 @@ else
fi
rm -f conf$$ conf$$.exe conf$$.file
-as_executable_p="test -f"
-
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
- as_unset=unset
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
else
- as_unset=false
+ as_mkdir_p=false
fi
-# NLS nuisances.
-$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
-$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
-$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
-$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
-$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
-$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
-$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
-$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
# IFS
# We need space, tab and new line, in precisely that order.
@@ -68,7 +234,8 @@ as_nl='
IFS=" $as_nl"
# CDPATH.
-$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+$as_unset CDPATH
+
# Name of the host.
# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
@@ -81,9 +248,11 @@ exec 6>&1
# Initializations.
#
ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
cross_compiling=no
subdirs=
-MFLAGS= MAKEFLAGS=
+MFLAGS=
+MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
# Maximum number of lines to put in a shell here document.
@@ -91,17 +260,53 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# only ac_max_sed_lines should be used.
: ${ac_max_here_lines=38}
-# Avoid depending upon Character Ranges.
-ac_cr_az='abcdefghijklmnopqrstuvwxyz'
-ac_cr_AZ='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-ac_cr_09='0123456789'
-ac_cr_alnum=$ac_cr_az$ac_cr_AZ$ac_cr_09
-
-# Sed expression to map a string onto a valid sh and CPP variable names.
-ac_tr_sh="sed y%*+%pp%;s%[^_$ac_cr_alnum]%_%g"
-ac_tr_cpp="sed y%*$ac_cr_az%P$ac_cr_AZ%;s%[^_$ac_cr_alnum]%_%g"
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
ac_unique_file="src/roff/groff/groff.cc"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS groff_top_builddir CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX TTYDEVDIRS OTHERDEVDIRS LPR LP LPQ PSPRINT DVIPRINT PERLPATH YACC RANLIB ac_ct_RANLIB INSTALL_INFO INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S SH_SCRIPT_SED_CMD CPP EGREP LIBM LIBOBJS BROKEN_SPOOLER_FLAGS PAGE g sys_tmac_prefix tmac_wrap pnmcut pnmcrop pnmtopng gs psselect make_html make_install_html LTLIBOBJS'
+ac_subst_files=''
# Initialize some variables set by options.
ac_init_help=
@@ -141,13 +346,6 @@ oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-
ac_prev=
for ac_option
do
@@ -193,7 +391,7 @@ do
-disable-* | --disable-*)
ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$ac_cr_alnum]" >/dev/null &&
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid feature name: $ac_feature" >&2
{ (exit 1); exit 1; }; }
ac_feature=`echo $ac_feature | sed 's/-/_/g'`
@@ -202,7 +400,7 @@ do
-enable-* | --enable-*)
ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-_$ac_cr_alnum]" >/dev/null &&
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid feature name: $ac_feature" >&2
{ (exit 1); exit 1; }; }
ac_feature=`echo $ac_feature | sed 's/-/_/g'`
@@ -280,7 +478,7 @@ do
with_fp=no ;;
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c)
+ | --no-cr | --no-c | -n)
no_create=yes ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
@@ -384,7 +582,7 @@ do
-with-* | --with-*)
ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$ac_cr_alnum]" >/dev/null &&
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid package name: $ac_package" >&2
{ (exit 1); exit 1; }; }
ac_package=`echo $ac_package| sed 's/-/_/g'`
@@ -397,7 +595,7 @@ do
-without-* | --without-*)
ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-_$ac_cr_alnum]" >/dev/null &&
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid package name: $ac_package" >&2
{ (exit 1); exit 1; }; }
ac_package=`echo $ac_package | sed 's/-/_/g'`
@@ -429,7 +627,7 @@ Try \`$0 --help' for more information." >&2
*=*)
ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
# Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$ac_cr_alnum]" >/dev/null &&
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
{ echo "$as_me: error: invalid variable name: $ac_envvar" >&2
{ (exit 1); exit 1; }; }
ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
@@ -439,7 +637,7 @@ Try \`$0 --help' for more information." >&2
*)
# FIXME: should be removed in autoconf 3.0.
echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$ac_cr_alnum]" >/dev/null &&
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
echo "$as_me: WARNING: invalid host type: $ac_option" >&2
: ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
;;
@@ -454,26 +652,36 @@ if test -n "$ac_prev"; then
fi
# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
- localstatedir libdir includedir oldincludedir infodir mandir \
- exec_prefix prefix
+ localstatedir libdir includedir oldincludedir infodir mandir
do
eval ac_val=$`echo $ac_var`
case $ac_val in
[\\/$]* | ?:[\\/]* ) ;;
- NONE ) ;;
- *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
{ (exit 1); exit 1; }; };;
esac
done
# There might be people who depend on the old broken behavior: `$host'
# used to hold the argument of --host etc.
+# FIXME: To remove some day.
build=$build_alias
host=$host_alias
target=$target_alias
-# FIXME: should be removed in autoconf 3.0.
+# FIXME: To remove some day.
if test "x$host_alias" != x; then
if test "x$build_alias" = x; then
cross_compiling=maybe
@@ -489,13 +697,23 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias-
test "$silent" = yes && exec 6>/dev/null
+
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then its parent.
- ac_prog=$0
- ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
- test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
srcdir=$ac_confdir
if test ! -r $srcdir/$ac_unique_file; then
srcdir=..
@@ -505,13 +723,16 @@ else
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
- { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
{ (exit 1); exit 1; }; }
else
- { echo "$as_me: error: cannot find sources in $srcdir" >&2
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
{ (exit 1); exit 1; }; }
fi
fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ { (exit 1); exit 1; }; }
srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
ac_env_build_alias_set=${build_alias+set}
ac_env_build_alias_value=$build_alias
@@ -560,7 +781,7 @@ ac_cv_env_CPP_value=$CPP
if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
- cat <<EOF
+ cat <<_ACEOF
\`configure' configures this package to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -581,9 +802,9 @@ Configuration:
-n, --no-create do not create output files
--srcdir=DIR find the sources in DIR [configure dir or \`..']
-EOF
+_ACEOF
- cat <<EOF
+ cat <<_ACEOF
Installation directories:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
@@ -610,15 +831,15 @@ Fine tuning of the installation directories:
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--infodir=DIR info documentation [PREFIX/info]
--mandir=DIR man documentation [PREFIX/man]
-EOF
+_ACEOF
- cat <<\EOF
-EOF
+ cat <<\_ACEOF
+_ACEOF
fi
if test -n "$ac_init_help"; then
- cat <<\EOF
+ cat <<\_ACEOF
Some influential environment variables:
CC C compiler command
@@ -634,40 +855,60 @@ Some influential environment variables:
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
-EOF
+_ACEOF
fi
if test "$ac_init_help" = "recursive"; then
# If there are subdirs, report their specific --help.
ac_popdir=`pwd`
- for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
- cd $ac_subdir
- # A "../" for each directory in /$ac_subdir.
- ac_dots=`echo $ac_subdir |
- sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
-
- case $srcdir in
- .) # No --srcdir option. We are building in place.
- ac_sub_srcdir=$srcdir ;;
- [\\/]* | ?:[\\/]* ) # Absolute path.
- ac_sub_srcdir=$srcdir/$ac_subdir ;;
- *) # Relative path.
- ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
- esac
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
+ cd $ac_dir
# Check for guested configure; otherwise get Cygnus style configure.
- if test -f $ac_sub_srcdir/configure.gnu; then
+ if test -f $ac_srcdir/configure.gnu; then
echo
- $SHELL $ac_sub_srcdir/configure.gnu --help=recursive
- elif test -f $ac_sub_srcdir/configure; then
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
echo
- $SHELL $ac_sub_srcdir/configure --help=recursive
- elif test -f $ac_sub_srcdir/configure.ac ||
- test -f $ac_sub_srcdir/configure.in; then
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
echo
$ac_configure --help
else
- echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
fi
cd $ac_popdir
done
@@ -675,31 +916,31 @@ fi
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
- cat <<\EOF
+ cat <<\_ACEOF
-Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002
Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
-EOF
+_ACEOF
exit 0
fi
exec 5>config.log
-cat >&5 <<EOF
+cat >&5 <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by $as_me, which was
-generated by GNU Autoconf 2.50. Invocation command line was
+generated by GNU Autoconf 2.54. Invocation command line was
$ $0 $@
-EOF
+_ACEOF
{
cat <<_ASUNAME
-## ---------- ##
-## Platform. ##
-## ---------- ##
+## --------- ##
+## Platform. ##
+## --------- ##
hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
uname -m = `(uname -m) 2>/dev/null || echo unknown`
@@ -718,17 +959,27 @@ hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-PATH = $PATH
-
_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+
} >&5
-cat >&5 <<EOF
-## ------------ ##
-## Core tests. ##
-## ------------ ##
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
-EOF
# Keep a trace of the command line.
# Strip out --no-create and --no-recursion so they do not pile up.
@@ -739,62 +990,99 @@ for ac_arg
do
case $ac_arg in
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
+ | --no-cr | --no-c | -n ) continue ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ continue ;;
*" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
- ac_sep=" " ;;
- *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
- ac_sep=" " ;;
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
esac
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
# Get rid of the leading space.
+ ac_sep=" "
done
# When interrupted or exit'd, cleanup temporary files, and complete
# config.log. We remove comments because anyway the quotes in there
# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
trap 'exit_status=$?
# Save into config.log some information that might help in debugging.
- echo >&5
- echo "## ----------------- ##" >&5
- echo "## Cache variables. ##" >&5
- echo "## ----------------- ##" >&5
- echo >&5
- # The following way of writing the cache mishandles newlines in values,
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
{
(set) 2>&1 |
case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
*ac_space=\ *)
sed -n \
"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
- s/^\\([_$ac_cr_alnum]*_cv_[_$ac_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
;;
*)
sed -n \
- "s/^\\([_$ac_cr_alnum]*_cv_[_$ac_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
;;
esac;
-} >&5
- sed "/^$/d" confdefs.h >conftest.log
- if test -s conftest.log; then
- echo >&5
- echo "## ------------ ##" >&5
- echo "## confdefs.h. ##" >&5
- echo "## ------------ ##" >&5
- echo >&5
- cat conftest.log >&5
- fi
- (echo; echo) >&5
- test "$ac_signal" != 0 &&
- echo "$as_me: caught signal $ac_signal" >&5
- echo "$as_me: exit $exit_status" >&5
- rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
+}
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h | sort
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core core.* *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
exit $exit_status
' 0
for ac_signal in 1 2 13 15; do
- trap 'ac_status=$?; ac_signal='$ac_signal'; { (exit $ac_status); exit $ac_status; }' $ac_signal
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
done
ac_signal=0
@@ -803,6 +1091,33 @@ rm -rf conftest* confdefs.h
# AIX cpp loses on an empty file, so make sure it contains at least a newline.
echo >confdefs.h
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
# Let the site file select an alternate cache file if it wants to.
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
@@ -814,9 +1129,9 @@ if test -z "$CONFIG_SITE"; then
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
- { echo "$as_me:817: loading site script $ac_site_file" >&5
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
echo "$as_me: loading site script $ac_site_file" >&6;}
- cat "$ac_site_file" >&5
+ sed 's/^/| /' "$ac_site_file" >&5
. "$ac_site_file"
fi
done
@@ -825,7 +1140,7 @@ if test -r "$cache_file"; then
# Some versions of bash will fail to source /dev/null (special
# files actually), so we avoid doing that.
if test -f "$cache_file"; then
- { echo "$as_me:828: loading cache $cache_file" >&5
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
echo "$as_me: loading cache $cache_file" >&6;}
case $cache_file in
[\\/]* | ?:[\\/]* ) . $cache_file;;
@@ -833,14 +1148,14 @@ echo "$as_me: loading cache $cache_file" >&6;}
esac
fi
else
- { echo "$as_me:836: creating cache $cache_file" >&5
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
echo "$as_me: creating cache $cache_file" >&6;}
>$cache_file
fi
# Check that the precious variables saved in the cache have kept the same
# value.
-ac_suggest_removing_cache=false
+ac_cache_corrupted=false
for ac_var in `(set) 2>&1 |
sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
eval ac_old_set=\$ac_cv_env_${ac_var}_set
@@ -849,31 +1164,44 @@ for ac_var in `(set) 2>&1 |
eval ac_new_val="\$ac_env_${ac_var}_value"
case $ac_old_set,$ac_new_set in
set,)
- { echo "$as_me:852: WARNING: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: WARNING: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_suggest_removing_cache=: ;;
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
,set)
- { echo "$as_me:856: WARNING: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: WARNING: \`$ac_var' was not set in the previous run" >&2;}
- ac_suggest_removing_cache=: ;;
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
,);;
*)
if test "x$ac_old_val" != "x$ac_new_val"; then
- { echo "$as_me:862: WARNING: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: WARNING: \`$ac_var' has changed since the previous run:" >&2;}
- { echo "$as_me:864: WARNING: former value: $ac_old_val" >&5
-echo "$as_me: WARNING: former value: $ac_old_val" >&2;}
- { echo "$as_me:866: WARNING: current value: $ac_new_val" >&5
-echo "$as_me: WARNING: current value: $ac_new_val" >&2;}
- ac_suggest_removing_cache=:
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
fi;;
esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
done
-if $ac_suggest_removing_cache; then
- { echo "$as_me:873: WARNING: changes in the environment can compromise the build" >&5
-echo "$as_me: WARNING: changes in the environment can compromise the build" >&2;}
- { echo "$as_me:875: WARNING: consider removing $cache_file and starting over" >&5
-echo "$as_me: WARNING: consider removing $cache_file and starting over" >&2;}
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
fi
ac_ext=c
@@ -882,30 +1210,30 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
- *c*,-n*) ECHO_N= ECHO_C='
-' ECHO_T=' ' ;;
- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
- *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
-esac
-echo "#! $SHELL" >conftest.sh
-echo "exit 0" >>conftest.sh
-chmod +x conftest.sh
-if { (echo "$as_me:894: PATH=\".;.\"; conftest.sh") >&5
- (PATH=".;."; conftest.sh) 2>&5
- ac_status=$?
- echo "$as_me:897: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- ac_path_separator=';'
-else
- ac_path_separator=:
-fi
-PATH_SEPARATOR="$ac_path_separator"
-rm -f conftest.sh
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_headers="$ac_config_headers src/include/config.h:src/include/config.hin"
+
ac_srcdir_defaulted=no
srcdir=`cd $srcdir; pwd`
-top_builddir=`pwd`
+groff_top_builddir=`pwd`
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -915,7 +1243,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
set dummy ${ac_tool_prefix}gcc; ac_word=$2
-echo "$as_me:918: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -923,25 +1251,28 @@ else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_CC="${ac_tool_prefix}gcc"
-echo "$as_me:933: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:941: result: $CC" >&5
+ echo "$as_me:$LINENO: result: $CC" >&5
echo "${ECHO_T}$CC" >&6
else
- echo "$as_me:944: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -950,7 +1281,7 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-echo "$as_me:953: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -958,25 +1289,28 @@ else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_ac_ct_CC="gcc"
-echo "$as_me:968: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:976: result: $ac_ct_CC" >&5
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
echo "${ECHO_T}$ac_ct_CC" >&6
else
- echo "$as_me:979: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -989,7 +1323,7 @@ if test -z "$CC"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
set dummy ${ac_tool_prefix}cc; ac_word=$2
-echo "$as_me:992: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -997,25 +1331,28 @@ else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_CC="${ac_tool_prefix}cc"
-echo "$as_me:1007: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:1015: result: $CC" >&5
+ echo "$as_me:$LINENO: result: $CC" >&5
echo "${ECHO_T}$CC" >&6
else
- echo "$as_me:1018: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -1024,7 +1361,7 @@ if test -z "$ac_cv_prog_CC"; then
ac_ct_CC=$CC
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-echo "$as_me:1027: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1032,25 +1369,28 @@ else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_ac_ct_CC="cc"
-echo "$as_me:1042: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:1050: result: $ac_ct_CC" >&5
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
echo "${ECHO_T}$ac_ct_CC" >&6
else
- echo "$as_me:1053: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -1063,7 +1403,7 @@ fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-echo "$as_me:1066: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1072,19 +1412,22 @@ else
ac_cv_prog_CC="$CC" # Let the user override the test.
else
ac_prog_rejected=no
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
-fi
-ac_cv_prog_CC="cc"
-echo "$as_me:1086: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
if test $ac_prog_rejected = yes; then
@@ -1096,19 +1439,17 @@ if test $ac_prog_rejected = yes; then
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- set dummy "$ac_dir/$ac_word" ${1+"$@"}
- shift
- ac_cv_prog_CC="$@"
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
fi
fi
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:1108: result: $CC" >&5
+ echo "$as_me:$LINENO: result: $CC" >&5
echo "${ECHO_T}$CC" >&6
else
- echo "$as_me:1111: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -1119,7 +1460,7 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:1122: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1127,25 +1468,28 @@ else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-echo "$as_me:1137: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$as_me:1145: result: $CC" >&5
+ echo "$as_me:$LINENO: result: $CC" >&5
echo "${ECHO_T}$CC" >&6
else
- echo "$as_me:1148: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -1158,7 +1502,7 @@ if test -z "$CC"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:1161: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1166,25 +1510,28 @@ else
if test -n "$ac_ct_CC"; then
ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_ac_ct_CC="$ac_prog"
-echo "$as_me:1176: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
ac_ct_CC=$ac_cv_prog_ac_ct_CC
if test -n "$ac_ct_CC"; then
- echo "$as_me:1184: result: $ac_ct_CC" >&5
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
echo "${ECHO_T}$ac_ct_CC" >&6
else
- echo "$as_me:1187: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -1196,12 +1543,33 @@ fi
fi
-test -z "$CC" && { { echo "$as_me:1199: error: no acceptable cc found in \$PATH" >&5
-echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH" >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH" >&2;}
{ (exit 1); exit 1; }; }
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
cat >conftest.$ac_ext <<_ACEOF
-#line 1204 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
int
@@ -1215,23 +1583,32 @@ _ACEOF
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files a.out a.exe"
# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compiler, and finding out an intuition
+# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-echo "$as_me:1220: checking for C compiler default output" >&5
+echo "$as_me:$LINENO: checking for C compiler default output" >&5
echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:1223: \"$ac_link_default\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
(eval $ac_link_default) 2>&5
ac_status=$?
- echo "$as_me:1226: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
- for ac_file in `ls a.exe conftest.exe a.* conftest conftest.* 2>/dev/null`; do
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.*; do
+ test -f "$ac_file" || continue
case $ac_file in
- *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
a.out ) # We found the default executable, but exeext='' is most
# certainly right.
break;;
*.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
export ac_cv_exeext
break;;
* ) break;;
@@ -1240,34 +1617,36 @@ done
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-{ { echo "$as_me:1243: error: C compiler cannot create executables" >&5
-echo "$as_me: error: C compiler cannot create executables" >&2;}
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+check \`config.log' for details." >&5
+echo "$as_me: error: C compiler cannot create executables
+check \`config.log' for details." >&2;}
{ (exit 77); exit 77; }; }
fi
ac_exeext=$ac_cv_exeext
-echo "$as_me:1249: result: $ac_file" >&5
+echo "$as_me:$LINENO: result: $ac_file" >&5
echo "${ECHO_T}$ac_file" >&6
# Check the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-echo "$as_me:1254: checking whether the C compiler works" >&5
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
# If not cross compiling, check that we can run a simple program.
if test "$cross_compiling" != yes; then
if { ac_try='./$ac_file'
- { (eval echo "$as_me:1260: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1263: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
cross_compiling=yes
else
- { { echo "$as_me:1270: error: cannot run C compiled programs.
+ { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
If you meant to cross compile, use \`--host'." >&5
echo "$as_me: error: cannot run C compiled programs.
If you meant to cross compile, use \`--host'." >&2;}
@@ -1275,32 +1654,33 @@ If you meant to cross compile, use \`--host'." >&2;}
fi
fi
fi
-echo "$as_me:1278: result: yes" >&5
+echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
rm -f a.out a.exe conftest$ac_cv_exeext
ac_clean_files=$ac_clean_files_save
# Check the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-echo "$as_me:1285: checking whether we are cross compiling" >&5
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:1287: result: $cross_compiling" >&5
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
echo "${ECHO_T}$cross_compiling" >&6
-echo "$as_me:1290: checking for executable suffix" >&5
-echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
-if { (eval echo "$as_me:1292: \"$ac_link\"") >&5
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:1295: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
# If both `conftest.exe' and `conftest' are `present' (well, observable)
# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
# work properly (i.e., refer to `conftest.exe'), while it won't with
# `rm'.
-for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
case $ac_file in
- *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
*.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
export ac_cv_exeext
break;;
@@ -1308,25 +1688,25 @@ for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
esac
done
else
- { { echo "$as_me:1311: error: cannot compute EXEEXT: cannot compile and link" >&5
-echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link" >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link" >&2;}
{ (exit 1); exit 1; }; }
fi
rm -f conftest$ac_cv_exeext
-echo "$as_me:1317: result: $ac_cv_exeext" >&5
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
echo "${ECHO_T}$ac_cv_exeext" >&6
rm -f conftest.$ac_ext
EXEEXT=$ac_cv_exeext
ac_exeext=$EXEEXT
-echo "$as_me:1323: checking for object suffix" >&5
-echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
if test "${ac_cv_objext+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 1329 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
int
@@ -1338,14 +1718,14 @@ main ()
}
_ACEOF
rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:1341: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1344: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; then
for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
*) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
break;;
esac
@@ -1353,24 +1733,24 @@ done
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-{ { echo "$as_me:1356: error: cannot compute OBJEXT: cannot compile" >&5
-echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile" >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile" >&2;}
{ (exit 1); exit 1; }; }
fi
rm -f conftest.$ac_cv_objext conftest.$ac_ext
fi
-echo "$as_me:1363: result: $ac_cv_objext" >&5
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
echo "${ECHO_T}$ac_cv_objext" >&6
OBJEXT=$ac_cv_objext
ac_objext=$OBJEXT
-echo "$as_me:1367: checking whether we are using the GNU C compiler" >&5
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
if test "${ac_cv_c_compiler_gnu+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 1373 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
int
@@ -1385,16 +1765,16 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1388: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1391: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1394: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1397: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_compiler_gnu=yes
else
@@ -1406,19 +1786,19 @@ rm -f conftest.$ac_objext conftest.$ac_ext
ac_cv_c_compiler_gnu=$ac_compiler_gnu
fi
-echo "$as_me:1409: result: $ac_cv_c_compiler_gnu" >&5
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
GCC=`test $ac_compiler_gnu = yes && echo yes`
ac_test_CFLAGS=${CFLAGS+set}
ac_save_CFLAGS=$CFLAGS
CFLAGS="-g"
-echo "$as_me:1415: checking whether $CC accepts -g" >&5
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
if test "${ac_cv_prog_cc_g+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 1421 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
int
@@ -1430,16 +1810,16 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1433: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1436: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1439: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1442: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_prog_cc_g=yes
else
@@ -1449,7 +1829,7 @@ ac_cv_prog_cc_g=no
fi
rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:1452: result: $ac_cv_prog_cc_g" >&5
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
if test "$ac_test_CFLAGS" = set; then
CFLAGS=$ac_save_CFLAGS
@@ -1466,6 +1846,97 @@ else
CFLAGS=
fi
fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
# Some people use a C++ compiler to compile C. Since we use `exit',
# in C++ we need to declare it. In case someone uses the same compiler
# for both compiling C and C++ we need to have the C++ compiler decide
@@ -1476,16 +1947,16 @@ cat >conftest.$ac_ext <<_ACEOF
#endif
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1479: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1482: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1485: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1488: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
for ac_declaration in \
''\
@@ -1497,7 +1968,7 @@ if { (eval echo "$as_me:1479: \"$ac_compile\"") >&5
'void exit (int);'
do
cat >conftest.$ac_ext <<_ACEOF
-#line 1500 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <stdlib.h>
$ac_declaration
@@ -1510,16 +1981,16 @@ exit (42);
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1513: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1516: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1519: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1522: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
:
else
@@ -1529,7 +2000,7 @@ continue
fi
rm -f conftest.$ac_objext conftest.$ac_ext
cat >conftest.$ac_ext <<_ACEOF
-#line 1532 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
$ac_declaration
int
@@ -1541,16 +2012,16 @@ exit (42);
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1544: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1547: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1550: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1553: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
break
else
@@ -1559,9 +2030,12 @@ cat conftest.$ac_ext >&5
fi
rm -f conftest.$ac_objext conftest.$ac_ext
done
-echo '#ifdef __cplusplus' >>confdefs.h
-echo $ac_declaration >>confdefs.h
-echo '#endif' >>confdefs.h
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
else
echo "$as_me: failed program was:" >&5
@@ -1580,11 +2054,11 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
if test -n "$ac_tool_prefix"; then
- for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl KCC RCC xlC_r xlC
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:1587: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_CXX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1592,25 +2066,28 @@ else
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-echo "$as_me:1602: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
CXX=$ac_cv_prog_CXX
if test -n "$CXX"; then
- echo "$as_me:1610: result: $CXX" >&5
+ echo "$as_me:$LINENO: result: $CXX" >&5
echo "${ECHO_T}$CXX" >&6
else
- echo "$as_me:1613: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -1619,11 +2096,11 @@ fi
fi
if test -z "$CXX"; then
ac_ct_CXX=$CXX
- for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl KCC RCC xlC_r xlC
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:1626: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1631,25 +2108,28 @@ else
if test -n "$ac_ct_CXX"; then
ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_ac_ct_CXX="$ac_prog"
-echo "$as_me:1641: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
if test -n "$ac_ct_CXX"; then
- echo "$as_me:1649: result: $ac_ct_CXX" >&5
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
echo "${ECHO_T}$ac_ct_CXX" >&6
else
- echo "$as_me:1652: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -1660,13 +2140,34 @@ test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
CXX=$ac_ct_CXX
fi
-echo "$as_me:1663: checking whether we are using the GNU C++ compiler" >&5
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 1669 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
int
@@ -1681,16 +2182,16 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1684: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1687: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1690: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1693: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_compiler_gnu=yes
else
@@ -1702,19 +2203,19 @@ rm -f conftest.$ac_objext conftest.$ac_ext
ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
fi
-echo "$as_me:1705: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
GXX=`test $ac_compiler_gnu = yes && echo yes`
ac_test_CXXFLAGS=${CXXFLAGS+set}
ac_save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="-g"
-echo "$as_me:1711: checking whether $CXX accepts -g" >&5
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
if test "${ac_cv_prog_cxx_g+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 1717 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
int
@@ -1726,16 +2227,16 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1729: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1732: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1735: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1738: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_prog_cxx_g=yes
else
@@ -1745,7 +2246,7 @@ ac_cv_prog_cxx_g=no
fi
rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:1748: result: $ac_cv_prog_cxx_g" >&5
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
if test "$ac_test_CXXFLAGS" = set; then
CXXFLAGS=$ac_save_CXXFLAGS
@@ -1772,7 +2273,7 @@ for ac_declaration in \
'void exit (int);'
do
cat >conftest.$ac_ext <<_ACEOF
-#line 1775 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <stdlib.h>
$ac_declaration
@@ -1785,16 +2286,16 @@ exit (42);
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1788: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1791: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1794: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1797: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
:
else
@@ -1804,7 +2305,7 @@ continue
fi
rm -f conftest.$ac_objext conftest.$ac_ext
cat >conftest.$ac_ext <<_ACEOF
-#line 1807 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
$ac_declaration
int
@@ -1816,16 +2317,16 @@ exit (42);
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1819: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:1822: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:1825: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1828: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
break
else
@@ -1834,9 +2335,12 @@ cat conftest.$ac_ext >&5
fi
rm -f conftest.$ac_objext conftest.$ac_ext
done
-echo '#ifdef __cplusplus' >>confdefs.h
-echo $ac_declaration >>confdefs.h
-echo '#endif' >>confdefs.h
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -1844,6 +2348,8 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -1851,50 +2357,51 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
if test "$cross_compiling" = no; then
- echo "$as_me:1854: checking that C++ compiler can compile simple program" >&5
+ echo "$as_me:$LINENO: checking that C++ compiler can compile simple program" >&5
echo $ECHO_N "checking that C++ compiler can compile simple program... $ECHO_C" >&6
fi
if test "$cross_compiling" = yes; then
:
else
cat >conftest.$ac_ext <<_ACEOF
-#line 1861 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
int main() { return 0; }
_ACEOF
rm -f conftest$ac_exeext
-if { (eval echo "$as_me:1866: \"$ac_link\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:1869: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:1871: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1874: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:1876: result: yes" >&5
+ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:1882: result: no" >&5
-echo "${ECHO_T}no" >&6;{ { echo "$as_me:1883: error: a working C++ compiler is required" >&5
+( exit $ac_status )
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6;{ { echo "$as_me:$LINENO: error: a working C++ compiler is required" >&5
echo "$as_me: error: a working C++ compiler is required" >&2;}
{ (exit 1); exit 1; }; }
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_ext
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
if test "$cross_compiling" = no; then
- echo "$as_me:1890: checking that C++ static constructors and destructors are called" >&5
+ echo "$as_me:$LINENO: checking that C++ static constructors and destructors are called" >&5
echo $ECHO_N "checking that C++ static constructors and destructors are called... $ECHO_C" >&6
fi
if test "$cross_compiling" = yes; then
:
else
cat >conftest.$ac_ext <<_ACEOF
-#line 1897 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
extern "C" {
@@ -1911,33 +2418,34 @@ int main() { return 1; }
_ACEOF
rm -f conftest$ac_exeext
-if { (eval echo "$as_me:1914: \"$ac_link\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:1917: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:1919: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1922: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:1924: result: yes" >&5
+ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:1930: result: no" >&5
-echo "${ECHO_T}no" >&6;{ { echo "$as_me:1931: error: a working C++ compiler is required" >&5
+( exit $ac_status )
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6;{ { echo "$as_me:$LINENO: error: a working C++ compiler is required" >&5
echo "$as_me: error: a working C++ compiler is required" >&2;}
{ (exit 1); exit 1; }; }
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_ext
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:1937: checking that header files support C++" >&5
+echo "$as_me:$LINENO: checking that header files support C++" >&5
echo $ECHO_N "checking that header files support C++... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
-#line 1940 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <stdio.h>
int
@@ -1949,24 +2457,24 @@ fopen(0, 0);
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:1952: \"$ac_link\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:1955: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:1958: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:1961: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:1963: result: yes" >&5
+ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:1968: result: no" >&5
-echo "${ECHO_T}no" >&6;{ { echo "$as_me:1969: error: header files do not support C++ (if you are using a version of gcc/g++ earlier than 2.5, you should install libg++)" >&5
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6;{ { echo "$as_me:$LINENO: error: header files do not support C++ (if you are using a version of gcc/g++ earlier than 2.5, you should install libg++)" >&5
echo "$as_me: error: header files do not support C++ (if you are using a version of gcc/g++ earlier than 2.5, you should install libg++)" >&2;}
{ (exit 1); exit 1; }; }
fi
@@ -1977,10 +2485,11 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:1980: checking whether character set is EBCDIC" >&5
+
+echo "$as_me:$LINENO: checking whether character set is EBCDIC" >&5
echo $ECHO_N "checking whether character set is EBCDIC... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
-#line 1983 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
int
@@ -1997,45 +2506,48 @@ make an error "Character set is not EBCDIC"
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2000: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:2003: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2006: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2009: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
groff_cv_ebcdic="yes"
TTYDEVDIRS="font/devcp1047"
- echo "$as_me:2013: result: yes" >&5
+ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
- cat >>confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define IS_EBCDIC_HOST 1
-EOF
+_ACEOF
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
groff_cv_ebcdic="no"
- TTYDEVDIRS="font/devascii font/devlatin1 font/devutf8"
- echo "$as_me:2024: result: no" >&5
+ TTYDEVDIRS="font/devascii font/devlatin1"
+ OTHERDEVDIRS="font/devlj4 font/devlbp"
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f conftest.$ac_objext conftest.$ac_ext
+
if test "$groff_cv_ebcdic" = "yes"; then
- echo "$as_me:2030: checking for OS/390 Unix" >&5
+ echo "$as_me:$LINENO: checking for OS/390 Unix" >&5
echo $ECHO_N "checking for OS/390 Unix... $ECHO_C" >&6
case `uname` in
OS/390)
CFLAGS="$CFLAGS -D_ALL_SOURCE"
- echo "$as_me:2035: result: yes" >&5
+ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6 ;;
*)
- echo "$as_me:2038: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6 ;;
esac
fi
@@ -2044,7 +2556,7 @@ if test -z "$PSPRINT"; then
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:2047: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_LPR+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2052,25 +2564,28 @@ else
if test -n "$LPR"; then
ac_cv_prog_LPR="$LPR" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_LPR="$ac_prog"
-echo "$as_me:2062: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LPR="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
LPR=$ac_cv_prog_LPR
if test -n "$LPR"; then
- echo "$as_me:2070: result: $LPR" >&5
+ echo "$as_me:$LINENO: result: $LPR" >&5
echo "${ECHO_T}$LPR" >&6
else
- echo "$as_me:2073: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -2081,7 +2596,7 @@ done
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:2084: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_LP+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2089,25 +2604,28 @@ else
if test -n "$LP"; then
ac_cv_prog_LP="$LP" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_LP="$ac_prog"
-echo "$as_me:2099: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LP="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
LP=$ac_cv_prog_LP
if test -n "$LP"; then
- echo "$as_me:2107: result: $LP" >&5
+ echo "$as_me:$LINENO: result: $LP" >&5
echo "${ECHO_T}$LP" >&6
else
- echo "$as_me:2110: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -2122,7 +2640,7 @@ done
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:2125: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_LPQ+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2130,25 +2648,28 @@ else
if test -n "$LPQ"; then
ac_cv_prog_LPQ="$LPQ" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_LPQ="$ac_prog"
-echo "$as_me:2140: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LPQ="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
LPQ=$ac_cv_prog_LPQ
if test -n "$LPQ"; then
- echo "$as_me:2148: result: $LPQ" >&5
+ echo "$as_me:$LINENO: result: $LPQ" >&5
echo "${ECHO_T}$LPQ" >&6
else
- echo "$as_me:2151: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -2164,12 +2685,12 @@ done
fi
fi
-echo "$as_me:2167: checking for command to use for printing PostScript files" >&5
+echo "$as_me:$LINENO: checking for command to use for printing PostScript files" >&5
echo $ECHO_N "checking for command to use for printing PostScript files... $ECHO_C" >&6
-echo "$as_me:2169: result: $PSPRINT" >&5
+echo "$as_me:$LINENO: result: $PSPRINT" >&5
echo "${ECHO_T}$PSPRINT" >&6
# Figure out DVIPRINT from PSPRINT.
-echo "$as_me:2172: checking for command to use for printing dvi files" >&5
+echo "$as_me:$LINENO: checking for command to use for printing dvi files" >&5
echo $ECHO_N "checking for command to use for printing dvi files... $ECHO_C" >&6
if test -n "$PSPRINT" && test -z "$DVIPRINT"; then
if test "X$PSPRINT" = "Xlpr"; then
@@ -2179,11 +2700,11 @@ if test -n "$PSPRINT" && test -z "$DVIPRINT"; then
fi
fi
-echo "$as_me:2182: result: $DVIPRINT" >&5
+echo "$as_me:$LINENO: result: $DVIPRINT" >&5
echo "${ECHO_T}$DVIPRINT" >&6
# Extract the first word of "perl", so it can be a program name with args.
set dummy perl; ac_word=$2
-echo "$as_me:2186: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_path_PERLPATH+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2193,16 +2714,18 @@ else
ac_cv_path_PERLPATH="$PERLPATH" # Let the user override the test with a path.
;;
*)
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- if $as_executable_p "$ac_dir/$ac_word"; then
- ac_cv_path_PERLPATH="$ac_dir/$ac_word"
- echo "$as_me:2203: found $ac_dir/$ac_word" >&5
- break
-fi
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_path_PERLPATH="$as_dir/$ac_word$ac_exec_ext"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
test -z "$ac_cv_path_PERLPATH" && ac_cv_path_PERLPATH="/usr/bin/perl"
@@ -2212,10 +2735,10 @@ fi
PERLPATH=$ac_cv_path_PERLPATH
if test -n "$PERLPATH"; then
- echo "$as_me:2215: result: $PERLPATH" >&5
+ echo "$as_me:$LINENO: result: $PERLPATH" >&5
echo "${ECHO_T}$PERLPATH" >&6
else
- echo "$as_me:2218: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -2223,7 +2746,7 @@ for ac_prog in byacc 'bison -y'
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
-echo "$as_me:2226: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_YACC+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2231,25 +2754,28 @@ else
if test -n "$YACC"; then
ac_cv_prog_YACC="$YACC" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_YACC="$ac_prog"
-echo "$as_me:2241: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_YACC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
YACC=$ac_cv_prog_YACC
if test -n "$YACC"; then
- echo "$as_me:2249: result: $YACC" >&5
+ echo "$as_me:$LINENO: result: $YACC" >&5
echo "${ECHO_T}$YACC" >&6
else
- echo "$as_me:2252: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -2260,7 +2786,7 @@ test -n "$YACC" || YACC="yacc"
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-echo "$as_me:2263: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_RANLIB+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2268,25 +2794,28 @@ else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-echo "$as_me:2278: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
fi
fi
RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- echo "$as_me:2286: result: $RANLIB" >&5
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
echo "${ECHO_T}$RANLIB" >&6
else
- echo "$as_me:2289: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -2295,7 +2824,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
ac_ct_RANLIB=$RANLIB
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
-echo "$as_me:2298: checking for $ac_word" >&5
+echo "$as_me:$LINENO: checking for $ac_word" >&5
echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2303,15 +2832,18 @@ else
if test -n "$ac_ct_RANLIB"; then
ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH"
-for ac_dir in $ac_dummy; do
- IFS=$ac_save_IFS
- test -z "$ac_dir" && ac_dir=.
- $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_ac_ct_RANLIB="ranlib"
-echo "$as_me:2313: found $ac_dir/$ac_word" >&5
-break
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
done
test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
@@ -2319,10 +2851,10 @@ fi
fi
ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
if test -n "$ac_ct_RANLIB"; then
- echo "$as_me:2322: result: $ac_ct_RANLIB" >&5
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
echo "${ECHO_T}$ac_ct_RANLIB" >&6
else
- echo "$as_me:2325: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
@@ -2348,7 +2880,7 @@ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
fi
done
if test -z "$ac_aux_dir"; then
- { { echo "$as_me:2351: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
{ (exit 1); exit 1; }; }
fi
@@ -2358,6 +2890,47 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
ac_dir=`cd $ac_aux_dir; pwd`
ac_install_sh="$ac_dir/install-sh -c"
+for ac_prog in install-info
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_INSTALL_INFO+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$INSTALL_INFO"; then
+ ac_cv_prog_INSTALL_INFO="$INSTALL_INFO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_INSTALL_INFO="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+INSTALL_INFO=$ac_cv_prog_INSTALL_INFO
+if test -n "$INSTALL_INFO"; then
+ echo "$as_me:$LINENO: result: $INSTALL_INFO" >&5
+echo "${ECHO_T}$INSTALL_INFO" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$INSTALL_INFO" && break
+done
+test -n "$INSTALL_INFO" || INSTALL_INFO=":"
+
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
@@ -2370,43 +2943,48 @@ ac_install_sh="$ac_dir/install-sh -c"
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:2373: checking for a BSD compatible install" >&5
-echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
if test -z "$INSTALL"; then
if test "${ac_cv_path_install+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_save_IFS=$IFS; IFS=$ac_path_separator
- for ac_dir in $PATH; do
- IFS=$ac_save_IFS
- # Account for people who put trailing slashes in PATH elements.
- case $ac_dir/ in
- / | ./ | .// | /cC/* \
- | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \
- | /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- if $as_executable_p "$ac_dir/$ac_prog"; then
- if test $ac_prog = install &&
- grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- ac_cv_path_install="$ac_dir/$ac_prog -c"
- break 2
- fi
- fi
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
done
- ;;
- esac
- done
+ done
+ ;;
+esac
+done
+
fi
if test "${ac_cv_path_install+set}" = set; then
@@ -2419,7 +2997,7 @@ fi
INSTALL=$ac_install_sh
fi
fi
-echo "$as_me:2422: result: $INSTALL" >&5
+echo "$as_me:$LINENO: result: $INSTALL" >&5
echo "${ECHO_T}$INSTALL" >&6
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
@@ -2430,18 +3008,18 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-echo "$as_me:2433: checking whether ln -s works" >&5
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
LN_S=$as_ln_s
if test "$LN_S" = "ln -s"; then
- echo "$as_me:2437: result: yes" >&5
+ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
else
- echo "$as_me:2440: result: no, using $LN_S" >&5
+ echo "$as_me:$LINENO: result: no, using $LN_S" >&5
echo "${ECHO_T}no, using $LN_S" >&6
fi
-echo "$as_me:2444: checking for csh hash hack" >&5
+echo "$as_me:$LINENO: checking for csh hash hack" >&5
echo $ECHO_N "checking for csh hash hack... $ECHO_C" >&6
cat <<EOF >conftest.sh
#!/bin/sh
@@ -2451,10 +3029,10 @@ exit 1
EOF
chmod +x conftest.sh
if echo ./conftest.sh | (csh >/dev/null 2>&1) >/dev/null 2>&1; then
- echo "$as_me:2454: result: yes" >&5
+ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6; SH_SCRIPT_SED_CMD='1s/.*/:/'
else
- echo "$as_me:2457: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6; SH_SCRIPT_SED_CMD='1s/a/a/'
fi
rm -f conftest.sh
@@ -2464,7 +3042,7 @@ ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:2467: checking how to run the C preprocessor" >&5
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
@@ -2477,7 +3055,6 @@ else
# Double quotes because CPP needs to be expanded
for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
do
- # break 2 since there is a loop in there.
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
do
@@ -2486,18 +3063,18 @@ do
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
cat >conftest.$ac_ext <<_ACEOF
-#line 2489 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <assert.h>
Syntax error
_ACEOF
-if { (eval echo "$as_me:2494: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
(eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:2500: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2520,17 +3097,17 @@ rm -f conftest.err conftest.$ac_ext
# OK, works on sane cases. Now check whether non-existent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
-#line 2523 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <ac_nonexistent.h>
_ACEOF
-if { (eval echo "$as_me:2527: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
(eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:2533: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2556,7 +3133,7 @@ done
# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
rm -f conftest.err conftest.$ac_ext
if $ac_preproc_ok; then
- break 2
+ break
fi
done
@@ -2567,7 +3144,7 @@ fi
else
ac_cv_prog_CPP=$CPP
fi
-echo "$as_me:2570: result: $CPP" >&5
+echo "$as_me:$LINENO: result: $CPP" >&5
echo "${ECHO_T}$CPP" >&6
ac_preproc_ok=false
for ac_c_preproc_warn_flag in '' yes
@@ -2577,18 +3154,18 @@ do
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp. "Syntax error" is here to catch this case.
cat >conftest.$ac_ext <<_ACEOF
-#line 2580 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <assert.h>
Syntax error
_ACEOF
-if { (eval echo "$as_me:2585: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
(eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:2591: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2611,17 +3188,17 @@ rm -f conftest.err conftest.$ac_ext
# OK, works on sane cases. Now check whether non-existent headers
# can be detected and how.
cat >conftest.$ac_ext <<_ACEOF
-#line 2614 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <ac_nonexistent.h>
_ACEOF
-if { (eval echo "$as_me:2618: \"$ac_cpp conftest.$ac_ext\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
(eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:2624: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2649,7 +3226,7 @@ rm -f conftest.err conftest.$ac_ext
if $ac_preproc_ok; then
:
else
- { { echo "$as_me:2652: error: C preprocessor \"$CPP\" fails sanity check" >&5
+ { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check" >&5
echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
{ (exit 1); exit 1; }; }
fi
@@ -2660,27 +3237,288 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-for ac_header in stdlib.h unistd.h dirent.h limits.h sys/dir.h \
- string.h strings.h math.h
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
do
-ac_ac_Header=`echo "ac_cv_header_$ac_header" | $ac_tr_sh`
-echo "$as_me:2667: checking for $ac_header" >&5
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$ac_ac_Header+set}\" = set"; then
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 2673 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
+$ac_includes_default
+
#include <$ac_header>
_ACEOF
-if { (eval echo "$as_me:2677: \"$ac_cpp conftest.$ac_ext\"") >&5
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in stdlib.h unistd.h dirent.h limits.h sys/dir.h \
+ string.h strings.h math.h stdint.h sys/time.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
(eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:2683: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
@@ -2691,39 +3529,67 @@ else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
- eval "$ac_ac_Header=yes"
+ ac_header_preproc=yes
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
- eval "$ac_ac_Header=no"
+ ac_header_preproc=no
fi
rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+ yes:no )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
+ no:yes )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=$ac_header_preproc"
fi
-echo "$as_me:2702: result: `eval echo '${'$ac_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$ac_ac_Header'}'`" >&6
-if test `eval echo '${'$ac_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $ac_tr_cpp` 1
-EOF
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
done
-echo "$as_me:2712: checking for ISC 3.x or 4.x" >&5
+echo "$as_me:$LINENO: checking for ISC 3.x or 4.x" >&5
echo $ECHO_N "checking for ISC 3.x or 4.x... $ECHO_C" >&6
if grep '[34]\.' /usr/options/cb.name >/dev/null 2>&1
then
- echo "$as_me:2716: result: yes" >&5
+ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
- cat >>confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define _SYSV3 1
-EOF
+_ACEOF
else
- echo "$as_me:2723: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
-echo "$as_me:2726: checking whether -D_POSIX_SOURCE is necessary" >&5
+echo "$as_me:$LINENO: checking whether -D_POSIX_SOURCE is necessary" >&5
echo $ECHO_N "checking whether -D_POSIX_SOURCE is necessary... $ECHO_C" >&6
ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2732,7 +3598,7 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
cat >conftest.$ac_ext <<_ACEOF
-#line 2735 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <stdio.h>
extern "C" { void fileno(int); }
@@ -2745,26 +3611,27 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2748: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:2751: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2754: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2757: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:2759: result: yes" >&5
-echo "${ECHO_T}yes" >&6;cat >>confdefs.h <<\EOF
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;
+cat >>confdefs.h <<\_ACEOF
#define _POSIX_SOURCE 1
-EOF
+_ACEOF
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:2767: result: no" >&5
+echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f conftest.$ac_objext conftest.$ac_ext
@@ -2780,10 +3647,10 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-echo "$as_me:2783: checking for return type of srand" >&5
+echo "$as_me:$LINENO: checking for return type of srand" >&5
echo $ECHO_N "checking for return type of srand... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
-#line 2786 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <stdlib.h>
extern "C" { void srand(unsigned int); }
@@ -2796,26 +3663,27 @@ main ()
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2799: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:2802: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2805: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2808: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:2810: result: void" >&5
-echo "${ECHO_T}void" >&6;cat >>confdefs.h <<\EOF
+ echo "$as_me:$LINENO: result: void" >&5
+echo "${ECHO_T}void" >&6;
+cat >>confdefs.h <<\_ACEOF
#define RET_TYPE_SRAND_IS_VOID 1
-EOF
+_ACEOF
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:2818: result: int" >&5
+echo "$as_me:$LINENO: result: int" >&5
echo "${ECHO_T}int" >&6
fi
rm -f conftest.$ac_objext conftest.$ac_ext
@@ -2825,7 +3693,87 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:2828: checking whether hypot must be declared" >&5
+echo "$as_me:$LINENO: checking whether gettimeofday must be declared" >&5
+echo $ECHO_N "checking whether gettimeofday must be declared... $ECHO_C" >&6
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+if test "${groff_cv_decl_needed_gettimeofday+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+int
+main ()
+{
+#ifndef gettimeofday
+ char *p = (char *) gettimeofday;
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ groff_cv_decl_needed_gettimeofday=no
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+groff_cv_decl_needed_gettimeofday=yes
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+
+echo "$as_me:$LINENO: result: $groff_cv_decl_needed_gettimeofday" >&5
+echo "${ECHO_T}$groff_cv_decl_needed_gettimeofday" >&6
+if test $groff_cv_decl_needed_gettimeofday = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define NEED_DECLARATION_GETTIMEOFDAY 1
+_ACEOF
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+echo "$as_me:$LINENO: checking whether hypot must be declared" >&5
echo $ECHO_N "checking whether hypot must be declared... $ECHO_C" >&6
ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2837,7 +3785,7 @@ if test "${groff_cv_decl_needed_hypot+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 2840 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2850,6 +3798,9 @@ else
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -2859,22 +3810,24 @@ else
int
main ()
{
-char *(*pfn) = (char *(*)) hypot
+#ifndef hypot
+ char *p = (char *) hypot;
+#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2868: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:2871: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2874: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2877: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
groff_cv_decl_needed_hypot=no
else
@@ -2885,12 +3838,13 @@ fi
rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:2888: result: $groff_cv_decl_needed_hypot" >&5
+echo "$as_me:$LINENO: result: $groff_cv_decl_needed_hypot" >&5
echo "${ECHO_T}$groff_cv_decl_needed_hypot" >&6
if test $groff_cv_decl_needed_hypot = yes; then
- cat >>confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define NEED_DECLARATION_HYPOT 1
-EOF
+_ACEOF
fi
ac_ext=c
@@ -2899,7 +3853,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:2902: checking whether popen must be declared" >&5
+echo "$as_me:$LINENO: checking whether popen must be declared" >&5
echo $ECHO_N "checking whether popen must be declared... $ECHO_C" >&6
ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2911,7 +3865,7 @@ if test "${groff_cv_decl_needed_popen+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 2914 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2924,6 +3878,9 @@ else
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -2933,22 +3890,24 @@ else
int
main ()
{
-char *(*pfn) = (char *(*)) popen
+#ifndef popen
+ char *p = (char *) popen;
+#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2942: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:2945: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:2948: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:2951: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
groff_cv_decl_needed_popen=no
else
@@ -2959,12 +3918,13 @@ fi
rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:2962: result: $groff_cv_decl_needed_popen" >&5
+echo "$as_me:$LINENO: result: $groff_cv_decl_needed_popen" >&5
echo "${ECHO_T}$groff_cv_decl_needed_popen" >&6
if test $groff_cv_decl_needed_popen = yes; then
- cat >>confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define NEED_DECLARATION_POPEN 1
-EOF
+_ACEOF
fi
ac_ext=c
@@ -2973,7 +3933,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:2976: checking whether pclose must be declared" >&5
+echo "$as_me:$LINENO: checking whether pclose must be declared" >&5
echo $ECHO_N "checking whether pclose must be declared... $ECHO_C" >&6
ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
@@ -2985,7 +3945,7 @@ if test "${groff_cv_decl_needed_pclose+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 2988 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2998,6 +3958,9 @@ else
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -3007,22 +3970,24 @@ else
int
main ()
{
-char *(*pfn) = (char *(*)) pclose
+#ifndef pclose
+ char *p = (char *) pclose;
+#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3016: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3019: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3022: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3025: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
groff_cv_decl_needed_pclose=no
else
@@ -3033,12 +3998,13 @@ fi
rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:3036: result: $groff_cv_decl_needed_pclose" >&5
+echo "$as_me:$LINENO: result: $groff_cv_decl_needed_pclose" >&5
echo "${ECHO_T}$groff_cv_decl_needed_pclose" >&6
if test $groff_cv_decl_needed_pclose = yes; then
- cat >>confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define NEED_DECLARATION_PCLOSE 1
-EOF
+_ACEOF
fi
ac_ext=c
@@ -3047,7 +4013,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:3050: checking whether putenv must be declared" >&5
+echo "$as_me:$LINENO: checking whether putenv must be declared" >&5
echo $ECHO_N "checking whether putenv must be declared... $ECHO_C" >&6
ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
@@ -3059,7 +4025,7 @@ if test "${groff_cv_decl_needed_putenv+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 3062 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -3072,6 +4038,9 @@ else
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -3081,22 +4050,24 @@ else
int
main ()
{
-char *(*pfn) = (char *(*)) putenv
+#ifndef putenv
+ char *p = (char *) putenv;
+#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3090: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3093: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3096: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3099: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
groff_cv_decl_needed_putenv=no
else
@@ -3107,12 +4078,13 @@ fi
rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:3110: result: $groff_cv_decl_needed_putenv" >&5
+echo "$as_me:$LINENO: result: $groff_cv_decl_needed_putenv" >&5
echo "${ECHO_T}$groff_cv_decl_needed_putenv" >&6
if test $groff_cv_decl_needed_putenv = yes; then
- cat >>confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define NEED_DECLARATION_PUTENV 1
-EOF
+_ACEOF
fi
ac_ext=c
@@ -3121,7 +4093,87 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:3124: checking whether strncasecmp must be declared" >&5
+echo "$as_me:$LINENO: checking whether strcasecmp must be declared" >&5
+echo $ECHO_N "checking whether strcasecmp must be declared... $ECHO_C" >&6
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+if test "${groff_cv_decl_needed_strcasecmp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#include <stdio.h>
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+#include <strings.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_MATH_H
+#include <math.h>
+#endif
+int
+main ()
+{
+#ifndef strcasecmp
+ char *p = (char *) strcasecmp;
+#endif
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ groff_cv_decl_needed_strcasecmp=no
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+groff_cv_decl_needed_strcasecmp=yes
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+
+echo "$as_me:$LINENO: result: $groff_cv_decl_needed_strcasecmp" >&5
+echo "${ECHO_T}$groff_cv_decl_needed_strcasecmp" >&6
+if test $groff_cv_decl_needed_strcasecmp = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define NEED_DECLARATION_STRCASECMP 1
+_ACEOF
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+echo "$as_me:$LINENO: checking whether strncasecmp must be declared" >&5
echo $ECHO_N "checking whether strncasecmp must be declared... $ECHO_C" >&6
ac_ext=cc
ac_cpp='$CXXCPP $CPPFLAGS'
@@ -3133,7 +4185,7 @@ if test "${groff_cv_decl_needed_strncasecmp+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 3136 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -3146,6 +4198,9 @@ else
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -3155,22 +4210,24 @@ else
int
main ()
{
-char *(*pfn) = (char *(*)) strncasecmp
+#ifndef strncasecmp
+ char *p = (char *) strncasecmp;
+#endif
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3164: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3167: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3170: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3173: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
groff_cv_decl_needed_strncasecmp=no
else
@@ -3181,12 +4238,13 @@ fi
rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:3184: result: $groff_cv_decl_needed_strncasecmp" >&5
+echo "$as_me:$LINENO: result: $groff_cv_decl_needed_strncasecmp" >&5
echo "${ECHO_T}$groff_cv_decl_needed_strncasecmp" >&6
if test $groff_cv_decl_needed_strncasecmp = yes; then
- cat >>confdefs.h <<\EOF
+
+cat >>confdefs.h <<\_ACEOF
#define NEED_DECLARATION_STRNCASECMP 1
-EOF
+_ACEOF
fi
ac_ext=c
@@ -3201,10 +4259,10 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-echo "$as_me:3204: checking for sys_nerr in <errno.h> or <stdio.h>" >&5
+echo "$as_me:$LINENO: checking for sys_nerr in <errno.h> or <stdio.h>" >&5
echo $ECHO_N "checking for sys_nerr in <errno.h> or <stdio.h>... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
-#line 3207 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <errno.h>
#include <stdio.h>
@@ -3217,26 +4275,27 @@ int k; k = sys_nerr;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3220: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3223: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3226: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3229: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:3231: result: yes" >&5
-echo "${ECHO_T}yes" >&6;cat >>confdefs.h <<\EOF
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;
+cat >>confdefs.h <<\_ACEOF
#define HAVE_SYS_NERR 1
-EOF
+_ACEOF
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:3239: result: no" >&5
+echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f conftest.$ac_objext conftest.$ac_ext
@@ -3246,10 +4305,10 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:3249: checking for sys_errlist in <errno.h> or <stdio.h>" >&5
+echo "$as_me:$LINENO: checking for sys_errlist in <errno.h> or <stdio.h>" >&5
echo $ECHO_N "checking for sys_errlist in <errno.h> or <stdio.h>... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
-#line 3252 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <errno.h>
#include <stdio.h>
@@ -3262,26 +4321,27 @@ int k; k = (int)sys_errlist[0];
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3265: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3268: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3271: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3274: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:3276: result: yes" >&5
-echo "${ECHO_T}yes" >&6;cat >>confdefs.h <<\EOF
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;
+cat >>confdefs.h <<\_ACEOF
#define HAVE_SYS_ERRLIST 1
-EOF
+_ACEOF
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:3284: result: no" >&5
+echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f conftest.$ac_objext conftest.$ac_ext
@@ -3291,10 +4351,10 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-echo "$as_me:3294: checking C++ <osfcn.h>" >&5
+echo "$as_me:$LINENO: checking C++ <osfcn.h>" >&5
echo $ECHO_N "checking C++ <osfcn.h>... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
-#line 3297 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <osfcn.h>
int
@@ -3306,26 +4366,27 @@ read(0, 0, 0); open(0, 0);
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3309: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3312: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3315: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3318: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:3320: result: yes" >&5
-echo "${ECHO_T}yes" >&6;cat >>confdefs.h <<\EOF
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;
+cat >>confdefs.h <<\_ACEOF
#define HAVE_CC_OSFCN_H 1
-EOF
+_ACEOF
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:3328: result: no" >&5
+echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f conftest.$ac_objext conftest.$ac_ext
@@ -3341,10 +4402,10 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-echo "$as_me:3344: checking C++ <limits.h>" >&5
+echo "$as_me:$LINENO: checking C++ <limits.h>" >&5
echo $ECHO_N "checking C++ <limits.h>... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
-#line 3347 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <limits.h>
int
@@ -3356,26 +4417,27 @@ int x = INT_MIN; int y = INT_MAX; int z = UCHAR_MAX;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3359: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3362: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3365: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3368: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:3370: result: yes" >&5
-echo "${ECHO_T}yes" >&6;cat >>confdefs.h <<\EOF
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;
+cat >>confdefs.h <<\_ACEOF
#define HAVE_CC_LIMITS_H 1
-EOF
+_ACEOF
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:3378: result: no" >&5
+echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f conftest.$ac_objext conftest.$ac_ext
@@ -3391,10 +4453,118 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-echo "$as_me:3394: checking for declaration of time_t" >&5
+echo "$as_me:$LINENO: checking for inttypes.h" >&5
+echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <inttypes.h>
+int
+main ()
+{
+uintmax_t i = (uintmax_t)-1;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ groff_cv_header_inttypes_h=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+groff_cv_header_inttypes_h=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $groff_cv_header_inttypes_h" >&5
+echo "${ECHO_T}$groff_cv_header_inttypes_h" >&6
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+echo "$as_me:$LINENO: checking for unsigned long long" >&5
+echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+unsigned long long ull = 1; int i = 63;
+int
+main ()
+{
+unsigned long long ullmax = (unsigned long long)-1;
+return ull << i | ull >> i | ullmax / ull | ullmax % ull;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ groff_cv_type_unsigned_long_long=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+groff_cv_type_unsigned_long_long=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $groff_cv_type_unsigned_long_long" >&5
+echo "${ECHO_T}$groff_cv_type_unsigned_long_long" >&6
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+if test $groff_cv_header_inttypes_h = no; then
+
+ test $groff_cv_type_unsigned_long_long = yes \
+ && ac_type='unsigned long long' \
+ || ac_type='unsigned long'
+
+cat >>confdefs.h <<_ACEOF
+#define uintmax_t $ac_type
+_ACEOF
+
+fi
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+echo "$as_me:$LINENO: checking for declaration of time_t" >&5
echo $ECHO_N "checking for declaration of time_t... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
-#line 3397 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <time.h>
int
@@ -3406,26 +4576,27 @@ time_t t = time(0); struct tm *p = localtime(&t);
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3409: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3412: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3415: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3418: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:3420: result: yes" >&5
+ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:3425: result: no" >&5
-echo "${ECHO_T}no" >&6;cat >>confdefs.h <<\EOF
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6;
+cat >>confdefs.h <<\_ACEOF
#define LONG_FOR_TIME_T 1
-EOF
+_ACEOF
fi
rm -f conftest.$ac_objext conftest.$ac_ext
@@ -3435,13 +4606,13 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:3438: checking return type of signal handlers" >&5
+echo "$as_me:$LINENO: checking return type of signal handlers" >&5
echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
if test "${ac_cv_type_signal+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 3444 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
@@ -3463,16 +4634,16 @@ int i;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3466: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3469: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3472: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3475: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_type_signal=void
else
@@ -3482,17 +4653,18 @@ ac_cv_type_signal=int
fi
rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:3485: result: $ac_cv_type_signal" >&5
+echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
echo "${ECHO_T}$ac_cv_type_signal" >&6
-cat >>confdefs.h <<EOF
+cat >>confdefs.h <<_ACEOF
#define RETSIGTYPE $ac_cv_type_signal
-EOF
+_ACEOF
+
-echo "$as_me:3492: checking struct exception" >&5
+echo "$as_me:$LINENO: checking struct exception" >&5
echo $ECHO_N "checking struct exception... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
-#line 3495 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <math.h>
int
@@ -3504,30 +4676,31 @@ struct exception e;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:3507: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:3510: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:3513: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3516: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:3518: result: yes" >&5
-echo "${ECHO_T}yes" >&6;cat >>confdefs.h <<\EOF
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;
+cat >>confdefs.h <<\_ACEOF
#define HAVE_STRUCT_EXCEPTION 1
-EOF
+_ACEOF
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:3526: result: no" >&5
+echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:3530: checking for sin in -lm" >&5
+echo "$as_me:$LINENO: checking for sin in -lm" >&5
echo $ECHO_N "checking for sin in -lm... $ECHO_C" >&6
if test "${ac_cv_lib_m_sin+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3535,7 +4708,7 @@ else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lm $LIBS"
cat >conftest.$ac_ext <<_ACEOF
-#line 3538 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
@@ -3554,16 +4727,16 @@ sin ();
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:3557: \"$ac_link\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:3560: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:3563: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3566: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_lib_m_sin=yes
else
@@ -3574,32 +4747,73 @@ fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
-echo "$as_me:3577: result: $ac_cv_lib_m_sin" >&5
+echo "$as_me:$LINENO: result: $ac_cv_lib_m_sin" >&5
echo "${ECHO_T}$ac_cv_lib_m_sin" >&6
if test $ac_cv_lib_m_sin = yes; then
LIBM=-lm
fi
+
+
+
for ac_header in stdlib.h unistd.h
do
-ac_ac_Header=`echo "ac_cv_header_$ac_header" | $ac_tr_sh`
-echo "$as_me:3586: checking for $ac_header" >&5
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$ac_ac_Header+set}\" = set"; then
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
else
- cat >conftest.$ac_ext <<_ACEOF
-#line 3592 "configure"
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
#include "confdefs.h"
+$ac_includes_default
#include <$ac_header>
_ACEOF
-if { (eval echo "$as_me:3596: \"$ac_cpp conftest.$ac_ext\"") >&5
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_header_compiler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
(eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
ac_status=$?
- egrep -v '^ *\+' conftest.er1 >conftest.err
+ grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
- echo "$as_me:3602: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } >/dev/null; then
if test -s conftest.err; then
ac_cpp_err=$ac_c_preproc_warn_flag
@@ -3610,34 +4824,62 @@ else
ac_cpp_err=yes
fi
if test -z "$ac_cpp_err"; then
- eval "$ac_ac_Header=yes"
+ ac_header_preproc=yes
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
- eval "$ac_ac_Header=no"
+ ac_header_preproc=no
fi
rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc in
+ yes:no )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
+ no:yes )
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;};;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ eval "$as_ac_Header=$ac_header_preproc"
fi
-echo "$as_me:3621: result: `eval echo '${'$ac_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$ac_ac_Header'}'`" >&6
-if test `eval echo '${'$ac_ac_Header'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $ac_tr_cpp` 1
-EOF
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
fi
+
done
+
for ac_func in getpagesize
do
-ac_ac_var=`echo "ac_cv_func_$ac_func" | $ac_tr_sh`
-echo "$as_me:3634: checking for $ac_func" >&5
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$ac_ac_var+set}\" = set"; then
+if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 3640 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func (); below. */
@@ -3668,36 +4910,36 @@ f = $ac_func;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:3671: \"$ac_link\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:3674: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:3677: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3680: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$ac_ac_var=yes"
+ eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-eval "$ac_ac_var=no"
+eval "$as_ac_var=no"
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:3690: result: `eval echo '${'$ac_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$ac_ac_var'}'`" >&6
-if test `eval echo '${'$ac_ac_var'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_func" | $ac_tr_cpp` 1
-EOF
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
fi
done
-echo "$as_me:3700: checking for working mmap" >&5
+echo "$as_me:$LINENO: checking for working mmap" >&5
echo $ECHO_N "checking for working mmap... $ECHO_C" >&6
if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3706,8 +4948,12 @@ else
ac_cv_func_mmap_fixed_mapped=no
else
cat >conftest.$ac_ext <<_ACEOF
-#line 3709 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
+$ac_includes_default
+/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
/* Thanks to Mike Haertel and Jim Avera for this test.
Here is a matrix of mmap possibilities:
mmap private not fixed
@@ -3723,25 +4969,19 @@ else
VM page cache was not coherent with the file system buffer cache
like early versions of FreeBSD and possibly contemporary NetBSD.)
For shared mappings, we should conversely verify that changes get
- propogated back to all the places they're supposed to be.
+ propagated back to all the places they're supposed to be.
Grep wants private fixed already mapped.
The main things grep needs to know about mmap are:
* does it exist and is it safe to write into the mmap'd area
* how to use it (BSD variants) */
-#include <sys/types.h>
+
#include <fcntl.h>
#include <sys/mman.h>
-#if STDC_HEADERS || HAVE_STDLIB_H
-# include <stdlib.h>
-#else
+#if !STDC_HEADERS && !HAVE_STDLIB_H
char *malloc ();
#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <sys/stat.h>
/* This mess was copied from the GNU getpagesize.h. */
#if !HAVE_GETPAGESIZE
@@ -3838,33 +5078,34 @@ main ()
}
_ACEOF
rm -f conftest$ac_exeext
-if { (eval echo "$as_me:3841: \"$ac_link\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:3844: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:3846: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3849: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_func_mmap_fixed_mapped=yes
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
+( exit $ac_status )
ac_cv_func_mmap_fixed_mapped=no
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_ext
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
fi
-echo "$as_me:3861: result: $ac_cv_func_mmap_fixed_mapped" >&5
+echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6
if test $ac_cv_func_mmap_fixed_mapped = yes; then
-cat >>confdefs.h <<\EOF
+cat >>confdefs.h <<\_ACEOF
#define HAVE_MMAP 1
-EOF
+_ACEOF
fi
rm -f conftest.mmap
@@ -3872,16 +5113,21 @@ rm -f conftest.mmap
saved_libs="$LIBS"
LIBS="$LIBS -lc $LIBM"
-for ac_func in fmod strtol getcwd strerror putenv
+
+
+
+
+
+for ac_func in fmod getcwd putenv snprintf strerror strtol
do
-ac_ac_var=`echo "ac_cv_func_$ac_func" | $ac_tr_sh`
-echo "$as_me:3878: checking for $ac_func" >&5
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$ac_ac_var+set}\" = set"; then
+if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 3884 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func (); below. */
@@ -3912,49 +5158,55 @@ f = $ac_func;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:3915: \"$ac_link\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:3918: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:3921: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3924: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$ac_ac_var=yes"
+ eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-eval "$ac_ac_var=no"
+eval "$as_ac_var=no"
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:3934: result: `eval echo '${'$ac_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$ac_ac_var'}'`" >&6
-if test `eval echo '${'$ac_ac_var'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_func" | $ac_tr_cpp` 1
-EOF
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
else
LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
fi
done
+
LIBS="$saved_libs"
-for ac_func in rename strcasecmp strncasecmp strsep strdup
+
+
+
+
+
+for ac_func in gettimeofday isatty rename strcasecmp strncasecmp strsep
do
-ac_ac_var=`echo "ac_cv_func_$ac_func" | $ac_tr_sh`
-echo "$as_me:3951: checking for $ac_func" >&5
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$ac_ac_var+set}\" = set"; then
+if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 3957 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func (); below. */
@@ -3985,127 +5237,96 @@ f = $ac_func;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:3988: \"$ac_link\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:3991: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:3994: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:3997: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- eval "$ac_ac_var=yes"
+ eval "$as_ac_var=yes"
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-eval "$ac_ac_var=no"
+eval "$as_ac_var=no"
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
-echo "$as_me:4007: result: `eval echo '${'$ac_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$ac_ac_var'}'`" >&6
-if test `eval echo '${'$ac_ac_var'}'` = yes; then
- cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_func" | $ac_tr_cpp` 1
-EOF
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
fi
done
-echo "$as_me:4017: checking for mkstemp" >&5
+echo "$as_me:$LINENO: checking for mkstemp" >&5
echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6
-if test "${ac_cv_func_mkstemp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-#line 4023 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char mkstemp (); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char mkstemp ();
-char (*f) ();
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <unistd.h>
+int (*f) (char *);
int
main ()
{
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_mkstemp) || defined (__stub___mkstemp)
-choke me
-#else
f = mkstemp;
-#endif
-
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:4054: \"$ac_link\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:4057: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest$ac_exeext'
- { (eval echo "$as_me:4060: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:4063: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- ac_cv_func_mkstemp=yes
-else
- echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_mkstemp=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:4073: result: $ac_cv_func_mkstemp" >&5
-echo "${ECHO_T}$ac_cv_func_mkstemp" >&6
-if test $ac_cv_func_mkstemp = yes; then
- cat >>confdefs.h <<\EOF
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;
+cat >>confdefs.h <<\_ACEOF
#define HAVE_MKSTEMP 1
-EOF
-
-echo "$as_me:4080: checking for mkstemp prototype in <stdlib.h>" >&5
-echo $ECHO_N "checking for mkstemp prototype in <stdlib.h>... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line 4083 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "mkstemp" >/dev/null 2>&1; then
- echo "$as_me:4089: result: yes" >&5
-echo "${ECHO_T}yes" >&6;cat >>confdefs.h <<\EOF
-#define HAVE_MKSTEMP_PROTO 1
-EOF
else
- echo "$as_me:4095: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-rm -f conftest*
-
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6;LIBOBJS="$LIBOBJS mkstemp.$ac_objext"
fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:4102: checking for sys_siglist declaration in signal.h or unistd.h" >&5
+echo "$as_me:$LINENO: checking for sys_siglist declaration in signal.h or unistd.h" >&5
echo $ECHO_N "checking for sys_siglist declaration in signal.h or unistd.h... $ECHO_C" >&6
if test "${ac_cv_decl_sys_siglist+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 4108 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
@@ -4123,16 +5344,16 @@ char *msg = *(sys_siglist + 1);
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4126: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:4129: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4132: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:4135: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
ac_cv_decl_sys_siglist=yes
else
@@ -4142,13 +5363,13 @@ ac_cv_decl_sys_siglist=no
fi
rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:4145: result: $ac_cv_decl_sys_siglist" >&5
+echo "$as_me:$LINENO: result: $ac_cv_decl_sys_siglist" >&5
echo "${ECHO_T}$ac_cv_decl_sys_siglist" >&6
if test $ac_cv_decl_sys_siglist = yes; then
-cat >>confdefs.h <<\EOF
+cat >>confdefs.h <<\_ACEOF
#define SYS_SIGLIST_DECLARED 1
-EOF
+_ACEOF
fi
@@ -4158,10 +5379,10 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-echo "$as_me:4161: checking whether ANSI array delete syntax supported" >&5
+echo "$as_me:$LINENO: checking whether ANSI array delete syntax supported" >&5
echo $ECHO_N "checking whether ANSI array delete syntax supported... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
-#line 4164 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
int
@@ -4173,26 +5394,27 @@ char *p = new char[5]; delete [] p;
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4176: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:4179: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4182: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:4185: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:4187: result: yes" >&5
+ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:4192: result: no" >&5
-echo "${ECHO_T}no" >&6;cat >>confdefs.h <<\EOF
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6;
+cat >>confdefs.h <<\_ACEOF
#define ARRAY_DELETE_NEEDS_SIZE 1
-EOF
+_ACEOF
fi
rm -f conftest.$ac_objext conftest.$ac_ext
@@ -4208,10 +5430,10 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-echo "$as_me:4211: checking traditional preprocessor" >&5
+echo "$as_me:$LINENO: checking traditional preprocessor" >&5
echo $ECHO_N "checking traditional preprocessor... $ECHO_C" >&6
cat >conftest.$ac_ext <<_ACEOF
-#line 4214 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#define name2(a,b) a/**/b
int
@@ -4223,26 +5445,27 @@ int name2(foo,bar);
}
_ACEOF
rm -f conftest.$ac_objext
-if { (eval echo "$as_me:4226: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5
ac_status=$?
- echo "$as_me:4229: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:4232: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:4235: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:4237: result: yes" >&5
-echo "${ECHO_T}yes" >&6;cat >>confdefs.h <<\EOF
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;
+cat >>confdefs.h <<\_ACEOF
#define TRADITIONAL_CPP 1
-EOF
+_ACEOF
else
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:4245: result: no" >&5
+echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f conftest.$ac_objext conftest.$ac_ext
@@ -4252,14 +5475,14 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo "$as_me:4255: checking w_coredump" >&5
+echo "$as_me:$LINENO: checking w_coredump" >&5
echo $ECHO_N "checking w_coredump... $ECHO_C" >&6
if test "$cross_compiling" = yes; then
- echo "$as_me:4258: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line 4262 "configure"
+#line $LINENO "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
@@ -4275,55 +5498,64 @@ main()
}
_ACEOF
rm -f conftest$ac_exeext
-if { (eval echo "$as_me:4278: \"$ac_link\"") >&5
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5
ac_status=$?
- echo "$as_me:4281: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:4283: \"$ac_try\"") >&5
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
- echo "$as_me:4286: \$? = $ac_status" >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- echo "$as_me:4288: result: yes" >&5
-echo "${ECHO_T}yes" >&6;cat >>confdefs.h <<\EOF
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6;
+cat >>confdefs.h <<\_ACEOF
#define WCOREFLAG 0200
-EOF
+_ACEOF
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
-echo "$as_me:4297: result: no" >&5
+( exit $ac_status )
+echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_ext
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-echo "$as_me:4302: checking default value for grops -b option" >&5
+echo "$as_me:$LINENO: checking default value for grops -b option" >&5
echo $ECHO_N "checking default value for grops -b option... $ECHO_C" >&6
test -n "${BROKEN_SPOOLER_FLAGS}" || BROKEN_SPOOLER_FLAGS=7
-echo "$as_me:4305: result: $BROKEN_SPOOLER_FLAGS" >&5
+echo "$as_me:$LINENO: result: $BROKEN_SPOOLER_FLAGS" >&5
echo "${ECHO_T}$BROKEN_SPOOLER_FLAGS" >&6
-echo "$as_me:4308: checking default paper size" >&5
+echo "$as_me:$LINENO: checking default paper size" >&5
echo $ECHO_N "checking default paper size... $ECHO_C" >&6
+groff_prefix=$prefix
+test "x$prefix" = xNONE && groff_prefix=$ac_default_prefix
if test -z "$PAGE"; then
descfile=
- if test -r $prefix/share/groff/font/devps/DESC; then
- descfile=$prefix/share/groff/font/devps/DESC
- elif test -r $prefix/lib/groff/font/devps/DESC; then
- descfile=$prefix/lib/groff/font/devps/DESC
+ if test -r $groff_prefix/share/groff/font/devps/DESC; then
+ descfile=$groff_prefix/share/groff/font/devps/DESC
+ elif test -r $groff_prefix/lib/groff/font/devps/DESC; then
+ descfile=$groff_prefix/lib/groff/font/devps/DESC
else
- for f in $prefix/share/groff/*/font/devps/DESC; do
+ for f in $groff_prefix/share/groff/*/font/devps/DESC; do
if test -r $f; then
descfile=$f
break
fi
done
fi
- if test -n "$descfile" \
- && grep "^paperlength 841890" $descfile >/dev/null 2>&1; then
- PAGE=A4
+ if test -n "$descfile"; then
+ if grep '^paperlength[ ]\+841890' $descfile
+ >/dev/null 2>&1; then
+ PAGE=A4
+ elif grep '^papersize[ ]\+[aA]4' $descfile \
+ >/dev/null 2>&1; then
+ PAGE=A4
+ fi
fi
fi
if test -z "$PAGE"; then
@@ -4344,22 +5576,29 @@ if test -z "$PAGE"; then
esac
fi
test -n "$PAGE" || PAGE=letter
-echo "$as_me:4347: result: $PAGE" >&5
+if test "x$PAGE" = "xA4"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define PAGEA4 1
+_ACEOF
+
+fi
+echo "$as_me:$LINENO: result: $PAGE" >&5
echo "${ECHO_T}$PAGE" >&6
-echo "$as_me:4350: checking for existing troff installation" >&5
+echo "$as_me:$LINENO: checking for existing troff installation" >&5
echo $ECHO_N "checking for existing troff installation... $ECHO_C" >&6
if test "x`(echo .tm '|n(.g' | tr '|' '\\\\' | troff -z -i 2>&1) 2>/dev/null`" = x0; then
- echo "$as_me:4353: result: yes" >&5
+ echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
g=g
else
- echo "$as_me:4357: result: no" >&5
+ echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
g=
fi
-echo "$as_me:4362: checking for prefix of system macro packages" >&5
+echo "$as_me:$LINENO: checking for prefix of system macro packages" >&5
echo $ECHO_N "checking for prefix of system macro packages... $ECHO_C" >&6
sys_tmac_prefix=
sys_tmac_file_prefix=
@@ -4376,11 +5615,11 @@ for d in /usr/share/lib/tmac /usr/lib/tmac; do
done
done
done
-echo "$as_me:4379: result: $sys_tmac_prefix" >&5
+echo "$as_me:$LINENO: result: $sys_tmac_prefix" >&5
echo "${ECHO_T}$sys_tmac_prefix" >&6
tmac_wrap=
-echo "$as_me:4383: checking which system macro packages should be made available" >&5
+echo "$as_me:$LINENO: checking which system macro packages should be made available" >&5
echo $ECHO_N "checking which system macro packages should be made available... $ECHO_C" >&6
if test "x$sys_tmac_file_prefix" = "xtmac."; then
for f in $sys_tmac_prefix*; do
@@ -4416,11 +5655,213 @@ elif test -n "$sys_tmac_prefix"; then
done
rm -f conftest.sol
fi
-echo "$as_me:4419: result: $tmac_wrap" >&5
+echo "$as_me:$LINENO: result: $tmac_wrap" >&5
echo "${ECHO_T}$tmac_wrap" >&6
-$srcdir/mkinstalldirs src/xditview
-ac_config_files="$ac_config_files Makefile src/xditview/Imakefile"
+make_html=html
+make_install_html=install_html
+# Extract the first word of "pnmcut", so it can be a program name with args.
+set dummy pnmcut; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_pnmcut+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$pnmcut"; then
+ ac_cv_prog_pnmcut="$pnmcut" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_pnmcut="found"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_pnmcut" && ac_cv_prog_pnmcut="missing"
+fi
+fi
+pnmcut=$ac_cv_prog_pnmcut
+if test -n "$pnmcut"; then
+ echo "$as_me:$LINENO: result: $pnmcut" >&5
+echo "${ECHO_T}$pnmcut" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "pnmcrop", so it can be a program name with args.
+set dummy pnmcrop; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_pnmcrop+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$pnmcrop"; then
+ ac_cv_prog_pnmcrop="$pnmcrop" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_pnmcrop="found"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_pnmcrop" && ac_cv_prog_pnmcrop="missing"
+fi
+fi
+pnmcrop=$ac_cv_prog_pnmcrop
+if test -n "$pnmcrop"; then
+ echo "$as_me:$LINENO: result: $pnmcrop" >&5
+echo "${ECHO_T}$pnmcrop" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "pnmtopng", so it can be a program name with args.
+set dummy pnmtopng; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_pnmtopng+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$pnmtopng"; then
+ ac_cv_prog_pnmtopng="$pnmtopng" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_pnmtopng="found"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_pnmtopng" && ac_cv_prog_pnmtopng="missing"
+fi
+fi
+pnmtopng=$ac_cv_prog_pnmtopng
+if test -n "$pnmtopng"; then
+ echo "$as_me:$LINENO: result: $pnmtopng" >&5
+echo "${ECHO_T}$pnmtopng" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "gs gsos2", so it can be a program name with args.
+set dummy gs gsos2; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_gs+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$gs"; then
+ ac_cv_prog_gs="$gs" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_gs="found"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_gs" && ac_cv_prog_gs="missing"
+fi
+fi
+gs=$ac_cv_prog_gs
+if test -n "$gs"; then
+ echo "$as_me:$LINENO: result: $gs" >&5
+echo "${ECHO_T}$gs" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Extract the first word of "psselect", so it can be a program name with args.
+set dummy psselect; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_psselect+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$psselect"; then
+ ac_cv_prog_psselect="$psselect" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_psselect="found"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_psselect" && ac_cv_prog_psselect="missing"
+fi
+fi
+psselect=$ac_cv_prog_psselect
+if test -n "$psselect"; then
+ echo "$as_me:$LINENO: result: $psselect" >&5
+echo "${ECHO_T}$psselect" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+case "x$pnmcut$pnmcrop$pnmtopng$gs$psselect" in
+*missing*)
+ make_html=
+ make_install_html=
+ { echo "$as_me:$LINENO: WARNING:
+
+ Since one or more of the above five programs can't be found in the path,
+ the HTML backend of groff (grohtml) won't work properly. Consequently,
+ no documentation in HTML format is built and installed.
+" >&5
+echo "$as_me: WARNING:
+
+ Since one or more of the above five programs can't be found in the path,
+ the HTML backend of groff (grohtml) won't work properly. Consequently,
+ no documentation in HTML format is built and installed.
+" >&2;} ;;
+esac
+
+
+ ac_config_files="$ac_config_files stamp-h"
+
+ ac_config_files="$ac_config_files Makefile doc/Makefile src/xditview/Imakefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -4432,7 +5873,7 @@ cat >confcache <<\_ACEOF
# config.status only pays attention to the cache file if you give it
# the --recheck option to rerun configure.
#
-# `ac_cv_env_foo' variables (set or unset) will be overriden when
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
# loading this file, other *unset* `ac_cv_foo' will be assigned the
# following values.
@@ -4451,12 +5892,12 @@ _ACEOF
# substitution turns \\\\ into \\, and sed turns \\ into \).
sed -n \
"s/'/'\\\\''/g;
- s/^\\([_$ac_cr_alnum]*_cv_[_$ac_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
;;
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n \
- "s/^\\([_$ac_cr_alnum]*_cv_[_$ac_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
;;
esac;
} |
@@ -4496,67 +5937,224 @@ s/^[^=]*=[ ]*$//;
}'
fi
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then we branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-cat >confdef2opt.sed <<\EOF
-t clear
-: clear
-s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g
-t quote
-s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g
-t quote
-d
-: quote
-s,[ `~#$^&*(){}\\|;'"<>?],\\&,g
-s,\[,\\&,g
-s,\],\\&,g
-s,\$,$$,g
-p
-EOF
-# We use echo to avoid assuming a particular line-breaking character.
-# The extra dot is to prevent the shell from consuming trailing
-# line-breaks from the sub-command output. A line-break within
-# single-quotes doesn't work because, if this script is created in a
-# platform that uses two characters for line-breaks (e.g., DOS), tr
-# would break.
-ac_LF_and_DOT=`echo; echo .`
-DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
-rm -f confdef2opt.sed
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
: ${CONFIG_STATUS=./config.status}
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:4534: creating $CONFIG_STATUS" >&5
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
echo "$as_me: creating $CONFIG_STATUS" >&6;}
cat >$CONFIG_STATUS <<_ACEOF
#! $SHELL
-# Generated automatically by configure.
+# Generated by $as_me.
# Run this file to recreate the current configuration.
# Compiler output produced by configure, useful for debugging
# configure, is in config.log if it exists.
debug=false
SHELL=\${CONFIG_SHELL-$SHELL}
-ac_cs_invocation="\$0 \$@"
-
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
# Be Bourne compatible
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
emulate sh
NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
set -o posix
fi
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in LANG LANGUAGE LC_ALL LC_COLLATE LC_CTYPE LC_NUMERIC LC_MESSAGES LC_TIME
+do
+ if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
# Name of the executable.
-as_me=`echo "$0" |sed 's,.*[\\/],,'`
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conftest.sh
+ echo "exit 0" >>conftest.sh
+ chmod +x conftest.sh
+ if (PATH="/nonexistent;."; conftest.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conftest.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
if expr a : '\(a\)' >/dev/null 2>&1; then
as_expr=expr
@@ -4582,24 +6180,20 @@ else
fi
rm -f conf$$ conf$$.exe conf$$.file
-as_executable_p="test -f"
-
-# Support unset when possible.
-if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
- as_unset=unset
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
else
- as_unset=false
+ as_mkdir_p=false
fi
-# NLS nuisances.
-$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
-$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
-$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
-$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
-$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
-$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
-$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
-$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+
# IFS
# We need space, tab and new line, in precisely that order.
@@ -4608,10 +6202,34 @@ as_nl='
IFS=" $as_nl"
# CDPATH.
-$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+$as_unset CDPATH
exec 6>&1
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.54. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
_ACEOF
# Files that config.status was made for.
@@ -4631,7 +6249,7 @@ if test -n "$ac_config_commands"; then
echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
fi
-cat >>$CONFIG_STATUS <<\EOF
+cat >>$CONFIG_STATUS <<\_ACEOF
ac_cs_usage="\
\`$as_me' instantiates files from templates according to the
@@ -4645,17 +6263,22 @@ Usage: $0 [OPTIONS] [FILE]...
--recheck update $as_me by reconfiguring in the same conditions
--file=FILE[:TEMPLATE]
instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
Configuration files:
$config_files
+Configuration headers:
+$config_headers
+
Report bugs to <bug-autoconf@gnu.org>."
-EOF
+_ACEOF
-cat >>$CONFIG_STATUS <<EOF
+cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
config.status
-configured by $0, generated by GNU Autoconf 2.50,
+configured by $0, generated by GNU Autoconf 2.54,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
@@ -4664,9 +6287,9 @@ This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."
srcdir=$srcdir
INSTALL="$INSTALL"
-EOF
+_ACEOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>$CONFIG_STATUS <<\_ACEOF
# If no file are specified by the user, then we need to provide default
# value. By we need to know if files were specified by the user.
ac_need_defaults=:
@@ -4676,30 +6299,33 @@ do
--*=*)
ac_option=`expr "x$1" : 'x\([^=]*\)='`
ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
- shift
- set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
- shift
+ ac_shift=:
+ ;;
+ -*)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
;;
- -*);;
*) # This is not an option, so the user has probably given explicit
# arguments.
+ ac_option=$1
ac_need_defaults=false;;
esac
- case $1 in
+ case $ac_option in
# Handling of the options.
-EOF
-cat >>$CONFIG_STATUS <<EOF
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
-EOF
-cat >>$CONFIG_STATUS <<\EOF
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
--version | --vers* | -V )
echo "$ac_cs_version"; exit 0 ;;
--he | --h)
# Conflict between --help and --header
- { { echo "$as_me:4702: error: ambiguous option: $1
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
Try \`$0 --help' for more information." >&5
echo "$as_me: error: ambiguous option: $1
Try \`$0 --help' for more information." >&2;}
@@ -4709,59 +6335,63 @@ Try \`$0 --help' for more information." >&2;}
--debug | --d* | -d )
debug=: ;;
--file | --fil | --fi | --f )
- shift
- CONFIG_FILES="$CONFIG_FILES $1"
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
ac_need_defaults=false;;
--header | --heade | --head | --hea )
- shift
- CONFIG_HEADERS="$CONFIG_HEADERS $1"
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
ac_need_defaults=false;;
- # Handling of arguments.
- 'Makefile' ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- 'src/xditview/Imakefile' ) CONFIG_FILES="$CONFIG_FILES src/xditview/Imakefile" ;;
-
# This is an error.
- -*) { { echo "$as_me:4725: error: unrecognized option: $1
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
Try \`$0 --help' for more information." >&5
echo "$as_me: error: unrecognized option: $1
Try \`$0 --help' for more information." >&2;}
{ (exit 1); exit 1; }; } ;;
- *) { { echo "$as_me:4730: error: invalid argument: $1" >&5
-echo "$as_me: error: invalid argument: $1" >&2;}
- { (exit 1); exit 1; }; };;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
esac
shift
done
-exec 5>>config.log
-cat >&5 << _ACEOF
+_ACEOF
-## ----------------------- ##
-## Running config.status. ##
-## ----------------------- ##
-This file was extended by $as_me 2.50, executed with
- > $ac_cs_invocation
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-_ACEOF
-EOF
-cat >>$CONFIG_STATUS <<\EOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "stamp-h" ) CONFIG_FILES="$CONFIG_FILES stamp-h" ;;
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "src/xditview/Imakefile" ) CONFIG_FILES="$CONFIG_FILES src/xditview/Imakefile" ;;
+ "src/include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/include/config.h:src/include/config.hin" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
# If the user did not use the arguments to specify the items to instantiate,
# then the envvar interface is used. Set only those that are not.
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
fi
# Create a temporary directory, and hook for its removal unless debugging.
$debug ||
{
trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
- trap '{ (exit $?); exit $?; }' 1 2 13 15
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
}
# Create a (secure) tmp directory for tmp files.
@@ -4779,9 +6409,9 @@ $debug ||
{ (exit 1); exit 1; }
}
-EOF
+_ACEOF
-cat >>$CONFIG_STATUS <<EOF
+cat >>$CONFIG_STATUS <<_ACEOF
#
# CONFIG_FILES section.
@@ -4794,6 +6424,12 @@ if test -n "\$CONFIG_FILES"; then
sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
s,@exec_prefix@,$exec_prefix,;t t
s,@prefix@,$prefix,;t t
s,@program_transform_name@,$program_transform_name,;t t
@@ -4809,18 +6445,15 @@ s,@includedir@,$includedir,;t t
s,@oldincludedir@,$oldincludedir,;t t
s,@infodir@,$infodir,;t t
s,@mandir@,$mandir,;t t
-s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
-s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
-s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
-s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
-s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
s,@ECHO_C@,$ECHO_C,;t t
s,@ECHO_N@,$ECHO_N,;t t
s,@ECHO_T@,$ECHO_T,;t t
-s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
-s,@DEFS@,$DEFS,;t t
s,@LIBS@,$LIBS,;t t
-s,@top_builddir@,$top_builddir,;t t
+s,@groff_top_builddir@,$groff_top_builddir,;t t
s,@CC@,$CC,;t t
s,@CFLAGS@,$CFLAGS,;t t
s,@LDFLAGS@,$LDFLAGS,;t t
@@ -4832,6 +6465,7 @@ s,@CXX@,$CXX,;t t
s,@CXXFLAGS@,$CXXFLAGS,;t t
s,@ac_ct_CXX@,$ac_ct_CXX,;t t
s,@TTYDEVDIRS@,$TTYDEVDIRS,;t t
+s,@OTHERDEVDIRS@,$OTHERDEVDIRS,;t t
s,@LPR@,$LPR,;t t
s,@LP@,$LP,;t t
s,@LPQ@,$LPQ,;t t
@@ -4841,12 +6475,14 @@ s,@PERLPATH@,$PERLPATH,;t t
s,@YACC@,$YACC,;t t
s,@RANLIB@,$RANLIB,;t t
s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@INSTALL_INFO@,$INSTALL_INFO,;t t
s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
s,@INSTALL_DATA@,$INSTALL_DATA,;t t
s,@LN_S@,$LN_S,;t t
s,@SH_SCRIPT_SED_CMD@,$SH_SCRIPT_SED_CMD,;t t
s,@CPP@,$CPP,;t t
+s,@EGREP@,$EGREP,;t t
s,@LIBM@,$LIBM,;t t
s,@LIBOBJS@,$LIBOBJS,;t t
s,@BROKEN_SPOOLER_FLAGS@,$BROKEN_SPOOLER_FLAGS,;t t
@@ -4854,11 +6490,19 @@ s,@PAGE@,$PAGE,;t t
s,@g@,$g,;t t
s,@sys_tmac_prefix@,$sys_tmac_prefix,;t t
s,@tmac_wrap@,$tmac_wrap,;t t
+s,@pnmcut@,$pnmcut,;t t
+s,@pnmcrop@,$pnmcrop,;t t
+s,@pnmtopng@,$pnmtopng,;t t
+s,@gs@,$gs,;t t
+s,@psselect@,$psselect,;t t
+s,@make_html@,$make_html,;t t
+s,@make_install_html@,$make_install_html,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
CEOF
-EOF
+_ACEOF
- cat >>$CONFIG_STATUS <<\EOF
+ cat >>$CONFIG_STATUS <<\_ACEOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_lines=48
@@ -4897,8 +6541,8 @@ EOF
fi
fi # test -n "$CONFIG_FILES"
-EOF
-cat >>$CONFIG_STATUS <<\EOF
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
case $ac_file in
@@ -4912,7 +6556,8 @@ for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
esac
# Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
- ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$ac_file" : 'X\(//\)[^/]' \| \
X"$ac_file" : 'X\(//\)$' \| \
X"$ac_file" : 'X\(/\)' \| \
@@ -4923,60 +6568,84 @@ echo X"$ac_file" |
/^X\(\/\/\)$/{ s//\1/; q; }
/^X\(\/\).*/{ s//\1/; q; }
s/.*/./; q'`
- if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- { case "$ac_dir" in
- [\\/]* | ?:[\\/]* ) as_incr_dir=;;
- *) as_incr_dir=.;;
-esac
-as_dummy="$ac_dir"
-for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
- case $as_mkdir_dir in
- # Skip DOS drivespec
- ?:) as_incr_dir=$as_mkdir_dir ;;
- *)
- as_incr_dir=$as_incr_dir/$as_mkdir_dir
- test -d "$as_incr_dir" || mkdir "$as_incr_dir"
- ;;
- esac
-done; }
-
- ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
- # A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
else
- ac_dir_suffix= ac_dots=
- fi
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
- case $srcdir in
- .) ac_srcdir=.
- if test -z "$ac_dots"; then
- ac_top_srcdir=.
- else
- ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
- fi ;;
- [\\/]* | ?:[\\/]* )
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir ;;
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
*) # Relative path.
- ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_dots$srcdir ;;
- esac
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
+# absolute.
+ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
+ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
+ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
+
case $INSTALL in
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_dots$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
esac
if test x"$ac_file" != x-; then
- { echo "$as_me:4971: creating $ac_file" >&5
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
echo "$as_me: creating $ac_file" >&6;}
rm -f "$ac_file"
fi
# Let's still pretend it is `configure' which instantiates (i.e., don't
# use $as_me), people would be surprised to read:
- # /* config.h. Generated automatically by config.status. */
- configure_input="Generated automatically from `echo $ac_file_in |
- sed 's,.*/,,'` by configure."
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
# First look for the input files in the build tree, otherwise in the
# src tree.
@@ -4986,7 +6655,7 @@ echo "$as_me: creating $ac_file" >&6;}
-) echo $tmp/stdin ;;
[\\/$]*)
# Absolute (can't be DOS-style, as IFS=:)
- test -f "$f" || { { echo "$as_me:4989: error: cannot find input file: $f" >&5
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
echo "$as_me: error: cannot find input file: $f" >&2;}
{ (exit 1); exit 1; }; }
echo $f;;
@@ -4999,23 +6668,29 @@ echo "$as_me: error: cannot find input file: $f" >&2;}
echo $srcdir/$f
else
# /dev/null tree
- { { echo "$as_me:5002: error: cannot find input file: $f" >&5
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
echo "$as_me: error: cannot find input file: $f" >&2;}
{ (exit 1); exit 1; }; }
fi;;
esac
done` || { (exit 1); exit 1; }
-EOF
-cat >>$CONFIG_STATUS <<EOF
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
sed "$ac_vpsub
$extrasub
-EOF
-cat >>$CONFIG_STATUS <<\EOF
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
:t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
s,@configure_input@,$configure_input,;t t
s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
s,@INSTALL@,$ac_INSTALL,;t t
" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
rm -f $tmp/stdin
@@ -5026,16 +6701,243 @@ s,@INSTALL@,$ac_INSTALL,;t t
rm -f $tmp/out
fi
+ # Run the commands associated with the file.
+ case $ac_file in
+ stamp-h ) echo timestamp > stamp-h ;;
+ esac
done
-EOF
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
-cat >>$CONFIG_STATUS <<\EOF
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated by configure. */" >$tmp/config.h
+ else
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
+ fi
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
+ fi
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
{ (exit 0); exit 0; }
-EOF
+_ACEOF
chmod +x $CONFIG_STATUS
ac_clean_files=$ac_clean_files_save
+
# configure is writing to config.log, and then calls config.status.
# config.status does its own redirection, appending to config.log.
# Unfortunately, on DOS this fails, as config.log is still kept open
@@ -5054,3 +6956,23 @@ if test "$no_create" != yes; then
$ac_cs_success || { (exit 1); exit 1; }
fi
+{ echo "$as_me:$LINENO:
+
+ Configuration completed.
+
+ You can now say \`make' to compile the groff package and \`make install'
+ to install it afterwards.
+
+ If you want to compile xditview, change the directory to \`src/xditview'
+ and follow the instructions given in the file \`INSTALL'.
+" >&5
+echo "$as_me:
+
+ Configuration completed.
+
+ You can now say \`make' to compile the groff package and \`make install'
+ to install it afterwards.
+
+ If you want to compile xditview, change the directory to \`src/xditview'
+ and follow the instructions given in the file \`INSTALL'.
+" >&6;}
diff --git a/contrib/groff/configure.ac b/contrib/groff/configure.ac
index b8f111a..75c4799 100644
--- a/contrib/groff/configure.ac
+++ b/contrib/groff/configure.ac
@@ -1,5 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT
+AC_CONFIG_HEADERS(src/include/config.h:src/include/config.hin)
AC_CONFIG_SRCDIR([src/roff/groff/groff.cc])
dnl checks for programs
GROFF_SRCDIR
@@ -14,6 +15,7 @@ AC_PATH_PROG(PERLPATH, perl, /usr/bin/perl)
GROFF_PROG_YACC
AC_PROG_RANLIB
GROFF_INSTALL_SH
+GROFF_INSTALL_INFO
AC_PROG_INSTALL
AC_PROG_LN_S
dnl use a dummy substitution if no csh hack is necessary to avoid errors
@@ -22,20 +24,25 @@ GROFF_CSH_HACK(SH_SCRIPT_SED_CMD='1s/.*/:/', SH_SCRIPT_SED_CMD='1s/a/a/')
AC_SUBST(SH_SCRIPT_SED_CMD)
dnl checks for headers
AC_CHECK_HEADERS(stdlib.h unistd.h dirent.h limits.h sys/dir.h \
- string.h strings.h math.h)
+ string.h strings.h math.h stdint.h sys/time.h)
GROFF_ISC_SYSV3
GROFF_POSIX
GROFF_SRAND
+GROFF_NEED_DECLARATION(gettimeofday)
GROFF_NEED_DECLARATION(hypot)
GROFF_NEED_DECLARATION(popen)
GROFF_NEED_DECLARATION(pclose)
GROFF_NEED_DECLARATION(putenv)
+GROFF_NEED_DECLARATION(strcasecmp)
GROFF_NEED_DECLARATION(strncasecmp)
GROFF_SYS_NERR
GROFF_SYS_ERRLIST
GROFF_OSFCN_H
GROFF_LIMITS_H
+GROFF_INTTYPES_H
dnl checks for typedefs
+GROFF_UNSIGNED_LONG_LONG
+GROFF_UINTMAX_T
GROFF_TIME_T
AC_TYPE_SIGNAL
GROFF_STRUCT_EXCEPTION
@@ -45,9 +52,9 @@ dnl checks for functions
AC_FUNC_MMAP
saved_libs="$LIBS"
LIBS="$LIBS -lc $LIBM"
-AC_REPLACE_FUNCS(fmod strtol getcwd strerror putenv)
+AC_REPLACE_FUNCS(fmod getcwd putenv snprintf strerror strtol)
LIBS="$saved_libs"
-AC_CHECK_FUNCS(rename strcasecmp strncasecmp strsep strdup)
+AC_CHECK_FUNCS(gettimeofday isatty rename strcasecmp strncasecmp strsep)
GROFF_MKSTEMP
AC_DECL_SYS_SIGLIST
dnl checks for compiler characteristics
@@ -60,6 +67,18 @@ GROFF_BROKEN_SPOOLER_FLAGS
GROFF_PAGE
GROFF_G
GROFF_TMAC
-$srcdir/mkinstalldirs src/xditview
-AC_CONFIG_FILES([Makefile src/xditview/Imakefile])
+GROFF_HTML_PROGRAMS
+AC_CONFIG_FILES(stamp-h, [echo timestamp > stamp-h])
+AC_CONFIG_FILES([Makefile doc/Makefile src/xditview/Imakefile])
AC_OUTPUT
+dnl
+AC_MSG_NOTICE([
+
+ Configuration completed.
+
+ You can now say `make' to compile the groff package and `make install'
+ to install it afterwards.
+
+ If you want to compile xditview, change the directory to `src/xditview'
+ and follow the instructions given in the file `INSTALL'.
+])
diff --git a/contrib/groff/contrib/eqn2graph/Makefile.sub b/contrib/groff/contrib/eqn2graph/Makefile.sub
new file mode 100644
index 0000000..6ccdd98
--- /dev/null
+++ b/contrib/groff/contrib/eqn2graph/Makefile.sub
@@ -0,0 +1,19 @@
+MAN1=eqn2graph.n
+CLEANADD=eqn2graph
+
+all: eqn2graph
+
+eqn2graph: eqn2graph.sh
+ rm -f $@; \
+ sed -e "s|@g@|$(g)|g" \
+ -e "s|@VERSION@|$(version)$(revision)|" \
+ -e $(SH_SCRIPT_SED_CMD) $(srcdir)/eqn2graph.sh >$@; \
+ chmod +x $@
+
+install_data: eqn2graph
+ -test -d $(bindir) || $(mkinstalldirs) $(bindir)
+ -rm -f $(bindir)/eqn2graph
+ $(INSTALL_SCRIPT) eqn2graph $(bindir)/eqn2graph
+
+uninstall_sub:
+ -rm -f $(bindir)/eqn2graph
diff --git a/contrib/groff/contrib/eqn2graph/eqn2graph.man b/contrib/groff/contrib/eqn2graph/eqn2graph.man
new file mode 100644
index 0000000..aa71405
--- /dev/null
+++ b/contrib/groff/contrib/eqn2graph/eqn2graph.man
@@ -0,0 +1,97 @@
+.\" $Id: eqn2graph.man,v 1.2 2002/08/21 17:29:17 wlemb Exp $
+.\" This documentation is released to the public domain.
+.
+.
+.\" Like TP, but if specified indent is more than half
+.\" the current line-length - indent, use the default indent.
+.de Tp
+.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
+.el .TP "\\$1"
+..
+.
+.
+.TH EQN2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
+.IX eqn2graph
+.SH NAME
+eqn2graph \- convert an EQN equation into a cropped image
+.
+.
+.SH SYNOPSIS
+.B eqn2graph
+[
+.B \-unsafe
+]
+[
+.BI \-format\ fmt
+]
+.
+.
+.SH DESCRIPTION
+Reads an EQN equation (one line) as input; produces an image
+file (by default in Portable Network Graphics format) suitable for the
+Web as output.
+.P
+Your input EQN code should \fInot\fR have the .EQ/.EN preamble that
+that normally precedes it within
+.BR groff (@MAN1EXT@)
+macros; nor do you need to have dollar-sign or other delimiters
+around the equation.
+.P
+The output image will be a black-on-white graphic clipped to the
+smallest possible bounding box that contains all the black pixels.
+By specifying command-line options to be passed to
+.BR convert (1)
+you can give it a border, set the background transparent, set the
+image's pixel density, or perform other useful transformations.
+.P
+This program uses
+.BR @g@eqn (@MAN1EXT@),
+.BR groff (@MAN1EXT@),
+and the ImageMagick
+.BR convert (1)
+program.
+These programs must be installed on your system and accessible on your
+$PATH for \fBeqn2graph\fR to work.
+.
+.
+.SH OPTIONS
+.TP
+.B \-unsafe
+Run
+.BR groff (@MAN1EXT@)
+in the `unsafe' mode enabling the PIC macro
+.B sh
+to execute arbitrary commands.
+The default is to forbid this.
+.TP
+.BI \-format\ fmt
+Specify an output format; the default is PNG (Portable Network Graphics).
+Any format that
+.BR convert (1)
+can emit is supported.
+.PP
+Command-line switches and arguments not listed above are passed to
+.BR convert (1).
+.
+.
+.SH FILES
+.Tp \w'\fB@MACRODIR@/eqnrc'u+2n
+.B @MACRODIR@/eqnrc
+The
+.BR @g@eqn (@MAN1EXT@)
+initialization file.
+.
+.
+.SH "SEE ALSO"
+.BR @g@eqn (@MAN1EXT@),
+.BR groff (@MAN1EXT@),
+.BR gs (1),
+.BR convert (1).
+.
+.
+.SH AUTHOR
+Eric S. Raymond <esr@thyrsus.com>.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff --git a/contrib/groff/contrib/eqn2graph/eqn2graph.sh b/contrib/groff/contrib/eqn2graph/eqn2graph.sh
new file mode 100644
index 0000000..e314dc9
--- /dev/null
+++ b/contrib/groff/contrib/eqn2graph/eqn2graph.sh
@@ -0,0 +1,74 @@
+#!/bin/sh
+#
+# eqn2graph -- compile EQN equation descriptions to bitmap images
+#
+# by Eric S. Raymond <esr@thyrsus.com>, July 2002
+#
+# In Unixland, the magic is in knowing what to string together...
+#
+# Take an eqn equation on stdin, emit cropped bitmap on stdout.
+# The pic markup should *not* be wrapped in .EQ/.EN, this script will do that.
+# A -U option on the command line enables gpic/groff "unsafe" mode.
+# A -format FOO option changes the image output format to any format
+# supported by convert(1). All other options are passed to convert(1).
+# The default format is PNG.
+#
+# This is separate from pic2graph because pic processing has some weird
+# clipping effect on the output, mangling equations that are very wide
+# or deep. Besides, this tool can supply its own delimiters.
+#
+
+# Requires the groff suite and the ImageMagick tools. Both are open source.
+# This code is released to the public domain.
+#
+# Here are the assumptions behind the option processing:
+#
+# 1. None of the options of eqn(1) are relevant.
+#
+# 2. Only the -U option of groff(1) is relevant.
+#
+# 3. Many options of convert(1) are potentially relevant, (especially
+# -density, -interlace, -transparency, -border, and -comment).
+#
+# Thus, we pass -U to groff(1), and everything else to convert(1).
+#
+# $Id: eqn2graph.sh,v 1.2 2002/07/17 04:55:46 wlemb Exp $
+#
+groff_opts=""
+convert_opts=""
+format="png"
+
+while [ "$1" ]
+do
+ case $1 in
+ -unsafe)
+ groff_opts="-U";;
+ -format)
+ format=$2
+ shift;;
+ -v | --version)
+ echo "GNU eqn2graph (groff) version @VERSION@"
+ exit 0;;
+ --help)
+ echo "usage: eqn2graph [ option ...] < in > out"
+ exit 0;;
+ *)
+ convert_opts="$convert_opts $1";;
+ esac
+ shift
+done
+
+# Here goes:
+# 1. Add .EQ/.EN.
+# 2. Process through eqn(1) to emit troff markup.
+# 3. Process through groff(1) to emit Postscript.
+# 4. Use convert(1) to crop the Postscript and turn it into a bitmap.
+tmp=/usr/tmp/eqn2graph-$$
+trap "rm ${tmp}.*" 0 2 15
+read equation
+(echo ".EQ"; echo 'delim $$'; echo ".EN"; echo '$'"${equation}"'$') | \
+ groff -e $groff_opts -Tps >${tmp}.ps \
+ && convert -crop 0x0 $convert_opts ${tmp}.ps ${tmp}.${format} \
+ && cat ${tmp}.${format}
+
+# End
diff --git a/contrib/groff/contrib/groffer/ChangeLog b/contrib/groff/contrib/groffer/ChangeLog
new file mode 100644
index 0000000..263dbcd
--- /dev/null
+++ b/contrib/groff/contrib/groffer/ChangeLog
@@ -0,0 +1,460 @@
+2002-09-30 Bernd Warken <bwarken@mayn.de>
+ ________________________________________________________________
+ * release of groffer 0.9.1
+
+ * TODO: remove done entries
+ - Remove request for different shells.
+ - Remove the 'sed' complaints.
+
+2002-07-15 Bernd Warken <bwarken@mayn.de>
+
+ * groffer.sh: replace `sed' interface by direct `sed'
+ - This improves the performance of the shell programming parts
+ and shortens the groffer script by about 5%.
+ - Remove functions: string_del_append(), string_del_leading(),
+ string_del_trailing(), string_flatten(), string_get_before(),
+ string_get_leading(), string_replace_all(), string_sed_s(),
+ and their auxiliary functions.
+ - Replace all calls of these functions by direct `sed' commands.
+ - Define variables for special characters to ease `sed' calls.
+ - Remove `$APPEND'.
+ - Restrict list_from_string() to single character separators.
+ - Correct list_check() and base_name().
+ - Add comments to all calls of `sed'.
+
+ * groffer.sh: add run-time support for several shells
+ - New option `--shell': stop execution and rerun groffer under
+ the shell specified in the argument of `--shell'.
+ - If no shell was specified at run-time, `ash' is tried first;
+ if `ash' is not available continue with the shell with which
+ groffer was called from the command line, or with the shell
+ name in the first line of the script, actually `/bin/sh'.
+
+2002-07-12 Bernd Warken <bwarken@mayn.de>
+ ________________________________________________________________
+ * fixes for groffer 0.9.0
+
+ * groffer.sh: enhance version information
+ `groffer -v|--version' now print:
+ - groffer's version number and date
+ - the string `is part of '
+ - groff's version information (version number and copyright),
+ but not groff's `called subprograms' information.
+
+ * groffer.sh: minor fixes
+ - Fix the argument parser to process argument `-' correctly.
+ - Some display programs have trouble with empty input; feed a
+ line consisting of a single space character in this case for
+ all display modes (not for source or groff modes).
+
+ * TODO:
+ fix entry `shoop' (not 'shopt').
+
+2002-06-28 Bernd Warken <bwarken@mayn.de>
+ ________________________________________________________________
+ * release of groffer 0.9.0
+
+ * groffer.sh: new mode `pdf'
+ - PDF (Portable Document Format):
+ -> Transform groff `ps' output into pdf using `gs'.
+ -> Pro: PDF viewers provide text searching (!).
+ -> Con: the transformation is quite slow.
+ -> Not suitable as an auto mode.
+ - New options `--pdf', `--pdf-viewer', `--mode pdf'.
+ - Standard pdf viewers `xpdf' and `acroread'.
+ - For `xpdf', choose zoom `z 3' for 100 dpi, `z 2' for 75 dpi.
+
+ * groffer.sh: support bzip2 decompression
+ - add test for `bzip2' with necessary options
+ - extend functions `catz()' and `save_stdin()'.
+
+ * TODO
+ remove entry on `bzip' decompression (done).
+
+ * groffer.man:
+ - Document new `pdf' features.
+ - Document new `bzip2' decompression.
+ - Fix documentation for `--auto-modes'.
+
+ * groffer.sh: minor fixes
+ - Improve device tests in `tty' and `dvi' modes.
+ - Internally, map mode `auto' to '' to facilitate tests.
+ - Fix auto mode sequence to: `ps,x,tty' as was intended.
+
+2002-06-25 Bernd Warken <bwarken@mayn.de>
+
+ * groffer.sh:
+ Fix `source' mode.
+
+ * groffer.man:
+ Fix some indentations.
+
+2002-06-23 Bernd Warken <bwarken@mayn.de>
+ ________________________________________________________________
+ * release of groffer 0.8
+
+ * Makefile.sub: add copyright section
+
+ * groffer.man:
+ - Document the new options.
+ - Revise the documentation of the modes.
+ - Document the configuration files in new section `FILES'.
+ - Redesign section `EXAMPLES'.
+ - Remove documentation for `-W'.
+
+ * groffer.sh: new debugging features
+ - Disabled by default; enabled by environment variables.
+ - Add landmark() to catch typos with quotes.
+ - Add a function call stack for suitable functions; implemented
+ as within the argument checker func_check().
+ - This implies the need to provide `return' with some clean-up
+ facility; implemented as `eval "$_return_..."'.
+ - Add option `--debug' to enable debugging at run-time.
+ - Actually, the groffer script uses only shell builtins found
+ in `ash' (a subset of POSIX) and POSIX `sed' as the only
+ external shell utility.
+
+ * groffer.sh: customization of viewers
+ - In `groff' mode, the groffer viewing facilities are disabled.
+ - The postprocessor option `-P' costumizes the viewer only in
+ some situations in the `groff' mode, so a new infrastructure
+ for viewer customization is necessary.
+ - Allow to specify arguments to the viewer programs specified
+ in `--*-viewer()'.
+ - Implement some of the essential X Toolkit resource options in
+ groffer, but with use a leading double minus.
+ -> `--bd': set border color.
+ -> `--bg', `--background': set background color.
+ -> `--bw': set border width.
+ -> `--display': set X display.
+ -> `--geometry': set size and position of viewer window.
+ -> `--fg', `--foreground': set foreground color.
+ -> `--ft', `--font': set font.
+ -> `--resolution': set X resolution in dpi.
+ -> `--title': set viewer window title.
+ -> `--xrm': set X resource.
+ - Remove misnamed option `--xrdb'.
+
+ * groffer.sh: new mode structure
+ - New Postcript mode `ps' (`--ps'):
+ -> default viewers: gv,ghostview,gs_x11,gs;
+ -> `--ps-viewer' sets the Postscript viewer.
+ - New mode `www' (`--www') for displaying in a web browser:
+ -> default browsers: mozilla,netscape,opera,amaya,arena;
+ -> `--www-viewer' sets the web browser.
+ - New dvi mode (`--dvi'); default viewer `xdvi':
+ -> default viewers: xdvi,dvilx;
+ -> `--dvi-viewer' sets the dvi viewer.
+ - New mode `auto':
+ -> active if no other mode is given or by new option `--auto';
+ -> selects from a sequence of modes that are tested until one
+ of them succeeds.
+ -> the default mode sequence is actually `ps', `x', `tty'.
+ -> `--default-modes' sets this mode sequence as a comma
+ separated string of program names, optionally each one
+ with arguments).
+ - New mode `groff':
+ -> process input like groff, ignore viewing options.
+ -> activated by new option `--groff'.
+ -> automatically active with one of `-V', `-X', `-Z'.
+ - Revise `tty' mode:
+ -> allow several text devices.
+ ->
+ - Reorganize the mode management:
+ -> new mode setting option `--mode'.
+ -> logically separate source, groff, and display modes.
+ -> intermediate output mode is now part of mode groff; remove
+ any special features around `-Z'.
+ - Update usage() to reflect the new option structure.
+
+ * groffer.sh: add configuration files
+ - `/etc/groff/groffer.conf' system-wide configuration.
+ - `${HOME}/.groff/groffer.conf' user configuration.
+ - The configuration file are shell scripts for now; later
+ implementations can identify this from the `#! /bin/sh' line.
+
+ * groffer.sh: new data structure `list':
+ - Implement a `list' data structure as a string consisting of
+ single-quoted elements, separated by a space character;
+ embedded single-quotes are escaped.
+
+ * groffer.sh: new option parser based on `list':
+ - Write new option parser based on `list', compatible to both
+ POSIX getopts() and GNU getopt().
+ - Long options are now available on GNU and non-GNU systems.
+ - Get rid of POSIX getopts() and GNU getopt().
+ - the `-W--longopt' construct is now obsolete; remove it.
+ - add test/function for `unset'.
+ - Option strings are now implemented as `list's in order to
+ allow unusual characters in options.
+ - Parse $MANOPT first; translate essential arguments into
+ groffer options.
+
+ * groffer.man:
+ - determine prompt length for `.Shell_cmd'* dynamically.
+ - naming scheme for static strings and registers changed to
+ `namespace:macro.variable'.
+
+
+2002-06-16 Werner Lemberg <wl@gnu.org>
+
+ * groffer.sh:
+ Implement man option `--ascii' by `-mtty-char'.
+
+
+2002-05-31 Werner LEMBERG <wl@gnu.org>
+
+ * groffer.man (@.Shell_cmd_width):
+ Increase to 4m (we use `sh#' as the prompt).
+
+
+2002-05-31 Bernd Warken <bwarken@mayn.de>
+ ________________________________________________________________
+ * release of groffer 0.7
+
+ * groffer.sh: remove incompatibilities with the `ash' shell:
+ - do not use `!command':
+ -> use `else'
+ -> write `_not_' equivalents for some functions
+ - do not use `[^]' in `case':
+ -> restructure some functions.
+ - only single-character names for loop variables:
+ -> spoils the paradigm of leading `_' for local variables.
+ - spurious trouble with `for i in ${var}':
+ -> use `eval set -- ${var}' and `for i in "$@"'
+ - do not change or use $IFS:
+ -> define new functions string_split() and `path_split()'.
+ -> result must be processed by `eval set --'.
+ -> solve conflicts with existing positional parameters.
+ - trouble with exporting external `$GROFF_*' variables:
+ -> hope that they were exported in the calling shell.
+ - not smart about additional blanks:
+ -> remove unnecessary white space.
+
+ * groffer.sh: improve run-time speed:
+ - `ash' more than doubles the speed of `bash'.
+ - speed-up `man_setup()'.
+
+
+2002-05-30 Werner Lemberg <wl@gnu.org>
+
+ * groffer.man:
+ - remove some wrong `\:'.
+ - rename macro names that start with a `[' (clashes with refer).
+ - fix TP_header.
+
+
+2002-05-28 Bernd Warken <bwarken@mayn.de>
+ ________________________________________________________________
+ * release of groffer 0.6
+
+ This is almost a complete rewrite since groffer 0.5 .
+ ________________________________________________________________
+ * Documentation
+
+ * groffer.man:
+ - Apply the changes done in www.tmac (.URL and .MTO)
+ - Replace \fP by \f[].
+ - Redesign and rewrite most macros.
+ - Include the documentation for the new features.
+ - Greatly enlarge section ENVIRONMENT
+ - Add examples.
+
+ * TODO:
+ - Start a TODO file with several sections.
+
+ * ChangeLog:
+ Due to the many changes, shorten and rearrange the entries
+ since groffer 0.5 .
+ ________________________________________________________________
+ * Shell compatibility
+
+ * groffer.sh:
+ - Due to possible conflicts in old BSD versions, `[]' was
+ replaced by `test'; the `test' options `-a' and `-o' were
+ replaced by multiple calls of `test'.
+ - Write interface to the `sed' command `s' to become
+ independent of the delimiter character. Rewrite all text
+ manipulating function to use this new scheme. The new
+ functions are named `string_*'.
+ - `tr' is not needed any longer, replaced by `sed'.
+ - `grep' is not needed any longer, mostly replaced by `case'.
+ - Revision of test for `getopt'.
+ - Remove `set -a'; explicitly export variables.
+ - The only external programs used are POSIX `sed' and the
+ fallback to `apropos'. All other program calls were
+ replaced by shell builtins and functions.
+
+ ________________________________________________________________
+ * Cosmetics
+
+ * groffer.sh:
+ - Implement a prefix based naming scheme for local variables
+ and functions (OOP-like).
+ - Introduce variables for white space (better readability with
+ $IFS).
+ - Store the names of the processed filespecs into a variable
+ instead of a temporary file.
+ - Error-prone shell constructions were replaced by functions
+ with a simple interface.
+ - To avoid too long pipes, replace supercat() by do_fileargs();
+ every input file is handled independently.
+
+ ________________________________________________________________
+ * New features:
+ - Add support for more X devices (e.g. X75-12 and X100-12).
+ - Add long option `--intermediate_output' to `-Z'.
+ - Make the options for mode selection clobber each other.
+ - Add option `--mode' with an argument having the following
+ values:
+ `X': force displaying in X, same as options `-X';
+ `tty': display with a pager on text terminal; same as `--tty';
+ `source', `default', `auto', etc.
+ - Make the handling of the X mode like in groff (e.g. -X -Tps).
+ - Make resolution for gxditview behave like groff (default
+ 75 dpi).
+ - Add environment variable $GROFFER_OPT to preset groffer
+ options.
+
+ ________________________________________________________________
+ * implement most of the functionality of GNU `man'.
+
+ - Add all `man' long options to groffer.
+ - Add all `man' environment variables.
+ - Parse and use content of `$MANOPT'.
+ - The precedence of the options and environment variables
+ is regulated like in GNU `man'.
+ - Force the option `--manpath' to have a colon-separated
+ argument like GNU `man'.
+ - Support `man section name' calling convention.
+ - Remove all dependencies on `man -w'.
+
+ * groffer.sh:
+ - Add the new features above.
+ - Rewrite the search algorithm for man pages.
+ - Remove searching with `man -w' (problems with space
+ characters in file names).
+ - Fix and complement usage().
+ - The filespec parsers gets a function of its own do_manpage().
+
+
+2002-01-08 Bernd Warken <bwarken@mayn.de>
+
+ * groffer 0.5 (beta) released
+
+ * groffer.man:
+ - Fix hyphenation problems with macros describing options.
+ - Fix the handling of some `-' characters.
+ - Examples of shell commands now print in font CR instead of CB.
+ - Remove documentation for option `-X'.
+ - Add documentation for option `--dpi'.
+
+ * groffer.sh:
+ - New method for creating temporary files, based on process
+ IDs. This is reliable enough and suitable for GNU and POSIX.
+ - Run gxditview in a new shell instantiation for having a clean
+ handling of the temporary files when running in the
+ background.
+ - Revision of the retrieving method for the window title.
+ - Empty input is now tolerated.
+ - Export the variables that are set before the call of `set -a'.
+ - Function usage() corrected and updated.
+ - Unnecessary stuff removed.
+ - Comments adjusted.
+ - Pass option `-X' to groff, i.e. force X output with 75 dpi.
+ - Implement option `--dpi' for setting the resolution for the X
+ viewer, which had already been documented in earlier versions.
+
+2002-01-07 Bernd Warken <bwarken@mayn.de>
+
+ * groffer 0.4 (beta) released (as groff `contrib')
+
+ * groffer.man:
+ - New features documented.
+ - Macros stream-lined.
+ - Section EXAMPLES added.
+
+ * groffer.sh:
+ - System tests added/optimized.
+ - Speed/memory optimizations by defining some shell functions
+ alternatively depending on the text results.
+ - Use `gzip' for decompression instead of `zcat'.
+ - Signal handling added for clean exiting by `trap'.
+ - Temporary files exist only as long as necessary.
+ - Setup of path for man-pages moved after the option parsing.
+ - Fixed a bug in determining the path for man-pages.
+ - Fixed a bug in the handling of non-groffer options.
+
+ * New features:
+ - New option --tty for forcing paging on text terminal.
+ - New option --no-man for disabling the man-page feature.
+ - Implement reserved POSIX -W feature to simulate long options.
+ - gxditview is now run as a background process.
+
+2002-01-05 Werner LEMBERG <wl@gnu.org>
+
+ * Integrate groffer into groff's `contrib' tree.
+
+ * Makefile: Replaced by...
+ Makefile.sub: New file.
+
+ * groffer: Replaced by...
+ groffer.sh: New file.
+
+ * groffer.man (OptDef): Add missing backslashes.
+ Update copyright.
+
+2001-12-15 Bernd Warken <bwarken@mayn.de>
+
+ * groffer 0.3 (alpha) released (still stand-alone package).
+
+ * GNU and POSIX are supported (POSIX without long options).
+
+ * New options : --man, --mandb, --title, --xrdb
+
+ * Support for command line arguments with embedded single space
+ characters (GNU only) .
+
+ * Several search methods for man-pages when no `man -w' is
+ available ($MANPATH, mandb, a default path).
+
+ * Language support for man-pages.
+
+ * Recognize the following filespecs as man-page parameters:
+ man:name(section), man:name, name.section, name.
+
+2001-12-03 Bernd Warken <bwarken@mayn.de>
+
+ * Stand-alone package for groffer 0.2 (alpha) created
+ Files: groffer, groffer.man, Makefile, TODO, ChangeLog
+
+2001-12-02 Bernd Warken <bwarken@mayn.de>
+
+ * groffer 0.2 (alpha) program released.
+
+ * Name changed from `groffview' to `groffer'.
+
+ * Comments added.
+
+ * Name changed from `groffview' to `groffer'.
+
+ * Options harmonized with groff.
+ New options : -Q --source, -T --device, -X .
+ Other options known from groff are passed unchanged.
+
+ * 100 dpi as default, 75 dpi only in emergency situations.
+
+ * Bugs with temporary files fixed.
+
+ * Code restructured and comments added.
+
+2001-11-28 Bernd Warken <bwarken@mayn.de>
+
+ ***** groffview 0.1 (experimental) and groffview.man released
+ (predecessor of groffer, shell script)
+
+ * Options : -h --help, -v --version
+
+ * Search for man-pages based on $MANPATH
+
+ * development of `groffview' shell script started
diff --git a/contrib/groff/contrib/groffer/Makefile.sub b/contrib/groff/contrib/groffer/Makefile.sub
new file mode 100644
index 0000000..4be6846
--- /dev/null
+++ b/contrib/groff/contrib/groffer/Makefile.sub
@@ -0,0 +1,47 @@
+# Makefile.sub for `groffer' (integration into the groff source tree)
+
+# File position: <groff-source>/contrib/groffer/Makefile.sub
+
+# Last update: 23 June 2002
+
+# Copyright (C) 2001,2002 Free Software Foundation, Inc.
+# Written by Werner Lemberg <wl@gnu.org>
+
+# This file is part of groff.
+
+# groff is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# groff is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with groff; see the file COPYING. If not, write to the
+# Free Software Foundation, 59 Temple Place - Suite 330, Boston,
+# MA 02111-1307, USA.
+
+########################################################################
+
+MAN1=groffer.n
+CLEANADD=groffer
+
+all: groffer
+
+groffer: groffer.sh
+ rm -f $@; \
+ sed -e "s|@g@|$(g)|g" \
+ -e "s|@VERSION@|$(version)$(revision)|" \
+ -e $(SH_SCRIPT_SED_CMD) $(srcdir)/groffer.sh >$@; \
+ chmod +x $@
+
+install_data: groffer
+ -test -d $(bindir) || $(mkinstalldirs) $(bindir)
+ -rm -f $(bindir)/groffer
+ $(INSTALL_SCRIPT) groffer $(bindir)/groffer
+
+uninstall_sub:
+ -rm -f $(bindir)/groffer
diff --git a/contrib/groff/contrib/groffer/TODO b/contrib/groff/contrib/groffer/TODO
new file mode 100644
index 0000000..6ff8f65
--- /dev/null
+++ b/contrib/groff/contrib/groffer/TODO
@@ -0,0 +1,53 @@
+# TODO file for `groffer'
+
+# File position: <groff-source>/contrib/groffer/TODO
+
+# Last update: 30 Sep 2002
+
+# Copyright (C) 2001,2002 Free Software Foundation, Inc.
+# Written by Bernd Warken <bwarken@mayn.de>
+
+# This file is part of groff.
+
+# groff is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# groff is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+
+# You should have 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
+
+Optimization:
+- Optimize man path determination in manpath_add_lang_sys() for speed
+ by building-up the man path only by and by as far as necessary
+ (not trivial).
+
+Features:
+- Consider using the `shoop' package (OOP for `sh').
+- Revise option handling of `grog'.
+- `gxditview' needs a complete shower.
+
+Revision:
+- Should there be a native implementation for `--apropos'?
+- Revise the `--all' feature to better reflect GNU man.
+- The debug function stack is buggy (no effect on normal operation).
+
+Documentation:
+- Write a README file.
+- Improve the documentation of the search algorithm for man pages in
+ both the groffer script and the man page `groffer.man'.
+- In `groff.man', add more documentation for parts that were taken over
+ from GNU `man'.
+- The documentation in the headers for some function definitions in
+ `groffer.sh' needs to be updated.
diff --git a/contrib/groff/contrib/groffer/groffer.man b/contrib/groff/contrib/groffer/groffer.man
new file mode 100644
index 0000000..fd72504
--- /dev/null
+++ b/contrib/groff/contrib/groffer/groffer.man
@@ -0,0 +1,2836 @@
+.TH GROFFER @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+groffer \- display groff files and man\~pages on X and tty
+.
+.SH "SYNOPSIS"
+.\" The .SH was moved to this place in order to appease `apropos'.
+.
+.\" --------------------------------------------------------------------
+.\" Legalize
+.\" --------------------------------------------------------------------
+.
+.ig
+groffer.1 - man page for groffer (section 1).
+
+Source file position: <groff_source_top>/contrib/groffer/groffer.man
+Installed position: $prefix/share/man/man1/groffer.1
+
+Version : groffer 0.9.1
+Last update : 30 Sep 2002
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+Written by Bernd Warken <bwarken@mayn.de>
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHORS, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.mso www.tmac
+.
+.if n \{\
+. mso tty-char.tmac
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.if '\*[.T]'dvi' \{\
+. ftr CB CW
+.\}
+.
+.ds @- "\-\""
+.ds @-- "\-\^\-\""
+.
+.ds @b- "\f[CB]-\f[]\""
+.ds @b-- "\f[CB]--\f[]\""
+.
+.ds @i- "\f[CI]-\f[]\""
+.ds @i-- "\f[CI]--\f[]\""
+.
+.ds Ellipsis .\|.\|.\"
+.
+.\" --------------------------------------------------------------------
+.\" setup for the macro definitions below
+.\"
+.\" naming: namespace:cathegory_macro.variable_name (experimental)
+.
+.\" --------------------------------------------------------------------
+.\" configuration of prompt for `.Shell_cmd'* macros
+.ds groffer:Shell_cmd.prompt_text sh#\" prompt for shell commands
+.ds groffer:Shell_cmd+.prompt_text >\" prompt on continuation lines
+.ds groffer:Shell_cmd_base.prompt_font I\" font for prompts
+.
+.\" automatically determine setup from the configuration above
+.als @f groffer:Shell_cmd_base.prompt_font\"
+.als @t groffer:Shell_cmd.prompt_text\"
+.als @t+ groffer:Shell_cmd+.prompt_text\"
+.ds groffer:Shell_cmd.prompt \f[\*[@f]]\*[@t]\f[]\" needed
+.ds groffer:Shell_cmd+.prompt \f[\*[@f]]\*[@t+]\f[]\" needed
+.nr @w \w'\*[groffer:Shell_cmd.prompt]'\"
+.nr @w+ \w'\*[groffer:Shell_cmd+.prompt]'\"
+.ft \*[@f]
+.\" Full prompt width is maximum of texts plus 1m
+.nr groffer:Shell_cmd_base.prompt_width (\n[@w]>?\n[@w+]+1m)\" needed
+.ft
+.rm @f
+.rm @f+
+.rm @t
+.rm @t+
+.rr @w
+.rr @w+
+.
+.\" --------------------------------------------------------------------
+.\" static register for inter-macro communication in `.Synopsis'*
+.nr groffer:Synopsis.level 0
+.
+.\" --------------------------------------------------------------------
+.\" static registers for inter-macro communication in `.TP'*
+.nr groffer:TP.level 0
+.rr groffer:TP_header.flag
+.rr groffer:TP_body.flag
+.rr groffer:TP.indent
+.
+.
+.\" --------------------------------------------------------------------
+.\" Macro definitions
+.
+.\" Ignore all arguments like a comment, even after a .eo call.
+.de c
+..
+.c --------------------------------------------------------------------
+.c .CB (<text>...)
+.c
+.c Print in constant-width bold font.
+.c
+.de CB
+. ft CB
+. Text \\$*
+. ft
+..
+.c --------------------------------------------------------------------
+.c .CI (<text>...)
+.c
+.c Print in constant-width italic font.
+.c
+.de CI
+. ft CI
+. Text \\$*
+. ft
+..
+.c --------------------------------------------------------------------
+.c .CR (<text>...)
+.c
+.c Print in constant-width roman font.
+.c
+.de CR
+. ft CR
+. Text \\$*
+. ft
+..
+.c --------------------------------------------------------------------
+.c .Error (<text>...)
+.c
+.c Print error message to terminal and abort.
+.c
+.de Error
+. tm \\$*
+. ab
+..
+.c --------------------------------------------------------------------
+.c .Env_var (<env_var_name> [<punct>])
+.c
+.c Display an environment variable, with optional punctuation.
+.c
+.de Env_var
+. nh
+. SM
+. Text \f[CB]\\$1\f[]\\$2
+. hy
+..
+.c --------------------------------------------------------------------
+.c .Opt_- ([<punct>])
+.c
+.c Print `-' (minus sign); optional punctuation.
+.c
+.de Opt_-
+. ie (\\n[.$] == 0) \
+. Opt_alt - ""
+. el \
+. Opt_alt - "" "\\$1"
+..
+.c --------------------------------------------------------------------
+.c .Opt_[-] ([<punct>])
+.c
+.c Print `Opt_[-]' (minus sign in brackets); optional punctuation.
+.c
+.de Opt_[-]
+. ie (\\n[.$] == 0) \
+. Opt_[alt] - ""
+. el \
+. Opt_[alt] - "" "\\$1"
+..
+.c --------------------------------------------------------------------
+.c .Opt_-- ([<punct>])
+.c
+.c Print `--' (double minus); optional punctuation.
+.c
+.de Opt_--
+. ie (\\n[.$] == 0) \
+. Opt_alt -- ""
+. el \
+. Opt_alt -- "" "\\$1"
+..
+.c --------------------------------------------------------------------
+.c .Opt_[--] ([<punct>])
+.c
+.c Print `Opt_[--]' (double minus in brackets); optional punctuation.
+.c
+.de Opt_[--]
+. ie (\\n[.$] == 0) \
+. Opt_[alt] -- ""
+. el \
+. Opt_[alt] -- "" "\\$1"
+..
+.c --------------------------------------------------------------------
+.c .Opt_alt ([<minus> <opt>]... [<arg> [<punct>]])
+.c
+.c Alternate options separated by a vertical bar.
+.c
+.c Arguments:
+.c minus: either `-' or `--' (font CB).
+.c opt: a name for an option, empty allowed (font CB).
+.c arg: optionally, the argument to the option (font I).
+.c punct: optional punctuation (in the starting font).
+.c Result:
+.c The minus/opt argument pairs, each
+.c separated by a vertical bar `|', optionally add 'arg', separated
+.c a space character ` '.
+.c
+.c Example:
+.c .Opt_alt - T -- device -- device-troff device .
+.c results in
+.c -T|--device|--device-troff device.
+.c
+.de Opt_alt
+. Opt_alt_base "" | "" \\$@
+..
+.c --------------------------------------------------------------------
+.c .Opt_[alt] ([<minus> <opt>]... [<arg> [<punct>]])
+.c
+.c Alternate options in brackets for section SYNOPSIS.
+.c
+.c Arguments:
+.c minus: either `-' or `--' (font CB).
+.c opt: a name for an option, empty allowed (font CB).
+.c arg: optionally, the argument to the option (font I).
+.c punct: optional punctuation (in the starting font).
+.c Global strings written to:
+.c `@oa_prefix': left enclosing character (`[')
+.c `@oa_sep': separator (`|')
+.c `@oa_postfix': right enclosing character (`]')
+.c Result:
+.c The minus/opt argument pairs, each separated by a vertical
+.c bar `|', optionally add 'arg', separated by a space character ` '.
+.c
+.c Example:
+.c .Opt_[alt] - T -- device -- device-troff device .
+.c results in
+.c [-T|--device|--device-troff device].
+.c
+.de Opt_[alt]
+. Opt_alt_base [ | ] \\$@
+..
+.c --------------------------------------------------------------------
+.c .Opt_alt_base (<pre> <sep> <post> [<minus> <opt>]... [arg [punct]])
+.c
+.c Alternating options; base macro for many others; do not use directly.
+.c
+.c Arguments:
+.c <pre>: prefix, resulted is preceded by this.
+.c <sep>: separator between minux/opt pairs.
+.c <post>: postfix, is appended to the result.
+.c <minus>: either `-' or `--' (font CB).
+.c <opt>: a name for an option, empty allowed (font CB).
+.c <arg>: optionally, the argument to the option (font I).
+.c <punct>: optional punctuation (in the starting font).
+.c Result:
+.c String `<pre>' followed by the <minus>/<opt> argument pairs, each
+.c separated by string `<sep>', optionally add '<arg>', separated by
+.c a single space ` ', followed by the string `<post>'.
+.c
+.de Opt_alt_base
+. nr @font \\n[.f]\"
+. if (\\n[.$] < 3) \
+. Error .\\0: not enough arguments.
+. ds @pre \)\\$1\)\" prefix
+. ds @sep \)\\$2\)\" separator
+. ds @post \)\\$3\)\" postfix
+. shift 3
+. nr @count 0
+. ds @res \f[CR]\\*[@pre]\"
+. while (\\n[.$] >= 2) \{\
+. c do the pairs, break on no `-'
+. if !'\\$1'-' \{\
+. if !'\\$1'--' \
+. break
+. \}
+. c separator
+. if (\\n[@count] > 0) \
+. as @res \f[CR]\\*[@sep]\"
+. nr @count +1
+. as @res \f[CB]\\$1\\$2\:\" combine minus with option name
+. shift 2
+. \}
+. if (\\n[.$] >= 3) \
+. Error .\\0: wrong arguments: \\$@
+. c all pairs are done
+. ie (\\n[.$] == 0) \
+. as @res \f[CR]\\*[@post]\"
+. el \{\
+. c optional option argument
+. if !'\\$1'' \
+. as @res \f[CR] \,\f[I]\\$1\"
+. shift
+. as @res \\f[CR]\\*[@post]\" postfix
+. if (\\n[.$] >= 1) \{\
+. c add punctuation
+. as @res \f[\\n[@font]]\\$1\"
+. \}
+. \}
+. nh
+. Text \\*[@res]
+. hy
+. ft \\n[@font]
+. rr @count
+. rr @font
+. rm @pre
+. rm @post
+. rm @sep
+. rm @res
+..
+.c --------------------------------------------------------------------
+.c .Opt_def ([<minus> <opt>]... [<arg> [<punct>]])
+.c
+.c Definitions of options in section OPTIONS.
+.c
+.c Arguments:
+.c minus: either `-' or `--' (font CB).
+.c opt: a name for an option, empty allowed (font CB).
+.c arg: optionally, the argument to the option (font I).
+.c punct: optional punctuation (in the starting font).
+.c Result:
+.c The header for an indented paragraph, consisting of
+.c minus/opt argument pairs, each, separated by a space
+.c character ` ', optionally add 'arg', separated a space
+.c character ` '.
+.c
+.c Example:
+.c .Opt_def - T -- device -- device-troff device .
+.c results in
+.c -T --device --device-troff device.
+.c as the header of for indented paragraph.
+.c
+.de Opt_def
+. TP
+. Opt_alt_base "" "\~|\~" "" \\$@
+..
+.c --------------------------------------------------------------------
+.c .Opt_element ([<minus> <opt>]... [<arg> [<punct>]])
+.c
+.c Definitions of options in section OPTIONS.
+.c
+.c Arguments:
+.c minus: either `-' or `--' (font CB).
+.c opt: a name for an option, empty allowed (font CB).
+.c arg: optionally, the argument to the option (font I).
+.c punct: optional punctuation (in the starting font).
+.c Result:
+.c The minus/opt argument pairs, each, separated by a space
+.c character ` ', optionally add 'arg', separated a space
+.c character ` '.
+.c
+.c Example:
+.c .Opt_element - T -- device -- device-troff device .
+.c results in
+.c -T --device --device-troff device.
+.c
+.de Opt_element
+. Opt_alt_base "" "\~" "" \\$@
+..
+.c --------------------------------------------------------------------
+.als Opt_list Opt_element
+.
+.c --------------------------------------------------------------------
+.c .Opt_long ([<name> [<punct>]])
+.c
+.c Print `--name' somewhere in the text; optional punctuation.
+.c
+.de Opt_long
+. Opt_alt -- "\\$1" "" "\\$2"
+..
+.c --------------------------------------------------------------------
+.c .Opt_[long] ([<name> [<punct>]])
+.c
+.c Print `--name' somewhere in the text; optional punctuation.
+.c
+.de Opt_[long]
+. Opt_[alt] -- "\\$1" "" "\\$2"
+..
+.c --------------------------------------------------------------------
+.c .Opt_short ([<name> [<punct>]])
+.c
+.c Print `-name' somewhere in the Text; optional punctuation.
+.c
+.de Opt_short
+. Opt_alt - "\\$1" "" "\\$2"
+..
+.c --------------------------------------------------------------------
+.c .Opt_[short] ([name [punct]])
+.c
+.c Print `[-name]' somewhere in the Text; optional punctuation.
+.c
+.de Opt_[short]
+. Opt_[alt] - "\\$1" "" "\\$2"
+..
+.c --------------------------------------------------------------------
+.c .Shell_cmd (<CR> [<CI>] ...)
+.c
+.c A shell command line; display args alternating in fonts CR and CI.
+.c
+.c Examples:
+.c .Shell_cmd "groffer --dpi 100 file"
+.c result: `sh# groffer --dpi 100 file'
+.c with 'sh#' in font I, the rest in CR
+.c
+.c .Shell_cmd groffer\~--dpi\~100\~file
+.c result: the same as above
+.c
+.c .Shell_cmd "groffer --dpi=" value " file"
+.c result: sh# groffer --dpi=value file
+.c with `groffer --dpi=' and `file' in CR; `value' in CI
+.c
+.c .Shell_cmd groffer\~--dpi= value \~file
+.c result: the same as the previous example
+.c
+.de Shell_cmd
+. groffer:Shell_cmd_base "\*[groffer:Shell_cmd.prompt]" \\$@
+..
+.c --------------------------------------------------------------------
+.c .Shell_cmd+ (<CR> [<CI>] ...)
+.c
+.c A continuation line for .Shell_cmd.
+.c
+.de Shell_cmd+
+. groffer:Shell_cmd_base "\*[groffer:Shell_cmd+.prompt]" \\$@
+..
+.c --------------------------------------------------------------------
+.c .Shell_cmd_base (<prompt> [<CR> [<CI>] ...])
+.c
+.c A shell command line; display args alternating in fonts CR and CI.
+.c Internal, do not use directly.
+.c
+.c Globals: read-only register @.Shell_cmd_width
+.c
+.de groffer:Shell_cmd_base
+. if (\\n[.$] <= 0) \
+. return
+. nr @+font \\n[.f]\"
+. ds @prompt \\$1\"
+. ft CR
+. c gap between prompt and command
+. nr @+gap \\n[groffer:Shell_cmd_base.prompt_width]-\\w'\\*[@prompt]'\"
+. ds @res \\*[@prompt]\h'\\n[@+gap]u'\"
+. shift
+. ds @cf CR\"
+. while (\\n[.$] > 0) \{\
+. as @res \\f[\\*[@cf]]\\$1\"
+. shift
+. ie '\\*[@cf]'CR' \
+. ds @cf I\"
+. el \
+. ds @cf CR\"
+. \}
+. br
+. ad l
+. nh
+. nf
+. Text \\*[@res]\"
+. fi
+. hy
+. ad
+. br
+. ft \\n[@+font]
+. rr @+font
+. rr @+gap
+. rm @cf
+. rm @res
+..
+.c --------------------------------------------------------------------
+.c .Synopsis ()
+.c
+.c Begin a synopsis section, to be ended by a ./Synopsis macro.
+.c
+.de Synopsis
+. if (\\n[groffer:Synopsis.level] > 0) \
+. Error .\\$0: previous .Synopsis was not closed by ./Synopsis.
+. nh
+. ds @1 \\$1\"
+. nr @old_indent \\n(.i
+. ad l
+. in +\w'\fB\\*[@1]\0'u
+. ti \\n[@old_indent]u
+. B \\*[@1]\0\c
+. rr @old_indent
+. rm @1
+. nr groffer:Synopsis.level +1\" marker for ./Synopsis
+..
+.c --------------------------------------------------------------------
+.c ./Synopsis ()
+.c
+.c Close a synopsis section opened by the previous .Synopsis macro.
+.c
+.de /Synopsis
+. if (\\n[groffer:Synopsis.level] <= 0) \
+. Error .\\$0: no previous call of .Synopsis
+. br
+. ad
+. in
+. hy
+. nr groffer:Synopsis.level -1
+..
+.c --------------------------------------------------------------------
+.c .Text (<text>...)
+.c
+.c Treat the arguments as text, no matter how they look.
+.c
+.de Text
+. if (\\n[.$] == 0) \
+. return
+. nop \)\\$*\)
+..
+.c --------------------------------------------------------------------
+.c .Topic ([<indent>])
+.c
+.c A bulleted paragraph
+.c
+.de Topic
+. ie (\\n[.$] = 0) \
+. ds @indent 2m\"
+. el \
+. ds @indent \\$1\"
+. TP \\*[@indent]
+. Text \[bu]
+. rm @indent
+..
+.c --------------------------------------------------------------------
+.c .TP+ ()
+.c
+.c Continuation line for .TP header.
+.c
+.de TP+
+. br
+. ns
+. TP \\$1
+..
+.c --------------------------------------------------------------------
+.c .TP_header ([<indent>])
+.c
+.c Start a multi-line header for a .TP-like paragraph
+.c
+.de TP_header
+. if (\\n[groffer:TP.level] < 0) \
+. Error .\\$0: wrong level.
+. nr groffer:TP.level +1
+. P
+. ie (\\n[.$] == 0) \
+. rr groffer:TP.indent
+. el \
+. nr groffer:TP.indent \\$1
+. nr groffer:TP_header.flag 1
+..
+.c --------------------------------------------------------------------
+.c .TP_body ([<indent>])
+.c
+.c End a previous .TP-header and beging the body of the paragraph.
+.c
+.de TP_body
+. if !rgroffer:TP_header.flag \
+. Error .\\$0: no previous call of .TP_header
+. if (\\n[groffer:TP.level] <= 0) \
+. Error .\\$0: wrong level.
+. br
+. ie (\\n[.$] == 0) \{\
+. ie rgroffer:TP.indent \{\
+. RS \\n[groffer:TP.indent]u
+. \}
+. el \
+. RS
+. \}
+. el \
+. RS \\$1u
+. rr groffer:TP.indent
+. rr groffer:TP_header.flag
+. nr groffer:TP_body.flag 1
+..
+.c --------------------------------------------------------------------
+.c TP_end ()
+.c
+.c End of former .TP_body paragraph.
+.c
+.de TP_end
+. if !rgroffer:TP_body.flag \
+. Error .\\$0: no previous .TP_body.
+. if (\\n[groffer:TP.level] <= 0) \
+. Error TP_end: wrong level.
+. nr groffer:TP.level -1
+. rr grogger:TP.indent
+. rr groffer:TP_header.flag
+. rr groffer:TP_body.flag
+. br
+. RE
+..
+.
+.\" End of macro definitions
+.
+.
+.\" --------------------------------------------------------------------
+.\" SH "SYNOPSIS"
+.\" --------------------------------------------------------------------
+.
+.ad l
+.Synopsis groffer
+.RI [ viewing_options ]
+.RI [ man_options ]
+.RI [ groff_options ]
+.Opt_[--]
+.RI [ "filespec" "\*[Ellipsis]]"
+./Synopsis
+.
+.Synopsis groffer
+.Opt_alt - h -- help
+./Synopsis
+.
+.Synopsis groffer
+.Opt_alt - v -- version
+./Synopsis
+.
+.
+.TP
+.I viewing_options
+These options determine and configure the display mode.
+.
+They were synchronized with the options of both
+.BR groff (@MAN1EXT@)
+and GNU
+.BR man (1).
+As groff uses almost any letter in its option set, only long option
+names are available for most features.
+.
+If none of these options is used groffer tries to find a suitable
+display mode automatically.
+.
+.
+.RS
+.
+.P
+.Opt_[alt] - Q -- source
+.Opt_[alt] - T -- device device
+.Opt_[alt] -- auto-modes mode1,mode2,\*[Ellipsis]
+.Opt_[alt] -- debug
+.Opt_[alt] -- default
+.Opt_[alt] -- dvi
+.Opt_[alt] -- dvi-viewer prog
+.Opt_[alt] -- groff
+.Opt_[alt] -- location
+.Opt_[alt] -- mode display_mode
+.Opt_[alt] -- pager program
+.Opt_[alt] -- pdf
+.Opt_[alt] -- pdf-viewer prog
+.Opt_[alt] -- ps
+.Opt_[alt] -- ps-viewer prog
+.Opt_[alt] -- shell
+.Opt_[alt] -- tty
+.Opt_[alt] -- www
+.Opt_[alt] -- www-viewer prog
+.Opt_[alt] -- x
+.Opt_[alt] -- x-viewer prog
+.
+.
+.P
+The following long options were adapted from the corresponding X
+Toolkit options with a single leading minus; see
+.BR X (1).
+.
+.
+.P
+.Opt_[alt] -- bd
+.Opt_[alt] -- bg -- background
+.Opt_[alt] -- bw
+.Opt_[alt] -- display
+.Opt_[alt] -- fg -- foreground
+.Opt_[alt] -- ft -- font
+.Opt_[alt] -- geometry size_pos
+.Opt_[alt] -- resolution value
+.Opt_[alt] -- rv
+.Opt_[alt] -- title string
+.Opt_[alt] -- xrm X_resource
+.
+.RE
+.
+.
+.TP
+.I groff_options
+Any combination of (short) options from the
+.BR groff (@MAN1EXT@)
+program is accepted; the options that are not explicitly handled by
+groffer are transparently passed to groff.
+.
+Due to the automatism in groffer, none of these groff options should
+be necessary, except for advanced usage.
+.
+.
+.RS
+.
+.P
+Because of the special outputting behavior of the groff options
+.Opt_short V,
+.Opt_short X,
+and
+.Opt_short Z,
+groffer was designed to be switched into
+.I groff
+mode by each of these options; in this mode, the groffer viewing
+features are disabled.
+.
+.P
+The other groff options do not switch the mode, but allow to customize
+the formatting process.
+.
+Useful groff formatting options include
+.Opt_short m
+(to add macro files that cannot be recognized by grog), and
+.Opt_short T
+(to specify an alternative device for the modes
+.I tty
+and
+.IR x ).
+.
+.RE
+.
+.
+.TP
+.I man_options
+These options regulate whether and how man pages are searched.
+.
+They are compatible with the long options of the
+.I GNU man
+program.
+.
+.
+.RS
+.
+.P
+.Opt_[alt] -- all
+.Opt_[alt] -- ascii
+.Opt_[alt] -- apropos
+.Opt_[alt] -- ditroff
+.Opt_[alt] -- extension suffix
+.Opt_[alt] -- locale language
+.Opt_[alt] -- local-file
+.Opt_[alt] -- man
+.Opt_[alt] -- manpath dir1:dir2:\*[Ellipsis]
+.Opt_[alt] -- no-location
+.Opt_[alt] -- no-man
+.Opt_[alt] -- sections sec1:sec2:\*[Ellipsis]
+.Opt_[alt] -- systems sys1,sys2,\*[Ellipsis]
+.Opt_[alt] -- troff-device device
+.Opt_[alt] -- whatis
+.
+.
+.P
+The GNU
+.I man
+long options that are not mentioned are recognized, but they are just
+ignored because of alternative implementations.
+.
+The full set of long and short options of the GNU man program can be
+passed via the environment variable
+.Env_var $MANOPT ;
+see
+.BR man (1)
+if your system has GNU man installed.
+.
+.RE
+.
+.
+.TP
+.I filespec
+is a sequence of file names or templates for searching
+man\~pages, see
+.BR man (1).
+A
+.I filespec
+can have one of the following forms.
+.
+.
+.RS
+.
+.TP 10m
+.I filename
+the path name of an existing file.
+.
+.
+.TP
+.Opt_short
+stands for standard input (can occur several times).
+.
+.
+.TP
+.BI man: name ( section )
+search the man\~page
+.I name
+in section\~\c
+.IR section .
+.
+.
+.TP
+.BI man: name . section
+search the man\~page
+.I name
+in section\~\c
+.IR section .
+.
+.
+.TP
+.BI man: name
+search the man\~page
+.I name
+in the lowest available section.
+.
+.
+.TP
+.IB name ( section )
+search the man\~page
+.I name
+in section\~\c
+.IR section .
+.
+.
+.TP
+.IB name . section
+search the man\~page
+.I name
+in section\~\c
+.IR section .
+.
+.
+.TP
+.I standard_section
+if this is `1', \*[Ellipsis], `9', `o', or `n' try to retrieve the
+next argument as a man\~page in this section.
+.
+.
+.TP
+.I name
+search for the man\~page
+.I name
+in the lowest available section.
+.
+.
+.P
+No
+.I filespec
+parameters means standard input.
+.
+.RE
+.
+.
+.P
+For details on the options, see section
+.BR OPTIONS .
+.
+.
+.\" --------------------------------------------------------------------
+.SH DESCRIPTION
+.\" --------------------------------------------------------------------
+.
+The
+.I groffer
+program is part of
+.BR groff (@MAN7EXT@).
+It can be used to display arbitrary documents written in the
+.BR roff (@MAN7EXT@)
+formatting language in several different ways, in an X window viewer
+program or in a text terminal.
+.
+The viewer programs can be chosen as the groff native viewer
+.BR gxditview (@MAN1EXT@),
+a Postcript or dvi display program, or a web browser.
+.
+.
+.P
+A search facility for manual pages (
+.IR man\~pages )
+is provided.
+.
+Almost the whole functionality of the
+.I GNU man
+program was provided or suitably adapted.
+.
+This makes the groffer program a valuable tool on systems with a poor
+.I man
+system.
+.
+.
+.P
+The program always concatenates all input specified by the non-option
+parameters of the calling command line or standard input.
+.
+Compressed standard input or files are decompressed on-the-fly.
+.
+.
+.P
+Normally, the input is run through the
+.BR groff (@MAN1EXT@)
+text processor before being displayed.
+.
+By using the option
+.Opt_short Q ,
+the roff source code is displayed without formatting.
+.
+.
+.P
+The formatting process can be regulated by all options that are
+available groff.
+.
+By using the
+.Opt_short T
+option, groffer can be switched to behave exactly like groff without
+using its viewer facilities, but additionally with the search and
+decompression features.
+.
+.
+.P
+All necessary options can be determined automatically.
+.
+For example, the groffer program internally uses the
+.BR grog (@MAN1EXT@)
+program to determine from the unformatted document which preprocessors
+should be run and which macro files should be included.
+.
+But all parts of the program can be controlled manually by suitable
+options.
+.
+.
+.\" --------------------------------------------------------------------
+.SH OPTIONS
+.\" --------------------------------------------------------------------
+.
+The groffer program provides its own parser for command line options
+that is compatible to both POSIX
+.BR getopts (1)
+and GNU
+.BR getopt (1).
+The command line behaves as usually.
+.
+For completeness, the details are provided here.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Option Parsing"
+.\" --------------------------------------------------------------------
+.
+The following types of options are supported, equally on all systems
+that are able to run the groffer program:
+.
+.
+.Topic
+single character options are always preceded by a single minus
+character, for example,
+.Opt_short c .
+.
+.
+.Topic
+the argument for a single character option is the next command line
+argument, for example,
+.Opt_alt - o\~ arg ,
+or can be appended to the option character within the same argument
+.Opt_alt - o arg .
+.
+.
+.Topic
+clusters of such single character options without an argument,
+eventually terminated by a single character option with an argument;
+for example,
+.Opt_alt - abo arg
+is equivalent to
+.Opt_short a\~\c
+.Opt_short b\~\c
+.Opt_short o\~\c
+.I arg .
+.
+.
+.Topic
+Long options, that means option with names longer than one character
+are always prededed by a double minus; an option argument can either
+go to the next command line argument or be appended with an equal sign
+to the argument; for example,
+.Opt_alt -- long= arg
+is equivalent to
+.Opt_alt -- long\~ arg .
+.
+.
+.Topic
+An argument of
+.Opt_--
+ends option parsing; all further command line arguments are
+interpreted as filespec arguments.
+.
+.
+.Topic
+By default, all command line arguments that are neither options nor
+option arguments are interpreted as filespec parameters and stored
+until option parsing has finished.
+.
+For example, the command line
+.Shell_cmd "groffer file1 -a -o arg file 2"
+is, by default, equivalent to
+.Shell_cmd "groffer -a -o arg -- file1 file 2"
+.
+.
+.Topic
+This behavior can be changed by setting the environment variable
+.Env_var $POSIXLY_CORRECT
+to a non-empty value; in this case, option processing is stopped as
+soon as the first non-option argument is found.
+.
+For example, in posixly correct mode, the command line
+.Shell_cmd "groffer file1 -a -o arg file 2"
+is equivalent to
+.Shell_cmd "groffer -- file1 -a -o arg file 2"
+As this leads to unwanted behavior in most cases, most people do not
+want to set
+.Env_var $POSIXLY_CORRECT .
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Compatibility with Options from other Programs"
+.\" --------------------------------------------------------------------
+.
+All short options of
+.I groffer
+are compatible with the short options of
+.BR groff (@MAN1EXT@).
+.
+Some of the
+.I groff
+options were given a special meaning within
+.IR groffer .
+.
+All other
+.I groff
+options are supported by
+.IR groffer ,
+but they are just transparently transferred to
+.I groff
+without any intervention.
+.
+Therefore these transparent options are not documented here, but in
+.BR groff (@MAN1EXT@).
+.
+.
+.P
+All long options of
+.I groffer
+are compatible with the long options of
+.BR man (1).
+.
+Most of the
+.I man
+long options were implemented as native options into
+.IR groffer .
+.
+These options are documented in the following; the other
+.I man
+options are recognized, but ignored.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Native groffer Options"
+.\" --------------------------------------------------------------------
+.
+.Opt_def - h
+Print usage message to standard error and exit.
+.
+.
+.Opt_def - Q
+Output the roff source code of the input files unprocessed.
+.
+This is the equivalent
+.Opt_long mode\~source .
+.
+.
+.Opt_def - T devname
+Switch to
+.Opt_long mode\~device ,
+.
+thus disabling the
+.I groffer
+viewing.
+.
+Instead, the input is formatted and postprocessed using plain
+.I groff
+with
+.I devname
+as the output device.
+.
+The allowed device names are listed in
+.BR groff (@MAN1EXT@).
+.
+Note that this forces all device names that begin with the letter
+.I X
+to be displayed with
+.BR gxditview (@MAN1EXT@);
+all other device names generate output for the specified device; this
+is printed onto standard output without a pager.
+.
+.
+.Opt_def - v
+Print version information onto standard error.
+.
+.
+.Opt_def - V
+Switch into
+.I groff
+mode and format the input with groff option
+.Opt_short V ;
+this produces the groff calling pipe without formatting the input.
+.
+This an advanced option from
+.BR groff (@MAN1EXT@) ,
+only useful for debugging.
+.
+.
+.Opt_def - X
+Switch into
+.I groff
+mode and format the input with groff option
+.Opt_short X ;
+actually, this formats the input and displays it with
+.BR gxditview (@MAN1EXT@) .
+.
+This differs from groffer's mode
+.I x
+because groffer's viewer options are not used, but the viewer is
+configured like in groff with the groff option
+.Opt_short P .
+This option is inhereted from
+.BR groff (@MAN1EXT@) .
+.
+.
+.Opt_def - Z
+Switch into
+.I groff
+mode and format the input with groff option
+.Opt_short Z ;
+this produces the groff intermediate output without postprocessing; see
+.BR groff_out (@MAN1EXT@) .
+This an advanced option from
+.BR groff (@MAN1EXT@) ,
+useful for debugging.
+.
+.
+.Opt_def -- all
+In searching man pages, retrieve all suitable ones instead of only one.
+.
+.
+.Opt_def -- apropos
+Instead of displaying, start the `apropos' command for searching
+within man page descriptions; only kept for compatibility with `man'.
+.
+.
+.Opt_def -- auto-modes mode1,mode2,\*[Ellipsis]
+Set the sequence of modes for default mode to the comma separated list
+given in the argument.
+.
+.
+.Opt_def -- background color
+This is equivalent to
+.Opt_long bg .
+.
+.
+.Opt_def -- bd pixels
+Specifies the color of the border surrounding the viewer
+window.
+.
+This is an adaption of the X Toolkit option
+.Opt_short bd .
+.
+The argument is an X color name, see
+.BR (1)
+for details.
+.
+.
+.Opt_def -- bg color
+Set the background color of the viewer window.
+.
+This is an adaption of the X Toolkit option
+.Opt_short bg .
+.
+The argument is an X color name, see
+.BR (1)
+for details.
+.
+.
+.Opt_def -- bw pixels
+Specifies the width in pixels of the border surrounding the viewer
+window (not available for all viewers).
+.
+This is an adaption of the X Toolkit option
+.Opt_short bw .
+.
+.
+.Opt_def -- debug
+Print debugging information.
+.
+Actually, a function call stack is printed if an error occurs.
+.
+.
+.Opt_def -- default
+Reset all configuration from previously processed command line options
+to the default values.
+.
+This is useful to wipe out all effects of former options and restart
+option processing using only the rest of the command line.
+.
+.
+.Opt_def -- device
+Eqivalent to
+.Opt_short T .
+.
+.
+.Opt_def -- display X-display
+Set the X display on which the viewer program shall be started, see
+.BR X (1)
+for the syntax of the argument.
+.
+.
+.Opt_def -- ditroff
+Eqivalent to
+.Opt_short Z .
+This is kept for compatibiliy with GNU
+.BR man (1).
+.
+.
+.Opt_def -- dvi
+Choose dvi mode; the formatted input is displayed with the
+by default, the formatted input is displayed with the
+.BR xdvi (1)
+program.
+.
+.
+.Opt_def -- dvi-viewer prog
+Set the viewer program for dvi mode.
+.
+This can be a file name or a program to be searched in
+.Env_var $PATH .
+.
+Known dvi viewers inlude
+.BR xdvi (1)
+and
+.BR dvilx (1)
+.
+In each case, arguments can be provided additionally.
+.
+.
+.Opt_def -- extension suffix
+Restrict man\~page search to file names that have
+.I suffix
+appended to their section element.
+.
+For example, in the file name
+.I /usr/share/man/man3/terminfo.3ncurses.gz
+the man\~page extension is
+.IR ncurses .
+.
+Originates from GNU
+.IR man .
+.
+.
+.Opt_def -- foreground color
+This is equivalent to
+.Opt_short fg .
+.
+.
+.Opt_def -- fg color
+Set the foreground color of the viewer window.
+.
+This is an adaption of the X Toolkit option
+.Opt_short bg .
+.
+The argument is an X color name, see
+.BR (1)
+for details.
+.
+.
+.Opt_def -- font font_name
+This is equivalent to
+.Opt_short ft .
+.
+.
+.Opt_def -- ft font_name
+Set the font used by the viewer window.
+.
+This is an adaption of the X Toolkit option
+.Opt_short ft .
+.
+The argument is an X font name, see
+.BR (1)
+for details.
+.
+.
+.Opt_def -- geometry size_pos
+Set the geometry of the display window, that means its size and its
+starting position.
+.
+See
+.BR X (1)
+for details on the syntax of the argument.
+.
+If the actual display mode is not X then this option is ignored.
+.
+.
+.Opt_def -- groff
+Set
+.I groff
+mode.
+.
+Switch groffer to process the input like
+.BR groff (@MAN1EXT@).
+.
+This disables the groffer viewing features, all groffer viewing
+options are ignored.
+.
+.
+.Opt_def -- help
+Eqivalent to
+.Opt_short h .
+.
+.
+.Opt_def -- location
+Print the location of the retrieved files to standard error.
+.
+.
+.Opt_def -- locale language
+.
+Set the language for man pages.
+.
+This option originates from GNU
+.BR man (1).
+.
+.
+.Opt_def -- man
+Check the non-option command line arguments (filespecs) first on being
+man\~pages, then whether they represent an existing file.
+.
+By default, a filespec is first tested if it is an existing file.
+.
+.
+.Opt_def -- manpath "'dir1:dir2:\*[Ellipsis]'"
+Use the specified search path for retrieving man\~pages instead of the
+program defaults.
+.
+If the argument is set to the empty string "" the search for man\~page
+is disabled.
+.
+.
+.Opt_def -- mode value
+.
+Set the display mode.
+.
+The following mode values are recognized:
+.
+.
+.RS
+.
+.
+.TP
+.B auto
+Display in the default manner; this actually means to try the modes
+.IR ps ,
+.IR x ,
+and
+.I tty
+in this sequence.
+.
+Useful for restoring default mode when a different mode was specified
+with
+.Env_var $GROFFER_OPT .
+.
+.
+.TP
+.B dvi
+Display formatted input in a dvi viewer program; equivalent to
+.Opt_long dvi .
+.
+.
+.TP
+.B pdf
+Display formatted input in a PDF (Portable Document Format) viewer
+program; equivalent to
+.Opt_long pdf .
+.
+.
+.TP
+.B ps
+Display formatted input in a Postscript viewer program; equivalent to
+.Opt_long ps .
+.
+.
+.TP
+.B tty
+Display formatted input in a text terminal; equivalent to
+.Opt_long tty .
+.
+.
+.TP
+.B www
+Display formatted input in a internet browser program; equivalent to
+.Opt_long www .
+.
+.
+.TP
+.B x
+Display formatted input in a native roff viewer such as
+.BR gxditview (@MAN1EXT@); equivalent to
+.Opt_long x .
+.
+.
+.P
+The following modes do not use the
+.I groffer
+viewing features.
+.
+They are only interesting for advanced applications.
+.
+.
+.TP
+.B groff
+Generate device output with plain
+.I groff
+without using the special viewing features of
+.IR groffer .
+If no device was specified by option
+.Opt_short T
+the
+.I groff
+default
+.B ps
+is assumed.
+.
+.
+.TP
+.B source
+Display source code; same as
+.Opt_short Q .
+.
+.
+.RE
+.
+.
+.Opt_def -- no-location
+Do not display the location of retireved files; this resets a former
+call to
+.Opt_long location .
+.
+.
+.Opt_def -- no-man
+Do not check for man\~pages.
+.
+.
+.Opt_def -- pager
+Set the pager program in tty mode; default is
+.IR less .
+.
+.
+.Opt_def -- pdf
+Choose pdf mode (Portable Document Format).
+.
+By default, the input is formatted by groff using the Postscript
+device, then it is transformed into the PDF file format using
+.BR gs (1)
+(this is quite slow), and finally displayed either with the
+.BR xpdf (1)
+or the
+.BR acroread (1)
+program; this can be configured with option
+.Opt_long viewer-pdf .
+.
+PDF has a big advantage because the text is displayed graphically and
+is searchable nevertheless; but as thtransformation into pdf takes a
+considerable amount of time, the pdf mode is not suitable as a default
+device for the auto mode.
+.
+The only device that is compatible to this mode is
+.IR ps ,
+which is also the default when no device is specified.
+.
+.
+.Opt_def -- pdf-viewer prog
+Set the viewer program for
+.I pdf
+mode.
+.
+This can be a file name or a program to be searched in
+.Env_var $PATH .
+.
+In each case, arguments can be provided additionally.
+.
+.
+.Opt_def -- ps
+Choose ps mode (Postscript).
+.
+By default, the formatted input is displayed with the
+.BR ghostview (@MAN1EXT@)
+program; this can be configured with option
+.Opt_long viewer-ps .
+.
+The only device that is compatible to this mode is
+.IR ps ,
+which is also the default when no device is specified.
+.
+.
+.Opt_def -- ps-viewer prog
+Set the viewer program for
+.I ps
+mode.
+.
+This can be a file name or a program to be searched in
+.Env_var $PATH .
+.
+Common Postscript viewers inlude
+.BR gv (1),
+.BR ghostview (1),
+and
+.BR gs (1),
+.
+In each case, arguments can be provided additionally.
+.
+.
+.Opt_def -- resolution value
+Set X resolution in dpi (dots per inch) in some viewer programs.
+.
+The only supported dpi values are
+.B 75
+and
+.BR 100 .
+This is an adaption of the X Toolkit option
+.Opt_short resolution .
+.
+.
+.Opt_def -- rv
+Reverse foreground and background color of the viewer window.
+.
+This is an adaption of the X Toolkit option
+.Opt_short rv .
+This feature is not available in all viewer programs.
+.
+.
+.Opt_def -- sections
+Restrict searching for man pages to the given
+.IR sections ,
+a colon-separated list.
+.
+.
+.Opt_def -- shell "shell_program"
+Specify the shell under which the groffer script should be run.
+.
+The script first tests whether this option is set (either within
+.Env_var $GROFF_OPT
+or as a command line option); if so, the script is rerun under the
+shell program specified with the option argument.
+.
+.
+.Opt_def -- source
+Equivalent to
+.Opt_short Q .
+.
+.
+.Opt_def -- systems
+Search for man pages for the given operating systems; the argument
+.I systems
+is a comma-separated list.
+.
+.
+.Opt_def -- title "'some text'"
+Set the title for the viewer window.
+.
+This feature is not available in all viewer programs.
+.
+.
+.Opt_def -- to-postproc opt_or_arg
+Eqivalent to
+.Opt_short P .
+.
+.
+.Opt_def -- troff-device
+Eqivalent to
+.Opt_short T .
+This option is only kept for compatibility with GNU
+.BR man (1).
+.
+.
+.Opt_def -- tty
+Choose tty display mode, that means displaying in a text pager even
+when in X; eqivalent to
+.Opt_long mode\~tty .
+.
+.
+.Opt_def -- version
+Eqivalent to
+.Opt_short v .
+.
+.
+.Opt_def -- whatis
+Instead of displaying the content, get the one-liner description from
+the retrieved man page files \[em] or say that it is not a man page.
+.
+.
+.Opt_def -- where
+Eqivalent to
+.Opt_long location .
+.
+.
+.Opt_def -- www
+Choose www mode (html), display in a web browser program, which can be
+specified with option
+.Opt_long www-viewer .
+By default, the existence of a sequence of standard web browsers is
+tested, starting with
+.BR mozilla (1)
+and
+.BR netscape (1)
+.
+.
+.Opt_def -- www-viewer prog
+Set the web browser program for viewing in
+.I www
+mode.
+.
+Each program that accepts html input and allows the
+.BI file://localhost/ dir / file
+syntax on the command line is suitable; it can be the path name of an
+executable file or a program in
+.Env_var $PATH .
+.
+In each case, arguments can be provided additionally.
+.
+.
+.Opt_def -- x
+Choose
+.I x
+mode (view in X roff viewer).
+.
+By default, the formatted input is displayed with the
+.BR gxditview (@MAN1EXT@)
+program, being distributed together with groff, or with
+.BR xditview (1),
+which is distributed as a standard X tool.
+.
+This can be configured with option
+.Opt_long x-viewer .
+.
+The only devices (option
+.Opt_short T )
+that are compatible with this mode are
+.IR X75 ,
+.IR X100 ,
+.IR X75-12 ,
+.IR X100-12 ,
+and
+.I ps
+(the default device).
+.
+.
+.Opt_def -- x-viewer prog
+Set the viewer program for
+.I x
+mode.
+.
+Suitable viewer programs are
+.BR gxditview (@MAN1EXT@)
+and
+.BR xditview (1).
+.
+But the argument can be any executable file or a program in
+.Env_var $PATH .
+.
+In each case, arguments can be provided additionally.
+.
+.
+.TP
+.Opt_--
+Signals the end of option processing; all remaining arguments are
+interpreted as
+.I filespec
+parameters.
+.
+.
+.P
+Besides these, groffer accepts all arguments that are valid for the
+.BR groff (@MAN1EXT@)
+program.
+.
+All non-groffer options are sent unmodified via grog to groff.
+.
+Postprocessors, macro packages, compatibility with classical troff,
+and much more can be manually specified.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "OUTPUT MODES"
+.\" --------------------------------------------------------------------
+.
+By default, the groffer program formats the input and then
+automatically chooses a suitable display mode, but the user can also
+choose between the following modes:
+.
+.Topic
+graphically display the formatted input with an X window program,
+including
+.
+.RS
+.Topic
+with X window roff viewers such as
+.BR gxditview (@MAN1EXT@)
+.RI ( x
+mode),
+.
+.Topic
+in a dvi viewer program
+.RI ( dvi
+mode),
+.
+.Topic
+in a Postscript viewer
+.RI ( ps
+mode),
+.
+.Topic
+in a PDF viewer
+.RI ( pdf
+mode),
+.
+.Topic
+in a web browser
+.RI ( www
+mode),
+.RE
+.
+.Topic
+display formatted input in a pager on the text terminal
+.RI ( tty
+mode),
+.
+.Topic
+run groffer like groff, but with decompression and man\~page searching
+.RI ( groff
+mode); this includes things like generating the groff intermediate
+output.
+.
+.Topic
+stream the unformatted source code of the input onto standard output
+.RI ( source
+mode),
+.
+.
+.P
+By
+.IR default ,
+.I groffer
+first tries whether
+.B x
+mode is possible, then
+.B ps
+mode, and finally
+.B tty
+mode.
+.
+This mode testing sequence for
+.B default
+mode can be changed by specifying a comma separated list of modes
+with the option
+.Opt_long default-modes.
+.
+.
+.P
+The searching for man\~pages and the decompression of the input are
+active in every mode.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Graphical Display Modes"
+.\" --------------------------------------------------------------------
+.
+The graphical display modes work only in the X window environment (or
+similar implementations within other windowing environments).
+.
+The environment variable
+.Env_var $DISPLAY
+or the option
+.Opt_long display
+are used for specifying the X display to be used; if neither is
+specified, groffer assumes that no X is running.
+.
+.
+.P
+A certain graphical display mode can be selected by one of the options
+.Opt_long dvi ,
+.Opt_long pdf ,
+.Opt_long ps ,
+.Opt_short X ,
+and
+.Opt_long www .
+.
+By default, some graphical modes are tried first. If none succeeds
+groffer switches to
+.B tty
+mode.
+.
+.
+.P
+The graphical modes can be customized by options that were named
+according to the resource options in the
+.BR X (1)
+Toolkit but using a leading double minus instead of the single minus
+used by X.
+.
+These include
+.Opt_long background ,
+.Opt_long foreground ,
+.Opt_long geometry ,
+.Opt_long resolution ,
+.Opt_long title ,
+.Opt_long xrm ,
+etc.
+.
+.
+.P
+The
+.I pdf
+mode has a major advantage \[em] it is the only graphical diplay mode
+that allows to search for text within the viewer; this can be a really
+important feature.
+.
+Unfortunately, it takes a long time to transform the input into the
+PDF format, so it was not chosen as the major mode.
+.
+You can change this by the options
+.Opt_long pdf
+and
+.Opt_long auto-modes .
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Displaying on a tty"
+.\" --------------------------------------------------------------------
+.
+If the variable
+.Env_var $DISPLAY
+is not set or empty, groffer assumes that it should produce output on
+a text terminal.
+.
+This mode can also be forced by option
+.Opt_long tty .
+.
+.
+.P
+In the actual implementation, the groff output device
+.I latin1
+is chosen and the processed output is piped into a pager program.
+.
+This can be changed by specifying option
+.Opt_long tty-device .
+.
+.
+.P
+The pager to be used can be specified by option
+.Opt_long pager
+by the environment variable
+.Env_var $PAGER .
+If this is not set or empty the
+.BR less (1)
+program is used as the default pager.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Non-displaying Modes"
+.\" --------------------------------------------------------------------
+.
+There are some special modes that do not display the formatted output
+in a viewer program.
+.
+These modes are regarded as advanced, they are useful for debugging
+purposes.
+.
+.
+.TP
+.I source mode
+Instead of displaying the formatted output, it is also possible to
+have the roff source code streamed onto the standard output.
+.
+This mode must be requested by one of the options
+.Opt_short Q
+or
+.Opt_long source .
+.
+.
+.TP
+.I groff mode
+This mode disables the groffer viewing facilities.
+.
+The input is handled as usual with decompression and man\~page
+searching, but then it is passed to groff using only the options
+provided by groff.
+.
+This enables the user to save the generated output into a file or pipe
+it into another program.
+.
+In this mode, the input is formatted, but not postprocessed; see
+.BR groff_out (@MAN5EXT@)
+for details.
+.
+This mode is activated automatically by the three groff options
+.Opt_short V
+(print roff pipe, no formatting),
+.Opt_short X
+(display with gxditview in groff's native way, using
+.Opt_short P
+for customization), and
+.Opt_short Z
+(disable post-processing, thus producing the groff intermediate output).
+.
+.
+.\" --------------------------------------------------------------------
+.SH "FILE PARAMETERS"
+.\" --------------------------------------------------------------------
+.
+The non-option command line parameters determine which files should be
+displayed.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Filespecs"
+.\" --------------------------------------------------------------------
+.
+The default behavior of groffer is to first test whether the file
+parameter is represents a local file; if not, it is assumed to
+represent a filespec for searching one or more man\~page.
+.
+This behavior can be modified by options.
+.
+.
+.TP
+.Opt_long man
+forces to interpret all file parameters as filespecs for searching
+man\~pages.
+.
+.TP
+.Opt_long no-man
+.TP+
+.Opt_long local-file
+disable the man searching; so only local files are displayed.
+.
+.
+.P
+The following parameter formats are recognized to represent a wanted
+man\~page.
+.
+.
+.TP
+.BI man: name ( section )
+the quasi-URL notation used in many Desktop systems to
+represent the man\~page
+.I name
+in
+.IR section .
+.
+.
+.TP
+.BI man: name
+search the man\~page
+.I name
+in the lowest section.
+The corresponding command with the man program would be
+.Shell_cmd man\~ name
+.
+.
+.TP
+.IB name . section
+the man\~page
+.I name
+in
+.IR section .
+The corresponding command with the man program would be
+.Shell_cmd man\~ section\~name
+.
+.
+.TP
+.I name
+if
+.I name
+is not an existing file search for the man\~page
+.I name
+in the lowest section just like
+.Shell_cmd man\~ name
+.
+.
+.TP
+.I section name
+Even this curious construct known from the various
+.I man
+programs is handled.
+.
+For example,
+.Shell_cmd "groffer 7 groff"
+was modelled according to
+.Shell_cmd "man 7 groff"
+retrieves the man\~page named
+.I groff
+in section 7.
+.
+Only a few standard section names are accepted, being actually the
+number sections
+.I 1, 2, 3, 4, 5, 6, 7, 8,
+and
+.IR 9,
+and the lower case letters
+.I `o'
+and
+.IR `n' .
+.
+.
+.P
+If neither a local file nor a man\~page was retrieved for some file
+parameter a warning is issued on standard error, but processing is
+continued.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Man\~Page Searching"
+.\" --------------------------------------------------------------------
+.
+The groffer program provides a search facility for system manual pages
+(man\~pages).
+.
+All long options, all environment variables, and most of the
+functionality of the GNU
+.BR man (1)
+program were implemented.
+.
+.
+.P
+Preformatted man\~pages (cat\~pages) are intentionally excluded from
+the search because groffer is a roff program that wants to format by
+its own, not spit out stuff that was digested previously by someone
+else.
+.
+With the excellent performance of the actual computers, the
+preformatted man\~pages aren't necessary any longer.
+.
+Due to their inflexible nature, they tend to provoke some trouble with
+changing line lengths and different environments in networks.
+.
+.
+.P
+The algorithm for retrieving man\~pages uses five search methods.
+.
+They are successively tried until a method works.
+.
+.
+.Topic
+The search path can be manually specified by using the option
+.Opt_long manpath .
+An empty argument disables the man\~page searching.
+.
+This overwrites the other methods.
+.
+.
+.Topic
+If this is not available the environment variable
+.Env_var $MANPATH
+is searched.
+.
+.
+.Topic
+If this is empty, the program tries to read it from the environment
+variable
+.Env_var $MANOPT .
+.
+.Topic
+If this does not work, the
+.BR manpath (1)
+program for determining a path of man directories is tried.
+.
+.
+.Topic
+If this does not work a reasonable default path is searched for
+man\~pages.
+.
+.
+.P
+After this, the path elements for the language (locale) and operating
+system specific man\~pages are added to the man\~path; their sequence
+is determined automatically.
+.
+For example, both
+.I /usr/share/man/linux/fr
+and
+.I /usr/share/man/fr/linux
+for french linux man\~pages are found.
+.
+The language and operating system names are determined from both
+environment variables and command line options.
+.
+.
+.P
+The locale (language) is determined like in GNU man, that is from
+highest to lowest precedence:
+.Topic
+.Opt_long locale
+.
+.Topic
+.Env_var $GROFFER_OPT
+.
+.Topic
+.Env_var $MANOPT
+.
+.Topic
+.Env_var $LCALL
+.
+.Topic
+.Env_var $LC_MESSAGES
+.
+.Topic
+.Env_var $LANG .
+.
+.
+.P
+The language locale is usually specified in the POSIX 1003.1 based
+format:
+.P
+\f[I]<language>\f[][\f[CB]_\f[]\f[I]<territory>\f[][\f[CB].\f[]\
+\f[I]<character-set>\f[][\f[CB],\f[]\f[I]<version>\f[]]]],
+.P
+but the two-letter code in
+.I <language>
+is sufficient for most purposes.
+.
+.
+.P
+If no man\~pages for a complicated locale are found the country part
+consisting of the first two characters (without the `\f[CB]_\f[]',
+`\f[CB].\f[]', and `\f[CB],\f[]', parts) of the locale is searched as
+well.
+.
+.
+.P
+If still not found the corresponding man\~page in the default language
+is used instead.
+.
+As usual, this default can be specified by one of \f[CR]C\f[] or
+\f[CR]POSIX\f[].
+.
+The man\~pages in the default language are usually in English.
+.
+.
+.P
+Several operating systems can be given by appending their names,
+separated by a comma.
+.
+This is then specified by the environment variable
+.Env_var $SYSTEM
+or by the command line option
+.Opt_long systems .
+The precedence is similar to the locale case above from highest to
+lowest precedence:
+.
+Topic
+.Opt_long systems
+.
+.Topic
+.Env_var $GROFFER_OPT
+.
+.Topic
+.Env_var $MANOPT
+.
+.Topic
+.Env_var $SYSTEM .
+.
+.
+.P
+When searching for man\~pages this man\~path with the additional
+language and system specific directories is used.
+.
+.
+.P
+The search can further be restricted by limiting it to certain
+sections.
+.
+A single section can be specified within a filespec, several sections
+as a colon-separated list in command line option
+.Opt_long sections
+or environment variable
+.Env_var $MANSECT .
+.
+When no section was specified a set of standard sections is searched
+until a suitable man\~page was found.
+.
+.
+.P
+Finally, the search can be restricted to a so-called
+.IR extension .
+This is a postfix that acts like a subsection.
+.
+It can be specified by
+.Opt_long extension
+or environment variable
+.Env_var $EXTENSION .
+.
+.
+.P
+For further details on man\~page searching, see
+.BR man (1).
+.
+.
+.\" --------------------------------------------------------------------
+.SS Decompression
+.\" --------------------------------------------------------------------
+.
+The program has a decompression facility.
+.
+If standard input or a file that was retrieved from the command line
+parameters is compressed with a format that is supported by either
+.BR gzip (1)
+or
+.BR bzip2 (1)
+it is decompressed on-the-fly.
+.
+This includes the GNU
+.BR .gz ,
+.BR .bz2 ,
+and the traditional
+.B .Z
+compression.
+.
+The program displays the concatenation of all decompressed input in
+the sequence that was specified on the command line.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "ENVIRONMENT"
+.\" --------------------------------------------------------------------
+.
+The groffer programs supports many system variables, most of them by
+courtesy of other programs.
+.
+All environment variables of
+.BR groff (@MAN1EXT@)
+and GNU
+.BR man (1)
+and some standard system variables are honored.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Native groffer Variables"
+.\" --------------------------------------------------------------------
+.
+.TP
+.Env_var $GROFFER_OPT
+Store options for a run of groffer.
+.
+The options specified in this variable are overridden by the options
+given on the command line.
+.
+The content of this variable is run through the shell builitin `eval';
+so arguments containing white-space or special shell characters should
+be quoted.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "System Variables"
+.\" --------------------------------------------------------------------
+.
+The groffer program is a shell script that is run through
+.BR /bin/sh ,
+which can be internally linked to programs like
+.BR bash (1).
+The corresponding system environment is automatically effective.
+.
+The following variables have a special meaning for groffer.
+.
+.
+.TP
+.Env_var $DISPLAY
+If this variable is set this indicates that the X window system is
+running.
+.
+Testing this variable decides on whether graphical or text output is
+generated.
+.
+This variable should not be changed by the user carelessly, but it can
+be used to start the graphical groffer on a remote X terminal.
+.
+For example, depending on your system, groffer can be started on the
+second monitor by the command
+.Shell_cmd DISPLAY=:0.1\~groffer\~ what.ever &
+.
+.
+.TP
+.Env_var $LC_ALL
+.TP+
+.Env_var $LC_MESSAGES
+.TP+
+.Env_var $LANG
+If one of these variables is set (in the above sequence), its content
+is interpreted as the locale, the language to be used, especially when
+retrieving man\~pages.
+.
+A locale name is typically of the form
+.IR language [\c
+.B _\c
+.IR territory [\c
+.B .\c
+.IR codeset [\c
+.B @\c
+.IR modifier ]]],
+where
+.I language
+is an ISO 639 language code,
+.I territory
+is an ISO 3166 country code, and
+.I codeset
+is a character set or encoding identifier like ISO-8859-1 or UTF-8;
+see
+.BR setlocale (3).
+.
+The locale values\~\c
+.B C
+and
+.B POSIX
+stand for the default, i.e. the man\~page directories without a
+language prefix.
+.
+This is the same behavior as when all 3\~variables are unset.
+.
+.
+.TP
+.Env_var $PAGER
+This variable can be used to set the pager for the tty output.
+.
+For example, to disable the use of a pager completely set this
+variable to the
+.BR cat (1)
+program
+.Shell_cmd PAGER=cat\~groffer\~ anything
+.
+.
+.TP
+.Env_var $PATH
+All programs within the groffer shell script are called without a
+fixed path.
+.
+Thus this environment variable determines the set of programs used
+within the run of groffer.
+.
+.
+.TP
+.Env_var $POSIXLY_CORRECT
+If set to a non-empty value this chooses the POSIX mode for option
+processing, that means that option processing will be finished as soon
+as a non-option argument is found.
+.
+Usually, you do not want to set this environment variable.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Groff Variables"
+.\" --------------------------------------------------------------------
+.
+The groffer program internally calls groff, so all environment
+variables documented in
+.BR groff (@MAN1EXT@)
+are internally used within groffer as well; see there for details.
+.
+The following variables have a direct meaning for the groffer program.
+.
+.TP
+.Env_var $GROFF_TMPDIR
+If the value of this variable is an existing, writable directory,
+groffer uses it for storing its temporary files, just as groff does.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Man Variables"
+.\" --------------------------------------------------------------------
+.
+Parts of the functionality of the man program were implemented in
+groffer; support for all environment variables documented in
+.BR man (1)
+was added to groffer, but the meaning was slightly modified due to the
+different approach in groffer; but the user interface is the same.
+.
+The man environment variables can be overwritten by options provided
+with
+.Env_var $MANOPT ,
+which in turn is overwritten by the command line.
+.
+.
+.TP
+.Env_var $EXTENSION
+Restrict the search for man\~pages to files having this extension.
+.
+This is overridden by option
+.Opt_long extension ;
+see there for details.
+.
+.
+.TP
+.Env_var $MANOPT
+This variable contains options as a preset for
+.BR man (1).
+As not all of these are relevant for groffer only the essential parts
+of its value are extracted.
+.
+The options specified in this variable overwrite the values of the
+other environment variables taht are specific to man.
+.
+All options specified in this variable are overridden by the options
+given on the command line.
+.
+.
+.TP
+.Env_var $MANPATH
+If set, this variable contains the directories in which the man\~page
+trees are stored.
+.
+This is overridden by option
+.Opt_long manpath .
+.
+.
+.TP
+.Env_var $MANSECT
+If this is a colon separated list of section names, the search for
+man\~pages is restricted to those manual sections in that order.
+.
+This is overridden by option
+.Opt_long sections .
+.
+.
+.TP
+.Env_var $SYSTEM
+If this is set to a comma separated list of names these are interpreted
+as man\~page trees for different operating systems.
+.
+This variable can be overwritten by option
+.Opt_long systems ;
+see there for details.
+.
+.
+.P
+The environment variable
+.Env_var $MANROFFSEQ
+is ignored by groffer because the necessary preprocessors are
+determined automatically.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "FILES"
+.\" --------------------------------------------------------------------
+.
+The groffer program can be preconfigured by two configuration files.
+.
+Both of them are shell scripts that are called at the beginning of
+groffer using the `\c
+.CB .\~\c
+.IR filename '
+syntax.
+.
+.
+.TP
+.CB /etc/groff/groffer.conf
+System-wide configuration file for groffer.
+.
+.
+.TP
+.CB $HOME/.groff/groffer.conf
+User-specific configuration file for groffer, where
+.Env_var $HOME
+denotes the user's home directory.
+.
+This script is called after the system-wide configuration file to
+enable overriding by the user.
+.
+.
+.P
+It makes sense to use these configuration files for the following
+tasks:
+.
+.Topic
+Preset environment variables recognized by groffer; preferably a
+variable should only be set when it is unset in order not to override
+a user-provided value.
+.
+.Topic
+Preset command line options by prepending them to
+.Env_var $GROFFER_OPT ;
+prepending should be preferred to appending and setting in order not
+to delete the environment variable provided by the
+.
+.Topic
+Write functions for calling viewer programs in a special way and feed
+them into the
+.Opt_long \f[I]*\f[]-viewer
+options.
+.
+Note that the name of such a function must coincide with some existing
+program in the system path
+.Env_var $PATH
+in order to be recognized by groffer.
+.
+.
+.P
+As an example, consider the following configuration file.
+.
+.P
+.ft CR
+.nh
+.nf
+#! /bin/sh
+# ~/.groff/groffer.conf
+if test "$DISPLAY" = ""; then
+ DISPLAY='localhost:0.0';
+fi;
+GROFF_OPT="--resolution=100 $GROFF_OPT";
+gxditview()
+{
+ /usr/local/bin/gxditview --fg DarkBlue "$@";
+}
+.fi
+.hy
+.ft
+.
+.
+.P
+This has the following effects:
+.Topic
+allows to start groffer in a graphical mode even from a text
+terminal;
+.Topic
+all graphical modes use a resolution of 100 dpi where applicable;
+.Topic
+the
+.BR gxditview (@MAN1EXT@)
+program is told to use
+.I DarkBlue
+as the text color.
+.
+These configurations can be overridden by command line options and by
+environment variable
+.Env_var $GROFFER_OPT .
+.
+.
+.\" --------------------------------------------------------------------
+.SH "EXAMPLES"
+.\" --------------------------------------------------------------------
+.
+The usage of groffer is very easy.
+.
+Usually, it is just called with a file name or man\~page.
+.
+The following examples, however, show that groffer has much more fancy
+capabilities.
+.
+.
+.TP
+.Shell_cmd "groffer\~/usr/local/share/doc/groff/meintro.ms.gz"
+Decompress, format and display the compressed file
+.I meintro.ms.gz
+in the directory
+.IR /usr/local/share/doc/groff ,
+using a default graphical viewer when in X window, or the
+.BR less (1)
+pager program when not in X.
+.
+.
+.TP
+.Shell_cmd "groffer\~groff.7\~groff\~\[cq]troff(1)\[cq]\~man:roff"
+.
+The arguments that are not existing files are looked-up as the
+following man\~pages:
+.I groff
+(in section\~7),
+.I groff
+(automatic search, should be found in section\~1),
+.I troff
+(in section\~1),
+and
+.I roff
+(in the section with the lowest number, being\~7 in this case).
+.
+The quotes around
+.I \[cq]troff(1)\[cq]
+are necessary because the paranthesis are special shell characters;
+escaping them with a backslash character
+.I \[rs](
+and
+.I \[rs])
+would be possible, too.
+.
+The formatted files are concatenated and displayed in one piece.
+.
+.
+.TP
+.Shell_cmd "LANG=de\~groffer\~--man\~--www\~--www-viever=netscape\~ls"
+.
+Retrieve the German man\~page for the
+.B ls
+program (or the English one if there is a German version), decompress
+it, format it into the html format and view the result in the default
+web browser
+.I netscape .
+The option
+.Opt_long man
+guarantees that the man\~page is retrieved, even when a local file
+.I ls
+exists in the actual directory.
+.
+.
+.TP
+.Shell_cmd "groffer\~-Q\~'man:roff(7)'"
+.
+Print the unformatted content of the man\~page called
+.I roff
+in section 7 on standard output.
+.
+.
+.TP
+.Shell_cmd "groffer\~-Z\~-mfoo"
+.
+Decompress the standard input, switch to
+.I groff
+mode, format the input with groff using the macro package foo, but do
+not postprocess the result, thus producing the intermediate output.
+.
+.
+.TP
+.Shell_cmd "echo\~'\[rs]f[CB]WOW!'\~|"
+.TP+
+.Shell_cmd+ "groffer --x --bg red --fg yellow --geometry 200x100"
+.
+Display \f[CB]WOW!\f[] in a small window in constant-width bold font,
+using color yellow on red background.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "COMPATIBILITY"
+.\" --------------------------------------------------------------------
+.
+The
+.B groffer
+shell script is compatible to both POSIX and GNU.
+.
+POSIX compatibility refers to
+.B IEEE P1003.2/D11.2
+of September 1991, a very early version of this standard.
+.
+The script uses only a quite restricted set of shell language elements
+and shell builtins, common to all POSIX versions; the only external
+program used is `sed', again only the most basic POSIX features of
+`sed' are used.
+.
+The groffer script should work on most actual free and commercial
+operating systems.
+.
+.
+.P
+The groffer program provides its own parser for command line options;
+it can handle option arguments and file names containing white space
+and a large set of special characters.
+.
+.
+.P
+The groffer shell script was tested with the following common
+implementations of the POSIX shell:
+.BR ash (1),
+.BR bash (1),
+.BR ksh (1),
+and POSIX
+.BR sh (1),
+and others.
+.
+Free POSIX compatible shells and shell utilities for most operating
+systems are available at the
+.URL http://\:www.gnu.org/software/ "GNU software archive" .
+.
+.
+.P
+The best performance was obtained with the
+.I ash
+shell; so groffer tries to run under
+.I ash
+whenever possible.
+.
+The procedure to determine the shell to run groffer was programmed to
+be as follows:
+.
+.
+.Topic
+the argument of the command line option
+.Opt_long shell ;
+if not set
+.
+.Topic
+the argument of the option
+.Opt_long shell
+in the environment variable
+.Env_var $GROFF_OPT ;
+if not set
+.
+.Topic
+try
+.IR ash ;
+if not available
+.
+.Topic
+continue with the shell under which the script was started in the
+first place.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+.
+.TP
+.BR groff (@MAN1EXT@)
+.TP+
+.BR troff (@MAN1EXT@)
+Details on the options and environment variables available in groff;
+all of them can be used with groffer.
+.
+.
+.TP
+.BR grog (@MAN1EXT@)
+Internally, groffer tries to guess the groff command line options from
+the input using this program.
+.
+.
+.TP
+.BR groff_out (@MAN5EXT@)
+Documentation on the groff intermediate output (ditroff output).
+.
+.
+.TP
+.BR xdvi (1)
+.TP+
+.BR dvilx (1)
+Viewers for groffer's
+.I dvi
+mode.
+.
+.
+.TP
+.BR gv (1)
+.TP+
+.BR ghostview (1)
+Viewers for groffer's
+.I ps
+mode.
+.
+.
+.TP+
+.BR gs (1)
+Transformer from
+.I ps
+to
+.IR pdf ;
+and a
+.I ps
+viewer.
+.
+.
+.TP
+.BR xpdf (1)
+Viewers for
+.I pdf
+files.
+.
+.
+.TP
+.BR gxditview (@MAN1EXT@)
+.TP+
+.BR xditview (1x)
+Viewers for groffer's
+.I x
+mode.
+.
+.
+.TP
+.BR gzip (1)
+.TP+
+.BR bzip2 (1)
+The decompression programs supported by groffer.
+.
+.
+.TP
+.BR man (1)
+The standard program to diplay man\~pages.
+.
+The information there is only useful if it is the man\~page for
+.IR "GNU\~man" .
+Then it documents the options and environment variables that are
+supported by groffer.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "AUTHOR"
+.\" --------------------------------------------------------------------
+.
+Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+.
+.P
+This document is distributed under the terms of the FDL (GNU Free
+Documentation License) version 1.1 or later.
+.
+You should have received a copy of the FDL on your system, it is also
+available on-line at the
+.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
+.
+.P
+This document is part of
+.IR groff ,
+the GNU roff distribution.
+.
+It was written by
+.MTO bwarken@mayn.de "Bernd Warken" .
+.
+.
+\" --------------------------------------------------------------------
+.\" Emacs settings
+.\" --------------------------------------------------------------------
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff --git a/contrib/groff/contrib/groffer/groffer.sh b/contrib/groff/contrib/groffer/groffer.sh
new file mode 100644
index 0000000..6cabefa
--- /dev/null
+++ b/contrib/groff/contrib/groffer/groffer.sh
@@ -0,0 +1,4419 @@
+#!/bin/sh
+
+# groffer - display groff files
+
+# File position: <groff-source>/contrib/groffer/groffer
+
+# Copyright (C) 2001,2002 Free Software Foundation, Inc.
+# Written by Bernd Warken <bwarken@mayn.de>
+
+# This file is part of groff.
+
+# groff is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# groff is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+# License for more details.
+
+# You should have 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.
+
+export _PROGRAM_NAME;
+export _PROGRAM_VERSION;
+export _LAST_UPDATE;
+
+_PROGRAM_NAME='groffer';
+_PROGRAM_VERSION='0.9.1';
+_LAST_UPDATE='30 Sep 2002';
+
+########################################################################
+# Determine the shell under which to run this script;
+# if `ash' is available restart the script using `ash';
+# otherwise just go on.
+
+if test "${_groffer_run}" != 'second'; then
+ # only reached during the first run of the script
+
+ export GROFFER_OPT;
+ export _groffer_run;
+ export _this;
+
+
+ #_this="@BINDIR@/${_PROGRAM_NAME}";
+ _this='groffer.sh';
+
+ ###########################
+ # _get_opt_shell ("$@")
+ #
+ # Determine whether `--shell' was specified in $GROFF_OPT or in $*;
+ # if so echo its argument.
+ #
+ _get_opt_shell()
+ {
+ local i;
+ local _sh;
+ case " ${GROFFER_OPT} $*" in
+ *\ --shell\ *|*\ --shell=*)
+ (
+ eval set -- "${GROFFER_OPT}" '"$@"';
+ _sh='';
+ for i in "$@"; do
+ case "$1" in
+ --shell)
+ if test "$#" -ge 2; then
+ _sh="$2";
+ shift;
+ fi;
+ ;;
+ --shell=?*)
+ # delete up to first `=' character
+ _sh="$(echo -n "$1" | sed -e 's/^[^=]*=//')";
+ ;;
+ esac;
+ shift;
+ done;
+ echo -n "${_sh}";
+ )
+ ;;
+ esac;
+ }
+
+
+ ###########################
+ # _test_on_shell (<name>)
+ #
+ # Test whether <name> is a shell program of Bourne type (POSIX sh).
+ #
+ _test_on_shell()
+ {
+ if test "$#" -le 0 || test "$1" = ''; then
+ return 1;
+ fi;
+ # do not quote $1 to allow arguments
+ test "$($1 -c 's=ok; echo -n "$s"' 2>/dev/null)" = 'ok';
+ }
+
+ # do the shell determination
+ _shell="$(_get_opt_shell "$@")";
+ if test "${_shell}" = ''; then
+ _shell='ash';
+ fi;
+ if _test_on_shell "${_shell}"; then
+ _groffer_run='second';
+ # do not quote $_shell to allow arguments
+ exec ${_shell} "${_this}" "$@";
+ exit;
+ fi;
+
+ # clean-up of shell determination
+ unset _shell;
+ unset _this;
+ unset _groffer_run;
+ _get_opt_shell()
+ {
+ return 0;
+ }
+ _test_on_shell()
+ {
+ return 0;
+ }
+
+fi;
+
+
+########################################################################
+# diagnostic messages
+#
+export _DEBUG;
+_DEBUG='no'; # disable debugging information
+#_DEBUG='yes'; # enable debugging information
+
+export _DEBUG_LM;
+_DEBUG_LM='no'; # disable landmark messages
+#_DEBUG_LM='yes'; # enable landmark messages
+
+
+########################################################################
+# Description
+########################################################################
+
+# Display groff files and man pages on X or tty, even when compressed.
+
+
+### Usage
+
+# Input comes from either standard input or command line parameters
+# that represent either names of exisiting roff files or standardized
+# specifications for man pages. All of these can be compressed in a
+# format that is decompressible by `gzip'.
+
+# The following displaying modes are available:
+# - Display formatted input with the X roff viewer `gxditview',
+# - with a Prostcript viewer,
+# - with a dvi viewer,
+# - with a web browser.
+# - Display formatted input in a text terminal using a text device.
+# - Generate output for some groff device on stdout without a viewer.
+# - Output only the source code without any groff processing.
+# - Generate the troff intermediate output on standard output
+# without groff postprocessing.
+# By default, the program tries to display with `gxditview' (1); if
+# this does not work, text display (2) is used.
+
+
+### Error handling
+
+# Error handling and exit behavior is complicated by the fact that
+# `exit' can only escape from the current shell; trouble occurs in
+# subshells. This was solved by sending kill signals, see
+# $_PROCESS_ID and error().
+
+
+### Compatibility
+
+# This shell script is compatible to the both the GNU and the POSIX
+# shell and utilities. Care was taken to restrict the programming
+# technics used here in order to achieve POSIX compatibility as far
+# back as POSIX P1003.2 Draft 11.2 of September 1991.
+
+# The only non-builtin used here is POSIX `sed'. This script was
+# tested under `bash', `ash', and `ksh'. The speed under `ash' is
+# more than double when compared to the larger shells.
+
+# This script provides its own option parser. It is compatible to the
+# usual GNU style command line (option clusters, long options, mixing
+# of options and non-option file names), except that it is not
+# possible to abbreviate long option names.
+
+# The mixing of options and file names can be prohibited by setting
+# the environment variable `$POSIXLY_CORRECT' to a non-empty value.
+# This enables the rather wicked POSIX behavior to terminate option
+# parsing when the first non-option command line argument is found.
+
+
+########################################################################
+# Survey of functions defined in this document
+########################################################################
+
+# The elements specified within paranthesis `(<>)' give hints to what
+# the arguments are meant to be; the argument names are irrelevant.
+# <>? 0 or 1
+# <>* arbitrarily many such arguments, incl. none
+# <>+ one or more such arguments
+# <> exactly 1
+
+# A function that starts with an underscore `_' is an internal
+# function for some function. The internal functions are defined just
+# after their corresponding function; they are not mentioned in the
+# following.
+
+# abort (text>*)
+# base_name (path)
+# catz (<file>)
+# clean_up ()
+# clean_up_secondary ()
+# diag (text>*)
+# dirname_append (<path> [<dir...>])
+# dirname_chop (<path>)
+# do_filearg (<filearg>)
+# do_nothing ()
+# echo2 (<text>*)
+# echo2n (<text>*)
+# error (<text>*)
+# get_first_essential (<arg>*)
+# is_dir (<name>)
+# is_empty (<string>)
+# is_equal (<string1> <string2>)
+# is_file (<name>)
+# is_not_empty (<string>)
+# is_not_equal (<string1> <string2>)
+# is_not_file (<name>)
+# is_not_prog (<name>)
+# is_prog (<name>)
+# is_yes (<string>)
+# leave ()
+# landmark (<text>)
+# list_append (<list> <element>...)
+# list_check (<list>)
+# list_from_args (<arg>...)
+# list_from_cmdline (<s_n> <s_a> <l_n> <l_n> [<cmdline_arg>...])
+# list_from_split (<string> <separator>)
+# list_has (<list> <element>)
+# list_has_not (<list> <element>)
+# list_length (<list>)
+# main_*(), see after the functions
+# man_do_filespec (<filespec>)
+# man_setup ()
+# man_register_file (<file> [<name> [<section>]])
+# man_search_section (<name> <section>)
+# man_set()
+# manpath_add_lang(<path> <language>)
+# manpath_add_system()
+# manpath_from_path ()
+# normalize_args (<shortopts> <longopts> <arg>*)
+# path_chop (<path>)
+# path_clean (<path>)
+# path_contains (<path> <dir>)
+# path_not_contains (<path> <dir>)
+# path_split (<path>)
+# register_file (<filename>)
+# register_title (<filespec>)
+# reset ()
+# save_stdin ()
+# string_contains (<string> <part>)
+# string_not_contains (<string> <part>)
+# tmp_cat ()
+# tmp_create (<suffix>?)
+# to_tmp (<filename>)
+# usage ()
+# version ()
+# warning (<string>)
+# whatis (<filename>)
+# where (<program>)
+
+
+########################################################################
+# Environment Variables
+########################################################################
+
+# Environment variables that exist only for this file start with an
+# underscore letter. Global variables to this file are written in
+# upper case letters, e.g. $_GLOBAL_VARIABLE; temporary variables
+# start with an underline and use only lower case letters and
+# underlines, e.g. $_local_variable .
+
+# [A-Z]* system variables, e.g. $MANPATH
+# _[A-Z_]* global file variables, e.g. $_MAN_PATH
+# _[a-z_]* temporary variables, e.g. $_manpath
+
+# Due to incompatibilities of the `ash' shell, the name of loop
+# variables in `for' must be single character
+# [a-z] local loop variables, e.g. $i
+
+
+########################################################################
+# External environment variables
+
+# If these variables are exported here then the `ash' shell coughs
+# when calling `groff' in `main_display()'.
+
+if test "${GROFFER_EXPORT_EXTERNALS}" = 'yes'; then
+
+ # external system environment variables that are explicitly used
+ export DISPLAY; # Presets the X display.
+ export LANG; # For language specific man pages.
+ export LC_ALL; # For language specific man pages.
+ export LC_MESSAGES; # For language specific man pages.
+ export PAGER; # Paging program for tty mode.
+ export PATH; # Path for the programs called (: list).
+
+ # groffer native environment variables
+ export GROFFER_OPT # preset options for groffer.
+
+ # all groff environment variables are used, see groff(1)
+ export GROFF_BIN_PATH; # Path for all groff programs.
+ export GROFF_COMMAND_PREFIX; # '' (normally) or 'g' (several troffs).
+ export GROFF_FONT_PATH; # Path to non-default groff fonts.
+ export GROFF_TMAC_PATH; # Path to non-default groff macro files.
+ export GROFF_TMPDIR; # Directory for groff temporary files.
+ export GROFF_TYPESETTER; # Preset default device.
+
+ # all GNU man environment variables are used, see man(1).
+ export MANOPT; # Preset options for man pages.
+ export MANPATH; # Search path for man pages (: list).
+ export MANROFFSEQ; # Ignored because of grog guessing.
+ export MANSECT; # Search man pages only in sections (:).
+ export SYSTEM; # Man pages for different OS's (, list).
+
+fi;
+
+
+########################################################################
+# read-only variables (global to this file)
+########################################################################
+
+# characters
+
+export _BQUOTE;
+export _BSLASH;
+export _DQUOTE;
+export _NEWLINE;
+export _LBRACK;
+export _LPAR;
+export _RBRACK;
+export _RPAR;
+export _SPACE;
+export _SQUOTE;
+export _TAB;
+
+_BQUOTE='`';
+_BSLASH='\';
+_DQUOTE='"';
+_NEWLINE='
+';
+_LBRACK='[';
+_LPAR='(';
+_RBRACK=']';
+_RPAR=')';
+_SPACE=' ';
+_SQUOTE="'";
+_TAB=' ';
+
+# function return values; `0' means ok; other values are error codes
+export _BAD;
+export _BAD2;
+export _BAD3;
+export _ERROR;
+export _GOOD;
+export _NO;
+export _OK;
+export _YES;
+
+_GOOD='0'; # return ok
+_BAD='1'; # return negatively, error code `1'
+_BAD2='2'; # return negatively, error code `2'
+_BAD3='3'; # return negatively, error code `3'
+_ERROR='255'; # for syntax errors; no `-1' in `ash'
+
+_NO="${_BAD}";
+_YES="${_GOOD}";
+_OK="${_GOOD}";
+
+# quasi-functions, call with `eval'
+export return_ok;
+export return_good;
+export return_bad;
+export return_yes;
+export return_no;
+export return_error;
+return_ok="func_pop; return ${_OK}";
+return_good="func_pop; return ${_GOOD}";
+return_bad="func_pop; return ${_BAD}";
+return_yes="func_pop; return ${_YES}";
+return_no="func_pop; return ${_NO}";
+return_error="func_pop; return ${_ERROR}";
+
+
+export _CONFFILES;
+_CONFFILES="/etc/groff/groffer.conf ${HOME}/.groff/groffer.conf";
+
+export _DEFAULT_MODES;
+_DEFAULT_MODES='ps,x,tty';
+export _DEFAULT_RESOLUTION;
+_DEFAULT_RESOLUTION='100';
+
+export _DEFAULT_TTY_DEVICE;
+_DEFAULT_TTY_DEVICE='latin1';
+
+# _VIEWER_* viewer programs for different modes (only X is necessary)
+# _VIEWER_* a comma-separated list of viewer programs (with options)
+export _VIEWER_DVI; # viewer program for dvi mode
+export _VIEWER_PS; # viewer program for ps mode
+export _VIEWER_WWW_X; # viewer program for www mode in X
+export _VIEWER_WWW_TTY; # viewer program for www mode in tty
+_VIEWER_DVI='xdvi,dvilx';
+_VIEWER_PDF='xpdf,acroread';
+_VIEWER_PS='gv,ghostview,gs_x11,gs';
+_VIEWER_WWW='mozilla,netscape,opera,amaya,arena';
+_VIEWER_X='gxditview,xditview';
+
+# Search automatically in standard sections `1' to `8', and in the
+# traditional sections `9', `n', and `o'. On many systems, there
+# exist even more sections, mostly containing a set of man pages
+# special to a specific program package. These aren't searched for
+# automatically, but must be specified on the command line.
+export _MAN_AUTO_SEC;
+_MAN_AUTO_SEC="'1' '2' '3' '4' '5' '6' '7' '8' '9' 'n' 'o'"
+
+export _PROCESS_ID; # for shutting down the program
+_PROCESS_ID="$$";
+
+
+############ the command line options of the involved programs
+#
+# The naming scheme for the options environment names is
+# $_OPTS_<prog>_<length>[_<argspec>]
+#
+# <prog>: program name GROFFER, GROFF, or CMDLINE (for all
+# command line options)
+# <length>: LONG (long options) or SHORT (single character options)
+# <argspec>: ARG for options with argument, NA for no argument;
+# without _<argspec> both the ones with and without arg.
+#
+# Each option that takes an argument must be specified with a
+# trailing : (colon).
+
+# exports
+export _OPTS_GROFFER_SHORT_NA;
+export _OPTS_GROFFER_SHORT_ARG;
+export _OPTS_GROFFER_LONG_NA;
+export _OPTS_GROFFER_LONG_ARG;
+export _OPTS_GROFF_SHORT_NA;
+export _OPTS_GROFF_SHORT_ARG;
+export _OPTS_GROFF_LONG_NA;
+export _OPTS_GROFF_LONG_ARG;
+export _OPTS_MAN_SHORT_ARG;
+export _OPTS_MAN_SHORT_NA;
+export _OPTS_MAN_LONG_ARG;
+export _OPTS_MAN_LONG_NA;
+export _OPTS_GROFFER_LONG;
+export _OPTS_GROFFER_SHORT;
+export _OPTS_GROFF_LONG;
+export _OPTS_GROFF_SHORT;
+export _OPTS_CMDLINE_SHORT_NA;
+export _OPTS_CMDLINE_SHORT_ARG;
+export _OPTS_CMDLINE_SHORT;
+export _OPTS_CMDLINE_LONG_NA;
+export _OPTS_CMDLINE_LONG_ARG;
+export _OPTS_CMDLINE_LONG;
+
+
+###### native groffer options
+
+_OPTS_GROFFER_SHORT_NA="'h' 'Q' 'v' 'V' 'X' 'Z'";
+_OPTS_GROFFER_SHORT_ARG="'T'";
+
+_OPTS_GROFFER_LONG_NA="'all' 'apropos' 'ascii' 'auto' 'default' 'dvi' \
+'groff' 'help' 'intermediate-output' 'local-file' 'location' 'man' \
+'no-location' 'no-man' 'pdf' 'ps' 'rv' 'source' 'tty' 'tty-device' \
+'version' 'whatis' 'where' 'www' 'x'";
+
+_OPTS_GROFFER_LONG_ARG="'background' 'bd' 'bg' 'bw' 'default-modes' \
+'device' 'display' 'dvi-viewer' 'extension' 'fg' 'fn' 'font' \
+'foreground' 'geometry' 'locale' 'manpath' 'mode' 'pager' \
+'pdf-viewer' 'ps-viewer' 'resolution' 'sections' 'shell' \
+'systems' 'title' 'troff-device' 'www-viewer' 'xrm' 'x-viewer'";
+
+##### options inhereted from groff
+
+_OPTS_GROFF_SHORT_NA="'a' 'b' 'c' 'e' 'g' 'i' 'l' 'p' 's' 't' 'z' \
+'C' 'E' 'G' 'N' 'R' 'S' 'U' 'V'";
+_OPTS_GROFF_SHORT_ARG="'d' 'f' 'F' 'I' 'L' 'm' 'M' 'n' 'o' 'P' 'r' \
+'w' 'W'";
+_OPTS_GROFF_LONG_NA="";
+_OPTS_GROFF_LONG_ARG="";
+
+###### man options (for parsing $MANOPT only)
+
+_OPTS_MAN_SHORT_NA="'7' 'a' 'c' 'd' 'D' 'f' 'h' 'k' 'l' 't' 'u' \
+'V' 'w' 'Z'";
+_OPTS_MAN_SHORT_ARG="'e' 'L' 'm' 'M' 'p' 'P' 'r' 'S' 'T'";
+
+_OPTS_MAN_LONG_NA="'all' 'ascii' 'apropos' 'catman' 'debug' 'default' \
+'ditroff' 'help' 'local-file' 'location' 'troff' 'update' 'version' \
+'whatis' 'where'";
+
+_OPTS_MAN_LONG_ARG="'extension' 'locale' 'manpath' \
+'pager' 'preprocessor' 'prompt' 'sections' 'systems' 'troff-device'";
+
+###### collections of options
+
+# groffer
+
+_OPTS_GROFFER_LONG="${_OPTS_GROFFER_LONG_ARG} ${_OPTS_GROFFER_LONG_NA}";
+_OPTS_GROFFER_SHORT=\
+"${_OPTS_GROFFER_SHORT_ARG} ${_OPTS_GROFFER_SHORT_NA}";
+
+# groff
+
+_OPTS_GROFF_LONG="${_OPTS_GROFF_LONG_ARG} ${_OPTS_GROFF_LONG_NA}";
+_OPTS_GROFF_SHORT="${_OPTS_GROFF_SHORT_ARG} ${_OPTS_GROFF_SHORT_NA}";
+
+# all command line options
+
+_OPTS_CMDLINE_SHORT_NA="\
+${_OPTS_GROFFER_SHORT_NA} ${_OPTS_GROFF_SHORT_NA}";
+_OPTS_CMDLINE_SHORT_ARG="\
+${_OPTS_GROFFER_SHORT_ARG} ${_OPTS_GROFF_SHORT_ARG}";
+_OPTS_CMDLINE_SHORT="${_OPTS_GROFFER_SHORT} ${_OPTS_GROFF_SHORT}";
+
+_OPTS_CMDLINE_LONG_NA="${_OPTS_GROFFER_LONG_NA} \
+${_OPTS_GROFF_LONG_NA} ${_OPTS_MAN_LONG_NA}";
+_OPTS_CMDLINE_LONG_ARG="${_OPTS_GROFFER_LONG_ARG} \
+${_OPTS_GROFF_LONG_ARG} ${_OPTS_MAN_LONG_ARG}";
+_OPTS_CMDLINE_LONG="${_OPTS_GROFFER_LONG} ${_OPTS_GROFF_LONG}";
+
+
+########################################################################
+# read-write variables (global to this file)
+########################################################################
+
+export _ADDOPTS_GROFF; # Transp. options for groff (`eval').
+export _ADDOPTS_POST; # Transp. options postproc (`eval').
+export _ADDOPTS_X; # Transp. options X postproc (`eval').
+export _DEFAULT_MODES; # Set default modes.
+export _DISPLAY_MODE; # Display mode.
+export _DISPLAY_PROG; # Viewer program to be used for display.
+export _DISPLAY_ARGS; # X resources for the viewer program.
+export _FILEARGS; # Stores filespec parameters.
+export _FUNC_STACK; # Store debugging information.
+export _REGISTERED_TITLE; # Processed file names.
+# _HAS_* from availability tests
+export _HAS_COMPRESSION; # `yes' if compression is available
+export _HAS_OPTS_GNU; # `yes' if GNU `getopt' is available
+export _HAS_OPTS_POSIX; # `yes' if POSIX `getopts' is available
+# _MAN_* finally used configuration of man searching
+export _MAN_ALL; # search all man pages per filespec
+export _MAN_ENABLE; # enable search for man pages
+export _MAN_EXT; # extension for man pages
+export _MAN_FORCE; # force file parameter to be man pages
+export _MAN_IS_SETUP; # setup man variables only once
+export _MAN_LANG; # language for man pages
+export _MAN_LANG_DONE; # language dirs added to man path
+export _MAN_PATH; # search path for man pages
+export _MAN_SEC; # sections for man pages; sep. `:'
+export _MAN_SEC_DONE; # sections added to man path
+export _MAN_SYS; # system names for man pages; sep. `,'
+export _MAN_SYS; # system names added to man path
+# _MANOPT_* as parsed from $MANOPT
+export _MANOPT_ALL; # $MANOPT --all
+export _MANOPT_EXTENSION; # $MANOPT --extension
+export _MANOPT_LANG; # $MANOPT --locale
+export _MANOPT_PATH; # $MANOPT --manpath
+export _MANOPT_PAGER; # $MANOPT --pager
+export _MANOPT_SEC; # $MANOPT --sections
+export _MANOPT_SYS; # $MANOPT --systems
+# _OPT_* as parsed from groffer command line
+export _OPT_ALL; # display all suitable man pages.
+export _OPT_APROPOS; # branch to `apropos' program.
+export _OPT_BD; # set border color in some modes.
+export _OPT_BG; # set background color in some modes.
+export _OPT_BW; # set border width in some modes.
+export _OPT_DEBUG; # print debugging information on stderr.
+export _OPT_DEFAULT_MODES; # `,'-list of modes when no mode given.
+export _OPT_DEVICE; # device option.
+export _OPT_DISPLAY; # set X display.
+export _OPT_FG; # set foreground color in some modes.
+export _OPT_FN; # set font in some modes.
+export _OPT_GEOMETRY; # set size and position of viewer in X.
+export _OPT_LANG; # set language for man pages
+export _OPT_LOCATION; # print processed file names to stderr
+export _OPT_MODE; # values: X, tty, Q, Z, ""
+export _OPT_MANPATH; # manual setting of path for man-pages
+export _OPT_PAGER; # specify paging program for tty mode
+export _OPT_RESOLUTION; # set X resolution in dpi
+export _OPT_RV; # reverse fore- and background colors.
+export _OPT_SECTIONS; # sections for man page search
+export _OPT_SYSTEMS; # man pages of different OS's
+export _OPT_TITLE; # title for gxditview window
+export _OPT_TTY_DEVICE; # set device for tty mode.
+export _OPT_V; # groff option -V.
+export _OPT_VIEWER_DVI; # viewer program for dvi mode
+export _OPT_VIEWER_PDF; # viewer program for pdf mode
+export _OPT_VIEWER_PS; # viewer program for ps mode
+export _OPT_VIEWER_WWW; # viewer program for www mode
+export _OPT_VIEWER_X; # viewer program for x mode
+export _OPT_WHATIS; # print the one-liner man info
+export _OPT_X; # groff option -X.
+export _OPT_XRM; # specify X resource.
+export _OPT_Z; # groff option -Z.
+# _TMP_* temporary files
+export _TMP_DIR; # directory for temporary files
+export _TMP_CAT; # stores concatenation of everything
+export _TMP_PREFIX; # dir and base name for temporary files
+export _TMP_STDIN; # stores stdin, if any
+
+# these variables are preset in section `Preset' after the rudim. test
+
+
+########################################################################
+# Test of rudimentary shell functionality
+########################################################################
+
+
+########################################################################
+# Test of `test'.
+#
+test "a" = "a" || exit 1;
+
+
+########################################################################
+# Test of `echo' and the `$()' construct.
+#
+echo -n '' >/dev/null || exit "${_ERROR}";
+if test "$(echo -n 'te' && echo -n '' && echo -n 'st')" != "test"; then
+ exit "${_ERROR}";
+fi;
+
+
+########################################################################
+# Test of function definitions.
+#
+_t_e_s_t_f_u_n_c_()
+{
+ return "${_OK}";
+}
+
+if _t_e_s_t_f_u_n_c_ 2>/dev/null; then
+ :
+else
+ echo 'shell does not support function definitions.' >&2;
+ exit "${_ERROR}";
+fi;
+
+
+########################################################################
+# Preset and reset of read-write global variables
+########################################################################
+
+
+# For variables that can be reset by option `--default', see reset().
+
+_FILEARGS='';
+
+# _HAS_* from availability tests
+_HAS_COMPRESSION='';
+_HAS_OPTS_GNU='';
+_HAS_OPTS_POSIX='';
+
+# _TMP_* temporary files
+_TMP_DIR='';
+_TMP_CAT='';
+_TMP_PREFIX='';
+_TMP_STDIN='';
+
+
+########################################################################
+# reset ()
+#
+# Reset the variables that can be affected by options to their default.
+#
+reset()
+{
+ if test "$#" -ne 0; then
+ error "reset() does not have arguments.";
+ fi;
+
+ _ADDOPTS_GROFF='';
+ _ADDOPTS_POST='';
+ _ADDOPTS_X='';
+ _DISPLAY_ARGS='';
+ _DISPLAY_MODE='';
+ _DISPLAY_PROG='';
+ _REGISTERED_TITLE='';
+
+ # _MAN_* finally used configuration of man searching
+ _MAN_ALL='no';
+ _MAN_ENABLE='yes'; # do search for man-pages
+ _MAN_EXT='';
+ _MAN_FORCE='no'; # first local file, then search man page
+ _MAN_IS_SETUP='no';
+ _MAN_LANG='';
+ _MAN_LANG_DONE='no';
+ _MAN_PATH='';
+ _MAN_SEC='';
+ _MAN_SEC_DONE='no';
+ _MAN_SYS='';
+ _MAN_SYS_DONE='no';
+
+ # _MANOPT_* as parsed from $MANOPT
+ _MANOPT_ALL='no';
+ _MANOPT_EXTENSION='';
+ _MANOPT_LANG='';
+ _MANOPT_PATH='';
+ _MANOPT_PAGER='';
+ _MANOPT_SEC='';
+ _MANOPT_SYS='';
+
+ # _OPT_* as parsed from groffer command line
+ _OPT_ALL='no';
+ _OPT_APROPOS='no';
+ _OPT_BD='';
+ _OPT_BG='';
+ _OPT_BW='';
+ _OPT_DEBUG='no';
+ _OPT_DEFAULT_MODES='';
+ _OPT_DEVICE='';
+ _OPT_DISPLAY='';
+ _OPT_FG='';
+ _OPT_FN='';
+ _OPT_GEOMETRY='';
+ _OPT_LANG='';
+ _OPT_LOCATION='no';
+ _OPT_MODE='';
+ _OPT_MANPATH='';
+ _OPT_PAGER='';
+ _OPT_RESOLUTION='';
+ _OPT_RV='';
+ _OPT_SECTIONS='';
+ _OPT_SYSTEMS='';
+ _OPT_TITLE='';
+ _OPT_TTY_DEVICE='';
+ _OPT_V='no';
+ _OPT_VIEWER_DVI='';
+ _OPT_VIEWER_PDF='';
+ _OPT_VIEWER_PS='';
+ _OPT_VIEWER_WWW='';
+ _OPT_VIEWER_X='';
+ _OPT_WHATIS='no';
+ _OPT_X='no';
+ _OPT_XRM='';
+ _OPT_Z='no';
+
+}
+
+reset;
+
+
+########################################################################
+# Functions for error handling and debugging
+########################################################################
+
+
+##############
+# landmark (<text>)
+#
+# Print <text> to standard error as a debugging aid.
+#
+# Globals: $_DEBUG_LM
+#
+landmark()
+{
+ if test "${_DEBUG_LM}" = 'yes'; then
+ echo ">>> $*" >&2;
+ fi;
+}
+
+landmark "1: debugging functions";
+
+
+##############
+# clean_up ()
+#
+# Clean up at exit.
+#
+clean_up()
+{
+ clean_up_secondary;
+ rm -f "${_TMP_CAT}";
+}
+
+
+##############
+# clean_up_secondary ()
+#
+# Clean up temporary files without $_TMP_CAT.
+#
+clean_up_secondary()
+{
+ rm -f "${_TMP_STDIN}";
+}
+
+
+##############
+# echo2 (<text>*)
+#
+# Output to stderr.
+#
+# Arguments : arbitrary text.
+#
+echo2()
+{
+ echo "$*" >&2;
+}
+
+
+##############
+# echo2n (<text>*)
+#
+# Output to stderr.
+#
+# Arguments : arbitrary text.
+#
+echo2n()
+{
+ echo -n "$*" >&2;
+}
+
+
+#############
+# diag (text>*)
+#
+# Output a diagnostic message to stderr
+#
+diag()
+{
+ echo2 '>>>>>'"$*";
+}
+
+
+#############
+# error (<text>*)
+#
+# Print an error message to standard error; exit with an error condition
+#
+error()
+{
+ local i;
+ local _code;
+ _code="${_ERROR}";
+ case "$#" in
+ 0) true; ;;
+ 1) echo2 'groffer error: '"$1"; ;;
+ 2)
+ echo2 'groffer error: '"$1";
+ _code="$2";
+ ;;
+ *) echo2 'groffer error: wrong number of arguments in error().'; ;;
+ esac;
+ if test "${_DEBUG}" = 'yes'; then
+ func_stack_dump;
+ fi;
+ clean_up;
+ kill "${_PROCESS_ID}" >/dev/null 2>&1;
+ kill -9 "${_PROCESS_ID}" >/dev/null 2>&1;
+ exit "${_code}";
+}
+
+
+#############
+# abort (<text>*)
+#
+# Terminate program with error condition
+#
+abort()
+{
+ error "Program aborted.";
+ exit 1;
+}
+
+
+#############
+# func_check (<func_name> <rel_op> <nr_args> "$@")
+#
+# Check number of arguments and register to _FUNC_STACK.
+#
+# Arguments: >=3
+# <func_name>: name of the calling function.
+# <rel_op>: a relational operator: = != < > <= >=
+# <nr_args>: number of arguments to be checked against <operator>
+# "$@": the arguments of the calling function.
+#
+func_check()
+{
+ local _comp;
+ local _fname;
+ local _nargs;
+ local _op;
+ local _s;
+ if test "$#" -lt 3; then
+ error 'func_check() needs at least 3 arguments.';
+ fi;
+ _fname="$1";
+ case "$3" in
+ 1)
+ _nargs="$3";
+ _s='';
+ ;;
+ 0|[2-9])
+ _nargs="$3";
+ _s='s';
+ ;;
+ *)
+ error "func_check(): third argument must be a digit.";
+ ;;
+ esac;
+ case "$2" in
+ '='|'-eq')
+ _op='-eq';
+ _comp='exactly';
+ ;;
+ '>='|'-ge')
+ _op='-ge';
+ _comp='at least';
+ ;;
+ '<='|'-le')
+ _op='-le';
+ _comp='at most';
+ ;;
+ '<'|'-lt')
+ _op='-lt';
+ _comp='less than';
+ ;;
+ '>'|'-gt')
+ _op='-gt';
+ _comp='more than';
+ ;;
+ '!='|'-ne')
+ _op='-ne';
+ _comp='not';
+ ;;
+ *)
+ error \
+ 'func_check(): second argument is not a relational operator.';
+ ;;
+ esac;
+ shift 3;
+ if test "$#" "${_op}" "${_nargs}"; then
+ do_nothing;
+ else
+ error \
+ "${_fname}"'() needs '"${_comp} ${_nargs}"' argument'"${_s}"'.';
+ fi;
+ if test "${_DEBUG}" = 'yes'; then
+ func_push "${_fname} $*";
+ fi;
+}
+
+
+#############
+# func_pop ()
+#
+# Retrieve the top element from the stack.
+#
+# The stack elements are separated by `!'; the popped element is
+# identical to the original element, except that all `!' characters
+# were removed.
+#
+# Arguments: 1
+#
+func_pop()
+{
+ if test "${_DEBUG}" = 'yes'; then
+ if test "$#" -ne 0; then
+ error 'func_pop() does not have arguments.';
+ fi;
+ case "${_FUNC_STACK}" in
+ '')
+ error 'func_pop(): stack is empty.';
+ ;;
+ *!*)
+ # split at first bang `!'.
+ _FUNC_STACK="$(echo -n ${_FUNC_STACK} \
+ | sed -e 's/^[^!]*!//')";
+ ;;
+ *)
+ _FUNC_STACK='';
+ ;;
+ esac;
+ fi;
+}
+
+
+#############
+# func_push (<element>)
+#
+# Store another element to stack.
+#
+# The stack elements are separated by `!'; if <element> contains a `!'
+# it is removed first.
+#
+# Arguments: 1
+#
+func_push()
+{
+ local _element;
+ if test "${_DEBUG}" = 'yes'; then
+ if test "$#" -ne 1; then
+ error 'func_push() needs 1 argument.';
+ fi;
+ case "$1" in
+ *'!'*)
+ # remove all bangs `!'.
+ _element="$(echo -n "$1" | sed -e 's/!//g')";
+ ;;
+ *)
+ _element="$1";
+ ;;
+ esac;
+ if test "${_FUNC_STACK}" = ''; then
+ _FUNC_STACK="${_element}";
+ else
+ _FUNC_STACK="${_element}!${_FUNC_STACK}";
+ fi;
+ fi;
+}
+
+
+#############
+# func_stack_dump ()
+#
+# Print the content of the stack. Ignore the arguments.
+#
+func_stack_dump()
+{
+ diag 'call stack:';
+ case "${_FUNC_STACK}" in
+ *!*)
+ _rest="${_FUNC_STACK}";
+ while test "${_rest}" != ''; do
+ # get part before the first bang `!'.
+ diag "$(echo -n "${_rest}" | sed -e 's/^\([^!]*\)!.*$/\1/')";
+ # delete part up to the first bang `!'.
+ _rest="$(echo -n "${_rest}" | sed -e 's/^!*[^!]*!*//')";
+ done;
+ ;;
+ *)
+ diag "${_FUNC_STACK}";
+ ;;
+ esac;
+}
+
+
+########################################################################
+# System Test
+########################################################################
+
+landmark "2: system test";
+
+# Test the availability of the system utilities used in this script.
+
+
+########################################################################
+# Test of `true'.
+#
+if true >/dev/null 2>&1; then
+ true;
+else
+ true()
+ {
+ return "${_GOOD}";
+ }
+
+ false()
+ {
+ return "${_BAD}";
+ }
+fi;
+
+
+########################################################################
+# Test of `unset'.
+#
+_test='test';
+if unset _test >/dev/null 2>&1 && test "${_test}" = ''; then
+ true;
+else
+ unset()
+ {
+ for v in "$@"; do
+ eval "$v"='';
+ done;
+ }
+fi;
+unset _test;
+
+########################################################################
+# Test of builtin `local'
+#
+
+_t_e_s_t_f_u_n_c_()
+{
+ local _test >/dev/null 2>&1 || return "${_BAD}";
+}
+
+if _t_e_s_t_f_u_n_c_; then
+ :
+else
+ local()
+ {
+ if test "$1" != ''; then
+ error "overriding global variable \`$1' with local value.";
+ fi;
+ }
+fi;
+
+
+########################################################################
+# Test of global setting in functions
+#
+_global='outside';
+_clobber='outside';
+
+_t_e_s_t_f_u_n_c_()
+{
+ local _clobber;
+ _global='inside';
+ _clobber='inside';
+}
+
+_t_e_s_t_f_u_n_c_;
+if test "${_global}" != 'inside' || test "${_clobber}" != 'outside';
+then
+ error "Cannot assign to global variables from within functions.";
+fi;
+
+unset _global;
+unset _clobber;
+
+
+########################################################################
+# Test of function `sed'.
+#
+if test "$(echo xTesTx \
+ | sed -e 's/^.\([Tt]e*x*sTT*\).*$/\1/' \
+ | sed -e '\|T|s||t|g')" != 'test';
+then
+ error 'Test of "sed" command failed.';
+fi;
+
+
+########################################################################
+# Test of function `cat'.
+#
+if test "$(echo test | cat)" != "test"; then
+ error 'Test of "cat" command failed.';
+fi;
+
+
+########################################################################
+# Test for compression.
+#
+if test "$(echo 'test' | gzip -c -d -f - 2>/dev/null)" = 'test'; then
+ _HAS_COMPRESSION='yes';
+ if echo 'test' | bzip2 -c 2>/dev/null | bzip2 -t 2>/dev/null \
+ && test "$(echo 'test' | bzip2 -c 2>/dev/null \
+ | bzip2 -d -c 2>/dev/null)" \
+ = 'test'; then
+ _HAS_BZIP='yes';
+ else
+ _HAS_BZIP='no';
+ fi;
+else
+ _HAS_COMPRESSION='no';
+ _HAS_BZIP='no';
+fi;
+
+
+########################################################################
+_t_e_s_t_f_u_n_c_()
+{
+ :
+}
+
+
+########################################################################
+# Definition of normal Functions
+########################################################################
+landmark "3: functions";
+
+########################################################################
+# abort (<text>*)
+#
+# Unconditionally terminate the program with error code;
+# useful for debugging.
+#
+# defined above
+
+
+########################################################################
+# base_name (<path>)
+#
+# Get the file name part of <path>, i.e. delete everything up to last
+# `/' from the beginning of <path>.
+#
+# Arguments : 1
+# Output : the file name part (without slashes)
+#
+base_name()
+{
+ func_check base_name = 1 "$@";
+ case "$1" in
+ */)
+ do_nothing;
+ ;;
+ */*)
+ # delete everything up to last slash `/'.
+ echo -n "$1" | sed -e '\|^.*/*\([^/]*\)$|s||\1|';
+ ;;
+ *)
+ echo -n "$1";
+ ;;
+ esac;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# catz (<file>)
+#
+# Decompress if possible or just print <file> to standard output.
+#
+# gzip, bzip2, and .Z decompression is supported.
+#
+# Arguments: 1, a file name.
+# Output: the content of <file>, possibly decompressed.
+#
+if test "${_HAS_COMPRESSION}" = 'yes'; then
+ catz()
+ {
+ func_check catz = 1 "$@";
+ case "$1" in
+ '')
+ error 'catz(): empty file name';
+ ;;
+ '-')
+ error 'catz(): for standard input use save_stdin()';
+ ;;
+ esac;
+ if is_yes "${_HAS_BZIP}"; then
+ if bzip2 -t "$1" 2>/dev/null; then
+ bzip2 -c -d "$1" 2>/dev/null;
+ eval "${return_ok}";
+ fi;
+ fi;
+ gzip -c -d -f "$1" 2>/dev/null;
+ eval "${return_ok}";
+ }
+else
+ catz()
+ {
+ func_check catz = 1 "$@";
+ cat "$1";
+ eval "${return_ok}";
+ }
+fi;
+
+
+########################################################################
+# clean_up ()
+#
+# Do the final cleaning up before exiting; used by the trap calls.
+#
+# defined above
+
+
+########################################################################
+# clean_up_secondary ()
+#
+# Do the second but final cleaning up.
+#
+# defined above
+
+
+########################################################################
+# diag (<text>*)
+#
+# Print marked message to standard error; useful for debugging.
+#
+# defined above
+
+
+########################################################################
+landmark '4: dirname()*';
+########################################################################
+
+#######################################################################
+# dirname_append (<dir> <name>)
+#
+# Append `name' to `dir' with clean handling of `/'.
+#
+# Arguments : 2
+# Output : the generated new directory name <dir>/<name>
+#
+dirname_append()
+{
+ func_check dirname_append = 2 "$@";
+ local _res;
+ if is_empty "$1"; then
+ error "dir_append(): first argument is empty.";
+ fi;
+ if is_empty "$2"; then
+ echo -n "$1";
+ else
+ dirname_chop "$1"/"$2";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# dirname_chop (<name>)
+#
+# Remove unnecessary slashes from directory name.
+#
+# Argument: 1, a directory name.
+# Output: path without double, or trailing slashes.
+#
+dirname_chop()
+{
+ func_check dirname_chop = 1 "$@";
+ local _arg;
+ local _res;
+ local _sep;
+ # replace all multiple slashes by a single slash `/'.
+ _res="$(echo -n "$1" | sed -e '\|///*|s||/|g')";
+ case "${_res}" in
+ ?*/)
+ # remove trailing slash '/';
+ echo -n "${_res}" | sed -e '\|/$|s|||';
+ ;;
+ *) echo -n "${_res}"; ;;
+ esac;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# do_filearg (<filearg>)
+#
+# Append the file, man-page, or standard input corresponding to the
+# argument to the temporary file. If this is compressed in the gzip
+# or Z format it is decompressed. A title element is generated.
+#
+# Argument either:
+# - name of an existing files.
+# - `-' to represent standard input (several times allowed).
+# - `man:name.(section)' the man-page for `name' in `section'.
+# - `man:name.section' the man-page for `name' in `section'.
+# - `man:name' the man-page for `name' in the lowest `section'.
+# - `name.section' the man-page for `name' in `section'.
+# - `name' the man-page for `name' in the lowest `section'.
+# Globals :
+# $_TMP_STDIN, $_MAN_ENABLE, $_MAN_IS_SETUP, $_OPT_MAN
+#
+# Output : none
+# Return : $_GOOD if found, ${_BAD} otherwise.
+#
+do_filearg()
+{
+ func_check do_filearg = 1 "$@";
+ local _filespec;
+ local i;
+ _filespec="$1";
+ # store sequence into positional parameters
+ case "${_filespec}" in
+ '')
+ eval "${return_good}";
+ ;;
+ '-')
+ register_file '-';
+ eval "${return_good}";
+ ;;
+ */*) # with directory part; so no man search
+ set -- 'File';
+ ;;
+ *)
+ if is_yes "${_MAN_ENABLE}"; then
+ if is_yes "${_MAN_FORCE}"; then
+ set -- 'Manpage' 'File';
+ else
+ set -- 'File' 'Manpage';
+ fi;
+ else
+ set -- 'File';
+ fi;
+ ;;
+ esac;
+ for i in "$@"; do
+ case "$i" in
+ File)
+ if test -f "${_filespec}"; then
+ if test -r "${_filespec}"; then
+ register_file "${_filespec}";
+ eval "${return_good}";
+ else
+ echo2 "could not read \`${_filespec}'";
+ eval "${return_bad}";
+ fi;
+ else
+ continue;
+ fi;
+ ;;
+ Manpage) # parse filespec as man page
+ if is_not_yes "${_MAN_IS_SETUP}"; then
+ man_setup;
+ fi;
+ if man_do_filespec "${_filespec}"; then
+ eval "${return_good}";
+ else
+ continue;
+ fi;
+ ;;
+ esac;
+ done;
+ eval "${return_bad}";
+} # do_filearg()
+
+
+########################################################################
+# do_nothing ()
+#
+# Dummy function.
+#
+do_nothing()
+{
+ return "${_OK}";
+}
+
+
+########################################################################
+# echo2 (<text>*)
+#
+# Print to standard error with final line break.
+#
+# defined above
+
+
+########################################################################
+# echo2n (<text>*)
+#
+# Print to standard error without final line break.
+#
+# defined above
+
+
+########################################################################
+# error (<text>*)
+#
+# Print error message and exit with error code.
+#
+# defined above
+
+
+########################################################################
+# func_check (<func_name> <rel_op> <nr_args> "$@")
+#
+# Check number of arguments and register to _FUNC_STACK.
+#
+# Arguments: >=3
+# <func_name>: name of the calling function.
+# <rel_op>: a relational operator: = != < > <= >=
+# <nr_args>: number of arguments to be checked against <operator>
+# "$@": the arguments of the calling function.
+#
+# defined above
+
+#########################################################################
+# func_pop ()
+#
+# Delete the top element from the function call stack.
+#
+# defined above
+
+
+########################################################################
+# func_push (<element>)
+#
+# Store another element to function call stack.
+#
+# defined above
+
+
+########################################################################
+# func_stack_dump ()
+#
+# Print the content of the stack.
+#
+# defined above
+
+
+########################################################################
+# get_first_essential (<arg>*)
+#
+# Retrieve first non-empty argument.
+#
+# Return : `1' if all arguments are empty, `0' if found.
+# Output : the retrieved non-empty argument.
+#
+get_first_essential()
+{
+ func_check get_first_essential '>=' 0 "$@";
+ local i;
+ if test "$#" -eq 0; then
+ eval "${return_ok}";
+ fi;
+ for i in "$@"; do
+ if is_not_empty "$i"; then
+ echo -n "$i";
+ eval "${return_ok}";
+ fi;
+ done;
+ eval "${return_bad}";
+}
+
+
+########################################################################
+landmark '5: is_*()';
+########################################################################
+
+########################################################################
+# is_dir (<name>)
+#
+# Test whether `name' is a directory.
+#
+# Arguments : 1
+# Return : `0' if arg1 is a directory, `1' otherwise.
+#
+is_dir()
+{
+ func_check is_dir = 1 "$@";
+ if is_not_empty "$1" && test -d "$1" && test -r "$1"; then
+ eval "${return_yes}";
+ else
+ eval "${return_no}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# is_empty (<string>)
+#
+# Test whether `string' is empty.
+#
+# Arguments : <=1
+# Return : `0' if arg1 is empty or does not exist, `1' otherwise.
+#
+is_empty()
+{
+ func_check is_empty = 1 "$@";
+ if test -z "$1"; then
+ eval "${return_yes}";
+ else
+ eval "${return_no}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# is_equal (<string1> <string2>)
+#
+# Test whether `string1' is equal to <string2>.
+#
+# Arguments : 2
+# Return : `0' both arguments are equal strings, `1' otherwise.
+#
+is_equal()
+{
+ func_check is_equal = 2 "$@";
+ if test "$1" = "$2"; then
+ eval "${return_yes}";
+ else
+ eval "${return_no}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# is_file (<name>)
+#
+# Test whether `name' is a readable file.
+#
+# Arguments : 1
+# Return : `0' if arg1 is a readable file, `1' otherwise.
+#
+is_file()
+{
+ func_check is_file = 1 "$@";
+ if is_not_empty "$1" && test -f "$1" && test -r "$1"; then
+ eval "${return_yes}";
+ else
+ eval "${return_no}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# is_not_dir (<name>)
+#
+# Test whether `name' is not a readable directory.
+#
+# Arguments : 1
+# Return : `0' if arg1 is a directory, `1' otherwise.
+#
+is_not_dir()
+{
+ func_check is_not_dir = 1 "$@";
+ if is_dir "$1"; then
+ eval "${return_no}";
+ else
+ eval "${return_yes}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# is_not_empty (<string>)
+#
+# Test whether `string' is not empty.
+#
+# Arguments : <=1
+# Return : `0' if arg1 exists and is not empty, `1' otherwise.
+#
+is_not_empty()
+{
+ func_check is_not_empty = 1 "$@";
+ if is_empty "$1"; then
+ eval "${return_no}";
+ else
+ eval "${return_yes}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# is_not_equal (<string1> <string2>)
+#
+# Test whether `string1' and <string2> differ.
+#
+# Arguments : 2
+#
+is_not_equal()
+{
+ func_check is_not_equal = 2 "$@";
+ if is_equal "$1" "$2"; then
+ eval "${return_no}";
+ else
+ eval "${return_yes}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# is_not_file (<filename>)
+#
+# Test whether `name' is a not readable file.
+#
+# Arguments : >=1 (empty allowed), more args are ignored
+#
+is_not_file()
+{
+ func_check is_not_file '>=' 1 "$@";
+ if is_file "$1"; then
+ eval "${return_no}";
+ else
+ eval "${return_yes}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# is_not_prog (<name>)
+#
+# Verify that arg is a not program in $PATH.
+#
+# Arguments : >=1 (empty allowed)
+# more args are ignored, this allows to specify progs with arguments
+#
+is_not_prog()
+{
+ func_check is_not_prog '>=' 1 "$@";
+ if where "$1" >/dev/null; then
+ eval "${return_no}";
+ else
+ eval "${return_yes}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# is_not_yes (<string>)
+#
+# Test whether `string' is not "yes".
+#
+# Arguments : 1
+#
+is_not_yes()
+{
+ func_check is_not_yes = 1 "$@";
+ if test "$1" = 'yes'; then
+ eval "${return_no}";
+ else
+ eval "${return_yes}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# is_prog (<name>)
+#
+# Determine whether arg is a program in $PATH
+#
+# Arguments : >=1 (empty allowed)
+# more args are ignored, this allows to specify progs with arguments
+#
+is_prog()
+{
+ func_check is_prog '>=' 1 "$@";
+ if where "$1" >/dev/null; then
+ eval "${return_yes}";
+ else
+ eval "${return_no}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# is_yes (<string>)
+#
+# Test whether `string' has value "yes".
+#
+# Arguments : <=1
+# Return : `0' if arg1 is `yes', `1' otherwise.
+#
+is_yes()
+{
+ func_check is_yes = 1 "$@";
+ if test "$1" = 'yes'; then
+ eval "${return_yes}";
+ else
+ eval "${return_no}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# landmark ()
+#
+# Print debugging information on standard error if $_DEBUG_LM is `yes'.
+#
+# Globals: $_DEBUG_LM
+#
+# Defined in section `Debugging functions'.
+
+
+########################################################################
+# leave ()
+#
+# Clean exit without an error.
+#
+leave()
+{
+ clean_up;
+ exit "${_OK}";
+}
+
+
+########################################################################
+landmark '6: list_*()';
+########################################################################
+
+########################################################################
+# list_append (<list> <element>...)
+#
+# Arguments: >=2
+# <list>: a space-separated list of single-quoted elements.
+# <element>: some sequence of characters.
+# Output:
+# if <list> is empty: "'<element>' '...'"
+# otherwise: "<list> '<element>' ..."
+#
+list_append()
+{
+ func_check list_append '>=' 2 "$@";
+ local _element;
+ local _res;
+ _res="$1";
+ shift;
+ for s in "$@"; do
+ case "$s" in
+ *\'*)
+ # escape each single quote by replacing each "'" (squote)
+ # by "'\''" (squote bslash squote squote);
+ # note that the backslash must be doubled for `sed'.
+ _element="$(echo -n "$s" | sed -e 's/'"${_SQUOTE}"'/&\\&&/g')";
+ ;;
+ *)
+ _element="$s";
+ ;;
+ esac;
+ _res="${_res} '${_element}'";
+ done;
+ echo -n "${_res}";
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# list_check (<list>)
+#
+# Check whether <list> is a space-separated list of '-quoted elements.
+#
+# If the test fails an error is raised.
+# If the test succeeds the argument is echoed.
+#
+# Testing criteria:
+# A list has the form "'first' 'second' '...' 'last'".
+# So it has a leading and a final quote and the elements are separated
+# by "' '" constructs. If these are all removed there should not be
+# any single-quotes left. Watch out for escaped single quotes; they
+# have the form '\'' (sq bs sq sq).
+#
+# Arguments: 1
+# Output: the argument <list> unchanged, it the check succeeded.
+#
+list_check()
+{
+ func_check list_check = 1 "$@";
+ local _list;
+ if is_empty "$1"; then
+ eval "${return_ok}";
+ fi;
+ case "$1" in
+ \'*\') _list="$1"; ;;
+ *)
+ error "list_check() bad list: $1"
+ ;;
+ esac;
+ # Remove leading single quote,
+ # remove final single quote,
+ # remove escaped single quotes (squote bslash squote squote)
+ # [note that `sed' doubles the backslash (bslash bslash)],
+ # remove field separators (squote space squote).
+ _list="$(echo -n "${_list}" \
+ | sed -e 's/^'"${_SQUOTE}"'//' \
+ | sed -e 's/'"${_SQUOTE}"'$//' \
+ | sed -e \
+ 's/'"${_SQUOTE}${_BSLASH}${_BSLASH}${_SQUOTE}${_SQUOTE}"'//g' \
+ | sed -e 's/'"${_SQUOTE}${_SPACE}${_SPACE}"'*'"${_SQUOTE}"'//g')";
+ case "${_list}" in
+ *\'*) # criterium fails if squote is left
+ error 'list_check() bad list: '"${_list}";
+ ;;
+ esac;
+ echo -n "$1";
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# list_element_from_arg (<arg>)
+#
+# Arguments: 1
+# <arg>: some sequence of characters (also single quotes allowed).
+# Output: the list element generated from <arg>.
+#
+list_element_from_arg()
+{
+ func_check list_element_from_arg = 1 "$@";
+ local _res;
+ echo -n "'";
+ # replace each single quote "'" by "'\''".
+ echo -n "$1" | sed -e 's/'\''/&\\&&/g'; # ' for emacs
+ echo -n "'";
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# list_from_args (<arg>...)
+#
+# Generate a space-separated list of single-quoted elements from args.
+#
+# Arguments:
+# <arg>: some sequence of characters.
+# Output: "'<arg>' '...'"
+#
+list_from_args()
+{
+ func_check list_from_args '>=' 1 "$@";
+ local _list;
+ _list="";
+ for s in "$@"; do
+ _list="$(list_append "${_list}" "$s")";
+ done;
+ echo -n "${_list}";
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# list_from_cmdline (<s_n> <s_a> <l_n> <l_n> [<cmdline_arg>...])
+#
+# Transform command line arguments into a normalized form.
+#
+# Options, option arguments, and file parameters are identified and
+# output each as a single-quoted argument of its own. Options and
+# file parameters are separated by a '--' argument.
+#
+# Arguments: >=4
+# <s_n>: space-separated list of short options without an arg.
+# <s_a>: space-separated list of short options that have an arg.
+# <l_n>: space-separated list of long options without an arg.
+# <l_a>: space-separated list of long options that have an arg.
+# <cmdline_arg>...: the arguments from the command line (by "$@").
+#
+# Globals: $POSIXLY_CORRECT (only kept for compatibility).
+#
+# Output: ['-[-]opt' ['optarg']]... '--' ['filename']...
+#
+# Example:
+# list_normalize 'a b' 'c' '' 'long' -a f1 -bcarg --long=larg f2
+# will result in printing:
+# '-a' '-b' '-c' 'arg' '--long' 'larg' '--' 'f1' 'f2'
+# If $POSIXLY_CORRECT is not empty, the result will be:
+# '-a' '--' 'f1' '-bcarg' '--long=larg' 'f2'
+#
+# Rationale:
+# In POSIX, the first non-option ends the option processing.
+# In GNU mode (default), non-options are sorted behind the options.
+#
+# Use this function only in the following way:
+# eval set -- "$(args_norm '...' '...' '...' '...' "$@")";
+# while test "$1" != '--'; do
+# case "$1" in
+# ...
+# esac;
+# shift;
+# done;
+# shift; #skip '--'
+# # all positional parameters ("$@") left are file name parameters.
+#
+list_from_cmdline()
+{
+ func_check list_from_cmdline '>=' 4 "$@";
+ local _fparams;
+ local _fn;
+ local _result;
+ local _long_a;
+ local _long_n;
+ local _short_a;
+ local _short_n;
+ _short_n="$(list_check "$1")"; # short options, no argument
+ _short_a="$(list_check "$2")"; # short options with argument
+ _long_n="$(list_check "$3")"; # long options, no argument
+ _long_a="$(list_check "$4")"; # long options with argument
+ shift 4;
+ _fn='list_from_cmdline():'; # for error messages
+ if test "$#" -eq 0; then
+ echo -n "'--'";
+ eval "${return_ok}";
+ fi;
+ _fparams='';
+ _result='';
+ while test "$#" -ge 1; do
+ _arg="$1";
+ shift;
+ case "$_arg" in
+ --) break; ;;
+ --?*)
+ # delete leading '--';
+ _opt="$(echo -n "${_arg}" | sed -e 's/^..//')";
+ if list_has "${_long_n}" "${_opt}"; then
+ # long option, no argument
+ _result="$(list_append "${_result}" "--${_opt}")";
+ continue;
+ fi;
+ if list_has "${_long_a}" "${_opt}"; then
+ # long option with argument
+ _result="$(list_append "${_result}" "--${_opt}")";
+ if test "$#" -le 0; then
+ error "${_fn} no argument for option --${_opt}."
+ fi;
+ _result="$(list_append "${_result}" "$1")";
+ shift;
+ continue;
+ fi;
+ # test on `--opt=arg'
+ if string_contains "${_opt}" '='; then
+ # extract option by deleting from the first '=' to the end
+ _lopt="$(echo -n "${_opt}" | sed -e 's/=.*$//')";
+ if list_has "${_long_a}" "${_lopt}"; then
+ # get the option argument by deleting up to first `='
+ _optarg="$(echo -n "${_opt}" | sed -e 's/^[^=]*=//')";
+ _result="$(list_append "${_result}" \
+ "--${_lopt}" "${_optarg}")";
+ continue;
+ fi;
+ fi;
+ error "${_fn} --${_opt} is not an option."
+ ;;
+ -?*) # short option (cluster)
+ # delete leading `-';
+ _rest="$(echo -n "${_arg}" | sed -e 's/^.//')";
+ while is_not_empty "${_rest}"; do
+ # get next short option from cluster (first char of $_rest)
+ _optchar="$(echo -n "${_rest}" | sed -e 's/^\(.\).*$/\1/')";
+ # remove first character from ${_rest};
+ _rest="$(echo -n "${_rest}" | 's/^.//')";
+ if list_has "${_short_n}" "${_optchar}"; then
+ _result="$(list_append "${_result}" "-${_optchar}")";
+ continue;
+ elif list_has "${_short_a}" "${_optchar}"; then
+ # remove leading character
+ case "${_optchar}" in
+ /) # cannot use normal `sed' separator
+ _rest="$(echo -n "${_rest}" | sed -e '\|^.|s|||')";
+ ;;
+ ?)
+ _rest="$(echo -n "${_rest}" | sed -e 's/^.//')";
+ ;;
+ *)
+ error "${_fn} several chars parsed for short option."
+ ;;
+ esac;
+ if is_empty "${_rest}"; then
+ if test "$#" -ge 1; then
+ _result="$(list_append "${_result}" \
+ "-${_optchar}" "$1")";
+ shift;
+ continue;
+ else
+ error \
+ "${_fn}"' no argument for option -'"${_optchar}."
+ fi;
+ else # rest is the argument
+ _result="$(list_append "${_result}" \
+ "-${_optchar}" "${_rest}")";
+ _rest='';
+ continue;
+ fi;
+ else
+ error "${_fn} unknown option -${_optchar}."
+ fi;
+ done;
+ ;;
+ *)
+ # Here, $_arg is not an option, so a file parameter.
+ # When $POSIXLY_CORRECT is set this ends option parsing;
+ # otherwise, the argument is stored as a file parameter and
+ # option processing is continued.
+ _fparams="$(list_append "${_fparams}" "${_arg}")";
+ if is_not_empty "$POSIXLY_CORRECT"; then
+ break;
+ fi;
+ ;;
+ esac;
+ done;
+ _result="$(list_append "${_result}" '--')";
+ if is_not_empty "${_fparams}"; then
+ _result="${_result} ${_fparams}";
+ fi;
+ if test "$#" -gt 0; then
+ _result="$(list_append "${_result}" "$@")";
+ fi;
+ echo -n "$_result";
+ eval "${return_ok}";
+} # list_from_cmdline()
+
+
+########################################################################
+# list_from_lists (<list1> <list2>...)
+#
+# Generate a list from the concatenation of the lists in the arguments.
+#
+# Arguments: >=2
+# <list*>: string of space-separated single-quoted elements.
+# Output: "'<element1_of_list1>' ..."
+#
+list_from_lists()
+{
+ func_check list_from_lists '>=' 2 "$@";
+ _list='';
+ echo -n "$*";
+ eval "${return_ok}";
+}
+
+########################################################################
+# list_from_split (<string> <separator>)
+#
+# In <string> escape white space and replace each <separator> by space.
+#
+# Arguments: 2: a <string> that is to be split into parts divided by
+# <separator>
+# Output: the resulting string
+#
+list_from_split()
+{
+ func_check list_from_split = 2 "$@";
+ local _s;
+
+ # precede each space or tab by a backslash `\' (doubled for `sed')
+ _s="$(echo -n "$1" | sed -e 's/\(['"${_SPACE}${_TAB}"']\)/\\\1/g')";
+
+ # replace split character of string by the list separator ` ' (space).
+ case "$2" in
+ /) # cannot use normal `sed' separator
+ echo -n "${_s}" | sed -e '\|'"$2"'|s|| |g';
+ ;;
+ ?) # use normal `sed' separator
+ echo -n "${_s}" | sed -e 's/'"$2"'/ /g';
+ ;;
+ ??*)
+ error 'list_from_split(): separator must be a single character.';
+ ;;
+ esac;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# list_has (<list> <element>)
+#
+# Arguments: 2
+# <list>: a space-separated list of single-quoted elements.
+# <element>: some sequence of characters.
+# Output:
+# if <list> is empty: "'<element>' '...'"
+# otherwise: "<list> '<element>' ..."
+#
+list_has()
+{
+ func_check list_has = 2 "$@";
+ if is_empty "$1"; then
+ eval "${return_no}";
+ fi;
+ _list="$1";
+ _element="$2";
+ case "$2" in
+ \'*\') _element="$2"; ;;
+ *) _element="'$2'"; ;;
+ esac;
+ if string_contains "${_list}" "${_element}"; then
+ eval "${return_yes}";
+ else
+ eval "${return_no}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# list_has_not (<list> <element>)
+#
+# Arguments: 2
+# <list>: a space-separated list of single-quoted elements.
+# <element>: some sequence of characters.
+# Output:
+# if <list> is empty: "'<element>' '...'"
+# otherwise: "<list> '<element>' ..."
+#
+list_has_not()
+{
+ func_check list_has_not = 2 "$@";
+ if is_empty "$1"; then
+ eval "${return_yes}";
+ fi;
+ _list="$1";
+ _element="$2";
+ case "$2" in
+ \'*\') _element="$2"; ;;
+ *) _element="'$2'"; ;;
+ esac;
+ if string_contains "${_list}" "${_element}"; then
+ eval "${return_no}";
+ else
+ eval "${return_yes}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# list_length (<list>)
+#
+# Arguments: 1
+# <list>: a space-separated list of single-quoted elements.
+# Output: the number of elements in <list>
+#
+list_length()
+{
+ func_check list_length = 1 "$@";
+ eval set -- "$1";
+ echo -n "$#";
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# list_prepend (<list> <element>...)
+#
+# Insert new <element> at the beginning of <list>
+#
+# Arguments: >=2
+# <list>: a space-separated list of single-quoted elements.
+# <element>: some sequence of characters.
+# Output:
+# if <list> is empty: "'<element>' ..."
+# otherwise: "'<element>' ... <list>"
+#
+list_prepend()
+{
+ func_check list_prepend '>=' 2 "$@";
+ local _res;
+ _res="$1";
+ shift;
+ for s in "$@"; do
+ # escape single quotes in list style (squote bslash squote squote).
+ _element="$(echo -n "$s" | sed -e 's/'\''/&\\&&/g')";
+ _res="'${_element}' ${_res}";
+ done;
+ echo -n "${_res}";
+ eval "${return_ok}";
+}
+
+
+########################################################################
+landmark '7: man_*()';
+########################################################################
+
+########################################################################
+# man_do_filespec (<filespec>)
+#
+# Print suitable man page(s) for filespec to $_TMP_CAT.
+#
+# Arguments : 2
+# <filespec>: argument of the form `man:name.section', `man:name',
+# `man:name(section)', `name.section', `name'.
+#
+# Globals : $_OPT_ALL
+#
+# Output : none.
+# Return : `0' if man page was found, `1' else.
+#
+# Only called from do_fileargs(), checks on $MANPATH and
+# $_MAN_ENABLE are assumed.
+#
+man_do_filespec()
+{
+ func_check man_do_filespec = 1 "$@";
+ local _got_one;
+ local _name;
+ local _prevsec;
+ local _res;
+ local _section;
+ local _spec;
+ local _string;
+ local s;
+ if is_empty "${MANPATH}"; then
+ eval "${return_bad}";
+ fi;
+ if is_empty "$1"; then
+ eval "${return_bad}";
+ fi;
+ _spec="$1";
+ _name='';
+ _section='';
+ case "${_spec}" in
+ */*) # not a man spec when it contains '/'
+ eval "${return_bad}";
+ ;;
+ man:?*\(?*\)) # man:name(section)
+ _name="$(echo -n "${_spec}" \
+ | sed -e 's/^man:\(..*\)(\(..*\))$/\1/')";
+ _section="$(echo -n "${_spec}" \
+ | sed -e 's/^man:\(..*\)(\(..*\))$/\2/')";
+ ;;
+ man:?*.?*) # man:name.section
+ _name="$(echo -n "${_spec}" \
+ | sed -e 's/^man:\(..*\)\.\(..*\)$/\1/')";
+ _section="$(echo -n "${_spec}" \
+ | sed -e 's/^man:\(..*\)\.\(..*\)$/\2/')";
+ ;;
+ man:?*) # man:name
+ _name="$(echo -n "${_spec}" | sed -e 's/^man://')";
+ ;;
+ ?*\(?*\)) # name(section)
+ _name="$(echo -n "${_spec}" \
+ | sed -e 's/^\(..*\)(\(..*\))$/\1/')";
+ _section="$(echo -n "${_spec}" \
+ | sed -e 's/^\(..*\)(\(..*\))$/\2/')";
+ ;;
+ ?*.?*) # name.section
+ _name="$(echo -n "${_spec}" \
+ | sed -e 's/^\(..*\)\.\(..*\)$/\1/')";
+ _section="$(echo -n "${_spec}" \
+ | sed -e 's/^\(..*\)\.\(..*\)$/\2/')";
+ ;;
+ ?*)
+ _name="${_filespec}";
+ ;;
+ esac;
+ if is_empty "${_name}"; then
+ eval "${return_bad}";
+ fi;
+ _got_one='no';
+ if is_empty "${_section}"; then
+ eval set -- "${_MAN_AUTO_SEC}";
+ for s in "$@"; do
+ if man_search_section "${_name}" "$s"; then # found
+ if is_yes "${_MAN_ALL}"; then
+ _got_one='yes';
+ else
+ eval "${return_good}";
+ fi;
+ fi;
+ done;
+ else
+ if man_search_section "${_name}" "${_section}"; then
+ eval "${return_good}";
+ else
+ eval "${return_bad}";
+ fi;
+ fi;
+ if is_yes "${_MAN_ALL}" && is_yes "${_got_one}"; then
+ eval "${return_good}";
+ fi;
+ eval "${return_bad}";
+} # man_do_filespec()
+
+
+########################################################################
+# man_register_file (<file> <name> [<section>])
+#
+# Write a found man page file and register the title element.
+#
+# Arguments: 1, 2, or 3; maybe empty
+# Output: none
+#
+man_register_file()
+{
+ func_check man_register_file '>=' 2 "$@";
+ case "$#" in
+ 2|3) do_nothing; ;;
+ *)
+ error "man_register_file() expects 2 or 3 arguments.";
+ ;;
+ esac;
+ if is_empty "$1"; then
+ error 'man_register_file(): file name is empty';
+ fi;
+ to_tmp "$1";
+ case "$#" in
+ 2)
+ register_title "man:$2";
+ eval "${return_ok}";
+ ;;
+ 3)
+ register_title "$2($3)";
+ eval "${return_ok}";
+ ;;
+ esac;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# man_search_section (<name> <section>)
+#
+# Retrieve man pages.
+#
+# Arguments : 2
+# Globals : $_MAN_PATH, $_MAN_EXT
+# Return : 0 if found, 1 otherwise
+#
+man_search_section()
+{
+ func_check man_search_section = 2 "$@";
+ local _dir;
+ local _ext;
+ local _got_one;
+ local _name;
+ local _prefix
+ local _section;
+ local d;
+ local f;
+ if is_empty "${_MAN_PATH}"; then
+ eval "${return_bad}";
+ fi;
+ if is_empty "$1"; then
+ eval "${return_bad}";
+ fi;
+ if is_empty "$2"; then
+ eval "${return_bad}";
+ fi;
+ _name="$1";
+ _section="$2";
+ eval set -- "$(path_split "${_MAN_PATH}")";
+ _got_one='no';
+ if is_empty "${_MAN_EXT}"; then
+ for d in "$@"; do
+ _dir="$(dirname_append "$d" "man${_section}")";
+ if is_dir "${_dir}"; then
+ _prefix="$(dirname_append "${_dir}" "${_name}.${_section}")";
+ for f in $(echo -n ${_prefix}*); do
+ if is_file "$f"; then
+ if is_yes "${_got_one}"; then
+ register_file "$f";
+ elif is_yes "${_MAN_ALL}"; then
+ man_register_file "$f" "${_name}";
+ else
+ man_register_file "$f" "${_name}" "${_section}";
+ eval "${return_good}";
+ fi;
+ _got_one='yes';
+ fi;
+ done;
+ fi;
+ done;
+ else
+ _ext="${_MAN_EXT}";
+ # check for directory name having trailing extension
+ for d in "$@"; do
+ _dir="$(dirname_append $d man${_section}${_ext})";
+ if is_dir "${_dir}"; then
+ _prefix="$(dirname_append "${_dir}" "${_name}.${_section}")";
+ for f in ${_prefix}*; do
+ if is_file "$f"; then
+ if is_yes "${_got_one}"; then
+ register_file "$f";
+ elif is_yes "${_MAN_ALL}"; then
+ man_register_file "$f" "${_name}";
+ else
+ man_register_file "$f" "${_name}" "${_section}";
+ eval "${return_good}";
+ fi;
+ _got_one='yes';
+ fi;
+ done;
+ fi;
+ done;
+ # check for files with extension in directories without extension
+ for d in "$@"; do
+ _dir="$(dirname_append "$d" "man${_section}")";
+ if is_dir "${_dir}"; then
+ _prefix="$(dirname_append "${_dir}" \
+ "${_name}.${_section}${_ext}")";
+ for f in ${_prefix}*; do
+ if is_file "$f"; then
+ if is_yes "${_got_one}"; then
+ register_file "$f";
+ elif is_yes "${_MAN_ALL}"; then
+ man_register_file "$f" "${_name}";
+ else
+ man_register_file "$f" "${_name}" "${_section}";
+ eval "${return_good}";
+ fi;
+ _got_one='yes';
+ fi;
+ done;
+ fi;
+ done;
+ fi;
+ if is_yes "${_MAN_ALL}" && is_yes "${_got_one}"; then
+ eval "${return_good}";
+ fi;
+ eval "${return_bad}";
+} # man_search_section()
+
+
+########################################################################
+# man_setup ()
+#
+# Setup the variables $_MAN_* needed for man page searching.
+#
+# Globals:
+# in: $_OPT_*, $_MANOPT_*, $LANG, $LC_MESSAGES, $LC_ALL,
+# $MANPATH, $MANROFFSEQ, $MANSEC, $PAGER, $SYSTEM, $MANOPT.
+# out: $_MAN_PATH, $_MAN_LANG, $_MAN_SYS, $_MAN_LANG, $_MAN_LANG2,
+# $_MAN_SEC, $_MAN_ALL
+# in/out: $_MAN_ENABLE
+#
+# The precedence for the variables related to `man' is that of GNU
+# `man', i.e.
+#
+# $LANG; overridden by
+# $LC_MESSAGES; overridden by
+# $LC_ALL; this has the same precedence as
+# $MANPATH, $MANROFFSEQ, $MANSEC, $PAGER, $SYSTEM; overridden by
+# $MANOPT; overridden by
+# the groffer command line options.
+#
+man_setup()
+{
+ func_check main_man_setup = 0 "$@";
+ local _lang;
+
+ if is_yes "${_MAN_IS_SETUP}"; then
+ eval "${return_ok}";
+ fi;
+ _MAN_IS_SETUP='yes';
+
+ if is_not_yes "${_MAN_ENABLE}"; then
+ eval "${return_ok}";
+ fi;
+
+ # determine basic path for man pages
+ _MAN_PATH="$(get_first_essential \
+ "${_OPT_MANPATH}" "${_MANOPT_PATH}" "${MANPATH}")";
+ if is_empty "${_MAN_PATH}"; then
+ if is_prog 'manpath'; then
+ _MAN_PATH="$(manpath 2>/dev/null)"; # not always available
+ fi;
+ fi;
+ if is_empty "${_MAN_PATH}"; then
+ manpath_set_from_path;
+ else
+ _MAN_PATH="$(path_clean "${_MAN_PATH}")";
+ fi;
+ if is_empty "${_MAN_PATH}"; then
+ _MAN_ENABLE="no";
+ eval "${return_ok}";
+ fi;
+
+ _MAN_ALL="$(get_first_essential "${_OPT_ALL}" "${_MANOPT_ALL}")";
+ if is_empty "${_MAN_ALL}"; then
+ _MAN_ALL='no';
+ fi;
+
+ _MAN_SYS="$(get_first_essential \
+ "${_OPT_SYSTEMS}" "${_MANOPT_SYS}" "${SYSTEM}")";
+ _lang="$(get_first_essential \
+ "${_OPT_LANG}" "${LC_ALL}" "${LC_MESSAGES}" "${LANG}")";
+ case "${_lang}" in
+ C|POSIX)
+ _MAN_LANG="";
+ _MAN_LANG2="";
+ ;;
+ ?)
+ _MAN_LANG="${_lang}";
+ _MAN_LANG2="";
+ ;;
+ *)
+ _MAN_LANG="${_lang}";
+ # get first two characters of $_lang
+ _MAN_LANG2="$(echo -n "${_lang}" | sed -e 's/^\(..\).*$/\1/')";
+ ;;
+ esac;
+ # from now on, use only $_LANG, forget about $_OPT_LANG, $LC_*.
+
+ manpath_add_lang_sys; # this is very slow
+
+ _MAN_SEC="$(get_first_essential \
+ "${_OPT_SECT}" "${_MANOPT_SEC}" "${MANSEC}")";
+ if is_empty "${_MAN_PATH}"; then
+ _MAN_ENABLE="no";
+ eval "${return_ok}";
+ fi;
+
+ _MAN_EXT="$(get_first_essential \
+ "${_OPT_EXTENSION}" "${_MANOPT_EXTENSION}")";
+ eval "${return_ok}";
+} # man_setup()
+
+
+########################################################################
+landmark '8: manpath_*()';
+########################################################################
+
+########################################################################
+# manpath_add_lang_sys ()
+#
+# Add language and operating system specific directories to man path.
+#
+# Arguments : 0
+# Output : none
+# Globals:
+# in: $_MAN_SYS: has the form `os1,os2,...', a comma separated
+# list of names of operating systems.
+# $_MAN_LANG and $_MAN_LANG2: each a single name
+# in/out: $_MAN_PATH: has the form `dir1:dir2:...', a colon
+# separated list of directories.
+#
+manpath_add_lang_sys()
+{
+ func_check manpath_add_lang_sys = 0 "$@";
+ local p;
+ local _mp;
+ if is_empty "${_MAN_PATH}"; then
+ eval "${return_ok}";
+ fi;
+ # twice test both sys and lang
+ eval set -- "$(path_split "${_MAN_PATH}")";
+ _mp='';
+ for p in "$@"; do # loop on man path directories
+ _mp="$(_manpath_add_lang_sys_single "${_mp}" "$p")";
+ done;
+ eval set -- "$(path_split "${_mp}")";
+ for p in "$@"; do # loop on man path directories
+ _mp="$(_manpath_add_lang_sys_single "${_mp}" "$p")";
+ done;
+ _MAN_PATH="$(path_chop "${_mp}")";
+ eval "${return_ok}";
+}
+
+
+_manpath_add_lang_sys_single()
+{
+ # To the directory in $1 append existing sys/lang subdirectories
+ # Function is necessary to split the OS list.
+ #
+ # globals: in: $_MAN_SYS, $_MAN_LANG, $_MAN_LANG2
+ # argument: 2: `man_path' and `dir'
+ # output: colon-separated path of the retrieved subdirectories
+ #
+ local d;
+# if test "$#" -ne 2; then
+# error "manpath_add_system_single() needs 2 arguments.";
+# fi;
+ _res="$1";
+ _parent="$2";
+ eval set -- "$(list_from_split "${_MAN_SYS}" ',')";
+ for d in "$@" "${_MAN_LANG}" "${_MAN_LANG2}"; do
+ _dir="$(dirname_append "${_parent}" "$d")";
+ if path_not_contains "${_res}" "${_dir}" && is_dir "${_dir}"; then
+ _res="${_res}:${_dir}";
+ fi;
+ done;
+ if path_not_contains "${_res}" "${_parent}"; then
+ _res="${_res}:${_parent}";
+ fi;
+ path_chop "${_res}";
+}
+
+# end manpath_add_lang_sys ()
+
+
+########################################################################
+# manpath_set_from_path ()
+#
+# Determine basic search path for man pages from $PATH.
+#
+# Return: `0' if a valid man path was retrieved.
+# Output: none
+# Globals:
+# in: $PATH
+# out: $_MAN_PATH
+#
+manpath_set_from_path()
+{
+ func_check manpath_set_from_path = 0 "$@";
+ local _base;
+ local _mandir;
+ local _manpath;
+ local d;
+ local e;
+ _manpath='';
+
+ # get a basic man path from $PATH
+ if is_not_empty "${PATH}"; then
+ eval set -- "$(path_split "${PATH}")";
+ for d in "$@"; do
+ # delete the final `/bin' part
+ _base="$(echo -n "$d" | sed -e '\|//*bin/*$|s|||')";
+ for e in /share/man /man; do
+ _mandir="${_base}$e";
+ if test -d "${_mandir}" && test -r "${_mandir}"; then
+ _manpath="${_manpath}:${_mandir}";
+ fi;
+ done;
+ done;
+ fi;
+
+ # append some default directories
+ for d in /usr/local/share/man /usr/local/man \
+ /usr/share/man /usr/man \
+ /usr/X11R6/man /usr/openwin/man \
+ /opt/share/man /opt/man \
+ /opt/gnome/man /opt/kde/man; do
+ if path_not_contains "${_manpath}" "$d" && is_dir "$d"; then
+ _manpath="${_manpath}:$d";
+ fi;
+ done;
+
+ _MAN_PATH="${_manpath}";
+ eval "${return_ok}";
+} # manpath_set_from_path()
+
+
+########################################################################
+landmark '9: path_*()';
+########################################################################
+
+########################################################################
+# path_chop (<path>)
+#
+# Remove unnecessary colons from path.
+#
+# Argument: 1, a colon separated path.
+# Output: path without leading, double, or trailing colons.
+#
+path_chop()
+{
+ func_check path_chop = 1 "$@";
+ local _res;
+
+ # replace multiple colons by a single colon `:'
+ # remove leading and trailing colons
+ echo -n "$1" | sed -e 's/:::*/:/g' |
+ sed -e 's/^:*//' |
+ sed -e 's/:*$//';
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# path_clean (<path>)
+#
+# Remove non-existing directories from a colon-separated list.
+#
+# Argument: 1, a colon separated path.
+# Output: colon-separated list of existing directories.
+#
+path_clean()
+{
+ func_check path_clean = 1 "$@";
+ local _arg;
+ local _dir;
+ local _res;
+ local i;
+ if test "$#" -ne 1; then
+ error 'path_clean() needs 1 argument.';
+ fi;
+ _arg="$1";
+ eval set -- "$(path_split "${_arg}")";
+ _res="";
+ for i in "$@"; do
+ if is_not_empty "$i" \
+ && path_not_contains "${_res}" "$i" \
+ && is_dir "$i";
+ then
+ case "$i" in
+ ?*/) _res="${_res}$(dirname_chop "$i")"; ;;
+ *) _res="${_res}:$i";
+ esac;
+ fi;
+ done;
+ if path_chop "${_res}"; then
+ eval "${return_ok}";
+ else
+ eval "${return_badk}";
+ fi;
+}
+
+
+########################################################################
+# path_contains (<path> <dir>)
+#-
+# Test whether `dir' is contained in `path', a list separated by `:'.
+#
+# Arguments : 2 arguments.
+# Return : `0' if arg2 is substring of arg1, `1' otherwise.
+#
+path_contains()
+{
+ func_check path_contains = 2 "$@";
+ case ":$1:" in
+ *":$2:"*)
+ eval "${return_yes}";
+ ;;
+ *)
+ eval "${return_no}";
+ ;;
+ esac;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# path_not_contains (<path> <dir>)
+#-
+# Test whether `dir' is not contained in colon separated `path'.
+#
+# Arguments : 2 arguments.
+#
+path_not_contains()
+{
+ func_check path_not_contains = 2 "$@";
+ if path_contains "$1" "$2"; then
+ eval "${return_no}";
+ else
+ eval "${return_yes}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# path_split (<path>)
+#
+# In `path' escape white space and replace each colon by a space.
+#
+# Arguments: 1: a colon-separated path
+# Output: the resulting list, process with `eval set --'
+#
+path_split()
+{
+ func_check path_split = 1 "$@";
+ list_from_split "$1" ':';
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# reset ()
+#
+# Reset the variables that can be affected by options to their default.
+#
+#
+# Defined in section `Preset' after the rudimentary shell tests.
+
+
+########################################################################
+landmark '10: register_*()';
+########################################################################
+
+########################################################################
+# register_file (<filename>)
+#
+# Write a found file and register the title element.
+#
+# Arguments: 1: a file name
+# Output: none
+#
+register_file()
+{
+ func_check register_file = 1 "$@";
+ if is_empty "$1"; then
+ error 'register_file(): file name is empty';
+ fi;
+ if is_equal "$1" '-'; then
+ to_tmp "${_TMP_STDIN}";
+ register_title '-';
+ else
+ to_tmp "$1";
+ register_title "$(base_name "$1")";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# register_title (<filespec>)
+#
+# Create title element from <filespec> and append to $_REGISTERED_TITLE
+#
+# Globals: $_REGISTERED_TITLE (rw)
+#
+register_title()
+{
+ func_check register_title = 1 "$@";
+ local _title;
+ if is_empty "$1"; then
+ eval "${return_ok}";
+ fi;
+ _title="$(base_name "$1")"; # remove directory part
+
+ # remove extension `.gz'
+ _title="$(echo -n "${_title}" | sed -e 's/\.gz$//')";
+ # remove extension `.Z'
+ _title="$(echo -n "${_title}" | sed -e 's/\.Z$//')";
+
+ if is_empty "${_title}"; then
+ eval "${return_ok}";
+ fi;
+ _REGISTERED_TITLE="${_REGISTERED_TITLE} ${_title}";
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# save_stdin ()
+#
+# Store standard input to temporary file (with decompression).
+#
+if test "${_HAS_COMPRESSION}" = 'yes'; then
+ save_stdin()
+ {
+ local _f;
+ func_check save_stdin = 0 "$@";
+ _f="$(tmp_create)";
+ cat >"${_f}";
+ catz "${_f}" >"${_TMP_STDIN}";
+ rm -f "${_f}";
+ eval "${return_ok}";
+ }
+else
+ save_stdin()
+ {
+ func_check save_stdin = 0 "$@";
+ cat >"${_TMP_STDIN}";
+ eval "${return_ok}";
+ }
+fi;
+
+
+########################################################################
+landmark '11: stack_*()';
+########################################################################
+
+########################################################################
+# string_contains (<string> <part>)
+#
+# Test whether `part' is contained in `string'.
+#
+# Arguments : 2 text arguments.
+# Return : `0' if arg2 is substring of arg1, `1' otherwise.
+#
+string_contains()
+{
+ func_check string_contains = 2 "$@";
+ case "$1" in
+ *"$2"*)
+ eval "${return_yes}";
+ ;;
+ *)
+ eval "${return_no}";
+ ;;
+ esac;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# string_not_contains (<string> <part>)
+#
+# Test whether `part' is not substring of `string'.
+#
+# Arguments : 2 text arguments.
+# Return : `0' if arg2 is substring of arg1, `1' otherwise.
+#
+string_not_contains()
+{
+ func_check string_not_contains = 2 "$@";
+ if string_contains "$1" "$2"; then
+ eval "${return_no}";
+ else
+ eval "${return_yes}";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+landmark '12: tmp_*()';
+########################################################################
+
+########################################################################
+# tmp_cat ()
+#
+# output the temporary cat file (the concatenation of all input)
+#
+tmp_cat()
+{
+ cat "${_TMP_CAT}";
+}
+
+
+########################################################################
+# tmp_create (<suffix>?)
+#
+# create temporary file
+#
+# It's safe to use the shell process ID together with a suffix to
+# have multiple temporary files.
+#
+# Output : name of created file
+#
+tmp_create()
+{
+ func_check tmp_create '<=' 1 "$@";
+ local _tmp;
+ _tmp="${_TMP_PREFIX}${_PROCESS_ID}$1";
+ echo -n >"${_tmp}";
+ echo -n "${_tmp}";
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# to_tmp (<filename>)
+#
+# print file (decompressed) to the temporary cat file
+#
+to_tmp()
+{
+ func_check to_tmp = 1 "$@";
+ if is_file "$1"; then
+ if is_yes "${_OPT_LOCATION}"; then
+ echo2 "$1";
+ fi;
+ if is_yes "${_OPT_WHATIS}"; then
+ what_is "$1" >>"${_TMP_CAT}";
+ else
+ catz "$1" >>"${_TMP_CAT}";
+ fi;
+ else
+ error "to_tmp(): could not read file \`$1'.";
+ fi;
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# usage ()
+#
+# print usage information to stderr
+#
+usage()
+{
+ func_check usage = 0 "$@";
+ echo2;
+ version;
+ cat >&2 <<EOF
+Copyright (C) 2001 Free Software Foundation, Inc.
+This is free software licensed under the GNU General Public License.
+
+EOF
+
+ echo2 "Usage: ${_PROGRAM_NAME} ${_header} [option]... [filespec]...";
+
+ cat >&2 <<EOF
+
+where "filespec" is one of
+ "filename" name of a readablefile
+ "-" for standard input
+ "man:name.n" man page "name" in section "n"
+ "man:name" man page "name" in first section found
+ "name.n" man page "name" in section "n"
+ "name" man page "name" in first section found
+and some more (see groff(1) for details).
+
+Display roff files, standard input, and/or Unix manual pages with
+in a X window viewer or in a text pager.
+"-" stands for including standard input.
+"manpage" is the name of a man page, "x" its section.
+All input is decompressed on-the-fly (by gzip).
+
+-h --help print this usage message.
+-Q --source output as roff source.
+-T --device=name pass to groff using output device "name".
+-v --version print version information.
+
+All other short options are interpreted as "groff" formatting
+parameters and are transferred unmodified. The following groff
+options imply groff mode (groffer viewing disabled):
+
+-X display with "gxditview" using groff -X.
+-V display the groff execution pipe instead of formatting.
+-Z --ditroff --intermediate-output
+ generate groff intermediate output without
+ post-processing and viewing like groff -Z.
+
+The most important long options are
+
+--auto-modes=mode1,mode2,...
+ set sequence of automatically tried modes.
+--bg set background color (not for all modes).
+--default reset effects of option processing so far.
+--display set the X device when displaying in X.
+--dpi=res set resolution to "res" ("75" (default) or "100").
+--dvi display in a viewer for TeX device independent format.
+--dvi-viewer choose the viewer program for dvi mode.
+--extension=ext restrict man pages to section suffix.
+--fg set foreground color (not for all modes).
+--geometry=geom set the window size and position when displaying in X.
+--groff process like groff, disable viewing features.
+--local-file same as --no-man.
+--locale=lang preset the language for man pages.
+--location print file locations additionally to standard error.
+--man check file parameters first whether they are man pages.
+--mode=auto|dvi|groff|pdf|ps|source|tty|www|x
+ choose display mode.
+--no-location disable former call to "--location".
+--no-man disable man-page facility.
+--pager=program preset the paging program for tty mode.
+--pdf display in a PDF viewer.
+--pdf-viewer choose the viewer program for pdf mode.
+--ps display in a Postscript viewer.
+--ps-viewer choose the viewer program for ps mode.
+--shell specify shell under which to run this program.
+--systems=os1,os2,...
+ search man pages for different operating systems.
+--title='text' set the title of the viewer window (not in all modes.
+--tty force paging on text terminal even when in X.
+--www display in a web browser.
+--www-viewer choose the web browser for www mode.
+--x display in an X roff viewer.
+--x-viewer choose viewer program for x mode.
+--xrm='resource' set X resouce.
+
+EOF
+ eval "${return_ok}";
+}
+
+
+########################################################################
+# version ()
+#
+# print version information to stderr
+#
+version()
+{
+ echo2 "${_PROGRAM_NAME} ${_PROGRAM_VERSION} of ${_LAST_UPDATE}";
+ # also display groff's version, but not the called subprograms
+ groff -v 2>&1 | sed -e '/^ *$/q' | sed -e '1s/^/is part of /' >&2;
+}
+
+
+########################################################################
+# warning (<string>)
+#
+# Print warning to stderr
+#
+warning()
+{
+ echo2 "warning: $*";
+}
+
+
+########################################################################
+# what_is (<filename>)
+#
+# Interpret <filename> as a man page and display its `whatis'
+# information as a fragment written in the groff language.
+#
+what_is()
+{
+ func_check what_is = 1 "$@";
+ local _res;
+ local _dot;
+ if is_not_file "$1"; then
+ error "what_is(): argument is not a readable file."
+ fi;
+ _dot='^\.['"${_SPACE}${_TAB}"']*';
+ echo '.br';
+ echo "$1: ";
+ echo '.br';
+ echo -n ' ';
+ # grep the line containing `.TH' macro, if any
+ _res="$(catz "$1" | sed -e '/'"${_dot}"'TH /p
+d')";
+ if is_not_empty "${_res}"; then # traditional man style
+ # get the text between the first and the second `.SH' macro, by
+ # - delete up to first .SH;
+ # - of this, print everything up to next .SH, and delete the rest;
+ # - of this, delete the final .SH line;
+ catz "$1" | sed -e '1,/'"${_dot}"'SH/d' \
+ | sed -e '1,/'"${_dot}"'SH/p
+d' \
+ | sed -e '/'"${_dot}"'SH/d';
+ eval "${return_ok}";
+ fi;
+ # grep the line containing `.Dd' macro, if any
+ _res="$(catz "$1" | sed -e '/'"${_dot}"'Dd /p
+d')";
+ if is_not_empty "${_res}"; then # BSD doc style
+ # get the text between the first and the second `.Nd' macro, by
+ # - delete up to first .Nd;
+ # - of this, print everything up to next .Nd, and delete the rest;
+ # - of this, delete the final .Nd line;
+ catz "$1" | sed -e '1,/'"${_dot}"'Nd/d' \
+ | sed -e '1,/'"${_dot}"'Nd/p
+d' \
+ | sed -e '/'"${_dot}"'Nd/d';
+ eval "${return_ok}";
+ fi;
+ echo 'is not a man page.';
+ eval "${return_bad}";
+}
+
+
+########################################################################
+# where (<program>)
+#
+# Output path of a program if in $PATH.
+#
+# Arguments : >=1 (empty allowed)
+# more args are ignored, this allows to specify progs with arguments
+# Return : `0' if arg1 is a program in $PATH, `1' otherwise.
+#
+where()
+{
+ func_check where '>=' 1 "$@";
+ local _file;
+ local _arg;
+ local p;
+ _arg="$1";
+ if is_empty "${_arg}"; then
+ eval "${return_bad}";
+ fi;
+ case "${_arg}" in
+ /*)
+ if test -f "${_arg}" && test -x "${_arg}"; then
+ eval "${return_ok}";
+ else
+ eval "${return_bad}";
+ fi;
+ ;;
+ esac;
+ eval set -- "$(path_split "${PATH}")";
+ for p in "$@"; do
+ case "$p" in
+ */) _file=$p${_arg}; ;;
+ *) _file=$p/${_arg}; ;;
+ esac;
+ if test -f "${_file}" && test -x "${_file}"; then
+ echo -n "${_file}";
+ eval "${return_ok}";
+ fi;
+ done;
+ eval "${return_bad}";
+}
+
+
+########################################################################
+# main
+########################################################################
+
+# The main area contains the following parts:
+# - main_init(): initialize temporary files and set exit trap
+# - parse $MANOPT
+# - main_parse_args(): argument parsing
+# - determine display mode
+# - process filespec arguments
+# - setup X resources
+# - do the displaying
+
+# These parts are implemented as functions, being defined below in the
+# sequence they are called in the main() function.
+
+
+#######################################################################
+# main_init ()
+#
+# set exit trap and create temporary files
+#
+# Globals: $_TMP_CAT, $_TMP_STDIN
+#
+landmark '13: main_init()';
+main_init()
+{
+ func_check main_init = 0 "$@";
+ # call clean_up() on any signal
+ trap clean_up 2>/dev/null || true;
+
+ for f in ${_CONFFILES}; do
+ if is_file "$f"; then
+ . "$f";
+ fi;
+ done;
+
+ # determine temporary directory
+ for d in "${GROFF_TMPDIR}" "${TMPDIR}" "${TMP}" "${TEMP}" \
+ "${TEMPDIR}" "${HOME}"'/tmp' '/tmp' "${HOME}" '.';
+ do
+ if test "$d" != ""; then
+ if test -d "$d" && test -r "$d" && test -w "$d"; then
+ _TMP_DIR="$d";
+ break;
+ fi;
+ fi;
+ done;
+ unset d;
+ if test "${_TMP_DIR}" = ""; then
+ error "Couldn't find a directory for storing temorary files.";
+ fi;
+ _TMP_PREFIX="${_TMP_DIR}/${_PROGRAM_NAME}";
+
+ _TMP_CAT="$(tmp_create)";
+ _TMP_STDIN="$(tmp_create i)";
+ eval "${return_ok}";
+} # main_init()
+
+
+########################################################################
+# main_parse_MANOPT ()
+#
+# Parse $MANOPT; this clobbered by the command line.
+#
+# Globals:
+# in: $MANOPT, $_OPTS_MAN_*
+# out: $_MANOPT_*
+# in/out: $GROFFER_OPT
+#
+landmark '14: main_parse_MANOPT()';
+main_parse_MANOPT()
+{
+ func_check main_parse_MANOPT = 0 "$@";
+ local _opt;
+ local _list;
+ _list='';
+ # feed in $MANOPT
+ eval set -- "$(list_from_cmdline \
+ "${_OPTS_MAN_SHORT_NA}" "${_OPTS_MAN_SHORT_ARG}" \
+ "${_OPTS_MAN_LONG_NA}" "${_OPTS_MAN_LONG_ARG}" \
+ "${MANOPT}")";
+ until test "$#" -le 0 || is_equal "$1" '--'; do
+ _opt="$1";
+ shift;
+ case "${_opt}" in
+ -7|--ascii)
+ _list="$(list_append "${_list}" '--ascii')";
+ ;;
+ -a|--all)
+ _list="$(list_append "${_list}" '--all')";
+ ;;
+ -c|--catman)
+ do_nothing;
+ shift;
+ ;;
+ -d|--debug)
+ _list="$(list_append "${_list}" '--debug')";
+ ;;
+ -D|--default)
+ # undo all man options so far
+ _list='';
+ ;;
+ -e|--extension)
+ _list="$(list_append "${_list}" '--extension')";
+ shift;
+ ;;
+ -f|--whatis)
+ _list="$(list_append "${_list}" '--whatis')";
+ shift;
+ ;;
+ -h|--help)
+ do_nothing;
+ shift;
+ ;;
+ -k|--apropos)
+ _list="$(list_append "${_list}" '--apropos')";
+ shift;
+ ;;
+ -l|--local-file)
+ _list="$(list_append "${_list}" '--local-file')";
+ ;;
+ -L|--locale)
+ _list="$(list_append "${_list}" '--locale' "$1")";
+ shift;
+ ;;
+ -m|--systems)
+ _list="$(list_append "${_list}" '--systems' "$1")";
+ shift;
+ ;;
+ -M|--manpath)
+ _list="$(list_append "${_list}" '--manpath' "$1")";
+ shift;
+ ;;
+ -p|--preprocessor)
+ do_nothing;
+ shift;
+ ;;
+ -P|--pager)
+ _list="$(list_append "${_list}" '--pager' "$1")";
+ shift;
+ ;;
+ -r|--prompt)
+ do_nothing;
+ shift;
+ ;;
+ -S|--sections)
+ _list="$(list_append "${_list}" '--sections' "$1")";
+ shift;
+ ;;
+ -t|--troff)
+ do_nothing;
+ shift;
+ ;;
+ -T|--device)
+ _list="$(list_append "${_list}" '-T' "$1")";
+ shift;
+ ;;
+ -u|--update)
+ do_nothing;
+ shift;
+ ;;
+ -V|--version)
+ do_nothing;
+ ;;
+ -w|--where|--location)
+ _list="$(list_append "${_list}" '--location')";
+ ;;
+ -Z|--ditroff)
+ _list="$(list_append "${_list}" '-Z' "$1")";
+ shift;
+ ;;
+ # ignore all other options
+ esac;
+ done;
+ GROFFER_OPT="$(list_from_lists "${_list}" "${GROFFER_OPT}")";
+ eval "${return_ok}";
+} # main_parse_MANOPT()
+
+
+########################################################################
+# main_parse_args (<command_line_args>*)
+#
+# Parse arguments; process options and filespec parameters
+#
+# Arguments: pass the command line arguments unaltered.
+# Globals:
+# in: $_OPTS_*
+# out: $_OPT_*, $_ADDOPTS, $_FILEARGS
+#
+landmark '15: main_parse_args()';
+main_parse_args()
+{
+ func_check main_parse_args '>=' 0 "$@";
+ local _arg;
+ local _code;
+ local _dpi;
+ local _longopt;
+ local _mode;
+ local _opt;
+ local _optchar;
+ local _optarg;
+ local _opts;
+ local _string;
+
+ eval set -- "${GROFFER_OPT}" '"$@"';
+
+ eval set -- "$(list_from_cmdline \
+ "$_OPTS_CMDLINE_SHORT_NA" "$_OPTS_CMDLINE_SHORT_ARG" \
+ "$_OPTS_CMDLINE_LONG_NA" "$_OPTS_CMDLINE_LONG_ARG" \
+ "$@")";
+
+# By the call of `eval', unnecessary quoting was removed. So the
+# positional shell parameters ($1, $2, ...) are now guaranteed to
+# represent an option or an argument to the previous option, if any;
+# then a `--' argument for separating options and
+# parameters; followed by the filespec parameters if any.
+
+# Note, the existence of arguments to options has already been checked.
+# So a check for `$#' or `--' should not be done for arguments.
+
+ until test "$#" -le 0 || is_equal "$1" '--'; do
+ _opt="$1"; # $_opt is fed into the option handler
+ shift;
+ case "${_opt}" in
+ -h|--help)
+ usage;
+ leave;
+ ;;
+ -Q|--source) # output source code (`Quellcode').
+ _OPT_MODE='source';
+ ;;
+ -T|--device|--troff-device)
+ # device; arg
+ _OPT_DEVICE="$1";
+ shift;
+ ;;
+ -v|--version)
+ version;
+ leave;
+ ;;
+ -V)
+ _OPT_V='yes';
+ ;;
+ -X)
+ _OPT_X='yes';
+ ;;
+ -Z|--ditroff|--intermediate-output)
+ # groff intermediate output
+ _OPT_Z='yes';
+ ;;
+ -?)
+ # delete leading `-'
+ _optchar="$(echo -n "${_opt}" | sed -e 's/^.//')";
+ if list_has "${_OPTS_GROFF_SHORT_NA}" "${_optchar}";
+ then
+ _ADDOPTS_GROFF="$(list_append "${_ADDOPTS_GROFF}" \
+ "${_opt}")";
+ elif list_has "${_OPTS_GROFF_SHORT_ARG}" "${_optchar}";
+ then
+ _ADDOPTS_GROFF="$(list_append "${_ADDOPTS_GROFF}" \
+ "${_opt}" "$1")";
+ shift;
+ else
+ error "Unknown option : \`$1'";
+ fi;
+ ;;
+ --all)
+ _OPT_ALL="yes";
+ ;;
+ --ascii)
+ _ADDOPTS_GROFF="$(list_append "${_ADDOPTS_GROFF}" \
+ '-mtty-char')";
+ ;;
+ --apropos)
+ _OPT_APROPOS="yes";
+ ;;
+ --auto) # the default automatic mode
+ _mode='';
+ ;;
+ --bd) # border color for viewers, arg;
+ _OPT_BD="$1";
+ shift;
+ ;;
+ --bg|--backgroud) # background color for viewers, arg;
+ _OPT_BG="$1";
+ shift;
+ ;;
+ --bw) # border width for viewers, arg;
+ _OPT_BW="$1";
+ shift;
+ ;;
+ --default) # reset variables to default
+ reset;
+ ;;
+ --default-modes) # sequence of modes in auto mode; arg
+ _OPT_DEFAULT_MODES="$1";
+ shift;
+ ;;
+ --debug) # sequence of modes in auto mode; arg
+ _OPT_DEBUG='yes';
+ ;;
+ --display) # set X display, arg
+ _OPT_DISPLAY="$1";
+ shift;
+ ;;
+ --dvi)
+ _OPT_MODE='dvi';
+ ;;
+ --dvi-viewer) # viewer program for dvi mode; arg
+ _OPT_VIEWER_DVI="$1";
+ shift;
+ ;;
+ --extension) # the extension for man pages, arg
+ _OPT_EXTENSION="$1";
+ shift;
+ ;;
+ --fg|--foreground) # foreground color for viewers, arg;
+ _OPT_FG="$1";
+ shift;
+ ;;
+ --fn|--font) # set font for viewers, arg;
+ _OPT_FN="$1";
+ shift;
+ ;;
+ --geometry) # window geometry for viewers, arg;
+ _OPT_GEOMETRY="$1";
+ shift;
+ ;;
+ --groff)
+ _OPT_MODE='groff';
+ ;;
+ --locale) # set language for man pages, arg
+ # argument is xx[_territory[.codeset[@modifier]]] (ISO 639,...)
+ _OPT_LANG="$1";
+ shift;
+ ;;
+ --local-file) # force local files; same as `--no-man'
+ _MAN_FORCE='no';
+ _MAN_ENABLE='no';
+ ;;
+ --location|--where) # print file locations to stderr
+ _OPT_LOCATION='yes';
+ ;;
+ --man) # force all file params to be man pages
+ _MAN_ENABLE='yes';
+ _MAN_FORCE='yes';
+ ;;
+ --manpath) # specify search path for man pages, arg
+ # arg is colon-separated list of directories
+ _OPT_MANPATH="$1";
+ shift;
+ ;;
+ --mode) # display mode
+ _arg="$1";
+ shift;
+ case "${_arg}" in
+ auto|'') # the default automatic mode
+ _mode='';
+ ;;
+ groff) # pass input to plain groff
+ _mode='groff';
+ ;;
+ dvi) # display with xdvi viewer
+ _mode='dvi';
+ ;;
+ pdf) # display with PDF viewer
+ _mode='pdf';
+ ;;
+ ps) # display with Postscript viewer
+ _mode='ps';
+ ;;
+ X|x) # output on X roff viewer
+ _mode='x';
+ ;;
+ tty) # output on terminal
+ _mode='tty';
+ ;;
+ Q|source) # display source code
+ _mode="source";
+ ;;
+ *)
+ error "unknown mode ${_arg}";
+ ;;
+ esac;
+ _OPT_MODE="${_mode}";
+ ;;
+ --no-location) # disable former call to `--location'
+ _OPT_LOCATION='yes';
+ ;;
+ --no-man) # disable search for man pages
+ # the same as --local-file
+ _MAN_FORCE="no";
+ _MAN_ENABLE="no";
+ ;;
+ --pager) # set paging program for tty mode, arg
+ _OPT_PAGER="$1";
+ shift;
+ ;;
+ --pdf)
+ _OPT_MODE='pdf';
+ ;;
+ --pdf-viewer) # viewer program for ps mode; arg
+ _OPT_VIEWER_PDF="$1";
+ shift;
+ ;;
+ --ps)
+ _OPT_MODE='ps';
+ ;;
+ --ps-viewer) # viewer program for ps mode; arg
+ _OPT_VIEWER_PS="$1";
+ shift;
+ ;;
+ --resolution) # set resolution for X devices, arg
+ _arg="$1";
+ shift;
+ case "${_arg}" in
+ 75|75dpi)
+ _dpi=75;
+ ;;
+ 100|100dpi)
+ _dpi=100;
+ ;;
+ *)
+ error "only resoutions of 75 or 100 dpi are supported";
+ ;;
+ esac;
+ _OPT_RESOLUTION="${_dpi}";
+ ;;
+ --rv)
+ _OPT_RV='yes';
+ ;;
+ --sections) # specify sections for man pages, arg
+ # arg is colon-separated list of section names
+ _OPT_SECTIONS="$1";
+ shift;
+ ;;
+ --shell)
+ shift;
+ ;;
+ --systems) # man pages for different OS's, arg
+ # argument is a comma-separated list
+ _OPT_SYSTEMS="$1";
+ shift;
+ ;;
+ --title) # title for X viewers; arg
+ _OPT_TITLE="$1";
+ shift;
+ ;;
+ --tty)
+ _OPT_MODE="tty";
+ ;;
+ --tty-device) # device for tty mode; arg
+ _OPT_TTY_DEVICE="$1";
+ shift;
+ ;;
+ --whatis)
+ _OPT_WHATIS='yes';
+ ;;
+ --www) # display with web browser
+ _OPT_MODE='www';
+ ;;
+ --www-viewer) # viewer program for www mode; arg
+ _OPT_VIEWER_WWW="$1";
+ shift;
+ ;;
+ --x)
+ _OPT_MODE='x';
+ ;;
+ --xrm) # pass X resource string, arg;
+ _OPT_XRM="$(list_append "${_OPT_XRM}" "$1")";
+ shift;
+ ;;
+ --x-viewer) # viewer program for x mode; arg
+ _OPT_VIEWER_X="$1";
+ shift;
+ ;;
+ *)
+ error 'error on argument parsing : '"\`$*'";
+ ;;
+ esac;
+ done;
+ shift; # remove `--' argument
+
+ if test "${_DEBUG}" != 'yes'; then
+ if test "${_OPT_DEBUG}" = 'yes'; then
+ _DEBUG='yes';
+ fi;
+ fi;
+
+ # Remaining arguments are file names (filespecs).
+ # Save them to list $_FILEARGS
+ if test "$#" -eq 0; then # use "-" for standard input
+ set -- '-';
+ fi;
+ _FILEARGS="$(list_from_args "$@")";
+ if list_has "$_FILEARGS" '-'; then
+ save_stdin;
+ fi;
+ # $_FILEARGS must be retrieved with `eval set -- "$_FILEARGS"'
+ eval "${return_ok}";
+} # main_parse_args()
+
+
+########################################################################
+# main_set_mode ()
+#
+# Determine the display mode.
+#
+# Globals:
+# in: $DISPLAY, $_OPT_MODE, $_OPT_DEVICE
+# out: $_DISPLAY_MODE
+#
+
+# _get_first_prog (<proglist>)
+#
+# Retrieve first argument that represents an existing program in $PATH.
+# Local function for main_set_mode().
+#
+# Arguments: 1; a comma-separated list of commands (with options),
+# like $_VIEWER_*.
+#
+# Return : `1' if none found, `0' if found.
+# Output : the argument that succeded.
+#
+landmark '16: main_set_mode()';
+main_set_mode()
+{
+ func_check main_set_mode = 0 "$@";
+ local m;
+ local _modes;
+ local _viewer;
+ local _viewers;
+
+ # handle apropos
+ if is_yes "${_OPT_APROPOS}"; then
+ apropos "$@";
+ _code="$?";
+ clean_up;
+ exit "${_code}";
+ fi;
+
+ # set display
+ if is_not_empty "${_OPT_DISPLAY}"; then
+ DISPLAY="${_OPT_DISPLAY}";
+ fi;
+
+ if is_yes "${_OPT_V}"; then
+ _DISPLAY_MODE='groff';
+ _ADDOPTS_GROFF="$(list_append "${_ADDOPTS_GROFF}" '-V')";
+ fi;
+ if is_yes "${_OPT_X}"; then
+ _DISPLAY_MODE='groff';
+ _ADDOPTS_GROFF="$(list_append "${_ADDOPTS_GROFF}" '-X')";
+ fi;
+ if is_yes "${_OPT_Z}"; then
+ _DISPLAY_MODE='groff';
+ _ADDOPTS_GROFF="$(list_append "${_ADDOPTS_GROFF}" '-Z')";
+ fi;
+ if is_equal "${_OPT_MODE}" 'groff'; then
+ _DISPLAY_MODE='groff';
+ fi;
+ if is_equal "${_DISPLAY_MODE}" 'groff'; then
+ eval "${return_ok}";
+ fi;
+
+ if is_equal "${_OPT_MODE}" 'source'; then
+ _DISPLAY_MODE='source';
+ eval "${return_ok}";
+ fi;
+
+ case "${_OPT_MODE}" in
+ '') # automatic mode
+ case "${_OPT_DEVICE}" in
+ X*)
+ if is_empty "${DISPLAY}"; then
+ error "no X display found for device ${_OPT_DEVICE}";
+ fi;
+ _DISPLAY_MODE='x';
+ eval "${return_ok}";
+ ;;
+ ascii|cp1047|latin1|utf8)
+ _DISPLAY_MODE='tty';
+ eval "${return_ok}";
+ ;;
+ esac;
+ if is_empty "${DISPLAY}"; then
+ _DISPLAY_MODE='tty';
+ eval "${return_ok}";
+ fi;
+
+ if is_empty "${_OPT_DEFAULT_MODES}"; then
+ _modes="${_DEFAULT_MODES}";
+ else
+ _modes="${_OPT_DEFAULT_MODES}";
+ fi;
+ ;;
+ tty)
+ _DISPLAY_MODE='tty';
+ eval "${return_ok}";
+ ;;
+ *) # display mode was given
+ if is_empty "${DISPLAY}"; then
+ error "you must be in X Window for ${_OPT_MODE} mode.";
+ fi;
+ _modes="${_OPT_MODE}";
+ ;;
+ esac;
+
+ # only viewer modes are left
+ eval set -- "$(list_from_split "${_modes}" ',')";
+ while test "$#" -gt 0; do
+ m="$1";
+ shift;
+ case "$m" in
+ tty)
+ _DISPLAY_MODE='tty';
+ eval "${return_ok}";
+ ;;
+ x)
+ if is_not_empty "${_OPT_VIEWER_X}"; then
+ _viewers="${_OPT_VIEWER_X}";
+ else
+ _viewers="${_VIEWER_X}";
+ fi;
+ _viewer="$(_get_first_prog "${_viewers}")";
+ if test "$?" -ne 0; then
+ continue;
+ fi;
+ _DISPLAY_PROG="${_viewer}";
+ _DISPLAY_MODE='x';
+ eval "${return_ok}";
+ ;;
+ dvi)
+ if is_not_empty "${_OPT_VIEWER_DVI}"; then
+ _viewers="${_OPT_VIEWER_DVI}";
+ else
+ _viewers="${_VIEWER_DVI}";
+ fi;
+ _viewer="$(_get_first_prog "${_viewers}")";
+ if test "$?" -ne 0; then
+ continue;
+ fi;
+ _DISPLAY_PROG="${_viewer}";
+ _DISPLAY_MODE="dvi";
+ eval "${return_ok}";
+ ;;
+ pdf)
+ if is_not_empty "${_OPT_VIEWER_PDF}"; then
+ _viewers="${_OPT_VIEWER_PDF}";
+ else
+ _viewers="${_VIEWER_PDF}";
+ fi;
+ _viewer="$(_get_first_prog "${_viewers}")";
+ if test "$?" -ne 0; then
+ continue;
+ fi;
+ _DISPLAY_PROG="${_viewer}";
+ _DISPLAY_MODE="pdf";
+ eval "${return_ok}";
+ ;;
+ ps)
+ if is_not_empty "${_OPT_VIEWER_PS}"; then
+ _viewers="${_OPT_VIEWER_PS}";
+ else
+ _viewers="${_VIEWER_PS}";
+ fi;
+ _viewer="$(_get_first_prog "${_viewers}")";
+ if test "$?" -ne 0; then
+ continue;
+ fi;
+ _DISPLAY_PROG="${_viewer}";
+ _DISPLAY_MODE="ps";
+ eval "${return_ok}";
+ ;;
+ www)
+ if is_not_empty "${_OPT_VIEWER_WWW}"; then
+ _viewers="${_OPT_VIEWER_WWW}";
+ else
+ _viewers="${_VIEWER_WWW}";
+ fi;
+ _viewer="$(_get_first_prog "${_viewers}")";
+ if test "$?" -ne 0; then
+ continue;
+ fi;
+ _DISPLAY_PROG="${_viewer}";
+ _DISPLAY_MODE="www";
+ eval "${return_ok}";
+ ;;
+ esac;
+ done;
+ error "no suitable display mode found.";
+}
+
+_get_first_prog()
+{
+ local i;
+ if test "$#" -eq 0; then
+ error "_get_first_prog() needs 1 argument.";
+ fi;
+ if is_empty "$1"; then
+ return "${_BAD}";
+ fi;
+ eval set -- "$(list_from_split "$1" ',')";
+ for i in "$@"; do
+ if is_empty "$i"; then
+ continue;
+ fi;
+ if is_prog "$(get_first_essential $i)"; then
+ echo -n "$i";
+ return "${_GOOD}";
+ fi;
+ done;
+ return "${_BAD}";
+} # main_set_mode()
+
+
+#######################################################################
+# main_do_fileargs ()
+#
+# Process filespec arguments in $_FILEARGS.
+#
+# Globals:
+# in: $_FILEARGS (process with `eval set -- "$_FILEARGS"')
+#
+landmark '17: main_do_fileargs()';
+main_do_fileargs()
+{
+ func_check main_do_fileargs = 0 "$@";
+ local _exitcode;
+ local _filespec;
+ local _name;
+ _exitcode="${_BAD}";
+ eval set -- "${_FILEARGS}";
+ unset _FILEARGS;
+ # temporary storage of all input to $_TMP_CAT
+ while test "$#" -ge 2; do
+ # test for `s name' arguments, with `s' a 1-char standard section
+ _filespec="$1";
+ shift;
+ case "${_filespec}" in
+ '')
+ continue;
+ ;;
+ '-')
+ if register_file '-'; then
+ _exitcode="${_GOOD}";
+ fi;
+ continue;
+ ;;
+ ?)
+ if list_has_not "${_MAN_AUTO_SEC}" "${_filespec}"; then
+ if do_filearg "${_filespec}"; then
+ _exitcode="${_GOOD}";
+ fi;
+ continue;
+ fi;
+ _name="$1";
+ case "${_name}" in
+ */*|man:*|*\(*\)|*."${_filespec}")
+ if do_filearg "${_filespec}"; then
+ _exitcode="${_GOOD}";
+ fi;
+ continue;
+ ;;
+ esac;
+ if do_filearg "man:${_name}(${_filespec})"; then
+ _exitcode="${_GOOD}";
+ shift;
+ continue;
+ else
+ if do_filearg "${_filespec}"; then
+ _exitcode="${_GOOD}";
+ fi;
+ continue;
+ fi;
+ ;;
+ *)
+ if do_filearg "${_filespec}"; then
+ _exitcode="${_GOOD}";
+ fi;
+ continue;
+ ;;
+ esac;
+ done; # end of `s name' test
+ while test "$#" -gt 0; do
+ _filespec="$1";
+ shift;
+ if do_filearg "${_filespec}"; then
+ _exitcode="${_GOOD}";
+ fi;
+ done;
+ clean_up_secondary;
+ if is_equal "${_exitcode}" "${_BAD}"; then
+ eval "${return_bad}";
+ fi;
+ eval "${return_ok}";
+} # main_do_fileargs()
+
+
+########################################################################
+# main_set_resources ()
+#
+# Determine options for setting X resources with $_DISPLAY_PROG.
+#
+landmark '18: main_set_resources()';
+main_set_resources()
+{
+ func_check main_set_resources = 0 "$@";
+ local _prog; # viewer program
+ local _rl; # resource list
+ _rl='';
+ if is_empty "${_DISPLAY_PROG}"; then
+ eval "${return_ok}";
+ fi;
+ set -- ${_DISPLAY_PROG};
+ _prog="$(base_name "$1")";
+ if is_not_empty "${_OPT_BD}"; then
+ case "${_prog}" in
+ ghostview|gv|gxditview|xditview|xdvi)
+ _rl="$(list_append "$_rl" '-bd' "${_OPT_BD}")";
+ ;;
+ esac;
+ fi;
+ if is_not_empty "${_OPT_BG}"; then
+ case "${_prog}" in
+ ghostview|gv|gxditview|xditview|xdvi)
+ _rl="$(list_append "$_rl" '-bg' "${_OPT_BG}")";
+ ;;
+ xpdf)
+ _rl="$(list_append "$_rl" '-papercolor' "${_OPT_BG}")";
+ ;;
+ esac;
+ fi;
+ if is_not_empty "${_OPT_BW}"; then
+ case "${_prog}" in
+ ghostview|gv|gxditview|xditview|xdvi)
+ _rl="$(list_append "$_rl" '-bw' "${_OPT_BW}")";
+ ;;
+ esac;
+ fi;
+ if is_not_empty "${_OPT_FG}"; then
+ case "${_prog}" in
+ ghostview|gv|gxditview|xditview|xdvi)
+ _rl="$(list_append "$_rl" '-fg' "${_OPT_FG}")";
+ ;;
+ esac;
+ fi;
+ if is_not_empty "${_OPT_FN}"; then
+ case "${_prog}" in
+ ghostview|gv|gxditview|xditview|xdvi)
+ _rl="$(list_append "$_rl" '-fn' "${_OPT_FN}")";
+ ;;
+ esac;
+ fi;
+ if is_not_empty "${_OPT_GEOMETRY}"; then
+ case "${_prog}" in
+ ghostview|gv|gxditview|xditview|xdvi|xpdf)
+ _rl="$(list_append "$_rl" '-geometry' "${_OPT_GEOMETRY}")";
+ ;;
+ esac;
+ fi;
+ if is_empty "${_OPT_RESOLUTION}"; then
+ case "${_prog}" in
+ gxditview|xditview)
+ _rl="$(list_append "$_rl" \
+ '-resolution' "${_DEFAULT_RESOLUTION}")";
+ ;;
+ xpdf)
+ case "${_DEFAULT_RESOLUTION}" in
+ 75)
+ _rl="$(list_append "$_rl" '-z' '2')";
+ ;;
+ 100)
+ _rl="$(list_append "$_rl" '-z' '3')";
+ ;;
+ esac;
+ ;;
+ esac;
+ else
+ case "${_prog}" in
+ ghostview|gv|gxditview|xditview|xdvi)
+ _rl="$(list_append "$_rl" '-resolution' "${_OPT_RESOLUTION}")";
+ ;;
+ xpdf)
+ case "${_OPT_RESOLUTION}" in
+ 75)
+ _rl="$(list_append "$_rl" '-z' '2')";
+ ;;
+ 100)
+ _rl="$(list_append "$_rl" '-z' '3')";
+ ;;
+ esac;
+ ;;
+ esac;
+ fi;
+ if is_not_empty "${_OPT_RV}"; then
+ case "${_prog}" in
+ ghostview|gv|gxditview|xditview|xdvi)
+ _rl="$(list_append "$_rl" '-rv')";
+ ;;
+ esac;
+ fi;
+ if is_not_empty "${_OPT_XRM}"; then
+ case "${_prog}" in
+ ghostview|gv|gxditview|xditview|xdvi|xpdf)
+ eval set -- "{$_OPT_XRM}";
+ for i in "$@"; do
+ _rl="$(list_append "$_rl" '-xrm' "$i")";
+ done;
+ ;;
+ esac;
+ fi;
+ _title="$(get_first_essential \
+ "${_OPT_TITLE}" "${_REGISTERED_TITLE}")";
+ if is_not_empty "${_title}"; then
+ case "${_prog}" in
+ gxditview|xditview)
+ _rl="$(list_append "$_rl" '-title' "${_title}")";
+ ;;
+ esac;
+ fi;
+ _DISPLAY_ARGS="${_rl}";
+ eval "${return_ok}";
+} # main_set_resources
+
+
+########################################################################
+# main_display ()
+#
+# Do the actual display of the whole thing.
+#
+# Globals:
+# in: $_DISPLAY_MODE, $_OPT_DEVICE,
+# $_ADDOPTS_GROFF, $_ADDOPTS_POST, $_ADDOPTS_X,
+# $_REGISTERED_TITLE, $_TMP_PREFIX, $_TMP_CAT,
+# $_OPT_PAGER $PAGER $_MANOPT_PAGER
+#
+landmark '19: main_display()';
+main_display()
+{
+ func_check main_display = 0 "$@";
+ local p;
+ local _addopts;
+ local _device;
+ local _groggy;
+ local _modefile;
+ local _options;
+ local _pager;
+ local _title;
+ export _addopts;
+ export _groggy;
+ export _modefile;
+
+ # Some display programs have trouble with empty input.
+ # This is avoided by feeding a space character in this case.
+ # Test on non-empty file by tracking a line with at least 1 character.
+ if is_empty "$(tmp_cat | sed -e '/./q')"; then
+ echo ' ' > "${_TMP_CAT}";
+ fi;
+
+ case "${_DISPLAY_MODE}" in
+ groff)
+ _ADDOPTS_GROFF="${_ADDOPTS_GROFF} ${_ADDOPTS_POST}";
+ if is_not_empty "${_OPT_DEVICE}"; then
+ _ADDOPTS_GROFF="${_ADDOPTS_GROFF} -T${_OPT_DEVICE}";
+ fi;
+ _groggy="$(tmp_cat | eval grog "${_options}")";
+ trap "" EXIT 2>/dev/null || true;
+ # start a new shell program to get another process ID.
+ sh -c '
+ set -e;
+ _PROCESS_ID="$$";
+ _modefile="${_TMP_DIR}/${_PROGRAM_NAME}${_PROCESS_ID}";
+ rm -f "${_modefile}";
+ mv "${_TMP_CAT}" "${_modefile}";
+ rm -f "${_TMP_CAT}";
+ cat "${_modefile}" | \
+ (
+ clean_up()
+ {
+ rm -f "${_modefile}";
+ }
+ trap clean_up EXIT 2>/dev/null || true;
+ eval "${_groggy}" "${_ADDOPTS_GROFF}";
+ ) &'
+ ;;
+ tty)
+ case "${_OPT_DEVICE}" in
+ '')
+ _device="$(get_first_essential \
+ "${_OPT_TTY_DEVICE}" "${_DEFAULT_TTY_DEVICE}")";
+ ;;
+ ascii|cp1047|latin1|utf8)
+ _device="${_OPT_DEVICE}";
+ ;;
+ *)
+ warning \
+ "wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}";
+ ;;
+ esac;
+ _addopts="${_ADDOPTS_GROFF} ${_ADDOPTS_POST}";
+ _groggy="$(tmp_cat | grog -T${_device})";
+ _pager='';
+ for p in "${_OPT_PAGER}" "${PAGER}" "${_MANOPT_PAGER}" \
+ 'less' 'more' 'cat'; do
+ if is_prog "$p"; then
+ _pager="$p";
+ break;
+ fi;
+ done;
+ if is_empty "${_pager}"; then
+ error 'no pager program found for tty mode';
+ fi;
+ tmp_cat | eval "${_groggy}" "${_addopts}" | \
+ eval "${_pager}";
+ clean_up;
+ ;;
+
+ #### viewer modes
+
+ dvi)
+ case "${_OPT_DEVICE}" in
+ ''|dvi) do_nothing; ;;
+ *)
+ warning \
+ "wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}";
+ ;;
+ esac;
+ _groggy="$(tmp_cat | grog -Tdvi)";
+ _do_display;
+ ;;
+ pdf)
+ case "${_OPT_DEVICE}" in
+ ''|ps)
+ do_nothing;
+ ;;
+ *)
+ warning \
+ "wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}";
+ ;;
+ esac;
+ _groggy="$(tmp_cat | grog -Tps)";
+ trap "" EXIT 2>/dev/null || true;
+ # start a new shell program to get another process ID.
+ sh -c '
+ set -e;
+ _PROCESS_ID="$$";
+ _psfile="${_TMP_DIR}/${_PROGRAM_NAME}${_PROCESS_ID}";
+ _modefile="${_TMP_DIR}/${_PROGRAM_NAME}${_PROCESS_ID}.pdf";
+ rm -f "${_psfile}";
+ rm -f "${_modefile}";
+ cat "${_TMP_CAT}" | \
+ eval "${_groggy}" "${_ADDOPTS_GROFF}" > "${_psfile}";
+ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
+ -sOutputFile="${_modefile}" -c save pop -f "${_psfile}";
+ rm -f "${_psfile}";
+ rm -f "${_TMP_CAT}";
+ (
+ clean_up()
+ {
+ rm -f "${_modefile}";
+ }
+ trap clean_up EXIT 2>/dev/null || true;
+ eval "${_DISPLAY_PROG}" ${_DISPLAY_ARGS} "${_modefile}";
+ ) &'
+ ;;
+ ps)
+ case "${_OPT_DEVICE}" in
+ ''|ps)
+ do_nothing;
+ ;;
+ *)
+ warning \
+ "wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}";
+ ;;
+ esac;
+ _groggy="$(tmp_cat | grog -Tps)";
+ _do_display;
+ ;;
+ source)
+ tmp_cat;
+ clean_up;
+ ;;
+ www)
+ case "${_OPT_DEVICE}" in
+ ''|html) do_nothing; ;;
+ *)
+ warning \
+ "wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}";
+ ;;
+ esac;
+ _groggy="$(tmp_cat | grog -Thtml)";
+ _do_display;
+ ;;
+ x)
+ case "${_OPT_DEVICE}" in
+ '')
+ _groggy="$(tmp_cat | grog -Z)";
+ ;;
+ X*|ps)
+ _groggy="$(tmp_cat | grog -T"${_OPT_DEVICE}" -Z)";
+ ;;
+ *)
+ warning \
+ "wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}";
+ _groggy="$(tmp_cat | grog -Z)";
+ ;;
+ esac;
+ _do_display;
+ ;;
+ *)
+ error "unknown mode \`${_DISPLAY_MODE}'";
+ ;;
+ esac;
+ eval "${return_ok}";
+} # main_display()
+
+_do_display()
+{
+ trap "" EXIT 2>/dev/null || true;
+ # start a new shell program to get another process ID.
+ sh -c '
+ set -e;
+ _PROCESS_ID="$$";
+ _modefile="${_TMP_DIR}/${_PROGRAM_NAME}${_PROCESS_ID}";
+ rm -f "${_modefile}";
+ cat "${_TMP_CAT}" | \
+ eval "${_groggy}" "${_ADDOPTS_GROFF}" > "${_modefile}";
+ rm -f "${_TMP_CAT}";
+ (
+ clean_up()
+ {
+ rm -f "${_modefile}";
+ }
+ trap clean_up EXIT 2>/dev/null || true;
+ eval "${_DISPLAY_PROG}" ${_DISPLAY_ARGS} "${_modefile}";
+ ) &'
+}
+
+
+########################################################################
+# main (<command_line_args>*)
+#
+# The main function for groffer.
+#
+# Arguments:
+#
+main()
+{
+ func_check main '>=' 0 "$@";
+ # Do not change the sequence of the following functions!
+ main_init;
+ main_parse_MANOPT;
+ main_parse_args "$@";
+ main_set_mode;
+ main_do_fileargs;
+ main_set_resources;
+ main_display;
+ eval "${return_ok}";
+}
+
+landmark '20: end of function definitions';
+
+########################################################################
+
+main "$@";
diff --git a/contrib/groff/contrib/mm/ChangeLog b/contrib/groff/contrib/mm/ChangeLog
index ab3ed83..3033a1f 100644
--- a/contrib/groff/contrib/mm/ChangeLog
+++ b/contrib/groff/contrib/mm/ChangeLog
@@ -1,9 +1,94 @@
+Wed Sep 09:53:06 2002 Joergen Haegg <jh@axis.com>
+
+ * added implicit -mm to mmroff, it's now possible
+ to use mmroff with or without -mm as argument.
+
+Thu Aug 08 00:31:00 Bob Diertens <bobd@science.uva.nl>
+
+ * m.tmac (VM): Add missing backslash.
+
+Fri Jun 10:37:58 2002 Joergen Haegg <jh@axis.com>
+
+ * added init@reset for LT-macros so .S works for letters
+
+Thu May 06:30:06 2002 Joergen Haegg <jh@axis.com>
+
+ * adding -T to VM for setting the total
+ header and footer size.
+ * changing pg*extra-header-size unit from v to u in DS-size
+ calculation
+
+Mon May 05:40:16 2002 Joergen Haegg <jh@axis.com>
+
+ * All lists now get an empty line before the list
+ even if there is no empty lines between the items (bug in LB)
+
+Sat May 07:36:08 2002 Joergen Haegg <jh@axis.com>
+
+ * PIC is now drawn 1v higher, making it
+ possible to put a picture at 0,0.
+ * Indentbug in P fixed, Pt=2 now behaves as it should
+
+Wed May 10:18:26 2002 Joergen Haegg <jh@axis.com>
+
+ * added L, W and O in groff_mm.man
+ * extra space in expression removed in EPIC
+ * EPIC can leftadjust with -L
+ * EPIC was drawing 1v down
+ * forgot to add mmse.tmac and mm.tmac to cvs
+
+Fri May 20:35:32 2002 Joergen Haegg <jh@axis.com>
+
+ * Clarified manual about INITR
+ * Added mm.tmac and mmse.tmac wrappers
+ * Fixed bug in mmroff so a .qrf-file always will be created
+ * .EQ mark was not correctly positioned anymore.
+ * changed SP to sp in DS/DE to further correct .EQ
+
+Sun Dec 9 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
+
+ * Makefile.sim, groff_mm.man, groff_mmse.man: Minor fixes.
+ * mmroff.man: This is a section 1 man page.
+ Minor fixes.
+ * Makefile.sub: Install mmroff.man in section 1.
+
+Wed Nov 28 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
+
+ * m.tmac: Assure that the macro package is loaded only once.
+
+Wed Sep 5 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
+
+ * m.tmac: Enable all warnings only if no -W or -w option is given on
+ the command line (or rather, if only the default warnings are
+ set).
+
+Mon Sep 3 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
+
+ * groff_mm.man: Don't use .ne for TTY devices.
+
+Thu Jul 26 00:00:00 2001 Werner LEMBERG (wl@gnu.org)
+
+ * groff_mm.man: Start always a new line after end of sentence. Add
+ some compatibility info to the HF variable.
+
+Thu Jul 26 00:00:00 2001 Larry Jones (larry.jones@sdrc.com)
+
+ * m.tmac: Fix initialization of Hps1 and Hps2.
+
+Wed May 16 00:00:00 2001 Bruce Lilly (blilly@erols.com)
+
+ * m.tmac (TH): Fix incorrect error message.
+
+Thu Apr 12 00:00:00 2001 Ruslan Ermilov (ru@FreeBSD.org)
+
+ * groff_mm.man: Fixing some typos.
+
Mon Mar 5 09:30:18 2001 Jörgen Hägg (jh@axis.com)
* S didn't reset to default point size
* (dummy line to force cvs update...)
-Sat Jan 06 10:30:00 2001 Werner Lemberg (wl@gnu.org)
+Sat Jan 06 10:30:00 2001 Werner LEMBERG (wl@gnu.org)
* Fixed assignment of page offset given as a command line argument.
@@ -18,6 +103,11 @@ Thu Sep 14 05:52:48 2000 Jörgen Hägg (jh@axis.com)
understand why the e-mail address was supposed to be
'jh at axis.com' in the Changelog. :-)
+Mon Aug 28 00:00:00 2000 Bruno Haible (haible at clisp.cons.org)
+
+ * Makefile.sub: New target 'all', makes all prerequisites of
+ 'install'.
+
Thu Sep 7 06:17:42 2000 Jörgen Hägg (jh at axis.com)
* version 2.0
@@ -34,6 +124,10 @@ Sun Jun 4 21:39:00 2000 Kaneda Hiroshi (vanitas at ma3.seikyou.ne.jp)
* Fixing a lot of typos in groff_mm.man
+Tue Mar 7 00:00:00 2000 OKAZAKI Tetsurou (okazaki at be.to)
+
+ * Makefile.sub: Use $(INSTALL_SCRIPT) for script files.
+
Sun Jan 30 22:52:20 2000 Jörgen Hägg (jh at axis.com)
* version 1.34
diff --git a/contrib/groff/contrib/mm/Makefile.sim b/contrib/groff/contrib/mm/Makefile.sim
index e1d4a14..2c645be 100644
--- a/contrib/groff/contrib/mm/Makefile.sim
+++ b/contrib/groff/contrib/mm/Makefile.sim
@@ -1,5 +1,5 @@
#
-# $Id: Makefile.sim,v 2.1 2000/11/17 04:26:02 jhaegg Exp $
+# $Id: Makefile.sim,v 2.3 2002/05/22 06:26:12 jhaegg Exp $
#
# To install mgm separately as gm.tmac:
# make -f Makefile.sub tmacdir=/usr/local/lib/groff/tmac srcdir=. \
@@ -21,8 +21,8 @@ install = install -m 644
# Do not change anything below this line
srcdir = .
-version = 1.32
-mdate = 1999-09-03
+version = 2.8
+mdate = 2002-05-11
.SUFFIXES: .n .man
@@ -33,9 +33,9 @@ install: groff_mm.n groff_mmse.n
$(MAKE) -f Makefile.sub tmacdir=$(tmacdir) srcdir=$(srcdir) \
INSTALL_DATA='$(install)' tmac_m=$(tmac_m) install
- uninstall: groff_mm.n groff_mmse.n
- $(MAKE) -f Makefile.sub tmacdir=$(tmacdir) srcdir=$(srcdir) \
- INSTALL_DATA='$(install)' tmac_m=$(tmac_m) uninstall_sub
+uninstall: groff_mm.n groff_mmse.n
+ $(MAKE) -f Makefile.sub tmacdir=$(tmacdir) srcdir=$(srcdir) \
+ INSTALL_DATA='$(install)' tmac_m=$(tmac_m) uninstall_sub
.man.n:
diff --git a/contrib/groff/contrib/mm/Makefile.sub b/contrib/groff/contrib/mm/Makefile.sub
index 87cf050..40b7707 100644
--- a/contrib/groff/contrib/mm/Makefile.sub
+++ b/contrib/groff/contrib/mm/Makefile.sub
@@ -1,14 +1,15 @@
#
-# $Id: Makefile.sub,v 2.1 2000/11/17 04:26:02 jhaegg Exp $
+# $Id: Makefile.sub,v 2.3 2002/05/22 06:26:12 jhaegg Exp $
#
PROG=mmroff
+MAN1=\
+ mmroff.n
MAN7=\
groff_mm.n \
- groff_mmse.n \
- mmroff.n
+ groff_mmse.n
FILES=0.MT 5.MT 4.MT ms.cov se_ms.cov
# Local configuration files with default values.
-LOCALE = locale se_locale
+LOCALE=locale se_locale
CLEANADD=temp
all: mmroff
@@ -32,7 +33,12 @@ install_m:
$(INSTALL_DATA) $(srcdir)/m.tmac $(tmacdir)/$(tmac_m_prefix)m.tmac
@sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
$(srcdir)/mse.tmac > $(tmacdir)/$(tmac_m_prefix)mse.tmac
-install_mmroff : mmroff
+ @sed -e "s;^.mso mse.tmac;.mso $(tmac_m_prefix)mse.tmac;g" \
+ $(srcdir)/mmse.tmac > $(tmacdir)/$(tmac_m_prefix)mmse.tmac
+ @sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
+ $(srcdir)/mm.tmac > $(tmacdir)/$(tmac_m_prefix)mm.tmac
+
+install_mmroff: mmroff
-test -d $(bindir) || $(mkinstalldirs) $(bindir)
-rm -f $(bindir)/mmroff
$(INSTALL_SCRIPT) mmroff $(bindir)/mmroff
@@ -42,7 +48,6 @@ mmroff: mmroff.pl
-sed -e 's;/usr/bin/perl;$(PERLPATH);' $(srcdir)/mmroff.pl >$@
-chmod +x $@
-
uninstall_sub:
-for f in $(FILES); do rm -f $(tmacdir)/mm/$$f; done
-for f in $(LOCALE); do \
@@ -50,6 +55,8 @@ uninstall_sub:
done
-rm -f $(tmacdir)/tmac.$(tmac_m_prefix)m
-rm -f $(tmacdir)/$(tmac_m_prefix)m.tmac
+ -rm -f $(tmacdir)/$(tmac_m_prefix)mm.tmac
-rm -f $(tmacdir)/$(tmac_m_prefix)mse.tmac
+ -rm -f $(tmacdir)/$(tmac_m_prefix)mmse.tmac
-rmdir $(tmacdir)/mm
-rm -f $(bindir)/mmroff
diff --git a/contrib/groff/contrib/mm/README b/contrib/groff/contrib/mm/README
index 15901dd..f52f3eb 100644
--- a/contrib/groff/contrib/mm/README
+++ b/contrib/groff/contrib/mm/README
@@ -1,5 +1,5 @@
-$Id: README,v 2.1 2000/11/17 04:27:03 jhaegg Exp $
+$Id: README,v 2.2 2002/05/22 06:26:12 jhaegg Exp $
This is mgm, a macro package for groff.
@@ -29,9 +29,3 @@ This README should be bigger :-)
Thanks to everyone who have sent me bug-reports and fixes.
-Yes, my version numbering differs from the groff CVS, but I
-like mine better. :-)
-
-More likely, I'm too lazy to change it, but someday I'll
-try to sync them...
-The step to 2.0 is an attempt, let's see if it works.
diff --git a/contrib/groff/contrib/mm/groff_mm.man b/contrib/groff/contrib/mm/groff_mm.man
index 9efecdc..2bb9e10 100644
--- a/contrib/groff/contrib/mm/groff_mm.man
+++ b/contrib/groff/contrib/mm/groff_mm.man
@@ -1,14 +1,14 @@
.\"
-.\" $Id: groff_mm.man,v 2.2 2001/06/27 12:47:16 wlemb Exp $
+.\" $Id: groff_mm.man,v 2.8 2002/05/30 05:39:54 jhaegg Exp $
.\"
.de T2
-.ne 2v
+.if t .ne 2v
.ti -.5i
\\$1
.sp -1
..
.de T3
-.ne 2v
+.if t .ne 2v
.ti -.5i
\fB\\$1\fP
.br
@@ -33,18 +33,21 @@ with the following limitations:
no Bell Labs localisms implemented.
.TP
.B \(bu
-the macros OK and PM is not implemented.
+the macros OK and PM are not implemented.
.TP
.B \(bu
groff mm does not support cut marks
.LP
-\fBm@TMAC_M_PREFIX@m\fP is intended to be international. Therefore it is
+\fBm@TMAC_M_PREFIX@m\fP is intended to be international.
+Therefore it is
possible to write short national macrofiles which change all
-english text to the preferred language. Use \fBm@TMAC_M_PREFIX@mse\fP as an example.
+english text to the preferred language.
+Use \fBm@TMAC_M_PREFIX@mse\fP as an example.
.\"########################################################################
.LP
A file called \fBlocale\fP or \fIlang\fP\fB_locale\fP is read
-after the initiation of the global variables. It is therefore
+after the initiation of the global variables.
+It is therefore
possible to localize the macros with companyname and so on.
.sp
In this manual square brackets is used to show optional arguments.
@@ -59,7 +62,8 @@ A number register is assigned with the \fBnr\fP command:
\fBXXX\fP is the name of the register, \fBn\fP is the value to
be assigned, and \fBi\fP is increment value for auto-increment.
\fBn\fP can have a plus or minus sign as prefix if an increment
-or decrement of the current value is wanted. (Auto-increment or decrement
+or decrement of the current value is wanted.
+(Auto-increment or decrement
occurs if the number register is used with a plus or minus sign,
\fB\en+[XXX]\fP or \fB\en-[XXX]\fP.)
.sp
@@ -69,7 +73,8 @@ Strings is defined with \fBds\fP.
.br
The string is assigned everything to the end of the line, even blanks.
Initial blanks in \fIstring\fP should be prefixed with
-a double-quote. (Strings are used in the text as \fB\e*[YYY]\fP.)
+a double-quote.
+(Strings are used in the text as \fB\e*[YYY]\fP.)
.sp
\fBSpecial formatting of number registers\fP
.br
@@ -103,16 +108,22 @@ Set the format with \fBaf\fP:
.B ")E level text"
Adds \fBtext\fP (heading-text) to the table of contents
with \fBlevel\fP either 0
-or between 1-7. See also \fB.H\fP. This macro is used for customized
+or between 1-7.
+See also \fB.H\fP.
+This macro is used for customized
table of contents.
.TP
.B "1C [1]"
-Begin one column processing. An \fB1\fP as argument disables the page-break.
+Begin one column processing.
+An \fB1\fP as argument disables the page-break.
Use wide footnotes, small footnotes may be overprinted.
.TP
.B 2C
-Begin two column processing. Splits the page in two columns. It is
-a special case of \fBMC\fP. See also \fB1C\fP.
+Begin two column processing.
+Splits the page in two columns.
+It is
+a special case of \fBMC\fP.
+See also \fB1C\fP.
.TP
.B AE
Abstract end, see \fBAS\fP.
@@ -121,7 +132,8 @@ Abstract end, see \fBAS\fP.
Authors firm, should be called before \fBAU\fP, see also \fBCOVER\fP.
.TP
.B "AL [type [text-indent [1]]]"
-Start autoincrement list. Items are numbered beginning on one.
+Start autoincrement list.
+Items are numbered beginning on one.
The \fItype\fP argument controls the type of numbers.
.in +.5i
.T2 Arg
@@ -142,12 +154,16 @@ A third argument will prohibit printing of a blank line before each
item.
.TP
.B "APP name text"
-Begin an appendix with name \fIname\fP. Automatic naming occurs if
-\fIname\fP is "". The appendixes starts with \fBA\fP if auto is used.
+Begin an appendix with name \fIname\fP.
+Automatic naming occurs if
+\fIname\fP is "".
+The appendixes starts with \fBA\fP if auto is used.
An new page is ejected, and a header is also produced if the number
-variable \fBAph\fP is non-zero. This is the default.
+variable \fBAph\fP is non-zero.
+This is the default.
The appendix always appear in the 'List of contents' with correct
-pagenumber. The name \fIAPPENDIX\fP can be changed by setting
+pagenumber.
+The name \fIAPPENDIX\fP can be changed by setting
the string \fBApp\fP to the desired text.
The string \fBApptxt\fP contains the current appendix text.
.TP
@@ -157,7 +173,8 @@ This is used when diagrams or other non-formatted documents are
included as appendixes.
.TP
.B "AS [arg [indent]]"
-Abstract start. Indent is specified in 'ens', but scaling is allowed.
+Abstract start.
+Indent is specified in 'ens', but scaling is allowed.
Argument \fIarg\fP controls where the abstract is printed.
.in +.5i
.T2 Arg
@@ -177,27 +194,31 @@ The \fIindent\fP controls the indentation of both margins, otherwise
will normal text indent be used.
.TP
.B "AST [title]"
-Abstract title. Default is \fBABSTRACT\fP.
+Abstract title.
+Default is \fBABSTRACT\fP.
Sets the text above the abstract text.
.TP
.B "AT title1 [title2 ...]"
-Authors title. \fBAT\fP must appear just after each \fBAU\fP.
+Authors title.
+\fBAT\fP must appear just after each \fBAU\fP.
The title will show up after the name in the signature block.
.TP
.B "AU [name [initials [loc [dept [ext [room [arg [arg [arg]]]]]]]]]"
Author information, specifies the author of the memo or paper, and
will be printed on the cover sheet and on other similar places.
-\fBAU\fP must not appear before \fBTL\fP. The author information
+\fBAU\fP must not appear before \fBTL\fP.
+The author information
can contain initials, location, department, telephone extension,
room number or name and up to three extra arguments.
.TP
.B "AV [name [1]]"
Approval signature, generates an approval line with place for
-signature and date. The string \fBAPPROVED:\fP can be changed
+signature and date.
+The string \fBAPPROVED:\fP can be changed
with variable \fBLetapp\fP, and the string \fBDate\fP in \fBLetdate\fP.
.TP
.B "AVL [name]"
-Letter signature, generates a line with place for signature.
+Letter signature, generates a line with place for signature.
.TP
.B "B [bold-text [prev-font-text [bold...]]]"
Begin boldface.
@@ -207,11 +228,13 @@ on will be printed in boldface.
.TP
.B B1
Begin box (as the ms macro).
-Draws a box around the text. The text will be indented one character,
+Draws a box around the text.
+The text will be indented one character,
and the right margin will be one character shorter.
.TP
.B B2
-End box. Finish the box started by \fBB1\fP.
+End box.
+Finish the box started by \fBB1\fP.
.TP
.B BE
End bottom block, see \fBBS\fP.
@@ -234,8 +257,10 @@ Bold-roman.
No limit on the number of arguments.
.TP
.B BS
-Bottom block start. Begins the definition of a text block which is
-printed at the bottom of each page. Block ends with \fBBE\fP.
+Bottom block start.
+Begins the definition of a text block which is
+printed at the bottom of each page.
+Block ends with \fBBE\fP.
.TP
.B "BVL text-indent [mark-indent [1]]"
Start of
@@ -249,10 +274,12 @@ A third argument will prohibit printing of a blank line before each
item.
.TP
.B "COVER [arg]"
-\&\fBCOVER\fP begins a coversheet definition. It is important
+\&\fBCOVER\fP begins a coversheet definition.
+It is important
that \fB.COVER\fP appears before any normal text.
\&\fB.COVER\fP uses \fIarg\fP to build the filename
-@TMAC_MDIR@/\fIarg\fP.cov. Therefore it is possible to create unlimited
+@TMAC_MDIR@/\fIarg\fP.cov.
+Therefore it is possible to create unlimited
types of coversheets.
\fIms.cov\fP is supposed to look like the \fBms\fP coversheet.
\&\fB.COVER\fP requires a \fB.COVEND\fP at the end of the coverdefinition.
@@ -274,13 +301,15 @@ This finish the cover description and prints the cover-page.
It is defined in the cover file.
.TP
.B DE
-Display end. Ends a block of text, display, that begins
+Display end.
+Ends a block of text, display, that begins
with \fBDS\fP or \fBDF\fP.
.TP
.B "DF [format [fill [rindent]]]"
-Begin floating display (no nesting allowed).
+Begin floating display (no nesting allowed).
A floating display is saved in a queue and is printed in the
-order entered. \fIFormat\fP, \fIfill\fP and \fIrindent\fP is the same
+order entered.
+\fIFormat\fP, \fIfill\fP and \fIrindent\fP is the same
as in \fBDS\fP.
Floating displays are controlled by the two number registers \fBDe\fP
and \fBDf\fP.
@@ -313,18 +342,22 @@ Print as many displays that will fit in a new page or column.
A page break will occur between each display if \fBDe\fP is not zero.
.T2 5
Fill the current page with displays and the rest beginning at a new page
-or column. (This is the default.)
+or column.
+(This is the default.)
A page break will occur between each display
if \fBDe\fP is not zero.
.in
.TP
.B "DL [text-indent [1 [1]]]"
-Dash list start. Begins a list where each item is printed
-after a dash. \fIText-indent\fP changes the default indentation
+Dash list start.
+Begins a list where each item is printed
+after a dash.
+\fIText-indent\fP changes the default indentation
of the list items set by
number register \fBPi\fP.
A second argument prevents the empty line between each list item
-to be printed. See \fBLI\fP.
+to be printed.
+See \fBLI\fP.
A third argument will prohibit printing of a blank line before each
item.
.TP
@@ -357,7 +390,8 @@ Right adjust the whole display as a block
.in
.sp
L, I, C and CB can also be specified as 0, 1, 2 or 3 for compatibility
-reasons. (Don't use it. :-)
+reasons.
+(Don't use it.\ :-)
.sp
\fBfill\fP
.in +.5i
@@ -373,12 +407,14 @@ Line-filling turned on.
.sp
N and F can also be specified as 0 or 1.
An empty line will normally be printed before and after the
-display. Setting number register \fBDs\fP to 0 will prevent this.
+display.
+Setting number register \fBDs\fP to 0 will prevent this.
\fIRindent\fP shortens the line length by that amount.
.TP
.B "EC [title [override [flag [refname]]]]"
Equation title.
-Sets a title for an equation. The \fIoverride\fP argument
+Sets a title for an equation.
+The \fIoverride\fP argument
change the numbering.
.sp
\fBflag\fP
@@ -422,10 +458,13 @@ on even pages, see \fBPH\fP.
Equation end, see \fBEQ\fP.
.TP
.B EOP
-End of page user-defined macro. This macro will be called
-instead of the normal printing of the footer. The macro
+End of page user-defined macro.
+This macro will be called
+instead of the normal printing of the footer.
+The macro
will be executed in a separate environment, without any
-trap active. See \fBTP\fP.
+trap active.
+See \fBTP\fP.
.sp
\fBStrings available to EOP\fP
.in +.5i
@@ -437,12 +476,13 @@ Argument from \fBEF\fP.
Argument from \fBOF\fP.
.in
.TP
-.B "EPIC width height [name]"
+.B "EPIC [-L] width height [name]"
\fBEPIC\fP draws a box with the given \fIwidth\fP and \fIheight\fP, it will
also print the text \fIname\fP or a default string if
\fIname\fP is not specified..
This is used to include external pictures, just give the size
of the picture.
+\fB-L\fP will leftadjust the picture, the default is to center adjust.
See \fBPIC\fP
.TP
.B "EQ [label]"
@@ -451,7 +491,8 @@ Equation start.
\fBEQ\fP/\fBEN\fP must be inside a \fBDS\fP/\fBDE\fP-pair, except
when \fBEQ\fP is only used to set options in \fBeqn\fP.
The \fIlabel\fP will appear at the right margin of the equation, unless
-number register \fBEq\fP is 1. Then the label will appear at the
+number register \fBEq\fP is\ 1.
+Then the label will appear at the
left margin.
.TP
.B "EX [title [override [flag [refname]]]]"
@@ -472,16 +513,18 @@ affected by the format of \fBDS\fP.
.TP
.B "FC [closing]"
Prints \fIYours\ very\ truly,\fP as a formal closing of a letter or
-memorandum. The argument replaces the defualt string.
+memorandum.
+The argument replaces the defualt string.
The default is stored in string variable \fBLetfc\fP.
.TP
.B "FD [arg [1]]"
Footnote default format.
Controls the hyphenation (hyphen), right margin justification (adjust),
-indentation of footnote text (indent). It can also change the label
+indentation of footnote text (indent).
+It can also change the label
justification (ljust).
.sp
-.ne 14v
+.if t .ne 14v
.nf
.ta .5i +.8i +.8i +.8i +.8i
\fBarg hyphen adjust indent ljust\fP
@@ -524,9 +567,11 @@ affected by the format of \fBDS\fP.
.TP
.B "FS [label]"
Footnote start.
-The footnote is ended by \fBFE\fP. Footnotes is normally automatically
+The footnote is ended by \fBFE\fP.
+Footnotes is normally automatically
numbered, the number is available in string \fBF\fP.
-Just add \fB\e*F\fP in the text. By adding \fIlabel\fP, it is possible
+Just add \fB\e*F\fP in the text.
+By adding \fIlabel\fP, it is possible
to have other number or names on the footnotes.
Footnotes in displays is now possible.
An empty line separates footnotes, the height of the line
@@ -534,13 +579,17 @@ is controlled by number register \fBFs\fP, default value is 1.
.TP
.B "GETHN refname [varname]"
Includes the headernumber where the corresponding \fBSETR\fP \fIrefname\fP
-was placed. Will be X.X.X. in pass 1. See \fBINITR\fP.
+was placed.
+Will be X.X.X. in pass\ 1.
+See \fBINITR\fP.
If \fIvarname\fP is used, \fBGETHN\fP sets the stringvariable \fIvarname\fP to the
headernumber.
.TP
.B "GETPN refname [varname]"
Includes the pagenumber where the corresponding \fBSETR\fP \fIrefname\fP
-was placed. Will be 9999 in pass 1. See \fBINITR\fP.
+was placed.
+Will be 9999 in pass\ 1.
+See \fBINITR\fP.
If \fIvarname\fP is used, \fBGETPN\fP sets the stringvariable \fIvarname\fP
to the pagenumber.
.TP
@@ -558,17 +607,22 @@ and contains the page and headernumber.
Includes the string saved with the second argument to \fB.SETR\fP.
Will be dummystring in pass 1.
If varname is used, \fBGETST\fP sets the stringvariable \fIvarname\fP to the
-saved string. See \fBINITR\fP.
+saved string.
+See \fBINITR\fP.
.TP
.B "H level [heading-text [heading-suffix]]"
Numbered section heading.
Section headers can have a level between 1 and 7, level 1 is the
-top level. The text is given in \fIheading-text\fP, and must be
+top level.
+The text is given in \fIheading-text\fP, and must be
surrounded by double quotes if it contains spaces.
\fBHeading-suffix\fP is added to the header in the text but not in
-the table of contents. This is normally used for footnote marks
-and similar things. Don't use \fB\e*F\fP in \fIheading-suffix\fP, it won't
-work. A manual label must be used, see \fBFS\fP.
+the table of contents.
+This is normally used for footnote marks
+and similar things.
+Don't use \fB\e*F\fP in \fIheading-suffix\fP, it won't
+work.
+A manual label must be used, see \fBFS\fP.
.sp
An eventual paragraph, \fBP\fP, directly after \fBH\fP will be
ignored, \fBH\fP is taking care of spacing and indentation.
@@ -577,7 +631,8 @@ ignored, \fBH\fP is taking care of spacing and indentation.
.br
Number register \fBEj\fP controls page ejection before the heading.
Normally, a level one heading gets two blank lines before it, higher levels
-gets only one. A new page is ejected before each
+gets only one.
+A new page is ejected before each
first-level heading if number register \fBEj\fP is 1.
All levels below or equal the value of \fBEj\fP gets a new page.
Default value for \fBEj\fP is 0.
@@ -622,9 +677,12 @@ 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 fontname 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.
+Note that some other implementations use \fB3\ 3\ 2\ 2\ 2\ 2\ 2\fP as the
+default value.
All omitted values are presumed to be a 1.
.sp
\fBPoint size control\fP.
@@ -632,7 +690,8 @@ All omitted values are presumed to be a 1.
String \fBHP\fP controls the pointsize of each heading, in the
same way as \fBHF\fP controls the font.
A value of 0 selects the default point size.
-Default value is \fB0\ 0\ 0\ 0\ 0\ 0\ 0\fP. Beware that only the
+Default value is \fB0\ 0\ 0\ 0\ 0\ 0\ 0\fP.
+Beware that only the
point size changes, not the vertical size.
That can be controlled by the user specified macro \fBHX\fP and/or
\fBHZ\fP.
@@ -643,14 +702,17 @@ Seven number registers, named \fBH1\fP thru \fBH7\fP contains
the counter for each heading level.
The values are printed using arabic numerals, this can be changed
with the macro \fBHM\fP (see below).
-All marks are concatenated before printing. To avoid this, set
-number register \fBHt\fP to 1. That will only print the current
+All marks are concatenated before printing.
+To avoid this, set
+number register \fBHt\fP to\ 1.
+That will only print the current
heading counter at each heading.
.sp
\fBAutomatic table of contents\fP
.br
All headings whose level is equal or below number register \fBCl\fP
-is saved to be printed in the table of contents. Default value is 2.
+is saved to be printed in the table of contents.
+Default value is\ 2.
.sp
\fBSpecial control of the heading, user-defined macros\fP.
.br
@@ -677,8 +739,10 @@ Contains the position of the text after the heading.
means that a line break should occur before the text and
2 means that a blank line should separate the heading and the text.
.T3 "string }2"
-Contains two spaces if register \fB;0\fP is 0. It is used to
-separate the heading from the text. The string
+Contains two spaces if register \fB;0\fP is\ 0.
+It is used to
+separate the heading from the text.
+The string
is empty if \fB;0\fP is non-zero.
.T3 "register ;3"
Contains the needed space in units after the heading.
@@ -708,7 +772,7 @@ Hyphenation can be turned off by setting number
register \fBHy\fP to 0 in the beginning of the file.
.TP
.B "HM [arg1 [arg2 [... [arg7]]]]"
-Heading mark style.
+Heading mark style.
Controls the type of marking for printing of the heading counters.
Default is 1 for all levels.
.sp
@@ -775,12 +839,14 @@ Ends the address-specification after \fPIA\fP.
.TP
.B "INITI type filename [macro]"
Initialize the new index system, sets the filename to collect
-index lines in with \fBIND\fP. Argument \fItype\fP selects
+index lines in with \fBIND\fP.
+Argument \fItype\fP selects
the type of index, page number, header marks or both.
The default is \fIN\fP.
It is also possible to create a macro that is responsible
-for formatting each row. Add the name of the macro as argument 3.
+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
@@ -794,12 +860,17 @@ 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.
+Initialize the refencemacros.
+References will be written to stderr and is supposed to
+be written to \fIfilename.qrf\fP.
+Requires two passes with groff, this is handled by a
+separate program called \fBmmroff\fP, the reason is that
+groff is often installed without the unsafe operations that
+\fBINITR\fP requiered.
+The first pass looks for references and the second one includes them.
\fBINITR\fP can be used several times, but it is only the first
occurrence of \fBINITR\fP that is active.
-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 [...]]"
@@ -823,17 +894,21 @@ by string variable \fBIndcmd\fP, normally \fIsort\ -t\et\fP.
\fBINDP\fP reads the output from the command to form
the index, normally in two columns (can be changed by defining \fBTYIND\fP).
The index is printed with string variable \fBIndex\fP as header,
-default is \fBINDEX\fP. One-column processing is
-returned after the list. \fBINDP\fP will call the
+default is \fBINDEX\fP.
+One-column processing is
+returned after the list.
+\fBINDP\fP will call the
user-defined macros \fBTXIND\fP, \fBTYIND\fP and \fBTZIND\fP if defined.
\fBTXIND\fP is called before printing \fBINDEX\fP, \fBTYIND\fP
-is called instead of printing \fBINDEX\fP. \fBTZIND\fP is called
+is called instead of printing \fBINDEX\fP.
+\fBTZIND\fP is called
after the printing and should take care of restoring to normal
operation again.
.TP
.B "ISODATE [0]"
\fBISODATE\fP changes the predefined date string in \fBDT\fP to
-ISO-format, ie YYYY-MM-DD. This can also be done by
+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
@@ -850,8 +925,10 @@ current indent.
.sp
\fIPad\fP and \fImark-indent\fP controls where to put the mark.
The mark is placed within the mark area, and \fImark-indent\fP
-sets the number of spaces before this area. It is normally 0.
-The mark area ends where the text begins. The start of the text
+sets the number of spaces before this area.
+It is normally\ 0.
+The mark area ends where the text begins.
+The start of the text
is still controlled by \fItext-indent\fP.
.sp
The mark is left justified whitin the mark area if \fIpad\fP is 0.
@@ -863,7 +940,8 @@ If \fItype\fP is 0 the list will have either a hanging indent or, if
argument \fImark\fP is given, the string \fImark\fP as mark.
.sp
If \fItype\fP is greater than 0 automatic numbering will occur, arabic
-if \fImark\fP is empty. \fIMark\fP can then be any of \fB1\fP, \fBA\fP,
+if \fImark\fP is empty.
+\fIMark\fP can then be any of \fB1\fP, \fBA\fP,
\fBa\fP, \fBI\fP or \fBi\fP.
.sp
\fIType\fP selects one of six possible ways to display the mark.
@@ -885,24 +963,30 @@ x)
.in
.sp
Every item in the list will get \fILI-space\fP number of blank lines
-before them. Default is 1.
+before them.
+Default is\ 1.
.sp
-\fBLB\fP itself will print \fILB-space\fP blank lines. Default is 0.
+\fBLB\fP itself will print \fILB-space\fP blank lines.
+Default is\ 0.
.TP
.B "LC [list-level]"
List-status clear.
Terminates all current active lists down to \fIlist-level\fP, or 0
-if no argmuent is given. This is used by \fBH\fP to clear any
+if no argmuent is given.
+This is used by \fBH\fP to clear any
active list.
.TP
.B "LE [1]"
List end.
-Terminate the current list. \fBLE\fP outputs a blank line
+Terminate the current list.
+\fBLE\fP outputs a blank line
if an argument is given.
.TP
.B "LI [mark [1]]"
-List item precedes every item in a list. Without argument \fBLI\fP
-will print the mark determined by the current list type. By giving
+List item precedes every item in a list.
+Without argument \fBLI\fP
+will print the mark determined by the current list type.
+By giving
\fBLI\fP one argument, it will use that as the mark instead.
Two arguments to \fBLI\fP will make \fImark\fP a prefix to
the current mark.
@@ -913,17 +997,21 @@ This behaviour can also be achieved by setting number register
A zero length \fImark\fP will make a hanging
indent instead.
.sp
-A blank line is normally printed before the list item. This behaviour
-can be controlled by number register \fBLs\fP. Pre-spacing
+A blank line is normally printed before the list item.
+This behaviour
+can be controlled by number register \fBLs\fP.
+Pre-spacing
will occur for each list-level less than or equal to \fBLs\fP.
-Default value is 99. (Nesting of lists is unlimited. :-)
+Default value is\ 99.
+(Nesting of lists is unlimited.\ :-)
.sp
The indentation can be changed thru number register \fBLi\fP.
Default is 6.
.sp
All lists begins with a list initialization macro, \fBLB\fP.
There are, however, seven predefined listtypes to
-make lists easier to use. They all call \fBLB\fP with different
+make lists easier to use.
+They all call \fBLB\fP with different
default values.
.in +.5i
.T2 \fBAL\fP
@@ -941,7 +1029,8 @@ Reference List
.T2 \fBBVL\fP
Broken Varable List.
.in
-These lists are described at other places in this manual. See also \fBLB\fP.
+These lists are described at other places in this manual.
+See also \fBLB\fP.
.TP
.B "LT [arg]"
Formats a letter in one of four different styles depending
@@ -951,15 +1040,21 @@ See also \fBINTERNALS\fP.
.T2 \fBArg
Style\fP
.T2 BL
-Blocked. Date line, return address, writer's address and closing
-begins at the center of the line. All other lines begin at the left margin.
+Blocked.
+Date line, return address, writer's address and closing
+begins at the center of the line.
+All other lines begin at the left margin.
.T2 SB
-Semi-blocked. Same as blocked, except that the first line in every
+Semi-blocked.
+Same as blocked, except that the first line in every
paragraph is indented five spaces.
.T2 FB
-Full-blocked. All lines begin at the left margin.
+Full-blocked.
+All lines begin at the left margin.
.T2 SP
-Simplified. Almost the same as the full-blocked style. Subject and
+Simplified.
+Almost the same as the full-blocked style.
+Subject and
the writer's identification are printed in all-capital.
.in
.TP
@@ -968,37 +1063,47 @@ Specify options in letter (see \fB.LT\fP).
This is a list of the standard options:
.in +.5i
.T2 CN
-Confidential notation. Prints \fBCONFIDENTIAL\fP on the second line
-below the date line. Any argument replaces \fBCONFIDENTIAL\fP.
+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
+Reference notation.
+Prints \fBIn reference to:\fP and the argument
two lines below the date line.
See also string variable \fBLetRN\fP.
.T2 AT
-Attention. Prints \fBATTENTION:\fP and the argument below the inside address.
+Attention.
+Prints \fBATTENTION:\fP and the argument below the inside address.
See also string variable \fBLetAT\fP.
.T2 SA
-Salutation. Prints \fBTo Whom It May Concern:\fP or the argument if
-it was present. The salutation is printed two lines below the inside address.
+Salutation.
+Prints \fBTo Whom It May Concern:\fP or the argument if
+it was present.
+The salutation is printed two lines below the inside address.
See also string variable \fBLetSA\fP.
.T2 SJ
-Subject line. Prints the argument as subject prefixed with \fBSUBJECT:\fP
+Subject line.
+Prints the argument as subject prefixed with \fBSUBJECT:\fP
two lines below the inside address, except in letter type \fBSP\fP.
Then the subject is printed in all-captial without any prefix.
See also string variable \fBLetSJ\fP.
.in
.TP
.B "MC column-size [column-separation] "
-Begin multiple columns. Return to normal with \fB1C\fP.
+Begin multiple columns.
+Return to normal with \fB1C\fP.
\fBMC\fP will create as many columns as the current line length permits.
\fIColumn-size\fP is the width of each column, and \fIcolumn-separation\fP
-is the space between two columns. Default separation is the
+is the space between two columns.
+Default separation is the
column-size/15.
See also \fB1C\fP.
.TP
.B "ML mark [text-indent [1]]"
-Marked list start. The \fImark\fP argument will be printed before
+Marked list start.
+The \fImark\fP argument will be printed before
each list item.
\fIText-indent\fP sets the indent and overrides \fBLi\fP.
A third argument will prohibit printing of a blank line before each
@@ -1034,30 +1139,37 @@ current and new pageoffset is used.
Use \fBPGFORM\fP without arguments to return to normal.
.TP
.B "MULB cw1 space1 [cw2 space2 [cw3 ...]]"
-Begin a special multi-column mode. Every columns width must be specified.
-Also the space between the columns must be specified. The last column
-does not need any space-definition. \fBMULB\fP starts a diversion and \fBMULE\fP
+Begin a special multi-column mode.
+Every columns width must be specified.
+Also the space between the columns must be specified.
+The last column
+does not need any space-definition.
+\fBMULB\fP starts a diversion and \fBMULE\fP
ends the diversion and prints the columns.
The unit for width and space is 'n', but \fBMULB\fP accepts all
normal unitspecifications like 'c' and 'i'.
\fBMULB\fP operates in a separate environment.
.TP
.B "MULN"
-Begin the next column. This is the only way to switch column.
+Begin the next column.
+This is the only way to switch column.
.TP
.B "MULE"
End the multi-column mode and print the columns.
.TP
.B "nP [type]"
-Print numbered paragraph with header level two. See \fB.P\fP.
+Print numbered paragraph with header level two.
+See \fB.P\fP.
.TP
.B "NCOL"
Force printing to the next column, don't use this together with
the \fBMUL*\fP macros, see \fB2C\fP.
.TP
.B "NS [arg [1]]"
-Prints different types of notations. The argument selects between
-the predefined type of notations. If the second argument is available,
+Prints different types of notations.
+The argument selects between
+the predefined type of notations.
+If the second argument is available,
then the argument becomes the entire notation.
If the argument doesn't exist in the predefined, it will be
printed as \fBCopy (\fP\fIarg\fP\fB) to\fP.
@@ -1103,7 +1215,9 @@ CC
.fi
.TP
.B "ND new-date"
-New date. Override the current date. Date is not
+New date.
+Override the current date.
+Date is not
printed if \fInew-date\fP is an empty string.
.TP
.B "OF [arg]"
@@ -1116,19 +1230,23 @@ See \fBEH\fP and \fBPH\fP.
.TP
.B OP
Make sure that the following text is printed at the top
-of an odd-numbered page. Will not output an empty page
+of an odd-numbered page.
+Will not output an empty page
if currently at the top of an odd page.
.TP
.B "P [type]"
Begin new paragraph.
\fBP\fP without argument will produce left justified text, even
-the first line of the paragraph. This is the same as setting
-\fItype\fP to 0. If the argument is 1, then the first line
+the first line of the paragraph.
+This is the same as setting
+\fItype\fP to 0.
+If the argument is\ 1, then the first line
of text following \fBP\fP will be indented by the number of
spaces in number register \fBPi\fP, normally 5.
.sp
Instead of giving 1 as argument to \fBP\fP it is possible to set the
-paragraph type in number register \fBPt\fP. Using 0 and 1
+paragraph type in number register \fBPt\fP.
+Using 0 and\ 1
will be the same as adding that value to \fBP\fP.
A value of 2 will indent all paragraphs, except after
headings, lists and displays.
@@ -1143,15 +1261,17 @@ and other.
It is normally the first command in a file, though it's not necessary.
\fBPGFORM\fP can be used without arguments
to reset everything after a \fBMOVE\fP.
-A line-break is done unless the fourth argument is given.
+A line-break is done unless the fourth argument is given.
This can be used to avoid the pagenumber on the first page while setting
new width and length.
(It seems as if this macro sometimes doesn't work too well.
Use the command line arguments
-to change linelength, pagelength and pageoffset instead. Sorry.)
+to change linelength, pagelength and pageoffset instead.
+Sorry.)
.TP
.B PGNH
-No header is printed on the next page. Used to get rid of
+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.
@@ -1160,7 +1280,8 @@ on the first page.
\fBPIC\fP includes a Postscript file in the document.
The macro depends on \fBmmroff\fP and \fBINITR\fP.
\fB-L\fP, \fB-C\fP, \fB-R\fP and \fB-I n\fP adjusts the picture
-or indents it. The optionally \fIwidth\fP and \fIheight\fP
+or indents it.
+The optionally \fIwidth\fP and \fIheight\fP
can also be given to resize the picture.
.TP
.B PE
@@ -1170,18 +1291,22 @@ Ends a picture for \fB@TMAC_M_PREFIX@pic\fP, see the manual for \fB@TMAC_M_PREFI
.B "PF [arg]"
Page footer.
\fBPF\fP sets the line to be printed at the bottom of each page.
-Normally empty. See \fBPH\fP for the argument specification.
+Normally empty.
+See \fBPH\fP for the argument specification.
.TP
.B "PH [arg]"
Page header, a line printed at the top of each page.
The argument should be specified as "'left-part'center-part'right-part'",
where left-, center- and right-part is printed left-justified, centered
-and right justified. The character \fB%\fP is changed to the current
-page number. The default page-header is "''- % -''", the page
+and right justified.
+The character \fB%\fP is changed to the current
+page number.
+The default page-header is "''- % -''", the page
number between two dashes.
.TP
.B PS
-Picture start (from pic). Begins a picture for \fB@g@pic\fP, see
+Picture start (from pic).
+Begins a picture for \fB@g@pic\fP, see
the manual.
.TP
.B PX
@@ -1202,13 +1327,17 @@ See \fBI\fP.
Read from standard input to diversion and/or string.
The text will be saved in a diversion named \fIdiversion\fP.
Recall the text by writing the name of the diversion after a dot
-on an empty line. A string will also be defined if
-\fIstring\fP is given. \fIDiversion\fP and/or \fIprompt\fP can
+on an empty line.
+A string will also be defined if
+\fIstring\fP is given.
+\fIDiversion\fP and/or \fIprompt\fP can
be empty ("").
.TP
.B RF
-Reference end. Ends a reference definition and returns to normal
-processing. See \fBRS\fP.
+Reference end.
+Ends a reference definition and returns to normal
+processing.
+See \fBRS\fP.
.TP
.B "RI [roman-text [italic-text [roman-text [...]]]]"
Even arguments are printed in roman, odd in italic.
@@ -1224,8 +1353,10 @@ square brackets.
.B "RP [arg1 [arg2]]"
Produce reference page.
\fBRP\fP can be used if a reference page is wanted somewhere in the
-document. It is not needed if \fBTC\fP is used to produce
-a table of content. The reference page will then be printed automatically.
+document.
+It is not needed if \fBTC\fP is used to produce
+a table of content.
+The reference page will then be printed automatically.
.sp
The reference counter will not be reset if \fIarg1\fP is 1.
.sp
@@ -1254,7 +1385,8 @@ is normally set to \fIREFERENCES\fP.
\fBRS\fP begins an automatically numbered reference definition.
Put the string \fB\e*(Rf\fP where the reference mark
should be and write the reference between \fBRS\fP/\fBRF\fP
-at next new line after the reference mark. The reference number
+at next new line after the reference mark.
+The reference number
is stored in number register \fB:R\fP.
If \fIstring-name\fP is given, a string with that name
will be defined and contain the current reference mark.
@@ -1262,8 +1394,10 @@ The string can be referenced as \fB\e*[\fIstring-name\fP]\fP later in
the text.
.TP
.B "S [size [spacing]]"
-Set point size and vertical spacing. If any argument is equal 'P', then
-the previous value is used. A 'C' means current value, and 'D' default value.
+Set point size and vertical spacing.
+If any argument is equal 'P', then
+the previous value is used.
+A 'C' means current value, and 'D' default value.
If '+' or '-' is used before the value, then increment or decrement of
the current value will be done.
.TP
@@ -1275,14 +1409,17 @@ justification.
.TP
.B "SETR refname [string]"
Remember the current header and page-number as \fIrefname\fP.
-Saves \fIstring\fP if \fIstring\fP is defined. \fIstring\fP is retrieved
+Saves \fIstring\fP if \fIstring\fP is defined.
+\fIstring\fP is retrieved
with \fB.GETST\fP.
See \fBINITR\fP.
.TP
.B "SG [arg [1]]"
-Signature line. Prints the authors name(s) after the formal closing.
+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,
+at either the first or last author.
+The reference data is the location,
department and initials specified with \fB.AU\fP.
It will be printed at the first author if the second argument is given,
otherwise at the last.
@@ -1299,18 +1436,24 @@ Otherwise it will skip \fIpages\fP pages.
.B "SM string1 [string2 [string3]]"
Make a string smaller.
If \fIstring2\fP is given, \fIstring1\fP will be smaller and \fIstring2\fP
-normal, concatenated with \fIstring1\fP. With three argument, all is
+normal, concatenated with \fIstring1\fP.
+With three argument, all is
concatenated, but only \fIstring2\fP is made smaller.
.TP
.B "SP [lines]"
-Space vertically. \fIlines\fP can have any scalingfactor, like \fI3i\fP or
-\fI8v\fP. Several \fBSP\fP in a line will only produce the
-maximum number of lines, not the sum. \fBSP\fP will also be ignored
-until the first textline in a page. Add a \fB\e&\fP before \fBSP\fP
+Space vertically.
+\fIlines\fP can have any scalingfactor, like \fI3i\fP or
+\fI8v\fP.
+Several \fBSP\fP in a line will only produce the
+maximum number of lines, not the sum.
+\fBSP\fP will also be ignored
+until the first textline in a page.
+Add a \fB\e&\fP before \fBSP\fP
to avoid this.
.TP
.B TAB
-reset tabs to every 5n. Normally used to reset any previous tabpositions.
+reset tabs to every\ 5n.
+Normally used to reset any previous tabpositions.
.TP
.B "TB [title [override [flag [refname]]]]"
Table title, arguments are the same as for \fBEC\fP.
@@ -1330,13 +1473,15 @@ affected by the format of \fBDS\fP.
Table of contents.
This macro is normally used at the last line of the document.
It generates a table of contents with headings up to the level
-controlled by number register \fBCl\fP. Note that \fBCl\fP controls
+controlled by number register \fBCl\fP.
+Note that \fBCl\fP controls
the saving of headings, it has nothing to do with \fBTC\fP.
Headings with level less than or equal to \fIslevel\fP will get
\fIspacing\fP number of lines before them.
Headings with level less than or equal to \fItlevel\fP will have
their page numbers right justified with dots or spaces separating
-the text and the page number. Spaces is used if \fItab\fP
+the text and the page number.
+Spaces is used if \fItab\fP
is greater than zero, otherwise dots.
Other headings will have the
page number directly at the end of the heading text (\fIragged right\fP).
@@ -1345,7 +1490,8 @@ The rest of the arguments will be printed, centered, before the
table of contents.
.sp
The user-defined macros \fBTX\fP and \fBTY\fP are used if \fBTC\fP is called
-with at most four arguments. \fBTX\fP is called before the printing
+with at most four arguments.
+\fBTX\fP is called before the printing
of \fICONTENTS\fP, and \fBTY\fP is called instead of printing \fICONTENTS\fP.
.sp
Equivalent macros can be defined for list of figures, tables, equations
@@ -1363,11 +1509,14 @@ All texts can be redefined, new stringvariables
These can be redefined to other languages.
.TP
.B TE
-Table end. See \fBTS\fP.
+Table end.
+See \fBTS\fP.
.TP
.B "TH [N]"
-Table header. See \fBTS\fP.
-\fBTH\fP ends the header of the table. This header will
+Table header.
+See \fBTS\fP.
+\fBTH\fP ends the header of the table.
+This header will
be printed again if a page-break occurs.
Argument \fIN\fP isn't implemented yet.
.TP
@@ -1378,22 +1527,27 @@ All text up to the next \fBAU\fP is included in the title.
for use in the front page processing.
.TP
.B TM [num1 [num2 [...]]]
-Technical memorandumnumbers used in \fB.MT\fP. Unlimited number
+Technical memorandumnumbers used in \fB.MT\fP.
+Unlimited number
of arguments may be given.
.TP
.B TP
Top of page user-defined macro.
-This macro is called instead of the normal page header. It is
+This macro is called instead of the normal page header.
+It is
possible to get complete control over the header.
Note that header and footer is printed in a separate environment.
Linelength is preserved though.
.TP
.B "TS [H]"
-Table start. This is the start of a table specification
-to \fB@g@tbl\fP. See separate manual for \fB@g@tbl\fP.
+Table start.
+This is the start of a table specification
+to \fB@g@tbl\fP.
+See separate manual for \fB@g@tbl\fP.
\fBTS\fP ends with \fBTE\fP.
Argument \fIH\fP tells \fBm@TMAC_M_PREFIX@m\fP that the table
-has a header. See \fBTH\fP.
+has a header.
+See \fBTH\fP.
.TP
.B TX
Userdefined table of contents exit.
@@ -1410,7 +1564,8 @@ Begin verbatim output using courier font.
Usually for printing programs.
All character has equal width.
The pointsize can be changed with
-the second argument. By specifying the font-argument
+the second argument.
+By specifying the font-argument
it is possible to use another font instead of courier.
\fIflag\fP controls several special features.
It contains the sum of all wanted features.
@@ -1418,19 +1573,24 @@ It contains the sum of all wanted features.
.T2 Value
Description
.T2 1
-Disable the escape-character (\e). This is normally turned on during
+Disable the escape-character (\e).
+This is normally turned on during
verbose output.
.T2 2
Add an empty line before the verbose text.
.T2 4
Add an empty line after the verbose text.
.T2 8
-Print the verbose text with numbered lines. This adds four digitsized
-spaces in the beginning of each line. Finer control is available with
-the string-variable \fBVerbnm\fP. It contains all arguments to the
+Print the verbose text with numbered lines.
+This adds four digitsized
+spaces in the beginning of each line.
+Finer control is available with
+the string-variable \fBVerbnm\fP.
+It contains all arguments to the
\fBtroff\fP-command \fB.nm\fP, normally '1'.
.T2 16
-Indent the verbose text with five 'n':s. This is controlled by the
+Indent the verbose text with five 'n':s.
+This is controlled by the
number-variable \fBVerbin\fP (in units).
.in
.TP
@@ -1445,8 +1605,14 @@ the distance from the current indent to the mark.
A third argument will prohibit printing of a blank line before each
item.
.TP
-.B "VM [top [bottom]]"
-Vertical margin.
+.B "VM [-T] [top [bottom]]"
+Vertical margin. Adds extra vertical top and margin space.
+Option \fB-T\fP set the total space instead.
+No argument resets the margin to zero or the default
+\fI(7v 5v)\fP if \fB-T\fP
+was used. It is higly recommended that macro \fBTP\fP and/or
+\fBEOP\fP are defined
+if using \fB-T\fP and setting top and/or bottom margin to less than the default.
.TP
.B "WA [writer-name [title]]"
Begins specification of the writer and writer's address.
@@ -1502,7 +1668,8 @@ Fontlist for headings, normally "2 2 2 2 2 2 2".
Nonnumeric fontnames may also be used.
.TP
.B HP
-Pointsize list for headings. Normally "0 0 0 0 0 0 0" which is the same as
+Pointsize list for headings.
+Normally "0 0 0 0 0 0 0" which is the same as
"10 10 10 10 10 10 10".
.TP
.B Index
@@ -1592,7 +1759,8 @@ Letns!to " to
.TP
.B Letnsdef
Defines the standard-notation used when no argument is given
-to \fB.NS\fP. Default is \fB0\fP.
+to \fB.NS\fP.
+Default is \fB0\fP.
.TP
.B "MO1 - MO12"
Strings containing \fIJanuary\fP thru \fIDecember\fP.
@@ -1641,15 +1809,17 @@ Contents level [0:7], contents saved if heading level <= Cl, default 2.
Eject page between LIST OF XXXX if Cp == 0, default 0.
.TP
.B D
-Debugflag, values >0 produces varying degree of debug. A value of 1
-gives information about the progress of formatting, default 0.
+Debugflag, values >0 produces varying degree of debug.
+A value of\ 1
+gives information about the progress of formatting, default\ 0.
.TP
.B De
-Eject after floating display is output [0:1], default 0.
+Eject after floating display is output [0:1], default\ 0.
.TP
.B Dsp
Controls the space output before and after static displays
-if defined. Otherwise is the value of Lsp used.
+if defined.
+Otherwise is the value of Lsp used.
.TP
.B Df
Floating keep output [0:5], default 5.
@@ -1661,7 +1831,8 @@ Floating keep output [0:5], default 5.
Eject page, default 0.
.TP
.B Eq
-Equation lable adjust 0=left, 1=right. Default 0.
+Equation lable adjust 0=left, 1=right.
+Default\ 0.
.TP
.B Fs
Footnote spacing, default 1.
@@ -1670,20 +1841,23 @@ Footnote spacing, default 1.
Heading counters
.TP
.B H1dot
-Append a dot after the level one heading number if > 0. Default is 1.
+Append a dot after the level one heading number if >\ 0.
+Default is\ 1.
.TP
.B H1h
.TP
Copy of number register \fBH1\fP, but it is incremented
-just before the page break. Useful in user defined header macros.
+just before the page break.
+Useful in user defined header macros.
.B Hb
-Heading break level [0:7], default 2.
+Heading break level [0:7], default\ 2.
.TP
.B Hc
-Heading centering level, [0:7]. Default 0.
+Heading centering level, [0:7].
+Default\ 0.
.TP
.B Hi
-Heading temporary indent [0:2], default 1.
+Heading temporary indent [0:2], default\ 1.
.br
0\ ->\ 0 indent, left margin
.br
@@ -1692,26 +1866,31 @@ Heading temporary indent [0:2], default 1.
2\ ->\ indent to line up with text part of preceding heading
.TP
.B Hps
-Numbervariable with the heading pre-space level. If the heading-level
+Numbervariable with the heading pre-space level.
+If the heading-level
is less than or equal to \fBHps\fP, then two lines will precede the
-section heading instead of one. Default is first level only.
+section heading instead of one.
+Default is first level only.
The real amount of lines is controlled by the variables \fBHps1\fP and
\fBHps2\fP.
.TP
.B Hps1
This is the number of lines preceding \fB.H\fP when the heading-level
-is greater than \fBHps\fP. Value is in units, normally 0.5.
+is greater than \fBHps\fP.
+Value is in units, normally 0.5.
.TP
.B Hps2
This is the number of lines preceding \fB.H\fP when the heading-level
-is less than or equal to \fBHps\fP. Value is in units, normally 1.
+is less than or equal to \fBHps\fP.
+Value is in units, normally\ 1.
.TP
.B Hs
-Heading space level [0:7], default 2.
+Heading space level [0:7], default\ 2.
.TP
.B Hss
This is the number of lines that follows \fB.H\fP when the heading-level
-is less than or equal to \fBHs\fP. Value is in units, normally 1.
+is less than or equal to \fBHs\fP.
+Value is in units, normally\ 1.
.TP
.B Ht
Heading numbering type, default 0.
@@ -1734,8 +1913,12 @@ Set this variable to 1 on the command line to get ISO-formatted date string.
(\fB-rIso=1\fP)
Useless inside a document.
.TP
+.B L
+Page length, only for command line settings.
+.TP
.B Letwam
-Max lines in return-address, used in \fB.WA\fP/\fB.WE\fP. Default 14.
+Max lines in return-address, used in \fB.WA\fP/\fB.WE\fP.
+Default\ 14.
.TP
.B "Lf, Lt, Lx, Le"
Enables (1) or disables (0) the printing of List of figures,
@@ -1757,7 +1940,8 @@ List space, if current listlevel > Ls then no spacing will occur around lists.
Default 99.
.TP
.B Lsp
-The size of an empty line. Normally 0.5v, but it is 1v
+The size of an empty line.
+Normally 0.5v, but it is 1v
if \fBn\fP is set (\fB.nroff\fP).
.TP
.B N
@@ -1783,6 +1967,9 @@ Numbered paragraphs, default 0.
.br
1\ ==\ numbered in first level headings.
.TP
+.B O
+Page offset, only for command line settings.
+.TP
.B Of
Format of figure,table,exhibit,equation titles, default 0.
.br
@@ -1808,7 +1995,8 @@ Description
Pointsize will only change to the current setting when \fB.PH\fP, \fB.PF\fP,
\&\fB.OH\fP, \fP.EH\fP, \fB.OF\fP or \fB.OE\fP is executed.
.T2 1
-Pointsize will change after every \fB.S\fP. This is the default.
+Pointsize will change after every \fB.S\fP.
+This is the default.
.in
.TP
.B Ps
@@ -1824,11 +2012,13 @@ Paragraph type, default 0.
2\ ==\ indented .P except after .H, .DE or .LE.
.TP
.B Sectf
-Flag controlling "section-figures". A non-zero value enables this.
+Flag controlling "section-figures".
+A non-zero value enables this.
See also register N.
.TP
.B Sectp
-Flag controlling "section-page-numbers". A non-zero value enables this.
+Flag controlling "section-page-numbers".
+A non-zero value enables this.
See also register N.
.TP
.B Si
@@ -1837,38 +2027,49 @@ Display indent, default 5.
.B Verbin
Indent for \fB.VERBON\fP, default 5n.
.TP
+.B W
+Line length, only for command line settings.
+.TP
.B .mgm
Always 1.
.LP
.SH INTERNALS
The letter macros is using different submacros depending on
-the letter type. The name of the submacro has the letter type
-as suffix. It is therefore possible to define other letter types, either
+the letter type.
+The name of the submacro has the letter type
+as suffix.
+It is therefore possible to define other letter types, either
in the national macro-file, or as local additions.
\&\fB.LT\fP will set the number variables \fBPt\fP and \fBPi\fP to 0 and 5.
The following strings and macros must be defined for a new letter type:
.TP
\fBlet@init_\fP\fItype\fP
-This macro is called directly by \fB.LT\fP. It is supposed to initialize
+This macro is called directly by \fB.LT\fP.
+It is supposed to initialize
variables and other stuff.
.TP
\fBlet@head_\fP\fItype\fP
This macro prints the letter head, and is called instead of the
-normal page header. It is supposed to remove the alias \fBlet@header\fP,
+normal page header.
+It is supposed to remove the alias \fBlet@header\fP,
otherwise it will be called for all pages.
.TP
\fBlet@sg_\fP\fItype\ name\ title\ n\ flag\ [arg1\ [arg2\ [...]]]\fP
\&\fB.SG\fP is calling this macro only for letters, memorandums has
-its own processing. \fIname\fP and \fItitle\fP is specified
-thru \fB.WA\fP/\fB.WB\fP. \fIn\fP is the counter, 1-max, and
-\fIflag\fP is true for the last name. Any other argument to \fB.SG\fP
+its own processing.
+\fIname\fP and \fItitle\fP is specified
+thru \fB.WA\fP/\fB.WB\fP.
+\fIn\fP is the counter, 1-max, and
+\fIflag\fP is true for the last name.
+Any other argument to \fB.SG\fP
is appended.
.TP
\fBlet@fc_\fP\fItype\ closing\fP
This macro is called by \fB.FC\fP, and has the
formal closing as argument.
.LP
-\&\fB.LO\fP is implemented as a general option-macro. \fB.LO\fP demands
+\&\fB.LO\fP is implemented as a general option-macro.
+\fB.LO\fP demands
that a string named \fBLet\fP\fItype\fP is defined, where \fItype\fP
is the letter type.
\&\fB.LO\fP will then assign the argument to the string
@@ -1893,9 +2094,9 @@ Jörgen Hägg, Lund, Sweden <jh@axis.se>.
.BR @g@pic (@MAN1EXT@),
.BR @g@eqn (@MAN1EXT@)
.br
-.BR mm (@MAN7EXT@)
-.BR m@TMAC_M_PREFIX@mse (@MAN7EXT@)
+.BR groff_mmse (@MAN7EXT@)
.
.\" Local Variables:
.\" mode: nroff
+.\" coding: latin-1
.\" End:
diff --git a/contrib/groff/contrib/mm/groff_mmse.man b/contrib/groff/contrib/mm/groff_mmse.man
index f915b8e..511eac5 100644
--- a/contrib/groff/contrib/mm/groff_mmse.man
+++ b/contrib/groff/contrib/mm/groff_mmse.man
@@ -1,5 +1,5 @@
.\"
-.\" $Id: groff_mmse.man,v 2.1 2001/06/27 12:47:16 wlemb Exp $
+.\" $Id: groff_mmse.man,v 2.2 2001/12/09 12:15:09 wlemb Exp $
.\" Skrivet av Jörgen Hägg, Lund, Sverige
.\"
.TH GROFF_MMSE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
@@ -79,7 +79,7 @@ Jörgen Hägg, Lund, Sweden <Jorgen.Hagg@axis.se>
.BR @g@pic (@MAN1EXT@),
.BR @g@eqn (@MAN1EXT@)
.br
-.BR m@TMAC_M_PREFIX@m (@MAN7EXT@)
+.BR groff_mm (@MAN7EXT@)
.
.\" Local Variables:
.\" mode: nroff
diff --git a/contrib/groff/contrib/mm/m.tmac b/contrib/groff/contrib/mm/m.tmac
index 41cff7c..143867d 100644
--- a/contrib/groff/contrib/mm/m.tmac
+++ b/contrib/groff/contrib/mm/m.tmac
@@ -3,8 +3,8 @@
.ds RE \\$2
..
.\"
-.\" $Id: m.tmac,v 2.4 2001/05/16 11:07:52 wlemb Exp $
-.@revision $Revision: 2.4 $
+.\" $Id: m.tmac,v 2.15 2002/08/07 23:23:34 wlemb Exp $
+.@revision $Revision: 2.15 $
.ig
Copyright (C) 1991-2000 Free Software Foundation, Inc.
@@ -33,8 +33,9 @@ Env.var environ:name
Index array!index
..
.if !\n(.g .ab These mm macros require groff.
+.do if d PH .nx
.if \n(.C .ab The groff mm macros do not work in compatibility mode.
-.warn
+.if (\n[.warn] == 65543) .warn
.\" ######## init #######
.\" Contents level [0:7], contents saved if heading level <= Cl
.nr Cl 2
@@ -220,12 +221,12 @@ Index array!index
.\"
.\" These variables controls the number of lines preceding .H.
.\" Hps1 is the number of lines when level > Hps
-.nr Hps1 0.5
-.if n .nr Hps1 1
+.nr Hps1 0.5v
+.if n .nr Hps1 1v
.\"
.\" Hps2 is the number of lines when level <= Hps
-.nr Hps2 1
-.if n .nr Hps2 2
+.nr Hps2 1v
+.if n .nr Hps2 2v
.\"
.\" Hss is the number of lines (Lsp) after the header.
.nr Hss 1
@@ -401,7 +402,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\" ####### module par #################################
.nr par@ind-flag 1 \" indent on following P if Pt=2
.nr hd*last-pos -1
-.nr hd*last-hpos -1
+.nr hd*last-hsize -1
.nr par*number 0 1
.af par*number 01
.nr par*number2 0 1
@@ -417,31 +418,31 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\" paragraph
.de P
.\" skip P if previous heading
-.ie !((\\n[nl]=\\n[hd*last-pos]):(\\n[nl]=(\\n[hd*last-pos]-.5v))) \{\
-. if \\n[D]>2 .tm Paragraph nl=\\n[nl]
-. par@doit \\$*
-. if \\n[Np] \\n[H1].\\n+[par*number]\ \ \c
+.if \\n[D]>2 \{\
+. tm Paragraph nl=\\n[nl], last=\\n[hd*last-pos]
+. tm Paragraph .k=\\n[.k], hsize=\\n[hd*last-hsize]
.\}
-.el .if !(\\n[hd*last-hpos]=\\n[.k]) \{\
-. if \\n[D]>2 .tm Paragraph nl=\\n[nl]
-. par@doit \\$*
-. if \\n[Np] \\n[H1].\\n+[par*number]\ \ \c
+.if !((\\n[nl]=\\n[hd*last-pos]):(\\n[hd*last-hsize]=\\n[.k])) \{\
+. if \\n[D]>2 .tm Paragraph set ind-flag=1
+. nr par@ind-flag 1
.\}
-.nr par@ind-flag 1
+.\" any collected unprinted text?
+.par@doit \\$*
+.if \\n[Np] \\n[H1].\\n+[par*number]\ \ \c
..
.\"------------
.de nP
.\" skip P if previous heading
-.ie !((\\n[nl]=\\n[hd*last-pos]):(\\n[nl]=(\\n[hd*last-pos]-.5v))) \{\
-. if \\n[D]>2 .tm Paragraph nl=\\n[nl]
-. par@doit \\$*
-\\n[H2].\\n+[par*number2]\ \ \c
+.if \\n[D]>2 \{\
+. tm Paragraph nl=\\n[nl], last=\\n[hd*last-pos]
+. tm Paragraph .k=\\n[.k], hsize=\\n[hd*last-hsize]
.\}
-.el .if !(\\n[hd*last-hpos]=\\n[.k]) \{\
-. if \\n[D]>2 .tm Paragraph nl=\\n[nl]
-. par@doit \\$*
-\\n[H2].\\n+[par*number2]\ \ \c
+.if !((\\n[nl]=\\n[hd*last-pos]):(\\n[hd*last-hsize]=\\n[.k])) \{\
+. if \\n[D]>2 .tm Paragraph set ind-flag=1
+. nr par@ind-flag 1
.\}
+.par@doit \\$*
+\\n[H2].\\n+[par*number2]\ \ \c
.nr par@ind-flag 1
..
.\"------------
@@ -770,10 +771,12 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
. shift
. \}
.\}
+.\" let mmroff know the filename and id
.if \\n[Ref]>0 \{\
. tm .\\\\" PIC id \\n[pict*id]
. tm .\\\\" PIC file \\*[pict*f]
.\}
+.\" these are defined by mmroff in the second pass
.if d pict*file!\\n[pict*id] \{\
. ds pict*f \\*[pict*file!\\n[pict*id]]
. nr pict*llx \\n[pict*llx!\\n[pict*id]]
@@ -809,41 +812,52 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
. ds pict*h "
. if \\n[pict*h]>0 .ds pict*h \\n[pict*h]
. \"
-. ne \\n[pict*h]u
+. ne \\n[pict*h]u-1v
. \"
. \" these lines are copied and modified from tmac.pspic.
. \" Originally written by James Clark
. br
. ie \\n[pict*box]>0 \{\
-\h'\\n[pict*in]u'\
+\v'-1v'\h'\\n[pict*in]u'\
\Z'\D'p 0 \\n[pict*h]u \\n[pict*w]u 0 0 -\\n[pict*h]u''\
\v'\\n[pict*h]u'\X'ps: import \\*[pict*f] \
-\\n[pict*llx] \\n[pict*lly] \\n[pict*urx] \\n[pict*ury] \\n[pict*w] \\n[pict*h]'
+\\n[pict*llx] \\n[pict*lly] \
+\\n[pict*urx] \\n[pict*ury] \
+\\n[pict*w] \\n[pict*h]'
.\}
. el \{\
-\h'\\n[pict*in]u'\
+\v'-1v'\h'\\n[pict*in]u'\
\X'ps: invis'\
\Z'\D'p 0 \\n[pict*h]u \\n[pict*w]u 0 0 -\\n[pict*h]u''\
\X'ps: endinvis'\
\v'\\n[pict*h]u'\X'ps: import \\*[pict*f] \
-\\n[pict*llx] \\n[pict*lly] \\n[pict*urx] \\n[pict*ury] \\n[pict*w] \\n[pict*h]'
+\\n[pict*llx] \\n[pict*lly] \
+\\n[pict*urx] \\n[pict*ury] \
+\\n[pict*w] \\n[pict*h]'
. \}
. br
-. sp \\n[pict*h]u
+. sp \\n[pict*h]u-1v
.\}
..
.\" external picture
+.\" -L left adjust
.de EPIC
-.if \\n[.$]< 2 .@error "EPIC: Not enough arguments"
+.if \\n[.$]<2 .@error "EPIC: Not enough arguments"
+.nr pict*adj 0 \" centered
+.if '\\$1'-L' \{\
+. shift 1 \" left adjust
+. nr pict*adj 1
+.\}
+.if \\n[nl]<0 \&
.nr pict*w \\$1
.nr pict*h \\$2
.ds pict*name "External picture
.if !''$3' .ds pict*name \\$3
-\&
-.br
.ne \\n[pict*h]u
-.sp \\n[pict*h]u
-.nr pict*ind (u;(\\n[.l]-\\n[.i]-\\n[pict*w])/2)
+.sp \\n[pict*h]u-1v
+.nr pict*ind 0
+.if !\\n[pict*adj] .nr pict*ind (u;(\\n[.l]-\\n[.i]-\\n[pict*w])/2)
+.mk
.in +\\n[pict*ind]u
\D'l \\n[pict*w]u 0'\
\D'l 0 -\\n[pict*h]u'\
@@ -852,6 +866,8 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
\v'-(u;\\n[pict*h]/2)'\
\h'(u;(\\n[pict*w]-\w'\\*[pict*name]'/2))'\\*[pict*name]
.in
+.rt
+.sp 1v
..
.\" ######## module acc #################
.\"-----------
@@ -1054,7 +1070,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\"---------- user macro HZ ----------
.if d HZ .HZ \\n[hd*level] \\n[hd*arg1] "\\$2\\$3"
.nr hd*last-pos \\n[nl]
-.nr hd*last-hpos \\n[.k]
+.nr hd*last-hsize \\n[.k]
.nr par@ind-flag 0
..
.\"--------
@@ -1093,8 +1109,8 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.nr pg*top-margin 0
.nr pg*foot-margin 0
.nr pg*block-size 0
-.nr pg*footer-size 5\" 1v+footer+even/odd footer+2v
-.nr pg*header-size 7\" 3v+header+even/odd header+2v
+.nr pg*footer-size 5v\" 1v+footer+even/odd footer+2v
+.nr pg*header-size 7v\" 3v+header+even/odd header+2v
.nr pg*extra-footer-size 0
.nr pg*extra-header-size 0
.nr ft*note-size 0
@@ -1108,14 +1124,14 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\"-------------------------
.\" footer TRAPS: set, enable and disable
.de pg@set-new-trap
-.nr pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]v+\\n[pg*extra-footer-size]u)
+.nr pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u)
.\"
-.if \\n[D]>2 .tm pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]v+\\n[pg*extra-footer-size]u) = \\n[pg*foot-trap]
+.if \\n[D]>2 .tm pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u) = \\n[pg*foot-trap]
.\"
.\" last-pos points to the position of the footer and bottom
.\" block below foot-notes.
-.nr pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]v)
-.if \\n[D]>2 .tm pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]v) = \\n[pg*last-pos]
+.nr pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u)
+.if \\n[D]>2 .tm pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u) = \\n[pg*last-pos]
..
.de pg@enable-trap
.wh \\n[pg*foot-trap]u pg@footer
@@ -1379,16 +1395,28 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
..
.\"-------------------------
.\" set top and bottom margins
+.\" -T sets pg*footer-size and pg*header-size instead
.de VM
-.if \\n[.$]=0 \{\
-. nr pg*extra-footer-size 0
-. nr pg*extra-header-size 0
+.ie '\\$1'-T' \{\
+. shift
+. if \\n[.$]=0 \{\
+. nr pg*footer-size 5v
+. nr pg*header-size 7v
+. \}
+. if \\n[.$]>0 .nr pg*header-size (v;\\$1)
+. if \\n[.$]>1 .nr pg*footer-size (v;\\$2)
.\}
-.if \\n[.$]>0 .nr pg*extra-header-size (v;\\$1)
-.if \\n[.$]>1 .nr pg*extra-footer-size (v;\\$2)
-.if \\n[D]>2 \{\
-. tm extra top \\n[pg*extra-footer-size]
-. tm extra bottom \\n[pg*extra-header-size]
+.el \{\
+. if \\n[.$]=0 \{\
+. nr pg*extra-footer-size 0
+. nr pg*extra-header-size 0
+. \}
+. if \\n[.$]>0 .nr pg*extra-header-size (v;\\$1)
+. if \\n[.$]>1 .nr pg*extra-footer-size (v;\\$2)
+. if \\n[D]>2 \{\
+. tm extra top \\n[pg*extra-footer-size]
+. tm extra bottom \\n[pg*extra-header-size]
+. \}
.\}
.pg@move-trap
..
@@ -1977,6 +2005,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\" nested DS/DE is allowed. No limit on depth.
.de DS
.br
+.nr XXX \\n[nl]
.nr ds*lvl +1
.ds@set-format \\$@
.\"
@@ -2012,7 +2041,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
'nf
.\" calculate needed space
.nr ds*need \\n[ds*height]
-.nr ds*i \\n[pg*foot-trap]-\\n[pg*header-size]v-\\n[pg*extra-header-size]v
+.nr ds*i \\n[pg*foot-trap]-\\n[pg*header-size]u-\\n[pg*extra-header-size]u
.if (\\n[ds*height]>\\n[ds*i])&(\\n[.t]<(\\n[ds*i]/2)) .nr ds*need \\n[.t]u+1v
.if (\\n[ds*height]<\\n[ds*i])&(\\n[.t]<(\\n[ds*height])) .nr ds*need \\n[.t]u+1v
.\" Eject page if display will fit one page and
@@ -2034,9 +2063,9 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.nr ds*i \\n[Lsp]
.if r Dsp .nr ds*i \\n[Dsp]
.\"
-.if \\n[Ds] .SP \\n[ds*i]u
+.if \\n[Ds] .sp \\n[ds*i]u
.ds*div!\\n[ds*snr]
-.if \\n[Ds] .SP \\n[ds*i]u
+.if \\n[Ds] .sp \\n[ds*i]u
.\"
.if \\n[ds*format]=2 'ce 0
.if \\n[ds*format]=4 'rj 0
@@ -2078,7 +2107,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.ds li*mark \\$5\" mark
.ie !'\\$6'' .nr li*li-spc \\$6\" LI-space
.el .nr li*li-spc 1
-.ie !'\\$7'' .nr li*lb-spc \\$6\" LB-space
+.ie !'\\$7'' .nr li*lb-spc \\$7\" LB-space
.el .nr li*lb-spc 0
.\" init listcounter
.nr li*cnt!\\n[li*lvl] 0 1
@@ -2312,10 +2341,11 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.de eq@check
.if !'\\*[eq*label]'' \{\
. mk
-' sp (u;\\$1/2-.45v)
+. \" space down to middle of equation
+' sp (u;\\$1/2)
. ie (\\n[Eq]%2) \{\
. \" label to the left
-\h'|0'\\*[eq*label]\c
+\h'|0'\\*[eq*label]
. \}
. el \{\
. \" label to the right
@@ -3096,7 +3126,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.\"########################### module ind ############################
.\" Support for mgs-style indexing, borrowed from mgs.
.de IX
-.tm \\$1\t\\$2\t\\$3\t\\$4 ... \\n[%]
+. tm \\$1\t\\$2\t\\$3\t\\$4 ... \\n[%]
..
.\"--------------------
.\" Another type of index system
@@ -3405,6 +3435,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.if \\n[.$] .ds let*ia-name!\\n+[let*ia-n] \\$1
.if \\n[.$]>1 .ds let*ia-title!\\n[let*ia-n] \\$2
.ev let@ev
+.init@reset
'nf
.di let@ia-div
.eo
@@ -3421,6 +3452,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
.if \\n[.$] .ds let*wa-name!\\n+[let*wa-n] \\$1
.if \\n[.$]>1 .ds let*wa-title!\\n[let*wa-n] \\$2
.ev let@ev
+.init@reset
'nf
.di let@wa-div
.it \\n[Letwam] let@wa-drain
diff --git a/contrib/groff/contrib/mm/mm.tmac b/contrib/groff/contrib/mm/mm.tmac
new file mode 100644
index 0000000..9ed09b7
--- /dev/null
+++ b/contrib/groff/contrib/mm/mm.tmac
@@ -0,0 +1,3 @@
+.\" mm.tmac
+.\"
+.do mso m.tmac
diff --git a/contrib/groff/contrib/mm/mmroff.man b/contrib/groff/contrib/mm/mmroff.man
index f128ce4..a891ff5 100644
--- a/contrib/groff/contrib/mm/mmroff.man
+++ b/contrib/groff/contrib/mm/mmroff.man
@@ -1,7 +1,7 @@
.\"
-.\" $Id: mmroff.man,v 2.1 2001/06/27 12:47:16 wlemb Exp $
+.\" $Id: mmroff.man,v 2.2 2001/12/09 12:15:09 wlemb Exp $
.\"
-.TH MMROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
+.TH MMROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
.SH NAME
mmroff \- reference preprocessor
.SH SYNOPSIS
@@ -43,9 +43,6 @@ Jörgen Hägg, Lund, Sweden <jh@axis.se>.
.BR @g@tbl (@MAN1EXT@),
.BR @g@pic (@MAN1EXT@),
.BR @g@eqn (@MAN1EXT@)
-.br
-.BR mm (@MAN7EXT@)
-.BR m@TMAC_M_PREFIX@mse (@MAN7EXT@)
.
.\" Local Variables:
.\" mode: nroff
diff --git a/contrib/groff/contrib/mm/mmroff.pl b/contrib/groff/contrib/mm/mmroff.pl
index 69b6105..155550b 100755
--- a/contrib/groff/contrib/mm/mmroff.pl
+++ b/contrib/groff/contrib/mm/mmroff.pl
@@ -14,8 +14,10 @@ if (grep(/^-x$/, @ARGV)) {
@ARGV = grep(!/^-x$/, @ARGV);
}
-my $check_macro = "groff -rRef=1 -z @ARGV";
-my $run_macro = "groff @ARGV";
+# mmroff should always have -mm, but not twice
+@ARGV = grep(!/^-mm$/, @ARGV);
+my $check_macro = "groff -rRef=1 -z -mm @ARGV";
+my $run_macro = "groff -mm @ARGV";
my (%cur, $rfilename, $max_height, $imacro, $max_width, @out, @indi);
open(MACRO, "$check_macro 2>&1 |") || die "run $check_macro:$!";
@@ -66,11 +68,12 @@ while(<MACRO>) {
close(MACRO);
-if ($rfilename && @out) {
+if ($rfilename) {
push(@out, ".nr pict*max-height $max_height\n") if defined $max_height;
push(@out, ".nr pict*max-width $max_width\n") if defined $max_width;
open(OUT, ">$rfilename") || "create $rfilename:$!";
+ print OUT '.\" references', "\n";
my $i;
for $i (@out) {
print OUT $i;
diff --git a/contrib/groff/contrib/mm/mmse.tmac b/contrib/groff/contrib/mm/mmse.tmac
new file mode 100644
index 0000000..8198666
--- /dev/null
+++ b/contrib/groff/contrib/mm/mmse.tmac
@@ -0,0 +1,3 @@
+.\" mmse.tmac
+.\"
+.do mso mse.tmac
diff --git a/contrib/groff/contrib/mom/BUGS b/contrib/groff/contrib/mom/BUGS
new file mode 100644
index 0000000..92d4b47
--- /dev/null
+++ b/contrib/groff/contrib/mom/BUGS
@@ -0,0 +1,76 @@
+Assume that anything that doesn't work or behaves oddly is a bug.
+The documentation should be taken as the authoritative source for
+how things ought to be.
+
+Post to the groff mailing list (groff@ffii.org) with bug reports,
+questions and suggestions, or contact me directly at:
+
+ df191@ncf.ca
+
+--Peter Schaffter
+
+========================================================================
+
+Version 1.1.3c
+==============
+
+
+Version 1.1.3
+=============
+
+Footnotes not outputting on final page of document body when ENDNOTES
+is invoked.
+---Fixed---
+
+Pad not working properly and/or spitting out warnings when fill mode is
+on.
+---Fixed---
+
+Version 1.1.2
+=============
+
+PAGENUM_STYLE being ignored unless entered after START.
+---Fixed---
+
+Version 1.1
+===========
+
+String tabs not working as advertised when set from within other tabs.
+---Fixed---
+
+.COLLATE sometimes depositing a header on the first page of a subsequent doc.
+---Fixed with workaround BREAK_QUOTE---
+
+.UNDERLINE_QUOTES in PRINTSTYLE TYPEWRITE not on by default as advertised.
+---Fixed---
+
+.TI not cooperating with other indent styles.
+---Fixed---
+
+.WS and .SS not cooperating.
+---Fixed---
+
+.RW and .EW not working.
+---Fixed---
+
+========================================================================
+
+KNOWN PROBLEMS
+--------------
+
+The indent macros from the typesetting macro set may not always
+perform well in conjunction with the document processing macros,
+especially when documents are set in columns. Mostly, this is the
+result of inadequate testing. There are only so many "who'd want to
+do this anyway?" scenarios I can think of on my own.
+
+Epigraphs at the bottoms of page may sometimes run exactly one line
+deeper than they should. The alternative (from my point of view) is
+to have them run 1 line shorter than they should. The problem stems
+from the fact the epigraphs are leaded differently than all other text,
+and there's only so much adjusting that can be done with the whitespace
+surrounding them to get them to bottom align. Since stylistically,
+epigraphs should never appear at the bottom of a page/column without at
+least some running text beneath them in order to make sense of the role
+they play in page layout, this not likely to be fixed for some time.
+
diff --git a/contrib/groff/contrib/mom/ChangeLog b/contrib/groff/contrib/mom/ChangeLog
new file mode 100644
index 0000000..d1e0fd1
--- /dev/null
+++ b/contrib/groff/contrib/mom/ChangeLog
@@ -0,0 +1,390 @@
+*Sun Aug 25 2002
+
+o Changed .IX to .IQ. The older form still works, but emits a message
+ advising the user to update to the newer. (The macro in om.tmac
+ still remains IX; IQ is an alias.) Docs updated to reflect the
+ change.
+
+*Tue Aug 20 2002
+
+o Added new (better) way to handle inline kerning. \*[BU #] and
+ \*[FU #] allow passing an argument to the inline string. The older
+ forms \*[BU#] and \*[FU#] still work, though.
+
+o Changed handling of inline horizontal and vertical movements.
+ Horizontal movements are now done with \*[BCK #<unit>] and
+ \*[FWD #<unit>]; verticals with \*[UP #<unit>] and \*[DOWN #<unit>].
+ The older forms \*[FP#] and \*[BP#] still work (horizontals), as do
+ \*[ALD#] and \*[RLD#] (verticals).
+
+*Mon Aug 19 2002
+
+o Fixed ENDNOTES so footnotes output properly when ENDNOTES is called
+
+o Added ENDNOTES_HDRFTR_CENTER so that default no-print of header
+ center string on endnotes page(s) when DOCTYPE is CHAPTER can
+ be disabled (i.e. header center will be printed).
+
+*Sat Aug 10 2002
+
+o Added .nf to top of PAD, with a test beforehand for current fill
+ mode. If fill mode was on, it's restored after PAD completes
+ processing. Updated reserved.html to include number register
+ #FILL_MODE.
+
+*Mon Jul 29 2002
+
+o Makefile.sub (FFLAG, TFLAG): Add paths to source directories.
+
+*Wed Jul 24 2002
+
+o Makefile.sub (groff_bin_path): Don't use ' \+' but ' *' for sed.
+ (GROFF): Set GROFF_COMMAND_PREFIX to empty value.
+
+*Fri Jul 12 2002
+
+o More fixes to underlining.
+
+*Fri Jul 5 2002
+
+o Added capability of endnotes and pertinent control macros to om.tmac.
+
+o Added document entries pertaining to endnote macros.
+
+o Incorporated endnote macros into elvis_syntax.
+
+o Small doc fixes.
+
+o Tidied up indenting of om.tmac.
+
+o Fixed handling of underlining of italics in PRINTSTYLE TYPEWRITE
+ (there was a problem with footnotes getting underlined when they
+ shouldn't have been).
+
+o Removed ENDNOTES from TODO
+
+o Fixed the character translations for UNDERLINE so they work properly
+ with digraphs.
+
+*Mon Jul 1 2002
+
+o Expanded docprocessing.html entry "Special Note on Chapters". Tidied
+ up html a bit.
+
+*Tue Jun 18 2002
+
+o examples/macros.mom: Fix path to penguin.ps.
+
+*Sat Jun 15 2002
+
+o Small fix to PAD to make the use of inlines within the pad string
+ more intuitive.
+
+o Added \*[RULE] ( = \l'\n(.lu' ) so that full measure rules (either to
+ full line length or within tabs) are easier to set.
+
+*Sat Jun 8 2002
+
+o Macro .PS renamed to .PT_SIZE. Alias .TS removed.
+
+o .tr bits in .CAPS rewritten in the form .tr é\['E].
+
+o General cleanup of docs to reflect changes.
+
+o Small changes/additions to `elvis_syntax'.
+
+*Thu Jun 6 2002
+
+o In DOCTYPE, in .if '\\$1'LETTER', added .FOOTER_RIGHT_SIZE +0.
+ Without it, the suite page was printing at the default
+ FOOTER_RIGHT_SIZE of -.5, which didn't look good.
+
+*Wed Jun 5 2002
+
+o Makefile.sub (TFLAG): Add `$(top_builddir)/tmac'.
+
+*Tue Jun 4 2002
+
+o Makefile.sub (groff_bin_dirs): Fix typo (forgotten `src' element).
+
+*Mon Jun 3 2002
+
+o Makefile.sub (uninstall_sub): Don't use `momdocdir' but `htmldocdir'.
+ Add missing backslash.
+
+*Sat Jun 1 2002
+
+o Makefile.in (prepare_make_examples): Test for `penguin.ps', not
+ `examples/penguin.ps'.
+
+*Wed May 29 2002
+
+o Rewrote portions of PAGENUM_STYLE and COPYSTYLE so that PAGENUM_STYLE
+ behaves as advertised.
+
+*Fri May 24 2002
+
+o /Makefile.sub (momdocdir): Removed.
+ (HTMLDOCFILES): Prepend `momdoc/'.
+ (EXTRAEXAMPLEFILES): Removed. Added entries to...
+ (EXAMPLEFILES): This.
+ (.SUFFIXES, .mom.ps): New.
+ (prepare_make_examples): Updated.
+ (examples/*.ps): Removed; .mom.ps will handle this.
+ (install_data): Updated.
+
+*Thu May 23 2002
+
+o Applied two small bug fixes to om.tmac (patches 1.1.1a and 1.1.1b).
+
+o mom is now part of groff.
+
+o Some renaming to avoid problems with 8+3 filesystems:
+
+ examples/docprocessing_typeset.mom -> examples/typeset.mom
+ examples/docprocessing_typewrite.mom -> examples/typewrite.mom
+ examples/typesetting_macros.mom -> examples/macros.mom
+ examples/penguin_small2_bw.ps -> examples/penguin.ps
+
+o Removed `INSTALL' and `README' since groff takes care of installation
+ now.
+
+o Added Makefile.sub.
+
+o Added mom.tmac (which simply calls om.tmac).
+
+o Added groff_mom.man for orthogonality; it simply points to the HTML
+ documentation.
+
+*Thu May 16 2002
+
+o Added macro DRAFT_WITH_PAGENUMBER so user can have draft/revision
+ info attached to the pagenumber in COPYSTYLE DRAFT, instead of having
+ it HEADER center. Always having it HEADER center was creating problems
+ with long doc titles, esp. with PRINTSTYLE TYPEWRITE (which is when
+ COPYSTYLE DRAFT is most likely to be used). Now user has the choice,
+ in these circumstances, either to reduce HEADER_SIZE, or to displace
+ the draft/revision info. Also rewrote portions of COPYSTYLE so that
+ if no revision number is given in the reference macros, "Rev. #"
+ doesn't appear when COPYSTYLE DRAFT.
+
+*Fri May 10 2002
+
+o Added capability of user-defined, single string recto/verso
+ headers/footers.
+
+o Added new entries to docs about the above. Made some additional
+ small changes to toc.html, rectoverso.html, and headfootpage.html
+ to supplement the new entries.
+
+o Small fix to handling of footer separator rule -- was 1 point too low
+ owing to fuzziness of #CAP_HEIGHT as returned by SIZESPECS.
+
+o Added some more useful stuff to elvis_syntax.
+
+*Sun May 05 2002
+
+o Fix to DEFAULTS so that L_MARGIN and R_MARGIN are reprocessed if
+ DOCTYPE LETTER. R_MARGIN, as set by DOCTYPE LETTER had no preceding
+ PAGEWIDTH or PAPER from which to get #PAGE_WIDTH for figuring out
+ line length.
+
+o Additional fix to DEFAULTS in handling DOCTYPE LETTER so that if user
+ sets line length prior to START, no reprocessing of R_MARGIN occurs.
+ This necessitated adding a new number register: #USER_SET_L_LENGTH
+
+*Sat May 04 23:48:05 EDT 2002
+
+o Added .cflags 4 /\(en -- was driving me nuts that lines wouldn't
+ break after these characters; I'm assuming others feel the same way
+
+* Fri May 03 2002
+
+o Made some small fixes to space handling around quotes, mostly to do
+ with quotes immediately after START and quotes after (sub)heads.
+
+* Wed May 01 2002
+
+o Fixed a small bug that was causing the first .PP after START to begin
+ at the top margin of the page regardless of any type that preceded
+ .PP when docheaders were off.
+
+o Fixed HEADER so that when HEADERS are off the first line of type on
+ pages after the first falls properly at the top margin
+
+*Sat Apr 27 2002
+
+o Renamed docprocessing_macros.mom in /examples to
+ docprocessing_typeset.mom. Added docprocessing_typewrite.mom, as
+ well as a README file.
+
+o Fixed UNDERLINE_QUOTES (for PRINTSTYLE TYPEWRITE) so they really are
+ on by default as the docs say.
+
+o Changes to doc entry on COLLATE:
+
+ - removed bit about using COLLATE after a cover page (I wrote the
+ entry *before* I wrote the macro!). Cover pages should be
+ followed by NEWPAGE, not COLLATE.
+
+ - added caution about mixing PRINTSTYLEs
+
+ - added caution about using DOC_FAMILY to change family of all
+ document elements after COLLATE
+
+o Made HEADER_SIZE (and, by extension, FOOTER_SIZE) available to
+ PRINTSTYLE TYPEWRITE. Changed appropriate doc entries to reflect
+ this.
+
+*Wed Apr 24 2002
+
+o Small change to DO_QUOTE to correct a problem with quotes and
+ blockquotes that fall in the middle of paragraphs (i.e. text after
+ the quote is not a new para). Basically, added a bit that stores the
+ current para indent, sets para indent to 0, invokes a PP, then
+ restores the original para indent.
+
+o Added new macro, BREAK_QUOTE, to deal with the problem of
+ footnotes in quotes and blockquotes that cross pages or columns.
+
+ Quotes and blockquotes are read into diversions, which means they
+ get their footnote information from the page/column on which they
+ were started. If a footnoted quote crosses a page/column, what
+ sometimes happens is that the footnote itself is output at the
+ bottom of page/column where the quote started, whereas the text
+ marker for the footnote appears on the next page/column where the
+ quote ends. Furthermore, the text marker is the one appropriate
+ to the previous page. BREAK_QUOTE is a workaround.
+
+o Added directory /examples to archive.
+
+o Added typesetting_macros.mom, docprocessing_macros.mom, elvis_syntax
+ and penguin_small2_bw.ps to /examples.
+
+o Added BREAK_QUOTE to docs, made some additions to reserved words
+ list, and corrected a few little doc errors.
+
+*Mon Apr 22 2002
+
+o Added default .L_MARGIN 1i and .R_MARGIN 1i to PAPER, PAGE, and
+ PAGEWIDTH. L_MARGIN is essential otherwise left indents and tabs
+ don't have a register #L_MARGIN to work with. The default right
+ margin is a convenience only. Updated the doc entries for L_MARGIN
+ and R_MARGIN to reflect the change.
+
+*Sun Apr 21 2002
+
+o Changes to COLLATE:
+
+ - added some "resets" (LL, LS, QUAD)
+ - added a check for whether pagination is at page top (either
+ because FOOTERS are on or because PAGENUM_POS was user set).
+ If pagination is on, and PAGENUM_POS is TOP, it's turned off
+ for next page (start of next collated document) and restored
+ for subsequent pages unless PAGENUM_ON_FIRST_PAGE is on, in
+ which case the page number appears at page top.
+
+o The macro TRAPS is always invoked at the end of DEFAULTS (which is
+ called by START). Formerly, TRAPS was only invoked at the start
+ of a doc, not after COLLATE. Now runs after COLLATE as well.
+
+o Distance from $DOC_TYPE in DOCTYPE NAMED "<string>" to start of
+ running text was one linespace too deep. Fixed (in START).
+
+o When 1st arg to PAGENUM_POS was user set to TOP, running text was
+ printing 1 linespace too high, even when PAGINATION was OFF. Same
+ problem when HEADERS were OFF (i.e. nothing in the header margin at
+ all). Fixed by removing -\\n[#DOC_LEAD]u from all .sp |\\n[#T_MARGIN]u
+ calls of .el portion after .ie \\n[#HEADERS_ON].
+
+o Added new macro: PAGENUM_ON_FIRST_PAGE. Normally, when FOOTERS are
+ being used instead of HEADERS, mom doesn't print the page number at
+ the top of the first page of a doc, or the first page of collated
+ docs. New macro allows user to get mom to put the page number on
+ "first" pages if that's desired. Updated docs to include the macro.
+
+o More little fixes to docs.
+
+*Thu Apr 18 2002
+
+o Fixed TI (temporary indent) so that it continues to work as expected,
+ even when called while another type of indent is in effect.
+
+*Tue Apr 16 2002
+
+o String tabs weren't working as advertised when set from within
+ a tab. Fixed. Two new registers added: #ST_OFFSET and #IN_TAB.
+ String tabs now behave poperly and intuitively when set within tabs.
+
+o Added a note to docs about surrounding \w'...' escape with double-
+ quotes when it's used as an argument to macros
+
+o Added a note to docs that SILENT does not deposit a .br
+
+*Mon Apr 15 2002
+
+o Added new macro BR_AT_LINE_KERN if user wants mom to deposit .br's
+ before .RW and/or .EW.
+
+o Added 1/4 points to inline escapes \*[ALD] and \*[RLD].
+
+o Added 1/4 points to inline escapes \*[FP] and \*[BP]
+
+o Updated docs to reflect the above changes.
+
+*Fri Apr 12 2002
+
+o Fixed .RW and .EW which weren't working because of a missing \ in
+ \\n(.f register. Also made it so that .RW and .EW affect all fonts
+ in positions 1, 2, 3, and 4 at once, hence line kerning now affects
+ all fonts that appear after it, not just the font that was current at
+ the time of the macros' invocation.
+
+o .SS and .WS now working properly. .WS no longer has any effect on
+ .SS, which remains constant regardless of .WS. Furthermore, .SS no
+ longer gets its value by adding \*[$SS_VAR] + \n[.ss]. Instead,
+ it remains constant. Don't know what I was thinking when I wrote
+ the routine in the first place.
+
+o Updated and rewrote doc entry pertaining to SS
+
+*Wed Apr 10 2002
+
+o Renamed tmac.om to om.tmac to bring macro file's name into line
+ with current groff policy
+
+o Added more standard paper sizes to PAPER.
+
+o Fixed T_MARGIN, LS, and AUTOLEAD so that if T_MARGIN is set before LS
+ or AUTOLEAD at the top of a file, the first line of type falls
+ properly on the baseline set by T_MARGIN. Previously, LS and
+ AUTOLEAD automatically advanced by the value passed to them before
+ setting the first line of type, meaning that the first line of type
+ fell at T_MARGINu+1v instead of T_MARGIN.
+
+o Updated docs to reflect changes.
+
+o Removed #TEST_FOR_NUMERIC from list of reserved words.
+
+o Added "t" and #T_MARGIN_SET to list of reserved words.
+
+*Sat Apr 6 2002
+
+o Added FACTOR arg to AUTOLEAD, so if user wants autolead to be a factor
+ of point size, instead of being the sum of pointsize + autolead, s/he
+ has the choice. Incorporated appropriate changes to PS and LS.
+
+o Added new register #AUTOLEAD_FACTOR to reserved words. Modified
+ comments for AUTOLEAD, PS, and LS to reflect changes. Also
+ corrected an error where #AUTOLEAD_VALUE had mistakenly been written
+ $AUTOLEAD_VALUE in comments in the macro file, and removed erroneous
+ | <anything>. Updated AUTOLEAD entry in momdoc/typesetting.html
+ to reflect the changes.
+
+*Wed Apr 3 2002
+
+o Cleaned up html errors in the docs.
+
+o Added "Next," "Prev" and "Top" links to top and bottom of doc files.
+
+o Fixed some typos in the docs.
diff --git a/contrib/groff/contrib/mom/Makefile.sub b/contrib/groff/contrib/mom/Makefile.sub
new file mode 100644
index 0000000..881c052
--- /dev/null
+++ b/contrib/groff/contrib/mom/Makefile.sub
@@ -0,0 +1,125 @@
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Written by Werner Lemberg (wl@gnu.org)
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with groff; see the file COPYING. If not, write to the Free Software
+# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+groff_bin_dirs=\
+ $(top_builddir)/src/roff/groff \
+ $(top_builddir)/src/roff/troff \
+ $(top_builddir)/src/devices/grops
+groff_bin_path=`echo $(groff_bin_dirs) | sed -e 's| *|:|g'`
+
+FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
+TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac -M$(srcdir)
+
+GROFF=GROFF_COMMAND_PREFIX=''; \
+ export GROFF_COMMAND_PREFIX; \
+ GROFF_BIN_PATH=$(groff_bin_path); \
+ export GROFF_BIN_PATH; \
+ $(top_builddir)/src/roff/groff/groff $(FFLAG) $(TFLAG)
+
+MAN7=\
+ groff_mom.n
+
+NORMALFILES=\
+ mom.tmac \
+ om.tmac
+
+HTMLDOCFILES=\
+ momdoc/appendices.html \
+ momdoc/cover.html \
+ momdoc/definitions.html \
+ momdoc/docelement.html \
+ momdoc/docprocessing.html \
+ momdoc/goodies.html \
+ momdoc/headfootpage.html \
+ momdoc/inlines.html \
+ momdoc/intro.html \
+ momdoc/letters.html \
+ momdoc/rectoverso.html \
+ momdoc/reserved.html \
+ momdoc/toc.html \
+ momdoc/typemacdoc.html \
+ momdoc/typesetting.html \
+ momdoc/using.html
+
+EXAMPLEFILES=\
+ examples/letter.mom \
+ examples/macros.mom \
+ examples/typeset.mom \
+ examples/typewrite.mom \
+ examples/README.mom \
+ examples/elvis_syntax \
+ examples/penguin.ps
+
+PROCESSEDEXAMPLEFILES=\
+ examples/letter.ps \
+ examples/macros.ps \
+ examples/typeset.ps \
+ examples/typewrite.ps
+
+CLEANADD=\
+ penguin.ps \
+ $(PROCESSEDEXAMPLEFILES)
+
+.SUFFIXES: .mom .ps
+.mom.ps:
+ $(GROFF) -Tps -mom $< >$@
+
+
+all: make_examples
+
+.PHONY: make_examples
+make_examples: prepare_make_examples $(PROCESSEDEXAMPLEFILES)
+
+prepare_make_examples: examples/penguin.ps
+ test -d examples || $(mkinstalldirs) examples
+ test -f penguin.ps || cp $(srcdir)/examples/penguin.ps .
+
+install_data: $(NORMALFILES) $(HTMLDOCFILES) \
+ $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES)
+ -test -d $(tmacdir) || $(mkinstalldirs) $(tmacdir)
+ for f in $(NORMALFILES); do \
+ rm -f $(tmacdir)/$$f; \
+ $(INSTALL_DATA) $(srcdir)/$$f $(tmacdir)/$$f; \
+ done
+ -test -d $(htmldocdir)/momdoc || $(mkinstalldirs) $(htmldocdir)/momdoc
+ for f in $(HTMLDOCFILES); do \
+ rm -f $(htmldocdir)/$$f; \
+ $(INSTALL_DATA) $(srcdir)/$$f $(htmldocdir)/$$f; \
+ done
+ -test -d $(exampledir) || $(mkinstalldirs) $(exampledir)
+ for f in $(EXAMPLEFILES); do \
+ rm -f $(exampledir)/$$f; \
+ $(INSTALL_DATA) $(srcdir)/$$f $(docdir)/$$f; \
+ done
+ for f in $(PROCESSEDEXAMPLEFILES); do \
+ rm -f $(exampledir)/$$f; \
+ $(INSTALL_DATA) $$f $(docdir)/$$f; \
+ done
+
+uninstall_sub:
+ -for f in $(NORMALFILES); do \
+ rm -f $(tmacdir)/$$f; \
+ done
+ -for f in $(HTMLDOCFILES); do \
+ rm -f $(htmldocdir)/$$f; \
+ done
+ -rmdir $(htmldocdir)/momdoc
+ -for f in $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES); do \
+ rm -f $(docdir)/$$f; \
+ done
diff --git a/contrib/groff/contrib/mom/NEWS b/contrib/groff/contrib/mom/NEWS
new file mode 100644
index 0000000..0572603
--- /dev/null
+++ b/contrib/groff/contrib/mom/NEWS
@@ -0,0 +1,183 @@
+Release 1.1.4
+-------------
+
+***SIGNIFICANT CHANGE***
+.IX is now deprecated, although it will continue to work as before.
+The new form is .IQ (Indent Quit). Groff will emit a message advising
+users to update their docs.
+
+***NEW***
+Four new inlines to deal with horizontal and vertical movements:
+
+ o \*[FWD n]
+ o \*[BCK n]
+ o \*[UP n]
+ o \*[DOWN n]
+
+All four require a unit of measure after n. These inlines are similar
+to the older \*[FPn], \*[BPn], \*[ALDn] and \*[RLDn], however they're
+not restricted to points, and any value can be entered for n (the older
+forms -- which still work -- were restricted to 1 - 36).
+
+***CHANGED***
+Inline kerning can now be accomplished with \*[BU n] and \*[FU n], where
+n, after the space, is the desired number of kern units. The older
+forms \*[BUn] and \*[FUn] still work, up to 36 units.
+
+------------------------------------------------------------------------
+
+Release 1.1.3c
+--------------
+
+***NEW***
+A new macro -- ENDNOTES_HDRFTR_CENTER -- added so that mom's default
+behaviour of not printing the header center string when DOCTYPE is
+CHAPTER can be disabled (i.e. she will print the center string). The
+macro is user-called with ENDNOTES_HEADER_CENTER or
+ENDNOTES_FOOTER_CENTER.
+
+***FIXES***
+PAD now works as advertised when fill mode is on.
+
+ENDNOTES no longer disables printing of footnotes on last page of
+document body.
+
+Release 1.1.3
+-------------
+
+***SIGNIFICANT CHANGE -- PLEASE TAKE NOTE***
+As of 1.1.3, groff must be >= 1.18.
+
+***NEW***
+Added endnotes functionality to mom, along with a slew of macros to
+control how mom prints endnotes pages. See the html documentation.
+
+***NEW***
+Added inline \*[RULE], which draws a rule to the full measure of the
+current line length ( to be used in place of \h'\n(.lu' ). Weight of the
+rule is dependent on the point size of type when \#[RULE] is called.
+
+***FIXES***
+PAD -- works more intuitively now when the pad string contains inline
+escapes for font, point size, etc.
+
+UNDERLINE -- fixed character translations of digraphs so they get
+underlined properly. Also fixed a bug that was causing some footnotes
+to get underlined when UNDERLINE was on in the body of the document.
+
+***UPDATES***
+Html documentation
+elvis_syn
+
+Release 1.1.2a
+--------------
+
+***SIGNIFICANT CHANGE -- PLEASE TAKE NOTE***
+In order to help mom toward full groffship, the macro .PS has been
+renamed to .PT_SIZE, and the alias .TS (for .TAB_SET) has been removed.
+.PS and .TS are keywords used by pic and tbl respectively, and the mom
+macros of the same name were in conflict.
+
+Release 1.1.2
+-------------
+
+***IT'S OFFICIAL!***
+mom is now an official part of the groff. New releases will be
+incorporated into the groff package. I'll still be posting each new
+release on the mom homepage, so there's no need to download all of the
+most recent version of groff just to get a newer mom. :)
+
+***CHANGES***
+Fixed default footer separator rule adjustment so that it's closer to
+the advertised "4 points above the tallest ascender in the footer."
+
+Added more stuff to the elvis_syn file. Still wouldn't mind someone
+contributing some vim/emacs syntax highlighting.
+
+Added .cflags 4 /\(em to om.tmac. By default, mom now obligingly
+breaks after / and \(en.
+
+***NEW***
+Macro(s): HEADER_RECTO
+ HEADER_VERSO
+With these macros, users can now define single-string recto/verso
+headers/footers. HEADER_RECTO (or FOOTER_RECTO) can be used to create
+a one-part header/footer (instead of mom's default three-parters) that
+appears on every page if RECTO_VERSO is OFF or, if RECTO_VERSO is on, if
+no HEADER_VERSO (or FOOTER_VERSO) has been defined. If a HEADER_VERSO
+(or FOOTER_VERSO) is defined and RECTO_VERSO is on, _RECTO prints on
+even pages and _VERSO on odd pages.
+
+Added macro DRAFT_WITH_PAGENUMBER so user can have draft/revision
+info attached to the pagenumber in COPYSTYLE DRAFT, instead of having
+it HEADER center. Always having it HEADER center was creating problems
+with long doc titles, esp. with PRINTSTYLE TYPEWRITE (which is when
+COPYSTYLE DRAFT is most likely to be used).
+
+***FIXES***
+No more "can't break line" warnings in DOCTYPE LETTER.
+
+If no REVISION number is given, Rev. 0 no longer appears HEADER_CENTER
+in COPYSTYLE DRAFT
+
+PAGENUM_STYLE now works as advertised.
+
+Release 1.1.1
+-------------
+
+***CHANGES***
+Main macro file renamed to om.tmac, in keeping with current groff
+policy.
+
+Now okay to use groff mailing list for mom-related posts
+
+***NEW***
+Toggle macro -- BR_AT_LINE_KERN. When on, automatically deposits
+a break whenever .RW or .EW are invoked. Very useful when kerning
+whole lines of rag copy.
+
+***NEW***
+Toggle macro -- PAGENUM_ON_FIRST_PAGE. Normally, when FOOTERS are
+being used instead of HEADERS, mom doesn't print the page number at
+the top of the first page of a doc, or the first page of collated docs.
+PAGENUM_ON_FIRST_PAGE allows user to get mom to put the page number on
+"first" pages if that's desired.
+
+***NEW***
+Macro -- BREAK_QUOTE -- to deal with problem of footnoted quotes and
+blockquotes that cross a page or column.
+
+***NEW***
+New argument to AUTOLEAD -- FACTOR. With FACTOR, you can, if you
+wish, enter a factor by which AUTOLEAD multiplies the point size when
+calculating lead automatically.
+
+Improvements
+------------
+
+PAPER now has a much larger selection of common paper sizes.
+
+\*[ALD], \*[RLD], \*[FP] and \*[BP] now accept increments of quarter
+points (expressed as decimal fractions). \*[RLD1.75], for example,
+reverses 1-3/4 points up on the line.
+
+HEADER_SIZE now available to PRINTSTYLE TYPEWRITE. This was necessary
+to deal with the problem of excessively long HEADER_LEFT, _CENTER or
+_RIGHT strings.
+
+Fixes
+-----
+
+T_MARGIN -- can be set before or after LS or AUTOLEAD
+SS -- remains constant regardless of WS
+WS -- no longer affects SS
+TI -- now works as expected even when called while another indent
+ type is in effect
+COLLATE -- small fixes
+
+Broken .RW and .EW fixed.
+
+String tabs now behave properly when set from within tabs.
+
+UNDERLINE_QUOTES (for PRINTSTYLE TYPEWRITE) are now, in fact, on by
+default as the docs state.
diff --git a/contrib/groff/contrib/mom/TODO b/contrib/groff/contrib/mom/TODO
new file mode 100644
index 0000000..c5f1541
--- /dev/null
+++ b/contrib/groff/contrib/mom/TODO
@@ -0,0 +1,21 @@
+CONTROL MACROS -- _INDENT
+--------------
+Let user be able to enter decimal fractions as the argument to _INDENT
+control macros, or, instead, let user be able to enter absolute
+values with a unit of measure in addition to current behaviour,
+which is relative.
+
+LISTS
+-----
+Possbility of indented, nested lists, html-style. Options for numbered,
+alpha-ed, bulleted, dashed. Again, not sure how useful these would be
+for mom's target users. As things stand now, it's easy enough to
+set up lists with string tabs or hanging indents.
+
+BIBLIOGRAPHY
+------------
+Thinking about macros to *assist* in user-written bibliographies (i.e.
+not biblios that get generated automatically at the ends of docs). Style
+considerations are a nightmare, though.
+
+------------------------------------------------------------------------
diff --git a/contrib/groff/contrib/mom/copyright b/contrib/groff/contrib/mom/copyright
new file mode 100644
index 0000000..ea18d01
--- /dev/null
+++ b/contrib/groff/contrib/mom/copyright
@@ -0,0 +1,24 @@
+AUTHOR
+------
+Peter Schaffter (df191@ncf.ca)
+15, chemin Brunette
+RR 2, CP 406
+Ste-Cécile-de-Masham (Québec)
+CANADA
+
+========================================================================
+
+The groff macro file om.tmac and the html documentation pertaining
+to it are copyright (c) 2002 Peter Schaffter.
+
+om.tmac is issued under the GNU General Public License, a full copy of
+which can be had at
+
+ http://www.gnu.org/licenses/gpl.html
+
+The html documentation pertaining to om.tmac is issued under the GNU
+Free Documentation License, a full copy of which can be had at
+
+ http://www.gnu.org/copyleft/fdl.html
+
+========================================================================
diff --git a/contrib/groff/contrib/mom/examples/README.mom b/contrib/groff/contrib/mom/examples/README.mom
new file mode 100644
index 0000000..fba1e01
--- /dev/null
+++ b/contrib/groff/contrib/mom/examples/README.mom
@@ -0,0 +1,56 @@
+The files in this directory show mom in action. I haven't included
+PostScript output from the files because I want to keep the mom
+archive as lean as possible. In order to see the PostScript output of
+these files, process them with groff, sending the output either to a
+separate file for previewing with gv (ghostview) or to your printer.
+I don't recommend previewing with gxditview because it doesn't render
+some of mom's effects properly.
+
+All the files are set up for 8.5ix11i paper.
+
+macros.mom
+----------
+
+This file demonstrates the use of typesetting tabs, string tabs,
+line padding, multi-columns and various indent styles, as well as
+some of the refinements and fine-tuning available via macros and
+inline escapes.
+
+Because the file also demonstrates a "cutaround" using a small picture
+(of Tux), the PostScript file has been included in the directory.
+
+typeset.mom
+-----------
+
+This file contains samples of three of the document styles available
+with the document processing macros, as well as demonstrating the
+use of COLLATE. The relatively rare BREAK_QUOTE macro is also used.
+The PRINTSTYLE of this file is TYPESET, letting you get a look at mom's
+default behaviour when she typesets a document. The last sample,
+set in 2 columns, shows a few of the ways in which you can modify
+mom's behaviour.
+
+typewrite.mom
+-------------
+
+Using the first two samples from typeset.mom, this file shows what
+"typewritten, double-spaced" documents (PRINTSTYLE TYPEWRITE) look
+like.
+
+letter.mom
+----------
+
+This is just the tutorial example from the momdocs, ready for
+previewing.
+
+elvis_syntax
+------------
+
+For those who use the vi clone, elvis, you can paste this file into
+your elvis.syn file. Provided your mom documents have the extension
+.mom, they'll come out with colorized syntax highlighting. The rules
+in elvis_syntax aren't exhaustive, but they go a LONG way to making mom
+files more readable.
+
+I'll be very happy if someone sends me syntax highlighting rules for vim
+and emacs. :)
diff --git a/contrib/groff/contrib/mom/examples/elvis_syntax b/contrib/groff/contrib/mom/examples/elvis_syntax
new file mode 100644
index 0000000..14f7049
--- /dev/null
+++ b/contrib/groff/contrib/mom/examples/elvis_syntax
@@ -0,0 +1,130 @@
+#Mom
+language mom
+extension .mom
+startword .\
+inword _(
+keyword .ALD .ALIAS .ALWAYS_FULLSPACE_QUOTES .ATTRIBUTE_STRING
+keyword .AUTHOR .AUTHOR_FAMILY .AUTHOR_FONT .AUTHOR_SIZE .AUTOLEAD
+keyword .BLOCKQUOTE .BLOCKQUOTE_FAMILY .BLOCKQUOTE_FONT .BLOCKQUOTE_QUAD .BLOCKQUOTE_SIZE
+keyword .B_MARGIN .BR .BR_AT_LINE_KERN .BREAK_QUOTE
+keyword .CAPS .CENTER .CENTRE .CHAPTER
+keyword .CHAPTER_STRING .CITATION .CITE .CLOSING
+keyword .COLLATE .COL_BREAK .COL_BREAK .COL_NEXT .COLUMNS
+keyword .COMMENT .CONDENSE .COPYSTYLE
+keyword .DATE .DEFAULTS
+keyword .DOC_FAM .DOC_FAMILY .DOCHEADER
+keyword .DOCHEADER_ADVANCE .DOCHEADER_LEAD
+keyword .DOC_LEAD .DOC_LEAD_ADJUST .DOC_LEFT_MARGIN .DOC_LINE_LENGTH
+keyword .DOC_LLENGTH .DOC_L_LENGTH .DOC_L_MARGIN .DOC_LMARGIN
+keyword .DOC_LS .DOC_PS .DOC_PT_SIZE .DOC_QUAD
+keyword .DOC_RIGHT_MARGIN .DOC_R_MARGIN .DOC_RMARGIN
+keyword .DOCTYPE .DOCTYPE_FAMILY .DOCTYPE_FONT .DOCTYPE_SIZE
+keyword .DRAFT .DRAFT_STRING .DRAFT_WITH_PAGENUMBER
+keyword .DROPCAP .DROPCAP_ADJUST .DROPCAP_FAMILY .DROPCAP_FONT .DROPCAP_GUTTER .DROPCAP_OFF
+keyword .EL
+keyword .ENDNOTE .ENDNOTES
+keyword .ENDNOTE_FAMILY .ENDNOTE_FONT .ENDNOTE_PT_SIZE .ENDNOTE_LEAD .ENDNOTE_QUAD
+keyword .ENDNOTE_STRING .ENDNOTE_STRING_FAMILY .ENDNOTE_STRING_FONT .ENDNOTE_STRING_SIZE
+keyword .ENDNOTE_STRING_QUAD .ENDNOTE_STRING_UNDERSCORE
+keyword .ENDNOTE_TITLE .ENDNOTE_TITLE_FAMILY .ENDNOTE_TITLE_FONT .ENDNOTE_TITLE_SIZE
+keyword .ENDNOTE_TITLE_QUAD .ENDNOTE_TITLE_UNDERSCORE
+keyword .ENDNOTE_NUMBER_FAMILY .ENDNOTE_NUMBER_FONT .ENDNOTE_NUMBER_SIZE
+keyword .ENDNOTE_NUMBERS_ALIGN_RIGHT .ENDNOTE_NUMBERS_ALIGN_LEFT
+keyword .ENDNOTE_PARA_INDENT .ENDNOTE_PARA_SPACE .ENDNOTES_FOOTER_CENTER .ENDNOTES_HEADER_CENTER
+keyword .EPIGRAPH .EPIGRAPH_AUTOLEAD .EPIGRAPH_FAMILY .EPIGRAPH_FONT
+keyword .EPIGRAPH_INDENT .EPIGRAPH_QUAD .EPIGRAPH_SIZE
+keyword .EW .EXTEND
+keyword .FAM .FAMILY
+keyword .FINIS .FINIS_STRING
+keyword .FOOTER .FOOTER_CENTER .FOOTER_CENTER_CAPS .FOOTER_CENTER_FAM .FOOTER_CENTER_FAMILY
+keyword .FOOTER_CENTER_FONT .FOOTER_CENTER_FT .FOOTER_CENTER_PS .FOOTER_CENTER_SIZE
+keyword .FOOTER_CENTRE .FOOTER_CENTRE_CAPS .FOOTER_CENTRE_FAM .FOOTER_CENTRE_FAMILY
+keyword .FOOTER_CENTRE_FT .FOOTER_CENTRE_PS .FOOTER_CENTRE_SIZE .FOOTER_FAM
+keyword .FOOTER_FAMILY .FOOTER_GAP .FOOTER_LEFT .FOOTER_LEFT_CAPS .FOOTER_LEFT_FAM
+keyword .FOOTER_LEFT_FAMILY .FOOTER_LEFT_FONT .FOOTER_LEFT_FT .FOOTER_LEFT_PS
+keyword .FOOTER_LEFT_SIZE .FOOTER_MARGIN .FOOTER_ON_FIRST_PAGE .FOOTER_PLAIN
+keyword .FOOTER_RECTO .FOOTER_RIGHT .FOOTER_RIGHT_CAPS .FOOTER_RIGHT_FAM .FOOTER_RIGHT_FAMILY
+keyword .FOOTER_RIGHT_FONT .FOOTER_RIGHT_FT .FOOTER_RIGHT_PS .FOOTER_RIGHT_SIZE
+keyword .FOOTER_RULE .FOOTER_RULE_GAP .FOOTERS .FOOTER_SIZE .FOOTER_VERSO
+keyword .FOOTNOTE .FOOTNOTE_AUTOLEAD .FOOTNOTE_FAMILY .FOOTNOTE_FONT .FOOTNOTE_MARKERS
+keyword .FOOTNOTE_MARKER_STYLE .FOOTNOTE_QUAD .FOOTNOTE_RULE .FOOTNOTE_RULE_ADJ
+keyword .FOOTNOTE_RULE_LENGTH .FOOTNOTE_SIZE
+keyword .FROM .FT
+keyword .GREETING
+keyword .HDRFTR_CENTER .HDRFTR_CENTER .HDRFTR_CENTER_CAPS .HDRFTR_CENTER_FAMILY
+keyword .HDRFTR_CENTER_FONT .HDRFTR_CENTER_SIZE .HDRFTR_FAMILY .HDRFTR_GAP
+keyword .HDRFTR_LEFT .HDRFTR_LEFT .HDRFTR_LEFT_CAPS .HDRFTR_LEFT_FAMILY
+keyword .HDRFTR_LEFT_FONT .HDRFTR_LEFT_SIZE .HDRFTR_MARGIN .HDRFTR_PLAIN
+keyword .HDRFTR_RIGHT .HDRFTR_RIGHT_CAPS .HDRFTR_RIGHT_FAMILY .HDRFTR_RIGHT_FONT
+keyword .HDRFTR_RIGHT_SIZE .HDRFTR_RULE .HDRFTR_RULE_GAP .HDRFTR_RULE_INTERNAL
+keyword .HDRFTR_RULE_INTERNAL .HDRFTR_SIZE
+keyword .HEAD .HEAD_CAPS .HEADER .HEADER_CENTER .HEADER_CENTER_CAPS
+keyword .HEADER_CENTER_FAM .HEADER_CENTER_FAMILY .HEADER_CENTER_FONT
+keyword .HEADER_CENTER_FT .HEADER_CENTER_PS .HEADER_CENTER_SIZE .HEADER_CENTRE
+keyword .HEADER_CENTRE_CAPS .HEADER_CENTRE_FAM .HEADER_CENTRE_FAMILY
+keyword .HEADER_CENTRE_FONT .HEADER_CENTRE_FT .HEADER_CENTRE_PS .HEADER_CENTRE_SIZE
+keyword .HEADER_FAM .HEADER_FAMILY .HEADER_GAP
+keyword .HEADER_LEFT .HEADER_LEFT_CAPS .HEADER_LEFT_FAM .HEADER_LEFT_FAMILY
+keyword .HEADER_LEFT_FONT .HEADER_LEFT_FT .HEADER_LEFT_PS .HEADER_LEFT_SIZE
+keyword .HEADER_MARGIN .HEADER_PLAIN
+keyword .HEADER_RECTO .HEADER_RIGHT .HEADER_RIGHT_CAPS .HEADER_RIGHT_FAM .HEADER_RIGHT_FAMILY
+keyword .HEADER_RIGHT_FONT .HEADER_RIGHT_FT .HEADER_RIGHT_PS .HEADER_RIGHT_SIZE .HEADER_VERSO
+keyword .HEADER_RULE .HEADER_RULE_GAP .HEADERS .HEADER_SIZE
+keyword .HEAD_FAMILY .HEAD_FONT .HEAD_QUAD .HEAD_SIZE .HEAD_SPACE .HEAD_UNDERLINE
+keyword .HI .HY .HYPHENATE .HYPHENATION .HY_SET
+keyword .IB .IBX .IBQ .IH .IL .ILX .ILQ
+keyword .IQ .IR .IRX .IRQ .IT .IX
+keyword .INDENT_FIRST_PARAS .ITALIC_MEANS_ITALIC
+keyword .JUSTIFY
+keyword .KERN
+keyword .LEADER_CHARACTER .LEFT .LIG .LIGATURES .LINEBREAK .LL .LL .L_MARGIN .LS
+keyword .MCO .MCR .MCX
+keyword .NEWPAGE .NEW_PAGE .NO_SUITE .NUMBER_HEADS .NUMBER_PARAHEADS .NUMBER_SUBHEADS
+keyword .PAD .PADMARKER .PAD_STRING .PAGE .PAGE_LENGTH .PAGELENGTH .PAGEWIDTH
+keyword .PAGENUM .PAGENUM_FAMILY .PAGENUM_FONT .PAGENUM_HYPHENS
+keyword .PAGENUM_ON_FIRST_PAGE .PAGENUM_POS .PAGENUM_SIZE .PAGENUM_STYLE
+keyword .PAGINATE .PAGINATION .PAPER
+keyword .PARAHEAD .PARAHEAD_FAMILY .PARAHEAD_FONT .PARAHEAD_INDENT .PARAHEAD_SIZE
+keyword .PARA_INDENT .PARA_SPACE
+keyword .PP .PP_FONT .PP_FT .PT_SIZE .PSPIC
+keyword .PRINTSTYLE
+keyword .QUAD
+keyword .QUOTE .QUOTE_FAMILY .QUOTE_FONT .QUOTE_INDENT .QUOTE_SIZE
+keyword .RECTO_VERSO
+keyword .RESET_FOOTNOTE_NUMBER .RESET_HEAD_NUMBER .RESET_PARAHEAD_NUMBER
+keyword .RESET_SUBHEAD_NUMBER
+keyword .REVISION .REVISION_STRING .RIGHT .RLD .R_MARGIN .RW
+keyword .SETBOLDER .SETSLANT .SILENT .SLANT_MEANS_SLANT .SMARTQUOTES .SP .SPACE
+keyword .SPREAD .SS .ST .START .STRING .SUBHEAD .SUBHEAD_FAMILY .SUBHEAD_FONT .SUBHEAD_SIZE
+keyword .SUBTITLE .SUBTITLE_FAMILY .SUBTITLE_FONT .SUBTITLE_SIZE
+keyword .SWITCH_FOOTERS .SWITCH_HDRFTR .SWITCH_HEADERS
+keyword .TAB_SET .TAB .TABSET .TB .TI
+keyword .TITLE .TITLE_FAMILY .TITLE_FONT .TITLE_SIZE .T_MARGIN
+keyword .TN .TO .TQ .TRAP .TYPESIZE
+keyword .UNDERLINE .UNDERLINE_ITALIC .UNDERLINE_QUOTES .UNDERLINE_SLANT
+keyword .UNDERSCORE .UNDERSCORE_2 .UNDERSCORE2
+keyword .WS
+font fixed DEFAULT CHAPTER NAMED LETTER
+font fixed TYPESET TYPEWRITE
+font fixed FINAL DRAFT
+font fixed BLOCK QUAD
+font fixed LEFT RIGHT CENTER CENTRE JUSTIFY TOP BOTTOM
+font fixed OFF QUIT END EXIT DONE NO
+font fixed PAGE NUMBER STAR
+font fixed COND EXT
+font fixed LETTER LEGAL EXECUTIVE LEDGER TABLOID QUARTO FOLIO
+font fixed 10x14 A3 A4 A5 B4 B5
+font fixed SINGLESPACE
+font fixed FACTOR
+font underlined \/ \/. \/? \/! \/, \/; \/:
+font underlined \, \,. \,? \,! \,, \,; \,:
+font underlined \\ \~ \% \0 \: \( \| \^ \& \%
+font underlined \b \c \C \d \D \e \f \f( \h \l \L \p \r \s \s+ \s- \S \u \v \w
+font fixed \(bu \(co \(ct \(de \(dg \(di \(em \(en \(mu \(pl \(rg \(sc \(sq
+font fixed \(14 \(12 \(34 \(+-
+font fixed # ' ^
+font italic "
+character \]
+comment \#
+comment \"
+comment \!
diff --git a/contrib/groff/contrib/mom/examples/letter.mom b/contrib/groff/contrib/mom/examples/letter.mom
new file mode 100644
index 0000000..8833916
--- /dev/null
+++ b/contrib/groff/contrib/mom/examples/letter.mom
@@ -0,0 +1,34 @@
+.AUTHOR "Yannick P. Guique"
+.DOCTYPE LETTER
+.PRINTSTYLE TYPESET
+.START
+.DATE
+August 25, 2004
+.TO
+GUILLAUME BARRIÈRES
+Minidoux Corporation
+5000 Pannes Drive
+Redmond, Virginia
+USA
+.FROM
+Y.P. GUIQUE
+022 Umask Road
+St-Sauveur-en-dehors-de-la-mappe, Québec
+CANADA
+.GREETING
+Dear Mr. Barrières,
+.PP
+It has come to my attention that you have been lobbying the
+US government to prohibit the use of open source software by
+endeavouring to outlaw so-called "warranty free" applications.
+.PP
+I feel it is my duty to inform you that the success of your
+operating system with its embedded web browser relies heavily
+on open source programs and protocols, most notably TCP/IP.
+.PP
+Therefore, in the interests of your corporation's fiscal health,
+I strongly advise that you withdraw support for any US
+legislation that would cripple or render illegal open source
+development.
+.CLOSING
+Sincerely,
diff --git a/contrib/groff/contrib/mom/examples/macros.mom b/contrib/groff/contrib/mom/examples/macros.mom
new file mode 100644
index 0000000..a3976f3
--- /dev/null
+++ b/contrib/groff/contrib/mom/examples/macros.mom
@@ -0,0 +1,668 @@
+\# Basic page setup
+\#
+.PAGE 8.5i 11i \" Printer sheet size
+.L_MARGIN 1i \" Left margin 1 inch
+.R_MARGIN 1i \" Right margin 1 inch (calculates the line length)
+\#
+\# Refinements
+\#
+.KERN \" Automatic pairwise kerning
+.SS 0 \" No extra space between sentences
+.HY \" Hyphenate
+.LIGATURES \" Automatic ligature generation
+.SMARTQUOTES \" Enable smartquotes
+\#
+\# Basic type parameters
+\#
+.FAM T \" Times Roman family
+.FT B \" Bold font
+.PT_SIZE 12 \" Point size
+.LS 14 \" Leading (line spacing)
+.LEFT \" Set lines flush left, nofill mode
+\#
+\#
+.ALD |1i-1v \" Advance 1 inch from top of paper to first baseline
+Example 1\*[BU 2]:
+.ALD .25v \" Advance an extra 1/4 linespace
+.UNDERSCORE 3.75p "T\*[BU 4]asting notes using padding, string tabs \
+and multi-columns"
+.SP \" Add an extra line space
+\#
+\#
+.FAM H \" Helvetica family
+.PT_SIZE 10
+.LS 11 \" New leading
+\#
+\# The following uses a combination of padding, string tabs, and the FWD escape
+\# to set up five tabs with 12-point (1-pica) gutters over the full line length.
+\#
+.SILENT \" Don't print the next line
+.PAD "\*[ST1]VIN#\*[ST1X]\*[FWD 12p]\*[ST2]ROBE#\*[ST2X]\*[FWD 12p]\*[ST3]NEZ#\*[ST3X]\*[FWD 12p]\*[ST4]BOUCHE#\*[ST4X]\*[FWD 12p]\*[ST5]COMMENTAIRES\*[ST5X]"
+.SILENT OFF \" Resume normal printing of text
+\#
+\# Now that the string tabs have been marked off, we "set" them.
+\#
+.ST 1 L \" First string tab flush left, nofill mode (no need for .BR's between input lines)
+.ST 2 L QUAD \" Remaining tabs are flush left/rag right, fill mode
+.ST 3 L QUAD
+.ST 4 L QUAD
+.ST 5 L QUAD
+\#
+\#
+.TAB 1 \" Call first tab
+.UNDERSCORE "VIN"
+.TN \" Move to next tab and stay on the same baseline
+.UNDERSCORE "ROBE"
+.TN \" Ibid
+.UNDERSCORE "NEZ"
+.TN \" Ibid
+.UNDERSCORE "BOUCHE"
+.TN \" Ibid
+.UNDERSCORE "COMMENTAIRES"
+.TQ \" Quit tabs
+\#
+\#
+.ALD 6p \" Advance an extra 6 points
+.FT R \" Change font to roman (medium)
+.MCO \" Turn multi-column mode on
+\#
+\#
+.TAB 1 \" Notice that this tab gets set line-for-line
+\*[IT]Peelee Island \" Set italic
+\*[PREV]Gewürztraminer \" Revert to former font (roman)
+2000
+(Canada)
+.MCR \" Return to top of column
+.TAB 2 \" Call tab 2; in multi-column mode, don't use .TN
+Jaune pâle.
+.MCR
+.TB 3 \" Notice that from here on, we use the alias TB instead of TAB
+Frais, fruité, ci\%tronné, arômes fortes de lichee et de fruits
+tropicaux.
+.MCR
+.TB 4
+Doux, fruité, bien équilibré avec une bonne acidité.
+.MCR
+.TB 5
+Bon apéro. Servir avec des plats
+.RW .1
+indiens ou \%chinois.
+.RW 0
+.BR
+Excellent rapport qualité/prix.
+.MCX 8p \" Multi-column mode off; advance an extra 8 points
+.MCO \" Re-invoke multi-columns for next wine description
+.TB 1
+\*[IT]Carau Pujol
+\*[ROM]Tannat
+1995
+(Uraguay)
+.MCR
+.TB 2
+Rubis foncé, vio\%lacée, presque opaque.
+.MCR
+.TB 3
+Belles arômes de fruits foncés (prunes, cerises noires, cassis).
+Odeurs tertiares de cuir, cèdre, violets, eucalyptus, avec une trace
+exotique de Band-Aid*\*[BU 12].
+\#
+\# The \*[BU 12], above, pulls the period back so that it falls
+\# underneath the asterisk. \*[BP<#>] could have been used instead
+\# if you prefer to use points rather than kern units.
+\#
+.MCR
+.TB 4
+Très rond, tannins mûres et veloutés, avec un long finis fruité et
+doucement alcoolique.
+.MCR
+.TB 5
+Superbe\|! Une aubaine à ne pas manquer. Prêt à boire maintenant.
+.MCX 1v \" Multi-columns off; advance an extra linespace
+\#
+\# Now, an example of a hanging indent. This is excessively fussy
+\# from a typographic standpoint in that it hangs the asterisk outside
+\# the current left margin so that the text following it lines up with
+\# with the text in the tasting notes. Notice that in order to use a
+\# hanging indent, you must first set a left indent.
+\#
+.FT I \" Change font to italic
+.PT_SIZE -.5 \" Reduce point size by 1/2 point
+.LS -.5 \" Reduce leading by 1/2 point
+.JUSTIFY \" Set text justified
+\#
+\# Now, move the left margin back by the width of an asterisk plus 2 points...
+\#
+.L_MARGIN -(\w'*'+2p)
+\#
+\# ...and set a left indent equal to the width of an asterisk plus 2 points
+\#
+.IL \w'*'+2p
+\#
+\# Now, set the hanging indent equal to the left indent, effectively pulling
+\# the first line of the following text back to the new left margin.
+\# Subsequent output lines will be indented by the .IL amount.
+\# Notice that when using the \w inline escape, there's no need to append
+\# a unit of measure to it.
+\#
+.HI \w'*'+2p
+*\*[FWD 1p]The term "Band-Aid" means the slightly sweet, vaguely chemical
+smell associated with medical-grade plastics. It is often found in
+wines from terroirs in South America. Provided a wine has a sufficient
+concentration of fruit
+.RW .04 \" Kern the whole next line slightly, so "lipstick" doesn't hyphenate.
+aromas and complex tertiary characteristics, Band-Aid is a Good Thing.
+Otherwise, it smells like cheap lipstick.
+.RW 0 \" Reset kerning to 0
+\#
+\# Notice, above, that although the values for IL and HI are the width
+\# of an asterisk plus 2 points, when setting the first line of text
+\# (the one with the asterisk at the beginning), we put only 1 point of
+\# space after the *. This is to compensate for the fact that in the
+\# italic font, the letter T doesn't align visually with the rest of
+\# the text. As already noted, this is an extremely fussy example. :)
+\#
+\#
+\#
+.IQ CLEAR \" Cancel and clear stored indent values
+.L_MARGIN 1i \" Reset left margin to its original value.
+\#
+\#
+.ALD 2P \" Add 2-picas extra space before next example
+.FAM T
+.FT B
+.PT_SIZE 12
+.LS 14
+Example 2:
+.ALD .25v
+\#
+.COMMENT \" COMMENT lets you enter comments without using \# or \"
+In the next line, because the string to be underscored must be
+enclosed by double-quotes, you can't use the double-quote character
+itself around the word "Massaging". We circumvent this by using the
+groff inline escapes \(lq and \(rq (leftquote and rightquote).
+.COMMENT OFF \" Remember to turn COMMENT off!
+\#
+.UNDERSCORE 3.75p "\(lqMassaging\(rq \*[BCK 1p]a passage of rag right text"
+.SP \" Add an extra linespace
+\#
+\#
+.PT_SIZE 12.5
+.LS 14
+.PT_SIZE -1 \" Reduce point size by 1 point
+Passage using groff defaults
+.ALD .5v \" Add an extra 1/2 line space
+.PT_SIZE +1 \" Restore point size
+.QUAD LEFT \" Set quad left, fill mode
+.IB 3P \" Indent 3 picas from both the left and right margins
+.FT R
+The thousand injuries of Fortunato I had borne as I best could;
+but when he ventured upon insult, I vowed revenge. You, who so well
+know the nature of my soul, will not suppose, however, that I gave
+utterance to a threat. \*[IT]At length\*[PREV] I would be
+avenged; this was a point definitively settled\(embut the very
+definitiveness with which it was resolved, precluded the idea of
+risk. I must not only punish, but punish with impunity. A
+wrong is unredressed when retribution overtakes its redresser.
+It is equally unredressed when the avenger fails to make himself
+felt as such to him who has done the wrong.
+.ALD 6p
+\#
+\# The next line is set quad right, nofill mode, 1/2 point smaller
+\# than the preceding text (using the \*S[...] inline escape.
+\#
+.RIGHT
+\*S[-.5]\(emEdgar Allen Poe, \*[IT]The Cask of Amontillado\*[PREV]\*S[+.5]
+.SP \" Extra linespace
+.IBQ \" Disable "indent both"
+\#
+\# The passage above, while acceptable in a longer document, exhibits a
+\# few typographic flaws. The shape of the right margin rag exhibits
+\# a decidedly "rounded" appearance. The word "I" stands alone at the
+\# end of the third line. The space between the 1st and 2nd sentences
+\# ("...revenge. You...") is too large, owing to the letter "Y" that
+\# begins the 2nd sentence. The spacing between "A wrong..." (line 6)
+\# is equally too large because of the way "A" and "w" fit together.
+\# The em-dash before Edgar isn't vertically centered with the letter "E".
+\# And so on. The most important correction below is fixing the rag
+\# so that longer and shorter lines alternate. This is accomplished by
+\# manually breaking lines and then slightly lengthening and shortening
+\# them until a pleasing rag is achieved. The remainder of the little
+\# flaws are fixed with inline escapes.
+\#
+.FT B
+.PT_SIZE -1
+.LEFT
+The same passage, \*[BU 4]"massaged"
+.ALD .5v
+.FT R
+.PT_SIZE +1
+.QUAD LEFT
+.HY OFF \" Turn automatic hyphenation off
+.BR_AT_LINE_KERN \" Automatically insert a line break (.BR) with each invocation of .RW and .EW
+.WS +1 \" Increase word space slightly
+.IB \" Turn "indent both" back on; values are the same as before
+\#
+\#
+The thousand injuries of Fortunato I had borne as I best could; but
+when he ventured upon insult, I \*[BU 2]vowed revenge. \*[BU 4]Y\*[BU 6]ou,
+\*[BU 4]who so \*[BU 2]well know the nature
+.EW .2
+of my soul, \*[BU 2]will not suppose, however, that I gave utterance to
+a threat. \*[IT]At
+.EW .2
+length\*[PREV] I would be avenged; this was a point definitively
+settled\(embut the
+.EW .2
+v\*[BU 1]ery definitiveness with which it was resolved, precluded the idea
+of risk.
+.EW 0
+I must not only punish, but punish with impunity. A \*[BCK 1p]wrong is
+unredressed
+.EW .1
+when retribution overtakes its redresser. It is equally unredressed
+when the
+.RW .1
+avenger fails to make himself felt as such to him \*[BU 2]who has done
+the wrong.
+.RW 0
+.WS +0 \" Restore normal wordspacing
+.ALD 6p
+.PT_SIZE -.5
+.RIGHT
+\*[UP 1.5p]\(em\*[DOWN 1.5p]\*[BCK 1p]Edgar \*[BCK 1p]Allen Poe, \*[IT]The Cask of Amontillado\*[PREV]
+.IQ CLEAR \" Cancel and clear stored values of all indents
+\#
+\#
+.NEWPAGE \" Start a new page
+.T_MARGIN 1i \" Set top margin to 1i (approx. equivalent to .ALD |1i-1v above
+\#
+\#
+.FAM T
+.FT B
+.PT_SIZE 12
+.LS 14
+.LEFT
+Example 3:
+.ALD .25v
+.UNDERSCORE 3.75p "A \*[BU 2]recipe for enumerated lists using indents"
+.SP \" Add an extra line space
+.FAM N \" New Century Schoolbook family
+.FT R
+.PT_SIZE 11
+.LS 13
+.HY \" Turn hyphenation back on
+.JUSTIFY \" Justify text
+This example demonstrates the use of left and hanging indents for
+simple enumerated lists. Nested lists are possible, as the example
+shows; however, the more complex the nesting, the wiser it becomes
+to use (string) tabs, as seen in Example 4.
+\#
+\#
+.JUSTIFY \" Justify text
+.IL \w'\0.\0' \" Establish a left indent equal to the width of 2 figure spaces plus a period.
+.HI \w'\0.\0' \" Establish a hanging indent equal to the size of the left indent.
+.ALD 6p
+\#
+\#
+1.\0This is the first item in the list. N\*[BU 2]otice how the first line
+"hangs" back from the remaining text, which is otherwise
+indented by the width of by two figure-spaces (digit-width
+spaces) and a period.
+.BR
+.HI \" Notice that HI doesn't require an argument once the value's been set
+.ALD 6p
+2.\0This is the second item in the list. As with the above item,
+notice the use of the \*[BU 8]\\0 escape sequence in the input text. It's
+there to ensure that the space after the number/period combination
+always remains the same (i.e. doesn't stretch when the line is
+justified). That way, the text of each item always lines up perfectly.
+\#
+\#
+.COMMENT
+Now we're going to set a bullet-point list, indented from the text
+above by 1 pica. IL arguments are always added to whatever value
+is in already effect for IL, hence all we have to do is tell mom to
+indent (from the current left indent) 1 pica plus the width of the
+bullet character ( \(bu ). \*[FWD 3p] puts three points of space after
+the bullet so that the bullet and the text are visually separated.
+.COMMENT OFF
+\#
+\#
+.IL 1P+\w'\(bu\*[FWD 3p]'
+\#
+\# Hanging indents are always relative to the current left indent.
+\# The additional 1-pica indent, above, already having been taken
+\# care of, we only want to hang the first lines of bullet list items
+\# back by the width of the bullet character plus its 3 extra
+\# points of space.
+\#
+.ALD 6p
+.HI \w'\(bu\*[FWD 3p]'
+\*[DOWN 1p]\(bu\*[UP 1p]\*[FWD 3p]This is the first line of a sublist with bullets.
+N\*[BU 2]otice how the first line (the one with the bullet) is indented
+exactly one pica from the text of the list item above it, while the
+remaining lines align with the left indent we set above.
+.ALD 6p
+.HI
+\*[DOWN 1p]\(bu\*[UP 1p]\*[FWD 3p]This is the second item of the sublist with bullets. \*[BU 4]We
+could go on indefinitely, but let's go back to the top level (numbered)
+list...
+\#
+\# The easiest way to return to a previous indent value is by subtraction.
+\# The argument to IL, above, was 1P+\w'\(bu\*[FWD 3p]', so we just reverse
+\# it by putting a minus sign in front. The parentheses are required
+\# for groff to evaluate the expression properly.
+\#
+.IL -(1P+\w'\(bu\*[FWD 3p]')
+.HI \w'\0.\0' \" Reset hanging indent for use with numbered items.
+.ALD 6p
+3.\0...and here we are.
+.HI \" Again, notice that once HI has been set, you don't have to keep passing it an argument.
+.ALD 6p
+4.\0In order not to make the example too long, we'll stop here.
+.IQ CLEAR \" Don't forget to cancel and/or clear indents!
+\#
+\#
+.FAM T
+.FT B
+.PT_SIZE 12
+.LS 14
+.LEFT
+.SP
+\#
+\#
+Example 4:
+.ALD .25v
+.UNDERSCORE 3.75p "A \*[BU 2]recipe for nested lists using string tabs"
+.SP
+.FAM N
+.FT R
+.PT_SIZE 11
+.LS 13
+.JUSTIFY
+Although setting up string tabs is a bit more complex than setting
+up indents, it's \*[BU 3]well worth the effort, especially for nested lists.
+.ALD 6p
+\#
+.COMMENT
+The PAD line, below, sets up two string tabs. The first (ST1)
+is exactly the length of two figure spaces and a period. The
+second (ST2) is simply "the remainder of the line."
+.COMMENT OFF
+\#
+.SILENT
+.PAD "\*[ST1]\0.\0\*[ST1X]\*[ST2]#\*[ST2X]"
+.ST 1 L \" String tabs must be "set" after being marked off in a line
+.ST 2 J \" ST 1 will be set flush left, nofill; ST 2 will be justified.
+.SILENT OFF
+\#
+\#
+.TB 1
+1.
+.TN \" Use .TN here so text stays on the same baseline as the number in tab 1
+This is the first item in the list. N\*[BU 2]otice how, just as in Example 3,
+the first line hangs back from the remaining text, which is otherwise
+indented.
+.ALD 6p
+.TB 1
+2.
+.TN
+This is the second item in the list. N\*[BU 2]otice that when setting "lists"
+with tabs, there's no need to use the \*[BU 8]\\0 escape sequence after
+the number/period combination in the input text.
+.ALD 6p
+\#
+.COMMENT
+Now, set up the indented bullet-point sublist. The PAD line
+says: move forward 12 points (1 pica), then mark off a string
+tab (ST3) that's the length of the bullet character; move foward
+another three points, then make the next string tab (ST4) the
+length of remainder of the line.
+.COMMENT OFF
+\#
+.SILENT
+.PAD "\*[FWD 12p]\*[ST3]\(bu\*[ST3X]\*[FWD 3p]\*[ST4]#\*[ST4X]"
+.ST 3 L
+.ST 4 J
+.SILENT OFF
+.ALD 6p
+.TB 3
+\*[DOWN 1p]\(bu\*[UP 1p]
+.TN
+This is the first line of a sublist with bullets. N\*[BU 2]otice how the
+bullets and the text line up exactly the same as in Example 3.
+.ALD 6p
+.TB 3
+\*[DOWN 1p]\(bu\*[UP 1p]
+.TN
+This is the second item of the sublist with bullets. For the fun of
+it, lets add in an
+.SPREAD
+en-dashed sub-sublist.
+.BR \" We're in a fill mode right now, so you *must* terminate the line with BR
+\#
+\#
+.SILENT
+.PAD "\*[FWD 12p]\*[ST5]\(en\*[ST5X]\*[FWD 4p]\*[ST6]#\*[ST6X]"
+.ST 5 L
+.ST 6 J
+.SILENT OFF
+.ALD 6p
+.TB 5
+\*[UP .75p]\(en\*[DOWN .75p]
+.TN
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
+sed diam voluptua.
+.ALD 6p
+.TB 5
+\*[UP .75p]\(en\*[DOWN .75p]
+.TN
+At \*[BU 3]vero eos et accusam et justo duo dolores et ea rebum. Stet clita
+kasd gubergren, no sea takimata sanctus est lorem ipsum dolor sit amet.
+.ALD 6p
+.TB 1
+3.
+.TN
+And here we are, back at the top-level numbered list with a minimum
+of muss and fuss,
+.ALD 6p
+.TB 1
+4.
+.TN
+Generally speaking, once you get the hang of string tabs and the
+\*[BD]PAD\*[PREV] macro, you'll find setting up complex nested lists
+(or anything similar to them) easier than with hanging indents.
+.TQ
+\#
+.NEWPAGE
+.FAM T
+.FT B
+.PT_SIZE 12
+.LS 14
+.LEFT
+Example 5:
+.ALD .25v
+.UNDERSCORE 3.75p "Word spacing"
+.ALD 8p
+.FAM P \" Palatino family
+.PT_SIZE 11
+.LS 14
+\#
+\# The "label" lines for the following are set in Helvetica bold, one
+\# point smaller than the examples themselves. This demonstrates the
+\# use of the groff inline escape \f[...] to change both family and
+\# font inline. It also shows using the mom inline \*S[...].
+\#
+\f[HB]\*S[-1]Normal word spacing\*S[+1]\*[PREV]
+.FT R
+N\*[BU 1]o\*[BU 1]w \*[BU 1]is the time for all good men to come to the aid of the party.
+.ALD 4p
+\f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU 3]+\*[DOWN 1p]\*[BU 1]2\*S[+1]\*[PREV]
+.FT R
+.WS +2
+N\*[BU 1]o\*[BU 1]w \*[BU 1]is the time for all good men to come to the aid of the party.
+.WS +0
+.ALD 4p
+\f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU 3]+\*[DOWN 1p]4\*S[+1]\*[PREV]
+.FT R
+.WS +4
+N\*[BU 1]o\*[BU 1]w \*[BU 1]is the time for all good men to come to the aid of the party.
+.WS +0
+.ALD 4p
+\f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU 3]+\*[DOWN 1p]6\*S[+1]\*[PREV]
+.FT R
+.WS +6
+N\*[BU 1]o\*[BU 1]w \*[BU 1]is the time for all good men to come to the aid of the party.
+.WS +0
+.SP 1.5v
+\#
+\#
+.FAM T
+.FT B
+.PT_SIZE 12
+.LS 14
+.LEFT
+Example 6:
+.ALD .25v
+.UNDERSCORE 3.75p "Line kerning"
+.ALD 8p
+.FAM P \" Palatino family
+.FT R
+.PT_SIZE 11
+.LS 15
+\#
+\# Here, we set up some tabs so the examples can go into facing columns.
+\#
+.TAB_SET 1 0 19.5P L
+.TAB_SET 2 19.5P 19.5P L
+\#
+\#
+.MCO \" Turn multi-columns on
+.TB 1
+\f[HB]\*S[-1]Unkerned line\*S[+1]\*[PREV]
+.FT R
+"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
+.ALD 4p
+\f[HB]\*S[-1]Line "tightened" \(en .RW .1\*S[+1]\*[PREV]
+.RW .1
+"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
+.ALD 4p
+\#
+\# In the next line, notice that because it uses a different family
+\# (Helvetica instead of Palatino), the RW macro doesn't affect it.
+\#
+\f[HB]\*S[-1]Line "tightened" \(en .RW .2\*S[+1]\*[PREV]
+.RW .2
+"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
+.ALD 4p
+\f[HB]\*S[-1]Line "tightened" \(en .RW .3\*S[+1]\*[PREV]
+.RW .3
+"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
+.MCR
+.TB 2
+\f[HB]\*S[-1]Unkerned line\*S[+1]\*[PREV]
+"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
+.ALD 4p
+\f[HB]\*S[-1]Line "loosened" \(en .EW .1\*S[+1]\*[PREV]
+.EW .1
+"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
+.ALD 4p
+\f[HB]\*S[-1]Line "loosened" \(en .EW .2\*S[+1]\*[PREV]
+.EW .2
+"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
+.ALD 4p
+\f[HB]\*S[-1]Line "loosened" \(en .EW .3\*S[+1]\*[PREV]
+.EW .3
+"But this is \*[IT]important!\/"\*[PREV]she exclaimed.
+.MCX 1.5v
+\#
+\#
+.FAM T
+.FT B
+.PT_SIZE 12
+.LS 14
+.LEFT
+Example 7:
+.ALD .25v
+.UNDERSCORE 3.75p "Cutaround using left\*[FU 2]/right indents, multi columns \
+and a dropcap"
+.SP
+\#
+\#
+.FT R
+.PT_SIZE 11
+.LS 12
+.BR_AT_LINE_KERN OFF \" In justified text, it's best to have this OFF
+\#
+\#
+.TAB_SET 1 0 18.5P J
+.TAB_SET 2 20.5P 18.5P J
+.MCO
+.ALD 5P+9p
+\#
+\# The little picture of tux.
+\#
+.PSPIC penguin.ps
+.MCR
+.TAB 1
+.DROPCAP_FONT B
+.DROPCAP L 3 COND 80 \" i.e. the letter L dropped 3 lines, condensed to 80% of its normal width
+.EW .2
+orem ipsum dolor sit amet, consetetur sa\%dip\%scing elitr, sed diam
+nonumy eir\%mod tempor invidunt ut labore et dolore magna aliquyam erat,
+sed diam voluptua.
+.EW 0
+.TI 1P
+At vero eos et accusam et justo duo dolores et ea rebum. Stet clita
+kasd gubergren, no sea taki-
+.SPREAD \" Force justify preceding line before starting indent
+.IR 3.5P
+kimata sanctus est lorem ipsum dolor sit amet.
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor.
+.EW .2
+.TI
+Invidunt ut labore et dolore magna ali\%qu\%yam erat, sed diam voluptua.
+At
+.EW 0
+vero eos et accusam et justo duo dolores et ea rebum.
+.TI
+Stet clita kasd gubergren, no sea ta-
+.SPREAD \" Force justify preceding line before quitting indent
+.IRQ
+kimata sanctus est lorem ipsum dolor sit amet. Lorem ipsum dolor
+sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
+in\%vi\%dunt ut labore et dolore magna aliquyam erat. Sed diam voluptua,
+at vero eos et accusam et justo duo
+.SPREAD
+.EW .3
+dolores et ea rebum. Stet clita no kasd guber-
+.SPREAD
+.MCR
+.TB 2
+gren, no sea takimata sanctus est lorem ipsum
+.EW 0
+dolor sit amet. Consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt ut labore et dolore.
+.TI
+Magna aliquyam erat, sed diam voluptua, at vero eos et accusam.
+Et justo duo dolores et ea
+.SPREAD
+.IL 3.5P
+rebum, stet clita kasd gubergren. No sea
+takimata sanctus est, lorem ipsum dolor sit amet.
+.TI
+Sit amet, consetetur sadipscing elitr, sed diam. Nonumy eirmod tempor
+in\%vi-
+.EW .3
+dunt ut labore et dolore magna. Ali-
+.EW 0
+quyam erat sed diam voluptua.
+At vero eos et accusam et justo duo dolores et ea rebum stet.
+.ILQ
+.TI
+Dolores et ea rebum stet clita kasd gubergren, no sea takimata
+sanctus. Sadipscing elitr sed diam, nonumy eirmod tempor, invidunt
+ut labore et dolore magna aliquyam erat. Sed diam voluptua, at vero
+eos et accusam et justo duo dolores et ea rebum.
diff --git a/contrib/groff/contrib/mom/examples/penguin.ps b/contrib/groff/contrib/mom/examples/penguin.ps
new file mode 100644
index 0000000..2728930
--- /dev/null
+++ b/contrib/groff/contrib/mom/examples/penguin.ps
@@ -0,0 +1,461 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GIMP PostScript file plugin V 1.06 by Peter Kirchgessner
+%%Title: /home/peter/Pics/penguin_small2_bw.ps
+%%CreationDate: Wed Apr 17 19:49:51 2002
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%Pages: 1
+%%BoundingBox: 0 0 81 96
+%%EndComments
+%%BeginPreview: 90 107 1 107
+% aaaaaaaaabff555555555540
+% 5b6db6db5edbf6b6b6b6b680
+% aaaaaaaab7ff7ad555555540
+% b55555557eddeeaadadadac0
+% 56db6db6dbffdf56ab555540
+% aaaaaaaaffb755dab556ab40
+% 5b555b55f77ed7d556b56d40
+% aab6d56dbfffaaeb6ad5aa80
+% 6d555aabf6edd5daad56ab40
+% aadaab56ffdfaff555aab540
+% 5555b56bddfdff76dab55680
+% b6aaaaaffbbbbbed5556dac0
+% 55b6d6d5bff7f77aab6aaa80
+% aaaaaaaff77f6ffd6d555540
+% 5b555b576defeedaaaadb680
+% aab6d56dfbfd3bfdb56aaac0
+% 55555aab8eda4fb556ab5540
+% b6daab5743f40b7eaad56d80
+% 5555b56f037007fadaad5540
+% aaaaaaab11e0c6ed55b5aa80
+% 5b6d6db731b1a3feaaaab6c0
+% aaab55566963a3badb555540
+% 6d556aaf35d2e37d556daa80
+% aadaadb57959f3f6aaaab6c0
+% 5555aaab3403c37d6dab5540
+% 6daab5571428c3eeaab56a80
+% aab6d6db908007fd5556ad80
+% ad5555574000176edb6ad540
+% 55aaadab920003fd55555a80
+% b56db55b2000136eaaadab40
+% 56aaaaab400047fdb6d55540
+% aad556d7040112df555ab680
+% 6d5b6ab5d00447bb55ab5540
+% aaaaad57402915cf6d556a80
+% adb555ab9a9243a7aab6ad80
+% 5556dab6902485ead5aad540
+% b5aaab57854901d7daad5a80
+% 56b5556d929201bfab55ab40
+% aaab6d57004400fb756ab540
+% 6d6d55af0a1000efeaad5680
+% aaaaaaba0080005ef6d5aac0
+% adb5b6d60220003fdaaab540
+% 5556aabc0000003bfd5b5680
+% b5aab57c0000003f76d56ac0
+% 56b556e80000001beeaaad40
+% aaab6bf80000001f7f5b5580
+% 6d6d55b00000001dfbaab540
+% aaaaaff00000001bdf6d5680
+% 55b5b5b00000000ffbd5aac0
+% b6aaafe40000000f6ff55a80
+% aad6df7000000246fedaab40
+% 555ab6d000000003aff5b540
+% b6aaafe000000013edbaaa80
+% 556b7d8000000001b7f6d6c0
+% aaad5bc000000001fbbd5a80
+% 6db57f0000000000d77aaac0
+% aaaab58000000000edf6d540
+% 5556f7000000000056fead80
+% b6dab600000000006edb5540
+% aaaaee00000000007ffeb680
+% 5555ee000000000076bb5540
+% b6dabc00000000003f7f6a80
+% 5555d800000000003b7756c0
+% aaabfc00000000003f7eda80
+% 6db6b0000000000036f7aac0
+% aaabd800000000003ffeab40
+% ad57b800000000003d6fda80
+% 55b7d8000000000037fdaac0
+% b55eb800000000003edfab40
+% 56afb000000000003bfbb540
+% aaddb000000000003edf5680
+% 6d5bd8000000000035fdaac0
+% aaafe800000000003b5bb540
+% 55ba5000000000006fef5680
+% b6a83800000000005f736ac0
+% aaa00c00000000003dfdad40
+% 55680e00000000003bd65580
+% b6a107000000000077bc5a80
+% 55a013c0000000023ff82b40
+% a80401a0000000005db45540
+% 429021f0000000043ff02d40
+% 900000f80000000096c4aa80
+% a00080be000000082a902d80
+% 004204770000000244401540
+% a200003e8000001411001540
+% 4004105fc000000044444b40
+% 8800001b8000000a00800540
+% 5040411f4000001012000280
+% 80040007c000001440044080
+% 5080040d0000003100100040
+% 800040200000007400400400
+% 51080002000000e804008040
+% 80008440000003f210000080
+% 50000005000007d400080940
+% 0111000080001ef020808280
+% a00008894000ffd480001540
+% 02000000fa57bb680108aa80
+% a0222002bfffffe900012b40
+% 0a4001115ffdedd20824d540
+% d0888004bb6fbfb4008b5a80
+% ad251202bffdfbe921255580
+% b554a05576ab576a045aaa80
+% aaaa950aaaad5aaaa955b6c0
+% 56d56a556d6aaad48556aa80
+% b55b5555aaab6b5ab55aad40
+% 55aaaaaab5b555554aaad580
+% ad556d5b56aaad6b556b5a80
+%%EndPreview
+%%BeginProlog
+% Use own dictionary to avoid conflicts
+5 dict begin
+%%EndProlog
+%%Page: 1 1
+% Translate for offset
+0.000000 0.000000 translate
+% Translate to begin of first scanline
+0.000000 95.872000 translate
+80.640000 -95.872000 scale
+% Variable to keep one line of raster data
+/scanline 90 1 mul string def
+% Image geometry
+90 107 8
+% Transformation matrix
+[ 90 0 0 107 0 0 ]
+{ currentfile scanline readhexstring pop }
+image
+72727272717171717171717172717171717171717171717172717171727271717171727273736f
+675852524e4653535a676b73737272727272727272727272727272727272727272727272727272
+727272727272727272727272
+7172717271717171717171717271717171717171717171717271717171717172727272726d5d4a
+4039393939373a3a3c3f4653637172727272727272727272727272727272727272727272727272
+727272727272727272727272
+7171717271717171717171717271717171717171717171717271717171717173747271644b3f3a
+3a393a3a3a393b3b3b38393b3d4d64707272727272727272727272727272727272727272727272
+727272727272727272727272
+727272727171717171717171727171717172717171717171727171717171727372705b3b3d3b3a
+3939393939393938393939383a3c3f546d71747272727272727272727272727272727272727272
+727272727272727272727272
+727271727171717171717171727171717171717171717171727171717171727173553e3d383a39
+393a383838383838393940564d3f38394668727272727272727272727272727272727272727272
+727272727272727272727272
+71717171717171717171717172717171717171717171717172717171717172715f3d38393b3b39
+3a393939393939393a3c5574807252403742627272727272727272727272727272727272727272
+727272727272727272727272
+727271727171717171717171727171717171717171717171727171717172726c403c373a3a3a3a
+3a3a3a3a3a3a3a3a393e5e82958c72543a38416a72737272727272727272727272727272727272
+727272727272727272727272
+727171727171717171717171727171717171717171717171727171717271735a3d383b3a3a3a3a
+3a3a3a3a3a3a3a3a383c5f87978e7c65493a3c5070737272727272727272727272727272727272
+727272727272727272727272
+7171717271717171717171717271717171717171717171717271717172736c4638373b3a3a3a3a
+3a3a3a3a3a3a3a3a3a436384897d6d644f3a3b3e60727472727272727272727272727272727272
+727272727272727272727272
+727171727171717171717171727171717171717171717171727171717273603a3839393a3a3a3a
+3a3a3a3a3a3a3a3b39425c6f68574745403b3c3848707472727272727272727272727272727272
+727272727272727272727272
+7271727271717171717171717271717171717171717171717271717172724d373938393a3a3a3a
+3a3a3a3a3a3a3a393a3d494e3e3e3c3b393c3a393b617272727272727272727272727272727272
+727272727272727272727272
+71717171717171717171717171717171717171717171717172717171727241393839393c3a3a3a
+3a3a3a3a3a3a3a393b3a3a3d3b3a3d393c3b393b3a4b7374717272727272727272727272727272
+727272727272727272727272
+7272727271717171717171717271717171717171717171717271717172703a3b3937393b393a3a
+3a3a3a3a3a3a3a3a3a3b3a3a393d3a3b3b3b393a393e6d74727272727272727272727272727272
+727272727272727272727272
+7272727271717171717171717271717171717171717171717271717171633c3a3a38383d413c3a
+3a3a3a3a3a3a3a3a3a3b3e4142393c3c3b3b3939393c6074707272727272727272727272727272
+727272727272727272727272
+7272727271717171717171717271717171717171717171717271717171623b373b3e40475d5a3f
+3b3b3a3a393b3b3b373839486b6d3d393b3b3a38393b5c73717272727272727272727272727272
+727272727272727272727272
+7272727271717171717171717271717171717271717171717271717172623b373c3a3d3f425d65
+3f393a3a3d393b3e5b75795a3e6562393b3b3b39393d4f71727272727272727272727272727272
+727272727272727272727272
+7272727271717171717171717272717171717271717171717271717172623c3838538a9e7e4960
+4e3c3a3a3c3a57879ea9b0b68e445b463b3b3b3a3b3d4a72727272727272727272727272727272
+727272727272727272727272
+7272727271717171727171717272717171727171717271717271717172613c374d96b6cabb8e48
+463b3a3a3a5291abb6c0c7d1be7f3f473b3b3a38393a4672727272727272727272727272727272
+727272727272727272727272
+7272727271717171717271717271717171717171717171717271717172603c3770acd1e3dfcc84
+3a3b3a3a3d85c0e7f4f7f7f2d9a4593a3b3b393839393f6b727272727272727272727272727272
+727272727272727272727272
+7272727271717171717171717271717171717171717171717271717172603c3c9aebdbc5eefdda
+45393a3a45b8f7fcda8386d1faec8b373b3b3a3938383e6b727272727272727272727272727272
+727272727272727272727272
+7272727271717171717171717271717171717171717172717271717172613946c8db4e7188eaf9
+60443c3e4dc7fbe953468a7fcdfdc7433b3b3a3839383c6a727272727272727272727272727272
+727272727272727272727272
+7272727271717171717171717271717171717171717171717271717172603a4bd59a387184a5fb
+755363655bc9fb9c3d3a5c907ffbe7543b3b3a3939383c6a717272727272727272727272727272
+727272727272727272727272
+7171717171717171717171717171717171717171717171717171717171673b4ad5833e4a7f75f8
+6f484b575cb3f67b363c445b68f4ed553a3a3a3939393b6a717272727272727272727272727272
+727272727272727272727272
+7272727272717171717171717271717171717171717272717271717171714245cc953c3d5667ce
+666e6f6c6282e97a3b3a3a3b5bf5ea58393a393a393c386a737272727272727272727272727272
+727272727272727272727272
+727272727171717171717171727171717171717171717171727171717171413eb7c4453b416fa6
+c3c9c6c2bcb1c19d3a3c3b3e8cfbdc4c3939393a39393969727272727272727272727272727272
+727272727272727272727272
+727272727171717171717171727171717171727171717171727171717171413a8df18e477da2af
+cdcecbbfa6b2cfc289534273ebf9ac3f3939393939383b62727272727272727272727272727272
+727272727272727272727272
+72727272717171717171717172717171717172717171717172717171717142385bdae697a9c1cd
+cfcecfd3d4d7dcd9d5c5a8c5e4dc633838393a39393a365b727272727272727272727272727272
+727272727272727272727272
+72727272717171717171717172717171717171717171717172717171717142363e99a4a8b9cacf
+cecfd2d8dcdfe2dfdedad6cdc3ac693f39393939393a375b727272727272727272727272727272
+727272727272727272727272
+7272727271717171717271717271717171717171727171717271717171714137538fa4b4c2cbcf
+cfd1d5dadee2e1dfdedededfdcdab5553a3a39393a3c3859727272727272727272727272727272
+727272727272727272727272
+7272727271717171717171717271717171717271717171717271717171714b43839facbdc8cfcf
+d0d3d7dae2e2dfdedededed1b1c5c05e3c3b393a3c393c4c717272727272727272727272727272
+727272727272727272727272
+727272727171717171717171727271717171717171717171727171717172524c94a0b2c1cbcfcf
+d1d5d9dee1dfdedededabea8aebbad4f3b3c3a393a3a3d426b7273727272727272727272727272
+727272727272727272727272
+72727272727171717271717172727171717171717172717172727171717254478ea5b9c3ced0d1
+d3d6dbe0dededddccfabaab7bbbaaa4b3c3b393a37393f3b597174727272727272727272727272
+727272727272727272727272
+727272727171717171727171727171717171717171717171727171717171503b5c84aec9d0d1d1
+d6d9dddcded9d1b0a0b1b8bbbab387403a3b6c7446333938477173727272727272727272727272
+727272727272727272727272
+7272727271717171717171717271727171717171717171717271717171714f3d457986a3c5d1d6
+d8d9d8d1bfa795a2b4b7bab7adac8642383863978e6f413c3c6973727272727272727272727272
+727272727272727272727272
+727272727171717171717171727171717171717171717271727172717272523b4390a58a8e9da8
+aba4a29d9ca5aeb3b2afabb7c4c2bb5d3b3645849b99663a3c4e72727272727272727272727272
+727272727272727272727272
+727272727171717171717171727171727171717171717271727171717273543c49adbfa29097b4
+c0b9b5b3b4b0afada5aabec7cfcac3763a3b3c5e999a8745393d65727272727272727272727272
+727272727272727272727272
+727272727271717171717171727271717172717171717171727172727171483856aac1bfa18e9e
+b1b4b2afa9a3a0a4b3c1c1c5d3ded4ac413a3b4079895a38353948707472727272727272727272
+727272727272727272727272
+7272727271727171717171717272727171717171717171717272737272633f3c4ea8c5c1c0a790
+919698959193a7bac2c1c9e1f4fbfbde6c3b3c3a39423c3b3a393e617473727272727272727272
+727272727272727272727272
+7272727271717171717171717271727171717171717172717272717270453b394dc1d9c8c2c2bc
+a79b9b9dabbac0c1c2cde3f8fdfdfdfabf453b3b3b3b3b3b3a393d4c7071727272727272727272
+727272727272727272727272
+727272727171717171717172727171717171717171717171727270715b3d3b398ff5e7cec3c3c1
+c3c1c2c2c3c2c2c8d4e4f5fdfdfdfdfdf9723f3b3b3b3b3b3b3a39435a74747272727272727272
+727272727272727272727272
+7272727271717171717171717271717171717171717171717271726750463658e0fbf7e4c6c2c3
+c3c2c3c2c2c4ceddedf7fdfdfdfdfcfdfccb4a3b3d383b3b3a3a3a3e4a6b727271727272727272
+727272727272727272727272
+72727272717171717171717172717271717171717171717172716d4b544340b1f7fcfdf7d5c2c2
+c2c2c2c2c6d5e7f5fcfdfdfdfdfdfdfcfbf7833d3d3b3b3b393b393a3b4e717272717272727272
+727272727272727272727272
+7272727271717171717271727271727171717171717171727371483a3a3673f4fdfcfbfceccfc5
+c2c1c2cde3f3fafdfdfdfcfdfdfdfdfcfdfccb40393a3b3b39393a393b3c607271727272727272
+727272727272727272727272
+727272727171717171727171727171717171717171717171705a3e3f3c45d0fcfdfdfcfdfcf5e6
+d9dce5f1fafcfcfcfdfdfcfdfdfdfdfdfdfdf66937393b3b393939393a3a486a72717272727272
+727272727272727272727272
+7272727271717171717171717271717171717171717171725f3e3a3c3985fbfcfdfcfdfdfdfdf9
+f1f8fcfdfdfcfcfcfcfdfdfdfdfdfdfdfdfdfd933b3a3b3b3a3a3a3a393a3d4a6b717272727272
+727272727272727272727272
+717171717171717171717171717171717171717172727267443b3b394cd2fafcfdfdfdfdfdfdfb
+fafcfdfdfdfcfcfcfcfcfdfdfdfdfdfdfdfdfbc73b3b3a3a3a393a3a3a393c3e52727272727271
+727272717171717172717271
+727172727171717171717171727171717172727175736d423a3a383c7de7f9fefefdfdfdfdfdfc
+fbfcfdfdfdfcfdfdfcfdfdfdfdfdfdfdfdfcf8e24d3c3b3b3a3a3a3a3b3b393a3b537173727272
+727272727272727272727272
+7272727271717171717171717271727171727271726e4d3b3b3a3646a0e2f8fdfefdfcfcfdfdfc
+f8f8fcfdfdfdfdfdfdfdfcfdfdfdfcfbf4f0efeb653f3b3b3b3b3b3b3b3b3938393f5772727272
+727272727272727272727272
+727172727171717171717171727171717171727171533f3b3b3a364aa5cef0f9fbfdfdfcf9f5f1
+ecebf3f8fafbfbfafcfaf8f7f5f5efeae3dbdfe687473b3b3a3b3a393a3a3b393a393f5c727272
+727272727272727272727272
+7272727271717171717171717272717171717271623d3d3a3b3a3a5ba9b8d0e7edf5f9f9f5ede3
+e1e5e7f2fbf9fafaf7eee2dad3d0cececcc8c9d8c5513a3b3a373c393d3b3a3939383d3e637272
+727272727272727272727272
+727272727171717171717171727171717172726e4a3d383a3b3a456fadb5cbddebf8fbfcfdfced
+e4f5fbfdfcfdfdfdfcf7ede3d5cecac8c7c6c6c7deb844393e644e3a393b3a3a3939383c4b6f72
+727272727272727272727272
+72727272717171717172727272727271717272603e3a3b3b393a4b7cbbd3ebf7fdfcfcfbfdfcee
+f1fcfcfcfcfbfbfdfcfcfdfbf8f2e8ded3cbc7c6ceee993d34556f5f463c3d393b393a3a3e6272
+727272727272727272727272
+717171727171717172717171727171717173704b3b3d39473c3c5fb0dcf1fbfcfcfcfdfcfcfcf5
+f5fbfcfbfdfcfcfcfcfcfbfbfdfcfcfbf5e9d9cdc7d8ea683b3d3d58724b3b3d3b3a3a3a3c5173
+737272727272727272727272
+7272727271717171717271717271717171736e433e385e603e4090dff5fcfdfcfcfbfcfcfbfcfa
+fbfbfcfcfcfbfcfdfcfcfcfcfdfcfcfcfbfcf6e6d3c9e3c3403a3d394d7342353e3a3b3a39416b
+727372727272727272727272
+727171727171717171717171727171717172673d374a6b3b3d4cd9f8fdfcfcfcfbfdfbfcfbfcfc
+fbfcfcfbfcfcfcfcfdfcfcfcfbfcfbfcfcfdfdfaedd4ceeb6c3c3d3d3e51663a3e383b3a393c56
+717472727272727272727272
+727271727171717171717171727171717173573c3c604d3b3c8ffbfdfbfcfdfcfcfcfcfcfcfbfb
+fdfbfdfcfdfbfcfcfcfbfcfcfdfbfdfcfcfcfcfdfcedd3dac43d384e5b5064583a3c3b3a363c40
+6f7272727272727272727272
+727271727171717171717171727171717170483f476f373851e9fdfdfdfbfcfcfcfcfcfcfbfcfd
+fcfcfcfbfcfcfbfbfcfcfdfcfdfcfcfcfcfcfcfdfcfdf1e6f1583f5e7770546d42393b3a3b3a3d
+637272727272727272727272
+7272727271717172717171717271727372643f3c6a52373da0fbfcfcfcfcfbfcfcfcfdfcfcfbfb
+fcfbfcfbfbfcfdfcfcfcfcfcfcfcfcfbfcfcfdfcfdfbfcfcfd9545657c735259613d3c393a393b
+4e7172727272727272727272
+7272727271717171717171717271727471513a456a393a5ae6fafcfbfcfbfcfbfcfcfcfcfbf8fa
+fbfcfcfcfcfdfbfcfdfcfcfdfcfdfcfbfdfcfbfcfcfcfcfcfdc64f5e6456434078433b3d393b3d
+436c72727272727272727272
+727272727171727171717171727272726e47385c53333e98fbfbfcfcfcfcfcfcfcfcfcfcf9eafb
+fbfbfbfbfcfcfbfdfcfcfbfcfcfcfcfcfbfdfcfcfdfdfcfdfce7473d3f3b3b375e57393d383939
+3b6171727272727272727272
+72727272717171717171717172717272633c3b703f3451dafcfcfbfbfcfcfbfcfcfdfdfbf4e8fa
+fcfdfcfcfcfbfcfbfcfcfcfcfbfdfcfcfcfcfcfcfcfbfbfcfcfa623c3a3a3b374b66373d393939
+3b5072727272727272727272
+727272727171717171717171727272714e3b52613b388af8fcfbfcfbfcfcfcfcfcfdfcfcf2edfc
+fdfcfcfcfcfdfcfbfcfcfcfcfcfdfcfdfdfcfcfcfcfdfcfbfcfc84383b3b393a3f774138383938
+3a416f727272727272727272
+727271727171717171717171727272663c3c68453b40c5fbfbfbfdfdfcfcfdfbfcfcfcfcededfb
+fcfcfcfcfbfcfcfcfcfbfbfcfcfcfcfcfafcfcfcfcfbfcfdfcfda23c3b3b3b3b3d7437383b3a39
+3b3f68727272727272727272
+7272727271717171717171717174714b3a3a6b373b57eefcfcfcfcfbfcfcfbfcfcfbfdfbe9e9fb
+fbfcfcfcfbfcfcfbfbfcfcfbfbfcfbfcfcfcfcfcfbfcfcfcfdfcaf3b3b3b3c3a406f37373a3a39
+393d5f727272727272727272
+7171717272717171727171717271623e3d4a60373b82fbfcfcfdfbfdfcfcfcfcfbfcfcfbe6eafb
+fcfdfcfcfcfcfcfbfdfcfcfcfdfcfcfcfcfdfcfcfcfbfcfcfcfdbd3a3b3b3a3843633836393a38
+3a3c54727272727272727272
+727272727272717171717272736d463a37535c3839aafcfcfcfdfdfcfcfcfbfcfdfcfbfbe6eaf9
+fbfbfcfbfcfbfcfcfbfdfcfcfbfcfcfcfcfdfcfcfcfcfbfdfcfcce3c3b3b393c4e533937383939
+383c4f727272727272727272
+71717272717171717171717371593d3b3952603947cdfcfbfcfcfcfcfcfdfdfcfcfcfdfae2e9fa
+fbfbfcfdfbfcfcfcfcfcfcfcfcfcfcfbfbfcfbfdfcfcfdfafcfcd4423b3b3b3a5a4e393a39383a
+3a3940727272727272727272
+7272727271717171717271726c41393c3656683b47d6fdfbfcfcfcfcfcfcfbfcfdfcfcfae1e9fb
+fbfcfdfcfcfcfbfcfcfcfcfbfcfcfbfcfcfcfbfbfdfcfbfcfcfdda413b3b3c3b6644393a3a3938
+3b3a3f727272727272727272
+727271727171717171717171553c3b3b405f6d394ce1fcfcfcfcfcfcfbfdfcfcfcfcfcf9e1ecfb
+fcfcfcfcfcfbfbfcfdfcfcfdfbfcfcfcfcfbfcfbfbfdfcfdfcfcdd423b3b3b39643f393a393939
+3a3a3e727272727272727272
+7272727271727171717171724f3e363d4f767e3b5be9fcfdfcfdfbfbfbfcfcfbfafcfcf8e2eefb
+fbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfbfdfcfbfcfdfcfcfcfbfdde433b3b3b455f3a3b3b3a3a39
+39393e727272727272727272
+72727272717171717171716e46393938466b863e69edfcfdfcfcfcfcfbfcfcfcfcfcfcf7e2eefc
+fbfcfcfdfbfdfcfbfdfcfdfdfdfcfcfcfcfdfbfcfcfbfcfcfbfddc443b3b385a463b3b3b3a3839
+393940727272727272727272
+72727272717171727171716f413a3a3a3945724869effcfcfcfcfbfcfcfbfcfcfcfcfbf8e2f1fc
+fcfcfcfbfcfcfcfcfcfcfcfcfcfcfcfbfcfcfcfcfcfcfbfcfdfccc3f383a41683b3d3d3a3b3a3a
+3a3b42727272727272727272
+72727272727171717171716e443938393c3c49626eeefcfbfcfcfcfcfcfcfcfcfcfcfcf8e2f1fc
+fbfcfdfcfcfdfdfcfcfcfcfcfbfcfbfcfcfcfcfcfcfcfcfcfcfcb83b3f5a685d455b6054463f3a
+3c3a51727272727272727272
+727272727271717172717171524a728f8d5e424d80e3fbfcfcfbfcfcfdfcfbfcfcfcfcf7e1f2fb
+fcfcfcfcfcfcfcfbfcfdfbfcfcfcfcfcfcfcfcfcfcfdfcfcfcfc9c405b503d3b3c3c455368755c
+3d3a5a727272727272727272
+72727172717171727271727174a3c9d4d6c87b3b50b0f9fcfcfdfcfcfcfbfdfcfcfcfcf8e2f3fb
+fcfcfdfcfcfcfcfcfcfcfbfbfbfcfbfcfbfcfcfcfcfcfbf9fbf66956403b3a3a39393b3a3a608d
+654567717273727272727272
+7272727271717172717371739bc1d1d4d4d4cc7f3f55a9f5fbfbfcfbfdfbfbfcfbfbfcf8e1f3fc
+fbfcfcfcfbfcfbfcfcfdfdfcfcfcfcfcfcfcfcfcfbf6d5d3d3d29c59393a393b3b3b3b3a3c5d76
+61486b737272727272727272
+727272727171727171737288b1c7d1d4d4d5d4cc803f4ea1f0fbfcfcfcfbfcfcfcfdfcf6e3f4fc
+fdfbfbfcfcfcfcfcfcfcfcfcfdfbfcfcfcfbfcfcfcdccfdbdddccd5b3e3a393b3b3b3b3a3e655e
+519c89727373727272727272
+7171717272727171717276a3b8c8d2d4d5d4d5d5c66d3a4892e9fcfbfcfdfcfbfbfbfcf8e1effb
+fcfbfcfcfcfcfbfcfcfbfcfbfcfcfcfcfbfcfcfcfcd5c7d4d7dabb50383c393b3b3b3b3a414f40
+76cfda8f7374727272727272
+7172717372727271707e9db3c0cdd4d4d5d4d4d5d4b6543b4673d6fbfbfcfcfdfdfcfbfaeaedfc
+fbfdfcfcfcfdfdfcfcfcfcfcfbfbfcfbfcfdfcfcfcd7c5d3d4d1a9513a393a3b3b3b3b3a3a3653
+bad5d7b87371727272727272
+7170778c9baaa8a5a3a7b4bdc9d1d4d4d4d4d4d4d5d2a04435405bc1f7fcfcfdfbfcfcfdfbf9fc
+fdfcfbfcfcfcfbfcfcfcfcfbfcfcfcfdfcfcfbfbf8d8c4d3d2c9a85c3a3b383b3b3b3b3a3a4196
+cfd1d4c47370727272727272
+73779fb2bcc1bfbbbbbdc4cad1d4d4d4d5d4d4d4d5d4cb7c3d373c469ef3fbfcfcfcfdfcfcfcfc
+fcfbfcfcfbfcfcfcfcfcfcfcfcfcfcfcfbfcfbe8d3c7c4d2cec3ae78463c36383836373b477dbf
+cccfd1c07671727272727272
+738ab0bec9cdccc9c7ccd1d2d4d4d4d4d4d4d4d4d4d5d5b758383b3a4387e5fdfcfcfcfbfcfcfc
+fdfdfbfcfcfcfcfcfbfcfcfdfcfcfbfbfdfceecdc7c3c2cecbc1ae997146403e393d426189b2c3
+cccfd2c27572727272727272
+7193b7c7ced1d2d3d2d3d4d4d4d4d4d4d5d4d4d4d4d3d4cf953d383a353a68d0fbfbfbfbfdfcfc
+fbfbfbfdfcfdfcfbfcfcfbfcfcfcfdfcfbfde3c7c8c2bfc9cac4b5a69c8e7d77767e929eacc0ca
+d0d3d4d07f72727272727272
+729eb8c8d0d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d5d3d3d5c065383b38343f57bffbfbfcfcfbfc
+fcfcfcfcfbfbfcfdfcfcfcfcfbfbfbfcfcfbdfc9c8bdb9c8cac6bbb0a8a5a1a0a1a3a7b1bfccd1
+d4d4d4d3af77717372727272
+7192b7c6d0d4d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d3d4d4a64639383c3a3852c7fcfcfdfdfd
+fcfcfcfcfcfcfdfdfcfcfdfcfdfcfbfcfcfbe0c8c8b8b4c6cacac1b9b5b1b0afafb2b7c0cbd4d4
+d4d5d4d2cf9c727272727272
+728cb5c3ced4d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d4c97d3b363a3737396ef0fcfcfcfc
+fdfcfcfcfbfcfcfcfcfcfcfcfdfcfcfbfcfde7cbc9b3aebfc9cbc8c2bcbbb9b9b9bcc3c9d1d5d5
+d5d5d5d3d1c88f7272727272
+718bb2c0cdd3d4d4d4d4d4d5d5d5d4d4d5d4d4d4d5d4d4d4d4d5b6573a3939393742d8fcfcfcfc
+fcfbfcfbfcfcfcfdfcfcfcfcfbfbfcfcfdfbeed0c8adaabcc9d0cecbc5c3c2c1c3c5c8ced2d5d5
+d5d5d5d5d4d1c29071727372
+727fafbdccd3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d4d4ce974038393b393fd1fcfcfcfb
+fcfbfcfdfcfcfbfcfcfcfcfcfbfcfcfbfcfcf3d3b588aabdc9d0d2d1cdcbc9c8caccced1d4d5d5
+d5d5d5d5d4d3d0cb99767372
+727aadbccbd3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d3d5c57a3a3a383a59ecfdfcfcfc
+fbfcfcfcfcfcfcfbfcfbfcfcfbfcfcfcfbfcf2c46785aabdc9d1d3d3d2d2d0d1d1d2d2d3d4d5d5
+d5d5d5d5d5d5d4d4d4b88872
+727bacbacbd3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d3d5b15441467bd7fcfcfcfbfc
+fcfdfdfcfcfcfbfcfcfcfdfdfcfcfcfcfbfccd5d4484abbecad1d2d4d4d5d4d5d4d4d4d4d5d5d5
+d5d5d5d5d5d4d5d4d4d5cea5
+727caebac9d3d4d4d4d4d5d5d5d5d4d4d4d4d4d4d4d4d4d4d5d5d3d3ce99a7dcf8fcfcfcfcfcfc
+fbfbfcfcfbfcfcfdfcfcfcfcfbfcfcfcf8c2523a4789aabecad1d3d4d5d5d5d5d5d5d5d5d5d5d5
+d5d5d5d5d5d5d5d5d5d5d2c6
+7084aebacbd2d3d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d3d1d1bfa4f4fafbfbfcfcfbfc
+fcfcfbfbfcfcfcfcfcfcfcfcfcfbfbf6a44538364e8aaabecbd2d4d4d4d4d4d4d4d4d4d4d4d4d4
+d4d4d4d4d4d4d5d5d4d3cec1
+718eacbbcdd3d3d4d4d4d5d4d5d4d4d4d5d4d4d5d4d4d5d4d5d4d4d3cfceadbdfbfcfbfcfcfcfc
+fbfdfdfcfbfdfbfbfcfcfbfbfcfce87f42353834578aa9c0cbd2d5d5d5d5d5d5d5d5d5d5d5d5d5
+d5d5d5d5d5d5d5d4d0c9c19f
+739daec0d0d4d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d4d4cfd0bc95d1fbfbfbfcfcfc
+fcfcfcfcfcfcfbfcfcfcfcfcefa84c3b383c39385e88a7c1ccd2d4d5d5d5d5d5d5d5d5d5d5d5d5
+d5d5d5d5d4d4d4d1c6bca676
+81a6b6cbd2d3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d4d4cfcabf9f80cbfafbfcfcfc
+fbfcfcfcfcfbfcfcfcfcf0b45b3c3a3b3a3738396488a6bfccd3d4d5d5d5d5d5d5d5d5d5d5d5d5
+d4d4d4d4d3d1ccc1b5947871
+94aebfcdd2d3d4d4d4d4d4d4d5d4d4d4d4d4d4d4d4d4d4d5d5d4d4d4d0c6bda6835a8ad1eff7fb
+fcfbfcfcfbfaf3e7c5935a3f373a3b3b3b3b3b3d6b8ba7becbd2d5d5d5d5d5d5d5d5d5d5d5d4d4
+d5d4d4cec7c0b5a280727373
+a4afbdc8d1d2d2d3d4d3d4d4d5d4d4d4d4d4d4d4d4d4d4d4d5d4d4d4d1c8bca98d693b3d5c7e93
+a7aea0988f7c5e4b3d3b3a38383b3b3b3b3b3a43708ea7bdcad2d5d5d5d5d5d5d5d5d5d5d4d2d1
+d2d1c8bbb09a7f7372727272
+a3abb7bfc8cbcdcecfd0d2d4d3d4d4d4d4d4d4d4d4d4d4d5d5d4d5d4d0c8bca78f75473839383d
+3d3a39373836353a383b37373b3a3a393a3a38477590a6bac9d2d4d5d5d5d4d4d4d5d4d4d0ccca
+c6bdb1947971727272737272
+9aa5aaafb7bcbfc0c3c5c6cacccfd0d1d2d3d3d4d4d4d4d5d5d4d4d3cec3b6a28b7b553939393a
+393939393939393939393939393a393a3a393947768fa3b5c3cfd4d4d4d4d4d4d2d2d1cbc5bfbb
+b19b80737172727272727272
+7a91989da0a2a7abafb2b6b7bcc0c4c6c9cdd0d2d4d4d4d4d4d4d4d1c8bba9988a7c593a3a3a3a
+3a393a3a3a3a3a3a3a3a3a3a3a3938393a3a3a4a768a9daebdc9d0d2d3d3d2d2d0cdc7bfb8b2a6
+8a7371717171727272727272
+7172757a838c91979c9fa4a4a6a9aeb1b6bac1c7cdcfd1d2d1d1d1cbbfb09e8f857958383a3839
+3b3b3b3b3c3b3b3c3b3b3b3b3b3a3837383a394c738596a5b5bfc9ced0d1d0cdc7bfbbafa49a7b
+727172727272727272727272
+727273727272747c858b90949496999b9fa4acb3b9bec3c8cbcac4bbafa393867d734e3c404141
+4b555858585858585858585857554d454543404d7082909daab6c0c5c7c8c6beb8b2a89b8a7571
+727272727272727272727272
+7372727272727171727274797d8185898d90959ba2a6abb0b6b6b0a89c92867e776547656f7372
+707172727272727272727272727174736f6f66656c7e8a959fa6aeb3b4b4b1aaa49d9382727272
+727272727272727272727272
+727271717271717171727271717273767b7d82898e9195989b9b98928a837e7972616470727172
+72727171717171717172727272727272727171706d76828e979b9da0a1a19f9b968d7c73727271
+717272727272727272727272
+72727272717171717171717172717170717172767d81868788878683807c776f6e727271717171
+7171717171717171717272727272727272727271706f79838c9192959595938d84787171717272
+727272727272727272727272
+7272727271717171717171717271717171737372727375767a7c7d7b79746e6d72737271717171
+7171717171717171717272727272727272727271726e6f737c8285888786837974727172717272
+727272727272727272727272
+7272727271717171717171717271717171727272727272707273706f6f71707272727271717171
+71717271717171717172727272727272727272727272716e6f6f72757372727172717172727272
+727272727272727272727272
+showpage
+%%Trailer
+end
+%%EOF
diff --git a/contrib/groff/contrib/mom/examples/typeset.mom b/contrib/groff/contrib/mom/examples/typeset.mom
new file mode 100644
index 0000000..972acc5
--- /dev/null
+++ b/contrib/groff/contrib/mom/examples/typeset.mom
@@ -0,0 +1,534 @@
+\# This file contains three greeked documents collated together:
+\# two pages of a novelist's outline, two pages of a chapter in DRAFT
+\# style, and three pages of an academic paper set in two columns.
+\# Mom's defaults are used throughout, except for the last one, which
+\# shows off some of the ways of changing mom's behaviour.
+\#
+\# Since the text is greeked, and groff doesn't know how to
+\# hyphenate all that pseudo-latinate nonsense, I've inserted
+\# discretionary hyphens into a number of the the words.
+\#
+\# ===================================================================
+\#
+\# First, a sample "named" document, in this case, an outline.
+\# A novelist wouldn't normally write an outline with numbered heads,
+\# subheads and paraheads. I've turned the feature on merely to
+\# demonstrate it.
+\#
+\# Reference macros
+\#
+.TITLE "Lake Attica's Shores"
+.SUBTITLE "A Romance Novel"
+.AUTHOR "Rosemary Winspeare"
+.DRAFT 1 \" Ignored because COPYSTYLE is FINAL
+.REVISION 2 \" Ignored because COPYSTYLE is FINAL
+\#
+\# Docstyle macros
+\#
+.DOCTYPE NAMED "Outline"
+.PRINTSTYLE TYPESET
+\#
+\# Additional style macros
+\#
+.NUMBER_PARAHEADS
+\#
+.START
+.PP
+.PARAHEAD "A note on the setting"
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. Stet clita kasd gubergren, no sea takimata sanctus est.
+At vero eos et accusam et justo duo do\%lo\%re et ea rebum.
+.PP
+Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum
+dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
+voluptua.
+.PP
+Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
+ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At
+vero, eos et accusam et justo duo do\%lo\%res et ea rebum. Consetetur
+sadipscing elitr, sed diam nonumy.
+.LINEBREAK
+.PP
+.PARAHEAD "About historical personnages"
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren, no sea takimata sanctus est. Tempor invidunt ut
+labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. Consetetur sadipscing elitr, sed diam nonumy
+eirmod tempor invidunt ut labore et do\%lo\%re magna. Tempor invidunt
+ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+.NUMBER_HEADS
+.NUMBER_SUBHEADS
+.HEAD "Part One"
+.SUBHEAD "Chapter 1"
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
+sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
+ali\%quyam erat, sed diam voluptua. At vero eos et accusam et
+justo duo do\%lo\%res et ea rebum.
+.PP
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren, no sea takimata sanctus est. Lorem ipsum dolor sit
+amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
+invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+Stet clita kasd gubergren, no sea takimata sanctus est.
+.SUBHEAD "Chapter 2"
+.PP
+Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum
+dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
+voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea rebum.
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
+sed diam nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re magna
+ali\%quyam erat, sed diam voluptua at vero.
+.SUBHEAD "Chapter 3"
+.PP
+Eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd
+gubergren, no sea takimata sanctus est lorem ipsum dolor sit amet.
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et
+ea rebum.
+.HEAD "Part Two"
+.SUBHEAD "Chapter 4"
+.PP
+Stet clita kasd gubergren, no sea takimata sanctus est
+lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur
+sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
+et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+.PP
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren, no sea takimata sanctus est lorem ipsum dolor sit amet.
+.PP
+Nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et
+ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
+sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
+ali\%quyam erat, sed diam voluptua. At vero eos et accusam et justo
+duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no sea takimata
+sanctus est lorem ipsum dolor sit amet. Consetetur sadipscing elitr,
+sed diam nonumy eirmod tempor invidunt.
+.SUBHEAD "Chapter 5"
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
+diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
+ali\%quyam erat, sed diam voluptua. At vero eos et accusam et
+justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren,
+no sea takimata sanctus est lorem ipsum dolor sit amet.
+.PP
+Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
+ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero
+eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd
+gubergren, no sea takimata sanctus.
+.PP
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren. Sea takimata sanctus est lorem ipsum dolor
+sit amet. Accusam et justo duo do\%lo\%res et ea rebum
+.SPREAD
+\#
+\# This next bit ensures that the line "...end of sample outline" doesn't
+\# spring the page trap, which would deposit a header at the top of the
+\# next page. COLLATE doesn't print a page header on the first page of
+\# a collated document, but if the page trap has already deposited one
+\# there, COLLATE can't undo it. Hence, we turn the trap off
+\# (TRAP OFF), set the line, and put in an EL afterwards.
+\# Normally, all this isn't necessary when collating documents,
+\# but if you ever have the problem of a page header printing at the
+\# top of a collated document, this is how you get around it.
+\#
+.TRAP OFF
+.RIGHT
+\*[BD]\&...end of sample outline
+.EL
+.TRAP
+.COLLATE
+\#
+\# =====================================================================
+\#
+\# Next, two sample pages of a chapter, set in DRAFT style, showing
+\# the use of the EPIGRAPH BLOCK macro and the QUOTE macro.
+\#
+\# You'll notice that the starting page number of this "draft" is 1 (in
+\# roman numerals). COPYSTYLE DRAFT always numbers the first page of a
+\# document 1.
+\#
+\# Reference macros
+\#
+.TITLE "Lake Attica's Shores"
+.SUBTITLE "A Romance Novel"
+.AUTHOR "Rosemary Winspeare"
+.CHAPTER 1
+.DRAFT 1 \" Appears in the header because copystyle is DRAFT
+.REVISION 2 \" Appears in the header because copystyle is DRAFT
+\#
+\# Docstyle macros
+\#
+.DOCTYPE CHAPTER
+.COPYSTYLE DRAFT
+\#
+\# Additional style macros
+\#
+.EPIGRAPH_FONT I \" Epigraphs are set in roman by default
+\#
+.START
+.EPIGRAPH BLOCK
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua.
+.RIGHT
+\*[ROM]\(emJoseph E. Blough
+.EPIGRAPH OFF
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et
+ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est.
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Lorem ipsum
+dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
+voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea rebum.
+Stet clita kasd gubergren, no sea takimata sanctus est. At vero eos
+et accusam et justo duo do\%lo\%res et ea rebum.
+.PP
+Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum
+dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt.
+.PP
+"Consetetur sadipscing elitr," dixit ea.
+.PP
+"Sed diam nonumy eirmod tempor invidunt ut labore," dixit eum.
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. Consetetur sadipscing elitr, sed diam nonumy
+eirmod tempor invidunt ut labore et do\%lo\%re magna.
+.PP
+"Lorem ipsum dolor sit amet," dixit ea.
+.PP
+"At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren, no sea takimata sanctus est," dixit eum. "Sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua."
+.PP
+Consetetur sadipscing elitr, sed diam nonumy eirmod tempor:
+.QUOTE
+Invidunt ut labore et do\%lo\%re
+Magna ali\%quyam erat sed diam
+Voluptua stet clita kasd gubergren
+No sea takimata sanctus est.
+.QUOTE OFF
+.PP
+Justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no
+sea takimata sanctus est. Lorem ipsum dolor sit amet, consetetur
+sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
+et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+.PP
+"Stet clita kasd gubergren," dixit ea.
+.PP
+"No sea takimata sanctus est," dixit eum.
+.PP
+Nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. Aliquyam erat
+sed diam voluptua. At vero eos et accusam et justo, duo do\%lo\%res et
+ea rebum.
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re magna ali\%quyam
+erat, sed diam voluptua at vero. Stet clita kasd gubergren, no sea
+takimata sanctus est. Consetetur sadipscing elitr, sed diam nonumy
+eirmod tempor invidunt ut labore et do\%lo\%re magna.
+.PP
+Invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren, no sea takimata sanctus est. At vero eos et accusam et
+justo duo do\%lo\%res et ea rebum. Lorem ipsum dolor sit amet, consetetur
+sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
+et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero eos et
+accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren,
+no sea takimata sanctus est. At vero eos et accusam et justo duo
+do\%lo\%res et ea rebum.
+.RIGHT
+\*[BD]\&...end of sample chapter
+.COLLATE
+\#
+\# =====================================================================
+\#
+\# Finally, a sample academic article, set in two columns with a
+\# 1.5-pica gutter between them. This example also uses
+\# BLOCKQUOTES, FOOTNOTES, and the relatively rare BREAK_QUOTE. In
+\# addition, it's set RECTO_VERSO, with differing left and right
+\# margins that alternate from page to page. (The header also
+\# flips from right to left, which you can see on the 2nd and 3rd
+\# pages).
+\#
+\# In order to accomodate the narrow measure of the columns, there's also
+\# a demonstration of things you can change with both the typesetting
+\# macros and the document processing "control" macros.
+\#
+\# Reference macros
+\#
+.TITLE "CONTROL EQUALS CHAOS"
+.SUBTITLE "\*[ALD1]The Psychological and Auditory Impact of Serial vs. Aleatoric Music\*[RLD1]"
+.AUTHOR "Joe Chang" "and" "Brad Hegel Connors"
+\#
+\# Docstyle macros
+\#
+.DOCTYPE DEFAULT
+.COPYSTYLE FINAL
+\#
+\# Additional style macros -- general type parameters
+\#
+.L_MARGIN 6P
+.R_MARGIN 4P+6p
+.PT_SIZE 10
+.AUTOLEAD 1.5
+\#
+\# Additional style macros -- change mom's default behaviour
+\#
+.RECTO_VERSO
+.PAGENUM 1
+.HEADER_LEFT "Chang, Connors" \" Because we have two authors
+.COLUMNS 2 1P+6p
+.SUBTITLE_SIZE +1.5
+.AUTHOR_SIZE +.5
+.DOCHEADER_LEAD +2p
+.HEADER_SIZE +1
+.PARA_INDENT 1P
+.SUBHEAD_SIZE +0
+.BLOCKQUOTE_FAMILY H
+.BLOCKQUOTE_SIZE -2
+.QUOTE_INDENT 2
+.NUMBER_HEADS OFF \" Because we turned them on in the first example
+.NUMBER_SUBHEADS OFF \" Ibid
+\#
+.START
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr. Sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. Ali\%quyam
+erat, sed diam voluptua.
+.PP
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren no sea takimata. Sanctus est, lorem ipsum dolor sit
+amet. Consetetur sadipscing elitr, sed diam nonumy. Eirmod tempor
+invidunt ut labore et do\%lo\%re magna ali\%quyam erat. Sed diam voluptua
+at vero eos et accusam et justo.
+\#
+.BLOCKQUOTE
+Stet clita kasd gubergren, no sea takimata sanctus est lorem.
+Ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
+eirmod tempor. Invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua at vero. Eos et accusam et justo duo do\%lo\%res et
+ea rebum stet clita.\c
+.FOOTNOTE \" Note the use of \c, above, to keep the word and footnote marker together.
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr.
+.FOOTNOTE OFF
+.BLOCKQUOTE OFF
+\#
+.PP
+Duo do\%lo\%res et ea rebum, stet clita kasd gubergren. No sea takimata
+sanctus est lorem ipsum dolor sit amet, consetetur sadipscing elitr.
+Sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
+ali\%quyam. Erat sed diam voluptua at. Vero eos et accusam et justo
+duo do\%lo\%res et ea rebum stet. Clita kasd gubergren no sea takimata
+sanctus est.
+.PP
+Nonumy eirmod tempor invidunt, ut labore et do\%lo\%re magna ali\%quyam
+erat? At vero eos et accusam et justo duo do\%lo\%res et ea. Rebum stet
+clita kasd gubergren no sea takimata sanctus. Est lorem ipsum dolor
+sit amet. Sadipscing\c
+.FOOTNOTE
+Sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
+ali\%quyam erat, sed diam voluptua.
+.FOOTNOTE OFF
+elitr sed diam nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re
+magna ali\%quyam erat, sed diam voluptua. At vero eos et accusam et
+justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren no sea.
+\#
+.SUBHEAD "Schoenberg\(em" "The Origins of Serial Pitch Organization"
+\#
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea
+rebum. Stet clita kasd gubergren, no sea takimata sanctus est lorem.
+Ipsum dolor sit amet consetetur sadipscing. Elitr, sed diam nonumy,
+eirmod tempor invidunt ut labore et do\%lo\%re magna. Ali\%quyam erat sed
+diam voluptua, at vero eos. Et accusam et justo duo do\%lo\%res et ea
+rebum stet clita kasd gubergren lorem ipsum. Dolor sit amet
+consetetur, sadipscing elitr, sed diam. Nonumy eirmod tempor invidunt
+ut labore et do\%lo\%re. Magna ali\%quyam erat sed diam voluptua at vero.
+Eos et accusam et justo duo do\%lo\%res et ea rebum stet clita kasd.
+Gubergren no sea takimata sanctus est.
+.PP
+Amet consetetur sadipscing elitr sed diam nonumy eirmod. Tempor
+invidunt ut labore. Et dolor\%e magna ali\%quyam erat, sed diam voluptua,
+at vero. Eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren.
+.PP
+No sea takimata\c
+.FOOTNOTE
+Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
+ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+.FOOTNOTE OFF
+sanctus est lorem. Ipsum dolor sit amet, consetetur
+sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
+et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero eos et
+accusam et justo duo do\%lo\%res et ea rebum amet. Consetetur sadipscing
+elitr sed diam nonumy eirmod tempor invidunt ut labore, et do\%lo\%re
+magna ali\%quyam erat. Sed diam voluptua, at vero, eos et accusam et
+justo duo do\%lo\%res et ea rebum.
+\#
+.SUBHEAD "Messiaen to Stockhausen\(em" "The Quest for Absolute Control"
+\#
+.PP
+Vero eos et accusam et justo duo do\%lo\%res et ea rebum amet:
+.QUOTE
+Eirmod tempor invidunt
+Ut labore et do\%lo\%re magna ali\%quyam erat
+Sed diam voluptua
+At vero eos et accusam et justo duo do\%lo\%res.
+.QUOTE OFF
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr
+sed diam. Nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna.
+Aliquyam erat, sed diam voluptua at vero eos et accusam. Et
+justo duo do\%lo\%res et ea rebum stet.
+.PP
+Elitr sed diam nonumy eirmod tempor. Invidunt ut labore et do\%lo\%re
+magna ali\%quyam erat sed. Diam voluptua at vero eos et accusam et
+justo duo do\%lo\%res et ea rebum.
+\#
+.BLOCKQUOTE
+Sanctus est lorem ipsum dolor sit amet, consetetur sadipscing. Elitr,
+sed diam nonumy eirmod tempor, invidunt ut labore et do\%lo\%re magna
+ali\%quyam. Erat sed diam voluptua, at vero eos et accusam et justo
+duo do\%lo\%res et ea rebum amet. Consetetur sadipsc-
+.BREAK_QUOTE \" Needed because blockquote crosses page AND contain footnotes
+ing elitr sed diam nonumy eirmod tempor invidunt ut labore.
+Et do\%lo\%re magna ali\%quyam erat, sed diam voluptua, at vero.
+Eos et accusam et justo duo.\c
+.FOOTNOTE
+Labore et do\%lo\%re magna ali\%quyam erat sed diam voluptua.
+.FOOTNOTE OFF
+.BLOCKQUOTE OFF
+\#
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr. Sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna.
+.PP
+Nonumy eirmod tempor invidunt, ut labore et do\%lo\%re magna ali\%quyam
+erat? At vero eos et accusam et justo duo do\%lo\%res et ea. Rebum stet
+clita kasd gubergren no sea takimata sanctus. Est lorem ipsum dolor
+sit amet. Sadipscing elitr sed diam nonumy eirmod tempor invidunt.
+Ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum.
+Stet clita kasd gubergren no sea. Ali\%quyam erat, sed diam voluptua.
+\#
+.SUBHEAD "John Cage\(em" "Leaving It All to Chance"
+\#
+.PP
+Sit amet, consetetur sadipscing elitr, sed diam nonumy. Eirmod tempor
+invidunt ut labore et do\%lo\%re magna. Ali\%quyam erat, sed diam
+voluptua at vero. Eos et accusam et justo duo dolores et ea rebum.
+Stet clita kasd gubergren, no sea taki\%mata sanctus est.
+.PP
+Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
+ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero
+eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd
+gubergren, no sea takimata sanctus est lorem. Ipsum dolor sit amet,
+consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
+ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero
+eos et accusam et justo duo do\%lo\%res et ea rebum.
+.PP
+Stet clita kasd gubergren. No sea takimata sanctus est lorem ipsum
+dolor sit. Amet consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor. Invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
+voluptua, at vero. Eos et accusam et justo duo do\%lo\%res et ea rebum.
+Stet clita kasd gubergren, no sea takimata. Sanctus est lorem ipsum
+dolor sit amet consetetur. Sadipscing elitr sed diam nonumy eirmod
+tempor invidunt. Ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
+voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea rebum.
+\#
+.BLOCKQUOTE
+.PP
+Stet clita kasd gubergren no sea. Takimata sanctus est lorem ipsum
+dolor sit amet. Consetetur sadipscing elitr sed diam nonumy eirmod
+tempor invidunt ut labore et do\%lo\%re. Magna ali\%quyam\c
+.FOOTNOTE
+Diam nonumy eirmod tempor invidunt ut labore.
+.FOOTNOTE OFF
+erat, sed diam
+voluptua at vero eos et accusam. Et justo duo do\%lo\%res et ea rebum,
+stet clita kasd gubergren, no sea takimata.
+.PP
+Sanctus est lorem ipsum. Dolor sit amet consete-
+.BREAK_QUOTE \" Needed because blockquote crosses column AND contain footnotes
+tur sadipscing elitr. Sed diam nonumy eirmod tempor invidunt ut
+labore. Et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+At vero eos et accusam et justo duo. Dolores et ea rebum stet clita
+kasd gubergren no sea.
+.PP
+Takimata lorem ipsum dolor sit amet consetetur sadipscing elitr.
+Sed diam, nonumy eirmod tempor, invidunt ut labore et do\%lo\%re magna.
+Aliquyam erat sed diam voluptua. At vero eos et accusam et
+justo.\c
+.FOOTNOTE
+At vero eos et accusam et justo duo.
+.FOOTNOTE OFF
+.BLOCKQUOTE OFF
+\#
+.PP
+Duo do\%lo\%res et ea rebum, stet clita kasd gubergren, no sea takimata
+sanctus. Est lorem ipsum. Dolor sit amet, consetetur sadipscing elitr,
+sed diam nonumy. Eirmod tempor invidunt ut labore et do\%lo\%re magna
+ali\%quyam erat, sed diam voluptua. At vero eos et accusam.
+.PP
+Et justo duo do\%lo\%res et ea rebum stet clita kasd. Gubergren
+no sea takimata sanctus est. Lorem ipsum dolor sit amet, consetetur
+sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
+et dolore magna ali\%quyam erat, sed diam voluptua. At vero eos et
+accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren,
+no sea takimata sanctus est.
+\#
+.SUBHEAD "Beyond Cage\(em" "Catching the Midnight Train"
+\#
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr. Sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. Ali\%quyam
+erat, sed diam voluptua.
+.PP
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren no sea takimata. Sanctus est, lorem ipsum dolor sit
+amet. Consetetur sadipscing elitr, sed diam nonumy. Eirmod tempor
+invidunt ut labore et do\%lo\%re magna ali\%quyam erat. Sed diam voluptua
+at vero eos et accusam et justo.
+.PP
+Duo do\%lo\%res et ea rebum, stet clita kasd gubergren. No sea takimata
+sanctus est lorem ipsum dolor sit amet, consetetur sadipscing elitr.
+Sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
+ali\%quyam. Erat sed diam voluptua at. Vero eos et accusam et justo
+duo do\%lo\%res et ea rebum stet. Clita kasd gubergren no sea takimata
+sanctus est.
+.PP
+Nonumy eirmod tempor invidunt, ut labore et do\%lo\%re magna ali\%quyam
+erat? At vero eos et accusam et justo duo do\%lo\%res et ea. Rebum stet
+clita kasd gubergren no sea takimata sanctus. Est lorem ipsum dolor
+sit amet. Sadipscing\c
+.FOOTNOTE
+Sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
+ali\%quyam erat, sed diam voluptua.
+.FOOTNOTE OFF
+elitr sed diam nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re
+magna ali\%quyam erat, sed diam voluptua. At vero eos et accusam et
+justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren no sea
+takimata lorem. Ipsum dolor sit amet, consetetur sadipscing elitr.
+Sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna.
+Ali\%quyam erat, sed diam voluptua. At vero eos et accusam et justo
+duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no sea
+takimata sanctus est.
+.RIGHT
+\*[BD]\&...end of sample article\*[PREV]
+.FINIS
diff --git a/contrib/groff/contrib/mom/examples/typewrite.mom b/contrib/groff/contrib/mom/examples/typewrite.mom
new file mode 100644
index 0000000..b293840d
--- /dev/null
+++ b/contrib/groff/contrib/mom/examples/typewrite.mom
@@ -0,0 +1,233 @@
+\# A sample of PRINTSTYLE TYPEWRITE. The file contains the sample
+\# outline and sample draft chapter found in the docprocessing_tyeset.mom
+\# file. Only two changes have been made: the printstyle (here,
+\# TYPEWRITE instead of the default TYPESET), and the header size
+\# in the sample chapter, reduced by 1 point in order to accomodate
+\# all three parts of the header. Other than that, the samples have
+\# been left alone so you can assess and get a feel for how PRINTSTYLE
+\# TYPEWRITE behaves.
+\#
+\# ====================================================================
+\#
+\# Sample outline using PRINTSTYLE TYPEWRITE
+\#
+\# Reference macros
+\#
+.TITLE "Lake Attica's Shores"
+.SUBTITLE "A Romance Novel"
+.AUTHOR "Rosemary Winspeare"
+.DRAFT 1 \" Ignored because COPYSTYLE is FINAL (the default)
+.REVISION 2 \" Ignored because COPYSTYLE is FINAL (the default)
+\#
+\# Docstyle macros
+\#
+.DOCTYPE NAMED "Outline"
+.PRINTSTYLE TYPEWRITE
+\#
+\# Additional style macros
+\#
+.NUMBER_PARAHEADS
+\#
+.START
+.PP
+.PARAHEAD "A note on the setting"
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. Stet clita kasd gubergren, no sea takimata sanctus est.
+At vero eos et accusam et justo duo do\%lo\%re et ea rebum.
+.PP
+Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum
+dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
+voluptua.
+.PP
+Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
+ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At
+vero, eos et accusam et justo duo do\%lo\%res et ea rebum. Consetetur
+sadipscing elitr, sed diam nonumy.
+.LINEBREAK
+.PP
+.PARAHEAD "About historical personnages"
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren, no sea takimata sanctus est. Tempor invidunt ut
+labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. Consetetur sadipscing elitr, sed diam nonumy
+eirmod tempor invidunt ut labore et do\%lo\%re magna. Tempor invidunt
+ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+.NUMBER_HEADS
+.NUMBER_SUBHEADS
+.HEAD "Part One"
+.SUBHEAD "Chapter 1"
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
+sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
+ali\%quyam erat, sed diam voluptua. At vero eos et accusam et
+justo duo do\%lo\%res et ea rebum.
+.PP
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren, no sea takimata sanctus est. Lorem ipsum dolor sit
+amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
+invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+Stet clita kasd gubergren, no sea takimata sanctus est.
+.SUBHEAD "Chapter 2"
+.PP
+Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum
+dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
+voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea rebum.
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
+sed diam nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re magna
+ali\%quyam erat, sed diam voluptua at vero.
+.SUBHEAD "Chapter 3"
+.PP
+Eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd
+gubergren, no sea takimata sanctus est lorem ipsum dolor sit amet.
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et
+ea rebum.
+.HEAD "Part Two"
+.SUBHEAD "Chapter 4"
+.PP
+Stet clita kasd gubergren, no sea takimata sanctus est
+lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur
+sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
+et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+.PP
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren, no sea takimata sanctus est lorem ipsum dolor sit amet.
+.PP
+Nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et
+ea rebum. Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
+sed diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
+ali\%quyam erat, sed diam voluptua. At vero eos et accusam et justo
+duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no sea takimata
+sanctus est lorem ipsum dolor sit amet. Consetetur sadipscing elitr,
+sed diam nonumy eirmod tempor invidunt.
+.SUBHEAD "Chapter 5"
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
+diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
+ali\%quyam erat, sed diam voluptua. At vero eos et accusam et
+justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren,
+no sea takimata sanctus est lorem ipsum dolor sit amet.
+.PP
+Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt
+ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero
+eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd
+gubergren, no sea takimata sanctus.
+.PP
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren. Sea takimata sanctus est lorem ipsum dolor
+sit amet. Accusam et justo duo do\%lo\%res et ea rebum
+.BR
+.RIGHT
+\*[BD]\&...end of sample outline \" Notice that TYPEWRITE ignores the \*[BD]
+.COLLATE
+\#
+\# =====================================================================
+\#
+\# Sample chapter in COPYSTYLE DRAFT using PRINTSTYLE TYPEWRITE
+\#
+\# Reference macros
+\#
+.TITLE "Lake Attica's Shores"
+.SUBTITLE "A Romance Novel"
+.AUTHOR "Rosemary Winspeare"
+.CHAPTER 1
+.DRAFT 1 \" Appears in the header because copystyle is DRAFT
+.REVISION 2 \" Appears in the header because copystyle is DRAFT
+\#
+\# Docstyle macros
+\#
+.DOCTYPE CHAPTER
+.COPYSTYLE DRAFT
+\#
+\# Additional style macros
+\#
+.EPIGRAPH_FONT I \" TYPEWRITE underlines italics
+.HEADER_SIZE -1
+\#
+.START
+.EPIGRAPH BLOCK
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua.
+.RIGHT
+\*[ROM]\(emJoseph E. Blough
+.EPIGRAPH OFF
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. At vero eos et accusam et justo duo do\%lo\%res et
+ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est.
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Lorem ipsum
+dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam
+voluptua. At vero eos et accusam et justo duo do\%lo\%res et ea rebum.
+Stet clita kasd gubergren, no sea takimata sanctus est. At vero eos
+et accusam et justo duo do\%lo\%res et ea rebum.
+.PP
+Stet clita kasd gubergren, no sea takimata sanctus est. Lorem ipsum
+dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
+tempor invidunt.
+.PP
+"Consetetur sadipscing elitr," dixit ea.
+.PP
+"Sed diam nonumy eirmod tempor invidunt ut labore," dixit eum.
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua. Consetetur sadipscing elitr, sed diam nonumy
+eirmod tempor invidunt ut labore et do\%lo\%re magna.
+.PP
+"Lorem ipsum dolor sit amet," dixit ea.
+.PP
+"At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren, no sea takimata sanctus est," dixit eum. "Sed diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
+sed diam voluptua."
+.PP
+Consetetur sadipscing elitr, sed diam nonumy eirmod tempor:
+.QUOTE
+Invidunt ut labore et do\%lo\%re
+Magna ali\%quyam erat sed diam
+Voluptua stet clita kasd gubergren
+No sea takimata sanctus est.
+.QUOTE OFF
+.PP
+Justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren, no
+sea takimata sanctus est. Lorem ipsum dolor sit amet, consetetur
+sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
+et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+.PP
+"Stet clita kasd gubergren," dixit ea.
+.PP
+"No sea takimata sanctus est," dixit eum.
+.PP
+Nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna. Aliquyam erat
+sed diam voluptua. At vero eos et accusam et justo, duo do\%lo\%res et
+ea rebum.
+.PP
+Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
+nonumy eirmod tempor invidunt. Ut labore et do\%lo\%re magna ali\%quyam
+erat, sed diam voluptua at vero. Stet clita kasd gubergren, no sea
+takimata sanctus est. Consetetur sadipscing elitr, sed diam nonumy
+eirmod tempor invidunt ut labore et do\%lo\%re magna.
+.PP
+Invidunt ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
+At vero eos et accusam et justo duo do\%lo\%res et ea rebum. Stet clita
+kasd gubergren, no sea takimata sanctus est. At vero eos et accusam et
+justo duo do\%lo\%res et ea rebum. Lorem ipsum dolor sit amet, consetetur
+sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore
+et do\%lo\%re magna ali\%quyam erat, sed diam voluptua. At vero eos et
+accusam et justo duo do\%lo\%res et ea rebum. Stet clita kasd gubergren,
+no sea takimata sanctus est. At vero eos et accusam et justo duo
+do\%lo\%res et ea rebum.
+.RIGHT
+\*[BD]\&...end of sample chapter \" Notice that TYPEWRITE ignores the \*[BD]
diff --git a/contrib/groff/contrib/mom/groff_mom.man b/contrib/groff/contrib/mom/groff_mom.man
new file mode 100644
index 0000000..dea6a91
--- /dev/null
+++ b/contrib/groff/contrib/mom/groff_mom.man
@@ -0,0 +1,95 @@
+.ig
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2002 Free Software Foundation, Inc.
+written by Werner Lemberg <wl@gnu.org>
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHORS, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+..
+.
+.mso www.tmac
+.
+.de TQ
+.br
+.ns
+.TP \\$1
+..
+.
+.TH GROFF_MOM @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
+.
+.
+.SH NAME
+.
+groff_mom \- groff `mom' macros
+.
+.
+.SH SYNOPSIS
+.
+.B groff
+.B \-mom
+[
+.IR files .\|.\|.\&
+]
+.br
+.B groff
+.B \-m\ mom
+[
+.IR files .\|.\|.\&
+]
+.
+.
+.SH DESCRIPTION
+.
+.B mom
+(\[lq]my own macros\[rq], \[lq]my other macros\[rq], \[lq]maximum
+overdrive macros\[rq], .\|.\|.\&) is a macro set for groff, designed
+primarily to format documents for PostScript output.
+.PP
+.B mom
+provides two categories of macros: macros for typesetting and macros
+for document processing.
+The typesetting macros provide access to groff's typesetting power in
+ways that are simpler to master and to use than groff's primitives.
+The document processing macros provide customizable markup
+\[lq]tags\[rq] that allow the user to design and output
+professional-looking documents with a minimum of typesetting
+intervention.
+.PP
+mom comes with her own (very) complete documentation in HTML format.
+.
+.SH FILES
+.TP
+.B om.tmac
+\[en] the main macro file
+.TQ
+.B mom.tmac
+\[en] a wrapper file that calls om.tmac directly.
+.
+.TP
+.URL @HTMLDOCDIR@/momdoc/toc.html @HTMLDOCDIR@/momdoc/toc.html
+\[en] entry point to the HTML documentation
+.
+.TP
+.B @EXAMPLEDIR@/*.mom
+\[en] example files using mom
+.
+.
+.SH AUTHOR
+.
+.B mom
+was written by
+.MTO df191@ncf.ca "Peter Schaffter" .
+Please send bug reports to the
+.MTO bug-groff@gnu.org "groff bug mailing list"
+or directly to the author.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff --git a/contrib/groff/contrib/mom/mom.tmac b/contrib/groff/contrib/mom/mom.tmac
new file mode 100644
index 0000000..b1b0b18
--- /dev/null
+++ b/contrib/groff/contrib/mom/mom.tmac
@@ -0,0 +1,3 @@
+.\" mom.tmac
+.\"
+.do mso om.tmac
diff --git a/contrib/groff/contrib/mom/momdoc/appendices.html b/contrib/groff/contrib/mom/momdoc/appendices.html
new file mode 100644
index 0000000..64d3b8f
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/appendices.html
@@ -0,0 +1,185 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Appendices</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="typemacdoc.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="APPENDICES">
+ <h2 align="center"><u>APPENDICES</u></h2>
+</a>
+
+<ul>
+ <li><a href="#MOREDOC">Further notes on this documentation</a>
+ <li><a href="#CODENOTES">Some reflections on mom, with an apology</a>
+ <li><a href="reserved.html">List of reserved words</a>
+ <li><a href="#CONTACT">Contact the author</a>
+</ul>
+
+<a name="MOREDOC">
+ <h2><u>Further notes on this documentation</u></h2>
+</a>
+
+Some <strong>mom</strong> users are sure to ask: &quot;Why is this
+documentation in html? If <strong>mom</strong>'s so great, why not
+typeset the whole thing to show her off? And if groff's so great,
+why not write a man page?&quot;
+<p>
+Valid questions, to be sure, and <strong>mom</strong> has
+answers. (Okay -- I have answers, but I speak for
+<strong>mom</strong>.)
+<p>
+The documentation is in html because I still find it the best tool
+for navigating lengthy manuals. Html, with its anchors and links,
+came into being precisely so people could do something they'd never
+been able to with the printed word: instantly track down internal
+and external references in a document.
+<p>
+To me, it's essential that people reading <strong>mom</strong>'s
+documentation never have difficulty finding precisely the macro
+they need for a particular task. Equally, when reading up on
+a macro, they should never be presented with terms or other
+macro names for which they cannot instantly find accurate explanations.
+Short of having written the documentation in TeX for the info browser
+(and TeX bloat is one of the reasons I prefer to typeset with groff),
+I can think of no better way to achieve the kind of truly useful
+documentation I wanted than html.
+<p>
+Another reason for html is that working with <strong>mom</strong>
+necessarily involves creating files inside a text editor. I use
+elvis, a truly fabulous vi clone that does a terrific job of rendering
+basic (text only) html. I may have written <strong>mom</strong>,
+but I still regularly call on her documentation. Elvis, with its
+html capabilities, lets me write and format <strong>mom</strong>
+documents AND peruse her documentation, clicking on links as
+necessary, without ever leaveing the comfy confines of my
+text editor.
+<p>
+Not everyone, of course, uses an editor with html capabilities.
+For them, firing up a browser is obviously necessary for reading
+<strong>mom</strong>'s documentation. Browsers being what they are,
+and not everyone on the globe having the cash for muscle machines
+to run Galeon, or Konqueror, or Mozilla, or Netscape, their browser
+needs to be one that's fast and light -- Lynx, in other words.
+<p>
+Some <strong>mom</strong> users may notice the absence of graphics,
+frames, and (for the most part) tables in this documentation.
+The reason is simple: Lynx. People who, for whatever reason (choice
+or necessity), use Lynx to read the documentation must be able to make
+sense of it. All of it. Graphical examples of <strong>mom</strong>
+in action might have made some parts of the documenation easier to
+write, but would have excluded Lynx-only users. And it goes
+without saying that the documentation looks fine if you're
+reading it in a graphical browser.
+<br>
+<hr>
+
+<!=====================================================================>
+
+<a name="CODENOTES">
+ <h2><u>Some reflections on mom</u></h2>
+</a>
+
+<p>
+<strong>Mom</strong>, as a complete macro set, had her origins
+in a &quot;library&quot; of groff routines I wrote over the
+years to handle various aspects of typesetting and document
+processing that weren't adequately covered by ms, me, mm, and so
+on. Typically, I'd use the library to cobble together macro
+sets for new challenges as they came my way.
+<p>
+If, as Eric Raymond asserts, open source begins with a programmer
+scratching a personal itch, then <strong>mom</strong> can truly be
+called open source, even if, a mere humble set of macros standing on
+the shoulders of a giant named troff, she isn't programming at all.
+<p>
+As a writer living in a perpeptual state of penury, all the computers
+I've ever owned have been hand-me-downs -- several generations
+out-of-date and &quot;resource challenged&quot;. Disk space has
+always been an issue, as has processor speed and available RAM.
+One of the reasons I run Linux is that it has helped enormously to
+get the most out of my poor little boxes.
+<p>
+In Linux-land, the choice of typesetting systems basically comes down
+to groff or TeX. Both are wonderful -- monumental achievements if you
+ask me -- and both have their own particular strengths. However, for
+people in my financial position (and there are millions of us around
+the globe, in both developed and developing countries), TeX and groff
+have one big difference: size. TeX is huge. Even its most ardent
+supporters agree it suffers from bloat, on top of being complex and
+unwieldy to manage. Groff is tiny by comparison, occupying minimal
+disk space and having only a small memory footprint while at the same
+time being flexible and powerful, typographically speaking. I've run
+it successfully on a 386 with 8 megs of RAM and a 250 meg hard disk.
+<p>
+However, groff has always had a liability: it's incredibly geeky.
+Owing to its very long history, it -- and its &quot;power users&quot;
+-- have remained stuck in a time warp. Most common macro packages
+still look as they did in those decades when memory was exorbitantly
+expensive, and every byte mattered. Documentation -- not always
+easy to find -- is written as if all readers are computer whizzes,
+or at least have a university degree in one of the higher sciences.
+<p>
+By no means a stupid man, nor unfamiliar with the precepts of
+programming, I've more than once torn my hair out over the terseness and
+ambiguity of groff's documentation. Making sense of certain primitives
+has often involved days of testing, interpreting the documentation
+instead of just using the primitive.
+<p>
+For some time now, groff users and macro writers have had the
+option to use &quot;long&quot; names, yet have mostly chosen not to.
+With long names, it's possible to create macro sets that are humanly
+readable and easy to interpret, encouraging development and evolution.
+What's more, the macros themselves need not be terse, intimidating,
+and easily forgotten 1- or 2-letter commands inserted in the body
+of a document. They can be sensible and helpful to everyone, groff
+newbies and old hands alike.
+<p>
+<strong>Mom</strong>'s macro file, om.tmac, uses long names, aliases,
+and a host of other groff goodies that have become part of the
+whole groff picture under the unflagging guidance of groff's current
+maintainer, Werner Lemberg. Nearly every macro, number register and
+string is &quot;recognisable&quot; simply by its name. The file is
+heavily commented. A consistent, if idiosyncratic, indenting style
+is used as well, significantly improving readability. Anyone
+wanting to futz around with <strong>mom</strong>'s macros should be
+able to do so with a minimum of head scratching.
+<p>
+To all you groff-jocks out there who love the aracana of
+groff-as-it-used-to-be, I apologise. To everyone else, I simply say:
+Welcome, and enjoy.
+<br>
+<hr>
+
+<!=====================================================================>
+
+<a name="CONTACT">
+ <h2><u>Contact the author</u></h2>
+</a>
+
+<p>
+If you have any questions or comments about <strong>mom</strong>,
+suggestions to make, criticisms to offer, or bugs to report, use the
+groff mailing list at
+<a href="mailto:groff@ffii.org">groff@ffii.org</a>
+(subscription information available
+<a href="http://ffii.org/mailman/listinfo/groff/">here</a>)
+or contact me, Peter Schaffter, directly at
+<p>
+<address align="center">
+ <a href="mailto:df191@ncf.ca">df191@ncf.ca</a>
+</address>
+
+<p>
+<hr>
+<a href="typemacdoc.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/cover.html b/contrib/groff/contrib/mom/momdoc/cover.html
new file mode 100644
index 0000000..11b6a85
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/cover.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Document processing, creating a cover page</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="letters.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="rectoverso.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="COVER">
+ <h2 align="center"><u>CREATING A COVER PAGE</u></h2>
+</a>
+
+<p>
+At present, <strong>mom</strong> provides no mechanism for
+automatically generating cover pages. It's a situation not likely
+to change, given that what's needed on document covers changes from
+document to document, both in terms of style and content. And,
+more often than not, what goes on covers is matter of personal taste.
+<p>
+If you want a document to begin with a cover page, typeset the cover
+(using the
+<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>).
+At the end, invoke
+<a href="typesetting.html#NEWPAGE">NEWPAGE</a>,
+then set up your document <em>in full</em> (see
+<a href="docprocessing.html#DOCPROCESSING_TUT">Tutorial -- Setting up a mom document</a>),
+invoking
+<a href="docprocessing.html#START">START</a>
+as usual once you're done. The cover page (and any typesetting
+commands on it) will have no effect on <strong>mom</strong>'s
+processing of the document itself, the first page of which, moreover,
+will be numbered &quot;1&quot; unless you instruct her otherwise
+with
+<a href="headfootpage.html#PAGENUMBER">PAGENUMBER</a>.
+
+<p>
+<hr>
+<a href="letters.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="rectoverso.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/definitions.html b/contrib/groff/contrib/mom/momdoc/definitions.html
new file mode 100644
index 0000000..be39315
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/definitions.html
@@ -0,0 +1,653 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Definitions and Terms</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="using.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="intro.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="TERMS">
+ <h1 align="center"><u>DEFINITIONS OF TERMS USED IN THIS MANUAL</u></h1>
+</a>
+
+<a href="#TERMS_TYPESETTING">Typesetting Terms</a>
+<br>
+<a href="#TERMS_GROFF">Groff Terms</a>
+<br>
+<a href="#TERMS_MOM">Mom Document Processing Terms</a>
+<p>
+I use a number of typesetting-specific and groff-specific terms
+throughout this documentation, as well as a few terms that apply
+to <strong>mom</strong> herself. To make life easier, I'll explain
+them here. Refer back to this section should you encounter a word
+or concept you're not familiar with. Words in these definitions that
+are defined elsewhere in this section are marked with asterisks.
+<br>
+<hr>
+
+<a name="TERMS_TYPESETTING">
+ <h2><u>Typesetting terms</u></h2>
+</a>
+
+<ul>
+ <li><a href="#TERMS_ASCENDER">Ascender</a>
+ <li><a href="#TERMS_BASELINE">Baseline</a>
+ <li><a href="#TERMS_BALLOTBOX">Ballot box</a>
+ <li><a href="#TERMS_BULLET">Bullet</a>
+ <li><a href="#TERMS_CAPHEIGHT">Cap-height</a>
+ <li><a href="#TERMS_DESCENDER">Descender</a>
+ <li><a href="#TERMS_DISCRETIONARYHYPHEN">Discretionary hyphen</a>
+ <li><a href="#TERMS_DROPCAP">Drop cap</a>
+ <li><a href="#TERMS_EM">Em/en</a>
+ <li><a href="#TERMS_FAMILY">Family</a>
+ <li><a href="#TERMS_FIGURESPACE">Figure space/Digit space</a>
+ <li><a href="#TERMS_FIXEDWIDTHSPACE">Fixed width space</a>
+ <li><a href="#TERMS_FONT">Font</a>
+ <li><a href="#TERMS_FORCE">Force justify</a>
+ <li><a href="#TERMS_JUST">Justify/justification</a>
+ <li><a href="#TERMS_GUTTER">Gutter</a>
+ <li><a href="#TERMS_KERN">Kerning</a>
+ <li><a href="#TERMS_KERNUNIT">Kern Units</a>
+ <li><a href="#TERMS_LEADING">Lead/leading</a>
+ <li><a href="#TERMS_LEADER">Leaders</a>
+ <li><a href="#TERMS_LIGATURES">Ligature</a>
+ <li><a href="#TERMS_PICASPOINTS">Picas/Points</a>
+ <li><a href="#TERMS_PS">Point Size</a>
+ <li><a href="#TERMS_QUAD">Quad</a>
+ <li><a href="#TERMS_RAG">Rag</a>
+ <li><a href="#TERMS_SOLID">Solid/set solid</a>
+ <li><a href="#TERMS_TRACKKERNING">Track kerning/Line kerning</a>
+ <li><a href="#TERMS_UNBREAKABLESPACE">Unbreakable space</a>
+ <li><a href="#TERMS_WORDSPACE">Word space</a>
+ <li><a href="#TERMS_XHEIGHT">x-height</a>
+</ul>
+<dl>
+
+<dt><a name="TERMS_ASCENDER"><em>Ascender</em></a>
+<dd>The portion of a letter that extends above the bowl. For example,
+the letters a, c, and e have no ascenders. The letters b, d, and h
+do.
+
+<dt><a name="TERMS_BASELINE"><em>Baseline</em></a>
+<dd>The imaginary line on which the bottoms of capital letters and the
+bowls of lower case letters rest.
+
+<dt><a name="TERMS_BALLOTBOX"><em>Ballot box</em></a>
+<dd>An unfilled square, usually <strong>*cap-height</strong> in size,
+typically placed beside items in a checklist.
+
+<dt><a name="TERMS_BULLET"><em>Bullet</em></a>
+<dd>A small, filled circle typically found beside items or points in
+a list.
+
+<dt><a name="TERMS_CAPHEIGHT"><em>Cap-height</em></a>
+<dd>The height of the tallest capital letter in a given
+<strong>*font</strong> at the current <strong>*point
+size</strong>.
+
+<dt><a name="TERMS_DESCENDER"><em>Descender</em></a>
+<dd>The portion of a letter that extends beneath the
+<strong>*baseline</strong> (j, q, y are letters with descenders).
+
+<dt><a name="TERMS_DISCRETIONARYHYPHEN"><em>Discretionary hyphen</em></a>
+<dd>A symbol inserted between two syllables of a word that indicates to a
+typesetting program the legal hyphenation points in the word. Normally,
+if hyphenation is turned on, groff knows where to hyphenate words.
+However, hyphenation being what it is (in English, at any rate),
+groff doesn't always get it right. Discretionary hyphens make sure
+it does. In the event that the word doesn't need to be hyphenated
+at all, groff leaves them alone. In groff, the discretionary hyphen is
+entered with
+<p>
+<pre>
+ \%
+</pre>
+
+(backslash followed by a percent).
+
+<dt><a name="TERMS_DROPCAP"><em>Drop cap</em></a>
+<dd>A large, usually upper-case letter that introduces the first
+paragraph of a document or section thereof. The top of the drop
+cap usually lines up with the top of the first line of the
+paragraph, and typically &quot;drops&quot; several lines lower.
+Text adjacent to the drop cap is indented to the right of the
+letter until the bottom of the drop cap is reached, at which
+point text reverts to the left margin.
+
+<dt><a name="TERMS_EM"><em>Em/en</em></a>
+<dd>A relative measurement equal to the width of the letter M at a
+given <strong>*point size</strong> in a given <strong>*font</strong>.
+Since most Ms are designed square, an em is usually (but sometimes
+erroneously) considered to be the same size as the current point size
+(i.e. if the point size of the type is 12, one em equals 12 points).
+An en is equal to the width of a letter N (historically 2/3 of an em,
+although groff treats an en as 1/2 of an em). Typically, ems and
+ens are used to measure indents, or to define the length of dashes
+(long hyphens).
+
+<dt><a name="TERMS_FAMILY"><em>Family</em></a>
+<dd>The collective name by which a collection of
+<strong>*fonts</strong> are known, e.g. Helvetica, Times Roman,
+Garamond.
+
+<dt><a name="TERMS_FIGURESPACE"><em>Figure space/Digit space</em></a>
+<dd>A <strong>*fixed width space</strong> that has the width of one digit. Used for
+aligning numerals in, say, columns or numbered lists. In groff,
+the figure space is entered with
+<p>
+<pre>
+ \0
+</pre>
+
+(backslash followed by a zero).
+
+<dt><a name="TERMS_FIXEDWIDTHSPACE"><em>Fixed width space</em></a>
+<dd>Equal to <strong>*word space</strong>, but does not expand or
+contract when text is <strong>*justified</strong>. In groff, fixed
+width space is entered with
+<p>
+<pre>
+ \&lt;space&gt;
+</pre>
+
+where &lt;space&gt; means "hit the spacebar on your keyboard."
+
+<dt><a name="TERMS_FONT"><em>Font</em></a>
+<dd>The specific style of type within a <strong>*family</strong>,
+e.g. roman, italic. Groff understands four fonts within any given
+family: roman, italic, bold, and bold italic.
+
+<dt><a name="TERMS_FORCE"><em>Force justify
+</em></a>
+<dd>Sometimes, in <strong>*justified</strong> text, a line needs to be
+broken short of the right margin. Force justifying means telling a
+typesetting program (like groff) that you want the line broken early
+AND that you want the line's word spacing stretched to force the line
+flush with the right margin.
+
+<dt><a name="TERMS_GUTTER"><em>Gutter</em></a>
+<dd>The vertical whitespace separating columns of type.
+
+<dt><a name="TERMS_JUST"><em>Justify/justification</em></a>
+<dd>Lines of type are justified when they're flush at both the left and
+right margins. Justification is the act of making both margins flush.
+Some people use the terms "left justified" and "right justified"
+to mean type where only the left (or right) margins align. I don't.
+See <strong>*quad</strong>.
+
+<dt><a name="TERMS_KERN"><em>Kerning</em></a>
+<dd>Moving pairs of letters closer together to remove excess
+whitespace between them. In the days before phototypesetting,
+type was set from small, rectangular blocks of wood or metal, each
+block having exactly one letter. Because the edge of each block
+determined the edge of each letter, certain letter combinations (TA,
+for example) didn't fit together well and had to be morticed by hand
+to bring them visually closer. Modern typesetting systems usually
+take care of kerning automatically, but they're far from perfect.
+Professional typesetters still devote a lot of time to fitting letters
+and punctuation together properly.
+
+<dt><a name="TERMS_KERNUNIT"><em>Kern Units</em></a>
+<dd>A relative distance equal to 1/36 of the current
+<strong>*point size</strong>. Used between individual letters
+for <strong>*kerning</strong>. Different typesetting systems use
+different values (1/54 is popular), and sometimes call kern units by
+a different name.
+<p>
+<strong>Experts:
+<br></strong>A kern unit has nothing to do with groff
+machine units.
+
+<dt><a name="TERMS_LEADING"><em>Lead/leading</em></a>
+<dd>The distance from the <strong>*baseline</strong> of one line of
+type to the line of type immediately beneath it. Pronounced "ledding."
+Also called line spacing. Usually measured in <strong>*points</strong>.
+<p>
+<em>In case you're interested...</em> In previous centuries,
+lines of type were separated by thin strips of -- you guessed it
+-- lead. Lines of type that had no lead between them were said to
+be &quot;set solid.&quot; Once you began separating them with strips
+of lead, they were said to be &quot;leaded&quot;, and the spacing was
+expressed in terms of the number of <strong>*points</strong> of lead.
+For this reason, &quot;leading&quot; and &quot;line spacing&quot;
+aren't, historically speaking, synonymous. If type was set 10 on 12,
+for example, the leading was 2 points, not 12. Nowadays, however,
+the two terms are used interchangeably to mean the distance from
+baseline to baseline.
+
+<dt><a name="TERMS_LEADER"><em>Leaders</em></a>
+<dd>Single characters used to fill lines, usually to their end.
+So called because they &quot;lead&quot; the eye from one element
+of the page to another. For example, in the following (brief)
+Table of Contents, the periods (dots) are leaders.
+<p>
+<pre>
+ Foreword............... 2
+ Chapter 1.............. 5
+ Chapter 2.............. 38
+ Chapter 3.............. 60
+</pre>
+
+<dt><a name="TERMS_LIGATURES"><em>Ligature</em></a>
+<dd>Ligatures are letters joined together to form a single character.
+The commonest are fi, fl, ff, ffi and ffl. Others are ae and oe.
+Occasionally, one sees an st ligature, but this is archaic and
+quite rare.
+
+<dt><a name="TERMS_PICASPOINTS"><em>Picas/Points</em></a>
+<dd>There are twelve points in a pica, and six picas in an inch
+(hence 72 points to the inch). In the same way that gem-dealers
+have always used their own system of measurement for weight (carats),
+typographers have always used their own system of measurement for type.
+
+<dt><a name="TERMS_PS"><em>Point Size</em></a>
+<dd>The nominal size of type, measured in <strong>*points</strong>,
+from the bottom of the longest <strong>*descender</strong> to the top
+of the highest <strong>*ascender</strong>. In reality, type is always
+fractionally smaller than its point size.
+
+<dt><a name="TERMS_QUAD"><em>Quad</em></a>
+<dd>When only one margin of type is flush, lines of type are quadded in
+the direction of the flush margin. Therefore, quad left means the
+left margin is flush, the right isn't. Quad right means the right
+margin is flush, the left isn't. Quad center means neither the left
+nor the right margin is flush; rather, lines of type are quadded on
+both sides so that type appears centered on the page.
+
+<dt><a name="TERMS_RAG"><em>Rag</em></a>
+<dd>Describes a margin that isn't flush. Rag right means the right
+margin isn't flush. Rag left means the left margin isn't flush.
+The expression "flush left/rag right" is sometimes used to describe
+type that is <strong>*quadded</strong> left.
+
+<dt><a name="TERMS_SOLID"><em>Solid/set solid</em></a>
+<dd>When no <strong>*lead</strong> is added between lines of type
+(i.e. the <strong>*point size</strong> and linespacing are the
+same), the lines are said to be &quot;set solid.&quot;
+
+<dt><a name="TERMS_TRACKKERNING"><em>Track kerning/Line kerning</em></a>
+<dd>Sometimes, it's advantageous to increase or decrease the amount of
+space between every letter in a line by an equal (usually small)
+amount, in order to fit more (or fewer) characters on the line.
+The correct term is letter spacing, but track kerning and line kerning
+(and sometimes, just "kerning") have come to mean the same thing.
+
+<dt><a name="TERMS_UNBREAKABLESPACE"><em>Unbreakable space</em></a>
+<dd>Equal to <strong>*word space</strong>, however words separated by
+an unbreakable space will always be kept together on the same line.
+Expands and contracts like word space. Useful for proper names, which
+should never be broken. In groff, unbreakable space is entered with
+<p>
+<pre>
+ \~
+</pre>
+
+(backslash followed by a tilde).
+
+<dt><a name="TERMS_WORDSPACE"><em>Word space</em></a>
+<dd>The amount of whitespace between words. When text is
+<strong>*justified</strong>, word space expands or contracts to make
+the margins flush.
+
+<dt><a name="TERMS_XHEIGHT"><em>x-height</em></a>
+<dd>The height of a lower case letter x in a given font at a given
+point size. Generally used to mean the average height of the bowl
+of lower case letters.
+</dl>
+<hr>
+
+<a name="TERMS_GROFF">
+ <h2><u>Groff terms</u></h2>
+</a>
+
+<ul>
+ <li><a href="#TERMS_ALIAS">Alias</a>
+ <li><a href="#TERMS_ARGUMENTS">Arguments</a>
+ <li><a href="#TERMS_COMMENTLINES">Comment lines</a>
+ <li><a href="#TERMS_CONTROLLINES">Control Lines</a>
+ <li><a href="#TERMS_FILLED">Filled lines</a>
+ <li><a href="#TERMS_INLINES">Inline escapes</a>
+ <li><a href="#TERMS_INPUTLINE">Input line</a>
+ <li><a href="#TERMS_MACROS">Macros</a>
+ <li><a href="#TERMS_UNITS">Machine units</a>
+ <li><a href="#TERMS_NUMERICARGUMENT">Numeric argument</a>
+ <li><a href="#TERMS_OUTPUTLINE">Output line</a>
+ <li><a href="#TERMS_PRIMITIVES">Primitives</a>
+ <li><a href="#TERMS_STRINGARGUMENT">String Argument</a>
+ <li><a href="#TERMS_UNITOFMEASURE">Unit of measure</a>
+ <li><a href="#TERMS_ZEROWIDTHCHARACTER">Zero-width character</a>
+</ul>
+<dl>
+
+<dt><a name="TERMS_ALIAS"><em>Alias</em></a>
+<dd>A <strong>*macro</strong> invoked by a name different from its
+&quot;official&quot; name. For example, the official name of the
+macro to change <strong>*family</strong> is <strong>FAMILY</strong>.
+Its alias is <strong>FAM</strong>. Aliases may be created for any
+macro (via the
+<a href="goodies.html#ALIAS">ALIAS</a>
+macro) provided the alias uses a name not already taken
+by the <strong>mom</strong> macros or one of the groff
+<strong>*primitives</strong>. For a complete list of alias names
+you must not use, see the
+<a href="reserved.html#RESERVED">list of reserved words</a>.
+
+<dt><a name="TERMS_ARGUMENTS"><em>Arguments</em></a>
+<dd>Parameters or information needed by a <strong>*macro</strong>
+to do its job. For example, in the macro
+<p>
+<pre>
+ .PT_SIZE 12
+</pre>
+
+&quot;12&quot; is the argument. In the macro
+<p>
+<pre>
+ .QUAD LEFT
+</pre>
+
+LEFT is the argument. Arguments are separated from macros by spaces.
+Some macros require several arguments; each is separated by a space.
+
+<dt><a name="TERMS_COMMENTLINES"><em>Comment Lines</em></a>
+<dd><strong>*Input lines</strong> introduced with the comment character
+<p>
+<pre>
+ \#
+</pre>
+
+When processing output, groff silently ignores everything on the
+line after the comment character.
+
+<dt><a name="TERMS_CONTROLLINES"><em>Control Lines</em></a>
+<dd>Instructions to groff that appear on a line by themselves,
+which means that &quot;control lines&quot; are either
+<strong>*macros</strong> or <strong>*groff primitives</strong>.
+Control lines begin with a period or, occasionally, an apostrophe.
+
+<dt><a name="TERMS_FILLED"><em>Filled lines/fill mode</em></a>
+<dd>Automatic <strong>*justification</strong> or
+<strong>*quadding</strong>. In fill mode, the ends of lines as they
+appear in your text editor are ignored. Instead, words from adjoining
+<strong>*input lines</strong> are added one at a time to the output
+line until no more words fit. Then, depending whether text is to
+be <strong>*justified</strong> or <strong>*quadded</strong> (left,
+right, or center), and depending on whether automatic hyphenation
+is turned on, groff attempts to hyphenate the last word, or, barring
+that, spreads and breaks the line (when justification is turned on) or
+breaks and quads the line (when quadding is turned on).
+<p>
+<a name="TERMS_NOFILL"></a>
+Nofill mode (non-filled text) means that groff respects the ends
+of lines as they appear in your text editor.
+
+<dt><a name="TERMS_INLINES"><em>Inline escapes</em></a>
+<dd>Instructions issued to groff that appear as part of an
+<strong>*input line</strong> (as opposed to <strong>*macros</strong>,
+which must appear on a line by themselves). Inline escapes are always
+introduced by the backslash character. For example,
+<p>
+<pre>
+ A line of text with the word T\*[BU 2]oronto in it
+</pre>
+
+contains the inline escape \*[BU 2] (which means &quot;move the letter
+'o' 2 <strong>*kern units</strong> closer to the letter 'T'&quot;).
+<p>
+<strong>Mom</strong>'s inline escapes always take the form
+<strong>\*[</strong><i>ESCAPE</i><strong>]</strong>, where <i>ESCAPE</i>
+is composed of capital letters, sometimes followed immediately
+by a digit, sometimes followed by a space and a <strong>*numeric
+argument</strong>. <strong>Groff</strong>'s escapes begin with the
+backslash character but typically have no star and are in lower case.
+For example, the <strong>mom</strong> escapes to move forward 6 points
+on a line are either
+<p>
+<pre>
+ \*[FP6]&nbsp;&nbsp;or&nbsp;&nbsp;\*[FWD 6p]
+</pre>
+
+while the <strong>groff</strong> escape for the same thing is
+<p>
+<pre>
+ \h'6p'
+</pre>
+
+<dt><a name="TERMS_INPUTLINE"><em>Input line</em></a>
+<dd>A line of text as it appears in your text editor.
+
+<dt><a name="TERMS_MACROS"><em>Macros</em></a>
+<dd>Instructions embedded in a document that determine how groff processes
+the text for output. <strong>mom</strong>'s macros always begin with a
+period, on a line by themselves, and must be typed in capital letters.
+Typically, macros contain complex commands issued to groff -- behind
+the scenes -- via groff <strong>*primitives</strong>.
+
+<dt><a name="TERMS_UNITS"><em>Machine units</em></a>
+<dd>A machine unit is 1/1000 of a <strong>*point</strong> when the
+groff device is ps. (&quot;ps&quot; means &quot;PostScript&quot; --
+the default device for which groff prepares output, and the device for
+which <strong>mom</strong> was specifically designed.)
+
+<dt><a name="TERMS_NUMERICARGUMENT"><em>Numeric argument</em></a>
+<dd>An <strong>*argument</strong> that has the form of a digit.
+Numeric arguments can be built out of arithmetic expressions using
++, -, *, and / for plus, minus, times, and divided-by respectively.
+If a numeric argument requires a <strong>*unit of measure</strong>,
+a unit of measure must be appended to <em>every</em> digit in the
+argument. For example:
+<p>
+<pre>
+ .ALD 1i-1v
+</pre>
+
+<strong>NOTE:</strong> groff does not respect the order of operations,
+but rather evaluates arithmetic expressions from left to right.
+Parentheses must be used to circumvent this peculiarity. Not to
+worry, though. The likelihood of more than just the occasional plus
+or minus sign when using <strong>mom</strong>'s macros is slim.
+
+<dt><a name="TERMS_OUTPUTLINE"><em>Output line</em></a>
+<dd>A line of text as it appears in output copy.
+
+<dt><a name="TERMS_PRIMITIVES"><em>Primitives</em></a>
+<dd>The two-letter, lower case instructions groff uses as its
+native command language, and out of which macros are built.
+
+<dt><a name="TERMS_STRINGARGUMENT"><em>String Argument</em></a>
+<dd>Technically, any <strong>*argument</strong> that is not numeric.
+In this documentation, string argument means an argument that requires
+the user to input text. For example, in the <strong>*macro</strong>
+<p>
+<pre>
+ .TITLE "My Pulitzer Novel"
+</pre>
+
+&quot;My Pulitzer Novel&quot; is a string argument.
+<p>
+Because string arguments must be enclosed by double-quotes, you can't
+use double-quotes as part of the string argument. If you need
+double-quotes to be part of a string argument, use the <strong>*inline
+escapes</strong> <strong> \(lq</strong> and <strong>\(rq</strong>
+(leftquote and rightquote respectively) in place of the double-quote
+character (").
+
+<dt><a name="TERMS_UNITOFMEASURE"><em>Unit of measure</em></a>
+<dd>The single letter after a <strong>*numeric argument</strong>
+that tells <strong>mom</strong> what measurement scale the argument
+should use. Commonly valid units are:
+<p>
+<table valign="baseline" summary="unitsofmeasure">
+<tr><td><strong>i</strong><td> = <td>inches
+<tr><td><strong>p</strong><td> = <td>points
+<tr><td><strong>P</strong><td> = <td>picas
+<tr><td><strong>c</strong><td> = <td>centimeters
+<tr><td><strong>m</strong><td> = <td>ems
+<tr><td><strong>n</strong><td> = <td>ens
+<tr><td><strong>v</strong><td> = <td>the current leading (line space)</td></tr>
+</table>
+<br>
+<dd>Units of measure must come immediately after the numeric argument (i.e.
+with no space between the argument and the unit of measure), like this:
+<p>
+<pre>
+ .ALD 2v
+ .LL 39P
+ .IL 1i
+</pre>
+
+The above example advances 2 line spaces and sets the line length to
+39 picas with a left indent of 1 inch.
+<p>
+<strong>IMPORTANT:</strong> Most <strong>mom</strong> macros
+that set the size or measure of something MUST be given a unit of
+measure. <strong>mom</strong>'s macros do not have default units
+of measure. There are a couple of exceptions, the most notable of
+which are <strong>PT_SIZE</strong> and <strong>LS</strong>. Both use
+<strong>*points</strong> as the default unit of measure, which means
+you don't have to append &quot;p&quot; to their argument.
+<p>
+You can enter decimal values for any unit of measure. Different units
+may be combined by adding them together (e.g. 1.5i+2m, which gives a
+measure of 1-1/2 inches plus 2 ems).
+<p>
+<strong>NOTE:</strong> a pica is composed of 12 points,
+therefore 12.5 picas is 12 picas and 6 points, not 12 picas
+and 5 points. If you want 12 picas and 5 points, you have to
+enter the measure as 12P+5p.
+
+<dt><a name="TERMS_ZEROWIDTHCHARACTER"><em>Zero-width character</em></a>
+<dd>The <strong>*inline escape</strong> that allows you to print a
+literal period, apostrophe and, if <strong>*output lines</strong>
+are <strong>*filled</strong>, a space that falls at the beginning of
+an <strong>*input line</strong>. It looks like this:
+<p>
+<pre>
+ \&amp;
+</pre>
+
+(backslash followed by an ampersand).
+<p>
+Normally, groff interprets a period (or an apostrophe) at the beginning
+of an input line as meaning that what follows is a <strong>*control
+line</strong>. In fill modes, groff treats a space at the beginning
+of an input line as meaning &quot;start a new line and put a space
+at the beginning of it.&quot; If you want groff to interpret periods
+and apostrophes at the beginning of input lines literally (ie. print
+them), or spaces at the beginning of input lines as just garden
+variety word spaces, you must start the line with the zero-width
+character.
+</dl>
+<hr>
+
+<a name="TERMS_MOM">
+ <h2><u>Mom's Document Processing Terms</u></h2>
+</a>
+
+<ul>
+ <li><a href="#TERMS_BLOCKQUOTE">Blockquote</a>
+ <li><a href="#TERMS_CONTROLMACRO">Control macro</a>
+ <li><a href="#TERMS_DOCHEADER">Docheader</a>
+ <li><a href="#TERMS_EPIGRAPH">Epigraph</a>
+ <li><a href="#TERMS_FOOTER">Footer</a>
+ <li><a href="#TERMS_HEAD">Head</a>
+ <li><a href="#TERMS_HEADER">Header</a>
+ <li><a href="#TERMS_LINEBREAK">Linebreak</a>
+ <li><a href="#TERMS_PARAHEAD">Paragraph head</a>
+ <li><a href="#TERMS_QUOTE">Quote</a>
+ <li><a href="#TERMS_RUNNING">Running text</a>
+ <li><a href="#TERMS_SUBHEAD">Subhead</a>
+ <li><a href="#TERMS_TOGGLE">Toggle</a>
+</ul>
+<dl>
+<dt><a name="TERMS_BLOCKQUOTE"><em>Blockquote</em></a>
+<dd>Cited material other than <strong>*quotes</strong>.
+Typically set at a smaller point size than paragraph text, indented
+from the left and right margins. Blockquotes are
+<strong>*filled</strong>.
+
+<dt><a name="TERMS_CONTROLMACRO"><em>Control macro</em></a>
+<dd>Macros used in
+<a href="docprocessing.html#DOCPROCESSING">document processing</a>
+to control/alter the appearance of document elements (e.g. heads,
+quotes, footnotes, <strong>*headers</strong>, etc.).
+
+<dt><a name="TERMS_DOCHEADER"><em>Document header/docheader</em></a>
+<dd>Document information (title, subtitle, author, etc) output
+at the top of page one.
+
+<dt><a name="TERMS_EPIGRAPH"><em>Epigraph</em></a>
+<dd>A short, usually cited passage that appears at the
+beginning of a chapter, story, or other document.
+
+<dt><a name="TERMS_FOOTER"><em>Footer/page footer</em></a>
+<dd>Document information (frequently author and title) output in
+the bottom margin of pages <em>after</em> page one. Not to be
+confused with footnotes, which are considered part of
+<strong>*running text</strong>.
+
+<dt><a name="TERMS_HEAD"><em>Head</em></a>
+<dd>A title that introduces a major section of a document.
+
+<dt><a name="TERMS_HEADER"><em>Header/page header</em></a>
+<dd>Document information (frequently author and title) output in
+the top margin of pages <em>after</em> page one.
+<p>
+<strong>NOTE:</strong> In terms of content and style, headers and
+<strong>*footers</strong> are the same; they differ only in their
+placement on the page. In most places in this documentation,
+references to the content or style of headers applies equally to
+footers.
+
+<dt><a name="TERMS_LINEBREAK"><em>Linebreak/author linebreak</em></a>
+<dd>A horizontal gap in <strong>*running text</strong>, frequently
+set off by typographic symbols such as asterisks or daggers. Used to
+indicate a shift in the content of a document (e.g. a scene change in a
+short story).
+
+<dt><a name="TERMS_PARAHEAD"><em>Paragraph head</em></a>
+<dd>A title joined to the body of a paragraph; hierarchically one
+level beneath <strong>*subheads</strong>.
+
+<dt><a name="TERMS_QUOTE"><em>Quote</em></a>
+<dd>A quote, to <strong>mom</strong>, is a line-for-line setting
+of quoted material (e.g. poetry, song lyrics, or a snippet of
+programming code). You don't have to use
+<a href="typesetting.html#BR">BR</a>
+with quotes.
+
+<dt><a name="TERMS_RUNNING"><em>Running text</em></a>
+<dd>In a document formatted with <strong>mom</strong>, running
+text means text that forms the body of the document, including
+elements such as heads and subheads. <strong>*Docheaders,
+*headers, *footers</strong> and page numbers are NOT part of
+running text.
+
+<dt><a name="TERMS_SUBHEAD"><em>Subhead</em></a>
+<dd>A title used to introduce secondary sections of a document;
+hierarchically one level beneath sections introduced by
+<strong>*heads</strong>.
+
+<dt><a name="TERMS_TOGGLE"><em>Toggle</em></a>
+<dd>A macro or tag that, when invoked without an argument,
+begins something or turns a feature on, and, when invoked with
+ANY argument, ends something or turns a feature off. See
+<a href="intro.html#TOGGLE_EXAMPLE">Example 3</a>
+of the section
+<a href="intro.html#MACRO_ARGS">How to read macro arguments</a>.
+</dl>
+
+<p>
+<hr>
+<a href="using.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="intro.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/docelement.html b/contrib/groff/contrib/mom/momdoc/docelement.html
new file mode 100644
index 0000000..2b9a535
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/docelement.html
@@ -0,0 +1,2320 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Document Processing, element tags</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="headfootpage.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="docprocessing.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="DOCELEMENT">
+ <h2 align="center"><u>THE DOCUMENT ELEMENT TAGS</u></h2>
+</a>
+
+<ul>
+ <li><a href="#DOCELEMENT_INTRO">Introduction to the document element tags</a>
+ <ul>
+ <li><a href="#DOCELEMENT_CONTROL">Control macros -- changing defaults for document element tags</a>
+ <li><a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
+ </ul>
+ <li><a href="#INDEX_DOCELEMENT">Index of document element tags</a>
+</ul>
+
+<a name="DOCELEMENT_INTRO">
+ <h2><u>Introduction to the document element tags</u></h2>
+</a>
+
+Once you've completed the setup for a document (see
+<a href="docprocessing.html#DOCPROCESSING_TUT">Setting up a mom document</a>),
+formatting it is a snap. Simply invoke the appropriate tag for
+each document element as you need it. The tags are macros that
+tell <strong>mom</strong>, &quot;This is a paragraph, this
+is a subhead, this is a footnote,&quot; and so on.
+<p>
+The list of tags is actually quite small -- ideal for the users
+<strong>mom</strong> brought herself into being for (see
+<a href="intro.html#INTRO_INTRO">Who mom is meant for</a>).
+However, the list of macros that control the appearance of the
+tags upon output is extensive. Generally, for each tag,
+there are
+<a href="definitions.html#TERMS_CONTROLMACRO">control macros</a>
+for the tag's family, font and point size. Where appropriate, there
+are macros to control leading, indents, quad and special features
+as well.
+<p>
+<strong>Mom</strong> has tasteful defaults for all the tags, hence you
+only use the control macros when you want to change the way
+she does things. This is usually done prior to
+<a href="docprocessing.html#START">START</a>,
+but can, in fact, be done at any time in the course of a document.
+Any change to a tag's style affects all subsequent invocations of
+the tag.
+
+<a name="DOCELEMENT_CONTROL"><h3><u>Control macros -- changing defaults</u></h3></a>
+
+<p>
+The control macros for document processing tags let you
+&quot;design&quot; the look of all the parts of your documents --
+should you wish. At a bare minimum, all tags have macros to
+change <strong>mom</strong>'s defaults for family, font
+and point size. Where appropriate, there are macros to control
+leading, indents and quad as well.
+<p>
+In addition, many tags have special macros to control features that
+are pertinent to those tags alone. Have a look at the section dealing
+with any particular tag to find out what macros control the tag,
+and what <strong>mom</strong>'s defaults for the tag are.
+<p>
+The control macros may be used at any time during the course of
+a document (i.e. before or after
+<a href="docprocessing.html#START">START</a>). The changes you
+make alter all subsequent invocations of the affected tag until
+you make another change, either by passing new arguments to the
+tag's control macro, or toggling a particular feature of the tag on
+or off.
+<p>
+And don't forget: the
+<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
+can be used at any time, including inside
+<a href="definitions.html#TERMS_TOGGLE">toggle</a>
+tags (affecting only that particular invocation of the tag).
+Equally,
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>
+can be used in tags that take
+<a href="definitions.html#TERMS_STRINGARGUMENT">string arguments.</a>
+<p>
+<strong>IMPORTANT NOTE:</strong> The family, font, point size and
+leading control macros have no effect in
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+which sets EVERYTHING in Courier roman, 12/24 (i.e. 12-point type on
+a linespace of 24 points).
+<p>
+Please also note that the defaults listed
+with the control macros apply only to
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>
+unless a default for <strong>TYPEWRITE</strong> is also given.
+<p>
+<strong>A WORD OF ADVICE:</strong> Get familiar with
+<strong>mom</strong> at her default settings before exploring the
+control macros. Put her through her paces. She how she behaves.
+Get to know what she feels like and how she looks, both in your text
+editor and on the printed page. Then, if you don't like something,
+use this documentation to find the precise macro you need to change it.
+There are tons of control macros. Reading up on them and trying to
+remember them all might lead you to think that <strong>mom</strong>
+is complex and unwieldy, which is not only untrue, but would offend
+her mightily.
+
+<a name="CONTROL_MACRO_ARGS"><h3><u>Arguments to the control macros</u></h3></a>
+
+<h3>Family and font</h3>
+The arguments to the control macros that end in
+<strong>_FAMILY</strong> or <strong>_FONT</strong> are the same
+as for
+<a href="typesetting.html#FAMILY">FAMILY</a>
+and
+<a href="typesetting.html#FONT">FT</a>.
+
+<h3>Point size</h3>
+Control macros that end in <strong>_SIZE</strong> always take
+the form <kbd>+digit</kbd> or <kbd>-digit</kbd> where digit is
+the number of
+<a href="definitions.html#TERMS_PICASPOINTS">points</a>
+larger (+) or smaller (-) than the point size of paragraphs
+you want the document element to be. For example, to change
+subheads to 1-1/2 points larger than the type in paragraphs, do
+<p>
+<pre>
+ .SUBHEAD_SIZE +1.5
+</pre>
+
+There's no need for a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+with the <strong>_SIZE</strong> control macros; points is assumed.
+
+<h3>Lead/linespacing</h3>
+Control macros that end in <strong>_AUTOLEAD</strong> take the
+same argument as
+<a href="typesetting.html#AUTOLEAD">AUTOLEAD</a>,
+viz. a digit that represents the number of points to add to the
+tag's point size to arrive at its
+<a href="definitions.html#TERMS_LEADING">lead</a>.
+For example, to set footnotes
+<a href="definitions.html#TERMS_SOLID">solid</a>, do
+<p>
+<pre>
+ .FOOTNOTE_AUTOLEAD 0
+</pre>
+
+To set footnotes with a 1-point lead (i.e. with the line spacing
+one point greater than the footnote's point size), do
+<p>
+<pre>
+ .FOOTNOTE_AUTOLEAD 1
+</pre>
+
+<a name="CONTROL_INDENTS"><h3>Indents</h3></a>
+Except for <strong>PARA_INDENT</strong>, the argument to the control
+macros that end
+in <strong>_INDENT</strong> is always a single digit (whole numbers
+only; no decimal fractions) with no
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+appended to it. The digit represents by how much you want the
+size of the paragraph first-line indent multiplied to achieve the
+correct indent for a particular tag.
+
+<h3>Quad/justification style</h3>
+Control macros that end in <strong>_QUAD</strong> take the same
+arguments as
+<a href="typesetting.html#QUAD">QUAD</a>.
+
+
+<a name="INDEX_DOCELEMENT"><h3><u>Document element tags list</u></h3></a>
+<ul>
+ <li><a href="#EPIGRAPH_INTRO">Epigraphs</a>
+ <ul>
+ <li><a href="#EPIGRAPH">EPIGRAPH</a>
+ <li><a href="#EPIGRAPH_CONTROL">Epigrah control</a>
+ </ul>
+ <li><a href="#PP_INTRO">Paragraphs</a>
+ <ul>
+ <li><a href="#PP">PP</a>
+ <li><a href="#PP_CONTROL">Paragraph control</a>
+ </ul>
+ <li><a href="#HEAD_INTRO">Main heads</a>
+ <ul>
+ <li><a href="#HEAD">HEAD</a>
+ <li><a href="#HEAD_CONTROL">Head control</a>
+ </ul>
+ <li><a href="#SUBHEAD_INTRO">Subheads</a>
+ <ul>
+ <li><a href="#SUBHEAD">SUBHEAD</a>
+ <li><a href="#SUBHEAD_CONTROL">Subhead control</a>
+ </ul>
+ <li><a href="#PARAHEAD_INTRO">Paragraph heads</a>
+ <ul>
+ <li><a href="#PARAHEAD">PARAHEAD</a>
+ <li><a href="#PARAHEAD_CONTROL">Parahead control</a>
+ </ul>
+ <li><a href="#LINEBREAK_INTRO">Linebreaks (author linebreaks)</a>
+ <ul>
+ <li><a href="#LINEBREAK">LINEBREAK</a>
+ <li><a href="#LINEBREAK_CHAR">Linebreak character</a>
+ </ul>
+ <li><a href="#QUOTE_INTRO">Quotes (line for line)</a>
+ <ul>
+ <li><a href="#QUOTE">QUOTE</a>
+ <li><a href="#QUOTE_CONTROL">Quote control</a>
+ </ul>
+ <li><a href="#BLOCKQUOTE_INTRO">Blockquotes (cited material)</a>
+ <ul>
+ <li><a href="#BLOCKQUOTE">BLOCKQUOTE</a>
+ <li><a href="#BLOCKQUOTE_CONTROL">Blockquote control</a>
+ </ul>
+ <li><a href="#FOOTNOTE_INTRO">Footnotes</a>
+ <ul>
+ <li><a href="#FOOTNOTE">FOOTNOTE</a>
+ <li><a href="#FOOTNOTE_CONTROL">Footnote control</a>
+ </ul>
+ <li><a href="#ENDNOTE_INTRO">Endnotes</a>
+ <ul>
+ <li><a href="#ENDNOTE">ENDNOTE</a>
+ <li><a href="#ENDNOTE_CONTROL">Endnote control</a>
+ </ul>
+ <li><a href="#FINIS_INTRO">Document termination</a>
+ <ul>
+ <li><a href="#FINIS">FINIS</a>
+ <li><a href="#FINIS_STRING">Finis control</a> -- changing the FINIS string
+ </ul>
+</ul>
+<hr>
+
+
+<!====================================================================>
+
+<a name="EPIGRAPH_INTRO"><h2><u>Epigraphs</u></h2></a>
+<ul>
+ <li><a href="#EPIGRAPH">Tag: EPIGRAPH</a>
+ <li><a href="#EPIGRAPH_CONTROL">Epigraph control macros</a>
+</ul>
+<p>
+<a href="definitions.html#TERMS_EPIGRAPH">Epigraphs</a>
+color, flavour, or comment on the document they precede. Typically,
+they are centered at the top of a document's first page (underneath the
+title) and set in a smaller point size than that of paragraph text.
+<p>
+By default, <strong>mom</strong> sets epigraphs centered and
+<a href="definitions.html#TERMS_NOFILL">unfilled</a>;
+this lets you input them on a line for line basis. This behaviour
+can be changed to accomodate
+<a href="definitions.html#TERMS_FILLED">filled</a>
+epigraph &quot;blocks.&quot;
+<br>
+
+<!---EPIGRAPH--->
+
+<hr width="66%" align="left">
+<p>
+<a name="EPIGRAPH">
+ Macro: <strong>EPIGRAPH</strong> <var>&lt;toggle&gt; | [ BLOCK ]</var></a>
+</a>
+
+<p>
+<strong>EPIGRAPH</strong> is a toggle, used like this:
+<p>
+<pre>
+ .EPIGRAPH
+ &lt;text of epigraph&gt;
+ .EPIGRAPH OFF
+</pre>
+
+<strong>OFF</strong>, above, could be anything -- say, Q or X --
+since any argument other than <strong>BLOCK</strong> turns it off.
+<p>
+If given the argument <strong>BLOCK</strong>, <strong>EPIGRAPH</strong>
+sets epigraphs
+<a href="definitions.html#TERMS_FILLED">filled</a>,
+justified or quadded in the same direction as paragraphs, indented
+equally from both the left and right margins.
+<p>
+If a block-style epigraph runs to more than one paragraph (unlikely,
+but conceivable), you <strong>MUST</strong> introduce every paragraph
+-- <u>INCLUDING THE FIRST!!!</u> -- with the
+<a href="#PP">PP</a>
+tag.
+<p>
+<strong>NOTE:</strong> <strong>EPIGRAPH</strong> should only be
+used at the top of a document (i.e. just after
+<a href="docprocessing.html#START">START</a>)
+or after
+<a href="#HEAD_INTRO">heads</a>. The latter is not especially
+recommended, but it does work. In all other places where you
+want quotes or cited text, use
+<a href="#QUOTE">QUOTE</a>
+or
+<a href="#BLOCKQUOTE">BLOCKQUOTE</a>.
+
+<a name="EPIGRAPH_CONTROL"><h3><u>Epigraph control macros</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+<pre>
+.EPIGRAPH_FAMILY default = prevailing document family; default is Times Roman
+.EPIGRAPH_FONT default = roman
+.EPIGRAPH_SIZE default = -1.5 (points)
+.EPIGRAPH_AUTOLEAD default = 2 points
+
+(The next two apply to &quot;block&quot; style epigraphs only)
+
+.EPIGRAPH_QUAD default = same as paragraphs
+.EPIGRAPH_INDENT* default = para indent x 3 (for typeset), x 2 (for typewrite)
+
+*Indent here refers to the indent from both the left and right margins
+ that centres the block style epigraph on the page.
+</pre>
+<hr>
+
+<!====================================================================>
+
+<a name="PP_INTRO"><h2><u>Paragraphs</u></h2></a>
+<ul>
+ <li><a href="#PP">Tag: PP</a>
+ <li><a href="#PP_CONTROL">Paragraph control macros</a>
+</ul>
+<p>
+The paragraph macro is the one you use most often. Consequently,
+it's one of most powerful, yet simplest to use -- just the letters
+<strong>PP</strong>. No arguments, nothing. Just <kbd>.PP</kbd>
+on a line by itself any time, in any document element, tells
+<strong>mom</strong> you want to start a new paragraph. The spacing
+and indent appropriate to where you are in your document are taken
+care of automatically.
+<p>
+By default, <strong>mom</strong> does not indent the first paragraph
+of a document, nor paragraphs that fall imediately after
+<a href="#HEAD_INTRO">heads</a>
+or
+<a href="#SUBHEAD_INTRO">subheads</a>.
+The first paragraphs of blockquotes and block-style epigraphs are
+also not indented. This behaviour can be changed with the control
+macro
+<a href="#PARA_INDENT_FIRST">INDENT_FIRST_PARAS</a>.
+<p>
+In contrast to some other macro packages, <strong>mom</strong> does not
+deposit a blank line between paragraphs. If you want her to do so, use
+the control macro <strong>PARA_SPACE</strong>. (I don't recommend
+using this macro with
+<a href="typesetting.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>.)
+<p>
+Note that <strong>mom</strong> does not provide &quot;orphan
+control&quot; for paragraphs (i.e. even if only one line of a paragraph
+fits at the bottom of a page, she will set it on that page). The
+reason for this is that writers of fiction often have single-line
+paragraphs (e.g. in dialogue). Groff's simplistic orphan control
+will break these one-liners -- if they fall at the bottom of the page
+-- to a new page, which is not what you want.
+<p>
+<strong>TIP:</strong> The last thing you want while you're writing
+and editing drafts of a document (particulary stories and chapters)
+is a text file cluttered up with <strong>PP</strong>'s. The visual
+interruption in the flow of text is a serious obstacle to creativity
+and critiquing.
+<p>
+I use the tab key on my keyboard to indent paragraphs when I'm writing,
+producing a text file that looks pretty much like what you see on
+a printed page. When it comes time to format and print the file,
+I run it through a sed script that (amongst other things) converts
+the character generated by the tab key (<kbd>^I</kbd>) into <code>.PP</code>
+(plus a new line), and pipe the output to groff for processing and
+printing.
+<p>
+Another solution is to insert a blank line between paragraphs.
+The blank lines can then be sedded out at print time as above, or,
+more conveniently, you can use the <code>.blm</code>
+<a href="definitions.html#TERMS_PRIMITIVES">primitive</a>
+(blank line macro) to instruct groff (and <strong>mom</strong>)
+that blank lines should be interpreted as <strong>PP</strong>'s.
+<p>
+<pre>
+ .blm PP
+</pre>
+tells groff that all blank lines are really the macro <strong>PP</strong>.
+<br>
+
+<!---PP--->
+
+<hr width="66%" align="left">
+<p>
+<a name="PP">
+ Macro: <strong>PP</strong>
+</a>
+
+<p>
+<strong>PP</strong> (on a line by itself, of course) tells mom to
+start a new paragraph. See
+<a href="#PP_INTRO">above</a>
+for more details. In addition to regular text paragraphs, you can
+use <strong>PP</strong> in
+<a href="#EPIGRAPH_INTRO">epigraphs</a>,
+<a href="#BLOCKQUOTE_INTRO">blockquotes</a>
+and
+<a href="#FOOTNOTE_INTRO">footnotes</a>.
+
+<a name="PP_CONTROL"><h3><u>Paragraph control macros</u></h3></a>
+<p>
+The <strong>PP</strong> being so important, and representing, as
+it were, the basis of everything that goes on in a document, its
+control is managed in a manner somewhat different from other document
+element tags.
+<p>
+<ol>
+ <li><a href="#PP_FAMILY">Family control</a>
+ <li><a href="#PP_FONT">Font control</a>
+ <li><a href="#PP_LEADING">Leading/linespacing control</a>
+ <li><a href="#PP_JUST_QUAD">Justification/quad control</a>
+ <li><a href="#PARA_INDENT">First-line indent control</a>
+ <li><a href="#PARA_INDENT_FIRST">Intitial paragraphs indent control</a>
+ <li><a href="#PP_SPACE">Paragraph spacing control</a>
+</ol>
+
+<a name="PP_FAMILY"><h3><u>1. Family</u></h3></a>
+The paragraph
+<a href="definitions.html#TERMS_FAMILY">family</a>
+is set with
+<a href="typesetting.html#FAMILY">FAMILY</a>
+prior to
+<a href="docprocessing.html#START">START</a>,
+or
+<a href="docprocessing.html#DOC_FAMILY">DOC_FAMILY</a>
+afterwards. Please note that both globally affect the family of
+every element in the document.
+<p>
+If you wish to change the family for regular
+text paragraphs only, invoke <strong>FAMILY</strong> immediately
+after <strong>PP</strong> in EVERY paragraph whose family you wish
+to differ from the prevailing document family.
+<p>
+<strong>Mom</strong>'s default paragraph (and document) family
+is Times Roman.
+
+<a name="PP_FONT"><h3><u>2. Font -- PP_FONT</u></h3></a>
+To change the
+<a href="definitions.html#TERMS_FONT">font</a>
+used in regular text paragraphs, use <code>.PP_FONT</code>,
+which takes the same argument as
+<a href="typesetting.html#FONT">FT</a>.
+<strong>PP_FONT</strong> may be used before or after
+<a href="docprocessing.html#START">START</a>.
+Only regular text paragraphs are affected; paragraphs in
+<a href="#EPIGRAPH_INTRO">epigraphs</a>,
+<a href="#BLOCKQUOTE_INTRO">blockquotes</a>
+and
+<a href="#FOOTNOTE_INTRO">footnotes</a>
+remain at their default setting (medium roman) unless you change them
+with the appropriate control macros.
+<p>
+<strong>Mom</strong>'s default paragraph font is medium roman.
+
+<a name="PP_LEADING"><h3><u>3.Leading</u></h3></a>
+The paragraph
+<a href="definitions.html#TERMS_LEADING">leading</a>
+is set with
+<a href="typesetting.html#LEADING">LS</a>
+prior to
+<a href="docprocessing.html#START">START</a>,
+or
+<a href="docprocessing.html#DOC_LEAD">DOC_LEAD</a>
+afterwards. Please note that either method globally affects the
+leading and spacing of every document element (except
+<a href="definitions.html#TERMS_HEADER">headers</a>
+and
+<a href="definitions.html#TERMS_FOOTER">footers</a>).
+<p>
+If you wish to change the leading of regular text paragraphs only,
+invoke <strong>LS</strong> immediately after <strong>PP</strong> in
+EVERY paragraph whose leading you wish to change.
+<p>
+<strong>HYPER-IMPORTANT NOTE:</strong> It is extremely unwise to change
+paragraph leading with <strong>LS</strong>, as it will, in all cases,
+screw up <strong>mom</strong>'s ability to balance the bottom margin
+of pages.
+<p>
+<strong>Mom</strong>'s default paragraph leading (document leading)
+is 16 points, adjusted to fill the page.
+
+<a name="PP_JUST_QUAD"><h3><u>4. Justification/quad</u></h3></a>
+The justification/quad-direction of regular text paragraphs (i.e.
+<a href="definitions.html#TERMS_JUST">justified</a>,
+or
+<a href="definitions.html#TERMS_FILLED">filled</a>
+and
+<a href="definitions.html#TERMS_QUAD">quadded</a>
+left/right/center) is set with
+<a href="typesetting.html#JUSTIFY">JUSTIFY</a>
+or
+<a href="typesetting.html#QUAD">QUAD</a>
+prior to
+<a href="docprocessing.html#START">START</a>,
+and with
+<a href="docprocessing.html#DOC_QUAD">DOC_QUAD</a>
+afterwards.
+<p>
+Please note that either method of setting the paragraph
+justification/quad-direction also affects
+<a href="#EPIGRAPH_INTRO">epigraphs</a>
+and
+<a href="#FOOTNOTE_INTRO">footnotes</a>,
+but not
+<a href="#BLOCKQUOTE_INTRO">blockquotes</a>
+(whose default is QUAD LEFT unless you change it with
+<a href="#BLOCKQUOTE">BLOCKQUOTE_QUAD</a>).
+The justification/quad-direction of epigraphs and footnotes may
+be changed with their own control macros.
+<p>
+If you wish to change the justification/quad-direction of
+individual paragraphs, use <strong>JUSTIFY</strong> or
+<strong>QUAD</strong> immediately after <strong>PP</strong>.
+Only the paragraph in question gets justified or quadded
+differently; subsequent paragraphs remain unaffected.
+<p>
+<strong>Mom</strong>'s default justification/quad-direction for
+paragraphs is justified for
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE_TYPESET</a>
+and quad left for
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE_TYPEWRITE</a>.
+
+<a name="PARA_INDENT"><h3><u>5. First-line indent -- PARA_INDENT</u></h3></a>
+The first-line indent of paragraphs is controlled by
+<strong>PARA_INDENT</strong>, which takes one argument: the size
+of the indent. <strong>PARA_INDENT</strong> may be used before
+or after
+<a href="docprocessing.html#START">START</a>.
+A
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+is required; fractional sizes are allowed. Thus, to set the paragraph
+indent to 4-1/2
+<a href="definitions.html#TERMS_EM">ems</a>, do
+<p>
+<pre>
+ .PARA_INDENT 4.5m
+</pre>
+
+In addition to establishing the basic first line-indent of
+paragraphs, <strong>PARA_INDENT</strong> also affects
+<a href="#EPIGRAPH_INTRO">epigraphs</a>,
+<a href="#QUOTE_INTRO">quotes</a>
+and
+<a href="#BLOCKQUOTE_INTRO">blockquotes</a>,
+whose overal indenting from the left and (where applicable) right
+margins is relative to <strong>PARA_INDENT</strong>. Furthermore, the
+first-line indent of paragraphs within these document elements (as well
+as footnotes) is also relative to <strong>PARA_INDENT</strong> (always
+1/2 of <strong>PARA_INDENT)</strong>), hence they are also affected.
+<p>
+<strong>Mom</strong>'s default <strong>PARA_INDENT</strong> is 2
+ems for
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE_TYPESET</a>
+and 3 picas (1/2 inch) for
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE_TYPEWRITE</a>.
+
+<a name="PARA_INDENT_FIRST"><h3><u>6. Indenting initial paragraphs -- INDENT_FIRST_PARAS</u></h3></a>
+By default, <strong>mom</strong> does not indent the first paragraph
+of a document, nor the first paragraph after a head or
+subhead, nor the first paragraphs of
+<a href="#EPIGRAPH_INTRO">epigraphs</a>,
+<a href="#BLOCKQUOTE_INTRO">blockquotes</a>
+or
+<a href="#FOOTNOTE_INTRO">footnotes</a>
+that run to more than one paragraph.
+<a name="INDENT_FIRST_PARAS"></a>
+<p>
+If you wish to have first paragraphs indented, invoke the macro
+<strong>.INDENT_FIRST_PARAS</strong> with no argument, either
+before or after
+<a href="docprocessing.html#START">START</a>.
+<strong>INDENT_FIRST_PARAS</strong> is a toggle macro, therefore
+passing it any argument (<strong>OFF, QUIT, Q, X</strong>...) cancels
+its effect, meaning that first paragraphs will once again NOT be
+indented.
+
+<a name="PP_SPACE"><h3><u>7. Spacing paragraphs -- PARA_SPACE</u></h3></a>
+By default, <strong>mom</strong> does not insert a blank line
+between paragraphs. If you would like her to do so, invoke the
+macro <code>.PARA_SPACE</code> with no argument, either
+before or after
+<a href="docprocessing.html#START">START</a>.
+<strong>PARA_SPACE</strong> is a toggle macro, therefore passing
+it any argument (<strong>OFF, QUIT, Q, X</strong>...) cancels its
+effect, meaning that paragraphs will once again NOT be separated by
+a blank line.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="HEAD_INTRO"><h2><u>Main heads</u></h2></a>
+<ul>
+ <li><a href="#HEAD">Tag: HEAD</a>
+ <li><a href="#HEAD_CONTROL">Head control macros</a>
+</ul>
+<p>
+Main heads -- or, in this documentation, just &quot;heads&quot;
+-- should be used any place you want titles to introduce major
+sections of a document. If you wish, <strong>mom</strong> can number
+your heads for you. Head numbers can also be included
+hierarchically in numbered
+<a href="#SUBHEAD_INTRO">subheads</a>
+and
+<a href="#PARAHEAD_INTRO">paraheads</a>.
+<p>
+By default, heads are centered on the page, underlined,
+all in caps. A double linespace precedes each head. In <a
+href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>, heads
+are bold, slightly larger than paragraph text.
+<p>
+If these defaults don't suit you, you can change them with the
+head control macros.
+<br>
+
+<!---HEAD--->
+
+<hr width="66%" align="left">
+<p>
+<a name="HEAD">
+ Macro: <strong>HEAD</strong> <var>&quot;&lt;text of head&gt;&quot; [ &quot;&lt;2nd line&gt;&quot; [ &quot;&lt;3rd line&gt;&quot; ... ] ]</var>
+</a>
+
+<p>
+The argument to <strong>HEAD</strong> is the text of the head,
+surrounded by double-quotes. If you need additional lines for a
+head, simply surround each line with double-quotes.
+<p>
+<strong>NOTE:</strong> If a head falls near the bottom of an output page
+and <strong>mom</strong> is unable to fit the head <em>plus at least
+one line of text underneath it</em>, she will set the head at the
+top of the next page.
+
+<a name="HEAD_CONTROL"><h3><u>Head control macros</u></h3></a>
+<p>
+There are, in addition to the usual family/font/size/quad control
+macros, a number of macros to manage head numbering, spacing,
+underlining, and so on. Check them out if you're unhappy with
+<strong>mom</strong>'s defaults.
+<p>
+<ol>
+ <li><a href="#HEAD_GENERAL">Family/font/size/quad</a>
+ <li><a href="#HEAD_CAPS">Caps</a>
+ <li><a href="#HEAD_SPACE">Pre-head space</a>
+ <li><a href="#HEAD_UNDERLINE">Underlining</a>
+ <li><a href="#NUMBER_HEADS">Numbering</a>
+ <li><a href="#RESET_HEAD_NUMBER">Reset head numbering</a>
+ <li><a href="#HEAD_INLINES">Vertical inline escapes inside heads</a>
+</ol>
+<p>
+<a name="HEAD_GENERAL"><h3><u>1. Family/font/size/quad</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+<pre>
+.HEAD_FAMILY default = prevailing document family; default is Times Roman
+.HEAD_FONT default = bold
+.HEAD_SIZE default = +1 (point)
+.HEAD_QUAD default = CENTER
+</pre>
+
+<a name="HEAD_CAPS"><h3><u>2. Capitalizing heads -- HEAD_CAPS</u></h3></a>
+By default, <strong>mom</strong> sets heads in caps, regardless
+of the
+<a href="definitions.html#TERMS_STRINGARGUMENT">string(s)</a>
+you give to
+<a href="#HEAD">HEAD</a>.
+To change this behaviour, do
+<p>
+<pre>
+ .HEAD_CAPS OFF
+</pre>
+
+<strong>HEAD_CAPS</strong> is a toggle macro, therefore you can use
+any argument you like instead of <strong>OFF</strong> (<strong>END,
+QUIT, Q, X</strong>...). To turn <strong>HEAD_CAPS</strong> back on,
+simply invoke it without an argument.
+
+<a name="HEAD_SPACE"><h3><u>3. Space before heads -- HEAD_SPACE</u></h3></a>
+By default, <strong>mom</strong> deposits 2 blank lines prior to every
+head. If you'd prefer just a single blank line, do
+<p>
+<pre>
+ .HEAD_SPACE OFF
+</pre>
+
+<strong>HEAD_SPACE</strong> is a toggle macro, therefore you can use
+any argument you like instead of <strong>OFF</strong> (<strong>END,
+QUIT, Q, X</strong>...). To restore the space before heads to 2
+blank lines, invoke <strong>HEAD_SPACE</strong> without an argument.
+
+<a name="HEAD_UNDERLINE"><h3><u>4. Underlining heads -- HEAD_UNDERLINE</u></h3></a>
+By default, <strong>mom</strong> underlines heads. To change this
+behaviour, do
+<p>
+<pre>
+ .HEAD_UNDERLINE OFF
+</pre>
+
+<strong>HEAD_UNDERLINE</strong> is a toggle macro, therefore you can
+use any argument you like instead of <strong>OFF</strong> (<strong>END,
+QUIT, Q, X</strong>...). To restore underlining of heads, invoke
+<strong>HEAD_UNDERLINE</strong> without an argument.
+
+<a name="NUMBER_HEADS"><h3><u>5. Number heads -- NUMBER_HEADS</u></h3></a>
+If you'd like your heads numbered, simply invoke
+<strong>NUMBER_HEADS</strong> with no argument. <strong>Mom</strong>
+will number all subsequent heads automatically (in ascending order,
+naturally).
+<p>
+If, in addition to numbering heads, you also request that
+<a href="#SUBHEAD_INTRO">subheads</a>
+and/or
+<a href="#PARAHEAD_INTRO">paraheads</a>
+be numbered, the head number will be included in their numbers
+(each number separated by a period [dot]).
+<p>
+Should you wish to stop head numbering, invoke
+<strong>NUMBER_HEADS</strong> with any argument (<strong>OFF, QUIT,
+END, X</strong>...). Head numbering will cease, and the head number
+will not be included in the numbering of subheads and/or paraheads.
+
+<a name="RESET_HEAD_NUMBER"><h3><u>6. Reset head numbering -- RESET_HEAD_NUMBER</u></h3></a>
+Should you wish to reset the head number to &quot;1&quot;, invoke
+<strong>RESET_HEAD_NUMBER</strong> with no argument. If, for some
+reason, you want <strong>mom</strong> to use a head number that is not
+the next in ascending order (i.e. the last head number + 1), invoke
+<strong>RESET_HEAD_NUMBER</strong> with the number you want, e.g.
+<p>
+<pre>
+ .RESET_HEAD_NUMBER 6
+</pre>
+
+Your next head will be numbered &quot;6&quot; and subsequent heads will
+be numbered in ascending order from &quot;6&quot;.
+
+<a name="HEAD_INLINES"><h3><u>7. Vertical inline escapes inside heads</u></h3></a>
+If you need to adjust the
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+position of a head (e.g. the head falls at the top of a column and
+you want its
+<a href="definitions.html#TERMS_ASCENDER">ascenders</a>
+to line up with the ascenders of
+<a href="definitions.html#TERMS_RUNNING">running text</a>
+in other columns), you can embed a vertical motion
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+(either
+<a href="inlines.html#INLINE_VERTICAL_MOM">mom's</a>
+or
+<a href="inlines.html#INLINE_VERTICAL_GROFF">groff's</a>
+in the string(s) you pass to <strong>HEAD</strong>
+<p>
+For example,
+<p>
+<pre>
+ .HEAD "\[ALD3]Text of head
+</pre>
+
+will lower the baseline of the head by three points. Note that
+there's no need to reverse the sense of the inline escape.
+<p>
+In the case of heads that run to more than one line, you must embed
+the escape in the string for each line, like this:
+<p>
+<pre>
+ .HEAD "\[ALD3]First line" "\[ALD3]Next line"
+</pre>
+
+
+
+
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="SUBHEAD_INTRO"><h2><u>Subheads</u></h2></a>
+<ul>
+ <li><a href="#SUBHEAD">Tag: SUBHEAD</a>
+ <li><a href="#SUBHEAD_CONTROL">Subhead control macros</a>
+</ul>
+<p>
+Subheads should be used any place you want titles to introduce
+sections of a document below heads. If you wish, <strong>mom</strong>
+can number subheads for you. Subhead numbers can also be included
+hierarchically in numbered
+<a href="#PARAHEAD_INTRO">paraheads</a>.
+<p>
+By default, subheads are flush left. In
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
+they are set bold, slightly larger than paragraph text. In
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+they are underlined. A single linespace precedes them in both
+printstyles, and a tiny space adjustment raises them slightly
+above text that comes afterwards for greater clarity in
+document structuring.
+<p>
+If these defaults don't suit you, you can change them with the
+subhead control macros.
+<br>
+
+<!---SUBHEAD--->
+
+<hr width="66%" align="left">
+<p>
+<a name="SUBHEAD">
+ Macro: <strong>SUBHEAD</strong> <var>&quot;&lt;text of subhead&gt;&quot; [ &quot;&lt;2nd line&gt;&quot; [ &quot;&lt;3rd line&gt;&quot; ... ] ]</var>
+</a>
+<p>
+The argument to <strong>SUBHEAD</strong> is the text of the subhead,
+surrounded by double-quotes. If you need additional lines for a
+subhead, simply surround each line with double-quotes.
+<p>
+<strong>NOTE:</strong> If a subhead falls near the bottom of an output
+page and <strong>mom</strong> is unable to fit the head <em>plus at
+least one line of text underneath it</em>, she will set the subhead
+at the top of the next page.
+
+<a name="SUBHEAD_CONTROL"><h3><u>Subhead control macros</u></h3></a>
+<p>
+In addition to the usual family/font/size/quad control
+macros, there are macros to manage subhead numbering.
+<p>
+<ol>
+ <li><a href="#SUBHEAD_GENERAL">Family/font/size/quad</a>
+ <li><a href="#NUMBER_SUBHEADS">Numbering</a>
+ <li><a href="#RESET_SUBHEAD_NUMBER">Reset subhead numbering</a>
+ <li><a href="#SUBHEAD_INLINES">Vertical inline escapes inside subheads</a>
+</ol>
+<p>
+<a name="SUBHEAD_GENERAL"><h3><u>1. Family/font/size/quad</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+<pre>
+.SUBHEAD_FAMILY default = prevailing document family; default is Times Roman
+.SUBHEAD_FONT default = bold
+.SUBHEAD_SIZE default = +.5 (point)
+.SUBHEAD_QUAD default = LEFT
+</pre>
+
+<a name="NUMBER_SUBHEADS"><h3><u>2. Number subheads -- NUMBER_SUBHEADS</u></h3></a>
+If you'd like your subheads numbered, simply invoke
+<strong>.NUMBER_SUBHEADS</strong> with no argument.
+<strong>Mom</strong> will number all subsequent subheads automatically
+(in ascending order, naturally).
+<p>
+If, in addition to numbering subheads, you also request that
+<a href="#HEAD_INTRO">heads</a>
+be numbered, the head number will be included in the subhead number
+(separated by a period [dot]).
+<p>
+Should you wish to stop subhead numbering, invoke
+<strong>NUMBER_SUBHEADS</strong> with any argument (<strong>OFF, QUIT,
+END, X</strong>...). Subhead numbering will cease, and the subhead
+number will not be included in the numbering of paraheads.
+
+<a name="RESET_SUBHEAD_NUMBER"><h3><u>3. Reset head numbering -- RESET_SUBHEAD_NUMBER</u></h3></a>
+Should you wish to reset the subhead number to &quot;1&quot;, invoke
+<strong>RESET_SUBHEAD_NUMBER</strong> with no argument. If, for some
+reason, you want <strong>mom</strong> to use a subhead number that is not
+the next in ascending order (i.e. the last subhead number + 1), invoke
+<strong>RESET_SUBHEAD_NUMBER</strong> with the number you want, e.g.
+<p>
+<pre>
+ .RESET_SUBHEAD_NUMBER 4
+</pre>
+
+Your next subhead will be numbered &quot;4&quot; and subsequent
+subheads will be numbered in ascending order from &quot;4&quot;.
+
+<a name="#SUBHEAD_INLINES"><h3><u>Vertical inline escapes inside subheads</u></h3></a>
+See
+<a href="#HEAD_INLINES">Vertical inline escapes inside heads</a>.
+The information there applies equally to subheads.
+
+
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="PARAHEAD_INTRO"><h2><u>Paragraph heads</u></h2></a>
+<ul>
+ <li><a href="#PARAHEAD">Tag: PARAHEAD</a>
+ <li><a href="#PARAHEAD_CONTROL">Parahead control macros</a>
+</ul>
+<p>
+Paragraph heads (paraheads) should be used any place you want titles
+to introduce paragraphs below heads or subheads. If you wish,
+<strong>mom</strong> can number paraheads for you.
+<p>
+By default, paraheads are joined to the body of a paragraph,
+slightly indented (provided the paragraph is not a
+&quot;first&quot; paragraph as defined in
+<a href="#PARA_INDENT_FIRST">Indenting initial paragraphs</a>).
+In
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
+they are set bold italic, slightly larger than paragraph text. In
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+they are underlined.
+<p>
+If these defaults don't suit you, you can change them with the
+parahead control macros.
+<br>
+
+<!---PARAHEAD--->
+
+<hr width="66%" align="left">
+<p>
+<a name="PARAHEAD">
+ Macro: <strong>PARAHEAD</strong> <var>&quot;&lt;text of parahead&gt;&quot;</var>
+</a>
+<p>
+<strong>PARAHEAD</strong> must come AFTER
+<a href="#PP">PP</a>
+or it will not work!
+<p>
+The argument is the text of the parahead, surrounded by double-quotes.
+Because paraheads are joined to the body of a paragraph, they accept
+only one argument (see
+<a href="#HEAD">HEAD</a>
+and
+<a href="#SUBHEAD">SUBHEAD</a>).
+
+<a name="PARAHEAD_CONTROL"><h3><u>Parahead control macros</u></h3></a>
+<p>
+In addition to the family/font/size/indent control macros, there are
+macros to manage parahead numbering.
+<p>
+<ol>
+ <li><a href="#PARAHEAD_GENERAL">Family/font/size</a>
+ <li><a href="#PARAHEAD_INDENT">Indent</a>
+ <li><a href="#NUMBER_PARAHEADS">Numbering</a>
+ <li><a href="#RESET_PARAHEAD_NUMBER">Reset parahead numbering</a>
+</ol>
+<p>
+<a name="PARAHEAD_GENERAL"><h3><u>1. Family/font/size</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+<pre>
+.PARAHEAD_FAMILY default = prevailing document family; default is Times Roman
+.PARAHEAD_FONT default = bold italic
+.PARAHEAD_SIZE default = +.5 (point)
+</pre>
+
+<a name="PARAHEAD_INDENT"><h3><u>2. Indent</u></h3></a>
+Unlike other control macros that end in
+<a href="#CONTROL_INDENTS"><strong>_INDENT</strong></a>,
+the argument to the macro that controls indenting of paragraph heads
+(<strong>PARAHEAD_INDENT</strong>) is NOT relative to the first-line
+indent of normal paragraphs. In other words, it takes an absolute
+value, and requires a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
+For example, to set the paragraph head indent to 2-1/2 picas, you
+do:
+<p>
+<pre>
+ .PARAHEAD_INDENT 2.5P
+</pre>
+<strong>Mom</strong>'s default indent for paragraph heads is 1/2
+the first-line indent of normal paragraphs (both printstyles).
+However, as stated above, if you choose to change the indent, you
+must give an absolute value (unless you're a groff expert and want
+to manipulate the number register <code>\n[#PP_INDENT]u</code>
+arithmetically as the argument to <strong>PARAHEAD_INDENT</strong>
+for an indent that's relative to <strong>PP_INDENT</strong>.)
+<p>
+<strong>NOTE:</strong> Paragraph heads in &quot;first
+paragraphs&quot;, as defined in
+<a href="#PARA_INDENT_FIRST">Indenting initial paragraphs</a>,
+are not indented unless you turn
+<a href="#INDENT_FIRST_PARAS">INDENT_FIRST_PARAS</a>
+on.
+
+<a name="NUMBER_PARAHEADS"><h3><u>3. Number paraheads -- NUMBER_PARAHEADS</u></h3></a>
+If you'd like your paraheads numbered, simply invoke
+<strong>.NUMBER_PARAHEADS</strong> with no argument.
+<strong>Mom</strong> will number all subsequent paraheads automatically
+(in ascending order, naturally).
+<p>
+If, in addition to numbering paraheads, you also request that
+<a href="#HEAD_INTRO">heads</a>
+and
+<a href="#SUBHEAD_INTRO">subheads</a>
+be numbered, the head and/or subhead number will be included in the
+parahead number (separated by a period [dot]).
+<p>
+Should you wish to stop parahead numbering, invoke
+<strong>NUMBER_PARAHEADS</strong> with any argument (<strong>OFF,
+QUIT, END, X</strong>...). Parahead numbering will cease.
+
+<a name="RESET_PARAHEAD_NUMBER"><h3><u>4. Reset head numbering -- RESET_PARAHEAD_NUMBER</u></h3></a>
+Should you wish to reset the parahead number to &quot;1&quot;, invoke
+<strong>RESET_PARAHEAD_NUMBER</strong> with no argument. If, for some
+reason, you want <strong>mom</strong> to use a parahead number that is not
+the next in ascending order (i.e. the last parahead number + 1), invoke
+<strong>RESET_PARAHEAD_NUMBER</strong> with the number you want, e.g.
+<p>
+<pre>
+ .RESET_PARAHEAD_NUMBER 7
+</pre>
+
+Your next parahead will be numbered &quot;7&quot; and subsequent
+paraheads will be numbered in ascending order from &quot;7&quot;.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="LINEBREAK_INTRO"><h2><u>Author linebreaks</u></h2></a>
+<ul>
+ <li><a href="#LINEBREAK">Tag: LINEBREAK</a>
+ <li><a href="#LINEBREAK_CHAR">Linebreak character control macro</a>
+</ul>
+<p>
+By default, <strong>mom</strong> marks
+<a href="definitions.html#TERMS_LINEBREAK">author linebreaks</a>
+with three centered asterisks. You can change this behaviour
+with the linebreak character
+<a href="definitions.html#TERMS_CONTROLMACRO">control macro</a>.
+<br>
+
+<!---LINEBREAK--->
+
+<hr width="66%" align="left">
+<p>
+<a name="LINEBREAK">
+ Macro: <strong>LINEBREAK</strong>
+</a>
+
+<p>
+<strong>LINEBREAK</strong> takes no arguments. Simply invoke it
+(on a line by itself, of course) whenever you want to insert an
+author linebreak. The appearance of the linebreak is controlled
+by the
+<a href="#LINEBREAK_CHAR">LINEBREAK_CHAR</a>
+macro.
+
+<h3><u>Linebreak character control macro</u></h3>
+<p>
+<a name="LINEBREAK_CHAR">
+ Macro: <strong>LINEBREAK_CHAR</strong> <var>[ &lt;character&gt; ] [ &lt;iterations&gt; [ &lt;vertical adjustment&gt; ] ]</var>
+</a>
+<br>
+<em>*The third optional argument requires a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>.
+
+<p>
+<strong>LINEBREAK_CHAR</strong> determines what <strong>mom</strong>
+prints when <strong>LINEBREAK</strong> is invoked. It takes 3
+optional arguments: the character you want deposited at the line
+break, the number of times you want the character repeated, and a
+vertical adjustment factor.
+<p>
+The first argument is any legal groff character (e.g. <kbd>*</kbd>
+[an asterisk], <kbd>\(dg</kbd> [a dagger], <kbd>\f(ZD\N'141\fP</kbd>
+[an arbitrary character from Zapf Dingbats], <kbd>\l'4P'</kbd>
+[a 4-pica long rule]). <strong>Mom</strong> sets the character
+centered on the current line length.
+<p>
+The second argument is the number of times to repeat the character.
+<p>
+The third argument is a +|- value by which to raise (+) or lower (-)
+the character in order to make it appear visually centered between
+sections of text. This lets you make vertical adjustments
+to characters that don't sit on the
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+(such as asterisks). The argument must be preceded by a plus or
+minus sign, and must include a unit of measure.
+<p>
+If you enter <strong>LINEBREAK_CHAR</strong> with no arguments,
+sections of text will be separated by two blank lines when you invoke
+<strong>LINEBREAK</strong>.
+<p>
+<strong>Mom</strong>'s default for <strong>LINEBREAK_CHAR</strong> is
+<p>
+<pre>
+ .LINEBREAK_CHAR * 3 -3p
+</pre>
+
+i.e. three asterisks, lowered 3 points from their normal vertical
+position (for
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>;
+the vertical adjustment is -2 points for
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>).
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="QUOTE_INTRO"><h2><u>Quotes (line for line)</u></h2></a>
+<ul>
+ <li><a href="#QUOTE">Tag: QUOTE</a>
+ <li><a href="#QUOTE_CONTROL">Quote control macros</a>
+</ul>
+<p>
+<a href="definitions.html#TERMS_QUOTE">Quotes</a>
+are always set in
+<a href="definitions.html#TERMS_NOFILL">nofill mode</a>,
+flush left. This permits entering quotes on a line for line basis in
+your text editor and have them come out the same way on output copy.
+(See
+<a href="#BLOCKQUOTE_INTRO">Blockquotes</a>
+for how quotes, in the present sense, differ from longer
+passages of cited text.)
+<p>
+Since <strong>mom</strong> originally came into being to serve
+the needs of creative writers (i.e. novelists, short story
+writers, etc. -- not to cast aspersions on the creativity of
+mathematicians and programmers), she sets quotes in italics
+<a href="docprocessing.html#PRINTSTYLE">(PRINTSTYLE TYPESET)</a>
+or underlined
+<a href="docprocessing.html#PRINTSTYLE">(PRINTSTYLE TYPEWRITE)</a>,
+indented from the left margin. Obviously, she's thinking
+&quot;quotes from poetry or song lyrics&quot;, but with the
+quote control macros you can change her defaults so
+<strong>QUOTE</strong> serves other needs, e.g. entering snippets of
+programming code, command line instructions, and so on.
+<p>
+<a name="QUOTE_SPACING"></a>
+Besides indenting quotes, <strong>mom</strong> further sets them
+off from
+<a href="definitions.html#TERMS_RUNNING">running text</a>
+with a small amount of vertical whitespace top and bottom. In
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+this is always one full linespace. In
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
+it's 1/2 of the prevailing
+<a href="definitions.html#TERMS_LEADING">leading</a>
+if the quote fits fully on the page (i.e. with running text above
+and below it), otherwise it's a full linespace either above or below
+as is necessary to balance the page to the bottom margin. This
+behaviour can be changed with the control macro
+<a href="#ALWAYS_FULLSPACE_QUOTES">ALWAYS_FULLSPACE_QUOTES</a>.
+<p>
+<strong>NOTE:</strong> <strong>ALWAYS_FULLSPACE_QUOTES</strong>
+applies to both
+<a href="#QUOTE">QUOTE</a>
+and
+<a href="#BLOCKQUOTE">BLOCKQUOTE</a>,
+as does the control macro
+<a href="#QUOTE_INDENT">QUOTE_INDENT</a>.
+<br>
+
+<!---QUOTE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="QUOTE">
+ Macro: <strong>QUOTE</strong> <var>toggle</var>
+</a>
+
+<p>
+<strong>QUOTE</strong> is a toggle macro. To begin a section of
+quoted text, invoke it with no argument, then type in your quote.
+When you're finished, invoke <strong>QUOTE</strong> with any
+argument (e.g. OFF, END, X, Q...) to turn it off. Example:
+<p>
+<pre>
+ .QUOTE
+ Nymphomaniacal Jill
+ Used a dynamite stick for a thrill
+ They found her vagina
+ In North Carolina
+ And bits of her tits in Brazil.
+ .QUOTE END
+</pre>
+
+<a name="QUOTE_CONTROL"><h3><u>Quote control macros</u></h3></a>
+<ol>
+ <li><a href="#QUOTE_GENERAL">Family/font/size/indent</a>
+ <li><a href="#ALWAYS_FULLSPACE_QUOTES">Spacing above and below (typeset only)</a>
+ <li><a href="#UNDERLINE_QUOTES">Underline quotes (typewrite only)</a>
+ <li><a href="#BREAK_QUOTE">Manually break a footnoted quote that crosses pages/columns</a>
+</ol>
+<p>
+<a name="QUOTE_GENERAL"><h3><u>1. Family/font/size/indent</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+<pre>
+.QUOTE_FAMILY default = prevailing document family; default is Times Roman
+.QUOTE_FONT default = italic
+.QUOTE_SIZE default = 0 (i.e. same size as paragraph text)
+<a name="QUOTE_INDENT">.QUOTE_INDENT default = paragraph indent x 3 (typeset); x 2 (typewrite)</a>
+ (note that this macro also sets the indents (left and right)
+ for blockquotes)
+</pre>
+
+<a name="ALWAYS_FULLSPACE_QUOTES"><h3><u>2. Spacing above and below -- ALWAYS_FULLSPACE_QUOTES (typeset only)</u></h3></a>
+If you'd like <strong>mom</strong> always to put a full linespace above
+and below quotes, invoke <strong>.ALWAYS_FULLSPACE_QUOTES</strong>
+with no argument. If you wish to restore <strong>mom</strong>'s
+default behaviour regarding the spacing of quotes (see
+<a href="#QUOTE_SPACING">above</a>),
+invoke the macro with any argument (<strong>OFF, QUIT, END,
+X</strong>...)
+<p>
+<strong>NOTE:</strong> This macro also sets <strong>mom</strong>'s
+spacing policy for
+<a href="#BLOCKQUOTE_INTRO">blockquotes</a>.
+
+<a name="UNDERLINE_QUOTES"><h3><u>3. Underlining -- UNDERLINE_QUOTES (typewrite only)</u></h3></a>
+By default in
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+<strong>mom</strong> underlines quotes. If you'd rather she didn't,
+invoke <strong>.UNDERLINE_QUOTES</strong> with any argument
+(<strong>OFF, QUIT, END, X</strong>...) to disable the feature.
+Invoke it without an argument to restore <strong>mom</strong>'s
+default underlining of quotes.
+<p>
+If you not only wish that <strong>mom</strong> not underline
+quotes, but also that she set them in italic, you must follow each
+instance of <strong>QUOTE</strong> with the typesetting macro <a
+href="typesetting.html#FONT">FT I</a>.
+Furthermore, since <strong>mom</strong> underlines all instances
+of italics by default in <strong>PRINTSTYLE TYPEWRITE</strong>,
+you must also make sure that <strong>ITALIC_MEANS_ITALIC</strong>
+is enabled (see
+<a href="docprocessing.html#TYPEWRITE_CONTROL">PRINTSTYLE TYPEWRITE control macros</a>).
+
+<a name="BREAK_QUOTE"><h3><u>4. Manually break a footnoted quote -- BREAK_QUOTE</u></h3></a>
+Exceptionally, a quote or blockquote containing a footnote may cross
+a page or column. When this happens, the footnote marker may not be
+correct for its position relative to other footnotes on the page, and
+the footnote itself may appear on the wrong page or at the bottom of
+the wrong column. When this happens, study your output to determine
+the precise point at which the quote breaks (or at which you want
+it to break), and add <code>.BREAK_QUOTE</code> on a line by itself
+afterwards. No other intervention is required, and the footnote(s)
+will be marked correctly and appear on the correct page.
+<p>
+<strong>BREAK_QUOTE</strong> may be used with both quotes and
+blockquotes, and hence is aliased as <strong>BREAK_BLOCKQUOTE,
+BREAK_CITATION</strong> and <strong>BREAK_CITE</strong>.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="BLOCKQUOTE_INTRO"><h2><u>Blockquotes (cited passages)</u></h2></a>
+<ul>
+ <li><a href="#BLOCKQUOTE">Tag: BLOCKQUOTE (aliases: CITE, CITATION)</a>
+ <li><a href="#BLOCKQUOTE_CONTROL">BLOCKQUOTE control macros</a>
+</ul>
+<p>
+<strong>BLOCKQUOTES</strong> are used to cite passages from another
+author's work. So that they stand out well from
+<a href="definitions.html#TERMS_RUNNING">running text</a>,
+<strong>mom</strong> indents them from both the left and right margins
+and sets them in a different point size
+<a href="docprocessing.html#PRINTSTYLE">(PRINTSTYLE TYPESET</a>
+only).
+<a href="definitions.html#TERMS_OUTPUTLINE">Output lines</a>
+are
+<a href="definitions.html#TERMS_FILLED">filled</a>,
+and, by default,
+<a href="definitions.html#TERMS_QUAD">quadded</a>
+left.
+<p>
+Besides indenting blockquotes, <strong>mom</strong> further sets them
+off from running text with a small amount of vertical whitespace top
+and bottom. (See
+<a href="#QUOTE_SPACING">above</a>
+for a complete explanation of how this is managed, and how to control it.)
+<p>
+You may notice that <strong>BLOCKQUOTE</strong> has no macro to
+control
+<a href="definitions.html#TERMS_LEADING">leading</a>,
+although you can change the point size. There are Very Good
+Reasons for this. If you can't live with the limitation, change
+the leading of blockquotes (after invoking the tag) with
+<a href="typesetting.html#LS">LS</a>,
+but know that there will be Bottom Margin Consequences.
+<br>
+
+<!---BLOCKQUOTE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="BLOCKQUOTE">
+ Macro: <strong>BLOCKQUOTE</strong> <var>toggle</var>
+ <br>
+ Aliases: <strong>CITE, CITATION</strong>
+</a>
+
+<p>
+<strong>BLOCKQUOTE</strong> is a toggle macro. To begin a
+cited passage, invoke the tag with no argument, then type in your quote.
+When you're finished, invoke <strong>BLOCKQUOTE</strong> with any
+argument (e.g. OFF, END, X, Q...) to turn it off. Example:
+<p>
+<pre>
+ .BLOCKQUOTE
+ Redefining the role of the United States from enablers to keep
+ the peace to enablers to keep the peace from peacekeepers is
+ going to be an assignment.
+ .RIGHT
+ \(emGeorge W. Bush
+ .BLOCKQUOTE END
+</pre>
+
+If the cited passage runs to more than one paragraph, you MUST
+introduce each paragraph -- <em>including the first!</em> --
+with
+<a href="#PP">PP</a>.
+<p>
+<strong>NOTE:</strong> The aliases <strong>CITE</strong>
+and <strong>CITATION</strong> may be used in place of the
+<strong>BLOCKQUOTE</strong> tag, but &quot;CITE&quot; and
+&quot;CITATION&quot; must not be used to replace &quot;BLOCKQUOTE&quot;
+in any of the tag's control macros.
+
+<a name="BLOCKQUOTE_CONTROL"><h3><u>Blockquote control macros</u></h3></a>
+<ol>
+ <li><a href="#BLOCKQUOTE_GENERAL">Family/font/size/indent</a>
+ <li><a href="#ALWAYS_FULLSPACE_QUOTES">Spacing above and below (typeset only)</a>
+ <li><a href="#BREAK_QUOTE">Manually break a footnoted blockquote that crosses pages/columns</a>
+</ol>
+<p>
+<a name="BLOCKQUOTE_GENERAL"><h3><u>1. Family/font/size/indent</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+<pre>
+.BLOCKQUOTE_FAMILY default = prevailing document family; default is Times Roman
+.BLOCKQUOTE_FONT default = italic
+.BLOCKQUOTE_SIZE default = -1 (point)
+.QUOTE_INDENT default = paragraph indent x 3 (typeset); x 2 (typewrite)</a>
+ (note that this macro also sets the left indent for quotes)
+</pre>
+
+<a name="ALWAYS_FULLSPACE_QUOTES"><h3><u>2. Spacing above and below -- ALWAYS_FULLSPACE_QUOTES (typeset only)</u></h3></a>
+If you'd like <strong>mom</strong> always to put a full linespace above
+and below blockquotes, invoke <strong>.ALWAYS_FULLSPACE_QUOTES</strong>
+with no argument. If you wish to restore <strong>mom</strong>'s
+default behaviour regarding the spacing of blockquotes (see
+<a href="#QUOTE_SPACING">above</a>),
+invoke the macro with any argument (<strong>OFF, QUIT, END,
+X</strong>...).
+<p>
+<strong>NOTE:</strong> This macro also sets <strong>mom</strong>'s
+spacing policy for
+<a href="#QUOTE_INTRO">quotes</a>.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="FOOTNOTE_INTRO"><h2><u>Footnotes</u></h2></a>
+<ul>
+ <li><a href="#FOOTNOTE_BEHAVIOUR">Footnote behaviour</a>
+ <li><a href="#FOOTNOTE">Tag: FOOTNOTE</a>
+ <li><a href="#FOOTNOTE_CONTROL">FOOTNOTE control macros</a>
+</ul>
+
+<p>
+For something so complex behind the scenes, footnotes are easy to use.
+You just type, for example
+<p>
+<a name="FOOTNOTE_EXAMPLE"></a>
+<pre>
+ ...the doctrines of Identity as urged by Schelling\c
+ .FOOTNOTE
+ &lt;footnote about who the hell is Schelling&gt;
+ .FOOTNOTE OFF
+ were generally the points of discussion presenting the most
+ of beauty to the imaginative Morella.
+</pre>
+
+and be done with it. (Note the obligatory use of the
+<strong>\c</strong>
+<a href="definitions.html#TERMS_INLINES">inline escape</a>.)
+<strong>Mom</strong> takes care of everything:
+putting footnote markers in the body of the document, keeping track
+of how many footnotes are on the page, identifying the footnotes
+themeselves appropriately, balancing them properly with the botton
+margin, deferring footnotes that don't fit on the page... Even if
+you're using
+<a href="columns.html#COLUMNS">COLUMNS</a>,
+<strong>mom</strong> knows what to do, and Does The Right Thing.
+<p>
+Footnotes can be sly little beasts, though. If you're writing a
+document that's footnote-heavy, you might want to read the following.
+
+<a name="FOOTNOTE_BEHAVIOUR"><h3><u>Footnote behaviour</u></h3></a>
+<p>
+By default, <strong>mom</strong> marks footnotes with
+alternating stars (asterisks) and daggers. The first footnote
+gets a star, the second a dagger, the third two stars,
+the fourth two daggers, etc. If you prefer numbered footnotes, rest
+assured <strong>mom</strong> is happy to oblige.
+<p>
+A small amount of vertical whitespace and a short horizontal rule
+separate footnotes from the document body. The amount of whitespace
+varies slightly from page to page depending on the number of lines
+in the footnotes. <strong>Mom</strong> tries for a nice balance
+between too little whitespace and too much, but when push comes to
+shove, she'll opt for ample over cramped. The last lines of footnotes
+are always flush with the document's bottom margin.
+<p>
+If <strong>mom</strong> sees that a portion of a footnote cannot
+be fit on its page, she carries that portion over to the next
+page. If an entire footnote can't be fitted on its page (i.e.
+<strong>FOOTNOTE</strong> has been called too close to the bottom),
+she defers the footnote to the next page, but sets it with the
+appropriate marker from the previous page.
+<p>
+In the unfortunate happenstance that a deferred footnote is the
+only footnote on its page (i.e. it's marked in the document body with
+a star) and the page it's deferred has its own footnotes,
+<strong>mom</strong> separates the deferred footnote from the page's
+proper footnote(s) with a blank line. This avoids the confusion that
+might result from readers seeing two footnote entries on the same page
+identified by a single star (or the number 1 if you've requested
+numbered footnotes that begin at 1 on every page). The blank line
+makes it clear that the first footnote entry belongs to the previous
+page.
+<p>
+In the circumstance where a deferred footnote is not the only one on
+its page, and is consequently marked by something other than a single
+star, there's no confusion and <strong>mom</strong> doesn't bother
+with the blank line. (By convention, the first footnote on a page is
+always marked with a single star, so if readers see, say, a dagger or two
+stars marking the first footnote entry, they'll know the entry belongs
+to the previous page).
+<p>
+Obviously, deferred footnotes aren't an issue if you request numbered
+footnotes that increase incrementally throughout the whole document --
+yet another convenience <strong>mom</strong> has thought of.
+<p>
+Exceptionally, you may encounter problems with footnotes inside
+quotes and blockquotes that cross a page or column. See
+<a href="#BREAK_QUOTE">BREAK_QUOTE</a>
+for a solution.
+<br>
+
+<!---FOOTNOTE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="FOOTNOTE">
+ Macro: <strong>FOOTNOTE</strong> <var>&lt;toggle&gt; | INDENT LEFT | RIGHT | BOTH &lt;indent value&gt;</var>
+ <br>
+ <em>*See <a href="#FOOTNOTE_NOTE">HYPER-IMPORTANT NOTE</a>!!!
+ <br>
+ &lt;indent value&gt; requires a
+ <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+</a>
+
+<p>
+<strong>FOOTNOTE</strong> is a toggle macro, therefore invoking it
+on a line by itself allows you to enter a footnote in the body of a
+document. Invoking it with any argument <em>other than INDENT</em>
+(i.e. <strong>OFF, QUIT, END, X...</strong>) tells <strong>mom</strong>
+you're finished.
+<p>
+Footnotes are the only element of
+<a href="definitions.html#TERMS_RUNNING">running text</a>
+that are not affected by the typesetting
+<a href="typesetting.html#INDENTS">indent macros</a>.
+In the unlikely event that you want a page's footnotes to line
+up with a running indent, invoke <strong>FOOTNOTE</strong> with
+the <strong>INDENT</strong> argument and pass it an indent
+direction and indent value. <strong>L, R,</strong> and
+<strong>B</strong> may be used in place of <strong>LEFT,
+RIGHT,</strong> and <strong>BOTH</strong>.
+<strong>FOOTNOTE</strong> must be invoked with <strong>INDENT</strong>
+for every footnote you want indented; <strong>mom</strong> does
+not save any footnote indent information from invocation to
+invocation.
+<p>
+<strong>NOTE:</strong> If a footnote runs to more than one
+paragraph(!), <strong>DO NOT</strong> begin the footnote with
+the
+<a href="#PP">PP</a>
+tag. Use <strong>PP</strong> only to introduce subsequent paragraphs.
+<p>
+<a name="FOOTNOTE_NOTE"><strong>HYPER-IMPORTANT NOTE:</strong></a>
+The final word on the
+<a href="definitions.html#TERMS_INPUTLINE">input line</a>
+that comes immediately before <strong>FOOTNOTE</strong> MUST terminate
+with a
+<a href="typesetting.html#JOIN">\c</a>
+inline escape. Otherwise, the footnote marker for the word won't be attached to
+it (i.e. <strong>mom</strong> will insert a word space between the word
+and the marker). See the
+<a href="#FOOTNOTE_EXAMPLE">footnote example</a>
+above.
+
+<p>
+<a name="FOOTNOTE_CONTROL"><h3><u>Footnote control macros</u></h3></a>
+<ol>
+ <li><a href="#FOOTNOTE_GENERAL">Family/font/size/lead/quad</a>
+ <li><a href="#FOOTNOTE_MARKERS">Footnote markers</a> -- on or off
+ <li><a href="#FOOTNOTE_MARKER_STYLE">Footnote marker style</a> -- star+dagger or numbered
+ <li><a href="#RESET_FOOTNOTE_NUMBER">Reset footnote number</a> -- set footnote marker number to 1
+ <li><a href="#FOOTNOTE_RULE">Footnote rule</a> -- on or off
+ <li><a href="#FOOTNOTE_RULE_LENGTH">Footnote rule length</a> -- length of footnote separator rule
+ <li><a href="#FOOTNOTE_RULE_ADJ">Adjust vertical position of footnote separator rule</a>
+</ol>
+<p>
+<a name="FOOTNOTE_GENERAL"><h3><u>1. Family/font/size/quad/lead</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+<pre>
+.FOOTNOTE_FAMILY default = prevailing document family; default is Times Roman
+.FOOTNOTE_FONT default = roman
+.FOOTNOTE_SIZE default = -2 (points)
+.FOOTNOTE_AUTOLEAD default = 2 points (typeset); single-spaced (typewrite)
+.FOOTNOTE_QUAD default = same as paragraphs
+</pre>
+
+<a name="FOOTNOTE_MARKERS"><h3><u>2. Footnote markers -- FOOTNOTE_MARKERS</u></h3></a>
+If you don't want footnote markers, in either the body of
+the document or beside footnote entries themselves, toggle
+them off with <strong>.FOOTNOTE_MARKERS OFF</strong> (or
+<strong>END, QUIT, X</strong>...). This means, of course, that
+you'll have to roll your own. If you want them back on, invoke
+<strong>.FOOTNOTE_MARKERS</strong> with no argument. Footnote markers
+are on by default.
+
+<a name="FOOTNOTE_MARKER_STYLE"><h3><u>3. Footnote marker style -- FOOTNOTE_MARKER_STYLE</u></h3></a>
+<strong>Mom</strong> gives you two choices of footnote marker style:
+star+dagger (see
+<a href="#FOOTNOTE_BEHAVIOUR">footnote behaviour</a>
+above), or numbered.
+<p>
+<strong>.FOOTNOTE_MARKER_STYLE STAR</strong> gives you star+dagger
+(the default). There is a limit of 10 footnotes per page with
+this style.
+<p>
+<strong>.FOOTNOTE_MARKER_STYLE NUMBER</strong> gives you superscript
+numbers, both in the document body and in the footnote entries
+themselves. By default, footnote numbers increase incrementally
+(prev. footnote number + 1) throughout the whole document. You can
+ask <strong>mom</strong> to start each page's footnote numbers at 1
+with <strong>.RESET_FOOTNOTE_NUMBER</strong> (see below).
+
+<a name="RESET_FOOTNOTE_NUMBER"><h3><u>4. Reset footnote number -- RESET FOOTNOTE NUMBER</u></h3></a>
+<strong>.RESET_FOOTNOTE_NUMBER</strong>, by itself, resets
+footnote numbering so that the next footnote you enter is
+numbered 1.
+<p>
+<strong>.RESET_FOOTNOTE_NUMBER PAGE</strong> tells
+<strong>mom</strong> to start every page's footnote numbering at 1.
+
+<a name="FOOTNOTE_RULE"><h3><u>5. Footnote rule -- FOOTNOTE_RULE</u></h3></a>
+If you don't want a footnote separator rule, toggle it off with
+<strong>.FOOTNOTE_RULE OFF</strong> (or <strong>END,
+QUIT, X</strong>...). Toggle it back on by invoking
+<strong>.FOOTNOTE_RULE</strong> with no argument. The default is to
+print the rule.
+
+<a name="FOOTNOTE_RULE_LENGTH"><h3><u>6. Footnote rule length -- FOOTNOTE_RULE_LENGTH</u></h3></a>
+If you want to change the length of the footnote separator rule,
+invoke <strong>.FOOTNOTE_RULE_LENGTH</strong> with a length, like
+this,
+<p>
+<pre>
+ .FOOTNOTE_RULE_LENGTH 1i
+</pre>
+
+which sets the length to 1 inch. Note that a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+is required. The default is 4
+<a href="definitions.html#TERMS_PICASPOINTS">picas</a>
+for both
+<a href="docprocessing.html#PRINTSTYLE">printstyles</a>.
+<a name="FOOTNOTE_RULE_ADJ"><h3><u>7. Adjust vertical position of footnote separator rule -- FOOTNOTE_RULE_ADJ</u></h3></a>
+The footnote separator rule is actually a baseline rule that falls
+on the
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+of the first line of a page's footnotes. By default,
+<strong>mom</strong> raises the rule 3
+<a href="definitions.html#TERMS_PICASPOINTS">points</a>
+from the baseline so that the separator and the footnotes don't
+look jammed together. If you'd prefer a different vertical
+adjustment, invoke <strong>.FOOTNOTE_RULE_ADJ</strong> with the
+amount you'd like. For example
+<p>
+<pre>
+ .FOOTNOTE_RULE_ADJ 4.25p
+</pre>
+
+raises the rule by 4-1/4 points. Note that you can only raise
+the rule, not lower it. A
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+is required.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="ENDNOTE_INTRO"><h2><u>Endnotes</u></h2></a>
+<ul>
+ <li><a href="#ENDNOTE_BEHAVIOUR">Endnote behaviour</a>
+ <ul>
+ <li><a href="#ENDNOTE_SPACING">A Note on Endnote Spacing</a>
+ <li><a href="#ENDNOTE_COLUMNS">Endnotes and columnar documents</a>
+ </ul>
+ <li><a href="#ENDNOTE">Tag: ENDNOTE</a>
+ <li><a href="#ENDNOTES">Macro: ENDNOTES</a> -- tell <strong>mom</strong> to output endnotes
+ <li><a href="#ENDNOTE_CONTROL">ENDNOTE control macros</a>
+</ul>
+
+<p>
+Embedding endnotes into <strong>mom</strong> documents is accomplished
+the same way as embedding
+<a href="#FOOTNOTE_INTRO">footnotes</a>. The example below is
+identical to the one shown in the
+<a href="#FOOTNOTE_EXAMPLE">introduction to footnotes</a>,
+except that <kbd>.FOOTNOTE</kbd> has been replaced with
+<kbd>.ENDNOTE</kbd>.
+<p>
+<a name="ENDNOTE_EXAMPLE"></a>
+<pre>
+ ...the doctrines of Identity as urged by Schelling\c
+ .ENDNOTE
+ &lt;endnote about who the hell is Schelling&gt;
+ .ENDNOTE OFF
+ were generally the points of discussion presenting the most
+ of beauty to the imaginative Morella.
+</pre>
+
+As with footnotes, note the obligatory use of the <strong>\c</strong>
+<a href="definitions.html#TERMS_INLINES">inline escape</a>.
+<p>
+Endnotes differ from footnotes in two ways (other than the fact that
+endnotes come at the end of a document whereas footnotes appear in the
+body of the document):
+<br>
+<ol>
+ <li>Endnotes are always numbered incrementally throughout a
+ document. In other words, you don't get a choice of marker styles,
+ as you do with footnotes.
+ <li>Endnotes MUST be output explicitly; <strong>mom</strong> does
+ not output them for you. In
+ <a href="rectoverso.html#COLLATE">collated</a>
+ documents, this allows you to choose whether you
+ want the endnotes to appear at the end of each chapter or
+ section, or grouped together at the very end of the document.
+</ol>
+<p>
+Within endnotes, you may use the document element tags
+<a href="#PP">PP</a>,
+<a href="#QUOTE">QUOTE</a>
+and
+<a href="#BLOCKQUOTE">BLOCKQUOTE</a>.
+This provides the flexibility to create endnotes that run to several
+paragraphs, as well as to embed cited text within endnotes.
+<p>
+Should you wish to change the appearance of quotes or blockquotes that
+appear within endnotes, you may do so with the
+<a href="#QUOTE_CONTROL">quote control macros</a>
+or
+<a href="#BLOCKQUOTE_CONTROL">blockquote control macros</a>.
+HOWEVER... you must make the changes <em>within</em> each endnote, prior
+to invoking <strong>QUOTE</strong> or <strong>BLOCKQUOTE</strong>, and
+undo them prior to terminating the endnote (i.e. before <strong>ENDNOTE
+OFF</strong>), otherwise the changes will affect subsequent quotes and
+blockquotes that appear in the document body as well.
+
+<a name="ENDNOTE_BEHAVIOUR"><h3><u>Endnote behaviour</u></h3></a>
+<p>
+When you output endnotes (with
+<a href="#ENDNOTES">ENDNOTES</a>),
+<strong>mom</strong> finishes processing the last page of your document,
+then breaks to a new page for printing the endnotes. If the document
+type is
+<a href="docprocessing.html#DOCTYPE">CHAPTER</a>,
+the centre part of the
+<a href="definitions.html#TERMS_HEADER">header</a>
+(or footer), which, by default, contains a chapter number or title, is
+removed.
+<p>
+By default, <strong>mom</strong> starts the endnotes page with a
+bold, centered, double-underscored head, &quot;ENDNOTES&quot;.
+Underneath--flush left, bold, and underscored--she prints the document
+title (or, in the case of chapters, the chapter number or title). She
+then prints the endnotes. Each endnote is identified by its appropriate
+number, in bold, right aligned to two placeholders. The text of the
+endnotes themselves is indented to the right of the numbers.
+<p>
+If the endnotes are grouped together at the end of a collated document,
+each section of the document that contains endnotes is identified by its
+own unique title (or chapter number or title), bold, flush left, and
+underscored.
+<p>
+Of course, all the defaults, as well as the overall style of the
+endnotes page, can be changed with the
+<a href="#ENDNOTE_CONTROL">endnote control macros</a>.
+The attentive will notice that endnotes have an awful lot of control
+macros. This is because endnotes are like a mini-document unto
+themselves, and therefore need not be bound by the style parameters of
+the body of the document.
+
+<a name="ENDNOTE_SPACING">
+ <h3><u>A Note on Endnote Spacing</u></h3>
+</a>
+<p>
+On the endnotes page(s), each new endnote is separated from the
+previous endnote by a full line space. This can result in a bottom
+margin that hangs, and is the one instance, other than the use of
+<a href="#PP_SPACE">PARA_SPACE</a>,
+where <strong>mom</strong> allows unequal bottom alignment of pages.
+Should you wish to correct this, by adding or subtracting small amounts
+of space between endnotes that appear together on an endnote page, make
+the adjustment (with
+<a href="typesetting.html#ALD">ALD</a>,
+<a href="typesetting.html#RLD">RLD</a>
+or
+<a href="typesetting.html#SPACE">SPACE</a>)
+<em>at the end of each endnote</em> (i.e. just before invoking
+<a href="#ENDNOTE">ENDNOTE OFF</a>)
+rather than at the top.
+
+<a name="ENDNOTE_COLUMNS">
+ <h3><u>Endnotes and columnar documents</u></h3>
+</a>
+<p>
+At present, there is no way to set a document in columns (see
+<a href="docprocessing.html#COLUMNS">COLUMNS</a>)
+and then turn off column mode for endnotes. If your document is set in
+columns, your endnotes will be, too.
+<br>
+<hr>
+
+<!---ENDNOTE--->
+
+<p>
+<a name="ENDNOTE">
+ Macro: <strong>ENDNOTE</strong> <var>&lt;toggle&gt;</var>
+ <br>
+ <em>*See <a href="#ENDNOTE_NOTE">HYPER-IMPORTANT NOTE</a>!!!
+</a>
+
+<p>
+<strong>ENDNOTE</strong> is a toggle macro, therefore invoking it
+on a line by itself allows you to enter an endnote in the body of a
+document. Invoking it with any other argument
+(i.e. <strong>OFF, QUIT, END, X...</strong>) tells <strong>mom</strong>
+that you've finished the endnote.
+<p>
+<strong>NOTE:</strong> If an endnote runs to more than one paragraph,
+<strong>DO NOT</strong> begin the endnote with the
+<a href="#PP">PP</a>
+tag. Use <strong>PP</strong> only to introduce subsequent paragraphs.
+<p>
+<a name="ENDNOTE_NOTE"><strong>HYPER-IMPORTANT NOTE:</strong></a>
+The final word on the
+<a href="definitions.html#TERMS_INPUTLINE">input line</a>
+that comes immediately before <strong>ENDNOTE</strong> MUST terminate
+with a
+<a href="typesetting.html#JOIN">\c</a>
+inline escape. Otherwise, the endnote number for the word won't be attached to
+it (i.e. <strong>mom</strong> will insert a word space between the word
+and the number). See the
+<a href="#ENDNOTE_EXAMPLE">endnote example</a>
+above.
+<br>
+
+<!---ENDNOTES--->
+
+<hr width="66%" align="left">
+<p>
+<a name="ENDNOTES">Macro: <strong>ENDNOTES</strong></a>
+
+<p>
+Unlike footnotes, which <strong>mom</strong> automatically outputs at the
+bottom of pages, endnotes must be explicitly output by you, the user.
+<strong>ENDNOTES</strong>, by itself (i.e. without any argument), is
+the macro to do this.
+<p>
+Typically, you'll use <strong>ENDNOTES</strong> at the end of
+a document. If it's a single (i.e. not collated) document,
+<strong>mom</strong> will print the endnotes pertaining to it. If it's
+a collated document, <strong>mom</strong> will print all the endnotes
+contained within all sections of the document (typically chapters),
+appropriately identified and numbered.
+<p>
+Should you wish to output the endnotes for each section of a collated
+document at the ends of the sections (instead of at the very end of the
+document), simply invoke <strong>ENDNOTES</strong> immediately prior to
+<a href="rectoverso.html#COLLATE">COLLATE</a>.
+<strong>Mom</strong> will print the endnotes, identified and numbered
+appropriately, on a separate page prior to starting the next section of
+the document. Each subsequent invocation of <strong>ENDNOTES</strong>
+outputs only those endnotes that <strong>mom</strong> collected
+after the previous invocation.
+<br>
+<hr width="66%" align="left">
+
+<a name="ENDNOTE_CONTROL"><h3><u>Endnote control macros</u></h3></a>
+<p>
+Every time you embed an endnote in the body of a document,
+<strong>mom</strong> collects <em>and processes</em> the endnote for
+later outputting when you invoke
+<a href="#ENDNOTES">ENDNOTES</a>.
+For this reason, endnote control macros should always be invoked prior
+to the first instance of
+<a href="#ENDNOTE">ENDNOTE/ENDNOTE OFF</a>.
+<br>
+<ol>
+ <li><a href="#ENDNOTES_GENERAL"><strong>General endnotes-pages style control</strong></a>
+ <ul>
+ <li><a href="#ENDNOTE_GENERAL">Base family/font/quad for endnotes-pages</a>
+ <li><a href="#ENDNOTE_PT_SIZE">Base point size for the endnotes-pages</a>
+ <li><a href="#ENDNOTE_LEAD">Leading of endnotes-pages</a>
+ <li><a href="#ENDNOTE_PARA_INDENT">Size of paragraph first line indent in multi-paragraph endnotes</a>
+ <li><a href="#ENDNOTE_PARA_SPACE">Inserting space between paragraphs of multi-paragraph endnotes</a>
+ </ul>
+ <li><a href="#ENDNOTES_HEADER_CONTROL"><strong>Endnotes-page header/footer control</strong></a>
+ <li><a href="#ENDNOTES_MAIN_TITLE"><strong>Endnotes-page head control</strong></a>
+ <ul>
+ <li><a href="#ENDNOTE_STRING">Creating/modifying the endnotes-page head</a>
+ <li><a href="#ENDNOTE_STRING_CONTROL">Endnotes-page head control</a>
+ <li><a href="#ENDNOTE_STRING_UNDERSCORE">Endnotes-page head underscoring</a>
+ </ul>
+ <li><a href="#ENDNOTES_DOC_TITLE"><strong>Endnote document-identification title</strong></a>
+ <ul>
+ <li><a href="#ENDNOTE_TITLE">Creating/modifying the endnote document-identification title</a>
+ <li><a href="#ENDNOTE_TITLE_CONTROL">Document-identification title control</a>
+ <li><a href="#ENDNOTE_TITLE_UNDERSCORE">Document-identification title underscoring</a>
+ </ul>
+ <li><a href="#ENDNOTES_NUMBERING"><strong>Endnotes-pages endnote numbering style</strong></a>
+ <ul>
+ <li><a href="#ENDNOTE_NUMBER_CONTROL">Endnotes-pages endnote numbering style control</a>
+ <li><a href="#ENDNOTE_NUMBER_ALIGNMENT">Endnote numbering alignment</a>
+ <ul>
+ <li><a href="#ENDNOTE_NUMBERS_ALIGN_RIGHT">ENDNOTE_NUMBERS_ALIGN_RIGHT</a>
+ <li><a href="#ENDNOTE_NUMBERS_ALIGN_LEFT">ENDNOTE_NUMBERS_ALIGN_LEFT</a>
+ </ul>
+ </ul>
+</ol>
+<hr>
+
+<a name="ENDNOTES_GENERAL"><h2><u>1. General endnotes page style control</u></h2>
+
+<a name="ENDNOTE_GENERAL"><h3><u>Endnote family/font/quad</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+<pre>
+.ENDNOTE_FAMILY default = prevailing document family; default is Times Roman
+.ENDNOTE_FONT default = roman
+.ENDNOTE_QUAD default = justified
+</pre>
+
+<!---ENDNOTE_PT_SIZE--->
+
+<a name="ENDNOTE_PT_SIZE"><h3><u>Endnote point size</u></h3></a>
+<p>
+Macro: <strong>ENDNOTE_PT_SIZE</strong> <var>&lt;base type size of endnotes&gt;</var>
+
+<p>
+Unlike most other control macros that deal with size of document
+elements, <strong>ENDNOTE_PT_SIZE</strong> takes as its argument an
+absolute value, relative to nothing. Therefore, the argument represents
+the size of endnote type in
+<a href="definitions.html#TERMS_PICASPOINTS">points</a>,
+unless you append an alternative
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
+For example,
+<p>
+<pre>
+ .ENDNOTE_PT_SIZE 12
+</pre>
+
+sets the base point size of type on the endnotes page to 12
+points, whereas
+<p>
+<pre>
+ .ENDNOTE_PT_SIZE .6i
+</pre>
+
+sets the base point size of type on the endnotes page to 1/6 of an
+inch.
+<p>
+The type size set with <strong>ENDNOTE_PT_SIZE</strong> is the size of
+type used for the text of the endnotes, and forms the basis from which
+the point size of other endnote page elements is calculated.
+<p>
+The default for
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>
+is 12 points (the same default size used in the body of the document).
+
+<!---ENDNOTE_LEAD--->
+
+<a name="ENDNOTE_LEAD"><h3><u>Endnote lead</u></h3></a>
+<p>
+Macro: <strong>ENDNOTE_LEAD</strong> <var>&lt;base leading of endnotes&gt;</var>
+
+<p>
+Unlike most other control macros that deal with leading of document
+elements, <strong>ENDNOTE_LEAD</strong> takes as its argument an
+absolute value, relative to nothing. Therefore, the argument represents
+the
+<a href="definitions.html#TERMS_LEADING">leading</a>
+of endnotes in
+<a href="definitions.html#TERMS_PICASPOINTS">points</a>
+unless you append an alternative
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
+For example,
+<p>
+<pre>
+ .ENDNOTE_LEAD 14
+</pre>
+
+sets the base leading of type on the endnotes page to 14
+points, whereas
+<p>
+<pre>
+ .ENDNOTE_LEAD .5i
+</pre>
+
+sets the base leading of type on the endnotes page to 1/2 inch.
+<p>
+The default for
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>
+is 14 points.
+
+<!---ENDNOTE_PARA_INDENT--->
+
+<a name="ENDNOTE_PARA_INDENT"><h3><u>Endnote paragraph indent</u></h3></a>
+<p>
+Macro: <strong>ENDNOTE_PARA_INDENT</strong> <var>&lt;amount to indent first line of paragraphs in endnotes&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>ENDNOTE_PARA_INDENT</strong> works exactly the same way as
+<a href="#PARA_INDENT">PARA_INDENT</a>,
+except that the indent given is the amount by which to indent the first
+lines of endnote paragraphs, not document body paragraphs.
+<p>
+The default is 1.5
+<a href="definitions.html#TERMS_EM">ems</a>
+for
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>;
+1/2 inch for
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>.
+
+<p>
+<strong>NOTE:</strong> The first line of the first paragraph of endnotes
+(the one attached immediately to the identifying endnote number) is
+never indented. Only subsequent paragraphs are affected by
+<strong>ENDNOTE_PARA_INDENT</strong>.
+
+<!---ENDNOTE_PARA_SPACE--->
+
+<a name="ENDNOTE_PARA_SPACE"><h3><u>Endnote paragraph spacing</u></h3></a>
+<p>
+Macro: <strong>ENDNOTE_PARA_SPACE</strong> <var>&lt;toggle&gt;</var>
+
+<p>
+<strong>ENDNOTE_PARA_SPACE</strong> works exactly the same way as
+<a href="#PP_SPACE">PARA_SPACE</a>,
+except that it inserts a blank line between endnote paragraphs, not
+document body paragraphs.
+<p>
+The default is not to insert a blank line between paragraphs in
+endnotes.
+<p>
+<strong>NOTE:</strong> Each endnote itself is always separated from any
+previous endnote by a line space. <strong>ENDNOTE_PARA_SPACE</strong>
+refers only to paragraphs that appear within each discrete endnote.
+
+<a name="ENDNOTES_HEADER_CONTROL"><h2><u>2. Endnotes-page header/footer control</u></h2></a>
+<p>
+If you wish to modify the header/footer that appears on endnotes
+page(s), make the changes before you invoke
+<a href="#ENDNOTES">ENDNOTES</a>,
+not afterwards.
+<p>
+Except in the case of
+<a href="docprocessing.html#DOCTYPE">DOCTYPE CHAPTER</a>,
+<strong>mom</strong> prints the same header or footer used throughout
+the document on the endnotes page(s). Chapters get treated differently
+in that, by default, <strong>mom</strong> does not print the
+header/footer centre string (normally the chapter number or chapter
+title.) In most cases, this is what you want. However, should you
+<em>not</em> want <strong>mom</strong> to remove the centre string from
+the endnotes page(s) headers/footers, invoke
+<a href="#ENDNOTES_HDRFTR_CENTER">ENDNOTES_HEADER_CENTER</a>
+with no argument.
+
+<a name="ENDNOTES_HDRFTR_CENTER"><h3><u>Endnotes page(s) header/footer center string</u></h3></a>
+<p>
+Macro: <strong>ENDNOTES_HEADER_CENTER</strong> <var>toggle</var>
+
+<p>
+If your
+<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>
+is <kbd>CHAPTER</kbd> and you want <strong>mom</strong> to include
+a centre string in the headers/footers that appear on endnotes pages,
+invoke <strong>ENDNOTES_HEADER_CENTER</strong> (or
+<strong>ENDNOTES_FOOTER_CENTER</strong>) with no argument.
+<strong>Mom</strong>'s default is NOT to print the center string.
+<p>
+If, for some
+reason, having enabled the header/footer center string on endnotes
+pages, you wish to disable it, invoke the same macro with any argument
+(<strong>OFF, QUIT, Q, X</strong>...).
+
+<a name="ENDNOTES_MAIN_TITLE"><h2><u>3. Endnotes page head control</u></h2>
+
+<!---ENDNOTE_STRING--->
+
+<a name="ENDNOTE_STRING"><h3><u>Endnotes-page head string</u></h3></a>
+<p>
+Macro: <strong>ENDNOTE_STRING</strong> <var>&quot;&lt;head to print at the top of endnotes&gt;&quot;</var>
+
+<p>
+By default, <strong>mom</strong> prints the word &quot;ENDNOTES&quot;
+as a head at the top of the first page of endnotes. If you want her
+to print something else, invoke <strong>ENDNOTE_STRING</strong> with
+the endnotes-page head you want, surrounded by double-quotes. If
+you don't want a head at the top of the first endnotes-page, invoke
+<strong>ENDNOTE_STRING</strong> with a blank argument (either two
+double-quotes side by side -- <kbd>&quot;&quot;</kbd> -- or no argument
+at all).
+
+<!---ENDNOTE_STRING_CONTROL--->
+
+<a name="ENDNOTE_STRING_CONTROL"><h3><u>Endnotes-page head control</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+<pre>
+.ENDNOTE_STRING_FAMILY default = prevailing document family; default is Times Roman
+.ENDNOTE_STRING_FONT* default = bold
+.ENDNOTE_STRING_SIZE default = +1
+.ENDNOTE_STRING_QUAD default = centered
+
+*Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE)
+</pre>
+
+<!---ENDNOTE_STRING_UNDERSCORE--->
+
+<a name="ENDNOTE_STRING_UNDERSCORE"><h3><u>Endnotes-page head underscoring</h3></u></a>
+<p>
+Macro: <strong>ENDNOTE_STRING_UNDERSCORE</strong> <var>toggle | 2</var>
+
+<p>
+Invoked by itself, <strong>ENDNOTE_STRING_UNDERSCORE</strong> will
+underscore the endnotes-page head. Invoked with the argument 2
+(i.e. the digit 2), <strong>ENDNOTE_STRING_UNDERSCORE</strong> will
+double-underscore the head. Invoked with any other argument, the macro
+disables underscoring of the head.
+<p>
+<strong>Mom</strong>'s default is to double-underscore the
+head, therefore if you want no underscoring, you must insert
+<kbd>.ENDNOTE_STRING_UNDERSCORE OFF</kbd> (or <kbd>QUIT, X, NO,
+NONE,</kbd> etc.) into your document prior to outputting endnotes with
+<a href="#ENDNOTES">ENDNOTES</a>.
+
+<!---ENDNOTE_TITLE--->
+
+<a name="ENDNOTES_DOC_TITLE"><h2><u>4. Endnote document-identification title</u></h2>
+<a name="ENDNOTE_TITLE"><h3><u>Endnote document-identification title string</u></h3></a>
+<p>
+Macro: <strong>ENDNOTE_TITLE</strong> <var>&quot;&lt;title to identify a document in endnotes&gt;&quot;</var>
+
+<p>
+By default, <strong>mom</strong> identifies the document(s) to which
+endnotes belong by the document title(s) given to the
+<a href="docprocessing.html#TITLE">TITLE</a>
+macro. If you want her to identify the document(s) another way,
+invoke <strong>ENDNOTE_TITLE</strong> with the identifying title you
+want, surrounded by double-quotes. If you don't any identifying title,
+invoke <strong>ENDNOTE_TITLE</strong> with a blank argument (either two
+double-quotes side by side -- <kbd>&quot;&quot;</kbd> -- or no argument
+at all).
+
+<!---ENDNOTE_TITLE_CONTROL--->
+
+<a name="ENDNOTE_TITLE_CONTROL"><h3><u>Endnote document-identification title control</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+<pre>
+.ENDNOTE_TITLE_FAMILY default = prevailing document family; default is Times Roman
+.ENDNOTE_TITLE_FONT default = bold
+.ENDNOTE_TITLE_SIZE* default = 0
+.ENDNOTE_TITLE_QUAD default = left
+
+*Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE)
+</pre>
+
+<!---ENDNOTE_TITLE_UNDERSCORE--->
+
+<a name="ENDNOTE_TITLE_UNDERSCORE"><h3><u>Endnote document-identification title underscoring</h3></u></a>
+<p>
+Macro: <strong>ENDNOTE_TITLE_UNDERSCORE</strong> <var>toggle</var>
+
+<p>
+Inovked by itself, <strong>ENDNOTE_TITLE_UNDERSCORE</strong> will
+underscore the endnote document-identification title. Invoked with any
+other argument, the macro disables underscoring of the title.
+<p>
+<strong>Mom</strong>'s default is to underscore the document-identification title, therefore if you want no underscoring, you must
+insert <kbd>.ENDNOTE_TITLE_UNDERSCORE OFF</kbd> (or <kbd>QUIT, X, NO,
+NONE,</kbd> etc.) into your document prior to outputting endnotes with
+<a href="#ENDNOTES">ENDNOTES</a>.
+
+at all.
+
+<!---ENDNOTE_NUMBERING--->
+
+<a name="ENDNOTES_NUMBERING"><h2><u>5. Endnotes-pages endnote numbering style</u></h2>
+
+<a name="ENDNOTE_NUMBER_CONTROL"><h3><u>Endnote numbering style control</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+Please note that the control macros for endnote numbering affect only
+the numbers that appear on the endnotes pages themselves, not the
+endnote numbers that appear in the body of the document(s).
+<p>
+<pre>
+.ENDNOTE_NUMBER_FAMILY default = prevailing document family; default is Times Roman
+.ENDNOTE_NUMBER_FONT default = bold
+.ENDNOTE_NUMBER_SIZE* default = 0
+
+*Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE)
+</pre>
+
+<a name="ENDNOTE_NUMBER_ALIGNMENT"><h3><u>Endnote numbering alignment</u></h3></a>
+<p>
+By default, <strong>mom</strong> hangs the numbers on endnotes pages,
+aligned right to two placeholders, producing this:
+<p>
+<a name="ENDNOTE_NUMBERING_ALIGNMENT_EXAMPLE"></a>
+<pre>
+ 9. Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
+ sed diam nonumy eirmod tempor invidunt ut labore et
+ dolore magna aliquyam erat, sed diam voluptua.
+
+ 10. Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
+ sed diam nonumy eirmod tempor invidunt ut labore et
+ dolore magna aliquyam erat, sed diam voluptua.
+</pre>
+
+The macros to alter this behaviour are
+<br>
+<ul>
+ <li><a href="#ENDNOTE_NUMBERS_ALIGN_RIGHT"><strong>ENDNOTE_NUMBERS_ALIGN_RIGHT</strong></a>
+ <li><a href="#ENDNOTE_NUMBERS_ALIGN_LEFT"><strong>ENDNOTE_NUMBERS_ALIGN_LEFT</strong></a>
+</ul>
+<br>
+<hr width="66%" align="left">
+
+<!---ENDNOTE_NUMBERS_ALIGN_RIGHT--->
+
+<p>
+<a name="ENDNOTE_NUMBERS_ALIGN_RIGHT">
+ Macro: <strong>ENDNOTE_NUMBERS_ALIGN_RIGHT</strong> <var>&lt;number of placeholders&gt;</var>
+</a>
+<p>
+<strong>ENDNOTE_NUMBERS_ALIGN_RIGHT</strong> takes one (non-optional)
+argument: the number of placeholders to reserve for right alignment of
+endnote numbers.
+<p>
+For example, if you have fewer than ten endnotes, you might want to do
+<p>
+<pre>
+ .ENDNOTE_NUMBERS_ALIGN_RIGHT 1
+</pre>
+
+which would ensure that the endnote numbers hang, but are all flush
+with the page's left margin. If, god help you, you have over a hundred
+endnotes, you'd want to do
+<p>
+<pre>
+ .ENDNOTE_NUMBERS_ALIGN_RIGHT 3
+</pre>
+
+to ensure that the numbers hang and are properly right-aligned.
+<br>
+<hr width="66%" align="left">
+
+<!---ENDNOTE_NUMBERS_ALIGN_LEFT--->
+
+<p>
+<a name="ENDNOTE_NUMBERS_ALIGN_LEFT">
+ Macro: <strong>ENDNOTE_NUMBERS_ALIGN_LEFT</strong>
+</a>
+<p>
+If you don't want the endnote numbers to hang and right-align, invoke
+<strong>ENDNOTE_NUMBERS_ALIGN_LEFT</strong>, which doesn't require any
+argument. This disables hanging and right-alignment of endnote numbers,
+so that the example
+<a href="#ENDNOTE_NUMBERING_ALIGNMENT_EXAMPLE">above</a>
+comes out like this:
+<p>
+<pre>
+ 9. Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
+ sed diam nonumy eirmod tempor invidunt ut labore et
+ dolore magna aliquyam erat, sed diam voluptua.
+
+ 10. Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
+ sed diam nonumy eirmod tempor invidunt ut labore et
+ dolore magna aliquyam erat, sed diam voluptua.
+</pre>
+
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="FINIS_INTRO"><h2><u>Terminate document processing</u></h2></a>
+<ul>
+ <li><a href="#FINIS">Tag: FINIS</a>
+ <li><a href="#FINIS_STRING">Changing the FINIS string</a>
+</ul>
+
+<p>
+The use of <strong>FINIS</strong> is optional. If you invoke it
+(at the end of a document, of course), <strong>mom</strong> turns off
+<a href="definitions.html#TERMS_FOOTER">footers</a>
+(if they're on) and page numbering (if page
+numbers are at the bottom of the page) and deposits the word
+END, centered after a blank line, beneath the last
+line of the document. END is enclosed between
+<a href="definitions.html#TERMS_EM">em-dashes</a>.
+<p>
+If you're writing in a language other than English, you can
+change what <strong>mom</strong> prints for END with
+the control macro <strong>FINIS_STRING</strong>.
+<br>
+
+<!---FINIS--->
+
+<hr width="66%" align="left">
+<p>
+<a name="FINIS">
+ Macro: <strong>FINIS</strong>
+</a>
+
+<p>
+The use of <strong>FINIS</strong> is optional, but if you use
+it, it should be the last macro you invoke in a document. See
+<a href="#FINIS_INTRO">above</a>
+for a description of how <strong>FINIS</strong> behaves.
+<p>
+<strong>NOTE:</strong> If you don't use <strong>FINIS</strong>,
+and you don't want
+<a href="definitions.html#TERMS_FOOTER">footers</a>
+(if they're on) or a page number at the bottom of the last page of
+a document, you have to turn them off manually, as the last two
+lines of your document file, like this:
+<p>
+<pre>
+ .FOOTERS OFF
+ .PAGINATE OFF
+</pre>
+
+<a name="FINIS_STRING"><h3><u>Changing the FINIS string</u></h3></a>
+
+<p>
+By default, <strong>FINIS</strong> prints the word
+END between
+<a href="definitions.html#TERMS_EM">em-dashes</a>.
+If you'd like <strong>mom</strong> to print something else
+between the dashes, use the <strong>FINIS_STRING</strong> macro
+(anywhere in the document prior to <strong>FINIS</strong>).
+<p>
+For example, if your document's in French, you'd do
+<p>
+<pre>
+ .FINIS_STRING "FIN"
+</pre>
+
+Double-quotes must enclose the macro's argument.
+<p>
+<strong>NOTE:</strong> If you pass <strong>FINIS_STRING</strong>
+a blank string, i.e.
+<p>
+<pre>
+ .FINIS_STRING ""
+</pre>
+
+<strong>mom</strong> will still print the em-dashes if you
+invoke <strong>FINIS</strong>. This, in effect, produces a
+short, centered horizontal rule that terminates the document.
+(In
+<a href="docprocessing.html.#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+it's a short, dashed line composed of four hyphens.)
+
+<p>
+<hr>
+<a href="headfootpage.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="docprocessing.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/docprocessing.html b/contrib/groff/contrib/mom/momdoc/docprocessing.html
new file mode 100644
index 0000000..4c8b1f0
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/docprocessing.html
@@ -0,0 +1,1799 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Document Processing, Introduction and Setup</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="docelement.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="inlines.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="DOCPROCESSING">
+ <h1 align="center"><u>DOCUMENT PROCESSING WITH MOM</u>
+</h1>
+</a>
+
+<a href="#INTRO_MACROS_DOCPROCESSING">Introduction to document processing</a>
+<br>
+<a href="#DEFAULTS">Some document defaults</a>
+<p>
+<a href="#LEADING_NOTE">* IMPORTANT NOTE on leading/spacing and bottom margins *</a>
+<p>
+<ul>
+ <li><a href="#SETUP"><strong>DOCUMENT SETUP</strong></a>
+ <br>
+ <a href="#DOCPROCESSING_TUT">Tutorial -- Setting up a mom document</a>
+ <br>
+ <ul>
+ <li><a href="#REFERENCE_MACROS"><strong>The Reference Macros</strong></a>
+ <ul>
+ <li><a href="#TITLE">TITLE</a>
+ <li><a href="#SUBTITLE">SUBTITLE</a>
+ <li><a href="#AUTHOR">AUTHOR</a>
+ <li><a href="#CHAPTER">CHAPTER</a>
+ <li><a href="#DRAFT">DRAFT</a>
+ <li><a href="#REVISION">REVISION</a>
+ </ul>
+ <li><a href="#DOCSTYLE_MACROS"><strong>The Docstyle Macros</strong></a>
+ <ul>
+ <li><a href="#DOCTYPE">DOCTYPE</a>
+ <li><a href="#PRINTSTYLE">PRINTSTYLE</a>
+ <li><a href="#COPYSTYLE">COPYSTYLE</a>
+ </ul>
+
+ <li><a href="#STYLE_BEFORE_START"><strong>Changing type/style parameters prior to START</strong></a>
+ <ul>
+ <li><a href="#TYPE_BEFORE_START">Using typesetting macros prior to START</a>
+ <li><a href="#DOC_LEAD_ADJUST">Adjusting document leading to fill pages -- DOC_LEAD_ADJUST</a>
+ <li><a href="#DOCHEADER">Managing the document header</a>
+ <ul>
+ <li><a href="#DOCHEADER">DOCHEADER -- turning docheaders off</a>
+ <li><a href="#DOCHEADER_CONTROL">Docheader control</a>
+ </ul>
+ </ul>
+
+ <li><a href="#COLUMNS_INTRO"><strong>Setting documents in columns</strong></a>
+ <ul>
+ <li><a href="#COLUMNS">COLUMNS</a>
+ <li><a href="#BREAKING_COLUMNS">Breaking columns manually</a>
+ <ul>
+ <li><a href="#COL_NEXT">COL_NEXT</a>
+ <li><a href="#COL_BREAK">COL_BREAK</a>
+ </ul>
+
+ </ul>
+
+ <li><a href="#START_MACRO"><strong>Initiate document processing</strong></a>
+ <ul>
+ <li><a href="#START">START</a>
+ </ul>
+
+ <li><a href="#DOC_PARAM_MACROS"><strong>Changing document-wide typesetting parameters after START</strong></a>
+ <ul>
+ <li><a href="#DOC_LEFT_MARGIN">DOC_LEFT_MARGIN</a>
+ <li><a href="#DOC_RIGHT_MARGIN">DOC_RIGHT_MARGIN</a>
+ <li><a href="#DOC_LINE_LENGTH">DOC_LINE_LENGTH</a>
+ <li><a href="#DOC_FAMILY">DOC_FAMILY</a>
+ <li><a href="#DOC_PT_SIZE">DOC_PT_SIZE</a>
+ <li><a href="#DOC_LEAD">DOC_LEAD</a>
+ <li><a href="#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
+ <li><a href="#DOC_QUAD">DOC_QUAD</a>
+ </ul>
+ <br>
+ <li><a href="docelement.html#DOCELEMENT"><strong>THE DOCUMENT ELEMENT MACROS (TAGS)</strong></a>
+ <ul>
+ <li><a href="docelement.html#DOCELEMENT_INTRO">Introduction to the document element tags</a>
+ <ul>
+ <li><a href="docelement.html#DOCELEMENT_CONTROL">Document element (tag) control macros</a>
+ <li><a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
+ </ul>
+ <li><a href="docelement.html#EPIGRAPH_INTRO"><strong>Epigraphs</strong></a>
+ <ul>
+ <li><a href="docelement.html#EPIGRAPH">EPIGRAPH</a>
+ <li><a href="docelement.html#EPIGRAPH_CONTROL">Epigrah control</a>
+ </ul>
+ <li><a href="docelement.html#PP_INTRO"><strong>Paragraphs</strong></a>
+ <ul>
+ <li><a href="docelement.html#PP">PP</a>
+ <li><a href="docelement.html#PP_CONTROL">Paragraph control</a>
+ </ul>
+ <li><a href="docelement.html#HEAD_INTRO"><strong>Main heads</strong></a>
+ <ul>
+ <li><a href="docelement.html#HEAD">HEAD</a>
+ <li><a href="docelement.html#HEAD_CONTROL">Head control</a>
+ </ul>
+ <li><a href="docelement.html#SUBHEAD_INTRO"><strong>Subheads</strong></a>
+ <ul>
+ <li><a href="docelement.html#SUBHEAD">SUBHEAD</a>
+ <li><a href="docelement.html#SUBHEAD_CONTROL">Subhead control</a>
+ </ul>
+ <li><a href="docelement.html#PARAHEAD_INTRO"><strong>Paragraph heads</strong></a>
+ <ul>
+ <li><a href="docelement.html#PARAHEAD">PARAHEAD</a>
+ <li><a href="docelement.html#PARAHEAD_CONTROL">Parahead control</a>
+ </ul>
+ <li><a href="docelement.html#LINEBREAK_INTRO"><strong>Linebreaks (author linebreaks)</strong></a>
+ <ul>
+ <li><a href="docelement.html#LINEBREAK">LINEBREAK</a>
+ <li><a href="docelement.html#LINEBREAK_CONTROL">Linebreak control</a>
+ </ul>
+ <li><a href="docelement.html#QUOTE_INTRO"><strong>Quotes (line for line poetic quotes)</strong></a>
+ <ul>
+ <li><a href="docelement.html#QUOTE">QUOTE</a>
+ <li><a href="docelement.html#QUOTE_CONTROL">Quote control</a>
+ </ul>
+ <li><a href="docelement.html#BLOCKQUOTE_INTRO"><strong>Blockquotes (cited material)</strong></a>
+ <ul>
+ <li><a href="docelement.html#BLOCKQUOTE">BLOCKQUOTE</a>
+ <li><a href="docelement.html#BLOCKQUOTE_CONTROL">Blockquote control</a>
+ </ul>
+ <li><a href="docelement.html#FOOTNOTE_INTRO"><strong>Footnotes</strong></a>
+ <ul>
+ <li><a href="docelement.html#FOOTNOTE">FOOTNOTE</a>
+ <li><a href="docelement.html#FOOTNOTE_CONTROL">Footnote control</a>
+ </ul>
+ <li><a href="docelement.html#ENDNOTE_INTRO"><strong>Endnotes</strong></a>
+ <ul>
+ <li><a href="docelement.html#ENDNOTE">ENDNOTE</a>
+ <li><a href="docelement.html#ENDNOTE_CONTROL">Endnote control</a>
+ </ul>
+ <li><a href="docelement.html#FINIS_INTRO"><strong>Document termination</strong></a>
+ <ul>
+ <li><a href="docelement.html#FINIS">FINIS</a>
+ <li><a href="docelement.html#FINIS_CONTROL">Finis control</a>
+ </ul>
+ </ul>
+
+ <li><a href="headfootpage.html#HEADFOOTPAGE"><strong>HEADERS and FOOTERS</strong></a>
+ <br>
+ <ul>
+ <li><a href="headfootpage.html#HEADFOOTPAGE_INTRO">Introduction to headers/footers</a>
+ <li><a href="headfootpage.html#HEADFOOT_MANAGEMENT">Managing headers/footers</a>
+ <ul>
+ <li><a href="headfootpage.html#HEADERS">HEADERS</a> -- on or off
+ <li><a href="headfootpage.html#FOOTERS">FOOTERS</a> -- on or off
+ <li><a href="headfootpage.html#FOOTER_ON_FIRST_PAGE">FOOTER_ON_FIRST_PAGE</a>
+ </ul>
+ <li><a href="headfootpage.html#HEADFOOT_CONTROL">Header/footer control</a>
+ <ul>
+ <li><a href="headfootpage.html#HDRFTR_STRINGS">Header/footer strings</a>
+ <li><a href="headfootpage.html#HDRFTR_STYLE">Header/footer style</a> -- global and part-by-part
+ <li><a href="headfootpage.html#HDRFTR_VERTICAL">Header/footer placement and spacing</a>
+ <li><a href="headfootpage.html#HDRFTR_SEPARATOR">The header/footer separator rule</a>
+ </ul>
+ </ul>
+ <li><a href="headfootpage.html#PAGINATION"><strong>PAGINATION</strong></a>
+ <br>
+ <ul>
+ <li><a href="headfootpage.html#PAGINATE">PAGINATE</a> -- on or off
+ <li><a href="headfootpage.html#PAGENUMBER">PAGENUMBER</a> -- user supplied page number
+ <li><a href="headfootpage.html#PAGENUM_STYLE">PAGENUM_STYLE</a> -- digits, roman numerals, etc.
+ <li><a href="headfootpage.html#DRAFT_WITH_PAGENUMBER">DRAFT_WITH_PAGENUMBER</a> -- attach draft/revision information to page numbers
+ <li><a href="headfootpage.html#PAGINATE_CONTROL">Pagination control</a>
+ </ul>
+ <br>
+ <li><a href="rectoverso.html#RECTOVERSO"><strong>RECTO_VERSO PRINTING and COLLATING</strong></a>
+ <br>
+ <ul>
+ <li><a href="rectoverso.html#RECTOVERSO_INTRO">Introduction to recto/verso</a>
+ <ul>
+ <li><a href="rectoverso.html#RECTO_VERSO">RECTO_VERSO</a>
+ <li><a href="rectoverso.html#SWITCH_HDRFTR">SWITCH_HEADERS</a> (also FOOTERS)
+ </ul>
+ <li><a href="rectoverso.html#COLLATE_INTRO">Introduction to collating</a>
+ <ul>
+ <li><a href="rectoverso.html#COLLATE">COLLATE</a>
+ </ul>
+ </ul>
+
+ <li><a href="cover.html#COVER"><strong>CREATING A COVER PAGE</strong></a>
+ <br>
+ <li><a href="letters.html#LETTERS"><strong>WRITING LETTERS</strong></a>
+ <ul>
+ <li><a href="letters.html#LETTERS_INTRO">Introduction to writing letters</a>
+ <li><a href="letters.html#TUTORIAL">Tutorial on writing letters</a>
+ <li><a href="letters.html#LETTERS_DEFAULTS">Default style for letters</a>
+ <li><a href="letters.html#LETTERS_MACROS">The letter macros</a>
+ </ul>
+ </ul>
+</ul>
+<hr>
+
+<h2><a name="INTRO_MACROS_DOCPROCESSING"><u>Introduction to document processing</u></a></h2>
+<p>
+As explained in
+<a href="intro.html#INTRO_DOCPROCESSING">Document processing with mom</a>,
+document processing uses markup tags to identify document elements
+like heads, paragraphs, and so on. The tags are, of course, macros,
+but with sensible, readable names that make them easy to grasp and
+easy to remember. (And don't forget: if you don't like the
+&quot;official&quot; name of a tag -- too long, cumbersome
+to type in, not &quot;intuitive&quot; enough -- you can change it
+with the
+<a href="goodies.html#ALIAS">ALIAS</a>
+macro.)
+<p>
+In addition to the tags themselves, <strong>mom</strong> has an
+extensive array of macros that control how they look and behave.
+<p>
+Setting up a <strong>mom</strong> doc is a simple, four-part procedure.
+You begin by entering information about the document itself (title,
+subtitle, author, etc.). Next, you tell <strong>mom</strong> what
+kind of document you're creating (e.g. chapter, letter, abstract,
+etc...) and what kind of output you want (typeset, typewrittten,
+draft-style, etc). Thirdly, you make as many or as few changes to
+<strong>mom</strong>'s default behaviour as you wish. Lastly, you
+invoke the
+<a href="#START">START</a>
+macro. Voilà! You're ready to write.
+<br>
+<hr>
+
+
+<h2><a name="DEFAULTS"><u>Some document defaults</u></a></h2>
+
+As is to be expected, <strong>mom</strong> has defaults for everything.
+If you want to know a particular default, read about it in the
+description of the pertinent tag.
+<p>
+I fear the following may not be adequately covered in the
+documentation. Just in case, here they are.
+<p>
+<ul>
+ <li>the paper size is 8.5x11 inches
+ <li>the left and right margins are 1-inch
+ <li>the top and bottom margins for document text are plus/minus
+ visually 1-inch
+ <li>pages are numbered; the number appears centered, at the
+ bottom, surrounded by hyphens ( e.g. -6- )
+ <li>the first page of a document begins with a
+ <a href="definitions.html#TERMS_DOCHEADER">document header</a>
+ <li>subsequent pages have
+ <a href="definitions.html#TERMS_HEADER">page headers</a>
+ with a rule underneath
+</ul>
+<p>
+Another way to check up on document processing defaults is to have
+a look at the macro file (om.tmac). Each macro is preceded by a
+description that (generally) says what its default is (if it has
+one).
+<br>
+<hr>
+
+<a name="LEADING_NOTE">
+ <h2><u>IMPORTANT NOTE on leading/spacing and bottom margins</u></h2>
+</a>
+
+<strong>Mom</strong> takes evenly-aligned bottom margins in
+<a href="definitions.html#TERMS_RUNNING">running text</a>
+very seriously. Only under a very few (exceptional) circumstances
+will she allow a bottom margin to &quot;hang&quot; (i.e. to fall
+short).
+<p>
+In order to ensure even bottom margins, <strong>mom</strong>
+uses the &quot;base&quot; document
+<a href="definitions.html#TERMS_LEADING">leading</a>
+in effect <em>at the start of each page</em> (i.e. the leading used
+in paragraphs) to calculate the spacing of every document element.
+Prior to invoking
+<a href="#START">START</a>,
+this is done with the
+<a href="typesetting.html#MACROS_TYPESETTING">typesetting macro</a>
+<a href="typesetting.html#LEADING">LS</a>,
+afterwards with the document
+<a href="definitions.html#TERMS_CONTROLMACRO">control macro</a>
+<a href="#DOC_LEAD">DOC_LEAD</a>.
+<p>
+Because <strong>mom</strong> relies so heavily on the base document
+leading, any change to the leading or spacing on a page will almost
+certainly have undesirable consequences on that page's bottom margin
+unless the change is fully compensated for elsewhere on the page.
+<p>
+In other words, if you add a few points of space somewhere on a page,
+you must subtract the same number of points somewhere else on that
+same page, and vice versa.
+<p>
+If it's a question of adding or subtracting full line spaces between
+or within document elements, you can do so by using the &quot;v&quot;
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+with whatever spacing macro you choose --
+<a href="typesetting.html#ALD">ALD</a>,
+<a href="typesetting.html#RLD">RLD</a>,
+<a href="typesetting.html#SPACE">SPACE</a>
+-- and <strong>mom</strong> won't object. &quot;v&quot; means
+&quot;the current leading&quot;, so she isn't confused by it. And
+since &quot;v&quot; accepts decimal fractions, you can add/subtract
+half linespaces and quarter linespaces with &quot;v&quot; as well,
+<em>provided you compensate for the fractional linespace somewhere
+else on the page</em>.
+<br>
+<hr>
+
+<a name="SETUP"><h2><u>Document setup</u></h2></a>
+
+<a name="DOCPROCESSING_TUT">
+ <h3><u>Tutorial -- Setting up a mom document</u></h3>
+</a>
+<p>
+There are four &quot;parts&quot; to setting up a <strong>mom</strong>
+doc (three, actually, with one optional). Before we proceed, though,
+be reassured that something as simple as
+<p>
+<pre>
+ .TITLE "By the Shores of Lake Attica"
+ .AUTHOR "Rosemary Winspeare"
+ .PRINTSTYLE TYPESET
+ .START
+</pre>
+
+produces a beautifully typeset 8.5x11 document, with a
+<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
+at the top of page 1,
+<a href="definitions.html#TERMS_HEADER">page headers</a>
+with the title and author on subsequent
+pages, and page numbers at the bottom of each page. In the course
+of the document, heads, subheads, citations, quotes, epigraphs,
+and so on, all come out looking neat, trim, and professional.
+<p>
+For the purposes of this tutorial, we're going to set up a short
+story -- <em>My Pulitzer Winner</em> by Joe Blow. Thankfully,
+we don't have to look at story itself, just the setup.
+Joe wants the document
+<p>
+<ul>
+ <li>to be draft 7, revision 39;
+ <li>to use the &quot;default&quot; style of document formatting:
+ <li>to print as draft-style output (instead of &quot;final&quot; copy output);
+ <li>to be typeset, in Helvetica, 12 on 14,
+ <a href="definitions.html#TERMS_RAG">rag-right</a>;
+ <li>to have <a href="definitions.html#TERMS_FOOTER">footers</a>
+ instead of
+ <a href="definitions.html#TERMS_HEADER">headers</a>;
+ <li>to use a single asterisk for
+ <a href="definitions.html#TERMS_LINEBREAK">author linebreaks</a>.
+</ul>
+<p>
+Joe Blow has no taste in typography. His draft won't look pretty,
+but this is, after all, a tutorial; we're after examples, not beauty.
+<h3><u>Step 1</u></h3>
+
+The first step in setting up any document is giving <strong>mom</strong>
+some reference information. The reference macros are:
+<p>
+<ul>
+ <li>TITLE
+ <li>SUBTITLE
+ <li>AUTHOR
+ <li>CHAPTER -- the chapter number
+ <li>DRAFT -- the draft number
+ <li>REVISION -- the revision number
+</ul>
+<p>
+You can use as many or as few as you wish, although at a minimum,
+you'll probably fill in <strong>TITLE</strong> (unless the document's
+a letter) and <strong>AUTHOR</strong>. Order doesn't matter.
+You can separate the
+<a href="definitions.html#TERMS_ARGUMENTS">arguments</a>
+from the macros by any number of spaces. The following are
+what you'd need to start Joe Blow's story.
+<p>
+<pre>
+ .TITLE "My Pulitzer Winner"
+ .AUTHOR "Joe Blow"
+ .DRAFT 7
+ .REVISION 39
+</pre>
+
+<h3><u>Step 2</u></h3>
+
+Once you've given <strong>mom</strong> the reference information she
+needs, you tell her how you want your document formatted. What kind
+of document is it? Should it be typeset or typewritten? Is this
+a &quot;final&quot; copy (for the world to see) or just a draft?
+<strong>Mom</strong> calls the macros that answer these questions
+&quot;the docstyle macros.&quot; They are:
+<p>
+<ul>
+ <li>DOCTYPE -- the type of document (default, chapter, user-defined, letter)
+ <li>PRINTSTYLE -- typeset or typewritten
+ <li>COPYSTYLE -- draft or final copy
+</ul>
+<p>
+<strong>Mom</strong> has defaults for <strong>DOCTYPE</strong>
+and <strong>COPYSTYLE</strong>; if they're what you want, you
+don't need to include them here. However, <strong>PRINTSTYLE</strong>
+has no default and MUST be present in every formatted document.
+If you omit it, <strong>mom</strong> won't process the document AND
+she'll complain (both to stderr and as a single printed sheet with
+a warning). Moms -- they can be so annoying sometimes. &lt;sigh&gt;
+<p>
+Adding to what we already have, the next bit of setup for Joe
+Blow's story looks like this:
+<p>
+<pre>
+ .TITLE "My Pulitzer Winner"
+ .AUTHOR "Joe Blow"
+ .DRAFT 7
+ .REVISION 39
+ \#
+ .DOCTYPE DEFAULT \"Superfluous; mom uses DOCTYPE DEFAULT by default
+ .PRINTSTYLE TYPESET
+ .COPYSTYLE DRAFT
+</pre>
+
+Notice the use of the
+<a href="definitions.html#TERMS_COMMENTLINES">comment line</a>
+( \# ), a handy way to keep groups of macros visually separated
+for easy reading in a text editor.
+
+<h3><u>Step 3</u></h3>
+
+This step -- completely optional -- is where you, the user, take
+charge. <strong>Mom</strong> has defaults for <em>everything</em>,
+but who's ever satisfied with defaults? Use any of the <a
+href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
+here to change <strong>mom</strong>'s document defaults (paper
+size, margins, family, point size, line space, rag, etc), or
+any of the document processing macros that set/change/control
+the appearance of document elements. Think of this as the
+&quot;style-sheet &quot; section of a document.
+<p>
+Joe Blow wants his story printed in Helvetica, 12 on 14, rag
+right, with
+<a href="definitions.html#TERMS_FOOTER">page footers</a>
+instead of
+<a href="definitions.html#TERMS_HEADER">page headers</a>
+and a single asterisk for the
+<a href="definitions.html#TERMS_LINEBREAK">linebreak</a>
+character. None of these requirements conforms
+to <strong>mom</strong>'s defaults for the chosen
+<strong>PRINTSTYLE</strong> (TYPESET), so we change them here.
+The setup for Joe Blow's story now looks like this:
+<p>
+<pre>
+ .TITLE "My Pulitzer Winner"
+ .AUTHOR "Joe Blow"
+ .DRAFT 7
+ .REVISION 39
+ \#
+ .DOCTYPE DEFAULT
+ .PRINTSTYLE TYPESET
+ .COPYSTYLE DRAFT
+ \#
+ .FAMILY H
+ .PT_SIZE 12
+ .LS 14
+ .QUAD LEFT \"ie. rag right
+ .FOOTERS
+ .LINEBREAK_CHAR *
+</pre>
+
+<h3><u>Step 4</u></h3>
+The final step in setting up a document is telling <strong>mom</strong>
+to start document processing. It's a no-brainer, just the single macro
+<strong>START</strong>. Other than <strong>PRINTSTYLE</strong>, it's
+the only macro required for document processing (although
+I can't guarantee you'll like the results of using just the two).
+<p>
+Here's the complete setup for <em>My Pulitzer Winner</em>:
+<p>
+<pre>
+ .TITLE "My Pulitzer Winner"
+ .AUTHOR "Joe Blow"
+ .DRAFT 7
+ .REVISION 39
+ \#
+ .DOCTYPE DEFAULT
+ .PRINTSTYLE TYPESET
+ .COPYSTYLE DRAFT
+ \#
+ .FAMILY H
+ .PT_SIZE 12
+ .LS 14
+ .QUAD LEFT \"ie. rag right
+ .FOOTERS
+ .LINEBREAK_CHAR *
+ \#
+ .START
+</pre>
+
+As pointed out earlier, Joe Blow is no typographer. Given that all he
+needs is a printed draft of his work, a simpler setup would have been:
+<p>
+<pre>
+ .TITLE "My Pulitzer Winner"
+ .AUTHOR "Joe Blow"
+ .DRAFT 7
+ .REVISION 39
+ \#
+ .PRINTSTYLE TYPEWRITE
+ .COPYSTYLE DRAFT
+ \#
+ .START
+</pre>
+
+<kbd>.PRINTSTYLE TYPEWRITE</kbd>, above, means that Joe's work
+will come out &quot;typewritten, double-spaced&quot;, making the
+blue-pencilling he (or someone else) is sure to do much
+easier (which is why many publishers and agents still insist on
+typewritten, double-spaced copy).
+<p>
+When J. Blow stops re-writing and decides to print off a final,
+typeset copy of his work for the world to see, he need only
+make two changes to the (simplified) setup:
+<p>
+<pre>
+ .TITLE "My Pulitzer Winner"
+ .AUTHOR "Joe Blow"
+ .DRAFT 7
+ .REVISION 39
+ \#
+ .PRINTSTYLE TYPESET \"first change
+ .COPYSTYLE FINAL \"second change
+ \#
+ .START
+</pre>
+
+In the above, <kbd>.DRAFT 7, .REVISION 39,</kbd> and <kbd>.COPYSTYLE
+FINAL</kbd> are actually superfluous. The draft and revision numbers
+aren't used when <strong>COPYSTYLE</strong> is <strong>FINAL</strong>,
+and <strong>COPYSTYLE FINAL</strong> is <strong>mom</strong>'s
+default unless you tell her otherwise. BUT... to judge from the
+number of drafts already, J. Blow may very well decide his
+&quot;final&quot; version still isn't up to snuff. Hence, he might
+as well leave in the superfluous macros. That way, when draft 7,
+rev. 62 becomes draft 8, rev. 1, he'll be ready to tackle his Pulitzer
+winner again.
+<br>
+<hr>
+
+<!========================================================================>
+
+<a name="REFERENCE_MACROS">
+ <h2><u>The Reference Macros</u></h2>
+</a>
+
+The reference macros give <strong>mom</strong> the information
+she needs to generate
+<a href="definitions.html#TERMS_DOCHEADER">docheaders</a>
+and
+<a href="definitions.html#TERMS_HEADER">page headers</a>. They
+must go at the top of any file that uses <strong>mom</strong>'s
+document processing macros.
+
+<a name="INDEX_REFERENCE">
+ <h3><u>Reference macros list</u></h3>
+</a>
+
+<ul>
+ <li><a href="#TITLE">TITLE</a>
+ <li><a href="#SUBTITLE">SUBTITLE</a>
+ <li><a href="#AUTHOR">AUTHOR</a>
+ <li><a href="#CHAPTER">CHAPTER</a>
+ <li><a href="#DRAFT">DRAFT</a>
+ <li><a href="#REVISION">REVISION</a>
+</ul>
+
+<!---TITLE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="TITLE"></a>
+Macro: <strong>TITLE</strong> <var>&quot;&lt;title&gt;&quot;</var>
+<br>
+<em>*Argument must be enclosed in double-quotes</em>
+
+<p>
+The title string can be caps or caps/lower-case; it's up to you.
+In
+<a href="#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
+the title will appear in the
+<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
+exactly as you typed it. However, <strong>mom</strong> converts
+the title to all caps in
+<a href="definitions.html#TERMS_HEADER">page headers</a>
+unless you turn that feature off (see
+<a href="headfootpage.html#_CAPS">HEADER_&lt;POSITION&gt;_CAPS</a>). In
+<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+the title always gets converted to caps.
+<p>
+<strong>NOTE:</strong> If your
+<a href="#DOCTYPE">DOCTYPE</a>
+is <strong>CHAPTER</strong>, <strong>TITLE</strong> should be the
+title of the opus, not &quot;CHAPTER whatever&quot;.
+<br>
+
+<!---SUBTITLE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="SUBTITLE"></a>
+Macro: <strong>SUBTITLE</strong> <var>&quot;&lt;subtitle&gt;&quot;</var>
+<br>
+<em>*Argument must be enclosed in double-quotes</em>
+
+<p>
+The subtitle string can be caps or caps/lower-case. Since a
+document's subtitle appears only in the
+<a href="definitions.html#TERMS_DOCHEADER">docheader</a>,
+and the title is most likely in caps, I recommend caps/lower case.
+<br>
+
+<!---AUTHOR--->
+
+<hr width="66%" align="left">
+<p>
+<a name="AUTHOR"></a>
+Macro: <strong>AUTHOR</strong> <var>&quot;&lt;author string&gt;&quot; [ &quot;&lt;author2 string&gt;&quot; &quot;&lt;author3 string&gt;&quot; ... ]</var>
+<br>
+<em>*Multiple arguments must be enclosed in double-quotes</em>
+
+<p>
+Each author string can hold as many names as you like, e.g.
+<p>
+<pre>
+ .AUTHOR "Joe Blow"
+ or
+ .AUTHOR "Joe Blow, Jane Doe" "John Hancock"
+</pre>
+
+<strong>Mom</strong> prints each string that's enclosed in
+double-quotes on a separate line in the
+<a href="definitions.html#TERMS_DOCHEADER">docheader</a>,
+however only the first string appears in
+<a href="definitions.html#TERMS_HEADER">page headers</a>.
+If you want <strong>mom</strong> to put something else in the author
+part of page headers (say, just the last names of a document's two
+authors), redefine the appropriate part of the header (see
+<a href="headfootpage.html#HEADER_CONTROL">header/footer control</a>).
+<p>
+The strings can be caps or caps/lower-case. I recommend caps/lower
+case.
+<br>
+
+<!---CHAPTER--->
+
+<hr width="66%" align="left">
+<p>
+<a name="CHAPTER"></a>
+Macro: <strong>CHAPTER</strong> <var>&lt;chapter number&gt;</var>
+
+<p>
+The chapter number can be in any form you like -- a digit, a roman
+numeral, a word. If you choose
+<a href="#DOCTYPE">DOCTYPE CHAPTER</a>,
+<strong>mom</strong> prints whatever argument you pass
+<strong>CHAPTER</strong> beside the word &quot;Chapter&quot; as a
+single line
+<a href="definitions.html#TERMS_DOCHEADER">docheader</a>.
+She also puts the same thing in the middle of
+<a href="definitions.html#TERMS_HEADER">page headers</a>.
+<p>
+If you're not using <strong>DOCTYPE CHAPTER</strong>, the macro serves
+no purpose and <strong>mom</strong> ignores it.
+<a name="CHAPTER_STRING"></a>
+<p>
+If you're not writing in English, you can ask <strong>mom</strong>
+to use the word for chapter in your own language by telling
+her what it is with the <strong>CHAPTER_STRING</strong> macro,
+like this:
+<p>
+<pre>
+ .CHAPTER_STRING "Chapître"
+</pre>
+
+You can also use <strong>CHAPTER_STRING</strong> if you want
+&quot;CHAPTER&quot; instead of &quot;Chapter&quot; in the doc- and
+page-headers. (See also the
+<a href="#CHAPTER_NOTE">Special Note on CHAPTER</a>.)
+<br>
+
+<!---DRAFT--->
+
+<hr width="66%" align="left">
+<p>
+<a name="DRAFT"></a>
+Macro: <strong>DRAFT</strong> <var>&lt;draft #&gt;</var>
+
+<p>
+<strong>DRAFT</strong> only gets used with
+<a href="#COPYSTYLE">COPYSTYLE DRAFT</a>.
+If the <strong>COPYSTYLE</strong> is <strong>FINAL</strong> (the
+default), <strong>mom</strong> ignores <strong>DRAFT</strong>.
+<strong>DRAFT</strong> only accepts a
+<a href="definitions.html#TERMS_NUMERICARGUMENT">numeric argument</a>.
+<p>
+<strong>Mom</strong> prints the draft number beside the word
+&quot;Draft&quot; in the middle part of
+<a href="definitions.html#TERMS_HEADER">page headers</a>.
+If you're not writing in English, you can ask <strong>mom</strong>
+to use the word for draft in your own language by telling
+her what it is with the <strong>DRAFT_STRING</strong> macro,
+like this:
+<p>
+<pre>
+ .DRAFT_STRING "Ébauche"
+</pre>
+
+<!---REVISION--->
+
+<hr width="66%" align="left">
+<p>
+<a name="REVISION"></a>
+Macro: <strong>REVISION</strong> <var>&lt;revision #&gt;</var>
+
+<p>
+<strong>REVISION</strong> only gets used with
+<a href="#COPYSTYLE">COPYSTYLE DRAFT</a>.
+If the <strong>COPYSTYLE</strong> is <strong>FINAL</strong>
+(the default), <strong>mom</strong> ignores the
+<strong>REVISION</strong> macro. <strong>REVISION</strong> only
+accepts a
+<a href="definitions.html#TERMS_NUMERICARGUMENT">numeric argument</a>.
+<p>
+<strong>Mom</strong> prints the revision number beside the shortform
+&quot;Rev.&quot; in the middle part of
+<a href="definitions.html#TERMS_HEADER">page headers</a>.
+If you're not writing in English, you can ask <strong>mom</strong>
+to use the word for revision, or a shortform therof in your own language
+by telling her what it is with the <strong>REVISION_STRING</strong>
+macro, like this:
+<p>
+<pre>
+ .REVISION_STRING "Rév."
+</pre>
+<hr>
+
+<!========================================================================>
+
+<a name="DOCSTYLE_MACROS">
+ <h2><u>The Docstyle Macros</u></h2>
+</a>
+
+The docstyle macros tell <strong>mom</strong> what type of document you're
+writing, whether you want the output typeset or
+&quot;typewritten&quot;, and whether you want a draft copy (with
+draft and revision information in the headers) or a final copy.
+
+<a name="INDEX_DOCSTYLE">
+ <h3><u>Docstyle macros list</u></h3>
+</a>
+
+<ul>
+ <li><a href="#DOCTYPE">DOCTYPE</a>
+ <li><a href="#PRINTSTYLE">PRINTSTYLE</a>
+ <ul>
+ <li><a href="#TYPESET_DEFAULTS">Defaults for PRINTSTYLE TYPESET</a>
+ <li><a href="#TYPEWRITE_DEFAULTS">Defaults for PRINTSTYLE TYPEWRITE</a>
+ <ul>
+ <li><a href="#TYPEWRITE_CONTROL">TYPEWRITE control macros</a>
+ </ul>
+ </ul>
+ <li><a href="#COPYSTYLE">COPYSTYLE</a>
+</ul>
+
+<!---DOCTYPE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="DOCTYPE"></a>
+Macro: <strong>DOCTYPE</strong> <var>DEFAULT | CHAPTER | NAMED &quot;&lt;name&gt;&quot; | LETTER</var>
+<p>
+The arguments <strong>DEFAULT, CHAPTER</strong> and
+<strong>NAMED</strong> tell <strong>mom</strong> what to put
+in the
+<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
+and
+<a href="definitions.html#TERMS_HEADER">page headers</a>.
+<strong>LETTER</strong> tells her that you want to write a
+lettter.
+<p>
+<strong>Mom</strong>'s default <strong>DOCTYPE</strong> is
+<strong>DEFAULT</strong>. If that's what you want, you don't
+have to give a <strong>DOCTYPE</strong> command.
+<p>
+<strong>DEFAULT</strong> prints a
+<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
+containing the title, subtitle and author information given to the
+<a href="#REFERENCE_MACROS">reference macros</a>,
+and page headers with the author and title.
+(See
+<a href="headfootpage.html#HEADER_STYLE">Default specs for headers</a>
+for how <strong>mom</strong>'s outputs each part of the page header.)
+<p>
+<strong>CHAPTER</strong> prints &quot;Chapter #&quot; in place of a
+<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
+(# is what you gave to
+<a href="#CHAPTER">CHAPTER</a>),
+or, if you omit the <strong>CHAPTER</strong> macro and give the chapter
+a title with
+<a href="#CHAPTER_STRING">CHAPTER_STRING</a>,
+<strong>mom</strong> prints the chapter title. Page headers contain the
+author, the title of the book (which you gave with
+<a href="#TITLE">TITLE</a>),
+and &quot;Chapter #&quot; (or the chapter title). See
+<a href="headfootpage.html#HEADER_STYLE">Default Specs for Headers</a>
+for <strong>mom</strong>'s default type parameters for each part of
+the page header.
+<p>
+<em>*See the
+<a href="#CHAPTER_NOTE">Special Note on CHAPTER</a>
+below for how you can make DOCTYPE CHAPTER print something
+other than &quot;Chapter #&quot; as its docheader.</em>
+<p>
+<strong>NAMED</strong> takes an additional argument: a name
+for this particular kind of document (e.g. outline, synopsis,
+abstract, memorandum), enclosed in double-quotes.
+<strong>NAMED</strong> is identical to <strong>DEFAULT</strong>
+except that <strong>mom</strong> prints the argument to
+<strong>NAMED</strong> beneath the
+<a href="definitions.html#TERMS_DOCHEADER">docheader</a>,
+as well as in page headers.
+(See
+<a href="headfootpage.html#HEADER_STYLE">Default specs for headers</a>
+for how <strong>mom</strong>'s outputs each part of the page header.)
+<p>
+<strong>LETTER</strong> tells mom you're writing a letter. See
+the section
+<a href="letters.html#INTRO">Writing Letters</a>
+for instructions on using <strong>mom</strong> to format letters.
+
+<a name="CHAPTER_NOTE"><h3><u>Special Note on CHAPTER</u></h3></a>
+In novels, new chapters are generally (but not always)
+introduced by &quot;Chapter #&quot;. Other types of documents
+(reports and so on) often require specific titles for chapters.
+If your document is of this latter type, use <strong>DOCTYPE
+CHAPTER</strong> in the following way:
+<br>
+<ol>
+ <li>Omit the
+ <a href="#REFERENCE_MACROS">reference macro</a>
+ <a href="#CHAPTER">CHAPTER</a>
+ <li>Invoke
+ <a href="#CHAPTER_STRING">.CHAPTER_STRING</a>
+ with the title you'd like the chapter to have (enclosed
+ in double-quotes, of course).
+</ol>
+<p>
+Here's a recipe for setting up a chapter entitled &quot;The DMCA
+Nazis&quot;.
+<pre>
+ .AUTHOR &quot;Outraged Hacker&quot;
+ .TITLE &quot;Limiting Copyright&quot;
+ \#
+ .DOCTYPE CHAPTER
+ .PRINTSTYLE TYPESET
+ \#
+ .CHAPTER_STRING &quot;The DMCA Nazis&quot;
+</pre>
+<br>
+
+<!---PRINTSTYLE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="PRINTSTYLE"></a>
+Macro: <strong>PRINTSTYLE</strong> <var>TYPESET | TYPEWRITE [ SINGLESPACE ]</var>
+<br>
+<em>*Required for document processing.</em>
+
+<p>
+<strong>PRINTSTYLE</strong> tells <strong>mom</strong> whether to typeset
+a document, or to print it out &quot;typewritten, doubled-spaced&quot;.
+<p>
+<strong>THIS MACRO MAY NOT BE OMITTED.</strong> In order for
+document processing to take place, <strong>mom</strong> requires
+a <strong>PRINTSTYLE</strong>. If you don't give one,
+<strong>mom</strong> will warn you on stderr and print a single
+page with a nasty message.
+<p>
+<strong>TYPESET</strong>, as the argument implies, typesets documents
+(by default in Times Roman; see
+<a href="#TYPESET_DEFAULTS">TYPESET defaults</a>).
+You have full access to all the
+<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
+as well as the
+<a href="definitions.html#STYLE_CONTROL">style control macros</a>
+of document processing.
+<p>
+With <strong>TYPEWRITE</strong>, <strong>mom</strong> does her best
+to reproduce the look and feel of typewritten, double-spaced copy (see
+<a href="#TYPEWRITE_DEFAULTS">TYPEWRITE defaults</a>).
+<a href="docelement.html#DOCELEMENT_CONTROL">Control macros</a>
+and
+<a href="typesetting.html#INTRO_MACROS_TYPESETTING">typesetting macros</a>
+that alter family, font, point size, and
+<a href="definitions.html#TERMS_LEADING">leading</a>
+are (mostly) ignored. An important exception is
+<a href="headfootpage.html#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>
+(and, by extension, <strong>FOOTER_SIZE</strong>), which allows
+you to reduce the point size of headers/footers should they become
+too crowded. Most of <strong>mom</strong>'s inlines affecting the
+appearance of type are also ignored (<strong>\*S</strong> is an
+exception; there may be a few others).
+<p>
+In short, <strong>TYPEWRITE</strong> never produces effects other than
+those available on a typewriter. Don't be fooled by how brainless
+this sounds; <strong>mom</strong> is remarkably sophisticated when
+it comes to conveying the typographic sense of a document within the
+confines of <strong>TYPEWRITE</strong>.
+<p>
+The primary uses of <strong>TYPEWRITE</strong> are: outputting hard
+copy drafts of your work (for editing), and producing documents
+for submission to publishers and agents who (wisely) insist on
+typewritten, double-spaced copy. To get a nicely typeset version of
+work that's in the submission phase of its life (say, to show fellow
+writers for critiquing), simply change <strong>TYPEWRITE</strong>
+to <strong>TYPESET</strong> and print out a copy.
+<p>
+If, for some reason, you would prefer the output of
+<strong>TYPEWRITE</strong> single-spaced, pass <strong>PRINTSTYLE
+TYPEWRITE</strong> the optional argument, <strong>SINGLESPACE</strong>.
+<p>
+If you absolutely must have a leading other than typewriter double-
+or singlespaced, the only way to get it is with the
+<a href="#DOC_LEAD">DOC_LEAD</a>
+macro, and then ONLY if <strong>DOC_LEAD</strong> is set
+<strong>before</strong> you invoke the <strong>START</strong>
+macro.
+
+<a name="TYPESET_DEFAULTS"><h3><u>TYPESET defaults</u></h3></a>
+<pre>
+ Family = Times Roman
+ Point size = 12.5
+ Paragraph leading = 16 points, adjusted
+ Fill mode = justified
+ Hyphenation = enabled
+ max. lines = 2
+ margin = 36 points
+ interword adjustment = 1 point
+ Kerning = enabled
+ Ligatures = enabled
+ Smartquotes = enabled
+ Word space = groff default
+ Sentence space = 0
+</pre>
+
+<a name="TYPEWRITE_DEFAULTS"><h3><u>TYPEWRITE defaults</u></h3></a>
+<pre>
+ Family = Courier
+ Italics = underlined
+ Point size = 12
+ Paragraph leading = 24 points, adjusted; 12 points for SINGLESPACE
+ Fill mode = left
+ Hyphenation = disabled
+ Kerning = disabled
+ Ligatures = disabled
+ Smartquotes = disabled
+ Word space = groff default
+ Sentence space = groff default
+ Columns = ignored
+</pre>
+
+<a name="TYPEWRITE_CONTROL"><h3><u>PRINTSTYLE TYPEWRITE control macros</u></h3></a>
+<p>
+In <strong>PRINTSTYLE TYPEWRITE</strong>, <strong>mom</strong>,
+by default, underlines anything that looks like italics. This
+includes the
+<a href="typesetting.html#SLANT_INLINE">\*[SLANT]</a>
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+for pseudo-italics.
+<p>
+If you'd prefer that <strong>mom</strong> were
+less bloody-minded about pretending to be a typewriter (i.e.
+you'd like italics and pseudo-italics to come out as italics),
+use the control macros <strong>.ITALIC_MEANS_ITALIC</strong> and
+<strong>.SLANT_MEANS_SLANT</strong>. Neither requires an
+argument.
+<p>
+Although it's unlikely, should you wish to reverse the sense of
+these macros in the midst of a document,
+<strong>.UNDERLINE_ITALIC</strong> and
+<strong>.UNDERLINE_SLANT</strong> restore underlining of
+italics and pseudo-italics.
+<p>
+Additionally, by default, <strong>mom</strong> underlines
+<a href="definitions.html#TERMS_QUOTES">quotes</a>
+(but not
+<a href="definitions.html#TERMS_BLOCKQUOTES">blockquotes</a>)
+in <strong>PRINTSTYLE TYPEWRITE</strong>.
+If you don't like this behaviour, turn it off with
+<p>
+<pre>
+ .UNDERLINE_QUOTES OFF
+</pre>
+
+To turn underlining of quotes back on, use
+<strong>UNDERLINE_QUOTES</strong> without an argument.
+<p>
+While most of the
+<a href="docelement.html#DOCELEMENT_CONTROL">control macros</a>
+have no effect on <strong>PRINTSTYLE TYPEWRITE</strong>, there
+is an important exception:
+<a href="headfootpage.html#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>
+(and by extension, <strong>FOOTER_SIZE</strong>). This is
+particularly useful for reducing the point size of
+headers/footers should they become crowded (quite likely to
+happen if the title of your document is long and your
+<a href="#COPYSTYLE">COPYSTYLE</a>
+is <strong>DRAFT</strong>).
+<br>
+
+<!---COPYSTYLE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="COPYSTYLE"></a>
+Macro: <strong>COPYSTYLE</strong> <var>DRAFT | FINAL</var>
+
+<p>
+<strong>Mom</strong>'s default <strong>COPYSTYLE</strong> is
+<strong>FINAL</strong>, so you don't have to use this macro unless
+you want to.
+<p>
+<strong>COPYSTYLE DRAFT</strong> exhibits the following behaviour:
+<br>
+<ol>
+ <li>documents start on page 1, whether or not you
+ request a different starting page number with
+ <a href="headfootpage.html#PAGENUMBER">PAGENUMBER</a>
+ <li>page numbers are set in lower case roman numerals
+ <li>the draft number supplied by
+ <a href="#DRAFT">DRAFT</a>
+ and a revision number, if supplied with
+ <a href="#REVISION">REVISION</a>
+ (see
+ <a href="#REFERENCE_MACROS">reference macros</a>),
+ appear in the center part of
+ <a href="definitions.html#TERMS_HEADER">page headers</a>
+ (or footers, depending on which you'ves selected) along with
+ any other information that normally appears there.
+</ol>
+<p>
+<strong>IMPORTANT:</strong> If you define your own center part for page
+headers with
+<a href="headfootpage.html#HDRFTR_CENTER">HEADER_CENTER</a>,
+no draft and/or revision number will appear there. If you want draft
+and revision information in this circumstance, use
+<a href="headfootpage.html#DRAFT_WITH_PAGENUMBER">DRAFT_WITH_PAGENUMBER</a>.
+<p>
+<strong>COPYSTYLE FINAL</strong> differs from <strong>DRAFT</strong> in that:
+<br>
+<ol>
+ <li>it respects the starting page number you give the document
+ <li>page numbers are set in normal (arabic) digits
+ <li>no draft or revision number appears in the page headers
+</ol>
+<p>
+<strong>NOTE:</strong> The center part of page headers can get crowded,
+especially with
+<a href="docprocessing.html#DOCTYPE">DOCTYPE CHAPTER</a>
+and
+<a href="docprocessing.html#DOCTYPE">DOCTYPE NAMED</a>,
+when the <strong>COPYSTYLE</strong> is <strong>DRAFT</strong>.
+Three mechanisms are available to overcome this problem. One is to
+reduce the overall size of headers (with
+<a href="headfootpage.html#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>).
+Another, which only works with
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
+is to reduce the size of the header's centre part only (with
+<a href="headfootpage.html#_SIZE">HEADER_CENTER_SIZE</a>).
+And finally, you can elect to have the draft/revsion information
+attached to page numbers instead of having it appear in the center
+of page headers (see
+<a href="headfootpage.html#DRAFT_WITH_PAGENUMBER">DRAFT_WITH_PAGENUMBER</a>).
+<br>
+<hr>
+
+<!========================================================================>
+
+<a name="STYLE_BEFORE_START"><h2><u>Changing type/style parameters prior to START</u></h2></a>
+
+In the third (optional) part of setting up a document (see
+<a href="#DOCPROCESSING_TUT">Tutorial -- setting up a mom document</a>),
+you can use the
+<a href="typsetting.html">typesetting macros</a>
+to change <strong>mom</strong>'s document-wide defaults for margins,
+line length, family, base point size,
+<a href="definitions.html#TERMS_LEADING">leading</a>,
+and justification style.
+<p>
+Two additional style concerns have to be addressed here (i.e. in
+macros before
+<a href="#START">START</a>):
+changes to the
+<a href="definitions.html#TERMS_DOCHEADER">docheader</a>,
+and whether you want you want the document's nominal leading
+adjusted to fill pages fully to the bottom margin.
+<p>
+<ul>
+ <li><a href="#TYPE_BEFORE_START">Using typesetting macros prior to START</a>
+ <p>
+ <li><a href="#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
+ -- adjusting linespacing for equal, accurate bottom margins
+ <li><a href="#DOCHEADER">DOCHEADER</a>
+ -- turning the docheader off
+ <ul>
+ <li><a href="#DOCHEADER_CONTROL">Docheader control</a>
+ </ul>
+</ul>
+
+<hr width="66%" align="left">
+<a name="TYPE_BEFORE_START"><h2><u>Using typesetting macros prior to START</u></h2></a>
+
+When used before the
+<a href="#START">START</a>
+macro, the following
+<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
+have these meanings:
+<p>
+<pre>
+ L_MARGIN Left margin of pages, including headers/footers
+ R_MARGIN Right margin of pages, including headers/footers
+ T_MARGIN The point at which running text (i.e. not
+ headers/footers or page numbers) starts on each page
+ B_MARGIN The point at which running text (i.e. not
+ headers/footers or page numbers) ends on each page
+
+ (PAGE If you use PAGE, its first four arguments have the
+ same meaning as L_ R_ T_ and B_MARGIN above.)
+
+ LL The line length for everything on the page;
+ equivalent to setting the right margin with R_MARGIN
+ FAMILY The family of all type in the document
+ PT_SIZE The point size of type in paragraphs; mom uses this
+ calculate automatic point size changes (eg. for heads,
+ footnotes, quotes, headers, etc)
+ *LS or AUTOLEAD The leading used in paragraphs; all leading and spacing
+ of running text is calculated from this
+ QUAD Affects paragraphs only
+
+------
+*See <a href="#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
+</pre>
+
+Other macros that deal with type style, or refinements thereof
+(<strong>KERN, LIGATURES, HY, WS, SS,</strong> etc.), behave normally.
+It is not recommended that you set up tabs or indents prior to
+<strong>START</strong>.
+<p>
+If you want to change any of the basic parameters above
+<em>after</em> <strong>START</strong> and have them affect a
+document globally (as if you'd entered them <em>before</em>
+<strong>START</strong>), you must use the macros listed in
+<a href="#DOC_PARAM_MACROS">Changing document-wide style parameters after START</a>.
+<br>
+
+<!---DOC_LEAD_ADJUST--->
+
+<hr width="66%" align="left">
+<a name="DOC_LEAD_ADJUST"><h3><u>Adjusting document leading to fill pages</u></h3></a>
+<br>
+Macro: <strong>DOC_LEAD_ADJUST</strong> <var>toggle</var>
+<br>
+<em>*Must come after LS or AUTOLEAD and before START</em>
+
+<p>
+<strong>DOC_LEAD_ADJUST</strong> is a special macro to adjust
+document
+<a href="definitions.html#TERMS_LEADING">leading</a>
+so that bottom margins fall precisely where you expect.
+<p>
+If you invoke <strong>DOC_LEAD_ADJUST</strong>, <strong>mom</strong>
+takes the number of lines that fit on the page at your requested
+leading, then incrementally adds
+<a href="definitions.html#TERMS_UNITS">machine units</a>
+to the leading until the maximum number of lines at the new leading
+matches the bottom margin. In most instances, the difference
+between the requested lead and the adjusted lead is
+unnoticeable.
+<p>
+<strong>Mom</strong> uses <strong>DOC_LEAD_ADJUST</strong> with
+her default document settings, but if you invoke
+<a href="typesetting.html#LS">LS</a>
+or
+<a href="typesetting.html#AUTOLEAD">AUTOLEAD</a>
+prior to
+<a href="#START">START</a>,
+you have to do
+<p>
+<pre>
+ .DOC_LEAD_ADJUST
+</pre>
+in order to enable it.
+<p>
+If you don't like the idea of <strong>mom</strong> playing around
+with the leading by default, you can turn adjusting off with
+<p>
+<pre>
+ .DOC_LEAD_ADJUST OFF
+</pre>
+
+In this scenario, the maximum number of lines that fit on a page at
+the current document leading determine where <strong>mom</strong> ends
+a page. The effect will be that last lines usually fall (slightly)
+short of your expected bottom margin.
+<p>
+<strong>NOTE:</strong> <strong>DOC_LEAD_ADJUST</strong>, if
+used, must be invoked after
+<a href="typesetting.html#LS">LS</a>
+or
+<a href="typesetting.html#AUTOLEAD">AUTOLEAD</a>
+and before
+<a href="#START">START</a>
+<br>
+
+<!---DOCHEADER--->
+
+<hr width="66%" align="left">
+<a name="DOCHEADER"><h3><u>Managing the docheader</u></h3></a>
+<br>
+Macro: <strong>DOCHEADER</strong> <var>&lt;toggle&gt; [ distance to advance from top of page ]</var>
+<br>
+<em>*Must come before START; distance requires a <a href="#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+By default, <strong>mom</strong> prints a
+<a href="definitions.html#TERMS_DOCHEADER">docheader</a>
+on the first page of any document (see
+<a href="#DOCHEADER_DESC">below</a>
+for a description of the docheader). If you don't want a docheader,
+turn it off with
+<p>
+<pre>
+ .DOCHEADER OFF
+</pre>
+
+<strong>DOCHEADER</strong> is a toggle macro, so the argument doesn't
+have to be <strong>OFF</strong>; it can be anything you like.
+<p>
+If you turn the docheader off, <strong>mom</strong>, by default, starts
+your document in the same place she would if the docheader were there.
+If you'd like her to start at a different vertical position, give
+her the distance you'd like as a second argument.
+<p>
+<pre>
+ .DOCHEADER OFF 1.5i
+</pre>
+
+This starts the document 1.5 inches from the top of the page.
+The distance you give is measured from the top edge of the paper
+to the
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+of the first line of type.
+<p>
+<strong>TIP:</strong> Since no document processing happens until
+you invoke
+<a href="#START">START</a>
+-- including anything to do with docheaders -- you can typeset
+your own docheader prior to <strong>START</strong> (if you don't
+like the way <strong>mom</strong> does things) and use
+<strong>DOCHEADER OFF</strong> with its optional distance argument
+to ensure that the body of your document starts where you want.
+You can even insert a PostScript file (with <strong>.PSPIC</strong>;
+see the <strong>grops</strong> man page for usage).
+
+<a name="DOCHEADER_CONTROL"><h3><u>How to change the look of docheaders: docheader control macros</u></h3></a>
+
+<p>
+With
+<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+the look of docheaders is carved in stone.
+In
+<a href="#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
+however, you can make a lot of changes. Macros that alter docheaders
+MUST come before
+<a href="#START">START</a>.
+<a name="DOCHEADER_DESC"></a>
+<p>
+A typeset docheader has the following characteristics. Note that
+title, subtitle, author, and document type are what you supply
+with the
+<a href="#REFERENCE_MACROS">reference macros</a>.
+Any you leave out will not appear; <strong>mom</strong> will
+compensate:
+<p>
+<pre>
+ TITLE bold, 3.5 points larger than running text (not necessarily caps)
+ Subtitle medium, same size as running text
+ by medium italic, same size as running text
+ Author(s) medium italic, same size as running text
+
+ (Document type) bold italic, underscored, 3 points larger than running text
+</pre>
+
+The
+<a href="definitions.html#TERMS_FAMILY">family</a>
+is the prevailing family of the whole document.
+
+<h3><u>The docheader macros to:</u></h3>
+<ol>
+ <li><a href="#CHANGE_START">Change the starting position</a>
+ <li><a href="#ADJUST_LEADING">Adjust the leading</a>
+ <li><a href="#CHANGE_FAMILY">Change the family of docheader elements</a>
+ <li><a href="#CHANGE_FONT">Change the font of docheader elements</a>
+ <li><a href="#CHANGE_SIZE">Adjust the size of docheader elements</a>
+ <li><a href="#CHANGE_ATTRIBUTE">Change the attribution string (&quot;by&quot;)</a>
+</ol>
+<p>
+<a name="CHANGE_START"><h3><u>1. Change the starting position</u></h3></a>
+By default, a docheader starts on the same
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+as
+<a href="definitions.html#TERMS_RUNNING">running text</a>.
+If you'd like it to start somewhere else, use the macro
+<kbd>.DOCHEADER_ADVANCE</kbd> and give it the distance you want
+(measured from the top edge of the paper to the first baseline
+of the docheader), like this:
+<p>
+<pre>
+ .DOCHEADER_ADVANCE 4P
+</pre>
+
+A
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+is required.
+<p>
+<strong>NOTE:</strong> If
+<a href="headfootpage.html#HEADERS">HEADERS</a>
+are <strong>OFF</strong>, <strong>mom</strong>'s normal top
+margin for
+<a href="definitions.html#TERMS_RUNNING">running text</a>
+(7.5
+<a href="definitions.html#TERMS_PICASPOINTS">picas</a>)
+changes to 6 picas (visually approx. 1 inch). Since the
+first baseline of the docheader falls on the same baseline
+as the first line of running text (on pages after page 1),
+you might find the docheaders a bit high when headers are off.
+Use
+<a href="#CHANGE_START">DOCHEADER_ADVANCE</a>
+to place them where you want.
+
+
+<a name="ADJUST_LEADING"><h3><u>2. Adjust the leading</u></h3></a>
+The
+<a href="definitions.html#TERMS_LEADING">leading</a> of
+docheaders is the same as running text. If you'd like a
+different leading, say, 2 points more than the lead of running
+text, use:
+<p>
+<pre>
+ .DOCHEADER_LEAD +2p
+</pre>
+
+Since the leading of docheaders is calculated from the lead of running
+text, a + or - sign is required before the argument (how much to add
+or subtract from the lead of running text). The
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+is also required.
+
+<a name="CHANGE_FAMILY"><h3><u>3. Change the family of docheader elements</u></h3></a>
+The following macros let you change the
+<a href="definitions.html#TERMS_FAMILY">family</a>
+of each docheader element separately:
+<p>
+<ul>
+<li><strong>TITLE_FAMILY</strong> <var>&lt;family&gt;</var>
+<li><strong>SUBTITLE_FAMILY</strong> <var>&lt;family&gt;</var>
+<li><strong>AUTHOR_FAMILY</strong> <var>&lt;family&gt;</var>
+<li><strong>DOCTYPE_FAMILY</strong> <var>&lt;family&gt;</var> (if
+<a href="#DOCTYPE">DOCTYPE</a> is NAMED)
+</ul>
+<p>
+Simply pass the appropriate macro the family you want.
+
+<a name="CHANGE_FONT"><h3><u>4. Change the font of docheader elements</u></h3></a>
+The following macros let you change the
+<a href="definitions.html#TERMS_FONT">font</a>
+of each docheader element separately:
+<p>
+<ul>
+<li><strong>TITLE_FONT</strong> <var>R | B | I | BI</var>
+<li><strong>SUBTITLE_FONT</strong> <var>R | B | I | BI</var>
+<li><strong>AUTHOR_FONT</strong> <var>R | B | I | BI</var>
+<li><strong>DOCTYPE_FONT</strong> <var>R | B | I | BI</var> (if
+<a href="#DOCTYPE">DOCTYPE</a> is NAMED)
+</ul>
+<p>
+Simply pass the appropriate macro the font you want. <strong>R,
+B, I</strong> and <strong>BI</strong> have the same meaning as
+they do for
+<a href="typesetting.html#FONT">FT</a>.
+
+
+<a name="CHANGE_SIZE"><h3><u>5. Adjust the size of docheader elements</u></h3></a>
+The following macros let you adjust the point size of each docheader
+element separately.
+<p>
+<strong>Mom</strong> calculates the point size
+of docheader elements from the point size of paragraphs, so you
+must prepend a + or - sign to the argument. Points is
+assumed as the
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>,
+so there's no need to append a unit to the argument. Fractional point
+sizes are allowed.
+<p>
+<ul>
+<li><strong>TITLE_SIZE</strong> <var>&lt;+/-points&gt;</var>
+<br>
+default = +3.5 (+4 if docheader title is &quot;Chapter #&quot;)
+<li><strong>SUBTITLE_SIZE</strong> <var>&lt;+/-points&gt;</var>
+<br>
+default = +0
+<li><strong>AUTHOR_SIZE</strong> <var>&lt;+/-points&gt;</var>
+<br>
+default = +0
+<li><strong>DOCTYPE_SIZE</strong> <var>&lt;+/-points&gt;</var> (if
+<a href="#DOCTYPE">DOCTYPE</a> is NAMED)
+<br>
+default = +3
+</ul>
+<p>
+Simply pass the appropriate macro the size adjustment you want.
+
+<a name="CHANGE_ATTRIBUTE"><h3><u>6. Change the attribution string (&quot;by&quot;)</u></h3></a>
+If you're not writing in English, you can change what
+<strong>mom</strong> prints where &quot;by&quot; appears in
+docheaders. For example,
+<p>
+<pre>
+ .ATTRIBUTE_STRING "par"
+</pre>
+
+changes &quot;by&quot; to &quot;par&quot;. If you
+don't want an attribution string at all, simply pass
+<strong>ATTRIBUTE_STRING</strong> an empty argument, like this:
+<p>
+<pre>
+ .ATTRIBUTE_STRING ""
+</pre>
+
+<strong>Mom</strong> will deposit a blank line where the
+attribution string normally appears.
+<p>
+<strong>NOTE:</strong> The type specs for the attribution line
+in docheaders are the same as for the author line. Although
+it's highly unlikely you'll want the attribution line in a
+different family, font, or point size, you can do so by using
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>
+in the argument to <strong>ATTRIBUTE_STRING</strong>. For
+example,
+<p>
+<pre>
+ .ATTRIBUTE_STRING "\f[HBI]\*S[-2p] by \*S[+2p]\*[PREV]"
+</pre>
+
+would set &quot;by&quot; in Helvetica bold italic, 2 points
+smaller than normal.
+<br>
+<hr>
+
+<!---COLUMNS_INTRO--->
+
+<a name="COLUMNS_INTRO"><h2><u>Setting documents in columns</u></h2></a>
+
+<p>
+Setting documents in columns is easy with <strong>mom</strong>. (Of
+course she'd say that, but it's true!) All you have to do is is
+say how many columns you want and how much space you want
+between them (the
+<a href="definitions.html#TERMS_GUTTER">gutters</a>).
+That's it. <strong>Mom</strong> takes care of everything else, from
+soup to nuts.
+<p>
+<strong>SOME WORDS OF ADVICE:</strong>
+<p>
+If you want your type to achieve a pleasing
+<a href="definitions.html#TERMS_JUST">justification</a>
+or
+<a href="definitions.html#TERMS_RAG">rag</a>
+in columns, reduce the point size of type (and probably the
+<a href="definitions.html#TERMS_LEADING">leading</a>
+as well). <strong>Mom</strong>'s default document point
+size is 12.5, which works well across her default 39
+<a href="definitions.html#TERMS_PICASPOINTS">pica</a>
+full page line length, but with even just two columns on a page,
+the default point size is awkward to work with.
+<p>
+Furthermore, you'll absolutely need to reduce the indents for
+<a href="docelement.html#EPIGRAPH_CONTROL">epigraphs</a>,
+<a href="docelement.html#QUOTE_GENERAL">quotes</a>,
+and
+<a href="docelement.html#BLOCKQUOTE_GENERAL">blockquotes</a>
+(and probably the
+<a href="docelement.html#PARA_INDENT">paragraph first-line indent</a>
+as well).
+<br>
+
+<!---COLUMNS--->
+
+<hr width="66%" align="left">
+<a name="COLUMNS"><h3><u>COLUMNS</u></h3></a>
+<br>
+Macro: <strong>COLUMNS</strong> <var>&lt;number of columns&gt; &lt;width of gutters&gt;</var>
+<br>
+<em>*Should be the last macro before START
+<br>
+The second argument requires a <a href="#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>COLUMNS</strong> takes two arguments: the number of
+columns you want on document pages, and the width of the
+<a href="definitions.html#TERMS_GUTTER">gutter</a>
+between them. For example, to set up a page with two columns
+separated by an 18 point gutter, you'd do
+<p>
+<pre>
+ .COLUMNS 2 18p
+</pre>
+
+Nothing to it, really. However, as noted above,
+<strong>COLUMNS</strong> should always be the last document
+setup macro prior to
+<a href="#START">START</a>.
+<p>
+<strong>NOTE:</strong> <strong>Mom</strong> ignores columns completely
+when the
+<a href="#PRINTSTYLE">PRINTSTYLE</a>
+is <strong>TYPEWRITE</strong>. The notion of typewriter-style
+output in columns is just too ghastly for her to bear.
+
+<a name="BREAKING_COLUMNS"></a>
+<h3><u>Breaking columns manually</u></h3>
+<p>
+<strong>Mom</strong> takes care of breaking columns when they reach
+the bottom margin of a page. However, there may be times you want to
+break the columns yourself. There are two macros for breaking columns
+manually: <strong>COL_NEXT</strong> and <strong>COL_BREAK</strong>.
+
+<a name="COL_NEXT"></a>
+<p>
+<kbd>.COL_NEXT</kbd> breaks the line just before it,
+<a href="definitions.html#TERMS_QUAD">quads</a>
+it left (assuming the type is justified or quad left), and moves over
+to the top of the next column. If the column happens to be the last
+(rightmost) one on the page, <strong>mom</strong> starts a new page
+at the &quot;column 1&quot; position. This is the macro to use when
+you want to start a new column after the end of a paragraph.
+
+<a name="COL_BREAK"></a>
+<p>
+<kbd>.COL_BREAK</kbd> is almost the same, except that
+instead of breaking and quadding the line preceding it,
+she breaks and spreads it (see
+<a href="typesetting.html#SPREAD">SPREAD</a>).
+Use this macro whenever you need to start a new column in the middle
+of a paragraph.
+<p>
+If you need <strong>COL_BREAK</strong> in the middle of a blockquote
+or (god help us) an epigraph, you must do the following in order for
+<strong>COL_BREAK</strong> to work:
+<p>
+<pre>
+ .SPREAD
+ \!.COL_BREAK
+</pre>
+<hr>
+
+<!========================================================================>
+
+<a name="START_MACRO">
+<h2><u>Initiate document processing</u></h2>
+</a>
+
+In order to use <strong>mom</strong>'s document element macros
+(tags), you have to tell her you want them. The macro to do this
+is <strong>START</strong>.
+<p>
+<strong>START</strong> collects the information you gave
+<strong>mom</strong> in the setup section at the top of your file (see
+<a href="#DOCPROCESSING_TUT">Tutorial -- setting up a mom document</a>),
+merges it with her defaults, sets up headers and page numbering,
+and prepares <strong>mom</strong> to process your document using
+the document element tags. No document processing takes place until
+you invoke <strong>START</strong>.
+<br>
+
+<!---START--->
+
+<hr width="66%" align="left">
+<p>
+<a name="START"></a>
+Macro: <strong>START</strong>
+<br>
+<em>*Required for document processing.</em>
+
+<p>
+<strong>START</strong> takes no arguments. It simply instructs
+<strong>mom</strong> to begin document processing. If you don't
+want document processing (i.e. you only want the
+<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>),
+don't use <strong>START</strong>.
+<p>
+At a barest minimum before <strong>START</strong>, you must enter a
+<a href="#PRINTSTYLE">PRINTSTYLE</a>
+command.
+<br>
+<hr>
+
+<!========================================================================>
+
+<a name="DOC_PARAM_MACROS">
+<h2><u>Changing document-wide style parameters after START</u></h2>
+</a>
+
+In the normal course of things, you change the basic type
+parameters of a document <em>before</em>
+<a href="#START">START</a>,
+using
+<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
+(<strong>L_MARGIN, FAMILY, PT_SIZE, LS,</strong> etc). After
+<strong>START</strong>, you must use the following macros to make
+global changes to the basic type parameters of a document.
+<br>
+
+<a name="INDEX_DOC_PARAM">
+ <h3><u>Macro list</u></h3>
+</a>
+<ul>
+ <li><a href="#DOC_LEFT_MARGIN">DOC_LEFT_MARGIN</a>
+ <li><a href="#DOC_RIGHT_MARGIN">DOC_RIGHT_MARGIN</a>
+ <li><a href="#DOC_LINE_LENGTH">DOC_LINE_LENGTH</a>
+ <li><a href="#DOC_FAMILY">DOC_FAMILY</a>
+ <li><a href="#DOC_PT_SIZE">DOC_PT_SIZE</a>
+ <li><a href="#DOC_LEAD">DOC_LEAD</a>
+ <li><a href="#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
+ <li><a href="#DOC_QUAD">DOC_QUAD</a>
+</ul>
+
+<hr width="66%" align="left">
+<p>
+<a name="DOC_LEFT_MARGIN">
+ Macro: <strong>DOC_LEFT_MARGIN</strong> <var>&lt;left margin&gt;</var>
+</a>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+<p>
+<ul>
+ <li>the argument is the same as for
+ <a href="typesetting.html#L_MARGIN">L_MARGIN</a>
+ <li>changes all left margins to the new value
+ <li>the line length remains the same (i.e. the right margin
+ shifts when you change the left margin)
+</ul>
+
+<br>
+
+<hr width="66%" align="left">
+<p>
+<a name="DOC_RIGHT_MARGIN">
+ Macro: <strong>DOC_RIGHT_MARGIN</strong> <var>&lt;right margin&gt;</var>
+</a>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+<p>
+<ul>
+ <li>the argument is the same as for
+ <a href="typesetting.html#R_MARGIN">R_MARGIN</a>
+ <li>changes all right margins to the new value
+ <li>all mom commands that include a right indent calculate
+ the indent from the new value
+</ul>
+<br>
+
+<hr width="66%" align="left">
+<p>
+<a name="DOC_LINE_LENGTH">
+ Macro: <strong>DOC_LINE_LENGTH</strong> <var>&lt;length&gt;</var>
+</a>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+<p>
+<ul>
+ <li>the argument is the same as for
+ <a href="typesetting.html#LL">LL</a>
+ <li>equivalent to changing the right margin with DOC_RIGHT_MARGIN
+</ul>
+<br>
+
+<hr width="66%" align="left">
+<p>
+<a name="DOC_FAMILY">
+ Macro: <strong>DOC_FAMILY</strong> <var>&lt;family&gt;</var>
+</a>
+<p>
+<ul>
+ <li>the argument is the same as for
+ <a href="typesetting.html#FAMILY">FAMILY</a>
+ <li>globally changes the type family
+ <li>if you wish the
+ <a href="definitions.html#TERMS_HEADER">header</a>
+ and/or page number families to remain at their old values,
+ you must reset them with
+ <a href="headfootpage.html#HEADER_FAMILY">HEADER_FAMILY</a>
+ and
+ <a href="headfootpage.html#PAGENUM_FAMILY">PAGENUM_FAMILY</a>
+</ul>
+<br>
+
+<hr width="66%" align="left">
+<p>
+<a name="DOC_PT_SIZE">
+ Macro: <strong>DOC_PT_SIZE</strong> <var>&lt;point size&gt;</var>
+</a>
+<br>
+<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>; points is assumed</em>
+<p>
+<ul>
+ <li>the argument is the same as for
+ <a href="typesetting.html#PS">PT_SIZE</a>,
+ and refers to the point size of type in paragraphs
+ <li>all automatic point size changes (heads, quotes,
+ footnotes, headers, etc.) are affected by the new size;
+ anything you do not want affected must be reset to
+ its former value (see the Control Macros section of
+ the pertinent document element for instructions on
+ how to do this)
+</ul>
+<br>
+
+<hr width="66%" align="left">
+<p>
+<a name="DOC_LEAD">
+ Macro: <strong>DOC_LEAD</strong> <var>&lt;points&gt; [ ADJUST ]</var>
+</a>
+<br>
+<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>; points is assumed</em>
+<p>
+<ul>
+ <li>the argument is the same as for
+ <a href="typesetting.html#LS">LS</a>,
+ and refers to the
+ <a href="definitions.html#TERMS_LEAD">leading</a>
+ of paragraphs
+ <li>because paragraphs will have a new leading, the leading and
+ spacing of most running text is influenced by the new value
+ <li>epigraphs and footnotes remain unaffected;
+ if you wish to change their leading, use
+ <a href="docelement.html#EPIGRAPH_AUTOLEAD">EPIGRAPH_AUTOLEAD</a>
+ and
+ <a href="docelement.html#FOOTNOTE_AUTOLEAD">FOOTNOTE_AUTOLEAD</a>.
+ <li>the optional argument <strong>ADJUST</strong> performs
+ leading adjustment as explained in
+ <a href="#DOC_LEAD_ADJUST">DOC_LEAD_ADJUST</a>
+</ul>
+<p>
+<strong>IMPORTANT:</strong> Do not use <strong>DOC_LEAD</strong>
+in the middle of a page! It should always and only be invoked
+immediately prior to a new page, like this:
+<p>
+<pre>
+ .DOC_LEAD &lt;new value&gt;
+ .NEWPAGE
+</pre>
+
+<hr width="66%" align="left">
+<p>
+<a name="DOC_QUAD">
+ Macro: <strong>DOC_QUAD</strong> <var>L | R | C | J</var>
+</a>
+<p>
+<ul>
+ <li>the arguments are the same as for
+ <a href="typesetting.html#QUAD">QUAD</a>
+ <li>affects paragraphs, epigraphs and footnotes; does not
+ affect blockquotes
+</ul>
+
+<p>
+<hr>
+<a href="docelement.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="inlines.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/goodies.html b/contrib/groff/contrib/mom/momdoc/goodies.html
new file mode 100644
index 0000000..c95e733
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/goodies.html
@@ -0,0 +1,926 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Goodies</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="inlines.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="typesetting.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="GOODIES">
+ <h2><u>Goodies</u></h2>
+</a>
+
+<a name="INTRO_GOODIES"></a>
+The macros in this section are a collection of useful (and sometimes
+nearly indispensible) routines to simplify typesetting.
+
+<a name="INDEX_GOODIES">
+ <h3><u>Goodies list</u></h3>
+</a>
+
+<ul>
+ <li><a href="#ALIAS">ALIAS</a> (rename macros)
+ <li><a href="#SILENT">SILENT</a> (&quot;hide&quot; input lines from output)
+ <li><a href="#TRAP">TRAP</a> (suspend/re-invoke traps)
+ <li><a href="#SMARTQUOTES">SMARTQUOTES</a>
+ <li><a href="#CAPS">CAPS</a> (convert to upper case)
+ <br>
+ <li><strong>Underscore/underline</strong>
+ <ul>
+ <li><a href="#UNDERSCORE">UNDERSCORE</a> (single underscore)
+ <li><a href="#UNDERSCORE2">UNDERSCORE2</a> (double underscore)
+ <li><a href="#UNDERLINE">UNDERLINE</a> (underline -- Courier only!)
+ <li><a href="#UL">\*[UL]</a> (inline escape to underline -- Courier only!)
+ </ul>
+ <li><strong>Padding</strong>
+ <ul>
+ <li><a href="#PAD">PAD</a> (insert equalized space into lines)
+ <li><a href="#PAD_MARKER">PAD_MARKER</a> (change/set the marker used with <strong>PAD</strong>)
+ </ul>
+ <li><strong>Leaders</strong>
+ <ul>
+ <li><a href="#LEADER">\*[LEADER]</a> (inline escape to add leaders to a line)
+ <li><a href="#LEADER_CHARACTER">LEADER_CHARACTER</a> (change/set the leader character)
+ </ul>
+ <li><strong>Drop caps</strong>
+ <ul>
+ <li><a href="#DROPCAP">DROPCAP</a> (set a drop cap)
+ <li><strong>Support macros for DROPCAP</strong>
+ <ul>
+ <li><a href="#DROPCAP_FAMILY">DROPCAP_FAMILY</a> (change drop cap family)
+ <li><a href="#DROPCAP_FONT">DROPCAP_FONT</a> (change drop cap font)
+ <li><a href="#DROPCAP_ADJUST">DROPCAP_ADJUST</a> (alter size of drop cap)
+ <li><a href="#DROPCAP_GUTTER">DROPCAP_GUTTER</a> (change space between drop cap and running text)
+ </ul>
+ </ul>
+ <li><strong>Superscript</strong>
+ <ul>
+ <li><a href="#SUP">\*[SUP]</a> (set superscript)
+ <li><a href="#CONDSUP">\*[CONDSUP]</a> (set condensed superscript)
+ <li><a href="#EXTSUP">\*[EXTSUP}</a> (set extended superscript)
+ </ul>
+</ul>
+
+<!---ALIAS--->
+
+<hr width="66%" align="left">
+<a name="ALIAS"><h3><u>Rename macros</u></h3></a>
+<br>
+Macro: <strong>ALIAS</strong> <var>&lt;new name&gt; &lt;old name&gt;</var>
+
+<p>
+The <strong>ALIAS</strong> macro may well be your best friend. With it,
+you can change the name of a macro to anything you like
+(provided the new name is not already being used by
+<strong>mom</strong>; see the
+<a href="reserved.html#RESERVED">list of reserved words</a>).
+<p>
+Groff has always been a bit intimidating for new users because
+its standard macro packages use very terse macro names.
+<strong>Mom</strong> doesn't like people to feel intimidated; she wants
+them to feel welcome. Consequently, she tries for easy-to-grasp,
+self-explanatory macro names. However, <strong>mom</strong> knows
+that people have their own ways of thinking, their own preferences,
+their own habits. Some of her macro names may not suit you; they
+might be too long, or aren't what you automatically think of
+when you want to do a particular thing, or might conflict with habits
+you've developed over the years.
+<p>
+If you don't like one of <strong>mom</strong>'s macro names,
+say, PAGEWIDTH, change it, like this:
+<p>
+<pre>
+ .ALIAS PW PAGEWIDTH
+ | |
+ new__| |__official
+ name name
+</pre>
+
+The first argument to <strong>ALIAS</strong> is the new name you want
+for a macro. The second is the &quot;official&quot; name by
+which the macro is normally invoked. After <strong>ALIAS</strong>,
+either can be used.
+<p>
+Note that in <strong>ALIAS</strong>, you do NOT include the period
+(dot) that precedes the macro when it's a
+<a href="definitions.html#TERMS_CONTROLLINES">control line</a>.
+<p>
+<strong>NOTE:</strong> If you use <strong>ALIAS</strong> a lot,
+and always for the same things, consider creating an aliases
+file of the form
+<p>
+<pre>
+ .ALIAS &lt;new name&gt; &lt;old name&gt;
+ .ALIAS &lt;new name&gt; &lt;old name&gt;
+ .ALIAS &lt;new name&gt; &lt;old name&gt;
+ ...etc
+</pre>
+
+Put the file someplace convenient and source it at the
+beginning of your documents using the groff
+<a href="definitions.html#TERMS_PRIMITIVES">primitive</a>
+<strong>.so</strong>. Assuming that you've created an aliases file
+called mom_aliases in your home directory under a directory
+called <code>Mom</code>, you'd source it by placing
+<p>
+<pre>
+ .so /home/&lt;username&gt;/Mom/mom_aliases
+</pre>
+
+at the top of your documents.
+<p>
+If you share documents that make use of an alias file, remember that
+other people don't have the file! Paste the whole thing at the top
+of your documents, please.
+<p>
+<strong>EXPERTS:</strong> <strong>ALIAS</strong> is an alias of
+<code>.als</code>. You can use either, or mix 'n' match with
+impunity.
+<br>
+
+<!---SILENT--->
+
+<hr width="66%" align="left">
+<a name="SILENT"><h3><u>Hide input lines from output</u></h3></a>
+<br>
+Macro: <strong>SILENT</strong> <var>toggle</var>
+<br>
+Alias: <strong>COMMENT</strong>
+
+<p>
+Sometimes, you want to &quot;hide&quot;
+<a href="definitions.html#TERMS_INPUTLINE">input lines</a>
+from final output. This is most likely to be the case when setting
+up string tabs (see the
+<a href="STRING_TABS_TUT">quickie tutorial on string tabs</a>
+for an example), but there are other places where you might want input
+lines to be invisible as well. Any place you don't want input lines
+to appear in the output, use the <strong>SILENT</strong> macro.
+<p>
+<strong>SILENT</strong> is a toggle. Invoking it without an argument
+turns it on; any argument turns it off. E.g.,
+<p>
+<pre>
+ .SILENT
+ A line of text
+ .SILENT OFF
+</pre>
+
+The line &quot;A line of text&quot; will not appear in the
+output copy.
+<p>
+<strong>SILENT</strong> is aliased as <strong>COMMENT</strong>.
+If you want to insert non-printing comments into your documents,
+you may prefer this.
+<p>
+<strong>NOTE: SILENT</strong> does not automatically break an
+<a href="definitions.html#TERMS_INPUTLINE">input line</a>
+(see
+<a href="typesetting.html#BR">BR</a>)
+when you're in one of the
+<a href="definitions.html#TERMS_FILLED">fill modes</a>
+(<a href="typesetting.html#JUSTIFY">JUSTIFY</a>
+or
+<a href="typesetting.html#QUAD">QUAD L | R | C | J</a>).
+The same applies to tabs
+(<a href="typesetting.html#TAB_SET">typesetting</a>
+or
+<a href="typesetting.html#ST">string</a>)
+to which you've passed the <strong>J</strong> or <strong>QUAD</strong>
+argument. You must insert <code>.BR</code> yourself, or risk a
+portion of your text disappearing into a black hole.
+<br>
+
+<!---TRAP--->
+
+<hr width="66%" align="left">
+<a name="TRAP"><h3><u>Suspend/re-invoke traps</u></h3></a>
+<br>
+Macro: <strong>TRAP</strong> <var>toggle</var>
+
+<p>
+Traps are vertical positions on the output page at which you or
+<strong>mom</strong> have instructed groff to start doing
+something automatically. Commonly, this is near the bottom of
+the page, where automatic behind-the-scenes processing is needed
+in order for one page to finish and another to start.
+<p>
+Sometimes, traps get sprung when you don't want them, notably
+when using the
+<a href="#EL">EL</a>
+and
+<a href="#TN">TN</a>
+macros. If this happens, surround just the offending macros and
+input lines with
+<p>
+<pre>
+ .TRAP OFF
+ ...
+ .TRAP
+</pre>
+
+<strong>TRAP</strong> is a toggle, therefore any argument
+turns it off (i.e. suspends the trap), and no argument turns it
+(back) on.
+<p>
+Have a look at the <strong>IMPORTANT</strong> sections
+of <strong>EL</strong> and <strong>TN</strong> to see
+<strong>TRAP</strong> in action.
+<br>
+
+<!---SMARTQUOTES--->
+
+<hr width="66%" align="left">
+<a name="SMARTQUOTES"><h3><u>Smartquotes</u></h3></a>
+<br>
+Macro: <strong>SMARTQUOTES</strong> <var>toggle</var>
+
+<p>
+<strong>SMARTQUOTES</strong> converts all instances of the
+inch-mark, (<kbd>"</kbd> -- also called a &quot;doublequote&quot;),
+into the appropriate instances of true open- and close-doublequotes.
+<p>
+Typographically, there is a difference between the inch-mark and
+doublequotes -- a BIG difference. Sadly, typewriters and computer
+keyboards supply only one: the inch-mark. While using inches for
+doublequotes is, and always has been, acceptable in typewriter-style
+copy, it has never been, and, God willing, never will be acceptable in
+typeset copy. Failure to turn inches into quotes is the first thing
+a professional typesetter notices in documents prepared by amateurs.
+And you don't want to look like an amateur, do you?
+<p>
+When preparing documents for typesetting, by all means, use the
+inch-mark. Just make sure to turn <strong>SMARTQUOTES</strong>
+on. <strong>SMARTQUOTES</strong> is a toggle, so invoking it with
+no argument turns it on, and invoking it with any argument at all
+turns it off.
+<p>
+If you're using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
+with
+<a href="#PRINTSTYLE">PRINTSTYLE TYPESET</a>,
+<strong>SMARTQUOTES</strong> is on by default; with
+<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+it's off by default (and should probably stay that way).
+<p>
+<strong>NOTE:</strong> <strong>SMARTQUOTES</strong> does not work on
+single quotes, which most people input with the apostrophe (found at
+the right-hand end of the &quot;home row&quot; on a QWERTY keyboard).
+Groff will interpret all instances of the apostrophe as an apostrophe,
+making the symbol useless as an open-single-quote. For open single
+quotes, input the backtick character typically found under the tilde
+on most keyboards. (Pour nous autres, &quot;backtick&quot; veut dire
+l'accent grave.)
+Here's an example of correct input copy with single quotes:
+<p>
+<pre>
+ "But she said, `I don't want to!'"
+</pre>
+
+<strong>ADDITIONAL NOTE:</strong> Whether or not you have
+<strong>SMARTQUOTES</strong> turned on, get into the habit of entering
+the foot- and inch-marks, when you need them, with the
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>
+<strong>\*[FOOT]</strong> and <strong>\*[INCH]</strong>, instead
+of <kbd>'</kbd> and <kbd>"</kbd>.
+<br>
+
+<!---CAPS--->
+
+<hr width="66%" align="left">
+<a name="CAPS"><h3><u>Convert to upper case</u></h3></a>
+<br>
+Macro: <strong>CAPS</strong> <var>toggle</var>
+
+<p>
+<strong>CAPS</strong> converts all lower case letters to upper
+case. Primarily, it's a support macro used by the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>,
+but you may find it helpful on occasion. <strong>CAPS</strong>
+is a toggle, therefore no argument turns it on, any argument
+turns it off.
+<p>
+<pre>
+ .CAPS
+ All work and no play makes Jack a dull boy.
+ .CAPS OFF
+</pre>
+
+produces, on output
+<p>
+<pre>
+ ALL WORK AND NO PLAY MAKES JACK A DULL BOY.
+</pre>
+
+<!---UNDERSCORE--->
+
+<hr width="66%" align="left">
+<a name="UNDERSCORE"><h3><u>Single underscore</u></h3></a>
+<br>
+Macro: <strong>UNDERSCORE</strong> <var>[ &lt;distance below baseline&gt; ] &quot;&lt;string&gt;&quot;</var>
+<br>
+<em>*Optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+By default, <strong>UNDERSCORE</strong> places an underscore 2 points
+beneath the required
+<a href="definitions.html#TERMS_STRINGARGUMENT">string argument</a>.
+The string must be enclosed in double-quotes, like this:
+<p>
+<pre>
+ .UNDERSCORE "Unmonitored monopolies breed high prices and poor products."
+</pre>
+
+If you wish to change the distance of the rule from the
+baseline, use the optional argument <i>&lt;distance below
+baseline&gt;</i> (with a unit of measure).
+<p>
+<pre>
+ .UNDERSCORE 3p "Unmonitored monopolies breed high prices and poor products."
+</pre>
+
+The above places the underscore 3 points below the baseline.
+<p>
+<a name="NOTES_UNDERSCORE"></a>
+<strong>NOTES:</strong>
+<br>
+<strong>UNDERSCORE</strong> does not work across line breaks in output
+copy, which is to say that you can't underscore a multi-line passage
+simply by putting the text of the whole thing in the string you pass
+to <strong>UNDERSCORE</strong>. Each
+<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>
+or portion of an output line you want underscored must be plugged
+separately into <strong>UNDERSCORE</strong>. Bear in mind, though,
+that underscoring should at best be an occasional effect in typeset
+copy. If you want to emphasize an entire passage, it's much, much
+better to change fonts (e.g. to italic or bold).
+<p>
+You can easily and successfully underline entire passages in simulated
+typewriter-style copy (i.e. if your font is Courier, or you're using
+the document processing macro
+<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>),
+with the
+<a href="#UNDERLINE">UNDERLINE</a>
+macro. <strong>UNDERLINE</strong> is designed specifically for this
+purpose, but works only with the Courier font.
+<p>
+<strong>Mom</strong> doesn't always get the position and length
+of the underscore precisely right in
+<a href="definitions.html#TERMS_JUST">justified</a>
+copy, although she's fine with all the other
+<a href="definitions.html#TERMS_FILLED">fill modes</a>,
+as well as with the no-fill modes. As of this writing, I have
+no solution to the occasional problems with justified copy.
+<p>
+<strong>UNDERSCORE</strong> tends to confuse
+<strong>gxditview</strong>, even though the output, when
+printed, looks fine. Generally, I recommend using <strong>gv</strong>
+to preview files anyway. See the section on
+<a href="#PREVIEWING">previewing</a>.
+<br>
+
+<!---UNDERSCORE2--->
+
+<hr width="66%" align="left">
+<a name="UNDERSCORE2"><h3><u>Double underscore</u></h3></a>
+<br>
+Macro: <strong>UNDERSCORE2</strong> <var>[ &lt;distance below baseline&gt; [ &lt;distance between rules&gt; ] ] &quot;&lt;string&gt;&quot;</var>
+<br>
+<em>*Optional arguments require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+By default, <strong>UNDERSCORE2</strong> places a double underscore
+2 points beneath the required
+<a href="definitions.html#TERMS_STRINGARGUMENT">string argument</a>.
+The string must be enclosed in double-quotes, like this:
+<p>
+<pre>
+ .UNDERSCORE2 "Unmonitored monopolies breed high prices and poor products."
+</pre>
+
+The default distance between the two rules is 2 points.
+<p>
+If you wish to change the distance of the double underscore from
+the baseline, use the optional argument <i>&lt;distance below
+baseline&gt;</i> (with a unit of measure), e.g.,
+<p>
+<pre>
+ .UNDERSCORE2 3p "Unmonitored monopolies breed high prices and poor products."
+</pre>
+
+which places the double underscore 3 points below the baseline.
+<p>
+If you wish to change the distance between the two rules as
+well, use the second optional argument <i>&lt;distance between
+rules&gt;</i> (with a unit of measure). Be aware that you must
+give a value for the first optional argument if you want to use
+the second.
+<p>
+<strong>NOTE:</strong> the same restrictions and caveats apply
+to <strong>UNDERSCORE2</strong> as to
+<strong>UNDERSCORE</strong>. See the
+<a href="#NOTES_UNDERSCORE">NOTES</a>
+for <strong>UNDERSCORE</strong>.
+<br>
+
+<!---UNDERLINE--->
+
+<hr width="66%" align="left">
+<a name="UNDERLINE"><h3><u>Underline text -- Courier font only!</u></h3></a>
+<br>
+Macro: <strong>UNDERLINE</strong> <var>toggle</var>
+
+<p>
+If your font is Courier, or you're using the document processing macro
+<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+<strong>UNDERLINE</strong> allows you to underline words and
+passages that, in typeset copy, would be italicised. You invoke
+<strong>UNDERLINE</strong> as you do with all toggle macros --
+by itself (i.e. with no argument) to initiate underlining, and
+with any argument to turn underlining off.
+<p>
+When on, <strong>UNDERLINE</strong> underlines letters, words
+and numbers, but not punctuation or spaces. This makes for more
+readable copy than a solid underline.
+<p>
+<strong>NOTE:</strong> Underlining may also be turned on and off
+<a href="definitions.html#TERMS_INLINES">inline</a>
+with the escapes
+<a href="#UL">\*[UL]...\*[ULX].</a>
+<br>
+
+<!---UL--->
+
+<hr width="66%" align="left">
+<a name="UL"><h3><u>Inline escape for underlining -- Courier font only!</u></h3></a>
+<br>
+Inline: <strong>\*[UL]...\*[ULX]</strong>
+
+<p>
+If your font is Courier, or you're using the document processing macro
+<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+<strong>\*[UL]...\*[ULX]</strong> underlines words and
+passages that, in typeset copy, would be italicised.
+<p>
+<strong>\*[UL]</strong> underlines all letters, words and numbers
+following it, but not punctuation or spaces. This makes for more
+readable copy than a solid underline. When you no longer want
+underlining, <strong>\*[ULX]</strong> turns underlining off.
+<p>
+The macro
+<a href="#UNDERLINE">UNDERLINE</a>
+and the inline escape <strong>\*[UL]</strong> are functionally
+identical, hence
+<p>
+<pre>
+ .FAM C
+ .FT R
+ .PT_SIZE 12
+ .LS 24
+ .SS 0
+ .QUAD LEFT
+ Which should I heed?
+ .UNDERLINE
+ Just do it
+ .UNDERLINE OFF
+ or
+ .UNDERLINE
+ just say no?
+ .UNDERLINE OFF
+</pre>
+
+produces the same result as
+<p>
+<pre>
+ .FAM C
+ .FT R
+ .PT_SIZE 12
+ .LS 24
+ .SS 0
+ .QUAD LEFT
+ Which should I heed? \*[UL]Just do it\*[ULX] or \*[UL]just say no?\*[ULX]
+</pre>
+
+<!---PAD--->
+
+<hr width="66%" align="left">
+<a name="PAD"><h3><u>Insert space into lines</u></h3></a>
+<br>
+Macro: <strong>PAD</strong> <var>&quot;&lt;string with pad markers inserted&gt;&quot;</var>
+
+<p>
+With <strong>PAD</strong>, you can insert unspecified amounts of
+whitespace into a line.
+<p>
+<strong>PAD</strong> calculates the difference between the length of
+text on the line and the distance remaining to its end, then inserts
+the difference (as whitespace) at the place(s) you specify.
+<p>
+Take, for example, the following relatively common typesetting
+situation, found at the bottom of legal agreements:
+<p>
+<pre>
+ Date Signature |
+</pre>
+
+The person signing the agreement is supposed to fill in the date
+as well as a signature. Space needs to be left for both, but
+the exact amount is neither known, nor important. All that
+matters is that there be a little space after Date, and rather
+more space after Signature. (In the above, | represents
+the end of the line at the prevailing line length.)
+<p>
+The
+<a href="#PADMARKER">pad marker</a>
+(see below) is # (the pound or number sign on your keyboard) and
+can be used multiple times in a line. With that in mind, here's how
+you'd input the Date/Signature line (assuming a length of 30 picas):
+<p>
+<pre>
+ .LL 30P
+ .PAD "Date#Signature###"
+</pre>
+
+When the line is output, the space remaining on the line, after
+&quot;Date&quot; and &quot;Signature&quot; have been taken into
+account, is split into four (because there are four # signs).
+One quarter of the space is inserted between Date and Signature,
+the remainder is inserted after Signature.
+<p>
+One rarely wants merely to insert space in a line; one usually
+wants to fill it with something, hence <strong>PAD</strong> is
+particularly useful in conjunction with
+<a href="#STRING_TABS">string tabs</a>.
+The following uses the Date/Signature example above, but adds
+rules into the whitespace through the use of string tabs and
+groff's line drawing function,
+<a href="#INLINE_LINEDRAWING_GROFF">\l</a>.
+<p>
+<pre>
+ .LL 30P
+ .PAD "Date\*[ST1]#\*[ST1X]Signature\*[ST2]###\*[ST2X]"
+ .EL
+ .ST 1 J
+ .ST 2 J
+ .TAB 1
+ \l'\n(.lu'
+ .TN
+ \l'\n(.lu'
+ .TQ
+</pre>
+
+If you're not a typesetter, and if you're new to groff, the
+example probably looks like gibberish. My apologies. However,
+remember that typesetting is a craft, and without having studied
+the craft, it takes a while to grasp its concepts. Also,
+although <strong>mom</strong> tries very hard to provide
+consistent-looking, comprehensible alternatives to groff's
+native
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>,
+<strong>mom</strong> has not yet found a replacement for
+<strong>\l</strong>.
+<p>
+Basically, what the example does is:
+<br>
+<ol>
+ <li>Pads the Date/Signature line (using the pad marker #),
+ encloses the padded space with two string tabs markers,
+ and outputs the line
+ <br>
+ <li>Sets the two string tabs (notice the use of
+ <a href="#EL">EL</a>
+ beforehand; you don't want <strong>mom</strong>
+ to advance a line at this point)
+ <br>
+ <li>Calls the first string tab and draws a rule to its full
+ length (<kbd>\l'\n(.lu'</kbd>; for an easier way to draw a rule
+ that fills a tab, see
+ <a href="inlines.html#INLINE_RULE_MOM">Full measure
+ rules</a>).
+ <br>
+ <li>Calls the second tab with
+ <a href="#TN">TN</a>
+ (which moves to tab 2 and stays on the same baseline)
+ then draws a rule to the full length of string tab 2
+</ol>
+<br>
+Often, when setting up string tabs this way, you don't want the
+padded line to print immediately. To accomplish this, use
+<a href="#SILENT">SILENT</a>.
+See the <a href="#STRING_TABS_TUT">quickie tutorial on string tabs</a>
+for an example.
+<p>
+<strong>NOTE:</strong> Because the pound sign (#) is used as the pad
+marker, you can't use it as a literal part of the pad string. If you
+need the sign to appear in the text of a padded line, change the pad
+marker with <a href="#PAD_MARKER">PAD_MARKER</a>. Also, be aware
+that # as a pad marker only applies within the <strong>PAD</strong>
+macro; at all other times it prints literally, just as you'd expect.
+<p>
+Another important consideration when using <strong>PAD</strong> is that
+because the string must be enclosed in double-quotes, you can't use the
+double-quote (&quot;) as part of the string. The way to circumvent
+this is to use the groff
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>
+<strong>\(lq</strong> and <strong>\(rq</strong> (leftquote and
+rightquote respectively) whenever double-quotes are required in the
+string passed to <strong>PAD</strong>.
+<br>
+
+<!---PAD_MARKER--->
+
+<hr width="66%" align="left">
+<a name="PAD_MARKER"><h3><u>Change/set the marker used with PAD</u></h3></a>
+<br>
+Macro: <strong>PAD_MARKER</strong> <var>&lt;character to use as the pad marker&gt;</var>
+
+<p>
+If you need to change <strong>mom</strong>'s default pad marker
+(#), either because you want a literal # in the padded line,
+or simply because you want to use another character instead, use
+<strong>PAD_MARKER</strong>, whose argument is the new pad marker
+character you want.
+<p>
+<pre>
+ .PAD_MARKER @
+</pre>
+
+changes the pad marker to @.
+<p>
+Once you've changed the pad marker, the new marker remains in
+effect for every instance of
+<a href="#PAD">PAD</a>
+until you change it again (say, back to the pound sign).
+<br>
+
+<!---\*[LEADER]--->
+
+<hr width="66%" align="left">
+<a name="LEADER"><h3><u>Inline escape to add leaders to a line</u></h3></a>
+<br>
+Inline: <strong>\*[LEADER]</strong>
+
+<p>
+Whenever you want to fill a line or tab with
+<a href="definitions.html#TERMS_LEADER">leaders</a>,
+use the
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+<strong>\*[LEADER]</strong>. The remainder of the line or tab will be
+filled with the leader character. <strong>Mom</strong>'s
+default leader character is a period (dot), but you can change
+it to any character you like with
+<a href="#LEADER_CHARACTER">LEADER_CHARACTER</a>.
+<p>
+<strong>NOTE:</strong> <strong>\*[LEADER]</strong> fills lines
+or tabs right to their end. You cannot insert leaders into a
+line or tab and have text following the leader on the same line
+or in the same tab. Should you wish to achieve such an effect
+typographically, create tabs for each element of the line and
+fill them appropriately with the text and leaders you need.
+<a href="#STRING_TABS">String tabs</a> are perfect for this. An
+example follows.
+<p>
+<pre>
+ .LL 30P
+ .PAD "Date\*[ST1]#\*[ST1X]Signature\*[ST2]###\*[ST2X]"
+ .EL
+ .ST 1 J
+ .ST 2 J
+ .TAB 1
+ \*[LEADER]
+ .TN
+ \*[LEADER]
+ .TQ
+</pre>
+
+The <strong>PAD</strong> line sets the words Date and Signature,
+and marks string tabs around the pad space inserted in the line.
+The string tabs are then &quot;set&quot;, called, and filled
+with leaders. The result looks like this:
+<p>
+<pre>
+ Date.............Signature.....................................
+</pre>
+
+<!---LEADER_CHARACTER--->
+
+<hr width="66%" align="left">
+<a name="LEADER_CHARACTER"><h3><u>Change/set the leader character</u></h3></a>
+<br>
+Macro: <strong>LEADER_CHARACTER</strong> <var>&lt;character&gt;</var>
+
+<p>
+<strong>LEADER_CHARACTER</strong> takes one argument: a single
+character you would like to be used for
+<a href="definitions.html#TERMS_LEADER">leaders</a>.
+(See
+<a href="#LEADER">\*[LEADER]</a> for an explanation of how to
+fill lines with leaders.)
+<p>
+For example, to change the leader character from <strong>mom</strong>'s
+default (a period) to the underscore character, enter
+<p>
+<pre>
+ .LEADER_CHARACTER _
+</pre>
+
+<!---DROPCAP--->
+
+<hr width="66%" align="left">
+<a name="DROPCAP"><h3><u>Drop caps</u></h3></a>
+<br>
+Macro: <strong>DROPCAP</strong> <var>&lt;dropcap letter&gt; &lt;number of lines to drop&gt; [ COND &lt;percentage&gt; | EXT &lt;percentage&gt; ]</var>
+
+<p>
+The first two arguments to <strong>DROPCAP</strong> are the letter you
+want to be the
+<a href="definitions.html#TERMS_DROPCAP">drop cap</a>
+and the number of lines you want it to drop. By default,
+<strong>mom</strong> uses the current family and font for the drop cap.
+<p>
+The optional argument (COND or EXT) indicates that you want the
+drop cap condensed (narrower) or extended (wider). If you use
+<strong>COND</strong> or <strong>EXT</strong>, you must follow the
+argument with the percentage of the letter's normal width you want
+it condensed or extended. No percent sign (%) is required.
+<p>
+<strong>Mom</strong> will do her very best to get the drop cap to
+line up with the first line of text indented beside it, then set
+the correct number of indented lines, and restore your left margin
+when the number of drop cap lines has been reached.
+<p>
+Beginning a paragraph with a drop cap &quot;T&quot; looks
+like this:
+<p>
+<pre>
+ .DROPCAP T 3 COND 90
+ he thousand injuries of Fortunato I had borne as best I
+ could, but when he ventured upon insult, I vowed revenge.
+ You who so well know the nature of my soul will not suppose,
+ however, that I gave utterance to a threat...
+</pre>
+
+The drop cap, slightly condensed but in the current family and font,
+will be three lines tall, with whatever text fills those three
+lines indented to the right of the letter. The remainder of the
+paragraph's text will revert to the left margin.
+<p>
+<strong>NOTE:</strong> When using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macro</a>
+<a href="#PP">PP</a>,
+<strong>DROPCAP</strong> only works
+<br>
+<ul>
+ <li>with initial paragraphs (i.e. at the start of the document,
+ or after
+ <a href="#HEAD">HEAD</a>),
+ <li>when <strong>DROPCAP</strong> comes immediately after <strong>PP</strong>,
+ <li>and when the
+ <a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE</a>
+ is TYPESET.
+</ul>
+<br>
+If these conditions aren't met, <strong>DROPCAP</strong> is silently ignored.
+<p>
+<strong>WARNING:</strong> <strong>DROPCAP</strong> puts a bit of
+a strain on resource-challenged systems. If you have such a
+system and use drop caps extensively in a document, be prepared
+for a wait while <strong>mom</strong> does her thing.
+
+<h3><a name="DROPCAP_SUPPORT"><u>Support macros for DROPCAP</u></a></h3>
+Drop caps are the bane of most typesetters' existence. It's
+very difficult to get the size of the drop cap right for the
+number of drop lines, especially if the drop cap is in a
+different family from the prevailing family of running text.
+Not only that, but there's the gutter around the drop cap to
+take into account, plus the fact that the letter may be too wide
+or too narrow to look anything but odd or misplaced.
+<p>
+<strong>Mom</strong> solves the last of these problems with the
+<strong>COND</strong> and <strong>EXT</strong> arguments. The
+rest she solves with macros that change the default behaviour of
+<strong>DROPCAP</strong>, namely
+<p>
+<a href="#DROPCAP_FAMILY">DROPCAP_FAMILY</a>,
+<br>
+<a href="#DROPCAP_FONT">DROPCAP_FONT</a>,
+<br>
+<a href="#DROPCAP_ADJUST">DROPCAP_ADJUST</a>
+<br>
+and
+<br>
+<a href="#DROPCAP_GUTTER">DROPCAP_GUTTER</a>.
+<p>
+These macros must, of course, come before you invoke
+<strong>DROPCAP</strong>.
+
+<h3><a name="DROPCAP_FAMILY"><u>DROPCAP_FAMILY</u></a></h3>
+
+Set the drop cap family by giving
+<strong>DROPCAP_FAMILY</strong> the name of the family you want,
+e.g.
+<p>
+<pre>
+ .DROPCAP_FAMILY H
+</pre>
+
+which will set the family to Helvetica for the drop cap only.
+
+<h3><a name="DROPCAP_FONT"><u>DROPCAP_FONT</u></a></h3>
+
+Set the drop cap font by giving
+<strong>DROPCAP_FONT</strong> the name of the font you want,
+e.g.
+<p>
+<pre>
+ .DROPCAP_FONT I
+</pre>
+
+which will set the font to italic for the drop cap only.
+
+<h3><a name="DROPCAP_ADJUST"><u>DROPCAP_ADJUST</u></a></h3>
+
+If the size <strong>mom</strong> calculates for the drop cap
+isn't precisely what you want, you can increase or decrease it
+with <strong>DROPCAP_ADJUST</strong>, like this:
+e.g.
+<p>
+<pre>
+ .DROPCAP_ADJUST +1
+ or
+ .DROPCAP_ADJUST -.75
+</pre>
+
+<strong>DROPCAP_ADJUST</strong> only understands
+<a href="definitions.html#TERMS_PICASPOINTS">points</a>,
+therefore do not append any
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+to the argument. And always be sure to preprend the plus or
+minus sign, depending on whether you want the drop cap larger or
+smaller.
+
+<h3><a name="DROPCAP_GUTTER"><u>DROPCAP_GUTTER</u></a></h3>
+
+By default, <strong>mom</strong> puts three points of space
+between the drop cap and the text indented beside it. If you
+want another value, use <strong>DROPCAP_GUTTER</strong> (with a
+unit of measure), like this:
+<p>
+<pre>
+ .DROPCAP_GUTTER 6p
+</pre>
+
+<!---\*[SUP]--->
+
+<hr width="66%" align="left">
+<a name="SUP"><h3><u>Superscript</u></h3></a>
+<br>
+Inlines: <strong>\*[SUP]...\*[SUPX]</strong>
+
+<p>
+Superscripts are accomplished
+<a href="definitions.html#TERMS_INLINES">inline</a>.
+Whenever you need one, typically for numerals, all you need to
+do is surround the superscript with the inlines above.
+<strong>\*[SUP]</strong> begins superscripting;
+<strong>\*[SUPX]</strong> turns it off.
+<a name="CONDSUP"></a>
+<a name="EXTSUP"></a>
+<p>
+If your running type is
+<a href="#COND_INLINE">pseudo-condensed</a>
+or
+<a href="#EXT_INLINE">pseudo-extended</a>
+and you want your superscripts to be equivalently pseudo-condensed or
+-extended, use <strong>\*[CONDSUP]...\*[CONDSUPX]</strong> or
+<strong>\*[EXTSUP]...\*[EXTSUPX]</strong>.
+<p>
+The superscript inlines are primarily used by the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
+for automatic generation of numbered footnotes. However, you may
+find them useful for other purposes.
+<p>
+<strong>NOTE:</strong> <strong>Mom</strong> does a pretty fine job of
+making superscripts look good in any font and at any size. If you're
+fussy, though (and I am), about precise vertical placement, kerning,
+weight, size, and so on, you may want to roll your own solution.
+And sorry, there's no <strong>mom</strong> equivalent for subscripts.
+I'm neither a mathematician nor a chemist, so I don't need them.
+Of course, anyone who wishes to contribute a subscript routine to
+<strong>mom</strong> will receive eternal blessings not only in this
+lifetime, but in all lifetimes to come.
+
+<p>
+<hr>
+<a href="inlines.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="typesetting.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/headfootpage.html b/contrib/groff/contrib/mom/momdoc/headfootpage.html
new file mode 100644
index 0000000..b82cac2
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/headfootpage.html
@@ -0,0 +1,1305 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Document processing: headers, footers and pagination</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="rectoverso.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="docelement.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="HEADFOOTPAGE">
+ <h2 align="center"><u>DOCUMENT HEADERS, FOOTERS, AND PAGINATION</u></h2>
+</a>
+
+<ul>
+ <li><a href="#HEADFOOTPAGE_INTRO">Introduction -- VERY IMPORTANT; read me!</a>
+ <ul>
+ <li><a href="#PAGINATION_NOTE">An important note on pagination</a>
+ </ul>
+ <li><a href="#DESCRIPTION_GENERAL">General description of headers/footers</a>
+ <li><a href="#HEADER_STYLE">Default specs for headers/footers</a>
+ <li><a href="#VERTICAL_SPACING">Vertical placement and spacing of headers/footers</a>
+ <li><a href="#HEADFOOT_MANAGEMENT">Managing headers/footers</a>
+ <ul>
+ <li><a href="#HEADERS">HEADERS</a> -- on or off
+ <li><a href="#FOOTERS">FOOTERS</a> -- on or off
+ <li><a href="#FOOTER_ON_FIRST_PAGE">FOOTER_ON_FIRST_PAGE</a>
+ <li><a href="#USERDEF_HDRFTR">User-defined, single string recto/verso headers/footers</a>
+ <ul>
+ <li><a href="#USERDEF_HDRFTR_INTRO">Introduction</a>
+ <li><a href="#HDRFTR_RECTOVERSO">HEADER_RECTO, HEADER_VERSO</a>
+ </ul>
+ </ul>
+ <li><a href="#HEADFOOT_CONTROL">Control macros for headers/footers</a>
+ <ul>
+ <li><a href="#HDRFTR_STRINGS">Header/footer strings</a>
+ <li><a href="#HDRFTR_STYLE">Header/footer style</a>
+ <ul>
+ <li><a href="#HDRFTR_STYLE_GLOBAL">Global style control</a>
+ <li><a href="#HDRFTR_STYLE_PART">Part-by-part style control</a>
+ </ul>
+ <li><a href="#HDRFTR_VERTICAL">Vertical placement and spacing of headers/footers</a>
+ <ul>
+ <li><a href="#HDRFTR_MARGIN">HEADER_MARGIN</a>
+ <li><a href="#HDRFTR_GAP">HEADER_GAP</a>
+ </ul>
+ <li><a href="#HDRFTR_SEPARATOR">The header/footer separator rule</a>
+ <ul>
+ <li><a href="#HDRFTR_RULE">HEADER_RULE</a> -- on or off
+ <li><a href="#HDRFTR_RULE_GAP">HEADER_RULE_GAP</a> -- distance of rule from header/footer
+ </ul>
+ </ul>
+ <li><a href="#PAGINATION">Pagination</a>
+ <ul>
+ <li><a href="#INDEX_PAGINATION">Pagination control macros</a>
+ </ul>
+</ul>
+
+<a name="HEADFOOTPAGE_INTRO">
+ <h2><u>Introduction</u></h2>
+</a>
+
+<p>
+<a href="definitions.html#TERMS_HEADER">Headers</a>
+and
+<a href="definitions.html#TERMS_FOOTER">footers</a>,
+as defined in the section
+<a href="definitions.html#TERMS_MOM">Mom's Document Processing Terms</a>,
+are those parts of a document that contain information about the document
+itself which appear in the margins either above or below
+<a href="definitions.html#TERMS_RUNNING">running text</a>.
+They are, in all respects but two, identical. The differences are:
+<p>
+<ol>
+ <li>headers appear in the margin <em>above</em> running text while
+ footers appear in the margin <em>beneath</em> running text;
+ <li>the (optional) rule that separates headers from running
+ text appears <em>below</em> the header while
+ the (optional) rule that separates footers from running
+ text appears <em>above</em> the footer.
+</ol>
+<a name="HEADERFOOTER"></a>
+<p>
+Because headers and footers are virtually identical, this
+documentation addresses itself only to headers. In all cases,
+unless otherwise noted, descriptions of headers
+describe footers as well.
+<p>
+Furthermore, any
+<a href="definitions.html#TERMS_CONTROLMACRO">control macro</a>
+that begins with <strong>HEADER_</strong> may be used to control
+footers, simply by replacing <strong>HEADER_</strong> with
+<strong>FOOTER_</strong>.
+<p>
+<strong>Author's note:</strong> Left to their own devices (i.e. if
+you're happy with the way <strong>mom</strong> does things by default),
+headers are something you never have to worry about. You can skip
+reading this section entirely. But if you want to change them, be
+advised that headers have more macros to control their appearance than
+any other document element. The text of this documentation becomes
+correspondingly dense at this point.
+<a name="PAGINATION_NOTE"></a>
+<p>
+<strong>NOTE:</strong> While the single page number that
+<strong>mom</strong> generates in either the top or bottom margin
+above or below running text is technically a kind of header/footer,
+<strong>mom</strong> and this documentation treat it as a
+separate page element.
+
+<a name="DESCRIPTION_GENERAL"><h3><u>General description of headers/footers</u></h3></a>
+<p>
+Headers comprise three distinct parts: a left part, a center part,
+and a right part. Each part contains text (a &quot;string&quot;)
+that identifies some aspect of the document as a whole.
+<p>
+The left part (&quot;header left&quot;) lines up with the document's
+left margin. The center part (&quot;header center&quot;) is
+centered on the document's line length. The right part (&quot;header
+right&quot;) lines up with the document's right margin. Not all parts
+need contain a string, and if you don't want headers at all, you can
+turn them off completely.
+<p>
+<strong>A note to groff experts:</strong> Although
+<strong>mom</strong>'s headers resemble the three-part titles generated
+by <code>.tl</code>, they're in no way related to it, nor based
+upon it. <code>.tl</code> is not used at all in <strong>mom</strong>.
+<p>
+Normally, <strong>mom</strong> fills headers with strings appropriate
+to the document type selected with
+<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>.
+You can, however, supply whatever strings you like -- including page
+numbers -- to go in any part of headers. What's more, you can set the
+family, font, size and capitalisation style (caps or caps/lower-case)
+for each header part individually.
+<p>
+By default, <strong>mom</strong> prints a horizontal rule beneath
+headers to separate them visually from running text. In the case of
+footers, the rule is <em>above</em> running text. You can increase
+or decrease the space between the header and the rule if you like (with
+<a href="#HDRFTR_RULE_GAP">HEADER_RULE_GAP</a>),
+or remove it completely.
+
+<a name="HEADER_STYLE"><h3><u>Default specs for headers/footers</u></h3></a>
+<p>
+<strong>Mom</strong> makes small type adjustments to each part of
+the header (left, center, right) to achieve an aesthetically
+pleasing result. The defaults are listed below. (The strings
+<strong>mom</strong> puts by default in each part are explained in
+<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>.)
+<p>
+<strong>NOTE:</strong> Except for capitalization (all caps or
+caps/lower-case), these defaults apply only to
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPESET</a>.
+<p>
+<pre>
+TYPE SPEC HEADER LEFT HEADER CENTER HEADER RIGHT
+--------- ----------- ------------- ------------
+Family document default document default document default
+Font roman italic roman
+All caps no no yes
+Size* -.5 (points) -.5 (points) -2 (points)
+ (-2 if all caps) (-2 if all caps) (-.5 if not all caps)
+
+*Relative to the point size of type in paragraphs
+</pre>
+
+You can, of course, change any of the defaults using the appropriate
+control macros. And should you wish to design headers from the ground
+up, <strong>mom</strong> has a special macro,
+<a href="#HDRFTR_PLAIN">HEADER_PLAIN</a>,
+that removes all type adjustments to headers. The straightforward
+type specs for paragraphs are used instead, providing a simple
+reference point for any alterations you want to make to the family,
+font, size and capitalisation style of any header part.
+<a name="VERTICAL_SPACING"><h3><u>Vertical placement and spacing of headers/footers</u></h3></a>
+<p>
+As explained in the section on
+<a href="typedocmac.html">typesetting macros in document processing</a>,
+the top and bottom margins of a <strong>mom</strong> document
+are the vertical start and end positions of
+<a href="definitions.html#TERMS_RUNNING">running text</a>,
+not the vertical positions of headers or footers, which, by definition,
+appear in the margin <em>above</em> (or below) running text.
+<p>
+The vertical placement of headers
+is controlled by the macro
+<a href="#HDRFTR_MARGIN">HEADER_MARGIN</a>,
+which establishes the
+<a href="definitions.html">baseline</a>
+position of headers relative to the <em>top</em> edge of the page.
+The header rule, whose position is relative to the header itself,
+is controlled by a separate macro.
+<strong>FOOTER_MARGIN</strong> establishes the baseline position of
+footers relative to the <em>bottom</em> edge of the page.
+<p>
+<a href="#HDRFTR_GAP">HEADER_GAP</a> establishes
+the distance between headers and the <em>start</em> of running text (effectively
+making <strong>HEADER_MARGIN + HEADER_GAP</strong> the top margin of
+running text unless you give <strong>mom</strong> a literal top margin
+(with
+<a href="typesetting.html#T_MARGIN">T_MARGIN</a>),
+in which case she ignores <strong>HEADER_GAP</strong> and starts
+running text at whatever top margin you gave.
+<strong>FOOTER_GAP</strong> and
+<a href="typesetting.html#B_MARGIN">B_MARGIN</a>
+work similarly, except they determine where running text
+<em>ends</em> on the page.
+<p>
+Confused? <strong>Mom</strong> apologizes. It's really quite
+simple. By default, <strong>mom</strong> sets headers 4-1/2
+<a href="definitions.html#TERMS_PICASPOINTS">picas</a>
+down from the top of the page and starts running text 3 picas (the
+<strong>HEADER_GAP</strong>) beneath that, which means the
+effective top margin of running text is 7-1/2 picas (visually approx. 1
+inch). If you give <strong>mom</strong> a literal top margin (with
+<a href="typesetting.html#T_MARGIN">T_MARGIN</a>),
+she ignores the <strong>HEADER_GAP</strong> and starts running
+text at whatever top margin you gave.
+<p>
+Footers are treated the same way, the only difference being the
+default distances. <strong>Mom</strong> sets footers 3 picas up from
+the bottom of the page, and interrupts the processing of running text 3
+picas (the <strong>FOOTER_GAP</strong>) above that (again, visually
+approx. 1 inch). If you give <strong>mom</strong> a literal bottom
+margin (with <a
+href="typesetting.html#B_MARGIN">B_MARGIN</a>), she ignores the
+<strong>FOOTER_GAP</strong> and interrupts the processing of running
+text at whatever bottom margin you gave.
+<p>
+If <strong>mom</strong> is paginating your document (she
+does, by default, at the bottom of each page), the vertical
+spacing and placement of page numbers, whether at the top
+or the bottom of the page, is managed exactly as if the
+page numbers were headers (or footers), and are controlled
+by the same macros. See
+<a href="#PAGINATION">Pagination control</a>.
+<br>
+<hr>
+
+<!========================================================================>
+
+<a name="HEADFOOT_MANAGEMENT">
+ <h2><u>Managing headers/footers</u></h2>
+</a>
+
+<p>
+The following are the basic macros for turning
+<a href="definitions.html#TERMS_HEADER">headers</a>
+or
+<a href="definitions.html#TERMS_FOOTER">footers</a>
+on or off. They should be invoked prior to
+<a href="docprocessing.html#START">START</a>.
+<p>
+By default, <strong>mom</strong> prints page headers. If you turn
+them off, she will begin
+<a href="definitions.html#TERMS_RUNNING">running text</a>
+on each page with a default top margin of 6
+<a href="definitions.html#TERMS_PICASPOINTS">picas</a>
+unless you have requested a different top margin (with
+<a href="typesetting.html#T_MARGIN">T_MARGIN</a>)
+prior to
+<a href="docprocessing.html#START">START</a>.
+<p>
+Please note that headers and footers are mutually exclusive. If
+headers are on, footers (but NOT bottom-of-page numbering) are
+automatically turned off. Equally, if footers are on, headers
+(but NOT top-of-page numbering) are automatically turned off. Thus, if
+you'd prefer footers in a document, you need only invoke
+<a href="#FOOTERS">FOOTERS</a>;
+there's no need to turn headers off first.
+<br>
+
+<!---HEADERS--->
+
+<hr width="66%" align="left">
+<p>
+<a name="HEADERS"></a>
+Macro: <strong>HEADERS</strong> <var>toggle</var>
+
+<p>
+<a href="definitions.html#TERMS_HEADER">Page headers</a>
+are on by default. If you don't want them, turn them off by
+invoking <strong>HEADERS</strong> with any argument
+(<strong>OFF, QUIT, END, X...</strong>), e.g.
+<p>
+<pre>
+ .HEADERS OFF
+</pre>
+<p>
+<strong>NOTE:</strong> <strong>HEADERS</strong> automatically
+disables
+<a href="definitions.html#TERMS_FOOTER">footers</a>
+(you can't have both), but not the page numbers that normally
+appear at the bottom of the page.
+<p>
+<strong>ADDITIONAL NOTE:</strong> If <strong>HEADERS</strong>
+are <strong>OFF</strong>, <strong>mom</strong>'s normal top
+margin for
+<a href="definitions.html#TERMS_RUNNING">running text</a>
+(7.5
+<a href="definitions.html#TERMS_PICASPOINTS">picas</a>)
+changes to 6 picas (visually approx. 1 inch). This does NOT apply
+to the situation where footers have been explicitly turned on
+(with
+<a href="#FOOTERS">FOOTERS</a>).
+Explicitly invoking footers moves page numbering to the
+top of the page, where its placement and spacing are the same as
+for headers. (I.e. the top margin of running text remains 7.5
+picas.)
+<br>
+
+<!---FOOTERS--->
+
+<hr width="66%" align="left">
+<p>
+<a name="FOOTERS"></a>
+Macro: <strong>FOOTERS</strong> <var>toggle</var>
+
+<p>
+<a href="definitions.html#TERMS_FOOTER">Page footers</a>
+are off by default. If you want them instead of
+<a href="definitions.html#TERMS_HEADER">headers</a>
+(you can't have both), turn them on by invoking
+<strong>FOOTERS</strong> without an argument, e.g.
+<p>
+<pre>
+ .FOOTERS
+</pre>
+
+<p>
+<strong>FOOTERS</strong> automatically disables headers, and
+<strong>mom</strong> shifts the placement of page numbers from their
+normal position at page bottom to the top of the page.
+<p>
+<strong>NOTE:</strong> By default, when footers are on,
+<strong>mom</strong> does not print a page number on the first
+page of a document, nor on first pages after
+<a href="rectoverso.html#COLLATE">COLLATE</a>.
+If you don't want this behaviour, you can change it with
+<a href="#PAGENUM_ON_FIRST_PAGE">PAGENUM_ON_FIRST_PAGE</a>.
+<br>
+
+<!---FOOTER_ON_FIRST_PAGE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="FOOTER_ON_FIRST_PAGE"></a>
+Macro: <strong>FOOTER_ON_FIRST_PAGE</strong> <var>toggle</var>
+
+<p>
+If you invoke
+<a href="#FOOTERS">FOOTERS</a>,
+<strong>mom</strong>, by default, does not print a footer on the
+first page of the document. (The
+<a href="definitions.html">docheader</a>
+on page makes it redundant.) However, should you wish a footer on
+page 1, invoke <strong>FOOTER_ON_FIRST_PAGE</strong> without any argument.
+<br>
+<hr>
+
+<!---USERDEF_HDRFTR--->
+
+<a name="USERDEF_HDRFTR">
+ <h2><u>User-defined, single string recto/verso headers/footers</u></h2>
+</a>
+
+<a name="USERDEF_HDRFTR_INTRO"><h3><u>Introduction</u></h3></a>
+
+Sometimes, you'll find you can't get <strong>mom</strong>'s handling
+of 3-part headers or footers to do exactly what you want in the
+order you want. This is most likely happen when you want the
+information contained in the headers/footers split over two pages,
+as is often the case with recto/verso documents.
+<p>
+Say, for example, you want recto page headers to contain a document's
+author, centered, and verso page headers to contain the document's
+title, also centered, like this:
+<p>
+<pre>
+ +------------------------+ +------------------------+
+ | Author | | Title |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ +------------------------+ +------------------------+
+</pre>
+
+With <strong>mom</strong>'s standard 3-part headers, this isn't
+possible, even when
+<a href="rectoverso.html#RECTO_VERSO">RECTO_VERSO</a>
+is enabled. <strong>RECTO_VERSO</strong> switches the left and
+right parts of headers on alternate pages, but the center
+part remains unchanged.
+<p>
+Anytime you need distinctly different headers on alternate
+pages, <strong>mom</strong> has macros that let you manually
+design and determine what goes into headers on recto pages, and
+what goes into headers on verso pages. The macros are
+<a href="#HDRFTR_RECTO">HEADER_RECTO</a>
+and
+<a href="#HDRFTR_VERSO">HEADER_VERSO</a>.
+Both allow you to state whether the header is flush left, centered,
+or flush right, and both take a single
+<a href="definitions.html#TERMS_STRINGARGUMENT">string argument</a>
+with which, by combining text and
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>,
+you can make the headers come out just about any way you want.
+Use of the <strong>\*[PAGE#]</strong> escape is permitted in the
+string argument (see
+<a href="#PAGE_NUMBER_INCL">Including the page number in header-left, -center or -right</a>),
+and <strong>mom</strong> provides a special mechanism whereby
+it's possible to &quot;pad&quot; it as well.
+<br>
+
+<!---HDRFTR_RECTOVERSO--->
+
+<hr width="66%" align="left">
+<p>
+<a name="HDRFTR_RECTOVERSO"></a>
+Macro: <strong>HEADER_RECTO</strong> <var>LEFT | CENTER | RIGHT &quot;&lt;header recto string&gt;&quot;</var>
+Macro: <strong>HEADER_VERSO</strong> <var>LEFT | CENTER | RIGHT &quot;&lt;header verso string&gt;&quot;</var>
+<br>
+
+<p>
+<strong>HEADER_RECTO</strong> and <strong>HEADER_VERSO</strong> behave
+identically, hence all references to <strong>HEADER_RECTO</strong>
+in this section also refer to <strong>HEADER_VERSO</strong>.
+Furthermore, <strong>FOOTER_</strong> can be used instead of
+<strong>HEADER_</strong> to set up recto/verso footers.
+<p>
+The first argument to <strong>HEADER_RECTO</strong> is the
+direction in which you want the header
+<a href="definitions.html#TERMS_QUAD">quadded</a>.
+<strong>L, C</strong> and <strong>R</strong> may be used in
+place of <strong>LEFT, CENTER</strong> and
+<strong>RIGHT</strong>. The second argument is a string,
+surrounded by double-quotes, containing what you want in the
+header. <strong>HEADER_RECTO</strong> disables <strong>mom</strong>'s
+normal 3-part headers, therefore anything you want in the
+headers must be entered by hand in the string.
+<p>
+By default, <strong>HEADER_RECTO</strong> is set at the same
+size, and in the same family and font, as paragraph text. The
+control macros
+<a href="#HDRFTR_GLOBAL_FAMILY">HEADER_FAMILY</a>
+and
+<a href="#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>
+may be used to change the default family and size. Changes to
+the font(s) within the string must be accomplished with the
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>
+<strong>\*[ROM], \*[IT], \*[BD], \*[BDI]</strong> and
+<strong>\*[PREV]</strong> (see
+<a href="inlines.html#INLINE_FONTS_MOM">Changing fonts</a>).
+Additional refinements to the style of the header-recto string,
+including horizontal spacing and/or positioning, can also be made with
+inline escapes.
+<p>
+To include the current page number in the string, use the
+<strong>\*[PAGE#]</strong> inline.
+
+<h3><u>Padding the HEADER_RECTO/HEADER_VERSO string</u></h3>
+<p>
+You can &quot;pad&quot; the header-recto string, a convenience you'll
+appreciate in circumstances such as the following.
+<p>
+<pre>
+ VERSO RECTO
+ +------------------------+ +------------------------+
+ | Author Page# | | Page# Title |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ +------------------------+ +------------------------+
+</pre>
+
+To pad the string argument passed to <strong>HEADER_RECTO</strong>,
+begin and end the string (inside the double-quotes) with the caret
+character (<kbd>^</kbd>). Enter the pound sign (<kbd>#</kbd>) at any
+point in the string where you want an equalized amount of whitespace
+inserted. (If you're unsure what padding is, see
+<a href="goodies.html#PAD">Insert space into lines</a>.)
+Note that if you're padding the string, it doesn't matter what
+quad direction you give <strong>HEADER_RECTO</strong>.
+<p>
+The situation depicted above is accomplished like this:
+<p>
+<pre>
+ .HEADER_RECTO LEFT "^\*[PAGE#]#Title^"
+ .HEADER_VERSO LEFT "^Author#\*[PAGE#]^"
+</pre>
+
+Note that <strong>mom</strong> does not interpret the <kbd>#</kbd>
+in <strong>\*[PAGE#]</strong> as a padding marker (i.e. as a place
+to insert whitespace).
+<p>
+<strong>IMPORTANT:</strong> The
+<a href="goodies.html#PAD_MARKER">PAD_MARKER</a>
+macro, which changes the default pad marker (<kbd>#</kbd>) used by
+<a href="goodies.html#PAD">PAD</a>,
+has no effect on the pad marker used in the
+<strong>HEADER_RECTO</strong> string. If you absolutely must
+have a literal pound sign in your <strong>HEADER_RECTO</strong>
+string, use the escape sequence <kbd>\N'35'</kbd> where you want
+the pound sign to go.
+<br>
+<hr>
+
+<a name="HEADFOOT_CONTROL">
+ <h2><u>Control macros for headers/footers</u></h2>
+</a>
+<p>
+Virtually every part of headers (see the paragraph on how
+<a href="#HEADERFOOTER">&quot;headers&quot; means &quot;footers&quot;</a>
+in the
+<a href="#HEADFOOTPAGE_INTRO">introduction to headers/footers</a>)
+can be designed to your own specifications.
+
+<a name="INDEX_REFERENCE">
+ <h3><u>Header/footer control macros</u></h3>
+</a>
+
+<ul>
+ <li><a href="#HDRFTR_STRINGS"><strong>STRINGS</strong></a>
+ <ul>
+ <li><a href="#HDRFTR_LEFT">HEADER_LEFT</a>
+ <li><a href="#HDRFTR_CENTER">HEADER_CENTER</a>
+ <li><a href="#HDRFTR_RIGHT">HEADER_RIGHT</a>
+ <li><a href="#PAGE_NUMBER_SYMBOL">Replacing header left, center or right with the page number</a>
+ <li><a href="#PAGE_NUMBER_INCL">Including the page number in header left, center or right</a>
+ </ul>
+ <li><a href="#HDRFTR_STYLE"><strong>STYLE</strong></a>
+ <ul>
+ <li><a href="#HDRFTR_STYLE_GLOBAL"><strong>Global changes</strong></a>
+ <li><a href="#HDRFTR_GLOBAL_FAMILY">HEADER_FAMILY</a>&nbsp;-- family for entire header
+ <li><a href="#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>&nbsp;&nbsp;&nbsp;-- size for entire header
+ <li><a href="HDRFTR_PLAIN">HDRFTR_PLAIN</a>&nbsp;&nbsp;-- disable default adjustments to header parts
+ </ul>
+ <ul>
+ <li><a href="#HDRFTR_STYLE_PART"><strong>Part-by-part changes</strong></a>
+ <li><a href="#_FAMILY">_FAMILY</a>&nbsp;-- left, center or right family
+ <li><a href="#_FONT">_FONT</a>&nbsp;&nbsp;&nbsp;-- left, center or right font
+ <li><a href="#_SIZE">_SIZE</a>&nbsp;&nbsp;&nbsp;-- left, center or right size
+ <li><a href="#_CAPS">_CAPS</a>&nbsp;&nbsp;&nbsp;-- left, center or right all caps
+ </ul>
+ <li><a href="#HDRFTR_VERTICAL"><strong>VERTICAL PLACEMENT AND SPACING</strong></a>
+ <ul>
+ <li><a href="#HDRFTR_MARGIN">HEADER_MARGIN</a>
+ <li><a href="#HDRFTR_GAP">HEADER_GAP</a>
+ </ul>
+ <li><a href="#HDRFTR_SEPARATOR"><strong>SEPARATOR RULE</strong></a>
+ <ul>
+ <li><a href="#HDRFTR_RULE">HEADER_RULE</a>
+ <li><a href="#HDRFTR_RULE_GAP">HEADER_RULE_GAP</a>
+ </ul>
+</ul>
+
+<!---HDRFTR_STRINGS--->
+
+<hr width="66%" align="left">
+<a name="HDRFTR_STRINGS"><h3><u>Header/footer strings</u></h3></a>
+<p>
+<a name="HDRFTR_LEFT">
+ Macro: <strong>HEADER_LEFT</strong> <var>&quot;&lt;text of header left&gt;&quot; | #</var>
+</a>
+<br>
+<a name="HDRFTR_CENTER">
+ Macro: <strong>HEADER_CENTER</strong> <var>&quot;&lt;text of header center&gt;&quot; | #</var>
+</a>
+<br>
+<a name="HDRFTR_RIGHT">
+ Macro: <strong>HEADER_RIGHT</strong> <var>&quot;&lt;text of header right&gt;&quot; | #</var>
+</a>
+
+<p>
+To change the text (the &quot;string&quot;) of the left, center,
+or right part of headers, invoke the appopriate macro above with
+the string you want. For example, <strong>mom</strong>, by default,
+prints the document's author in the header-left position. If your
+document has, say, two authors, and you want both their names to
+appear header-left, change <strong>HEADER_LEFT</strong> like this:
+<p>
+<pre>
+ .HEADER_LEFT "R. Stallman, E. Raymond"
+</pre>
+
+Because the arguments to <strong>HEADER_LEFT, _CENTER,</strong>
+and <strong>_RIGHT</strong> are
+<a href="definitions.html#TERMS_STRINGARGUMENT">string arguments</a>,
+they must be enclosed in double-quotes.
+<p>
+<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
+with <strong>FOOTER_</strong> to change the strings in footers.
+<br>
+
+<a name="PAGE_NUMBER_SYMBOL">
+ <h3><u>Replacing header-left, -center or -right with the page number</u></h3>
+</a>
+If you would like to have the current page number to appear
+header-left, -center, or -right <em>instead</em> of a text
+string, invoke the appropriate macro, above, with the single
+argument <code>#</code> (the &quot;number&quot; or
+&quot;pound&quot; sign). Do <strong>NOT</strong> use
+double-quotes. For example,
+<p>
+<pre>
+ .HEADER_CENTER #
+</pre>
+
+will print the current page number in the center part of
+headers.
+
+<a name="PAGE_NUMBER_INCL">
+ <h3><u>Including the page number in header-left, -center or -right</u></h3>
+</a>
+If you would like to <em>include</em> the current page number in
+the string you pass to <strong>HEADER_LEFT, _CENTER,</strong> or
+<strong>_RIGHT</strong>, use the special
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+<code>\*[PAGE#]</code> in the string argument.
+<p>
+For example, say you have a document that's ten pages long, and
+you want header-right to say "page &lt;whichever&gt; of 10",
+invoke <strong>HEADER_RIGHT</strong> as follows:
+<p>
+<pre>
+ .HEADER_RIGHT "page \*[PAGE#] of 10"
+</pre>
+
+Header-right of page two will read &quot;page 2 of 10&quot;,
+header-right of page three will read &quot;page 3 of 10&quot;,
+and so on.
+<br>
+<hr>
+
+<!---HDRFTR_STYLE--->
+
+<a name="HDRFTR_STYLE"><h3><u>Header/footer style</u></h3></a>
+
+<p>
+<a name="HDRFTR_STYLE_GLOBAL"><strong>Global changes</strong></a>
+<p>
+The following macros allow you to make changes that affect all
+parts of the header at once.
+<p>
+Please note that <strong>HEADER_FAMILY</strong> and
+<strong>HEADER_FONT</strong> have no effect on
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>.
+<p>
+<ul>
+ <li><a href="#HDRFTR_GLOBAL_FAMILY">HEADER_FAMILY</a>
+ <li><a href="#HDRFTR_GLOBAL_SIZE">HEADER_SIZE</a>
+ <li><a href="#HDRFTR_PLAIN">HEADER_PLAIN</a>
+</ul>
+
+<hr width="33%" align="left">
+<p>
+<a name="HDRFTR_GLOBAL_FAMILY">
+ Macro: <strong>HEADER_FAMILY</strong> <var>&lt;family&gt;</var>
+</a>
+
+<p>
+By default, <strong>mom</strong> uses the default document family
+for headers. If you would like her to use another
+<a href="definitions.html#TERMS_FAMILY">family</a>
+in headers, invoke <strong>HEADER_FAMILY</strong> with the identifier
+for the family you want. The argument is the same as for the
+typesetting macro
+<a href="typesetting.html#FAMILY">FAMILY</a>.
+<p>
+<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
+with <strong>FOOTER_</strong> to change the footer family.
+<br>
+
+<hr width="33%" align="left">
+<p>
+<a name="HDRFTR_GLOBAL_SIZE">
+ Macro: <strong>HEADER_SIZE</strong> <var>&lt;+|-number of points&gt;</var>
+ <br>
+ <em>*Argument is relative to the point size of type in paragraphs</em>
+</a>
+
+<p>
+By default, <strong>mom</strong> makes small adjustments to the size
+of each part of a header to achieve an aesthetically pleasing result.
+If you'd like her to continue to do so, but would like the overall
+appearance of headers to be a little smaller or a little larger,
+invoke <strong>HEADER_SIZE</strong> with + or - the number of
+<a href="definitions.html#TERMS_PICASPOINTS">points</a>
+(fractions allowed) by which you want her to in/decrease the size
+of headers. For example,
+<p>
+<pre>
+ .HEADER_SIZE +.75
+</pre>
+
+increases the size of every part of a header by 3/4 of a point while
+respecting <strong>mom</strong>'s own little size changes.
+<p>
+See
+<a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
+for an explanation of how control macros ending in
+<strong>_SIZE</strong> work.
+<p>
+<a name="FOOTER_GLOBAL_SIZE"></a>
+<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
+with <strong>FOOTER_</strong> to change the footer size.
+<p>
+<strong>ADDITIONAL NOTE:</strong> Normally, macros that control headers have no
+effect on
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>.
+<strong>HEADER_SIZE</strong> is an exception. While all parts of a
+header in <strong>PRINTSTYLE TYPEWRITE</strong> are always the same
+size, you can use <strong>HEADER_SIZE</strong> with <strong>PRINTSTYLE
+TYPEWRITE</strong> to reduce the header's overall point size.
+You'll most likely require this when the
+<a href="docprocessing.html#COPYSTYLE">COPYSTYLE</a>
+is <strong>DRAFT</strong>, since portions of the header may overprint
+if, say, the title of your document is very long.
+<br>
+
+<hr width="33%" align="left">
+<p>
+<a name="HDRFTR_PLAIN">
+ Macro: <strong>HEADER_PLAIN</strong>
+</a>
+
+<p>
+By default, <strong>mom</strong> makes adjustments to the font,
+size, and capitalization style of each part of headers to achieve
+an aesthetically pleasing look. Should you wish to design your own
+headers from the ground up without worrying how changes to the various
+elements of header style interact with <strong>mom</strong>'s defaults,
+invoke <strong>HEADER_PLAIN</strong> by itself, with no argument.
+<strong>Mom</strong> will disable her default behaviour for headers,
+and reset all elements of header style to the same family, font,
+and point size as she uses in paragraphs.
+<p>
+<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
+with <strong>FOOTER_</strong> to disable <strong>mom</strong>'s
+default behaviour for the various elements of footer style.
+<br>
+
+<hr width="66%" align="left">
+<p>
+<a name="HDRFTR_STYLE_PART"><strong>Part by part changes</strong></a>
+<p>
+<strong>NOTE:</strong> When using the following control macros,
+replace &quot;&lt;POSITION&gt;&quot; by <strong>LEFT, CENTER,</strong>
+or <strong>RIGHT</strong> as appropriate.
+<p>
+<ul>
+ <li><a href="#_FAMILY">HEADER_&lt;POSITION&gt;_FAMILY</a>
+ <li><a href="#_FONT">HEADER_&lt;POSITION&gt;_FONT</a>
+ <li><a href="#_SIZE">HEADER_&lt;POSITION&gt;_SIZE</a>
+ <li><a href="#_CAPS">HEADER_&lt;POSITION&gt;_CAPS</a>
+</ul>
+
+<hr width="33%" align="left">
+<p>
+<a name="_FAMILY">
+ Macro: <strong>HEADER_&lt;POSITION&gt;_FAMILY</strong> <var>&lt;family&gt;</var>
+</a>
+<p>
+Use <strong>HEADER_&lt;POSITION&gt;_FAMILY</strong> to change the
+<a href="definitions.html#TERMS_FAMILY">family</a>
+of any part of headers. See
+<a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
+for an explanation of how control macros ending in
+<strong>_FAMILY</strong> work.
+<p>
+<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
+with <strong>FOOTER_</strong> to change a footer part's family.
+<br>
+
+<hr width="33%" align="left">
+<p>
+<a name="_FONT">
+ Macro: <strong>HEADER_&lt;POSITION&gt;_FONT</strong> <var>&lt;font&gt;</var>
+</a>
+<p>
+Use <strong>HEADER_&lt;POSITION&gt;_FONT</strong> to change the
+<a href="definitions.html#TERMS_FONT">font</a>
+of any part of headers. See
+<a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
+for an explanation of how control macros ending in
+<strong>_FONT</strong> work.
+<p>
+<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
+with <strong>FOOTER_</strong> to change a footer part's font.
+<br>
+
+<hr width="33%" align="left">
+<p>
+<a name="_SIZE">
+ Macro: <strong>HEADER_&lt;POSITION&gt;_SIZE</strong> <var>&lt;+|-number of points&gt;</var>
+</a>
+<p>
+Use <strong>HEADER_&lt;POSITION&gt;_SIZE</strong> to change the size of any
+part of headers (relative to the point size of type in
+paragraphs). See
+<a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
+for an explanation of how control macros ending in
+<strong>_SIZE</strong> work.
+<p>
+<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
+with <strong>FOOTER_</strong> to change a footer part's size.
+<br>
+
+<hr width="33%" align="left">
+<p>
+<a name="_CAPS">
+ Macro: <strong>HEADER_&lt;POSITION&gt;_CAPS</strong> <var>toggle</var>
+</a>
+<p>
+<strong>HEADER_&lt;POSITION&gt;_CAPS</strong> is a
+<a href="definitions.html#TERMS_TOGGLE">toggle macro</a>.
+If you want any part of headers to be set in all caps,
+regardless of the capitalization of that part's string as given
+to the
+<a href="docprocessing.html#REFERENCE_MACROS">reference macros</a>
+or as defined by you with the
+<a href="#HDRFTR_STRINGS">header string control macros</a>,
+simply invoke this macro (using the appropriate position) with no
+argument. If you wish to turn capitalization off (say, for the
+header-right string that <strong>mom</strong> capitalizes by
+default), invoke the argument with any argument (e.g. <strong>OFF,
+QUIT, END, X...</strong>).
+<p>
+<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
+with <strong>FOOTER_</strong> to change a footer part's
+capitalization style.
+<br>
+<hr>
+
+<!---HDRFTR_VERTICAL--->
+
+<a name="HDRFTR_VERTICAL">
+ <h2><u>Header/footer vertical placement and spacing</u></h2>
+</a>
+
+<p>
+See
+<a href="#VERTICAL_SPACING">Vertical placement and spacing of headers/footers</a>
+for an explanation of how <strong>mom</strong> deals with
+headers, footers, and top/bottom page margins.
+<br>
+
+<!---HDRFTR_MARGIN--->
+
+<hr width="66%" align="left">
+<p>
+<a name="HDRFTR_MARGIN"></a>
+Macro: <strong>HEADER_MARGIN</strong> <var>&lt;distance to baseline of header&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+Use <strong>HEADER_MARGIN</strong> to set the distance from the
+top edge of the page to the
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+of type in headers. A unit of measure is required, and decimal
+fractions are allowed.
+<p>
+<strong>Mom</strong>'s default header margin is 4-1/2
+<a href="definitions.html#TERMS_PICASPOINTS">picas</a>,
+but if you want a different margin, say, 1/2-inch, do
+<p>
+<pre>
+ .HEADER_MARGIN .5i
+</pre>
+
+If your document uses
+<a href="definitions.html#TERMS_FOOTER">footers</a>,
+replace <strong>HEADER_</strong>, above, with
+<strong>FOOTER_</strong>. The argument to
+<strong>FOOTER_MARGIN</strong> is the distance from the bottom
+edge of the page to the baseline of type in footers.
+<p>
+<strong>Mom</strong>'s default footer margin is 3
+<a href="definitions.html#TERMS_PICASPOINTS">picas</a>.
+<p>
+<strong>NOTE:</strong> <strong>Mom</strong> uses
+<strong>HEADER_MARGIN</strong> and
+<strong>FOOTER_MARGIN</strong> to establish the baseline
+position of page numbers in addition to headers and footers.
+<p>
+By default, page numbers appear at the bottom of the page, therefore
+if you want the default position (bottom), but want to change the
+baseline placement, use <strong>FOOTER_MARGIN</strong>. Conversely,
+if page numbers are at the top of the page, either because you turned
+<a href="#FOOTERS">FOOTERS</a>
+on or because you instructed <strong>mom</strong> to put them
+there with
+<a href="#PAGENUM_POS">PAGENUM_POS</a>,
+you'd use <strong>HEADER_MARGIN</strong> to change their
+baseline placement.
+<br>
+
+<!---HDRFTR_GAP--->
+
+<hr width="66%" align="left">
+<p>
+<a name="HDRFTR_GAP"></a>
+Macro: <strong>HEADER_GAP</strong> <var>&lt;distance from header to start of running text&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+Use <strong>HEADER_GAP</strong> to set the distance from the
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+of type in headers to the start of
+<a href="definitions.html#TERMS_RUNNING">running text</a>.
+A unit of measure is required, and decimal fractions are allowed.
+<p>
+As explained in
+<a href="#VERTICAL_SPACING">Vertical placement and spacing of headers/footers</a>,
+<strong>HEADER_MARGIN + HEADER_GAP</strong> determine the
+default vertical starting position of running text on the page
+UNLESS you have given <strong>mom</strong> your own top margin
+(with
+<a href="typesetting.html#T_MARGIN">T_MARGIN</a>). If you give
+a top margin, <strong>mom</strong> ignores
+<strong>HEADER_GAP</strong>; running text starts at your stated
+top margin.
+
+<p>
+<strong>Mom</strong>'s default header gap is 3
+<a href="definitions.html#TERMS_PICASPOINTS">picas</a>,
+but if you want a different gap, say, 2 centimeters, do
+<p>
+<pre>
+ .HEADER_GAP 2c
+</pre>
+
+If your document uses
+<a href="definitions.html#TERMS_FOOTER">footers</a>,
+replace <strong>HEADER_</strong>, above, with
+<strong>FOOTER_</strong>. The argument to
+<strong>FOOTER_GAP</strong> is the distance from the
+baseline of type in footers to the last baseline of running text
+on the page.
+<p>
+As explained in
+<a href="#VERTICAL_SPACING">Vertical placement and spacing of headers/footers</a>,
+<strong>FOOTER_MARGIN + FOOTER_GAP</strong> determine the
+default vertical end position of running text on the page
+UNLESS you have given <strong>mom</strong> a bottom margin
+(with
+<a href="typesetting.html#B_MARGIN">B_MARGIN</a>). If you give
+a bottom margin, <strong>mom</strong> ignores
+<strong>FOOTER_GAP</strong>; running text ends at your stated
+bottom margin.
+<p>
+<strong>Mom</strong>'s default footer gap is 3
+<a href="definitions.html#TERMS_PICASPOINTS">picas</a>.
+<p>
+<strong>NOTE:</strong> <strong>Mom</strong> uses
+<strong>HEADER_GAP</strong> and
+<strong>FOOTER_GAP</strong> to establish the start and end baseline
+positions of running text with respect to both headers and footers
+AND page numbers. If you wish to change the gap between
+the last line of running text and a bottom page number, use
+<strong>FOOTER_GAP</strong>. If page numbers are at the top of the
+page, change the gap between the number and the first line of running
+text with <strong>HEADER_GAP</strong>.
+<br>
+<hr>
+
+<!---HDRFTR_SEPARATOR--->
+
+<a name="HDRFTR_SEPARATOR">
+ <h2><u>Header/footer separator rule</u></h2>
+</a>
+
+<p>
+The header/footer separator rule is a modest horizontal rule,
+set slightly below the header (or above the footer), that runs
+the length of the
+<a href="definitions.html#TERMS_HEADER">header</a>
+and helps separate it visually from
+<a href="definitions.html#TERMS_RUNNING">running text</a>. If
+you don't want the rule, you can turn it off. If you want it,
+but at a different vertical position relative to the header (or
+footer), you can alter its placement.
+<p>
+<ul>
+ <li><a href="#HDRFTR_RULE">HEADER_RULE</a> -- on or off
+ <li><a href="#HDRFTR_RULE_GAP">HEADER_RULE_GAP</a> -- distance of rule from header
+</ul
+
+<!---HDRFTR_RULE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="HDRFTR_RULE"></a>
+Macro: <strong>HEADER_RULE</strong> <var>toggle</var>
+
+<p>
+By default, <strong>mom</strong> prints a header separator rule
+underneath headers (or above footers). If you don't want the
+rule, turn it off by invoking <strong>HEADER_RULE</strong> with any
+argument (<strong>OFF, QUIT, END, X...</strong>), e.g.
+<p>
+<pre>
+ .HEADER_RULE OFF
+</pre>
+
+To turn the rule (back) on, invoke <strong>HEADER_RULE</strong>
+without any argument.
+<p>
+<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
+with <strong>FOOTER_</strong> to enable/disable the printing of
+the footer separator rule. (Most likely, if you're using
+<a href="#FOOTERS">FOOTERS</a>, you'll want it off.)
+<br>
+
+<!---HDRFTR_RULE_GAP--->
+
+<hr width="66%" align="left">
+<p>
+<a name="HDRFTR_RULE_GAP"></a>
+Macro: <strong>HEADER_RULE_GAP</strong> <var>distance of rule beneath header</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>HEADER_RULE_GAP</strong> is the distance from the
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+of type in headers to the rule underneath. A unit of measure is
+required, and decimal fractions are allowed. Please note that
+<strong>HEADER_RULE_GAP</strong> has no effect on
+<a href="#HEADER_GAP">HEADER_GAP</a>
+(i.e. <strong>HEADER_RULE_GAP</strong> is NOT added to
+<strong>HEADER_GAP</strong> when <strong>mom</strong> calculates
+the space between headers and the start of
+<a href="definitions.html#TERMS_RUNNING">running text</a>.
+<p>
+By default, the header rule gap is 4
+<a href="definitions.html#TERMS_PICASPOINTS">points</a>.
+If you'd like to change it to, say, 1/4
+<a href="definitions.html#TERMS_EM">em</a>, do
+<p>
+<pre>
+ .HEADER_RULE_GAP .25m
+</pre>
+
+<strong>NOTE:</strong> Replace <strong>HEADER_</strong>, above,
+with <strong>FOOTER_</strong> if you're using
+<a href="definitions.html#TERMS_FOOTER">footers</a>
+and want to change the separator rule gap. In footers, the gap
+is measured from the top of the tallest
+<a href="definitions.html#TERMS_ASCENDER">ascender</a>
+in the footer.
+<p>
+<strong>ADDITIONAL NOTE:</strong> When using
+<a href="#HDRFTR_RECTOVERSO">FOOTER_RECTO</a>
+and
+<a href="#HDRFTR_RECTOVERSO">FOOTER_VERSO</a>,
+make sure that the default size for footers
+(<a href="#FOOTER_GLOBAL_SIZE">FOOTER_SIZE</a>)
+is set to the largest size of type that will be used in the
+footer or <strong>mom</strong> may not get the rule gap right.
+Inline changes to the size of type in
+<strong>FOOTER_RECTO</strong> and <strong>FOOTER_VERSO</strong>
+should always be negative (smaller) than the default.
+<br>
+<hr>
+
+<a name="PAGINATION">
+ <h2><u>Pagination</u></h2>
+</a>
+
+<p>
+By default, <strong>mom</strong> paginates documents. Page numbers
+appear in the bottom margin of the page, centered between two hyphens.
+As with all elements of <strong>mom</strong>'s document processing,
+most aspects of pagination style can be altered to suit your taste
+with control macros.
+<br>
+
+<a name="INDEX_PAGINATION">
+ <h3><u>Pagination macros list</u></h3>
+</a>
+
+<ul>
+ <li><a href="#PAGINATE">PAGINATE</a> -- pagination on or off
+ <li><a href="#PAGENUMBER">PAGENUMBER</a> -- user-defined (starting) page number
+ <li><a href="#PAGENUM_STYLE">PAGENUM_STYLE</a> -- digits, roman numerals, etc
+ <li><a href="#PAGENUM_ON_FIRST_PAGE">PAGENUM_ON_FIRST_PAGE</a> -- applies only when footers are enabled
+ <li><a href="#DRAFT_WITH_PAGENUMBER">DRAFT_WITH_PAGENUMBER</a> -- attach draft/revision information to page numbers
+ <li><a href="#PAGINATE_CONTROL">Control macros</a>
+</ul>
+<br>
+
+<!---PAGINATE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="PAGINATE"></a>
+Macro: <strong>PAGINATE</strong> <var>toggle</var>
+<br>
+Alias: <strong>PAGINATION</strong>
+
+<p>
+By default, <strong>mom</strong> paginates documents (in the bottom
+margin). If you'd prefer she not paginate, turn pagination off
+by invoking <strong>PAGINATE</strong> with any argument (<strong>OFF,
+NO, QUIT, END, X...</strong>), e.g.
+<p>
+<pre>
+ .PAGINATE NO
+</pre>
+
+To (re)start pagination, invoke <strong>PAGINATE</strong>
+without any argument.
+<br>
+
+<!---PAGENUMBER--->
+
+<hr width="66%" align="left">
+<p>
+<a name="PAGENUMBER"></a>
+Macro: <strong>PAGENUMBER</strong> <var>&lt;number&gt;</var>
+
+<p>
+As is to be expected, pagination of documents begins at page 1.
+If you'd prefer that <strong>mom</strong> begin with a different
+number on the first page of a document, invoke
+<strong>PAGENUMBER</strong> with the number you want.
+<p>
+<strong>PAGENUMBER</strong> need not be used only to give
+<strong>mom</strong> a "first page" number. It can be used at
+any time to tell <strong>mom</strong> what number you want a
+page to have. Subsequent page numbers will, of course, be
+incremented by 1 from that number.
+<br>
+
+<!---PAGENUM_STYLE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="PAGENUM_STYLE"></a>
+Macro: <strong>PAGENUM_STYLE</strong> <var>DIGIT | ROMAN | roman | ALPHA | alpha</var>
+
+<p>
+<strong>PAGENUM_STYLE</strong> lets you tell
+<strong>mom</strong> what kind of page numbering you want.
+<p>
+<table valign="baseline" summary="pagenumstyle">
+<tr><td>DIGIT<td align="center" width="15">=<td>arabic digits (1, 2, 3...)
+<tr><td>ROMAN<td align="center" width="15">=<td>upper case roman numerals (I, II, III...)
+<tr><td>roman<td align="center" width="15">=<td>lower case roman numerals (i, ii, iii...)
+<tr><td>ALPHA<td align="center" width="15">=<td>upper case letters (A, B, C...)
+<tr><td>alpha<td align="center" width="15">=<td>lower case letters (a, b, c...)</td></tr>
+</table>
+<br>
+
+<!---PAGENUM_ON_FIRST_PAGE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="PAGENUM_ON_FIRST_PAGE"></a>
+Macro: <strong>PAGENUM_ON_FIRST_PAGE</strong> <var>toggle</var>
+
+<p>
+This macro applies only if you've enabled
+<a href="#FOOTERS">FOOTERS</a>.
+If <strong>FOOTERS</strong> are on, <strong>mom</strong> automatically
+places page numbers at the tops of pages except on
+the first page of a document (or on first pages after
+<a href="rectoverso.html#COLLATE">COLLATE</a>). If you'd
+like the page number to appear on &quot;first&quot; pages when
+footers are on, invoke <strong>PAGENUM_ON_FIRST_PAGE</strong> with
+no argument. Any other argument turns the feature off (<strong>OFF,
+QUIT, END, X...</strong>).
+<p>
+As with most of the <a
+href="definitions.html#TERMS_CONTROLMACRO">control macros</a>,
+<strong>PAGENUM_ON_FIRST_PAGE</strong> can be invoked at any time,
+meaning that if you don't want a page number on the very first
+page of a document, but do want one on pages that appear after
+<strong>COLLATE</strong>, omit it before the first
+<a href="docprocessing.html#START">START</a>
+of the document, then invoke it either just before or after your
+first <strong>COLLATE</strong>.
+<br>
+
+<!---DRAFT_WITH_PAGENUMBER--->
+
+<hr width="66%" align="left">
+<p>
+<a name="DRAFT_WITH_PAGENUMBER"></a>
+Macro: <strong>DRAFT_WITH_PAGENUMBER</strong>
+
+<p>
+Sometimes, in
+<a href="docprocessing.html#COPYSTYLE">COPYSTYLE DRAFT</a>,
+the center part of page headers gets overcrowded because of the draft
+and revision information that go there by default.
+<strong>DRAFT_WITH_PAGENUMBER</strong> is one way to
+fix the problem.
+<p>
+Invoked without an argument, <strong>DRAFT_WITH_PAGENUMBER</strong>
+removes draft/revision information from the page headers and attaches
+it instead to the document's page numbering, in the form
+<p>
+<pre>
+ Draft #, Rev. # / &lt;pagenumber&gt;
+</pre>
+
+See the note in
+<a href="docprocessing.html#COPYSTYLE">COPYSTYLE DRAFT</a>
+for other ways of dealing with crowded page headers when formatting
+draft-style copy.
+<br>
+<hr>
+
+<!---PAGINATE_CONTROL--->
+
+<a name="PAGINATE_CONTROL"><h3><u>Pagination control macros</u></h3></a>
+
+<ol>
+ <li><a href="#PAGINATE_GENERAL">Family/font/size</a>
+ <li><a href="#PAGENUM_POS">Page number position (vertical and horizontal)</a>
+ <li><a href="#PAGENUM_HYPHENS">Enclose page numbers with hyphens (on or off)</a>
+</ol>
+<br>
+<a name="PAGINATE_GENERAL"><h3><u>1. Page number family/font/size</u></h3></a>
+<p>
+See
+<a href="#CONTROL_MACRO_ARGS">Arguments to the control macros</a>.
+<p>
+<pre>
+.PAGENUM_FAMILY default = prevailing document family; default is Times Roman
+.PAGENUM_FONT default = roman
+.PAGENUM_SIZE default = 0 (i.e. same size as paragraph text)
+</pre>
+
+<a name="PAGENUM_POS"><h3><u>2. Page number position</u></h3></a>
+<p>
+Macro: <strong>PAGENUM_POS</strong> <var>TOP | BOTTOM&nbsp;&nbsp;LEFT | CENTER | RIGHT</var>
+
+<p>
+Use <strong>PAGENUM_POS</strong> to change the default position of
+automatic page numbering. <strong>PAGENUM_POS</strong> requires
+<em>two</em> arguments: a vertical position (TOP or BOTTOM) and a
+horizontal position (LEFT or CENTER or RIGHT).
+<p>
+For example, if you turn both
+<a href="definitions.html#TERMS_HEADER">headers</a>
+and
+<a href="definitions.html#TERMS_FOOTER">footers</a>
+off (with <code>.HEADERS OFF</code> and <code>.FOOTERS
+OFF</code)) and you want <strong>mom</strong> to number your
+pages at the top right position, enter
+<p>
+<pre>
+ .PAGENUM_POS TOP RIGHT
+</pre>
+
+<a name="#PAGENUM_HYPHENS"><h3><u>3. Enclose page numbers with hyphens (on or off)</u></h3></a>
+By default, <strong>mom</strong> encloses page numbers between hyphens.
+If you don't want this behaviour, invoke the macro
+<strong>PAGENUM_HYPHENS</strong> with any argument (<strong>OFF, QUIT, END, X...</strong>),
+like this:
+<p>
+<pre>
+ .PAGENUM_HYPHENS OFF
+</pre>
+
+If, for some reason, you want to turn page number hyphens back
+on, invoke the macro without an argument.
+
+<p>
+<hr>
+<a href="rectoverso.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="docelement.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/inlines.html b/contrib/groff/contrib/mom/momdoc/inlines.html
new file mode 100644
index 0000000..99cfaf7
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/inlines.html
@@ -0,0 +1,595 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Inline escapes</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="docprocessing.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="goodies.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<h2>
+ <a name="INLINE_ESCAPES"><u>Inline escapes</u></a>
+</h2>
+
+<a href="#INLINE_ESCAPES_INTRO">Introduction to inline escapes</a>
+<br>
+<a href="#INDEX_INLINES">Index of inline escapes</a>
+<br>
+
+<a name="INLINE_ESCAPES_INTRO">
+ <h2><u>Introduction to inline escapes</u></h2>
+</a>
+
+<a name="INTRO_INLINE_ESCAPES">
+Inline escapes, as described in the
+<a href="definitions.html#TERMS_INLINES">groff terms</a>
+section of this manual, are typesetting commands that appear in
+text
+<a href="definitions.html#TERMS_INPUTLINE">input lines</a>,
+as opposed to macros and other
+<a href="definitions.html#TERMS_CONTROLLINES">control lines</a>
+that must appear on lines by themselves.
+<p>
+Aside from altering type parameters within a line, inlines also
+tell groff about special characters -- em-dashes, bullets,
+<a href="definitions.html#TERMS_FIGURESPACE">figure/digit-width spaces</a>,
+and so on. It is beyond the scope of this manual to provide a
+complete list of groff's inline functions and special characters.
+I recommend having a look at the
+<a href="intro.html#CANONICAL">canonical reference materials</a>
+should you need more information than is contained herein.
+<p>
+In groff, the escape character is the backslash ( \ ). Groff interprets
+everything following the backslash as instructions, not literal text,
+until the escape sequence is complete. Should you need the actual
+backslash character as part of a line of text, simply enter it twice
+( \\ ). Groff understands that this means "please print a backslash
+character." (You can also use <strong>\e</strong> to print a literal
+backslash.)
+<p>
+Groff has a number of ways of recognising what constitutes a complete
+escape sequence. This is both a boon and a curse; some escape
+sequences have no terminating delimiter and consequently become
+difficult to distinguish from real input text. Others require
+the use of an opening parenthesis with no corresponding closing
+parenthesis. Still others need to be enclosed in square brackets.
+<p>
+<strong>Mom</strong> recognises that certain escapes get used more
+often than others. For these, she has a consistent input style that
+takes the form \*[...], which makes them stand out well from the text
+of your documents. These escapes are the ones listed under
+<a href="#INLINES_MOM">Mom's personal inlines</a>.
+<p>
+Despite <strong>mom</strong>'s best intentions, there are still
+a number of typesetting functions that can only be accomplished
+with groff's native inline escapes. I've listed the ones that
+strike me as essential, but there are many others. If you want
+to know what they are, please read the
+<a href="intro.html#CANONICAL">canonical reference materials</a>
+pertaining to groff.
+<p>
+<strong>HELPFUL BIT OF INFORMATION:</strong> Inline escapes can be used
+in
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
+that take
+<a href="definitions.html#TERMS_STRINGARGUMENT">string arguments</a>.
+<p>
+<a name="INDEX_INLINES"><h3><u>Inlines index</u></h3></a>
+<ul>
+ <li><a name="INLINES_MOM"><strong>Mom's personal inlines</strong></a>
+ <ul>
+ <li><a href="#INLINE_FONTS_MOM">Changing fonts</a>
+ <li><a href="#INLINE_SIZE_MOM">Changing point size</a>
+ <li><a href="#INLINE_KERNING_MOM">Pairwise kerning</a>
+ <li><a href="#INLINE_HORIZONTAL_MOM">Horizontal movement</a>
+ <li><a href="#INLINE_VERTICAL_MOM">Vertical movement</a>
+ <li><a href="#INLINE_RULE_MOM">Full measure rules</a>
+ </ul>
+ <li><a name="INLINES_GROFF"><strong>Groff inline escapes</strong></a>
+ <ul>
+ <li><a href="#INLINE_FONTS_GROFF">Font control</a> <strong>\f</strong>
+ <li><a href="#INLINE_HORIZONTAL_GROFF">Inline horizontal motions</a> <strong>\h</strong>
+ <li><a href="#INLINE_VERTICAL_GROFF">Inline vertical motions</a> <strong>\v</strong>
+ <li><a href="#INLINE_STRINGWIDTH_GROFF">String width function</a> <strong>\w</strong>
+ <li><a href="#INLINE_LINEDRAWING_GROFF">Horizontal line drawing function</a> <strong>\l</strong>
+ <li><a href="#INLINE_CHARACTERS_GROFF">Special characters</a>
+ </ul>
+</ul>
+<hr>
+
+<!---INLINE_FONTS_MOM--->
+
+<h2><u>Mom's personal inlines</u></h2>
+
+<a name="INLINE_FONTS_MOM"><h3><u>Changing fonts</u></h3></a>
+
+<p>
+<strong>Mom</strong> provides five inlines to change fonts
+inline.
+<p>
+<table valign="baseline" summary="inlinefonts">
+<tr><td width="15"><td><strong>\*[ROM]</strong><td>Change font to roman
+<tr><td><td><strong>\*[IT]</strong><td>Change font to italic
+<tr><td><td><strong>\*[BD]</strong><td>Change font to bold
+<tr><td><td><strong>\*[BDI]</strong><td>Change font to bold italic
+<tr><td><td><strong>\*[PREV]</strong><td>Revert to previous font</td></tr>
+</table>
+<p>
+See also
+<a href="#INLINE_FONTS_GROFF">font control with \f</a>
+for other ways to change fonts inline.
+
+<p>
+<strong>NOTE:</strong> If you're using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>,
+inline font changes remain in effect only for the duration of the
+current macro.
+<br>
+
+<!---INLINE_SIZE_MOM--->
+
+<hr width="66%" align="left">
+<a name="INLINE_SIZE_MOM"><h3><u>Changing point size</u></h3></a>
+
+<p>
+<strong>Mom</strong>'s inline escape for changing point
+size, sadly, does not observe her normal inline syntax
+<strong>\*[whatever]</strong>. It's the only exception, and there's
+no way around it. The escape for changing point size looks like this:
+<p>
+<pre>
+ \*S[size]
+</pre>
+
+where &quot;size&quot; is the new size you want. For example, to
+change the point size inline to 12 points, you'd enter
+<p>
+<pre>
+ \*S[12]
+</pre>
+
+Notice that the new size does not require a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>;
+<a href="definitions.html#TERMS_PICASPOINTS">points</a>
+is assumed. However, a unit of measure may be appended to the size,
+if that's what you wish. Fractional sizes are, of course, allowed.
+<p>
+The size given to <strong>\*S</strong> may be expressed in plus
+or minus terms, which can be very useful. In the following
+example, the word &quot;mom&quot; will be output 2 points larger
+than the point size of the rest of the line.
+<p>
+<pre>
+ While she isn't perfect, \*S[+2]mom\*S[-2] isn't half bad.
+</pre>
+
+<strong>NOTE:</strong> If you're accustomed to groff's usual way
+of handling inline size requests (<kbd>\sN, \s±N, \s(NN, \s±(NN,
+\s[NNN], \s±[NNN]</kbd>), feel free to continue with your old habits.
+<strong>Mom</strong> doesn't care.
+<br>
+
+<!---INLINE_KERNING_MOM--->
+
+<hr width="66%" align="left">
+<a name="INLINE_KERNING_MOM"><h3><u>Pairwise kerning</u></h3></a>
+
+<p>
+Pairwise kerning means moving specific letter pairs closer
+together or further apart (see
+<a href="definitions.html#TERMS_KERN">Typesetting terms, kerning</a>
+for more details).
+<p>
+<strong>Mom</strong> permits inline pairwise
+kerning through the use of the inline escapes
+<p>
+<table valign="baseline" summary="inlinekerning">
+<tr><td width="15"><td><strong>\*[BU #]<td></strong>Closes the space between letters (<strong>B</strong>ack <strong>U</strong>nits).
+<tr><td><td><strong>\*[FU #]</strong><td>Opens the space between letters (<strong>F</strong>orward <strong>U</strong>nits).
+</table>
+<br>
+"<strong>#</strong>" is the number of <a
+href="definitions.html#TERMS_KERNUNIT">kern units</a>
+by which to close or open the space between letters. Decimal fractions
+are allowed.
+<p>
+For example,
+<p>
+<pre>
+ THE HUMAN COST OF COMMODIF\*[FU 1]YING FRESH W\*[BU 4]A\*[BU 5]TER
+</pre>
+
+moves the letter Y in &quot;COMMODIFYING&quot; 1 kern unit away from
+the letter F, and the letter A in &quot;WATER&quot; 4 kern units closer
+to the letter W. Additionally, the letter T in "WATER" is moved 5 kern
+units closer to the letter A.
+<p>
+For backward compatibility, the forms
+<p>
+<table valign="baseline" summary="inlinekerningold">
+<tr><td width="15"><td><strong>\*[BU1]...\*[BU36]</strong><td>
+Move back 1...36
+<a href="definitions.html#TERMS_KERNUNIT">kern units</a>
+<tr><td><td><strong>\*[FU1]...\*[FU36]</strong><td>
+Move forward 1...36
+<a href="definitions.html#TERMS_KERNUNIT">kern units</a>
+</table>
+<br>
+also exist (i.e. with no space before the number of kern units desired,
+up to a limit of 36).
+<p>
+<strong>NOTE:</strong> Using <strong>BU</strong> or <strong>FU</strong>
+between characters pairs that are already automatically kerned
+disables the automatic kerning and uses the value you give to
+<strong>BU</strong> or <strong>FU</strong> instead.
+<br>
+
+<!---INLINE_HORIZONTAL_MOM--->
+
+<hr width="66%" align="left">
+<a name="INLINE_HORIZONTAL_MOM"><h3><u>Horizontal inline movement</u></h3></a>
+
+<p>
+Sometimes, you may need to insert a specified amount amount of white
+space into an
+<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>,
+or -- occasionally -- back up to a
+previous position on an
+<a href="definitions.html#TERMS_INPUTLINE">output</a>
+line in order to create special typographic effects.
+<p>
+<strong>Mom</strong>'s inline escapes for these horizontal movements are
+<p>
+<table align="left" valign="baseline" summary="inlinehorizontal">
+<a name="FWD"></a>
+<tr><td width="15"><td width="20%"><strong>\*[FWD #&lt;unit&gt;]
+<td>Move forward inline the specified number of
+<a href="definitions.html#TERMS_UNITOFMEASURE">units of measure</a>;
+decimal fractions are allowed.
+<a name="BCK"></a>
+<tr><td><td><strong>\*[BCK #&lt;unit&gt;]
+<td>Move backward inline the specified number of
+<a href="definitions.html#TERMS_UNITOFMEASURE">units of measure</a>;
+decimal fractions are allowed.
+</table>
+<p>
+For example,
+<p>
+<pre>
+ 1.\*[FWD 12p]The Free Trade Play-Offs: WalMart 100, Mexico 0
+</pre>
+puts 12 points of space between &quot;1.&quot; and
+&quot;The&quot;.
+<p>
+<strong>NOTE:</strong> For backward compatibility, the forms
+<p>
+<table valign="baseline" summary="inlinehorizontalold">
+<tr><td width="15"><td><strong>\*[BP.25]...\*[BP12.75]</strong><td>Move back .25...12.75 points
+<tr><td><td><strong>\*[FP.25]...\*[FP12.75]</strong><td>Move forward .25...12.75 points</td></tr>
+</table>
+<br>
+also exist (i.e. with no space before the digit and points being
+the unit of measure, hence no unit of measure required). Both
+accept quarter points, so it's possible to do, for example,
+<strong>\*[FP.5]</strong> or <strong>\*[BP1.25]</strong> up to a limit
+of 12.75 points.
+<br>
+
+<!---INLINE_VERTICAL_MOM--->
+
+<hr width="66%" align="left">
+<a name="INLINE_VERTICAL_MOM"><h3><u>Vertical inline movement</u></h3></a>
+
+<p>
+If you need to move portions of type up or down on a line,
+<strong>mom</strong> provides the following inline escapes:
+<p>
+<table valign="baseline" summary="inlinevertical">
+<a name="UP"></a>
+<tr><td width="15"><td><strong>\*[UP #&lt;unit&gt;]</strong>
+<td>Move up inline the specified number of
+<a href="definitions.html#TERMS_UNITOFMEASURE">units of measure</a>
+<a name="DOWN"></a>
+<tr><td><td><strong>\*[DOWN #&lt;unit&gt;]</strong>
+<td>Move down inline the specified number of
+<a href="definitions.html#TERMS_UNITOFMEASURE">units of measure</a>
+</table>
+<br>
+For example,
+<p>
+<pre>
+ Tel: 905\*[UP 1p]-\*[DOWN 1p]4072
+</pre>
+
+moves the hyphen in the telephone number up by 1 point, then
+moves back down by the same amount.
+<p>
+<strong>NOTE:</strong> For backward compatibility, the following are
+also available:
+<p>
+<table valign="baseline" summary="inlinevertical">
+<tr><td width="15"><td><strong>\*[ALD.25]...\*[ALD12.75]</strong><td>
+Advance lead .25...12.75 points (move downward)
+<tr><td><td><strong>\*[RLD.25]...\*[RLD12.75]</strong><td>
+Reverse lead .5...12.75 points (move upward)</td></tr>
+</table>
+<p>
+<p>
+Both <strong>\*[ALD]</strong> and <strong>\*[RLD]</strong> work in
+points, hence you musn't use a unit of measure.
+<br>
+
+<!---INLINE_RULE_MOM--->
+
+<hr width="66%" align="left">
+<a name="INLINE_RULE_MOM"><h3><u>Full measure rules</u></h3></a>
+
+<p>
+I find I often need rules drawn to the full measure of the current line
+or tab length. The official way to do this is <kbd>\l'\n(.lu'</kbd>,
+which is annoying to type, and doesn't mean a whole heck of a lot if
+you're new to groff. The inline, <strong>\*[RULE]</strong>, is a simple
+replacement for <strong>\l'\n(.lu'</strong>. Use it whenever you need
+a rule drawn to the full measure of the current line or tab length, for
+example:
+<p>
+<pre>
+ .LL 6P
+ \*[RULE]
+</pre>
+
+The above draws a rule the full measure of the 6-pica line length.
+<p>
+See groff's
+<a href="#INLINE_LINEDRAWING_GROFF">Horizontal line drawing function</a>
+for more information on drawing horizontal rules.
+<br>
+<hr>
+
+<!---INLINE_FONT_GROFF--->
+
+<h2><u>Groff inline escapes</u></h2>
+
+<a name="INLINE_FONTS_GROFF"><h3><u>Font control with \f</u></h3></a>
+
+<p>
+Groff's basic mechanism for inline font control is the escape
+<strong>\f</strong>.
+<p>
+<table valign="baseline" summary="inlinefontsgroff">
+<tr><td width="15"><td><strong>\fR</strong><td>Change font to roman
+<tr><td><td><strong>\fI</strong><td>Change font to italic
+<tr><td><td><strong>\fB</strong><td>Change font to bold
+<tr><td><td><strong>\f(BI</strong><td>Change font to bold italic
+<tr><td><td><strong>\fP</strong><td>Revert to previous font</td></tr>
+</table>
+<p>
+A special instance of <strong>\f</strong> is
+<strong>\f[font]</strong>, where &quot;font&quot; can be a
+complete legal family/font name combo. This is especially
+useful should you need to change both family and font inline.
+For example, if your prevailing family and font are Times Roman
+and you want a few words in Courier Bold Italic, you could do
+this:
+<p>
+<pre>
+ .FAM T
+ .FT R
+ The command \f[CBI]ls -l\fP gives a &quot;long&quot; directory listing.
+</pre>
+
+The Unix command &quot;ls -l&quot; will appear in Courier Bold Italic
+in a line that is otherwise in Times Roman.
+<br>
+
+<!---INLINE_HORIZONTAL_GROFF--->
+
+<hr width="66%" align="left">
+<a name="INLINE_HORIZONTAL_GROFF"><h3><u>Inline horizontal motions with \h</u></h3></a>
+
+<p>
+Whenever you need to move forward or backward on a line, use the inline
+<strong>\h'&lt;distance&gt;'</strong>. In order to avoid unpleasant surprises,
+always append a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+to &quot;distance&quot;.
+<p>
+<pre>
+ \h'1.25i'
+</pre>
+
+moves you 1.25 inches to the right (forwards) of the horizontal
+position on the current
+<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>.
+<strong>\h'&lt;distance&gt;'</strong> is exactly equivalent to
+<a href="#FWD"><strong>\*[FWD #&lt;unit&gt;]</strong></a>.
+<p>
+<pre>
+ \h'-1.25i'
+</pre>
+
+moves you 1.25 inches to the left (backwards).
+<strong>\h'-&lt;distance&gt;'</strong> is exactly equivalent to
+<a href="#BCK"><strong>\*[BCK #&lt;unit&gt;]</strong></a>.
+<br>
+
+<!---INLINE_VERTICAL_GROFF--->
+
+<hr width="66%" align="left">
+<a name="INLINE_VERTICAL_GROFF"><h3><u>Inline vertical motions with \v</u></h3></a>
+
+<p>
+If you need to raise or lower type on a line (say, for sub- or
+superscripts, or any other special effect), use
+<strong>\v'&lt;distance&gt;'</strong>. In order to avoid unpleasant
+surprises, always append a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+to &quot;distance&quot;.
+<p>
+<pre>
+ \v'.6m'
+</pre>
+
+moves you (approx.) 2/3 of an
+<a href="definitions.html#TERMS_EM">em</a>
+downward on the current
+<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>.
+<strong>\v'&lt;distance&gt;'</strong> is exactly equivalent to
+<a href="#DOWN"><strong>\*[DOWN #&lt;unit&gt;]</strong></a>.
+<p>
+<pre>
+ \v'-.6m'
+</pre>
+
+moves you (approx.) 2/3 of an em upward.
+<strong>\v'&lt;-distance&gt;'</strong> is exactly equivalent to <a
+href="#UP"><strong>\*[UP #&lt;unit&gt;]</strong></a>.
+<p>
+<strong>IMPORTANT:</strong> The vertical motion of <strong>\v</strong>
+affects ONLY type on the current
+<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>.
+When groff breaks the output line, the effect of
+<strong>\v</strong> is cancelled; the baseline of the next output line
+is where it would be if you hadn't used <strong>\v</strong>.
+<p>
+<strong>TIP:</strong> When using <strong>\v</strong> for
+occasional effects on a line, don't forget to reverse it when
+you've done what you want to do. Otherwise, the remaining type
+will be set too high (if you used <strong>\v</strong> with the
+minus sign) or too low (if you used <strong>\v</strong> without
+the minus sign).
+<br>
+
+<!---INLINE_STRINGWIDTHL_GROFF--->
+
+<hr width="66%" align="left">
+<a name="INLINE_STRINGWIDTH_GROFF"><h3><u>String width function \w</u></h3></a>
+
+<p>
+In the context of <strong>mom</strong>, the string width inline
+<strong>\w'string'</strong> primarily serves to let you
+establish the horizontal measure of something (e.g. indents) based
+on the length of a bit of text. For example, if you want a left
+indent the length of the word &quot;Examples:&quot; plus a
+space, you can set it with the <strong>\w</strong> inline escape:
+<p>
+<pre>
+ .IL "\w'Examples: '"
+</pre>
+
+<strong>NOTE:</strong> Whenever you pass <strong>\w'string'</strong>
+to a macro that normally requires a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>,
+<em>do <strong>NOT</strong> add a unit of measure to the \w'string'
+argument.</em>
+<p>
+Furthermore, if the string is composed of several words separated
+by spaces, you MUST surround the whole escape with double quotes,
+as in the example above.
+<br>
+
+<!---INLINE_LINEDRAWING_GROFF--->
+
+<hr width="66%" align="left">
+<a name="INLINE_LINEDRAWING_GROFF"><h3><u>Horizontal line drawing function \l</u></h3></a>
+
+<p>
+The <strong>\l'distance'</strong> inline allows you to draw a
+horizontal rule of the specified distance. You must supply a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
+Therefore, to set a 3-pica rule into a line of text, you'd do
+<p>
+<pre>
+ A line of text with a superfluous \l'3P' 3-pica rule in it.
+</pre>
+
+<strong>\l'3P'</strong> above not only draws the rule, but
+advances 3 picas horizontally as well, just as you'd expect.
+<p>
+For an easy way of drawing rules to the full measure of the current
+line or tab length, see
+<a href="#INLINE_RULE_MOM">Full measure rules</a>.
+<p>
+The weight (thickness) of rules varies according to the point size
+in effect when you invoke <strong>\l</strong>, but you can't fix
+the weight with any real precision. A point size of 12 produces
+a tastefully moderate rule weight of between one-half and one
+point (depending on your printer), and is the point size used by
+<strong>mom</strong> for all macros and routines that create rules.
+<p>
+<strong>NOTE:</strong> There are, in addition to <strong>\l</strong>,
+a number of other line-drawing escapes, but frankly, using them for
+typographically precise drawing is a bit like hammering in a nail
+with a screwdriver -- doable, but not recommended.
+<p>
+Groff comes with a number of &quot;preprocessors&quot; designed to ease
+creating rules, boxes, splines, and so on (tbl, pic, and friends), but
+I tend not to use them. A firm believer in the &quot;right tool for
+the job,&quot; I prefer a vector drawing program (in my case, tgif)
+when I need to combine type with graphic elements (say, a complex
+ruled form). Inserting the results into a document is easy enough
+with <strong>.PSPIC</strong> (consult the <strong>grops</strong>
+man page for information on this indispensible and easy-to-use macro).
+<br>
+
+<!---INLINE_CHARACTERS_GROFF--->
+
+<hr width="66%" align="left">
+<a name="INLINE_CHARACTERS_GROFF"><h3><u>Special characters and symbols</u></h3></a>
+
+<p>
+Here follows a short list of commonly-used special characters available
+via inline escapes. If you're not sure of the meaning of some of
+these characters, consult the
+<a href="definitions.html#TERMS">Definitions of Terms</a>.
+For a more complete list, consult the section <em>Special
+Character Names</em> at the end of the <em>Tutorial Examples</em>
+in <strong>cstr54</strong>, available
+<a href="http://www.kohala.com/start/troff/">here</a>.
+
+<p>
+<pre>
+ CHARACTER ESCAPE SEQUENCE
+ --------- ---------------
+
+ Comment line \#
+ Fixed-width space \&lt;space&gt; i.e. backslash followed by a space
+ Unbreakable space \~
+ Digit-width (figure) space \0
+ Zero-width character \&amp;
+ Discretionary hyphen \%
+ Backslash \\ or \e
+ Plus/minus (arithmetic) \(+-
+ Subtract (arithmetic) \(mi
+ Multiply (arithmetic) \(mu
+ Divide (arithmetic) \(di
+ Em-dash \(em
+ En-dash \(en
+ Left double-quote \(lq
+ Right double-quote \(rq
+ Bullet \(bu
+ Ballot box \(sq
+ One-quarter \(14
+ One-half \(12
+ Three-quarters \(34
+ Degree sign \(de
+ Dagger \(dg
+ Foot mark \(fm
+ Cent sign \(ct
+ Registered trademark \(rg
+ Copyright \(co
+ Section symbol \(se
+</pre>
+
+<hr>
+<a href="docprocessing.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="goodies.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/intro.html b/contrib/groff/contrib/mom/momdoc/intro.html
new file mode 100644
index 0000000..e21fa3c
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/intro.html
@@ -0,0 +1,386 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>What is mom?</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="definitions.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="INTRO">
+ <h1 align="center"><u>WHAT IS MOM?</u></h1>
+</a>
+
+<a href="#INTRO_INTRO">Who is mom meant for?</a>
+<br>
+<a href="#INTRO_TYPESETTING">Typesetting with mom</a>
+<br>
+<a href="#INTRO_DOCPROCESSING">Document processing with mom</a>
+<br>
+<a href="#INTRO_PHILOSOPHY">Mom's philosophy</a>
+<br>
+<a href="#INTRO_DOCUMENTATION">A note on mom's documentation</a>
+<br>
+<a href="#MACRO_ARGS">How to read macro arguments</a>
+
+<h2><a name="INTRO_INTRO"><u>Who is mom meant for?</u></a></h2>
+
+<strong>Mom</strong> (&quot;my own macros&quot;, &quot;my other
+macros&quot;, &quot;maximum overdrive macros&quot;...) is a macro set for
+groff, designed to format documents for PostScript output.
+She's aimed at three kinds of users:
+<br>
+<ol>
+ <li>typesetters who suspect groff might be &quot;the right
+ tool for the job&quot; but who are
+ frustrated/intimidated by groff's terse, geeky,
+ not-always-typographically-intuitive
+ <a href="definitions.html#TERMS_PRIMITIVES">primitives</a>;
+ <br>
+ <li>non-scientific writers (novelists, short story writers,
+ journalists, students) who just want their work to
+ look good;
+ <br>
+ <li>newbies to computer typesetting, document processing, or
+ groff who need a well-documented macro set to help them get
+ started.
+</ol>
+<p>
+As might be infered from the above, <strong>mom</strong> is two macro
+packages in one: a set of typesetting macros, and a set of document
+processing macros. The typesetting macros govern the physical
+aspects of page layout and provide sane, comprehensible control over
+typographic refinements. The document processing macros let you focus
+on a document's content and logical structure without worrying about
+typesetting or page layout at all.
+<p>
+Because <strong>mom</strong> provides both typesetting and document
+processing macros, it's safe to say she blurs the distinction between
+document processing and document design. While her basic document style
+comes with pretty spiffy defaults (okay -- change &quot;spiffy&quot;
+to &quot;typographically professional&quot;), you can easily control
+how all the various document elements look: titles, page headers and
+footers, page numbering, heads, subheads, footnotes and so on can be
+made to come out exactly the way you want. And should you need precise
+typographic control over elements in a document that fall outside the
+range of <strong>mom</strong>'s document element tags, you don't have to
+read up on groff
+<a href="definitions.html#TERMS_PRIMITIVES">primitives</a>
+in order to accomplish what you want; the typesetting macros take
+care of that.
+
+<a name="INTRO_TYPESETTING">
+ <h2><u>Typesetting with mom</u></h2>
+</a>
+
+<strong>Mom</strong>'s typesetting macros control the basic parameters
+of type: margins, line length, type family, font, point size,
+linespacing, and so on. In addition, they allow you to move around
+on the page horizontally and vertically, and to set up tabs, indents,
+and columns. Finally, they let you adjust such typographic details as
+justification style, letter spacing, word spacing, hyphenation, and
+kerning.
+
+<p>
+In terms of typographic control, these macros resemble the
+commands used on dedicated typesetting computers like Compugraphics and
+Linotronics. Most of them simply give access to groff's typesetting
+primitives in a way that's consistent and easy to use. A few of
+them (tabs and indents, for example) handle fundamental typesetting
+requirements in ways radically different from groff primitives.
+
+<p>
+With <strong>mom</strong>'s typesetting macros, you can, if you wish,
+create individual output pages that you design from the ground up.
+Provided you have not signalled to <strong>mom</strong> that you
+want document processing (via the
+<a href="docprocessing.html#START">START</a>
+macro; see below), every macro is a literal command that remains in
+effect until you modify it or turn it off. This means that if you
+want to create flyers, document covers, surveys, tabulated forms,
+curricula vitae and so on, you may do so in the good old-fashioned
+way: one step at a time with complete control over every element on
+the page.
+<p>
+Years of reading various mailing lists dealing with computer
+typesetting (groff, TeX, and friends) have convinced me that no progam
+can ever replace the human eye and human input when it comes to high
+quality typesetting. As of this writing, a thread on the subject of
+&quot;micro typography&quot; in groff has been going on for nearly a
+month. The reason for the lengthy thread is obvious; words and
+punctuation on the printed page are too variable, too fluid, to be
+rendered flawlessly by any algorithm, no matter how clever. (For
+whatever it's worth, a similar problem exists with engraving musical
+scores by computer.)
+<p>
+<strong>Mom</strong> does not try to solve the problems posed by
+things like hanging punctuation, left-margin adjustments for those
+annoying &quot;space-y&quot; upper case letters like T and W, and
+so on. She merely tries to provide tools that allow knowledgeable
+typesetters to come up with solutions to these problems
+in ways that are somewhat easier and more intuitive than manipulating
+groff at the
+<a href="definitions.html#TERMS_PRIMITIVES">primtive</a>
+level. As a professional typesetter of more than two decades, and a
+writer, I have encountered few situations that cannot be handled by
+<strong>mom</strong>'s typesetting macros.
+<p>
+<strong>Author's note:</strong> One area where groff itself needs
+serious rethinking is in the matter of an algorithm that takes into
+account both word AND letter spacing when
+<a href="definitions.html#TERMS_JUST">justifying</a>
+lines. At present, only word spacing is adjusted, requiring what I
+consider an unnecessary amount of user intervention whenever
+letter spacing is required.
+
+<a name="INTRO_DOCPROCESSING">
+ <h2><u>Document processing with mom</u></h2>
+</a>
+
+<strong>Mom</strong>'s document processing macros let you format
+documents without having to worry about the typographic details.
+In this respect, <strong>mom</strong> is similar to other groff macro
+packages, as well as to html and LaTeX. Where <strong>mom</strong>
+differs is in the degree of control you have over the look and
+placement of the various elements of a document. For example, if you
+don't want your heads underlined, or you want them bigger/smaller,
+or you'd prefer them to be in a different font, or you'd rather they
+were flush left instead of centered, you can make the changes easily
+and have them apply to the whole document. Temporary and one-off
+changes are easy, too.
+<p>
+<strong>Mom</strong> has some nifty features other macro sets
+don't provide. For example, you can switch between draft-style and
+final-copy output. If you regularly make submissions to publishers
+and editors who insist on "typewritten, double-spaced," there's a
+special macro --
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>
+-- that changes typeset documents into ones that would make your
+high-school typing teacher proud. Footnotes, multiple columns,
+recto/verso printing and user designable headers and footers are also
+part of the fun.
+
+<a name="INTRO_PHILOSOPHY">
+ <h2><u>Mom's philosophy</u></h2>
+</a>
+
+Formatting documents should be easy, from soup to nuts. Writers need
+to focus on what they're writing, not on how it looks. From the
+moment you fire up an editor to the moment you add "FINIS"
+to your opus, nothing should interfere with the flow of your words.
+The commands needed to format your work should be easy to remember,
+comprehensible, and stand out well from the text. There shouldn't
+be too much clutter. Your documents should be as readable inside a
+text editor as they are on the printed page.
+<p>
+Unfortunately, in computerland, &quot;easy,&quot;
+&quot;comprehensible,&quot; and &quot;readable&quot; often mean
+&quot;you're stuck with what you're get.&quot; No document formatting
+system can give you exactly what you want all the time, every time.
+Documents, it seems, always need to be tweaked, either to satisfy a
+typographic whim or to clarify some aspect of their content.
+<p>
+Groff has traditionally solved the problem of formatting vs. tweaking
+by requiring users of the common macro packages (mm, ms, me and their
+offspring) to resort to groff
+<a href="definitions.html#TERMS_PRIMITIVES">primitives</a>
+and
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>
+for their special typesetting needs. Not to put too fine a point on
+it, groff primitives tend toward the abstruse, and most inline escapes
+are about as readable in-line as an encrypted password. This does
+not make for happy-camper writers, who either find themselves stuck
+with document formatting style they don't really like, or are forced to
+learn groff from the ground up -- a daunting task, to say the least.
+<p>
+<strong>Mom</strong> aims to make creating documents a simple matter,
+but with no corresponding loss of user control. The document
+processing macros provide an excellent set of defaults, but if
+something is not to your liking, you can change it. And in combination
+with the typesetting macros, you have all the tools you need to
+massage passages and tweak pages until they look utterly professional.
+<p>
+One rarely hears the word &quot;user interface&quot; in conjunction
+with document processing. Since the user formatting takes place
+inside a text editor, little thought is given to the look and feel
+of the formatting commands. <strong>Mom</strong> attempts to rectify
+this by providing users with a consistent, readable &quot;coding&quot;
+style. Most of the macros (especially in the document processing set)
+have humanly-readable names. Not only does this speed up learning
+the macros, it makes the sense of what's going on in a document,
+typographically and structurally, easier to decipher.
+<p>
+<strong>Mom</strong> does not try to be all things to all people.
+In contrast to the normal groff philosophy, she does not try to
+produce output that looks good no matter where it's displayed.
+She's designed for printed output, although with
+<a href="#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>
+she produces acceptable terminal copy. She makes no attempt to be
+compatible with older versions of troff. And she remains largely
+untested with the groff preprocessors (tbl, pic, eqn, etc.)
+<p>
+One special feature in <strong>mom</strong>'s design is the attention
+she pays to aligning the bottom margins of every page. Nothing screams
+&quot;shoddy&quot; in typeset documents louder than bottom margins
+that wander, or, in typesetter jargon, &quot;hang.&quot; There are,
+of course, situations where whitespace at the bottom of a page may
+be desirable (for example, you wouldn't want a head to appear at the
+bottom of the page without some text underneath it), but in all cases
+where hanging bottom margins can be avoided, <strong>mom</strong> does
+avoid them, by clever adjustments to leading (&quot;line spacing&quot;)
+and the spacing between different elements on the page.
+
+<a name="INTRO_DOCUMENTATION">
+ <h2><u>A note on mom's documentation</u></h2>
+</a>
+
+Writing documentation is tough, no doubt about it. One is never
+quite sure of the user's level of expertise. Is s/he new to the
+application, new to its underlying protocols and programs, new to
+the operating system, new to computers? At some point, one has to
+decide who the documentation is for. Making the wrong decision can
+mean the difference between a program that gets used and a program
+that gets tossed.
+<p>
+<strong>Mom</strong>'s documentation assumes users know their way
+around GNU/Linux. It further assumes they at least know what groff
+is, even if they don't know much about it. Lastly, it assumes that
+everyone -- groff newbies and experts alike -- learns faster from
+a few well-placed examples than from manpage-style reference docs.
+What <strong>mom</strong>'s documentation doesn't assume is that
+you know everything -- not about groff, not about typesetting,
+not about document processing. Even experts have odd lacunae in
+their knowledge base. Therefore, whenever I suspect that a term
+or procedure will cause head scratching, I offer an explanation.
+And when explanations aren't enough, I offer examples.
+<a name="CANONICAL"></a>
+<p>
+The canonical reference materials for groff are <strong>cstr54</strong>
+(a downloadable PostScript copy of which is available
+<a href="http://www.kohala.com/start/troff/">here</a>)
+and the <strong>troff</strong> and <strong>groff_diff</strong> manpages.
+I've tried to avoid reiterating them, however, in a few places, this has
+proved impossible. Be forewarned: I have no qualms about sidestepping
+excrutiating completeness about groff usage; I'm more concerned with
+getting <strong>mom</strong> users up and running. <em>Mea culpa.</em>
+<p>
+<strong>Note:</strong> <strong>Mom</strong>'s macro file
+(om.tmac) is heavily commented. Each macro is preceded by a
+description of its arguments, function, and usage, which may
+give you information in addition to what's contained in this
+documentation.
+
+<a name="MACRO_ARGS">
+ <h3><u>How to read macro arguments</u></h3>
+</a>
+
+<p>
+The concise descriptions of macros in this documentation typically
+look like this:
+<blockquote>
+Macro: <strong>NAME</strong> <var>arguments</var>
+</blockquote>
+<var>arguments</var> lists the macro's arguments using conventions that
+should be familiar to anyone who has ever read a manpage. Briefly:
+<p>
+<ol>
+ <li>Macro arguments are separated from each other by spaces.
+ <li>If an argument is surrounded by chevrons
+ (&nbsp;&lt;&nbsp;&gt;&nbsp;), it's a description of the argument,
+ not the argument itself.
+ <li>If an argument begins with or is surrounded by double-quotes, the
+ double quotes MUST be included in the argument.
+ <li>If the user has a choice between several arguments, each of the
+ choices is separated by the pipe character (&nbsp;|&nbsp;),
+ which means &quot;or.&quot;
+ <li>Arguments that are optional are surrounded by square brackets.
+ <li>&lt;off&gt; in an argument list means that any argument
+ turns the macro off.
+</ol>
+
+<a name="TOGGLE_MACRO"><h3><u>Toggle macros</u></h3></a>
+<p>
+Some macros don't require an argument. They simply start something.
+When you need to turn them off, the same macro with <em>any</em>
+argument will do the trick. That's right: ANY argument. This permits
+choosing whatever works for you: OFF, END, QUIT, DONE, Q, X... Hell,
+it could even be I_LOVE_MOM.
+<p>
+Since these macros toggle things on and off, the argument list
+simply reads
+<blockquote>
+<var>toggle</var>
+</blockquote>
+<hr>
+
+<h3>Example 1: an argument requiring double-quotes</h3>
+<blockquote>
+Macro: <strong>TITLE</strong> <var>&quot;&lt;title of document&gt;&quot;</var>
+</blockquote>
+The required argument to <strong>TITLE</strong> is the title of your
+document. Since it's surrounded by double-quotes, you must
+include them in the argument, like this:
+<p>
+<pre>
+ .TITLE "My Pulitzer Novel"
+</pre>
+
+<h3>Example 2: a macro with required and optional arguments</h3>
+<blockquote>
+Macro: <strong>TAB_SET</strong> <var>&lt;tab #&gt; &lt;indent&gt; &lt;length&gt; [ L | R | C | J [ QUAD ] ]</var>
+</blockquote>
+The first required argument is a number that identifies the tab (say,
+"3"). The second required argument is an indent from the left margin
+(say, 6 picas). The third required argument is the length of the tab
+(say, 3 picas). Therefore, at a minimum, when using this macro,
+you would enter:
+<p>
+<pre>
+ .TAB_SET 3 6P 3P
+</pre>
+
+The remaining two arguments are optional. The first is a single
+letter, either L, R, C or J. The second, which is itself optional
+after L, R, C or J, is the word QUAD. Therefore, depending on
+what additional information you wish to pass to the macro,
+you could enter:
+<p>
+<pre>
+ .TAB_SET 3 6P 3P L
+ or
+ .TAB_SET 3 6P 3P L QUAD
+</pre>
+
+<a name="TOGGLE_EXAMPLE"><h3>Example 3: a sample toggle macro:</h3></a>
+
+<blockquote>
+Macro: <strong>QUOTE</strong> <var>toggle</var>
+</blockquote>
+
+<strong>QUOTE</strong> begins a section of quoted text in a document
+and doesn't require an argument. When the quote's finished,
+you have to tell <strong>mom</strong> it's done.
+<p>
+<pre>
+ .QUOTE
+ So runs my dream, but what am I?
+ An infant crying in the night
+ An infant crying for the light
+ And with no language but a cry.
+ .QUOTE OFF
+</pre>
+
+Alternatively, you could have turned the quote off with END, or
+X, or something else.
+
+<p>
+<hr>
+<a href="definitions.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/letters.html b/contrib/groff/contrib/mom/momdoc/letters.html
new file mode 100644
index 0000000..a344f4c
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/letters.html
@@ -0,0 +1,316 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Document Processing, Writing Letters</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="typemacdoc.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="cover.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="LETTERS">
+ <h1 align="center"><u>WRITING LETTERS WITH MOM</u></h1>
+</a>
+
+<a name="LETTERS_INTRO">
+ <h2><u>Introduction</u></h2>
+</a>
+
+<strong>Mom</strong>'s simple but effective letter-writing
+macros are a subset of the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>,
+designed to ease the creation of correspondence.
+<p>
+Because the letter macros are a subset of the document
+processing macros, you can use
+<a href="definitions.html#TERMS_CONTROLMACRO">control macros</a>
+to design correspondence to your own specifications. However,
+<strong>mom</strong> makes no pretence of providing complete design
+flexibility in the matter of letters, which are, after all, simple
+communicative documents whose only real style requirements are that
+they be neat and professional-looking.
+
+<a name="TUTORIAL"><h2><u>Tutorial on writing letters</u></h2></a>
+
+<strong>Mom</strong> letters begin, like all <strong>mom</strong>
+processed documents, with a
+<a href="docprocessing.html#REFERENCE_MACROS">reference macro</a>
+(in this case,
+<a href="docprocessing.html#AUTHOR">AUTHOR</a>),
+a
+<a href="docprocessing.html#DOCTYPE">DOCTYPE</a>
+(<strong>LETTER</strong>, obviously), the essential
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE</a>
+macro, and
+<a href="docprocessing.html#START">START</a>.
+<p>
+<pre>
+ .AUTHOR "Yannick P. Guique"
+ .DOCTYPE LETTER
+ .PRINTSTYLE TYPESET
+ .START
+</pre>
+
+<strong>PRINTSTYLE</strong>, above, could also be
+<strong>TYPEWRITE</strong>. <strong>Mom</strong> has no objection
+to creating letters that look like they were typed on an Underwood
+by a shapely secretary with great gams back in the 1940s.
+<p>
+After the <strong>START</strong> macro, you enter data pertinent to
+your letter: the date, the addressee (in business correspondence,
+typically both name and address), the addressor (that's you; in
+business correspondence, typically both name and address), and a
+greeting (in full, e.g. &quot;Dear Mr. Smith,&quot;).
+<p>
+The macros for entering the data are simple (they're not even
+<a href="definitions.html#TERMS_TOGGLE">toggles</a>)
+and entered in an intuitive order.
+<br>
+<ol>
+ <li><code>.DATE</code>
+ <li><code>.TO</code>
+ <li><code>.FROM</code>
+ <li><code>.GREETING</code>
+</ol>
+<p>
+<strong>Mom</strong> ignores any you omit and spaces the letter's
+opening according to what you do include.
+<p>
+Once you've filled in what you need to get a letter started, simply
+type the letter, introducing each and every paragraph with the
+<a href="docelement.html#PP">PP</a>
+macro.
+<p>
+At the end of the letter, should you wish an indented closing
+(&quot;Yours truly,&quot; &quot;Sincerely,&quot; &quot;Hugs and
+kisses&quot;), invoke the macro <strong>CLOSING</strong> on a
+line by itself and follow it with the text of the closing.
+<strong>N.B.</strong> Don't put your name here; <strong>mom</strong>
+supplies it automatically from <strong>AUTHOR</strong> with
+enough space to leave room for your signature.
+
+<p>
+Assuming our tutorial letter is for business correspondence,
+here's what the complete letter looks like.
+<p>
+<pre>
+ .AUTHOR "Yannick P. Guique"
+ .DOCTYPE LETTER
+ .PRINTSTYLE TYPESET
+ .START
+ .DATE
+ August 25, 2004
+ .TO
+ GUILLAUME BARRIÈRES
+ Minidoux Corporation
+ 5000 Pannes Drive
+ Redmond, Virginia
+ .FROM
+ Y.P. GUIQUE
+ 022 Umask Road
+ St-Sauveur-en-dehors-de-la-mappe, Québec
+ .GREETING
+ Dear Mr. Barrières,
+ .PP
+ It has come to my attention that you have been lobbying the
+ US government to prohibit the use of open source software by
+ endeavouring to outlaw so-called &quot;warranty free&quot;
+ applications.
+ .PP
+ I feel it is my duty to inform you that the success of your
+ operating system with its embedded web browser relies heavily
+ on open source programs and protocols, most notably TCP/IP.
+ .PP
+ Therefore, in the interests of your corporation's fiscal health,
+ I strongly advise that you withdraw support for any US
+ legislation that would cripple or render illegal open source
+ development.
+ .CLOSING
+ Sincerely,
+</pre>
+<hr>
+
+<a name="LETTERS_DEFAULTS">
+ <h2><u>Defaults for letters</u></h2>
+</a>
+
+In letters, <strong>mom</strong> sets:
+<p>
+<ol>
+ <li>the date flush right, page right, at the top of page one
+ <li>the addressee in a block flush left, page left
+ <li>the addressor in a block flush left, page left
+ <li>the greeting flush left
+ <li>the body of the letter justified
+ <li>in multi-page letters:
+ <ul>
+ <li>a footer indicating there's a next page (of the form <code>.../#</code>)
+ <li>the page number at the top of every page after page one
+ </ul>
+ <li>the closing/signature line flush left, indented halfway across the page
+</ol>
+<p>
+Other important style defaults are listed below, and may be changed
+via the
+<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
+or the document processing
+<a href="definitions.html#TERMS_CONTROLMACRO">control macros</a>
+prior to
+<a href="docprocessing.html#START">START</a>. Assume that any
+style parameter not listed below is the same as for
+<a href="docprocessing.html#TYPESET_DEFAULTS">PRINTSTYLE TYPESET</a>
+or
+<a href="docprocessing.html#TYPEWRITE_DEFAULTS">PRINTSTYLE TYPEWRITE</a>.
+<p>
+<pre>
+PARAMETER PRINTSTYLE TYPESET PRINTSTYLE TYPEWRITE
+--------- ------------------ --------------------
+
+Paper size 8.5 x 11 inches 8.5 x 11 inches
+Left/right margins 1.25 inches 1.25 inches
+Header margin 3.5 picas 3.5 picas
+ (for page numbers)
+Header gap 3 picas 3 picas
+ (for page numbers)
+Family Times Roman Courier
+Font roman roman
+Point size 12 12
+Line space 13.5 12 (i.e. singlespaced)
+Paragraph indent 3 ems 3 picas
+Spaced paragraphs yes no
+Footers* yes yes
+Footer margin 3 picas 3 picas
+Footer gap 3 picas 3 picas
+Page numbers top, centered top, centered
+
+*Footers contain a &quot;next page&quot; number of the form .../#
+</pre>
+<hr>
+
+<a name="LETTERS_MACROS">
+ <h2><u>The letter macros</u></h2>
+</a>
+
+All letter macros must come after
+<a href="docprocessing.html#START">START</a>,
+except <strong>NO_SUITE</strong>.
+<p>
+<ul>
+ <li><a href="#DATE">DATE</a>
+ <li><a href="#TO">TO</a>
+ <li><a href="#FROM">FROM</a>
+ <li><a href="#GREETING">GREETING</a>
+ <li><a href="#CLOSING">CLOSING</a>
+ <li><a href="#NO_SUITE">NO_SUITE</a> -- &quot;next page&quot; number off
+</ul>
+
+<!---DATE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="DATE"></a>
+Macro: <strong>DATE</strong>
+
+<p>
+Invoke <strong>DATE</strong> on a line by itself, with the date
+underneath, like this:
+<p>
+<pre>
+ .DATE
+ October 31, 2002
+</pre>
+
+<!---TO--->
+
+<hr width="66%" align="left">
+<p>
+<a name="TO"></a>
+Macro: <strong>TO</strong>
+
+<p>
+Invoke <strong>TO</strong> on a line by itself, with the name
+and address of the addressee underneath, like this:
+<p>
+<pre>
+ .TO
+ JOHN SMITH
+ 10 Roberts Crescent
+ Bramladesh, Ont.
+</pre>
+
+<!---FROM--->
+
+<hr width="66%" align="left">
+<p>
+<a name="FROM"></a>
+Macro: <strong>FROM</strong>
+
+<p>
+Invoke <strong>FROM</strong> on a line by itself, with the name
+and address of the addressor underneath, like this:
+<p>
+<pre>
+ .FROM
+ JOE BLOW
+ 15 Brunette Road
+ Ste-Vieille-Andouille, Québec
+</pre>
+
+<!---GREETING--->
+
+<hr width="66%" align="left">
+<p>
+<a name="GREETING"></a>
+Macro: <strong>GREETING</strong>
+
+<p>
+Invoke <strong>GREETING</strong> on a line by itself, with the
+full salutation you want for the letter, like this:
+<p>
+<pre>
+ .GREETING
+ Dear Mr. Smith,
+</pre>
+
+<!---CLOSING--->
+
+<hr width="66%" align="left">
+<p>
+<a name="CLOSING"></a>
+Macro: <strong>CLOSING</strong>
+
+<p>
+Invoke <strong>CLOSING</strong> on a line by itself after the
+body of the letter, with the closing you'd like (e.g. &quot;Yours
+truly,&quot;), like this:
+<p>
+<pre>
+ .CLOSING
+ Yours truly,
+</pre>
+
+<!---NO_SUITE--->
+
+<hr width="66%" align="left">
+<p>
+<a name="NO_SUITE"></a>
+Macro: <strong>NO_SUITE</strong>
+
+<p>
+If you don't want <strong>mom</strong> to print a &quot;next
+page&quot; number at the bottom of multi-page letters, invoke
+<code>.NO_SUITE</code>, on a line by itself, prior to
+<a href="docprocessing.html#START">START</a>.
+
+<p>
+<hr>
+<a href="typemacdoc.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="cover.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/rectoverso.html b/contrib/groff/contrib/mom/momdoc/rectoverso.html
new file mode 100644
index 0000000..88e661e
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/rectoverso.html
@@ -0,0 +1,257 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Document Processing, Recto/verso printing</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="cover.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="headfootpage.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="RECTOVERSO">
+ <h2 align="center"><u>RECTO/VERSO PRINTING and COLLATING</u></h2>
+</a>
+
+<a name="INDEX_RECTOVERSO">
+ <h3><u>Recto/verso and collating</u></h3>
+</a>
+
+<ul>
+ <li><a href="#RECTOVERSO_INTRO">Introduction to recto/verso</a>
+ <ul>
+ <li><a href="#RECTOVERSO_LIST">Macro list</a>
+ </ul>
+ <li><a href="#COLLATE_INTRO">Introduction to collating</a>
+ <ul>
+ <li><a href="#COLLATE">The COLLATE macro</a>
+ </ul>
+</ul>
+
+<a name="RECTOVERSO_INTRO">
+ <h2><u>Introduction to recto/verso</u></h2>
+</a>
+
+Recto/verso printing allows you to set up a <strong>mom</strong>
+document in such a way that it can be printed on both sides of a
+printer sheet and subsequently bound.
+<p>
+With recto/verso, <strong>mom</strong> automatically takes control
+of the following aspects of alternating page layout:
+<br>
+<ul>
+ <li>switching left and right margins (if they're not equal)
+ <li>switching the left and right parts of the default 3-part
+ <a href="definitions.html#TERMS_HEADER">headers</a>
+ or
+ <a href="definitions.html#TERMS_FOOTER">footers</a>
+ (see the
+ <a href="headfootpage.html#DESCRIPTION_GENERAL">General description of headers</a>)
+ <li>switching
+ <a href="headfootpage.html#HDRFTR_RECTOVERSO">HEADER_RECTO</a>
+ and
+ <a href="headfootpage.html#HDRFTR_RECTOVERSO">HEADER_VERSO</a>
+ if user-defined, single string recto/verso headers
+ or footers are used in place of the default 3-part
+ headers or footers
+ <li>switching the page number position (if page numbers are not centered)
+</ul>
+<p>
+It is beyond the scope of this documentation to cover the different
+ways in which you can make your printer print on both sides of a sheet.
+A simple but effective method for those of us with &quot;dumb&quot;
+printers is to open the document (after it's been processed into
+PostScript by groff -- see
+<a href="using.html#USING_INVOKING">How to invoke groff with mom</a>)
+in <strong>gv</strong> (ghostview),
+click the &quot;odd pages&quot; icon, then click &quot;Print
+Marked&quot;. After printing is complete, rearrange the sheets
+appropriately, put them back in your printer, and have
+<strong>gv</strong> print the &quot;even pages&quot;. If you prefer to
+work from the command line, check out the man pages for
+<strong>pstops</strong> and <strong>psbook</strong>. There are other
+programs out there as well to help with two-sided printing.
+<br>
+
+
+<a name="RECTOVERSO_LIST">
+ <h3><u>Recto/verso macros list</u></h3>
+</a>
+
+<ul>
+ <li><a href="#RECTO_VERSO">RECTO_VERSO</a>
+ <li><a href="#SWITCH_HDRFTR">SWITCH_HEADERS (also FOOTERS)</a>
+</ul>
+
+<hr>
+<!---RECTO_VERSO--->
+
+<a name="RECTO_VERSO">
+ <h3><u>Recto/verso printing</u></h3>
+</a>
+<br>
+Macro: <strong>RECTO_VERSO</strong>
+
+<p>
+If you want <strong>mom</strong> to set up alternating pages for
+recto/verso printing, simply invoke <strong>RECTO_VERSO</strong>
+with no argument.
+<p>
+<strong>NOTE:</strong>
+<br>
+Recto/verso always switches the left and right parts of
+<a href="definitions.html#TERMS_HEADER">headers</a>
+or
+<a href="definitions.html#TERMS_FOOTER">footers</a>
+on odd/even pages. However, it only switches the left and right
+margins if the margins aren't equal. Consequently, it is your
+responsibility to set the appropriate differing left and right
+margins with
+<a href="typesetting.html#L_MARGIN">L_MARGIN</a>
+and
+<a href="typesetting.html#R_MARGIN">R_MARGIN</a>
+(prior to
+<a href="docprocessing.html#START">START</a>)
+or with
+<a href="docprocessing.html#DOC_LEFT_MARGIN">DOC_LEFT_MARGIN</a>
+and
+<a href="docprocessing.html#DOC_RIGHT_MARGIN">DOC_RIGHT_MARGIN</a>
+(before or after <strong>START</strong>).
+<p>
+Equally, recto/verso only switches the page number position if page
+numbers aren't centered, which means you have to set the page
+number position with
+<a href="headfootpage.html#PAGENUM_POS">PAGENUM_POS</a>
+(before or after <strong>START</strong>).
+<br>
+
+<!---SWITCH_HDRFTR--->
+
+<hr width="66%" align="left">
+<a name="SWITCH_HDRFTR">
+ <h3><u>Switch header left part/right part</u></h3>
+</a>
+<br>
+Macro: <strong>SWITCH_HEADERS</strong>
+
+<p>
+<strong>SWITCH_HEADERS</strong> switches the location of the
+header left string (by default, the author) and the header right
+string (by default, the document title). If you don't like
+<strong>mom</strong>'s default placement of author and title, use
+<strong>SWITCH_HEADERS</strong> to reverse it.
+<p>
+<strong>SWITCH_HEADERS</strong> can also be useful in conjuction
+with
+<a href="#RECTO_VERSO">RECTO_VERSO</a>.
+The assumption of <strong>RECTO_VERSO</strong> is that the first
+page of a document (recto/odd) represents the norm for header-left
+and header-right, meaning that the second (and all subsequent even)
+page(s) of the document exchange header-left and header-right.
+<p>
+If <strong>mom</strong>'s behaviour in this matter is not what
+you want, simply invoke <strong>SWITCH_HEADERS</strong> on the
+first page of your recto/verso document to reverse her default
+treatment of header parts. The remainder of your document (with
+respect to headers) will come out as you want.
+<p>
+<strong>NOTE:</strong> Replace <strong>_HEADERS</strong>, above,
+with <strong>_FOOTERS</strong> if your document uses footers.
+<br>
+<hr>
+
+<!=====================================================================>
+
+<a name="COLLATE_INTRO">
+ <h2><u>Introduction to collating</u></h2>
+</a>
+
+The macro <strong>COLLATE</strong> lets you join documents together.
+Primarily, it's a convenience for printing long documents that
+comprise several chapters, although it could be used for any
+document type (except <strong>LETTER</strong>).
+<p>
+Personally, I prefer to keep chapters in separate files and print
+them out as needed. However, that means keeping track of the correct
+starting page number for each chapter, a problem circumvented by the
+use of <strong>COLLATE</strong>.
+<p>
+When collating chapters, you need only put <code>.COLLATE</code>
+at the end of a chapter, follow it with any
+<a href="docprocessing.html#REFERENCE_MACROS">reference macros</a>
+needed for the new chapter, e.g.
+<a href="docprocessing.html#CHAPTER">CHAPTER</a>
+or
+<a href="docprocessing.html#CHAPTER_STRING">CHAPTER_STRING</a>
+(have a look at the
+<a href="#CHAPTER_NOTE">Special Note on CHAPTER</a>)
+make any pertinent style changes to the document (unlikely, but
+possible), and re-invoke the
+<a href="docprocessing.html#START">START</a>
+macro. Your new chapter will begin on a fresh page and behave
+as expected.
+<p>
+<strong>COLLATE</strong> assumes you are collating documents/files
+with similar type-style parameters hence there's no need for
+<strong>PRINTSTYLE</strong> to appear after <strong>COLLATE</strong>,
+although if you're collating documents that were created as separate
+files, chances are the <strong>PRINTSTYLE</strong>'s already there.
+<p>
+<a name="CAUTION"></a>
+<strong><u>Two words of caution:</u></strong>
+<ol>
+ <li>Do not collate documents of differing
+ <strong>PRINTSTYLES</strong> (i.e. don't try to
+ collate a TYPESET document and TYPEWRITE document --
+ why would you want to do that anyway?)
+ <li>Use <strong>DOC_FAMILY</strong> instead of
+ <strong>FAMILY</strong> if, for some reason, you want
+ to change the family of all the document elements after
+ <strong>COLLATE</strong>. <strong>FAMILY</strong>, by
+ itself, will change the family of paragraph text only.
+</ol>
+<br>
+
+<!---COLLATE--->
+
+<hr width="66%" align="left">
+<a name="COLLATE">
+ <h3><u>Collate document files</u></h3>
+</a>
+<br>
+Macro: <strong>COLLATE</strong>
+
+<p>
+The most basic (and most likely) collating situation looks like
+this:
+<p>
+<pre>
+ .COLLATE
+ .CHAPTER 17
+ .START
+</pre>
+
+A slightly more complex version of the same thing, for chapters
+that require their own titles, looks like this:
+<p>
+<pre>
+ .COLLATE
+ .CHAPTER_STRING "Geek Fatigue: Symptoms and Causes"
+ .START
+</pre>
+
+<strong>NOTE:</strong> See the
+<a href="#CAUTION">two words of caution</a>,
+above.
+<br>
+
+<hr>
+<a href="cover.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="headfootpage.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/reserved.html b/contrib/groff/contrib/mom/momdoc/reserved.html
new file mode 100644
index 0000000..029556d
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/reserved.html
@@ -0,0 +1,1044 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- List of reserved words</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="appendices.html#TOP">Prev</a>&nbsp;&nbsp; <a href="toc.html">Back to Table of Contents</a> <a name="TOP"></a> <a name="RESERVED"> <h2 align="center"><u>LIST OF RESERVED WORDS</u></h2> </a> <p> The following is a list of &quot;reserved&quot; words used by <strong>mom</strong>. Before changing the name of any macro or document element tag with <a href="goodies.html#ALIAS">ALIAS</a>, I strongly recommend doing a search of this page for your proposed new name. If you find it in the left hand column, DON'T USE IT. Choose something else instead. <p>
+Anyone interested in playing around inside <strong>mom</strong>'s macro
+file (om.tmac) will find this list useful as well since it lists all
+(I hope) the macros, strings, and number registers <strong>mom</strong>
+uses, along with brief descriptions of their functions.
+<p>
+<pre>
+TYPESETTING
+===========
+
++++MACROS+++
+
+Page layout
+-----------
+PAGELENGTH Page width
+PAGE Page width/length; left, right, top, bottom margins
+PAGEWIDTH Page width
+PAPER Letter, legal, or A4
+
+B_MARGIN Space to leave at page bottom
+L_MARGIN Page offset
+R_MARGIN Line length as a function of pagewidth - pageoffset - rightmargin
+T_MARGIN Advance lead from page top
+
+Page control
+------------
+DO_B_MARGIN Margin at bottom of page
+DO_T_MARGIN Margin at top of page
+
+Style
+-----
+CONDENSE Set percentage of pseudo-condense (alias of CONDENSE_OR_EXTEND)
+EXTEND Set percentage of pseudo-extend (alias of CONDENSE_OR_EXTEND)
+FAMILY Family
+FT Font
+LL Line length
+LS Leading (.vs)
+PT_SIZE Point size
+SETBOLDER Set degree of emboldening (pseudo-bold) in units
+SETSLANT Set degree of pseudo-italic
+
+Autolead
+--------
+AUTOLEAD Always lead n points more than .PT_SIZE
+
+Flush
+-----
+JUSTIFY Justified text
+QUAD Filled text, left, right, or center
+
+Quad
+----
+CENTER Non-filled text, center
+LEFT Non-filled text, left
+RIGHT Non-filled text, right
+
+Hyphenation
+-----------
+HY Turn hyphenation on/off, or set LINES, MARGIN, SPACE
+HY_SET Set LINES, MARGIN, SPACE in a single command
+
+Advanced style
+--------------
+KERN Turn automatic kerning on or off
+LIGATURES Turn ligatures on or off
+SS Sentence space control
+WS Word space control
+
+Line breaks
+-----------
+BR Alias of br
+EL Breaks line but doesn't advance
+SPACE Alias of sp
+SPREAD Alias of brp
+
+Ald/rld
+-------
+ALD Advance lead
+RLD Reverse lead
+
+Indents
+-------
+HI Indent hang
+IB Indent both
+IBX Indent both off
+IL Indent left
+ILX Indent left off
+IQ Indents off
+IR Indent right
+IRX Indent right off
+IX Indents off -- deprecated
+TI Indent temporary
+
+Tabs
+----
+ST String tab
+TAB_SET Tab Set
+TN Tab Next
+TQ Tab Quit
+
+MCO Turn on multi-column mode
+MCR Return to top of column
+MCX Turn off multi-column mode
+
+Underscore
+----------
+UNDERSCORE Underscores words or phrases
+UNDERSCORE2 Double underscores words or phrases
+
+Underline
+---------
+UNDERLINE Underlines whole passages (Courier only)
+
+Smart Quotes
+------------
+SMARTQUOTES Turns smart quotes on or off
+
+Misc + Support
+--------------
+BR_AT_LINE_KERN Deposit a break before RW and WE
+CAPS Convert u/lc to UC
+COMMENT Don't print lines till COMMENT OFF (alias of SILENT)
+DROPCAP_ADJUST Points (poss. fractional) to add/subtract from drop caps
+DROPCAP Create drop cap
+DROPCAP_FAMILY Drop cap family
+DROPCAP_FONT Drop cap font
+DROPCAP_GUTTER Drop cap gutter
+DROPCAP_OFF Support only; restores .in if there was one
+EW Extra white -- loosen overall line kern (character spacing)
+LEADER_CHARACTER Sets leader character
+PAD Insert padding spaces at marked places
+PADMARKER Sets character to use instead of # in PAD
+PRINT Simply prints args passed to it; keeps my code indented nicely
+RW Reduce white -- tighten overal line kern (character spacing)
+SILENT Don't print lines till SILENT OFF
+SIZESPECS Get cap-height, x-height and descender depth for current point size
+TRAP Turn traps off or on
+
++++DIVERSIONS+++
+
+NO_FLASH Diverts output of SILENT or COMMENT so they don't print
+NULL Diverts SIZESPECS in PRINT_HDRFTR so it SIZESPECS doesn't screw up FOOTER and FOOTNOTE processing when FOOTERS are on
+PAD_STRING Diverts $PAD_STRING for processing
+TYPESIZE Diverts SIZESPECS routine so it doesn't print
+
++++NUMBER REGISTERS+++
+
+#ALD ALD value
+#AUTOLEAD_FACTOR Using FACTOR arg to AUTOLEAD? (toggle)
+#AUTO_LEAD Using autolead? (toggle)
+#AUTO_LEAD_VALUE Auto leading value
+#BL_INDENT Value of left indent when IB
+#B_MARGIN Bottom margin
+#BOLDER_UNITS # of units to embolden type
+#BR_INDENT Value of right indent when IB
+c column mark
+#CONDENSE Are we in pseudo-condense mode? (toggle)
+#COND_WIDTH Width of pseudo-condensed type (pointsize x $COND_PERCENT)
+#CURRENT_TAB Current tab number
+#DC_GUT Width of dropcap gutter
+#DEGREES # of degrees slant for pseudo-italic
+#EXTEND Are we in pseudo-extend mode? (toggle)
+#EXT_WIDTH Width of pseudo-extended type (pointsize x $EXT_PERCENT)
+#FILL_MODE Are we in fill mode (i.e. \n(.u=1)? (toggle)
+#FONT_FOR_PAD Used to ensure that the font in effect prior
+ to PAD is restored at the start of every iteration
+ of $PAD_STRING
+#H_INDENT Value of left indent when IH
+#HL_INDENT Value of the hang when IH
+#HYPHENATE Hyphenation on? (toggle)
+#HY_SET Did we manually set hyphenation parameters? (toggle)
+#IN_TAB Are we in a tab? (toggle) Set in macro TAB; used in ST to
+ determine whether to add #ST_OFFSET to #ST&lt;#&gt;_OFFSETT
+#INDENT_ACTIVE Indicates whether an indent is active (toggle)
+#INDENT_BOTH_ACTIVE Toggle
+#INDENT_LEFT_ACTIVE Toggle
+#INDENT_RIGHT_ACTIVE Toggle
+#INDENT_STYLE_BOTH Indicates IB when #INDENT_ACTIVE=1 (toggle)
+#INDENT_STYLE_HANG Indicates IH when #INDENT_ACTIVE=1 (toggle)
+#INDENT_STYLE_LEFT Indicates IL when #INDENT_ACTIVE=1 (toggle)
+#INDENT_STYLE_RIGHT Indicates IR when #INDENT_ACTIVE=1 (toggle)
+#INDENT_STYLE_TEMP Indicates IT when #INDENT_ACTIVE=1 (toggle)
+#IX_WARN Toggles to 1 the first time IX is user-invoked
+#KERN Kern on? (toggle)
+#LAST_TAB Last tab number set in multi-columns
+#LEAD Leading (alias)
+#LIGATURES Ligatures on? (toggle)
+#L_INDENT Value of left indent
+#L_LENGTH Line length
+#L_MARGIN Page offset if set with LMARGIN; if .po used, \n(.o returns
+#LOOP #LOOP=1 if a while loop executes; otherwise 0.
+#NEXT_TAB Current tab number + 1 (used in TN)
+#NEXT_TAB Next tab in an n+1 sequence
+#OPEN_CLOSE Manipulates character " to print `` or ''
+p Output line horiz position at end of $PAD_STRING
+#PAD_COUNT Number of times # was included in arg to PAD
+#PAD_SPACE Size of padding space
+#PAGE_LENGTH Page length (alias)
+#PAGE_WIDTH Page width
+#PP_ACTIVE Are we in the context of a para? (toggle)
+#PRINT_FOOTER_ON_PAGE_1 toggle
+#PT_SIZE Point size (fractional) in units (alias)
+#Q_AT_TOP Does a quote start at the top of a new page? (toggle)
+#QUAD In autoquad mode? (toggle)
+#RESTORE_LEAD Lead value in effect prior to AUTOLEAD
+#RESTORE_PT_SIZE Stores current point size (in units) prior to underscore
+#R_INDENT Value of right indent
+#RLD RLD value
+#R_MARGIN Right margin
+#SILENT Is silent on? (toggle)
+#SIZE_FOR_PAD Used to ensure that the size in effect prior
+ to PAD is restored at the start of every iteration
+ of $PAD_STRING
+#SLANT_ON Is SLANT on? (toggle)
+#SMART_QUOTES Smartquotes on? (toggle)
+#SPACE_TO_END Whitespace at end of string passed to PAD
+#ST&lt;#&gt;_LENGTH Length of ST&lt;#&gt;; calculated during ST &lt;#&gt;
+#ST&lt;#&gt;_MARK Page offset of autotab &lt;#&gt; at ST&lt;#&gt;X
+#ST_NUM Incrementing counter for autotab identification
+#ST_OFFSET Offset (from current tab) to add to #ST&lt;#&gt;_OFFSET
+ when calculating string indents set from within tabs
+#ST&lt;#&gt;_OFFSET Indent of autotab &lt;#&gt; (page offset)
+t "mark" register set in T_MARGIN; recalled in LS and AUTOLEAD if #T_MARGIN_SET is 1
+#TAB_ACTIVE Are we in a tab? (toggle)
+#TAB_NUMBER Tab number
+#TAB_OFFSET Tab indent
+#T_INDENT Value of temporary indent
+#T_MARGIN Top margin
+#T_MARGIN_SET Did we set the top margin with T_MARGIN? (toggle)
+#USER_SET_L_LENGTH Did user invoke LL? (toggle)
+u Horiz position of start of underscore
+
++++STRINGS+++
+
+$COND_PERCENT Percentage by which to pseudo-condense type
+$CURRENT_TAB Current tab number
+$DC_ADJUST +|- # of points to subtract from dropcap
+$DC_FAM Drop cap family
+$DC_FT Drop cap font
+$EXT_PERCENT Percentage by which to pseudo-extend type
+$FAMILY Family
+$FAMILY_FOR_PAD Used to ensure that the family in effect prior
+ to PAD is restored at the start of every iteration
+ of $PAD_STRING
+$FONT Font
+$PAD_MARKER Character to mark off padding in PAD
+$PAD_STRING Arg passed to PAD
+$QUAD_VALUE Quad value (left, right, center, justify)
+$QUOTE0 ``
+$QUOTE1 ''
+$RESTORE_QUAD_VALUE Quad value for use in restoring L, R, C, J (after tabs)
+$SS_VAR Holds + or - sentence space value
+$ST&lt;#&gt;_FILL Always QUAD if QUAD passed to ST &lt;#&gt;
+$ST&lt;#&gt;_QUAD_DIR Quad direction supplied to ST for &lt;#&gt;
+$TAB_NUMBER Argument passed to TAB macro to call TAB# macro created in TAB_SET
+$WS_CONSTANT 12; used to hold groff default wordspace
+$WS Holds WS value; concatenation of WS_CONSTANT and WS_VAR
+$WS_VAR + or - value to add to $WS_CONSTANT
+
++++ALIASES+++
+
+ALIAS als
+ALIASN aln
+BR br
+CENTRE CENTER
+COMMENT SILENT
+CONDENSE CONDENSE_OR_EXTEND
+EXTEND CONDENSE_OR_EXTEND
+FAM FAMILY
+FT FONT
+HYPHENATE HY
+HYPHENATION HY
+LIG LIGATURES
+LL LINE_LENGTH
+MAC de
+NEW_PAGE bp
+NEWPAGE NEW_PAGE
+PAGELENGTH PAGE_LENGTH
+PAGE_LENGTH pl
+PAGEWIDTH PAGE_WIDTH
+SPREAD brp
+SP sp
+STRING ds
+TABSET TAB_SET
+TB TAB
+TI IT
+UNDERSCORE_2 UNDERSCORE2
+
++++ALIASES FOR NUMBER REGISTERS+++
+
+#DIVER_DEPTH dn -- diversion depth
+#DIVER_WIDTH dl -- diversion width
+#INDENT .i -- value of current indent
+#LEAD .v -- line space (.vs, not .ls)
+#L_LENGTH .l -- line length
+#NUM_ARGS .$ -- number of arguments passed to a macro
+#PAGE_LENGTH .p -- page length
+#PT_SIZE .ps -- current point size (fractional) in units
+#TRAP_DISTANCE .t -- distance to next trap
+
++++INLINE ESCAPES+++
+
+BCK Inline backward horizontal movement
+BOLDER Pseudo-bold on
+BOLDERX Pseudo-bold off
+BP Back points (horizontal movement)
+BU Back units (inline pairwise kerning)
+COND_FOR_SUP Pseudo-condense string for use with superscripts (called with CONDSUP)
+COND_FOR_SUP Pseudo-extend string for use with superscripts (called with EXTSUP)
+COND Pseudo-condense type
+CONDX Pseudo-condense off
+CONDSUP Pseudo-condensed superscript (using value set with CONDENSE)
+CONDSUPX Pseudo-condensed superscript off
+DOWN Inline downward vertical movement
+EXT Pseudo-extend type
+EXTX Pseudo-extend off
+EXTSUP Pseudo-extended superscript
+EXTSUPX Pseudo-extended superscript off
+FP Forward points (horizontal movement)
+FU Forward units (inline pairwise kerning)
+FWD Inline forward horizontal movement
+LEADER Deposit leader to end of current LL or TAB
+RULE Draw a rule to the full measure of the current line or tab length
+SLANT Slant (pseudo-italic on
+SLANTX Slant off
+ST&lt;#&gt; String tab end marker
+ST&lt;#&gt; String tab start marker
+SUP Superscript
+SUPX Superscript off
+UP Inline upward vertical movement
+
++++SPECIAL CHARACTERS+++
+
+FEET The foot character \(fm
+INCH The inch character \(fm\(fm
+
+------------------------------------------------------------------------
+
+DOCUMENT PROCESSING
+===================
+
++++MACROS+++
+
+Document info
+-------------
+AUTHOR Author
+CHAPTER Chapter number
+DRAFT Draft number
+REVISION Revision number
+SUBTITLE Doc subtitle
+TITLE Doc title
+
+Document style
+--------------
+COPYSTYLE Output style (DRAFT or FINAL)
+DEFAULTS In START, sets defaults
+DOCTYPE Kind of doc (DEFAULT, CHAPTER, NAMED, LETTER)
+PAGENUMBER Page number that appears on 1st page of doc
+PAPER Paper size (LETTER, LEGAL, A4)
+PRINTSTYLE Print style (TYPEWRITE or TYPESET)
+
+Document tags
+-------------
+BLOCKQUOTE Block-indented, quoted text
+COL_BREAK Breaks and spreads line before invocation; moves to next column on page or 1st col of next page. An alias of COL_NEXT.
+COL_NEXT Moves to next column on page or 1st col of next page
+ENDNOTE Endnote
+ENDNOTES Output endnotes
+EPIGRAPH Epigraph before 1st para
+FINIS Prints --END--
+FOOTNOTE Collects footnotes in text for printing at bottom of page
+HEAD Section title (main heads)
+LINEBREAK Break between narrative sections
+PARAHEAD Paragraph head
+PP Paragraph
+QUOTE Poetic or line for line quotes
+START Prints info collected with doc info macros
+SUBHEAD Subheads
+
+Headers/footers
+--------------
+BREAK_QUOTE Manually break a footnoted quote that crosses a page/column
+DO_FOOTER Prints footer (after footnote processing, if any)
+FOOTER_ON_FIRST_PAGE Print footer on first page? (toggle)
+FOOTER Trap-invoked footer macro
+HEADER Trap-invoked header macro
+PAGINATE Turns page numbering on or off (doc default=on)
+RECTO_VERSO Enables switch HEADER_LEFT and HEADER_RIGHT on alternate pages
+
+Alter doc "look" and/or change defaults
+---------------------------------------
+ALWAYS_FULLSPACE_QUOTES Fullspace quotes instead of default 1/2 spacing them.
+ATTRIBUTE_STRING What to print before author (default is "by")
+AUTHOR_FAMILY Family to use for author in doc header
+AUTHOR_FONT Font to use for author in doc header
+AUTHOR_SIZE ps to use for author in doc header
+BLOCKQUOTE_FAMILY Family to use in blockquotes
+BLOCKQUOTE_FONT Font to use in blockquotes
+BLOCKQUOTE_QUAD How to quad blockquotes
+BLOCKQUOTE_SIZE How much to de/increase point size of bquotes
+CHAPTER_STRING What to print whenever the word "chapter" is required
+COLUMNS Print in columns
+DOC_FAMILY Overall doc family
+DOCHEADER_ADVANCE Start position of docheader (relative to top of page)
+DOCHEADER_LEAD +|- value applied to #DOC_LEAD to in/decrease leading of doc header
+DOC_HEADER Print doc header?
+DOC_LEAD_ADJUST Adjust #DOC_LEAD to fill page to #B_MARGIN
+DOC_LEAD Overall doc leading
+DOC_LEFT_MARGIN Doc left margin
+DOC_LINE_LENGTH Doc line length
+DOC_PT_SIZE Overall doc point size
+DOC_QUAD Overall quad of document
+DOC_RIGHT_MARGIN Doc right margin
+DOCTYPE_FAMILY Family to use for doctype string in doc header
+DOCTYPE_FONT Font to use for doctype string in doc header
+DOCTYPE_SIZE ps to use for doctype string in doc header
+DOCTYPE Type of doc (DEFAULT, CHAPTER, NAMED, LETTER)
+DO_QUOTE Print quote (invoked from QUOTE or BLOCKQUOTE)
+DRAFT_STRING What to print whenever the word "draft" is required
+DRAFT_WITH_PAGENUMBER Attach draft/revision info to page number (instead of putting it HEADER center)
+ENDNOTE_FAMILY Family for endnotes
+ENDNOTE_FONT Font for endnotes
+ENDNOTE_LEAD Leading for endnotes page
+ENDNOTE_PARA_INDENT First line indent of paras in multi-para endnotes
+ENDNOTE_PARA_SPACE Whether to space paras in multi-para endnotes
+ENDNOTE_PT_SIZE Base point size for endnotes page
+ENDNOTE_QUAD Endnote quad
+ENDNOTE_STRING Endnotes page head
+ENDNOTE_STRING_FAMILY Family for endnotes page head
+ENDNOTE_STRING_FONT Font for endnotes page head
+ENDNOTE_STRING_QUAD Quad direction for endnotes page head
+ENDNOTE_STRING_SIZE Size for endnotes page head
+ENDNOTE_STRING_UNDERSCORE Underscoring of endnotes page head
+ENDNOTE_TITLE Endnotes identifying title
+ENDNOTE_TITLE_FAMILY Family for endnotes identifying title
+ENDNOTE_TITLE_FONT Font for endnotes identifying title
+ENDNOTE_TITLE_QUAD Quad direction for endnotes identifying title
+ENDNOTE_TITLE_SIZE Size for endnotes identifying title
+ENDNOTE_TITLE_UNDERSCORE Underscoring of endnotes identifying title
+ENDNOTE_NUMBER_FAMILY Family of endnote numbers
+ENDNOTE_NUMBER_FONT Font of endnote numbers
+ENDNOTE_NUMBER_SIZE Size of endnote numbers
+ENDNOTE_NUMBERS_ALIGN_RIGHT Hang endnote numbers and align right
+ENDNOTE_NUMBERS_ALIGN_LEFT Dont' hang endnote numbers and align left
+ENDNOTES_HDRFTR_CENTER Print header/footer center string on endnotes pages?
+ENDNOTES_HEADER_CENTER Print header center string on endnotes pages?
+ENDNOTES_FOOTER_CENTER Print footer center string on endnotes pages?
+EPIGRAPH_AUTOLEAD Autolead value for epigraphs
+EPIGRAPH_FAMILY Family to use in epigraphs
+EPIGRAPH_FONT Font to use in epigraphs
+EPIGRAPH_INDENT Value by which to multiply PP_INDENT for block epigraphs
+EPIGRAPH_QUAD Quad value of block style epigraphs
+EPIGRAPH_SIZE ps de/increase of epigraphs*
+FINIS_STRING What to print when FINIS is invoked
+FOOTER_GAP Distance between running text and footer
+FOOTER_MARGIN Distance from footer to bottom of page
+FOOTERS Turns footers on or off
+FOOTNOTE_AUTOLEAD Autolead to use in footnotes
+FOOTNOTE_FAMILY Family to use in footnotes
+FOOTNOTE_FONT Font to use in footnotes
+FOOTNOTE_MARKERS Turns footnote markers on or off
+FOOTNOTE_MARKER_STYLE STAR or NUMBER; default=STAR
+FOOTNOTE_QUAD Quad to use in footnotes
+FOOTNOTE_RULE_ADJ # of points to raise footnote rule from its baseline
+FOOTNOTE_RULE_LENGTH Length of footnote separator rule
+FOOTNOTE_RULE Turns printing of fn separator rule on or off; default is on
+FOOTNOTE_SIZE ps of footnotes
+HDRFTR_CENTER_CAPS Center part of header/footer in caps? (toggle)
+HDRFTR_CENTER_FAMILY Family of center part of header/footer
+HDRFTR_CENTER_FONT Font of center part of header/footer
+HDRFTR_CENTER_SIZE ps in/decrease of center part of header/footer**
+HDRFTR_CENTER String to go in center part of header/footer; default doctype
+HDRFTR_CENTER The header/footer center string
+HDRFTR_FAMILY Family to use in the headers/footers
+HDRFTR_GAP Distance from header/footer to running text
+HDRFTR_LEFT_CAPS Left part of header/footer in caps? (toggle)
+HDRFTR_LEFT_FAMILY Family of left part of header/footer
+HDRFTR_LEFT_FONT Font of left part of header/footer
+HDRFTR_LEFT_SIZE ps in/decrease of left part of headers/footers**
+HDRFTR_LEFT String to go in left part of header/footer; default author
+HDRFTR_LEFT The header/footer left string
+HDRFTR_MARGIN Distance from top of page to header
+HDRFTR_PLAIN Header/footer fam/ft/ps all same as running text
+HDRFTR_RECTO User-defined, single string recto header/footer
+HDRFTR_RIGHT_CAPS Right part of header/footer in caps? (toggle)
+HDRFTR_RIGHT_FAMILY Family of right part of headers/footers
+HDRFTR_RIGHT_FONT Font of right part of headers/footers
+HDRFTR_RIGHT_SIZE Size of right part of headers/footers
+HDRFTR_RIGHT The header/footer right string
+HDRFTR_RULE_GAP Space between header/footer and header/footer rule
+HDRFTR_RULE_INTERNAL Prints the header/footer rule
+HDRFTR_RULE Turns header/footer rule on or off
+HDRFTR_RULE Turns header/footer rule on or off. When invoked internally, prints the rule.
+HDRFTR_SIZE ps in/decrease of headers/footers*
+HDRFTR_VERSO User-defined, single string verso header/footer
+HEAD_CAPS Print section titles in caps? (toggle)
+HEADER_GAP Space between header and running text
+HEADER_MARGIN Space from top of page to header
+HEADERS Turns headers on or off
+HEAD_FAMILY Family to use in section titles
+HEAD_FONT Font to use in section titles
+HEAD_QUAD Quad value of section titles
+HEAD_SIZE How much to in/decrease point size of section titles
+HEAD_SPACE Give HEADs 2 line-spaces before. If OFF, only 1. Default is on.
+HEAD_UNDERLINE Underline section titles? (toggle)
+INDENT_FIRST_PARAS Indent 1st paras? (doc default=not indented)
+ITALIC_MEANS_ITALIC For TYPEWRITE; render .FT I in italic.
+NUMBER_HEADS Print head numbers
+NUMBER_PARAHEADS Print parahead numbers
+NUMBER_SUBHEADS Print subhead numbers
+PAGENUM_FAMILY Family to use in footers
+PAGENUM_FONT Font to use for page numbers
+PAGENUM_HYPHENS Turns on/off hyphens surrounding page numbers
+PAGENUM_ON_FIRST_PAGE Print page number on first page when footers are on (toggle)
+PAGENUM_POS Controls placement of page numbers default=bottom/centered
+PAGENUM_SIZE How much to in/decrease point size of page numbers
+PAGENUM_STYLE Page # in roman, arabic, or alphabetic
+PARAHEAD_FAMILY Family to use for paraheads
+PARAHEAD_FONT Font to use for paraheads
+PARAHEAD_INDENT How mucht to indent paraheads
+PARAHEAD_SIZE Size of paraheads
+PARA_INDENT Size of para indent
+PARA_SPACE Put a line space before paras
+PP_FONT Overall doc font
+QUOTE_FAMILY Family to use in pquotes
+QUOTE_FONT Font to use in pquotes
+QUOTE_INDENT Value by which to multiply PP_INDENT for block quotes
+QUOTE_SIZE How much to de/increase point size of pquotes
+RESET_FOOTNOTE_NUMBER Reset fn# to 1, or, if arg PAGE, reset automatically to 1 on every page
+RESET_HEAD_NUMBER Reset head number
+RESET_PARAHEAD_NUMBER Reset parahead number
+RESET_SUBHEAD_NUMBER Reset subhead number
+REVISION_STRING What to print whenever the word "revision" is required
+SLANT_MEANS_SLANT In TYPEWRITE, render \*[SLANT] as slant
+SUBHEAD_FAMILY Family to use in subheads
+SUBHEAD_FONT Font to use in subheads
+SUBHEAD_SIZE How much to in/decrease point size of subheads
+SUBTITLE_FAMILY Family to use for subtitle in doc header
+SUBTITLE_FONT Font to use for subtitle in doc header
+SUBTITLE_SIZE ps to use for subtitle in doc header
+SWITCH_HDRFTR Switch HDRFTR_LEFT and HDRFTR_RIGHT
+TITLE_FAMILY Family to use for title in doc headers
+TITLE_FONT Font to use for title in doc headers
+TITLE_SIZE How much to in/decrease title at start of doc
+UNDERLINE_ITALIC In TYPEWRITE, render .FT I as underlined
+UNDERLINE_QUOTES In TYPEWRITE, underline quotes? (toggle)
+UNDERLINE_SLANT In TYPEWRITE, render \*[SLANT] as underlined
+
+ *relative to #DOC_PT_SIZE
+**relative to overall ps of headers as set by HEADER_SIZE
+
++++LETTER MACROS+++
+
+CLOSING Closing (ie. Yours truly,)
+DATE Date string for letters
+FROM Addressor's name and address
+GREETING Full salutation (eg. Dear John Smith,)
+NO_SUITE Remove suite page numbers from bottom of letter pages
+TO Addressee's name and address
+ALL_DONE .em (the "end macro") for letters
+
++++DIVERSIONS+++
+
+B_QUOTE Block (indented) quote text
+CLOSING Closing (ie. Yours truly,)
+DATE Date string for letters
+EPI_TEXT Epigraph text
+FN_OVERFLOW Excess footnotes when B_MARGIN is reached
+FOOTNOTES Text of footnotes
+FROM_ADDRESS Addressor's name and address
+GREETING Full salutation (eg. Dear John Smith,)
+P_QUOTE Line for line (poetic) quote text
+TO_ADDRESS Addressee's name and address
+
++++SUPPORT+++
+
+CHECK_INDENT Applies indents to doc elements inside ev's (head, subhead, etc)
+D0_QUOTE Outputs quotes with space adjustments before and after
+DIVERT_FN_LEFTOVER Diverts excess fn stored in FN_OVERFLOW into FOOTNOTE
+DIVERT_FN_OVERFLOW Diverts excess fn stored in FN_OVERFLOW when FN_DEFER into FOOTNOTE
+DO_EPIGRAPH Outputs epigraphs with space adjustments before and after
+FN_OVERFLOW_TRAP Fixed at B_MARGIN; if footnotes run longer than B_MARGIN, diverts excess into FN_OVERFLOW
+HDRFTR_RULE Prints rule under header or over footer
+PRINT_FOOTNOTE_RULE An alias of PRINT_FOOTNOTE; prints footnote separator rule
+PRINT_HDRFTR Prints header/footer (trap invoked)
+PRINT_PAGE_NUMBER Invoked in HEADER or FOOTER
+PRINT_USERDEF_HDRFTR Prints user defined, single string recto/verso header/footer
+REMOVE_INDENT Removes indents set with CHECK_INDENT
+TRAPS Sets hdrftr traps; optionally adjusts #DOC_LEAD to fill page to #B_MARGIN
+
++++NUMBER REGISTERS+++
+
+#ADJ_DOC_LEAD Adjust DOC_LEAD? (toggle)
+#ARG_NUM Keeps track of number of args passed to a macro
+#AUTHOR_LINES # of lines of authors in doc header; odd=0 even=1
+#AUTHOR_NUM Keeps track of user-defined string AUTHOR_&lt;#&gt; in AUTHOR
+#AUTHORS Equals final value of AUTHOR_NUM; used for authors in doc header
+#BROKEN_QUOTE Did we invoke BREAK_QUOTE? (toggle)
+#CAP_HEIGHT_ADJUST Tallest cap height of strings LEFT, CENTER, and RIGHT in footers; used to place rule over footer
+#CAPS_WAS_ON In HDRFTR, to re-enable running text CAPS (toggle)
+#CENTER_CAP_HEIGHT Cap height of center string in headers/footers
+#CHAPTER The chapter number
+#CLOSING Is there a closing (for letters)? 1=yes
+#COL_L_LENGTH Line length of columns
+#COL_NEXT Was COL_NEXT invoked? (toggle; used in FOOTER)
+#COL_NUM Incrementing counter of num of columns; for use with #COL_&lt;#&gt;_L_MARGIN
+#COL_TOTAL #COL_L_LENGTH + #GUTTER; used to calculate #COL_&lt;#&gt;_L_MARGIN
+#COLUMNS Are columns turned on? (toggle)
+#COPY_STYLE 1=draft, 2=final
+#DATE Is there a date (for letters)? 1=yes
+dc "mark" register for document columns
+#DEPTH_1 Doc header depth with lead adjustment (#DOCHEADER_LINES * #DOCHEADER_LEAD)
+#DEPTH_2 Doc header depth without lead adjustment (#DOCHEADER_LINES * #DOC_LEAD)
+#DEPTH_TO_B_MARGIN Page length minus #B_MARGIN
+#DOCHEADER_ADVANCE Distance from top-of-page to baseline of docheader
+#DOCHEADER_LEAD_ADJ +|- value applied to #DOC_LEAD to in/decrease leading of doc header
+#DOCHEADER_LEAD Lead of doc header (#DOC_LEAD + #DOCHEADER_LEAD_ADJ)
+#DOCHEADER_SPACE_ADJ Lead difference between #DEPTH_1 and #DEPTH_2
+#DOC_HEADER Whether to print a doc header (toggle)
+#DOC_LEAD_ADJ Incrementing value (in units) added to #DOC_LEAD to fill page to #B_MARGIN
+#DOC_LEAD Leading used in body
+#DOC_L_LENGTH Global L_LENGTH
+#DOC_L_MARGIN Global L_MARGIN
+#DOC_LR_MARGIN_TMP In HEADER, if RECTO_VERSO=1, temporarily holds DOC_L_MARGIN during page margin switch
+#DOC_PT_SIZE Point size used for body text
+#DOC_R_MARGIN Global R_MARGIN
+#DOCS Always 1 after START
+#DOC_TYPE 1=default, 2=chapter, 3=named, 4=letter
+#DRAFT The draft number
+#DRAFT_WITH_PAGENUM Are we attaching draft/revision info to page number? (toggle)
+#EM_ADJUST Amount to raise \(em at END
+#EN_PS ps of endnotes
+#EN_LEAD Lead of endnotes
+#EN_STRING_UNDERSCORE Underscore endnotes page head? (toggle)
+#EN_TITLE_UNDERSCORE Underscore endnotes document identifier? (toggle)
+#EN_NUMBERS_ALIGN_RIGHT Hang and align endnote numbers right? (toggle)
+#EN_NUMBERS_ALIGN_LEFT Align endnote numbers with left margin? (toggle)
+#EN_NUMBERS_PLACEHOLDERS Number of placeholders when endnote numbers hang and align right
+#EN_NUMBER_L_LENGTH Line length for endnote numbers when they're right aligned
+#EN_PP_INDENT First line indent of paras in multi-para endnotes
+#EN_PP_SPACE Space multi-paras in endnotes? (toggle)
+#EN_TEXT_INDENT Page offset for text of endnotes when numbers right align
+#END_QUOTE For PP=0 indenting; did we just end a quote? (toggle)
+#ENDNOTE Are we in an endnote? (toggle)
+#EN_HDRFTR_CENTER Should we print centre string of headers/footers on endnotes pages? (toggle)
+#EPI_ACTIVE Are we in an epigraph? (toggle)
+#EPI_DEPTH Depth of epigraph from first baseline to last
+#EPI_FITS Does epigraph fit on page/column? (toggle)
+#EPIGRAPH Did we have an epigraph? (toggle)
+#EPI_LEAD_DIFF Difference between #DOC_LEAD and #EPI_LEAD
+#EPI_LEAD Leading of epigraph; set by AUTOLEAD
+#EPI_LINES_EVEN Even # of lines at end of epi crossing page in TYPEWRITE (d-spaced)?
+#EPI_LINES Number of lines in the epigraph
+#EPI_LINES_TO_END Number of epigraph lines remaining after footer trap is sprung
+#EPI_LINES_TO_TRAP Number of epigraph lines till footer trap is sprung
+#EPI_L_LENGTH Epigraph line length
+#EPI_OFFSET Left margin of epigraphs
+#EPI_OFFSET_VALUE Epigraph indent as a function of page offset
+#EPI_ON Are we in an epigraph? (toggle)
+#EPI_WHITESPACE Space after epigraph to compensate for epigraph leading
+#FN_AUTOLEAD Autolead value of footnotes
+#FN_BL_INDENT Left indent of INDENT BOTH in footnotes
+#FN_BR_INDENT Right indent of INDENT BOTH in footnotes
+#FN_COUNT_FOR_COLS Holds a separate footnote count for columns (so they don't reset to 0 1 until page break)
+#FN_DEFER Defer footnote to next page/column? (toggle) If 0, don't defer.
+#FN_DEFER_SPACE Whether to deposit space before footnote 1 because there's a deferred footnote on the page
+#FN_DEPTH Depth of footnote diversion(s)
+#FN_FOR_EPI Signals to epigraph that a footnote is being processed
+#FN_LEAD Lead in footnotes after FN_AUTOLEAD is applied
+#FN_L_INDENT Left indent of INDENT LEFT in footnotes
+#FN_LINES Number of lines in fn; used to calculate fn depth
+#FN_MARKERS Print footnote markers? (toggle)
+#FN_MARKER_STYLE 1=STAR; 2=NUMBER
+#FN_NUMBER Running count of fn #; used to print fn marker numbers
+#FN_R_INDENT Right indent of INDENT RIGHT in footnotes
+#FN_RULE_ADJ # of points to raise footnote separator from its baseline
+#FN_RULE_LENGTH Length of footnote separator rule
+#FN_RULE Print fn rule? (toggle)
+#FN_WAS_DEFERED Tells HEADER about a defered footnote
+#FOOTER_GAP Amount of space between end of text and page #
+#FOOTER_MARGIN Amount of space between page # and bottom of page
+#FROM Is there an addressor (for letters)? 1=yes
+#FULLSPACE_QUOTES Should we fullspace quotes? (toggle)
+#GREETING Is there a greeting (for letters)? 1=yes
+#GUTTER Width of gutter between columns
+#HDRFTR_CENTER_CAPS Center part of header/footer in caps? (toggle; default=off)
+#HDRFTR_HEIGHT Cap height of $HDRFTR_RECTO/$HDRFTR_VERSO strings
+#HDRFTR_LEFT_CAPS Left part of header/footer in caps? (toggle; default=off)
+#HDRFTR_RIGHT_CAPS Right part of header/footer in caps? (toggle; default=on)
+#HDRFTR_RULE_GAP Space between header/footer and header/footer rule
+#HDRFTR_RULE Print head/footer rule? (toggle)
+#HDRFTR_TMP_CAPS_SWITCH Temporarily holds HDRFTR_LEFT_CAPS value if #SWITCH_HDRFTR=1
+#HEAD 1=main/section head 2=subhead
+#HEAD_CAPS Print section titles in caps? (toggle)
+#HEADER_GAP Distance from header to running text
+#HEADER_MARGIN Distance from top of page to header
+#HEADERS_ON Headers on? (toggle)
+#HEADER_STATE Saves header state in COLLATE for use in START after COLLATE
+#HEAD_NUM Head number
+#HEAD_SPACE 2 line spaces before heads? (toggle; 1=yes, 0=no)
+#HEAD_UNDERLINE Underline section titles? (toggle)
+#IGNORE Should we ignore this macro? Set to 1 in TYPEWRITE.
+#INDENT_FIRST_PARAS Indent first paras? (toggle)
+#INDENT_FIRSTS Tells foonotes to leave INDENT_FIRST_PARAS alone if it's on for running text.
+#ITALIC_MEANS_ITALIC For TYPEWRITE. 1=yes; 0=no
+#LEFT_CAP_HEIGHT Cap height of left string in headers/footers
+#LETTER_STYLE 1=BUSINESS 2=PERSONAL
+#LINEBREAK Did we have a linebreak? (toggle)
+#LINES_PER_PAGE # of lines (at DOC_LEAD) that fit on page after #B_MARGIN is set
+#L_LENGTH_FOR_EPI Stores line length at top of doc for use with EPIGRAPH when columns are on
+#L_MARGIN_DIFF Difference between DOC_L_MARGIN and L_MARGIN
+#n%_AT_PAGENUM_SET Page # from n% when PAGENUMBER invoked
+#NEXT_AUTHOR Supplies correct digit to AUTHOR_&lt;#&gt; when printing authors in doc header
+#NO_TRAP_RESET Should we reset page traps? (toggle)
+#NUM_AUTHORS # of authors mod 2 to test if odd or even # of authors
+#NUMBER_HEAD Are heads numbered? (toggle)
+#NUMBER_PH Are paraheads numbered? (toggle)
+#NUMBER_SH Are subheads numbered? (toggle)
+#NUM_COLS Number of columns per page
+#PAGE_NUM_ADJ What to add to n% to get #PAGENUMBER
+#PAGENUMBER The page number
+#PAGENUM_STYLE_SET Did we set pagenumber style? (toggle)
+#PAGE_NUM_H_POS 1=left 2=center 3=right; default=2
+#PAGE_NUM_HYPHENS Print hyphens surrounding page numbers? (toggle)
+#PAGE_NUM_HYPHENS_SET Did user set (or unset) hyphens around page numbers? (toggle)
+#PAGE_NUM_POS_SET Did user set page number position? (toggle)
+#PAGE_NUM_SET Test if PAGE_1_NUM was used to set 1st page number
+#PAGE_NUMS Print page numbers? (toggle)
+#PAGE_NUM_V_POS 1=top 2=bottom; default=2
+#PAGE_TOP \n(nl after HEADER completes itself
+#PH_NUM Parahead number
+#PAGINATION_STATE Saves pagination state in COLLATE for use in START after a COLLATE
+#PP 0 at first para; auto-increments
+#PP_AT_PAGE_BREAK # of last (incl. partial) para on page
+#PP_INDENT How much to indent paras
+#PP_SPACE Put space before paras? (toggle)
+#PP_SPACE_SUSPEND Suspend para spacing for blockquotes and epigraphs
+#PP_STYLE_PREV In footnotes, stores PP style in effect prior to invoking FOOTNOTE
+#PP_STYLE Regular para=1; quote or epi para=2
+#PRINT_PAGENUM_ON_PAGE_1 Should we print the page number on first page of doc when footers are on? (toggle)
+#PRINT_STYLE Typewrite=1, typeset=2
+#PT_SIZE_IN_UNITS Stored value of \n[.ps] from last time PT_SIZE was called
+#Q_DEPTH Depth of quote
+#Q_FITS Does this quote fit on one page/column? (toggle)
+#Q_L_LENGTH Line length of quotes
+#Q_OFFSET Page offset for quotes
+#Q_OFFSET_VALUE Factor by which to multiply PP_INDENT to offset quotes
+#Q_PP In PP, stores para # in QUOTE. Removed in ENDQUOTE.
+#Q_TOP Vertical place on page that a quote starts
+#QUOTE 1=PQUOTE, 2=BQUOTE
+#RECTO_VERSO Switch HEADER_LEFT and HEADER_RIGHT on alternate pages? (toggle); default=0
+#REPEAT Number of times to repeat linebreak character
+#RESET_EN_PP Holds value of register #EN_PP_INDENT
+#RESET_FN_NUMBER Should fn# start at 1 on every page? (toggle)
+#RESET_L_LENGTH Stores current line length when necessary
+#RESET_PARA_SPACE Holds current value of toggle register #PP_SPACE
+#RESET_PP_INDENT Stores value of PP_INDENT when necessary
+#RESET_QUOTE_SPACING Stores value of toggle register #FULLSPACE_QUOTES (used in endnotes)
+#RESTORE_DOC_LEAD Holds value of current doc lead (used in endnotes)
+#RESTORE_OFFSET Page offset at moment footer trap is sprung; not currently used
+#REVISION The revision number
+#RIGHT_CAP_HEIGHT Cap height of right string in headers/footers
+#SH_LEAD_ADJUST #DOC_LEAD/8 (TYPESET) or /2 (TYPEWRITE) (used for subhead spacing)
+#SH_NUM Subhead number
+#SINGLE_SPACE Is TYPEWRITE in single space mode? (toggle)
+#SLANT_MEANS_SLANT For TYPEWRITE. 1=yes; 0=no
+#SLANT_WAS_ON Keeps track of SLANT when it needs to go off for a while
+#SPACE_REMAINING Space remaining to footer trap; used to decide whether or not to defer a footnote
+#START If 1, signals completion of START
+#START_FOR_FOOTERS Toggle set in START; signals to PRINT_HDRFTR that START has been invoked, allowing PRINT_HDRFTR to decide whether or not to print a footer on page 1
+#SUITE Current page number (for letters)
+#SUP_PT_SIZE Point size of superscript
+#SWITCH_HDRFTR Switch HDRFTR_LEFT and HDRFTR_RIGHT? (toggle)
+#TAB_OFFSET# "#" at the end is from $CURRENT_TAB
+#TO Is there an addressee date (for letters)? 1=yes
+#UNDERLINE_ITALIC For TYPEWRITE. 1=yes; 0=no
+#UNDERLINE_QUOTE Underline pquotes? (toggle)
+#UNDERLINE_SLANT For TYPEWRITE. 1=yes; 0=no
+#UNDERLINE_WAS_ON In HEADER to re-enable running text UNDERLINE (toggle)
+#USERDEF_HDRFTR User defined single string recto/verso header/footer? (toggle)
+#USERDEF_HDRFTR_RECTO_QUAD 1=left, 2=center, 3=right
+#USERDEF_HDRFTR_VERSO_QUAD 1=left, 2=center, 3=right
+#USER_DEF_HEADER_CENTER User defined center title? (1=yes); used in COPYSTYLE
+#USER_DEF_HEADER_LEFT User defined center title? (1=yes); used in COPYSTYLE
+#USER_DEF_HEADER_RIGHT User defined center title? (1=yes); used in COPYSTYLE
+#VARIABLE_FOOTER_POS Wandering trap position for processing footnotes and footers; pos depends on footnotes
+
++++STRINGS+++
+
+$ATTRIBUTE_STRING "by" line in doc header
+$AUTHOR_1...9 Document author(s)
+$AUTHOR_FAM Family to use for author in doc header
+$AUTHOR_FT Font to use for author in doc header
+$AUTHOR_SIZE_CHANGE ps in/decrease of author in doc header*
+$BQUOTE_FAM Family to use for blockquotes
+$BQUOTE_FT Font to use for blockquotes
+$BQUOTE_QUAD Quad value for blockquotes
+$BQUOTE_SIZE_CHANGE ps in/decrease of blockquotes*
+$CENTER_TITLE What to put in the middle of header title
+$CHAPTER_STRING What to print whenever the word "chapter" is required
+$COPY_STYLE DRAFT or FINAL
+$DOC_FAM Predominant font family used in the document
+$DOC_QUAD Quad used for body text (justified or left)
+$DOC_TYPE Document type (default, chapter, named, letter)
+$DOCTYPE_FAM Family to use for DOCTYPE string in doc header
+$DOCTYPE_FT Font to use for DOCTYPE string in doc header
+$DOCTYPE_SIZE_CHANGE ps in/decrease of DOCTYPE string in doc header*
+$DRAFT_STRING What to print whenever the word "draft" is required
+$EN_FAMILY Family for endnotes
+$EN_FT Font for endnotes
+$EN_QUAD Quad for endnotes
+$EN_STRING Endnotes page head
+$EN_STRING_FAM Endnotes page head family
+$EN_STRING_FT Endnotes page head font
+$EN_STRING_QUAD Endnotes page head quad direction
+$EN_STRING_SIZE_CHANGE Endnotes page head size***
+$EN_TITLE Endnote document identifier
+$EN_TITLE_FAM Endnote document identifier family
+$EN_TITLE_FT Endnote document identifier font
+$EN_TITLE_QUAD Endnote document identifier quad direction
+$EN_TITLE_SIZE_CHANGE Endnote document identifier size***
+$EN_NUMBER_FAM Endnote numbering family
+$EN_NUMBER_FT Endnote numbering font
+$EN_NUMBER_SIZE_CHANGE Endnote numbering size***
+$EPI_AUTOLEAD Autolead value (decimals ok) of epigraphs
+$EPI_FAM Family to use in epigraphs
+$EPI_FT Font to use in epigraphs
+$EPI_QUAD Quad in block-style epigraphs (justified or left)
+$EPI_SIZE_CHANGE ps in/decrease of epigraphs*
+$FINIS_STRING What to print when FINIS macro is invoked
+$FN_FAM Family used in footnotes
+$FN_FT Font used in footnotes
+$FN_QUAD Quad used in footnotes
+$FN_SIZE_CHANGE ps in/decrease of footnotes*
+$HDRFTR_CENTER_FAM Family of center part of headers
+$HDRFTR_CENTER_FT Font of center part of headers
+$HDRFTR_CENTER_SIZE_CHANGE ps in/decrease of center title in headers**
+$HDRFTR_CENTER What to put in center part of headers; default doctype
+$HDRFTR_FAM Family to use in headers
+$HDRFTR_LEFT_FAM Family of left part of headers
+$HDRFTR_LEFT_FT Font of left part of headers
+$HDRFTR_LEFT_SIZE_CHANGE ps in/decrease of author in headers**
+$HDRFTR_LEFT What to put in left part of headers; default author
+$HDRFTR_RIGHT_FAM Family of right part of headers
+$HDRFTR_RIGHT_FT Font of right part of headers
+$HDRFTR_RIGHT_SIZE_CHANGE ps in/decrease of right part of headers**
+$HDRFTR_RIGHT What to put in right part of headers; default title
+$HDRFTR_SIZE_CHANGE ps in/decrease of headers*
+$HDRFTR_TMP_SIZE_CHANGE_SWITCH Temporarily holds HDRFTR_LEFT_SIZE_CHANGE if #SWITCH_HDRFTRS=1
+$HDRFTR_TMP_SWITCH Temporarily holds HDRFTR_LEFT if #SWITCH_HDRFTRS=1
+$HEAD_FAM Family to use for section titles
+$HEAD_FT Font to use for section titles
+$HEAD_QUAD Quad valude of section titles
+$HEAD_SIZE_CHANGE ps in/decrease of section titles*
+$LINEBREAK_CHAR Character that marks line breaks
+$LINEBREAK_CHAR_V_ADJ +|- amount by which to raise/lower linebreak character
+PAGE# For use in hdrftr strings where page # is needed; \*[PAGE]
+$PAGENUM_STYLE String passed to PAGENUM_STYLE
+$PAGE_NUM_FAM Family of page numbers
+$PAGE_NUM_FT Font of page numbers
+$PAGE_NUM_SIZE_CHANGE ps in/decrease of page numbers
+$PAPER Paper size (LETTER, A4, LEGAL); default=LETTER
+$PP_FT Font used in paragraphs
+$QUOTE_FAM Family to use for pquotes
+$QUOTE_FT Font to use for pquotes
+$QUOTE_SIZE_CHANGE ps in/decrease of pquotes*
+$REVISION_STRING What to print whenever the word "revision" is required
+$SH_FAM Family to use in subheads
+$SH_FT Font to use in subheads
+$SH_SIZE_CHANGE ps in/decrease of subheads*
+$SUBTITLE Document subtitle
+$SUBTITLE_FAM Family to use for subtitle in doc header
+$SUBTITLE_FT Font to use for subtitle in doc header
+$SUBTITLE_SIZE_CHANGE Font to use for subtitle in doc header
+$SUITE The #SUITE number register
+$TITLE Document title
+$TITLE_FAM Family to use for title in doc header
+$TITLE_FT Font to use for title in doc header
+$TITLE_SIZE_CHANGE ps in/decrease of title in doc header*
+$USERDEF_HDRFTR_RECTO User defined header/footer recto string
+$USERDEF_HDRFTR_VERSO User defined header/footer verso string
+
+ *relative to #DOC_PT_SIZE
+ **relative to overall ps of headers as set by HEADER_SIZE
+***relative to overall ps of endnotes
+
++++PREPROCESSOR KEYWORDS+++
+
+(eqn)
+EQ
+EN
+
+(grn)
+GS
+GE
+GF
+
+(pic)
+PS
+PE
+
+(refer)
+R1
+R2
+[
+]
+
+(tbl)
+TS
+TE
+TH
+
+(grap)
+G1
+G2
+
+(ideal)
+IS
+IE
+
+(chem)
+cstart
+cend
+
++++ALIASES+++
+
+BREAK_BLOCKQUOTE BREAK_QUOTE
+BREAK_CITATION BREAK_QUOTE
+BREAK_CITE BREAK_QUOTE
+CITATION BLOCKQUOTE
+CITE BLOCKQUOTE
+COL_BREAK COL_NEXT
+DOC_FAM DOC_FAMILY
+DOC_LLENGTH DOC_LINE_LENGTH
+DOC_L_LENGTT DOC_LINE_LENGTH
+DOC_L_MARGIN DOC_LEFT_MARGIN
+DOC_LMARGIN DOC_LEFT_MARGIN
+DOC_LS DOC_LEAD
+DOC_PS DOC_PT_SIZE
+DOC_R_MARGIN DOC_RIGHT_MARGIN
+DOC_RMARGIN DOC_RIGHT_MARGIN
+FOOTER_CENTER_CAPS HDRFTR_CENTER_CAPS
+FOOTER_CENTER_FAM HDRFTR_CENTER_FAMILY
+FOOTER_CENTER_FAMILY HDRFTR_CENTER_FAMILY
+FOOTER_CENTER_FONT HDRFTR_CENTER_FONT
+FOOTER_CENTER_FT HDRFTR_CENTER_FONT
+FOOTER_CENTER HDRFTR_CENTER
+FOOTER_CENTER_PS HDRFTR_CENTER_SIZE
+FOOTER_CENTER_SIZE HDRFTR_CENTER_SIZE
+FOOTER_CENTRE_CAPS HDRFTR_CENTER_CAPS
+FOOTER_CENTRE_FAM HDRFTR_CENTER_FAMILY
+FOOTER_CENTRE_FAMILY HDRFTR_CENTER_FAMILY
+FOOTER_CENTRE_FT HDRFTR_CENTER_FONT
+FOOTER_CENTRE HDRFTR_CENTER
+FOOTER_CENTRE_PS HDRFTR_CENTER_SIZE
+FOOTER_CENTRE_SIZE HDRFTR_CENTER_SIZE
+FOOTER_FAM HDRFTR_FAMILY
+FOOTER_FAMILY HDRFTR_FAMILY
+FOOTER_LEFT_CAPS HDRFTR_LEFT_CAPS
+FOOTER_LEFT_FAM HDRFTR_LEFT_FAMILY
+FOOTER_LEFT_FAMILY HDRFTR_LEFT_FAMILY
+FOOTER_LEFT_FONT HDRFTR_LEFT_FONT
+FOOTER_LEFT_FT HDRFTR_LEFT_FONT
+FOOTER_LEFT HDRFTR_LEFT
+FOOTER_LEFT_PS HDRFTR_LEFT_SIZE
+FOOTER_LEFT_SIZE HDRFTR_LEFT_SIZE
+FOOTER_PLAIN HDRFTR_PLAIN
+FOOTER_RECTO HDRFTR_RECTO
+FOOTER_RIGHT_CAPS HDRFTR_RIGHT_CAPS
+FOOTER_RIGHT_FAM HDRFTR_RIGHT_FAMILY
+FOOTER_RIGHT_FAMILY HDRFTR_RIGHT_FAMILY
+FOOTER_RIGHT_FONT HDRFTR_RIGHT_FONT
+FOOTER_RIGHT_FT HDRFTR_RIGHT_FONT
+FOOTER_RIGHT HDRFTR_RIGHT
+FOOTER_RIGHT_PS HDRFTR_RIGHT_SIZE
+FOOTER_RIGHT_SIZE HDRFTR_RIGHT_SIZE
+FOOTER_RULE_GAP HDRFTR_RULE_GAP
+FOOTER_RULE HDRFTR_RULE
+FOOTER_SIZE HDRFTR_SIZE
+FOOTER_VERSO HDRFTR_VERSO
+HDRFTR_RULE_INTERNAL HDRFTR_RULE
+HEADER_CENTER_CAPS HDRFTR_CENTER_CAPS
+HEADER_CENTER_FAM HDRFTR_CENTER_FAMILY
+HEADER_CENTER_FAMILY HDRFTR_CENTER_FAMILY
+HEADER_CENTER_FONT HDRFTR_CENTER_FONT
+HEADER_CENTER_FT HDRFTR_CENTER_FONT
+HEADER_CENTER HDRFTR_CENTER
+HEADER_CENTER_PS HDRFTR_CENTER_SIZE
+HEADER_CENTER_SIZE HDRFTR_CENTER_SIZE
+HEADER_CENTRE_CAPS HDRFTR_CENTER_CAPS
+HEADER_CENTRE_FAM HDRFTR_CENTER_FAMILY
+HEADER_CENTRE_FAMILY HDRFTR_CENTER_FAMILY
+HEADER_CENTRE_FONT HDRFTR_CENTER_FONT
+HEADER_CENTRE_FT HDRFTR_CENTER_FONT
+HEADER_CENTRE HDRFTR_CENTER
+HEADER_CENTRE_PS HDRFTR_CENTER_SIZE
+HEADER_CENTRE_SIZE HDRFTR_CENTER_SIZE
+HEADER_FAM HDRFTR_FAMILY
+HEADER_FAMILY HDRFTR_FAMILY
+HEADER_LEFT_CAPS HDRFTR_LEFT_CAPS
+HEADER_LEFT_FAM HDRFTR_LEFT_FAMILY
+HEADER_LEFT_FAMILY HDRFTR_LEFT_FAMILY
+HEADER_LEFT_FONT HDRFTR_LEFT_FONT
+HEADER_LEFT_FT HDRFTR_LEFT_FONT
+HEADER_LEFT HDRFTR_LEFT
+HEADER_LEFT_PS HDRFTR_LEFT_SIZE
+HEADER_LEFT_SIZE HDRFTR_LEFT_SIZE
+HEADER_PLAIN HDRFTR_PLAIN
+HEADER_RECTO HDRFTR_RECTO
+HEADER_RIGHT_CAPS HDRFTR_RIGHT_CAPS
+HEADER_RIGHT_FAM HDRFTR_RIGHT_FAMILY
+HEADER_RIGHT_FAMILY HDRFTR_RIGHT_FAMILY
+HEADER_RIGHT_FONT HDRFTR_RIGHT_FONT
+HEADER_RIGHT_FT HDRFTR_RIGHT_FONT
+HEADER_RIGHT HDRFTR_RIGHT
+HEADER_RIGHT_PS HDRFTR_RIGHT_SIZE
+HEADER_RIGHT_SIZE HDRFTR_RIGHT_SIZE
+HEADER_RULE_GAP HDRFTR_RULE_GAP
+HEADER_RULE HDRFTR_RULE
+HEADER_SIZE HDRFTR_SIZE
+HEADER_VERSO HDRFTR_VERSO
+PAGENUM PAGENUMBER
+PAGINATION PAGINATE
+PP_FT PP_FONT
+PRINT_FOOTNOTE_RULE FOOTNOTE_RULE
+SWITCH_FOOTERS SWITCH_HDRFTR
+SWITCH_HEADERS SWITCH_HDRFTR
+</pre>
+
+<hr>
+<a href="appendices.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/toc.html b/contrib/groff/contrib/mom/momdoc/toc.html
new file mode 100644
index 0000000..e3dccf1
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/toc.html
@@ -0,0 +1,208 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Table of Contents</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<h1><u>Table of Contents</u></h1>
+<ul>
+ <li><a href="intro.html#INTRO"><strong>1. WHAT IS MOM?</strong></a>
+ <ul>
+ <li><a href="intro.html#INTRO_INTRO">1.1 Who is mom meant for?</a>
+ <li><a href="intro.html#INTRO_TYPESETTING">1.2 Typesetting with mom</a>
+ <li><a href="intro.html#INTRO_DOCPROCESSING">1.3 Document processing with mom</a>
+ <li><a href="intro.html#INTRO_PHILOSOPHY">1.4 Mom's philosophy</a>
+ <li><a href="intro.html#INTRO_DOCUMENTATION">1.5 A note on mom's documentation</a>
+ <ul>
+ <li><a href="intro.html#MACRO_ARGS">1.5.1 How to read macro arguments</a>
+ <li><a href="intro.html#TOGGLE_MACRO">1.5.2 &quot;Toggle&quot; macros</a>
+ </ul>
+ </ul>
+ <li><a href="definitions.html#TERMS"><strong>2. DEFINITIONS OF TERMS USED IN THIS MANUAL</strong></a>
+ <ul>
+ <li><a href="definitions.html#TERMS_TYPESETTING">2.1 Typesetting terms</a>
+ <li><a href="definitions.html#TERMS_GROFF">2.2 Groff terms</a>
+ <li><a href="definitions.html#TERMS_MOM">2.3 Mom's document processing terms</a>
+ </ul>
+ <li><a href="using.html#USING"><strong>3. USING MOM</strong></a>
+ <ul>
+ <li><a href="using.html#USING_INTRO">3.1 Introduction</a>
+ <li><a href="using.html#USING_MACROS">3.2 How to input mom's macros</a>
+ <li><a href="using.html#USING_INVOKING">3.3 Printing -- invoking groff with mom</a>
+ <li><a href="using.html#USING_PREVIEWING">3.4 How to preview documents</a>
+ </ul>
+ <li><a href="typesetting.html#MACROS_TYPESETTING"><strong>4. THE TYPESETTING MACROS</strong></a>
+ <ul>
+ <li><a href="typesetting.html#INTRO_MACROS_TYPESETTING">4.1 Introduction to the typesetting macros</a>
+ <br>
+ <li><a href="typesetting.html#PAGE_MARGINS"><strong>4.2 Page Setup</strong></a> -- paper size and page margins
+ <ul>
+ <li><a href="typesetting.html#INDEX_SETUP">4.2.1 Macro list</a>
+ </ul>
+ <li><a href="typesetting.html#BASIC_PARAMS"><strong>4.3 Basic Parameters</strong></a> -- family, font, point size, line space, line length, autolead
+ <ul>
+ <li><a href="typesetting.html#INDEX_BASIC">4.3.1 Macro list</a>
+ </ul>
+ <li><a href="typesetting.html#JUST_QUAD_FILL"><strong>4.4 Justifying, Quadding, Filling and Breaking Lines</strong></a>
+ <ul>
+ <li><a href="typesetting.html#INDEX_JUST">4.4.1 Macro list</a>
+ </ul>
+ <li><a href="typesetting.html#REFINEMENTS"><strong>4.5 Refinements</strong></a> -- word space, sentence space, letter spacing (track kerning), hyphenation, kerning, ligatures
+ <ul>
+ <li><a href="typesetting.html#INDEX_REFINEMENTS">4.5.1 Macro list</a>
+ </ul>
+ <li><a href="typesetting.html#MODIFICATIONS"><strong>4.6 Modifying Type</strong></a> -- pseudo-italic, -bold, -condensed, and -extended
+ <ul>
+ <li><a href="typesetting.html#INDEX_MODIFICATIONS">4.6.1 Macro list</a>
+ </ul>
+ <li><a href="typesetting.html#ALDRLD"><strong>4.7 Vertical Movements</strong></a> -- moving up and down on the page
+ <ul>
+ <li><a href="typesetting.html#INDEX_ALDRLD">4.7.1 Macro list</a>
+ </ul>
+ <li><a href="typesetting.html#TABS"><strong>4.8 Tabs</strong></a>
+ <ul>
+ <li><a href="typesetting.html#TYPESETTING_TABS">4.8.1 Typesetting tabs</a>
+ <ul>
+ <li><a href="typesetting.html#TYPESETTING_TABS_TUT">4.8.1.1 Quickie tutorial</a>
+ </ul>
+ <li><a href="typesetting.html#STRING_TABS">4.8.2 String tabs (autotabs)</a>
+ <ul>
+ <li><a href="typesetting.html#STRING_TABS_TUT">4.8.2.1 Quickie tutorial</a>
+ </ul>
+ <li><a href="typesetting.html#INDEX_TABS">4.8.3 Macro list</a>
+ </ul>
+ <li><a href="typesetting.html#MULTI_COLUMNS"><strong>4.9 Multi-columns</strong></a>
+ <ul>
+ <li><a href="typesetting.html#INDEX_MULTI_COLUMNS">4.9.1 Macro list</a>
+ </ul>
+ <li><a href="typesetting.html#INDENTS"><strong>4.10 Indents</strong></a>
+ <ul>
+ <li><a href="typesetting.html#INDENTS_TUT">4.10.1 A brief explanation of how mom handles indents</a>
+ <li><a href="typesetting.html#INDEX_INDENTS">4.10.2 Macro list</a>
+ </ul>
+ <li><a href="goodies.html#GOODIES"><strong>4.11 Goodies</strong></a> -- aliases,
+ transparent lines, smartquotes, caps,
+ underscoring/underlining, padding lines, leaders, drop
+ caps, superscripts
+ <ul>
+ <li><a href="goodies.html#INDEX_GOODIES">4.11.1 Macro list</a>
+ </ul>
+ <li><a href="inlines.html#INLINE_ESCAPES"><strong>4.12 Inline Escapes</strong></a>
+ <ul>
+ <li><a href="inlines.html#INTRO_INLINE_ESCAPES">4.12.1 Introduction to inline escapes</a>
+ <li><a href="inlines.html#INLINES_MOM">4.12.2 Mom's personal inlines</a>
+ <li><a href="inlines.html#INLINES_GROFF">4.12.3 Groff inlines</a>
+ <li><a href="inlines.html#INLINE_CHARACTERS_GROFF">4.12.3.1 Inlines for special characters and symbols</a>
+ </ul>
+ </ul>
+ <li><a href="docprocessing.html#DOCPROCESSING"><strong>5. DOCUMENT PROCESSING WITH MOM</strong></a>
+ <ul>
+ <li><a href="docprocessing.html#INTRO_MACROS_DOCPROCESSING">5.1 Introduction to document processing</a>
+ <li><a href="docprocessing.html#DEFAULTS">5.2 Some document defaults</a>
+ <ul>
+ <li><a href="docprocessing.html#LEADING_NOTE">IMPORTANT NOTE on leading/spacing and bottom margins</a>
+ </ul>
+ <li><a href="docprocessing.html#SETUP"><strong>5.3 PRELIMINARY DOCUMENT SETUP</strong></a>
+ <ul>
+ <li><a href="docprocessing.html#DOCPROCESSING_TUT">5.3.1 Tutorial</a> -- setting up a mom document
+ <br>
+ <li><a href="docprocessing.html#REFERENCE_MACROS"><strong>5.3.2 The Reference Macros</strong></a>
+ <ul>
+ <li><a href="docprocessing.html#TITLE">5.3.2.1 TITLE</a>
+ <li><a href="docprocessing.html#SUBTITLE">5.3.2.2 SUBTITLE</a>
+ <li><a href="docprocessing.html#AUTHOR">5.3.2.3 AUTHOR</a>
+ <li><a href="docprocessing.html#CHAPTER">5.3.2.4 CHAPTER</a>
+ <li><a href="docprocessing.html#DRAFT">5.3.2.5 DRAFT</a>
+ <li><a href="docprocessing.html#REVISION">5.3.2.6 REVISION</a>
+ </ul>
+ <li><a href="docprocessing.html#DOCSTYLE_MACROS"><strong>5.3.3 The Docstyle Macros</strong></a>
+ <ul>
+ <li><a href="docprocessing.html#DOCTYPE">5.3.3.1 DOCTYPE</a> -- kind of document
+ <li><a href="docprocessing.html#PRINTSTYLE">5.3.3.2 PRINTSTYLE</a> -- typeset or typewrite
+ <li><a href="docprocessing.html#COPYSTYLE">5.3.3.3 COPYSTYLE</a> -- draft or final
+ </ul>
+ <li><a href="docprocessing.html#STYLE_BEFORE_START"><strong>5.3.4 Changing Type and Style Parameters <em>before</em> START</strong></a>
+ <ul>
+ <li><a href="docprocessing.html#TYPE_BEFORE_START">5.3.4.1 Typesetting macros</a> -- usage
+ <li><a href="docprocessing.html#DOC_LEAD_ADJUST">5.3.4.2 DOC_LEAD_ADJUST</a> -- adjust document leading to fill pages
+ <li><a href="docprocessing.html#DOCHEADER">5.3.4.3 DOCHEADER</a> -- managing the docheader
+ <li><a href="docprocessing.html#COLUMNS_INTRO">5.3.4.4 COLUMNS</a> -- setting documents in columns
+ </ul>
+ <li><a href="docprocessing.html#START_MACRO"><strong>5.3.5 ***START***</strong></a> -- the macro to initiate document processing
+ <br>
+ <li><a href="docprocessing.html#DOC_PARAM_MACROS"><strong>5.3.6 Changing Document-wide Style Parameters <em>after</em> START</strong></a>
+ <ul>
+ <li><a href="docprocessing.html#INDEX_DOC_PARAM">5.3.6.1 Macro list</a>
+ </ul>
+ </ul>
+ <li><a href="docelement.html#DOCELEMENT"><strong>5.4 THE DOCUMENT ELEMENT TAGS</strong></a>
+ <ul>
+ <li><a href="docelement.html#DOCELEMENT_INTRO">5.4.1 Introduction to the document element tags</a>
+ <ul>
+ <li><a href="docelement.html#DOCELEMENT_CONTROL">Control macros</a> -- changing style defaults for document element tags
+ <li><a href="docelement.html#CONTROL_MACRO_ARGS">Arguments to the control macros</a>
+ </ul>
+ <li><a href="docelement.html#EPIGRAPH_INTRO">5.4.2 Epigraphs</a>
+ <li><a href="docelement.html#PP_INTRO">5.4.3 Paragraphs</a>
+ <li><a href="docelement.html#HEAD_INTRO">5.4.4 Main heads</a>
+ <li><a href="docelement.html#SUBHEAD_INTRO">5.4.5 Subheads</a>
+ <li><a href="docelement.html#PARAHEAD_INTRO">5.4.6 Paragraph heads</a>
+ <li><a href="docelement.html#LINEBREAK_INTRO">5.4.7 Linebreaks</a> -- author linebreaks
+ <li><a href="docelement.html#QUOTE_INTRO">5.4.8 Quotes</a> -- line for line poetic quotes
+ <li><a href="docelement.html#BLOCKQUOTE_INTRO">5.4.9 Blockquotes</a> -- cited material
+ <li><a href="docelement.html#FOOTNOTE_INTRO">5.4.10 Footnotes</a>
+ <li><a href="docelement.html#ENDNOTE_INTRO">5.4.11 Endnotes</a>
+ <li><a href="docelement.html#FINIS_INTRO">5.4.12 Document termination</a> -- FINIS
+ </ul>
+ <li><a href="headfootpage.html#HEADFOOTPAGE"><strong>5.5 DOCUMENT HEADERS AND FOOTERS</strong></a>
+ <ul>
+ <li><a href="headfootpage.html#HEADFOOTPAGE_INTRO">5.5.1 Introduction</a>
+ <li><a href="headfootpage.html#DESCRIPTION_GENERAL">5.5.2 General description of headers/footers</a>
+ <li><a href="headfootpage.html#HEADER_STYLE">5.5.3 Default specs for headers/footers</a>
+ <li><a href="headfootpage.html#VERTICAL_SPACING">5.5.4 Vertical placement and spacing of headers/footers</a>
+ <li><a href="headfootpage.html#HEADFOOT_MANAGEMENT">5.5.5 Managing headers/footers</a>
+ <ul>
+ <li><a href="headfootpage.html#USERDEF_HDRFTR">5.5.5.1 User-defined, single string recto/verso headers/footers</a>
+ </ul>
+ <li><a href="headfootpage.html#HEADFOOT_CONTROL">5.5.6 Control macros for headers/footers</a>
+ </ul>
+ <li><a href="headfootpage.html#PAGINATION"><strong>5.6 PAGINATION</strong></a>
+ <ul>
+ <li><a href="headfootpage.html#PAGINATION">Introduction</a>
+ <li><a href="headfootpage.html#INDEX_PAGINATION">Pagination macros list</a>
+ </ul>
+ <li><a href="rectoverso.html#RECTOVERSO"><strong>5.7 RECTO/VERSO PRINTING AND COLLATING</strong></a>
+ <ul>
+ <li><a href="rectoverso.html#RECTOVERSO_INTRO">5.7.1 Introduction to recto/verso</a>
+ <ul>
+ <li><a href="rectoverso.html#RECTOVERSO_LIST">5.7.1.1 Macro list</a>
+ </ul>
+ <li><a href="rectoverso.html#COLLATE_INTRO">5.7.2 Introduction to collating</a>
+ <ul>
+ <li><a href="rectoverso.html#COLLATE">5.7.2.1 The COLLATE macro</a>
+ </ul>
+ </ul>
+ <li><a href="cover.html#RECTOVERSO"><strong>5.8 CREATING A COVER PAGE</strong></a>
+ <br>
+ <li><a href="letters.html#LETTERS"><strong>5.9 WRITING LETTERS</strong></a>
+ <ul>
+ <li><a href="letters.html#LETTERS_INTRO">5.9.1 Introduction to writing letters</a>
+ <li><a href="letters.html#TUTORIAL">5.9.2 Tutorial on writing letters</a>
+ <li><a href="letters.html#LETTERS_DEFAULTS">5.9.3 Default style for letters</a>
+ <li><a href="letters.html#LETTERS_MACROS">5.9.4 The letter macros</a>
+ </ul>
+ <li><a href="typemacdoc.html#TYPESETTING"><strong>5.10 USING TYPESETTING MACROS DURING DOCUMENT PROCESSING</strong></a>
+ </ul>
+ <li><a href="appendices.html#APPENDICES"><strong>6. APPENDICES</strong></a>
+ <ul>
+ <li><a href="appendices.html#MOREDOC">6.1 Further notes on this documentation</a>
+ <li><a href="appendices.html#CODENOTES">6.2 Some reflections on mom</a>
+ <li><a href="reserved.html#RESERVED">6.3 List of reserved words</a>
+ <li><a href="appendices.html#CONTACT">6.4 Contact the author</a>
+ </ul>
+</ul>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/typemacdoc.html b/contrib/groff/contrib/mom/momdoc/typemacdoc.html
new file mode 100644
index 0000000..ef23d08
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/typemacdoc.html
@@ -0,0 +1,169 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Typesetting macros in document processing</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="appendices.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="letters.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="TYPESETTING">
+ <h1 align="center"><u>USING TYPESETTING MACROS DURING DOCUMENT PROCESSING</u></h1>
+</a>
+
+During document processing, most of the
+<a href="typesetting.html#MACROS_TYPESETTING">typesetting macros</a>
+affect type in the document globally. For example, if you turn kerning
+off, pairwise kerning is disabled not only in paragraphs, but
+also in headers, footers, quotes, and so on.
+<p>
+Typesetting macros that alter margins and line lengths affect
+<a href="definitions.html#TERMS_RUNNING">running text</a>
+globally (or at least try to), but leave headers/footers and footnotes
+alone. (To indent footnotes, see the full explanation of the
+<a href="docelement.html#FOOTNOTE">FOOTNOTE</a>
+macro.)
+<p>
+There are, however, some typesetting macros that, used during document
+processing, behave in special ways. These are the macros that deal
+with the basic parameters of type style: horizontal and vertical margins,
+line length,
+<a href="definitions.html#TERMS_FAMILY">family</a>,
+<a href="definitions.html#TERMS_FONT">font</a>,
+point size,
+<a href="definitions.html#TERMS_LEADING">leading</a>,
+and
+<a href="definitions.html#TERMS_QUAD">quad</a>.
+<p>
+<strong>NOTE:</strong> See the section on
+<a href="#TB_MARGINS">Top and bottom margins in document processing</a>
+for information on how <strong>mom</strong> interprets
+<a href="typesetting.html#T_MARGIN">T_MARGIN</a>
+and
+<a href="typesetting.html#B_MARGIN">B_MARGIN</a>
+in document processing.
+
+<p>
+<strong>Mom</strong> assumes that any changes to these parameters
+stem from a temporary need to set type in a style different from that
+provided by <strong>mom</strong>'s
+<a href="docelement.html#INDEX_DOCELEMENT">document element tags</a>.
+In other words, you need to do a bit of creative typesetting in the
+middle of a document.
+<p>
+The following lists those typesetting macros whose behaviour during
+document processing requires some explanation.
+<p>
+<pre>
+MACRO EFFECT DURING DOCUMENT PROCESSING
+----- ---------------------------------
+
+L_MARGIN *The left margin of all running text
+ assumes the new value.
+
+ *The line length remains unaltered.
+
+ *The header and footer left margin
+ remain at the current document default.
+
+ (You won't use this often by itself. Most
+ likely, you'll use it in combination with
+ R_MARGIN or LL.)
+
+R_MARGIN *The right margin of all running text
+ assumes the new value. In other words,
+ the line length is altered.
+
+ *The header and footer right margin
+ remain at the current document default.
+
+LL *The line length of all running text
+ is set to the new value.
+
+ *The header and footer line length remain
+ at the current document default.
+
+FAMILY *Changes family for the duration of the
+ current tag only. As soon as another document
+ element tag is invoked, the family reverts to
+ the current default for the new tag.
+
+FT *Changes font for the duration of the
+ current tag only. As soon as another document
+ element tag is entered, the font reverts
+ to the current default for the new tag.
+
+ N.B. -- \*[SLANT] and \*[BOLDER] affect
+ paragraph text, and remain in effect for all
+ paragraphs until turned off. If you want to
+ use them in a macro that takes a string
+ argument, include the escape in the string.
+ \*[COND] and \*[EXT] behave similarly.
+
+PT_SIZE *Changes point size for the duration of the
+ current tag only. As soon as another document
+ element tag is entered, the point size reverts
+ to the current document default for the new
+ tag.
+
+LS *Changes line space for the duration of the
+ current tag only. As soon as another document
+ element tag is entered, the line space reverts to
+ the current document default for the new
+ tag. Highly NOT recommended, since changes to
+ a document's leading interfere with mom's
+ ability to balance bottom margins.
+
+QUAD *Changes quad for the duration of the
+ current tag only. As soon as another document
+ element tag is entered, the quad reverts to
+ the current document default for the new
+ tag.
+
+ N.B. -- Line-for-line quadding macros
+ (LEFT, CENTER, RIGHT) are also temporary,
+ overridden by the QUAD value of any subsequent
+ document element tag.
+</pre>
+<hr>
+
+<!=====================================================================>
+
+<a name="TB_MARGINS">
+ <h2><u>Top and bottom margins in document processing</u></h2>
+</a>
+
+Normally, <strong>mom</strong> establishes the top and bottom margins
+of
+<a href="definitions.html#TERMS_RUNNING">running text</a>
+in documents from the values of <strong>HEADER_MARGIN +
+HEADER_GAP</strong> and <strong>FOOTER_MARGIN + FOOTER_GAP</strong>
+respectively. However, if you invoke
+<a href="typesetting.html#T_MARGIN">T_MARGIN</a>
+or
+<a href="typesetting.html#B_MARGIN">B_MARGIN</a>
+either before or after
+<a href="docelement.html#START">START</a>,
+they set the top and bottom margins of running text irrespective
+of <strong>HEADER_GAP</strong> and <strong>FOOTER_GAP</strong>.
+<p>
+Put another way, in document processing, <strong>T_MARGIN</strong>
+and <strong>B_MARGIN</strong> set the top and bottom margins of
+running text, but have no effect on the placement of
+<a href="definitions.html#TERMS_HEADER">headers</a>,
+<a href="definitions.html#TERMS_FOOTER">footers</a>,
+or page numbers.
+
+<p>
+<hr>
+<a href="appendices.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="letters.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/typesetting.html b/contrib/groff/contrib/mom/momdoc/typesetting.html
new file mode 100644
index 0000000..ad79b35
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/typesetting.html
@@ -0,0 +1,3744 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Mom -- Typesetting Macros</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="goodies.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="definitions.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="MACROS_TYPESETTING">
+ <h1 align="center"><u>THE TYPESETTING MACROS</u></h1>
+</a>
+
+<a href="#INTRO_MACROS_TYPESETTING">Introduction to the typesetting macros</a>
+<br>
+<ul>
+ <li><strong>PAGE SETUP</strong>
+ <ul>
+ <li><a href="#INTRO_SETUP">Introduction to Page Setup</a>
+ <li><a href="#INDEX_SETUP">List of macros</a>
+ </ul>
+ <li><strong>BASIC TYPESETTING PARAMETERS</strong>
+ <ul>
+ <li><a href="#INTRO_BASIC_PARAMS">Introduction to Basic Parameters</a>
+ <li><a href="#INDEX_BASIC">List of macros</a>
+ </ul>
+ <li><strong>JUSTIFYING, QUADDING, FILLING, BREAKING LINES</strong>
+ <ul>
+ <li><a href="#INTRO_JUST_QUAD_FILL">Introduction to justify, quad, fill, break</a>
+ <li><a href="#INDEX_JUST">List of macros</a>
+ </ul>
+ <li><strong>TYPOGRAPHIC REFINEMENTS</strong>
+ <ul>
+ <li><a href="#INTRO_REFINEMENTS">Introduction to typographic refinements</a>
+ <li><a href="#INDEX_REFINEMENTS">List of macros</a>
+ </ul>
+ <li><strong>TYPE MODIFICATIONS -- pseudo italic, bold, condense, extend</strong>
+ <ul>
+ <li><a href="#INTRO_MODIFICATIONS">Introduction to type modifications</a>
+ <li><a href="#INDEX_MODIFICATIONS">List of macros</a>
+ </ul>
+ <li><strong>VERTICAL MOVEMENTS</strong>
+ <ul>
+ <li><a href="#INTRO_ALDRLD">Introduction to vertical movements</a>
+ <li><a href="#INDEX_ALDRLD">List of macros</a>
+ </ul>
+ <li><strong>TABS</strong>
+ <ul>
+ <li><a href="#INTRO_TABS">Introduction to tabs</a>
+ <li><a href="#TYPESETTING_TABS">Typesetting tabs</a>
+ <ul>
+ <li><a href="#TYPESETTING_TABS_TUT">Quickie tutorial</a>
+ </ul>
+ <li><a href="#STRING_TABS">String tabs</a>
+ <ul>
+ <li><a href="#STRING_TABS_TUT">Quickie tutorial</a>
+ </ul>
+ <li><a href="#INDEX_TABS">List of macros</a>
+ </ul>
+ <li><strong>MULTI-COLUMNS</strong>
+ <ul>
+ <li><a href="#INTRO_MULTI_COLUMNS">Introduction to multi-columns</a>
+ <li><a href="#INDEX_MULTI_COLUMNS">List of macros</a>
+ </ul>
+ <li><strong>INDENTS</strong>
+ <ul>
+ <li><a href="#INTRO_INDENTS">Introduction to indents</a>
+ <li><a href="#INDEX_INDENTS">List of macros</a>
+ </ul>
+ <li><strong>GOODIES</strong>
+ <ul>
+ <li><a href="goodies.html#GOODIES">Introduction to goodies</a>
+ <li><a href="goodies.html#INDEX_GOODIES">List of macros</a>
+ </ul>
+ <li><strong>INLINE ESCAPES</strong>
+ <ul>
+ <li><a href="inlines.html#INLINE_ESCAPES_INTRO">Introduction to inline escapes</a>
+ <li><a href="inlines.html#INDEX_INLINES">List of inline escapes</a>
+ </ul>
+</ul>
+<hr>
+
+<h2><a name="INTRO_MACROS_TYPESETTING"><u>Introduction to the typesetting macros</u></a></h2>
+
+<strong>Mom</strong>'s typesetting macros provide access to
+groff's typesetting capabilities. Aside from controlling basic
+type parameters (family, font, line length, point size, leading),
+<strong>mom</strong>'s macros fine-tune wordspacing, letterspacing,
+kerning, hyphenation, and so on. In addition, <strong>mom</strong>
+has true typesetting tabs, string tabs, multiple indent styles,
+line padding, and a batch of other goodies.
+<p>
+In some cases, <strong>mom</strong>'s typesetting macros merely imitate
+groff primitives. In others, they approach typesetting concerns in
+conceptually new ways (for groff, at least). This should present no
+problem for newcomers to groff who are learning <strong>mom</strong>.
+Old groff hands should be careful. Just because it looks like a
+duck and walks like a duck does not, in this instance, mean that it
+is a duck. When using <strong>mom</strong>, stay away from groff
+primitives if <strong>mom</strong> provides a macro that accomplishes
+the same thing.
+<p>
+<strong>Mom</strong>'s typesetting macros can be used as a standalone
+package, independent of the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
+With them, you can typeset on-the-fly. Document covers, your best
+friend's résumé, a poster for a lost dog -- none of these requires
+structured document processing (page headers, paragraphs, heads,
+footnotes, etc). What they do demand is precise control over every
+element on the page. The typesetting macros give you that control.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="INTRO_SETUP"></a>
+
+<a name="PAGE_MARGINS">
+ <h2><u>Page setup: paper size and page margins</u></h2>
+</a>
+
+The page setup macros establish the physical dimensions of your
+page and the margins you want it to have. <strong>Groff</strong>
+has defaults for these, but I recommend setting them at the top
+of your files anyway unless you're using <strong>mom</strong>'s
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
+and are content with her defaults.
+<p>
+The
+<a href="#PAPER">PAPER</a>
+macro provides a shortcut for setting the page to the correct dimensions
+for a number of well-known, established paper sizes. The
+<a href="#PAGE">PAGE</a>
+macro provides a convenient way of setting the page dimensions and
+some or all of the page margins with a single macro.
+<br>
+
+<a name="INDEX_SETUP">
+ <h3><u>Page setup macros list</u></h3>
+</a>
+
+<ul>
+ <li><a href="#PAGEWIDTH">PAGEWIDTH</a> (page width)
+ <li><a href="#PAGELENGTH">PAGELENGTH</a> (page length)
+ <li><a href="#PAPER">PAPER</a> (common paper sizes)
+ <li><a href="#L_MARGIN">L_MARGIN</a> (left margin)
+ <li><a href="#R_MARGIN">R_MARGIN</a> (right margin)
+ <li><a href="#T_MARGIN">T_MARGIN</a> (top margin)
+ <li><a href="#B_MARGIN">B_MARGIN</a> (bottom margin)
+ <li><a href="#PAGE">PAGE</a> (page dimensions and margins all in one fell swoop)
+ <li><a href="#NEWPAGE">NEWPAGE</a> (start a new page)
+</ul>
+
+<!---PAGEWIDTH--->
+
+<hr width="66%" align="left">
+ <a name="PAGEWIDTH"><h3><u>Page width</u></h3></a>
+<br>
+Macro: <strong>PAGEWIDTH</strong> <var>&lt;width of printer sheet&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+The argument to <strong>PAGEWIDTH</strong> is the width of your
+printer sheet. <strong>PAGEWIDTH</strong> requires a unit of measure.
+Decimal fractions are allowed. Hence, to tell <strong>mom</strong>
+the width of your printer sheet is 8-1/2 inches, you enter
+<p>
+<pre>
+ .PAGEWIDTH 8.5i
+</pre>
+
+<!---PAGELENGTH--->
+
+<hr width="66%" align="left">
+ <a name="PAGELENGTH"><h3><u>Page length</u></h3></a>
+<br>
+Macro: <strong>PAGELENGTH</strong> <var>&lt;length of printer sheet&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>PAGELENGTH</strong> tells <strong>mom</strong> how long your
+printer sheet is. It works just like
+<strong>PAGEWIDTH</strong>. Therefore, to tell
+<strong>mom</strong> your printer sheet is 11 inches long, you
+enter
+<p>
+<pre>
+ .PAGELENGTH 11i
+</pre>
+
+<!---PAPER--->
+
+<hr width="66%" align="left">
+ <a name="PAPER"><h3><u>Paper</u></h3></a>
+<br>
+Macro: <strong>PAPER</strong> <var>&lt;paper type&gt;</var>
+
+<p>
+<strong>PAPER</strong> provides a convenient way to set the page
+dimensions for some common printer sheet sizes. <var>&lt;paper
+type&gt;</var> can be one of:
+<p>
+<pre>
+ LETTER
+ LEGAL
+ STATEMENT
+ TABLOID
+ LEDGER
+ FOLIO
+ QUARTO
+ 10x14
+ EXECUTIVE
+ A3
+ A4
+ A5
+ B4
+ B5
+</pre>
+
+Say, for example, you have A4-sized sheets in your printer.
+It's shorter (and easier) to enter
+<p>
+<pre>
+ .PAPER A4
+</pre>
+
+than to remember the correct dimensions and enter
+<p>
+<pre>
+ .PAGEWIDTH 595p
+ .PAGELENGTH 842p
+</pre>
+
+<!---L_MARGIN--->
+
+<hr width="66%" align="left">
+ <a name="L_MARGIN"><h3><u>Left margin</u></h3></a>
+<br>
+Macro: <strong>L_MARGIN</strong> <var>&lt;left margin&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>L_MARGIN</strong> establishes the distance from the left edge
+of the printer sheet at which you want your type to start. It may
+be used any time, and remains in effect until you enter a new value.
+<p>
+<a href="#IL">Left indents</a>
+and
+<a href="#TABS">tabs</a>
+are calculated from the value you pass to <strong>L_MARGIN</strong>,
+hence it's always a good idea to invoke it before starting any serious
+typesetting. A unit of measure is required. Decimal fractions are
+allowed. Therefore, to set the left margin at 3 picas (1/2 inch),
+you'd enter either
+<p>
+<pre>
+ .L_MARGIN 3P
+ &nbsp;&nbsp;or
+ .L_MARGIN .5i
+</pre>
+
+If you use the macros
+<a href="#PAGE">PAGE</a>,
+<a href="#PAGEWIDTH">PAGEWIDTH</a>
+or
+<a href="#PAPER">PAPER</a>
+without invoking <strong>L_MARGIN</strong> (either before
+or afterwards), <strong>mom</strong> automatically sets
+</strong>L_MARGIN</strong> to 1 inch.
+<p>
+<strong>NOTE:</strong> L_MARGIN behaves in a special way when you're
+using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
+See
+<a href="typemacdoc.html#TYPESETTING">Typesetting Macros in Document Processing</a>
+for an explanation.
+<br>
+
+<!---R_MARGIN--->
+
+<hr width="66%" align="left">
+ <a name="R_MARGIN"><h3><u>Right margin</u></h3></a>
+<br>
+Macro: <strong>R_MARGIN</strong> <var>&lt;right margin&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>R_MARGIN</strong> establishes the amount of space you
+want between the end of typeset lines and the right hand edge
+of the printer sheet. In other words, it sets the line length.
+<strong>R_MARGIN</strong> requires a unit of measure. Decimal
+fractions are allowed.
+<p>
+The <a href="#LINELENGTH">line length macro</a> (<strong>LL</strong>) can
+be used in place of <strong>R_MARGIN</strong>. In either case, the
+last one invoked sets the line length. The choice of which to use is
+up to you. In some instances, you may find it easier to think of a
+section of type as having a right margin. In others, giving a line
+length may make more sense.
+<p>
+For example, if you're setting a page of type you know should have
+6-pica margins left and right, it makes sense to enter a left and
+right margin, like this:
+<p>
+<pre>
+ .L_MARGIN 6P
+ .R_MARGIN 6P
+</pre>
+
+That way, you don't have to worry about calculating the line
+length. On the other hand, if you know the line length for a
+patch of type should be 17 picas and 3 points, entering the line
+length with <strong>LL</strong> is much easier than calculating the
+right margin.
+<p>
+<pre>
+ .LL 17P+3p
+</pre>
+
+If you use the macros
+<a href="#PAGE">PAGE</a>,
+<a href="#PAGEWIDTH">PAGEWIDTH</a>
+or
+<a href="#PAPER">PAPER</a>
+without invoking <strong>R_MARGIN</strong> afterwards,
+<strong>mom</strong> automatically sets <strong>R_MARGIN</strong>
+to 1 inch. If you set a line length after these macros (with
+<a href="#LINELENGTH">LL</a>),
+the line length calculated by <strong>R_MARGIN</strong> is, of course,
+overridden.
+<p>
+<strong>IMPORTANT: R_MARGIN</strong>, if used, MUST come after
+<a href="#PAPER">PAPER</a>,
+<a href="#PAGEWIDTH">PAGEWIDTH</a>,
+<a href="#L_MARGIN">L_MARGIN</a>
+and/or
+<a href="#PAGE">PAGE</a>
+(if a right margin isn't given to <strong>PAGE</strong>).
+The reason is that <strong>R_MARGIN</strong> calculates line
+length from the overall page dimensions and the left margin.
+Obviously, it can't make the calculation if it doesn't know the page
+width and the left margin.
+<p>
+<strong>NOTE: R_MARGIN</strong> behaves in a special way
+when you're using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
+See
+<a href="typemacdoc.html#TYPESETTING">Typesetting Macros in Document Processing</a>
+for an explanation.
+<br>
+
+<!---T_MARGIN--->
+
+<hr width="66%" align="left">
+ <a name="T_MARGIN"><h3><u>Top margin</u></h3></a>
+<br>
+Macro: <strong>T_MARGIN</strong> <var>&lt;top margin&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>T_MARGIN</strong> establishes the distance from the top of
+the printer sheet at which you want your type to start. It requires
+a unit of measure, and decimal fractions are allowed. To set a top
+margin of 2-1/2 centimeters, you'd enter
+<p>
+<pre>
+ .T_MARGIN 2.5c
+</pre>
+
+<strong>T_MARGIN</strong> calculates the vertical position of the
+first line of type on a page by treating the top edge of the printer
+sheet as a <a href="definitions.html#TERMS_BASELINE">baseline</a>. Therefore,
+<p>
+<pre>
+ .T_MARGIN 1.5i
+</pre>
+
+puts the baseline of the first line of type 1-1/2 inches beneath
+the top of the page.
+<p>
+<strong>IMPORTANT:</strong> <strong>T_MARGIN</strong> does two
+things: it establishes the top margin for pages that come after
+it AND it moves to that position on the current page. Therefore,
+<strong>T_MARGIN</strong> should only be used at the top of a file
+(prior to entering text) or after
+<a href="#NEWPAGE">NEWPAGE</a>,
+like this:
+<p>
+<pre>
+ .NEWPAGE
+ .T_MARGIN 6P
+ &lt;text&gt;
+</pre>
+
+<strong>NOTE:</strong> <strong>T_MARGIN</strong> means something
+slightly different when you're using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
+See
+<a href="typemacdoc.html#TB_MARGINS">Top and bottom margins in document processing</a>
+for an explanation.
+<br>
+
+<!---B_MARGIN--->
+
+<hr width="66%" align="left">
+ <a name="B_MARGIN"><h3><u>Bottom margin</u></h3></a>
+<br>
+Macro: <strong>B_MARGIN</strong> <var>&lt;bottom margin&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>B_MARGIN</strong> sets a nominal position at the bottom
+of the page beyond which you don't want your type to go. When the
+bottom margin is reached, <strong>mom</strong> starts a new page.
+<strong>B_MARGIN</strong> requires a unit of measure. Decimal
+fractions are allowed. To set a nominal bottom margin of 3/4 inch,
+enter
+<p>
+<pre>
+ .B_MARGIN .75i
+</pre>
+
+Obviously, if you haven't spaced the type on your pages so that
+the last lines fall perfectly at the bottom margin, the margin will
+vary from page to page. Usually, but not always, the last line of
+type that fits on a page <em>before</em> the bottom margin causes
+<strong>mom</strong> to start a new page.
+<p>
+Occasionally, owing to a peculiarity in <strong>groff</strong>,
+an extra line will fall below the nominal bottom margin. If you're
+using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>,
+this is unlikely to happen; the document processing macros are very
+hard-nosed about aligning bottom margins.
+<p>
+<strong>NOTE:</strong> The meaning of <strong>B_MARGIN</strong> is
+slightly different when you're using the document processing macros.
+See
+<a href="typemacdoc.html#TB_MARGINS">Top and bottom margins in document processing</a>
+for an explanation.
+<br>
+
+<!---PAGE--->
+
+<hr width="66%" align="left">
+ <a name="PAGE"><h3><u>Page</u></h3></a>
+<br>
+Macro: <strong>PAGE</strong>
+<var>&lt;width&gt;&nbsp;[ &lt;length&gt; [ &lt;lm&gt; [ &lt;rm&gt; [ &lt;tm&gt; [ &lt;bm&gt; ] ] ] ] ]</var>
+<br>
+<em>*All arguments require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>PAGE</strong> lets you establish paper dimensions and page
+margins with a single macro. The only required argument is page width.
+The rest are optional, <strong>but they must appear in order and you can't
+skip over any.</strong> <var>&lt;lm&gt;, &lt;rm&gt;, &lt;tm&gt;</var>
+and <var>&lt;bm&gt;</var> refer to the left, right, top and bottom
+margins respectively.
+<p>
+Assuming your page dimensions are 11 inches by 17 inches, and that's
+all you want to set, enter
+<p>
+<pre>
+ .PAGE 11i 17i
+</pre>
+
+If you want to set the left margin as well, say, at 1 inch,
+<strong>PAGE</strong> would look like this:
+<p>
+<pre>
+ .PAGE 11i 17i 1i
+</pre>
+
+Now suppose you also want to set the top margin, say, at 1-1/2
+inches. <var>&lt;tm&gt;</var> comes after <var>&lt;rm&gt;</var>
+in the optional arguments, but you can't skip over any arguments,
+therefore to set the top margin, you must also give a right margin.
+The <strong>PAGE</strong> macro would look like this:
+<p>
+<pre>
+ .PAGE 11i 17i 1i 1i 1.5i
+ | |
+ required right___| |___top margin
+ margin
+</pre>
+
+Clearly, <strong>PAGE</strong> is best used when you want a convenient
+way to tell <strong>mom</strong> just the dimensions of your printer
+sheet (width and length), or when you want to tell her everything
+about the page (dimensions and all the margins), for example
+<p>
+<pre>
+ .PAGE 8.5i 11i 45p 45p 45p 45p
+</pre>
+
+This sets up an 8-1/2 by 11 inch page with margins of 45 points
+(5/8-inch) all around.
+<p>
+<strong>NOTE:</strong> Only use <strong>PAGE</strong> at the
+start of a document, before entering any text. And remember,
+when you're using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>,
+top margin and bottom margin mean something slightly different than
+when you're using just the typesetting macros (see
+<a href="typemacdoc.html#TB_MARGINS">Top and bottom margins in document processing</a>).
+<p>
+Additionally, if you invoke <strong>PAGE</strong> with a top margin
+argument, any macros you invoke after <strong>PAGE</strong> will
+almost certainly move the
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+of the first line of text down by one linespace. To compensate, do
+<p>
+<pre>
+ .RLD 1v
+</pre>
+
+immediately before entering any text, or, if it's feasible, make
+<strong>PAGE</strong> the last macro you invoke prior to entering text.
+<br>
+
+<!---NEWPAGE--->
+
+<hr width="66%" align="left">
+<a name="NEWPAGE"><h3><u>Start a new page</u></h3></a>
+<br>
+Macro: <strong>NEWPAGE</strong>
+
+<p>
+Whenever you want to start a new page, use <strong>NEWPAGE</strong>, by
+itself with no argument. <strong>Mom</strong> will finish up
+processing the current page and move you to the top of a new one
+(subject to the top margin set with
+<a href="#T_MARGIN">T_MARGIN</a>.
+<p>
+<strong>Experts:</strong> <strong>NEWPAGE</strong> is an alias of
+<strong>.bp</strong>. You can use either, or mix 'n' match with
+impunity.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="INTRO_BASIC_PARAMS"></a>
+
+<a name="BASIC_PARAMS">
+ <h2><u>Basic Typesetting Parameters</u></h2>
+</a>
+
+Basic parameter macros deal with the fundamental requirements
+for setting type: family, font, point size, leading and line length.
+<p>
+If you're using the typesetting macros only, the arguments passed
+to the basic parameter macros remain in effect until you change them.
+The document processing macros handle things differently. See
+<a href="typemacdoc.html#TYPESETTING">Typesetting Macros in Document Processing</a>
+for an explanation.
+<br>
+
+<a name="INDEX_BASIC"><h3><u>Basic parameter macros list</u></h3></a>
+<ul>
+ <li><a href="#FAMILY">FAMILY</a> (type family)
+ <li><a href="#FONT">FONT</a> (font)
+ <li><a href="#PS">PT_SIZE</a> (point size of type)
+ <li><a href="#LEADING">LS</a> (line spacing/leading)
+ <li><a href="#AUTOLEAD">AUTOLEAD</a> (automatic line spacing)
+ <li><a href="#LINELENGTH">LL</a> (line length)
+</ul>
+
+<!---FAMILY--->
+
+<hr width="66%" align="left">
+<a name="FAMILY"><h3><u>Type family</u></h3></a>
+<br>
+Macro: <strong>FAMILY</strong> <var>&lt;family&gt;</var>
+<br>
+Alias: <strong>FAM</strong>
+
+<p>
+<strong>FAMILY</strong> takes one argument: the name of the type family
+you want. Groff comes with a number of PostScript families, each
+identified by a 1-, 2- or 3-letter mnemonic. The standard families
+are:
+<table valign="baseline" summary="family">
+<tr><td width="15"><td><strong>A</strong><td>Avant Garde
+<tr><td><td><strong>BM</strong> <td>Bookman
+<tr><td><td><strong>H</strong><td>Helvetica
+<tr><td><td><strong>N</strong><td>New Century Schoolbook
+<tr><td><td><strong>P</strong><td>Palatino
+<tr><td><td><strong>T</strong><td>Times Roman</td></tr>
+</table>
+<p>
+The argument you pass to <strong>FAMILY</strong> is the identifier at
+left above. For example, if you want Helvetica, enter
+<p>
+<pre>
+ .FAMILY H
+</pre>
+
+<strong>NOTE:</strong> The <a href="#FONT">font macro</a>
+(<strong>FT</strong>) lets you to specify both the type family
+and the desired font with a single macro. While this saves a few
+keystrokes, I recommend using <strong>FAMILY</strong> for family,
+and <strong>FT</strong> for font, except where doing so is genuinely
+inconvenient.
+<p>
+<strong>Experts:</strong>
+<br>
+If you add other PostScript families to groff's /font/devps directory,
+be sure to follow the groff standard for naming families and fonts.
+For example, if you add the Garamond family, name the font files
+<p>
+<pre>
+ GARAMONDR
+ GARAMONDI
+ GARAMONDB
+ GARAMONDBI
+</pre>
+
+GARAMOND then becomes a legal family name you can pass to
+<strong>FAMILY</strong>. (You could, of course, shorten GARAMOND to just
+G, or GD.) R, I, B, and BI after GARAMOND are the roman, italic,
+bold and bold-italic fonts respectively.
+<br>
+
+<!---FT--->
+
+<hr width="66%" align="left">
+<a name="FONT"><h3><u>Font</u></h3></a>
+<br>
+Macro: <strong>FT</strong> <var>R | I | B | BI</var>
+
+<p>
+<strong>FT</strong> takes one of four possible arguments specifying the
+desired font:
+<table valign="baseline" summary="font">
+<tr><td width="15"><td><strong>R</strong><td> = <td>roman
+<tr><td><td><strong>I</strong><td> = <td>italic
+<tr><td><td><strong>B</strong><td> = <td>bold
+<tr><td><td><strong>BI</strong><td> = <td>bold-italic</td></tr>
+</table>
+<p>
+For example, if your family is Helvetica, entering
+<p>
+<pre>
+ .FT B
+</pre>
+
+will give you the Helvetica bold font. If your family were
+Palatino, you'd get the Palatino bold font.
+<p>
+You can specify both family and font in the <strong>FT</strong> macro.
+As an example,
+<p>
+<pre>
+ .FT HB
+</pre>
+
+sets the font to Helvetica bold. I strongly recommend keeping
+family and font separate.
+<p>
+Fonts can also be changed inline. See
+<a href="inlines.html#INLINE_FONTS_MOM">Inline Escapes, font control</a>.
+<br>
+
+<!---PT_SIZE--->
+
+<hr width="66%" align="left">
+<a name="PS"><h3><u>Point size of type</u></h3></a>
+<br>
+Macro: <strong>PT_SIZE</strong> <var>&lt;size of type in points&gt;</var>
+<br>
+<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>PT_SIZE</strong> (Point Size) takes one argument: the size of type
+in points. Unlike most other macros that establish the size or measure
+of something, <strong>PT_SIZE</strong> does not require that you supply a
+unit of measure since it's a near universal convention that type size
+is measured in points. Therefore, to change the type size to, say,
+11 points, enter
+<p>
+<pre>
+ .PT_SIZE 11
+</pre>
+
+Point sizes may be fractional (e.g. 10.25 or 12.5).
+<p>
+You can prepend a plus or a minus sign to the argument to
+<strong>PT_SIZE</strong>, in which case the point size will be changed by +
+or - the original value. For example, if the point size is 12,
+and you want 14, you can do
+<p>
+<pre>
+ .PT_SIZE +2
+</pre>
+
+then later reset it to 12 with
+<p>
+<pre>
+ .PT_SIZE -2
+</pre>
+
+The size of type can also be changed inline. See
+<a href="inlines.html#INLINE_SIZE_MOM">Inline Escapes, changing point size</a>.
+<br>
+
+<!---LS--->
+
+<hr width="66%" align="left">
+<a name="LEADING"><h3><u>Line spacing/leading</u></h3></a>
+<br>
+Macro: <strong>LS</strong> <var>&lt;distance between lines&gt;</var>
+<br>
+<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>LS</strong> (Line Space) takes one argument: the distance you want, typically
+in points, from baseline to baseline of type. The argument may
+be fractional (e.g. 12.25 or 14.5). Like <strong>PT_SIZE</strong>,
+<strong>LS</strong> does not require a unit of measure, since
+<a href="definitions.html#TERMS_LEADING">leading</a>
+is most often given in points. Therefore, to set the linespace to
+14 points, you would enter
+<p>
+<pre>
+ .LS 14
+</pre>
+
+However, if you wish, you may specify a unit of measure by appending
+it directly to the argument passed to <strong>LS</strong>. For example,
+if you want a linespace of 1/4 of an inch, enter
+<p>
+<pre>
+ .LS .25i
+</pre>
+
+You can prepend a plus or a minus sign to the argument to
+<strong>LS</strong>, in which case the line spacing will be changed
+by + or - the original value. For example, if the line spacing is
+14 points, and you want 17 points, you can do
+<p>
+<pre>
+ .LS +3
+</pre>
+
+then later reset it to 14 points with
+<p>
+<pre>
+ .LS -3
+</pre>
+
+<strong>Experts:</strong>
+<br>
+<strong>LS</strong> should not be confused with the groff primitive
+<strong>ls</strong>. <strong>LS</strong> acts like <strong>vs</strong>.
+<strong>mom</strong> does not provide a macro analogous to
+<strong>ls</strong>.
+<br>
+
+<!---AUTOLEAD--->
+
+<hr width="66%" align="left">
+<a name="AUTOLEAD"><h3><u>Automatic line spacing</u></h3></a>
+<br>
+Macro: <strong>AUTOLEAD</strong> <var>&lt;amount of automatic leading&gt; [FACTOR]</var>
+<br>
+<em>*Does not require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+Without the <strong>FACTOR</strong> argument, <strong>AUTOLEAD</strong>
+calculates the linespace for you by adding its argument to the
+current point size of type. All subsequent <strong>PT_SIZE</strong>
+requests automatically update the linespacing by the autolead amount.
+<p>
+Used in this way, <strong>AUTOLEAD</strong> does not require a unit
+of measure; points is assumed. However, you may use an alternate
+unit of measure by appending it to the argument. The argument may
+be a decimal fraction (e.g. .5 or 2.75).
+<p>
+As an example, if your current point size of type is 12, entering
+<p>
+<pre>
+ .AUTOLEAD 2
+</pre>
+
+changes the linespace to 14 points, regardless any linespacing
+already in effect. From here on, every change to the size of type
+(with <strong>PT_SIZE</strong>, not
+<a href="definitions.html#TERMS_INLINES">inline</a>)
+changes the linespace as well. If you decrease the type size to 9
+points, the leading decreases to 11 points. If you increase the type
+size to 16 points, the leading increases to 18 points.
+<p>
+Automatic updating of the linespacing continues until you enter a
+&quot;manual&quot; line space value with <strong>LS</strong>.
+<p>
+If you give <strong>AUTOLEAD</strong> the optional
+<strong>FACTOR</strong> argument, <strong>AUTOLEAD</strong>
+calculates the line space as a factor of the
+<a href="definitions.html#TERMS_NUMERICARGUMENT">numeric argument</a>
+you gave <strong>AUTOLEAD</strong>. For example, if your point
+size is 12,
+<p>
+<pre>
+ .AUTOLEAD 1.125 FACTOR
+</pre>
+sets the leading at 13.5 points. If you change the point size
+to 14, the leading automatically changes to 15.75 (14 x 1.125).
+<p>
+<strong>NOTE:</strong> There's no need to prepend a plus sign (+)
+to <strong>AUTOLEAD</strong>'s argument, although you may do so if you
+wish.
+<br>
+
+<!---LL--->
+
+<hr width="66%" align="left">
+<a name="LINELENGTH"><h3><u>Line length</u></h3></a>
+<br>
+Macro: <strong>LL</strong> <var>&lt;line length&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>LL</strong> (Line Length) takes one argument: the distance from the
+left margin of the page to the maximum allowable point on the
+right at which groff should place type. The line length, in
+other words, as the macro suggests.
+<p>
+<strong>LL</strong> requires a unit of measure. Therefore, to set the line
+length to 39 picas, you would enter
+<p>
+<pre>
+ .LL 39P
+</pre>
+
+As with other macros that require a unit of measure, the argument to
+<strong>LL</strong> may be fractional. For example,
+<p>
+<pre>
+ .LL 4.5i
+</pre>
+
+sets the line length to 4-1/2 inches.
+
+<p>
+<strong>NOTE:</strong> The <a href="#R_MARGIN">right margin
+macro</a> (<strong>R_MARGIN</strong>) can also be used to set line
+length.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="INTRO_JUST_QUAD_FILL"></a>
+
+<a name="JUST_QUAD_FILL">
+ <h2><u>Justifying, quadding, filling and breaking lines</u></h2>
+</a>
+
+The justification and quadding macros deal with how type aligns along
+the left and right margins. In a nutshell, type either aligns at the
+left margin, at the right margin, at both margins, or at neither margin
+(centered).
+<p>
+These macros also determine whether or not
+<a href="definitions.html#TERMS_INPUTLINE">input lines</a> are joined and
+<a href="definitions.html#TERMS_FILLED">filled</a> during output.
+<p>
+Additionally, macros that deal with how to break
+<a href="definitions.html#TERMS_OUTPUTLINE">output lines</a> are covered in this
+section, as is the
+<a href="definitions.html#TERMS_INLINES">inline escape</a> for joining output lines.
+<p>
+You may encounter some words here that are unfamiliar. Refer to
+<a href="definitions.html#TERMS_TYPESETTING">Typesetting terms</a> and
+<a href="definitions.html#TERMS_GROFF">Groff terms</a> for an explanation.
+
+<a name="INDEX_JUST"><h3><u>Justification, quad, fill, and break macro list</u></h3></a>
+
+<ul>
+ <li><strong>Fill modes</strong>
+ <ul>
+ <li><a href="#JUSTIFY">JUSTIFY</a> (set lines justified)
+ <li><a href="#QUAD">QUAD</a> (set filled lines flush left, right or centered)
+ </ul>
+ <li><strong>Nofill modes</strong>
+ <ul>
+ <li><a href="#LRC">LEFT</a> (set non-filled lines flush left)
+ <li><a href="#LRC">RIGHT</a> (set non-filled lines flush right)
+ <li><a href="#LRC">CENTER</a> (set non-filled lines centered)
+ </ul>
+ <li><strong>Breaking lines</strong>
+ <ul>
+ <li><a href="#BR">BR</a> (manually break an output line)
+ <li><a href="#EL">EL</a> (break a line without advancing to the next output line)
+ <li><a href="#SPACE">SPACE</a> (break a line and add space before the next output line)
+ <li><a href="#SPREAD">SPREAD</a> (break and force-justify an output line)
+ </ul>
+ <li><strong>Joining lines</strong>
+ <ul>
+ <li><a href="#JOIN">\c</a> inline escape
+ </ul>
+</ul>
+
+<!---JUSTIFY--->
+
+<hr width="66%" align="left">
+<a name="JUSTIFY"><h3><u>Justify lines</u></h3></a>
+<br>
+Macro: <strong>JUSTIFY</strong>
+<br>
+<a href="definitions.html#TERMS_FILLED"><em>Fill mode</em></a>
+
+<p>
+<strong>JUSTIFY</strong> doesn't take an argument.
+<a href="definitions.html#TERMS_INPUTLINE">Input lines</a>
+after <strong>JUSTIFY</strong> are
+<a href="definitions.html#TERMS_FILLED">filled</a> and
+<a href="definitions.html#TERMS_JUST">justified</a>
+upon output.
+<p>
+To break lines and prevent them from being filled and justified,
+use the
+<a href="#BR">BR</a> macro.
+<br>
+
+<!---QUAD--->
+
+<hr width="66%" align="left">
+<a name="QUAD"><h3><u>Quad lines left, right, or center</u></h3></a>
+<br>
+Macro: <strong>QUAD</strong> <var>L | LEFT | R | RIGHT | C | CENTER | J | JUSTIFY</var>
+<br>
+Alias: <strong>FILL</strong>
+<br>
+<a href="definitions.html#TERMS_FILLED"><em>Fill mode</em></a>
+
+<p>
+<strong>QUAD</strong> takes one argument: the direction in which lines
+should be
+<a href="definitions.html#TERMS_QUAD">quadded</a>.
+<a href="definitions.html#TERMS_INPUTLINE">Input lines</a>
+after <strong>QUAD</strong> are
+<a href="definitions.html#TERMS_FILLED">filled</a>
+upon output.
+<p>
+If <strong>L</strong> or <strong>LEFT</strong>, type is set flush
+along the left margin.
+<p>
+If <strong>R</strong> or <strong>RIGHT</strong>, type is
+set flush along the right margin.
+<p>
+If <strong>C</strong> or <strong>CENTER</strong> type is set centered
+on the current line length.
+<p>
+<strong>J</strong> and <strong>JUSTIFY</strong> justify text,
+and are included as a convenience only. Obviously, if text is
+justified, it isn't quadded. <strong>QUAD J</strong> and
+<strong>QUAD JUSTIFY</strong> have exactly the same effect as <a
+href="#JUSTIFY">JUSTIFY</a>.
+<p>
+To break lines and prevent them from being filled, use the
+<a href="#BR">BR</a> macro.
+<br>
+
+<!---LEFT, RIGHT, CENTER--->
+
+<hr width="66%" align="left">
+<a name="LRC"><h3><u>Set non-filled lines flush left, right, or centered</u></h3></a>
+<br>
+Macro: <strong>LEFT</strong>
+&nbsp;&nbsp;Macro: <strong>RIGHT</strong>
+&nbsp;&nbsp;Macro: <strong>CENTER</strong>
+&nbsp;(alias <strong>CENTRE</strong>)
+<br>
+<a href="definitions.html#TERMS_NOFILL"><em>Nofill mode</em></a>
+
+<p>
+<strong>LEFT</strong>, <strong>RIGHT</strong> and
+<strong>CENTER</strong> let you enter text on a line for line basis
+without having to use the
+<a href="#BR">BR</a> macro after each line.
+Consider the following:
+<p>
+<pre>
+ .QUAD LEFT
+ So runs my dream, but what am I?
+ .BR
+ An infant crying in the night
+ .BR
+ An infant crying for the light
+ .BR
+ And with no language but a cry.
+ .BR
+</pre>
+
+Because text after <strong>QUAD</strong> is
+<a href="definitions.html#TERMS_FILLED">filled</a>, you have to use the
+<a href="#BR">BR</a>
+macro to prevent the lines from running together. Not only is this
+annoying to type, it's awkward to read in a text editor. Much better
+to do
+<p>
+<pre>
+ .LEFT
+ So runs my dream, but what am I?
+ An infant crying in the night
+ An infant crying for the light
+ And with no language but a cry.
+</pre>
+
+<strong>IMPORTANT:</strong> Because <strong>LEFT</strong>,
+<strong>RIGHT</strong> and <strong>CENTER</strong> are nofill
+modes, groff does not always respect the current line length.
+<a href="definitions.html#TERMS_INPUTLINE">Input lines</a>
+that run long may exceed it, or get broken in undesirable ways.
+Therefore, when using these three macros, you should preview your
+work to ensure that all lines fit as expected.
+<br>
+
+<!---BR--->
+
+<hr width="66%" align="left">
+<a name="BR"><h3><u>Manually break lines</u></h3></a>
+<br>
+Macro: <strong>BR</strong>
+
+<p>
+When using <strong>JUSTIFY</strong> or <strong>QUAD</strong>,
+<strong>BR</strong> tells <strong>mom</strong> about partial lines
+that you want broken (as opposed to
+<a href="definitions.html#TERMS_FILLED">filled</a>).
+Any partial
+<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>
+that immediately precedes <strong>BR</strong> will be
+<a href="definitions.html#TERMS_QUAD">quadded</a>
+in the direction of the current quad, or set flush left if text is
+<a href="definitions.html#TERMS_JUST">justified</a>.
+
+<p>
+Most of the time, you won't need the <strong>BR</strong> macro.
+In fill modes, <strong>mom</strong> tries to be sensible about
+where breaks are needed. If the nature of a macro is such that under
+most circumstances you'd expect a break, <strong>mom</strong> puts
+it in herself. Equally, in macros where a break isn't normally
+desirable, no break occurs. This means text files don't get cluttered
+with annoying <strong>BR</strong>'s.
+<p>
+<strong>NOTE:</strong> Lines of text in
+<a href="definitions.html#TERMS_NOFILL">nofill mode</a>
+never require a <strong>BR</strong>. Furthermore, in nofill mode,
+ALL macros cause a break. If a break is not desired, use the
+<a href="#JOIN">\c</a>
+<a href="definitions.html#TERMS_INLINES">inline escape</a>.
+
+<p>
+<strong>Experts: BR</strong> is an alias for <strong>br</strong>.
+You can use either, or mix 'n' match with impunity.
+<br>
+
+<!---EL--->
+
+<hr width="66%" align="left">
+<a name="EL"><h3><u>Manually break a line without advancing on the page</u></h3></a>
+<br>
+Macro: <strong>EL</strong>
+
+<p>
+The mnemonic "EL" is borrowed from old Compugraphic typesetting
+systems, where it stood for "End Line." Conceptually,
+<strong>EL</strong> is equivalent to the notion of a carriage return
+with no linefeed.
+
+<p>
+Every once in a while, the need arises for breaking a line without
+advancing on the page. Imagine, for example, that you're working from
+marked-up copy. The markup indicates 24 points of space between
+two given lines, but the prevailing line spacing is 12.5 points.
+You may find it more convenient to break the first line with
+<strong>EL</strong> and instruct <strong>mom</strong> to advance 24
+points to the next line, rather than calculating the lead that needs
+to be added to 12.5 to get 24. To demonstrate:
+<p>
+<pre>
+ .LS 12.5
+ A line of text.
+ .EL
+ .ALD 24p
+ The next line of text.
+</pre>
+
+may be more instuitive than
+<p>
+<pre>
+ .LS 12.5
+ A line of text.
+ .ALD 11.5p
+ The next line of text.
+</pre>
+
+The first example has the further advantage that should you wish
+to change the prevailing line space but keep the 24 points lead,
+you don't have to recalculate the extra space.
+<p>
+"ALD" in the above examples stands for "<strong>A</strong>dvance
+<strong>L</strong>ea<strong>D</strong>" (another mnemonic borrowed
+from Compugraphic), which is covered in the section
+<a href="#ALDRLD">Vertical movement</a>.
+<p>
+<strong>IMPORTANT:</strong>
+<strong>EL</strong> does not work as advertised on the last
+<a name="TERMS_OUTPUTLINE">output line</a>
+of pages that contain a footer trap (e.g. one set with
+<a href="#B_MARGIN">B_MARGIN</a>
+or in documents formatted using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>).
+The reason is that the <strong>EL</strong> macro itself deposits
+a line break that trips the trap (hey, I like that --
+&quot;trips the trap&quot;), and once the trap has been sprung,
+<strong>mom</strong> can't recover. She places the line after
+the <strong>EL</strong> on the next page.
+<p>
+If you need <strong>EL</strong> functionality on the last line of
+a page with a footer trap, turn the trap off with
+<a href="goodies.html#TRAP">TRAP</a>,
+as in this example:
+<p>
+<pre>
+ 3.
+ .TRAP OFF
+ .EL
+ .TRAP
+ \*[FP12]Establish, once and for all, if 42 really is the answer.
+</pre>
+
+The above looks something like this upon output:
+<p>
+<pre>
+ 3. Establish, once and for all, if 42 really is the answer.
+</pre>
+
+with &quot;3.&quot; flush at the left margin, and &quot;Establish,
+once and for all...&quot; on the same line as &quot;3.&quot; but
+starting 12 points in from the left margin.
+<p>
+If you hadn't turned the trap off for <kbd>.EL</kbd>,
+&quot;3.&quot; would have appeared at the bottom of the page by
+itself, with &quot;Establish, once and for all...&quot;
+appearing at the top of the next page.
+<br>
+
+<!---SP--->
+
+<hr width="66%" align="left">
+<a name="SPACE"><h3><u>Break lines and add space between</u></h3></a>
+<br>
+Macro: <strong>SPACE</strong> <var>&lt;space to add between lines&gt;</var>
+<br>
+Alias: <strong>SP</strong>
+
+<p>
+<strong>SPACE</strong> breaks a line, just like
+<strong>BR</strong>, then adds space after the line. With no
+argument, it adds an extra line space. If you pass it a numeric
+argument without supplying a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>,
+it advances that number of extra line spaces. For example:
+<p>
+<pre>
+ .SPACE
+</pre>
+
+breaks the line then adds an extra linespace, whereas
+<p>
+<pre>
+ .SPACE 2
+</pre>
+
+breaks the line and adds two extra linespaces.
+
+<p>
+If you supply a unit of measure, <strong>SPACE</strong> breaks the
+line then adds the specified amount of extra space to the current
+linespace, as in
+<p>
+<pre>
+ .SPACE 6p
+</pre>
+
+which breaks the line then adds six points of space to the current
+linespace.
+
+<p>
+<strong>SUGGESTION: SPACE</strong> and
+<a href="#ALD">ALD</a>
+can be used interchangeably (<code>.SPACE&nbsp;6p</code> and
+<code>.ALD&nbsp;6p</code> are equivalent). However,
+<strong>ALD</strong> without an argument does nothing, whereas
+<strong>SPACE</strong> without an argument adds an extra line
+space. I recommend using <strong>SPACE</strong> when you
+want an extra line space (or multiple thereof), and
+<strong>ALD</strong> whenever you want some other value of space
+after a line.
+
+<p>
+<strong>Experts: SPACE</strong> is an alias of <strong>sp</strong>.
+You can use either, or mix 'n' match with impunity.
+<br>
+
+<!---SPREAD--->
+
+<hr width="66%" align="left">
+<a name="SPREAD"><h3><u>Break and force justify (spread) lines</u></h3></a>
+<br>
+Macro: <strong>SPREAD</strong>
+
+<p>
+Sometimes, you need to break a line of
+<a href="definitions.html#TERMS_JUST">justified</a>
+text and have it come out fully justified, not
+<a href="definitions.html#TERMS_QUAD">quadded</a>
+left the way it would be with the <strong>BR</strong> macro.
+An example of where you'd do this would be when you want to prevent a
+word at the end of a line from being hyphenated (say, a proper name).
+<strong>SPREAD</strong> is the macro that lets you break the line
+and have it came out fully justified.
+
+<p>
+<strong>Experts: SPREAD</strong> is an alias for <strong>brp</strong>.
+You can use either, or mix 'n' match with impunity.
+<br>
+
+<!---JOIN--->
+
+<hr width="66%" align="left">
+<a name="JOIN"><h3><u>Join input lines</u></h3></a>
+<br>
+Inline: <strong>\c</strong>
+
+<p>
+Sometimes, especially when in one of the
+<a href="definitions.html#TERMS_NOFILL">nofill modes</a>,
+a macro will cause a break where you don't want one. In order
+to prevent this from happening (in other words, to join
+<a href="definitions.html#TERMS_INPUTLINE">input lines</a>
+together, forming one
+<a href="definitions.html#TERMS_OUTPUTLINE">output line</a>),
+use the groff
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+<strong>\c</strong> at the end of each input line to
+be joined to another, like this:
+<p>
+<pre>
+ .LEFT
+ .FAMILY T
+ .FT R
+ Some lines of text to be \c
+ .FAMILY H
+ .FT B
+ joined \c
+ .FAMILY T
+ .FT R
+ together.
+</pre>
+
+Upon output, the lines will be joined together to read
+<p>
+<pre>
+ Some lines of text to be joined together.
+</pre>
+
+with the word &quot;joined&quot; in Helvetica bold. Note the
+space before <strong>\c</strong>. Without it, the last three
+words of the output line would read
+<p>
+<pre>
+ bejoinedtogether
+</pre>
+
+Please also note that had the example been in one of the
+<a href="definitions.html#TERMS_FILLED">fill modes</a>,
+there'd have been no need for the <strong>\c</strong>.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="INTRO_REFINEMENTS"></a>
+
+<a name="REFINEMENTS">
+ <h2><u>Typographic refinements</u></h2>
+</a>
+
+The macros in this section help you tweak groff's behaviour,
+ensuring that your documents look typographically professional.
+<br>
+
+<a name="INDEX_REFINEMENTS">
+ <h3><u>Typographic refinements macro list</u></h3>
+</a>
+
+<ul>
+ <li><strong>Word and sentence spacing</strong>
+ <ul>
+ <li><a href="#WS">WS</a> (word spacing)
+ <li><a href="#SS">SS</a> (sentence space)
+ </ul>
+ <li><strong>Letter spacing (track kerning)</strong>
+ <ul>
+ <li><a href="#RW">RW</a> (reduce whitespace)
+ <li><a href="#EW">EW</a> (expand whitespace)
+ <li><a href="#BR_AT_LINE_KERN">BR_AT_LINE_KERN</a>
+ </ul>
+ <li><strong>Hyphenation</strong>
+ <ul>
+ <li><a href="#HY">HY</a> (turn auto hyphenation on/off, or set specific hyphenation parameters)
+ <li><a href="#HY_SET">HY_SET</a> (set all hyphenation parameters)
+ </ul>
+ <li><strong>Automatic kerning and ligatures</strong>
+ <ul>
+ <li><a href="#KERN">KERN</a> (turn automatic pairwise kerning on or off)
+ <li><a href="#LIGATURES">LIGATURES</a> (turn automatic generation of ligatures on or off)
+ </ul>
+</ul>
+
+<!---WS--->
+
+<hr width="66%" align="left">
+<a name="WS"><h3><u>Word spacing</u></h3></a>
+<br>
+Macro: <strong>WS</strong> <var>&lt;+|-wordspace&gt; | DEFAULT</var>
+
+<p>
+<strong>WS</strong> (Word Space) increases or decreases the amount
+of space between words. In
+<a href="definitions.html#TERMS_NOFILL">nofill modes</a>,
+or if
+<a href="#QUAD">QUAD</a>
+is in effect, the space between words is fixed. Therefore, if you
+change the word spacing with <strong>WS</strong>, the change applies
+uniformly to the space between every word on every line. However,
+when text is
+<a href="definitions.html#TERMS_JUST">justified</a>,
+the space between words varies from line to line (in order to justify
+the text). Consequently, the change you make with <strong>WS</strong>
+represents the minimum (and ideal) space groff will try to put between
+words before deciding whether to hyphenate a final word or to stretch
+the word spacing.
+
+<p>
+Word space is relative to type size. Knowing how it's calculated is
+unimportant. What matters is having a sense of how the value passed
+to <strong>WS</strong> affects the look of your type. Generally,
+in/decreasing the word space by a value of 1 or 2 produces a difference
+that in many cases is scarcely visible; in/decreasing by a value of 5
+or so produces a subtle but noticeable difference; and in/decreasing
+by a value greater than 10 is always apparent. You should preview
+your work to assess the effect of <strong>WS</strong>.
+
+<p>
+<a name="WS_USAGE"><strong>WS</strong></a>
+takes as its argument a whole number preceded by a plus or minus sign.
+Therefore, to decrease the word space slightly, you might enter
+<p>
+<pre>
+ .WS -4
+</pre>
+
+To increase it by a noticeable amount, you might enter
+<p>
+<pre>
+ .WS +12
+</pre>
+
+You can reset the word spacing to its previous value by switching
+the plus or minus sign, like this:
+<p>
+<pre>
+ .WS +4
+ A line of text
+ .WS -4
+</pre>
+
+The <code>.WS -4</code> undoes the effect of <code>.WS
++4</code>. You can also reset <strong>WS</strong> to
+its groff default by entering
+<p>
+<pre>
+ .WS DEFAULT
+</pre>
+
+This can be particularly useful if you've been playing around
+with plus and minus values, and can't remember by how much you
+have to in/decrease the word space to get it back to normal.
+<br>
+
+<!---SS--->
+
+<hr width="66%" align="left">
+<a name="SS"><h3><u>Sentence space</u></h3></a>
+<br>
+Macro: <strong>SS</strong> <var>&lt;+sentence space&gt; | 0 | DEFAULT</var>
+
+<p>
+<strong>SS</strong> (Sentence Space) tells groff how to treat double
+spaces it encounters between sentences in
+<a href="definitions.html#TERMS_INPUTLINE">input lines</a>.
+If you use <strong>SS</strong>, input sentences with two spaces
+after them AND input sentences that fall at the end of input lines
+all receive a normal word space plus an additional amount of space
+whose size is determined by the + value passed as an argument to
+<strong>SS</strong>. Thus,
+<p>
+<pre>
+ .SS +2
+</pre>
+
+means that input sentences with two spaces after them receive a normal
+word space PLUS the +2 value passed to <strong>SS</strong>.
+<p>
+Like
+<strong>WS</strong>, increasing the sentence space by a value of
+1 or 2 produces a difference that in many cases is scarcely visible;
+increasing by a value of 5 or so produces a subtle but noticeable
+difference (i.e. the space between double-spaced input sentences will
+be slightly but visibly greater than the space between words); and
+increasing by a value greater than 10 is always apparent. You should
+preview your work to assess the effect of <strong>SS</strong>.
+<p>
+There's an additional argument you can pass <strong>SS</strong>:
+the number zero (without the + sign). It's the argument you'll
+use most often. Typeset copy should never have two spaces between
+sentences, and the "zero" argument tells groff to give the extra
+spaces no space at all (effectively removing them). Therefore,
+if you double-space your sentences (as you should when writing in a
+text editor), get in the habit of putting
+<p>
+<pre>
+ .SS 0
+</pre>
+
+at the top of your files.
+
+<p>
+If you do use <strong>SS</strong> for something other than ensuring
+that you don't get unwanted sentence spaces in output copy, you
+can set or reset the sentence space to the groff default (the same
+width as a word space, i.e. double-spaced input sentences will appear
+double-spaced on output as well) with
+<p>
+<pre>
+ .SS DEFAULT
+</pre>
+
+If you're using the
+<a href="docprocessing.html">document processing macros</a>
+and your
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE</a>
+is <strong>TYPEWRITE</strong>, <code>.SS DEFAULT</code> is the default,
+because you <em>do</em> want double spaces between sentences in copy
+that imitates the look of a typewritten document.
+<p>
+<strong>IMPORTANT: SS</strong> with an argument other than
+&quot;0&quot; should only be used if you're of the old (and wise)
+school of typists that puts two spaces between sentences. If you
+ignore this advice and use <strong>SS</strong> when you habitually
+put only one space between sentences, you risk producing output where
+the space between sentences is not equal.
+<br>
+
+<!---HY--->
+
+<hr width="66%" align="left">
+<a name="HY"><h3><u>Automatic hyphenation control</u></h3></a>
+<br>
+Macro: <strong>HY</strong> <var>toggle</var>
+<br>
+Macro: <strong>HY</strong> <var>LINES &lt;max. number of consecutive hyphenated lines&gt;</var>
+<br>
+Macro: <strong>HY</strong> <var>MARGIN &lt;size of hyphenation margin&gt;</var>
+<br>
+Macro: <strong>HY</strong> <var>SPACE &lt;extra interword spacing to prevent hyphenation&gt;</var>
+<br>
+Macro: <strong>HY</strong> <var>DEFAULT</var>
+<br>
+Aliases: <strong>HYPHENATE, HYPHENATION</strong>
+
+<p>
+<strong>HY</strong>, as you can see, can be invoked with a number of
+arguments. In all cases, the aliases <strong>HYPHENATE</strong>
+or <strong>HYPHENATION</strong> can be used in place of
+<strong>HY</strong>. To aid in understanding the various arguments
+you can pass to <strong>HY</strong>, I've broken them down into
+separate sections.
+
+<h3><u>1. HY</u></h3>
+
+<p>
+<strong>HY</strong> by itself (i.e. with no argument) simply turns
+automatic hyphenation on. Any argument other than <strong>LINES,
+MARGIN, SPACE</strong> or <strong>DEFAULT</strong>, turns automatic
+hyphenation off. For example, as explained in
+<a href="intro.html#MACRO_ARGS">How to read macro arguments</a>,
+you could turn <strong>HY</strong> off by entering
+<p>
+<pre>
+ .HY OFF
+ or
+ .HY X
+ or
+ .HY END
+</pre>
+
+<strong>HY</strong> observes the following default hyphenation rules:
+<br>
+<ol>
+ <li>Last lines (i.e. ones that will spring a trap -- typically
+ the last line on a page) will not be hyphenated.
+ <li>The first and last two characters of a word are never
+ split off.
+</ol>
+
+<h3><u>2. HY LINES</u></h3>
+
+<p>
+<strong>HY LINES</strong> sets the maximum number of consecutive
+hyphenated lines that will appear in output copy. 2 is a very
+good choice, and you'd set it with
+<p>
+<pre>
+ .HY LINES 2
+</pre>
+
+By default, when you turn automatic hyphenation on, there is no
+limit to the number of consecutive hyphenated lines.
+
+<p>
+<strong>NOTE:</strong>
+<a href="definitions.html#TERMS_DISCRETIONARYHYPHEN">Discretionary hyphens</a>
+count when groff is figuring out how many lines to hyphenate;
+explicit hyphens do not.
+
+<h3><u>3. HY MARGIN</u></h3>
+
+<p>
+<strong>HY MARGIN</strong> sets the amount of room allowed at
+the end of a line before hyphenation is tripped (e.g. if there's
+only 6 points left at the end of a line, groff won't try to hyphenate
+the next word). <strong>HY MARGIN</strong> only applies if you're
+using
+<a href="#QUAD">QUAD</a>, and is really only useful if you're
+using <strong>QUAD LEFT</strong>.
+
+<p>
+As an example, if you don't want groff to hyphenate words when there's
+only 18 points of space left at the end of a left-quadded line,
+you'd enter
+<p>
+<pre>
+ .HY MARGIN 18p
+</pre>
+
+<strong>NOTE:</strong> The numeric argument after <strong>HY
+MARGIN</strong> requires a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
+
+<h3><u>4. HY SPACE</u></h3>
+
+<p>
+<strong>HY SPACE</strong> sets an amount of extra interword
+space that groff will <em>try</em> to put between words on a
+line in order to PREVENT hyphenation. <strong>HY SPACE</strong>
+applies only to
+<a href="definitions.html#TERMS_JUST">justified lines</a>. Generally speaking,
+you'll want this value to be quite small, since too big a value
+will result in lines with gaping holes between the words. A reasonable
+value might be half a point, or one point, which you'd set with
+<p>
+<pre>
+ .HY SPACE .5p
+ or
+ .HY SPACE 1p
+</pre>
+
+<strong>NOTE:</strong> The numeric argument after <strong>HY
+SPACE</strong> requires a
+<a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>.
+
+<h3><u>4. HY DEFAULT</u></h3>
+
+<p>
+<strong>HY DEFAULT</strong> resets automatic hyphenation to its
+default behaviour, cancelling any changes made with <strong>LINES,
+MARGIN,</strong> and/or <strong>SPACE</strong>.
+
+<h3><u>A note on hyphenation in general</u></h3>
+
+<p>
+Hyphenation is a necessary evil. If it can be avoided, it should be.
+If it can't be, it should occur infrequently. That's the reason for
+number of parameters you can set with <strong>HY</strong>.
+
+<p>
+Furthermore, hyphenation in
+<a href="definitions.html#TERMS_RAG">rag</a>
+copy requires a great deal of attention. At best, it should be
+avoided completely by individually adjusting the number of words
+on consecutive lines to achieve a pleasing, natural-looking rag.
+Since such adjustments are often too fussy for document
+processing, I recommend playing around with <strong>HY MARGIN</strong>
+a bit if your copy looks hyphen-heavy.
+<br>
+
+<!---HY_SET--->
+
+<hr width="66%" align="left">
+<a name="HY_SET"><h3><u>Set hyphenation parameters all at once</u></h3></a>
+<br>
+Macro: <strong>HY_SET</strong> <var>&lt;lines&gt; [ &lt;margin&gt; [ &lt;space&gt; ] ]</var>
+<br>
+Alias: <strong>HYSET</strong>
+
+<p>
+<strong>HY_SET</strong> lets you set the parameters for hyphenation
+with a single macro. &lt;lines&gt;, &lt;margin&gt; and &lt;space&gt;
+correspond to the numeric values required by
+<strong>LINES</strong>, <strong>MARGIN</strong> and
+<strong>SPACE</strong> as described
+<a href="#HY">above</a>.
+
+<p>
+To set just the maximum number of consecutive hyphenated lines,
+you'd enter
+<p>
+<pre>
+ .HY_SET 2
+</pre>
+
+If you wanted the same number of maximum consecutive hyphenated lines
+and a hyphenation margin for use with
+<a href="definitions.html#TERMS_RAG">rag</a>
+copy,
+<p>
+<pre>
+ .HY_SET 2 36p
+</pre>
+
+would set the hyphenation margin to 36 points.
+
+<p>
+If you wanted the same number of maximum consecutive hyphenated
+lines and a hyphenation space of 2 points for use with
+<a href="definitions.html#TERMS_JUST">justified</a>
+copy,
+<p>
+<pre>
+ .HYSET 2 0 2p
+</pre>
+
+is how you'd do it.
+<br>
+
+<!---RW--->
+
+<hr width="66%" align="left">
+<a name="RW"><h3><u>Reduce whitespace</u></h3></a>
+<br>
+Macro: <strong>RW</strong> <var>&lt;amount of whitespace reduction between letters&gt;</var>
+<br>
+
+<p>
+<strong>RW</strong> (Reduce Whitespace) and its corresponding macro,
+<strong>EW</strong> (Expand Whitespace), allow you to tighten
+(or loosen)
+<a href="definitions.html#TERMS_OUTPUTLINE">output lines</a>
+by uniformly reducing or expanding the space between characters.
+This is particularly useful when you want to squeeze or stretch
+lines on a narrow measure.
+
+<p>
+The value passed to <strong>RW</strong> may be a whole number or a
+decimal fraction. Since a value of 1 produces a noticeable reduction
+in the space between letters at text sizes, you'll most likely use
+small decimal values when tightening lines. For example,
+<p>
+<pre>
+ .RW .1
+ or
+ .RW .2
+</pre>
+
+may be just enough to squeeze an extra character or two on a
+line without the change in letter spacing being obvious. I
+highly recommend previewing your work to assess the effect of
+<strong>RW</strong>.
+
+<p>
+<p>
+<strong>IMPORTANT:</strong> <strong>RW</strong> affects all
+<a href="definitions.html#TERMS_FONT">fonts</a>
+in the
+<a href="definitions.html#TERMS_FAMILY">family</a>
+current at the time it's invoked. It must be reset to zero to
+cancel its effect (<code>.RW 0</code>) on those fonts, or reinvoked
+(possibly with a different value) if you change family.
+<p>
+<strong>NOTE:</strong> By default, <strong>RW</strong> does not deposit a
+<a href="#BR">break</a>
+(<strong>BR</strong>) when it's invoked. If you want
+<strong>RW</strong> to break at the ends of the previous
+<a href="definitions.html#TERMS_INPUTLINE">input lines</a>,
+you can tell <strong>mom</strong> that's what you want by invoking the
+<a href="#BR_AT_LINE_KERN">BR_AT_LINE_KERN</a>
+toggle macro.
+<br>
+
+<!---EW--->
+
+<hr width="66%" align="left">
+<a name="EW"><h3><u>Expand whitespace</u></h3></a>
+<br>
+Macro: <strong>EW</strong> <var>&lt;amount of whitespace expansion between letters&gt;</var>
+<br>
+
+<p>
+<strong>EW</strong> (Expand Whitespace) expands the amount of
+whitespace between letters, effectively &quot;loosening&quot; lines
+of type.
+
+<p>
+The value passed to <strong>EW</strong> may be a whole number or a
+decimal fraction. Since a value of 1 produces a noticeable
+expansion in the space between letters at text sizes, you'll most likely use
+small decimal values when loosening lines. For example,
+<p>
+<pre>
+ .EW .1
+ or
+ .EW .2
+</pre>
+
+may be just enough to open up a line without the change in letter
+spacing being obvious. I highly recommend previewing your work to
+assess the effect of <strong>EW</strong>.
+
+<p>
+<strong>NOTE:</strong> By default, <strong>EW</strong> does not deposit a
+<a href="#BR">break</a>
+(<strong>BR</strong>) when it's invoked. If you want
+<strong>EW</strong> to break at the ends of the previous
+<a href="definitions.html#TERMS_INPUTLINE">input lines</a>,
+you can tell <strong>mom</strong> that's what you want by invoking the
+<a href="#BR_AT_LINE_KERN">BR_AT_LINE_KERN</a>
+toggle macro.
+<br>
+
+<!---BR_AT_LINE_KERN--->
+
+<hr width="66%" align="left">
+<a name="BR_AT_LINE_KERN"><h3><u>Break before line kerning</u></h3></a>
+<br>
+Macro: <strong>BR_AT_LINE_KERN</strong> <var>toggle</var>
+<br>
+
+<p>
+By default, <strong>mom</strong> does not break
+<a href="definitions.html#TERMS_INPUTLINE">input lines</a>
+when you invoke <strong>RW</strong> or <strong>EW</strong>.
+If you'd like <strong>mom</strong> to break input lines prior
+to <strong>RW</strong> or <strong>EW</strong>, invoke
+<strong>BR_AT_INPUT_LINE</strong> without any argument. To
+disable the breaks, invoke <strong>BR_AT_INPUT_LINE</strong>
+with any argument (<strong>OFF, QUIT, Q, X</strong>...), like
+this
+<p>
+<pre>
+ .BR_AT_LINE_KERN OFF
+ or
+ .BR_AT_LINE_KERN X
+</pre>
+<br>
+
+<!---KERN--->
+
+<hr width="66%" align="left">
+<a name="KERN"><h3><u>Automatic kerning</u></h3></a>
+<br>
+Macro: <strong>KERN</strong> <var>toggle</var>
+<br>
+
+<p>
+By itself (i.e. with no argument), <strong>KERN</strong> turns
+automatic pairwise
+<a href="definitions.html#TERMS_KERN">kerning</a>
+on. With any argument (e.g. OFF, Q, X), pairwise kerning is turned
+off.
+<p>
+Kerning of individual character pairs can be controlled with the
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>
+<strong>\*[BU #]</strong> and <strong>\*[FU #]</strong>. See
+<a href="inlines.html#INLINE_KERNING_MOM">Inline Escapes, kerning</a>.
+<br>
+
+<!---LIGATURES--->
+
+<hr width="66%" align="left">
+<a name="LIGATURES"><h3><u>Automatic ligature generation</u></h3></a>
+<br>
+Macro: <strong>LIGATURES</strong> <var>toggle</var>
+<br>
+Alias: <strong>LIG</strong>
+
+<p>
+Provided your current font has
+<a href="definitions.html#TERMS_LIGATURES">ligatures</a>,
+<strong>LIGATURES</strong>, by itself, turns on automatic
+generation of ligatures. When automatic ligature generation is
+on, simply typing the letters of a ligature combination will
+produce the correct ligature upon output. For example, if you
+type the word &quot;finally&quot;, the fi combination will be
+output as an fi ligature. Generally speaking, ligatures are A
+Good Thing, hence <strong>mom</strong> has them on by default.
+<p>
+<strong>LIGATURES</strong> with any argument turns automatic
+ligature generation off.
+<p>
+<strong>NOTE:</strong> Not all fonts support ligatures.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="INTRO_MODIFICATIONS"></a>
+
+<a name="MODIFICATIONS">
+ <h2><u>Type modifications: pseudo-italic, -bold, -condensed, -extended</u></h2>
+</a>
+
+It sometimes happens that a PostScript
+<a href="definitions.html#TERMS_FAMILY">family</a>
+doesn't contain all the fonts you need. You might, for example,
+be missing an italic font, or a bold font. Or you might not be able
+to get your hands on a condensed family. That's where these macros
+and inline escapes come in. With them, you can fake the fonts
+you're missing. A word of caution, though: &quot;faked&quot;
+fonts are just that -- faked. You should only use them as a
+last resort, and then only sparingly. A word or two or a line
+or two in a faked font will pass unnoticed; large patches of
+type in a faked font look typographically cheap.
+<br>
+
+<a name="INDEX_MODIFICATIONS">
+ <h3><u>Type modifications macro list</u></h3>
+</a>
+
+<ul>
+ <li><strong>Pseudo italic</strong>
+ <ul>
+ <li><a href="#SETSLANT">SETSLANT</a> -- degree of pseudo-italicising
+ <li><a href="#SLANT_INLINE">\*[SLANT]</a> -- inline escape for pseudo-italicising type
+ </ul>
+ <li><strong>Pseudo bold</strong>
+ <ul>
+ <li><a href="#SETBOLDER">SETBOLDER</a> -- amount of emboldening
+ <li><a href="#BOLDER_INLINE">\*[BOLDER]</a> -- inline escape for emboldening type
+ </ul>
+ <li><strong>Pseudo condensed</strong>
+ <ul>
+ <li><a href="#CONDENSE">CONDENSE</a> -- percentage for pseudo-condensed type
+ <li><a href="#COND_INLINE">\*[COND]</a> -- inline escape for pseudo-condensed type
+ </ul>
+ <li><strong>Pseudo extended</strong>
+ <ul>
+ <li><a href="#EXTEND">EXTEND</a> -- percentage for pseudo-extended type
+ <li><a href="#EXT_INLINE">\*[EXT]</a> -- inline escape for pseudo-extending
+ </ul>
+</ul>
+
+<!---SETSLANT--->
+
+<hr width="66%" align="left">
+<a name="SETSLANT"><h3><u>Set degree of slant for pseudo-italicising</u></h3></a>
+<br>
+Macro: <strong>SETSLANT</strong> <var>&lt;degrees to slant type&gt; | RESET</var>
+
+<p>
+Pseudo-italicising of type is accomplished by slanting a roman font
+a certain number of degrees to the right. <strong>SETSLANT</strong>
+lets you fix the number of degrees. <strong>Mom</strong>'s
+default is 15, which produces an acceptable approximation of an
+italic font. If you want another value -- say, 13 degrees --
+you'd set it by entering
+<p>
+<pre>
+ .SETSLANT 13
+</pre>
+
+If you change the degree of slant and later want to set it back
+to the <strong>mom</strong> default, do
+<p>
+<pre>
+ .SETSLANT RESET
+</pre>
+
+<strong>NOTE:</strong> By itself, <strong>SETSLANT</strong>
+will not start pseudo-italicising type; it merely tells
+<strong>mom</strong> what degree of slant you want. To start
+pseudo-italicising, use the
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+<strong>\*[SLANT]</strong>.
+<br>
+
+<!---\*[SLANT]--->
+
+<hr width="66%" align="left">
+<a name="SLANT_INLINE"><h3><u>Pseudo italic on/off</u></h3></a>
+<br>
+Inline: <strong>\*[SLANT] -- turn pseudo-italic on</strong>
+<br>
+Inline: <strong>\*[SLANTX] -- turn pseudo-italic off</strong>
+
+<p>
+<strong>\*[SLANT]</strong> begins pseudo-italicising type.
+<strong>\*[SLANTX]</strong> turns the feature off. Both are
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>,
+therefore they should not appear as separate lines, but rather
+be embedded in text lines, like this:
+<p>
+<pre>
+ Not \*[SLANT]everything\*[SLANTX] is as it seems.
+</pre>
+
+Alternatively, if you wanted the whole line pseudo-italicised,
+you'd do
+<p>
+<pre>
+ \*[SLANT]Not everything is as it seems.\*[SLANTX]
+</pre>
+
+Once <strong>\*[SLANT]</strong> is invoked, it remains in effect
+until turned off.
+
+<p>
+<strong>NOTE:</strong> If you're using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
+with
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+<strong>mom</strong> underlines pseudo-italics by default. To
+change this behaviour, use the special macro
+<a href="docprocessing.html#SLANT_MEANS_SLANT">SLANT_MEANS_SLANT</a>.
+<br>
+
+<!---SETBOLDER--->
+
+<hr width="66%" align="left">
+<a name="SETBOLDER"><h3><u>Set amount of emboldening</u></h3></a>
+<br>
+Macro: <strong>SETBOLDER</strong> <var>&lt;amount of emboldening, in machine units&gt; | RESET</var>
+
+<p>
+Emboldening of type is accomplished by printing characters
+twice; the second printing is slightly offset from the first,
+effectively &quot;thickening&quot; the character.
+<strong>SETBOLDER</strong> lets you set the number of
+<a href="definitions.html#TERMS_UNITS">machine units</a>
+for the offset. <strong>Mom</strong>'s default is 700 units, which
+produces an acceptable approximation of a bold font. If you want
+another value -- say, 500 units -- you'd set it by entering
+<p>
+<pre>
+ .SETBOLDER 500
+</pre>
+
+If you change the emboldening offset and later want to set it back
+to the <strong>mom</strong> default, do
+<p>
+<pre>
+ .SETBOLDER RESET
+</pre>
+
+<strong>NOTE:</strong> By itself, <strong>SETBOLDER</strong>
+will not start emboldening type; it merely tells
+<strong>mom</strong> what you want the emboldening offset to be.
+To start emboldening, use the
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+<strong>\*[BOLDER]</strong>.
+<br>
+
+<!---\*[BOLDER]--->
+
+<hr width="66%" align="left">
+<a name="BOLDER_INLINE"><h3><u>Emboldening on/off</u></h3></a>
+<br>
+Inline: <strong>\*[BOLDER] -- turn emboldening on</strong>
+<br>
+Inline: <strong>\*[BOLDERX] -- turn emboldening off</strong>
+
+<p>
+<strong>\*[BOLDER]</strong> begins emboldening type.
+<strong>\*[BOLDERX]</strong> turns the feature off. Both are
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>,
+therefore they should not appear as separate lines, but rather
+be embedded in text lines, like this:
+<p>
+<pre>
+ Not \*[BOLDER]everything\*[BOLDERX] is as it seems.
+</pre>
+
+Alternatively, if you wanted the whole line emboldened,
+you'd do
+<p>
+<pre>
+ \*[BOLDER]Not everything is as it seems.\*[BOLDERX]
+</pre>
+
+Once <strong>\*[BOLDER]</strong> is invoked, it remains in effect
+until turned off.
+
+<p>
+<strong>NOTE:</strong> If you're using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
+with
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+<strong>mom</strong> ignores <strong>\*[BOLDER]</strong>
+requests.
+<br>
+
+<!---CONDENSE--->
+
+<hr width="66%" align="left">
+<a name="CONDENSE"><h3><u>Set percentage for pseudo-condensed type</u></h3></a>
+<br>
+Macro: <strong>CONDENSE</strong> <var>&lt;pseudo-condense percentage&gt;</var>
+
+<p>
+Pseudo-condensing of type is accomplished by reducing the width of
+characters at a given point size without reducing their height,
+effectively narrowing them so they look like condensed type.
+<strong>CONDENSE</strong> tells <strong>mom</strong> what
+percentage of the normal character width you want the characters
+to be condensed.
+<p>
+<strong>Mom</strong> has no default value for
+<strong>CONDENSE</strong>, therefore you must set it before using the
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+<a href="#COND_INLINE">\*[COND]</a>.
+80 percent of the normal character width is a good value, and
+you'd set it like this:
+<p>
+<pre>
+ .CONDENSE 80
+</pre>
+
+<strong>NOTE:</strong> By itself, <strong>CONDENSE</strong>
+will not start pseudo-condensing type; it merely tells
+<strong>mom</strong> what percentage of the normal character
+width you want characters to be condensed.
+To start pseudo-condensing, use the
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+<strong>\*[COND]</strong>.
+<p>
+<strong>Additional note:</strong> Make sure that pseudo-condensing
+is off (with
+<a href="#COND_INLINE">\*[CONDX]</a>)
+before before making any changes to the pseudo-condense percentage
+with <strong>CONDENSE</strong>.
+<br>
+
+<!---\*[COND]--->
+
+<hr width="66%" align="left">
+<a name="COND_INLINE"><h3><u>Pseudo-condensing on/off</u></h3></a>
+<br>
+Inline: <strong>\*[COND] -- turn pseudo-condensing on</strong>
+<br>
+Inline: <strong>\*[CONDX] -- turn pseudo-condensing off</strong>
+
+<p>
+<strong>\*[COND]</strong> begins pseudo-condensing type.
+<strong>\*[CONDX]</strong> turns the feature off. Both are
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>,
+therefore they should not appear as separate lines, but rather
+be embedded in text lines, like this:
+<p>
+<pre>
+ \*[COND]Not everything is as it seems.\*[CONDX]
+</pre>
+
+<strong>\*[COND]</strong> remains in effect until you turn it
+off with <strong>\*[CONDX]</strong>.
+
+<p>
+<strong>IMPORTANT:</strong> You MUST turn <strong>\*[COND]</strong>
+off before making any changes to the point size of your type, either
+via the
+<a href="#PS">PT_SIZE</a>
+macro or with the <strong>\s</strong> inline escape. If you wish
+the new point size to be pseudo-condensed, simply reinvoke
+<strong>\*[COND]</strong> afterwards. Equally,
+<strong>\*[COND]</strong> must be turned off before changing the
+condense percentage with <a href="#CONDENSE">CONDENSE</a>.
+
+<p>
+<strong>NOTE:</strong> If you're using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
+with
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+<strong>mom</strong> ignores <strong>\*[COND]</strong>
+requests.
+<br>
+
+<!---EXTEND--->
+
+<hr width="66%" align="left">
+<a name="EXTEND"><h3><u>Set percentage for pseudo-extended type</u></h3></a>
+<br>
+Macro: <strong>EXTEND</strong> <var>&lt;pseudo-extend percentage&gt;</var>
+
+<p>
+Pseudo-extending of type is accomplished by increasing the width of
+characters at a given point size without increasing their height,
+effectively widening them so they look like extended type.
+<strong>EXTEND</strong> tells <strong>mom</strong> what
+percentage of the normal character width you want the characters
+to be extended.
+<p>
+<strong>Mom</strong> has no default value for
+<strong>EXTEND</strong>, therefore you must set it before using the
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+<a href="#EXT_INLINE">\*[EXT]</a>.
+120 percent of the normal character width is a good value, and
+you'd set it like this:
+<p>
+<pre>
+ .EXTEND 120
+</pre>
+
+<strong>NOTE:</strong> By itself, <strong>EXTEND</strong>
+will not start pseudo-extending type; it merely tells
+<strong>mom</strong> what percentage of the normal character
+width you want characters to be extended.
+To start pseudo-extending, use the
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+<strong>\*[EXT]</strong>.
+
+<p>
+<strong>Additional note:</strong> Make sure that
+pseudo-extending is off (with
+<a href="#EXT_INLINE">\*[EXTX]</a>)
+before before making any changes to the pseudo-extend percentage
+with <strong>EXTEND</strong>.
+<br>
+
+<!---\*[EXT]--->
+
+<hr width="66%" align="left">
+<a name="EXT_INLINE"><h3><u>Pseudo-extending on/off</u></h3></a>
+<br>
+Inline: <strong>\*[EXT] -- turn pseudo-extending on</strong>
+<br>
+Inline: <strong>\*[EXTX] -- turn pseudo-extending off</strong>
+
+<p>
+<strong>\*[EXT]</strong> begins pseudo-extending type.
+<strong>\*[EXTX]</strong> turns the feature off. Both are
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>,
+therefore they should not appear as separate lines, but rather
+be embedded in text lines, like this:
+<p>
+<pre>
+ \*[EXT]Not everything is as it seems.\*[EXTX]
+</pre>
+
+<strong>\*[EXT]</strong> remains in effect until you turn it
+off with <strong>\*[EXTX]</strong>.
+
+<p>
+<strong>IMPORTANT:</strong> You MUST turn <strong>\*[EXT]</strong>
+off before making any changes to the point size of your type, either
+via the
+<a href="#PS">PT_SIZE</a>
+macro or with the <strong>\s</strong> inline escape. If you wish
+the new point size to be pseudo-extended, simply reinvoke
+<strong>\*[EXT]</strong> afterwards. Equally,
+<strong>\*[EXT]</strong> must be turned off before changing the
+extend percentage with <a href="#EXTEND">EXTEND</a>.
+
+<p>
+<strong>NOTE:</strong> If you're using the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>
+with
+<a href="docprocessing.html#PRINTSTYLE">PRINTSTYLE TYPEWRITE</a>,
+<strong>mom</strong> ignores <strong>\*[EXT]</strong>
+requests.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="INTRO_ALDRLD"></a>
+
+<a name="ALDRLD">
+ <h2><u>Vertical movement</u></h2>
+</a>
+
+The two macros in this section allow you to move down or up on the page
+relative to the current
+<a href="definitions.html#TERMS_BASELINE">baseline</a>.
+
+<a name="INDEX_ALDRLD">
+ <h3><u>Vertical movement macro list</u></h3>
+</a>
+<ul>
+ <li><a href="#ALD">ALD</a> -- Advance Lead
+ <li><a href="#RLD">RLD</a> -- Reverse Lead
+</ul>
+
+<!---ALD--->
+
+<hr width="66%" align="left">
+ <a name="ALD"><h3><u>Advance Lead (move downward)</u></h3></a>
+<br>
+Macro: <strong>ALD</strong> <var>&lt;distance to move downward&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>ALD</strong> takes one argument: the distance to move downward
+on the page relative to the current vertical position.
+<p>
+Used by itself, or preceded by
+<a href="#BR">BR</a>,
+<strong>ALD</strong> will advance by one line space plus the
+distance you specify. Preceded by
+<a href="#EL">EL</a>,
+it will advance by exactly the distance you specify.
+<p>
+<strong>ALD</strong> requires a unit of measure. Decimal fractions
+are allowed, and values may be combined. Therefore, to move down
+on the page by 1/4 of an inch, you could enter either
+<p>
+<pre>
+ .ALD .25i
+ or
+ .ALD 1P+6p
+</pre>
+
+As the mnemonic (<strong>A</strong>dvance
+<strong>L</strong>ea<strong>D</strong>) suggests, you'll most often
+use <strong>ALD</strong> with
+<a href="definitions.html#TERMS_PICASPOINTS">points</a>
+of lead.
+
+<p>
+<strong>NOTE:</strong> if you want to use <strong>ALD</strong>
+at the top of a page (i.e. to advance to the starting position
+of type on a page), combine the value you want with -1v (minus
+one line space), like this:
+<p>
+<pre>
+ .ALD 1i-1v
+</pre>
+
+At the top of a page, this will advance one inch from the
+top edge of the paper. Without the -1v, the same command would
+advance one inch from the top of the page plus the distance of
+one line space.
+<p>
+<strong>Important:</strong> Do NOT use <strong>ALD</strong> in this
+way if you have set a top margin with
+<a href="#T_MARGIN">T_MARGIN</a>
+or
+<a href="#PAGE">PAGE</a>.
+<br>
+
+<!---RLD--->
+
+<hr width="66%" align="left">
+ <a name="RLD"><h3><u>Reverse Lead (move upward)</u></h3></a>
+<br>
+Macro: <strong>RLD</strong> <var>&lt;distance to move upward&gt;</var>
+<br>
+<em>*Requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>RLD</strong> takes one argument: the distance to move
+upward on the page relative to the current vertical position.
+<p>
+Used by itself, or preceded by
+<a href="#BR">BR</a>,
+<strong>RLD</strong> will advance by one line space, then
+reverse by the distance you specify. Preceded by
+<a href="#EL">EL</a>,
+it will reverse by exactly the distance you specify.
+<p>
+<strong>RLD</strong> requires a unit of measure. Decimal fractions
+are allowed, and values may be combined. Therefore, to move up
+on the page by 1/4 of an inch, you could enter either
+<p>
+<pre>
+ .RLD .25i
+ or
+ .RLD 1P+6p
+</pre>
+
+As the mnemonic (<strong>R</strong>dvance
+<strong>L</strong>ea<strong>D</strong>) suggests, you'll most often
+use <strong>RLD</strong> with
+<a href="definitions.html#TERMS_PICASPOINTS">points</a>
+of lead.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="INTRO_TABS"></a>
+
+<a name="TABS">
+ <h2><u>Tabs</u></h2>
+</a>
+
+<strong>Mom</strong> provides two different kinds of tab setup:
+typesetting tabs and string tabs. Neither one has anything to
+do with the tab key on your keyboard, and both are utterly
+divorced from groff's notion of tabs. I recommend reading this
+section carefully in order to understand how
+<strong>mom</strong> handles tabs.
+
+<a name="TYPESETTING_TABS"><h3><u>Typesetting tabs</u></h3></a>
+<p>
+Typesetting tabs are defined by both an indent from the left margin and
+a line length. This is quite different from typewriter-style tab stops
+(the groff norm) that only define the left indent. In conjunction
+with the multi-column macros, typesetting tabs significantly facilitate
+tabular and columnar work.
+<p>
+Typesetting tabs are created with the <strong>TAB_SET</strong>
+macro. <strong>TAB_SET</strong> identifies the tab (by number),
+establishes its left indent and line length, and optionally sets
+a quad direction and fill mode. After tabs have been created with
+<strong>TAB_SET</strong>, they can be called at any time with the
+<strong>TAB</strong> macro.
+<p>
+<strong>NOTE:</strong> see the section
+<a href="typemacdoc.html#TYPESETTING">Typesetting Macros in Document Processing</a>
+for information and advice on using tabs with the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
+
+<a name="TYPESETTING_TABS_TUT"><h3><u>Quickie tutorial on typesetting tabs</u></h3></a>
+<p>
+Say you want to set up three tabs to produce an employee evaluation
+that looks something like this:
+<p>
+<a name="TYPSETTING_TABS_SAMPLE"></a>
+<pre>
+ CRITERION EVALUATION COMMENTS
+
+ Service Good Many clients specifically request
+ support from Joe by name.
+
+ Punctuality Satisfactory Tends to arrive after 8:00am, but
+ often works through lunch hour.
+
+ Team spirit Needs work Persistently gives higher priority
+ to helping clients than respecting
+ organizational hierarchy.
+</pre>
+
+You want the first tab (&quot;CRITERION&quot;)
+<br>
+<ul>
+ <li>to begin at the left margin of the page (i.e. no indent)
+ <li>to have a line length of 5 picas
+ <li>to be set flush left
+</ul>
+<br>
+Tabs must be numbered, and each has to be set up with a separate
+<a href="#TAB_SET">TAB_SET</a>
+line. Therefore, to set up tab 1, you enter
+<p>
+<pre>
+ .TAB_SET 1 0 5P L
+ | | | |
+ tab #__| | | |__direction
+ | |
+ indent__| |__length
+</pre>
+
+You want the second tab (&quot;EVALUATION&quot;)
+<br>
+<ul>
+ <li>to begin 8 picas from the left margin
+ <li>to have a length of 9 picas
+ <li>to be set centered.
+</ul>
+<br>
+You set it up like this:
+<p>
+<pre>
+ .TAB_SET 2 8P 9P C
+ | | | |
+ tab #__| | | |__direction
+ | |
+ indent__| |__length
+</pre>
+
+You want the third tab (&quot;COMMENTS&quot;)
+<br>
+<ul>
+ <li>to begin 19 picas from the left margin
+ <li>to have a length of 17 picas
+ <li>to be set flush left, <a href="definitions.html#TERMS_FILLED">filled</a>
+</ul>
+<br>
+The setup looks like this:
+<p>
+<pre>
+ .TAB_SET 3 19P 17P L QUAD
+ | | | | |
+ | | | | |__fill output lines
+ | | | |
+ tab #__| | | |__direction
+ | |
+ indent__| |__length
+</pre>
+
+Once the tabs are set up, you can call them in one of two ways:
+<br>
+<ul>
+ <li><a href="#TAB">TAB</a> (with the tab
+ number as an argument) breaks the current line,
+ advances one linespace, and calls the tab.
+ <li><a href="#TN">TN</a> (Tab Next) keeps
+ you on the current line and moves over to the next
+ tab in sequence (i.e. from 1 to 2, 2 to 3, etc.).
+</ul>
+<br>
+To exit from tabs and restore your original left margin, line length,
+quad direction and fill mode, use
+<a href="#TQ">TQ</a>
+(Tab Quit).
+<p>
+Here's how the input for our sample employee evaluation looks
+(with some introductory parameters):
+<p>
+<pre>
+ .PAGE 8.5i 11i 1i 1i 1i
+ .FAMILY T
+ .FT R
+ .PT_SIZE 14
+ .LS 16
+ .QUAD LEFT
+ .KERN
+ .HY OFF
+ .SS 0
+ .TAB_SET 1 0 5P L
+ .TAB_SET 2 8P 9P C
+ .TAB_SET 3 19P 17P L QUAD
+ .TAB 1
+ CRITERION
+ .TN
+ EVALUATION
+ .TN
+ COMMENTS
+ .SP
+ .TAB 1
+ Service
+ .TN
+ Good
+ .TN
+ Many clients specifically request support from Joe by name.
+ .SP
+ .TAB 1
+ Punctuality
+ .TN
+ Satisfactory
+ .TN
+ Tends to arrive after 8:00am, but often works through lunch hour.
+ .SP
+ .TAB 1
+ Team spirit
+ .TN
+ Needs work
+ .TN
+ Persistently gives higher priority to helping clients
+ than respecting organizational hierarchy.
+ .TQ
+</pre>
+
+Try setting this up and previewing it with
+<p>
+<pre>
+ groff -mom -X &lt;filename&gt;
+</pre>
+
+Notice how <kbd>.TN</kbd> simply moves over to the next tab,
+while the combination <kbd>.SP/.TAB 1</kbd> breaks the
+line, advances by one extra linespace, and calls the first tab.
+<p>
+Notice, too, how the <kbd>QUAD</kbd> argument passed to
+tab 3 means you don't have to worry about the length of
+<a href="definitions.html#TERMS_INPUTLINE">input lines</a>;
+<strong>mom</strong>
+<a href="definitions.html#TERMS_FILLED">fills</a>
+the tab and sets the type flush left.
+
+<a name="STRING_TABS"><h3><u>String tabs (autotabs)</u></h3></a>
+<p>
+String tabs let you mark off tab positions inline. Left indents
+and line lengths are calculated from the beginning and end positions of
+the marks. This is especially useful when tab indents and lengths
+need to be determined from the text that goes in each tab.
+<p>
+Setting up string tabs is a two-step procedure. First, you enter an
+input line in which you mark off where you want tabs to begin and end.
+(This is often best done in conjunction with the
+<a href="goodies.html#SILENT">SILENT</a>
+macro.)
+<p>
+Next, you invoke the
+<a href="#ST">ST</a>
+macro for every string tab you defined, and optionally pass quad and
+fill information to it. That done, string tabs are called with
+the
+<a href="#TAB">TAB</a>
+macro, just like typesetting tabs.
+<p>
+In combination with the
+<a href="goodies.html#PAD">PAD</a>
+macro and the groff inline escape
+<a href="inlines.html#INLINE_HORIZONTAL_GROFF">\h</a>
+(move horizontally across the page) or <strong>mom</strong>'s
+<a href="inlines.html#INLINE_HORIZONTAL_MOM">\*[FP#]</a>
+(Forward Points) inline, string tabs provide
+tremendous flexibility in setting up complex tab structures.
+
+<a name="STRING_TABS_TUT"><h3><u>Quickie tutorial on string tabs</u></h3></a>
+<p>
+Say you want to set up tabs for the
+<a href="#TYPSETTING_TABS_SAMPLE">employee evaluation form</a>
+used as an example in the
+<a href="#TYPESETTING_TABS_TUT">typesetting tabs tutorial</a>.
+This time, though, you want to play around with the point size of
+type, so you can't know exactly how long the tabs will be or where
+they should start. All you know is
+<br>
+<ul>
+ <li>CRITERION is the longest line in tab 1
+ <li>EVALUATION is the longest line in tab 2
+ <li>tab 3 should extend to the current right margin
+ <li>you want a 1 pica gutter between each tab
+</ul>
+<br>
+This is an ideal job for string tabs.
+<p>
+The first thing you need for string tabs is an
+<a href="definitions.html#TERMS_INPUTLINE">input line</a>
+with tab positions marked on it. Tabs are marked with the
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>
+<strong>\*[ST#]</strong> and <strong>\*[ST#X]</strong>. (In this
+example, we enclose the input line with the
+<a href="goodies.html#SILENT">SILENT</a>
+macro so the line doesn't print. We also use the
+<a href="goodies.html#PAD">PAD</a>
+macro to permit defining tab 3 as simply &quot;the amount of
+space remaining on the input line.&quot;)
+<p>
+The setup looks like this:
+<p>
+<pre>
+ .SILENT
+ .PAD "\*[ST1]CRITERION\*[ST1X]\*[FP12]\*[ST2]EVALUATION\*[ST2X]\*[FP12]\*[ST3]#\*[ST3X]"
+ .SILENT OFF
+</pre>
+
+The long line after <kbd>.PAD</kbd> looks scary, but it isn't.
+Here's what it means when broken down into its component parts:
+<br>
+<ul>
+ <li>The longest line in tab 1 is &quot;CRITERION&quot;, so we
+ enclose CRITERION with begin/end markers for string tab 1:
+ <p>
+ <kbd>\*[ST1]CRITERION\*[ST1X]</kbd>
+ <br>
+ <li>We want a 1 pica (12 points) gutter between tab 1 and 2,
+ so we insert 12 points of space with \*[FP12]
+ (<strong>F</strong>orward <strong>P</strong>oints 12):
+ <p>
+ <kbd>\*[FP12]</kbd>
+ <br>
+ <li>The longest line in tab 2 is &quot;EVALUATION&quot;, so
+ we enclose EVALUATION with begin/end markers for string
+ tab 2:
+ <p>
+ <kbd>\*[ST2]EVALUATION\*[ST2X]</kbd>
+ <br>
+ <li>We want 1 pica (12 points) between tab 2 and 3, so we
+ insert 12 points of space with another \*[FP12]:
+ <p>
+ <kbd>\*[FP12]</kbd>
+ <br>
+ <li>We want tab 3 to be as long as whatever space remains on
+ the current line length, so we enclose the
+ <a href="goodies.html#PAD_MARKER">pad marker</a>
+ (#) with begin/end markers for string tab 3:
+ <p>
+ <kbd>\*[ST3]#\*[ST3X]</kbd>
+ <br>
+</ul>
+<br>
+The tabs are now defined, but they require
+<a href="definitions.html#TERMS_QUAD">quad direction</a>
+and
+<a href="definitions.html#TERMS_FILLED">fill</a>
+information. For each string tab defined above, enter a
+separate
+<a href="#ST">ST</a>
+line, like this:
+<p>
+<pre>
+ .ST 1 L
+ .ST 2 L
+ .ST 3 L QUAD
+ | | |
+ | | |__fill output lines
+ | |
+ tab__| |__direction
+ number
+</pre>
+
+From here on in, you call the tabs with
+<a href="#TAB">TAB</a>
+and
+<a href="#TN">TN</a>
+just like typesetting tabs (see
+<a href="#TYPESETTING_TABS_TUT">typesetting tabs tutorial</a>).
+<p>
+Here's the complete setup and entry for the sample employee
+evaluation form utilising string tabs.
+<p>
+<pre>
+ .PAGE 8.5i 11i 1i 1i 1i
+ .FAMILY T
+ .FT R
+ .PT_SIZE 14
+ .LS 16
+ .QUAD LEFT
+ .KERN
+ .HY OFF
+ .SS 0
+ .SILENT
+ .PAD "\*[ST1]CRITERION\*[ST1X]\*[FP12]\*[ST2]EVALUATION\*[ST2X]\*[FP12]\*[ST3]#\*[ST3X]"
+ .SILENT OFF
+ .ST 1 L
+ .ST 2 L
+ .ST 3 L QUAD
+ .TAB 1
+ CRITERION
+ .TN
+ EVALUATION
+ .TN
+ COMMENTS
+ .SP
+ .TAB 1
+ Service
+ .TN
+ Good
+ .TN
+ Many clients specifically request support from Joe by name.
+ .SP
+ .TAB 1
+ Punctuality
+ .TN
+ Satisfactory
+ .TN
+ Tends to arrive after 8:00am, but often works through lunch hour.
+ .SP
+ .TAB 1
+ Team spirit
+ .TN
+ Needs work
+ .TN
+ Persistently gives higher priority to helping clients
+ than respecting organizational hierarchy.
+ .TQ
+</pre>
+
+Try setting this up and previewing it with
+<p>
+<pre>
+ groff -mom -X &lt;filename&gt;
+</pre>
+
+Now, change the point size of the above sample to 12 and preview
+it again. You'll see that the tab structure remains identical (tab
+1=CRITERION, tab 2=EVALUATION, tab 3=space remaining, and the gutter
+between tabs is still 1 pica), while the position and length
+of the tabs have altered because of the new point size.
+<p>
+Now try increasing the gutters to 2 picas (put an additional
+<kbd>\*[FP12]</kbd> after each <kbd>\*[FP12]</kbd>). Preview the
+file again, and notice how the tab structure remains the same, but
+the gutters are wider.
+
+
+<a name="INDEX_TABS">
+ <h3><u>Tabs macro list</u></h3>
+</a>
+
+<ul>
+ <li><a href="#TAB_SET">TAB_SET</a> (create typesetting tabs)
+ <li><a href="#INLINE_ST">\*[ST]...\*[STX]</a> (inline escapes for marking String Tabs)
+ <li><a href="#ST">ST</a> (set String Tabs)
+ <li><a href="#TAB">TAB</a> (call tabs)
+ <li><a href="#TN">TN</a> (Tab Next; call next tab in a sequence)
+ <li><a href="#TQ">TQ</a> (Tab Quit)
+</ul>
+
+<!---TAB_SET--->
+
+<hr width="66%" align="left">
+ <a name="TAB_SET"><h3><u>Set up typsetting tabs</u></h3></a>
+<br>
+Macro: <strong>TAB_SET</strong> <var>&lt;tab number&gt; &lt;indent&gt; &lt;length&gt; L | R | C | J [ QUAD ]</var>
+<br>
+<em>*&lt;indent&gt; and &lt;length&gt; require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>TAB_SET</strong> creates typesetting tabs that later can be
+called with
+<a href="#TAB">TAB</a>.
+Typesetting tabs are numbered, and defined by an indent, a length,
+and a &quot;direction&quot;, hence <strong>TAB_SET</strong> has
+four required arguments:
+<br>
+<ul>
+ <li>a tab number
+ <li>an indent (measured from the left margin of the page,
+ or, if you're already in a tab, from the left margin of the tab)
+ <li>a length
+ <li>a direction
+</ul>
+<br>
+To set up a centered tab 6 picas long and 9 points from the left
+margin, you'd enter
+<p>
+<pre>
+ .TAB_SET 1 9p 6P C
+</pre>
+
+The tab number in the above (&quot;1&quot;) is simply an
+identifier. It could have been 4, or 17, or 296. There's no
+need to set up tabs in numerical sequence.
+<p>
+By default, tabs are in
+<a href="definitions.html#TERMS_NOFILL">nofill</a>
+mode, meaning you can enter text in tabs on a line for line basis
+without having to use the
+<a href="#BR">BR</a>
+macro. If you want a tab to be
+<a href="definitions.html#TERMS_FILLED">filled</a>,
+pass the optional argument <strong>QUAD</strong>, which will
+make the tab behave as if you'd entered <kbd>.QUAD L | R |
+C</kbd>.
+<p>
+For
+<a href="definitions.html#TERMS_JUST">justified</a>
+tabs, simply pass the argument <strong>J</strong> (without the
+<strong>QUAD</strong> argument), like this:
+<p>
+<pre>
+ .TAB 1 9p 6P J
+</pre>
+
+Once tabs are set, they can be called at any time with the
+<a href="#TAB">TAB #</a>
+macro, where &quot;#&quot; is the number of the desired tab.
+<p>
+You can set up any number of typesetting tabs. However, be
+aware that
+<a href="#STRING_TABS">string tabs</a>
+are also called with <strong>TAB #</strong>, so be careful that you
+don't set up a typesetting tab numbered, say, 4, when you already
+have a string tab numbered 4. Every tab, typesetting or string,
+must have a unique numeric identifier.
+<p>
+<strong>NOTE:</strong> If you use <strong>TAB_SET</strong> while
+you're currently inside a tab, the indent argument is the distance from
+the tab's left margin, not the left margin of the page. Therefore,
+you should exit tabs (with
+<a href="#TQ">TQ</a>)
+before creating new tabs (unless, of course, you want to set
+up a tab structure within the confines of an existing tab).
+<p>
+<strong>IMPORTANT:</strong> Turn all indents off (see
+<a href="#INDENTS">Indents</a>)
+before setting up tabs with <strong>TAB_SET</strong>, or
+<strong>mom</strong> may get confused.
+<br>
+
+<!---INLINE_ST--->
+
+<hr width="66%" align="left">
+ <a name="INLINE_ST"><h3><u>Mark positions of string tabs</u></h3></a>
+<br>
+Inlines: <strong>\*[ST&lt;number&gt;]...\*[ST&lt;number&gt;X]</strong>
+
+<p>
+String tabs need to be marked off with
+<a href="definitions.html#TERMS_INLINES">inline escapes</a>
+before being set up with the
+<a href="#ST">ST</a>
+macro. Any input line may contain string tab markers.
+<i>&lt;number&gt;</i>, above, means the numeric identifier of
+the tab. The following shows a sample input line with string
+tab markers.
+<p>
+<pre>
+ \*[ST1]Now is the time\*[ST1X] for all \*[ST2]good men\*ST2X] to come to the aid of the party.
+</pre>
+
+String tab 1 begins at the start of the line and ends after the word
+&quot;time&quot;. String tab 2 starts at &quot;good&quot; and ends
+after &quot;men&quot;. Inline escapes (e.g. font or point size
+changes, or horizontal movements, including
+<a href="goodies.html#PAD">padding</a>)
+are taken into account when <strong>mom</strong> determines the
+position and length of string tabs.
+<p>
+Up to nineteen string tabs may be marked (not necessarily all on
+the same line, of course), and they must be numbered between 1
+and 19.
+<p>
+Once string tabs have been marked in input lines, they have to
+be &quot;set&quot; with
+<a href="#ST">ST</a>,
+after which they may be called, by number, with
+<a href="#TAB">TAB</a>.
+<p>
+<strong>NOTE:</strong> Lines with string tabs marked off in them
+are normal input lines, i.e. they get printed, just like any
+input line. If you want to set up string tabs without the line
+printing, use the
+<a href="#SILENT">SILENT</a>
+macro.
+<p>
+<strong>IMPORTANT:</strong> Do not try to set up string tabs on
+a line that is broken with
+<a href="#SPREAD">SPREAD</a>.
+<strong>Mom</strong> calculates string tab positions and lengths
+as she reads the input line, not after the line has undergone
+manipulations to the word spacing.
+<br>
+
+<!---ST--->
+
+<hr width="66%" align="left">
+ <a name="ST"><h3><u>Set string tabs</u></h3></a>
+<br>
+Macro: <strong>ST</strong> <var>&lt;tab number&gt; L | R | C | J [ QUAD ]</var>
+
+<p>
+After string tabs have been marked off on an input line (see
+<a href="#INLINE_ST">\*[ST]...\*[STX]</a>),
+you need to &quot;set&quot; them by giving them a direction
+and, optionally, the <strong>QUAD</strong> argument. In this
+respect, <strong>ST</strong> is like
+<a href="#TAB_SET">TAB_SET</a>
+except that you don't have to give <strong>ST</strong> an indent
+or a line length (that's already taken care of, inline, by
+<kbd>\*[ST]...\*[STX]</kbd>). If you want string tab 1 to be
+left, enter
+<p>
+<pre>
+ .ST 1 L
+</pre>
+
+If you want it to be left and
+<a href="definitions.html#TERMS_FILLED">filled</a>, enter
+<p>
+<pre>
+ .ST 1 L QUAD
+</pre>
+
+If you want it to be justified, enter
+<p>
+<pre>
+ .ST 1 J
+</pre>
+
+See the
+<a href="#STRING_TABS_TUT">Quickie tutorial on string tabs</a>
+for a full explanation of setting up string tabs.
+<br>
+
+<!---TAB--->
+
+<hr width="66%" align="left">
+<a name="TAB"><h3><u>Call tabs</u></h3></a>
+<br>
+Macro: <strong>TAB</strong> <var>&lt;tab number&gt;</var>
+<br>
+Alias: <strong>TB</strong>
+<p>
+After tabs have been defined (either with
+<a href="#TAB_SET">TAB_SET</a>
+or
+<a href="#ST">ST</a>),
+<strong>TAB</strong> moves to whatever tab number you pass it as
+an argument. For example,
+<p>
+<pre>
+ .TAB 3
+</pre>
+
+moves you to tab 3.
+<p>
+<a name="NOTE_TN"></a>
+<strong>NOTE:</strong> <strong>TAB</strong> breaks the line preceding
+it and advances 1 linespace. Hence,
+<p>
+<pre>
+ .TAB 1
+ A line of text in tab 1.
+ .TAB 2
+ A line of text in tab 2.
+</pre>
+
+produces, on output
+<p>
+<pre>
+ A line of text in tab 1.
+ A line of text in tab 2.
+</pre>
+
+If you want the tabs to line up, use
+<a href="#TN">TN</a>
+(Tab Next), like this:
+<p>
+<pre>
+ .TAB 1
+ A line of text in tab 1.
+ .TN
+ A line of text in tab 2.
+</pre>
+
+which produces
+<p>
+<pre>
+ A line of text in tab 1. A line of text in tab 2.
+</pre>
+
+If the text in your tabs runs to several lines, and you want the
+first lines of each tab to align, you must use the
+<a href="#MULTI_COLUMNS">multi-column</a> macros.
+<p>
+<strong>ADDITIONAL NOTE:</strong> Any indents in effect prior to
+calling a tab are automatically turned off by <strong>TAB</strong>.
+If you were happily zipping down the page with a left indent of 2
+picas turned on, and you call a tab whose indent from the left margin
+is 6 picas, your new distance from the left margin will be 6 picas,
+not 6 picas plus the 2 pica indent.
+<br>
+
+<!---TN--->
+
+<hr width="66%" align="left">
+<a name="TN"><h3><u>Tab Next</u></h3></a>
+<br>
+Macro: <strong>TN</strong>
+<br>
+
+<p>
+<strong>TN</strong> moves over to the next tab in numeric
+sequence (tab n+1) without advancing on the page. See the
+<a href="#NOTE_TN">NOTE</a>
+in the description of the <strong>TAB</strong> macro for an
+example of how <strong>TN</strong> works.
+<p>
+<strong>NOTE:</strong> <strong>TN</strong> is like
+<a href="#EL">EL</a>
+in that it doesn't work as advertised on the last line before a
+footer trap is sprung. If you need to use <strong>TN</strong>
+on the last line of a page with a footer trap, turn the trap off with
+<a href="goodies.html#TRAP">TRAP</a>,
+as in this example:
+<p>
+<pre>
+ .TAB_SET 1 0 1P L
+ .TAB_SET 2 1P 20P L
+ .TAB 1
+ .TRAP OFF
+ 1.
+ .TN
+ The first rule of survival is &quot;make and keep good friends.&quot;
+ .TRAP
+</pre>
+
+The above, at the bottom of a page, will look something like this:
+<p>
+<pre>
+ 1. The first rule of survival is &quot;make and keep good friends.&quot;
+</pre>
+
+If you hadn't turned the trap off before <kbd>.TN</kbd>,
+&quot;1.&quot; would have appeared as the last line on the page,
+with &quot;The first rule of survival...&quot; being the first
+line on the next page.
+<br>
+
+<!---TQ--->
+
+<hr width="66%" align="left">
+<a name="TQ"><h3><u>Tab Quit</u></h3></a>
+<br>
+Macro: <strong>TQ</strong>
+<br>
+
+<p>
+<strong>TQ</strong> takes you out of whatever tab you were in,
+advances 1 linespace, and restores the left margin, line length,
+quad direction and
+<a href="definitions.html#TERMS_FILLED">fill mode</a>
+that were in effect prior to invoking any tabs.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="INTRO_MULTI_COLUMNS"></a>
+
+<a name="MULTI_COLUMNS">
+ <h2><u>Multi-Columns</u></h2>
+</a>
+
+Tabs are not by nature columnar, which is to say that if the text
+inside a tab runs to several lines, calling another tab does not
+automatically move to the
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+of the first line in the previous tab. To demonstrate:
+<p>
+<pre>
+ .TAB 1
+ Carrots
+ Potatoes
+ Broccoli
+ .TAB 2
+ $1.99/5 lbs
+ $0.25/lb
+ $0.99/bunch
+</pre>
+
+produces, on output
+<p>
+<pre>
+ Carrots
+ Potatoes
+ Broccoli
+ $1.99/5 lbs
+ $0.25/lb
+ $0.99/bunch
+</pre>
+
+The multi-column macros allow you to set tabs in columnar
+fashion, rather than line by line. When you invoke multi-column
+mode (with
+<a href="#MCO">MCO</a>),
+<strong>mom</strong> saves the position of the current baseline.
+<a href="#MCR">MCR</a>
+(Multi-column return) at any point while multi-columns are on
+returns you to the saved position. Exiting multi-columns
+(<a href="#MCX">MCX</a>)
+quits the current tab (if you're in one) and moves you to the
+bottom of the longest column. (Note that you do not have to use
+multi-columns in conjunction with tabs.)
+<p>
+Using our example above, but setting it in multi-column mode,
+<p>
+<pre>
+ .MCO
+ .TAB 1
+ Carrots
+ Potatoes
+ Broccoli
+ .MCR
+ .TAB 2
+ $1.99/5 lbs
+ $0.25/lb
+ $0.99/bunch
+ .MCX
+</pre>
+
+produces
+<p>
+<pre>
+ Carrots $1.99/5 lbs
+ Potatoes $0.25/lb
+ Broccoli $0.99/bunch
+</pre>
+
+<strong>NOTE:</strong> Do not confuse <strong>MCO</strong> with
+the
+<a href="docprocessing.html#COLUMNS">COLUMNS</a>
+macro in the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
+
+<a name="INDEX_MULTI_COLUMNS">
+ <h3><u>Columns macro list</u></h3>
+</a>
+<ul>
+ <li><a href="#MCO">MCO (begin multi-column setting)</a>
+ <li><a href="#MCR">MCR (return to top of column)</a>
+ <li><a href="#MCX">MCX (exit multi-columns)</a>
+</ul>
+
+<!---MCO--->
+
+<hr width="66%" align="left">
+<a name="MCO"><h3><u>Begin multi-column setting</u></h3></a>
+<br>
+Macro: <strong>MCO</strong>
+<br>
+
+<p>
+<strong>MCO</strong>
+(<strong>M</strong>ulti-<strong>C</strong>olumn <strong>O</strong>n)
+is the macro you use to begin multi-column setting. It marks
+the current
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+as the top of your columns, for use late with
+<a href="#MCR">MCR</a>. See the
+<a href="#MULTI_COLUMNS">introduction to columns</a>
+for an explanation of multi-columns and some sample
+input.
+<p>
+<strong>NOTE:</strong> Do not confuse <strong>MCO</strong> with
+the
+<a href="docprocessing.html#COLUMNS">COLUMNS</a>
+macro in the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
+<br>
+
+<!---MCR--->
+
+<hr width="66%" align="left">
+<a name="MCR"><h3><u>Return to top of column</u></h3></a>
+<br>
+Macro: <strong>MCR</strong>
+<br>
+
+<p>
+Once you've turned multi-columns on (with
+<a href="#MCO">MCO</a>),
+<strong>MCR</strong>, at any time, returns you to the top of
+your columns.
+<br>
+
+<!---MCX--->
+
+<hr width="66%" align="left">
+<a name="MCX"><h3><u>Exit multi-columns</u></h3></a>
+<br>
+Macro: <strong>MCX</strong> <var>[ &lt;distance to advance below longest column&gt; ]</var>
+<br>
+<em>*Optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>MCX</strong> takes you out of any tab you were in (by silently
+invoking
+<a href="#TQ">TQ</a>) and advances to the bottom of the longest
+column.
+<p>
+Without an argument, <strong>MCX</strong> advances 1 linespace
+below the longest column. Linespace, in this instance, is the
+<a href="definitions.html#TERMS_LEADING">leading</a>
+in effect <em>at the moment <strong>MCX</strong> is
+invoked.</em>
+<p>
+If you pass the <var>&lt;distance&gt;</var> argument to
+<strong>MCX</strong>, it advances 1 linespace below the longest
+column (see above) PLUS the distance specified by the argumemnt.
+The argument requires a unit of measure; therefore, to advance
+an extra 6 points below where <strong>MCX</strong> would
+normally place you, you'd enter
+<p>
+<pre>
+ .MCX 6p
+</pre>
+
+<strong>NOTE:</strong> If you wish to advance a precise distance
+below the
+<a href="definitions.html#TERMS_BASELINE">baseline</a>
+of the longest column, use <strong>MCX</strong> with an
+argument of 0 (zero; no unit of measure required) in conjunction
+with the
+<a href="#ALD">ALD</a>
+macro, like this:
+<p>
+<pre>
+ .MCX 0
+ .ALD 24p
+</pre>
+
+The above advances to precisely 24 points below the baseline
+of the longest column.
+<br>
+<hr>
+
+<!====================================================================>
+
+<a name="INTRO_INDENTS"></a>
+
+<a name="INDENTS">
+ <h2><u>Indents</u></h2>
+</a>
+
+With <strong>mom</strong>'s indents, you can indent from the left,
+the right, or both margins. In addition, <strong>mom</strong>
+provides temporary left indents (i.e. only one line is indented,
+as at the start of a paragraph) and &quot;hanging&quot; left indents
+(the reverse of a temporary indent; the first line isn't indented,
+subsequent lines are).
+
+<a name="INDENTS_TUT"><h3><u>A brief explanation of how mom handles indents</u></h3></a>
+<p>
+<strong>Mom</strong> provides five kinds of indents: left, right,
+both, temporary, and hanging. Each is invoked by its own name:
+<br>
+<ul>
+ <li><strong>IL</strong> = <strong>I</strong>ndent <strong>L</strong>eft
+ <li><strong>IR</strong> = <strong>I</strong>ndent <strong>R</strong>ight
+ <li><strong>IB</strong> = <strong>I</strong>ndent <strong>B</strong>oth
+ <li><strong>HI</strong> = <strong>H</strong>anging <strong>I</strong>ndent
+ <li><strong>TI</strong> = <strong>T</strong>emporary <strong>I</strong>ndent
+</ul>
+<br>
+In addition, there are four macros to control exiting from
+indents:
+<br>
+<ul>
+ <li><strong>IQ</strong>&nbsp;&nbsp;= quit all active indents
+ <li><strong>ILX</strong>&nbsp;= exit indent style left
+ <li><strong>IRX</strong>&nbsp;= exit indent style right
+ <li><strong>IBX</strong>&nbsp;= exit indent style both
+</ul>
+<br>
+This section deals exclusively with <strong>IL, IR</strong> and
+<strong>IB</strong>. For an explanation
+of hanging and temporary indents -- how they work and how to use
+them -- see
+<a href="#HI">Hanging indents</a>
+and
+<a href="#TI">Temporary indents</a>.
+<p>
+The first time you invoke any of <strong>mom</strong>'s indents,
+you must supply a measure. For example,
+<p>
+<pre>
+ .IL 2P
+</pre>
+
+indents text 2 picas from the left margin (or current tab
+indent).
+<p>
+When you want to exit the above indent, use either
+<p>
+<pre>
+ .IQ
+ or
+ .ILX
+</pre>
+
+The next time you want the same indent, invoke it without the
+argument, like this:
+<p>
+<pre>
+ .IL
+</pre>
+
+As you can see, once you've supplied a measure to an indent macro
+<strong>mom</strong> stores the value, obviating the need to repeat
+it on subsequent invocations. And <strong>mom</strong> doesn't just
+store the measure -- she hangs on to it tenaciously. Arguments passed
+to <strong>IL, IR</strong> and <strong>IB</strong> are additive.
+Consider the following:
+<p>
+<pre>
+ .LL 20P
+ .IR 2P \"Indent right by 2 picas
+ A first block of text...
+ ...
+ ...
+ .IQ \"Turn indent off
+ A second block of text...
+ ...
+ ...
+ .IR 2P \"Indent right by an additional 2 picas (i.e. 4 picas)
+ A third block of text...
+ ...
+ ...
+</pre>
+
+The first block of text is right indented by 2 picas (i.e. the line
+length is shortened by 2 picas to 18 picas). The second block of
+text, after <strong>IQ</strong>, is, as you'd expect, set to the full
+measure. The third block of text -- the one to pay attention to --
+is not right indented by 2 picas, but rather by 4 picas.
+<strong>Mom</strong> adds the value of arguments to <strong>IL,
+IR</strong> and <strong>IB</strong> to whatever value is already
+in effect.
+<p>
+If you wanted the third block of text in the example above to
+be right indented by just 2 picas (the original measure given to
+<strong>IR</strong>), you would enter <kbd>.IR</kbd> without an
+argument.
+<p>
+Because indent arguments are additive, putting a minus sign in front
+of the argument can be used to subtract from the current value.
+In the following example, the first line is indented 18 points, the
+second is indented 36 points (18+18), and the third is again indented
+18 points (36-18).
+<p>
+<pre>
+ .IL 18p \"Indent left by 18 points = 18 points
+ Now is the time
+ .IL 18p \"Indent left by 18 points more = 36 points
+ for all good men to come
+ .IL -18p \"Indent left by 18 points less = 18 points
+ to the aid of the party.
+</pre>
+
+Sometimes, you may want to clear out the stored indent values -- let
+<strong>mom</strong> start indenting with a clean slate, as it were.
+Giving the optional argument <kbd>CLEAR</kbd> to any of the
+&quot;indent quit&quot; macros resets them to zero.
+<br>
+<ul>
+ <li><strong>IQ CLEAR</strong>&nbsp;&nbsp;= quit and clear all indents
+ <li><strong>ILX CLEAR</strong>&nbsp;= quit and clear indent style left
+ <li><strong>IRX CLEAR</strong>&nbsp;= quit and clear indent style right
+ <li><strong>IBX CLEAR</strong>&nbsp;= quit and clear indent style both
+</ul>
+<br>
+Indent styles may be combined and manipulated separately. You could,
+for example, have a left indent of 4 picas and a right indent of 6
+picas and control each separately, as in the following example.
+<p>
+<pre>
+ .IL 4P \"Indent left 4 picas
+ .IR 6P \"Indent right 6 picas
+ Some text
+ .IRX \"Turn off the right indent only
+ More text \"Text is still indented 4 picas left
+</pre>
+
+If, at <kbd>.IRX</kbd>, you wanted the text afterward to have no
+indents (either left or right), you would enter <kbd>.IQ</kbd>,
+which exits all indent styles at once.
+<p>
+<strong>A word of advice:</strong> Indents are best used only when
+you have a compelling reason not to change the current left margin or
+line length. In many instances where indents might seem expedient,
+it's better to use tabs, or actually change the left margin or the
+line length. <strong>Mom</strong>'s indenting macros are flexible
+and powerful, but easy to get tangled up in. Personally, I don't
+use them much, except for cutarounds and multi-level lists à la html,
+at which they excel.
+<p>
+<strong>NOTE:</strong> see the section
+<a href="typemacdoc.html#TYPESETTING">Typesetting Macros in Document Processing</a>
+for information and advice on using idents with the
+<a href="docprocessing.html#DOCPROCESSING">document processing macros</a>.
+
+<a name="INDEX_INDENTS"><h3><u>Indents macro list</u></h3>
+<ul>
+ <li><a href="#IL">IL</a>&nbsp;&nbsp;(Indent left)
+ <li><a href="#IR">IR</a>&nbsp;&nbsp;(Indent right)
+ <li><a href="#IB">IB</a>&nbsp;&nbsp;(Indent both)
+ <li><a href="#TI">TI</a>&nbsp;&nbsp;(Temporary indent, left)
+ <li><a href="#HI">HI</a>&nbsp;&nbsp;(Hanging Indent)
+ <ul>
+ <li><a href="#NUM_LISTS">A recipe for numbered lists</a>
+ </ul>
+ <li><a href="#IQ">IQ</a>&nbsp;&nbsp;(Quit indents, all)
+ <li><a href="#IQ">ILX</a>&nbsp;(Exit indent style left)
+ <li><a href="#IQ">IRX</a>&nbsp;(Exit indent style right)
+ <li><a href="#IQ">IBX</a>&nbsp;(Exit indent style both)
+</ul>
+
+<!---IL--->
+
+<hr width="66%" align="left">
+<a name="IL"><h3><u>Indent left</u></h3></a>
+<br>
+Macro: <strong>IL</strong> <var>[ &lt;measure&gt; ]</var>
+<br>
+<em>*The optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>IL</strong> indents text from the left margin of the page,
+or if you're in a tab, from the left edge of the tab. Once
+<strong>IL</strong> is on, the left indent is applied uniformly to
+every subsequent line of text, even if you change the line length.
+<p>
+The first time you invoke <strong>IL</strong>, you must give it a
+measure. Subsequent invocations with a measure add to the previous
+measure. A minus sign may be prepended to the argument to subtract
+from the current measure. The
+<a href="inlines.html#INLINE_STRINGWIDTH_GROFF">\w</a>
+<a href="definitions.html#TERMS_INLINES">inline escape</a>
+may be used to specify a text-dependent measure, in which case
+no unit of measure is required. For example,
+<p>
+<pre>
+ .IL \w'margarine'
+</pre>
+
+indents text by the width of the word &quot;margarine&quot;.
+<p>
+With no argument, <strong>IL</strong> indents by its last
+active value. See the
+<a href="#INDENTS_TUT">brief explanation of how mom handles indents</a>
+for more details.
+<p>
+<strong>NOTE:</strong> Calling a tab (with
+<a href="#TAB">TAB</a>)
+automatically cancels any active indents.
+<p>
+<strong>ADDITIONAL NOTE:</strong> Invoking <strong>IL</strong>
+automtically turns off <strong>IB</strong>.
+<br>
+
+<!---IR--->
+
+<hr width="66%" align="left">
+<a name="IR"><h3><u>Indent right</u></h3></a>
+<br>
+Macro: <strong>IR</strong> <var>[ &lt;measure&gt; ]</var>
+<br>
+<em>*The optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>IR</strong> indents text from the right margin of the
+page, or if you're in a tab, from the end of the tab.
+<p>
+The first time you invoke <strong>IR</strong>, you must give it a
+measure. Subsequent invocations with a measure add to the previous
+indent measure. A minus sign may be prepended to the argument to
+subtract from the current indent measure. The
+<a href="inlines.html#INLINE_STRINGWIDTH_GROFF">\w</a>
+<a href="definitions.html#TERMS_INLINES">inline esacpe</a>
+may be used to specify a text-dependent measure, in which case
+no unit of measure is required. For example,
+<p>
+<pre>
+ .IR \w'jello'
+</pre>
+
+indents text by the width of the word &quot;jello&quot;.
+<p>
+With no argument, <strong>IR</strong> indents by its last
+active value. See the
+<a href="#INDENTS_TUT">brief explanation of how mom handles indents</a>
+for more details.
+<p>
+<strong>NOTE:</strong> Calling a tab (with
+<a href="#TAB">TAB</a>)
+automatically cancels any active indents.
+<p>
+<strong>ADDITIONAL NOTE:</strong> Invoking <strong>IR</strong>
+automtically turns off <strong>IB</strong>.
+<br>
+
+<!---IB--->
+
+<hr width="66%" align="left">
+<a name="IB"><h3><u>Indent both</u></h3></a>
+<br>
+Macro: <strong>IB</strong> <var>[ &lt;left measure&gt; &lt;right measure&gt; ]</var>
+<br>
+<em>*The optional arguments require a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+<strong>IB</strong> allows you to set or invoke a left and a right
+indent at the same time.
+<p>
+At its first invocation, you must supply a measure for both indents;
+at subsequent invocations when you wish to supply a measure, both must
+be given again. As with <strong>IL</strong> and <strong>IR</strong>,
+the measures are added to the values previously passed to the macro.
+Hence, if you wish to change just one of the values, you must
+give an argument of zero to the other.
+<p>
+<strong>A word of advice:</strong> If you need to manipulate left and
+right indents separately, use a combination of <strong>IL</strong>
+and <strong>IR</strong> instead of <strong>IB</strong>. You'll
+save yourself a lot of grief.
+<p>
+A minus sign may be prepended to the arguments to subtract from their
+current values. The
+<a href="inlines.html#INLINE_STRINGWIDTH_GROFF">\w</a>
+<a href="definitions.html#TERMS_INLINES">inline esacpe</a>
+may be used to specify text-dependent measures, in which case
+no unit of measure is required. For example,
+<p>
+<pre>
+ .IB \w'margaraine' \w'jello'
+</pre>
+
+left indents text by the width of the word &quot;margarine&quot;
+and right indents by the width of &quot;jello&quot;.
+<p>
+Like <strong>IL</strong> and <strong>IR</strong>, <strong>IB</strong>
+with no argument indents by its last active values. See the
+<a href="#INDENTS_TUT">brief explanation of how mom handles indents</a>
+for more details.
+<p>
+<strong>NOTE:</strong> Calling a tab (with
+<a href="#TAB">TAB</a>)
+automatically cancels any active indents.
+<p>
+<strong>ADDITIONAL NOTE:</strong> Invoking <strong>IB</strong>
+automtically turns off <strong>IL</strong> and
+<strong>IR</strong>.
+<br>
+
+<!---TI--->
+
+<hr width="66%" align="left">
+<a name="TI"><h3><u>Temporary (left) indent</u></h3></a>
+<br>
+Macro: <strong>TI</strong> <var>[ &lt;measure&gt; ]</var>
+<br>
+<em>*The optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+A temporary indent is one that applies only to the first line of
+text that comes after it. It's chief use is indenting the first
+line of paragraphs. (<strong>Mom</strong>'s
+<a href="docprocessing.html#PP">PP</a>
+macro, for example, uses a temporary indent.)
+<p>
+The first time you invoke <strong>TI</strong>, you must give it
+a measure. If you want to indent the first line of a
+paragraph by, say, 2
+<a href="definitions.html#TERMS_EM">ems</a>,
+do
+<p>
+<pre>
+ .TI 2m
+</pre>
+
+Subsequent invocations of <strong>TI</strong> do not require you
+to supply a measure; <strong>mom</strong> keeps track of the
+last measure you gave it.
+<p>
+Because temporary indents are temporary, there's no need to turn
+them off.
+<p>
+<strong>IMPORTANT:</strong> Unlike <strong>IL, IR</strong> and
+<strong>IB</strong>, measures given to <strong>TI</strong>
+are NOT additive. In the following example, the second <kbd>.TI
+2P</kbd> is exactly 2 picas.
+<p>
+<pre>
+ .TI 1P
+ The beginning of a paragraph...
+ .TI 2P
+ The beginning of another paragraph...
+</pre>
+
+<!---HI--->
+
+<hr width="66%" align="left">
+<a name="HI"><h3><u>Hanging indent</u></h3></a>
+<br>
+Macro: <strong>HI</strong> <var>[ &lt;measure&gt; ]</var>
+<br>
+<em>*The optional argument requires a <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a></em>
+
+<p>
+A hanging indent looks like this:
+<p>
+<pre>
+ The thousand injuries of Fortunato I had borne as best I
+ could, but when he ventured upon insult, I vowed
+ revenge. You who so well know the nature of my soul
+ will not suppose, however, that I gave utterance to a
+ threat, at length I would be avenged...
+</pre>
+
+The first line of text &quot;hangs&quot; outside the left
+margin.
+<p>
+In order to use hanging indents, you must first have a left indent
+active (set with either
+<a href="#IL">IL</a>
+or
+<a href="#IB">IB</a>).
+<strong>Mom</strong> will not hang text outside the left margin set with
+<a href="#L_MARGIN">L_MARGIN</a>
+or outside the left margin of a tab.
+<p>
+The first time you invoke <strong>HI</strong>, you must give it
+a measure. If you want the first line of a paragraph to hang by,
+say, 1 pica, do
+<p>
+<pre>
+ .IL 1P
+ .HI 1P
+</pre>
+
+Subsequent invocations of <strong>HI</strong> do not require you
+to supply a measure; <strong>mom</strong> keeps track of the
+last measure you gave it.
+<p>
+Generally speaking, you should invoke <strong>HI</strong> immediately
+prior to the line you want hung (i.e. without any intervening
+<a href="definitions.html#TERMS_CONTROLLINES">control lines</a>).
+And because hanging indents affect only one line, there's no need to turn
+them off.
+
+<a name="NUM_LISTS"><h3><u>A recipe for numbered lists</u></h3></a>
+<p>
+A common use for hanging indents is setting numbered lists.
+Consider the following example:
+<p>
+<pre>
+ .PAGE 8.5i 11i 1i 1i 1i 1i
+ .FAMILY T
+ .FT R
+ .PT_SIZE 12
+ .LS 14
+ .JUSTIFY
+ .KERN
+ .SS 0
+ .IL \w'\0\0.' \"Indent left by 2 figure spaces and a period
+ .HI \w'\0\0.' \"Hang first line of text back by 2 figure spaces and a period
+ 1.\0The most important point to be considered is whether the
+ answer to the meaning of life, the universe, and everything
+ really is 42. We have no-one's word on the subject except
+ Mr. Adams'.
+ .HI
+ 2.\0If the answer to the meaning of life, the universe,
+ and everything is indeed 42, what impact does this have on
+ the politics of representation? 42 is, after all not a
+ prime number. Are we to infer that prime numbers don't
+ deserve equal rights and equal access in the universe?
+ .HI
+ 3.\0If 42 is deemed non-exclusionary, how do we present it
+ as the answer and, at the same time, forestall debate on its
+ exclusionary implications?
+</pre>
+
+First, we invoke a left indent with a measure equal to the width
+of 2
+<a href="definitions.html#TERMS_FIGURESPACE">figures spaces</a>
+plus a period (using the
+<a href="inlines.html#INLINE_STRINGWIDTH_GROFF">\w</a>
+inline escape). At this point, the left indent is active; text
+afterward would normally be indented. However, we invoke a hanging
+indent of exactly the same width, which hangs the first line (and
+first line only!) to the left of the indent by the same distance
+(in this case, that means &quot;out to the left margin&quot;).
+Because we begin the first line with a number, a period, and a
+figure space, the actual text (&quot;The most important point...&quot;)
+starts at exactly the same spot as the indented lines that
+follow.
+<p>
+Notice that subsequent invocations of <strong>HI</strong> without a
+measure produce exactly the same effect.
+<p>
+Paste the example above into a file and preview it with <kbd>groff -mom -X
+&lt;filename&gt;</kbd> to see hanging indents in action.
+<p>
+<strong>IMPORTANT:</strong> Unlike <strong>IL, IR</strong> and
+<strong>IB</strong>, measures given to <strong>HI</strong>
+are NOT additive. Each time you pass a measure to
+<strong>HI</strong>, the measure is treated literally.
+<br>
+
+<!---IX--->
+
+<hr width="66%" align="left">
+<a name="IQ"><h3><u>Quitting indents</u></h3></a>
+<br>
+Macro: <strong>IQ</strong>&nbsp;&nbsp;<var>[ CLEAR ]&nbsp;&nbsp;</var>(quit any/all indents -- see <strong>*IMPORTANT NOTE</strong>)
+<br>
+Macro: <strong>ILX</strong>&nbsp;<var>[ CLEAR ]&nbsp;&nbsp;</var>(exit <strong>I</strong>ndent <strong>L</strong>eft)
+<br>
+Macro: <strong>IRX</strong>&nbsp;<var>[ CLEAR ]&nbsp;&nbsp;</var>(exit <strong>I</strong>ndent <strong>R</strong>ight)
+<br>
+Macro: <strong>IBX</strong>&nbsp;<var>[ CLEAR ]&nbsp;&nbsp;</var>(exit <strong>I</strong>ndent <strong>B</strong>oth)
+
+<p>
+<strong>*IMPORTANT NOTE:</strong>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;<em>Formerly, the macro for quitting all indents was</em>
+<strong>.IX</strong><em>. This usage is now deprecated, in favour
+of</em> <strong>.IQ</strong><em>.</em> <strong>.IX</strong> <em>will
+continue to behave as before, but</em> <strong>mom</strong> <em>will
+issue a warning to stderr indicating that you should update your
+documents.
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;As a consequence of this change,</em>
+<strong>ILX, IRX</strong> <em>and</em> <strong>IBX</strong> <em>may
+now also be invoked as</em> <strong>ILQ, IRQ</strong> <em>and</em>
+<strong>IBQ</strong><em>. Both forms are acceptable.</em>
+<p>
+Without an argument, the macros to quit indents merely restore your
+original left margin and line length. The measures stored in the
+indent macros themselves are saved so you can call them again without
+having to supply a measure.
+<p>
+If you pass these macros the optional argument <strong>CLEAR</strong>,
+they not only restore your original left margin and line length,
+but also clear any values associated with a particular indent style.
+The next time you need an indent of the same style, you have to supply
+a measure again.
+<p>
+<strong>IQ CLEAR</strong>, as you'd suspect, quits and clears
+the values for all indent styles at once.
+
+<p>
+<hr>
+<a href="goodies.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="definitions.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/momdoc/using.html b/contrib/groff/contrib/mom/momdoc/using.html
new file mode 100644
index 0000000..327e86b
--- /dev/null
+++ b/contrib/groff/contrib/mom/momdoc/using.html
@@ -0,0 +1,223 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
+<title>Using mom</title>
+</head>
+<body bgcolor="#dfdfdf">
+
+<!====================================================================>
+
+<a href="typesetting.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="definitions.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+
+<a name="TOP"></a>
+<a name="USING">
+ <h1 align="center"><u>USING MOM</u></h1>
+</a>
+
+<a href="#USING_INTRO">Introduction</a>
+<br>
+<a href="#USING_MACROS">Inputting macros</a>
+<br>
+<a href="#USING_INVOKING">Invoking groff</a>
+<br>
+<a href="#USING_PREVIEWING">Previewing documents</a>
+<br>
+<hr>
+<h2><a name="USING_INTRO"><u>Introduction</u></a></h2>
+
+As explained in the section
+<a href="intro.html#INTRO">What is mom?</a>,
+<strong>mom</strong> can be used in two ways: for straight typesetting
+or for document processing. The difference between the two is
+that in straight typesetting, every macro is a literal
+typesetting instruction that determines precisely how text
+following it will look. Document processing, on the other hand,
+uses markup &quot;tags&quot; (e.g. <kbd>.PP</kbd> for
+paragraphs, <kbd>.HEAD</kbd> for heads, <kbd>.FOOTNOTE</kbd>
+for footnotes, etc.) that make a lot of typesetting decisions
+automatically.
+<p>
+You tell <strong>mom</strong> that you want to use the document
+processing macros with the
+<a href="docprocessing.html#START">START</a>
+macro, explained below. After <strong>START</strong>,
+<strong>mom</strong> determines the appearance of text following
+the markup tags automatically, although you, the user, can easily
+change how <strong>mom</strong> interprets the tags. This gives you
+nearly complete control over the look and feel of your documents.
+In addition, the typesetting macros, in combination with document
+processing, let you meet all sorts of typesetting needs that just
+can't be covered by &quot;one macro fits all&quot; markup tags.
+
+<a name="USING_MACROS">
+ <h2><u>How to input mom's macros</u></h2>
+</a>
+
+Regardless of which way you use <strong>mom</strong>, the
+following apply.
+<br>
+<ol>
+ <li>You need a good text editor for inputting
+ <strong>mom</strong> files.
+ <p>
+ I cannot recommend highly enough that you use an
+ editor that lets you write syntax highlighting
+ rules for <strong>mom</strong>'s macros and
+ <a href="definitions.html#TERMS_INLINES">inline escapes</a>.
+ I use the vi clone called elvis, and find it a pure
+ joy in this regard. Simply colorizing macros and
+ inlines to half-intensity can be enough to make text stand
+ out clearly from formattting commands.
+ <li>All <strong>mom</strong>'s macros begin with a period
+ (dot) and must be entered in upper case (capital)
+ letters.
+ <li>Macro
+ <a href="definitions.html#TERMS_ARGUMENTS">arguments</a>
+ are separated from the macro itself by spaces. Multiple
+ arguments to the same macro are separated from each
+ other by spaces. Any number of spaces may be used. All
+ arguments to a macro must appear on the same line as the
+ macro.
+ <li>Any argument (except a
+ <a href="definitions.html#TERMS_STRINGARGUMENT">string argument</a>)
+ that is not a digit must be entered in upper case
+ (capital) letters.
+ <li>Any argument that requires a plus or minus sign must
+ have the plus or minus sign prepended to the argument
+ with no intervening space (e.g. +2, -4).
+ <li>Any argument that requires a
+ <a href="definitions.html#TERMS_UNITOFMEASURE">unit of measure</a>
+ must have the unit appended directly to the argument,
+ with no intervening space (e.g. 4P, .5i, 2v).
+ <li><a href="definitions.html#TERMS_STRINGARGUMENT">String arguments</a>,
+ in the sense that the term is used in this manual, must
+ be surrounded by double-quotes (&quot;text of
+ string&quot;). Multiple string arguments are separated
+ from each other by spaces (each argument surrounded by
+ double-quotes, of course).
+ <li>If a string argument, as entered in your text editor,
+ becomes uncomfortably long (i.e. runs longer than the
+ visible portion of your screen or window), you may break
+ it into two or more lines by placing the backslash
+ character (<kbd>\</kbd>) at the ends of lines to break
+ them up, like this:
+ <p>
+ <pre>
+ .SUBTITLE "An In-Depth Consideration of the \
+ Implications of Forty-Two as the Meaning of Life, \
+ The Universe, and Everything"
+ </pre>
+</ol>
+
+It's important that formatted documents be easy to read/interpret
+when you're looking at them in a text editor. One way to achieve
+this is to group macros that serve a similar purpose together, and
+separate them from other groups of macros with a blank comment line.
+In groff, that's done with <kbd>\#</kbd> on a line by itself.
+Consider the following, which is a template for starting the
+chapter of a book.
+<p>
+<pre>
+ .TITLE "My Pulizter Novel"
+ .AUTHOR "Joe Blow"
+ .CHAPTER 1
+ \#
+ .DOCTYPE CHAPTER
+ .PRINTSTYPE TYPESET
+ \#
+ .FAM P
+ .PT_SIZE 10
+ .LS 12
+ \#
+ .START
+</pre>
+
+<a name="USING_INVOKING">
+ <h2><u>Printing -- invoking groff with mom</u></h2>
+</a>
+
+After you've finished your document, naturally you will want to
+print it. This involves invoking groff from the command line.
+In all likelihood, you already know how to do this, but in case
+you don't, here are two common ways to do it.
+<p>
+<pre>
+ groff -mom -l &lt;filename&gt;
+ groff -mom &lt;filename&gt; | lpr
+</pre>
+
+In the first, the <strong>-l</strong> option to groff tells
+groff to send the output to your printer. In the second, you're
+doing the same thing, except you're telling groff to pipe the
+output to your printer. Basically, they're the same thing. The
+only advantage to the second is that your system may be set up
+to use something other than <strong>lpr</strong> as your print
+command, in which case, you can replace <strong>lpr</strong>
+with whatever is appropriate to your box.
+<p>
+Sadly, it is well beyond the scope of this manual to tell you
+how to set up a printing system. See the README file for
+minimum requirements to run groff with <strong>mom</strong>.
+<p>
+<strong>NOTE FOR ADVANCED USERS:</strong> I've sporadically had groff
+choke on perfectly innocent sourced files within <strong>mom</strong>
+documents. You'll know you have this problem when groff complains that
+it can't find the sourced file even when you can plainly see that the
+file exists, and that you've given <code>.so</code> the right path and
+name. Should this happen, pass groff the <code>-U</code> (unsafe mode)
+option along with the other options you require. Theoretically, you
+only need <code>-U</code> with <code>.open, .opena, .pso, .sy,</code>
+and <code>.pi</code>, however reality seems, at times, to dictate
+otherwise.
+
+<a name="USING_PREVIEWING">
+ <h2><u>How to preview documents</u></h2>
+</a>
+
+Other than printing out hard copy, there are two well-established
+methods for previewing your work. Both assume you have a working
+X server.
+<p>
+Groff itself comes with a quick and dirty previewer called
+gxditview. Invoke it with
+<p>
+<pre>
+ groff -X -mom &lt;filename&gt;
+</pre>
+
+It's not particularly pretty, doesn't have many navigation
+options, requires a lot of work if you want to use other than
+the &quot;standard&quot; groff PostScript fonts, and occasionally
+has difficulty accurately reproducing some of
+<strong>mom</strong>'s macro effects
+(<a href="goodies.html#SMARTQUOTES">smartquotes</a>
+and
+<a href="goodies.html#LEADER">leaders</a>
+come to mind). What it does have going for it is that it's fast and
+doesn't gobble up system resources.
+<p>
+A surer way to preview documents is with <strong>gv</strong>
+(ghostview). This involves processing documents with groff,
+directing the output to a temporary (PostScript) file, then opening
+the temporary file in <strong>gv</strong>. While that may sound
+like a lot of work, I've set up my editor (elvis) to do it for me.
+Whenever I'm working on a document that needs previewing/checking,
+I fire up <strong>gv</strong> with the &quot;Watch File&quot;
+option turned on. To look at the file, I tell elvis to process
+it (with groff) and send it to a temporary file (<kbd>groff
+-mom filename &gt; filename.ps</kbd>), then open the file inside
+<strong>gv</strong>. Ever after, when I want to look at any changes
+I make, I simply tell elvis to work his magic again. The Watch File
+option in <strong>gv</strong> registers that the file has changed,
+and automatically loads the new version. Voilà! -- instant previewing.
+
+<p>
+<hr>
+<a href="typesetting.html#TOP">Next</a>&nbsp;&nbsp;
+<a href="definitions.html#TOP">Prev</a>&nbsp;&nbsp;
+<a href="#TOP">Top</a>&nbsp;&nbsp;
+<a href="toc.html">Back to Table of Contents</a>
+</body>
+</html>
diff --git a/contrib/groff/contrib/mom/om.tmac b/contrib/groff/contrib/mom/om.tmac
new file mode 100644
index 0000000..6862c82
--- /dev/null
+++ b/contrib/groff/contrib/mom/om.tmac
@@ -0,0 +1,9265 @@
+.\" om.tmac
+.\"
+.\" Mom -- a typesetting/document-processing macro set for groff.
+.\"
+.\" Copyright (C) 2002 Free Software Foundation, Inc.
+.\" Written by Peter Schaffter (df191@ncf.ca)
+.\"
+.\" This file is part of groff.
+.\"
+.\" groff is free software; you can redistribute it and/or modify it under
+.\" the terms of the GNU General Public License as published by the Free
+.\" Software Foundation; either version 2, or (at your option) any later
+.\" version.
+.\"
+.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY
+.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+.\" for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License along
+.\" with groff; see the file COPYING. If not, write to the Free Software
+.\" Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+.\"
+.
+.
+\# Version 1.1.4
+\# -------------
+\#
+.if (\n[.x]\n[.y] < 118) \
+. ab You need GNU troff version 1.18 or higher to run this version of mom!
+\#
+\# Inasmuch as possible, macros that turn a feature on or off follow
+\# a similar style. Invoking the macro without an argument turns
+\# the feature on. Invoking it with any other argument turns it off.
+\# Use of the argument OFF is recommended, but not required; users
+\# may find other conventions preferable (e.g. NO, X, END, QUIT, etc.).
+\#
+\# "<anything>" in the description of arguments that can be passed
+\# to a macro means that any argument turns the feature off.
+\#
+\# ====================================================================
+\#
+\# TYPESETTING MACROS, STRINGS, AND ALIASES
+\# ========================================
+\#
+\# +++ALIASES+++
+\#
+.als ALIAS als \"Alias .als as ALIAS
+.als ALIASN aln \"Alias .aln (number registers) as ALIASN
+\#
+.ALIAS MAC de
+.ALIAS BR br
+.ALIAS SPACE sp
+.ALIAS SP sp
+.ALIAS PAGELENGTH pl
+.ALIAS NEWPAGE bp
+.ALIAS SPREAD brp
+.ALIAS STRING ds
+\#
+\# ALIASES FOR NUMBER REGISTERS
+\# ----------------------------
+\#
+.ALIASN #PT_SIZE .ps \"fractional point size in units
+.ALIASN #DIVER_DEPTH dn \"diversion depth
+.ALIASN #DIVER_WIDTH dl \"diversion width
+.ALIASN #TRAP_DISTANCE .t \"distance to next trap
+.ALIASN #LEAD .v \"line space (.vs, not .ls)
+.ALIASN #PAGE_LENGTH .p \"page length
+.ALIASN #NUM_ARGS .$ \"number of arguments passed to a macro
+.ALIASN #INDENT .i \"value of current indent
+\#
+\# ====================================================================
+\#
+\# MISCELLANEOUS
+\# =============
+.cflags 4 /\(en
+\#
+\# ====================================================================
+\#
+\# END MACRO FOR LETTERS
+\# ---------------------
+\# *Arguments:
+\# none
+\# *Function:
+\# The .em macro executed at the end of letters. Turns footers and
+\# pagination off, terminates and outputs diversion CLOSING, indented with
+\# the author's name underneath.
+\#
+.MAC ALL_DONE END
+. br
+. FOOTERS OFF
+. PAGINATION OFF
+. if \\n[#DOC_TYPE]=4 \{\
+. br
+. if !'\\n(.z'' \{ .di \}
+. IQ CLEAR
+. TQ
+. TAB_SET 1 \\n[#DOC_L_LENGTH]u/2u \\n[#DOC_L_LENGTH]u/2u LEFT
+. ALD \\n[#DOC_LEAD]u*2u
+. TAB 1
+. if \\n[#CLOSING] \{\
+. nf
+. CLOSING
+. \}
+. ALD \\n[#DOC_LEAD]u*3u
+. PRINT \\*[$AUTHOR_1]
+. \}
+.DO_FOOTER
+.END
+\#
+\#
+\# =====================================================================
+\#
+\# +++PAGE LAYOUT+++
+\#
+\# Macros that control the physical layout of the page: paper size
+\# and margins.
+\#
+\# PAGE WIDTH
+\# ----------
+\# *Argument:
+\# <width of printer sheet (ipPc)>
+\# *Function:
+\# Stores user supplied page width in register #PAGE_WIDTH.
+\# *Notes:
+\# #PAGE_WIDTH is used to establish the default LL (and right margin).
+\# Requires unit of measure.
+\#
+.MAC PAGEWIDTH END
+. br
+. nr #PAGE_WIDTH \\$1
+. if !r#L_MARGIN \{ .L_MARGIN \\n(.o \}
+. if !r#R_MARGIN \{ .R_MARGIN 1i \}
+.END
+\#
+\#
+\# L_MARGIN
+\# --------
+\# *Argument:
+\# <offset from page left (ipPc)>
+\# *Function:
+\# Stores user supplied page offset in register #L_MARGIN.
+\# Sets .po to user supplied offset.
+\# *Notes:
+\# Requires unit of measure.
+\#
+.MAC L_MARGIN END
+. br
+. nr #L_MARGIN (\\$1)
+. po \\n[#L_MARGIN]u
+.END
+\#
+\#
+\# R_MARGIN
+\# --------
+\# *Argument:
+\# <width of right margin (ipPc)>
+\# *Function:
+\# Stores user supplied right margin in register #R_MARGIN.
+\# *Notes:
+\# This is a pseudo-margin. Right margin is actually a function of
+\# line length. The macro calculates line length from the page offset
+\# and the value plugged into #R_MARGIN.
+\#
+\# N.B. -- PAGEWIDTH and L_MARGIN have to be defined before R_MARGIN.
+\#
+\# Requires unit of measure.
+\#
+.MAC R_MARGIN END
+. br
+. nr #R_MARGIN (\\$1)
+. ll \\n[#PAGE_WIDTH]u-\\n[#L_MARGIN]u-\\n[#R_MARGIN]u
+. ta \\n(.lu
+. nr #L_LENGTH \\n(.l
+.END
+\#
+\#
+\# T_MARGIN
+\# --------
+\# *Argument:
+\# <distance to advance from top of page (ipPcv)>
+\# *Function:
+\# Stores the user supplied top margin in register #T_MARGIN.
+\# Advances user supplied depth from the top of the page.
+\# *Notes:
+\# Requires unit of measure.
+\#
+.MAC T_MARGIN END
+. br
+. nr #T_MARGIN (\\$1)
+. nr #T_MARGIN_SET 1
+. if !\\n[#DOCS] \{\
+. PRINT \&
+. sp |\\n[#T_MARGIN]u-1v
+. \}
+. wh 0i DO_T_MARGIN
+.END
+\#
+\#
+\# B_MARGIN
+\# --------
+\# *Argument:
+\# <space to leave at the bottom of the page (ipPcv)>
+\# *Function:
+\# Stores the user supplied bottom margin in register #B_MARGIN.
+\# *Notes:
+\# Requires unit of measure.
+\#
+.MAC B_MARGIN END
+. br
+. nr #B_MARGIN (\\$1)
+. wh -\\n[#B_MARGIN]u DO_B_MARGIN
+.END
+\#
+\#
+\# PAGE
+\# ----
+\# *Arguments:
+\# <pagewidth> [pagelength [leftmargin [rightmargin [topmargin [bottommargin]]]]]
+\# *Function:
+\# Page set-up. Collects arguments and passes them to the appropriate
+\# macros.
+\# *Notes:
+\# All arguments after pagewidth are optional, but must appear
+\# in the order given above. (User can fill in as much or as
+\# little as desired.)
+\#
+\# All arguments require a unit of measure.
+\#
+.MAC PAGE END
+. br
+. PAGEWIDTH \\$1
+. PAGELENGTH \\$2
+. ie '\\$3'' \{ .L_MARGIN \\n(.o \}
+. el \{ .L_MARGIN \\$3 \}
+. ie '\\$4'' \{ .R_MARGIN 1i \}
+. el \{ .R_MARGIN \\$4 \}
+. if !'\\$5'' \{ .T_MARGIN \\$5 \}
+. if !'\\$6'' \{ .B_MARGIN \\$6 \}
+.END
+\#
+\# =====================================================================
+\#
+\# +++PAGE CONTROL+++
+\#
+\# Generic macros for breaking pages.
+\#
+\# DO_T_MARGIN
+\# -----------
+\# *Argument:
+\# <none>
+\# *Function:
+\# Plants the top margin (set in .PAGE) at the top of each page.
+\# *Notes:
+\# The trap is set in .PAGE
+\#
+.MAC DO_T_MARGIN END
+. ev 1
+. sp |\\n[#T_MARGIN]u-1v
+. ev
+.END
+\#
+\#
+\# DO_B_MARGIN
+\# -----------
+\# *Argument:
+\# <none>
+\# *Function:
+\# Plants the bottom margin (set in .PAGE) at the bottom of each page.
+\# *Notes:
+\# The trap is set in .PAGE.
+\#
+.MAC DO_B_MARGIN END
+.ev 1
+. bp
+.ev
+.END
+\#
+\# =====================================================================
+\#
+\# +++GENERAL STYLE MACROS+++
+\#
+\# Macros that are likely to appear together to define general
+\# type style: line length, family, font, point size, and line
+\# spacing.
+\#
+\# LINE LENGTH
+\# -----------
+\# *Argument:
+\# <line length (iPpc)>
+\# *Function:
+\# Stores user supplied line length in register #L_LENGTH.
+\# Sets .ll to #L_LENGTHu
+\# *Notes:
+\# Requires unit of measure.
+\#
+.MAC LL END
+. nr #L_LENGTH (\\$1)
+. nr #USER_SET_L_LENGTH 1
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+.END
+\#
+\#
+\# FAMILY
+\# ------
+\# *Argument:
+\# <font family>
+\# *Function:
+\# Stores user supplied font family in string $FAMILY. Sets .fam
+\# to $FAMILY.
+\#
+.MAC FAMILY END
+. if \\n[#PRINT_STYLE]=1 \{ .return \}
+. if \\n[#IGNORE] \{ .return \}
+. ds $FAMILY \\$1
+. fam \\*[$FAMILY]
+.END
+\#
+\#
+\# FONT
+\# ----
+\# *Argument:
+\# R | I | B | BI
+\# *Function:
+\# Stores user supplied font in $FONT and sets .ft to $FONT.
+\#
+.MAC FT END
+. if \\n[#PRINT_STYLE]=1 \{\
+. ie '\\$1'I' \{\
+. if \\n[#UNDERLINE_ITALIC]=1 \{\
+. UNDERLINE
+. return
+. \}
+. if \\n[#ITALIC_MEANS_ITALIC]=1 \{\
+. ds $FONT \\$1
+. ft \\*[$FONT]
+. return
+. \}
+. \}
+. el \{ .UNDERLINE OFF \}
+. return
+. \}
+. ds $FONT \\$1
+. ft \\*[$FONT]
+.END
+\#
+\#
+\# POINT SIZE
+\# ----------
+\# *Arguments:
+\# <point size of type>
+\# *Function:
+\# Sets point size to user supplied value in scaled points.
+\# If #AUTO_LEAD is on, sets .vs to #AUTOLEAD_VALUE+#PT_SIZE.
+\# *Notes:
+\# Must NOT use a unit of measure.
+\#
+.MAC PT_SIZE END
+. if \\n[#PRINT_STYLE]=1 \{ .return \}
+. if \\n[#IGNORE] \{ .return \}
+. nr #PT_SIZE_SET 1
+. ps \\$1
+. if \\n[#AUTO_LEAD] \{\
+. ie \\n[#AUTOLEAD_FACTOR] \{ .vs \\n[#PT_SIZE]u*\\n[#AUTOLEAD_VALUE]u/1000u \}
+. el \{ .vs \\n[#PT_SIZE]u+\\n[#AUTOLEAD_VALUE]u \}
+. \}
+. nr #PT_SIZE_IN_UNITS \\n[.ps]
+.END
+\#
+\#
+\# LEADING
+\# -------
+\# *Argument:
+\# <leading between lines of text>
+\# *Function:
+\# Turns off #AUTO_LEAD if it's on.
+\# Sets .vs to user supplied value.
+\# *Notes:
+\# Does not require unit of measure. LEAD automatically turns off AUTOLEAD.
+\#
+.MAC LS END
+. if \\n[#PRINT_STYLE]=1 \{ .return \}
+. if \\n[#IGNORE] \{ .return \}
+. nr #LEAD_SET 1
+. if \\n[#AUTO_LEAD] \{\
+. rr #AUTO_LEAD
+. rr #AUTOLEAD_FACTOR
+. \}
+. vs \\$1
+. if \\n[#T_MARGIN_SET]=1 \{\
+. sp |\\n[#T_MARGIN]u-1v
+. rr #T_MARGIN_SET
+. \}
+.END
+\#
+\#
+\# AUTOLEAD
+\# --------
+\# *Argument:
+\# <leading value to add to #PT_SIZE> [FACTOR]
+\# *Function:
+\# Stores user supplied auto-lead value in register #AUTOLEAD_VALUE.
+\# Adds #AUT0LEAD_VALUE to #PT_SIZE when invoked to set leading.
+\# All subsequent PT_SIZE requests reset the leading in the same way until
+\# AUTOLEAD is turned off.
+\# *Notes:
+\# With the optional FACTOR argument, the current point size is
+\# multiplied by #AUTOLEAD_VALUE instead of the two being added
+\# together.
+\#
+\# When AUTOLEAD is turned off, the leading reverts to the leading value
+\# in effect prior to invoking AUTOLEAD.
+\#
+.MAC AUTOLEAD END
+. if \\n[#PRINT_STYLE]=1 \{ .return \}
+. if \\n[#IGNORE] \{ .return \}
+. nr #AUTO_LEAD 1
+. nr #AUTOLEAD_VALUE (p;\\$1)
+. ie \\n[#NUM_ARGS]=2 \{\
+. if '\\$2'FACTOR' \{\
+. nr #AUTOLEAD_FACTOR 1
+. vs \\n[#PT_SIZE]u*\\n[#AUTOLEAD_VALUE]u/1000u
+. \}
+. \}
+. el \{\
+. vs \\n[#PT_SIZE]u+\\n[#AUTOLEAD_VALUE]u
+. \}
+. if \\n[#T_MARGIN_SET] \{\
+. sp |\\n[#T_MARGIN]u-1v
+. rr #T_MARGIN_SET
+. \}
+.END
+\#
+\#
+\# STRINGS FOR INLINE CONTROL OF GENERAL TYPE STYLE
+\# ------------------------------------------------
+.ds ROM \EfR
+.ds IT \EfI
+.ds BD \EfB
+.ds BDI \Ef(BI
+.ds PREV \EfP
+.ds S \Es
+\#
+\# ADDITIONAL STRINGS
+\# ------------------
+.ds RULE \El'\En(.lu'
+\#
+\#
+\# =====================================================================
+\#
+\# +++KERNING+++
+\#
+\# AUTOMATIC PAIRWISE KERNING
+\# --------------------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Turns automatic pairwise kerning on or off.
+\#
+.MAC KERN END
+. ie '\\$1'' \{\
+. kern
+. nr #KERN 1
+. \}
+. el \{\
+. kern 0
+. nr #KERN 0
+. \}
+.END
+\#
+\#
+\# INLINE KERNING AND HORIZONTAL MOVEMENT
+\# --------------------------------------
+\# *Kerning
+\# Inline kerning provides a simple method for users to adjust the
+\# amount of space between any two letters. It's predicated on a
+\# unit of measure "U", which is 1/36 of the current point size as
+\# returned by \n[.ps]. E.g., if the current point size is 18,
+\# \n[.ps] returns 18000u, therefore U=500u. Since U remains
+\# proportional relative to the current point size, the amount
+\# of kerning between two letters as expressed in Us remains
+\# visually similar regardless of changes in point size.
+\#
+\# N.B.--the amount of inline kerning supplied by \*[BU#] or
+\# \*[FU#] is added to or subtracted from any kerning that already
+\# takes place between two characters when automatic kerning is
+\# turned on.
+\#
+\# In groff v. 1.17.2, it was not possible to pass arguments to macros that
+\# were executed with inline escapes, nor thence to evaluate conditional
+\# expressions. Consequently, each pseudo-escape \[BU#] had to be defined
+\# separately with ".char".
+\#
+\# As of v. 1.18, one can pass arguments to inline strings/macros,
+\# hence it is now possible to do \*[BU #] where #, inline, is the desired
+\# number of kern units. The original .char definitions have been left in
+\# for backward compatibility with documents created prior to mom-1.1.3c.
+\#
+\#
+.nr #KERN_UNIT 36
+.ds BU \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
+.ds FU \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
+\#
+.ds BU1 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*1u)'
+.ds BU2 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*2u)'
+.ds BU3 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*3u)'
+.ds BU4 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*4u)'
+.ds BU5 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*5u)'
+.ds BU6 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*6u)'
+.ds BU7 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*7u)'
+.ds BU8 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*8u)'
+.ds BU9 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*9u)'
+.ds BU10 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*10u)'
+.ds BU11 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*11u)'
+.ds BU12 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*12u)'
+.ds BU13 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*13u)'
+.ds BU14 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*14u)'
+.ds BU15 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*15u)'
+.ds BU16 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*16u)'
+.ds BU17 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*17u)'
+.ds BU18 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*18u)'
+.ds BU19 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*19u)'
+.ds BU20 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*20u)'
+.ds BU21 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*21u)'
+.ds BU22 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*22u)'
+.ds BU23 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*23u)'
+.ds BU24 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*24u)'
+.ds BU25 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*25u)'
+.ds BU26 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*26u)'
+.ds BU27 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*27u)'
+.ds BU28 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*28u)'
+.ds BU29 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*29u)'
+.ds BU30 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*30u)'
+.ds BU31 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*31u)'
+.ds BU32 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*32u)'
+.ds BU33 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*33u)'
+.ds BU34 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*34u)'
+.ds BU35 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*35u)'
+.ds BU36 \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*36u)'
+\#
+\#
+.ds FU1 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*1u)'
+.ds FU2 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*2u)'
+.ds FU3 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*3u)'
+.ds FU4 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*4u)'
+.ds FU5 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*5u)'
+.ds FU6 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*6u)'
+.ds FU7 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*7u)'
+.ds FU8 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*8u)'
+.ds FU9 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*9u)'
+.ds FU10 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*10u)'
+.ds FU11 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*11u)'
+.ds FU12 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*12u)'
+.ds FU13 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*13u)'
+.ds FU14 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*14u)'
+.ds FU15 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*15u)'
+.ds FU16 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*16u)'
+.ds FU17 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*17u)'
+.ds FU18 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*18u)'
+.ds FU19 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*19u)'
+.ds FU20 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*20u)'
+.ds FU21 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*21u)'
+.ds FU22 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*22u)'
+.ds FU23 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*23u)'
+.ds FU24 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*24u)'
+.ds FU25 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*25u)'
+.ds FU26 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*26u)'
+.ds FU27 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*27u)'
+.ds FU28 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*28u)'
+.ds FU29 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*29u)'
+.ds FU30 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*30u)'
+.ds FU31 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*31u)'
+.ds FU32 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*32u)'
+.ds FU33 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*33u)'
+.ds FU34 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*34u)'
+.ds FU35 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*35u)'
+.ds FU36 \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*36u)'
+\#
+\#
+\# *Horizontal movements
+\# BP1...12.75 and FP1...12.75 move backwards or forwards inline by the
+\# specified number of points.
+\# Left in for backward compatibility with mom-1.1.3c, the preferred
+\# methods for inline horizontal movements are now \*[BCK #<unit>] and
+\# \*[FWD #<unit>].
+\#
+.ds BCK \h'-\\$1\\$2'
+.ds FWD \h'\\$1\\$2'
+\#
+.ds BP.25 \h'-.25'
+.ds BP.5 \h'-.5'
+.ds BP.75 \h'-.75'
+.ds BP1 \h'-1p'
+.ds BP1.25 \h'-1.25p'
+.ds BP1.5 \h'-1.5p'
+.ds BP1.75 \h'-1.75p'
+.ds BP2 \h'-2p'
+.ds BP2.25 \h'-2.25p'
+.ds BP2.5 \h'-2.5p'
+.ds BP2.75 \h'-2.75p'
+.ds BP3 \h'-3p'
+.ds BP3.25 \h'-3.25p'
+.ds BP3.5 \h'-3.5p'
+.ds BP3.75 \h'-3.75p'
+.ds BP4 \h'-4p'
+.ds BP4.25 \h'-4.25p'
+.ds BP4.5 \h'-4.5p'
+.ds BP4.75 \h'-4.75p'
+.ds BP5 \h'-5p'
+.ds BP5.25 \h'-5.25p'
+.ds BP5.5 \h'-5.5p'
+.ds BP5.75 \h'-5.75p'
+.ds BP6 \h'-6p'
+.ds BP6.25 \h'-6.25p'
+.ds BP6.5 \h'-6.5p'
+.ds BP6.75 \h'-6.75p'
+.ds BP7 \h'-7p'
+.ds BP7.25 \h'-7.25p'
+.ds BP7.5 \h'-7.5p'
+.ds BP7.75 \h'-7.75p'
+.ds BP8 \h'-8p'
+.ds BP8.25 \h'-8.25p'
+.ds BP8.5 \h'-8.5p'
+.ds BP8.75 \h'-8.75p'
+.ds BP9 \h'-9p'
+.ds BP9.25 \h'-9.25p'
+.ds BP9.5 \h'-9.5p'
+.ds BP9.75 \h'-9.75p'
+.ds BP10 \h'-10p'
+.ds BP10.25 \h'-10.25p'
+.ds BP10.5 \h'-10.5p'
+.ds BP10.75 \h'-10.75p'
+.ds BP11 \h'-11p'
+.ds BP11.25 \h'-11.25p'
+.ds BP11.5 \h'-11.5p'
+.ds BP11.75 \h'-11.75p'
+.ds BP12 \h'-12p'
+.ds BP12.25 \h'-12.25p'
+.ds BP12.5 \h'-12.5p'
+.ds BP12.75 \h'-12.75p'
+\#
+.ds FP.25 \h'.25'
+.ds FP.5 \h'.5'
+.ds FP.75 \h'.75'
+.ds FP1 \h'1p'
+.ds FP1.25 \h'1.25p'
+.ds FP1.5 \h'1.5p'
+.ds FP1.75 \h'1.75p'
+.ds FP2 \h'2p'
+.ds FP2.25 \h'2.25p'
+.ds FP2.5 \h'2.5p'
+.ds FP2.75 \h'2.75p'
+.ds FP3 \h'3p'
+.ds FP3.25 \h'3.25p'
+.ds FP3.5 \h'3.5p'
+.ds FP3.75 \h'3.75p'
+.ds FP4 \h'4p'
+.ds FP4.25 \h'4.25p'
+.ds FP4.5 \h'4.5p'
+.ds FP4.75 \h'4.75p'
+.ds FP5 \h'5p'
+.ds FP5.25 \h'5.25p'
+.ds FP5.5 \h'5.5p'
+.ds FP5.75 \h'5.75p'
+.ds FP6 \h'6p'
+.ds FP6.25 \h'6.25p'
+.ds FP6.5 \h'6.5p'
+.ds FP6.75 \h'6.75p'
+.ds FP7 \h'7p'
+.ds FP7.25 \h'7.25p'
+.ds FP7.5 \h'7.5p'
+.ds FP7.75 \h'7.75p'
+.ds FP8 \h'8p'
+.ds FP8.25 \h'8.25p'
+.ds FP8.5 \h'8.5p'
+.ds FP8.75 \h'8.75p'
+.ds FP9 \h'9p'
+.ds FP9.25 \h'9.25p'
+.ds FP9.5 \h'9.5p'
+.ds FP9.75 \h'9.75p'
+.ds FP10 \h'10p'
+.ds FP10.25 \h'10.25p'
+.ds FP10.5 \h'10.5p'
+.ds FP10.75 \h'10.75p'
+.ds FP11 \h'11p'
+.ds FP11.25 \h'11.25p'
+.ds FP11.5 \h'11.5p'
+.ds FP11.75 \h'11.75p'
+.ds FP12 \h'12p'
+.ds FP12.25 \h'12.25p'
+.ds FP12.5 \h'12.5p'
+.ds FP12.75 \h'12.75p'
+\#
+\#
+\# WHOLE LINE KERNING (RW and EW)
+\# -----------------------------
+\# The line kerning macros are special instances of track kerning,
+\# used where a complete line needs to be tightened (or relaxed) in
+\# order to accomodate or remove one or two more characters
+\# than the default justification permits.
+\#
+\# *Argument:
+\# <amount of overall "kerning" (letter spacing) to apply to the line>
+\# *Function:
+\# Invokes .tkf (track kerning) for the current font with
+\# 1 as both the upper and lower point size limits, so that
+\# the value entered by the user applies regardless of point
+\# size. RW ("Reduce Whitespace") reduces the amount of space
+\# between all characters by an equal amount. EW ("Extra
+\# Whitespace") increases the amount of space.
+\# *Notes:
+\# Decimal values are acceptable.
+\#
+\# The groff documentation is a tad confusing about what unit of
+\# measure is used in track kerning, only that the width of each
+\# character is increased or decreased by the amount(s) passed as
+\# arguments to .tkf, and something about linear function of point
+\# size. In fact, with the way I've put this macro together, it
+\# doesn't matter. All the user needs to know is that a value
+\# of one will produce an unacceptably tight or loose line at most
+\# text point sizes; therefore, effective use of RW and EW is in
+\# the fractional range below 1 (e.g. .25, .5). Given that RW
+\# and EW are for massaging type, a certain amount of
+\# experimentation and previewing is expected and necessary.
+\#
+\# \n(.f holds the current font number, which is acceptable to .tkf.
+\#
+\# RW and EW must be reset to 0 to cancel their effect on
+\# subsequent output lines.
+\#
+.MAC RW END
+. if \\n[#BR_AT_LINE_KERN] \{ .br \}
+. tkf 1 1 -\\$1 1 -\\$1
+. tkf 2 1 -\\$1 1 -\\$1
+. tkf 3 1 -\\$1 1 -\\$1
+. tkf 4 1 -\\$1 1 -\\$1
+.END
+\#
+\#
+.MAC EW END
+. if \\n[#BR_AT_LINE_KERN] \{ .br \}
+. tkf 1 1 \\$1 1 \\$1
+. tkf 2 1 \\$1 1 \\$1
+. tkf 3 1 \\$1 1 \\$1
+. tkf 4 1 \\$1 1 \\$1
+.END
+\#
+\#
+\# BREAK AT LINE KERN
+\# ------------------
+\# *Arguments:
+\# toggle
+\# *Function:
+\# Enables/disables .br's before .RW and .EW
+\# *Notes:
+\# Mostly, users will want .br's before any kind of line kerning, but
+\# there may be cases where they don't. BR_BEFORE_LINE_KERN is off by
+\# default and must be invoked explicitly.
+\#
+.MAC BR_AT_LINE_KERN END
+. ie '\\$1'' \{ .nr #BR_AT_LINE_KERN 1 \}
+. el \{ .rr #BR_AT_LINE_KERN \}
+.END
+\#
+\# =====================================================================
+\#
+\# +++HYPHENATION+++
+\#
+\# AUTO HYPHENATION
+\# ----------------
+\# *Arguments:
+\# <none> | <anything> | DEFAULT
+\# or
+\# LINES <#> | MARGIN <#> | SPACE <#>
+\# *Function:
+\# Turns auto hyphenation on or off, resets the hyphenation style
+\# to default, or permits the setting of various hyphenation
+\# parameters.
+\# *Notes:
+\# HY ON defaults to .hy 14, i.e. no hyphens after the
+\# first two or before the last two characters of a word, and
+\# no hyphenation of the last line prior to a trap (e.g.,
+\# at the bottom of a page).
+\#
+\# HY DEFAULT resets the hyphenation style to .hy 14 (see
+\# above) if that behaviour is desired after changes have been
+\# made to LINES, MARGIN, or SPACE.
+\#
+\# HY LINES <#> sets the number of allowable consecutive hyphenated lines.
+\#
+\# HY MARGIN <#> sets the amount of space (ipPcm) allowed at the end
+\# of a line in QUAD mode before hyphenation is tripped (e.g. if there's
+\# only 6 points left, groff won't try to hyphenate the next word).
+\#
+\# HY SPACE sets the amount of extra interword space (ipPcm) that can
+\# be added in JUSTIFY mode to prevent a line from being hyphenated.
+\#
+.MAC HY END
+. ie '\\$1'' \{\
+. hy 14
+. nr #HYPHENATE 1
+. \}
+. el \{\
+. if !'\\$1'LINES' \{\
+. nh
+. nr #HYPHENATE 0
+. \}
+. if !'\\$1'MARGIN' \{\
+. nh
+. nr #HYPHENATE 0
+. \}
+. if !'\\$1'SPACE' \{\
+. nh
+. nr #HYPHENATE 0
+. \}
+. if !'\\$1'DEFAULT' \{\
+. nh
+. nr #HYPHENATE 0
+. \}
+. if '\\$1'LINES' \{ .hlm \\$2 \}
+. if '\\$1'MARGIN' \{ .hym \\$2 \}
+. if '\\$1'SPACE' \{ .hys \\$2 \}
+. if '\\$1'DEFAULT' \{\
+. hlm -1
+. hym 0
+. hys 0
+. \}
+. \}
+.END
+\#
+\#
+\# HYPHENATION PARAMETERS
+\# ----------------------
+\# *Arguments:
+\# <# of lines> | <size of margin> | <amount of interword space>
+\# *Function:
+\# Allows user to specify .HY LINES, MARGIN, and SPACE with a single command.
+\#
+.MAC HY_SET END
+. nr #HY_SET 1
+. hlm \\$1
+. hym \\$2
+. hys \\$3
+.END
+\#
+\# =====================================================================
+\#
+\# +++VERTICAL SPACING+++
+\#
+\# ADVANCE LEAD
+\# ------------
+\# *Argument:
+\# <user supplied lead to advance below current baseline>
+\# *Function:
+\# Creates or modifies register #ALD. Adds user supplied lead
+\# below current baseline.
+\# *Notes:
+\# Requires unit of measure ipPcmv.
+\#
+.MAC ALD END
+. nr #ALD (\\$1)
+. sp \\n[#ALD]u
+.END
+\#
+\#
+\# REVERSE LEAD
+\# ------------
+\# *Argument:
+\# <user supplied lead to reverse above current baseline>
+\# *Function:
+\# Creates or modifies register #RLD. Reverses user supplied
+\# lead above current baseline.
+\# *Notes:
+\# Requires unit of measure ipPcmv.
+\#
+.MAC RLD END
+. nr #RLD (\\$1)
+. sp -\\n[#RLD]u
+.END
+\#
+\# ALD/RLD STRINGS
+\# ---------------
+\# The strings \*[ALD.25]...\*[ALD12.75] and their corresponding \*[RLD]
+\# forms have been left in for backward compatibility with documents
+\# created using mom-1.1.3c or earlier. The prefered methods of advancing
+\# and reversing on the page inline are \*[UP #<unit>] and \*[DOWN #<unit>].
+\#
+.ds DOWN \v'\\$1\\$2'
+.ds UP \v'-\\$1\\$2'
+\#
+.ds ALD.25 \v'.25p'
+.ds ALD.5 \v'.5p'
+.ds ALD.75 \v'.75p'
+.ds ALD1 \v'1p'
+.ds ALD1.25 \v'1.25p'
+.ds ALD1.5 \v'1.5p'
+.ds ALD1.75 \v'1.75p'
+.ds ALD2 \v'2p'
+.ds ALD2.25 \v'2.25p'
+.ds ALD2.5 \v'2.5p'
+.ds ALD2.75 \v'2.75p'
+.ds ALD3 \v'3p'
+.ds ALD3.25 \v'3.25p'
+.ds ALD3.5 \v'3.5p'
+.ds ALD3.75 \v'3.75p'
+.ds ALD4 \v'4p'
+.ds ALD4.25 \v'4.25p'
+.ds ALD4.5 \v'4.5p'
+.ds ALD4.75 \v'4.75p'
+.ds ALD5 \v'5p'
+.ds ALD5.25 \v'5.25p'
+.ds ALD5.5 \v'5.5p'
+.ds ALD5.75 \v'5.75p'
+.ds ALD6 \v'6p'
+.ds ALD6.25 \v'6.25p'
+.ds ALD6.5 \v'6.5p'
+.ds ALD6.75 \v'6.75p'
+.ds ALD7 \v'7p'
+.ds ALD7.25 \v'7.25p'
+.ds ALD7.5 \v'7.5p'
+.ds ALD7.75 \v'7.75p'
+.ds ALD8 \v'8p'
+.ds ALD8.25 \v'8.25p'
+.ds ALD8.5 \v'8.5p'
+.ds ALD8.75 \v'8.75p'
+.ds ALD9 \v'9p'
+.ds ALD9.25 \v'9.25p'
+.ds ALD9.5 \v'9.5p'
+.ds ALD9.75 \v'9.75p'
+.ds ALD10 \v'10p'
+.ds ALD10.25 \v'10.25p'
+.ds ALD10.5 \v'10.5p'
+.ds ALD10.75 \v'10.75p'
+.ds ALD11 \v'11p'
+.ds ALD11.25 \v'11.25p'
+.ds ALD11.5 \v'11.5p'
+.ds ALD11.75 \v'11.75p'
+.ds ALD12 \v'12p'
+.ds ALD12.25 \v'12.5p'
+.ds ALD12.5 \v'12.5p'
+.ds ALD12.75 \v'12.75p'
+\#
+.ds RLD.25 \v'-.25p'
+.ds RLD.5 \v'-.5p'
+.ds RLD.75 \v'-.75p'
+.ds RLD1 \v'-1p'
+.ds RLD1.25 \v'-1.25p'
+.ds RLD1.5 \v'-1.5p'
+.ds RLD1.75 \v'-1.75p'
+.ds RLD2 \v'-2p'
+.ds RLD2.25 \v'-2.25p'
+.ds RLD2.5 \v'-2.5p'
+.ds RLD2.75 \v'-2.75p'
+.ds RLD3 \v'-3p'
+.ds RLD3.25 \v'-3.25p'
+.ds RLD3.5 \v'-3.5p'
+.ds RLD3.75 \v'-3.75p'
+.ds RLD4 \v'-4p'
+.ds RLD4.25 \v'-4.25p'
+.ds RLD4.5 \v'-4.5p'
+.ds RLD4.75 \v'-4.75p'
+.ds RLD5 \v'-5p'
+.ds RLD5.25 \v'-5.25p'
+.ds RLD5.5 \v'-5.5p'
+.ds RLD5.75 \v'-5.75p'
+.ds RLD6 \v'-6p'
+.ds RLD6.25 \v'-6.25p'
+.ds RLD6.5 \v'-6.5p'
+.ds RLD6.75 \v'-6.75p'
+.ds RLD7 \v'-7p'
+.ds RLD7.25 \v'-7.25p'
+.ds RLD7.5 \v'-7.5p'
+.ds RLD7.75 \v'-7.75p'
+.ds RLD8 \v'-8p'
+.ds RLD8.25 \v'-8.25p'
+.ds RLD8.5 \v'-8.5p'
+.ds RLD8.75 \v'-8.75p'
+.ds RLD9 \v'-9p'
+.ds RLD9.25 \v'-9.25p'
+.ds RLD9.5 \v'-9.5p'
+.ds RLD9.75 \v'-9.75p'
+.ds RLD10 \v'-10p'
+.ds RLD10.25 \v'-10.25p'
+.ds RLD10.5 \v'-10.5p'
+.ds RLD10.75 \v'-10.75p'
+.ds RLD11 \v'-11p'
+.ds RLD11.25 \v'-11.25p'
+.ds RLD11.5 \v'-11.5p'
+.ds RLD11.75 \v'-11.75p'
+.ds RLD12 \v'-12p'
+.ds RLD12.25 \v'-12.5p'
+.ds RLD12.5 \v'-12.5p'
+.ds RLD12.75 \v'-12.75p'
+\#
+\# =====================================================================
+\#
+\# +++REFINEMENTS+++
+\#
+\# AUTOMATIC LIGATURES
+\# -------------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Turns automatic ligature generation on or off.
+\# *Notes:
+\# Ligatures may be supplied manually with \(fi, \(fl, etc.
+\#
+.MAC LIGATURES END
+. ie '\\$1'' \{\
+. lg
+. nr #LIGATURES 1
+. \}
+. el \{\
+. lg 0
+. nr #LIGATURES 0
+. \}
+.END
+\#
+\#
+\# SMARTQUOTES
+\# -----------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Turns smartquotes on or off.
+\# *Notes:
+\# The " character is read outside the macro when mom is
+\# processed. The strings for open/close ($QUOTE#) are then
+\# defined in the macro. \N'34' is the ASCII code for ". If
+\# incompatibilities arise, find the code for " that applies
+\# to your system and plug in that code instead.
+\#
+.char " \\*[$QUOTE\\n[#OPEN_CLOSE]]\R'#OPEN_CLOSE (1-\\n[#OPEN_CLOSE])'
+\#
+.MAC SMARTQUOTES END
+. ie '\\$1'' \{\
+. nr #OPEN_CLOSE 0
+. ds $QUOTE0 ``
+. ds $QUOTE1 ''
+. nr #SMART_QUOTES 1
+. \}
+. el \{\
+. ds $QUOTE0 \\N'34'
+. ds $QUOTE1 \\N'34'
+. nr #SMART_QUOTES 0
+. \}
+.END
+\#
+.ds FOOT \(fm
+.ds INCH \(fm\(fm
+\#
+\# =====================================================================
+\#
+\# +++LINE BREAKS+++
+\#
+\# NO-SPACE BREAK
+\# --------------
+\# *Argument:
+\# <none>
+\# *Function:
+\# Breaks a line without advancing.
+\# *Notes:
+\# EL is the mnemonic used on older, dedicated typesetting machines
+\# to indicate "process the line, then return to the left margin
+\# without advancing the galley medium." It stands for End Line.
+\#
+\# Sadly, EL is only a fake. It will work in all instances EXCEPT
+\# when the line to be EL'd is the last line before a footer trap.
+\# Use TRAP OFF/TRAP to circumvent this.
+\#
+.MAC EL END
+. br
+. sp -1v
+.END
+\#
+\# =====================================================================
+\#
+\# +++FILLING/QUADDING/JUSTIFYING+++
+\#
+\# JUSTIFY
+\# -------
+\# *Argument:
+\# <none>
+\# *Function:
+\# Turns fill on and sets .ad to b.
+\# *Notes:
+\# Justifies text left and right.
+\#
+.MAC JUSTIFY END
+. if \\n[#TAB_ACTIVE]=0 \{\
+. nr #QUAD 1
+. ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
+. \}
+' ce 0
+. QUAD J
+. if \\n[#PRINT_STYLE]=1 \{ .QUAD L \}
+. nr #FILL 0
+.END
+\#
+\#
+\# QUAD
+\# ----
+\# *Arguments:
+\# L | LEFT | R | RIGHT | C | CENTER/CENTRE
+\# *Function:
+\# Turns fill on and sets .ad to l, r, or c.
+\# *Notes:
+\# Terminology is a problem here. Some people call quad left
+\# left justified, flush left, or flush left/rag right (and the
+\# reverse for quad right). Quad center is sometimes called rag
+\# both. For our purposes, all "quad" modes mean that groff fill
+\# mode is enabled.
+\#
+.MAC QUAD END
+. ds $QUAD_VALUE \\$1
+. if \\n[#TAB_ACTIVE]=0 \{\
+. nr #QUAD 1
+. ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
+. \}
+' ce 0
+' fi
+. if '\\*[$QUAD_VALUE]'L' \{ .ad l \}
+. if '\\*[$QUAD_VALUE]'LEFT' \{ .ad l \}
+. if '\\*[$QUAD_VALUE]'R' \{ .ad r \}
+. if '\\*[$QUAD_VALUE]'RIGHT' \{ .ad r \}
+. if '\\*[$QUAD_VALUE]'C' \{ .ad c \}
+. if '\\*[$QUAD_VALUE]'CENTER' \{ .ad c \}
+. if '\\*[$QUAD_VALUE]'CENTRE' \{ .ad c \}
+. if '\\*[$QUAD_VALUE]'J' \{ .ad b \}
+. if '\\*[$QUAD_VALUE]'JUSTIFY' \{ .ad b \}
+. nr #FILL 0
+.END
+\#
+\#
+\# LEFT, RIGHT, AND CENTER
+\# -----------------------
+\# The purpose of these macros is to allow the user to enter lines
+\# of text that will be quadded LRC *without* the user having to
+\# enter .BR or .br between lines. For the sake of consistency,
+\# all three appear to behave similarly (from the point of view of the user),
+\# although the underlying primitives don't. For this reason, LEFT,
+\# RIGHT, and CENTER must be followed by .QUAD [L R C J] or .JUSTIFY
+\# to restore text to groff fill mode.
+\#
+\# LEFT
+\# ----
+\# *Argument:
+\# <none>
+\# *Function:
+\# Turns fill mode off. Allows user to quad lines left without
+\# requiring the .BR or .br macro.
+\# *Notes:
+\# LEFT simply turns fill off. Lines that exceed the current LL will
+\# not be broken, simply continued (indefinitely) until a return is
+\# encountered. Note that this behaviour differs from the RIGHT and
+\# CENTER macros.
+\#
+.MAC LEFT END
+. if \\n[#TAB_ACTIVE]=0 \{\
+. rr #QUAD
+. ds $RESTORE_QUAD_VALUE LEFT
+. \}
+. ce 0
+. nf
+. nr #FILL 1
+.END
+\#
+\#
+\# RIGHT
+\# -----
+\# *Argument:
+\# <none>
+\# *Function:
+\# Turns fill on. Allows user to quad lines right without
+\# requiring the .BR or .br macro.
+\# *Notes:
+\# Lines that exceed the current LL will be broken, with the excess
+\# text quadded right.
+\#
+.MAC RIGHT END
+. if \\n[#TAB_ACTIVE]=0 \{\
+. rr #QUAD
+. ds $RESTORE_QUAD_VALUE RIGHT
+. \}
+. fi
+. rj 100000
+. nr #FILL 1
+.END
+\#
+\#
+\# CENTER
+\# ------
+\# *Argument:
+\# <none>
+\# *Function:
+\# Turns fill on. Allows user to center lines without
+\# requiring the .BR or .br macro.
+\# *Notes:
+\# Lines that exceed the current LL will be broken, with the excess
+\# text centered.
+\#
+.MAC CENTER END
+. if \\n[#TAB_ACTIVE]=0 \{\
+. ds $RESTORE_QUAD_VALUE CENTER
+. \}
+. fi
+. ce 100000
+. nr #FILL 1
+.END
+\#
+\# =====================================================================
+\#
+\# +++TABS+++
+\#
+\# There are two different kinds of tabs available: typesetting tabs
+\# and string tabs.
+\#
+\# Typesetting tabs are set with TAB_SET, which requires a tab number,
+\# an indent (offset) from the left margin and a length (optionally
+\# with a quad direction and an instruction to fill lines). After tabs
+\# are set with TS, they are called with .TAB <#>, where <#>
+\# corresponds to the number passed to TAB_SET as a valid tab number.
+\#
+\# String tabs allow the user to mark off tab positions inline. Tab
+\# indents and lengths are calculated from the beginning and end
+\# positions of the marks. Up to 19 string tabs may be created,
+\# numbered 1-19. Once created, they are called with .TAB <#>,
+\# just like typesetting tabs.
+\#
+\# Setting up string tabs is a two-step procedure. First, the user
+\# enters an input line in which s/he wants to mark off string tabs.
+\# The beginning of a tab is marked with \*[ST<#>], where <#> is
+\# the desired number of the tab. The end of the the tab is marked
+\# with \*[ST<#>X]. All ST's must have a matching STX. String tabs
+\# may be nested.
+\#
+\# Next, the user invokes .ST <#> for every string tab defined, and
+\# optionally passes quad information to it. That done, string tabs
+\# can be called just like typesetting tabs.
+\#
+\# String tabs don't preview properly with gxditview. Use gv instead.
+\#
+\# Strings for string tab inlines
+\# ------------------------------
+\#
+.ds ST1 \Ek[#ST1_OFFSET]
+.ds ST2 \Ek[#ST2_OFFSET]
+.ds ST3 \Ek[#ST3_OFFSET]
+.ds ST4 \Ek[#ST4_OFFSET]
+.ds ST5 \Ek[#ST5_OFFSET]
+.ds ST6 \Ek[#ST6_OFFSET]
+.ds ST7 \Ek[#ST7_OFFSET]
+.ds ST8 \Ek[#ST8_OFFSET]
+.ds ST9 \Ek[#ST9_OFFSET]
+.ds ST10 \Ek[#ST10_OFFSET]
+.ds ST11 \Ek[#ST11_OFFSET]
+.ds ST12 \Ek[#ST12_OFFSET]
+.ds ST13 \Ek[#ST13_OFFSET]
+.ds ST14 \Ek[#ST14_OFFSET]
+.ds ST15 \Ek[#ST15_OFFSET]
+.ds ST16 \Ek[#ST16_OFFSET]
+.ds ST17 \Ek[#ST17_OFFSET]
+.ds ST18 \Ek[#ST18_OFFSET]
+.ds ST19 \Ek[#ST19_OFFSET]
+.ds ST1X \Ek[#ST1_MARK]
+.ds ST2X \Ek[#ST2_MARK]
+.ds ST3X \Ek[#ST3_MARK]
+.ds ST4X \Ek[#ST4_MARK]
+.ds ST5X \Ek[#ST5_MARK]
+.ds ST6X \Ek[#ST6_MARK]
+.ds ST7X \Ek[#ST7_MARK]
+.ds ST8X \Ek[#ST8_MARK]
+.ds ST9X \Ek[#ST9_MARK]
+.ds ST10X \Ek[#ST10_MARK]
+.ds ST11X \Ek[#ST11_MARK]
+.ds ST12X \Ek[#ST12_MARK]
+.ds ST13X \Ek[#ST13_MARK]
+.ds ST14X \Ek[#ST14_MARK]
+.ds ST15X \Ek[#ST15_MARK]
+.ds ST16X \Ek[#ST16_MARK]
+.ds ST17X \Ek[#ST17_MARK]
+.ds ST18X \Ek[#ST18_MARK]
+.ds ST19X \Ek[#ST19_MARK]
+\#
+\#
+\# QUAD AND SET STRING TABS
+\# ------------------------
+\# *Arguments:
+\# <stringtab number> L | R | C | J [QUAD]
+\# *Function:
+\# Creates strings $ST<#>_QUAD_DIR and $ST<#>_FILL, then sets up a
+\# tab based on the collected information.
+\# *Notes:
+\# Like TS, ST invoked without a quad direction will default to LEFT.
+\# If lines should be filled and quadded, use the optional argument QUAD.
+\# N.B. -- indents *must* be turned off before setting string tabs
+\# inside .PAD
+\#
+.MAC ST END
+. ds $ST\\$1_QUAD_DIR \\$2
+. if \\n[#NUM_ARGS]=3 \{\
+. ds $ST\\$1_FILL QUAD
+. \}
+. nr #ST\\$1_LENGTH \\n[#ST\\$1_MARK]-\\n[#ST\\$1_OFFSET]
+. ie \\n[#IN_TAB] \{\
+. TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u+\\n[#ST_OFFSET]u \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
+. \}
+. el \{\
+. TAB_SET \\$1 \\n[#ST\\$1_OFFSET]u \\n[#ST\\$1_LENGTH]u \\*[$ST\\$1_QUAD_DIR] \\*[$ST\\$1_FILL]
+. \}
+.END
+\#
+\#
+\# TAB SET
+\# -------
+\# *Arguments:
+\# <#> ident(ipPcm) length(ipPcm) [L | R | C | J [QUAD]]
+\# *Function:
+\# Creates macros TAB<#> and TAB <#>, where # is any arbitrary number.
+\# TAB# is a typesetting tab (i.e. a tab defined as an indent
+\# from the page left offset plus a line length.)
+\# *Notes:
+\# <#> = arbitrary digit to identify the tab
+\# indent = indent from left margin; unit of measure required
+\# length = length of tab (unit of measure required; can be
+\# \w'<string>'u--if more than one word in string, surround
+\# with double quotes "\w'<three word string>'"
+\# LRCJ = quad for tab (left, right, center, justified)
+\# If option QUAD afterwards is not given, quad is line for line
+\# (no fill mode), meaning that there's no need for .BR or .br
+\# between lines.
+\# QUAD = fill tab (so it behaves as if .QUAD LRC or .JUSTIFY
+\# had been given).
+\#
+\# N.B. -- indents *must* be turned off before setting tabs
+\#
+\# Examples:
+\#
+\# .TAB_SET 1 2P+6p 12P C
+\#
+\# means "create a tab numbered 1 that starts 2 picas and 6 points from
+\# the left margin, is 12 picas long, and centre each input line."
+\#
+\# .TAB_SET 1 2P+6P 12P C QUAD
+\#
+\# means exactly the same thing, except that input lines are joined and
+\# the area delimted by the tab filled with centered text.
+\#
+\# TAB <#> can be called at any time after being set.
+\#
+\# Tabs are NOT columnar in behaviour. If the text inside a
+\# tab runs to several lines, when you call the next tab a break
+\# occurs, meaning that the new tab starts one line below the last
+\# line in the previous tab. For columnar behaviour, you must
+\# use the multi-column macros in addition to tabs.
+\#
+\# If you want tabs to line up bottom-line to bottom-line (most likely
+\# single line tabs), use .TN (provided the tabs are numbered sequentially).
+\# Otherwise, you must use .EL then .TAB # if you want them to align.
+\#
+\# If you want to reset tabs, you must use .TQ before .TAB_SET.
+\#
+\# Note that indents are turned off automatically whenever a new
+\# tab is called with TAB #.
+\#
+\# Tabs themselves are user-invoked using the TAB macro with a numeric
+\# argument, e.g. TAB 1.
+\#
+\# Generally, in order not to get confused, it's a good idea
+\# to make sure all indents are off before setting tabs.
+\#
+.MAC TAB_SET END
+. br
+. nr #TAB_NUMBER \\$1
+. ds $CURRENT_TAB \\n[#TAB_NUMBER]
+. nr #TAB_OFFSET (\\$2)
+. nr #TAB_LENGTH (\\$3)
+. MAC TAB\\n[#TAB_NUMBER] DONE \"Define TAB macro
+. br
+. in 0
+. nr #TAB_ACTIVE 1
+. nr #CURRENT_TAB \\n[#TAB_NUMBER]
+. po \\n[#L_MARGIN]u+\\n[#TAB_OFFSET]u
+. nr #ST_OFFSET \\n[#TAB_OFFSET]
+. nr #TAB_OFFSET\\*[$CURRENT_TAB] \\n[#TAB_OFFSET]
+. ll \\n[#TAB_LENGTH]u
+. ta \En(.lu
+. ie '\\$5'QUAD' \{\
+. if '\\$4'L' \{ .QUAD L \}
+. if '\\$4'R' \{ .QUAD R \}
+. if '\\$4'C' \{ .QUAD C \}
+. if '\\$4'J' \{ .JUSTIFY \}
+. \}
+. el \{\
+. if '\\$4'' \{ .LEFT \}
+. if '\\$4'L' \{ .LEFT \}
+. if '\\$4'R' \{ .RIGHT \}
+. if '\\$4'C' \{ .CENTER \}
+. if '\\$4'J' \{ .JUSTIFY \}
+. \}
+.DONE
+. rr #TAB_ACTIVE
+.END
+\#
+\#
+\# TAB
+\# ---
+\# *Arguments:
+\# <tab number to tab into>
+\# *Function:
+\# Moves to tab number passed as an argument.
+\#
+.MAC TAB END
+. ds $TAB_NUMBER \\$1
+. TAB\\*[$TAB_NUMBER]
+. nr #IN_TAB 1
+. po \\n[#L_MARGIN]u+\\n[#TAB_OFFSET\\*[$TAB_NUMBER]]u
+.END
+\#
+\#
+\# TAB NEXT
+\# --------
+\# *Argument:
+\# <none>
+\# *Function:
+\# Automagically moves to TAB#+1 on the same line as the last
+\# line of the previous tab.
+\# *Notes:
+\# If the tabs being aligned fall too close to the footer
+\# trap, the line entered after .TN will appear on the next page.
+\#
+.MAC TN END
+. br
+. nr #NEXT_TAB \\n[#CURRENT_TAB]+1
+. TAB\\n[#NEXT_TAB]
+. sp -1v
+.END
+\#
+\#
+\# TAB QUIT
+\# --------
+\# *Argument:
+\# <none>
+\# *Function:
+\# Sets #TAB_ACTIVE to "0" (off).
+\# Resets left margin to value in effect prior to tabs.
+\# Resets line length to value in effect prior to tabs.
+\# Checks #QUAD to see if we were in flush or quad mode
+\# prior to tabs (0=off, 1=on).
+\# Resets QUAD [ L|R|C ], LEFT, RIGHT, CENTER, or JUSTIFY
+\# in effect prior to tabs.
+\# *Notes:
+\# TQ *must* come before setting any new tabs if you want the
+\# tabs' indents measured from page left. Otherwise, the tabs'
+\# indents are measured from the left margin of the tab you're
+\# currently in.
+\#
+.MAC TQ END
+. br
+. rr #TAB_ACTIVE
+. rr #IN_TAB
+. po \\n[#L_MARGIN]u
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+. ie \\n[#QUAD] \{\
+. ie '\\*[$RESTORE_QUAD_VALUE]'J' \{ .JUSTIFY \}
+. el \{ .QUAD \\*[$RESTORE_QUAD_VALUE] \}
+. \}
+. el \{\
+. if '\\*[$RESTORE_QUAD_VALUE]'LEFT' \{ .LEFT \}
+. if '\\*[$RESTORE_QUAD_VALUE]'RIGHT' \{ .RIGHT \}
+. if '\\*[$RESTORE_QUAD_VALUE]'CENTER' \{ .CENTER \}
+. \}
+.END
+\#
+\# =====================================================================
+\#
+\# +++MISCELLANEOUS USEFUL MACROS AND STRINGS+++
+\#
+\# UNDERLINE
+\# ---------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# When on, underlines all letters, words, and digits in a passage,
+\# ignoring punctuation and spaces.
+\# *Notes:
+\# Only for use when the font family is COURIER, to simulate
+\# typewriter-style underlining of italic passages.
+\#
+.MAC UNDERLINE END
+. ie '\\$1'' \{\
+. nr #UNDERLINE_ON 1
+. char A _A
+. char B _B
+. char C _C
+. char D _D
+. char E _E
+. char F _F
+. char G _G
+. char H _H
+. char I _I
+. char J _J
+. char K _K
+. char L _L
+. char M _M
+. char N _N
+. char O _O
+. char P _P
+. char Q _Q
+. char R _R
+. char S _S
+. char T _T
+. char U _U
+. char V _V
+. char W _W
+. char X _X
+. char Y _Y
+. char Z _Z
+. char \[`A] _\[`A]
+. char \[^A] _\[^A]
+. char \['A] _\['A]
+. char \[:A] _\[:A]
+. char \[oA] _\[oA]
+. char \[~A] _\[~A]
+. char \[AE] _\[AE]
+. char \[`E] _\[`E]
+. char \[^E] _\[^E]
+. char \['E] _\['E]
+. char \[:E] _\[:E]
+. char \[`I] _\[`I]
+. char \[^I] _\[^I]
+. char \['I] _\['I]
+. char \[:I] _\[:I]
+. char \[`O] _\[`O]
+. char \[^O] _\[^O]
+. char \['O] _\['O]
+. char \[:O] _\[:O]
+. char \[~O] _\[~O]
+. char \[/O] _\[/O]
+. char \[`U] _\[`U]
+. char \[^U] _\[^U]
+. char \['U] _\['U]
+. char \[:U] _\[:U]
+. char \[,C] _\[,C]
+. char \[-D] _\[-D]
+. char \[~N] _\[~N]
+. char \[TP] _\[TP]
+. char \['Y] _\['Y]
+. char \[:Y] _\[:Y]
+. char a _a
+. char b _b
+. char c _c
+. char d _d
+. char e _e
+. char f _f
+. char g _g
+. char h _h
+. char i _i
+. char j _j
+. char k _k
+. char l _l
+. char m _m
+. char n _n
+. char o _o
+. char p _p
+. char q _q
+. char r _r
+. char s _s
+. char t _t
+. char u _u
+. char v _v
+. char w _w
+. char x _x
+. char y _y
+. char z _z
+. char \[`a] _\[`a]
+. char \[^a] _\[^a]
+. char \['a] _\['a]
+. char \[:a] _\[:a]
+. char \[oa] _\[oa]
+. char \[~a] _\[~a]
+. char \[ae] _\[ae]
+. char \[`e] _\[`e]
+. char \[^e] _\[^e]
+. char \['e] _\['e]
+. char \[:e] _\[:e]
+. char \[`i] _\[`i]
+. char \[^i] _\[^i]
+. char \['i] _\['i]
+. char \[:i] _\[:i]
+. char \[`o] _\[`o]
+. char \[^o] _\[^o]
+. char \['o] _\['o]
+. char \[:o] _\[:o]
+. char \[~o] _\[~o]
+. char \[/o] _\[/o]
+. char \[`u] _\[`u]
+. char \[^u] _\[^u]
+. char \['u] _\['u]
+. char \[:u] _\[:u]
+. char \[,c] _\[,c]
+. char \[Sd] _\[Sd]
+. char \[~n] _\[~n]
+. char \[Tp] _\[Tp]
+. char \['y] _\['y]
+. char \[:y] _\[:y]
+. char \[ss] _\[ss]
+. char ' _'
+. char 1 _1
+. char 2 _2
+. char 3 _3
+. char 4 _4
+. char 5 _5
+. char 6 _6
+. char 7 _7
+. char 8 _8
+. char 9 _9
+. char 0 _0
+. \}
+. el \{\
+. nr #UNDERLINE_ON 0
+. rchar A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \
+ a b c d e f g h i j k l m n o p q r s t u v w x y z \
+ \[`A] \[^A] \['A] \[:A] \[oA] \[~A] \[AE] \[`E] \[^E] \['E] \[:E] \
+ \[`I] \[^I] \['I] \[:I] \[`O] \[^O] \['O] \[:O] \[~O] \[/O] \[`U] \
+ \[^U] \['U] \[:U] \[,C] \[-D] \[~N] \[TP] \['Y] \[:Y] \
+ \[`a] \[^a] \['a] \[:a] \[oa] \[~a] \[ae] \[`e] \[^e] \['e] \[:e] \[`i] \
+ \[^i] \['i] \[:i] \[`o] \[^o] \['o] \[:o] \[~o] \[/o] \[`u] \[^u] \['u] \
+ \[:u] \[,c] \[Sd] \[~n] \[Tp] \['y] \[:y] \[ss] \
+ 1 2 3 4 5 6 7 8 9 0
+. \}
+.END
+\#
+\#
+\# UL/ULX
+\# ------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Underscores all letters, words, and digits in a passage,
+\# ignoring punctuation and spaces.
+\# *Notes:
+\# Intended to be called with inline escapes \*[UL] (underline
+\# on) and \*[ULX] (underline off). Only works when the font family
+\# is COURIER, to simulate typewriter-style underlining of italic
+\# passages.
+\#
+.MAC UL END
+\c\R'#UNDERLINE_ON 1'
+. char A _A
+. char B _B
+. char C _C
+. char D _D
+. char E _E
+. char F _F
+. char G _G
+. char H _H
+. char I _I
+. char J _J
+. char K _K
+. char L _L
+. char M _M
+. char N _N
+. char O _O
+. char P _P
+. char Q _Q
+. char R _R
+. char S _S
+. char T _T
+. char U _U
+. char V _V
+. char W _W
+. char X _X
+. char Y _Y
+. char Z _Z
+. char \[`A] _\[`A]
+. char \[^A] _\[^A]
+. char \['A] _\['A]
+. char \[:A] _\[:A]
+. char \[oA] _\[oA]
+. char \[~A] _\[~A]
+. char \[AE] _\[AE]
+. char \[`E] _\[`E]
+. char \[^E] _\[^E]
+. char \['E] _\['E]
+. char \[:E] _\[:E]
+. char \[`I] _\[`I]
+. char \[^I] _\[^I]
+. char \['I] _\['I]
+. char \[:I] _\[:I]
+. char \[`O] _\[`O]
+. char \[^O] _\[^O]
+. char \['O] _\['O]
+. char \[:O] _\[:O]
+. char \[~O] _\[~O]
+. char \[/O] _\[/O]
+. char \[`U] _\[`U]
+. char \[^U] _\[^U]
+. char \['U] _\['U]
+. char \[:U] _\[:U]
+. char \[,C] _\[,C]
+. char \[-D] _\[-D]
+. char \[~N] _\[~N]
+. char \[TP] _\[TP]
+. char \['Y] _\['Y]
+. char \[:Y] _\[:Y]
+. char a _a
+. char b _b
+. char c _c
+. char d _d
+. char e _e
+. char f _f
+. char g _g
+. char h _h
+. char i _i
+. char j _j
+. char k _k
+. char l _l
+. char m _m
+. char n _n
+. char o _o
+. char p _p
+. char q _q
+. char r _r
+. char s _s
+. char t _t
+. char u _u
+. char v _v
+. char w _w
+. char x _x
+. char y _y
+. char z _z
+. char \[`a] _\[`a]
+. char \[^a] _\[^a]
+. char \['a] _\['a]
+. char \[:a] _\[:a]
+. char \[oa] _\[oa]
+. char \[~a] _\[~a]
+. char \[ae] _\[ae]
+. char \[`e] _\[`e]
+. char \[^e] _\[^e]
+. char \['e] _\['e]
+. char \[:e] _\[:e]
+. char \[`i] _\[`i]
+. char \[^i] _\[^i]
+. char \['i] _\['i]
+. char \[:i] _\[:i]
+. char \[`o] _\[`o]
+. char \[^o] _\[^o]
+. char \['o] _\['o]
+. char \[:o] _\[:o]
+. char \[~o] _\[~o]
+. char \[/o] _\[/o]
+. char \[`u] _\[`u]
+. char \[^u] _\[^u]
+. char \['u] _\['u]
+. char \[:u] _\[:u]
+. char \[,c] _\[,c]
+. char \[Sd] _\[Sd]
+. char \[~n] _\[~n]
+. char \[Tp] _\[Tp]
+. char \['y] _\['y]
+. char \[:y] _\[:y]
+. char \[ss] _\[ss]
+. char ' _'
+. char 1 _1
+. char 2 _2
+. char 3 _3
+. char 4 _4
+. char 5 _5
+. char 6 _6
+. char 7 _7
+. char 8 _8
+. char 9 _9
+. char 0 _0
+.END
+\#
+\#
+.MAC ULX END
+\c\R'#UNDERLINE_ON 0'
+. rchar A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \
+ a b c d e f g h i j k l m n o p q r s t u v w x y z \
+ \[`A] \[^A] \['A] \[:A] \[oA] \[~A] \[AE] \[`E] \[^E] \['E] \[:E] \
+ \[`I] \[^I] \['I] \[:I] \[`O] \[^O] \['O] \[:O] \[~O] \[/O] \[`U] \
+ \[^U] \['U] \[:U] \[,C] \[-D] \[~N] \[TP] \['Y] \[:Y] \
+ \[`a] \[^a] \['a] \[:a] \[oa] \[~a] \[ae] \[`e] \[^e] \['e] \[:e] \[`i] \
+ \[^i] \['i] \[:i] \[`o] \[^o] \['o] \[:o] \[~o] \[/o] \[`u] \[^u] \['u] \
+ \[:u] \[,c] \[Sd] \[~n] \[Tp] \['y] \[:y] \[ss] \
+ 1 2 3 4 5 6 7 8 9 0
+.END
+\#
+\#
+\# UNDERSCORE
+\# ----------
+\# *Arguments:
+\# [points below baseline] "text"
+\# *Function:
+\# Places an underscore 2 points under the string if no lead given,
+\# otherwise places underscore under string by user specified amount.
+\# *Notes:
+\# When using this macro, the string to be underscored must begin
+\# with double-quotes ("), regardless of whether it's the sole
+\# argument or the second.
+\# E.g.:
+\# .UNDERSCORE "Text to be underscored
+\# or
+\# .UNDERSCORE 2p "Text to be underscored
+\#
+\# All text is underscored (including punctuation and spaces).
+\# This is the primary difference between UNDERLINE and UNDERSCORE,
+\# aside from the fact the UNDERLINE only works with Courier.
+\#
+\# UNDERSCORE does not work across line breaks. Each line of
+\# text must be entered separately with UNDERSCORE. If the
+\# UNDERSCORE begins in the middle of a line and crosses over a
+\# break, the portion before the break must be entered in its own
+\# UNDERSCORE, as must the portion that comes after the break.
+\#
+.MAC UNDERSCORE END
+. nr #RESTORE_PT_SIZE \\n[#PT_SIZE]
+. ie \\n[#NUM_ARGS]=1 \{ \\$1\\s(12\\v'+2p'\\l'|0'\\v'-2p'\\s[\\n[#RESTORE_PT_SIZE]u] \}
+. el \{ \\$2\\s(12\\v'+(\\$1)'\\l'|0'\\v'-(\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u] \}
+. rr #RESTORE_PT_SIZE
+.END
+\#
+\#
+\# DOUBLE UNDERSCORE
+\# -----------------
+\# *Arguments:
+\# [points below baseline] [points distance between rules] "text"
+\# *Function:
+\# Same as UNDERSCORE, except it produces a double underscore. The default
+\# distance between the rules is 2 points.
+\# *Notes:
+\# The same double-quote requirement as UNDERSCORE.
+\#
+.MAC UNDERSCORE2 END
+. nr #RESTORE_PT_SIZE \\n[#PT_SIZE]
+. if \\n[#NUM_ARGS]=1 \{\
+. PRINT \\$1\\s(12\\v'+2p'\\l'|0'\\v'+2p'\\l'|0'\\v'-4p'\\s[\\n[#RESTORE_PT_SIZE]u]
+. \}
+. if \\n[#NUM_ARGS]=2 \{\
+. PRINT \\$2\\s(12\\v'+\\$1'\\l'|0'\\v'+2p'\\l'|0'\\v'-(2p+\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u]
+. \}
+. if \\n[#NUM_ARGS]=3 \{\
+. PRINT \\$3\\s(12\\v'+\\$1'\\l'|0'\\v'+\\$2'\\l'|0'\\v'-(\\$2+\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u]
+. \}
+. rr #RESTORE_PT_SIZE
+.END
+\#
+\#
+\# SUPERSCRIPT INLINES
+\# -------------------
+\# *Function:
+\# Prints everything after invocation as superscript.
+\# *Notes:
+\# \*[SUP] and \*[SUPX] turn superscript on and off respectively.
+\# If running type is pseudo-condensed/expanded, invoke the superscript
+\# strings as \*[CONDSUP] or \*[EXTSUP] and turn off with \*[CONDSUPX]
+\# and \*[EXTSUPX] respectively.
+\#
+.ds SUP \
+\R'#PT_SIZE_IN_UNITS \En[.ps]'\
+\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
+\s[\En[#PT_SIZE_IN_UNITS]u]\v'-.3m'\s[\En[#SUP_PT_SIZE]u]
+\#
+.ds SUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m'
+\#
+.ds CONDSUP \
+\R'#PT_SIZE_IN_UNITS \En[.ps]'\
+\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
+\s[\En[#PT_SIZE_IN_UNITS]u]\v'-.3m'\s[\En[#SUP_PT_SIZE]u]\E*[COND_FOR_SUP]
+\#
+.ds CONDSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m'\E*[COND]
+\#
+.ds EXTSUP \
+\R'#PT_SIZE_IN_UNITS \En[.ps]'\
+\R'#SUP_PT_SIZE \En[#PT_SIZE_IN_UNITS]u*6u/10u'\
+\s[\En[#PT_SIZE_IN_UNITS]u]\v'-.3m'\s[\En[#SUP_PT_SIZE]u]\E*[EXT_FOR_SUP]
+\#
+.ds EXTSUPX \s[\En[#PT_SIZE_IN_UNITS]u]\v'.3m'\E*[EXT]
+\#
+\#
+\# SLANT
+\# -----
+\#
+\# SETSLANT
+\# --------
+\# *Arguments:
+\# <number of degrees> | RESET
+\# *Function:
+\# Modifies register #DEGREES for use with \*[SLANT], or resets
+\# it to the default. Defines string \*[SLANTX]
+\# *Notes:
+\# \*[SLANT] permits pseudo-italicizing of a font in cases where
+\# no italic font exists in a particular family.
+\#
+\# Default # of degrees is 15.
+\#
+\# Do not use unit of measure with arg to SETSLANT.
+\#
+\# It may be necessary to adjust the spacing on either side of
+\# [SLANT] and [SLANTX].
+\#
+\# In docs, SLANT carries over from para to para.
+\#
+.nr #DEGREES 15
+.ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
+.ds SLANTX \ER'#SLANT_ON 0'\ES'0'
+\#
+.MAC SETSLANT END
+. ie '\\$1'RESET' \{\
+. nr #DEGREES 15
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#UNDERLINE_SLANT] \{ .return \}
+. \}
+. ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
+. \}
+. el \{\
+. nr #DEGREES \\$1
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#UNDERLINE_SLANT] \{ .return \}
+. \}
+. ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
+. \}
+. ds SLANTX \ER'#SLANT_ON 0'\ES'0'
+.END
+\#
+\#
+\# BOLDER
+\# ------
+\#
+\# SETBOLDER
+\# ---------
+\# *Arguments:
+\# <amount of emboldening> | RESET
+\# *Function:
+\# Modifies register #BOLDER_UNITS for use with \*[BOLDER], or resets
+\# it to the default 700 units.
+\# *Notes:
+\# \*[BOLDER] allows pseudo-emboldening of a font where no bold
+\# font exists in a particular family.
+\#
+\# Default for SETBOLDER is 700 units. Do not use unit of measure
+\# with arg to SETBOLDER.
+\#
+.nr #BOLDER_UNITS 700
+\#
+.MAC SETBOLDER END
+. if \\n[#IGNORE]=1 \{ .return \}
+. ie '\\$1'RESET' \{ .nr #BOLDER_UNITS 700 \}
+. el \{ .nr #BOLDER_UNITS \\$1 \}
+.END
+\#
+\#
+.MAC BOLDER END
+\c
+.bd \\n(.f \\n[#BOLDER_UNITS]
+.END
+\#
+\#
+.MAC BOLDERX END
+\c
+.bd \\n(.f
+.END
+\#
+\# +++CONDENSE/EXTEND+++
+\#
+\# CONDENSE/EXTEND
+\# ---------------
+\# *Arguments:
+\# <percentage to condense/expand type size>
+\# *Function:
+\# Stores current point size in z's in #PT_SIZE_IN_UNITS, figures out
+\# new point size (for character width) from arg, and defines string
+\# COND or EXT, which set the type size to the new character width,
+\# and sets the height of type to the value stored in CURRENT_PT_SIZE
+\# *Notes:
+\# CONDENSE_OR_EXTEND is invoked from the aliases
+\# CONDENSE and EXTEND. CONDENSE implies <100, EXTEND
+\# implies >100. Do not use a percent sign in the argument.
+\#
+\# There is no default setting for CONDENSE or EXTEND.
+\# 80 is a good approximation of condensed type, 120 is okay
+\# for extended.
+\#
+\# The value set by CONDENSE or EXTEND applies to all
+\# subsequent \*[COND] or \*[EXT] escapes until a new value is set.
+\#
+\# \*[COND] or \*[EXT] must be turned off before all changes of point
+\# size and reinvoked afterwards (if so desired). This refers to
+\# changes of point size via control lines AND with via inlines.
+\#
+.MAC CONDENSE_OR_EXTEND END
+. if '\\$0'CONDENSE' \{\
+. ds $COND_PERCENT \\$1
+. if \\n[#PRINT_STYLE]=1 \{\
+. rm $COND_PERCENT
+. ds $COND_PERCENT 100
+. \}
+. ds COND \
+\R'#PT_SIZE_IN_UNITS \En[.ps]'\
+\R'#CONDENSE 1'\
+\R'#COND_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$COND_PERCENT]u)/100'\
+\Es[\En[#COND_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
+. ds COND_FOR_SUP \
+\R'#COND_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$COND_PERCENT]u)/100'\
+\Es[\En[#COND_WIDTH]u]\H'\En[#SUP_PT_SIZE]u'
+. \}
+. if '\\$0'EXTEND' \{\
+. ds $EXT_PERCENT \\$1
+. if \\n[#PRINT_STYLE]=1 \{\
+. rm $EXT_PERCENT
+. ds $EXT_PERCENT 100
+. \}
+. ds EXT \
+\R'#PT_SIZE_IN_UNITS \En[.ps]'\
+\R'#EXTEND 1'\
+\R'#EXT_WIDTH (\En[#PT_SIZE_IN_UNITS]u*\E*[$EXT_PERCENT]u)/100'\
+\Es[\En[#EXT_WIDTH]u]\EH'\En[#PT_SIZE_IN_UNITS]u'
+. ds EXT_FOR_SUP \
+\R'#EXT_WIDTH (\En[#SUP_PT_SIZE]u*\E*[$EXT_PERCENT]u)/100'\
+\Es[\En[#EXT_WIDTH]u]\H'\En[#EXT_PT_SIZE]u'
+. \}
+.END
+\#
+.ds CONDX \ER'#CONDENSE 0'\Es0\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
+.ds EXTX \ER'#EXTEND 0'\Es0\R'#PT_SIZE_IN_UNITS \En[.ps]'\H'\En[#PT_SIZE_IN_UNITS]u'
+\#
+\#
+\# +++PAD LINES+++ (insert space)
+\#
+\# PAD MARKER
+\# ----------
+\# *Arguments:
+\# <character to use for marking pad points>
+\# *Function:
+\# Defines string $PAD_MARKER, used in PAD
+\# *Notes:
+\# $PAD_MARKER is normally # (the pound sign).
+\#
+.MAC PAD_MARKER END
+. ds $PAD_MARKER \\$1
+.END
+\#
+\#
+\# PAD
+\# ---
+\# *Argments:
+\# "<string of text with padding markers inserted>"
+\# *Function:
+\# Defines and redefines padding character (default=pound sign unless
+\# padding character has been set with PAD_MARKER) several times
+\# so that when the string is output at the end of the macro, every #
+\# has been converted to an equal-sized amount of padding (blank space)
+\# on a line. # is equivalent to CompuGraphic's old <IS>.
+\# *Notes:
+\# String tabs may be marked off during PAD.
+\#
+.MAC PAD END
+. if \\n(.u=1 \{ .nr #FILL_MODE 1 \}
+. nf
+. if !d$PAD_MARKER \{ .ds $PAD_MARKER # \}
+. char \\*[$PAD_MARKER] \R'#PAD_COUNT \En[#PAD_COUNT]+1'
+. ds $FAMILY_FOR_PAD \\n[.fam]
+. nr #FONT_FOR_PAD \\n(.f
+. nr #SIZE_FOR_PAD \\n[.ps]
+. ds $PAD_STRING \\$1
+. as $PAD_STRING \Ekp
+. di PAD_STRING
+. fam \\*[$FAMILY_FOR_PAD]
+\\f\\n[#FONT_FOR_PAD]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
+. br
+. di
+. char \\*[$PAD_MARKER] \R'#SPACE_TO_END \En(.l-\Enp'\R'#PAD_SPACE \En[#SPACE_TO_END]/\En[#PAD_COUNT]'
+. di PAD_STRING
+. fam \\*[$FAMILY_FOR_PAD]
+\\f\\n[#FONT_FOR_PAD]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
+. br
+. di
+. char \\*[$PAD_MARKER] \h'\En[#PAD_SPACE]u'
+. ie \\n[#SILENT] \{\
+. SILENT
+. fam \\*[$FAMILY_FOR_PAD]
+\\f\\n[#FONT_FOR_PAD]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
+. br
+. SILENT OFF
+. \}
+. el \{\
+. fam \\*[$FAMILY_FOR_PAD]
+\\f\\n[#FONT_FOR_PAD]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
+. br
+. \}
+. if \\n[#FILL_MODE]=1 \{\
+. fi
+. rr #FILL_MODE
+. \}
+. rr #PAD_COUNT
+. rr #SPACE_TO_END
+. rr #PAD_SPACE
+. rm $PAD_STRING
+. rm PAD_STRING
+. rchar #
+.END
+\#
+\#
+\# +++LEADERS+++
+\#
+\# The leader mechanism is primitive, but it works. Basically,
+\# every macro in this set that includes a line length also sets
+\# a single groff tab stop at the right hand end of the line.
+\# That way, whenever Ctrl-A is invoked (always at the end of
+\# an input line), leader of the correct length gets deposited.
+\# Ctrl-A is accessed by the string LEADER (i.e. inline, as
+\# \*[LEADER]). Leaders within tabs get their length from the
+\# tab line length.
+\#
+\# SET LEADER CHARACTER
+\# --------------------
+\# *Arguments:
+\# <character to use whenever \*[LEADER] is invoked>
+\# *Function:
+\# Set leader character.
+\#
+.MAC LEADER_CHARACTER END
+. lc \\$1
+.END
+\#
+.ds LEADER 
+\#
+\# +++DROP CAPS+++
+\#
+\# DROP CAP FAMILY
+\# ---------------
+\# *Argument:
+\# <family of drop cap>
+\# *Function:
+\# Creates or modifies string $DC_FAM.
+\#
+.MAC DROPCAP_FAMILY END
+. ds $DC_FAM \\$1
+.END
+\#
+\#
+\# DROP CAP FONT
+\# -------------
+\# *Argument:
+\# <font of drop cap>
+\# *Function:
+\# Creates or modifies string $DC_FT.
+\#
+.MAC DROPCAP_FONT END
+. ds $DC_FT \\$1
+.END
+\#
+\#
+\# DROP CAP GUTTER
+\# ---------------
+\# *Argument:
+\# <width of gutter between drop cap and indented text>
+\# *Function:
+\# Creates or modifies register #DC_GUT.
+\# *Notes:
+\# Requires unit of measure. Default is 3p.
+\#
+.MAC DROPCAP_GUTTER END
+. nr #DC_GUT (\\$1)
+.END
+\#
+\#
+\# DROP CAP ADJUST
+\# ---------------
+\# *Argument:
+\# <+|- # of points to in/decrease point size of drop cap letter>
+\# *Function:
+\# Creates or modifies string $DC_ADJUST.
+\# *Notes:
+\# Despite its best efforts, DROPCAP doesn't always get the point
+\# size of the drop cap critically perfect. DROPCAP_ADJUST lets
+\# the user add or subtract points (or fractions of points) to
+\# get the size right.
+\#
+\# Requires the + or - sign.
+\#
+.MAC DROPCAP_ADJUST END
+. ds $DC_ADJUST \\$1
+.END
+\#
+\#
+\# DROP CAP
+\# --------
+\# *Arguments:
+\# <dropcap letter> <# of lines> [COND <% to condense> | EXT <% to extend>]
+\# *Function:
+\# Calculates point size of dropcap based on # of lines passed as
+\# arg 2. Sets indent for text based on dropcap width+gutter.
+\# Advances and prints dropcap; reverses and prints indented text
+\# to bottom of dropcap, then resets indent to left margin (plus
+\# any indent that was in effect prior to invoking DROPCAP).
+\# *Notes:
+\# Drop caps put a strain on on resource-challenged systems.
+\#
+\# Drop caps when using the doc processing macro PP only work with
+\# initial paragraphs (i.e. at doc start, or after heads), only when
+\# DROPCAPS comes immediately after PP, and only when the PRINTSTYLE
+\# is TYPESET. If these conditions aren't met, DROPCAPS is silently
+\# ignored.
+\#
+\# The COND or EXT argument are processed separately from all
+\# other COND or EXT inlines or macros, hence passing COND or
+\# EXT has no effect on running type.
+\#
+.MAC DROPCAP END
+. if #IGNORE \{ .return \}
+. br
+. if \\n[#DOCS] \{\
+. if \\n[#PRINT_STYLE]=1 \{ .return \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. if \\n[#PP_STYLE]=2 \{ .return \}
+. if \\n[#PP]>1 \{ .return \}
+. ti 0
+. \}
+. \}
+. ds $DROPCAP \\$1
+. nr #DC_LINES \\$2-1
+. ds $RESTORE_COND \\*[$COND_PERCENT]
+. ds $RESTORE_EXT \\*[$EXT_PERCENT]
+. if '\\$3'COND' \{ .CONDENSE \\$4 \}
+. if '\\$3'EXT' \{ .EXTEND \\$4 \}
+. if !r#DC_GUT \{ .nr #DC_GUT (3p) \}
+. ds $RESTORE_FAM \\n[.fam]
+. nr #RESTORE_FT \\n(.f
+. nr #RESTORE_PT_SIZE \\n[#PT_SIZE]
+. nr #RESTORE_INDENT \\n(.i
+. SIZESPECS
+. nr #DC_HEIGHT \\n[#DC_LINES]*\\n[#LEAD]+\\n[#CAP_HEIGHT]
+. ie !d$DC_FAM \{ .FAM \\n[.fam] \}
+. el \{ .FAM \\*[$DC_FAM] \}
+. ie !d$DC_FT \{ .FT \\n(.f \}
+. el \{ .FT \\*[$DC_FT] \}
+. while \\n[#GET_DC_HEIGHT]<\\n[#DC_HEIGHT] \{\
+. ps \\n[#PT_SIZE]u+100u
+. SIZESPECS
+. nr #GET_DC_HEIGHT \\n[#CAP_HEIGHT]
+. \}
+. if d$DC_ADJUST \{ .ps \\*[$DC_ADJUST]p \}
+. mk x
+. sp \\n[#DC_LINES]v
+. ie '\\$3'COND' \{ .PRINT \\*[COND]\\*[$DROPCAP]\\*[CONDX] \}
+. el \{ .PRINT \\*[$DROPCAP] \}
+. if '\\$3'COND' \{ \E*[COND] \}
+. if '\\$3'EXT' \{ \E*[EXT] \}
+. ie \\n(.i \{ .in +\w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u \}
+. el \{ .in \w'\\*[$DROPCAP]'u+\\n[#DC_GUT]u \}
+. if '\\$3'COND' \{ \E*[CONDX]\c \}
+. if '\\$3'EXT' \{ \E*[EXTX]\c \}
+. rt \\nxu
+. FAM \\*[$RESTORE_FAM]
+. FT \\n[#RESTORE_FT]
+. ps \\n[#RESTORE_PT_SIZE]u
+. CONDENSE \\*[$RESTORE_COND]
+. EXTEND \\*[$RESTORE_EXT]
+. ie \\n(.u \{ .wh \\n(.du+\\n[#DC_HEIGHT]u-1v DROPCAP_OFF \}
+. el \{ .wh \\n(.du+\\n[#DC_HEIGHT]u DROPCAP_OFF \}
+. rm $DROPCAP
+. rr #DC_LINES
+. rm $RESTORE_COND
+. rm $RESTORE_EXT
+. rm $RESTORE_FAM
+. rr #RESTORE_FT
+. rr #RESTORE_PT_SIZE
+. rr #RESTORE_INDENT
+. rr #DC_HEIGHT
+. rr #GET_DC_HEIGHT
+. rr x
+.END
+\#
+.MAC DROPCAP_OFF END
+' in \\n[#RESTORE_INDENT]u
+.END
+\#
+\#
+\# =====================================================================
+\#
+\# +++WORD AND SENTENCE SPACING+++
+\#
+\# WORD SPACE CONTROL
+\# ------------------
+\# *Argument:
+\# <+|->wordspace | DEFAULT
+\# *Function:
+\# Increases or decreases interword space by user supplied amount.
+\# If DEFAULT, value is set to 12 (groff default).
+\# *Notes:
+\# $WS_CONSTANT is the groff default word space.
+\# $WS_VAR is the user supplied amount by which to in/decrease word space.
+\# $WS is a concatenation of WS_CONSTANT and WS_VAR.
+\#
+\# Because the user supplied value requires a literal + or - sign,
+\# the macro argument is stored in a string.
+\#
+\# \n[.sss] holds the current sentence space value.
+\#
+.MAC WS END
+. ds $WS_CONSTANT 12
+. ds $WS_VAR \\$1
+. ie '\\$1'DEFAULT' \{ .ds $WS_VAR +0 \}
+. el \{ .ds $WS (\\*[$WS_CONSTANT]\\*[$WS_VAR]) \}
+. ie \\n[.sss]=12 \{ .ss \\*[$WS] 12 \}
+. el \{\
+. ss \\*[$WS] (\\*[$WS]\\*[$SS_VAR])
+. SS \\*[$SS_VAR]
+. \}
+.END
+\#
+\#
+\# SENTENCE SPACE CONTROL
+\# ----------------------
+\# *Argument:
+\# <+-sentencespace> | 0 | DEFAULT
+\# *Function:
+\# Increases or decreases sentence space by user supplied amount.
+\# If 0, sentence spaces are ignored. If DEFAULT, value is
+\# set to 12 (groff default).
+\# *Notes:
+\# Because the user supplied value requires a literal + or - sign,
+\# the macro argument is stored in a string.
+\#
+\# Sentence space applies only to input where sentences are separated
+\# by two spaces (and/or, in fill mode [FLUSH L|R|C or JUSTIFY], an EOL).
+\# Changing .SS when sentences are separated by only one space has
+\# no effect on the space between sentences.
+\#
+\# \n[.ss] holds the current wordspace value.
+\# \n[.sss] holds the current sentence space value.
+\#
+.MAC SS END
+. ie '\\$1'0' \{ .ss \\n[.ss] (\\n[.ss]-\\n[.ss]) \}
+. el \{\
+. ie '\\$1'DEFAULT' \{ .ss \\n[.ss] \}
+. el \{\
+. ds $SS_VAR \\$1
+. ss \\n[.ss] (0\\*[$SS_VAR])
+. \}
+. \}
+.END
+\#
+\#
+\# =====================================================================
+\#
+\# +++INDENTS+++
+\#
+\# There are five styles of indents: left, right, both, temporary,
+\# and hanging. Each is set/invoked with a different macro.
+\# Indent macros begin with the letter "I", hence .IL means "indent left,"
+\# .IR means "indent right," and so on.
+\#
+\# The first time any of the indent macros is used, it requires an
+\# argument--the size of the indent in ipPcm. The size may also
+\# be entered using the \w'#' function--very useful for numbered
+\# lists using HI). The unit of measure is required. Subsequent
+\# invocations don't require the argument; the indent measure remains the
+\# same until it's changed by invoking the macro with an argument again.
+\#
+\# If no indents are in effect, the arguments passed to indent macros are
+\# measured from the left and right margins of the page. If a left indent
+\# or a right indent is already in effect, the arguments passed to
+\# the indent macros are calculated from the current values; in other words,
+\# the arguments are additive. If you quit an indent and later return
+\# to it, its value will be the value last in effect, unless you pass
+\# it an argument. If you do pass an argument, it is added to the last
+\# value in effect, unless you cleared the indent with one of
+\# .I<LRB>X macros.
+\#
+\# Example
+\# -------
+\#
+\# .IL 2P
+\# ...some text...
+\# .IL 2P
+\# ...some text...
+\# .IQ
+\# ...some text...
+\# .IL
+\# ...some text...
+\#
+\# The first .IL 2P indents text 2P from the left margin. The second
+\# .IL 2P indents text by an additional 2P, i.e. 4P from the left margin.
+\# .IQ turns the indent off. The last .IL (which has no argument)
+\# takes its value from the total of all arguments passed to .IL (in
+\# this case, 2P and 2P), therefore it indents 2P+2P from the left
+\# margin, i.e. 4P. If you wanted the last .IL to indent just 2P,
+\# you'd either have to reset the .IL prior to .IQ (.IL -2P), or pass
+\# the last .IL the argument 2P.
+\#
+\# To reverse the sense of an indent added to an indent, you may use
+\# negative values.
+\#
+\# Indents can be turned off individually with ILX, IRX, and IBX.
+\# LEFT and RIGHT indents may be combined and manipulated
+\# separately, (e.g. you can have an IL of 2P and an IR of 4P
+\# operative at the same time, and then change, say, the IL to
+\# 4P--thereby left indenting 6P--while the IR remains at 4P.
+\#
+\# IB automatically turns off IL and IR. They have to be reinvoked
+\# again when needed. IL and IR automatically turn IB off; it, too,
+\# has to be reinvoked with needed.
+\#
+\# All indents can be turned off at once with IQ. The ILX, IRX, IBX,
+\# and IQ macros simply turn the indents off; the values stored in
+\# the respective indent macros (IL, IR, IB) remain in effect. If
+\# the user wishes to clear the values, the I<LRB>X macros should be
+\# invoked with the single argument CLEAR. IQ CLEAR clears out
+\# the values stored for all indent styles.
+\#
+\# Indents *must* be turned off before settting string tabs
+\# inside PAD. Generally, in order not to get confused, it's a
+\# good idea to turn all indents off before setting any tabs.
+\#
+\# TI and HI are special cases. There's no need to turn them off,
+\# since they affect only one line--the first after their
+\# invocation. Like the other indent styles, the first time
+\# they're invoked, they require a value in iPpcm; each subsequent
+\# invocation without an argument will use the same value. To
+\# change the value, simply pass a new value. Values for TI and HI
+\# are *not* additive.
+\#
+\# HI presupposes that you already have a left or both indent
+\# on. HI will never hang a line outside the left margin of a
+\# document. In other words, you must have IL or IB on before you
+\# can use HI.
+\#
+\# INDENT LEFT
+\# -----------
+\#
+.MAC IL END
+. if \\n[#INDENT_STYLE_BOTH] \{ .IBX \}
+. nr #INDENT_STYLE_LEFT 1
+. nr #INDENT_ACTIVE 1
+. nr #INDENT_LEFT_ACTIVE 1
+. ie '\\$1'' \{\
+. br
+. in \\n[#L_INDENT]u
+. ta \\n(.lu-\\n[#L_INDENT]u
+. \}
+. el \{\
+. br
+. nr #L_INDENT +(\\$1)
+. in \\n[#L_INDENT]u
+. ta \\n(.lu-\\n[#L_INDENT]u
+. \}
+.END
+\#
+\#
+\# +++INDENT RIGHT+++
+\#
+.MAC IR END
+. if \\n[#INDENT_STYLE_BOTH] \{ .IBX \}
+. nr #INDENT_STYLE_RIGHT 1
+. nr #INDENT_ACTIVE 1
+. nr #INDENT_RIGHT_ACTIVE 1
+. ie '\\$1'' \{\
+. br
+. ie \\n[#TAB_ACTIVE] \{\
+. ll \\n(.lu-\\n[#R_INDENT]u
+. ta \\n(.lu-\\n[#L_INDENT]u
+. \}
+. el \{\
+. ll \\n[#L_LENGTH]u-\\n[#R_INDENT]u
+. ta \\n(.lu-\\n[#L_INDENT]u
+. \}
+. \}
+. el \{\
+. br
+. nr #R_INDENT +(\\$1)
+. ie \\n[#TAB_ACTIVE] \{\
+. ll \\n(.lu-\\n[#R_INDENT]u
+. ta \\n(.lu-\\n[#L_INDENT]u
+. \}
+. el \{\
+. ll \\n[#L_LENGTH]u-\\n[#R_INDENT]u
+. ta \\n(.lu-\\n[#L_INDENT]u
+. \}
+. \}
+.END
+\#
+\#
+\# +++INDENT BOTH+++
+\#
+.MAC IB END
+. if \\n[#INDENT_STYLE_LEFT] \{ .ILX \}
+. if \\n[#INDENT_STYLE_RIGHT] \{ .IRX \}
+. nr #INDENT_STYLE_BOTH 1
+. nr #INDENT_ACTIVE 1
+. nr #INDENT_BOTH_ACTIVE 1
+. ie '\\$1'' \{\
+. br
+. in \\n[#BL_INDENT]u
+. ie \\n[#TAB_ACTIVE] \{\
+. ll \\n(.lu-\\n[#BR_INDENT]u
+. ta \\n(.lu-\\n[#BR_INDENT]u
+. \}
+. el \{\
+. ll \\n[#L_LENGTH]u-\\n[#BR_INDENT]u
+. ta \\n(.lu-\\n[#BR_INDENT]u
+. \}
+. \}
+. el \{\
+. br
+. nr #BL_INDENT (\\n[#INDENT]+\\$1)
+. ie \\n[#NUM_ARGS]=2 \{ .nr #BR_INDENT +(\\$2) \}
+. el \{ .nr #BR_INDENT \\n[#BL_INDENT] \}
+. ie \\n[#TAB_ACTIVE] \{\
+. in \\n[#BL_INDENT]u
+. ll \\n(.lu-\\n[#BR_INDENT]u
+. ta \\n(.lu-\\n[#BL_INDENT]u
+. \}
+. el \{\
+. in \\n[#BL_INDENT]u
+. ll \\n[#L_LENGTH]u-\\n[#BR_INDENT]u
+. ta \\n(.lu-\\n[#BR_INDENT]u
+. \}
+. \}
+.END
+\#
+\#
+\# +++TEMPORARY INDENT+++
+\#
+.MAC TI END
+. br
+. ie '\\$1'' \{\
+. ti \\n[#T_INDENT]u
+. if \\n[#INDENT_LEFT_ACTIVE] \{\
+. ti \\n[#T_INDENT]u+\\n[#L_INDENT]u
+. \}
+. if \\n[#INDENT_BOTH_ACTIVE] \{\
+. ti \\n[#T_INDENT]u+\\n[#BL_INDENT]u
+. \}
+. \}
+. el \{\
+. nr #T_INDENT (\\$1)
+. ti \\n[#T_INDENT]u
+. \}
+.END
+\#
+\#
+\# +++HANGING INDENT+++
+\#
+.MAC HI END
+. ie '\\$1'' \{ .ti -\\n[#HL_INDENT]u \}
+. el \{\
+. nr #HL_INDENT (\\$1)
+. ti -\\n[#HL_INDENT]u
+. \}
+.END
+\#
+\#
+\# +++INDENTS OFF+++
+\#
+.MAC ILX END
+. br
+. in 0
+. rr #INDENT_LEFT_ACTIVE
+. if '\\$1'CLEAR' \{\
+. rr #L_INDENT
+. rr #INDENT_STYLE_LEFT
+. \}
+.END
+\#
+\#
+.MAC IRX END
+. br
+. rr #INDENT_RIGHT_ACTIVE
+. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
+. el \{\
+. ie \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. el \{\
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+. \}
+. \}
+. if '\\$1'CLEAR' \{\
+. rr #R_INDENT
+. rr #INDENT_STYLE_RIGHT
+. \}
+.END
+\#
+\#
+.MAC IBX END
+. br
+. in 0
+. rr #INDENT_BOTH_ACTIVE
+. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
+. el \{\
+. ie \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. el \{\
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+. \}
+. \}
+. if '\\$1'CLEAR' \{\
+. rr #BL_INDENT
+. rr #BR_INDENT
+. rr #INDENT_STYLE_BOTH
+. \}
+.END
+\#
+\#
+.MAC IX END
+. if '\\$0'IX' \{\
+. if !\\n[#IX_WARN] \{\
+. tm1 "[mom]: Use of .IX is now deprecated. Use .IQ instead.
+. tm1 " .IX will continue to behave as before, but to
+. tm1 " avoid this message, please update your document.
+. nr #IX_WARN 1
+. \}
+. \}
+. br
+. in 0
+. rr #INDENT_LEFT_ACTIVE
+. rr #INDENT_RIGHT_ACTIVE
+. rr #INDENT_BOTH_ACTIVE
+. if \\n[#INDENT_STYLE_RIGHT] \{\
+. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
+. el \{\
+. ie \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. el \{\
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+. \}
+. \}
+. \}
+. if \\n[#INDENT_STYLE_BOTH] \{\
+. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
+. el \{\
+. ie \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. el \{\
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+. \}
+. \}
+. \}
+. if '\\$1'CLEAR' \{\
+. if \\n[#INDENT_STYLE_RIGHT] \{\
+. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
+. el \{\
+. ie \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. el \{\
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+. \}
+. \}
+. \}
+. if \\n[#INDENT_STYLE_BOTH] \{\
+. ie \\n[#TAB_ACTIVE] \{ .TAB\\n[#CURRENT_TAB] \}
+. el \{\
+. ie \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. el \{\
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+. \}
+. \}
+. \}
+. rr #L_INDENT
+. rr #R_INDENT
+. rr #BL_INDENT
+. rr #BR_INDENT
+. rr #T_INDENT
+. rr #H_INDENT
+. rr #INDENT_STYLE_LEFT
+. rr #INDENT_STYLE_RIGHT
+. rr #INDENT_STYLE_BOTH
+. \}
+. rr #INDENT_ACTIVE
+.END
+\#
+\# =====================================================================
+\#
+\# +++MULTIPLE COLUMNS+++
+\#
+\# MULTIPLE COLUMNS ON
+\# -------------------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Marks the top of a column set
+\#
+.MAC MCO END
+.mk c
+.END
+\#
+\# MULTIPLE COLUMN RETURN
+\# ----------------------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Returns to the top of a column set
+\#
+.MAC MCR END
+. sp |\\ncu
+.END
+\#
+\# MULTIPLE COLUMNS OFF
+\# --------------------
+\# *Arguments:
+\# <none> | <lead to advance beneath bottom of deepest column>
+\# *Function:
+\# Advances to the end of a column set
+\# *Notes:
+\# With no argument, advances to the next baseline (at the current
+\# leading value) beneath the longest column. With an argument
+\# (which requires a unit of measure), advances arg distance
+\# beneath the baseline of the deepest column. If the argument
+\# is zero, advances to the baseline of the deepest column.
+\#
+.MAC MCX END
+. ie '\\$1'' \{\
+. TQ
+. sp |\\n(.hu
+. \}
+. el \{\
+. nr #MCX_ALD (\\$1)
+. TQ
+. ie \\n[#MCX_ALD]=0 \{ .sp |\\n(.hu-1v \}
+. el \{ .sp |\\n(.hu+\\n[#MCX_ALD]u \}
+. rr #MCX_ALD (\\$1)
+. \}
+.END
+\#
+\# =====================================================================
+\#
+\# +++TYPESETTING SUPPORT MACROS+++
+\#
+\# TRAP
+\# ----
+\# *Arguments:
+\# toggle
+\# *Function:
+\# Enables/disables traps.
+\# *Notes:
+\# EL and TN don't function as advertised on the last line before a
+\# trap (when they break the preceding line, they spring the trap, and
+\# groff won't back up to the line preceding the trap). TRAP is a kludge
+\# to get EL and TN work properly on last lines. The user simply enloses
+\# the offending lines in TRAP OFF/TRAP.
+\#
+.MAC TRAP END
+. ie '\\$1'' \{ .vpt 1 \}
+. el \{ .vpt 0 \}
+.END
+\#
+\#
+\# SILENT
+\# ------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Diverts text so that it doesn't print, or turns to function off.
+\# *Notes:
+\# Useful for setting up autotabs where you don't want the line with
+\# the tab marks to print.
+\#
+\# Also aliased as COMMENT, in case user wants to input a batch of
+\# text that doesn't print.
+\#
+.MAC SILENT END
+. nr #SILENT 1
+. if \\n[#QUAD] \{ .br \}
+. ie '\\$1'' \{ .di NO_FLASH \}
+. el \{\
+. br
+. di
+. rm NO_FLASH
+. rr #SILENT
+. \}
+.END
+\#
+\# PRINT
+\# -----
+\# *Arguments:
+\# <anything>
+\# *Function:
+\# Prints anything. A macro that helps keep my code nicely indented.
+\#
+.MAC PRINT END
+\\$*
+.END
+\#
+\#
+\# CAPS
+\# ----
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Converts text to caps, or, if OFF, reverts to normal caps/lc.
+\#
+.MAC CAPS END
+. ie '\\$1'' \{\
+. tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
+. tr à\[`A]
+. tr â\[^A]
+. tr á\['A]
+. tr ä\[:A]
+. tr å\[oA]
+. tr ã\[~A]
+. tr æ\[AE]
+. tr è\[`E]
+. tr ê\[^E]
+. tr é\['E]
+. tr ë\[:E]
+. tr ì\[`I]
+. tr î\[^I]
+. tr í\['I]
+. tr ï\[:I]
+. tr ò\[`O]
+. tr ô\[^O]
+. tr ó\['O]
+. tr ö\[:O]
+. tr õ\[~O]
+. tr ø\[/O]
+. tr ù\[`U]
+. tr û\[^U]
+. tr ú\['U]
+. tr ü\[:U]
+. tr ç\[,C]
+. tr ð\[-D]
+. tr ñ\[~N]
+. tr þ\[TP]
+. tr ý\['Y]
+. tr ÿ\[:Y]
+. nr #CAPS_ON 1
+. \}
+. el \{\
+. tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz
+. tr à\[`a]
+. tr â\[^a]
+. tr á\['a]
+. tr ä\[:a]
+. tr å\[oa]
+. tr ã\[~a]
+. tr æ\[ae]
+. tr è\[`e]
+. tr ê\[^e]
+. tr é\['e]
+. tr ë\[:e]
+. tr ì\[`i]
+. tr î\[^i]
+. tr í\['i]
+. tr ï\[:i]
+. tr ò\[`o]
+. tr ô\[^o]
+. tr ó\['o]
+. tr ö\[:o]
+. tr õ\[~o]
+. tr ø\[/o]
+. tr ù\[`u]
+. tr û\[^u]
+. tr ú\['u]
+. tr ü\[:u]
+. tr ç\[,c]
+. tr ð\[Sd]
+. tr ñ\[~n]
+. tr þ\[Tp]
+. tr ý\['y]
+. tr ÿ\[:y]
+. rr #CAPS_ON
+. \}
+.END
+\#
+\# SIZESPECS
+\# ---------
+\# Argument:
+\# <none>
+\# Function:
+\# Gets cap-height, x-height, and descender depth of the
+\# current font at the current point size.
+\# *Notes:
+\# The routine is diverted so it remains invisible to output.
+\#
+.MAC SIZESPECS END
+. di TYPESIZE
+E\\R'#CAP_HEIGHT \\n[.cht]'
+e\\R'#X_HEIGHT \\n[.cht]'
+y\\R'#DESCENDER \\n[.cdp]'
+. br
+. di
+.END
+\#
+\# =====================================================================
+\#
+\# +++TYPESETTING ALIASES+++
+\#
+.ALIAS CENTRE CENTER
+.ALIAS COMMENT SILENT
+.ALIAS CONDENSE CONDENSE_OR_EXTEND
+.ALIAS EXTEND CONDENSE_OR_EXTEND
+.ALIAS FAM FAMILY
+.ALIAS HYPHENATE HY
+.ALIAS HYPHENATION HY
+.ALIAS HYSET HY_SET
+.ALIAS LIG LIGATURES
+.ALIAS IBQ IBX
+.ALIAS ILQ ILX
+.ALIAS IQ IX
+.ALIAS IRQ IRX
+.ALIAS PADMARKER PAD_MARKER
+.ALIAS TABSET TAB_SET
+.ALIAS TB TAB
+.ALIAS UNDERSCORE_2 UNDERSCORE2
+\#
+\#
+\# ====================================================================
+\#
+\# DOCUMENT PROCESSING MACROS, STRINGS AND ALIASES
+\# ===============================================
+\#
+\# +++PAGE DIMENSIONS+++
+\#
+\# PAPER SIZE
+\# ----------
+\# *Arguments:
+\# LETTER | LEGAL | STATEMENT | TABLOID | LEDGER | FOLIO | QUARTO | 10x14 | EXECUTIVE | A3 | A4 | A5 | B4 | B5
+\# *Function:
+\# Sets up margins for different paper sizes.
+\#
+.MAC PAPER END
+. ds $PAPER \\$1
+. if '\\*[$PAPER]'LETTER' \{\
+. PAGEWIDTH 8.5i
+. PAGELENGTH 11i
+. \}
+. if '\\*[$PAPER]'LEGAL' \{\
+. PAGEWIDTH 8.5i
+. PAGELENGTH 14i
+. \}
+. if '\\*[$PAPER]'STATEMENT' \{\
+. PAGEWIDTH 5.5i
+. PAGELENGTH 8.5i
+. \}
+. if '\\*[$PAPER]'TABLOID' \{\
+. PAGEWIDTH 11i
+. PAGELENGTH 17i
+. \}
+. if '\\*[$PAPER]'LEDGER' \{\
+. PAGEWIDTH 17i
+. PAGELENGTH 11i
+. \}
+. if '\\*[$PAPER]'FOLIO' \{\
+. PAGEWIDTH 8.5i
+. PAGELENGTH 13i
+. \}
+. if '\\*[$PAPER]'QUARTO' \{\
+. PAGEWIDTH 610p
+. PAGELENGTH 780p
+. \}
+. if '\\*[$PAPER]'10x14' \{\
+. PAGEWIDTH 10i
+. PAGELENGTH 14i
+. \}
+. if '\\*[$PAPER]'EXECUTIVE' \{\
+. PAGEWIDTH 7.25i
+. PAGELENGTH 10.5i
+. \}
+. if '\\*[$PAPER]'A3' \{\
+. PAGEWIDTH 842p
+. PAGELENGTH 1190p
+. \}
+. if '\\*[$PAPER]'A4' \{\
+. PAGEWIDTH 595p
+. PAGELENGTH 842p
+. \}
+. if '\\*[$PAPER]'A5' \{\
+. PAGEWIDTH 421p
+. PAGELENGTH 595p
+. \}
+. if '\\*[$PAPER]'B4' \{\
+. PAGEWIDTH 709p
+. PAGELENGTH 1002p
+. \}
+. if '\\*[$PAPER]'B5' \{\
+. PAGEWIDTH 501p
+. PAGELENGTH 709p
+. \}
+. if !r#L_MARGIN \{ .L_MARGIN \\n(.o \}
+. if !r#R_MARGIN \{ .R_MARGIN 1i \}
+.END
+\#
+\#
+\# ====================================================================
+\#
+\# +++PRINTSTYLE -- TYPEWRITE OR TYPESET+++
+\#
+\# PRINTSTYLE
+\# ----------
+\# *Arguments:
+\# TYPESET | TYPEWRITE [SINGLESPACE]
+\# *Function:
+\# Sets type specs for typewriter-style or typeset output.
+\# *Notes:
+\# Number registers: TYPEWRITE=1, TYPESET=2.
+\#
+.MAC PRINTSTYLE END
+. if !d$PAPER \{ .PAPER LETTER \}
+. if '\\$1'TYPEWRITE' \{\
+. nr #PRINT_STYLE 1
+. if !\\n[#DOC_TYPE]=4 \{ .L_MARGIN 6P \}
+. if !\\n[#DOC_TYPE]=4 \{ .R_MARGIN 6P \}
+. fam C
+. ft R
+. ps 12
+. ie '\\$2'SINGLESPACE' \{\
+. nr #SINGLE_SPACE 1
+. vs 12
+. \}
+. el \{ .vs 24 \}
+. QUAD L
+. HY OFF
+. SMARTQUOTES OFF
+. if !\\n[#PP_INDENT] \{\
+. in 3P \"Set indent
+. nr #PP_INDENT \\n(.i \"Read into #PP_INDENT
+. in 0 \"Remove indent
+. \}
+. HDRFTR_RIGHT_CAPS
+. nr #BOLDER_UNITS 0
+. nr #CONDENSE 0
+. nr #EXTEND 0
+. rm IT
+. rm BD
+. rm BDI
+. rm PREV
+. UNDERLINE_SLANT
+. UNDERLINE_ITALIC
+. UNDERLINE_QUOTES
+. nr #IGNORE_COLUMNS 1
+. \}
+. if '\\$1'TYPESET' \{\
+. nr #PRINT_STYLE 2
+. if !\\n[#DOC_TYPE]=4 \{ .L_MARGIN 6P \}
+. if !\\n[#DOC_TYPE]=4 \{ .R_MARGIN 6P \}
+. FAMILY T
+. FT R
+. if !\\n[#DOC_TYPE]=4 \{ .PT_SIZE 12.5 \}
+. if !\\n[#DOC_TYPE]=4 \{ .LS 16 \}
+. JUSTIFY
+. HY
+. HY_SET 2 36p 1p
+. KERN
+. LIG
+. SS 0
+. SMARTQUOTES
+. if !\\n[#PP_INDENT] \{\
+. in 2m \"Set indent
+. nr #PP_INDENT \\n(.i \"Read into #PP_INDENT
+. in 0 \"Remove indent
+. \}
+. HDRFTR_RIGHT_CAPS
+. rr #IGNORE_COLUMNS
+. \}
+.END
+\#
+\#
+\# Macros to control behaviour of PRINTSTYLE TYPEWRITE
+\#
+\# ITALIC MEANS ITALIC
+\# -------------------
+\# *Argument:
+\# <none>
+\# *Function:
+\# Instructs TYPEWRITE to treat italics as italics, whether
+\# invoked via control lines or inline.
+\# *Notes:
+\# ITALIC_MEANS_ITALIC and UNDERLINE_ITALIC are mututally exclusive,
+\# hence invoking the one automatically turns off the other.
+\#
+.MAC ITALIC_MEANS_ITALIC END
+. if \\n[#PRINT_STYLE]=1 \{\
+. nr #ITALIC_MEANS_ITALIC 1
+. rr #UNDERLINE_ITALIC
+. rm ROM
+. rm IT
+. rm PREV
+. ds ROM \EfR
+. ds IT \EfI
+. ds PREV \EfR
+. \}
+.END
+\#
+\#
+\# UNDERLINE ITALIC
+\# ----------------
+\# *Argument:
+\# <none>
+\# *Function:
+\# Instructs TYPEWRITE to underline italics, whether invoked
+\# via control lines or inline.
+\# *Notes:
+\# UNDERLINE_ITALIC and ITALIC_MEANS_ITALIC are mututally exclusive,
+\# hence invoking the one automatically turns off the other.
+\#
+\# UNDERLINE_ITALIC is the default for TYPEWRITE.
+\#
+.MAC UNDERLINE_ITALIC END
+. if \\n[#PRINT_STYLE]=1 \{\
+. nr #UNDERLINE_ITALIC 1
+. rr #ITALIC_MEANS_ITALIC
+. rm ROM
+. rm IT
+. rm PREV
+. ds ROM \E*[ULX]
+. ds IT \E*[UL]
+. ds PREV \E*[ULX]
+. \}
+.END
+\#
+\#
+\# UNDERLINE SLANT
+\# ---------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Instructs TYPEWRITE to underline occurences of \*[SLANT], or
+\# turns feature off.
+\# *Notes:
+\# Users may want \*[SLANT] to mean slant in TYPEWRITE, although
+\# most of the time, \*[SLANT] most likely means the user wanted
+\# italic but didn't have it, ergo the need to tell TYPEWRITE to
+\# treat \*[SLANT] as italic (i.e. underlined).
+\#
+\# UNDERLINE_SLANT and SLANT_MEANS_SLANT are mututally exclusive,
+\# hence invoking the one automatically turns off the other.
+\#
+\# UNDERLINE_SLANT is the default for TYPEWRITE.
+\#
+.MAC UNDERLINE_SLANT END
+. if \\n[#PRINT_STYLE]=1 \{\
+. rr #SLANT_MEANS_SLANT
+. nr #UNDERLINE_SLANT 1
+. rm SLANT
+. rm SLANTX
+. ds SLANT \ER'#SLANT_ON 1'\E*[UL]
+. ds SLANTX \ER'#SLANT_ON 0'\E*[ULX]
+. \}
+.END
+\#
+\#
+.MAC SLANT_MEANS_SLANT END
+. if \\n[#PRINT_STYLE]=1 \{\
+. rr #UNDERLINE_SLANT
+. nr #SLANT_MEANS_SLANT 1
+. rm SLANT
+. rm SLANTX
+. ds SLANT \ER'#SLANT_ON 1'\ES'\En[#DEGREES]'
+. ds SLANTX \ER'#SLANT_ON 0'\ES'0'
+. \}
+.END
+\#
+\#
+.MAC IGNORE_COLUMNS END
+. if \\n[#PRINT_STYLE]=1 \{ .nr #NO_COLUMNS 1 \}
+.END
+\#
+\#
+\# ====================================================================
+\#
+\# +++COPY STYLE -- DRAFT OR FINAL+++
+\#
+\# COPY STYLE
+\# ----------
+\# *Arguments:
+\# DRAFT | FINAL
+\# *Function:
+\# Sets registers that are used to determine what to put
+\# in the default header, and how to number pages.
+\# *Notes:
+\# DOCTYPE must come before COPYSTYLE.
+\#
+.MAC COPYSTYLE END
+. ds $COPY_STYLE \\$1
+. if '\\*[$COPY_STYLE]'DRAFT' \{\
+. nr #COPY_STYLE 1
+. if !r#DRAFT \{ .DRAFT 1 \}
+. \}
+. if '\\*[$COPY_STYLE]'FINAL' \{ .nr #COPY_STYLE 2 \}
+. if !d$CHAPTER_STRING \{ .CHAPTER_STRING "Chapter" \}
+. if !d$DRAFT_STRING \{ .DRAFT_STRING "Draft" \}
+. if !d$REVISION_STRING \{ .REVISION_STRING "Rev." \}
+\# Default
+. if \\n[#DOC_TYPE]=1 \{\
+. ie \\n[#COPY_STYLE]=1 \{\
+. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
+. el \{ .PAGENUM_STYLE roman \}
+. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
+. ie \\n[#DRAFT_WITH_PAGENUM] \{\
+. ds $HDRFTR_CENTER
+. \}
+. el \{\
+. ie !\\n[#REVISION] \{\
+. ds $HDRFTR_CENTER \
+ \\*[$DRAFT_STRING] \\n[#DRAFT]
+. \}
+. el \{\
+. ds $HDRFTR_CENTER \
+ \\*[$DRAFT_STRING] \\n[#DRAFT], \
+ \\*[$REVISION_STRING] \\n[#REVISION]
+. \}
+. \}
+. \}
+. \}
+. el \{\
+. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
+. el \{ .PAGENUM_STYLE DIGIT \}
+. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{ .ds $HDRFTR_CENTER \}
+. \}
+. \}
+\# Chapter
+. if \\n[#DOC_TYPE]=2 \{\
+. ie \\n[#COPY_STYLE]=1 \{\
+. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
+. el \{ .PAGENUM_STYLE roman \}
+. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
+. ie \\n[#DRAFT_WITH_PAGENUM] \{\
+. ie '\\*[$CHAPTER]'' \{ .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
+. el \{ .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \}
+. \}
+. el \{\
+. ie !\\n[#REVISION] \{\
+. ie '\\*[$CHAPTER]'' \{\
+. ds $HDRFTR_CENTER \
+ \\*[$CHAPTER_STRING], \
+ \\*[$DRAFT_STRING] \\n[#DRAFT]
+. \}
+. el \{\
+. ds $HDRFTR_CENTER \
+ \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
+ \\*[$DRAFT_STRING] \\n[#DRAFT]
+. \}
+. \}
+. el \{\
+. ie '\\*[$CHAPTER]'' \{\
+. el \{\
+ \\*[$CHAPTER_STRING], \
+ \\*[$DRAFT_STRING] \\n[#DRAFT], \
+ \\*[$REVISION_STRING] \\n[#REVISION]
+. \}
+. ds $HDRFTR_CENTER \
+ \\*[$CHAPTER_STRING] \\*[$CHAPTER], \
+ \\*[$DRAFT_STRING] \\n[#DRAFT], \
+ \\*[$REVISION_STRING] \\n[#REVISION]
+. \}
+. \}
+. \}
+. \}
+. \}
+. el \{\
+. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
+. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
+. el \{ .PAGENUM_STYLE DIGIT \}
+. ie '\\*[$CHAPTER]'' \{ .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \}
+. el \{ .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
+. \}
+. \}
+. \}
+\# Named
+. if \\n[#DOC_TYPE]=3 \{\
+. ie \\n[#COPY_STYLE]=1 \{\
+. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
+. el \{ .PAGENUM_STYLE roman \}
+. ie \\n[#DRAFT_WITH_PAGENUM] \{\
+. ds $HDRFTR_CENTER \\*[$DOC_TYPE]
+. \}
+. el \{\
+. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
+. ie !\\n[#REVISION] \{\
+. ds $HDRFTR_CENTER \
+ \\*[$DOC_TYPE], \
+ \\*[$DRAFT_STRING] \\n[#DRAFT]
+. \}
+. el \{\
+. ds $HDRFTR_CENTER \
+ \\*[$DOC_TYPE], \
+ \\*[$DRAFT_STRING] \\n[#DRAFT], \
+ \\*[$REVISION_STRING] \\n[#REVISION]
+. \}
+. \}
+. \}
+. \}
+. el \{\
+. if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\
+. ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
+. el \{ .PAGENUM_STYLE DIGIT \}
+. ds $HDRFTR_CENTER \\*[$DOC_TYPE]
+. \}
+. \}
+. \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++COLLECT DOC INFO -- STRINGS AND NUMBER REGISTERS+++
+\#
+\# *Arguments:
+\# various string/register arguments
+\# *Function:
+\# Collect information about documents.
+\#
+.MAC TITLE END \"Document title
+. ds $TITLE \\$1
+.END
+\#
+\#
+.MAC SUBTITLE END \"Document sub-title
+. ds $SUBTITLE \\$1
+.END
+\#
+\#
+.MAC CHAPTER END \"If document is a chapter, the chapter number
+. ds $CHAPTER \\$1
+.END
+\#
+\#
+.MAC DRAFT END \"Draft number
+. nr #DRAFT \\$1
+.END
+\#
+\#
+.MAC REVISION END \"Revision number
+. nr #REVISION \\$1
+.END
+\#
+\#
+.MAC DRAFT_WITH_PAGENUMBER END \"Attach draft/revision strings to page number
+. nr #DRAFT_WITH_PAGENUM 1
+.END
+\#
+\#
+.MAC AUTHOR END \"Author. Use "..." with this macro.
+. nr #AUTHOR_NUM -1 1
+. while \\n[#NUM_ARGS]>\\n[#AUTHOR_NUM] \{\
+. ds $AUTHOR_\\n+[#AUTHOR_NUM] \\$\\n[#AUTHOR_NUM]
+. \}
+. nr #NUM_AUTHORS \\n[#NUM_ARGS]%2 \"Use mod 2 to test if odd or even # of authors
+. ie \\n[#NUM_AUTHORS]=1 \{ .nr #AUTHOR_LINES 0 \}
+. el \{ .nr #AUTHOR_LINES 1 \}
+.END
+\#
+\#
+.MAC PAGENUMBER END \"Page # that appears on page one.
+. nr #n%_AT_PAGENUM_SET \\n%
+. nr #PAGE_NUM_ADJ \\$1-\\n[#n%_AT_PAGENUM_SET]
+. rr #n%_AT_PAGENUM_SET
+. nr #PAGE_NUM_SET 1
+.END
+\#
+\# ====================================================================
+\#
+\# +++TYPE OF DOCUMENT+++
+\#
+\# DOCUMENT TYPE
+\# -------------
+\# *Argument:
+\# DEFAULT | CHAPTER | NAMED "<whatever> | LETTER
+\# *Function:
+\# Creates strings and sets registers for document types.
+\# *Notes:
+\# Number registers: DEFAULT=1, CHAPTER=2, NAMED=3, LETTER=4
+\#
+.MAC DOCTYPE END
+. if '\\$1'DEFAULT' \{\
+. nr #DOC_TYPE 1
+. \}
+. if '\\$1'CHAPTER' \{\
+. nr #DOC_TYPE 2
+. \}
+. if '\\$1'NAMED' \{\
+. ds $DOC_TYPE \\$2
+. nr #DOC_TYPE 3
+. \}
+. if '\\$1'LETTER' \{\
+. nr #DOC_TYPE 4
+. L_MARGIN 1.125i
+. R_MARGIN 1.125i
+. PT_SIZE 12
+. LS 13.5
+. DOCHEADER OFF
+. PARA_INDENT 3m
+. INDENT_FIRST_PARAS
+. PARA_SPACE
+. ds $SUITE \En[#SUITE]
+. HEADER_MARGIN 3P+6p
+. HEADER_GAP 3P
+. FOOTERS
+. FOOTER_RULE OFF
+. FOOTER_LEFT ""
+. FOOTER_CENTER ""
+. FOOTER_RIGHT_SIZE +0
+. FOOTER_RIGHT ".../\E*[$SUITE]
+. FOOTER_ON_FIRST_PAGE
+. em ALL_DONE
+. \}
+.END
+\#
+\# +++LETTER MACROS+++
+\#
+\# DATE
+\# ----
+\# *Arguments:
+\# <date string>
+\# *Function:
+\# Stores date string in string $DATE.
+\#
+.MAC DATE END
+. nr #DATE 1
+. di DATE
+. RIGHT
+.END
+\#
+\#
+\# TO
+\# --
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Stores "to" info in diversion TO_ADDRESS.
+\#
+.MAC TO END
+. if !'\\n(.z'' \{ .di \}
+. nr #TO 1
+. di TO_ADDRESS
+. LEFT
+.END
+\#
+\#
+\# FROM
+\# ----
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Stores "from" info in diversion FROM_ADDRESS.
+\#
+.MAC FROM END
+. if !'\\n(.z'' \{ .di \}
+. nr #FROM 1
+. di FROM_ADDRESS
+. LEFT
+.END
+\#
+\#
+\# GREETING
+\# --------
+\# *Arguments:
+\# <greeting string>
+\# *Function:
+\# Stores greeting in string $GREETING.
+\#
+.MAC GREETING END
+. if !'\\n(.z'' \{ .di \}
+. nr #GREETING 1
+. di GREETING
+. LEFT
+.END
+\#
+\#
+\# CLOSING
+\# -------
+\# *Arguments:
+\# <closing string>
+\# *Function:
+\# Stores greeting in string $CLOSING.
+\#
+.MAC CLOSING END
+. br
+. nr #CLOSING 1
+. di CLOSING
+.END
+\#
+\#
+\# NO SUITE
+\# --------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Redefines $SUITE to blank so that a suite number doesn't
+\# appear at the bottom of letter pages.
+\#
+.MAC NO_SUITE END
+. FOOTER_RIGHT ""
+.END
+\#
+\# ====================================================================
+\#
+\# +++DEFAULTS+++
+\#
+\# DEFAULTS
+\# --------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Sets up defaults if no values are entered prior to START.
+\# *Notes:
+\# The defaults for $CHAPTER_STRING, $DRAFT_STRING, and
+\# $REVISION_STRING are in the COPYSTYLE macro.
+\#
+.MAC DEFAULTS END
+. if !d$PAPER \{ .PAPER LETTER \}
+. if !\\n[#DOC_TYPE] \{ .DOCTYPE DEFAULT \}
+. if \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \}
+. if !\\n[#COPY_STYLE] \{ .COPYSTYLE FINAL \}
+. if \\n[#DRAFT_WITH_PAGENUM] \{ .COPYSTYLE \\*[$COPY_STYLE] \}
+. if \\n[#DOC_TYPE]=4 \{\
+. if !\\n[#USER_SET_L_LENGTH] \{\
+. R_MARGIN \\n[#R_MARGIN]u
+. rr #USER_SET_L_LENGTH
+. \}
+. if \\n[#PRINT_STYLE]=1 \{ .PRINTSTYLE TYPEWRITE SINGLESPACE \}
+. \}
+. if \\n[#COPY_STYLE]=1 \{\
+. COPYSTYLE DRAFT
+. PAGENUMBER 1
+. \}
+. if !r#DOC_HEADER \{ .DOCHEADER \}
+. if !r#HEADERS_ON \{ .HEADERS \}
+. if !r#PAGINATE \{ .PAGINATE \}
+. if \\n[#FOOTERS_ON] \{\
+. HEADERS OFF
+. if \\n[#PAGE_NUM_POS_SET]=0 \{ .PAGENUM_POS TOP CENTER \}
+. \}
+. if !r#HEADER_MARGIN \{ .HEADER_MARGIN 4P+6p \}
+. if !r#HEADER_GAP \{ .HEADER_GAP 3P \}
+. if \\n[#FOOTERS_ON] \{\
+. if \\n[#PAGINATE]=0 \{\
+. if !r#T_MARGIN \{ .T_MARGIN 6P \}
+. \}
+. \}
+. if \\n[#HEADERS_ON]=0 \{\
+. if \\n[#FOOTERS_ON]=0 \{\
+. if !r#T_MARGIN \{ .T_MARGIN 6P \}
+. \}
+. \}
+. if !r#T_MARGIN \{ .T_MARGIN \\n[#HEADER_MARGIN]+\\n[#HEADER_GAP] \}
+. if !r#DOCHEADER_ADVANCE \{ .DOCHEADER_ADVANCE \\n[#T_MARGIN] \}
+. if !r#FOOTER_MARGIN \{ .FOOTER_MARGIN 3P \}
+. if !r#FOOTER_GAP \{ .FOOTER_GAP 3P \}
+. if !r#B_MARGIN \{ .B_MARGIN \\n[#FOOTER_MARGIN]u+\\n[#FOOTER_GAP]u \}
+. if !r#HDRFTR_RULE_GAP \{\
+. if \\n[#HEADERS_ON] \{ .HDRFTR_RULE_GAP 4p \}
+. if \\n[#FOOTERS_ON] \{ .HDRFTR_RULE_GAP 4p \}
+. \}
+. if !r#HDRFTR_RULE \{ .HDRFTR_RULE \}
+. if !r#PAGE_NUM_SET \{ .PAGENUMBER 1 \}
+. ie r#ADJ_DOC_LEAD \{ . \}
+. el \{ .DOC_LEAD_ADJUST \}
+\# Read in number registers and strings for type parameters
+. nr #DOC_L_MARGIN \\n[#L_MARGIN]
+. nr #DOC_L_LENGTH \\n[#L_LENGTH]
+. nr #DOC_R_MARGIN \\n[#PAGE_WIDTH]-(\\n[#DOC_L_MARGIN]+\\n[#L_LENGTH])
+. ds $DOC_FAM \\*[$FAMILY]
+. nr #DOC_PT_SIZE \\n[#PT_SIZE]
+. nr #DOC_LEAD \\n[#LEAD]
+. ds $DOC_QUAD \\*[$QUAD_VALUE]
+. ds $PP_FT \\*[$FONT]
+\# Counters
+. nr #PP 0
+. nr #FN_NUMBER 0 1
+. nr #EN_NUMBER 0 1
+. nr #FN_COUNT_FOR_COLS 0 1
+. RESET_HEAD_NUMBER
+. RESET_SUBHEAD_NUMBER
+. RESET_PARAHEAD_NUMBER
+\# General style defaults for both PRINTSTYLEs
+. nr #PP_STYLE 1
+. PARA_INDENT \\n[#PP_INDENT]u
+. if !d$HDRFTR_FAM \{ .HDRFTR_FAMILY \\*[$DOC_FAM] \}
+. if !d$HDRFTR_SIZE_CHANGE \{ .HDRFTR_SIZE +0 \}
+. if !d$PAGE_NUM_FAM \{ .PAGENUM_FAMILY \\*[$DOC_FAM] \}
+. if !d$PAGE_NUM_FT \{ .PAGENUM_FONT R \}
+. if !d$PAGE_NUM_SIZE_CHANGE \{ .PAGENUM_SIZE +0 \}
+. if !r#PAGE_NUM_POS_SET \{ .PAGENUM_POS BOTTOM CENTER \}
+. ie \\n[#PAGE_NUM_HYPHENS_SET] \{\
+. if \\n[#PAGE_NUM_HYPHENS]=0 \{ .PAGENUM_HYPHENS OFF \}
+. if \\n[#PAGE_NUM_HYPHENS]=1 \{ .PAGENUM_HYPHENS \}
+. \}
+. el \{ .PAGENUM_HYPHENS \}
+. if !d$HEAD_QUAD \{ .HEAD_QUAD CENTER \}
+. if !r#HEAD_CAPS \{ .HEAD_CAPS \}
+. if !r#HEAD_UNDERLINE \{ .HEAD_UNDERLINE \}
+. if !d$SH_QUAD \{ .SUBHEAD_QUAD LEFT \}
+. if !r#HDRFTR_RIGHT_CAPS \{ .HDRFTR_RIGHT_CAPS \}
+. if \\n[#HDRFTR_RIGHT_CAPS]=0 \{\
+. if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE +0 \}
+. \}
+. if !d$FN_FAM \{ .FOOTNOTE_FAMILY \\*[$DOC_FAM] \}
+. if !d$FN_FT \{ .FOOTNOTE_FONT R \}
+. if !d$FN_QUAD \{ .FOOTNOTE_QUAD \\*[$DOC_QUAD] \}
+. if !r#FN_RULE \{ .FOOTNOTE_RULE \}
+. if !r#FN_MARKERS \{ .FOOTNOTE_MARKERS \}
+. if !r#FN_MARKER_STYLE \{ .FOOTNOTE_MARKER_STYLE STAR \}
+. if !d$EN_FAM \{ .ENDNOTE_FAMILY \\*[$DOC_FAM] \}
+. if !d$EN_FN \{ .ENDNOTE_FONT R \}
+. if !d$EN_QUAD \{ .ENDNOTE_QUAD \\*[$DOC_QUAD] \}
+. if !d$EN_STRING \{ .ENDNOTE_STRING "ENDNOTES" \}
+. if !d$EN_STRING_FAM \{ .ENDNOTE_STRING_FAMILY \\*[$DOC_FAM] \}
+. if !d$EN_STRING_QUAD \{ .ENDNOTE_STRING_QUAD CENTER \}
+. if !r#EN_STRING_UNDERSCORE \{ .ENDNOTE_STRING_UNDERSCORE 2 \}
+. if !d$EN_TITLE \{\
+. ie \\n[#DOC_TYPE]=2 \{\
+. ie '\\*[$CHAPTER]'' \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING]" \}
+. el \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" \}
+. \}
+. el \{ .ENDNOTE_TITLE "\\*[$TITLE]" \}
+. \}
+. if !d$EN_TITLE_FAM \{ .ENDNOTE_TITLE_FAM \\*[$DOC_FAM] \}
+. if !d$EN_TITLE_QUAD \{ .ENDNOTE_TITLE_QUAD LEFT \}
+. if !r#EN_TITLE_UNDERSCORE \{ .ENDNOTE_TITLE_UNDERSCORE \}
+. if !d$EN_NUMBER_FAM \{ .ENDNOTE_NUMBER_FAMILY \\*[$DOC_FAM] \}
+. if !r#EN_NUMBERS_ALIGN_LEFT \{\
+. if !r#EN_NUMBERS_ALIGN_RIGHT \{ .ENDNOTE_NUMBERS_ALIGN_RIGHT 2 \}
+. \}
+\# String defaults for both PRINTSTYLEs
+. if !d$ATTRIBUTE_STRING \{ .ATTRIBUTE_STRING "by" \}
+. if \\n[#USER_DEF_HDRFTR_LEFT]=0 \{ .ds $HDRFTR_LEFT \\*[$AUTHOR_1] \}
+. rr #USER_DEF_HDRFTR_LEFT
+. if \\n[#USER_DEF_HDRFTR_RIGHT]=0 \{ .ds $HDRFTR_RIGHT \\*[$TITLE] \}
+. rr #USER_DEF_HDRFTR_RIGHT
+. if !d$FINIS_STRING \{ .FINIS_STRING "END" \}
+\# Defaults for printstyle TYPEWRITE
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#UNDERLINE_QUOTES]=1 \{ .UNDERLINE_QUOTES \}
+. if \\n[#UNDERLINE_QUOTES]=0 \{ .UNDERLINE_QUOTES OFF \}
+. if !r#Q_OFFSET_VALUE \{ .QUOTE_INDENT 2 \}
+. if !r#EPI_OFFSET_VALUE \{ .EPIGRAPH_INDENT 2 \}
+. if !d$LINEBREAK_CHAR \{ .LINEBREAK_CHAR * 3 2p \}
+. if !d$FN_SIZE_CHANGE \{ .FOOTNOTE_SIZE +0 \}
+. if !r#FN_RULE_LENGTH \{ .FOOTNOTE_RULE_LENGTH 2i \}
+. if !r#FN_RULE_ADJ \{ .FOOTNOTE_RULE_ADJ 6p \}
+. if !r#SLANT_MEANS_SLANT \{\
+. ie \\n[#UNDERLINE_SLANT]=1 \{ .UNDERLINE_SLANT \}
+. el \{ .UNDERLINE_SLANT OFF \}
+. \}
+. if !r#PH_INDENT \{ .PARAHEAD_INDENT \\n[#PP_INDENT]u/2u \}
+. if !r#EN_PP_INDENT \{ .ENDNOTE_PARA_INDENT \\n[#PP_INDENT] \}
+. \}
+\# Defaults for printstyle TYPESET
+. if \\n[#PRINT_STYLE]=2 \{\
+. if !#DOCHEADER_LEAD \{ .DOCHEADER_LEAD +0 \}
+. if !d$TITLE_FAM \{ .TITLE_FAMILY \\*[$DOC_FAM] \}
+. if !d$TITLE_FT \{ .TITLE_FONT B \}
+. if !d$TITLE_SIZE_CHANGE \{\
+. ie \\n[#DOC_TYPE]=2 \{ .TITLE_SIZE +4 \}
+. el \{ .TITLE_SIZE +3.5 \}
+. \}
+. if !d$SUBTITLE_FAM \{ .SUBTITLE_FAMILY \\*[$DOC_FAM] \}
+. if !d$SUBTITLE_FT \{ .SUBTITLE_FONT R \}
+. if !d$SUBTITLE_SIZE_CHANGE \{ .SUBTITLE_SIZE +0 \}
+. if !d$AUTHOR_FAM \{ .AUTHOR_FAMILY \\*[$DOC_FAM] \}
+. if !d$AUTHOR_FT \{ .AUTHOR_FONT I \}
+. if !d$AUTHOR_SIZE_CHANGE \{ .AUTHOR_SIZE +0 \}
+. if !d$DOCTYPE_FAM \{ .DOCTYPE_FAMILY \\*[$DOC_FAM] \}
+. if !d$DOCTYPE_FT \{ .DOCTYPE_FONT BI \}
+. if !d$DOCTYPE_SIZE_CHANGE \{ .DOCTYPE_SIZE +3 \}
+. if !d$HDRFTR_LEFT_FAM \{ .HDRFTR_LEFT_FAMILY \\*[$DOC_FAM] \}
+. if !d$HDRFTR_LEFT_FT \{ .HDRFTR_LEFT_FONT R \}
+. if \\n[#HDRFTR_LEFT_CAPS] \{\
+. if !d$HDRFTR_LEFT_SIZE_CHANGE \{ .HDRFTR_LEFT_SIZE -2 \}
+. \}
+. if !d$HDRFTR_LEFT_SIZE_CHANGE \{ .HDRFTR_LEFT_SIZE -.5 \}
+. if !d$HDRFTR_CENTER_FAM \{ .HDRFTR_CENTER_FAMILY \\*[$DOC_FAM] \}
+. if !d$HDRFTR_CENTER_FT \{ .HDRFTR_CENTER_FONT I \}
+. if \\n[#HDRFTR_CENTER_CAPS] \{\
+. if !d$HDRFTR_CENTER_SIZE_CHANGE \{ .HDRFTR_CENTER_SIZE -2 \}
+. \}
+. if !d$HDRFTR_CENTER_SIZE_CHANGE \{ .HDRFTR_CENTER_SIZE -.5 \}
+. if !d$HDRFTR_RIGHT_FAM \{ .HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM] \}
+. if !d$HDRFTR_RIGHT_FT \{ .HDRFTR_RIGHT_FONT R \}
+. if \\n[#HDRFTR_RIGHT_CAPS] \{\
+. if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE -2 \}
+. \}
+. if !d$HDRFTR_RIGHT_SIZE_CHANGE \{ .HDRFTR_RIGHT_SIZE -.5 \}
+. if !d$HEAD_FAM \{ .HEAD_FAMILY \\*[$DOC_FAM] \}
+. if !d$HEAD_FT \{ .HEAD_FONT B \}
+. if !d$HEAD_SIZE_CHANGE \{ .HEAD_SIZE +1 \}
+. if !r#HEAD_SPACE \{ .HEAD_SPACE \}
+. if !d$SH_FAM \{ .SUBHEAD_FAMILY \\*[$DOC_FAM] \}
+. if !d$SH_FT \{ .SUBHEAD_FONT B \}
+. if !d$SH_SIZE_CHANGE \{ .SUBHEAD_SIZE +.5 \}
+. if !d$PH_FAM \{ .PARAHEAD_FAMILY \\*[$DOC_FAM] \}
+. if !d$PH_FT \{ .PARAHEAD_FONT BI \}
+. if !d$PH_SIZE_CHANGE \{ .PARAHEAD_SIZE -.25 \}
+. if !r#PH_INDENT \{ .PARAHEAD_INDENT \\n[#PP_INDENT]u/2u \}
+. if !d$QUOTE_FAM \{ .QUOTE_FAMILY \\*[$DOC_FAM] \}
+. if !d$QUOTE_FT \{ .QUOTE_FONT I \}
+. if !d$QUOTE_SIZE_CHANGE \{ .QUOTE_SIZE +0 \}
+. if !r#Q_OFFSET_VALUE \{ .QUOTE_INDENT 3 \}
+. if !d$BQUOTE_FAM \{ .BLOCKQUOTE_FAMILY \\*[$DOC_FAM] \}
+. if !d$BQUOTE_FT \{ .BLOCKQUOTE_FONT R \}
+. if !d$BQUOTE_SIZE_CHANGE \{ .BLOCKQUOTE_SIZE -1 \}
+. if !d$BQUOTE_QUAD \{ .BLOCKQUOTE_QUAD LEFT \}
+. if !d$EPI_FAM \{ .EPIGRAPH_FAMILY \\*[$DOC_FAM] \}
+. if !d$EPI_FT \{ .EPIGRAPH_FONT R \}
+. if !d$EPI_SIZE_CHANGE \{ .EPIGRAPH_SIZE -1.5 \}
+. if !r#EPI_AUTOLEAD \{ .EPIGRAPH_AUTOLEAD 2 \}
+. if !d$EPI_QUAD \{ .EPIGRAPH_QUAD \\*[$DOC_QUAD] \}
+. if !r#EPI_OFFSET_VALUE \{ .EPIGRAPH_INDENT 3 \}
+. if !d$LINEBREAK_CHAR \{ .LINEBREAK_CHAR * 3 3p \}
+. if !r#FN_RULE_LENGTH \{ .FOOTNOTE_RULE_LENGTH 4P \}
+. if !r#FN_RULE_ADJ \{ .FOOTNOTE_RULE_ADJ 3p \}
+. if !d$FN_SIZE_CHANGE \{ .FOOTNOTE_SIZE -2 \}
+. if !r#FN_AUTOLEAD \{ .FOOTNOTE_AUTOLEAD 2 \}
+. if !r#EN_PS \{ .ENDNOTE_PT_SIZE \\n[#DOC_PT_SIZE]u \}
+. if !r#EN_LEAD \{ .ENDNOTE_LEAD 13.5p \}
+. if !d$EN_STRING_FT \{ .ENDNOTE_STRING_FONT B \}
+. if !d$EN_STRING_SIZE_CHANGE \{ .ENDNOTE_STRING_SIZE +1 \}
+. if !d$EN_TITLE_FT \{ .ENDNOTE_TITLE_FONT B \}
+. if !d$EN_TITLE_SIZE_CHANGE \{ .ENDNOTE_TITLE_SIZE 0 \}
+. if !d$EN_NUMBER_FT \{ .ENDNOTE_NUMBER_FONT B \}
+. if !$EN_NUMBER_SIZE_CHANGE \{ .ENDNOTE_NUMBER_SIZE 0 \}
+. if !r#EN_PP_INDENT \{ .ENDNOTE_PARA_INDENT 1.5m \}
+. \}
+. TRAPS
+. if \\n[#PRINT_STYLE]=1 \{ .nr #IGNORE 1 \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++START THE DOCUMENT+++
+\#
+\# THE START MACRO
+\# ---------------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Reads in default document style parameters and any parameter
+\# the user has changed before issuing START.
+\# Using the information gathered in the opening macros,
+\# prints appropriate title (or chapter #), subtitle, author
+\# and document type (if appropriate).
+\# *Notes:
+\# The .PRINT \& (zero-width character) is required to get the
+\# subsequent .sp request to work as advertised.
+\#
+\# The overall document line length, family, and point-size
+\# are stored in #DOC_L_LENGTH, $DOC_FAM, and #DOC_PT_SIZE for
+\# use in the HEADER and FOOTER macros.
+\#
+.MAC START END
+. if !\\n[#PRINT_STYLE] \{\
+. PRINTSTYLE TYPEWRITE
+. PRINT \&
+. po 6P
+. ll 39P
+. ta \\n(.lu
+. sp |1i-1v
+. CENTER
+. PRINT "You neglected to enter a PRINTSTYLE"
+. fl
+. ab PRINTSTYLE missing
+. \}
+. nr #DOCS 1
+. DEFAULTS
+. if \\n[#COLLATE] \{\
+. COPYSTYLE \\*[$COPY_STYLE]
+. nr #HEADERS_ON \\n[#HEADER_STATE]
+. if \\n[#PAGE_NUM_V_POS]=1 \{ .nr #PAGINATE \\n[#PAGINATION_STATE] \}
+. sp |\\n[#HEADER_MARGIN]u
+. PRINT \&
+. \}
+\#
+. if \\n[#PRINT_PAGENUM_ON_PAGE_1] \{\
+. sp |\\n[#HEADER_MARGIN]u
+. PRINT_PAGE_NUMBER
+. \}
+. rr #COLLATE
+. rr #PAGINATION_STATE
+\#
+. ie \\n[#DOC_HEADER]=0 \{\
+. PRINT \&
+. if \\n[#DOC_TYPE]=4 \{\
+. if !'\\n(.z'' \{ .di \}
+. \}
+. ie r#ADVANCE_FROM_TOP \{ .sp |\\n[#ADVANCE_FROM_TOP]u-1v \}
+. el \{ .sp |\\n[#T_MARGIN]u-1v \}
+. PP
+. nr #PP 0
+. rr #DOC_HEADER
+. if r#ADVANCE_FROM_TOP \{ .rr #ADVANCE_FROM_TOP \}
+. \}
+. el \{\
+. nr #DOCHEADER_LINES 0 1
+. if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#DOC_LEAD]u+\\n[#DOCHEADER_LEAD_ADJ]u \}
+. nr #DOCHEADER_LEAD \\n[#LEAD]
+\# Default
+. if \\n[#DOC_TYPE]=1 \{\
+. PRINT \&
+. sp |\\n[#DOCHEADER_ADVANCE]u-1v
+. ev TITLE
+. CENTER
+. L_MARGIN \\n[#DOC_L_MARGIN]u
+. LL \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \}
+. el \{ .vs \\n[#DOC_LEAD]u \}
+. CAPS
+. if !'\\*[$TITLE]'' \{ .UNDERSCORE "\\*[$TITLE]\}
+. CAPS OFF
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$TITLE_FAM]
+. FT \\*[$TITLE_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$TITLE_SIZE_CHANGE]
+. LS \\n[#DOCHEADER_LEAD]u
+. PRINT \\*[$TITLE]
+. \\n+[#DOCHEADER_LINES]
+. CAPS OFF
+. \}
+. ev
+. ev SUBTITLE
+. CENTER
+. L_MARGIN \\n[#DOC_L_MARGIN]u
+. LL \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. if !'\\*[$SUBTITLE]'' \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \}
+. el \{ .vs \\n[#DOC_LEAD]u \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$SUBTITLE_FAM]
+. FT \\*[$SUBTITLE_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$SUBTITLE_SIZE_CHANGE]
+. LS \\n[#DOCHEADER_LEAD]u
+. \}
+. PRINT \\*[$SUBTITLE]
+. \\n+[#DOCHEADER_LINES]
+. \}
+. if '\\*[$SUBTITLE]'' \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. ALD \\n[#DOC_LEAD]u
+. \}
+. \}
+. ev
+. ev AUTHOR
+. CENTER
+. L_MARGIN \\n[#DOC_L_MARGIN]u
+. LL \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. if !'\\*[$AUTHOR_1]'' \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
+. el \{ .vs \\n[#DOC_LEAD]u/2u \}
+. if !d$SUBTITLE \{\
+. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
+. el \{ .ALD \\n[#DOC_LEAD]u*2u \}
+. \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$AUTHOR_FAM]
+. FT \\*[$AUTHOR_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$AUTHOR_SIZE_CHANGE]
+. LS \\n[#DOCHEADER_LEAD]u
+. \}
+. PRINT \\*[$ATTRIBUTE_STRING]
+. \\n+[#DOCHEADER_LINES]
+. nr #AUTHORS \\n[#AUTHOR_NUM]
+. nr #NEXT_AUTHOR 0 1
+. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
+. PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
+. \\n+[#DOCHEADER_LINES]
+. \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#AUTHOR_LINES]=1 \{\
+. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u \}
+. el \{ .RLD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. \}
+. ev
+. \}
+\# Chapter
+. if \\n[#DOC_TYPE]=2 \{\
+. PRINT \&
+. sp |\\n[#DOCHEADER_ADVANCE]u-1v
+. ev TITLE
+. L_MARGIN \\n[#DOC_L_MARGIN]u
+. LL \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. CENTER
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \}
+. el \{ .vs \\n[#DOC_LEAD]u \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$TITLE_FAM]
+. FT \\*[$TITLE_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$TITLE_SIZE_CHANGE]
+. LS \\n[#DOC_LEAD]u
+. \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. CAPS
+. ie '\\*[$CHAPTER]'' \{ .PRINT \\*[$CHAPTER_STRING] \}
+. el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
+. CAPS OFF
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. ie '\\*[$CHAPTER]'' \{ .PRINT \\*[$CHAPTER_STRING] \}
+. el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \}
+. \}
+. ev
+. \}
+\# Named
+. if \\n[#DOC_TYPE]=3 \{\
+. PRINT \&
+. sp |\\n[#DOCHEADER_ADVANCE]u-1v
+. ev TITLE
+. CENTER
+. L_MARGIN \\n[#DOC_L_MARGIN]u
+. LL \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \}
+. el \{ .vs \\n[#DOC_LEAD]u \}
+. CAPS
+. if !'\\*[$TITLE]'' \{ .UNDERSCORE "\\*[$TITLE]\}
+. CAPS OFF
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$TITLE_FAM]
+. FT \\*[$TITLE_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$TITLE_SIZE_CHANGE]
+. LS \\n[#DOCHEADER_LEAD]u
+. PRINT \\*[$TITLE]
+. \\n+[#DOCHEADER_LINES]
+. CAPS OFF
+. \}
+. ev
+. ev SUBTITLE
+. CENTER
+. L_MARGIN \\n[#DOC_L_MARGIN]u
+. LL \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. if !'\\*[$SUBTITLE]'' \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \}
+. el \{ .vs \\n[#DOC_LEAD]u \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$SUBTITLE_FAM]
+. FT \\*[$SUBTITLE_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$SUBTITLE_SIZE_CHANGE]
+. LS \\n[#DOCHEADER_LEAD]u
+. \}
+. PRINT \\*[$SUBTITLE]
+. \\n+[#DOCHEADER_LINES]
+. \}
+. if '\\*[$SUBTITLE]'' \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. ALD \\n[#DOC_LEAD]u
+. \}
+. \}
+. ev
+. ev AUTHOR
+. CENTER
+. L_MARGIN \\n[#DOC_L_MARGIN]u
+. LL \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. if !'\\*[$AUTHOR_1]'' \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
+. el \{ .vs \\n[#DOC_LEAD]u/2u \}
+. if !d$SUBTITLE \{\
+. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
+. el \{ .ALD \\n[#DOC_LEAD]u*2u \}
+. \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$AUTHOR_FAM]
+. FT \\*[$AUTHOR_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$AUTHOR_SIZE_CHANGE]
+. LS \\n[#DOCHEADER_LEAD]u
+. \}
+. PRINT \\*[$ATTRIBUTE_STRING]
+. \\n+[#DOCHEADER_LINES]
+. nr #AUTHORS \\n[#AUTHOR_NUM]
+. nr #NEXT_AUTHOR 0 1
+. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
+. PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
+. \\n+[#DOCHEADER_LINES]
+. \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#AUTHOR_LINES]=1 \{\
+. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u \}
+. el \{ .RLD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. \}
+. ev
+. ev DOCTYPE
+. CENTER
+. L_MARGIN \\n[#DOC_L_MARGIN]u
+. LL \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. vs \\n[#DOC_LEAD]u
+. if '\\*[$AUTHOR_1]'' \{\
+. ie !d$SUBTITLE \{\
+. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u*2u \}
+. el \{ .RLD \\n[#DOC_LEAD]u \}
+. \}
+. el \{\
+. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u*2u \}
+. el \{ .RLD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u*2u \}
+. el \{ .ALD \\n[#DOC_LEAD]u \}
+. UNDERSCORE2 "\\*[$DOC_TYPE]
+. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$DOCTYPE_FAM]
+. FT \\*[$DOCTYPE_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$DOCTYPE_SIZE_CHANGE]
+. LS \\n[#DOCHEADER_LEAD]u
+. ALD \\n[#DOCHEADER_LEAD]u
+. \\n+[#DOCHEADER_LINES]
+. UNDERSCORE "\\*[$DOC_TYPE]
+. \\n+[#DOCHEADER_LINES]
+. \}
+. ev
+. \}
+. if !\\n[#DOC_TYPE]=4 \{\
+. if \\n[#PRINT_STYLE]=2 \{\
+. nr #DEPTH_1 \\n[#DOCHEADER_LINES]*\\n[#DOCHEADER_LEAD]
+. nr #DEPTH_2 \\n[#DOCHEADER_LINES]*\\n[#DOC_LEAD]
+. ie \\n[#DEPTH_1]<\\n[#DEPTH_2] \{\
+. nr #DOCHEADER_SPACE_ADJ \\n[#DEPTH_2]-\\n[#DEPTH_1]
+. \}
+. el \{\
+. nr #DOCHEADER_SPACE_ADJ \\n[#DEPTH_1]-\\n[#DEPTH_2]
+. \}
+. nr #DOCHEADER_EXTRA_SPACE \\n[#DOCHEADER_SPACE_ADJ] \\n[#DOC_LEAD]
+. while \\n[#DOCHEADER_EXTRA_SPACE]>\\n[#DOC_LEAD] \{\
+. \\n-[#DOCHEADER_EXTRA_SPACE]
+. \}
+. if \\n[#DOCHEADER_EXTRA_SPACE]>0 \{\
+. ie \\n[#DOCHEADER_LEAD_ADJ]<0 \{\
+. ALD \\n[#DOCHEADER_EXTRA_SPACE]u
+. \}
+. el \{ .ALD \\n[#DOC_LEAD]u-\\n[#DOCHEADER_EXTRA_SPACE]u \}
+. \}
+. \}
+. if \\n[#PRINT_STYLE]=1 \{ .ALD \\n[#DOC_LEAD]u \}
+. if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#DOC_LEAD]u*2u \}
+. if \\n[#COLUMNS] \{\
+. nr #COL_NUM 0 1
+. nr #L_LENGTH_FOR_EPI \\n[#L_LENGTH]
+. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
+. LL \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. mk dc
+. \}
+. \}
+. \}
+. rr #DOCHEADER_LEAD
+. rr #DOCHEADER_LEAD_ADJ
+. rr #DEPTH_1
+. rr #DEPTH_2
+. rr #DOCHEADER_ADVANCE
+. rr #ADVANCE_FROM_TOP
+. rr #DOCHEADER_SPACE_ADJ
+. rr #DOCHEADER_LINES
+. rr #DOCHEADER_EXTRA_SPACE
+. rr #AUTHORS
+. rr #NEXT_AUTHOR
+. rr #AUTHOR_NUM
+. rr #NUM_AUTHORS
+. nr #START 1
+. nr #START_FOR_FOOTERS 1
+.END
+\#
+\# ====================================================================
+\#
+\# +++MACROS TO CHANGE SOME DEFAULTS+++
+\#
+\# DOCUMENT HEADER
+\# ---------------
+\# *Argument:
+\# <none> | <anything> [distance to advance from top of page]
+\# *Function:
+\# Turns printing of document header on or off. If a second argument
+\# in units of measure is given, advances that distance from the
+\# top of the page without printing the document header.
+\# *Notes:
+\# Default is on. If the 1st argument is <anything> (which turns
+\# document headers off), the optional 2nd argument may be given
+\# (with a unit of measure).
+\#
+.MAC DOCHEADER END
+. ie '\\$1'' \{ .nr #DOC_HEADER 1 \}
+. el \{\
+. if !'\\$2'' \{ .nr #ADVANCE_FROM_TOP (\\$2) \}
+. nr #DOC_HEADER 0
+. \}
+.END
+\#
+\#
+\# DOCUMENT HEADER LEADING
+\# -----------------------
+\# *Arguments:
+\# <+|- amount by which to in/decrease leading of doc header>
+\# *Function:
+\# Stores user supplied lead in/decrease in register #DOCHEADER_LEAD_ADJ.
+\# *Notes:
+\# A unit of measure must be supplied. Decimal fractions OK.
+\# Default is +0, i.e. same as DOC_LEAD.
+\#
+.MAC DOCHEADER_LEAD END
+. nr #DOCHEADER_LEAD_ADJ (\\$1)
+.END
+\#
+\#
+\# DOCHEADER ADVANCE
+\# -----------------
+\# *Arguments:
+\# <docheader start position>
+\# *Function:
+\# Creates register #DOCHEADER_ADVANCE, used in START.
+\# *Notes:
+\# Unit of measure required.
+\# Default is same as T_MARGIN.
+\#
+.MAC DOCHEADER_ADVANCE END
+. nr #DOCHEADER_ADVANCE (\\$1)
+.END
+\#
+\#
+\# TITLE FAMILY
+\# ------------
+\# *Argument:
+\# <family to use for the document header title>
+\# *Function:
+\# Creates or modifies string $TITLE_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC TITLE_FAMILY END
+. ds $TITLE_FAM \\$1
+.END
+\#
+\#
+\# TITLE FONT
+\# ----------
+\# *Argument:
+\# <font to use for the document header title>
+\# *Function:
+\# Creates or modifies string $TITLE_FT.
+\# *Notes:
+\# Default is bold.
+\#
+.MAC TITLE_FONT END
+. ds $TITLE_FT \\$1
+.END
+\#
+\#
+\# TITLE SIZE
+\# ----------
+\# *Argument:
+\# <+|- number of points by which to in/decrease title at start
+\# of the document (relative to running text)>
+\# *Function:
+\# Creates string $TITLE_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign, with no space afterwards.
+\# Fractional point sizes are allowed.
+\# Default is +3.5 for printstyle TYPESET DEFAULT | STORY | NAMED;
+\# 4 for TYPESET CHAPTER; +0 for TYPEWRITE.
+\#
+.MAC TITLE_SIZE END
+. ds $TITLE_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# SUBTITLE FAMILY
+\# ---------------
+\# *Argument:
+\# <family to use for the document header title>
+\# *Function:
+\# Creates or modifies string $SUBTITLE_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC SUBTITLE_FAMILY END
+. ds $SUBTITLE_FAM \\$1
+.END
+\#
+\#
+\# SUBTITLE FONT
+\# -------------
+\# *Argument:
+\# <font to use for the document header title>
+\# *Function:
+\# Creates or modifies string $SUBTITLE_FT.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC SUBTITLE_FONT END
+. ds $SUBTITLE_FT \\$1
+.END
+\#
+\#
+\# SUBTITLE SIZE
+\# -------------
+\# *Argument:
+\# <+|- number of points by which to in/decrease subtitle at start
+\# of the document (relative to running text)>
+\# *Function:
+\# Creates or modifies string $SUBTITLE_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign with no space afterwards.
+\# Fractional point sizes are allowed.
+\# Default is +0.
+\#
+.MAC SUBTITLE_SIZE END
+. ds $SUBTITLE_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# AUTHOR FAMILY
+\# -------------
+\# *Argument:
+\# <family to use for author in document header>
+\# *Function:
+\# Creates or modifies string $AUTHOR_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC AUTHOR_FAMILY END
+. ds $AUTHOR_FAM \\$1
+.END
+\#
+\#
+\# AUTHOR FONT
+\# -----------
+\# *Argument:
+\# <font to use for author in document header>
+\# *Function:
+\# Creates or modifies string $AUTHOR_FT.
+\# *Notes:
+\# Default is italic.
+\#
+.MAC AUTHOR_FONT END
+. ds $AUTHOR_FT \\$1
+.END
+\#
+\#
+\# AUTHOR SIZE
+\# -----------
+\# *Argument:
+\# <+|- number of points by which to in/decrease author at start
+\# of the document>
+\# *Function:
+\# Creates or modifies string $AUTHOR_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign with no space afterwards.
+\# Fractional point sizes are allowed.
+\# Default is same as running text.
+\#
+.MAC AUTHOR_SIZE END
+. ds $AUTHOR_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# DOCTYPE FAMILY
+\# --------------
+\# *Argument:
+\# <family to use for the document type string>
+\# *Function:
+\# Creates or modifies string $DOCTYPE_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC DOCTYPE_FAMILY END
+. ds $DOCTYPE_FAM \\$1
+.END
+\#
+\#
+\# DOCTYPE FONT
+\# ------------
+\# *Argument:
+\# <font to use for the document type string>
+\# *Function:
+\# Creates or modifies string $DOCTYPE_FT.
+\# *Notes:
+\# Default is bold italic.
+\#
+.MAC DOCTYPE_FONT END
+. ds $DOCTYPE_FT \\$1
+.END
+\#
+\#
+\# DOCTYPE SIZE
+\# -------------
+\# *Argument:
+\# <+|- number of points by which to in/decrease the document
+\# type string (relative to running text)>
+\# *Function:
+\# Creates or modifies string $DOCTYPE_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign with no space afterwards.
+\# Fractional point sizes are allowed.
+\# Default is +3 for TYPESET; 0 for TYPEWRITE.
+\#
+.MAC DOCTYPE_SIZE END
+. ds $DOCTYPE_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# DOCUMENT LEFT MARGIN
+\# --------------------
+\# *Argument:
+\# <left margin of document>
+\# *Function:
+\# Creates or modifies register #DOC_L_MARGIN.
+\# *Notes:
+\# Affects EVERYTHING on the page.
+\#
+.MAC DOC_LEFT_MARGIN END
+. br
+. nr #DOC_L_MARGIN (\\$1)
+. L_MARGIN \\n[#DOC_L_MARGIN]u
+.END
+\#
+\#
+\# DOCUMENT RIGHT MARGIN
+\# ---------------------
+\# *Argument:
+\# <right margin of document>
+\# *Function:
+\# Creates or modifies register #DOC_R_MARGIN.
+\# *Notes:
+\# Affects EVERYTHING on the page.
+\#
+.MAC DOC_RIGHT_MARGIN END
+. br
+. nr #DOC_R_MARGIN (\\$1)
+. R_MARGIN \\n[#DOC_R_MARGIN]
+. nr #DOC_L_LENGTH \\n[#L_LENGTH]
+.END
+\#
+\#
+\# DOCUMENT LINE LENGTH
+\# --------------------
+\# *Argument:
+\# <line length of document>
+\# *Function:
+\# Creates or modifies string $DOC_L_LENGTH.
+\# *Notes:
+\# Affects EVERYTHING on the page.
+\#
+.MAC DOC_LINE_LENGTH END
+. br
+. nr #DOC_L_LENGTH (\\$1)
+. LL \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+.END
+\#
+\#
+\# DOCUMENT FAMILY
+\# ---------------
+\# *Argument:
+\# <family of running text>
+\# *Function:
+\# Creates or modifies string $DOC_FAM.
+\# *Notes:
+\# Affects everything EXCEPT headers and footers.
+\#
+.MAC DOC_FAMILY END
+. br
+. ds $DOC_FAM \\$1
+. FAMILY \\*[$DOC_FAM]
+. TITLE_FAMILY \\*[$DOC_FAM]
+. SUBTITLE_FAMILY \\*[$DOC_FAM]
+. AUTHOR_FAMILY \\*[$DOC_FAM]
+. DOCTYPE_FAMILY \\*[$DOC_FAM]
+. HEAD_FAMILY \\*[$DOC_FAM]
+. SUBHEAD_FAMILY \\*[$DOC_FAM]
+. QUOTE_FAMILY \\*[$DOC_FAM]
+. BLOCKQUOTE_FAMILY \\*[$DOC_FAM]
+. EPIGRAPH_FAMILY \\*[$DOC_FAM]
+. HDRFTR_FAMILY \\*[$DOC_FAM]
+. PAGENUM_FAMILY \\*[$DOC_FAM]
+.END
+\#
+\#
+\# DOCUMENT POINT SIZE
+\# -------------------
+\# *Argument:
+\# <point size of running text>
+\# *Function:
+\# Creates or modifies register $DOC_PT_SIZE.
+\# *Notes:
+\# DOC_PT_SIZE is the basis for calculating all type sizes in
+\# a document.
+\#
+.MAC DOC_PT_SIZE END
+. if \\n[#IGNORE] \{ .return \}
+. br
+. PT_SIZE \\$1
+. nr #DOC_PT_SIZE \\n[#PT_SIZE]
+.END
+\#
+\#
+\# DOCUMENT LEAD
+\# -------------
+\# *Argument:
+\# <lead (".vs") of running text> [ADJUST]
+\# *Function:
+\# Creates or modifies register #DOC_LEAD. If the optional
+\# ADJUST argument is given, adjusts leading so that the last
+\# line of text falls exactly on #B_MARGIN.
+\# *Notes:
+\# DOC_LEAD is the basis for calculating all leading changes in
+\# a document. Default for TYPESET is 16; 24 for TYPEWRITE.
+\#
+\# Because the visible bottom or footer margin of a page depends
+\# on the overall document lead supplied by the register #DOC_LEAD,
+\# DOC_LEAD, in the body of a document, should always be associated
+\# with the start of a new page (in other words, just before or
+\# just after a manual NEWPAGE).
+\#
+.MAC DOC_LEAD END
+. if \\n[#IGNORE] \{ .return \}
+. br
+. vs \\$1
+. nr #DOC_LEAD \\n[#LEAD]
+. if '\\$2'ADJUST' \{ .TRAPS \}
+.END
+\#
+\# ADJUST DOCUMENT LEAD
+\# --------------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Adjusts document lead so that the last line of text falls exactly
+\# on #B_MARGIN.
+\#
+.MAC DOC_LEAD_ADJUST END
+. ie '\\$1'' \{ .nr #ADJ_DOC_LEAD 1 \}
+. el \{ .nr #ADJ_DOC_LEAD 0 \}
+.END
+\#
+\#
+\# DOCUMENT QUAD
+\# -------------
+\# *Arguments:
+\# L | LEFT | R | RIGHT | C | CENTER | CENTRE | J | JUSTIFY
+\# *Function:
+\# Creates or modifies string $DOC_QUAD.
+\# *Notes:
+\# While QUAD (from the typesetting macros) can be used before START
+\# to change the default document quad, DOC_QUAD *must* be used after
+\# the START macro has been invoked.
+\#
+\# Default is LEFT for printstyle TYPEWRITE, JUSTIFY for printstyle
+\# TYPESET.
+\#
+.MAC DOC_QUAD END
+. ds $DOC_QUAD \\$1
+. QUAD \\*[$DOC_QUAD]
+.END
+\#
+\# ====================================================================
+\#
+\# +++INTERNATIONALIZATION+++
+\#
+\# ATTRIBUTE STRING
+\# ----------------
+\# *Argument:
+\# <what goes in the "by" slot before author in the document header>
+\# *Function:
+\# Creates or modifies string $ATTRIBUTE_STRING.
+\# *Notes:
+\# Default is "by". A blank string ("") may be used if no
+\# attribution is desired.
+\#
+.MAC ATTRIBUTE_STRING END
+. ds $ATTRIBUTE_STRING \\$1
+.END
+\#
+\#
+\# CHAPTER STRING
+\# --------------
+\# *Argument:
+\# <what to print any time the word "chapter" is required>
+\# *Function:
+\# Creates or modifies string $CHAPTER_STRING.
+\# *Notes:
+\# Default is "chapter".
+\#
+.MAC CHAPTER_STRING END
+. ds $CHAPTER_STRING \\$1
+.END
+\#
+\#
+\# DRAFT STRING
+\# ------------
+\# *Argument:
+\# <what to print any time the word "draft" is required>
+\# *Function:
+\# Creates or modifies string $DRAFT_STRING.
+\# *Notes:
+\# Default is "draft".
+\#
+.MAC DRAFT_STRING END
+. ds $DRAFT_STRING \\$1
+.END
+\#
+\#
+\# REVISION STRING
+\# ---------------
+\# *Argument:
+\# <what to print any time the word "revision" is required>
+\# *Function:
+\# Creates or modifies string $REVISION_STRING.
+\# *Notes:
+\# Default is "revision".
+\#
+.MAC REVISION_STRING END
+. ds $REVISION_STRING \\$1
+.END
+\#
+\#
+\# FINIS STRING
+\# ------------
+\# *Argument:
+\# <what to print with the finis macro>
+\# *Function:
+\# Creates or modifies string $FINIS_STRING.
+\# *Notes:
+\# Default is "END".
+\#
+.MAC FINIS_STRING END
+. nr #FINIS 1
+. CAPS
+. ds $FINIS_STRING \\$1
+. CAPS OFF
+.END
+\#
+\# ====================================================================
+\#
+\# +++RECTO/VERSO+++
+\#
+\# RECTO_VERSO
+\# -----------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Switches HDRFTR_LEFT and HDRFTR_RIGHT on alternate pages. Also
+\# switches page numbers left and right if either is chosen rather
+\# than the default centered page numbers. Switches left and right
+\# margins if differing values have been entered.
+\# *Notes:
+\# Default is OFF.
+\#
+.MAC RECTO_VERSO END
+. ie '\\$1'' \{ .nr #RECTO_VERSO 1 \}
+. el \{ .nr #RECTO_VERSO 0 \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++EPIGRAPHS+++
+\#
+\# EPIGRAPH FAMILY
+\# ---------------
+\# *Argument:
+\# <family to use for epigraphs>
+\# *Function:
+\# Creates or modifies string $EPI_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC EPIGRAPH_FAMILY END
+. ds $EPI_FAM \\$1
+.END
+\#
+\#
+\# EPIGRAPH FONT
+\# -------------
+\# *Argument:
+\# <font to use for epigraphs>
+\# *Function:
+\# Creates or modifies string $EPI_FT.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC EPIGRAPH_FONT END
+. ds $EPI_FT \\$1
+.END
+\#
+\#
+\# EPIGRAPH SIZE
+\# -------------
+\# *Argument:
+\# <-|+ number of points by which to de/increase point size of epigraphs
+\# (relative to running text)>
+\# *Function:
+\# Creates or modifies string $EPI_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a - or + sign with no space afterwards.
+\# Fractional point sizes are allowed. Default -1.5 for printstyle
+\# TYPESET; +0 for TYPEWRITE.
+\#
+.MAC EPIGRAPH_SIZE END
+. ds $EPI_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# EPIGRAPH QUAD
+\# -------------
+\# *Arguments:
+\# L | LEFT | J | JUSTIFY
+\# *Function:
+\# Creates or modifies string $EPI_QUAD.
+\# *Notes:
+\# Default is $DOC_QUAD when BLOCK argument is passed to EPIGRAPH.
+\#
+.MAC EPIGRAPH_QUAD END
+. ds $EPI_QUAD \\$1
+.END
+\#
+\#
+\# EPIGRAPH INDENT
+\# ---------------
+\# *Argument:
+\# <value by which to multiply PP_INDENT for block epigraphs>
+\# *Function:
+\# Creates or modifies register #EPI_OFFSET_VALUE.
+\# *Notes:
+\# Default is 2 for TYPEWRITE, 3 for TYPESET.
+\#
+.MAC EPIGRAPH_INDENT END
+. nr #EPI_OFFSET_VALUE \\$1
+.END
+\#
+\#
+\# EPIGRAPH AUTOLEAD
+\# -----------------
+\# *Argument:
+\# <amount of lead to add to the epigraph ps for epigraph leading>
+\# *Function:
+\# Creates or modifies register #EPI_AUTOLEAD.
+\# *Notes:
+\# Default is 2 (for TYPESET; TYPEWRITE doesn't require this).
+\#
+.MAC EPIGRAPH_AUTOLEAD END
+. nr #EPI_AUTOLEAD \\$1
+.END
+\#
+\#
+\# EPIGRAPH
+\# --------
+\# *Arguments:
+\# BLOCK | <anything>
+\# *Function:
+\# Places an epigraph before the document's text, after the
+\# document header, or after a HEAD.
+\# *Notes:
+\# #EPIGRAPH 1 = centered; 2 = block
+\#
+\# By default, epigraphs are centered, allowing the user
+\# to input them on a line per line basis. To change this
+\# behaviour, the user can supply the argument BLOCK, which
+\# will produce indented, filled text similar to BLOCKQUOTE.
+\#
+\# If a block epigraph contains more than one para, ALL paras of
+\# the epigraph must be preceded by PP. Otherwise, PP is optional.
+\#
+.MAC EPIGRAPH END
+. nr #PP_STYLE 2
+. nr #Q_PP 0
+. if \\n[#START] \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#AUTHOR_LINES]=1 \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. ie '\\$1'' \{\
+. nr #EPIGRAPH 1
+. ev EPIGRAPH
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+. CHECK_INDENT
+. if \\n[#COLUMNS] \{\
+. ie \\n[#START] \{\
+. ll \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. el \{\
+. ll \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. \}
+. CENTER
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. if '\\*[$EPI_FT]'I' \{\
+. FT I
+. \}
+. ps 12
+. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
+. el \{ .vs \\n[#DOC_LEAD]u/2u \}
+. nr #EPI_LEAD \\n[#LEAD]
+. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$EPI_FAM]
+. FT \\*[$EPI_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
+. AUTOLEAD \\n[#EPI_AUTOLEAD]
+. nr #EPI_LEAD \\n[#LEAD]
+. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
+. \}
+. di EPI_TEXT
+. nr #EPI_ACTIVE 1
+. \}
+. el \{\
+. ie '\\$1'BLOCK' \{\
+. nr #EPIGRAPH 2
+. ev EPIGRAPH
+. ie \\n[#START] \{\
+. ie \\n[#COLUMNS] \{\
+. ll \\n[#L_LENGTH_FOR_EPI]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
+. ta \\n(.lu
+. \}
+. el \{\
+. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
+. ta \\n(.lu
+. \}
+. \}
+. el \{\
+. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
+. ta \\n(.lu
+. if \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u))
+. ta \\n(.lu
+. \}
+. CHECK_INDENT
+. \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. if '\\*[$EPI_FT]'I' \{\
+. FT I
+. \}
+. ps 12
+. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
+. el \{ .vs \\n[#DOC_LEAD]u/2u \}
+. QUAD LEFT
+. HY OFF
+. nr #EPI_LEAD \\n[#LEAD]
+. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
+. di EPI_TEXT
+. nr #EPI_ACTIVE 1
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$EPI_FAM]
+. FT \\*[$EPI_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$EPI_SIZE_CHANGE]
+. AUTOLEAD \\n[#EPI_AUTOLEAD]
+. QUAD \\*[$EPI_QUAD]
+. HY
+. nr #EPI_LEAD \\n[#LEAD]
+. nr #EPI_LEAD_DIFF \\n[#DOC_LEAD]-\\n[#EPI_LEAD]
+. di EPI_TEXT
+. nr #EPI_ACTIVE 1
+. \}
+. \}
+. el \{\
+. DO_EPIGRAPH
+. \}
+. \}
+.END
+\#
+\#
+\# DO EPIGRAPH
+\# -----------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Ends diversion started in EPIGRAPH. Makes spacing
+\# adjustments to compensate for the difference between epigraph
+\# leading and overall document leading, so that the bottom of
+\# the pages remain flush.
+\# *Notes:
+\# In addition to its usual place at the beginning of a
+\# document, EPIGRAPH may also be used after HEAD.
+\#
+.MAC DO_EPIGRAPH END
+. br
+. di
+. REMOVE_INDENT
+. ev
+. nr #EPI_DEPTH \\n[#DIVER_DEPTH]-\\n[#EPI_LEAD]
+. nr #EPI_LINES \\n[#EPI_DEPTH]/\\n[#EPI_LEAD]
+. ie \\n[#START] \{\
+. nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
+. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{ .nr #EPI_WHITESPACE -\\n[#DOC_LEAD] \}
+. RLD \\n[#DOC_LEAD]u
+. ie \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u/2u \}
+. \}
+. el \{\
+. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
+. ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
+. \}
+. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
+. ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
+. \}
+. \}
+. \}
+. el \{\
+. ie \\n[#EPI_DEPTH]<\\n[#TRAP_DISTANCE] \{\
+. nr #EPI_FITS 1
+. nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
+. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{ .nr #EPI_WHITESPACE -\\n[#DOC_LEAD] \}
+. ie \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u/2u \}
+. \}
+. el \{\
+. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
+. ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)
+. \}
+. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
+. ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
+. \}
+. \}
+. \}
+. el \{\
+. nr #EPI_LINES_TO_TRAP 0 1
+. while \\n[#EPI_LEAD]*\\n+[#EPI_LINES_TO_TRAP]<\\n[#TRAP_DISTANCE] \{ .nr #LOOP 1 \}
+. nr #EPI_LINES_TO_TRAP -1
+. nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_TRAP]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_TRAP]*\\n[#EPI_LEAD])
+. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{ .nr #EPI_WHITESPACE -\\n[#DOC_LEAD] \}
+. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u \}
+. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u-\\n[#DOC_LEAD]u \}
+. \}
+. \}
+. if \\n[#EPIGRAPH]=1 \{\
+. po \\n[#L_MARGIN]u
+. if \\n[#COLUMNS] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \}
+. \}
+. if \\n[#EPIGRAPH]=2 \{\
+. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
+. if \\n[#COLUMNS] \{\
+. nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
+. \}
+. po \\n[#EPI_OFFSET]u
+. \}
+. nf
+. EPI_TEXT
+. br
+. ie \\n[#START] \{\
+. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
+. ALD \\n[#EPI_WHITESPACE]u/2u
+. \}
+. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
+. ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
+. \}
+. \}
+. el \{\
+. rr #EPI_ACTIVE
+. ie \\n[#EPI_FITS] \{\
+. ie \\n[#FN_FOR_EPI] \{\
+. nr #EPI_LINES_TO_END 1
+. nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
+. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{ .nr #EPI_WHITESPACE -\\n[#DOC_LEAD] \}
+. ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
+. \}
+. el \{\
+. ie \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#EPI_WHITESPACE]=\\n[#DOC_LEAD] \{ .ALD \\n[#EPI_WHITESPACE]u \}
+. \}
+. el \{\
+. if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\
+. ALD \\n[#EPI_WHITESPACE]u/2u
+. \}
+. if \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
+. ALD (\\n[#EPI_WHITESPACE]u/2u)-\\n[#DOC_LEAD]u
+. \}
+. \}
+. \}
+. \}
+. el \{\
+. nr #EPI_LINES_TO_END \\n[#EPI_LINES]-\\n[#EPI_LINES_TO_TRAP]
+. if \\n[#LOOP] \{. nr #EPI_LINES_TO_END +1 \}
+. rr #LOOP
+. nr #EPI_WHITESPACE (\\n[#EPI_LINES_TO_END]*\\n[#DOC_LEAD])-(\\n[#EPI_LINES_TO_END]*\\n[#EPI_LEAD])
+. while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{ .nr #EPI_WHITESPACE -\\n[#DOC_LEAD] \}
+. ALD \\n[#EPI_WHITESPACE]u-(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
+. if \\n[#PRINT_STYLE]=1 \{\
+. if !\\n[#SINGLE_SPACE] \{\
+. nr #EPI_LINES_EVEN \\n[#EPI_LINES_TO_END]%2
+. ie \\n[#EPI_LINES_EVEN] \{ .ALD .5v \}
+. el \{ .RLD .5v \}
+. rr #EPI_LINES_EVEN
+. \}
+. \}
+. \}
+. \}
+. nr #PP_STYLE 1
+. rr #EPI_FITS
+. ALD \\n[#DOC_LEAD]u
+. QUAD \\*[$DOC_QUAD]
+. po \\n[#L_MARGIN]u
+. if \\n[#COLUMNS] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \}
+. if \\n[#START] \{\
+. if \\n[#COLUMNS] \{\
+. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
+. mk dc
+. \}
+. \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++FINIS MACRO+++
+\#
+\# FINIS
+\# -----
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Deposits --END-- at the end of a document.
+\#
+.MAC FINIS END
+. if \\n[#TAB_ACTIVE] \{ .TQ \}
+. if \\n[#INDENT_ACTIVE] \{ .IQ CLEAR \}
+. FOOTERS OFF
+. PAGINATION OFF
+. nr #EM_ADJUST (1m/8)
+. if \\n[#COLUMNS] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \}
+. ALD \\n[#DOC_LEAD]u
+. CENTER
+. if \\n[#PRINT_STYLE]=1 \{ .PRINT "--\\*[$FINIS_STRING]--\}
+. if \\n[#PRINT_STYLE]=2 \{\
+. PRINT "\v'-\\n[#EM_ADJUST]u'\(em\v'+\\n[#EM_ADJUST]u'\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\(em
+. \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++HEADERS/FOOTERS+++
+\#
+\# Define a string so that the current page number can be incorporated
+\# into the strings for hdrftr left, right, and center. NOTE: This is
+\# not the same thing as using the shortform # in hdrftr strings.
+\#
+.ds PAGE# \En[#PAGENUMBER]
+\#
+\#
+\# HDRFTR FAMILY
+\# -------------
+\# *Argument:
+\# <family to use in header/footers>
+\# *Function:
+\# Creates or modifies string $HDRFTR_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC HDRFTR_FAMILY END
+. ds $HDRFTR_FAM \\$1
+.END
+\#
+\#
+\# HDRFTR SIZE
+\# -----------
+\# *Argument:
+\# <+|-number of points by which to in/decrease point size of
+\# header/footers (relative to running text)>
+\# *Function:
+\# Creates or modifies string $HDRFTR_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign. No space afterwards.
+\# Fractional point sizes are allowed. Default is +0.
+\#
+\# By default, header/footers print the author .5 points smaller
+\# than the base point size of running text, center titles
+\# (Chapter, Draft, Revision, etc.) .5 points smaller
+\# than running text (in italics), and the document title 2 full
+\# points smaller than running text (in caps). The HDRFTR_SIZE
+\# macro changes the overall size for all three parts while
+\# maintaining the internal size changes.
+\#
+\# In other words, if the user likes the header/footers but wants
+\# them a bit bigger or a bit smaller, s/he should use HDRFTR_SIZE.
+\#
+.MAC HDRFTR_SIZE END
+. ds $HDRFTR_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# HDRFTR RULE GAP
+\# ---------------
+\# *Argument:
+\# <amount of space between header/footer and header/footer rule>
+\# *Function:
+\# Creates or modifies register #HDRFTR_RULE_GAP to hold amount
+\# of space between header/footer and header/footer rule.
+\# *Notes:
+\# Default is 4p.
+\#
+.MAC HDRFTR_RULE_GAP END
+. nr #HDRFTR_RULE_GAP (\\$1)
+.END
+\#
+\#
+\# HDRFTR LEFT
+\# -----------
+\# *Argument:
+\# <what to put in the left position of page header/footers>
+\# *Function:
+\# Creates or modifies string $HDRFTR_LEFT.
+\# Creates register #USER_DEF_HDRFTR_LEFT, which, if 1,
+\# overrides the $HDRFTR_LEFT string created by default
+\# in DEFAULTS.
+\# *Notes:
+\# Especially useful if doc has more than one author, and a list
+\# of authors by last name is desired in header/footers.
+\# Default is author.
+\#
+\# If the argument is the # character, simply prints the current
+\# page number.
+\#
+\# If the user wants to *incorporate* the page number into the string,
+\# \*[PAGE#] must be used. For example, if the user wants to put
+\# an elipsis before the page number in the string, s/he should use
+\# ...\*[PAGE#], not ...#
+\#
+.MAC HDRFTR_LEFT END
+. nr #USER_DEF_HDRFTR_LEFT 1
+. ds $HDRFTR_LEFT \\$1
+.END
+\#
+\#
+\# HDRFTR LEFT FAMILY
+\# ------------------
+\# *Argument:
+\# <family of header/footer left string>
+\# *Function:
+\# Creates or modifies string $HDRFTR_LEFT_FAM.
+\#
+.MAC HDRFTR_LEFT_FAMILY END
+. ds $HDRFTR_LEFT_FAM \\$1
+.END
+\#
+\#
+\# HDRFTR LEFT FONT
+\# ----------------
+\# *Argument:
+\# <font of header/footer left string>
+\# *Function:
+\# Creates or modifies string $HDRFTR_LEFT_FT.
+\#
+.MAC HDRFTR_LEFT_FONT END
+. ds $HDRFTR_LEFT_FT \\$1
+.END
+\#
+\#
+\# HDRFTR LEFT SIZE
+\# ----------------
+\# *Argument:
+\# <+|- number of points to in/decrease size of left string in
+\# header/footers (relative to running text)>
+\# *Function:
+\# Creates or modifies string HDRFTR_LEFT_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign. No space afterwards.
+\# Fractional point sizes are allowed.
+\# Default is -.5 for printstyle TYPESET; if all caps, -2
+\# Has no effect in TYPEWRITE.
+\#
+.MAC HDRFTR_LEFT_SIZE END
+. ds $HDRFTR_LEFT_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# HDRFTR LEFT CAPS
+\# ----------------
+\# *Argument:
+\# <none> | <anything>
+\# *Function:
+\# Turns capitalisation of $HDRFTR_LEFT (typically, the author of
+\# the document) on or off.
+\# *Notes:
+\# Default is on.
+\#
+.MAC HDRFTR_LEFT_CAPS END
+. ie '\\$1'' \{\
+. nr #HDRFTR_LEFT_CAPS 1
+. \}
+. el \{\
+. nr #HDRFTR_LEFT_CAPS 0
+. ds $HDRFTR_RIGHT_SIZE_CHANGE +0
+. \}
+.END
+\#
+\#
+\# HDRFTR CENTER
+\# -------------
+\# *Argument:
+\# <what to put in the centre position of page header/footers>
+\# *Function:
+\# Creates or modifies string $HDRFTR_CENTER.
+\# Creates register #USER_DEF_HDRFTR_CENTER, which, if 1,
+\# overrides the $HDRFTR_CENTER string created by default
+\# in COPYSTYLE.
+\# *Notes:
+\# Default is document type if DOCTYPE NAMED, Chapter # if DOCTYPE
+\# CHAPTER, draft and revision number if COPYSTYLE DRAFT.
+\#
+\# If the argument is the # character, simply prints the current
+\# page number.
+\#
+\# If the user wants to *incorporate* the page number into the string,
+\# \*[PAGE#] must be used. For example, if the user wants to put
+\# an elipsis before the page number in the string, s/he should use
+\# ...\*[PAGE#], not ...#
+\#
+.MAC HDRFTR_CENTER END
+. nr #USER_DEF_HDRFTR_CENTER 1
+. ds $HDRFTR_CENTER \\$1
+.END
+\#
+\#
+\# HDRFTR CENTER FAMILY
+\# --------------------
+\# *Argument:
+\# <family of header/footer center string>
+\# *Function:
+\# Creates or modifies string $HDRFTR_CENTER_FAM.
+\#
+.MAC HDRFTR_CENTER_FAMILY END
+. ds $HDRFTR_CENTER_FAM \\$1
+.END
+\#
+\#
+\# HDRFTR CENTER FONT
+\# ------------------
+\# *Argument:
+\# <font of header/footer center string>
+\# *Function:
+\# Creates or modifies string $HDRFTR_CENTER_FT.
+\#
+.MAC HDRFTR_CENTER_FONT END
+. ds $HDRFTR_CENTER_FT \\$1
+.END
+\#
+\#
+\# HDRFTR CENTER SIZE
+\# ------------------
+\# *Argument:
+\# <+|- number of points to in/decrease size of centre string in
+\# header/footers (relative to header/footer size)>
+\# *Function:
+\# Creates string HDRFTR_CENTER_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign. No space afterwards.
+\# Fractional point sizes are allowed.
+\# Default is -.5 for printstyle TYPESET; if all caps, -2
+\# Has no effect in TYPEWRITE.
+\#
+.MAC HDRFTR_CENTER_SIZE END
+. ds $HDRFTR_CENTER_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# HDRFTR CENTER CAPS
+\# ------------------
+\# *Argument:
+\# <none> | <anything>
+\# *Function:
+\# Turns capitalisation of $HDRFTR_CENTER (typically, doctype of
+\# the document) on or off.
+\# *Notes:
+\# Default is on.
+\#
+.MAC HDRFTR_CENTER_CAPS END
+. ie '\\$1'' \{\
+. nr #HDRFTR_CENTER_CAPS 1
+. \}
+. el \{\
+. nr #HDRFTR_CENTER_CAPS 0
+. ds $HDRFTR_CENTER_SIZE_CHANGE +0
+. \}
+.END
+\#
+\#
+\# HDRFTR RIGHT
+\# ------------
+\# *Argument:
+\# <what to put in the right position of page header/footers>
+\# *Function:
+\# Creates or modifies string $HDRFTR_RIGHT.
+\# Creates register #USER_DEF_HDRFTR_RIGHT, which, if 1,
+\# overrides the $HDRFTR_RIGHT string created by default
+\# in DEFAULTS.
+\# *Notes:
+\# Default is document title.
+\#
+\# If the argument is the # character, simply prints the current
+\# page number.
+\#
+\# If the user wants to *incorporate* the page number into the string,
+\# \*[PAGE#] must be used. For example, if the user wants to put
+\# an elipsis before the page number in the string, s/he should use
+\# ...\*[PAGE#], not ...#
+\#
+.MAC HDRFTR_RIGHT END
+. nr #USER_DEF_HDRFTR_RIGHT 1
+. ds $HDRFTR_RIGHT \\$1
+.END
+\#
+\#
+\# HDRFTR RIGHT FAMILY
+\# -------------------
+\# *Argument:
+\# <family of header/footer right string>
+\# *Function:
+\# Creates or modifies string $HDRFTR_RIGHT_FAM.
+\#
+.MAC HDRFTR_RIGHT_FAMILY END
+. ds $HDRFTR_RIGHT_FAM \\$1
+.END
+\#
+\#
+\# HDRFTR RIGHT FONT
+\# -----------------
+\# *Argument:
+\# <font of header/footer right string>
+\# *Function:
+\# Creates or modifies string $HDRFTR_RIGHT_FT.
+\#
+.MAC HDRFTR_RIGHT_FONT END
+. ds $HDRFTR_RIGHT_FT \\$1
+.END
+\#
+\#
+\# HDRFTR RIGHT SIZE
+\# -----------------
+\# *Argument:
+\# <+|- number of points to in/decrease size of right string in
+\# header/footers (relative to header/footer size)>
+\# *Function:
+\# Creates or modifies string HDRFTR_RIGHT_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign. No space afterwards.
+\# Fractional point sizes are allowed.
+\# Default is -2 for printstyle TYPESET if all caps; otherwise -.5
+\# Has no effect in TYPEWRITE.
+\#
+.MAC HDRFTR_RIGHT_SIZE END
+. ds $HDRFTR_RIGHT_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# HDRFTR RIGHT CAPS
+\# -----------------
+\# *Argument:
+\# <none> | <anything>
+\# *Function:
+\# Turns capitalisation of $HDRFTR_RIGHT (typically, the title of
+\# the document) on or off.
+\# *Notes:
+\# Default is on.
+\#
+.MAC HDRFTR_RIGHT_CAPS END
+. ie '\\$1'' \{\
+. nr #HDRFTR_RIGHT_CAPS 1
+. \}
+. el \{\
+. nr #HDRFTR_RIGHT_CAPS 0
+. ds $HDRFTR_RIGHT_SIZE_CHANGE +0
+. \}
+.END
+\#
+\# HDRFTR RULE
+\# -----------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# If invoked via the alias HDRFTR_RULE_INTERNAL in HDRFTR, prints a rule
+\# under the header/footer. Otherwise, turns HDRFTR_RULE on or off.
+\#
+.MAC HDRFTR_RULE END \"To print rule under header/over footer.
+. ie '\\$0'HDRFTR_RULE_INTERNAL' \{\
+. ie \\n[#USERDEF_HDRFTR] \{\
+. nr #CAP_HEIGHT_ADJUST \\n[#HDRFTR_HEIGHT]
+. PT_SIZE 12
+. if \\n[#HEADERS_ON] \{ .ALD \\n[#HDRFTR_RULE_GAP]u \}
+. if \\n[#FOOTERS_ON] \{\
+. RLD \\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+1p
+. \}
+. PRINT \\l'\\n[#DOC_L_LENGTH]u'
+. br
+. \}
+. el \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT]
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. ie \\n[#LEFT_CAP_HEIGHT]>\\n[#CENTER_CAP_HEIGHT] \{\
+. nr #CAP_HEIGHT_ADJUST \\n[#LEFT_CAP_HEIGHT]
+. \}
+. el \{ .nr #CAP_HEIGHT_ADJUST \\n[#CENTER_CAP_HEIGHT] \}
+. ie \\n[#CAP_HEIGHT_ADJUST]>\\n[#RIGHT_CAP_HEIGHT] \{\
+. nr #CAP_HEIGHT_ADJUST \\n[#CAP_HEIGHT_ADJUST]
+. \}
+. el \{ .nr #CAP_HEIGHT_ADJUST \\n[#RIGHT_CAP_HEIGHT] \}
+. \}
+. PT_SIZE 12
+. if \\n[#HEADERS_ON] \{ .ALD \\n[#HDRFTR_RULE_GAP]u \}
+. if \\n[#FOOTERS_ON] \{\
+. RLD \\n[#LEAD]u*3u+\\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+1p
+. \}
+. PRINT \\l'\\n[#DOC_L_LENGTH]u'
+. br
+. \}
+. \}
+. el \{\
+. ie '\\$1'' \{ .nr #HDRFTR_RULE 1 \}
+. el \{ .nr #HDRFTR_RULE 0 \}
+. \}
+.END
+\#
+\#
+.ALIAS HDRFTR_RULE_INTERNAL HDRFTR_RULE
+\#
+\#
+\# HDRFTR PLAIN
+\# ------------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Sets the family, font, and point size of all strings in
+\# header/footers to the same family and point size as running
+\# text. Font for the header/footer becomes roman throughout.
+\#
+.MAC HDRFTR_PLAIN END
+. HDRFTR_FAMILY \\*[$DOC_FAM]
+. HDRFTR_PT_SIZE \\n[#DOC_PT_SIZE]
+. HDRFTR_LEFT_FAMILY \\*[$DOC_FAM]
+. HDRFTR_LEFT_FONT R
+. HDRFTR_LEFT_SIZE +0
+. HDRFTR_LEFT_CAPS OFF
+. HDRFTR_CENTER_FAMILY \\*[$DOC_FAM]
+. HDRFTR_CENTER_FONT R
+. HDRFTR_CENTER_SIZE +0
+. HDRFTR_CENTER_CAPS OFF
+. HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM]
+. HDRFTR_RIGHT_FONT R
+. HDRFTR_RIGHT_SIZE +0
+. HDRFTR_RIGHT_CAPS OFF
+.END
+\#
+\#
+\# SWITCH HDRFTR
+\# -------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Creates or modifies register #SWITCH_HDRFTR, used to switch
+\# default location of HDRFTR_LEFT and HDRFTR_RIGHT.
+\# *Notes:
+\# Typically, the author string appears at the left of header/footers,
+\# and the title string appears at the right. This switches the
+\# location of the two. Useful in conjuction with RECTO_VERSO to
+\# tweak switches on alternate pages to come out as the user wishes.
+\# The assumption of RECTO_VERSO is that the first page of the document
+\# (recto) is odd, and even though it has no header/footer, if it did have one,
+\# it would print as AUTHOR...CENTER...TITLE (or whatever strings
+\# the user has supplied for HDRFTR_LEFT/RIGHT), meaning that the
+\# next page, which does have a header/footer, will come out as
+\# TITLE...CENTER...AUTHOR (or whatever strings the user has
+\# supplied for HDRFTR_LEFT/RIGHT). SWITCH_HDRFTRS allows the user
+\# to get the desired string in the desired place on the desired
+\# recto/verso page.
+\#
+\# Default is OFF.
+\#
+.MAC SWITCH_HDRFTR END
+. ie '\\$1'' \{ .nr #SWITCH_HDRFTR 1 \}
+. el \{ .nr #SWITCH_HDRFTR 0 \}
+.END
+\#
+\#
+\# USER DEFINED HDRFTR RECTO
+\# -------------------------
+\# *Arguments:
+\# L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_recto_string>
+\# *Function:
+\# Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_RECTO_QUAD,
+\# stores string in $USERDEF_HDRFTR_RECTO.
+\# *Notes:
+\# For use when users don't want 3-part headers/footers, but rather
+\# want to design their own headers/footers and need different
+\# headers/footers on recto and verso pages.
+\#
+.MAC HDRFTR_RECTO END
+. nr #USERDEF_HDRFTR 1
+. if '\\$1'L' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 1 \}
+. if '\\$1'LEFT' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 1 \}
+. if '\\$1'C' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
+. if '\\$1'CENTER' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
+. if '\\$1'CENTRE' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \}
+. if '\\$1'R' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 3 \}
+. if '\\$1'RIGHT' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 3 \}
+. ds $USERDEF_HDRFTR_RECTO \\$2
+.END
+\#
+\#
+\# USER DEFINED HDRFTR VERSO
+\# -------------------------
+\# *Arguments:
+\# L | LEFT | C | CENTER | CENTER | R | RIGHT <hdrftr_verso_string>
+\# *Function:
+\# Toggles #USERDEF_HDRFTR on, stores quad as #USERDEF_HDRFTR_VERSO_QUAD,
+\# stores string in $USERDEF_HDRFTR_VERSO.
+\# *Notes:
+\# For use when users don't want 3-part headers/footers, but rather
+\# want to design their own headers/footers and need different
+\# headers/footers on recto and verso pages.
+\#
+.MAC HDRFTR_VERSO END
+. nr #USERDEF_HDRFTR 1
+. if '\\$1'L' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 1 \}
+. if '\\$1'LEFT' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 1 \}
+. if '\\$1'C' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
+. if '\\$1'CENTER' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
+. if '\\$1'CENTRE' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \}
+. if '\\$1'R' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 3 \}
+. if '\\$1'RIGHT' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 3 \}
+. ds $USERDEF_HDRFTR_VERSO \\$2
+.END
+\#
+\#
+\# PRINT FOOTER ON FIRST PAGE
+\# --------------------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Toggles register #PRINT_FOOTER_ON_PAGE_1
+\# *Notes:
+\# Lets user choose whether to print footer on first
+\# page of doc.
+\#
+.MAC FOOTER_ON_FIRST_PAGE END
+. ie '\\$1'' \{ .nr #PRINT_FOOTER_ON_PAGE_1 1 \}
+. el \{ .rr #PRINT_FOOTER_ON_PAGE_1 \}
+.END
+\#
+\#
+\# PRINT PAGE NUMBER ON FIRST PAGE
+\# -------------------------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Toggles register #PRINT_PAGENUM_ON_PAGE_1
+\# *Notes:
+\# Lets user choose whether to print page number on first
+\# page of doc and after collate when footers are on or page numbering
+\# has been user set at top of page.
+\#
+.MAC PAGENUM_ON_FIRST_PAGE END
+. ie '\\$1'' \{ .nr #PRINT_PAGENUM_ON_PAGE_1 1 \}
+. el \{ .rr #PRINT_PAGENUM_ON_PAGE_1 \}
+.END
+\#
+\#
+\# PRINT HEADER/FOOTER
+\# -------------------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Based on defaults or values entered by user, prints a
+\# three-part title at either the top or the bottom of the page.
+\# *Notes:
+\# Called from within either HEADER or FOOTER.
+\#
+.MAC PRINT_HDRFTR END
+. if \\n[#DOC_TYPE]=4 \{\
+. nr #SUITE \En[.pn]
+. \}
+. if \\n[#FOOTERS_ON] \{\
+. if \\n[#START_FOR_FOOTERS] \{\
+. rr #START_FOR_FOOTERS
+. if !\\n[#PRINT_FOOTER_ON_PAGE_1] \{ .return \}
+. \}
+. \}
+. if \\n[#HEADERS_ON] \{ .vs 0 \}
+. if \\n[#USERDEF_HDRFTR] \{\
+. PRINT_USERDEF_HDRFTR
+. return
+. \}
+. if \\n[#SWITCH_HDRFTR] \{\
+. ds $HDRFTR_TMP_SWITCH \\*[$HDRFTR_LEFT]
+. ds $HDRFTR_LEFT \\*[$HDRFTR_RIGHT]
+. ds $HDRFTR_RIGHT \\*[$HDRFTR_TMP_SWITCH]
+. ds $HDRFTR_TMP_SIZE_CHANGE_SWITCH \\*[$HDRFTR_LEFT_SIZE_CHANGE]
+. ds $HDRFTR_LEFT_SIZE_CHANGE \\*[$HDRFTR_RIGHT_SIZE_CHANGE]
+. ds $HDRFTR_RIGHT_SIZE_CHANGE \\*[$HDRFTR_TMP_SIZE_CHANGE_SWITCH]
+. nr #HDRFTR_TMP_CAPS_SWITCH \\n[#HDRFTR_LEFT_CAPS]
+. nr #HDRFTR_LEFT_CAPS \\n[#HDRFTR_RIGHT_CAPS]
+. nr #HDRFTR_RIGHT_CAPS \\n[#HDRFTR_TMP_CAPS_SWITCH]
+. rr #HDRFTR_TMP_CAPS_SWITCH
+. rm $HDRFTR_TMP_SWITCH
+. rm $HDRFTR_TMP_SIZE_CHANGE_SWITCH
+. nr #SWITCH_HDRFTR 0
+. \}
+. nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#FOOTERS_ON] \{\
+. di NULL
+. SIZESPECS
+. nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
+. di
+. \}
+. if o \{ .RIGHT \}
+. if e \{ .LEFT \}
+. if \\n[#RECTO_VERSO]=0 \{ .LEFT \}
+. if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS \}
+. ie '\\*[$HDRFTR_LEFT]'#' \{\
+. PRINT \\n[#PAGENUMBER]
+. \}
+. el \{\
+. ie !'\\*[$HDRFTR_LEFT]'' \{ . PRINT \\*[$HDRFTR_LEFT] \}
+. el \{ .PRINT \& \}
+. \}
+. if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS OFF \}
+. CENTER
+. if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS \}
+. ie '\\*[$HDRFTR_CENTER]'#' \{\
+. PRINT \\v'-(\\n[#LEAD]u*1u)'\\n[#PAGENUMBER]
+. \}
+. el \{\
+. ie !'\\*[$HDRFTR_CENTER]'' \{ .PRINT \\v'-(\\n[#LEAD]u*1u)'\\*[$HDRFTR_CENTER] \}
+. el \{ .PRINT \& \}
+. \}
+. if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS OFF \}
+. if o \{ .LEFT \}
+. if e \{ .RIGHT \}
+. if \\n[#RECTO_VERSO]=0 \{ .RIGHT \}
+. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS \}
+. ie '\\*[$HDRFTR_RIGHT]'#' \{\
+. PRINT \\v'-(\\n[#LEAD]u*2u)'\\n[#PAGENUMBER]
+. \}
+. el \{\
+. ie !'\\*[$HDRFTR_RIGHT]'' \{ .PRINT \v'-(\\n[#LEAD]u*2u)'\\*[$HDRFTR_RIGHT] \}
+. el \{ .PRINT \& \}
+. \}
+. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS OFF \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$HDRFTR_LEFT_FAM]
+. FT \\*[$HDRFTR_LEFT_FT]
+. PT_SIZE \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_LEFT_SIZE_CHANGE]
+. if \\n[#FOOTERS_ON] \{\
+. di NULL
+. SIZESPECS
+. nr #LEFT_CAP_HEIGHT \\n[#CAP_HEIGHT]
+. di
+. \}
+. if o \{ .LEFT \}
+. if e \{ .RIGHT \}
+. if \\n[#RECTO_VERSO]=0 \{ .LEFT \}
+. if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS \}
+. ie '\\*[$HDRFTR_LEFT]'#' \{ .PRINT \\n[#PAGENUMBER] \}
+. el \{\
+. ie !'\\*[$HDRFTR_LEFT]'' \{ . PRINT \\*[$HDRFTR_LEFT] \}
+. el \{ .PRINT \& \}
+. \}
+. if \\n[#HDRFTR_LEFT_CAPS] \{ .CAPS OFF \}
+. FAMILY \\*[$HDRFTR_CENTER_FAM]
+. FT \\*[$HDRFTR_CENTER_FT]
+. PT_SIZE \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_CENTER_SIZE_CHANGE]
+. if \\n[#FOOTERS_ON] \{\
+. di NULL
+. SIZESPECS
+. nr #CENTER_CAP_HEIGHT \\n[#CAP_HEIGHT]
+. di
+. \}
+. CENTER
+. if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS \}
+. ie '\\*[$HDRFTR_CENTER]'#' \{\
+. PRINT \\v'-(\\n[#LEAD]u*1u)'\\n[#PAGENUMBER]
+. \}
+. el \{\
+. ie !'\\*[$HDRFTR_CENTER]'' \{ .PRINT \\v'-(\\n[#LEAD]u*1u)'\\*[$HDRFTR_CENTER] \}
+. el \{ .PRINT \& \}
+. \}
+. if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS OFF \}
+. FAMILY \\*[$HDRFTR_RIGHT_FAM]
+. FT \\*[$HDRFTR_RIGHT_FT]
+. PT_SIZE \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_RIGHT_SIZE_CHANGE]
+. if \\n[#FOOTERS_ON] \{\
+. di NULL
+. SIZESPECS
+. nr #RIGHT_CAP_HEIGHT \\n[#CAP_HEIGHT]
+. di
+. \}
+. if o \{ .RIGHT \}
+. if e \{ .LEFT \}
+. if \\n[#RECTO_VERSO]=0 \{ .RIGHT \}
+. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS \}
+. ie '\\*[$HDRFTR_RIGHT]'#' \{\
+. PRINT \\v'-(\\n[#LEAD]u*2u)'\\n[#PAGENUMBER]
+. \}
+. el \{\
+. ie !'\\*[$HDRFTR_RIGHT]'' \{ .PRINT \v'-(\\n[#LEAD]u*2u)'\\*[$HDRFTR_RIGHT] \}
+. el \{ .PRINT \& \}
+. \}
+. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS OFF \}
+. \}
+. if \\n[#HDRFTR_RULE] \{\
+. HDRFTR_RULE_INTERNAL
+. \}
+.END
+\#
+\#
+\# PRINT USER DEFINED HEADER/FOOTER
+\# --------------------------------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Based on defaults or values entered by user, prints a single part
+\# (i.e. not 3-part) title at either the top or the bottom of the page.
+\# *Notes:
+\# Called from within PRINT_HDRFTR.
+\#
+.MAC PRINT_USERDEF_HDRFTR END
+. nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
+. fc ^ #
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$HDRFTR_FAM]
+. FT R
+. PT_SIZE \\n[#HDRFTR_PT_SIZE]u
+. \}
+. ie \\n[#RECTO_VERSO] \{\
+. if o \{\
+. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT \}
+. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
+. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT \}
+. PRINT \\*[$USERDEF_HDRFTR_RECTO]
+. EL
+. if \\n[#FOOTERS_ON] \{\
+. di NULL
+. SIZESPECS
+. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
+. di
+. \}
+. \}
+. if e \{\
+. ie !'\\*[$USERDEF_HDRFTR_VERSO]'' \{\
+. if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=1 \{ .LEFT \}
+. if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=2 \{ .CENTER \}
+. if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=3 \{ .RIGHT \}
+. \}
+. PRINT \\*[$USERDEF_HDRFTR_VERSO]
+. EL
+. if \\n[#FOOTERS_ON] \{\
+. di NULL
+. SIZESPECS
+. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
+. di
+. \}
+. el \{\
+. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT \}
+. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
+. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT \}
+. PRINT \\*[$USERDEF_HDRFTR_RECTO]
+. EL
+. if \\n[#FOOTERS_ON] \{\
+. di NULL
+. SIZESPECS
+. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
+. di
+. \}
+. \}
+. \}
+. \}
+. el \{\
+. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT \}
+. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \}
+. if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT \}
+. PRINT \\*[$USERDEF_HDRFTR_RECTO]
+. EL
+. if \\n[#FOOTERS_ON] \{\
+. di NULL
+. SIZESPECS
+. nr #HDRFTR_HEIGHT \\n[#CAP_HEIGHT]
+. di
+. \}
+. \}
+. fc
+. if \\n[#HDRFTR_RULE] \{\
+. HDRFTR_RULE_INTERNAL
+. \}
+.END
+\#
+\#
+\# +++HEADERS+++
+\#
+\# HEADERS (off or on)
+\# -------------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Turns headers at the top of the page off or on.
+\# *Notes:
+\# Default is on.
+\#
+.MAC HEADERS END
+. ie '\\$1'' \{ .nr #HEADERS_ON 1 \}
+. el \{ .nr #HEADERS_ON 0 \}
+.END
+\#
+\#
+\# HEADER MARGIN
+\# -------------
+\# *Argument:
+\# <amount of space between top of page and header>
+\# *Function:
+\# Creates or modifies register #HEADER_MARGIN to hold amount
+\# of space between top of page and header.
+\# *Notes:
+\# Requires unit of measure. Default is 4P+6p, measured top-of-page
+\# to baseline.
+\#
+.MAC HEADER_MARGIN END
+. nr #HEADER_MARGIN (\\$1)
+.END
+\#
+\#
+\# HEADER GAP
+\# ----------
+\# *Argument:
+\# <amount of space between header and running text>
+\# *Function:
+\# Creates or modifies register #HEADER_GAP to hold amount
+\# of space between header and running text.
+\# *Notes:
+\# Default is 1P+6p.
+\#
+.MAC HEADER_GAP END
+. nr #HEADER_GAP (\\$1)
+.END
+\#
+\#
+\# HEADER
+\# ------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Prints header appropriate to DOC_TYPE, PRINTSTYLE, and COPYSTYLE.
+\# *Notes:
+\# In order to convert the title string to caps in the header (in the
+\# event that the user enters .TITLE in caps/lc), I've used
+\# quad left, quad centre, and quad right to arrange the three bits
+\# of the header, rather than .tl. This allows the use of the CAPS macro.
+\# The downside is that I have to add \\v'-(\\n[#LEAD]u*#) in order
+\# for -Tlatin1 output to align the header/footer strings on the baseline.
+\# The console output still isn't brilliant, but at least it's
+\# comprehensible.
+\#
+.MAC HEADER END
+. PROCESS_FN_LEFTOVER
+. nr #FN_COUNT_FOR_COLS 0 1
+. if \\n[#RESET_FN_NUMBER] \{ .nr #FN_NUMBER 0 1 \}
+. po \\n[#DOC_L_MARGIN]u
+. if \\n[#RECTO_VERSO] \{\
+. nr #DOC_LR_MARGIN_TMP \\n[#DOC_L_MARGIN]
+. DOC_LEFT_MARGIN \\n[#DOC_R_MARGIN]u
+. DOC_RIGHT_MARGIN \\n[#DOC_LR_MARGIN_TMP]u
+. \}
+. ev HEADER
+. if \\n[#PRINT_STYLE]=1 \{ .vs 0 \}
+. if \\n[#PRINT_STYLE]=2 \{ .LS 0 \}
+. sp |\\n[#HEADER_MARGIN]u-1v
+. ll \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$HDRFTR_FAM]
+. FT R
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
+. \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12\\*[$HDRFTR_SIZE_CHANGE]
+. \}
+. nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
+. if \\n[#CAPS_ON] \{\
+. nr #CAPS_WAS_ON 1
+. CAPS OFF
+. \}
+. if \\n[#UNDERLINE_ON] \{\
+. nr #UNDERLINE_WAS_ON 1
+. UNDERLINE OFF
+. \}
+. ie \\n[#HEADERS_ON] \{\
+. PRINT_HDRFTR
+. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+. \}
+. el \{\
+. ie \\n[#PAGE_NUM_V_POS]=1 \{\
+. ie \\n[#PAGINATE] \{\
+. PRINT_PAGE_NUMBER
+. sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+. \}
+. el \{ .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u \}
+. \}
+. el \{ .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u \}
+. \}
+. nr #PAGE_TOP \\n(nl
+. ev
+. po \\n[#L_MARGIN]u
+. if \\n[#RECTO_VERSO] \{\
+. nr #L_MARGIN +\\n[#L_MARGIN_DIFF]
+. \}
+. if \\n[#CAPS_WAS_ON] \{\
+. CAPS
+. rr #CAPS_WAS_ON
+. \}
+. if \\n[#UNDERLINE_WAS_ON] \{\
+. UNDERLINE
+. rr #UNDERLINE_WAS_ON
+. \}
+. if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
+. if \\n[#QUOTE] \{\
+. ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
+. el \{\
+. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
+. po \\n[#Q_OFFSET]u
+. \}
+. \}
+. if \\n[#EPIGRAPH] \{\
+. ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
+. el \{\
+. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
+. po \\n[#EPI_OFFSET]u
+. \}
+. \}
+. ie \\n[#EPIGRAPH] \{\
+. ie !\\n[#EPI_ACTIVE] \{\
+. ns
+. rr #EPI_ACTIVE
+. \}
+. el \{\
+. ie \\n[#EPI_FITS] \{ .ns \}
+. el \{ .ALD \\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u \}
+. \}
+. \}
+. el \{ .ns \}
+. ns
+. if \\n[#COLUMNS] \{\
+. if \\n[#RECTO_VERSO] \{ .COLUMNS \\n[#NUM_COLS] \\n[#GUTTER]u \}
+. nr #COL_NUM 0 1
+. mk dc
+. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
+. ll \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. if \\n[#QUOTE] \{\
+. po +(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
+. \}
+. if \\n[#EPIGRAPH] \{\
+. if \\n[#EPI_ACTIVE] \{\
+. ie \\n[#EPI_FITS] \{ . \}
+. el \{ .nr dc -\\n[#EPI_LEAD_DIFF] \}
+. \}
+. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+(\\n[#PP_INDENT]u*\\n[#EPI_OFFSET_VALUE]u)
+. \}
+. \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#SLANT_ON] \{\
+. if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
+. \}
+. \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++FOOTERS+++
+\#
+\# FOOTERS (off or on)
+\# -------------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Turns footers at the bottom of the page off or on.
+\# *Notes:
+\# Default is off. If on, page numbers automatically go at
+\# the top, centered, unless pagination has been turned off,
+\# or the pagenumber position has been changed to left or right.
+\#
+.MAC FOOTERS END
+. ie '\\$1'' \{\
+. nr #FOOTERS_ON 1
+. PAGE_NUM_POS TOP CENTER
+. \}
+. el \{ .nr #FOOTERS_ON 0 \}
+.END
+\#
+\#
+\# FOOTER MARGIN
+\# -------------
+\# *Argument:
+\# <footer margin>
+\# *Function:
+\# Creates or modifies register #FOOTER_MARGIN which holds the
+\# amount of space to leave between the page number and the bottom
+\# of the page.
+\# *Notes:
+\# Unit of measure required. Default is 3P.
+\#
+.MAC FOOTER_MARGIN END
+. ie \\n%>0 \{ .nr #FOOTER_MARGIN (\\$1) \}
+. el \{ . \}
+.END
+\#
+\#
+\# FOOTER GAP
+\# ----------
+\# *Argument:
+\# <distance from end of running text to page # or footer>
+\# *Function:
+\# Creates or modifies register #FOOTER_GAP which holds the
+\# amount of space to leave between running text and the page number.
+\# *Notes:
+\# Requires unit of measure. Default is 3P. Measured baseline to
+\# baseline.
+\#
+.MAC FOOTER_GAP END
+. ie \\n%>0 \{ .nr #FOOTER_GAP (\\$1) \}
+. el \{ . \}
+.END
+\#
+\#
+\# FOOTER
+\# ------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Places footer at bottom of page if #FOOTERS=1, otherwise
+\# places page number at bottom of page (if #PAGINATE=1).
+\# Page numbers are in arabic or roman according to COPYSTYLE.
+\# DRAFT starts the document at page 1 regardless of PAGENUMBER.
+\# FINAL respects PAGENUMBER.
+\#
+.MAC FOOTER END
+. ev PAGE_BOTTOM
+. nr #L_MARGIN_DIFF \\n[#L_MARGIN]-\\n[#DOC_L_MARGIN]
+. if !\\n[#FN_DEFER] \{\
+. nr #DIVER_DEPTH 0
+. if \\n[#FN_COUNT] \{\
+. sp |\\n[#PAGE_LENGTH]u-(\\n[#B_MARGIN]u+\\n[#FN_DEPTH]u)
+. po \\n[#DOC_L_MARGIN]u
+. if \\n[#COLUMNS] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \}
+. nf
+. FOOTNOTES
+. rm FOOTNOTES
+. if '\\n(.z'FN_OVERFLOW' \{\
+. di
+. nr #FN_OVERFLOW_DEPTH \\n[#DIVER_DEPTH]
+. \}
+. nr #FN_COUNT 0
+. if \\n[#COL_NEXT] \{ .nr #COL_NUM \\n-[#COL_NUM] \}
+. \}
+. \}
+. ie \\n[#COLUMNS] \{\
+. ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{ .DO_FOOTER \}
+. el \{\
+. sp |\\n(dcu
+. po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
+. PROCESS_FN_LEFTOVER
+. if !\\n[#EPIGRAPH] \{ .rr #COL_NEXT \}
+. if !\\n[#QUOTE] \{ .rr #COL_NEXT \}
+. if \\n[#QUOTE] \{\
+. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
+. if \\n[#COLUMNS] \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) \}
+. po \\n[#Q_OFFSET]u
+. \}
+. if \\n[#EPIGRAPH] \{\
+. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
+. if \\n[#COLUMNS] \{ .nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) \}
+. po \\n[#EPI_OFFSET]u
+. \}
+. ie \\n[#EPIGRAPH] \{\
+. ie !\\n[#EPI_ACTIVE] \{\
+. ns
+. rr #EPI_ACTIVE
+. \}
+. el \{\
+. sp |\\n(dcu+(\\n[#DOC_LEAD]u-\\n[#EPI_LEAD]u)
+. rr #EPI_ACTIVE
+. \}
+. \}
+. el \{ .ns \}
+. ev
+. \}
+. ns
+. \}
+. el \{ .DO_FOOTER \}
+.END
+\#
+\#
+\# PROCESS FOOTER
+\# --------------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Prints footer (page number, or 3-part footer).
+\# Resets CAPS and UNDERLINE if they were on.
+\#
+.MAC DO_FOOTER END
+. sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u-1v
+. ev FOOTER
+. po \\n[#DOC_L_MARGIN]u
+. ll \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. FAMILY \\*[$HDRFTR_FAM]
+. FT R
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. \}
+. nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
+. if \\n[#CAPS_ON] \{\
+. nr #CAPS_WAS_ON 1
+. CAPS OFF
+. \}
+. if \\n[#UNDERLINE_ON] \{\
+. nr #UNDERLINE_WAS_ON 1
+. UNDERLINE OFF
+. \}
+. ie \\n[#FOOTERS_ON] \{\
+. PRINT_HDRFTR
+. \}
+. el \{\
+. if \\n[#PAGINATE] \{\
+. if \\n[#PAGE_NUM_V_POS]=2 \{ .PRINT_PAGE_NUMBER \}
+. \}
+. \}
+. if \\n[#CAPS_WAS_ON] \{\
+. CAPS
+. rr #CAPS_WAS_ON
+. \}
+. if \\n[#UNDERLINE_WAS_ON] \{\
+. UNDERLINE
+. rr #UNDERLINE_WAS_ON
+. \}
+. ev
+. bp
+. ev
+.END
+\#
+\# ====================================================================
+\#
+\# +++HEADS+++
+\#
+\# ---Head numbers---
+\#
+\# NUMBER HEADS
+\# ------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Toggles register #NUMBER_HEAD; sets incrementing register #HEAD_NUM.
+\# *Notes:
+\# Default is OFF.
+\#
+.MAC NUMBER_HEADS END
+. ie '\\$1'' \{\
+. nr #NUMBER_HEAD 1
+. if !\\n[#HEAD_NUM] \{ .nr #HEAD_NUM 0 1 \}
+. \}
+. el \{ .rr #NUMBER_HEAD \}
+.END
+\#
+\#
+\# RESET HEAD NUMBER
+\# -----------------
+\# *Arguments:
+\# <none> | <desired head number>
+\# *Function:
+\# Resets incrementing register #HEAD_NUM to 1 or, if there's
+\# an argument, to user supplied number.
+\# *Notes:
+\# Also resets subhead and parahead numbers. If this is not
+\# desired, subhead and parahead numbers may be reset individually.
+\#
+.MAC RESET_HEAD_NUMBER END
+. ie '\\$1'' \{\
+. nr #HEAD_NUM 0 1
+. nr #SH_NUM 0 1
+. nr #PH_NUM 0 1
+. \}
+. el \{\
+. nr #HEAD_NUM \\$1-1 1
+. nr #SH_NUM 0 1
+. nr #PH_NUM 0 1
+. \}
+.END
+\#
+\#
+\# NUMBER SUBHEADS
+\# ---------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Toggles register #NUMBER_SH; sets incrementing register #SH_NUM.
+\# *Notes:
+\# Default is OFF.
+\#
+.MAC NUMBER_SUBHEADS END
+. ie '\\$1'' \{\
+. nr #NUMBER_SH 1
+. if !\\n[#SH_NUM] \{ .nr #SH_NUM 0 1 \}
+. \}
+. el \{ .rr #NUMBER_SH \}
+.END
+\#
+\#
+\# RESET SUBHEAD NUMBER
+\# --------------------
+\# *Arguments:
+\# <none> | <desired subhead number>
+\# *Function:
+\# Resets incrementing register #SH_NUM to 1 or, if there's
+\# an argument, to user supplied number.
+\# *Notes:
+\# When the subhead number is reset, it resets the parahead number as
+\# well. If this behaviour is not what's wanted, RESET_SUBHEAD_NUMBER
+\# allows the user to set the parahead number to whatever s/he desires.
+\#
+.MAC RESET_SUBHEAD_NUMBER END
+. ie '\\$1'' \{ .nr #SH_NUM 0 1 \}
+. el \{\
+. nr #SH_NUM \\$1-1 1
+. nr #PH_NUM 0 1
+. \}
+.END
+\#
+\#
+\# NUMBER PARAHEADS
+\# ----------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Toggles register #NUMBER_PH; sets incrementing register #PH_NUM.
+\# *Notes:
+\# Default is OFF.
+\#
+.MAC NUMBER_PARAHEADS END
+. ie '\\$1'' \{\
+. nr #NUMBER_PH 1
+. if !\\n[#PH_NUM] \{ .nr #PH_NUM 0 1 \}
+. \}
+. el \{ .rr #NUMBER_PH \}
+.END
+\#
+\#
+\# RESET PARAHEAD NUMBER
+\# ---------------------
+\# *Arguments:
+\# <none> | <desired parahead number>
+\# *Function:
+\# Resets incrementing register #PH_NUM to 1 or, if there's
+\# an argument, to user supplied number.
+\# *Notes:
+\# Resetting the parahead number resets the parahead number
+\# only.
+\#
+.MAC RESET_PARAHEAD_NUMBER END
+. ie '\\$1'' \{ .nr #PH_NUM 0 1 \}
+. el \{ nr #SH_NUM \\$1-1 1 \}
+.END
+\#
+\#
+\# ---Main heads---
+\#
+\# HEAD FAMILY
+\# -----------
+\# *Argument:
+\# <family to use for section titles (main heads)>
+\# *Function:
+\# Creates or modifies string $HEAD_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC HEAD_FAMILY END
+. ds $HEAD_FAM \\$1
+.END
+\#
+\#
+\# HEAD FONT
+\# ---------
+\# *Argument:
+\# <font to use for section titles (main heads)>
+\# *Function:
+\# Creates or modifies string $HEAD_FT.
+\# *Notes:
+\# Default is bold.
+\#
+.MAC HEAD_FONT END
+. ds $HEAD_FT \\$1
+.END
+\#
+\#
+\# HEAD SIZE
+\# ---------
+\# *Argument:
+\# <+|- number of points by which to in/decrease point size of
+\# section titles (relative to running text)>
+\# *Function:
+\# Creates or modifies string $HEAD_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a - or + sign with no space afterwards.
+\# Fractional point sizes are allowed.
+\# Default +1 for printstyle TYPESET; +0 for TYPEWRITE.
+\#
+.MAC HEAD_SIZE END
+. ds $HEAD_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# HEAD QUAD
+\# ---------
+\# *Arguments:
+\# L | LEFT | R | RIGHT | C | CENTER | CENTRE
+\# *Function:
+\# Creates or modifies string $HEAD_QUAD.
+\# *Notes:
+\# Default is CENTER.
+\#
+.MAC HEAD_QUAD END
+. ds $HEAD_QUAD \\$1
+.END
+\#
+\#
+\# HEAD CAPS
+\# ---------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Creates or modifies register #HEAD_CAPS.
+\# *Notes:
+\# Default is on.
+\#
+.MAC HEAD_CAPS END
+. ie '\\$1'' \{ .nr #HEAD_CAPS 1 \}
+. el \{ .nr #HEAD_CAPS 0 \}
+.END
+\#
+\#
+\# HEAD SPACE
+\# ----------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Creates register #HEAD_SPACE, which toggles whether the space
+\# before heads is 1 extra line space ("off") or 2 ("on"). Used only
+\# in PRINTSTYLE TYPESET.
+\# *Notes:
+\# Default is on.
+\#
+.MAC HEAD_SPACE END
+. ie '\\$1'' \{ .nr #HEAD_SPACE 1 \}
+. el \{ .nr #HEAD_SPACE 0 \}
+.END
+\#
+\#
+\# HEAD UNDERLINE
+\# --------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Creates or modifies register #HEAD_UNDERLINE.
+\# *Notes:
+\# Default is on.
+\#
+.MAC HEAD_UNDERLINE END
+. ie '\\$1'' \{ .nr #HEAD_UNDERLINE 1 \}
+. el \{ .nr #HEAD_UNDERLINE 0 \}
+.END
+\#
+\#
+\# MAIN HEAD
+\# ---------
+\# *Arguments:
+\# "text of main head" ["text of main head"] ...
+\# *Function:
+\# In TYPEWRITE, prints main heads centered, all caps, underlined.
+\# In TYPESET, prints bold main heads 1 point larger than running
+\# text, all caps, underlined.
+\# *Notes:
+\# The HEAD macro requires that double-quotes (") surround
+\# each line of text.
+\#
+.MAC HEAD END
+. br
+. nr #ARG_NUM 0 1
+. nr #HEAD 1
+. ev HEAD
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+. if \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. CHECK_INDENT
+. QUAD \\*[$HEAD_QUAD]
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. vs \\n[#DOC_LEAD]u
+. UNDERLINE OFF
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$HEAD_FAM]
+. FT \\*[$HEAD_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$HEAD_SIZE_CHANGE]
+. LS \\n[#DOC_LEAD]u
+. \}
+. if r#QUOTE \{ .rr #QUOTE \}
+. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
+. if \\n[#PRINT_STYLE]=1 \{ .ne 3 \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. ie \\n[#HEAD_SPACE] \{ .ne 5 \}
+. el \{ .ne 3 \}
+. \}
+. ie \\n[#START] \{\
+. if \\n[#DOC_HEADER]=0 \{ . \}
+. \}
+. el \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. if !\\n[#LINEBREAK] \{\
+. ALD \\n[#DOC_LEAD]u
+. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. ie \\n[#PP_SPACE] \{\
+. ie \\n[#END_QUOTE] \{ . \}
+. el \{\
+. if !\\n[#LINEBREAK] \{\
+. if \\n[#HEAD_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. \}
+. el \{\
+. ie \\n[#HEAD_SPACE] \{ .ALD \\n[#DOC_LEAD]u*2u \}
+. el \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. if \\n[#END_QUOTE] \{\
+. if !\\n[#Q_FITS] \{\
+. RLD \\n[#DOC_LEAD]u
+. if \\n[#PP_ACTIVE] \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. if \\n[#Q_AT_TOP] \{\
+. RLD \\n[#DOC_LEAD]u
+. if \\n[#Q_AT_TOP] \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. if \\n[#LINEBREAK] \{\
+. if \\n[#HEAD_SPACE] \{ .RLD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. \}
+. if \\n[#HEAD_CAPS] \{ .CAPS \}
+. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
+. ie \\n[#NUMBER_HEAD] \{\
+. ie \\n[#ARG_NUM]=0 \{\
+. br
+. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\}
+. el \{ .UNDERSCORE "\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\}
+. br
+. \}
+. el \{\
+. br
+. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\$[\\n+[#ARG_NUM]]\}
+. el \{ .UNDERSCORE "\\$[\\n+[#ARG_NUM]]\}
+. br
+. \}
+. \}
+. el \{\
+. br
+. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\$[\\n+[#ARG_NUM]]\}
+. el \{ .UNDERSCORE "\\$[\\n+[#ARG_NUM]]\}
+. br
+. \}
+. \}
+. REMOVE_INDENT
+. CAPS OFF
+. ev
+. ALD \\n[#DOC_LEAD]u
+. RESET_SUBHEAD_NUMBER
+. RESET_PARAHEAD_NUMBER
+. if r#START \{ .rr #START \}
+. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
+. if r#QUOTE \{ .rr #QUOTE \}
+. if r#Q_FITS \{ .rr #Q_FITS \}
+. if r#END_QUOTE \{ .rr #END_QUOTE \}
+. if r#LINEBREAK \{ .rr #LINEBREAK \}
+. if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
+. if r#PP_ACTIVE \{ .rr #PP_ACTIVE \}
+. rr #ARG_NUM
+. nr #PP 0
+.END
+\#
+\#
+\# ---Subheads---
+\#
+\# SUBHEAD FAMILY
+\# --------------
+\# *Argument:
+\# <family to use in subheads>
+\# *Function:
+\# Creates or modifies string $SH_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC SUBHEAD_FAMILY END
+. ds $SH_FAM \\$1
+.END
+\#
+\#
+\# SUBHEAD FONT
+\# --------------
+\# *Argument:
+\# <font to use in subheads>
+\# *Function:
+\# Creates or modifies string $SH_FT.
+\# *Notes:
+\# Default is bold.
+\#
+.MAC SUBHEAD_FONT END
+. ds $SH_FT \\$1
+.END
+\#
+\#
+\# SUBHEAD SIZE
+\# ------------
+\# *Argument:
+\# <+|- number of points by which to in/decrease point size of subheads
+\# (relative to running text)>
+\# *Function:
+\# Creates or modifies string $SH_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign. No space afterwards.
+\# Fractional point sizes are allowed.
+\# Default is +.5 for printstyle TYPESET; +0 for TYPEWRITE.
+\#
+.MAC SUBHEAD_SIZE END
+. ds $SH_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# SUBHEAD QUAD
+\# ------------
+\# *Argument:
+\# L | LEFT | R | RIGHT | C | CENTER | CENTRE
+\# *Function:
+\# Creates or modifies string $SH_QUAD.
+\# *Notes:
+\# Default is LEFT for both TYPESET and TYPEWRITE.
+\#
+.MAC SUBHEAD_QUAD END
+. ds $SH_QUAD \\$1
+.END
+\#
+\#
+\# SUBHEAD
+\# -------
+\# *Arguments:
+\# "text of subhead" ["text of subhead"] ...
+\# *Function:
+\# In TYPEWRITE, prints subheads underlined.
+\# In TYPESET, prints subheads bold, .5 points larger than running
+\# text.
+\# In both styles, a line space precedes the subhead, and a small
+\# amount of lead comes after.
+\# *Notes:
+\# As with the HEAD macro, double-quotes (") must surround
+\# each line of text.
+\#
+.MAC SUBHEAD END
+. br
+. nr #ARG_NUM 0 1
+. if r#QUOTE \{ .rr #QUOTE \}
+. if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
+. ev SUBHEAD
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+. if \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. CHECK_INDENT
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. vs \\n[#DOC_LEAD]u
+. QUAD \\*[$SH_QUAD]
+. UNDERLINE OFF
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$SH_FAM]
+. FT \\*[$SH_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$SH_SIZE_CHANGE]
+. LS \\n[#DOC_LEAD]u
+. QUAD \\*[$SH_QUAD]
+. \}
+. if \\n[#PRINT_STYLE]=1 \{ .nr #SH_LEAD_ADJUST \\n[#LEAD]/5 \}
+. if \\n[#PRINT_STYLE]=2 \{ .nr #SH_LEAD_ADJUST \\n[#LEAD]/8 \}
+. ie \\n[#START] \{ . \}
+. el \{\
+. ie ( \\n[#TRAP_DISTANCE] < (\\n[#DOC_LEAD]u*2u) ) \{\
+. ie \\n[#COLUMNS] \{ .COL_NEXT \}
+. el \{ .bp \}
+. \}
+. el \{\
+. ie \\n[#HEAD]=1 \{ . \}
+. el \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. ie \\n[#PP_SPACE]=1 \{\
+. ie !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
+. el \{ .RLD \\n[#DOC_LEAD]u \}
+. \}
+. el \{\
+. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. \}
+. \}
+. \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
+. ie \\n[#NUMBER_SH] \{\
+. ie \\n[#ARG_NUM]=0 \{\
+. ie \\n[#NUMBER_HEAD] \{\
+. br
+. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\n[#HEAD_NUM].\\n+[#SH_NUM]\0\\$[\\n+[#ARG_NUM]]
+. br
+. \}
+. el \{\
+. br
+. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]
+. br
+. \}
+. \}
+. el \{\
+. br
+. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]\}
+. el \{ .UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]\}
+. br
+. \}
+. \}
+. el \{\
+. br
+. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
+. br
+. \}
+. \}
+. \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. ie \\n[#PP_SPACE]=0 \{\
+. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
+. ie \\n[#NUMBER_SH] \{\
+. ie \\n[#ARG_NUM]=0 \{\
+. ie \\n[#NUMBER_HEAD] \{\
+. br
+. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\n[#HEAD_NUM].\\n+[#SH_NUM]\0\\$[\\n+[#ARG_NUM]]
+. br
+. \}
+. el \{\
+. br
+. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]
+. br
+. \}
+. \}
+. el \{\
+. br
+. PRINT "\\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
+. br
+. \}
+. \}
+. el \{\
+. br
+. PRINT "\\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]
+. br
+. \}
+. \}
+. \}
+. el \{\
+. ALD \\n[#DOC_LEAD]u
+. if \\n[#HEAD]=1 \{ .RLD \\n[#DOC_LEAD]u \}
+. if \\n[#END_QUOTE] \{ .RLD \\n[#DOC_LEAD]u \}
+. if \\n[#EPIGRAPH] \{ .RLD \\n[#DOC_LEAD]u \}
+. while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\
+. PRINT "\\$[\\n+[#ARG_NUM]]
+. \}
+. ALD \\n[#DOC_LEAD]u
+. \}
+. \}
+. REMOVE_INDENT
+. ev
+. RESET_PARAHEAD_NUMBER
+. if r#START \{ .rr #START \}
+. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
+. if r#Q_FITS \{ .rr #Q_FITS \}
+. if r#END_QUOTE \{ .rr #END_QUOTE \}
+. if r#LINEBREAK \{ .rr #LINEBREAK \}
+. nr #PP 0
+. nr #HEAD 2
+.END
+\#
+\# ---Paragraph heads---
+\#
+\# PARAHEAD FAMILY
+\# ---------------
+\# *Argument:
+\# <family to use in paraheads>
+\# *Function:
+\# Creates or modifies string $PH_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC PARAHEAD_FAMILY END
+. ds $PH_FAM \\$1
+.END
+\#
+\#
+\# PARAHEAD FONT
+\# -------------
+\# *Argument:
+\# <font to use in paraheads>
+\# *Function:
+\# Creates or modifies string $PH_FT.
+\# *Notes:
+\# Default is bold italic for TYPESET; underlined for TYPEWRITE.
+\#
+.MAC PARAHEAD_FONT END
+. ds $PH_FT \\$1
+.END
+\#
+\#
+\# PARAHEAD SIZE
+\# -------------
+\# *Argument:
+\# <+|- number of points by which to in/decrease point size of subheads
+\# (relative to running text)>
+\# *Function:
+\# Creates or modifies string $PH_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign. No space afterwards.
+\# Fractional point sizes are allowed. No unit of measure, please.
+\# Default is +.5 for printstyle TYPESET; +0 for TYPEWRITE.
+\#
+.MAC PARAHEAD_SIZE END
+. ds $PH_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# PARAHEAD INDENT
+\# ---------------
+\# *Argument:
+\# <size of indent>
+\# *Function:
+\# Creates or modifies register #PH_INDENT.
+\# *Notes:
+\# Default is 1/2 #PP_INDENT for TYPESET and TYPEWRITE.
+\#
+.MAC PARAHEAD_INDENT END
+. nr #PH_INDENT (\\$1)
+.END
+\#
+\#
+\# PARAHEAD
+\# --------
+\# *Arguments:
+\# "<para head>"
+\# *Function:
+\# Deposits a paragraph head at the start and into the body of a
+\# paragraph.
+\# *Notes:
+\# PARAHEAD *must* come after PP.
+\#
+.MAC PARAHEAD END
+. if \\n[#SLANT_ON] \{\
+. nr #SLANT_WAS_ON 1
+\E*[SLANTX]
+. \}
+. ie \\n[#PP]=1 \{\
+. if \\n[#INDENT_FIRST_PARAS] \{\
+. ti \\n[#PH_INDENT]u
+. \}
+. \}
+. el \{ .ti \\n[#PH_INDENT]u \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. UNDERLINE OFF
+. ie \\n[#NUMBER_PH] \{\
+. if \\n[#NUMBER_HEAD] \{\
+. ie \\n[#NUMBER_SH] \{\
+. UNDERSCORE "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1"
+\0
+. \}
+. el \{\
+. UNDERSCORE "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n+[#PH_NUM].\\ \\$1
+\0
+. \}
+. \}
+. ie \\n[#NUMBER_SH] \{\
+. if !\\n[#NUMBERED] \{\
+. UNDERSCORE "\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1
+\0
+. \}
+. \}
+. el \{\
+. if !\\n[#NUMBERED] \{\
+. UNDERSCORE "\\n+[#PH_NUM].\\ \\$1
+\0
+. \}
+. \}
+. \}
+. el \{\
+. UNDERSCORE "\\$1
+\0
+. \}
+. if \\n[#SLANT_WAS_ON] \{\
+. if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
+. if \\n[#SLANT_MEANS_SLANT] \{\
+\E*[SLANT]\c
+. \}
+. rr #SLANT_WAS_ON
+. \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAM \\*[$PH_FAM]
+. FT \\*[$PH_FT]
+. PT_SIZE \\*[$PH_SIZE_CHANGE]
+. ie \\n[#NUMBER_PH] \{\
+. if \\n[#NUMBER_HEAD] \{\
+. ie \\n[#NUMBER_SH] \{\
+. PRINT "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
+. \}
+. el \{\
+. PRINT "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
+. \}
+. \}
+. ie \\n[#NUMBER_SH] \{\
+. if !\\n[#NUMBERED] \{\
+. PRINT "\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
+. \}
+. \}
+. el \{\
+. if !\\n[#NUMBERED] \{\
+. PRINT "\\n+[#PH_NUM].\0\\$1\h'.6m'\c"
+. \}
+. \}
+. \}
+. el \{\
+. PRINT "\\$1\h'.6m'\c"
+. \}
+. FAMILY \\*[$DOC_FAM]
+. FT \\*[$PP_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u
+. if \\n[#SLANT_WAS_ON] \{\
+. rr #SLANT_WAS_ON 1
+\E*[SLANT]\c
+. \}
+. \}
+. rr #NUMBERED
+.END
+\#
+\#
+\# ====================================================================
+\#
+\# +++LINE BREAKS+++
+\#
+\# LINEBREAK CHARACTER
+\# -------------------
+\# *Arguments:
+\# [character] [iterations] [vertical adjustment]
+\# *Function:
+\# Allows user to specify a line break character and the number
+\# of times to repeat it horiontally.
+\# *Notes:
+\# Without an argument, LINEBREAK_CHAR will deposit a blank line.
+\#
+\# Vertical adjustment requires a unit of measure (most likely
+\# "p"), and has to be preceded by +|-
+\#
+.MAC LINEBREAK_CHAR END
+. nr #REPEAT 1
+. ds $LINEBREAK_CHAR \\$1
+. ds $LINEBREAK_CHAR_V_ADJ \\$3
+. if '\\*[$LINEBREAK_CHAR_V_ADJ]'' \{\
+. ds $LINEBREAK_CHAR_V_ADJ +0
+. \}
+. while \\$2>\\n[#REPEAT] \{\
+. as $LINEBREAK_CHAR "\\ \\$1
+. nr #REPEAT \\n[#REPEAT]+1
+. \}
+. rr #REPEAT
+.END
+\#
+\#
+\# LINE BREAK
+\# ----------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Deposits line break character.
+\# *Notes:
+\# If $LINEBREAK_CHAR is blank, simply advances 2 line spaces.
+\#
+.MAC LINEBREAK END
+. if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
+. po \\n[#DOC_L_MARGIN]u
+. ie '\\*[$LINEBREAK_CHAR]'' \{ .ALD \\n[#DOC_LEAD]u*2 \}
+. el \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. ie \\n[#END_QUOTE] \{ . \}
+. el \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. ie \\n[#END_QUOTE] \{ . \}
+. el \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. CENTER
+. PRINT \\v'\\*[$LINEBREAK_CHAR_V_ADJ]'\\*[$LINEBREAK_CHAR]\\v'\\*[$LINEBREAK_CHAR_V_ADJ]'
+. if \\n[#PRINT_STYLE]=1 \{ .ALD \\n[#DOC_LEAD]u \}
+. if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#DOC_LEAD]u \}
+. QUAD \\*[$DOC_QUAD]
+. \}
+. nr #LINEBREAK 1
+. if r#QUOTE \{ .rr #QUOTE \}
+. if r#END_QUOTE \{ .rr #END_QUOTE \}
+. nr #PP 0
+.END
+\#
+\# ====================================================================
+\#
+\# +++PARAGRAPHS+++
+\#
+\# PARAGRAPH FONT
+\# --------------
+\# *Argument:
+\# <font of running text>
+\# *Function:
+\# Creates or modifies string $PP_FT.
+\# *Notes:
+\# Affects all paragraphs.
+\#
+.MAC PP_FONT END
+. if \\n[#IGNORE] \{ .return \}
+. br
+. ds $PP_FT \\$1
+. FT \\*[$PP_FT]
+.END
+\#
+\#
+\# PARAGRAPH INDENT
+\# ----------------
+\# *Argument:
+\# <amount to indent paragraphs in running text (ipPcm)>
+\# *Function:
+\# Allows user to change the default para indent. The change will
+\# affect the indent of QUOTEs and BLOCKQUOTEs as well.
+\# *Notes:
+\# Default for printstyle TYPEWRITE is 1/2-inch. Default for
+\# printstyle TYPESET is 2 ems. The defaults are set in
+\# PRINTSTYLE, not DEFAULTS.
+\#
+.MAC PARA_INDENT END
+. nr #PP_INDENT (\\$1)
+.END
+\#
+\#
+\# INDENT FIRST PARAGRAPHS
+\# -----------------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# By default, the first para of a document, as well as the first
+\# paras of blockquotes and block-style epigraphs are not indented.
+\# When invoked, this macro will indent all paras.
+\# *Notes:
+\# Default is OFF.
+\#
+.MAC INDENT_FIRST_PARAS END
+. ie '\\$1'' \{ .nr #INDENT_FIRST_PARAS 1 \}
+. el \{ .rr #INDENT_FIRST_PARAS \}
+.END
+\#
+\#
+\# INTER-PARAGRAPH SPACING
+\# -----------------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Adds a line space between paragraphs in body text. Block quotes
+\# are unaffected.
+\# *Notes:
+\# Default is OFF. PARA_SPACE ON is not recommended for use
+\# with PRINTSTYLE TYPEWRITE.
+\#
+.MAC PARA_SPACE END
+. ie '\\$1'' \{ .nr #PP_SPACE 1 \}
+. el \{ .rr #PP_SPACE \}
+.END
+\#
+\#
+\# PARAGRAPH
+\# ---------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Figures out what to do with paragraphs under differing conditions.
+\# *Notes:
+\# For the time being, there's no automatic widow/orphan control.
+\# Controlling them isn't just a matter of establishing an arbitrary
+\# number of lines needed for a para, since groff doesn't then
+\# handle single line paragraphs gracefully. Usually, the whole
+\# page needs to be tweaked.
+\#
+\# Note the use of transparent line break (\!.br) to get
+\# PP to work within blockquotes and epigraphs.
+\#
+\# PP_STYLE 1 = regular paras; 2 = blockquotes, epigraphs
+\#
+.MAC PP END
+. br
+. if \\n[#DOC_TYPE]=4 \{\
+. if !'\\n(.z'' \{ .di \}
+. if \\n[#DATE] \{\
+. nf
+. DATE
+. QUAD \\*[$DOC_QUAD]
+. ALD \\n[#DOC_LEAD]u*2u
+. rr #DATE
+. \}
+. if \\n[#TO] \{\
+. nf
+. TO_ADDRESS
+. ALD \\n[#DOC_LEAD]u
+. rr #TO
+. \}
+. if \\n[#FROM] \{\
+. nf
+. FROM_ADDRESS
+. ALD \\n[#DOC_LEAD]u
+. rr #FROM
+. \}
+. if \\n[#GREETING] \{\
+. nf
+. GREETING
+. ALD \\n[#DOC_LEAD]u
+. rr #GREETING
+. \}
+. \}
+. rr #PP_ACTIVE
+. if r#Q_AT_TOP \{ .rr #Q_AT_TOP \}
+. if \\n[#PP_STYLE]=1 \{\
+. if \\n[#ENDNOTE] \{\
+. nr #RESET_PARA_SPACE \\n[#PP_SPACE]
+. ie \\n[#EN_PP_SPACE] \{ .PARA_SPACE \}
+. el \{ .PARA_SPACE OFF \}
+. \}
+. br
+. if !\\n[#ENDNOTE] \{ .po \\n[#L_MARGIN]u \}
+. if \\n[#COLUMNS] \{\
+. if !\\n[#ENDNOTE] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \}
+. \}
+. if \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \}
+. ie \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. vs \\n[#DOC_LEAD]u
+. QUAD \\*[$DOC_QUAD]
+. UNDERLINE OFF
+. if \\n[#SLANT_ON] \{\
+. if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \}
+. \}
+. \}
+. el \{\
+. ie \\n[#ENDNOTE] \{\
+. FAMILY \\*[$EN_FAM]
+. FT \\*[$EN_FT]
+. PT_SIZE \\n[#EN_PS]u
+. LS \\n[#DOC_LEAD]u
+. QUAD \\*[$EN_QUAD]
+. \}
+. el \{\
+. FAMILY \\*[$DOC_FAM]
+. FT \\*[$PP_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u
+. LS \\n[#DOC_LEAD]u
+. QUAD \\*[$DOC_QUAD]
+. \}
+. \}
+. ie \\n[#PP]=0 \{\
+. if \\n[#INDENT_FIRST_PARAS] \{\
+. ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
+. el \{ .ti \\n[#PP_INDENT]u \}
+. if '\\n(.z'END_NOTES' \{\
+. ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
+. \}
+. \}
+. if r#END_QUOTE \{\
+. if \\n[#END_QUOTE] \{\
+. if !\\n[#LINEBREAK] \{\
+. ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
+. el \{ .ti \\n[#PP_INDENT]u \}
+. if '\\n(.z'END_NOTES' \{\
+. ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
+. \}
+. \}
+. \}
+. \}
+. \}
+. el \{\
+. br
+. if \\n[#PP_SPACE] \{\
+. if \\n[#PRINT_STYLE]=2 \{\
+. ie \\n[#END_QUOTE] \{\
+. rr #END_QUOTE
+. \}
+. el \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. ie \\n[#INDENT_ACTIVE] \{ .ti \\n[#INDENT]u+\\n[#PP_INDENT]u \}
+. el \{ .ti \\n[#PP_INDENT]u \}
+. if '\\n(.z'END_NOTES' \{\
+. ti \\n[#EN_PP_INDENT]u+\\n[#EN_TEXT_INDENT]u
+. \}
+. \}
+. if r#START \{ .rr #START \}
+. if r#QUOTE \{ .rr #QUOTE \}
+. if r#END_QUOTE \{ .rr #END_QUOTE \}
+. if r#HEAD \{ .rr #HEAD \}
+. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
+. if r#Q_FITS \{ .rr #Q_FITS \}
+. if r#LINEBREAK \{ .rr #LINEBREAK \}
+. if \\n[#ENDNOTE] \{\
+. ie \\n[#RESET_PARA_SPACE] \{ .PARA_SPACE \}
+. el \{ .PARA_SPACE OFF \}
+. \}
+. if \\n[#CONDENSE] \{\
+\E*[COND]\c
+. \}
+. if \\n[#EXTEND]=1 \{\
+\E*[EXT]\c
+. \}
+. nr #PP +1
+. \}
+. if \\n[#PP_STYLE]=2 \{\
+\!. br
+. if \\n[#BROKEN_QUOTE] \{\
+. ie \\n(nl=\\n[#PAGE_TOP] \{ .nr #Q_PP 1 \}
+. el \{ .nr #Q_PP 0 \}
+. rr #BROKEN_QUOTE
+. \}
+. ie \\n[#Q_PP]=0 \{\
+. if \\n[#INDENT_FIRST_PARAS] \{\
+. ti \\n[#PP_INDENT]u/2u
+. \}
+. if \\n[#ENDNOTE] \{\
+. ie \\n[#INDENT_FIRSTS] \{ .ti \\n[#PP_INDENT]u/2u \}
+. el \{ .ti 0 \}
+. \}
+. \}
+. el \{\
+. ti \\n[#PP_INDENT]u/2u
+. \}
+. if \\n[#CONDENSE] \{\
+\E*[COND]\c
+. \}
+. if \\n[#EXTEND]=1 \{\
+\E*[EXT]\c
+. \}
+. nr #Q_PP +1
+. \}
+. nr #PP_ACTIVE 1
+.END
+\#
+\# ====================================================================
+\#
+\# +++QUOTES+++
+\#
+\# ---Line for line (poetic) quotes---
+\#
+\# QUOTE FAMILY
+\# ------------
+\# *Argument:
+\# <family to use in line for line quotes>
+\# *Function:
+\# Creates or modifies string $QUOTE_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC QUOTE_FAMILY END
+. ds $QUOTE_FAM \\$1
+.END
+\#
+\#
+\# QUOTE FONT
+\# ----------
+\# *Argument:
+\# <font to use in line for line quotes>
+\# *Function:
+\# Creates or modifies string $QUOTE_FT.
+\# *Notes:
+\# Default is italic for TYPESET.
+\#
+.MAC QUOTE_FONT END
+. ds $QUOTE_FT \\$1
+.END
+\#
+\#
+\# QUOTE SIZE
+\# ----------
+\# *Argument:
+\# <-|+ number of points by which to de/increase point size of
+\# line for line quotes (relative to running text)>
+\# *Function:
+\# Creates or modifies string $QUOTE_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a - or + sign with no space afterwards.
+\# Fractional point sizes are allowed.
+\# Default is +0.
+\#
+.MAC QUOTE_SIZE END
+. ds $QUOTE_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# UNDERLINE QUOTES
+\# ----------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Creates or modifies register #UNDERLINE_QUOTES (toggle).
+\# If on, line for line quotes are underlined when printstyle
+\# is TYPEWRITE.
+\# *Notes:
+\# Default is ON for printstyle TYPEWRITE.
+\#
+.MAC UNDERLINE_QUOTES END
+. ie '\\$1'' \{ .nr #UNDERLINE_QUOTES 1 \}
+. el \{ .rr #UNDERLINE_QUOTES \}
+.END
+\#
+\#
+\# QUOTE INDENT
+\# ------------
+\# *Argument:
+\# <value by which to multiply PP_INDENT for indented quoted text>
+\# *Function:
+\# Creates or modifies register #Q_OFFSET_VALUE.
+\# *Notes:
+\# Default is 3 for typeset; 2 for typewrite
+\#
+.MAC QUOTE_INDENT END
+. nr #Q_OFFSET_VALUE \\$1
+.END
+\#
+\#
+\# ALWAYS FULLSPACE QUOTES
+\# -----------------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Toggles register #FULLSPACE_QUOTES.
+\# *Notes:
+\# If user doesn't like the default 1/2 line space above and below
+\# quotes, s/he can turn it off here. Has no effect in TYPEWRITE.
+\#
+.MAC ALWAYS_FULLSPACE_QUOTES END
+. if '\\$1'' \{ .nr #FULLSPACE_QUOTES 1 \}
+. el \{ .rr #FULLSPACE_QUOTES \}
+.END
+\#
+\#
+\# QUOTE
+\# -----
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Indents quoted text on a line for line basis, or turns QUOTE off.
+\# *Notes:
+\# Owing to the need to bottom align TYPESET pages, quoted text gets
+\# diverted so its depth can be measured (in DO_QUOTE) for determining
+\# how much space to put before and after.
+\#
+.MAC QUOTE END
+. br
+\# **Uncomment the next line to prevent orphaned quote lines.
+\#. ne 1
+. ie '\\$1'' \{\
+. ev QUOTE
+. nr #QUOTE 1
+. di P_QUOTE
+. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
+. ta \\n(.lu
+. if \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
+. ta \\n(.lu
+. \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. vs \\n[#DOC_LEAD]u
+. LEFT
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$QUOTE_FAM]
+. FT \\*[$QUOTE_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$QUOTE_SIZE_CHANGE]
+. LS \\n[#DOC_LEAD]u
+. LEFT
+. \}
+. nr #Q_TOP \\n(nl
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#UNDERLINE_QUOTES] \{\
+. FT I
+. \}
+. \}
+. \}
+. el \{ .DO_QUOTE \}
+.END
+\#
+\#
+\# ---Blockquotes---
+\#
+\# BLOCKQUOTE FAMILY
+\# -----------------
+\# *Argument:
+\# <family to use in blockquotes>
+\# *Function:
+\# Creates or modifies string $BQUOTE_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC BLOCKQUOTE_FAMILY END
+. ds $BQUOTE_FAM \\$1
+.END
+\#
+\#
+\# BLOCKQUOTE FONT
+\# ---------------
+\# *Argument:
+\# <font to use in blockquotes>
+\# *Function:
+\# Creates or modifies string $BQUOTE_FT.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC BLOCKQUOTE_FONT END
+. ds $BQUOTE_FT \\$1
+.END
+\#
+\#
+\# BLOCKQUOTE SIZE
+\# ---------------
+\# *Argument:
+\# <-|+ number of points by which to de/increase point size of blockquotes
+\# (relative to running text)>
+\# *Function:
+\# Creates or modifies string $BQUOTE_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a - or + sign with no space afterwards.
+\# Fractional point sizes are allowed.
+\# Default is -1 for printstyle TYPESET; +0 for TYPEWRITE.
+\#
+.MAC BLOCKQUOTE_SIZE END
+. ds $BQUOTE_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# BLOCKQUOTE QUAD
+\# ---------------
+\# *Arguments:
+\# <quad to use in blockquotes>
+\# *Function:
+\# Creates or modifies string $BQUOTE_QUAD.
+\# *Notes:
+\# Default is LEFT.
+\#
+.MAC BLOCKQUOTE_QUAD END
+. ds $BQUOTE_QUAD \\$1
+.END
+\#
+\#
+\# BLOCKQUOTE
+\# ----------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Indents quoted text in fill mode and shortens line length
+\# accordingly, or turns BLOCKQUOTE off.
+\# *Notes:
+\# Owing to the need to bottom align TYPESET pages, quoted text gets
+\# diverted so its depth can be measured (in DO_QUOTE) for determining
+\# how much space to put before and after.
+\#
+\# .PP after blockquote is optional if there's only one para,
+\# but REQUIRED if there's more than one.
+\#
+.MAC BLOCKQUOTE END
+. br
+. ie '\\$1'' \{\
+. ev BLOCKQUOTE
+. nr #QUOTE 2
+. nr #PP_STYLE 2
+. nr #Q_PP 0
+. di B_QUOTE
+. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+. if \\n[#ENDNOTE] \{\
+. if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
+. ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+. \}
+. if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
+. ll \\n[#L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+. \}
+. \}
+. ta \\n(.lu
+. CHECK_INDENT
+. if \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+. if \\n[#ENDNOTE] \{\
+. if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
+. ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+. \}
+. if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
+. ll \\n[#COL_L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+. \}
+. \}
+. ta \\n(.lu
+. \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. vs \\n[#DOC_LEAD]u
+. QUAD LEFT
+. HY OFF
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$BQUOTE_FAM]
+. FT \\*[$BQUOTE_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$BQUOTE_SIZE_CHANGE]
+. LS \\n[#DOC_LEAD]u
+. if \\n[#ENDNOTE] \{\
+. PT_SIZE \\n[#EN_PS]u\\*[$BQUOTE_SIZE_CHANGE]
+. \}
+. QUAD \\*[$BQUOTE_QUAD]
+. HY
+. \}
+. nr #Q_TOP \\n(nl
+. if \\n[#INDENT_FIRST_PARAS] \{\
+. ie !\\n[#ENDNOTE] \{\
+. if \\n[#PRINT_STYLE]=1 \{ .ti \\n[#PP_INDENT]u/2u \}
+. if \\n[#PRINT_STYLE]=2 \{ .ti \\n[#PP_INDENT]u/2u \}
+. \}
+. el \{\
+. if \\n[#INDENT_FIRSTS]=1 \{\
+. if \\n[#PRINT_STYLE]=1 \{ .ti \\n[#EN_PP_INDENT]u/2u \}
+. if \\n[#PRINT_STYLE]=2 \{ .ti \\n[#EN_PP_INDENT]u/2u \}
+. \}
+. \}
+. \}
+. \}
+. el \{ .DO_QUOTE \}
+.END
+\#
+\#
+\# DO QUOTE
+\# --------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Ends the diversion P_QUOTE or B_QUOTE. Spaces them according to
+\# PRINT_STYLE, whether there's inter-paragraph spacing, and page
+\# position. TYPEWRITE treats spacing the same way in all circumstance
+\# (viz. an extra line space). TYPESET puts in only half
+\# line spaces if the entire quote plus 1 line of body under the quote
+\# fits on the the page; otherwise it puts in a full extra blank
+\# line. (This is to ensure the page remains bottom aligned).
+\#
+.MAC DO_QUOTE END
+. di
+. REMOVE_INDENT
+. ev
+\# **Change *1 to *2 in next line to prevent orphans after quotes
+. if \\n[#ENDNOTE] \{\
+. nr #RESET_QUOTE_SPACING \\n[#FULLSPACE_QUOTES]
+. ALWAYS_FULLSPACE_QUOTES
+. \}
+. nr #Q_DEPTH \\n[#DIVER_DEPTH]+(\\n[#LEAD]*1)
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#START]=1 \{ . \}
+. if \\n[#START]=0 \{\
+. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. if \\n[#HEAD] \{\
+. if \\n[#HEAD]=1 \{ .RLD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. ie \\n[#PP_SPACE] \{\
+. ie \\n[#HEAD]>0 \{ . \}
+. el \{\
+. ie \\n[#START] \{ . \}
+. el \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. el \{\
+. ie \\n[#Q_DEPTH]<\\n[#TRAP_DISTANCE] \{\
+. nr #Q_FITS 1
+. ie \\n[#HEAD]=1 \{ . \}
+. el \{\
+. ie \\n[#START] \{ . \}
+. el \{\
+. ie \\n[#FULLSPACE_QUOTES] \{\
+. ALD \\n[#DOC_LEAD]u
+. \}
+. el \{ .ALD \\n[#DOC_LEAD]u/2u \}
+. \}
+. \}
+. \}
+. el \{\
+. rr #Q_FITS
+. ie r#HEAD \{\
+. if \\n[#HEAD]=1 \{ . \}
+. \}
+. el \{ .ALD \\n[#EN_LEAD]u \}
+. \}
+. \}
+. \}
+. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
+. if \\n[#COLUMNS] \{\
+. nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
+. \}
+. if !\\n[#ENDNOTE] \{ .po \\n[#Q_OFFSET]u \}
+. if \\n[#ENDNOTE] \{\
+. in +\\n[#EN_PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u
+. \}
+. if \\n[#QUOTE]=1 \{\
+. nf
+. P_QUOTE
+. if !\\n[#START] \{ .rr #QUOTE \}
+. \}
+. if \\n[#QUOTE]=2 \{\
+. nf
+. B_QUOTE
+. \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. ALD \\n[#DOC_LEAD]u
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. ie \\n[#START] \{\
+. ie \\n[#PP_SPACE] \{ . \}
+. el \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. el \{\
+. ie \\n[#PP_SPACE] \{ . \}
+. el \{\
+. ie \\n[#HEAD]=1 \{ .ALD \\n[#DOC_LEAD]u \}
+. el \{\
+. ie \\n[#Q_FITS] \{\
+. ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\
+. nr #Q_AT_TOP 1
+. ALD \\n[#DOC_LEAD]u
+. \}
+. el \{\
+. ie \\n[#FULLSPACE_QUOTES] \{ .ALD \\n[#DOC_LEAD]u \}
+. el \{ .ALD \\n[#DOC_LEAD]u/2u \}
+. \}
+. \}
+. el \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. \}
+. \}
+. if \\n[#ENDNOTE] \{ .nr #FULLSPACE_QUOTES \\n[#RESET_QUOTE_SPACING] \}
+. if r#HEAD \{ .rr #HEAD \}
+. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
+. rr #Q_PP
+. rr #LINEBREAK
+. nr #PP_STYLE 1
+. nr #END_QUOTE 1
+. if !\\n[#ENDNOTE] \{ .po \\n[#L_MARGIN]u \}
+. if \\n[#ENDNOTE] \{\
+. in \\n[#EN_TEXT_INDENT]u
+. \}
+. if \\n[#COLUMNS] \{\
+. if !\\n[#ENDNOTE] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \}
+. if \\n[#ENDNOTE] \{\
+. in \\n[#EN_TEXT_INDENT]u
+. \}
+. \}
+. ie !\\n[#ENDNOTE] \{\
+. nr #RESET_PP_INDENT \\n[#PP_INDENT]
+. PARA_INDENT 0
+. PP
+. PARA_INDENT \\n[#RESET_PP_INDENT]u
+. QUAD \\*[$DOC_QUAD]
+. \}
+. el \{\
+. nr #RESET_EN_PP_INDENT \\n[#EN_PP_INDENT]
+. ENDNOTE_PARA_INDENT 0
+. PP
+. ENDNOTE_PARA_INDENT \\n[#RESET_EN_PP_INDENT]u
+. QUAD \\*[EN_QUAD]
+. \}
+.END
+\#
+\# ====================================================================
+\#
+\# BREAK QUOTE
+\# -----------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Ends the diversion P_QUOTE or B_QUOTE, breaks to a new
+\# page, and reinvokes BLOCKQUOTE.
+\# *Notes:
+\# Because quotes go into a diversion before they're output,
+\# footnotes in quotes that cross pages behave erratically. The footnote
+\# isn't processed until the diversion ends, hence the footnote
+\# marker in the quote isn't always correct for the new page (it's
+\# picked up from the old one). BREAK_QUOTE is a workaround for
+\# this problem.
+\#
+.MAC BREAK_QUOTE END
+. br
+. di
+. nr #BROKEN_QUOTE 1
+. REMOVE_INDENT
+. ev
+. nr #Q_DEPTH \\n[#DIVER_DEPTH]+(\\n[#LEAD]*1)
+. if \\n[#PRINT_STYLE]=1 \{\
+. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
+. if \\n[#HEAD] \{\
+. if \\n[#HEAD]=1 \{ .RLD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. ie \\n[#PP_SPACE] \{\
+. ie \\n[#HEAD]=1 \{ . \}
+. el \{\
+. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. el \{\
+. rr #Q_FITS
+. ie r#HEAD \{\
+. if \\n[#HEAD]=1 \{ . \}
+. \}
+. el \{ .ALD \\n[#DOC_LEAD]u \}
+. \}
+. \}
+. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
+. if \\n[#COLUMNS] \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) \}
+. po \\n[#Q_OFFSET]u
+. if \\n[#QUOTE]=1 \{\
+. nf
+. P_QUOTE
+. if !\\n[#START] \{ .rr #QUOTE \}
+. \}
+. if \\n[#QUOTE]=2 \{\
+. nf
+. B_QUOTE
+. \}
+. if r#HEAD \{ .rr #HEAD \}
+. if r#EPIGRAPH \{ .rr #EPIGRAPH \}
+. rr #Q_PP
+. rr #LINEBREAK
+. nr #PP_STYLE 1
+. nr #END_QUOTE 1
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#UNDERLINE_QUOTES] \{\
+. UNDERLINE OFF
+. \}
+. \}
+. po \\n[#L_MARGIN]u
+. if \\n[#COLUMNS] \{ .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u \}
+. QUAD \\*[$DOC_QUAD]
+. sp |\\n[#PAGE_LENGTH]u \" To trip footer/header
+. BLOCKQUOTE
+.END
+\#
+\# ====================================================================
+\#
+\# +++PAGINATION+++
+\#
+\# PAGINATE
+\# --------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Turns page numbering off or on.
+\# *Notes:
+\# Page numbering is on by default with .PAPER.
+\# Default is on.
+\#
+.MAC PAGINATE END
+. ie '\\$1'' \{ .nr #PAGINATE 1 \}
+. el \{ .nr #PAGINATE 0 \}
+.END
+\#
+\#
+\# PAGENUMBER FAMILY
+\# -----------------
+\# *Argument:
+\# <family to use for page numbers>
+\# *Function:
+\# Creates or modifies string $PAGE_NUM_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC PAGENUM_FAMILY END
+. ds $PAGE_NUM_FAM \\$1
+.END
+\#
+\#
+\# PAGE NUMBER FONT
+\# ----------------
+\# *Arguments:
+\# <font to use for page numbers>
+\# *Function:
+\# Creates or modifies string $PAGE_NUM_FT.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC PAGENUM_FONT END
+. ds $PAGE_NUM_FT \\$1
+.END
+\#
+\#
+\# PAGE NUMBER SIZE
+\# ----------------
+\# *Argument:
+\# <+|- number of points by which to in/decrease point size of
+\# page numbers (relative to running text)>
+\# *Function:
+\# Creates or modifies string $PAGE_NUM_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign with no space afterward.
+\# Fractional point sizes are allowed.
+\# Default is +0.
+\#
+.MAC PAGENUM_SIZE END
+. ds $PAGE_NUM_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# PAGE NUMBER FORMAT
+\# ------------------
+\# *Arguments:
+\# DIGIT | ROMAN | roman | ALPHA | alpha
+\# *Function:
+\# Assigns user entered format to #PAGENUMBER.
+\#
+.MAC PAGENUM_STYLE END
+. nr #PAGENUM_STYLE_SET 1
+. if '\\$1'DIGIT' \{\
+. ds $PAGENUM_STYLE \\$1
+. af #PAGENUMBER 1
+. \}
+. if '\\$1'ROMAN' \{\
+. ds $PAGENUM_STYLE \\$1
+. af #PAGENUMBER I
+. \}
+. if '\\$1'roman' \{\
+. ds $PAGENUM_STYLE \\$1
+. af #PAGENUMBER i
+. \}
+. if '\\$1'ALPHA' \{\
+. ds $PAGENUM_STYLE \\$1
+. af #PAGENUMBER A
+. \}
+. if '\\$1'alpha' \{\
+. ds $PAGENUM_STYLE \\$1
+. af #PAGENUMBER a
+. \}
+.END
+\#
+\#
+\# HYPHENS AROUND PAGE NUMBERS
+\# ---------------------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Creates or modifies register #PAGE_NUM_HYPHENS.
+\# Used to dis/enable hyphens on either side of page numbers.
+\# *Notes:
+\# Default is on.
+\#
+.MAC PAGENUM_HYPHENS END
+. nr #PAGE_NUM_HYPHENS_SET 1
+. ie '\\$1'' \{ .nr #PAGE_NUM_HYPHENS 1 \}
+. el \{ .rr #PAGE_NUM_HYPHENS \}
+.END
+\#
+\#
+\# PAGENUMBER POSITION
+\# -------------------
+\# *Arguments:
+\# TOP | BOTTOM LEFT | CENTER | RIGHT
+\# *Function:
+\# Creates or modifies various PAGE_NUM_H | V_POS registers.
+\# Used to position page numbers.
+\# *Notes:
+\# Default is center/bottom.
+\#
+.MAC PAGENUM_POS END
+. nr #PAGE_NUM_POS_SET 1
+. if '\\$1'TOP' \{ .nr #PAGE_NUM_V_POS 1 \}
+. if '\\$1'BOTTOM' \{ .nr #PAGE_NUM_V_POS 2 \}
+. if '\\$2'LEFT' \{ .nr #PAGE_NUM_H_POS 1 \}
+. if '\\$2'CENTER' \{ .nr #PAGE_NUM_H_POS 2 \}
+. if '\\$2'CENTRE' \{ .nr #PAGE_NUM_H_POS 2 \}
+. if '\\$2'RIGHT' \{ .nr #PAGE_NUM_H_POS 3 \}
+.END
+\#
+\#
+\# PRINT PAGE NUMBER
+\# -----------------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Prints page number if PAGEINATE=1.
+\#
+.MAC PRINT_PAGE_NUMBER END
+. ev PAGENUMBER
+. po \\n[#DOC_L_MARGIN]u
+. ll \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. FAMILY \\*[$PAGE_NUM_FAM]
+. FT \\*[$PAGE_NUM_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$PAGE_NUM_SIZE_CHANGE]
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. \}
+. if \\n[#PAGE_NUM_V_POS]=1 \{ .vs 0 \}
+. if o \{\
+. ie \\n[#PAGE_NUM_H_POS]=1 \{ .LEFT \}
+. el \{ .RIGHT \}
+. \}
+. if e \{\
+. ie \\n[#PAGE_NUM_H_POS]=1 \{ .RIGHT \}
+. el \{ .LEFT \}
+. \}
+. if \\n[#PAGE_NUM_H_POS]=2 \{.CENTER \}
+. if \\n[#RECTO_VERSO]=0 \{\
+. if \\n[#PAGE_NUM_H_POS]=1 \{ .LEFT \}
+. if \\n[#PAGE_NUM_H_POS]=2 \{ .CENTER \}
+. if \\n[#PAGE_NUM_H_POS]=3 \{ .RIGHT \}
+. \}
+. nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ]
+. ie \\n[#DRAFT_WITH_PAGENUM] \{\
+. ie !\\n[#REVISION] \{ .PRINT "\\*[$DRAFT_STRING] \\n[#DRAFT] / \\n[#PAGENUMBER]" \}
+. el \{ .PRINT "\\*[$DRAFT_STRING] \\n[#DRAFT], \\*[$REVISION_STRING] \\n[#REVISION] / \\n[#PAGENUMBER]" \}
+. \}
+. el \{\
+. ie \\n[#PAGE_NUM_HYPHENS] \{ .PRINT "- \\n[#PAGENUMBER] -" \}
+. el \{ .PRINT "\\n[#PAGENUMBER]" \}
+. \}
+. ev
+.END
+\#
+\# ====================================================================
+\#
+\# +++FOOTNOTES+++
+\#
+\# FOOTNOTE FAMILY
+\# --------------
+\# *Argument:
+\# <family to use in footnotes>
+\# *Function:
+\# Creates or modifies string $FN_FAM.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC FOOTNOTE_FAMILY END
+. ds $FN_FAM \\$1
+.END
+\#
+\#
+\# FOOTNOTE FONT
+\# --------------
+\# *Argument:
+\# <font to use in footnotes>
+\# *Function:
+\# Creates or modifies string $FN_FT.
+\# *Notes:
+\# Default is roman.
+\#
+.MAC FOOTNOTE_FONT END
+. ds $FN_FT \\$1
+.END
+\#
+\#
+\# FOOTNOTE SIZE
+\# ------------
+\# *Argument:
+\# <+|- number of points by which to in/decrease point size of footnotes
+\# (relative to running text)>
+\# *Function:
+\# Creates or modifies string $FN_SIZE_CHANGE.
+\# *Notes:
+\# Must be preceded by a +|- sign. No space afterwards.
+\# Fractional point sizes are allowed.
+\# Default is -2 for printstyle TYPESET; +0 for TYPEWRITE.
+\#
+.MAC FOOTNOTE_SIZE END
+. ds $FN_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# FOOTNOTE AUTOLEAD
+\# -----------------
+\# *Arguments:
+\# <autolead value for footnotes>
+\# *Function:
+\# Creates or modifies register #FN_AUTOLEAD.
+\# *Notes:
+\# Default is #DOC_LEAD/2 for TYPEWRITE; 2 for TYPESET
+\#
+.MAC FOOTNOTE_AUTOLEAD END
+. nr #FN_AUTOLEAD \\$1
+.END
+\#
+\#
+\# FOOTNOTE QUAD
+\# -------------
+\# *Arguments:
+\# <quad to use in footnotes>
+\# *Function:
+\# Creates or modifies string $FN_QUAD.
+\# *Notes:
+\# Default is same as running text.
+\#
+.MAC FOOTNOTE_QUAD END
+. ds $FN_QUAD \\$1
+.END
+\#
+\#
+\# FOOTNOTE MARKERS
+\# ----------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Turns generation of footnote markers on or off.
+\# *Notes:
+\# Default is on.
+\#
+.MAC FOOTNOTE_MARKERS END
+. ie '\\$1'' \{ .nr #FN_MARKERS 1 \}
+. el \{ .nr #FN_MARKERS 0 \}
+.END
+\#
+\#
+\# FOOTNOTE MARKER STYLE
+\# ---------------------
+\# *Arguments:
+\# STAR | NUMBER
+\# *Function:
+\# Sets register #FN_MARKER_STYLE, used in FOOTNOTE to determine
+\# the style of footnote markers.
+\# *Notes:
+\# 1=STAR; 2=NUMBER. Default is STAR.
+\#
+.MAC FOOTNOTE_MARKER_STYLE END
+. if '\\$1'STAR' \{\
+. nr #FN_MARKER_STYLE 1
+. \}
+. if '\\$1'NUMBER' \{\
+. nr #FN_MARKER_STYLE 2
+. \}
+.END
+\#
+\#
+\# RESET FOOTNOTE NUMBER
+\# ---------------------
+\# *Arguments:
+\# <none> | PAGE
+\# *Function:
+\# Resets register #FN_NUMBER to 1. If argument is PAGE, creates
+\# toggle #RESET_FN_NUMBER which is checked in HEADER. If 1,
+\# numbered footnotes on every page start at 1.
+\#
+.MAC RESET_FOOTNOTE_NUMBER END
+. ie '\\$1'' \{ .nr #FN_NUMBER 0 1 \}
+. el \{ .nr #RESET_FN_NUMBER 1 \}
+.END
+\#
+\#
+\# FOOTNOTE RULE LENGTH
+\# --------------------
+\# *Arguments:
+\# <length of rule used to separate footnotes from running text>
+\# *Function:
+\# Creates or modifies registers #FN_RULE_LENGTH.
+\# *Notes:
+\# Requires unit of measure (iPpcm).
+\# Default is 4P for both PRINTSTYLEs.
+\#
+.MAC FOOTNOTE_RULE_LENGTH END
+. nr #FN_RULE_LENGTH (\\$1)
+.END
+\#
+\#
+\# FOOTNOTE_RULE_ADJ
+\# -----------------
+\# *Arguments:
+\# <number of points to raise footnote rule from it's baseline position>
+\# *Function:
+\# Creates or modifies register #FN_RULE_ADJ.
+\# *Notes:
+\# Default is 3p for both TYPESTYLES.
+\#
+\# Requires unit of measure.
+\#
+.MAC FOOTNOTE_RULE_ADJ END
+. nr #FN_RULE_ADJ (\\$1)
+.END
+\#
+\#
+\# FOOTNOTE RULE
+\# -------------
+\# *Arguments:
+\# <none> | <anything>
+\# *Function:
+\# Turns printing of footnote separator rule on or off. If invoked as
+\# PRINT_FOOTNOTE_RULE, prints footnote separator rule.
+\# *Notes:
+\# Default is on.
+\#
+\# Invoked in FOOTNOTE (as PRINT_FOOTNOTE_RULE) as 1st line of a footnote
+\# if the footnote number (#FN_COUNT) is 1.
+\#
+.MAC FOOTNOTE_RULE END
+. ie '\\$0'PRINT_FOOTNOTE_RULE' \{\
+. if \\n[#FN_RULE]=0 \{ .RLD 1v \}
+\!. PT_SIZE 12 \"Not sure why these have to be transparently embedded, but they do.
+. RLD 1v
+. LEFT
+. PRINT \\v'-\\n[#FN_RULE_ADJ]u'\\l'\\n[#FN_RULE_LENGTH]u'\\v'+\\n[#FN_RULE_ADJ]u'
+\!. PT_SIZE \\n[#DOC_PT_SIZE]u\\*$[FN_SIZE_CHANGE]
+. QUAD \\*[$FN_QUAD]
+. \}
+. el \{\
+. ie '\\$1'' \{ .nr #FN_RULE 1 \}
+. el \{ .nr #FN_RULE 0 \}
+. \}
+.END
+\#
+\#
+\# FOOTNOTE
+\# --------
+\# *Arguments:
+\# <none> | INDENT L|LEFT|R|RIGHT|B|BOTH <indent value> > | <anything>
+\# *Function:
+\# Begins collecting and diverting footnote text if no argument
+\# given. Otherwise, ends diversion FOOTNOTES, measures footnote
+\# depth, and sets footnote trap.
+\# *Notes:
+\# The input line preceding a footnote call MUST terminate with \c
+\# or the footnote marker will be spaced away from the word it
+\# should be joined to.
+\#
+\# If FOOTNOTES is invoked with INDENT, the footnote will
+\# be indented. An indent style and an indent value must be given.
+\# Subsequent footnotes will NOT be indented; INDENT must be given
+\# for each footnote the user wants indented.
+\#
+.MAC FOOTNOTE END
+. ie '\\$1'' \{\
+. if \\n[#FN_MARKERS] \{\
+. if \\n[#CONDENSE] \{ \*[CONDX]\c \}
+. if \\n[#EXTEND] \{ \*[EXTX]\c \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#UNDERLINE_ON] \{\
+. nr #UNDERLINE_WAS_ON 1
+. UNDERLINE OFF
+. \}
+. \}
+. if !\\n[#NO_FN_MARKER] \{\
+. if \\n[#FN_MARKER_STYLE]=1 \{\
+. ie \\n[#FN_COUNT_FOR_COLS] \{\
+. if \\n[#FN_COUNT_FOR_COLS]=0 \{ .PRINT \*[BU3]* \}
+. if \\n[#FN_COUNT_FOR_COLS]=1 \{ .PRINT \*[BU3]\(dg \}
+. if \\n[#FN_COUNT_FOR_COLS]=2 \{ .PRINT \*[BU3]** \}
+. if \\n[#FN_COUNT_FOR_COLS]=3 \{ .PRINT \*[BU3]\(dg\(dg \}
+. if \\n[#FN_COUNT_FOR_COLS]=4 \{ .PRINT \*[BU3]*** \}
+. if \\n[#FN_COUNT_FOR_COLS]=5 \{ .PRINT \*[BU3]\(dg\(dg\(dg \}
+. if \\n[#FN_COUNT_FOR_COLS]=6 \{ .PRINT \*[BU3]**** \}
+. if \\n[#FN_COUNT_FOR_COLS]=7 \{ .PRINT \*[BU3]\(dg\(dg\(dg\(dg \}
+. if \\n[#FN_COUNT_FOR_COLS]=8 \{ .PRINT \*[BU3]***** \}
+. if \\n[#FN_COUNT_FOR_COLS]=9 \{ .PRINT \*[BU3]\(dg\(dg\(dg\(dg\(dg \}
+. \}
+. el \{\
+. if \\n[#FN_COUNT]=0 \{ .PRINT \*[BU3]* \}
+. if \\n[#FN_COUNT]=1 \{ .PRINT \*[BU3]\(dg \}
+. if \\n[#FN_COUNT]=2 \{ .PRINT \*[BU3]** \}
+. if \\n[#FN_COUNT]=3 \{ .PRINT \*[BU3]\(dg\(dg \}
+. if \\n[#FN_COUNT]=4 \{ .PRINT \*[BU3]*** \}
+. if \\n[#FN_COUNT]=5 \{ .PRINT \*[BU3]\(dg\(dg\(dg \}
+. if \\n[#FN_COUNT]=6 \{ .PRINT \*[BU3]**** \}
+. if \\n[#FN_COUNT]=7 \{ .PRINT \*[BU3]\(dg\(dg\(dg\(dg \}
+. if \\n[#FN_COUNT]=8 \{ .PRINT \*[BU3]***** \}
+. if \\n[#FN_COUNT]=9 \{ .PRINT \*[BU3]\(dg\(dg\(dg\(dg\(dg\(dg \}
+. \}
+. \}
+. if \\n[#FN_MARKER_STYLE]=2 \{\
+. if \\n[#PRINT_STYLE]=1 \{ .PRINT "\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#FN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2" \}
+. if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n+[#FN_NUMBER]\*[SUPX]" \}
+. \}
+. \}
+. \}
+. nr #SPACE_REMAINING \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]-(\\n(nl+1v)
+. nr #PP_STYLE_PREV \\n[#PP_STYLE]
+. nr #PP_STYLE 2
+. if \\n[#INDENT_FIRST_PARAS] \{ .nr #INDENT_FIRSTS 1 \}
+. INDENT_FIRST_PARAS
+. ev FOOTNOTES
+. ll \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. if \\n[#COLUMNS] \{\
+. ll \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. if \\n[#FN_R_INDENT] \{\
+. ll -\\n[#FN_R_INDENT]u
+. ta \\n(.lu
+. \}
+. if \\n[#FN_BR_INDENT] \{\
+. ll -\\n[#FN_BR_INDENT]u
+. ta \\n(.lu
+. \}
+. FAMILY \\*[$FN_FAM]
+. FT \\*[$FN_FT]
+. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$FN_SIZE_CHANGE]
+. AUTOLEAD \\n[#FN_AUTOLEAD]
+. QUAD \\*[$FN_QUAD]
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \}
+. el \{ .vs \\n[#DOC_LEAD]u/2u \}
+. QUAD LEFT
+. HY OFF
+. \}
+. nr #FN_LEAD \\n[#LEAD]
+. da FOOTNOTES
+. if \\n[#EPIGRAPH] \{ .nr #FN_FOR_EPI 1 \}
+. if \\n[#FN_DEFER_SPACE] \{\
+. if \\n[#FN_MARKER_STYLE]=1 \{ .ALD 1v \}
+. if \\n[#RESET_FN_NUMBER] \{ .ALD 1v \}
+. rr #FN_DEFER_SPACE
+. \}
+. if \\n+[#FN_COUNT]=1 \{\
+. if !\\n[#FN_DEPTH] \{\
+. if \\n[#PRINT_STYLE]=1 \{ .ALD \\n[#DOC_LEAD]u \}
+. ie \\n[#FN_RULE] \{ .PRINT_FOOTNOTE_RULE \}
+. el \{ .ALD 1v \}
+. \}
+. \}
+. if \\n[#FN_MARKERS] \{\
+. if !\\n[#NO_FN_MARKER] \{\
+. if \\n[#FN_MARKER_STYLE]=1 \{\
+. ie \\n+[#FN_COUNT_FOR_COLS] \{\
+. if \\n[#FN_COUNT_FOR_COLS]=1 \{ .PRINT *\c \}
+. if \\n[#FN_COUNT_FOR_COLS]=2 \{ .PRINT \(dg\c \}
+. if \\n[#FN_COUNT_FOR_COLS]=3 \{ .PRINT **\c \}
+. if \\n[#FN_COUNT_FOR_COLS]=4 \{ .PRINT \(dg\(dg\c \}
+. if \\n[#FN_COUNT_FOR_COLS]=5 \{ .PRINT ***\c \}
+. if \\n[#FN_COUNT_FOR_COLS]=6 \{ .PRINT \(dg\(dg\(dg\c \}
+. if \\n[#FN_COUNT_FOR_COLS]=7 \{ .PRINT ****\c \}
+. if \\n[#FN_COUNT_FOR_COLS]=8 \{ .PRINT \(dg\(dg\(dg\(dg\c \}
+. if \\n[#FN_COUNT_FOR_COLS]=9 \{ .PRINT *****\c \}
+. if \\n[#FN_COUNT_FOR_COLS]=10 \{ .PRINT \(dg\(dg\(dg\(dg\(dg\c \}
+. \}
+. el \{\
+. if \\n[#FN_COUNT]=1 \{ .PRINT *\c \}
+. if \\n[#FN_COUNT]=2 \{ .PRINT \(dg\c \}
+. if \\n[#FN_COUNT]=3 \{ .PRINT **\c \}
+. if \\n[#FN_COUNT]=4 \{ .PRINT \(dg\(dg\c \}
+. if \\n[#FN_COUNT]=5 \{ .PRINT ***\c \}
+. if \\n[#FN_COUNT]=6 \{ .PRINT \(dg\(dg\(dg\c \}
+. if \\n[#FN_COUNT]=7 \{ .PRINT ****\c \}
+. if \\n[#FN_COUNT]=8 \{ .PRINT \(dg\(dg\(dg\(dg\c \}
+. if \\n[#FN_COUNT]=9 \{ .PRINT *****\c \}
+. if \\n[#FN_COUNT]=10 \{ .PRINT \(dg\(dg\(dg\(dg\(dg\c \}
+. \}
+. \}
+. if \\n[#FN_MARKER_STYLE]=2 \{\
+. if \\n[#PRINT_STYLE]=1 \{ .PRINT "(\\n[#FN_NUMBER])\c" \}
+. if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n[#FN_NUMBER]\*[SUPX]\c" \}
+. \}
+. \}
+. \}
+. \}
+. el \{\
+. ie '\\$1'INDENT' \{\
+. ev FOOTNOTES
+. if '\\$2'L' \{ .in (\\$3) \}
+. if '\\$2'LEFT' \{ .in (\\$3) \}
+. if '\\$2'R' \{ .nr #FN_R_INDENT (\\$3) \}
+. if '\\$2'RIGHT' \{ .nr #FN_R_INDENT (\\$3) \}
+. if '\\$2'B' \{\
+. nr #FN_BL_INDENT (\\$3)
+. ie '\\$4'' \{ .nr #FN_BR_INDENT \\n[#FN_BL_INDENT] \}
+. el \{ .nr #FN_BR_INDENT (\\$4) \}
+. in \\n[#FN_BL_INDENT]u
+. \}
+. if '\\$2'BOTH' \{\
+. nr #FN_BL_INDENT (\\$3)
+. ie '\\$4'' \{ .nr #FN_BR_INDENT \\n[#FN_BL_INDENT] \}
+. el \{ .nr #FN_BR_INDENT (\\$4) \}
+. in \\n[#FN_BL_INDENT]u
+. \}
+. ev
+. FOOTNOTE
+. \}
+. el \{\
+. br
+. di
+. in 0 \"Turn off indent possibly set by FOOTNOTE INDENT...
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#UNDERLINE_WAS_ON] \{\
+. UNDERLINE
+. rr #UNDERLINE_WAS_ON
+. \}
+. \}
+. ev
+. rr #FN_R_INDENT
+. rr #FN_BR_INDENT
+. nr #PP_STYLE \\n[#PP_STYLE_PREV]
+. if !\\n[#INDENT_FIRSTS] \{ .INDENT_FIRST_PARAS OFF \}
+. rr #INDENT_FIRSTS
+. nr #FN_DEPTH +\\n[#DIVER_DEPTH]
+. if \\n[#FN_DEFER] \{\
+. nr #FN_DEFER_SPACE 1
+. rr #FN_DEFER
+. \}
+. if \\n[#FN_DEPTH]>\\n[#SPACE_REMAINING] \{\
+. ie \\n[#SPACE_REMAINING]<(\\n[#LEAD]*2) \{ .nr #FN_DEFER 1 \}
+. el \{\
+. nr #FN_LINES 0 1
+. while (\\n+[#FN_LINES]*\\n[#FN_LEAD])<\\n[#SPACE_REMAINING] \{\
+. nr #FN_DEPTH (\\n[#FN_LINES]*\\n[#FN_LEAD])
+. \}
+. \}
+. \}
+. nr #VARIABLE_FOOTER_POS -\\n[#DIVER_DEPTH]
+. if \\n[#FN_COUNT]=1 \{ .nr #VARIABLE_FOOTER_POS -1v \}
+. \}
+. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+. if (\\n(nl+1v)>(\\n[#PAGE_LENGTH]+\\n[#VARIABLE_FOOTER_POS]) \{\
+. ch FOOTER \\n(nlu+1v
+. \}
+. if \\n[#FN_DEFER] \{\
+. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
+. ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+. \}
+. \}
+. nr #NO_FN_MARKER 0
+.END
+\#
+\#
+.MAC FN_OVERFLOW_TRAP END
+. if \\n[#FN_COUNT] \{\
+. di FN_OVERFLOW
+. \}
+.END
+\#
+\#
+.MAC DIVERT_FN_LEFTOVER END
+. nr #NO_FN_MARKER 1
+. nr #OVERFLOW 1
+. FOOTNOTE
+. nf
+. FN_OVERFLOW
+. FOOTNOTE OFF
+. rr #FN_OVERFLOW_DEPTH
+.END
+\#
+\#
+.MAC PROCESS_FN_LEFTOVER END
+. if !\\n[#FN_DEFER] \{\
+. nr #FN_COUNT 0 1
+. nr #FN_DEPTH 0
+. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
+. \}
+. if \\n[#FN_DEFER] \{\
+. nr #VARIABLE_FOOTER_POS -(\\n[#FN_DEPTH]+\\n[#DOC_LEAD])
+. \}
+. nr #SPACE_REMAINING 0
+. ch FOOTER -\\n[#B_MARGIN]u
+. if \\n[#FN_DEFER] \{\
+. nr #NO_FN_MARKER 1
+. da FOOTNOTES
+. di
+. FOOTNOTE
+. nf
+. FOOTNOTE OFF
+. \}
+. if !\\n[#FN_DEFER] \{\
+. if \\n[#FN_OVERFLOW_DEPTH] \{\
+. DIVERT_FN_LEFTOVER
+. \}
+. \}
+. nr #FN_COUNT 0 1
+.END
+\#
+\#
+\# ====================================================================
+\#
+\# +++ENDNOTES+++
+\#
+\# When endnotes are output, the spacing between the notes is always 1
+\# extra linespace. This can have bottom margin consequences. If this
+\# doesn't bother you, don't worry about it. If it does bother you, and
+\# you want to adjust the spacing between any two endnotes (as they're
+\# output), make the spacing adjustments (.ALD/.RLD) at the *end* of
+\# endnotes (i.e. just before .ENDNOTE OFF), not at the top.
+\#
+\# Endnotes must be output manually with .ENDNOTES. This allows user
+\# the flexibility to output endnotes at the end of each collated
+\# document, or to output them at the end of the entire document.
+\#
+\# ENDNOTE FAMILY
+\# --------------
+\# *Argument:
+\# <family to use in endnotes>
+\# *Function:
+\# Creates or modifies string $EN_FAM.
+\# *Notes:
+\# Default is same as running text in body of document.
+\#
+.MAC ENDNOTE_FAMILY END
+. ds $EN_FAM \\$1
+.END
+\#
+\#
+\# ENDNOTE FONT
+\# ------------
+\# *Argument:
+\# <font to use in endnotes>
+\# *Function:
+\# Creates or modifies string $EN_FT.
+\# *Notes:
+\# Default is roman.
+\#
+.MAC ENDNOTE_FONT END
+. ds $EN_FT \\$1
+.END
+\#
+\#
+\# ENDNOTE POINT SIZE
+\# ------------------
+\# *Argument:
+\# <base point size for endnotes>
+\# *Function:
+\# Creates or modifies register #EN_PS.
+\# *Notes:
+\# Default is same as running text in body of document.
+\#
+\# This size control macro differs from other size control macros
+\# in that it sets an absolute point size, not a relative one. This
+\# is because a) endnotes always appear separate from the body of
+\# a document and therefore don't need to be relative to the body
+\# of the document, and b) there are quite a few elements of the
+\# endnotes page(s) that need to be relative to the base point size
+\# of that page. If the base endnote point size were relative to
+\# the body of the document (i.e. a _SIZE macro taking a +|- value)
+\# getting the rest of the endnote elements sized properly could
+\# become very confusing.
+\#
+.MAC ENDNOTE_PT_SIZE END
+. nr #EN_PS (p;\\$1)
+.END
+\#
+\#
+\# ENDNOTE LEAD
+\# ------------
+\# *Argument:
+\# <base leading to use in endnotes>
+\# *Function:
+\# Creates or modifies register #EN_LEAD.
+\# *Notes:
+\# Default is 13.5 points for TYPESET; 24 for TYPEWRITE.
+\#
+.MAC ENDNOTE_LEAD END
+. nr #EN_LEAD (p;\\$1)
+.END
+\#
+\#
+\# ENDNOTE QUAD
+\# ------------
+\# *Argument:
+\# LEFT | L | CENTER | C | RIGHT | R | JUSTIFY | J
+\# *Function:
+\# Creates or modifies string $EN_QUAD.
+\# *Notes:
+\# Default is justified for TYPESET, left for TYPEWRITE.
+\#
+.MAC ENDNOTE_QUAD END
+. ds $EN_QUAD \\$1
+.END
+\#
+\#
+\# ENDNOTES_HDRFTR_CENTER
+\# ----------------------
+\# *Argument:
+\# toggle
+\# *Function:
+\# Creates or removes toggle register #EN_HDRFTR_CENTER, used to
+\# determine whether mom should print a/the hdrftr center string
+\# on the endnotes page. Primarily to enable/disable printing of the
+\# chapter name in hdrftrs when DOCTYPE CHAPTER.
+\# *Notes:
+\# Default is OFF
+\#
+.MAC ENDNOTES_HDRFTR_CENTER END
+. ie '\\$1'' \{ .nr #EN_HDRFTR_CENTER 1 \}
+. el \{ .rr #EN_HDRFTR_CENTER \}
+.END
+\#
+\#
+\# ENDNOTE STRING
+\# --------------
+\# *Argument:
+\# <title for endnotes page>
+\# *Function:
+\# Creates or modifies string $EN_STRING.
+\# *Notes:
+\# Default is "ENDNOTES"
+\#
+.MAC ENDNOTE_STRING END
+. ds $EN_STRING \\$1
+.END
+\#
+\#
+\# ENDNOTE STRING FAMILY
+\# ---------------------
+\# *Argument:
+\# <family to use for endnote string>
+\# *Function:
+\# Creates or modifies string $EN_STRING_FAM.
+\# *Notes:
+\# Default is same as running text in body of document.
+\#
+.MAC ENDNOTE_STRING_FAMILY END
+. ds $EN_STRING_FAM \\$1
+.END
+\#
+\#
+\# ENDNOTE STRING FONT
+\# -------------------
+\# *Argument:
+\# <font to use for endnote string>
+\# *Function:
+\# Creates or modifies string $EN_FT.
+\# *Notes:
+\# Default is BOLD for TYPEWRITE; roman for TYPESET
+\#
+.MAC ENDNOTE_STRING_FONT END
+. ds $EN_STRING_FT \\$1
+.END
+\#
+\#
+\# ENDNOTE STRING SIZE
+\# -------------------
+\# *Argument:
+\# <+|- number of points by which to in/decrease endnote string
+\# (relative to base endnote size)>
+\# *Function:
+\# Creates or modifies string $EN_STRING_SIZE_CHANGE.
+\# *Notes:
+\# Default is +1 for TYPESET.
+\#
+.MAC ENDNOTE_STRING_SIZE END \"Default for TYPESET is +1
+. ds $EN_STRING_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# ENDNOTE STRING QUAD
+\# -------------------
+\# *Argument:
+\# LEFT | L | CENTER | C | RIGHT | R
+\# *Function:
+\# Creates or modifies string $EN_STRING_QUAD.
+\# *Notes:
+\# Default is centered.
+\#
+.MAC ENDNOTE_STRING_QUAD END
+. ds $EN_STRING_QUAD \\$1
+.END
+\#
+\#
+\# ENDNOTE STRING UNDERSCORE
+\# -------------------------
+\# *Arguments:
+\# toggle | 2
+\# *Function:
+\# Turns underscoring of endnote main title on or off. If the argument
+\# is the digit "2", turns on double-underscoring.
+\# *Notes:
+\# Default is double-underscored.
+\#
+.MAC ENDNOTE_STRING_UNDERSCORE END
+. ie '\\$1'' \{ .nr #EN_STRING_UNDERSCORE 1 \}
+. el \{\
+. ie '\\$1'2' \{ .nr #EN_STRING_UNDERSCORE 2 \}
+. el \{ .rr #EN_STRING_UNDERSCORE \}
+. \}
+.END
+\#
+\#
+\# ENDNOTE TITLE
+\# -------------
+\# *Argument:
+\# <string that appears before the first endnote pertaining to any document>
+\# *Function:
+\# Creates string $EN_TITLE_STRING.
+\# *Notes:
+\# Default is the document title, or, if doc is a chapter, "Chapter #"
+\#
+.MAC ENDNOTE_TITLE END
+. ds $EN_TITLE \\$1
+.END
+\#
+\#
+\# ENDNOTE TITLE FAMILY
+\# --------------------
+\# *Argument:
+\# <family to use for endnote title>
+\# *Function:
+\# Creates string $EN_TITLE_FAM.
+\# *Notes:
+\# Default is same as running text of document.
+\#
+.MAC ENDNOTE_TITLE_FAMILY END
+. ds $EN_TITLE_FAM \\$1
+.END
+\#
+\#
+\# ENDNOTE TITLE FONT
+\# ------------------
+\# *Argument:
+\# <font to use for endnote title>
+\# *Function:
+\# Creates string $EN_TITLE_FT.
+\# *Notes:
+\# Default is bold for TYPESET; roman for TYPEWRITE.
+\#
+.MAC ENDNOTE_TITLE_FONT END
+. ds $EN_TITLE_FT \\$1
+.END
+\#
+\#
+\# ENDNOTE TITLE SIZE
+\# ------------------
+\# *Argument:
+\# <+|- number of points by which to in/decrease endnote title
+\# (relative to base endnote size)>
+\# *Function:
+\# Creates string $EN_TITLE_SIZE_CHANGE.
+\# *Notes:
+\# Default is 0 (i.e. title same size as text of endnotes).
+\#
+.MAC ENDNOTE_TITLE_SIZE END
+. ds $EN_TITLE_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# ENDNOTE TITLE QUAD
+\# ------------------
+\# *Argument:
+\# <quad direction of endnote title>
+\# *Function:
+\# Creates string $EN_TITLE_QUAD.
+\# *Notes:
+\# Default is left.
+\#
+.MAC ENDNOTE_TITLE_QUAD END
+. ds $EN_TITLE_QUAD \\$1
+.END
+\#
+\#
+\# ENDNOTE TITLE UNDERSCORE
+\# ------------------------
+\# *Argument:
+\# toggle
+\# *Function:
+\# Creates or removes register #EN_TITLE_UNDERSCORE.
+\# *Notes:
+\# Default is to underscore the endnote titles.
+\#
+.MAC ENDNOTE_TITLE_UNDERSCORE END
+. ie '\\$1'' \{ .nr #EN_TITLE_UNDERSCORE 1 \}
+. el \{ .rr #EN_TITLE_UNDERSCORE \}
+.END
+\#
+\#
+\# ENDNOTE NUMBER FAMILY
+\# ---------------------
+\# *Argument:
+\# <family to use for endnote numbers on endnotes page>
+\# *Function:
+\# Creates string $EN_NUMBER_FAM.
+\# *Notes:
+\# Default is same as running text of document.
+\#
+\# Family, font, and size of endnote numbers applies only to the
+\# numbers as they appear on the endnotes page(s). The superscript
+\# numbers that appear in running text are unaffected.
+\#
+.MAC ENDNOTE_NUMBER_FAMILY END
+. ds $EN_NUMBER_FAM \\$1
+.END
+\#
+\#
+\# ENDNOTE NUMBER FONT
+\# -------------------
+\# *Argument:
+\# <font to use for endnote numbers on endnotes page>
+\# *Function:
+\# Creates string $EN_NUMBER_FT.
+\# *Notes:
+\# Default is bold for TYPESET; roman for TYPEWRITE.
+\#
+\# Family, font, and size of endnote numbers applies only to the
+\# numbers as they appear on the endnotes page(s). The superscript
+\# numbers that appear in running text are unaffected.
+\#
+.MAC ENDNOTE_NUMBER_FONT END \"Default for TYPESET is bold
+. ds $EN_NUMBER_FT \\$1
+.END
+\#
+\#
+\# ENDNOTE NUMBER SIZE
+\# -------------------
+\# *Argument:
+\# <+|- number of points by which to in/decrease endnote numbers
+\# (relative to base endnote size)>
+\# *Function:
+\# Creates string $EN_NUMBER_SIZE_CHANGE.
+\# *Notes:
+\# Default is 0.
+\#
+\# Family, font, and size of endnote numbers applies only to the
+\# numbers as they appear on the endnotes page(s). The superscript
+\# numbers that appear in running text are unaffected.
+\#
+.MAC ENDNOTE_NUMBER_SIZE END \"Default for TYPESET is 0
+. ds $EN_NUMBER_SIZE_CHANGE \\$1
+.END
+\#
+\#
+\# ENDNOTE NUMBERS ALIGN RIGHT
+\# ---------------------------
+\# *Argument:
+\# <max. number of digit placeholders that will appear in endnotes>
+\# *Function:
+\# Toggles register #EN_NUMBERS_ALIGN_RIGHT on; creates register
+\# #EN_NUMBER_PLACEHOLDERS.
+\# *Notes:
+\# Default is for footnote numbers to be right aligned to 2 placeholders.
+\#
+.MAC ENDNOTE_NUMBERS_ALIGN_RIGHT END
+. rr #EN_NUMBERS_ALIGN_LEFT
+. nr #EN_NUMBERS_ALIGN_RIGHT 1
+. nr #EN_NUMBER_PLACEHOLDERS \\$1
+.END
+\#
+\#
+\# ENDNOTE NUMBERS ALIGN LEFT
+\# --------------------------
+\# *Argument:
+\# none
+\# *Function:
+\# Toggles register #EN_NUMBERS_ALIGN_LEFT on.
+\# *Notes:
+\# Default is for footnote numbers to be right aligned to 2 placeholders
+\# (i.e. not left aligned).
+\#
+.MAC ENDNOTE_NUMBERS_ALIGN_LEFT END
+. rr #EN_NUMBERS_ALIGN_RIGHT
+. nr #EN_NUMBERS_ALIGN_LEFT 1
+.END
+\#
+\#
+\# ENDNOTE PARAGRAPH INDENT
+\# ------------------------
+\# *Argument:
+\# <first line indent of paras subsequent to 1st in endnotes>
+\# *Function:
+\# Creates register #EN_PP_INDENT for use in .PP.
+\# *Notes:
+\# Requires a unit of measure.
+\#
+\# Default is 1.5m for TYPESET; same indent as PARA_INDENT for TYPEWRITE.
+\#
+.MAC ENDNOTE_PARA_INDENT END
+. nr #EN_PP_INDENT (\\$1)
+.END
+\#
+\#
+\# ENDNOTE PARAGRAPH SPACE
+\# -----------------------
+\# *Argument:
+\# toggle
+\# *Function:
+\# Creates toggle register #EN_PP_SPACE for use in .PP.
+\# *Notes:
+\# Like PARA_SPACE. Default is not to space endnote paras.
+\#
+.MAC ENDNOTE_PARA_SPACE END
+. ie '\\$1'' \{ .nr #EN_PP_SPACE 1 \}
+. el \{ .rr #EN_PP_SPACE \}
+.END
+\#
+\#
+\# ENDNOTE
+\# -------
+\# *Argument:
+\# toggle
+\# *Function:
+\# Places superscript endnote number in text, then collects and
+\# processes endnote in diversion END_NOTES.
+\# *Notes:
+\# \c must be appended to the word immediately preceding .ENDNOTE.
+\#
+.MAC ENDNOTE END
+. ie '\\$1'' \{\
+. nr #ENDNOTE 1
+. if \\n[#CONDENSE] \{ \*[CONDX]\c \}
+. if \\n[#EXTEND] \{ \*[EXTX]\c \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#UNDERLINE_ON] \{\
+. nr #UNDERLINE_WAS_ON 1
+. UNDERLINE OFF
+. \}
+. if \\n[#SLANT_ON] \{\
+. nr #SLANT_WAS_ON 1
+\*[SLANTX]\c
+. \}
+. PRINT "\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#EN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2"
+. \}
+. if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n+[#EN_NUMBER]\*[SUPX]" \}
+. nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
+. nr #PP_STYLE_PREV \\n[#PP_STYLE]
+. nr #PP_STYLE 1
+. if \\n[#INDENT_FIRST_PARAS] \{ .nr #INDENT_FIRSTS 1 \}
+. INDENT_FIRST_PARAS
+. ev EN
+. da END_NOTES
+. nr #NO_TRAP_RESET 1
+. if \\n[#PRINT_STYLE]=2 \{ .DOC_LEAD \\n[#EN_LEAD]u ADJUST \}
+. rr #NO_TRAP_RESET
+. vs \\n[#DOC_LEAD]u
+. LL \\n[#DOC_L_LENGTH]u
+. ta \\n(.lu
+. if \\n[#COLUMNS] \{\
+. LL \\n[#COL_L_LENGTH]u
+. ta \\n(.lu
+. \}
+. if \\n[#EN_NUMBER]=1 \{\
+\!. ne 3
+. if !'\\*[$EN_STRING]'' \{ .sp \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$EN_TITLE_FAM]
+. FT \\*[$EN_TITLE_FT]
+. PT_SIZE \\n[#EN_PS]u\\*[$EN_TITLE_SIZE_CHANGE]
+. \}
+. if !'\\*[$EN_TITLE]'' \{\
+. if '\\*[$EN_TITLE_QUAD]'L' \{ .LEFT \}
+. if '\\*[$EN_TITLE_QUAD]'LEFT' \{ .LEFT \}
+. if '\\*[$EN_TITLE_QUAD]'C' \{ .CENTER \}
+. if '\\*[$EN_TITLE_QUAD]'CENTER' \{ .CENTER \}
+. if '\\*[$EN_TITLE_QUAD]'CENTRE' \{ .CENTER \}
+. if '\\*[$EN_TITLE_QUAD]'R' \{ .RIGHT \}
+. if '\\*[$EN_TITLE_QUAD]'RIGHT' \{ .RIGHT \}
+. ie \\n[#EN_TITLE_UNDERSCORE] \{\
+. UNDERSCORE "\\*[$EN_TITLE]
+. \}
+. el \{\
+. PRINT "\\*[$EN_TITLE]
+. \}
+. \}
+. \}
+. ie \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
+. ie \\n[#EN_NUMBER]=1 \{\
+. if !'\\*[$EN_TITLE]'' \{ .sp \}
+. \}
+. el \{ .sp \}
+\!. TRAP OFF
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$EN_NUMBER_FAM]
+. FT \\*[$EN_NUMBER_FT]
+. PT_SIZE \\n[#EN_PS]u\\*[$EN_NUMBER_SIZE_CHANGE]
+. \}
+. nr #RESET_L_LENGTH \\n(.l
+. nr #EN_NUMBER_L_LENGTH \w'\0'*\\n[#EN_NUMBER_PLACEHOLDERS]+\w'.'
+. ll \\n[#EN_NUMBER_L_LENGTH]u
+. RIGHT
+\En[#EN_NUMBER].
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$EN_FAM]
+. FT \\*[$EN_FT]
+. PT_SIZE \\n[#EN_PS]u
+. \}
+. EL
+. ll \\n[#RESET_L_LENGTH]u
+. in \\n[#EN_NUMBER_L_LENGTH]u+\w'.\0'u
+. nr #EN_TEXT_INDENT \\n(.i
+. QUAD \\*[$EN_QUAD]
+\!. TRAP
+. \}
+. el \{\
+. ie \\n[#EN_NUMBER]=1 \{\
+. if !'\\*[$EN_TITLE]'' \{ .sp \}
+. \}
+. el \{ .sp \}
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$EN_NUMBER_FAM]
+. FT \\*[$EN_NUMBER_FT]
+. PT_SIZE \\n[#EN_PS]u\\*[$EN_NUMBER_SIZE_CHANGE]
+. \}
+. QUAD \\*[$EN_QUAD]
+\En[#EN_NUMBER].\0\c
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$EN_FAM]
+. FT \\*[$EN_FT]
+. PT_SIZE \\n[#EN_PS]u
+. \}
+. \}
+. \}
+. el \{\
+. br
+. if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
+. in 0
+. \}
+. di
+. DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
+. nr #PP_STYLE \\n[#PP_STYLE_PREV]
+. if !\\n[#INDENT_FIRSTS] \{ .INDENT_FIRST_PARAS OFF \}
+. rr #INDENT_FIRSTS
+. rr #ENDNOTE
+. ev
+. if \\n[#PRINT_STYLE]=1 \{\
+. if \\n[#UNDERLINE_WAS_ON] \{\
+. rr #UNDERLINE_WAS_ON
+. UNDERLINE
+. \}
+. \}
+. if \\n[#SLANT_WAS_ON] \{\
+. rr #SLANT_WAS_ON
+\*[SLANT]\c
+. \}
+. \}
+.END
+\#
+\#
+\# ENDNOTES
+\# --------
+\# *Arguments:
+\# none
+\# *Function:
+\# Sets new document leading from #EN_LEAD, breaks to a new page,
+\# sets up an endnotes page based on registers and strings associated
+\# with endnotes, then outputs diversion END_NOTES.
+\#
+.MAC ENDNOTES END
+. if \\n[#DOC_TYPE]=2 \{\
+. ie \\n[#EN_HDRFTR_CENTER]=1 \{ . \}
+. el \{ .HDRFTR_CENTER \}
+. \}
+. NEWPAGE
+. nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
+. if \\n[#PRINT_STYLE]=2 \{ .DOC_LEAD \\n[#EN_LEAD]u ADJUST \}
+. if \\n[#SLANT_ON] \{\
+\*[SLANTX]\c
+. \}
+. if !'\\*[$EN_STRING]'' \{\
+. if \\n[#PRINT_STYLE]=1 \{\
+. fam C
+. ft R
+. ps 12
+. \}
+. if \\n[#PRINT_STYLE]=2 \{\
+. FAMILY \\*[$EN_STRING_FAM]
+. FT \\*[$EN_STRING_FT]
+. PT_SIZE \\n[#EN_PS]u\\*[$EN_STRING_SIZE_CHANGE]
+. \}
+. if '\\*[$EN_STRING_QUAD]'L' \{ .LEFT \}
+. if '\\*[$EN_STRING_QUAD]'LEFT' \{ .LEFT \}
+. if '\\*[$EN_STRING_QUAD]'C' \{ .CENTER \}
+. if '\\*[$EN_STRING_QUAD]'CENTER' \{ .CENTER \}
+. if '\\*[$EN_STRING_QUAD]'CENTRE' \{ .CENTER \}
+. if '\\*[$EN_STRING_QUAD]'R' \{ .RIGHT \}
+. if '\\*[$EN_STRING_QUAD]'RIGHT' \{ .RIGHT \}
+. EL
+. ie \\n[#EN_STRING_UNDERSCORE] \{\
+. ie \\n[#EN_STRING_UNDERSCORE]=2 \{\
+. UNDERSCORE2 "\\*[$EN_STRING]
+. \}
+. el \{\
+. UNDERSCORE "\\*[$EN_STRING]
+. \}
+. \}
+. el \{\
+. PRINT "\\*[$EN_STRING]
+. \}
+. \}
+. ev EN
+. nf
+. vs \\n[#DOC_LEAD]u
+. END_NOTES
+. br
+. ev
+. rm END_NOTES
+. DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
+.END
+\#
+\# ====================================================================
+\#
+\# +++COLUMNS+++
+\#
+\# COLUMNS
+\# -------
+\# *Arguments:
+\# <number of columns> <width of gutters>
+\# *Function:
+\# Creates registers associated with setting docs in columns.
+\# Calculates column line lengths and offsets
+\# *Notes:
+\# COLUMNS, if used, s/b the last macro invoked before START.
+\#
+.MAC COLUMNS END
+. if \\n[#IGNORE_COLUMNS]=1 \{ .return \}
+. nr #COLUMNS 1
+. nr #NUM_COLS \\$1
+. nr #GUTTER (\\$2)
+. nr #COL_L_LENGTH \\n[#L_LENGTH]-(\\n[#GUTTER]*(\\n[#NUM_COLS]-1))/\\n[#NUM_COLS]
+. nr #COL_TOTAL 0 \\n[#COL_L_LENGTH]+\\n[#GUTTER]
+. nr #COL_NUM 0 1
+. while !\\n[#COL_NUM]=\\n[#NUM_COLS] \{\
+. nr #COL_\\n+[#COL_NUM]_L_MARGIN \\n[#L_MARGIN]+\\n[#COL_TOTAL]
+. nr #COL_TOTAL \\n+[#COL_TOTAL]
+. \}
+. rr #COL_TOTAL
+. rr #COL_NUM
+.END
+\#
+\#
+\# NEXT COLUMN
+\# -----------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Breaks current column and moves to next column.
+\# If current column is the last on the page, breaks
+\# to a new page.
+\#
+.MAC COL_NEXT END
+. if \\n[#COLUMNS] \{\
+. nr #COL_NEXT 1
+. ie '\\$0'COL_NEXT' \{ .br \}
+. el \{\
+. brp
+. RLD 1v
+. \}
+. ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
+. bp
+. \}
+. el \{ .FOOTER \}
+. \}
+.END
+\#
+\# ====================================================================
+\#
+\# +++DOCUMENT PROCESSING MISC AND SUPPORT MACROS+++
+\#
+\# COLLATE
+\# -------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Turns headers off (if on) and saves header state, sets register
+\# #COLLATE to 1 (toggle), and breaks to a new page.
+\# *Notes:
+\# COLLATE exists primarily to allow putting multiple chapters in
+\# a single file, although it can be used for any document type. After
+\# COLLATE, any of the macros that normally precede START may be
+\# used, and should behave as expected.
+\#
+\# N.B.--the START macro *must* be used after COLLATE (and any other
+\# macros that alter mom's behaviour).
+\#
+.MAC COLLATE END
+. nr #COLLATE 1
+. nr #HEADER_STATE \\n[#HEADERS_ON]
+. HEADERS OFF
+. if \\n[#PAGE_NUM_V_POS]=1 \{\
+. nr #PAGINATION_STATE \\n[#PAGINATE]
+. PAGINATION OFF
+. \}
+. IQ CLEAR
+. TQ
+. LL \\n[#DOC_L_LENGTH]u
+. QUAD $DOC_QUAD
+. LS \\n[#DOC_LEAD]u
+\*[SLANTX]
+\*[CONDX]
+\*[EXTX]
+' NEWPAGE
+. rr #PAGENUM_STYLE_SET
+. rm $EN_TITLE
+.END
+\#
+\#
+\# SET TRAPS FOR HEADERS/FOOTERS/FOOTNOTES
+\# ---------------------------------------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Sets header/footer/footnotes/etc... traps.
+\# Calculates the number of lines that actually fit on a
+\# page based on #B_MARGIN and resets page bottom trap to coincide
+\# with the depth of that number of lines , or, if #ADJ_DOC_LEAD=1,
+\# adjusts #DOC_LEAD so that the last line of text on a page falls
+\# exactly on #B_MARGIN.
+\#
+.MAC TRAPS END
+\# *Remove all header/footer traps
+. if !\\n[#NO_TRAP_RESET] \{\
+. ch DO_T_MARGIN
+. ch DO_B_MARGIN
+. ch HEADER
+. ch FOOTER
+\# *Plant header trap
+. wh 0 HEADER
+. \}
+\# *Adjust lead so last line of text falls on B_MARGIN,...
+. ie \\n[#ADJ_DOC_LEAD] \{\
+. nr #LINES_PER_PAGE 0 1
+. nr #DOC_LEAD_ADJ 0 1
+. nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]-1v
+. while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{ . \}
+. nr #LINES_PER_PAGE -1
+. while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]+\\n+[#DOC_LEAD_ADJ]*\\n[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{ . \}
+. DOC_LEAD \\n[#DOC_LEAD]u+\\n[#DOC_LEAD_ADJ]u
+. \}
+\# *...or calculate new B_MARGIN based on # of lines (at #DOC_LEAD) that fit
+\# *on the page.
+. el \{\
+. nr #LINES_PER_PAGE 0 1
+. nr #DEPTH_TO_B_MARGIN \\n[#PAGE_LENGTH]-\\n[#B_MARGIN]-1v
+. while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n+[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{ . \}
+. nr #B_MARGIN \\n[#PAGE_LENGTH]-(\\n[#T_MARGIN]+(\\n[#DOC_LEAD]*\\n[#LINES_PER_PAGE]))
+. \}
+\# *Set footer and footnote overflow traps
+. if !\\n[#NO_TRAP_RESET] \{\
+. nr #FN_COUNT 0 1
+. nr #SPACE_REMAINING 0
+. nr #FN_DEPTH 0
+. nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u
+. wh 12i FOOTER
+. wh -\\n[#B_MARGIN]u FN_OVERFLOW_TRAP
+. ch FOOTER -\\n[#B_MARGIN]u
+. \}
+.END
+\#
+\#
+\# CHECK INDENT
+\# ------------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Adds left, right, or both indent values to document elements
+\# like heads and subheads that are processed in environments.
+\#
+.MAC CHECK_INDENT END
+. if \\n[#INDENT_LEFT_ACTIVE] \{\
+. in \\n[#L_INDENT]u
+. if \\n[#QUOTE] \{\
+. in -\\n[#L_INDENT]u \"Because you added an indent in 2nd line of macro
+. ll -\\n[#L_INDENT]u
+. ta \\n(.lu
+. \}
+. if \\n[#EPIGRAPH] \{\
+. in -\\n[#L_INDENT]u
+. ll -\\n[#L_INDENT]u
+. ta \\n(.lu
+. \}
+. \}
+. if \\n[#INDENT_RIGHT_ACTIVE] \{\
+. ll -\\n[#R_INDENT]u
+. ta \\n(.lu
+. \}
+. if \\n[#INDENT_BOTH_ACTIVE] \{\
+. in \\n[#BL_INDENT]u
+. ll -\\n[#BR_INDENT]u
+. ta \\n(.lu
+. if \\n[#QUOTE] \{\
+. in -\\n[#BL_INDENT]u
+. ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
+. ll -\\n[#BR_INDENT]u
+. ta \\n(.lu
+. \}
+. el \{\
+. ll -(\\n[#BR_INDENT]u/2u)
+. ta \\n(.lu
+. \}
+. \}
+. if \\n[#EPIGRAPH] \{\
+. in -\\n[#BL_INDENT]u
+. ie \\n[#BR_INDENT]=\\n[#BL_INDENT] \{\
+. ll -\\n[#BR_INDENT]u
+. ta \\n(.lu
+. \}
+. el \{\
+. ll -(\\n[#BR_INDENT]u/2u)
+. ta \\n(.lu
+. \}
+. \}
+. \}
+.END
+\#
+\#
+\# REMOVE INDENT
+\# -------------
+\# *Arguments:
+\# <none>
+\# *Function:
+\# Removes left, right, or both indent values from document elements
+\# like heads and subheads that are processed in environments.
+\#
+.MAC REMOVE_INDENT END
+. in 0
+. ll \\n[#L_LENGTH]u
+. ta \\n(.lu
+.END
+\#
+\#
+\#
+\#
+\# ====================================================================
+\#
+\# +++DOCUMENT PROCESSING ALIASES+++
+\#
+\# Aliases to make life easier for users: synonyms, short forms
+\# and alternate spellings.
+\#
+\# Macros
+\# ------
+.ALIAS BREAK_BLOCKQUOTE BREAK_QUOTE
+.ALIAS BREAK_CITATION BREAK_QUOTE
+.ALIAS BREAK_CITE BREAK_QUOTE
+.ALIAS CITATION BLOCKQUOTE
+.ALIAS CITE BLOCKQUOTE
+.ALIAS DOC_R_MARGIN DOC_RIGHT_MARGIN
+.ALIAS DOC_L_MARGIN DOC_LEFT_MARGIN
+.ALIAS DOC_L_LENGTH DOC_LINE_LENGTH
+.ALIAS DOC_RMARGIN DOC_RIGHT_MARGIN
+.ALIAS DOC_LMARGIN DOC_LEFT_MARGIN
+.ALIAS DOC_LLENGTH DOC_LINE_LENGTH
+.ALIAS DOC_FAM DOC_FAMILY
+.ALIAS FILL QUAD
+.ALIAS PP_FT PP_FONT
+.ALIAS DOC_PS DOC_PT_SIZE
+.ALIAS DOC_LS DOC_LEAD
+.ALIAS PAGENUM PAGENUMBER
+.ALIAS PAGINATION PAGINATE
+\#
+\# HEADER and FOOTER aliases for HDRFTR macros.
+\#
+.ALIAS ENDNOTES_HEADER_CENTER ENDNOTES_HDRFTR_CENTER
+.ALIAS HEADER_FAMILY HDRFTR_FAMILY
+.ALIAS HEADER_FAM HDRFTR_FAMILY
+.ALIAS HEADER_SIZE HDRFTR_SIZE
+.ALIAS HEADER_PLAIN HDRFTR_PLAIN
+.ALIAS HEADER_RULE_GAP HDRFTR_RULE_GAP
+.ALIAS HEADER_RULE HDRFTR_RULE
+.ALIAS HEADER_LEFT HDRFTR_LEFT
+.ALIAS HEADER_LEFT_FAMILY HDRFTR_LEFT_FAMILY
+.ALIAS HEADER_LEFT_FAM HDRFTR_LEFT_FAMILY
+.ALIAS HEADER_LEFT_FONT HDRFTR_LEFT_FONT
+.ALIAS HEADER_LEFT_FT HDRFTR_LEFT_FONT
+.ALIAS HEADER_LEFT_SIZE HDRFTR_LEFT_SIZE
+.ALIAS HEADER_LEFT_PS HDRFTR_LEFT_SIZE
+.ALIAS HEADER_LEFT_CAPS HDRFTR_LEFT_CAPS
+.ALIAS HEADER_CENTER HDRFTR_CENTER
+.ALIAS HEADER_CENTRE HDRFTR_CENTER
+.ALIAS HEADER_CENTER_FAMILY HDRFTR_CENTER_FAMILY
+.ALIAS HEADER_CENTRE_FAMILY HDRFTR_CENTER_FAMILY
+.ALIAS HEADER_CENTER_FAM HDRFTR_CENTER_FAMILY
+.ALIAS HEADER_CENTRE_FAM HDRFTR_CENTER_FAMILY
+.ALIAS HEADER_CENTER_FONT HDRFTR_CENTER_FONT
+.ALIAS HEADER_CENTRE_FONT HDRFTR_CENTER_FONT
+.ALIAS HEADER_CENTER_FT HDRFTR_CENTER_FONT
+.ALIAS HEADER_CENTRE_FT HDRFTR_CENTER_FONT
+.ALIAS HEADER_CENTER_SIZE HDRFTR_CENTER_SIZE
+.ALIAS HEADER_CENTRE_SIZE HDRFTR_CENTER_SIZE
+.ALIAS HEADER_CENTER_PS HDRFTR_CENTER_SIZE
+.ALIAS HEADER_CENTRE_PS HDRFTR_CENTER_SIZE
+.ALIAS HEADER_CENTER_CAPS HDRFTR_CENTER_CAPS
+.ALIAS HEADER_CENTRE_CAPS HDRFTR_CENTER_CAPS
+.ALIAS HEADER_RIGHT HDRFTR_RIGHT
+.ALIAS HEADER_RIGHT_FAMILY HDRFTR_RIGHT_FAMILY
+.ALIAS HEADER_RIGHT_FAM HDRFTR_RIGHT_FAMILY
+.ALIAS HEADER_RIGHT_FONT HDRFTR_RIGHT_FONT
+.ALIAS HEADER_RIGHT_FT HDRFTR_RIGHT_FONT
+.ALIAS HEADER_RIGHT_SIZE HDRFTR_RIGHT_SIZE
+.ALIAS HEADER_RIGHT_PS HDRFTR_RIGHT_SIZE
+.ALIAS HEADER_RIGHT_CAPS HDRFTR_RIGHT_CAPS
+.ALIAS HEADER_RECTO HDRFTR_RECTO
+.ALIAS HEADER_VERSO HDRFTR_VERSO
+.ALIAS ENDNOTES_FOOTER_CENTER ENDNOTES_HDRFTR_CENTER
+.ALIAS FOOTER_FAMILY HDRFTR_FAMILY
+.ALIAS FOOTER_FAM HDRFTR_FAMILY
+.ALIAS FOOTER_SIZE HDRFTR_SIZE
+.ALIAS FOOTER_PLAIN HDRFTR_PLAIN
+.ALIAS FOOTER_RULE_GAP HDRFTR_RULE_GAP
+.ALIAS FOOTER_RULE HDRFTR_RULE
+.ALIAS FOOTER_LEFT HDRFTR_LEFT
+.ALIAS FOOTER_LEFT_FAMILY HDRFTR_LEFT_FAMILY
+.ALIAS FOOTER_LEFT_FAM HDRFTR_LEFT_FAMILY
+.ALIAS FOOTER_LEFT_FONT HDRFTR_LEFT_FONT
+.ALIAS FOOTER_LEFT_FT HDRFTR_LEFT_FONT
+.ALIAS FOOTER_LEFT_SIZE HDRFTR_LEFT_SIZE
+.ALIAS FOOTER_LEFT_PS HDRFTR_LEFT_SIZE
+.ALIAS FOOTER_LEFT_CAPS HDRFTR_LEFT_CAPS
+.ALIAS FOOTER_CENTER HDRFTR_CENTER
+.ALIAS FOOTER_CENTRE HDRFTR_CENTER
+.ALIAS FOOTER_CENTER_FAMILY HDRFTR_CENTER_FAMILY
+.ALIAS FOOTER_CENTRE_FAMILY HDRFTR_CENTER_FAMILY
+.ALIAS FOOTER_CENTER_FAM HDRFTR_CENTER_FAMILY
+.ALIAS FOOTER_CENTRE_FAM HDRFTR_CENTER_FAMILY
+.ALIAS FOOTER_CENTER_FONT HDRFTR_CENTER_FONT
+.ALIAS FOOTER_CENTRE_FONT HDRFTR_CENTER_FONT
+.ALIAS FOOTER_CENTER_FT HDRFTR_CENTER_FONT
+.ALIAS FOOTER_CENTRE_FT HDRFTR_CENTER_FONT
+.ALIAS FOOTER_CENTER_SIZE HDRFTR_CENTER_SIZE
+.ALIAS FOOTER_CENTRE_SIZE HDRFTR_CENTER_SIZE
+.ALIAS FOOTER_CENTER_PS HDRFTR_CENTER_SIZE
+.ALIAS FOOTER_CENTRE_PS HDRFTR_CENTER_SIZE
+.ALIAS FOOTER_CENTER_CAPS HDRFTR_CENTER_CAPS
+.ALIAS FOOTER_CENTRE_CAPS HDRFTR_CENTER_CAPS
+.ALIAS FOOTER_RIGHT HDRFTR_RIGHT
+.ALIAS FOOTER_RIGHT_FAMILY HDRFTR_RIGHT_FAMILY
+.ALIAS FOOTER_RIGHT_FAM HDRFTR_RIGHT_FAMILY
+.ALIAS FOOTER_RIGHT_FONT HDRFTR_RIGHT_FONT
+.ALIAS FOOTER_RIGHT_FT HDRFTR_RIGHT_FONT
+.ALIAS FOOTER_RIGHT_SIZE HDRFTR_RIGHT_SIZE
+.ALIAS FOOTER_RIGHT_PS HDRFTR_RIGHT_SIZE
+.ALIAS FOOTER_RIGHT_CAPS HDRFTR_RIGHT_CAPS
+.ALIAS FOOTER_RECTO HDRFTR_RECTO
+.ALIAS FOOTER_VERSO HDRFTR_VERSO
+.ALIAS SWITCH_HEADERS SWITCH_HDRFTR
+.ALIAS SWITCH_FOOTERS SWITCH_HDRFTR
+\#
+\# SUPPORT ALIASES
+\#
+.ALIAS COL_BREAK COL_NEXT
+.ALIAS PRINT_FOOTNOTE_RULE FOOTNOTE_RULE
diff --git a/contrib/groff/contrib/pic2graph/Makefile.sub b/contrib/groff/contrib/pic2graph/Makefile.sub
new file mode 100644
index 0000000..d01a435
--- /dev/null
+++ b/contrib/groff/contrib/pic2graph/Makefile.sub
@@ -0,0 +1,19 @@
+MAN1=pic2graph.n
+CLEANADD=pic2graph
+
+all: pic2graph
+
+pic2graph: pic2graph.sh
+ rm -f $@; \
+ sed -e "s|@g@|$(g)|g" \
+ -e "s|@VERSION@|$(version)$(revision)|" \
+ -e $(SH_SCRIPT_SED_CMD) $(srcdir)/pic2graph.sh >$@; \
+ chmod +x $@
+
+install_data: pic2graph
+ -test -d $(bindir) || $(mkinstalldirs) $(bindir)
+ -rm -f $(bindir)/pic2graph
+ $(INSTALL_SCRIPT) pic2graph $(bindir)/pic2graph
+
+uninstall_sub:
+ -rm -f $(bindir)/pic2graph
diff --git a/contrib/groff/contrib/pic2graph/pic2graph.man b/contrib/groff/contrib/pic2graph/pic2graph.man
new file mode 100644
index 0000000..c48c1c7
--- /dev/null
+++ b/contrib/groff/contrib/pic2graph/pic2graph.man
@@ -0,0 +1,123 @@
+.\" $Id: pic2graph.man,v 1.3 2002/07/17 04:55:46 wlemb Exp $
+.\" This documentation is released to the public domain.
+.TH PIC2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
+.IX pic2graph
+.SH NAME
+pic2graph \- convert a PIC diagram into a cropped image
+.
+.
+.SH SYNOPSIS
+.B pic2graph
+[
+.B \-unsafe
+]
+[
+.BI \-format\ fmt
+]
+[
+.BI \-eqn\ delim
+]
+.
+.
+.SH DESCRIPTION
+Reads a PIC program as input; produces an image file (by default in
+Portable Network Graphics format) suitable for the Web as output.
+Also translates
+.BR @g@eqn (@MAN1EXT@)
+constructs, so it can be used for generating images of mathematical
+formulae.
+.P
+PIC is a rather expressive graphics minilanguage suitable for
+producing box-and-arrow diagrams of the kind frequently used in
+technical papers and textbooks. The language is sufficiently flexible
+to be quite useful for state charts, Petri-net diagrams, flow charts,
+simple circuit schematics, jumper layouts, and other kinds of
+illustration involving repetitive uses of simple geometric forms and
+splines. Because PIC descriptions are procedural and object-based,
+they are both compact and easy to modify.
+.P
+The PIC language is fully documented in "\fIMaking Pictures With GNU
+PIC\fP", a document which is part of the
+.BR groff (@MAN1EXT@)
+distribution.
+.P
+Your input PIC code should \fInot\fR be wrapped with the .PS and .PE macros
+that normally guard it within
+.BR groff (@MAN1EXT@)
+macros.
+.P
+The output image will be a black-on-white graphic clipped to the
+smallest possible bounding box that contains all the black pixels.
+By specifying command-line options to be passed to
+.BR convert (1)
+you can give it a border, set the background transparent, set the
+image's pixel density, or perform other useful transformations.
+.P
+This program uses
+.BR @g@pic (@MAN1EXT@),
+.BR @g@eqn (@MAN1EXT@),
+.BR groff (@MAN1EXT@),
+.BR gs (1),
+and the ImageMagick
+.BR convert (1)
+program.
+These programs must be installed on your system and accessible on your
+$PATH for \fBpic2graph\fR to work.
+.
+.
+.SH OPTIONS
+.TP
+.B \-unsafe
+Run
+.BR @g@pic (@MAN1EXT@)
+and
+.BR groff (@MAN1EXT@)
+in the `unsafe' mode enabling the PIC macro
+.B sh
+to execute arbitrary commands. The default is to forbid this.
+.TP
+.BI \-format\ fmt
+Specify an output format; the default is PNG (Portable Network Graphics).
+Any format that
+.BR convert (1)
+can emit is supported.
+.TP
+.BI \-eqn\ delim
+Change the fencepost characters that delimit
+.BR @g@eqn (@MAN1EXT@)
+directives
+.RB ( $
+and
+.BR $ ,
+by default). This option requires an argument, but an empty string is
+accepted as a directive to disable
+.BR @g@eqn (@MAN1EXT@)
+processing.
+.PP
+Command-line switches and arguments not listed above are passed to
+.BR convert (1).
+.
+.
+.SH FILES
+.TP \w'\fB@MACRODIR@/eqnrc'u+2n
+.B @MACRODIR@/eqnrc
+The
+.BR @g@eqn (@MAN1EXT@)
+initialization file.
+.
+.
+.SH "SEE ALSO"
+.BR eqn2graph (@MAN1EXT@),
+.BR @g@pic (@MAN1EXT@),
+.BR @g@eqn (@MAN1EXT@),
+.BR groff (@MAN1EXT@),
+.BR gs (1),
+.BR convert (1).
+.
+.
+.SH AUTHOR
+Eric S. Raymond <esr@thyrsus.com>, based on a recipe by W. Richard Stevens.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff --git a/contrib/groff/contrib/pic2graph/pic2graph.sh b/contrib/groff/contrib/pic2graph/pic2graph.sh
new file mode 100644
index 0000000..41b17f3
--- /dev/null
+++ b/contrib/groff/contrib/pic2graph/pic2graph.sh
@@ -0,0 +1,83 @@
+#!/bin/sh
+#
+# pic2graph -- compile PIC image descriptions to bitmap images
+#
+# by Eric S. Raymond <esr@thyrsus.com>, July 2002
+
+# In Unixland, the magic is in knowing what to string together...
+#
+# Take a pic/eqn diagram on stdin, emit cropped bitmap on stdout.
+# The pic markup should *not* be wrapped in .PS/.PE, this script will do that.
+# An -unsafe option on the command line enables gpic/groff "unsafe" mode.
+# A -format FOO option changes the image output format to any format
+# supported by convert(1). An -eqn option changes the eqn delimiters.
+# All other options are passed to convert(1). The default format in PNG.
+#
+# Requires the groff suite and the ImageMagick tools. Both are open source.
+# This code is released to the public domain.
+#
+# Here are the assumptions behind the option processing:
+#
+# 1. Only the -U option of gpic(1) is relevant. -C doesn't matter because
+# we're generating our own .PS/.PE, -[ntcz] are irrelevant because we're
+# generating Postscript.
+#
+# 2. Ditto for groff(1), though it's a longer and more tedious demonstration.
+#
+# 3. Many options of convert(1) are potentially relevant (especially
+# -density, -interlace, -transparency, -border, and -comment).
+#
+# Thus, we pass -U to gpic and groff, and everything else to convert(1).
+#
+# We don't have complete option coverage on eqn because this is primarily
+# intended as a pic translator; we can live with eqn defaults.
+#
+# $Id: pic2graph.sh,v 1.2 2002/07/17 04:55:46 wlemb Exp $
+#
+groffpic_opts=""
+gs_opts=""
+convert_opts=""
+format="png"
+eqndelim='$$'
+
+while [ "$1" ]
+do
+ case $1 in
+ -unsafe)
+ groffpic_opts="-U"
+ -format)
+ format=$2
+ shift;;
+ -eqn)
+ eqndelim=$2
+ shift;;
+ -v | --version)
+ echo "GNU pic2graph (groff) version @VERSION@"
+ exit 0;;
+ --help)
+ echo "usage: pic2graph [ option ...] < in > out"
+ exit 0;;
+ *)
+ convert_opts="$convert_opts $1";;
+ esac
+ shift
+done
+
+if [ "$eqndelim" ]
+then
+ eqndelim="delim $eqndelim"
+fi
+
+# Here goes:
+# 1. Wrap the input in dummy .PS/PE macros (and add possibly null .EQ/.EN)
+# 2. Process through eqn and pic to emit troff markup.
+# 3. Process through groff to emit Postscript.
+# 4. Use convert(1) to crop the PostScript and turn it into a bitmap.
+tmp=/usr/tmp/pic2graph-$$
+trap "rm ${tmp}.*" 0 2 15
+(echo ".EQ"; echo $eqndelim; echo ".EN"; echo ".PS"; cat; echo ".PE") | \
+ groff -e -p $groffpic_opts -Tps >${tmp}.ps \
+ && convert -crop 0x0 $convert_opts ${tmp}.ps ${tmp}.${format} \
+ && cat ${tmp}.${format}
+
+# End
diff --git a/contrib/groff/doc/Makefile.in b/contrib/groff/doc/Makefile.in
new file mode 100644
index 0000000..97f75f9
--- /dev/null
+++ b/contrib/groff/doc/Makefile.in
@@ -0,0 +1,136 @@
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Written by Werner Lemberg <wl@gnu.org>
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with groff; see the file COPYING. If not, write to the Free Software
+# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+# Use this file to produce documentation in various formats; e.g. you can
+# say
+#
+# make groff.pdf
+#
+# to get the groff texinfo manual as a PDF file.
+#
+# Note that you have to compile the groff package first.
+
+
+srcdir=@srcdir@
+top_srcdir=@top_srcdir@
+VPATH=@srcdir@
+top_builddir=@groff_top_builddir@
+
+
+# Since info files are distributed within the groff package, no
+# autoconf test for the makeinfo binary is done.
+MAKEINFO=makeinfo
+
+# Users who want to print out the groff manual are expected to have
+# a working TeX installation.
+TEXI2DVI=texi2dvi
+
+groff_bin_dirs=\
+ $(top_builddir)/src/roff/groff \
+ $(top_builddir)/src/roff/troff \
+ $(top_builddir)/src/preproc/pic \
+ $(top_builddir)/src/preproc/eqn \
+ $(top_builddir)/src/preproc/tbl \
+ $(top_builddir)/src/preproc/grn \
+ $(top_builddir)/src/preproc/refer \
+ $(top_builddir)/src/preproc/soelim \
+ $(top_builddir)/src/preproc/html \
+ $(top_builddir)/src/devices/grops \
+ $(top_builddir)/src/devices/grodvi \
+ $(top_builddir)/src/devices/grotty \
+ $(top_builddir)/src/devices/grolj4 \
+ $(top_builddir)/src/devices/grolbp \
+ $(top_builddir)/src/devices/grohtml
+groff_bin_path=`echo $(groff_bin_dirs) | sed -e 's| *|:|g'`
+
+version=`cat $(top_srcdir)/VERSION`
+# No additional number if revision is zero.
+revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
+
+FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
+TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac
+
+TROFF=$(top_builddir)/src/roff/troff/troff $(TFLAG) $(FFLAG) -ww
+GROFF=GROFF_COMMAND_PREFIX=''; \
+ export GROFF_COMMAND_PREFIX; \
+ GROFF_BIN_PATH=$(groff_bin_path); \
+ export GROFF_BIN_PATH; \
+ sed -e "s;@VERSION@;$(version)$(revision);" $< \
+ | $(top_builddir)/src/roff/groff/groff $(TFLAG) $(FFLAG) -Upet -ww
+
+imagedir=img
+
+.SUFFIXES: .me .ms .ps .html .txt .texinfo .dvi .pdf
+
+# For simplicity, we always call grn and eqn.
+.me.txt:
+ $(GROFF) -Tascii -ge -me >$@
+.me.ps:
+ $(GROFF) -Tps -ge -me >$@
+
+.ms.html:
+ $(GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
+ -P-D$(imagedir) -Thtml -ms >$@
+.ms.txt:
+ $(GROFF) -Tascii -ms -mwww >$@
+.ms.ps:
+ $(GROFF) -Tps -ms -mwww >$@
+
+.texinfo.dvi:
+ $(TEXI2DVI) -e $<
+.texinfo.pdf:
+ $(TEXI2DVI) -e --pdf $<
+.texinfo.html:
+ $(MAKEINFO) -I$(srcdir) --html --no-split $<
+
+
+all: prepare_examples
+
+prepare_examples: grnexmpl.g
+ test -f grnexmpl.g || cp $(srcdir)/grnexmpl.g .
+
+groff: groff.texinfo
+ $(MAKEINFO) -I$(srcdir) $(srcdir)/groff.texinfo
+
+gnu.eps: gnu.xpm
+ xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 | pnmtops -noturn >$@
+gnu.png: gnu.xpm
+ xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 | pnmtopng >$@
+
+webpage.html: webpage.ms gnu.png gnu.eps
+webpage.ps: gnu.eps
+
+grnexmpl.ps: grnexmpl.me grnexmpl.g
+
+
+clean:
+ -rm -f *.ps *.html *.txt *.png *.eps *.gif *.dit core
+ -rm -f *.aux *.dvi *.pdf *.log *.toc texput.log
+ -rm -f *.cp *.cps *.cv *.cn *.es *.ess *.fn *.fns *.ky *.kys \
+ *.ma *.mas *.op *.ops *.pg *.pgs *.rq *.rqs *.st *.sts \
+ *.tp *.tps *.tr *.vr *.vrs
+ -rm -rf img
+
+distclean: clean
+
+realclean: distclean
+
+extraclean: clean
+ -rm -f core *~ \#* junk temp grot
diff --git a/contrib/groff/doc/Makefile.sub b/contrib/groff/doc/Makefile.sub
new file mode 100644
index 0000000..c72293f
--- /dev/null
+++ b/contrib/groff/doc/Makefile.sub
@@ -0,0 +1,202 @@
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Written by Werner Lemberg <wl@gnu.org>
+#
+# This file is part of groff.
+#
+# groff is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# groff is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with groff; see the file COPYING. If not, write to the Free Software
+# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Since info files are distributed within the groff package, no
+# autoconf test for the makeinfo binary is done.
+MAKEINFO=makeinfo
+
+groff_bin_dirs=\
+ $(top_builddir)/src/roff/groff \
+ $(top_builddir)/src/roff/troff \
+ $(top_builddir)/src/preproc/pic \
+ $(top_builddir)/src/preproc/eqn \
+ $(top_builddir)/src/preproc/tbl \
+ $(top_builddir)/src/preproc/grn \
+ $(top_builddir)/src/preproc/refer \
+ $(top_builddir)/src/preproc/soelim \
+ $(top_builddir)/src/preproc/html \
+ $(top_builddir)/src/devices/grops \
+ $(top_builddir)/src/devices/grohtml
+groff_bin_path=`echo $(groff_bin_dirs) | sed -e 's| *|:|g'`
+
+FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
+TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac
+
+GROFF=\
+ GROFF_COMMAND_PREFIX=''; \
+ export GROFF_COMMAND_PREFIX; \
+ GROFF_BIN_PATH=$(groff_bin_path); \
+ export GROFF_BIN_PATH; \
+ sed -e "s;@VERSION@;$(version)$(revision);" $< \
+ | $(top_builddir)/src/roff/groff/groff $(TFLAG) $(FFLAG) -Upet -ww
+
+DOCFILES=\
+ meref.me \
+ meintro.me \
+ pic.ms
+
+PROCESSEDDOCFILES=\
+ meref.ps \
+ meintro.ps \
+ pic.ps
+
+HTMLDOCFILES=\
+ pic.html
+
+HTMLDOCIMAGEFILES=\
+ pic*
+
+EXAMPLEFILES=\
+ webpage.ms \
+ grnexmpl.g \
+ grnexmpl.me
+
+PROCESSEDEXAMPLEFILES=\
+ webpage.ps \
+ grnexmpl.ps
+
+HTMLEXAMPLEFILES=\
+ webpage.html
+
+HTMLEXAMPLEIMAGEFILES=\
+ webpage*
+
+imagedir=img
+htmldocimagedir=$(htmldocdir)/$(imagedir)
+exampleimagedir=$(exampledir)/$(imagedir)
+
+CLEANADD=\
+ $(PROCESSEDDOCFILES) \
+ $(PROCESSEDEXAMPLEFILES) \
+ $(HTMLEXAMPLEFILES) \
+ $(HTMLDOCFILES)
+
+CLEANDIRADD=\
+ $(imagedir)
+
+CLEANNOTSRCDIRADD=\
+ grnexmpl.g \
+ groff \
+ groff-* \
+ gnu.eps \
+ gnu.png
+
+.SUFFIXES: .me .ms .ps .html
+
+# For simplicity, we always call grn and eqn.
+.me.ps:
+ $(GROFF) -Tps -ge -me >$@
+
+.ms.html:
+ $(GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
+ -P-D$(imagedir) -Thtml -ms >$@
+.ms.ps:
+ $(GROFF) -Tps -ms -mwww >$@
+
+
+all: groff $(PROCESSEDDOCFILES) prepare_examples \
+ $(PROCESSEDEXAMPLEFILES) $(make_html)
+
+html: $(HTMLDOCFILES) $(HTMLEXAMPLEFILES)
+
+prepare_examples: grnexmpl.g
+ test -f grnexmpl.g || cp $(srcdir)/grnexmpl.g .
+
+groff: groff.texinfo
+ $(MAKEINFO) -I$(srcdir) $(srcdir)/groff.texinfo
+
+gnu.eps: gnu.xpm
+ xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 | pnmtops -noturn -rle >$@
+gnu.png: gnu.xpm
+ xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 | pnmtopng >$@
+
+webpage.html: webpage.ms gnu.png
+webpage.ps: gnu.eps
+
+grnexmpl.ps: grnexmpl.me grnexmpl.g
+
+distfiles: groff gnu.eps gnu.png
+
+install_data: groff $(DOCFILES) $(PROCESSEDDOCFILES) $(make_install_html) \
+ $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES)
+ -test -d $(infodir) || $(mkinstalldirs) $(infodir)
+# Prefer info files in builddir over srcdir; we test for
+# the existence of `groff'.
+ d=.; \
+ test -f "groff" || d=$(srcdir); \
+ for f in $$d/groff $$d/groff-*; do \
+ rm -f $(infodir)/`basename $$f`; \
+ $(INSTALL_DATA) $$f $(infodir)/`basename $$f`; \
+ done
+ $(INSTALL_INFO) --info-dir=$(infodir) $(infodir)/groff
+ -test -d $(docdir) || $(mkinstalldirs) $(docdir)
+ for f in $(DOCFILES); do \
+ rm -f $(docdir)/$$f; \
+ $(INSTALL_DATA) $(srcdir)/$$f $(docdir)/$$f; \
+ done
+ for f in $(PROCESSEDDOCFILES); do \
+ rm -f $(docdir)/$$f; \
+ $(INSTALL_DATA) $$f $(docdir)/$$f; \
+ done
+ -test -d $(exampledir) || $(mkinstalldirs) $(exampledir)
+ for f in $(EXAMPLEFILES); do \
+ rm -f $(exampledir)/$$f; \
+ $(INSTALL_DATA) $(srcdir)/$$f $(exampledir)/$$f; \
+ done
+ for f in $(PROCESSEDEXAMPLEFILES); do \
+ rm -f $(exampledir)/$$f; \
+ $(INSTALL_DATA) $$f $(exampledir)/$$f; \
+ done
+
+install_html: $(HTMLDOCFILES) $(HTMLEXAMPLEFILES)
+ -test -d $(htmldocdir) || $(mkinstalldirs) $(htmldocdir)
+ for f in $(HTMLDOCFILES); do \
+ rm -f $(htmldocdir)/$$f; \
+ $(INSTALL_DATA) $$f $(htmldocdir)/$$f; \
+ done
+ -test -d $(htmldocimagedir) || $(mkinstalldirs) $(htmldocimagedir)
+ rm -f $(htmldocimagedir)/$(HTMLDOCIMAGEFILES)
+ $(INSTALL_DATA) $(imagedir)/$(HTMLDOCIMAGEFILES) $(htmldocimagedir)
+ -test -d $(exampledir) || $(mkinstalldirs) $(exampledir)
+ for f in $(HTMLEXAMPLEFILES); do \
+ rm -f $(exampledir)/$$f; \
+ $(INSTALL_DATA) $$f $(exampledir)/$$f; \
+ done
+ -test -d $(exampleimagedir) || $(mkinstalldirs) $(exampleimagedir)
+ rm -f $(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES)
+ $(INSTALL_DATA) $(imagedir)/$(HTMLEXAMPLEIMAGEFILES) $(exampleimagedir)
+
+uninstall_sub:
+ -for f in groff groff-*; do \
+ rm -f $(infodir)/$$f; \
+ done
+ $(INSTALL_INFO) --delete --info-dir=$(infodir) $(infodir)/groff
+ -for f in $(DOCFILES) $(PROCESSEDDOCFILES); do \
+ rm -f $(docdir)/$$f; \
+ done
+ -for f in $(HTMLDOCFILES); do \
+ rm -f $(htmldocdir)/$$f; \
+ done
+ -rm -f $(htmldocimagedir)/$(HTMLDOCIMAGEFILES)
+ -rmdir $(htmldocimagedir)
+ -for f in $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES); do \
+ rm -f $(exampledir)/$$f; \
+ done
+ -rm -f $(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES)
+ -rmdir $(exampleimagedir)
diff --git a/contrib/groff/doc/fdl.texi b/contrib/groff/doc/fdl.texi
new file mode 100644
index 0000000..361f90f
--- /dev/null
+++ b/contrib/groff/doc/fdl.texi
@@ -0,0 +1,403 @@
+
+@node GNU Free Documentation License
+@appendixsec GNU Free Documentation License
+
+@cindex FDL, GNU Free Documentation License
+@center Version 1.1, March 2000
+
+@display
+Copyright @copyright{} 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.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+written document @dfn{free} in the sense of freedom: to assure everyone
+the effective freedom to copy and redistribute it, with or without
+modifying it, either commercially or noncommercially. Secondarily,
+this License preserves for the author and publisher a way to get
+credit for their work, while not being considered responsible for
+modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work 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
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input format,
+@acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML} designed
+for human modification. Opaque formats include PostScript,
+@acronym{PDF}, proprietary formats that can be read and edited only by
+proprietary word processors, @acronym{SGML} or @acronym{XML} for which
+the @acronym{DTD} and/or processing tools are not generally available,
+and the machine-generated @acronym{HTML} 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.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies 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.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has less than five).
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section entitled ``History'', 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.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+In any section entitled ``Acknowledgments'' or ``Dedications'',
+preserve the section's title, and preserve in the section all the
+substance and tone of each of the contributor acknowledgments
+and/or dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section as ``Endorsements''
+or to conflict in title with any Invariant Section.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice.
+
+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 ``Acknowledgments'',
+and any sections entitled ``Dedications''. You must delete all sections
+entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, 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.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License 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.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+@end enumerate
+
+@page
+@appendixsubsec ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being @var{list their titles}, with the
+ Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}.
+ A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+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 @var{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.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
+
diff --git a/contrib/groff/doc/gnu.eps b/contrib/groff/doc/gnu.eps
new file mode 100644
index 0000000..f09ba02
--- /dev/null
+++ b/contrib/groff/doc/gnu.eps
@@ -0,0 +1,1018 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: pnmtops
+%%Title: noname.ps
+%%Pages: 1
+%%BoundingBox: 203 311 408 481
+%%EndComments
+/rlestr1 1 string def
+/readrlestring {
+ /rlestr exch def
+ currentfile rlestr1 readhexstring pop
+ 0 get
+ dup 127 le {
+ currentfile rlestr 0
+ 4 3 roll
+ 1 add getinterval
+ readhexstring pop
+ length
+ } {
+ 256 exch sub dup
+ currentfile rlestr1 readhexstring pop
+ 0 get
+ exch 0 exch 1 exch 1 sub {
+ rlestr exch 2 index put
+ } for
+ pop
+ } ifelse
+} bind def
+/readstring {
+ dup length 0 {
+ 3 copy exch
+ 1 index sub
+ getinterval
+ readrlestring
+ add
+ 2 copy le { exit } if
+ } loop
+ pop pop
+} bind def
+/rpicstr 107 string def
+/gpicstr 107 string def
+/bpicstr 107 string def
+%%EndProlog
+%%Page: 1 1
+gsave
+203.76 311.04 translate
+204.48 169.92 scale
+213 177 4
+[ 213 0 0 -177 0 177 ]
+{ rpicstr readstring }
+{ gpicstr readstring }
+{ bpicstr readstring }
+true 3
+colorimage
+96fffff096fffff096fffff096fffff096fffff096fffff0ebff04eddcaa
+bddeb0fffff0ebff04eddcaabddeb0fffff0ebff04eddcaabddeb0fffff0
+edff0ad988777478864555678adfb4fffff0edff0ad98877747886455567
+8adfb4fffff0edff0ad988777478864555678adfb4fffff0efff0dfdbba9
+4afcb867b544777675447cb5fffff0efff0dfdbba94afcb867b544777675
+447cb5fffff0efff0dfdbba94afcb867b544777675447cb5fffff0f0ff10
+faab6985449d5d649543484465675558bdd2ff01ecdfe7fffff0f0ff10fa
+ab6985449d5d649543484465675558bdd2ff01ecdfe7fffff0f0ff10faab
+6985449d5d649543484465675558bdd2ff01ecdfe7fffff0f1ff12fb9de8
+9476454897d54a44397443575554339fd6ff06d978778998889ce9fffff0
+f1ff12fb9de89476454897d54a44397443575554339fd6ff06d978778998
+889ce9fffff0f1ff12fb9de89476454897d54a44397443575554339fd6ff
+06d978778998889ce9fffff0f2ff14fc9cfff834455554669b487434a544
+4755555346cfd9ff0afc869cfdcfa9fedaa988dfebfffff0f2ff14fc9cff
+f834455554669b487434a5444755555346cfd9ff0afc869cfdcfa9fedaa9
+88dfebfffff0f2ff14fc9cfff834455554669b487434a5444755555346cf
+d9ff0afc869cfdcfa9fedaa988dfebfffff0f2ff159bffd5ae8453455445
+4c74b4444744449445665549effcff00fee1ff0ce8977adb887476456444
+4aee99ebfffff0f2ff159bffd5ae84534554454c74b44447444494456655
+49effcff00fee1ff0ce8977adb8874764564444aee99ebfffff0f2ff159b
+ffd5ae84534554454c74b4444744449445665549effcff00fee1ff0ce897
+7adb8874764564444aee99ebfffff0f4ff1dfee8defd9975ca4535454445
+c47844455444554456444558bfffffff76afe3ff0ee8448baa5665444444
+4535797efc8becfffff0f4ff1dfee8defd9975ca4535454445c478444554
+44554456444558bfffffff76afe3ff0ee8448baa56654444444535797efc
+8becfffff0f4ff1dfee8defd9975ca4535454445c4784445544455445644
+4558bfffffff76afe3ff0ee8448baa56654444444535797efc8becfffff0
+f4ff1de7cef97cd76758a454545456754b4454545446455463855caaacdd
+a7bdafecff01fdbefaff10fd77a86754454445444444896446effc9eedff
+fff0f4ff1de7cef97cd76758a454545456754b4454545446455463855caa
+acdda7bdafecff01fdbefaff10fd77a86754454445444444896446effc9e
+edfffff0f4ff1de7cef97cd76758a454545456754b445454544645546385
+5caaacdda7bdafecff01fdbefaff10fd77a86754454445444444896446ef
+fc9eedfffff0f5ff1efe8e758a849ec65488444467c86467945646444444
+54555757efca78bffaefecff19d675affffffffeed976666844443444343
+444455677898affbaeeefffff0f5ff1efe8e758a849ec65488444467c864
+6794564644444454555757efca78bffaefecff19d675affffffffeed9766
+66844443444343444455677898affbaeeefffff0f5ff1efe8e758a849ec6
+5488444467c8646794564644444454555757efca78bffaefecff19d675af
+fffffffeed976666844443444343444455677898affbaeeefffff0f5ff1d
+c79889555655afc64664457efd75b594485445455445494674eefddeefda
+ebff039efb6466fc4412466558444334563454434555434459cfffe9efef
+fffff0f5ff1dc79889555655afc64664457efd75b5944854454554454946
+74eefddeefdaebff039efb6466fc44124665584443345634544345554344
+59cfffe9efeffffff0f5ff1dc79889555655afc64664457efd75b5944854
+45455445494674eefddeefdaebff039efb6466fc44124665584443345634
+54434555434459cfffe9efeffffff0f6ff1ef9ac796686455447eea64589
+dffffffddc669557656856684494cecba66c8eebff1aa8fefecb985677b6
+5554844434345346433456457899998effffadeffffff0f6ff1ef9ac7966
+86455447eea64589dffffffddc669557656856684494cecba66c8eebff1a
+a8fefecb985677b65554844434345346433456457899998effffadefffff
+f0f6ff1ef9ac796686455447eea64589dffffffddc669557656856684494
+cecba66c8eebff1aa8fefecb985677b65554844434345346433456457899
+998effffadeffffff0f6ff1dc7ffeffb557555465bfe77ccfffecccbba56
+8c9dfe8aefbed8dbfeeffd99eaff1bf57deef85544545555565343334534
+53345434644454444579fffbdff0fffff0f6ff1dc7ffeffb557555465bfe
+77ccfffecccbba568c9dfe8aefbed8dbfeeffd99eaff1bf57deef8554454
+555556534333453453345434644454444579fffbdff0fffff0f6ff1dc7ff
+effb557555465bfe77ccfffecccbba568c9dfe8aefbed8dbfeeffd99eaff
+1bf57deef8554454555556534333453453345434644454444579fffbdff0
+fffff0f7ff1efe9ffdedffe7445465959ffbefe967abbbcdcb97778999aa
+acceefffeb89dfe9ff1094679d9964454555569a65664345334443fa4403
+4568ffbef0fffff0f7ff1efe9ffdedffe7445465959ffbefe967abbbcdcb
+97778999aaacceefffeb89dfe9ff1094679d9964454555569a6566434533
+4443fa44034568ffbef0fffff0f7ff1efe9ffdedffe7445465959ffbefe9
+67abbbcdcb97778999aaacceefffeb89dfe9ff1094679d9964454555569a
+65664345334443fa44034568ffbef0fffff0f7ff0ef9ffc5457bff944545
+bd78ffe97aeffaff07edddccbccccccedee7ff1bfe96434689d556686887
+75874765675444443333344455789cfffaeff1fffff0f7ff0ef9ffc5457b
+ff944545bd78ffe97aeffaff07edddccbccccccedee7ff1bfe96434689d5
+5668688775874765675444443333344455789cfffaeff1fffff0f7ff0ef9
+ffc5457bff944545bd78ffe97aeffaff07edddccbccccccedee7ff1bfe96
+434689d55668688775874765675444443333344455789cfffaeff1fffff0
+f7ff0c9ddea6544469e856567efceb9dd5ff05fda754445bdefcff04c65d
+fe5444fa33043446effebff1fffff0f7ff0c9ddea6544469e856567efceb
+9dd5ff05fda754445bdefcff04c65dfe5444fa33043446effebff1fffff0
+f7ff0c9ddea6544469e856567efceb9dd5ff05fda754445bdefcff04c65d
+fe5444fa33043446effebff1fffff0f8ff0cf8bc7559bb853459679aa9fe
+9dcaff03fea68ed6fc3307344456765467dfaff1fffff0f8ff0cf8bc7559
+bb853459679aa9fe9dcaff03fea68ed6fc3307344456765467dfaff1ffff
+f0f8ff0cf8bc7559bb853459679aa9fe9dcaff03fea68ed6fc3307344456
+765467dfaff1fffff0f9ff0dfd74469cb646bdb63459eeffd8efc8ff0dc7
+cd33334444588754334457dfccf1fffff0f9ff0dfd74469cb646bdb63459
+eeffd8efc8ff0dc7cd33334444588754334457dfccf1fffff0f9ff0dfd74
+469cb646bdb63459eeffd8efc8ff0dc7cd33334444588754334457dfccf1
+fffff0f9ff0cf89644445885457dc436cefb8ec6ff028ab445fc33053456
+76654debf1fffff0f9ff0cf89644445885457dc436cefb8ec6ff028ab445
+fc3305345676654debf1fffff0f9ff0cf89644445885457dc436cefb8ec6
+ff028ab445fc3305345676654debf1fffff0f9ff0bc8ffeb744445544489
+5befb9c5ff0cfb8c95433334444444577769faf1fffff0f9ff0bc8ffeb74
+44455444895befb9c5ff0cfb8c95433334444444577769faf1fffff0f9ff
+0bc8ffeb7444455444895befb9c5ff0cfb8c95433334444444577769faf1
+fffff0faff0cfe7cbbcacdb6444455666ffb9fc4ff02b8fc43fc33044445
+5568caf1fffff0faff0cfe7cbbcacdb6444455666ffb9fc4ff02b8fc43fc
+330444455568caf1fffff0faff0cfe7cbbcacdb6444455666ffb9fc4ff02
+b8fc43fc330444455568caf1fffff0faff0be7e555444569a7444558dfd8
+c3ff0cfa7fb53334433333457abbebeff2fffff0faff0be7e555444569a7
+444558dfd8c3ff0cfa7fb53334433333457abbebeff2fffff0faff0be7e5
+55444569a7444558dfd8c3ff0cfa7fb53334433333457abbebeff2fffff0
+faff0b9bfc9cea7544568855da8b8eecff05edbbaaaabcefdcff0b97e633
+333334578865569dcff2fffff0faff0b9bfc9cea7544568855da8b8eecff
+05edbbaaaabcefdcff0b97e633333334578865569dcff2fffff0faff0b9b
+fc9cea7544568855da8b8eecff05edbbaaaabcefdcff0b97e63333333457
+8865569dcff2fffff0fbff0cfe7ffffeefffd9445776eff7dfeeff09eb86
+7789998778778adff6ff02cbcdefebff0bfaa5333433433469dfffffbff2
+fffff0fbff0cfe7ffffeefffd9445776eff7dfeeff09eb86778999877877
+8adff6ff02cbcdefebff0bfaa5333433433469dfffffbff2fffff0fbff0c
+fe7ffffeefffd9445776eff7dfeeff09eb867789998778778adff6ff02cb
+cdefebff0bfaa5333433433469dfffffbff2fffff0fbff0bf9dfffcbaaab
+ceeb556cffabeeff0be769cedbb9988aa9abba88cff9ff05fea8998889ad
+ebff0a77344555455444467cffaff2fffff0fbff0bf9dfffcbaaabceeb55
+6cffabeeff0be769cedbb9988aa9abba88cff9ff05fea8998889adebff0a
+77344555455444467cffaff2fffff0fbff0bf9dfffcbaaabceeb556cffab
+eeff0be769cedbb9988aa9abba88cff9ff05fea8998889adebff0a773445
+55455444467cffaff2fffff0fbff0be8ff94443344446afb9efc8fefff0d
+fc69a899abdefeecba8668aa78cffbff07fb9aba988abdfcbdecff0ac874
+55544433344458ffbff2fffff0fbff0be8ff94443344446afb9efc8fefff
+0dfc69a899abdefeecba8668aa78cffbff07fb9aba988abdfcbdecff0ac8
+7455544433344458ffbff2fffff0fbff0be8ff94443344446afb9efc8fef
+ff0dfc69a899abdefeecba8668aa78cffbff07fb9aba988abdfcbdecff0a
+c87455544433344458ffbff2fffff0fbff0a9dc856789a987544dfffe7ef
+ff03fd747adff9ff11ec877667dfffffffe978879bcedba98aecbfedff0a
+f7da53333333344456efbff2fffff0fbff0a9dc856789a987544dfffe7ef
+ff03fd747adff9ff11ec877667dfffffffe978879bcedba98aecbfedff0a
+f7da53333333344456efbff2fffff0fbff0a9dc856789a987544dfffe7ef
+ff03fd747adff9ff11ec877667dfffffffe978879bcedba98aecbfedff0a
+f7da53333333344456efbff2fffff0fbff0a8f998887765567977bffadef
+ff1ca58efffffffdcfefffceffffffeb8549ffffd9968ceffb5becfffc89
+efedff0af9c85333333443344679cef2fffff0fbff0a8f99888776556797
+7bffadefff1ca58efffffffdcfefffceffffffeb8549ffffd9968ceffb5b
+ecfffc89efedff0af9c85333333443344679cef2fffff0fbff0a8f998887
+765567977bffadefff1ca58efffffffdcfefffceffffffeb8549ffffd996
+8ceffb5becfffc89efedff0af9c85333333443344679cef2fffff0fcff0b
+faad444444568aa86576df9ff0ff1dfa8efffffeffff9c885de67cffec9b
+fd848ddab98effffe754547ffffe89edff0afd9f645aa6434696445ecef2
+fffff0fcff0bfaad444444568aa86576df9ff0ff1dfa8efffffeffff9c88
+5de67cffec9bfd848ddab98effffe754547ffffe89edff0afd9f645aa643
+4696445ecef2fffff0fcff0bfaad444444568aa86576df9ff0ff1dfa8eff
+fffeffff9c885de67cffec9bfd848ddab98effffe754547ffffe89edff0a
+fd9f645aa6434696445ecef2fffff0fcff0bf666544565654458dec9bf9f
+f0ff1e9bfffffff9c8d99aa9485967ee6766cf9c65be88befdca8d444734
+9aeffd8cedff097d443347984348684eddf2fffff0fcff0bf66654456565
+4458dec9bf9ff0ff1e9bfffffff9c8d99aa9485967ee6766cf9c65be88be
+fdca8d4447349aeffd8cedff097d443347984348684eddf2fffff0fcff0b
+f666544565654458dec9bf9ff0ff1e9bfffffff9c8d99aa9485967ee6766
+cf9c65be88befdca8d4447349aeffd8cedff097d443347984348684eddf2
+fffff0fcff0bb888aaa8877655554ceffdbff1ff20e8cfffffc9b9aaab69
+b74b69586865565ba6d786b7559c5d644945a3465da9ea8eeeff09786443
+3434685345bfbcf2fffff0fcff0bb888aaa8877655554ceffdbff1ff20e8
+cfffffc9b9aaab69b74b69586865565ba6d786b7559c5d644945a3465da9
+ea8eeeff097864433434685345bfbcf2fffff0fcff0bb888aaa887765555
+4ceffdbff1ff20e8cfffffc9b9aaab69b74b69586865565ba6d786b7559c
+5d644945a3465da9ea8eeeff097864433434685345bfbcf2fffff0fcff0b
+6efddb9865554445569ffaeff1ff218effffff887b8a8c57c66887475875
+4764655a869e644566d548a3943333335bd7dfefff099a44333344447944
+bfbaf2fffff0fcff0b6efddb9865554445569ffaeff1ff218effffff887b
+8a8c57c668874758754764655a869e644566d548a3943333335bd7dfefff
+099a44333344447944bfbaf2fffff0fcff0b6efddb9865554445569ffaef
+f1ff218effffff887b8a8c57c668874758754764655a869e644566d548a3
+943333335bd7dfefff099a44333344447944bfbaf2fffff0fdff0bfe7ffc
+544444555556666df8f1ff22f8cfbea86ea55d697e56d575a54645854655
+4355a64ba454439b34c454334333345a7befff099d544555433445b65dba
+f2fffff0fdff0bfe7ffc544444555556666df8f1ff22f8cfbea86ea55d69
+7e56d575a546458546554355a64ba454439b34c454334333345a7befff09
+9d544555433445b65dbaf2fffff0fdff0bfe7ffc544444555556666df8f1
+ff22f8cfbea86ea55d697e56d575a546458546554355a64ba454439b34c4
+54334333345a7befff099d544555433445b65dbaf2fffff0fdff02fbae95
+fb44034547eee9f1ff239cdd9bc65bd55d677f56e574c454459645544345
+6855d555654d7386453344533334b99ff0ff09ab4444345543454885a9f2
+fffff0fdff02fbae95fb44034547eee9f1ff239cdd9bc65bd55d677f56e5
+74c4544596455443456855d555654d7386453344533334b99ff0ff09ab44
+44345543454885a9f2fffff0fdff02fbae95fb44034547eee9f1ff239cdd
+9bc65bd55d677f56e574c4544596455443456855d555654d738645334453
+3334b99ff0ff09ab4444345543454885a9f2fffff0fdff0bf8d9444578b9
+bcba75356e9cf2ff24f9aff768f549e55a857f55d463b444459547645445
+5655ab584844a3784643637443335bb8f0ff09baa443444345544448e9f2
+fffff0fdff0bf8d9444578b9bcba75356e9cf2ff24f9aff768f549e55a85
+7f55d463b4444595476454455655ab584844a3784643637443335bb8f0ff
+09baa443444345544448e9f2fffff0fdff0bf8d9444578b9bcba75356e9c
+f2ff24f9aff768f549e55a857f55d463b4444595476454455655ab584844
+a3784643637443335bb8f0ff09baa443444345544448e9f2fffff0fdff0b
+f7fb59bba8754444458def8ff2ff25bce9fa56f648f659956f55d4749444
+44a65784563455945b6594b4546c354363854333349b9ff1ff09aba43334
+5533344346e9f2fffff0fdff0bf7fb59bba8754444458def8ff2ff25bce9
+fa56f648f659956f55d474944444a65784563455945b6594b4546c354363
+854333349b9ff1ff09aba433345533344346e9f2fffff0fdff0bf7fb59bb
+a8754444458def8ff2ff25bce9fa56f648f659956f55d474944444a65784
+563455945b6594b4546c354363854333349b9ff1ff09aba4333455333443
+46e9f2fffff0fdff0bf7ffb854346788787569ce9ff3ff26fe8ff77655f6
+45f756a46e55a474744544b566a4754554a446846479864a454353754343
+43499cf1ff098d7643333568634446daf2fffff0fdff0bf7ffb854346788
+787569ce9ff3ff26fe8ff77655f645f756a46e55a474744544b566a47545
+54a446846479864a45435375434343499cf1ff098d7643333568634446da
+f2fffff0fdff0bf7ffb854346788787569ce9ff3ff26fe8ff77655f645f7
+56a46e55a474744544b566a4754554a446846479864a4543537543434349
+9cf1ff098d7643333568634446daf2fffff0fdff0bf8ff84589876555676
+6acd9ff3ff27e7ee99b445e754e945945f54c584654544b577c464545485
+66458a5d5c38644465454343434486eff2ff0a7f8ac7333334774446faef
+f3fffff0fdff0bf8ff845898765556766acd9ff3ff27e7ee99b445e754e9
+45945f54c584654544b577c46454548566458a5d5c386444654543434344
+86eff2ff0a7f8ac7333334774446faeff3fffff0fdff0bf8ff8458987655
+56766acd9ff3ff27e7ee99b445e754e945945f54c584654544b577c46454
+548566458a5d5c38644465454343434486eff2ff0a7f8ac7333334774446
+faeff3fffff0fdff0bf8fe576544455666567ace9ff3ff278dbb6a9544d8
+54da45a46f64d584554644c576c4858554655788fe8b8447844546444453
+4344467df3ff0bfe8e5544333334557554cbdff3fffff0fdff0bf8fe5765
+44455666567ace9ff3ff278dbb6a9544d854da45a46f64d584554644c576
+c4858554655788fe8b84478445464444534344467df3ff0bfe8e55443333
+34557554cbdff3fffff0fdff0bf8fe576544455666567ace9ff3ff278dbb
+6a9544d854da45a46f64d584554644c576c4858554655788fe8b84478445
+464444534344467df3ff0bfe8e5544333334557554cbdff3fffff0fdff0b
+fafc57555666655654448d8ff4ff29f8cff6489735c854bc55c56e54d584
+454844c578d485a6755433a47cf96445b4454735446444344456dff4ff02
+faae57fc3304355854ebdff3fffff0fdff0bfafc57555666655654448d8f
+f4ff29f8cff6489735c854bc55c56e54d584454844c578d485a6755433a4
+7cf96445b4454735446444344456dff4ff02faae57fc3304355854ebdff3
+fffff0fdff0bfafc57555666655654448d8ff4ff29f8cff6489735c854bc
+55c56e54d584454844c578d485a6755433a47cf96445b445473544644434
+4456dff4ff02faae57fc3304355854ebdff3fffff0fdff0bfdf9a44578ad
+b985445bff8ff4ff299afff6488a34c954ad54d66e44d494444655b679d4
+a5c59666c9c445bfb343b54555364465443444456ef4ff03f8efd543fc33
+0355a4cbeff3fffff0fdff0bfdf9a44578adb985445bff8ff4ff299afff6
+488a34c954ad54d66e44d494444655b679d4a5c59666c9c445bfb343b545
+55364465443444456ef4ff03f8efd543fc330355a4cbeff3fffff0fdff0b
+fdf9a44578adb985445bff8ff4ff299afff6488a34c954ad54d66e44d494
+444655b679d4a5c59666c9c445bfb343b54555364465443444456ef4ff03
+f8efd543fc330355a4cbeff3fffff0fcff0af67bdfea6546988655cf8ff5
+ff2afaadff55487c34c9549d44c76c44b4a5445546975bc4a5d4a55dfdc3
+334543437735553444564434443446f4ff0bf7ffa43453333333347cebef
+f3fffff0fcff0af67bdfea6546988655cf8ff5ff2afaadff55487c34c954
+9d44c76c44b4a5445546975bc4a5d4a55dfdc33345434377355534445644
+34443446f4ff0bf7ffa43453333333347cebeff3fffff0fcff0af67bdfea
+6546988655cf8ff5ff2afaadff55487c34c9549d44c76c44b4a544554697
+5bc4a5d4a55dfdc3334543437735553444564434443446f4ff0bf7ffa434
+53333333347cebeff3fffff0fdff0bfcf9fb85456875543345cf8ff5ff2b
+a8fb9d44486e34a7549c45d66a4594a4444446685ca47694844ae5e53465
+554368345434445545454433446ef5ff0bf7fd533346334333345dfbeff3
+fffff0fdff0bfcf9fb85456875543345cf8ff5ff2ba8fb9d44486e34a754
+9c45d66a4594a4444446685ca47694844ae5e53465554368345434445545
+454433446ef5ff0bf7fd533346334333345dfbeff3fffff0fdff0bfcf9fb
+85456875543345cf8ff5ff2ba8fb9d44486e34a7549c45d66a4594a44444
+46685ca47694844ae5e53465554368345434445545454433446ef5ff0bf7
+fd533346334333345dfbeff3fffff0fdff0bfbfea558754444697657ff8f
+f6ff2dfa9ffe5e44466f45a7558b45e5763694b44544574d6c9576556347
+e4db747ca544683444344554454454353446eff6ff0ad654343334643443
+3489fbf2fffff0fdff0bfbfea558754444697657ff8ff6ff2dfa9ffe5e44
+466f45a7558b45e5763694b44544574d6c9576556347e4db747ca5446834
+44344554454454353446eff6ff0ad6543433346434433489fbf2fffff0fd
+ff0bfbfea558754444697657ff8ff6ff2dfa9ffe5e44466f45a7558b45e5
+763694b44544574d6c9576556347e4db747ca54468344434455445445435
+3446eff6ff0ad6543433346434433489fbf2fffff0fdff0bfaee88754445
+9b85448cfd9cf6ff2d9affff5b54565e5486547847d4644866844535457a
+4959fe9a6544d5affb4486866834443444644544643744468ef6ff0a958b
+433333364334347ffaf2fffff0fdff0bfaee887544459b85448cfd9cf6ff
+2d9affff5b54565e5486547847d4644866844535457a4959fe9a6544d5af
+fb4486866834443444644544643744468ef6ff0a958b433333364334347f
+faf2fffff0fdff0bfaee887544459b85448cfd9cf6ff2d9affff5b54565e
+5486547847d4644866844535457a4959fe9a6544d5affb44868668344434
+44644544643744468ef6ff0a958b433333364334347ffaf2fffff0fdff0b
+fadc985459da534784578ad8f7ff2ff8bffbbf7844566f54855455488444
+464853543646696fedcdc84a46555effa543545b44444344744644554764
+5ad7acf7ff0a74d543333333543343affbf2fffff0fdff0bfadc985459da
+534784578ad8f7ff2ff8bffbbf7844566f54855455488444464853543646
+696fedcdc84a46555effa543545b444443447446445547645ad7acf7ff0a
+74d543333333543343affbf2fffff0fdff0bfadc985459da534784578ad8
+f7ff2ff8bffbbf7844566f54855455488444464853543646696fedcdc84a
+46555effa543545b444443447446445547645ad7acf7ff0a74d543333333
+543343affbf2fffff0fdff0bfb9ba56ce9534775444598f7f8ff30fe7cff
+fc5f9654556f655455445846a7577a556577bf777855547a7b683836acee
+63455c5445444464574365448457ed9af8ff02fb8663fc33043433436ffa
+f2fffff0fdff0bfb9ba56ce9534775444598f7f8ff30fe7cfffc5f965455
+6f655455445846a7577a556577bf777855547a7b683836acee63455c5445
+444464574365448457ed9af8ff02fb8663fc33043433436ffaf2fffff0fd
+ff0bfb9ba56ce9534775444598f7f8ff30fe7cfffc5f9654556f65545544
+5846a7577a556577bf777855547a7b683836acee63455c54454444645743
+65448457ed9af8ff02fb8663fc33043433436ffaf2fffff0fdff0cfe8eda
+e9444454465445bdeabff9ff31e7dffece5eb555466f555474afd99d84aa
+a954578887445aedc4bf8a7a76633455335b7b8487446447a94464445444
+8ff99ff9ff0be7e834334334333343343afbf2fffff0fdff0cfe8edae944
+4454465445bdeabff9ff31e7dffece5eb555466f555474afd99d84aaa954
+578887445aedc4bf8a7a76633455335b7b8487446447a944644454448ff9
+9ff9ff0be7e834334334333343343afbf2fffff0fdff0cfe8edae9444454
+465445bdeabff9ff31e7dffece5eb555466f555474afd99d84aaa9545788
+87445aedc4bf8a7a76633455335b7b8487446447a944644454448ff99ff9
+ff0be7e834334334333343343afbf2fffff0fcff0b7eec56b64346544455
+66ce9ffaff32fe7dffff7c7ba5565566487884963466556778887666789b
+effff65d9358c585455954ad8c73445534556644444334544cfe69f9ff0b
+7bd44334333343333334dfbef2fffff0fcff0b7eec56b6434654445566ce
+9ffaff32fe7dffff7c7ba5565566487884963466556778887666789befff
+f65d9358c585455954ad8c73445534556644444334544cfe69f9ff0b7bd4
+4334333343333334dfbef2fffff0fcff0b7eec56b6434654445566ce9ffa
+ff32fe7dffff7c7ba5565566487884963466556778887666789beffff65d
+9358c585455954ad8c73445534556644444334544cfe69f9ff0b7bd44334
+333343333334dfbef2fffff0fcff0b7c94774445544454445bef8cfaff0e
+e8dfffffa887b46644886ec7458aeff9ff1deefffffffe48ec5359484379
+58f9566ab87dbefecaa967675574578de69ffbff02f87b63f9330234ef9f
+f2fffff0fcff0b7c94774445544454445bef8cfaff0ee8dfffffa887b466
+44886ec7458aeff9ff1deefffffffe48ec535948437958f9566ab87dbefe
+caa967675574578de69ffbff02f87b63f9330234ef9ff2fffff0fcff0b7c
+94774445544454445bef8cfaff0ee8dfffffa887b46644886ec7458aeff9
+ff1deefffffffe48ec535948437958f9566ab87dbefecaa967675574578d
+e69ffbff02f87b63f9330234ef9ff2fffff0fcff0ca97bb6444444585446
+449ff8bffcff0dfe7effffaec7b6c46545bd7579cff2ff2ac57dc6335364
+543a58efffffb79ffffffffdcb86557455cf97cffddeffea556494333433
+333334334afdaff2fffff0fcff0ca97bb6444444585446449ff8bffcff0d
+fe7effffaec7b6c46545bd7579cff2ff2ac57dc6335364543a58efffffb7
+9ffffffffdcb86557455cf97cffddeffea556494333433333334334afdaf
+f2fffff0fcff0ca97bb6444444585446449ff8bffcff0dfe7effffaec7b6
+c46545bd7579cff2ff2ac57dc6335364543a58efffffb79ffffffffdcb86
+557455cf97cffddeffea556494333433333334334afdaff2fffff0fcff0c
+c9ec64444448754475345fff89fcff0bc8efffea6bc6b484959866aef0ff
+08fe745885443334549ffcff01b6effcff17fdb685554bfc654456b847e7
+e633433343333333436ff9eff2fffff0fcff0cc9ec64444448754475345f
+ff89fcff0bc8efffea6bc6b484959866aef0ff08fe745885443334549ffc
+ff01b6effcff17fdb685554bfc654456b847e7e633433343333333436ff9
+eff2fffff0fcff0cc9ec64444448754475345fff89fcff0bc8efffea6bc6
+b484959866aef0ff08fe745885443334549ffcff01b6effcff17fdb68555
+4bfc654456b847e7e633433343333333436ff9eff2fffff0fcff1be7a644
+654595644853464cfff88dffffd99fffffc969e59595746aeff7ff00eff8
+ff0dea454589333684dffffdeffffc6ffaff0ea555635cfec8668aeff764
+54233334fc33014bf9f1fffff0fcff1be7a644654595644853464cfff88d
+ffffd99fffffc969e59595746aeff7ff00eff8ff0dea454589333684dfff
+fdeffffc6ffaff0ea555635cfec8668aeff76454233334fc33014bf9f1ff
+fff0fcff1be7a644654595644853464cfff88dffffd99fffffc969e59595
+746aeff7ff00eff8ff0dea454589333684dffffdeffffc6ffaff0ea55563
+5cfec8668aeff76454233334fc33014bf9f1fffff0fcff19f7d658546857
+4476447445efffb988889dffffff8957e564459ef8ff03fea9568ff8ff0d
+feedb845339d75bfffc57fffffb7faff0cfee644338ebdfb99eac5333553
+fb33023467ccf1fffff0fcff19f7d6585468574476447445efffb988889d
+ffffff8957e564459ef8ff03fea9568ff8ff0dfeedb845339d75bfffc57f
+ffffb7faff0cfee644338ebdfb99eac5333553fb33023467ccf1fffff0fc
+ff19f7d6585468574476447445efffb988889dffffff8957e564459ef8ff
+03fea9568ff8ff0dfeedb845339d75bfffc57fffffb7faff0cfee644338e
+bdfb99eac5333553fb33023467ccf1fffff0fcff0cfab7a5467465576447
+7544b9cffcff07fdecda5d56e437dff9ff05fecaaada35effaff10eeefff
+eedeb436e7487ff9a87efffff9affaff13cd554334448543443333334333
+43333334447a9ff1fffff0fcff0cfab7a54674655764477544b9cffcff07
+fdecda5d56e437dff9ff05fecaaada35effaff10eeefffeedeb436e7487f
+f9a87efffff9affaff13cd55433444854344333333433343333334447a9f
+f1fffff0fcff0cfab7a54674655764477544b9cffcff07fdecda5d56e437
+dff9ff05fecaaada35effaff10eeefffeedeb436e7487ff9a87efffff9af
+faff13cd55433444854344333333433343333334447a9ff1fffff0fcff0c
+fc9e94664655764458473455cefcff06f99b875d75838ff8ff04c4466553
+39faff11fe7445effffef955b3346ec8646effffef6dfaff02db9443fc33
+0034f7330248fe9ff1fffff0fcff0cfc9e94664655764458473455cefcff
+06f99b875d75838ff8ff04c446655339faff11fe7445effffef955b3346e
+c8646effffef6dfaff02db9443fc330034f7330248fe9ff1fffff0fcff0c
+fc9e94664655764458473455cefcff06f99b875d75838ff8ff04c4466553
+39faff11fe7445effffef955b3346ec8646effffef6dfaff02db9443fc33
+0034f7330248fe9ff1fffff0fbff157f9764556664457464345577fddfff
+ffea4a475d8434f8ff05fa444343336ff9ff10d844aeffefffd553338f94
+33afffffcfb7faff03fbd54334fc330b4334433333343333443dfadff1ff
+fff0fbff157f9764556664457464345577fddfffffea4a475d8434f8ff05
+fa444343336ff9ff10d844aeffefffd553338f9433afffffcfb7faff03fb
+d54334fc330b4334433333343333443dfadff1fffff0fbff157f97645566
+64457464345577fddfffffea4a475d8434f8ff05fa444343336ff9ff10d8
+44aeffefffd553338f9433afffffcfb7faff03fbd54334fc330b43344333
+33343333443dfadff1fffff0fbff158deb457866437655733543459b67ff
+ffa947584b8357f8ff05e433344336eff9ff10fea46cffeffc644358de64
+34dffffebff6faff02fe9944f533044233343ceaf0fffff0fbff158deb45
+7866437655733543459b67ffffa947584b8357f8ff05e433344336eff9ff
+10fea46cffeffc644358de6434dffffebff6faff02fe9944f53304423334
+3ceaf0fffff0fbff158deb457866437655733543459b67ffffa947584b83
+57f8ff05e433344336eff9ff10fea46cffeffc644358de6434dffffebff6
+faff02fe9944f533044233343ceaf0fffff0fbff15bbfb66969445554843
+4634554865faedb645594a639ef8ff04934334338ffbff14d7558dfffaaa
+cffffb4368adfe6338dfffffcff7effaff01c844fc33013434fc33054333
+33335e9ef0fffff0fbff15bbfb669694455548434634554865faedb64559
+4a639ef8ff04934334338ffbff14d7558dfffaaacffffb4368adfe6338df
+ffffcff7effaff01c844fc33013434fc3305433333335e9ef0fffff0fbff
+15bbfb669694455548434634554865faedb645594a639ef8ff0493433433
+8ffbff14d7558dfffaaacffffb4368adfe6338dfffffcff7effaff01c844
+fc33013434fc3305433333335e9ef0fffff0fbff14e9fb5d6b5446545544
+4534544685f77e7645674545f8ff04fd4335337cfbff15b5335646fffffc
+8bbffea8aeffed733aabaadedff8effaff01f854fa330043fb330334447b
+bff0fffff0fbff14e9fb5d6b54465455444534544685f77e7645674545f8
+ff04fd4335337cfbff15b5335646fffffc8bbffea8aeffed733aabaadedf
+f8effaff01f854fa330043fb330334447bbff0fffff0fbff14e9fb5d6b54
+465455444534544685f77e7645674545f8ff04fd4335337cfbff15b53356
+46fffffc8bbffea8aeffed733aabaadedff8effaff01f854fa330043fb33
+0334447bbff0fffff0fbff14f8c5d896547544644444344555a5f75c6654
+664489f8ff04f6335438bffcff15f946aeff74efffffd58ffffefffffa94
+368dfc8ccff7f9ff01fb44f433024475a9effffff0fbff14f8c5d8965475
+44644444344555a5f75c6654664489f8ff04f6335438bffcff15f946aeff
+74efffffd58ffffefffffa94368dfc8ccff7f9ff01fb44f433024475a9ef
+fffff0fbff14f8c5d896547544644444344555a5f75c6654664489f8ff04
+f6335438bffcff15f946aeff74efffffd58ffffefffffa94368dfc8ccff7
+f9ff01fb44f433024475a9effffff0fbff14fa6de8756574564454544436
+54b6f56a6754543bdff8ff12b4367469bffffffffc65cfffff849fffffb6
+9ffcff07f883357cfeebffe6f9ff09fd654333333334443334fc330253ad
+cceffffff0fbff14fa6de875657456445454443654b6f56a6754543bdff8
+ff12b4367469bffffffffc65cfffff849fffffb69ffcff07f883357cfeeb
+ffe6f9ff09fd654333333334443334fc330253adcceffffff0fbff14fa6d
+e875657456445454443654b6f56a6754543bdff8ff12b4367469bfffffff
+fc65cfffff849fffffb69ffcff07f883357cfeebffe6f9ff09fd65433333
+3334443334fc330253adcceffffff0fbff13fe8ffa756856554464634445
+55a5e56a7845535ff8ff04fc537fdaf5fcff0aa38fffffffd44efffffaae
+fcff07f98334bfffffffb7f9ff10fb64334333333344333433333343566e
+9feffffff0fbff13fe8ffa75685655446463444555a5e56a7845535ff8ff
+04fc537fdaf5fcff0aa38fffffffd44efffffaaefcff07f98334bfffffff
+b7f9ff10fb64334333333344333433333343566e9feffffff0fbff13fe8f
+fa75685655446463444555a5e56a7845535ff8ff04fc537fdaf5fcff0aa3
+8fffffffd44efffffaaefcff07f98334bfffffffb7f9ff10fb6433433333
+3344333433333343566e9feffffff0faff129ef759685457455443544555
+75b45a765443bff8ff04c57affffc6fcff0057fcff11f93dfffffc58efff
+fffffa53339efeffff8bf8ff0f84334333333344333334333433bf78cfef
+fffff0faff129ef75968545745544354455575b45a765443bff8ff04c57a
+ffffc6fcff0057fcff11f93dfffffc58effffffffa53339efeffff8bf8ff
+0f84334333333344333334333433bf78cfeffffff0faff129ef759685457
+45544354455575b45a765443bff8ff04c57affffc6fcff0057fcff11f93d
+fffffc58effffffffa53339efeffff8bf8ff0f8433433333334433333433
+3433bf78cfeffffff0faff11cbfb57954568484444444555548559675434
+f8ff20fd9bafffff6afffffffc5dfffcb9876639fffffe54bffffffffc53
+3356779bff8df8ff0efc443533333344443333443646fe8aeefffff0faff
+11cbfb57954568484444444555548559675434f8ff20fd9bafffff6affff
+fffc5dfffcb9876639fffffe54bffffffffc533356779bff8df8ff0efc44
+3533333344443333443646fe8aeefffff0faff11cbfb5795456848444444
+4555548559675434f8ff20fd9bafffff6afffffffc5dfffcb9876639ffff
+fe54bffffffffc533356779bff8df8ff0efc443533333344443333443646
+fe8aeefffff0faff11f8fea9945895584534444956457459664437f7ff19
+e8effffe4dfffffffa38fb5333433335cfffffc4bffffffffe93fc330159
+7bf7ff0d743534333334443343535559fe8feefffff0faff11f8fea99458
+95584534444956457459664437f7ff19e8effffe4dfffffffa38fb533343
+3335cfffffc4bffffffffe93fc3301597bf7ff0d74353433333444334353
+5559fe8feefffff0faff11f8fea9945895584534444956457459664437f7
+ff19e8effffe4dfffffffa38fb5333433335cfffffc4bffffffffe93fc33
+01597bf7ff0d743534333334443343535559fe8feefffff0faff11fbafff
+8678c4644434445c5645544b66644bf7ff14eefffffa6ffffffffd345333
+34333894bffffff6bffcff06d4354456875449f7ff0dc434333333344445
+43537cbfd8efeefffff0faff11fbafff8678c4644434445c5645544b6664
+4bf7ff14eefffffa6ffffffffd34533334333894bffffff6bffcff06d435
+4456875449f7ff0dc43433333334444543537cbfd8efeefffff0faff11fb
+afff8678c4644434445c5645544b66644bf7ff14eefffffa6ffffffffd34
+533334333894bffffff6bffcff06d4354456875449f7ff0dc43433333334
+444543537cbfd8efeefffff0f9ff108efff6c894744444446b5645555b67
+544ef4ff11f7affffffffe533334333338b97ffffffeadfcff07f6464545
+557744eff8ff0cf5333433334333453356fffb6eedfffff0f9ff108efff6
+c894744444446b5645555b67544ef4ff11f7affffffffe533334333338b9
+7ffffffeadfcff07f6464545557744eff8ff0cf5333433334333453356ff
+fb6eedfffff0f9ff108efff6c894744444446b5645555b67544ef4ff11f7
+affffffffe533334333338b97ffffffeadfcff07f6464545557744eff8ff
+0cf5333433334333453356fffb6eedfffff0f9ff10e8eff8ea7544734454
+886544555b56648ff4ff01f4effcff0b5335843345338a7dffffff79fcff
+07fe469333435777cff8ff0cf644453333334466659efa77dfedfffff0f9
+ff10e8eff8ea7544734454886544555b56648ff4ff01f4effcff0b533584
+3345338a7dffffff79fcff07fe469333435777cff8ff0cf6444533333344
+66659efa77dfedfffff0f9ff10e8eff8ea7544734454886544555b56648f
+f4ff01f4effcff0b5335843345338a7dffffff79fcff07fe469333435777
+cff8ff0cf644453333334466659efa77dfedfffff0f9ff10fd9dfceb6559
+533844a59554565a5554eff4ff00e6fcff0cfe45bdc43344436edeffffff
+67fcff07fe747334334789eff8ff0bfb4446333344458e66b758efecffff
+f0f9ff10fd9dfceb6559533844a59554565a5554eff4ff00e6fcff0cfe45
+bdc43344436edeffffff67fcff07fe747334334789eff8ff0bfb44463333
+44458e66b758efecfffff0f9ff10fd9dfceb6559533844a59554565a5554
+eff4ff00e6fcff0cfe45bdc43344436edeffffff67fcff07fe7473343347
+89eff8ff0bfb4446333344458e66b758efecfffff0f8ff0ef8efee669a43
+484585b4657649453cf3ff009afbff0b4cffd33333435daefffffe5dfcff
+06eec533333336bff7ff09fd69b643345874bd636beafffff0f8ff0ef8ef
+ee669a43484585b4657649453cf3ff009afbff0b4cffd33333435daeffff
+fe5dfcff06eec533333336bff7ff09fd69b643345874bd636beafffff0f8
+ff0ef8efee669a43484585b4657649453cf3ff009afbff0b4cffd3333343
+5daefffffe5dfcff06eec533333336bff7ff09fd69b643345874bd636bea
+fffff0f8ff0efe9fffa9b634a54768a5b55559549ff3ff007efbff0b88fe
+f5333334775ffffff8affcff07feeb43333356768ff7ff07c9fb87dcfed8
+76ade9fffff0f8ff0efe9fffa9b634a54768a5b55559549ff3ff007efbff
+0b88fef5333334775ffffff8affcff07feeb43333356768ff7ff07c9fb87
+dcfed876ade9fffff0f8ff0efe9fffa9b634a54768a5b55559549ff3ff00
+7efbff0b88fef5333334775ffffff8affcff07feeb43333356768ff7ff07
+c9fb87dcfed876ade9fffff0f7ff0ccbffbae86594775d6684547655f2ff
+006ffbff07e77cdc433346a56ff6ff0583333377845ff7ff06f566887777
+8bdffbff07feffdfdffffffffef5fffff0f7ff0ccbffbae86594775d6684
+547655f2ff006ffbff07e77cdc433346a56ff6ff0583333377845ff7ff06
+f5668877778bdffbff07feffdfdffffffffef5fffff0f7ff0ccbffbae865
+94775d6684547655f2ff006ffbff07e77cdc433346a56ff6ff0583333377
+845ff7ff06f5668877778bdffbff07feffdfdffffffffef5fffff0f7ff0c
+fdaeefffda55b4ab586554954bf3ff01fc4efcff08feeda49fd88989b59f
+f6ff05d445569c94cff7ff03fbdedeeffbff0ddeffe58bff6e6ffffebde5
+97bdbef8fffff0f7ff0cfdaeefffda55b4ab586554954bf3ff01fc4efcff
+08feeda49fd88989b59ff6ff05d445569c94cff7ff03fbdedeeffbff0dde
+ffe58bff6e6ffffebde597bdbef8fffff0f7ff0cfdaeefffda55b4ab5865
+54954bf3ff01fc4efcff08feeda49fd88989b59ff6ff05d445569c94cff7
+ff03fbdedeeffbff0ddeffe58bff6e6ffffebde597bdbef8fffff0f6ff0b
+fabdfffcbb49e6bf7654854ff3ff01f95efaff05fd67aab75558f5ff05f9
+45669859dff6ff008ff9ff0fa4cff738fe579fcbfe76db549b6577affaff
+fff0f6ff0bfabdfffcbb49e6bf7654854ff3ff01f95efaff05fd67aab755
+58f5ff05f945669859dff6ff008ff9ff0fa4cff738fe579fcbfe76db549b
+6577affafffff0f6ff0bfabdfffcbb49e6bf7654854ff3ff01f95efaff05
+fd67aab75558f5ff05f945669859dff6ff008ff9ff0fa4cff738fe579fcb
+fe76db549b6577affafffff0f5ff0afcacfc94aa79fd6855578ff3ff01f5
+9efaff05eefd989abdeff4ff03947757daf5ff009df9ff0ffb5dff56fd45
+eb48dfa55d849b46b6effafffff0f5ff0afcacfc94aa79fd6855578ff3ff
+01f59efaff05eefd989abdeff4ff03947757daf5ff009df9ff0ffb5dff56
+fd45eb48dfa55d849b46b6effafffff0f5ff0afcacfc94aa79fd6855578f
+f3ff01f59efaff05eefd989abdeff4ff03947757daf5ff009df9ff0ffb5d
+ff56fd45eb48dfa55d849b46b6effafffff0f4ff09febabefecffcde8cd5
+dff3ff01e6aef9ff03feefffeef3ff03f64dfffcf5ff00e8f8ff0dd6efd8
+ee5dd436bff846d48c4c6ef9fffff0f4ff09febabefecffcde8cd5dff3ff
+01e6aef9ff03feefffeef3ff03f64dfffcf5ff00e8f8ff0dd6efd8ee5dd4
+36bff846d48c4c6ef9fffff0f4ff09febabefecffcde8cd5dff3ff01e6ae
+f9ff03feefffeef3ff03f64dfffcf5ff00e8f8ff0dd6efd8ee5dd436bff8
+46d48c4c6ef9fffff0f2ff06bbbbceffffffe5f2ff0198ccf7ff01efdff3
+ff04fd58fff97ff6ff00f8f8ff0efa6fffffec59358876446467558aeffa
+fffff0f2ff06bbbbceffffffe5f2ff0198ccf7ff01efdff3ff04fd58fff9
+7ff6ff00f8f8ff0efa6fffffec59358876446467558aeffafffff0f2ff06
+bbbbceffffffe5f2ff0198ccf7ff01efdff3ff04fd58fff97ff6ff00f8f8
+ff0efa6fffffec59358876446467558aeffafffff0f0ff04ecbcceff69f2
+ff025cfacee8ff03a4cffb58f6ff01fbcffaff0fcaa957766664678889bd
+eff9fffffebffafffff0f0ff04ecbcceff69f2ff025cfacee8ff03a4cffb
+58f6ff01fbcffaff0fcaa957766664678889bdeff9fffffebffafffff0f0
+ff04ecbcceff69f2ff025cfacee8ff03a4cffb58f6ff01fbcffaff0fcaa9
+57766664678889bdeff9fffffebffafffff0eeff02fdc94ef3ff03fd3efb
+cde8ff04f77ffe46dff6ff009ffaff047bcc89bceffaff04faffffffbffa
+fffff0eeff02fdc94ef3ff03fd3efbcde8ff04f77ffe46dff6ff009ffaff
+047bcc89bceffaff04faffffffbffafffff0eeff02fdc94ef3ff03fd3efb
+cde8ff04f77ffe46dff6ff009ffaff047bcc89bceffaff04faffffffbffa
+fffff0edff01f96ff3ff03f73cfedde8ff04fb4dffa78ef6ff00dafaff02
+8fffcff8ff04fafffffebffafffff0edff01f96ff3ff03f73cfedde8ff04
+fb4dffa78ef6ff00dafaff028fffcff8ff04fafffffebffafffff0edff01
+f96ff3ff03f73cfedde8ff04fb4dffa78ef6ff00dafaff028fffcff8ff04
+fafffffebffafffff0edff01f4cff3ff03d54efffee7ff0498fff5d7eef7
+ff01f9effbff029ffeaffcff08eddbba9997ab79adbffafffff0edff01f4
+cff3ff03d54efffee7ff0498fff5d7eef7ff01f9effbff029ffeaffcff08
+eddbba9997ab79adbffafffff0edff01f4cff3ff03d54efffee7ff0498ff
+f5d7eef7ff01f9effbff029ffeaffcff08eddbba9997ab79adbffafffff0
+edff00c6f2ff027956dfe6ff04e5eff78e7df7ff01fe9ffcff10fd787658
+a987765445785796a8dd55a9cffafffff0edff00c6f2ff027956dfe6ff04
+e5eff78e7df7ff01fe9ffcff10fd787658a987765445785796a8dd55a9cf
+fafffff0edff00c6f2ff027956dfe6ff04e5eff78e7df7ff01fe9ffcff10
+fd787658a987765445785796a8dd55a9cffafffff0edff007af3ff02fc5f
+b7e5ff05f56ff95fe9cff7ff00dbfcff0ffe9a7684bbb968d74bff78f9fe
+df97dff9fffff0edff007af3ff02fc5fb7e5ff05f56ff95fe9cff7ff00db
+fcff0ffe9a7684bbb968d74bff78f9fedf97dff9fffff0edff007af3ff02
+fc5fb7e5ff05f56ff95fe9cff7ff00dbfcff0ffe9a7684bbb968d74bff78
+f9fedf97dff9fffff0eeff01fe4ef3ff02f78f95f0ff00edf6ff06fd5dfa
+4effaaeff8ff01fbdffbff0d9bd5fffe6af94aff77f9ffefe7dff9fffff0
+eeff01fe4ef3ff02f78f95f0ff00edf6ff06fd5dfa4effaaeff8ff01fbdf
+fbff0d9bd5fffe6af94aff77f9ffefe7dff9fffff0eeff01fe4ef3ff02f7
+8f95f0ff00edf6ff06fd5dfa4effaaeff8ff01fbdffbff0d9bd5fffe6af9
+4aff77f9ffefe7dff9fffff0eeff01fb6ff3ff03c4efb68ef3ff05feeeb4
+aeffecf8ff0688fc4afffe89eff8ff00aefbff0d8bb5ffff6afa49ff77f9
+fffff7dff9fffff0eeff01fb6ff3ff03c4efb68ef3ff05feeeb4aeffecf8
+ff0688fc4afffe89eff8ff00aefbff0d8bb5ffff6afa49ff77f9fffff7df
+f9fffff0eeff01fb6ff3ff03c4efb68ef3ff05feeeb4aeffecf8ff0688fc
+4afffe89eff8ff00aefbff0d8bb5ffff6afa49ff77f9fffff7dff9fffff0
+eeff01f7aff4ff05fe59ffd85eeff4ff0596678959ddddf8ff07e6bd59ff
+fffd99aef9ff01f98efcff0d6bc5ffff5afa48ff86f8ffeff7dff9fffff0
+eeff01f7aff4ff05fe59ffd85eeff4ff0596678959ddddf8ff07e6bd59ff
+fffd99aef9ff01f98efcff0d6bc5ffff5afa48ff86f8ffeff7dff9fffff0
+eeff01f7aff4ff05fe59ffd85eeff4ff0596678959ddddf8ff07e6bd59ff
+fffd99aef9ff01f98efcff0d6bc5ffff5afa48ff86f8ffeff7dff9fffff0
+eeff01f4eff4ff05f77ffffc668ff1ff05c8667878888bfbff02fb6c59fc
+ff02d98beffaff12e8efffffff7ad6fffe5afb49ff75f8fffff7dff9ffff
+f0eeff01f4eff4ff05f77ffffc668ff1ff05c8667878888bfbff02fb6c59
+fcff02d98beffaff12e8efffffff7ad6fffe5afb49ff75f8fffff7dff9ff
+fff0eeff01f4eff4ff05f77ffffc668ff1ff05c8667878888bfbff02fb6c
+59fcff02d98beffaff12e8efffffff7ad6fffe5afb49ff75f8fffff7dff9
+fffff0eeff00c5f3ff05a6efffff754df2ff05ecbcccddeeeff9ff01685a
+fbff1afb78adefffffffebaaefffffff7bd6ffff4bfb4aff75f8fffff7df
+f9fffff0eeff00c5f3ff05a6efffff754df2ff05ecbcccddeeeff9ff0168
+5afbff1afb78adefffffffebaaefffffff7bd6ffff4bfb4aff75f8fffff7
+dff9fffff0eeff00c5f3ff05a6efffff754df2ff05ecbcccddeeeff9ff01
+685afbff1afb78adefffffffebaaefffffff7bd6ffff4bfb4aff75f8ffff
+f7dff9fffff0eeff0089f4ff06e76ffffffffb6bf4ff06fd66787765458d
+f8ff01a46cf9ff05c988999989befbff0d7bc7ffff5afc59ff76f8fffff6
+dff9fffff0eeff0089f4ff06e76ffffffffb6bf4ff06fd66787765458df8
+ff01a46cf9ff05c988999989befbff0d7bc7ffff5afc59ff76f8fffff6df
+f9fffff0eeff0089f4ff06e76ffffffffb6bf4ff06fd66787765458df8ff
+01a46cf9ff05c988999989befbff0d7bc7ffff5afc59ff76f8fffff6dff9
+fffff0eeff005ef5ff02fe55dffcff00abf4ff08f5affffffffeb858effa
+ff01d54eeeff0d8bc7fffe4afc5aff77f8fffff6eff9fffff0eeff005ef5
+ff02fe55dffcff00abf4ff08f5affffffffeb858effaff01d54eeeff0d8b
+c7fffe4afc5aff77f8fffff6eff9fffff0eeff005ef5ff02fe55dffcff00
+abf4ff08f5affffffffeb858effaff01d54eeeff0d8bc7fffe4afc5aff77
+f8fffff6eff9fffff0efff01fb5ff5ff01c44dfbff00eff4ff0098faff01
+d74bfaff02fc4befefff0d7bb7fffe4afd4aff87f8fffff6eff9fffff0ef
+ff01fb5ff5ff01c44dfbff00eff4ff0098faff01d74bfaff02fc4befefff
+0d7bb7fffe4afd4aff87f8fffff6eff9fffff0efff01fb5ff5ff01c44dfb
+ff00eff4ff0098faff01d74bfaff02fc4befefff0d7bb7fffe4afd4aff87
+f8fffff6eff9fffff0efff01f6bff6ff02fd44cfefff01fc4df9ff01b58e
+faff0474dfedc88af2ff0d7bb7fffe49fe4bff78f7fffff6eff9fffff0ef
+ff01f6bff6ff02fd44cfefff01fc4df9ff01b58efaff0474dfedc88af2ff
+0d7bb7fffe49fe4bff78f7fffff6eff9fffff0efff01f6bff6ff02fd44cf
+efff01fc4df9ff01b58efaff0474dfedc88af2ff0d7bb7fffe49fe4bff78
+f7fffff6eff9fffff0efff00b5f5ff01b55ceeff04f6cfb6448efbff01a5
+affbff0596544557776df3ff0d7bb7fffe49fe4cff78f8fffff6eff9ffff
+f0efff00b5f5ff01b55ceeff04f6cfb6448efbff01a5affbff0596544557
+776df3ff0d7bb7fffe49fe4cff78f8fffff6eff9fffff0efff00b5f5ff01
+b55ceeff04f6cfb6448efbff01a5affbff0596544557776df3ff0d7bb7ff
+fe49fe4cff78f8fffff6eff9fffff0f0ff01fe5cf7ff03fea658efeeff05
+e6f8357755dffcff02fd66bffbff05feffffffd5eff4ff0d7ba8fffe49fe
+4cff88f7fffff6eff9fffff0f0ff01fe5cf7ff03fea658efeeff05e6f835
+7755dffcff02fd66bffbff05feffffffd5eff4ff0d7ba8fffe49fe4cff88
+f7fffff6eff9fffff0f0ff01fe5cf7ff03fea658efeeff05e6f8357755df
+fcff02fd66bffbff05feffffffd5eff4ff0d7ba8fffe49fe4cff88f7ffff
+f6eff9fffff0f0ff01f59ff8ff03eb7457afedff05a8a37ffffceffbff02
+fa57dff8ff01fa8ff4ff0d7bb8fffd4afe4dff89f7fffff6eff9fffff0f0
+ff01f59ff8ff03eb7457afedff05a8a37ffffceffbff02fa57dff8ff01fa
+8ff4ff0d7bb8fffd4afe4dff89f7fffff6eff9fffff0f0ff01f59ff8ff03
+eb7457afedff05a8a37ffffceffbff02fa57dff8ff01fa8ff4ff0d7bb8ff
+fd4afe4dff89f7fffff6eff9fffff0f0ff0086faff05eca876678ccdecff
+027d53bff7ff01e75bf7ff005ff4ff0c7cb8fffd4afe4cffacf8fffff6f8
+fffff0f0ff0086faff05eca876678ccdecff027d53bff7ff01e75bf7ff00
+5ff4ff0c7cb8fffd4afe4cffacf8fffff6f8fffff0f0ff0086faff05eca8
+76678ccdecff027d53bff7ff01e75bf7ff005ff4ff0c7cb8fffd4afe4cff
+acf8fffff6f8fffff0f1ff01fa4efcff08fb75468beffe9db9efedff026d
+84eff6ff0185aff8ff006df4ff0c6cb8fffc4bfb4dff8cf7fffff5f8ffff
+f0f1ff01fa4efcff08fb75468beffe9db9efedff026d84eff6ff0185aff8
+ff006df4ff0c6cb8fffc4bfb4dff8cf7fffff5f8fffff0f1ff01fa4efcff
+08fb75468beffe9db9efedff026d84eff6ff0185aff8ff006df4ff0c6cb8
+fffc4bfb4dff8cf7fffff5f8fffff0f1ff0ea4dffffffff95799bfffffff
+fa8abfedff076dc5ffffc74579effbff00faf7ff008bf4ff0c6ca9fffc4b
+fb4cff8cf7fffff5f8fffff0f1ff0ea4dffffffff95799bffffffffa8abf
+edff076dc5ffffc74579effbff00faf7ff008bf4ff0c6ca9fffc4bfb4cff
+8cf7fffff5f8fffff0f1ff0ea4dffffffff95799bffffffffa8abfedff07
+6dc5ffffc74579effbff00faf7ff008bf4ff0c6ca9fffc4bfb4cff8cf7ff
+fff5f8fffff0f2ff01fa4cfcff0284efe9fcff02fe87bfedff07befdffff
+75dca65ef1ff00a9f4ff0c6da9fffc4bfb4cff8bf7fffff5f8fffff0f2ff
+01fa4cfcff0284efe9fcff02fe87bfedff07befdffff75dca65ef1ff00a9
+f4ff0c6da9fffc4bfb4cff8bf7fffff5f8fffff0f2ff01fa4cfcff0284ef
+e9fcff02fe87bfedff07befdffff75dca65ef1ff00a9f4ff0c6da9fffc4b
+fb4cff8bf7fffff5f8fffff0f2ff0873bffffffffd4bff9dfbff01c4efed
+ff07dcfffffe43643567f1ff00a9f4ff0c6c99fffb4bfb4cff8cf7fffff5
+f8fffff0f2ff0873bffffffffd4bff9dfbff01c4efedff07dcfffffe4364
+3567f1ff00a9f4ff0c6c99fffb4bfb4cff8cf7fffff5f8fffff0f2ff0873
+bffffffffd4bff9dfbff01c4efedff07dcfffffe43643567f1ff00a9f4ff
+0c6c99fffb4bfb4cff8cf7fffff5f8fffff0f3ff01f939fcff03f66fff7f
+fbff00f6f1ff00cef9ff06fe433333569adff4ff01db7cf4ff0c5d99fffb
+4aa539ff7cf7fffff5f8fffff0f3ff01f939fcff03f66fff7ffbff00f6f1
+ff00cef9ff06fe433333569adff4ff01db7cf4ff0c5d99fffb4aa539ff7c
+f7fffff5f8fffff0f3ff01f939fcff03f66fff7ffbff00f6f1ff00cef9ff
+06fe433333569adff4ff01db7cf4ff0c5d99fffb4aa539ff7cf7fffff5f8
+fffff0f3ff01f57ffcff03b4bfff7ffbff01f7bff3ff01edeff9ff06fe63
+33333b546ef5ff02fe875ff4ff0c6da9fffb479dc6bf6cf7fffff5f8ffff
+f0f3ff01f57ffcff03b4bfff7ffbff01f7bff3ff01edeff9ff06fe633333
+3b546ef5ff02fe875ff4ff0c6da9fffb479dc6bf6cf7fffff5f8fffff0f3
+ff01f57ffcff03b4bfff7ffbff01f7bff3ff01edeff9ff06fe6333333b54
+6ef5ff02fe875ff4ff0c6da9fffb479dc6bf6cf7fffff5f8fffff0f3ff09
+f4effea69ec849fffe8ffbff01f85ff5ff02fe866df7ff05e633334d553a
+f5ff02f7577ff4ff0c5db8fffb46ffec5e6cf7fffff5f8fffff0f3ff09f4
+effea69ec849fffe8ffbff01f85ff5ff02fe866df7ff05e633334d553af5
+ff02f7577ff4ff0c5db8fffb46ffec5e6cf7fffff5f8fffff0f3ff09f4ef
+fea69ec849fffe8ffbff01f85ff5ff02fe866df7ff05e633334d553af5ff
+02f7577ff4ff0c5db8fffb46ffec5e6cf7fffff5f8fffff0f3ff09f77863
+577347dffffb9ffbff01f95bf5ff01d6aef5ff04b8aeff5b46f5ff028344
+7ff4ff0c6ec8fffb4afff9344497ffffe5f8fffff0f3ff09f77863577347
+dffffb9ffbff01f95bf5ff01d6aef5ff04b8aeff5b46f5ff0283447ff4ff
+0c6ec8fffb4afff9344497ffffe5f8fffff0f3ff09f77863577347dffffb
+9ffbff01f95bf5ff01d6aef5ff04b8aeff5b46f5ff0283447ff4ff0c6ec8
+fffb4afff9344497ffffe5f8fffff0f3ff09fe99abfffedffffffabffbff
+01f8c9f5ff005df1ff026cb3eff7ff03f84334cff4ff0c5eb9fffb38ffe4
+6745a7fffeb6f8fffff0f3ff09fe99abfffedffffffabffbff01f8c9f5ff
+005df1ff026cb3eff7ff03f84334cff4ff0c5eb9fffb38ffe46745a7fffe
+b6f8fffff0f3ff09fe99abfffedffffffabffbff01f8c9f5ff005df1ff02
+6cb3eff7ff03f84334cff4ff0c5eb9fffb38ffe46745a7fffeb6f8fffff0
+ebff01f9dffbff01f8f8f1ff01baeff6ff025ce4aff8ff03fe743337f3ff
+0c5eb8fffa45ffe5ff6cf7eadda6f8fffff0ebff01f9dffbff01f8f8f1ff
+01baeff6ff025ce4aff8ff03fe743337f3ff0c5eb8fffa45ffe5ff6cf7ea
+dda6f8fffff0ebff01f9dffbff01f8f8f1ff01baeff6ff025ce4aff8ff03
+fe743337f3ff0c5eb8fffa45ffe5ff6cf7eadda6f8fffff0ebff01f8dffb
+ff01f8f8f2ff05c5464afffffefaff03fe6ff57ff9ff04feb643345ef3ff
+0c4eb8fff944cf88ff5bf7a37ba6f8fffff0ebff01f8dffbff01f8f8f2ff
+05c5464afffffefaff03fe6ff57ff9ff04feb643345ef3ff0c4eb8fff944
+cf88ff5bf7a37ba6f8fffff0ebff01f8dffbff01f8f8f2ff05c5464affff
+fefaff03fe6ff57ff9ff04feb643345ef3ff0c4eb8fff944cf88ff5bf7a3
+7ba6f8fffff0ebff01f9cffbff01f9e7f2ff05aedfe5bffdeff8ff01f99f
+faff05eed7433346bff3ff0c4db9fff846df59ff6bf7a35ca7f8fffff0eb
+ff01f9cffbff01f9e7f2ff05aedfe5bffdeff8ff01f99ffaff05eed74333
+46bff3ff0c4db9fff846df59ff6bf7a35ca7f8fffff0ebff01f9cffbff01
+f9e7f2ff05aedfe5bffdeff8ff01f99ffaff05eed7433346bff3ff0c4db9
+fff846df59ff6bf7a35ca7f8fffff0ebff01f9cffbff02fac8dff1ff02fc
+4df8efff04fc64333378f2ff0c4ca9fff639ee84af5bf7834b97f8fffff0
+ebff01f9cffbff02fac8dff1ff02fc4df8efff04fc64333378f2ff0c4ca9
+fff639ee84af5bf7834b97f8fffff0ebff01f9cffbff02fac8dff1ff02fc
+4df8efff04fc64333378f2ff0c4ca9fff639ee84af5bf7834b97f8fffff0
+ebff01fabffaff01a85ef0ff0179e8f0ff05fe853333356ef2ff0c4da558
+5445759a5a5bf7c69b97f8fffff0ebff01fabffaff01a85ef0ff0179e8f0
+ff05fe853333356ef2ff0c4da5585445759a5a5bf7c69b97f8fffff0ebff
+01fabffaff01a85ef0ff0179e8f0ff05fe853333356ef2ff0c4da5585445
+759a5a5bf7c69b97f8fffff0ebff01fb9ff9ff0097f0ff01d6aaf0ff05e7
+43433346dff2ff0c4da85eedba8654444bf7edfb97f8fffff0ebff01fb9f
+f9ff0097f0ff01d6aaf0ff05e743433346dff2ff0c4da85eedba8654444b
+f7edfb97f8fffff0ebff01fb9ff9ff0097f0ff01d6aaf0ff05e743433346
+dff2ff0c4da85eedba8654444bf7edfb97f8fffff0ebff01fd8ff9ff01e6
+cff1ff01f96af1ff05fe743433346ef1ff0c5d8668aceffffffe5bf7effc
+97f8fffff0ebff01fd8ff9ff01e6cff1ff01f96af1ff05fe743433346ef1
+ff0c5d8668aceffffffe5bf7effc97f8fffff0ebff01fd8ff9ff01e6cff1
+ff01f96af1ff05fe743433346ef1ff0c5d8668aceffffffe5bf7effc97f8
+fffff0ebff01fe7ff9ff01f89ff1ff01fe58f3ff07feede744443346dff1
+ff0c7d746456555666685bf7fffd98f8fffff0ebff01fe7ff9ff01f89ff1
+ff01fe58f3ff07feede744443346dff1ff0c7d746456555666685bf7fffd
+98f8fffff0ebff01fe7ff9ff01f89ff1ff01fe58f3ff07feede744443346
+dff1ff0c7d746456555666685bf7fffd98f8fffff0eaff007ff9ff01eb8f
+f0ff00b5f1ff05c889755459eff1ff0c6c8555bfffffec585bf7fffda8f8
+fffff0eaff007ff9ff01eb8ff0ff00b5f1ff05c889755459eff1ff0c6c85
+55bfffffec585bf7fffda8f8fffff0eaff007ff9ff01eb8ff0ff00b5f1ff
+05c889755459eff1ff0c6c8555bfffffec585bf7fffda8f8fffff0eaff00
+7ff9ff01bd8ff0ff01f6cff2ff09eeffedbafd8efffeeedff6ff0dfe6965
+97feffffffd55bf6fffea9f8fffff0eaff007ff9ff01bd8ff0ff01f6cff2
+ff09eeffedbafd8efffeeedff6ff0dfe696597feffffffd55bf6fffea9f8
+fffff0eaff007ff9ff01bd8ff0ff01f6cff2ff09eeffedbafd8efffeeedf
+f6ff0dfe696597feffffffd55bf6fffea9f8fffff0eaff007ef9ff01db9c
+f0ff01fb8fedff06fb67656764666df9ff0efd84434658abceeeecb64af6
+fffea8f8fffff0eaff007ef9ff01db9cf0ff01fb8fedff06fb6765676466
+6df9ff0efd84434658abceeeecb64af6fffea8f8fffff0eaff007ef9ff01
+db9cf0ff01fb8fedff06fb67656764666df9ff0efd84434658abceeeecb6
+4af6fffea8f8fffff0eaff009bf9ff01f9c8efff007eecff05ccfffebefe
+7af9ff0ef86aa98999a8764444364af6fffea9f8fffff0eaff009bf9ff01
+f9c8efff007eecff05ccfffebefe7af9ff0ef86aa98999a8764444364af6
+fffea9f8fffff0eaff009bf9ff01f9c8efff007eecff05ccfffebefe7af9
+ff0ef86aa98999a8764444364af6fffea9f8fffff0eaff00baf9ff02fe95
+acf0ff00d8ecff06fbdf97cceee6effaff0eb86544665567594666444ae6
+fffd9af8fffff0eaff00baf9ff02fe95acf0ff00d8ecff06fbdf97cceee6
+effaff0eb86544665567594666444ae6fffd9af8fffff0eaff00baf9ff02
+fe95acf0ff00d8ecff06fbdf97cceee6effaff0eb8654466556759466644
+4ae6fffd9af8fffff0eaff00d8f8ff03fbcb88eff2ff01fd8fedff06fe9e
+b4386efc7ffaff0efeb764957acb5756544649d5fffd8af8fffff0eaff00
+d8f8ff03fbcb88eff2ff01fd8fedff06fe9eb4386efc7ffaff0efeb76495
+7acb5756544649d5fffd8af8fffff0eaff00d8f8ff03fbcb88eff2ff01fd
+8fedff06fe9eb4386efc7ffaff0efeb764957acb5756544649d5fffd8af8
+fffff0eaff00f7f8ff04fcbffd88eff2ff00c9edff06fd7ed5439eff8af8
+ff0ce5f7aefe6ecdbddc58d6fffc8af8fffff0eaff00f7f8ff04fcbffd88
+eff2ff00c9edff06fd7ed5439eff8af8ff0ce5f7aefe6ecdbddc58d6fffc
+8af8fffff0eaff00f7f8ff04fcbffd88eff2ff00c9edff06fd7ed5439eff
+8af8ff0ce5f7aefe6ecdbddc58d6fffc8af8fffff0eaff00f7f7ff03baac
+fd7cf2ff01fc9ff1ff0aeffebaa638e8547fffd5dff9ff0ce5f6adec58de
+ebba57e6fffb8af8fffff0eaff00f7f7ff03baacfd7cf2ff01fc9ff1ff0a
+effebaa638e8547fffd5dff9ff0ce5f6adec58deebba57e6fffb8af8ffff
+f0eaff00f7f7ff03baacfd7cf2ff01fc9ff1ff0aeffebaa638e8547fffd5
+dff9ff0ce5f6adec58deebba57e6fffb8af8fffff0eaff01facff7ff03eb
+9cf7dff2ff0186cff6ff0ec96655556798674a54ba555cfffc6dfaff10fe
+b5b76554445569a738f6fffa88ccccdffbfffff0eaff01facff7ff03eb9c
+f7dff2ff0186cff6ff0ec96655556798674a54ba555cfffc6dfaff10feb5
+b76554445569a738f6fffa88ccccdffbfffff0eaff01facff7ff03eb9cf7
+dff2ff0186cff6ff0ec96655556798674a54ba555cfffc6dfaff10feb5b7
+6554445569a738f6fffa88ccccdffbfffff0eaff01fd9ff6ff02fab86af2
+ff1be749effecbceefffeed996543344444333334bdeb36a454779bec68e
+fbff00b6fb440b5444564ae6fffd855554456dfcfffff0eaff01fd9ff6ff
+02fab86af2ff1be749effecbceefffeed996543344444333334bdeb36a45
+4779bec68efbff00b6fb440b5444564ae6fffd855554456dfcfffff0eaff
+01fd9ff6ff02fab86af2ff1be749effecbceefffeed99654334444433333
+4bdeb36a454779bec68efbff00b6fb440b5444564ae6fffd855554456dfc
+fffff0e9ff006ff6ff02fe99e7f1ff08a455533469cdcdb643f93326349f
+fff73435469766774688898899996444455555455555454af6ffff864544
+44489afffffff0e9ff006ff6ff02fe99e7f1ff08a455533469cdcdb643f9
+3326349ffff73435469766774688898899996444455555455555454af6ff
+ff86454444489afffffff0e9ff006ff6ff02fe99e7f1ff08a455533469cd
+cdb643f93326349ffff73435469766774688898899996444455555455555
+454af6ffff86454444489afffffff0e9ff008df6ff02f9e8f8f1ff06fc44
+5bdcdb9754fb33143444334438fffffd455844678bdfdacebaabababa8fa
+990f98775cf5efff78bbcbaaaab77ffffff0e9ff008df6ff02f9e8f8f1ff
+06fc445bdcdb9754fb33143444334438fffffd455844678bdfdacebaabab
+aba8fa990f98775cf5efff78bbcbaaaab77ffffff0e9ff008df6ff02f9e8
+f8f1ff06fc445bdcdb9754fb33143444334438fffffd455844678bdfdace
+baabababa8fa990f98775cf5efff78bbcbaaaab77ffffff0e9ff00d8f6ff
+02f8d9acf0ff04e534444343fc332c4433456655437ffffffe466857eca3
+7be8788767888888778799998aaabbba5bc5efff7899866658869ffffff0
+e9ff00d8f6ff02f8d9acf0ff04e534444343fc332c4433456655437fffff
+fe466857eca37be8788767888888778799998aaabbba5bc5efff78998666
+58869ffffff0e9ff00d8f6ff02f8d9acf0ff04e534444343fc332c443345
+6655437ffffffe466857eca37be8788767888888778799998aaabbba5bc5
+efff7899866658869ffffff0e9ff00f7f6ff02f98e8ef0ff35fc74333334
+688887abcbaaefefded9afffffff488666fed347c49ddcbbaabbba75a469
+c85cccdccb7db5cffe7cfff8bd6ff9cffffff0e9ff00f7f6ff02f98e8ef0
+ff35fc74333334688887abcbaaefefded9afffffff488666fed347c49ddc
+bbaabbba75a469c85cccdccb7db5cffe7cfff8bd6ff9cffffff0e9ff00f7
+f6ff02f98e8ef0ff35fc74333334688887abcbaaefefded9afffffff4886
+66fed347c49ddcbbaabbba75a469c85cccdccb7db5cffe7cfff8bd6ff9cf
+fffff0e9ff00f7f6ff02f78f8feeff03edcdddeff8ff0cfd8fffffff57b5
+85dfe447c4bffbff1586e49efa7fffffff8ee5cffd7dfff8ce6ff9dfffff
+f0e9ff00f7f6ff02f78f8feeff03edcdddeff8ff0cfd8fffffff57b585df
+e447c4bffbff1586e49efa7fffffff8ee5cffd7dfff8ce6ff9dffffff0e9
+ff00f7f6ff02f78f8feeff03edcdddeff8ff0cfd8fffffff57b585dfe447
+c4bffbff1586e49efa7fffffff8ee5cffd7dfff8ce6ff9dffffff0e9ff01
+f8dff7ff02f78cafecff00fcf7ff0cfe7ffffffe58c6949fe559b4dffbff
+15a7f48fe99fffffff8ff5dffe6dfff9ce6ff9dffffff0e9ff01f8dff7ff
+02f78cafecff00fcf7ff0cfe7ffffffe58c6949fe559b4dffbff15a7f48f
+e99fffffff8ff5dffe6dfff9ce6ff9dffffff0e9ff01f8dff7ff02f78caf
+ecff00fcf7ff0cfe7ffffffe58c6949fe559b4dffbff15a7f48fe99fffff
+ff8ff5dffe6dfff9ce6ff9dffffff0e9ff01fbaff7ff02f96cafe2ff0bfb
+8ffffffe58d8955ff65cb6faff1596e58ff88ffffffd7ee5dfff6dfff8cd
+7ff9effffff0e9ff01fbaff7ff02f96cafe2ff0bfb8ffffffe58d8955ff6
+5cb6faff1596e58ff88ffffffd7ee5dfff6dfff8cd7ff9effffff0e9ff01
+fbaff7ff02f96cafe2ff0bfb8ffffffe58d8955ff65cb6faff1596e58ff8
+8ffffffd7ee5dfff6dfff8cd7ff9effffff0e8ff007ff6ff01798fe2ff0b
+f6dffffffd58e7765ef66e97faff1596f57ff98ffffffd7ff5efff6dfff8
+dd8ff8effffff0e8ff007ff6ff01798fe2ff0bf6dffffffd58e7765ef66e
+97faff1596f57ff98ffffffd7ff5efff6dfff8dd8ff8effffff0e8ff007f
+f6ff01798fe2ff0bf6dffffffd58e7765ef66e97faff1596f57ff98fffff
+fd7ff5efff6dfff8dd8ff8effffff0e8ff00baf6ff01f66ce2ff0bc6ffff
+fffd69e6685be66f88faff1596f59ff99ffffffe8fe6ffff5efff8ec9ff7
+fffffff0e8ff00baf6ff01f66ce2ff0bc6fffffffd69e6685be66f88faff
+1596f59ff99ffffffe8fe6ffff5efff8ec9ff7fffffff0e8ff00baf6ff01
+f66ce2ff0bc6fffffffd69e6685be66f88faff1596f59ff99ffffffe8fe6
+ffff5efff8ec9ff7fffffff0e8ff00f7f6ff03fe87fffde5ff0cfe7dffff
+fffc5af67938d67f6afaff15a5d59ff89fffffff9fe7ffff5efff8fbaff7
+fffffff0e8ff00f7f6ff03fe87fffde5ff0cfe7dfffffffc5af67938d67f
+6afaff15a5d59ff89fffffff9fe7ffff5efff8fbaff7fffffff0e8ff00f7
+f6ff03fe87fffde5ff0cfe7dfffffffc5af67938d67f6afaff15a5d59ff8
+9fffffff9fe7ffff5efff8fbaff7fffffff0e8ff01f9cff6ff02fbbff7e6
+ff0dfd88effffffffb5ce67935d78e5efaff1595c49ff89fffffff9fe7ff
+ff5efff8fabff6fffffff0e8ff01f9cff6ff02fbbff7e6ff0dfd88efffff
+fffb5ce67935d78e5efaff1595c49ff89fffffff9fe7ffff5efff8fabff6
+fffffff0e8ff01f9cff6ff02fbbff7e6ff0dfd88effffffffb5ce67935d7
+8e5efaff1595c49ff89fffffff9fe7ffff5efff8fabff6fffffff0e8ff01
+fd8ff5ff01aee8e9ff04fefeb88aeffcff07fb4ec8a944b7ad5ffaff1596
+c49ff7afffffff9fe7ffff5ffff8f9dff7fffffff0e8ff01fd8ff5ff01ae
+e8e9ff04fefeb88aeffcff07fb4ec8a944b7ad5ffaff1596c49ff7afffff
+ff9fe7ffff5ffff8f9dff7fffffff0e8ff01fd8ff5ff01aee8e9ff04fefe
+b88aeffcff07fb4ec8a944b7ad5ffaff1596c49ff7afffffff9fe7ffff5f
+fff8f9dff7fffffff0e7ff007ef5ff03fac9ffdff0ff07db967665555788
+cffaff07fb4eb8d67587c97ffaff1586d49fe7afffffff9fe7ffff6ffff8
+f8efe6fffffff0e7ff007ef5ff03fac9ffdff0ff07db967665555788cffa
+ff07fb4eb8d67587c97ffaff1586d49fe7afffffff9fe7ffff6ffff8f8ef
+e6fffffff0e7ff007ef5ff03fac9ffdff0ff07db967665555788cffaff07
+fb4eb8d67587c97ffaff1586d49fe7afffffff9fe7ffff6ffff8f8efe6ff
+fffff0e7ff00b8f5ff03fac9ffdff1ff06b643333343334ef8ff07f95faa
+e6a566d79ffaff1586d49fe6affffffe8fe8ffff6ffff8f8ffd5fffffff0
+e7ff00b8f5ff03fac9ffdff1ff06b643333343334ef8ff07f95faae6a566
+d79ffaff1586d49fe6affffffe8fe8ffff6ffff8f8ffd5fffffff0e7ff00
+b8f5ff03fac9ffdff1ff06b643333343334ef8ff07f95faae6a566d79ffa
+ff1586d49fe6affffffe8fe8ffff6ffff8f8ffd5fffffff0e7ff01f9bff6
+ff03cbb9fe8ff3ff01fe94fa33007ff8ff07f86f8af7d655d5dffaff1586
+d4aff5affffffe7fe8ffff7ffff7f7ffb5fffffff0e7ff01f9bff6ff03cb
+b9fe8ff3ff01fe94fa33007ff8ff07f86f8af7d655d5dffaff1586d4aff5
+affffffe7fe8ffff7ffff7f7ffb5fffffff0e7ff01f9bff6ff03cbb9fe8f
+f3ff01fe94fa33007ff8ff07f86f8af7d655d5dffaff1586d4aff5afffff
+fe7fe8ffff7ffff7f7ffb5fffffff0e6ff007ef6ff03adc9fadff3ff08b5
+44333334333434dff8ff06f76f7bf97656e5f9ff1596e3bff4cfffffff9f
+e8ffff7fffe8f7ffc8fffffff0e6ff007ef6ff03adc9fadff3ff08b54433
+3334333434dff8ff06f76f7bf97656e5f9ff1596e3bff4cfffffff9fe8ff
+ff7fffe8f7ffc8fffffff0e6ff007ef6ff03adc9fadff3ff08b544333334
+333434dff8ff06f76f7bf97656e5f9ff1596e3bff4cfffffff9fe8ffff7f
+ffe8f7ffc8fffffff0e6ff00d9f6ff03cae7f8fef3ff0083fb33014339f7
+ff06f68f6dfc5947c5f9ff15a5e3cff4aaa978998fd8fffc49ffe8f7ffcb
+fffffff0e6ff00d9f6ff03cae7f8fef3ff0083fb33014339f7ff06f68f6d
+fc5947c5f9ff15a5e3cff4aaa978998fd8fffc49ffe8f7ffcbfffffff0e6
+ff00d9f6ff03cae7f8fef3ff0083fb33014339f7ff06f68f6dfc5947c5f9
+ff15a5e3cff4aaa978998fd8fffc49ffe8f7ffcbfffffff0e6ff01facff7
+ff02f7e8c7f2ff079c665655469de63af7ff23f59f6ffe4b48c466677766
+78776656d4cff49bbba9978fc7fffe546db8f7ffcafffffff0e6ff01facf
+f7ff02f7e8c7f2ff079c665655469de63af7ff23f59f6ffe4b48c4666777
+6678776656d4cff49bbba9978fc7fffe546db8f7ffcafffffff0e6ff01fa
+cff7ff02f7e8c7f2ff079c665655469de63af7ff23f59f6ffe4b48c46667
+776678776656d4cff49bbba9978fc7fffe546db8f7ffcafffffff0e5ff00
+8ef7ff04fe8977fffcf3ff07c58e7ad9cfe864cff8ff23e59f6ffe7769c6
+eeeedddeddeeffc5e4cfd4dffffffb9fd7ffffac6478e8ffcafffffff0e5
+ff008ef7ff04fe8977fffcf3ff07c58e7ad9cfe864cff8ff23e59f6ffe77
+69c6eeeedddeddeeffc5e4cfd4dffffffb9fd7ffffac6478e8ffcaffffff
+f0e5ff008ef7ff04fe8977fffcf3ff07c58e7ad9cfe864cff8ff23e59f6f
+fe7769c6eeeedddeddeeffc5e4cfd4dffffffb9fd7ffffac6478e8ffcaff
+fffff0e5ff01e7eff7ff0afa45dffcfffdbefdfffaeffaff07f7cd6ffcbf
+fbf86ff8ff07b69e6fffd46bd49efaff15c6f3cfe4effffffccfe9fffe9f
+fc67d9ffbbfffffff0e5ff01e7eff7ff0afa45dffcfffdbefdfffaeffaff
+07f7cd6ffcbffbf86ff8ff07b69e6fffd46bd49efaff15c6f3cfe4efffff
+fccfe9fffe9ffc67d9ffbbfffffff0e5ff01e7eff7ff0afa45dffcfffdbe
+fdfffaeffaff07f7cd6ffcbffbf86ff8ff07b69e6fffd46bd49efaff15c6
+f3cfe4effffffccfe9fffe9ffc67d9ffbbfffffff0e5ff01fe7cf7ff09fe
+74affcfcfe8cefffb6f9ff07fa9a8efe9ffffd4df8ff08b6cd7ffff55da8
+77dffbff15b6d4dfd4effffffddff9fffe9fffa9caffadfffffff0e5ff01
+fe7cf7ff09fe74affcfcfe8cefffb6f9ff07fa9a8efe9ffffd4df8ff08b6
+cd7ffff55da877dffbff15b6d4dfd4effffffddff9fffe9fffa9caffadff
+fffff0e5ff01fe7cf7ff09fe74affcfcfe8cefffb6f9ff07fa9a8efe9fff
+fd4df8ff08b6cd7ffff55da877dffbff15b6d4dfd4effffffddff9fffe9f
+ffa9caffadfffffff0e4ff01f9bff8ff09fe946ffbfbfbcebfff5cf9ff07
+fe8e8afe9fcdff76f8ff0985e99ffff85e5adc69effcff15d6435554ffff
+fffebff8fffe8fff8aabefaffffffff0e4ff01f9bff8ff09fe946ffbfbfb
+cebfff5cf9ff07fe8e8afe9fcdff76f8ff0985e99ffff85e5adc69effcff
+15d6435554fffffffebff8fffe8fff8aabefaffffffff0e4ff01f9bff8ff
+09fe946ffbfbfbcebfff5cf9ff07fe8e8afe9fcdff76f8ff0985e99ffff8
+5e5adc69effcff15d6435554fffffffebff8fffe8fff8aabefaffffffff0
+e3ff00a9f7ff08f94dfbfce8df9ffbaaf8ff06df8a9bbfd8ffb7f8ff09d5
+65cffff86d658ee749fbff14ecbacefffffffe8fe5fffe9fff6656896cff
+fffff0e3ff00a9f7ff08f94dfbfce8df9ffbaaf8ff06df8a9bbfd8ffb7f8
+ff09d565cffff86d658ee749fbff14ecbacefffffffe8fe5fffe9fff6656
+896cfffffff0e3ff00a9f7ff08f94dfbfce8df9ffbaaf8ff06df8a9bbfd8
+ffb7f8ff09d565cffff86d658ee749fbff14ecbacefffffffe8fe5fffe9f
+ff6656896cfffffff0e3ff01fc7df8ff08fd46ebfdd9cb8ef8ccf8ff06fe
+df97fff7ff98f7ff09faefffe89e6e859fd75bf5ff0d56a8fffebfffcdfe
+dd648dfffff0e3ff01fc7df8ff08fd46ebfdd9cb8ef8ccf8ff06fedf97ff
+f7ff98f7ff09faefffe89e6e859fd75bf5ff0d56a8fffebfffcdfedd648d
+fffff0e3ff01fc7df8ff08fd46ebfdd9cb8ef8ccf8ff06fedf97fff7ff98
+f7ff09faefffe89e6e859fd75bf5ff0d56a8fffebfffcdfedd648dfffff0
+e2ff01e8cff8ff0797c8febc69caf8fbf6ff04a6ffe7ff6cf4ff1fc5ae7f
+fc54bfe767777665555567988899aa86455557aaaaababbbb969fffff0e2
+ff01e8cff8ff0797c8febc69caf8fbf6ff04a6ffe7ff6cf4ff1fc5ae7ffc
+54bfe767777665555567988899aa86455557aaaaababbbb969fffff0e2ff
+01e8cff8ff0797c8febc69caf8fbf6ff04a6ffe7ff6cf4ff1fc5ae7ffc54
+bfe767777665555567988899aa86455557aaaaababbbb969fffff0e1ff00
+8ef8ff07f999aeae56e8f8fbf7ff05fd89bfbafb8ff4ff1fa5ac9fffd536
+ce4cedeeeecb99aa9cddccbbbbaa99a98aaaaaaaa98989fffff0e1ff008e
+f8ff07f999aeae56e8f8fbf7ff05fd89bfbafb8ff4ff1fa5ac9fffd536ce
+4cedeeeecb99aa9cddccbbbbaa99a98aaaaaaaa98989fffff0e1ff008ef8
+ff07f999aeae56e8f8fbf7ff05fd89bfbafb8ff4ff1fa5ac9fffd536ce4c
+edeeeecb99aa9cddccbbbbaa99a98aaaaaaaa98989fffff0e1ff00edf7ff
+0796eaaf859ba7fcdff8ff05ebfcbf7ef6eff4ff079478affffe95344eec
+ff03d8fffff0e1ff00edf7ff0796eaaf859ba7fcdff8ff05ebfcbf7ef6ef
+f4ff079478affffe95344eecff03d8fffff0e1ff00edf7ff0796eaaf859b
+a7fcdff8ff05ebfcbf7ef6eff4ff079478affffe95344eecff03d8fffff0
+d7ff07fdbb9fd85da6bfaff7ff03e9ec8f7cf3ff1ffc75bfffffffd53899
+abccccccbbabbabaaabcdeedcb98888999a9987afffff0d7ff07fdbb9fd8
+5da6bfaff7ff03e9ec8f7cf3ff1ffc75bfffffffd53899abccccccbbabba
+baaabcdeedcb98888999a9987afffff0d7ff07fdbb9fd85da6bfaff7ff03
+e9ec8f7cf3ff1ffc75bfffffffd53899abccccccbbabbabaaabcdeedcb98
+888999a9987afffff0d6ff06aad9ff96e86edcf7ff039dd7e8cff2ff00fe
+fcff19fed787666556677788888999987667789bcccccccdeefffffff0d6
+ff06aad9ff96e86edcf7ff039dd7e8cff2ff00fefcff19fed78766655667
+7788888999987667789bcccccccdeefffffff0d6ff06aad9ff96e86edcf7
+ff039dd7e8cff2ff00fefcff19fed787666556677788888999987667789b
+cccccccdeefffffff0d7ff07fddbfd98e67e77faf8ff03f9cd7ebdd3ffff
+f0d7ff07fddbfd98e67e77faf8ff03f9cd7ebdd3fffff0d7ff07fddbfd98
+e67e77faf8ff03f9cd7ebdd3fffff0d7ff08fbaffffecd8ba9adbffaff04
+fe9bc7ebbfd3fffff0d7ff08fbaffffecd8ba9adbffaff04fe9bc7ebbfd3
+fffff0d7ff08fbaffffecd8ba9adbffaff04fe9bc7ebbfd3fffff0d7ff08
+bcdfffffefb7e88fbefbff04edcbee7eacd2fffff0d7ff08bcdfffffefb7
+e88fbefbff04edcbee7eacd2fffff0d7ff08bcdfffffefb7e88fbefbff04
+edcbee7eacd2fffff0d8ff09feb9fffffeecd7e98ffafcff09f857dfe7e9
+efffeca99ed6fffff0d8ff09feb9fffffeecd7e98ffafcff09f857dfe7e9
+efffeca99ed6fffff0d8ff09feb9fffffeecd7e98ffafcff09f857dfe7e9
+efffeca99ed6fffff0d8ff18faf8ffffffc9e8e89efe9fffffffe76cff8d
+8cfd98adfbb8ced7fffff0d8ff18faf8ffffffc9e8e89efe9fffffffe76c
+ff8d8cfd98adfbb8ced7fffff0d8ff18faf8ffffffc9e8e89efe9fffffff
+e76cff8d8cfd98adfbb8ced7fffff0d8ff19f9f8ffffdbe7ca9caeff8fff
+ffff8a6ff9c8ce875effeeff8bdfd8fffff0d8ff19f9f8ffffdbe7ca9cae
+ff8fffffff8a6ff9c8ce875effeeff8bdfd8fffff0d8ff19f9f8ffffdbe7
+ca9caeff8fffffff8a6ff9c8ce875effeeff8bdfd8fffff0d8ff19f9f9ff
+eacf9e9e7eadfbbfffffff6a7fc99cf7c746ca47bfe8bfd8fffff0d8ff19
+f9f9ffeacf9e9e7eadfbbfffffff6a7fc99cf7c746ca47bfe8bfd8fffff0
+d8ff19f9f9ffeacf9e9e7eadfbbfffffff6a7fc99cf7c746ca47bfe8bfd8
+fffff0d8ff09faebfdbfeadf8e8f9ef9fcff0b6a8f89afe77444b8498ff7
+bfd8fffff0d8ff09faebfdbfeadf8e8f9ef9fcff0b6a8f89afe77444b849
+8ff7bfd8fffff0d8ff09faebfdbfeadf8e8f9ef9fcff0b6a8f89afe77444
+b8498ff7bfd8fffff0d8ff09fdddfbfb9eff8b9f8fdbfcff0b5c8e68ff95
+433386447865afd8fffff0d8ff09fdddfbfb9eff8b9f8fdbfcff0b5c8e68
+ff95433386447865afd8fffff0d8ff09fdddfbfb9eff8b9f8fdbfcff0b5c
+8e68ff95433386447865afd8fffff0d6ff17ce9effff9c8f9fbdfffffeff
+6f7b5eff643343453543688fd8fffff0d6ff17ce9effff9c8f9fbdfffffe
+ff6f7b5eff643343453543688fd8fffff0d6ff17ce9effff9c8f9fbdffff
+feff6f7b5eff643343453543688fd8fffff0d6ff17e9efffffab6cdb9eff
+fffdff6f8b4fff64434437443345bfd8fffff0d6ff17e9efffffab6cdb9e
+fffffdff6f8b4fff64434437443345bfd8fffff0d6ff17e9efffffab6cdb
+9efffffdff6f8b4fff64434437443345bfd8fffff0d6ff16dbffffffe89a
+fabdfffffddf8bca7bff83436434433466d7fffff0d6ff16dbffffffe89a
+fabdfffffddf8bca7bff83436434433466d7fffff0d6ff16dbffffffe89a
+fabdfffffddf8bca7bff83436434433466d7fffff0d6ff16befffffff9b6
+cbeafeffffafb5fef9bfc359d834433598d7fffff0d6ff16befffffff9b6
+cbeafeffffafb5fef9bfc359d834433598d7fffff0d6ff16befffffff9b6
+cbeafeffffafb5fef9bfc359d834433598d7fffff0d1ff119c8ffbffefff
+8ee58fff99e548784433455ed7fffff0d1ff119c8ffbffefff8ee58fff99
+e548784433455ed7fffff0d1ff119c8ffbffefff8ee58fff99e548784433
+455ed7fffff0d1ff01fccffcff0bb9fa8afffb7743333333548ed7fffff0
+d1ff01fccffcff0bb9fa8afffb7743333333548ed7fffff0d1ff01fccffc
+ff0bb9fa8afffb7743333333548ed7fffff0d1ff00fafbff0cfa68858eff
+fc87433333356549d8fffff0d1ff00fafbff0cfa68858efffc8743333335
+6549d8fffff0d1ff00fafbff0cfa68858efffc87433333356549d8fffff0
+d1ff00ebfaff0cb99a769effffdca7568effe69ad9fffff0d1ff00ebfaff
+0cb99a769effffdca7568effe69ad9fffff0d1ff00ebfaff0cb99a769eff
+ffdca7568effe69ad9fffff0d1ff00cff9ff03feffc7effcff03efffb68a
+d9fffff0d1ff00cff9ff03feffc7effcff03efffb68ad9fffff0d1ff00cf
+f9ff03feffc7effcff03efffb68ad9fffff0c7ff01fedffbff02fe645ad9
+fffff0c7ff01fedffbff02fe645ad9fffff0c7ff01fedffbff02fe645ad9
+fffff096fffff096fffff096fffff096fffff096fffff096fffff096ffff
+f096fffff096fffff0
+grestore
+showpage
+%%Trailer
diff --git a/contrib/groff/doc/gnu.png b/contrib/groff/doc/gnu.png
new file mode 100644
index 0000000..019a7ae
--- /dev/null
+++ b/contrib/groff/doc/gnu.png
Binary files differ
diff --git a/contrib/groff/doc/gnu.xpm b/contrib/groff/doc/gnu.xpm
new file mode 100644
index 0000000..bc54934
--- /dev/null
+++ b/contrib/groff/doc/gnu.xpm
@@ -0,0 +1,198 @@
+/* XPM */
+static char *noname[] = {
+/* width height ncolors chars_per_pixel */
+"213 177 14 1",
+/* colors */
+"` c #FFF",
+"a c #DDD",
+"b c #BBB",
+"c c #999",
+"d c #777",
+"e c #555",
+"f c #333",
+"g c #EEE",
+"h c #CCC",
+"i c #AAA",
+"j c #888",
+"k c #666",
+"l c #444",
+"m c #222",
+/* pixels */
+"`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
+"`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
+"``````````````````````````````````````````gaahiibaag`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
+"``````````````````````````````````````acjjdddldjjkleeekdjia``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
+"```````````````````````````````````abbicli`hbjkdbelldddkdelldh```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
+"`````````````````````````````````iibkcjellcaeaklcelfljllkekdeeejba````````````````````````````````````````````````````````````````````````````````````````````gha````````````````````````````````````````````````````",
+"```````````````````````````````bcagjcldkleljcdaelillfcdllfedeeelffc`````````````````````````````````````````````````````````````````````````````````````acdjddjccjjjch```````````````````````````````````````````````",
+"`````````````````````````````hch```jflleeeelkkcbljdlfliellldeeeeeflkh````````````````````````````````````````````````````````````````````````````````hjkch`ah`ic`gaiicjja````````````````````````````````````````````",
+"````````````````````````````cb``aeigjlefleellelhdlblllldllllcllekkeelcg``````````g``````````````````````````````````````````````````````````````gjcddiabjjdldkleklllliggcc```````````````````````````````````````````",
+"`````````````````````````ggjag`accdehilefelelllehldjllleellleellekllleejb```````dki```````````````````````````````````````````````````````````gjlljbiiekkelllllllefedcdg`hjb`````````````````````````````````````````",
+"````````````````````````gdhg`cdhadkdejilelelelekdelbllelelellkleelkfjeehiiihaaidbai``````````````````````````````````````````abg`````````````addijkdellelllelllllljckllkg``hcg```````````````````````````````````````",
+"```````````````````````gjgdejijlcghkeljjllllkdhjklkdcleklklllllleleeededg`hidjb``ig`````````````````````````````````````````akdei````````ggacdkkkkjllllflllflflllleekddjcji``big`````````````````````````````````````",
+"``````````````````````hdcjjceeekeei`hklkklledg`adebeclljelleleellelclkdlgg`aagg`ai``````````````````````````````````````````cg`bklkklllllllllkkeejlllfflekflellfleeelfllech```gcg````````````````````````````````````",
+"`````````````````````cihdckkjkleelldggiklejca``````aahkkceedkekjekkjllclhghbikkhjg``````````````````````````````````````````ij`g`ghbcjekddbkeeeljlllflfleflklfflekledjccccjg````ia```````````````````````````````````",
+"````````````````````hd``g``beedeeelkeb`gddhh```ghhhbbiekjhca`gjig`bgajab`gg``acc`````````````````````````````````````````````edagg`jeelleleeeeekeflfffleflefflelflklllelllledc```ba``````````````````````````````````",
+"```````````````````gc``aga``gdllelkecec``bg`gckdibbbhahbcdddjccciiihhgg```gbjca```````````````````````````````````````````````clkdcaccklleleeeekcikekklflefflllflllllllllllllekj``bg`````````````````````````````````",
+"```````````````````c``heledb``cllelebadj``gcdig`````````````gaaahhbhhhhhhgag```````````````````````````````````````````````````gcklflkjcaeekkjkjjddejdldkekdelllllfffffllleedjch```ig````````````````````````````````",
+"``````````````````caagikelllkcgjekekdg`hgbca```````````````````````````````````````````````````````````````````````````````````````aidelllebag````````hkea`gelllfffffffffffffllkg``gb````````````````````````````````",
+"`````````````````jbhdeecbbjefleckdciic`gca`````````````````````````````````````````````````````````````````````````````````````````````````````````````gikjgakffffffffflllekdkelkda`i````````````````````````````````",
+"```````````````adllkchbklkbabkflecgg``ajg`````````````````````````````````````````````````````````````````````````````````````````````````````````````````hdhaffffllllejjdelfflleda`hh```````````````````````````````",
+"```````````````jckllllejjeledahlfkhg`bjg````````````````````````````````````````````````````````````````````````````````````````````````````````````````````jiblleffffffffflekdkkelagb```````````````````````````````",
+"``````````````hj``gbdlllleellljcebg`bc```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````bjhcelffffllllllledddkc`i```````````````````````````````",
+"`````````````gdhbbhihabklllleekkk``bc`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````bj`hlfffffffffllleeekjhi```````````````````````````````",
+"````````````gdgeeelllekcidllleeja`aj```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````id`befffllfffffledibbgbg``````````````````````````````",
+"````````````cb`hchgidellekjjeeaijbjg````````````````````````````````````````gabbiiiibhg`````````````````````````````````````````````````````````````````````````cdgkfffffffledjjkeekcah``````````````````````````````",
+"```````````gd````gg```aclleddkg``da`````````````````````````````````````gbjkddjcccjddjddjia`````````````````````hbhag````````````````````````````````````````````iieffflfflfflkca`````b``````````````````````````````",
+"```````````ca```hbiiibhggbeekh``ib````````````````````````````````````gdkchgabbccjjiicibbijjh````````````````gijccjjjcia``````````````````````````````````````````ddflleeeleellllkdh``i``````````````````````````````",
+"``````````gj``clllffllllki`bcg`hj````````````````````````````````````hkcijccibag`gghbijkkjiidjh````````````bcibicjjiba`hba````````````````````````````````````````hjdleeelllffflllej``b``````````````````````````````",
+"``````````cahjekdjcicjdella```gd```````````````````````````````````adldia```````````````ghjddkkda```````gcdjjdcbhgabicjighb````````````````````````````````````````daiefffffffflllekg`b``````````````````````````````",
+"``````````j`ccjjjddkeekdcddb``ia``````````````````````````````````iejg```````ah`g```hg``````gbjelc````acckjhg``bebgh```hjcg````````````````````````````````````````chjeffffffllffllkdchg`````````````````````````````",
+"`````````iiallllllekjiijkedka`c``````````````````````````````````ijg`````g````chjjeagkdh``ghcb`ajljaaibcjg````gdeleld````gjc```````````````````````````````````````ac`kleiiklflkcklleghg`````````````````````````````",
+"`````````kkkellekekellejaghcb`c`````````````````````````````````cb```````chjacciicljeckdggkdkkh`chkebgjjbg`ahijallldflcig``ajh``````````````````````````````````````dallffldcjlfljkjlgaa`````````````````````````````",
+"````````bjjjiiijjddkeeeelhg``ab```````````````````````````````gjh`````hcbciiibkcbdlbkcejkjkeekebikadjkbdeecheakllcleiflkeaicgijg````````````````````````````````````djkllfflflkjefleb`bh`````````````````````````````",
+"````````kg`aabcjkeeellleekc``ig```````````````````````````````jg``````jjdbjijhedhkkjjdldejdeldklkeeijkcgkllekkaeljifclffffffebada```````````````````````````````````cillfffflllldcllb`bi`````````````````````````````",
+"```````gd``hellllleeeeekkkka`j```````````````````````````````jh`bgijkgieeakcdgekaedeielklejelkeelfeeiklbilellfcbflhlelfflffffleidb``````````````````````````````````caelleeelffllebkeabi`````````````````````````````",
+"```````bigcellllllllllleldgggc``````````````````````````````chaacbhkebaeeakdd`ekgedlhlelleckleellflekjeeaeeekeladfjkleffllefffflbcc`````````````````````````````````ibllllfleelfleljjeic`````````````````````````````",
+"```````jacllledjbcbhbidefekgch`````````````````````````````ci``dkj`elcgeeijed`eealkfblllleceldklelleekeeibejljllifdjlklfkfdllfffebbj````````````````````````````````biillflllfleelllljgc`````````````````````````````",
+"```````d`becbbijdelllllejag`j`````````````````````````````bhgc`iek`klj`keccek`eealdlclllllikedjlekfleeclebkeclblelkhfelfkfjelfffflcbc```````````````````````````````ibilfffleefffllflkgc`````````````````````````````",
+"```````d``bjelflkdjjdjdekchgc````````````````````````````gj``ddkee`kle`dekilkgeeildldllellbekkildeleelillkjlkldcjklilelfefdelflflflcch``````````````````````````````jadklffffekjkflllkai`````````````````````````````",
+"```````j``jlejcjdkeeekdkkihac```````````````````````````gdggccbllegdelgclecle`elhejlkelellbeddhlkleleljekklejieaehfjklllkelelflflflljkg`````````````````````````````d`jihdffffflddlllk`ig````````````````````````````",
+"```````j`gedkellleekkkekdihgc```````````````````````````jabbkicellajelaileilk`klaejleelkllhedkhljejeelkeedjj`gjbjlldjllelklllleflflllkda```````````````````````````gjgeellfffffleedeelhba````````````````````````````",
+"```````i`hedeeekkkkeekellljaj``````````````````````````jh``kljcdfehjelbheehekgelaejlleljllhedjaljeikdeelffildh`cklleblleldfellklllfllleka``````````````````````````iigedfffffffffeejelgba````````````````````````````",
+"```````a`cilledjiabcjelleb``j`````````````````````````ci```kljjiflhceliaelakkgllalcllllkeebkdcalieheckkkhchlleb`bflfbeleeefkllkellfllllekg`````````````````````````jg`aelfffffffffeeilhbg````````````````````````````",
+"`````````kdba`gikelkcjjkeeh`j````````````````````````iia``eeljdhflhcelcallhdkhllblielleelkcdebhliealieea`ahffflelflfddfeeeflllekllflllfllk`````````````````````````d``ilfleffffffffldhgbg````````````````````````````",
+"```````h`c`bjelekjdeelffleh`j```````````````````````ij`bcallljkgflidelchleakkileclillllllkkjehildkcljlligegeflkeeelfkjflelfllleelelellffllkg```````````````````````d`aeffflkfflfffflea`bg````````````````````````````",
+"```````b`gieejdellllkcdked``j``````````````````````ic``geglllkk`leideejblegedkfkclbllelledlakhcedkeekfldglabdldhiellkjflllflleellellelfefllkg`````````````````````akelflffflklfllffljc`b`````````````````````````````",
+"```````iggjjdelllecbjelljh`ach````````````````````ci````ebelekegeljkeldjldalklljkkjllefeledilcec`gcikellaei``blljkjkkjflllflllkllellklfdlllkjg````````````````````cejblffffffklfflfld``i`````````````````````````````",
+"```````iahcjelecaiefldjledjiaj```````````````````jb``bb`djllekk`eljeeleeljjllllkljefelfklkkck`gahahjlilkeeeg``ielfeleblllllflldllklleeldkleiadih``````````````````dlaelfffffffelfflfi``b`````````````````````````````",
+"```````bcbiekhgceflddelllecj`d`````````````````gdh```he`ckeleek`keeleellejlkideddieekeddb`dddjeeeldidbkjfjfkihggkfleehellellllkledlfkelljledgaci`````````````````bjkkfffffffffflfflfk``i`````````````````````````````",
+"```````gjgaigcllllellkellebagib```````````````gda``ghgegbeeelkk`eeeldli`accajliiiceledjjjdlleigahlb`jididkkffleeffebdbjljdllklldicllklllelllj``cc```````````````gdgjflfflfflfffflfflfi`b`````````````````````````````",
+"````````dgghekbklflkellleekkhgc``````````````gda````dhdbieekeekkljdjjlckflkkeekddjjjdkkkdjcbg````keacfejhejeleeceliajhdflleefleekklllllfflellh`gkc``````````````dballfflfffflffffffla`bg`````````````````````````````",
+"````````dhclddllleelllelllebg`jh````````````gja`````ijjdblkklljjkghdlejig```````````````gg```````gljghefecljlfdcej`cekkibjdabg`ghiickdkdeedledjagkc````````````jdbkfffffffffffffffflg`c``````````````````````````````",
+"````````icdbbkllllllejellkllc``jb``````````gdg````ighdbkhlkelebadedch`````````````````````````````hedahkffefklelfiejg`````bdc````````ahbjkeedleeh`cdh``aag``gieeklclffflffffffflffli`ai``````````````````````````````",
+"````````hcghklllllljdelldefle```jc````````hjg```gikbhkbljlcecjkkig`````````````````````````````````gdlejjellffflelc`````````bkg``````````abkjeeelb`hkellekbjldgdgkfflffflffffffflfk``cg``````````````````````````````",
+"````````gdikllkeleceklljeflklh```jja````acc`````hckcgececedlkig```````````````````g`````````````````gilelejcfffkjla````ag````hk`````````````ieeekfeh`ghjkkjig``dklelmfffflfffffffflb`c```````````````````````````````",
+"`````````dakejelkjedlldklldlleg```bcjjjjca``````jcedgekllecg`````````````````gicekj``````````````````ggabjleffcadeb```hed`````bd`````````````ggkllffjgba`bccgihefffeefffffffffffflkdhh```````````````````````````````",
+"`````````ibdielkdlkeedkllddellbch``````````aghaieaekglfda````````````````ghiiiaifeg`````````````ggg```ggagblfkgdljd``cijdg`````ci`````````````haeelffllljelfllfffffflffflffffffllldic````````````````````````````````",
+"`````````hcgclkklkeedkllejldfleehg`````````ccbjdeadejfj`````````````````hllkkeeffc`````````````gdlleg````g`ceebfflkghjklkg````g`ka````````````abcllfffffffffflfffffffffffffffffflj`gc````````````````````````````````",
+"``````````d`cdkleekkklledlklfleedd`aa`````gilildeajlfl`````````````````illlflfffk```````````````ajllig``g```aeefffj`clffi`````h`bd`````````````baelfflfffffffflffllfffffflffffllfa`ia````````````````````````````````",
+"``````````jagbledjkklfdkeedffelflecbkd````icldejlbjfed````````````````glfffllffkg````````````````gilkh``g``hkllfejagklfla````gb``k`````````````gccllfffffffffffffffffffffflmffflfhgi`````````````````````````````````",
+"``````````bb`bkkckclleeeljlflkfleeljke`igabkleeclikfcg````````````````cflfflffj```````````adeeja```iiih````blfkjia`gkffja`````h``dg`````````````hjllffffffffflflfffffffflfffffffegcg`````````````````````````````````",
+"``````````gc`beakbellkeleellleflellkje`ddgdklekdlele`````````````````alffeffdh``````````beffeklk`````hjbb``gijig``gadffiibiiaga``jg``````````````jelfffffffffffflffffffffffffllldbb``````````````````````````````````",
+"```````````jheajckeldellklllllflleeeie`dehkkelkklljc`````````````````kffelfjb``````````clkig``dlg`````aej````g`````iclfkja`hjhh``d```````````````bllfffffffffffffffffffffffflldeic```````````````````````````````````",
+"```````````ikagjdekedlekllelelllfkelbk`ekikdelelfba`````````````````blfkdlkcb````````hkeh`````jlc`````bkc``````````jjffedh`ggb``gk```````````````akelfffffffflllffflffffffffefiahh```````````````````````````````````",
+"```````````gj``idekjekeellklkfllleeeiegekidjleefe``````````````````hefd`ai`e````````ifj```````allg`````iig`````````cjfflb```````bd```````````````bklfflfffffffllffflfffffflfekkgc````````````````````````````````````",
+"````````````cg`deckjeledleellfelleeedebleidkellfb`````````````````hedi````hk````````ed`````````cfa`````hejg````````iefffcg`g````jb````````````````jlfflfffffffllffffflffflffb`djh````````````````````````````````````",
+"````````````hb`bedcelekjljllllllleeeeljeeckdelfl`````````````````acbi`````ki```````hea```hbcjdkkfc`````gelb````````hefffekddcb``ja`````````````````hllfeffffffllllffffllfklk`gji`````````````````````````````````````",
+"`````````````j`gicclejceejlefllllcekledleckkllfd``````````````````gjg````gla```````ifj`beffflffffeh`````hlb````````gcfffffffffecdb``````````````````dlfeflffffflllfflfefeeec`gj``````````````````````````````````````",
+"`````````````bi```jkdjhlklllflllehekleellbkkkllb``````````````````gg`````ik````````aflefffflfffjclb``````kb`````````alfellekjdellc``````````````````hlflfffffffllllelfefdhb`ajg``````````````````````````````````````",
+"``````````````jg```khjcldlllllllkbekleeeebkdellg`````````````````````````di````````gefffflfffffjbcd``````gia`````````klkleleeeddllg``````````````````effflfffflfffleffek```bkg```````````````````````````````````````",
+"``````````````gjg``jgidelldflleljjkelleeebekklj``````````````````````````lg`````````effejlffleffjida``````dc`````````glkcffflfedddh``````````````````kllleffffffllkkkecg`idda````````````````````````````````````````",
+"```````````````aca`hgbkeeceffjllieceelekeieeelg`````````````````````````gk`````````glebahlfflllfkgag``````kd`````````gdldfflffldjcg``````````````````blllkfffflllejgkkbdejg``````````````````````````````````````````",
+"`````````````````jg`ggkkcilfljlejeblkedklclefh``````````````````````````ci``````````lh``affffflfeaig`````gea````````gghefffffffkb````````````````````akcbklfflejdlbakfkb`````````````````````````````````````````````",
+"`````````````````gc```icbkflieldkjiebeeeecelc```````````````````````````dg``````````jj`g`efffffldde``````ji``````````ggblfffffekdkj```````````````````hc`bjdah`gajdkia```````````````````````````````````````````````",
+"``````````````````hb``bigjkeclddeakkjleldkee````````````````````````````k```````````gddhahlffflkiek`````````````````````jfffffddjle````````````````````ekkjjddddjba````````````g``a`a````````g```````````````````````",
+"```````````````````aigg```aieeblibejkeelcelb```````````````````````````hlg`````````ggailc`ajjcjcbec`````````````````````alleekchclh````````````````````bagagg```````````ag``gejb``kgk````gbagecdbabg`````````````````",
+"`````````````````````iba```hbblcgkb`dkeljel````````````````````````````ceg`````````````akdiibdeeej```````````````````````clekkcjeca`````````````````````j```````````````ilh``dfj`gedc`hb`gdkabelcbkeddi``````````````",
+"```````````````````````hih`hcliidc`akjeeedj````````````````````````````ecg````````````gg`acjcibag`````````````````````````clddedai``````````````````````ca```````````````bea``ek`alegblja`ieeajlcblkbkg``````````````",
+"`````````````````````````gbibg`gh``hagjhaea```````````````````````````gkig```````````````gg```gg```````````````````````````kla```h``````````````````````gj````````````````akg`ajggeaalfkb``jlkaljhlhkg```````````````",
+"````````````````````````````bbbbhg``````ge````````````````````````````cjhh``````````````````g`a````````````````````````````aej```cd``````````````````````j`````````````````ik`````ghecfejjdkllklkdeejig``````````````",
+"````````````````````````````````ghbhhg``kc````````````````````````````eh`ihg````````````````````````````````````````````````ilh``bej`````````````````````bh`````````````hiiceddkkkklkdjjjcbag``c`````gb``````````````",
+"`````````````````````````````````````ahclg```````````````````````````afg`bha`````````````````````````````````````````````````dd``glka`````````````````````c`````````````dbhhjcbhg``````````````i``````b``````````````",
+"```````````````````````````````````````ck````````````````````````````dfh`gaa`````````````````````````````````````````````````bla``idjg````````````````````ai````````````j```h``````````````````i`````gb``````````````",
+"```````````````````````````````````````lh```````````````````````````aelg```g``````````````````````````````````````````````````cj```eadgg```````````````````cg```````````c``gi`````````gaabbicccdibdciab``````````````",
+"``````````````````````````````````````hk````````````````````````````dceka`````````````````````````````````````````````````````geg``djgda```````````````````gc``````````adjdkejicjddkelledjedckijaaeeich``````````````",
+"``````````````````````````````````````di```````````````````````````he`bd```````````````````````````````````````````````````````ek``ce`gch```````````````````ab`````````gcidkjlbbbckjadlb``dj`c`ga`cda````````````````",
+"`````````````````````````````````````glg```````````````````````````dj`ce````````````````````````````````ga`````````````````````aea`ilg``iig``````````````````ba```````````cbae```gki`cli``dd`c``g`gda````````````````",
+"`````````````````````````````````````bk```````````````````````````hlg`bkjg```````````````````````````gggblig``gh````````````````jj`hli```gjcg`````````````````ig``````````jbbe````ki`ilc``dd`c`````da````````````````",
+"`````````````````````````````````````di``````````````````````````gec``ajegg`````````````````````````ckkdjcecaaaa````````````````gkbaec`````accig```````````````cjg````````kbhe````ei`ilj``jk`j``g``da````````````````",
+"`````````````````````````````````````lg``````````````````````````dd````hkkj```````````````````````````````hjkkdjdjjjjb```````````bkhec````````acjbg`````````````gjg```````diak```gei`blc``de`j`````da````````````````",
+"````````````````````````````````````he``````````````````````````ikg`````dela````````````````````````````ghbhhhaaggg```````````````kjei```````````bdjiag```````gbiig```````dbak````lb`bli``de`j`````da````````````````",
+"````````````````````````````````````jc````````````````````````gdk````````bkb`````````````````````````akkdjddkeleja````````````````ilkh``````````````hcjjccccjcbg``````````dbhd````ei`hec``dk`j`````ka````````````````",
+"````````````````````````````````````eg```````````````````````geea`````````ib`````````````````````````ei````````gbjejg`````````````aelg````````````````````````````````````jbhd```gli`hei``dd`j`````kg````````````````",
+"```````````````````````````````````be```````````````````````hlla``````````g`````````````````````````cj````````````adlb`````````````hlbg```````````````````````````````````dbbd```gli`ali``jd`j`````kg````````````````",
+"```````````````````````````````````kb``````````````````````allh````````````````````````````````````hla``````````````bejg````````````dla`gahjji````````````````````````````dbbd```glc`glb``dj`d`````kg````````````````",
+"``````````````````````````````````be``````````````````````beeh`````````````````````````````````````kh`bklljg``````````iei```````````ckelleedddka``````````````````````````dbbd```glc`glh``dj`j`````kg````````````````",
+"`````````````````````````````````geh```````````````````gikejg`````````````````````````````````````gk`jfeddeea``````````akkb````````````g``````aeg`````````````````````````dbij```glc`glh``jj`d`````kg````````````````",
+"`````````````````````````````````ec`````````````````gbdledi```````````````````````````````````````ijifd````hg````````````ieda``````````````````ij`````````````````````````dbbj```ali`gla``jc`d`````kg````````````````",
+"````````````````````````````````jk````````````ghijdkkdjhha````````````````````````````````````````daefb```````````````````gdeb``````````````````e`````````````````````````dhbj```ali`glh``ih`j`````k`````````````````",
+"```````````````````````````````ilg`````````bdelkjbg``gcabcg```````````````````````````````````````kajlg`````````````````````jei`````````````````ka````````````````````````khbj```hlb`bla``jh`d`````e`````````````````",
+"``````````````````````````````ila````````cedccb````````ijib```````````````````````````````````````kahe````hdledcg````````````i``````````````````jb````````````````````````khic```hlb`blh``jh`d`````e`````````````````",
+"`````````````````````````````ilh````````jlg`gc`````````gjdb```````````````````````````````````````bg`a````deahikeg``````````````````````````````ic````````````````````````kaic```hlb`blh``jb`d`````e`````````````````",
+"````````````````````````````dfb````````alb``ca``````````hlg```````````````````````````````````````ah`````glfklfekd``````````````````````````````ic````````````````````````khcc```blb`blh``jh`d`````e`````````````````",
+"```````````````````````````cfc`````````kk```d````````````k``````````````````````````````hg```````````````glfffffekcia`````````````````````````abdh````````````````````````eacc```bliiefc``dh`d`````e`````````````````",
+"```````````````````````````ed`````````blb```d````````````db```````````````````````````gag````````````````gkffffffbelkg```````````````````````gjde`````````````````````````kaic```bldcahkb`kh`d`````e`````````````````",
+"```````````````````````````lg``gikcghjlc```gj````````````je````````````````````````gjkka``````````````````gkfffflaeefi```````````````````````dedd`````````````````````````eabj```blk``ghegkh`d`````e`````````````````",
+"```````````````````````````ddjkfeddflda````bc````````````ceb``````````````````````akig``````````````````````bjig``eblk``````````````````````jflld`````````````````````````kghj```bli```cflllcd````ge`````````````````",
+"```````````````````````````gccib```ga``````ib````````````jhc``````````````````````ea``````````````````````````````khbfg````````````````````jlfflh`````````````````````````egbc```bfj``glkdleid```gbk`````````````````",
+"```````````````````````````````````````````ca````````````j`j``````````````````````````````big`````````````````````ehgli``````````````````gdlfffd``````````````````````````egbj```ile``ge``kh`dgiaaik`````````````````",
+"```````````````````````````````````````````ja````````````j`j````````````````````````````helkli`````g`````````````gk``ed````````````````gbklffleg``````````````````````````lgbj```cllh`jj``eb`difdbik`````````````````",
+"```````````````````````````````````````````ch````````````cgd````````````````````````````iga`geb``ag``````````````````cc`````````````ggadlffflkb```````````````````````````labc```jlka`ec``kb`difehid`````````````````",
+"```````````````````````````````````````````ch````````````ihja````````````````````````````````hla`j```````````````````````````````````hklffffdj````````````````````````````lhic```kfcggjli`eb`djflbcd`````````````````",
+"```````````````````````````````````````````ib`````````````ijeg````````````````````````````````dcgj`````````````````````````````````gjefffffekg````````````````````````````laieejelledecieieb`dhkcbcd`````````````````",
+"```````````````````````````````````````````bc```````````````cd````````````````````````````````akii````````````````````````````````gdlflffflka`````````````````````````````laijeggabijkellllb`dga`bcd`````````````````",
+"```````````````````````````````````````````aj```````````````gkh````````````````````````````````cki```````````````````````````````gdlflffflkg``````````````````````````````eajkkjihg``````geb`dg``hcd`````````````````",
+"```````````````````````````````````````````gd````````````````jc````````````````````````````````gej```````````````````````````ggagdllllfflka```````````````````````````````dadlklekeeekkkkjeb`d```acj`````````````````",
+"````````````````````````````````````````````d```````````````gbj`````````````````````````````````be``````````````````````````````hjjcdeelecg```````````````````````````````khjeeeb`````ghejeb`d```aij`````````````````",
+"````````````````````````````````````````````d```````````````baj``````````````````````````````````kh`````````````````````````````gg``gabi`ajg```ggga``````````````````````gkckecd`g``````aeeb`k```gic`````````````````",
+"````````````````````````````````````````````dg``````````````abch`````````````````````````````````bj````````````````````````````````````````bkdkekdklkkka```````````````ajllflkejibhgggghbkli`k```gij`````````````````",
+"````````````````````````````````````````````cb```````````````chj``````````````````````````````````dg````````````````````````````````````````hh```gbg`gdi```````````````jkiicjcccijdkllllfkli`k```gic`````````````````",
+"````````````````````````````````````````````bi```````````````gceih````````````````````````````````aj`````````````````````````````````````````ba`cdhhgggkg`````````````bjkellkkeekdeclkkkllligk```aci`````````````````",
+"````````````````````````````````````````````aj`````````````````bhbjjg``````````````````````````````aj````````````````````````````````````````gcgblfjkg`hd``````````````gbdklcedihbedekellklcae```aji`````````````````",
+"`````````````````````````````````````````````d`````````````````hb``ajjg`````````````````````````````hc```````````````````````````````````````adgaelfcg``ji````````````````ge`dig`gkghabaahejak```hji`````````````````",
+"`````````````````````````````````````````````d``````````````````biih`adh`````````````````````````````hc```````````````````````````````g``gbiikfjgjeld```aea```````````````ge`kiaghejaggbbiedgk```bji`````````````````",
+"`````````````````````````````````````````````ih```````````````````gbch`da`````````````````````````````jkh`````````````````````hckkeeeekdcjkdlielbieeeh```hka`````````````gbebdkeellleekcidfj`k```ijjhhhha````````````",
+"`````````````````````````````````````````````ac``````````````````````ibjki````````````````````````````gdlcg``ghbhgg```ggacckelfflllllffffflbagbfkilelddcbghkjg``````````bkllllllllllelllekligk```ajeeeelleka`````````",
+"``````````````````````````````````````````````k``````````````````````gccgd``````````````````````````````ileeefflkchahabklfffffffffffffffflc````dflfelkcdkkddlkjjjcjjccccklllleeeeeleeeeeleli`k````jklellllljci```````",
+"``````````````````````````````````````````````ja`````````````````````cgj`j```````````````````````````````hllebahabcdelffffffffffflllffllfj`````aleejllkdjba`aihgbiibibibijcccccccccccccjddeh`eg```djbbhbiiiibdd``````",
+"``````````````````````````````````````````````aj`````````````````````jacih````````````````````````````````gefllllflfffffffffllfflekkeelfd``````glkkjedghifdbgjdjjdkdjjjjjjddjdccccjiiibbbiebheg```djccjkkkejjkc``````",
+"```````````````````````````````````````````````d`````````````````````cjgjg`````````````````````````````````hdlffffflkjjjjdibhbiig`g`agaci```````ljjkkk`gafldhlcaahbbiibbbideilkchjehhhahhbdabeh``gdh```jbak``ch``````",
+"```````````````````````````````````````````````d`````````````````````dj`j`````````````````````````````````````gahaaag``````````````````aj```````edbejea`glldhlb```````````jkglcg`id```````jggeh``ada```jhgk``ca``````",
+"```````````````````````````````````````````````ja````````````````````djhi``````````````````````````````````````````h```````````````````gd``````gejhkclc`geecbla```````````id`lj`gcc```````j``ea``gka```chgk``ca``````",
+"```````````````````````````````````````````````bi````````````````````ckhi``````````````````````````````````````````````````````````````bj``````gejajcee``kehbk````````````ckgej``jj``````adggea```ka```jhad``cg``````",
+"````````````````````````````````````````````````d`````````````````````dcj``````````````````````````````````````````````````````````````ka``````aejgddkeg`kkgcd````````````ck`ed``cj``````ad``eg```ka```jaaj``jg``````",
+"````````````````````````````````````````````````bi`````````````````````kkh````````````````````````````````````````````````````````````hk```````akcgkkjebgkk`jj````````````ck`ec``cc``````gj`gk````eg```jghc``d```````",
+"`````````````````````````````````````````````````d`````````````````````gjd```a```````````````````````````````````````````````````````gda```````hei`kdcfjakd`ki````````````ieaec``jc```````c`gd````eg```j`bi``d```````",
+"`````````````````````````````````````````````````ch``````````````````````bb``d`````````````````````````````````````````````````````ajjg````````behgkdcfeadjgeg````````````cehlc``jc```````c`gd````eg```j`ib``k```````",
+"`````````````````````````````````````````````````aj```````````````````````iggj```````````````````````````````````````````````g`gbjjig``````````blghjicllbdiae`````````````ckhlc``di```````c`gd````e````j`ca``d```````",
+"``````````````````````````````````````````````````dg```````````````````````ihc``a`````````````````````````````````abckdkkeeeedjjh``````````````blgbjakdejdhcd`````````````jkalc`gdi```````c`gd````k````j`jg`gk```````",
+"``````````````````````````````````````````````````bj```````````````````````ihc``a```````````````````````````````bklffffflffflg`````````````````ce`iigkiekkadc`````````````jkalc`gki``````gj`gj````k````j`j``ae```````",
+"```````````````````````````````````````````````````cb`````````````````````hbbc`gj````````````````````````````gclffffffffffffd``````````````````jk`ji`dakeeaea`````````````jkali``ei``````gd`gj````d````d`d``be```````",
+"````````````````````````````````````````````````````dg````````````````````iahc`ia```````````````````````````bellffffflffflfla``````````````````dk`db`cdkekge``````````````ckgfb``lh```````c`gj````d```gj`d``hj```````",
+"````````````````````````````````````````````````````ac````````````````````higd`j`g``````````````````````````jffffffffffflffc```````````````````kj`ka`hecldhe``````````````iegfh``liiicdjccj`aj```hlc``gj`d``hb```````",
+"`````````````````````````````````````````````````````ih````````````````````dgjhd````````````````````````````chkkekeelkcagkfi```````````````````ec`k``glbljhlkkkdddkkdjddkkekalh``lcbbbiccdj`hd```gelkabj`d``hi```````",
+"``````````````````````````````````````````````````````jg```````````````````gjcdd```h``````````````````````````hejgdiach`gjklh`````````````````gec`k``gddkchkggggaaagaagg``heglh`ala``````bc`ad````ihkldjgj``hi```````",
+"``````````````````````````````````````````````````````gdg````````````````````ilea``h```abg`a```ig``````````````dhak``hb``b`jk`````````````````bkcgk```alkbalcg````````````hk`fh`glg``````hh`gc```gc``hkdac``bb```````",
+"```````````````````````````````````````````````````````gdh```````````````````gdli``h`h`gjhg```bk```````````````icijg`gc````ala````````````````bkhad````eeaijdda```````````bkala`alg``````aa``c```gc```ichi``ia```````",
+"`````````````````````````````````````````````````````````cb``````````````````gclk``b`b`bhgb```eh```````````````gjgji`gc`ha``dk````````````````jegcc````jegeiahkcg`````````aklfeeel```````gb``j```gj```jiibg`i````````",
+"``````````````````````````````````````````````````````````ic```````````````````cla`b`hgja`c``bii````````````````a`jicbb`aj``bd````````````````aekeh````jkakejggdlc``````````ghbihg```````gj`ge```gc```kkekjckh```````",
+"```````````````````````````````````````````````````````````hda`````````````````alkgb`aachbjg`jhh`````````````````ga`cd```d``cj```````````````````ig```gjcgkgjec`adeb``````````````````````ekij```gb```ha`gaaklja`````",
+"````````````````````````````````````````````````````````````gjh`````````````````cdhj`gbhkchi`j`b````````````````````ik``gd``kh````````````````````````heigd``helb`gdkddddkkeeeeekdcjjjcciijkleeeediiiiibibbbbckc`````",
+"``````````````````````````````````````````````````````````````jg`````````````````cccigigekgj`j`b```````````````````ajcb`bi`bj`````````````````````````ieihc```aefkhglhgagggghbcciichaahhbbbbiiccicjiiiiiiiicjcjc`````",
+"``````````````````````````````````````````````````````````````ga``````````````````ckgii`jecbid`ha`````````````````gb`hb`dg`kg`````````````````````````cldji````gcefllg````````````````````````````````````````aj`````",
+"```````````````````````````````````````````````````````````````````````````````````abbc`ajeaikb`i```````````````````gcghj`dh```````````````````````````hdeb```````aefjccibhhhhhhbbibbibiiibhaggahbcjjjjccciccjdi`````",
+"````````````````````````````````````````````````````````````````````````````````````iiac``ckgjkgah``````````````````caadgjh``````````````````````````````g`````````gadjdkkkeekkdddjjjjjccccjdkkddjcbhhhhhhhagg```````",
+"```````````````````````````````````````````````````````````````````````````````````aab`acjgkdgdd`i`````````````````chadgba```````````````````````````````````````````````````````````````````````````````````````````",
+"```````````````````````````````````````````````````````````````````````````````````bi````ghajbiciab``````````````gcbhdgbb````````````````````````````````````````````````````````````````````````````````````````````",
+"``````````````````````````````````````````````````````````````````````````````````bha`````g`bdgjj`bg``````````gahbggdgih`````````````````````````````````````````````````````````````````````````````````````````````",
+"`````````````````````````````````````````````````````````````````````````````````gbc`````gghadgcj``i`````````jeda`gdgcg```ghiccg`````````````````````````````````````````````````````````````````````````````````````",
+"`````````````````````````````````````````````````````````````````````````````````i`j``````hcgjgjcg`gc```````gdkh``jajh`acjia`bbjhg```````````````````````````````````````````````````````````````````````````````````",
+"`````````````````````````````````````````````````````````````````````````````````c`j````abgdhichig``j```````jik``chjhgjdeg``gg``jba``````````````````````````````````````````````````````````````````````````````````",
+"`````````````````````````````````````````````````````````````````````````````````c`c``gih`cgcgdgia`bb```````kid`hcch`dhdlkhildb`gjb``````````````````````````````````````````````````````````````````````````````````",
+"`````````````````````````````````````````````````````````````````````````````````igb`ab`gia`jgj`cg`c````````kij`jci`gddlllbjlcj``db``````````````````````````````````````````````````````````````````````````````````",
+"`````````````````````````````````````````````````````````````````````````````````aaa`b`bcg``jbc`j`ab````````ehjgkj``celfffjklldjkei``````````````````````````````````````````````````````````````````````````````````",
+"````````````````````````````````````````````````````````````````````````````````````hgcg````chj`c`ba`````g``k`dbeg``klfflflefelfkjj``````````````````````````````````````````````````````````````````````````````````",
+"````````````````````````````````````````````````````````````````````````````````````gcg`````ibkhabcg`````a``k`jbl```kllfllfdllffleb``````````````````````````````````````````````````````````````````````````````````",
+"````````````````````````````````````````````````````````````````````````````````````ab``````gjci`iba`````aa`jbhidb``jflfklfllfflkk```````````````````````````````````````````````````````````````````````````````````",
+"````````````````````````````````````````````````````````````````````````````````````bg```````cbkhbgi`g````i`be`g`cb`hfecajfllffecj```````````````````````````````````````````````````````````````````````````````````",
+"``````````````````````````````````````````````````````````````````````````````````````````````chj``b``g```jggej```ccgeljdjllffleeg```````````````````````````````````````````````````````````````````````````````````",
+"```````````````````````````````````````````````````````````````````````````````````````````````hh`````````bc`iji```bddlfffffffeljg```````````````````````````````````````````````````````````````````````````````````",
+"```````````````````````````````````````````````````````````````````````````````````````````````i```````````ikjjejg```hjdlffffffekelc`````````````````````````````````````````````````````````````````````````````````",
+"``````````````````````````````````````````````````````````````````````````````````````````````gb````````````bccidkcg````ahidekjg``gkci```````````````````````````````````````````````````````````````````````````````",
+"``````````````````````````````````````````````````````````````````````````````````````````````h````````````````g``hdg`````````g```bkji```````````````````````````````````````````````````````````````````````````````",
+"```````````````````````````````````````````````````````````````````````````````````````````````````````````````````ga````````````gklei```````````````````````````````````````````````````````````````````````````````",
+"`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
+"`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````",
+"`````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````"
+};
diff --git a/contrib/groff/doc/grnexmpl.me b/contrib/groff/doc/grnexmpl.me
index f7f684c..54dbb18 100644
--- a/contrib/groff/doc/grnexmpl.me
+++ b/contrib/groff/doc/grnexmpl.me
@@ -1,9 +1,7 @@
-.sc
.nr pp 12
.nr tp 12
.nr sp 12
.nr fi 0
-.st ug
.ls 1
.po 1i
.pl 11i
diff --git a/contrib/groff/doc/groff b/contrib/groff/doc/groff
new file mode 100644
index 0000000..190fc84
--- /dev/null
+++ b/contrib/groff/doc/groff
@@ -0,0 +1,297 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+Indirect:
+groff-1: 1001
+groff-2: 48538
+groff-3: 97766
+groff-4: 140652
+groff-5: 187441
+groff-6: 231433
+groff-7: 275695
+groff-8: 325582
+groff-9: 372274
+groff-10: 420373
+groff-11: 430355
+
+Tag Table:
+(Indirect)
+Node: Top1001
+Node: Introduction2290
+Node: What Is groff?2764
+Node: What Is groff?-Footnotes4270
+Ref: What Is groff?-Footnote-14339
+Node: History4376
+Node: groff Capabilities9327
+Node: Macro Package Intro10513
+Node: Preprocessor Intro11135
+Node: Output device intro12631
+Node: Credits13095
+Node: Invoking groff13599
+Node: Groff Options14876
+Node: Environment24383
+Node: Macro Directories26210
+Node: Font Directories27532
+Node: Invocation Examples29179
+Node: Invocation Examples-Footnotes30377
+Ref: Invocation Examples-Footnote-130456
+Node: grog30689
+Node: Tutorial for Macro Users31958
+Node: Basics32378
+Node: Basics-Footnotes37183
+Ref: Basics-Footnote-137236
+Ref: Basics-Footnote-237330
+Node: Common Features37444
+Node: Paragraphs38230
+Node: Sections and Chapters39728
+Node: Headers and Footers40219
+Node: Page Layout Adjustment41092
+Node: Displays41359
+Node: Footnotes and Annotations42617
+Node: Table of Contents43276
+Node: Indices43790
+Node: Paper Formats44192
+Node: Multiple Columns44565
+Node: Font and Size Changes44813
+Node: Predefined Strings45115
+Node: Preprocessor Support45451
+Node: Configuration and Customization46005
+Node: Macro Packages46372
+Node: man46632
+Node: Man options47036
+Node: Man usage48538
+Node: Man font macros53889
+Node: Miscellaneous man macros55415
+Node: Predefined man strings56246
+Node: Preprocessors in man pages56721
+Node: mdoc57303
+Node: ms57472
+Node: ms Intro57948
+Node: General ms Structure58617
+Node: General ms Structure-Footnotes61058
+Ref: General ms Structure-Footnote-161139
+Node: ms Document Control Registers61185
+Node: ms Cover Page Macros64241
+Node: ms Body Text67159
+Node: Paragraphs in ms67628
+Node: Headings in ms69181
+Node: Highlighting in ms69967
+Node: Lists in ms72429
+Node: Indents in ms75662
+Node: Tabstops in ms76228
+Node: ms Displays and Keeps76625
+Node: ms Insertions80077
+Node: Example multi-page table81628
+Node: ms Footnotes82071
+Node: ms Page Layout82943
+Node: ms Headers and Footers83460
+Node: ms Margins84483
+Node: ms Multiple Columns84724
+Node: ms TOC85525
+Node: ms Strings and Special Characters88230
+Node: ms Strings and Special Characters-Footnotes90886
+Ref: ms Strings and Special Characters-Footnote-190993
+Node: Differences from AT&T ms91080
+Node: Missing ms Macros91379
+Node: Additional ms Macros92123
+Node: me93375
+Node: mm93533
+Node: gtroff Reference93680
+Node: Text94608
+Node: Filling and Adjusting95130
+Node: Hyphenation95843
+Node: Sentences96626
+Node: Tab Stops97766
+Node: Implicit Line Breaks98660
+Node: Input Conventions99647
+Node: Measurements100431
+Node: Measurements-Footnotes102638
+Ref: Measurements-Footnote-1102703
+Node: Default Units102775
+Node: Expressions103821
+Node: Identifiers106535
+Node: Embedded Commands110391
+Node: Requests111138
+Node: Request Arguments112726
+Node: Request Arguments-Footnotes115077
+Ref: Request Arguments-Footnote-1115152
+Ref: Request Arguments-Footnote-2115280
+Node: Macros115634
+Node: Escapes115991
+Node: Comments118872
+Node: Comments-Footnotes121447
+Ref: Comments-Footnote-1121504
+Node: Registers121603
+Node: Setting Registers122106
+Node: Interpolating Registers124388
+Node: Auto-increment125192
+Node: Assigning Formats126722
+Node: Built-in Registers129630
+Node: Manipulating Filling and Adjusting132879
+Node: Manipulating Hyphenation140652
+Node: Manipulating Hyphenation-Footnotes150959
+Ref: Manipulating Hyphenation-Footnote-1151048
+Node: Manipulating Spacing151123
+Node: Tabs and Fields154514
+Node: Tabs and Fields-Footnotes160646
+Ref: Tabs and Fields-Footnote-1160717
+Node: Leaders160795
+Node: Leaders-Footnotes162386
+Ref: Leaders-Footnote-1162441
+Node: Fields162522
+Node: Character Translations163938
+Node: Troff and Nroff Mode173148
+Node: Line Layout175133
+Node: Line Control181040
+Node: Page Layout183713
+Node: Page Control187441
+Node: Fonts190921
+Node: Changing Fonts191458
+Node: Font Families193243
+Node: Font Positions197760
+Node: Using Symbols200875
+Node: Using Symbols-Footnotes208965
+Ref: Using Symbols-Footnote-1209032
+Ref: Using Symbols-Footnote-2209485
+Ref: Using Symbols-Footnote-3209556
+Ref: Using Symbols-Footnote-4209795
+Node: Special Fonts209858
+Node: Artificial Fonts210962
+Node: Ligatures and Kerning216170
+Node: Sizes221992
+Node: Sizes-Footnotes222809
+Ref: Sizes-Footnote-1222860
+Node: Changing Type Sizes223272
+Node: Fractional Type Sizes228416
+Node: Strings231433
+Node: Conditionals and Loops239418
+Node: Operators in Conditionals239635
+Node: Operators in Conditionals-Footnotes242271
+Ref: Operators in Conditionals-Footnote-1242362
+Ref: Operators in Conditionals-Footnote-2242441
+Node: if-else242540
+Node: while244074
+Node: Writing Macros246447
+Node: Copy-in Mode250343
+Node: Parameters251226
+Node: Page Motions253341
+Node: Drawing Requests260414
+Node: Traps268264
+Node: Page Location Traps268869
+Node: Diversion Traps273301
+Node: Input Line Traps273775
+Node: Blank Line Traps274765
+Node: End-of-input Traps275037
+Node: Diversions275695
+Node: Environments282393
+Node: Suppressing output286006
+Node: Colors287820
+Node: I/O290802
+Node: Postprocessor Access298807
+Node: Miscellaneous300362
+Node: Miscellaneous-Footnotes305422
+Ref: Miscellaneous-Footnote-1305489
+Node: Gtroff Internals305559
+Node: Gtroff Internals-Footnotes309281
+Ref: Gtroff Internals-Footnote-1309354
+Node: Debugging309488
+Node: Warnings315098
+Node: Warnings-Footnotes318024
+Ref: Warnings-Footnote-1318081
+Node: Implementation Differences318202
+Node: Implementation Differences-Footnotes322826
+Ref: Implementation Differences-Footnote-1322919
+Node: Preprocessors323054
+Node: geqn323355
+Node: Invoking geqn323481
+Node: gtbl323575
+Node: Invoking gtbl323692
+Node: gpic323786
+Node: Invoking gpic323903
+Node: ggrn323997
+Node: Invoking ggrn324114
+Node: grap324208
+Node: grefer324479
+Node: Invoking grefer324607
+Node: gsoelim324711
+Node: Invoking gsoelim324829
+Node: Output Devices324938
+Node: Special Characters325173
+Node: grotty325337
+Node: Invoking grotty325478
+Node: grops325582
+Node: Invoking grops325733
+Node: Embedding PostScript325861
+Node: grodvi325983
+Node: Invoking grodvi326112
+Node: grolj4326216
+Node: Invoking grolj4326346
+Node: grolbp326450
+Node: Invoking grolbp326581
+Node: grohtml326685
+Node: Invoking grohtml326865
+Node: grohtml specific registers and strings327021
+Node: gxditview327884
+Node: Invoking gxditview328012
+Node: File formats328131
+Node: gtroff Output328401
+Node: gtroff Output-Footnotes330237
+Ref: gtroff Output-Footnote-1330304
+Node: Language Concepts330438
+Node: Separation331175
+Node: Argument Units333413
+Node: Document Parts334553
+Node: Command Reference335942
+Node: Comment Command336344
+Node: Simple Commands336821
+Node: Simple Commands-Footnotes342728
+Ref: Simple Commands-Footnote-1342799
+Node: Graphics Commands342860
+Node: Device Control Commands350194
+Node: Obsolete Command354229
+Node: Intermediate Output Examples355497
+Node: Output Language Compatibility358310
+Node: Font Files360357
+Node: Font Files-Footnotes360966
+Ref: Font Files-Footnote-1361027
+Node: DESC File Format361088
+Node: Font File Format365330
+Node: Font File Format-Footnotes371553
+Ref: Font File Format-Footnote-1371626
+Ref: Font File Format-Footnote-2371717
+Node: Installation371936
+Node: Copying This Manual372058
+Node: GNU Free Documentation License372274
+Node: Request Index392134
+Node: Escape Index401929
+Node: Operator Index406157
+Node: Register Index407262
+Node: Macro Index414789
+Node: String Index420373
+Node: Glyph Name Index424697
+Node: Font File Keyword Index424983
+Node: Program and File Index427384
+Node: Concept Index430355
+
+End Tag Table
diff --git a/contrib/groff/doc/groff-1 b/contrib/groff/doc/groff-1
new file mode 100644
index 0000000..0f13ab3
--- /dev/null
+++ b/contrib/groff/doc/groff-1
@@ -0,0 +1,1386 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+File: groff, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
+
+GNU troff
+*********
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+* Menu:
+
+* Introduction::
+* Invoking groff::
+* Tutorial for Macro Users::
+* Macro Packages::
+* gtroff Reference::
+* Preprocessors::
+* Output Devices::
+* File formats::
+* Installation::
+* Copying This Manual::
+* Request Index::
+* Escape Index::
+* Operator Index::
+* Register Index::
+* Macro Index::
+* String Index::
+* Glyph Name Index::
+* Font File Keyword Index::
+* Program and File Index::
+* Concept Index::
+
+
+File: groff, Node: Introduction, Next: Invoking groff, Prev: Top, Up: Top
+
+Introduction
+************
+
+ GNU `troff' (or `groff') is a system for typesetting documents.
+`troff' is very flexible and has been in existence (and use) for about
+3 decades. It is quite widespread and firmly entrenched in the UNIX
+community.
+
+* Menu:
+
+* What Is groff?::
+* History::
+* groff Capabilities::
+* Macro Package Intro::
+* Preprocessor Intro::
+* Output device intro::
+* Credits::
+
+
+File: groff, Node: What Is groff?, Next: History, Prev: Introduction, Up: Introduction
+
+What Is `groff'?
+================
+
+ `groff' belongs to an older generation of document preparation
+systems, which operate more like compilers than the more recent
+interactive WYSIWYG(1) (*note What Is groff?-Footnote-1::) systems.
+`groff' and its contemporary counterpart, TeX, both work using a
+"batch" paradigm: The input (or "source") files are normal text files
+with embedded formatting commands. These files can then be processed
+by `groff' to produce a typeset document on a variety of devices.
+
+ Likewise, `groff' should not be confused with a "word processor",
+since that term connotes an integrated system that includes an editor
+and a text formatter. Also, many word processors follow the WYSIWYG
+paradigm discussed earlier.
+
+ Although WYSIWYG systems may be easier to use, they have a number of
+disadvantages compared to `troff':
+
+ * They must be used on a graphics display to work on a document.
+
+ * Most of the WYSIWYG systems are either non-free or are not very
+ portable.
+
+ * `troff' is firmly entrenched in all UNIX systems.
+
+ * It is difficult to have a wide range of capabilities available
+ within the confines of a GUI/window system.
+
+ * It is more difficult to make global changes to a document.
+
+ "GUIs normally make it simple to accomplish simple actions and
+ impossible to accomplish complex actions." -Doug Gwyn (22/Jun/91
+ in `comp.unix.wizards')
+
+
+File: groff, Node: What Is groff?-Footnotes, Up: What Is groff?
+
+ (1) What You See Is What You Get
+
+
+File: groff, Node: History, Next: groff Capabilities, Prev: What Is groff?, Up: Introduction
+
+History
+=======
+
+ `troff' can trace its origins back to a formatting program called
+`runoff', written by J. E. Saltzer, which ran on MIT's CTSS operating
+system in the mid-sixties. This name came from the common phrase of
+the time "I'll run off a document." Bob Morris ported it to the 635
+architecture and called the program `roff' (an abbreviation of
+`runoff'). It was rewritten as `rf' for the PDP-7 (before having
+UNIX), and at the same time (1969), Doug McIllroy rewrote an extended
+and simplified version of `roff' in the BCPL programming language.
+
+ The first version of UNIX was developed on a PDP-7 which was sitting
+around Bell Labs. In 1971 the developers wanted to get a PDP-11 for
+further work on the operating system. In order to justify the cost for
+this system, they proposed that they would implement a document
+formatting system for the AT&T patents division. This first formatting
+program was a reimplementation of McIllroy's `roff', written by
+J. F. Ossanna.
+
+ When they needed a more flexible language, a new version of `roff'
+called `nroff' ("Newer `roff'") was written. It had a much more
+complicated syntax, but provided the basis for all future versions.
+When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
+version of `nroff' that would drive it. It was dubbed `troff', for
+"typesetter `roff'", although many people have speculated that it
+actually means "Times `roff'" because of the use of the Times font
+family in `troff' by default. As such, the name `troff' is pronounced
+`t-roff' rather than `trough'.
+
+ With `troff' came `nroff' (they were actually the same program
+except for some `#ifdef's), which was for producing output for line
+printers and character terminals. It understood everything `troff'
+did, and ignored the commands which were not applicable (e.g. font
+changes).
+
+ Since there are several things which cannot be done easily in
+`troff', work on several preprocessors began. These programs would
+transform certain parts of a document into `troff', which made a very
+natural use of pipes in UNIX.
+
+ The `eqn' preprocessor allowed mathematical formulae to be specified
+in a much simpler and more intuitive manner. `tbl' is a preprocessor
+for formatting tables. The `refer' preprocessor (and the similar
+program, `bib') processes citations in a document according to a
+bibliographic database.
+
+ Unfortunately, Ossanna's `troff' was written in PDP-11 assembly
+language and produced output specifically for the CAT phototypesetter.
+He rewrote it in C, although it was now 7000 lines of uncommented code
+and still dependent on the CAT. As the CAT became less common, and was
+no longer supported by the manufacturer, the need to make it support
+other devices became a priority. However, before this could be done,
+Ossanna was killed in a car accident.
+
+ So, Brian Kernighan took on the task of rewriting `troff'. The
+newly rewritten version produced device independent code which was very
+easy for postprocessors to read and translate to the appropriate
+printer codes. Also, this new version of `troff' (called `ditroff' for
+"device independent `troff'") had several extensions, which included
+drawing functions.
+
+ Due to the additional abilities of the new version of `troff',
+several new preprocessors appeared. The `pic' preprocessor provides a
+wide range of drawing functions. Likewise the `ideal' preprocessor did
+the same, although via a much different paradigm. The `grap'
+preprocessor took specifications for graphs, but, unlike other
+preprocessors, produced `pic' code.
+
+ James Clark began work on a GNU implementation of `ditroff' in
+early 1989. The first version, `groff' 0.3.1, was released June 1990.
+`groff' included:
+
+ * A replacement for `ditroff' with many extensions.
+
+ * The `soelim', `pic', `tbl', and `eqn' preprocessors.
+
+ * Postprocessors for character devices, POSTSCRIPT, TeX DVI, and
+ X Windows. GNU `troff' also eliminated the need for a separate
+ `nroff' program with a postprocessor which would produce ASCII
+ output.
+
+ * A version of the `me' macros and an implementation of the `man'
+ macros.
+
+ Also, a front-end was included which could construct the, sometimes
+painfully long, pipelines required for all the post- and preprocessors.
+
+ Development of GNU `troff' progressed rapidly, and saw the additions
+of a replacement for `refer', an implementation of the `ms' and `mm'
+macros, and a program to deduce how to format a document (`grog').
+
+ It was declared a stable (i.e. non-beta) package with the release of
+version 1.04 around November 1991.
+
+ Beginning in 1999, `groff' has new maintainers (the package was an
+orphan for a few years). As a result, new features and programs like
+`grn', a preprocessor for gremlin images, and an output device to
+produce HTML output have been added.
+
+
+File: groff, Node: groff Capabilities, Next: Macro Package Intro, Prev: History, Up: Introduction
+
+`groff' Capabilities
+====================
+
+ So what exactly is `groff' capable of doing? `groff' provides a
+wide range of low-level text formatting operations. Using these, it is
+possible to perform a wide range of formatting tasks, such as
+footnotes, table of contents, multiple columns, etc. Here's a list of
+the most important operations supported by `groff':
+
+ * text filling, adjusting, and centering
+
+ * hyphenation
+
+ * page control
+
+ * font and glyph size control
+
+ * vertical spacing (e.g. double-spacing)
+
+ * line length and indenting
+
+ * macros, strings, diversions, and traps
+
+ * number registers
+
+ * tabs, leaders, and fields
+
+ * input and output conventions and character translation
+
+ * overstrike, bracket, line drawing, and zero-width functions
+
+ * local horizontal and vertical motions and the width function
+
+ * three-part titles
+
+ * output line numbering
+
+ * conditional acceptance of input
+
+ * environment switching
+
+ * insertions from the standard input
+
+ * input/output file switching
+
+ * output and error messages
+
+
+File: groff, Node: Macro Package Intro, Next: Preprocessor Intro, Prev: groff Capabilities, Up: Introduction
+
+Macro Packages
+==============
+
+ Since `groff' provides such low-level facilities, it can be quite
+difficult to use by itself. However, `groff' provides a "macro"
+facility to specify how certain routine operations (e.g. starting
+paragraphs, printing headers and footers, etc.) should be done. These
+macros can be collected together into a "macro package". There are a
+number of macro packages available; the most common (and the ones
+described in this manual) are `man', `mdoc', `me', `ms', and `mm'.
+
+
+File: groff, Node: Preprocessor Intro, Next: Output device intro, Prev: Macro Package Intro, Up: Introduction
+
+Preprocessors
+=============
+
+ Although `groff' provides most functions needed to format a
+document, some operations would be unwieldy (e.g. to draw pictures).
+Therefore, programs called "preprocessors" were written which
+understand their own language and produce the necessary `groff'
+operations. These preprocessors are able to differentiate their own
+input from the rest of the document via markers.
+
+ To use a preprocessor, UNIX pipes are used to feed the output from
+the preprocessor into `groff'. Any number of preprocessors may be used
+on a given document; in this case, the preprocessors are linked
+together into one pipeline. However, with `groff', the user does not
+need to construct the pipe, but only tell `groff' what preprocessors to
+use.
+
+ `groff' currently has preprocessors for producing tables (`tbl'),
+typesetting equations (`eqn'), drawing pictures (`pic' and `grn'), and
+for processing bibliographies (`refer'). An associated program which
+is useful when dealing with preprocessors is `soelim'.
+
+ A free implementation of `grap', a preprocessor for drawing graphs,
+can be obtained as an extra package; `groff' can use `grap' also.
+
+ There are other preprocessors in existence, but, unfortunately, no
+free implementations are available. Among them are preprocessors for
+drawing mathematical pictures (`ideal') and chemical structures
+(`chem').
+
+
+File: groff, Node: Output device intro, Next: Credits, Prev: Preprocessor Intro, Up: Introduction
+
+Output Devices
+==============
+
+ `groff' actually produces device independent code which may be fed
+into a postprocessor to produce output for a particular device.
+Currently, `groff' has postprocessors for POSTSCRIPT devices, character
+terminals, X Windows (for previewing), TeX DVI format, HP LaserJet 4
+and Canon LBP printers (which use CAPSL), and HTML.
+
+
+File: groff, Node: Credits, Prev: Output device intro, Up: Introduction
+
+Credits
+=======
+
+ Large portions of this manual were taken from existing documents,
+most notably, the manual pages for the `groff' package by James Clark,
+and Eric Allman's papers on the `me' macro package.
+
+ The section on the `man' macro package is partly based on Susan G.
+Kleinmann's `groff_man' manual page written for the Debian GNU/Linux
+system.
+
+ Larry Kollar contributed the section in the `ms' macro package.
+
+
+File: groff, Node: Invoking groff, Next: Tutorial for Macro Users, Prev: Introduction, Up: Top
+
+Invoking `groff'
+****************
+
+ This section focuses on how to invoke the `groff' front end. This
+front end takes care of the details of constructing the pipeline among
+the preprocessors, `gtroff' and the postprocessor.
+
+ It has become a tradition that GNU programs get the prefix `g' to
+distinguish it from its original counterparts provided by the host (see
+*Note Environment::, for more details). Thus, for example, `geqn' is
+GNU `eqn'. On operating systems like GNU/Linux or the Hurd, which
+don't contain proprietary versions of `troff', and on
+MS-DOS/MS-Windows, where `troff' and associated programs are not
+available at all, this prefix is omitted since GNU `troff' is the only
+used incarnation of `troff'. Exception: `groff' is never replaced by
+`roff'.
+
+ In this document, we consequently say `gtroff' when talking about
+the GNU `troff' program. All other implementations of `troff' are
+called AT&T `troff' which is the common origin of all `troff' derivates
+(with more or less compatible changes). Similarly, we say `gpic',
+`geqn', etc.
+
+* Menu:
+
+* Groff Options::
+* Environment::
+* Macro Directories::
+* Font Directories::
+* Invocation Examples::
+
+
+File: groff, Node: Groff Options, Next: Environment, Prev: Invoking groff, Up: Invoking groff
+
+Options
+=======
+
+ `groff' normally runs the `gtroff' program and a postprocessor
+appropriate for the selected device. The default device is `ps' (but
+it can be changed when `groff' is configured and built). It can
+optionally preprocess with any of `gpic', `geqn', `gtbl', `ggrn',
+`grap', `grefer', or `gsoelim'.
+
+ This section only documents options to the `groff' front end. Many
+of the arguments to `groff' are passed on to `gtroff', therefore those
+are also included. Arguments to pre- or postprocessors can be found in
+*Note Invoking gpic::, *Note Invoking geqn::, *Note Invoking gtbl::,
+*Note Invoking ggrn::, *Note Invoking grefer::, *Note Invoking
+gsoelim::, *Note Invoking grotty::, *Note Invoking grops::, *Note
+Invoking grohtml::, *Note Invoking grodvi::, *Note Invoking grolj4::,
+*Note Invoking grolbp::, and *Note Invoking gxditview::.
+
+ The command line format for `groff' is:
+
+
+ groff [ -abceghilpstvzCEGNRSUVXZ ] [ -FDIR ] [ -mNAME ]
+ [ -TDEF ] [ -fFAM ] [ -wNAME ] [ -WNAME ]
+ [ -MDIR ] [ -dCS ] [ -rCN ] [ -nNUM ]
+ [ -oLIST ] [ -PARG ] [ -LARG ] [ -IDIR ]
+ [ FILES... ]
+
+ The command line format for `gtroff' is as follows.
+
+
+ gtroff [ -abcivzCERU ] [ -wNAME ] [ -WNAME ] [ -dCS ]
+ [ -fFAM ] [ -mNAME ] [ -nNUM ]
+ [ -oLIST ] [ -rCN ] [ -TNAME ]
+ [ -FDIR ] [ -MDIR ] [ FILES... ]
+
+Obviously, many of the options to `groff' are actually passed on to
+`gtroff'.
+
+ Options without an argument can be grouped behind a single `-'. A
+filename of `-' denotes the standard input. It is possible to have
+whitespace between an option and its parameter.
+
+ The `grog' command can be used to guess the correct `groff' command
+to format a file.
+
+ Here's the description of the command-line options:
+
+`-h'
+ Print a help message.
+
+`-e'
+ Preprocess with `geqn'.
+
+`-t'
+ Preprocess with `gtbl'.
+
+`-g'
+ Preprocess with `ggrn'.
+
+`-G'
+ Preprocess with `grap'.
+
+`-p'
+ Preprocess with `gpic'.
+
+`-s'
+ Preprocess with `gsoelim'.
+
+`-c'
+ Suppress color output.
+
+`-R'
+ Preprocess with `grefer'. No mechanism is provided for passing
+ arguments to `grefer' because most `grefer' options have
+ equivalent commands which can be included in the file. *Note
+ grefer::, for more details.
+
+ Note that `gtroff' also accepts a `-R' option, which is not
+ accessible via `groff'. This option prevents the loading of the
+ `troffrc' and `troffrc-end' files.
+
+`-v'
+ Make programs run by `groff' print out their version number.
+
+`-V'
+ Print the pipeline on `stdout' instead of executing it.
+
+`-z'
+ Suppress output from `gtroff'. Only error messages are printed.
+
+`-Z'
+ Do not postprocess the output of `gtroff'. Normally `groff'
+ automatically runs the appropriate postprocessor.
+
+`-PARG'
+ Pass ARG to the postprocessor. Each argument should be passed
+ with a separate `-P' option. Note that `groff' does not prepend
+ `-' to ARG before passing it to the postprocessor.
+
+`-l'
+ Send the output to a spooler for printing. The command used for
+ this is specified by the `print' command in the device description
+ file (see *Note Font Files::, for more info). If not present,
+ `-l' is ignored.
+
+`-LARG'
+ Pass ARG to the spooler. Each argument should be passed with a
+ separate `-L' option. Note that `groff' does not prepend a `-' to
+ ARG before passing it to the postprocessor. If the `print'
+ keyword in the device description file is missing, `-L' is ignored.
+
+`-TDEV'
+ Prepare output for device DEV. The default device is `ps', unless
+ changed when `groff' was configured and built. The following are
+ the output devices currently available:
+
+ `ps'
+ For POSTSCRIPT printers and previewers.
+
+ `dvi'
+ For TeX DVI format.
+
+ `X75'
+ For a 75dpi X11 previewer.
+
+ `X75-12'
+ For a 75dpi X11 previewer with a 12pt base font in the
+ document.
+
+ `X100'
+ For a 100dpi X11 previewer.
+
+ `X100-12'
+ For a 100dpi X11 previewer with a 12pt base font in the
+ document.
+
+ `ascii'
+ For typewriter-like devices using the (7-bit) ASCII character
+ set.
+
+ `latin1'
+ For typewriter-like devices that support the Latin-1
+ (ISO 8859-1) character set.
+
+ `utf8'
+ For typewriter-like devices which use the Unicode (ISO 10646)
+ character set with UTF-8 encoding.
+
+ `cp1047'
+ For typewriter-like devices which use the EBCDIC encoding IBM
+ cp1047.
+
+ `lj4'
+ For HP LaserJet4-compatible (or other PCL5-compatible)
+ printers.
+
+ `lbp'
+ For Canon CAPSL printers (LBP-4 and LBP-8 series laser
+ printers).
+
+ `html'
+ To produce HTML output. Note that the HTML driver consists
+ of two parts, a preprocessor (`pre-grohtml') and a
+ postprocessor (`post-grohtml').
+
+ The predefined `gtroff' string register `.T' contains the current
+ output device; the read-only number register `.T' is set to 1 if
+ this option is used (which is always true if `groff' is used to
+ call `gtroff'). *Note Built-in Registers::.
+
+ The postprocessor to be used for a device is specified by the
+ `postpro' command in the device description file. (*Note Font
+ Files::, for more info.) This can be overridden with the `-X'
+ option.
+
+`-X'
+ Preview with `gxditview' instead of using the usual postprocessor.
+ This is unlikely to produce good results except with `-Tps'.
+
+ Note that this is not the same as using `-TX75' or `-TX100' to
+ view a document with `gxditview': The former uses the metrics of
+ the specified device, whereas the latter uses X-specific fonts and
+ metrics.
+
+`-N'
+ Don't allow newlines with `eqn' delimiters. This is the same as
+ the `-N' option in `geqn'.
+
+`-S'
+ Safer mode. Pass the `-S' option to `gpic' and disable the
+ `open', `opena', `pso', `sy', and `pi' requests. For security
+ reasons, this is enabled by default.
+
+`-U'
+ Unsafe mode. This enables the `open', `opena', `pso', `sy', and
+ `pi' requests.
+
+`-a'
+ Generate an ASCII approximation of the typeset output. The
+ read-only register `.A' is then set to 1. *Note Built-in
+ Registers::. A typical example is
+
+
+ groff -a -man -Tdvi troff.man | less
+
+ which shows how lines are broken for the DVI device. Note that
+ this option is rather useless today since graphic output devices
+ are available virtually everywhere.
+
+`-b'
+ Print a backtrace with each warning or error message. This
+ backtrace should help track down the cause of the error. The line
+ numbers given in the backtrace may not always be correct: `gtroff'
+ can get confused by `as' or `am' requests while counting line
+ numbers.
+
+`-i'
+ Read the standard input after all the named input files have been
+ processed.
+
+`-wNAME'
+ Enable warning NAME. Available warnings are described in *Note
+ Debugging::. Multiple `-w' options are allowed.
+
+`-WNAME'
+ Inhibit warning NAME. Multiple `-W' options are allowed.
+
+`-E'
+ Inhibit all error messages.
+
+`-C'
+ Enable compatibility mode. *Note Implementation Differences::,
+ for the list of incompatibilities between `groff' and AT&T `troff'.
+
+`-dCS'
+`-dNAME=S'
+ Define C or NAME to be a string S. C must be a one-letter name;
+ NAME can be of arbitrary length. All string assignments happen
+ before loading any macro file (including the start-up file).
+
+`-fFAM'
+ Use FAM as the default font family. *Note Font Families::.
+
+`-mNAME'
+ Read in the file `NAME.tmac'. Normally `groff' searches for this
+ in its macro directories. If it isn't found, it tries `tmac.NAME'
+ (searching in the same directories).
+
+`-nNUM'
+ Number the first page NUM.
+
+`-oLIST'
+ Output only pages in LIST, which is a comma-separated list of page
+ ranges; `N' means print page N, `M-N' means print every page
+ between M and N, `-N' means print every page up to N, `N-' means
+ print every page beginning with N. `gtroff' exits after printing
+ the last page in the list. All the ranges are inclusive on both
+ ends.
+
+ Within `gtroff', this information can be extracted with the `.P'
+ register. *Note Built-in Registers::.
+
+ If your document restarts page numbering at the beginning of each
+ chapter, then `gtroff' prints the specified page range for each
+ chapter.
+
+`-rCN'
+`-rNAME=N'
+ Set number register C or NAME to the value N. C must be a
+ one-letter name; NAME can be of arbitrary length. N can be any
+ `gtroff' numeric expression. All register assignments happen
+ before loading any macro file (including the start-up file).
+
+`-FDIR'
+ Search `DIR' for subdirectories `devNAME' (NAME is the name of the
+ device), for the `DESC' file, and for font files before looking in
+ the standard directories (*note Font Directories::). This option
+ is passed to all pre- and postprocessors using the
+ `GROFF_FONT_PATH' environment variable.
+
+`-MDIR'
+ Search directory `DIR' for macro files before the standard
+ directories (*note Macro Directories::).
+
+`-IDIR'
+ This option is as described in *Note gsoelim::. It implies the
+ `-s' option.
+
+
+File: groff, Node: Environment, Next: Macro Directories, Prev: Groff Options, Up: Invoking groff
+
+Environment
+===========
+
+ There are also several environment variables (of the operating
+system, not within `gtroff') which can modify the behavior of `groff'.
+
+`GROFF_COMMAND_PREFIX'
+ If this is set to X, then `groff' runs `Xtroff' instead of
+ `gtroff'. This also applies to `tbl', `pic', `eqn', `grn',
+ `refer', and `soelim'. It does not apply to `grops', `grodvi',
+ `grotty', `pre-grohtml', `post-grohtml', `grolj4', and `gxditview'.
+
+ The default command prefix is determined during the installation
+ process. If a non-GNU troff system is found, prefix `g' is used,
+ none otherwise.
+
+`GROFF_TMAC_PATH'
+ A colon-separated list of directories in which to search for macro
+ files (before the default directories are tried). *Note Macro
+ Directories::.
+
+`GROFF_TYPESETTER'
+ The default output device.
+
+`GROFF_FONT_PATH'
+ A colon-separated list of directories in which to search for the
+ `dev'NAME directory (before the default directories are tried).
+ *Note Font Directories::.
+
+`GROFF_BIN_PATH'
+ This search path, followed by `PATH', is used for commands executed
+ by `groff'.
+
+`GROFF_TMPDIR'
+ The directory in which `groff' creates temporary files. If this is
+ not set and `TMPDIR' is set, temporary files are created in that
+ directory. Otherwise temporary files are created in a
+ system-dependent default directory (on Unix and GNU/Linux systems,
+ this is usually `/tmp'). `grops', `grefer', `pre-grohtml', and
+ `post-grohtml' can create temporary files in this directory.
+
+ Note that MS-DOS and MS-Windows ports of `groff' use semi-colons,
+rather than colons, to separate the directories in the lists described
+above.
+
+
+File: groff, Node: Macro Directories, Next: Font Directories, Prev: Environment, Up: Invoking groff
+
+Macro Directories
+=================
+
+ All macro file names must be named `NAME.tmac' or `tmac.NAME' to
+make the `-mNAME' command line option work. The `mso' request doesn't
+have this restriction; any file name can be used, and `gtroff' won't
+try to append or prepend the `tmac' string.
+
+ Macro files are kept in the "tmac directories", all of which
+constitute the "tmac path". The elements of the search path for macro
+files are (in that order):
+
+ * The directories specified with `gtroff''s or `groff''s `-M'
+ command line option.
+
+ * The directories given in the `GROFF_TMAC_PATH' environment
+ variable.
+
+ * The current directory (only if in unsafe mode using the `-U'
+ command line switch).
+
+ * The home directory.
+
+ * A platform-dependent directory, a site-specific
+ (platform-independent) directory, and the main tmac directory; the
+ default locations are
+
+
+ /usr/local/lib/groff/site-tmac
+ /usr/local/share/groff/site-tmac
+ /usr/local/share/groff/1.18/tmac
+
+ assuming that the version of `groff' is 1.18, and the installation
+ prefix was `/usr/local'. It is possible to fine-tune those
+ directories during the installation process.
+
+
+File: groff, Node: Font Directories, Next: Invocation Examples, Prev: Macro Directories, Up: Invoking groff
+
+Font Directories
+================
+
+ Basically, there is no restriction how font files for `groff' are
+named and how long font names are; however, to make the font family
+mechanism work (*note Font Families::), fonts within a family should
+start with the family name, followed by the shape. For example, the
+Times family uses `T' for the family name and `R', `B', `I', and `BI'
+to indicate the shapes `roman', `bold', `italic', and `bold italic',
+respectively. Thus the final font names are `TR', `TB', `TI', and
+`TBI'.
+
+ All font files are kept in the "font directories" which constitute
+the "font path". The file search functions will always append the
+directory `dev'NAME, where NAME is the name of the output device.
+Assuming, say, DVI output, and `/foo/bar' as a font directory, the font
+files for `grodvi' must be in `/foo/bar/devdvi'.
+
+ The elements of the search path for font files are (in that order):
+
+ * The directories specified with `gtroff''s or `groff''s `-F'
+ command line option. All device drivers and some preprocessors
+ also have this option.
+
+ * The directories given in the `GROFF_FONT_PATH' environment
+ variable.
+
+ * A site-specific directory and the main font directory; the default
+ locations are
+
+
+ /usr/local/share/groff/site-font
+ /usr/local/share/groff/1.18/font
+
+ assuming that the version of `groff' is 1.18, and the installation
+ prefix was `/usr/local'. It is possible to fine-tune those
+ directories during the installation process.
+
+
+File: groff, Node: Invocation Examples, Prev: Font Directories, Up: Invoking groff
+
+Invocation Examples
+===================
+
+ This section lists several common uses of `groff' and the
+corresponding command lines.
+
+
+ groff file
+
+This command processes `file' without a macro package or a
+preprocessor. The output device is the default, `ps', and the output
+is sent to `stdout'.
+
+
+ groff -t -mandoc -Tascii file | less
+
+This is basically what a call to the `man' program does. `gtroff'
+processes the manual page `file' with the `mandoc' macro file (which in
+turn either calls the `man' or the `mdoc' macro package), using the
+`tbl' preprocessor and the ASCII output device. Finally, the `less'
+pager displays the result.
+
+
+ groff -X -m me file
+
+Preview `file' with `gxditview', using the `me' macro package. Since
+no `-T' option is specified, use the default device (`ps'). Note that
+you can either say `-m me' or `-me'; the latter is an anachronism from
+the early days of UNIX.(1) (*note Invocation Examples-Footnote-1::)
+
+
+ groff -man -rD1 -z file
+
+Check `file' with the `man' macro package, forcing double-sided
+printing - don't produce any output.
+
+* Menu:
+
+* grog::
+
+
+File: groff, Node: Invocation Examples-Footnotes, Up: Invocation Examples
+
+ (1) The same is true for the other main macro packages that come
+with `groff': `man', `mdoc', `ms', `mm', and `mandoc'. This won't work
+in general; for example, to load `trace.tmac', either `-mtrace' or
+`-m trace' must be used.
+
+
+File: groff, Node: grog, Prev: Invocation Examples, Up: Invocation Examples
+
+`grog'
+------
+
+ `grog' reads files, guesses which of the `groff' preprocessors
+and/or macro packages are required for formatting them, and prints the
+`groff' command including those options on the standard output. It
+generates one or more of the options `-e', `-man', `-me', `-mm',
+`-mom', `-ms', `-mdoc', `-mdoc-old', `-p', `-R', `-g', `-G', `-s', and
+`-t'.
+
+ A special file name `-' refers to the standard input. Specifying no
+files also means to read the standard input. Any specified options are
+included in the printed command. No space is allowed between options
+and their arguments. The only options recognized are `-C' (which is
+also passed on) to enable compatibility mode, and `-v' to print the
+version number and exit.
+
+ For example,
+
+
+ grog -Tdvi paper.ms
+
+guesses the appropriate command to print `paper.ms' and then prints it
+to the command line after adding the `-Tdvi' option. For direct
+execution, enclose the call to `grog' in backquotes at the UNIX shell
+prompt:
+
+
+ `grog -Tdvi paper.ms` > paper.dvi
+
+As seen in the example, it is still necessary to redirect the output to
+something meaningful (i.e. either a file or a pager program like
+`less').
+
+
+File: groff, Node: Tutorial for Macro Users, Next: Macro Packages, Prev: Invoking groff, Up: Top
+
+Tutorial for Macro Users
+************************
+
+ Most users tend to use a macro package to format their papers. This
+means that the whole breadth of `groff' is not necessary for most
+people. This chapter covers the material needed to efficiently use a
+macro package.
+
+* Menu:
+
+* Basics::
+* Common Features::
+
+
+File: groff, Node: Basics, Next: Common Features, Prev: Tutorial for Macro Users, Up: Tutorial for Macro Users
+
+Basics
+======
+
+ This section covers some of the basic concepts necessary to
+understand how to use a macro package.(1) (*note Basics-Footnote-1::)
+References are made throughout to more detailed information, if desired.
+
+ `gtroff' reads an input file prepared by the user and outputs a
+formatted document suitable for publication or framing. The input
+consists of text, or words to be printed, and embedded commands
+("requests" and "escapes"), which tell `gtroff' how to format the
+output. For more detail on this, see *Note Embedded Commands::.
+
+ The word "argument" is used in this chapter to mean a word or number
+which appears on the same line as a request, and which modifies the
+meaning of that request. For example, the request
+
+
+ .sp
+
+spaces one line, but
+
+
+ .sp 4
+
+spaces four lines. The number 4 is an argument to the `sp' request
+which says to space four lines instead of one. Arguments are separated
+from the request and from each other by spaces (_no_ tabs). More
+details on this can be found in *Note Request Arguments::.
+
+ The primary function of `gtroff' is to collect words from input
+lines, fill output lines with those words, justify the right-hand margin
+by inserting extra spaces in the line, and output the result. For
+example, the input:
+
+
+ Now is the time
+ for all good men
+ to come to the aid
+ of their party.
+ Four score and seven
+ years ago, etc.
+
+is read, packed onto output lines, and justified to produce:
+
+ Now is the time for all good men to come to the aid of their party.
+ Four score and seven years ago, etc.
+
+ Sometimes a new output line should be started even though the current
+line is not yet full; for example, at the end of a paragraph. To do
+this it is possible to cause a "break", which starts a new output line.
+Some requests cause a break automatically, as normally do blank input
+lines and input lines beginning with a space.
+
+ Not all input lines are text to be formatted. Some input lines are
+requests which describe how to format the text. Requests always have a
+period (`.') or an apostrophe (`'') as the first character of the input
+line.
+
+ The text formatter also does more complex things, such as
+automatically numbering pages, skipping over page boundaries, putting
+footnotes in the correct place, and so forth.
+
+ Here are a few hints for preparing text for input to `gtroff'.
+
+ * First, keep the input lines short. Short input lines are easier to
+ edit, and `gtroff' packs words onto longer lines anyhow.
+
+ * In keeping with this, it is helpful to begin a new line after every
+ comma or phrase, since common corrections are to add or delete
+ sentences or phrases.
+
+ * End each sentence with two spaces - or better, start each sentence
+ on a new line. `gtroff' recognizes characters that usually end a
+ sentence, and inserts sentence space accordingly.
+
+ * Do not hyphenate words at the end of lines - `gtroff' is smart
+ enough to hyphenate words as needed, but is not smart enough to
+ take hyphens out and join a word back together. Also, words such
+ as "mother-in-law" should not be broken over a line, since then a
+ space can occur where not wanted, such as "mother- in-law".
+
+ `gtroff' double-spaces output text automatically if you use the
+request `.ls 2'. Reactivate single-spaced mode by typing `.ls 1'.(2)
+(*note Basics-Footnote-2::)
+
+ A number of requests allow to change the way the output looks,
+sometimes called the "layout" of the output page. Most of these
+requests adjust the placing of "whitespace" (blank lines or spaces).
+
+ The `bp' request starts a new page, causing a line break.
+
+ The request `.sp N' leaves N lines of blank space. N can be omitted
+(meaning skip a single line) or can be of the form Ni (for N inches) or
+Nc (for N centimeters). For example, the input:
+
+
+ .sp 1.5i
+ My thoughts on the subject
+ .sp
+
+leaves one and a half inches of space, followed by the line "My
+thoughts on the subject", followed by a single blank line (more
+measurement units are available, see *Note Measurements::).
+
+ Text lines can be centered by using the `ce' request. The line
+after `ce' is centered (horizontally) on the page. To center more than
+one line, use `.ce N' (where N is the number of lines to center),
+followed by the N lines. To center many lines without counting them,
+type:
+
+
+ .ce 1000
+ lines to center
+ .ce 0
+
+The `.ce 0' request tells `groff' to center zero more lines, in other
+words, stop centering.
+
+ All of these requests cause a break; that is, they always start a new
+line. To start a new line without performing any other action, use
+`br'.
+
+
+File: groff, Node: Basics-Footnotes, Up: Basics
+
+ (1) This section is derived from `Writing Papers with nroff using
+-me' by Eric P. Allman.
+
+ (2) If you need finer granularity of the vertical space, use the
+`pvs' request (*note Changing Type Sizes::).
+
+
+File: groff, Node: Common Features, Prev: Basics, Up: Tutorial for Macro Users
+
+Common Features
+===============
+
+ `gtroff' provides very low-level operations for formatting a
+document. There are many common routine operations which are done in
+all documents. These common operations are written into "macros" and
+collected into a "macro package".
+
+ All macro packages provide certain common capabilities which fall
+into the following categories.
+
+* Menu:
+
+* Paragraphs::
+* Sections and Chapters::
+* Headers and Footers::
+* Page Layout Adjustment::
+* Displays::
+* Footnotes and Annotations::
+* Table of Contents::
+* Indices::
+* Paper Formats::
+* Multiple Columns::
+* Font and Size Changes::
+* Predefined Strings::
+* Preprocessor Support::
+* Configuration and Customization::
+
+
+File: groff, Node: Paragraphs, Next: Sections and Chapters, Prev: Common Features, Up: Common Features
+
+Paragraphs
+----------
+
+ One of the most common and most used capability is starting a
+paragraph. There are a number of different types of paragraphs, any of
+which can be initiated with macros supplied by the macro package.
+Normally, paragraphs start with a blank line and the first line
+indented, like the text in this manual. There are also block style
+paragraphs, which omit the indentation:
+
+
+ Some men look at constitutions with sanctimonious
+ reverence, and deem them like the ark of the covenant, too
+ sacred to be touched.
+
+And there are also indented paragraphs which begin with a tag or label
+at the margin and the remaining text indented.
+
+
+ one This is the first paragraph. Notice how the first
+ line of the resulting paragraph lines up with the
+ other lines in the paragraph.
+
+
+ longlabel
+ This paragraph had a long label. The first
+ character of text on the first line does not line up
+ with the text on second and subsequent lines,
+ although they line up with each other.
+
+ A variation of this is a bulleted list.
+
+
+ . Bulleted lists start with a bullet. It is possible
+ to use other glyphs instead of the bullet. In nroff
+ mode using the ASCII character set for output, a dot
+ is used instead of a real bullet.
+
+
+File: groff, Node: Sections and Chapters, Next: Headers and Footers, Prev: Paragraphs, Up: Common Features
+
+Sections and Chapters
+---------------------
+
+ Most macro packages supply some form of section headers. The
+simplest kind is simply the heading on a line by itself in bold type.
+Others supply automatically numbered section heading or different
+heading styles at different levels. Some, more sophisticated, macro
+packages supply macros for starting chapters and appendices.
+
+
+File: groff, Node: Headers and Footers, Next: Page Layout Adjustment, Prev: Sections and Chapters, Up: Common Features
+
+Headers and Footers
+-------------------
+
+ Every macro package gives some way to manipulate the "headers" and
+"footers" (also called "titles") on each page. This is text put at the
+top and bottom of each page, respectively, which contain data like the
+current page number, the current chapter title, and so on. Its
+appearance is not affected by the running text. Some packages allow
+for different ones on the even and odd pages (for material printed in a
+book form).
+
+ The titles are called "three-part titles", that is, there is a
+left-justified part, a centered part, and a right-justified part. An
+automatically generated page number may be put in any of these fields
+with the `%' character (see *Note Page Layout::, for more details).
+
+
+File: groff, Node: Page Layout Adjustment, Next: Displays, Prev: Headers and Footers, Up: Common Features
+
+Page Layout
+-----------
+
+ Most macro packages let the user specify top and bottom margins and
+other details about the appearance of the printed pages.
+
+
+File: groff, Node: Displays, Next: Footnotes and Annotations, Prev: Page Layout Adjustment, Up: Common Features
+
+Displays
+--------
+
+ "Displays" are sections of text to be set off from the body of the
+paper. Major quotes, tables, and figures are types of displays, as are
+all the examples used in this document.
+
+ "Major quotes" are quotes which are several lines long, and hence
+are set in from the rest of the text without quote marks around them.
+
+ A "list" is an indented, single-spaced, unfilled display. Lists
+should be used when the material to be printed should not be filled and
+justified like normal text, such as columns of figures or the examples
+used in this paper.
+
+ A "keep" is a display of lines which are kept on a single page if
+possible. An example for a keep might be a diagram. Keeps differ from
+lists in that lists may be broken over a page boundary whereas keeps are
+not.
+
+ "Floating keeps" move relative to the text. Hence, they are good for
+things which are referred to by name, such as "See figure 3". A
+floating keep appears at the bottom of the current page if it fits;
+otherwise, it appears at the top of the next page. Meanwhile, the
+surrounding text `flows' around the keep, thus leaving no blank areas.
+
+
+File: groff, Node: Footnotes and Annotations, Next: Table of Contents, Prev: Displays, Up: Common Features
+
+Footnotes and Annotations
+-------------------------
+
+ There are a number of requests to save text for later printing.
+
+ "Footnotes" are printed at the bottom of the current page.
+
+ "Delayed text" is very similar to a footnote except that it is
+printed when called for explicitly. This allows a list of references to
+appear (for example) at the end of each chapter, as is the convention in
+some disciplines.
+
+ Most macro packages which supply this functionality also supply a
+means of automatically numbering either type of annotation.
+
+
+File: groff, Node: Table of Contents, Next: Indices, Prev: Footnotes and Annotations, Up: Common Features
+
+Table of Contents
+-----------------
+
+ "Tables of contents" are a type of delayed text having a tag
+(usually the page number) attached to each entry after a row of dots.
+The table accumulates throughout the paper until printed, usually after
+the paper has ended. Many macro packages provide the ability to have
+several tables of contents (e.g. a standard table of contents, a list
+of tables, etc).
+
+
+File: groff, Node: Indices, Next: Paper Formats, Prev: Table of Contents, Up: Common Features
+
+Indices
+-------
+
+ While some macro packages use the term "index", none actually
+provide that functionality. The facilities they call indices are
+actually more appropriate for tables of contents.
+
+ To produce a real index in a document, external tools like the
+`makeindex' program are necessary.
+
+
+File: groff, Node: Paper Formats, Next: Multiple Columns, Prev: Indices, Up: Common Features
+
+Paper Formats
+-------------
+
+ Some macro packages provide stock formats for various kinds of
+documents. Many of them provide a common format for the title and
+opening pages of a technical paper. The `mm' macros in particular
+provide formats for letters and memoranda.
+
+
+File: groff, Node: Multiple Columns, Next: Font and Size Changes, Prev: Paper Formats, Up: Common Features
+
+Multiple Columns
+----------------
+
+ Some macro packages (but not `man') provide the ability to have two
+or more columns on a page.
+
+
+File: groff, Node: Font and Size Changes, Next: Predefined Strings, Prev: Multiple Columns, Up: Common Features
+
+Font and Size Changes
+---------------------
+
+ The built-in font and size functions are not always intuitive, so all
+macro packages provide macros to make these operations simpler.
+
+
+File: groff, Node: Predefined Strings, Next: Preprocessor Support, Prev: Font and Size Changes, Up: Common Features
+
+Predefined Strings
+------------------
+
+ Most macro packages provide various predefined strings for a variety
+of uses; examples are sub- and superscripts, printable dates, quotes and
+various special characters.
+
+
+File: groff, Node: Preprocessor Support, Next: Configuration and Customization, Prev: Predefined Strings, Up: Common Features
+
+Preprocessor Support
+--------------------
+
+ All macro packages provide support for various preprocessors and may
+extend their functionality.
+
+ For example, all macro packages mark tables (which are processed with
+`gtbl') by placing them between `TS' and `TE' macros. The `ms' macro
+package has an option, `.TS H', that prints a caption at the top of a
+new page (when the table is too long to fit on a single page).
+
+
+File: groff, Node: Configuration and Customization, Prev: Preprocessor Support, Up: Common Features
+
+Configuration and Customization
+-------------------------------
+
+ Some macro packages provide means of customizing many of the details
+of how the package behaves. This ranges from setting the default type
+size to changing the appearance of section headers.
+
+
+File: groff, Node: Macro Packages, Next: gtroff Reference, Prev: Tutorial for Macro Users, Up: Top
+
+Macro Packages
+**************
+
+ This chapter documents the main macro packages that come with
+`groff'.
+
+* Menu:
+
+* man::
+* mdoc::
+* ms::
+* me::
+* mm::
+
+
+File: groff, Node: man, Next: mdoc, Prev: Macro Packages, Up: Macro Packages
+
+`man'
+=====
+
+ This is the most popular and probably the most important macro
+package of `groff'. It is easy to use, and a vast majority of manual
+pages are based on it.
+
+* Menu:
+
+* Man options::
+* Man usage::
+* Man font macros::
+* Miscellaneous man macros::
+* Predefined man strings::
+* Preprocessors in man pages::
+
+
+File: groff, Node: Man options, Next: Man usage, Prev: man, Up: man
+
+Options
+-------
+
+ The command line format for using the `man' macros with `groff' is:
+
+
+ groff -m man [ -rLL=LENGTH ] [ -rLT=LENGTH ]
+ [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [ -rPNNN ]
+ [ -rSXX ] [ -rXNNN ] [ FILES... ]
+
+It is possible to use `-man' instead of `-m man'.
+
+`-rLL=LENGTH'
+ Set line length to LENGTH. If not specified, the line length
+ defaults to 78 en in nroff mode (this is 78 characters per line)
+ and 6.5 inch otherwise.
+
+`-rLT=LENGTH'
+ Set title length to LENGTH. If not specified, the title length
+ defaults to 78 en in nroff mode (this is 78 characters per line)
+ and 6.5 inch otherwise.
+
+`-rcR=1'
+ This option (the default if a TTY output device is used) creates a
+ single, very long page instead of multiple pages. Use `-rcR=0' to
+ disable it.
+
+`-rC1'
+ If more than one manual page is given on the command line, number
+ the pages continuously, rather than starting each at 1.
+
+`-rD1'
+ Double-sided printing. Footers for even and odd pages are
+ formatted differently.
+
+`-rPNNN'
+ Page numbering starts with NNN rather than with 1.
+
+`-rSXX'
+ Use XX (which can be 10, 11, or 12pt) as the base document font
+ size instead of the default value of 10pt.
+
+`-rXNNN'
+ After page NNN, number pages as NNNa, NNNb, NNNc, etc. For
+ example, the option `-rX2' produces the following page numbers: 1,
+ 2, 2a, 2b, 2c, etc.
+
diff --git a/contrib/groff/doc/groff-10 b/contrib/groff/doc/groff-10
new file mode 100644
index 0000000..85971cf
--- /dev/null
+++ b/contrib/groff/doc/groff-10
@@ -0,0 +1,208 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+File: groff, Node: String Index, Next: Glyph Name Index, Prev: Macro Index, Up: Top
+
+String Index
+************
+
+ The macro package or program a specific string belongs to is
+appended in brackets.
+
+ A string name `x' consisting of exactly one character can be
+accessed as `\*x'. A string name `xx' consisting of exactly two
+characters can be accessed as `\*(xx'. String names `xxx' of any
+length can be accessed as `\*[xxx]'.
+
+* Menu:
+
+* ! [ms]: ms Strings and Special Characters.
+* ' [ms]: ms Strings and Special Characters.
+* * [ms]: ms Footnotes.
+* *Q [ms]: ms Strings and Special Characters.
+* *U [ms]: ms Strings and Special Characters.
+* , [ms]: ms Strings and Special Characters.
+* - [ms]: ms Strings and Special Characters.
+* . [ms]: ms Strings and Special Characters.
+* .T: Built-in Registers.
+* 3 [ms]: ms Strings and Special Characters.
+* 8 [ms]: ms Strings and Special Characters.
+* <colon> [ms]: ms Strings and Special Characters.
+* ? [ms]: ms Strings and Special Characters.
+* ^ [ms]: ms Strings and Special Characters.
+* _ [ms]: ms Strings and Special Characters.
+* ` [ms]: ms Strings and Special Characters.
+* ABSTRACT [ms]: ms Strings and Special Characters.
+* Ae [ms]: ms Strings and Special Characters.
+* ae [ms]: ms Strings and Special Characters.
+* CF [ms]: ms Headers and Footers.
+* CH [ms]: ms Headers and Footers.
+* d- [ms]: ms Strings and Special Characters.
+* D- [ms]: ms Strings and Special Characters.
+* LF [ms]: ms Headers and Footers.
+* LH [ms]: ms Headers and Footers.
+* lq [man]: Predefined man strings.
+* MONTH1 [ms]: ms Strings and Special Characters.
+* MONTH10 [ms]: ms Strings and Special Characters.
+* MONTH11 [ms]: ms Strings and Special Characters.
+* MONTH12 [ms]: ms Strings and Special Characters.
+* MONTH2 [ms]: ms Strings and Special Characters.
+* MONTH3 [ms]: ms Strings and Special Characters.
+* MONTH4 [ms]: ms Strings and Special Characters.
+* MONTH5 [ms]: ms Strings and Special Characters.
+* MONTH6 [ms]: ms Strings and Special Characters.
+* MONTH7 [ms]: ms Strings and Special Characters.
+* MONTH8 [ms]: ms Strings and Special Characters.
+* MONTH9 [ms]: ms Strings and Special Characters.
+* o [ms]: ms Strings and Special Characters.
+* q [ms]: ms Strings and Special Characters.
+* R [man]: Predefined man strings.
+* REFERENCES [ms]: ms Strings and Special Characters.
+* RF [ms]: ms Headers and Footers.
+* RH [ms]: ms Headers and Footers.
+* rq [man]: Predefined man strings.
+* S [man]: Predefined man strings.
+* th [ms]: ms Strings and Special Characters.
+* Th [ms]: ms Strings and Special Characters.
+* Tm [man]: Predefined man strings.
+* TOC [ms]: ms Strings and Special Characters.
+* v [ms]: ms Strings and Special Characters.
+* www-image-template [grohtml]: grohtml specific registers and strings.
+* ~ [ms]: ms Strings and Special Characters.
+
+
+File: groff, Node: Glyph Name Index, Next: Font File Keyword Index, Prev: String Index, Up: Top
+
+Glyph Name Index
+****************
+
+ A glyph name `xx' consisting of exactly two characters can be
+accessed as `\(xx'. Glyph names `xxx' of any length can be accessed as
+`\[xxx]'.
+
+
+File: groff, Node: Font File Keyword Index, Next: Program and File Index, Prev: Glyph Name Index, Up: Top
+
+Font File Keyword Index
+***********************
+
+* Menu:
+
+* #: Font File Format.
+* ---: Font File Format.
+* biggestfont: DESC File Format.
+* charset <1>: Font File Format.
+* charset: DESC File Format.
+* family <1>: DESC File Format.
+* family <2>: Font Positions.
+* family: Changing Fonts.
+* fonts <1>: DESC File Format.
+* fonts <2>: Special Fonts.
+* fonts: Using Symbols.
+* hor: DESC File Format.
+* kernpairs: Font File Format.
+* ligatures: Font File Format.
+* name: Font File Format.
+* papersize: DESC File Format.
+* pass_filenames: DESC File Format.
+* postpro: DESC File Format.
+* prepro: DESC File Format.
+* print: DESC File Format.
+* res: DESC File Format.
+* sizes: DESC File Format.
+* sizescale: DESC File Format.
+* slant: Font File Format.
+* spacewidth: Font File Format.
+* spare1: DESC File Format.
+* spare2: DESC File Format.
+* special <1>: Font File Format.
+* special: Artificial Fonts.
+* styles <1>: DESC File Format.
+* styles <2>: Font Positions.
+* styles <3>: Font Families.
+* styles: Changing Fonts.
+* tcommand: DESC File Format.
+* unitwidth: DESC File Format.
+* use_charnames_in_special <1>: DESC File Format.
+* use_charnames_in_special: Postprocessor Access.
+* vert: DESC File Format.
+
+
+File: groff, Node: Program and File Index, Next: Concept Index, Prev: Font File Keyword Index, Up: Top
+
+Program and File Index
+**********************
+
+* Menu:
+
+* an.tmac: man.
+* changebar: Miscellaneous.
+* DESC <1>: Special Fonts.
+* DESC <2>: Using Symbols.
+* DESC <3>: Font Positions.
+* DESC <4>: Font Families.
+* DESC: Changing Fonts.
+* DESC file format: DESC File Format.
+* DESC, and font mounting: Font Positions.
+* DESC, and use_charnames_in_special: Postprocessor Access.
+* ditroff: History.
+* eqn: ms Insertions.
+* geqn: Groff Options.
+* geqn, invocation in manual pages: Preprocessors in man pages.
+* ggrn: Groff Options.
+* gpic: Groff Options.
+* grap: Groff Options.
+* grefer: Groff Options.
+* grefer, invocation in manual pages: Preprocessors in man pages.
+* groff: Groff Options.
+* grog: grog.
+* grohtml: Miscellaneous man macros.
+* gsoelim: Groff Options.
+* gtbl: Groff Options.
+* gtbl, invocation in manual pages: Preprocessors in man pages.
+* gtroff: Groff Options.
+* hyphen.us: Manipulating Hyphenation.
+* makeindex: Indices.
+* man, invocation of preprocessors: Preprocessors in man pages.
+* man-old.tmac: man.
+* man.local: Man usage.
+* man.tmac: man.
+* nrchbar: Miscellaneous.
+* perl: I/O.
+* pic: ms Insertions.
+* post-grohtml: Groff Options.
+* pre-grohtml: Groff Options.
+* refer: ms Insertions.
+* soelim: Debugging.
+* tbl: ms Insertions.
+* trace.tmac: Writing Macros.
+* troffrc <1>: Line Layout.
+* troffrc <2>: Troff and Nroff Mode.
+* troffrc <3>: Manipulating Hyphenation.
+* troffrc: Groff Options.
+* troffrc-end <1>: Troff and Nroff Mode.
+* troffrc-end <2>: Manipulating Hyphenation.
+* troffrc-end: Groff Options.
+* tty.tmac: Troff and Nroff Mode.
+
diff --git a/contrib/groff/doc/groff-11 b/contrib/groff/doc/groff-11
new file mode 100644
index 0000000..d1e4c43
--- /dev/null
+++ b/contrib/groff/doc/groff-11
@@ -0,0 +1,1536 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+File: groff, Node: Concept Index, Prev: Program and File Index, Up: Top
+
+Concept Index
+*************
+
+* Menu:
+
+* ", at end of sentence <1>: Using Symbols.
+* ", at end of sentence: Sentences.
+* ", in a macro argument: Request Arguments.
+* %, as delimiter: Escapes.
+* &, as delimiter: Escapes.
+* ', as a comment: Comments.
+* ', at end of sentence <1>: Using Symbols.
+* ', at end of sentence: Sentences.
+* ', delimiting arguments: Escapes.
+* (, as delimiter: Escapes.
+* (, starting a two-character identifier <1>: Escapes.
+* (, starting a two-character identifier: Identifiers.
+* ), as delimiter: Escapes.
+* ), at end of sentence <1>: Using Symbols.
+* ), at end of sentence: Sentences.
+* *, as delimiter: Escapes.
+* *, at end of sentence <1>: Using Symbols.
+* *, at end of sentence: Sentences.
+* +, and page motion: Expressions.
+* +, as delimiter: Escapes.
+* -, and page motion: Expressions.
+* -, as delimiter: Escapes.
+* ., as delimiter: Escapes.
+* .h register, difference to nl: Diversions.
+* .ps register, in comparison with .psr: Fractional Type Sizes.
+* .s register, in comparison with .sr: Fractional Type Sizes.
+* .S register, Plan 9 alias for .tabs: Tabs and Fields.
+* .t register, and diversions: Diversion Traps.
+* .tabs register, Plan 9 alias (.S): Tabs and Fields.
+* .V register, and vs: Changing Type Sizes.
+* /, as delimiter: Escapes.
+* 8-bit input: Font File Format.
+* <, as delimiter: Escapes.
+* <colon>, as delimiter: Escapes.
+* =, as delimiter: Escapes.
+* >, as delimiter: Escapes.
+* [, macro names starting with, and refer: Identifiers.
+* [, starting an identifier <1>: Escapes.
+* [, starting an identifier: Identifiers.
+* \!, and output: Diversions.
+* \!, and trnt: Character Translations.
+* \!, in top-level diversion: Diversions.
+* \!, incompatibilities with AT&T troff: Implementation Differences.
+* \!, used as delimiter: Escapes.
+* \$, when reading text for a macro: Copy-in Mode.
+* \%, and translations: Character Translations.
+* \%, following \X or \Y: Manipulating Hyphenation.
+* \%, in \X: Postprocessor Access.
+* \%, incompatibilities with AT&T troff: Implementation Differences.
+* \%, used as delimiter: Escapes.
+* \&, and glyph definitions: Using Symbols.
+* \&, and translations: Character Translations.
+* \&, at end of sentence: Sentences.
+* \&, escaping control characters: Requests.
+* \&, in \X: Postprocessor Access.
+* \&, incompatibilities with AT&T troff: Implementation Differences.
+* \&, used as delimiter: Escapes.
+* \', and translations: Character Translations.
+* \', incompatibilities with AT&T troff: Implementation Differences.
+* \', used as delimiter: Escapes.
+* \(, and translations: Character Translations.
+* \), in \X: Postprocessor Access.
+* \), used as delimiter: Escapes.
+* \*, and warnings: Warnings.
+* \*, incompatibilities with AT&T troff: Implementation Differences.
+* \*, when reading text for a macro: Copy-in Mode.
+* \, disabling (eo): Character Translations.
+* \,, used as delimiter: Escapes.
+* \-, and translations: Character Translations.
+* \-, incompatibilities with AT&T troff: Implementation Differences.
+* \-, used as delimiter: Escapes.
+* \/, used as delimiter: Escapes.
+* \0, used as delimiter: Escapes.
+* \<colon>, in \X: Postprocessor Access.
+* \<colon>, used as delimiter: Escapes.
+* \<RET>, when reading text for a macro: Copy-in Mode.
+* \<SP>, difference to \~: Request Arguments.
+* \<SP>, incompatibilities with AT&T troff: Implementation Differences.
+* \<SP>, used as delimiter: Escapes.
+* \?, in top-level diversion: Diversions.
+* \?, incompatibilities with AT&T troff: Implementation Differences.
+* \?, used as delimiter: Escapes.
+* \@, used as delimiter: Escapes.
+* \[, and translations: Character Translations.
+* \\, when reading text for a macro: Copy-in Mode.
+* \^, incompatibilities with AT&T troff: Implementation Differences.
+* \^, used as delimiter: Escapes.
+* \_, and translations: Character Translations.
+* \_, incompatibilities with AT&T troff: Implementation Differences.
+* \_, used as delimiter: Escapes.
+* \`, and translations: Character Translations.
+* \`, incompatibilities with AT&T troff: Implementation Differences.
+* \`, used as delimiter: Escapes.
+* \A, allowed delimiters: Escapes.
+* \a, and translations: Character Translations.
+* \A, incompatibilities with AT&T troff: Implementation Differences.
+* \a, used as delimiter: Escapes.
+* \B, allowed delimiters: Escapes.
+* \b, limitations: Drawing Requests.
+* \b, possible quote characters: Escapes.
+* \C, allowed delimiters: Escapes.
+* \c, and fill mode: Line Control.
+* \c, and no-fill mode: Line Control.
+* \C, and translations: Character Translations.
+* \c, incompatibilities with AT&T troff: Implementation Differences.
+* \c, used as delimiter: Escapes.
+* \D, allowed delimiters: Escapes.
+* \d, used as delimiter: Escapes.
+* \e, and glyph definitions: Using Symbols.
+* \e, and translations: Character Translations.
+* \e, incompatibilities with AT&T troff: Implementation Differences.
+* \e, used as delimiter: Escapes.
+* \E, used as delimiter: Escapes.
+* \e, used as delimiter: Escapes.
+* \F, and changing fonts: Changing Fonts.
+* \F, and font positions: Font Positions.
+* \f, and font translations: Changing Fonts.
+* \f, incompatibilities with AT&T troff: Implementation Differences.
+* \H, allowed delimiters: Escapes.
+* \h, allowed delimiters: Escapes.
+* \H, incompatibilities with AT&T troff: Implementation Differences.
+* \H, using + and -: Expressions.
+* \H, with fractional type sizes: Fractional Type Sizes.
+* \L, allowed delimiters: Escapes.
+* \l, allowed delimiters: Escapes.
+* \L, and glyph definitions: Using Symbols.
+* \l, and glyph definitions: Using Symbols.
+* \N, allowed delimiters: Escapes.
+* \N, and translations: Character Translations.
+* \n, and warnings: Warnings.
+* \n, incompatibilities with AT&T troff: Implementation Differences.
+* \n, when reading text for a macro: Copy-in Mode.
+* \o, possible quote characters: Escapes.
+* \p, used as delimiter: Escapes.
+* \R, after \c: Line Control.
+* \R, allowed delimiters: Escapes.
+* \R, and warnings: Warnings.
+* \R, difference to nr: Auto-increment.
+* \r, used as delimiter: Escapes.
+* \R, using + and -: Expressions.
+* \S, allowed delimiters: Escapes.
+* \s, allowed delimiters: Escapes.
+* \S, incompatibilities with AT&T troff: Implementation Differences.
+* \s, incompatibilities with AT&T troff: Implementation Differences.
+* \s, using + and -: Expressions.
+* \s, with fractional type sizes: Fractional Type Sizes.
+* \t, and translations: Character Translations.
+* \t, and warnings: Warnings.
+* \t, used as delimiter: Escapes.
+* \u, used as delimiter: Escapes.
+* \v, allowed delimiters: Escapes.
+* \v, internal representation: Gtroff Internals.
+* \w, allowed delimiters: Escapes.
+* \x, allowed delimiters: Escapes.
+* \X, and special characters: Postprocessor Access.
+* \X, followed by \%: Manipulating Hyphenation.
+* \X, possible quote characters: Escapes.
+* \Y, followed by \%: Manipulating Hyphenation.
+* \Z, allowed delimiters: Escapes.
+* \{, incompatibilities with AT&T troff: Implementation Differences.
+* \{, used as delimiter: Escapes.
+* \|, incompatibilities with AT&T troff: Implementation Differences.
+* \|, used as delimiter: Escapes.
+* \}, and warnings: Warnings.
+* \}, incompatibilities with AT&T troff: Implementation Differences.
+* \}, used as delimiter: Escapes.
+* \~, and translations: Character Translations.
+* \~, difference to \<SP>: Request Arguments.
+* \~, used as delimiter: Escapes.
+* ], as part of an identifier: Identifiers.
+* ], at end of sentence <1>: Using Symbols.
+* ], at end of sentence: Sentences.
+* ], ending an identifier <1>: Escapes.
+* ], ending an identifier: Identifiers.
+* ], macro names starting with, and refer: Identifiers.
+* aborting (ab): Debugging.
+* absolute position operator (|): Expressions.
+* accent marks [ms]: ms Strings and Special Characters.
+* access of postprocessor: Postprocessor Access.
+* accessing unnamed glyphs with \N: Font File Format.
+* activating kerning (kern): Ligatures and Kerning.
+* activating ligatures (lg): Ligatures and Kerning.
+* activating track kerning (tkf): Ligatures and Kerning.
+* ad request, and hyphenation margin: Manipulating Hyphenation.
+* ad request, and hyphenation space: Manipulating Hyphenation.
+* adjusting: Filling and Adjusting.
+* adjusting and filling, manipulating: Manipulating Filling and Adjusting.
+* adjustment mode register (.j): Manipulating Filling and Adjusting.
+* alias, diversion, creating (als): Strings.
+* alias, macro, creating (als): Strings.
+* alias, number register, creating (aln): Setting Registers.
+* alias, string, creating (als): Strings.
+* als request, and \$0: Parameters.
+* am, am1, ami requests, and warnings: Warnings.
+* annotations: Footnotes and Annotations.
+* appending to a diversion (da): Diversions.
+* appending to a file (opena): I/O.
+* appending to a macro (am): Writing Macros.
+* appending to a string (as): Strings.
+* arc, drawing (\D'a ...'): Drawing Requests.
+* argument delimiting characters: Escapes.
+* arguments to requests: Request Arguments.
+* arguments, macro (\$): Parameters.
+* arguments, of strings: Strings.
+* arithmetic operators: Expressions.
+* artificial fonts: Artificial Fonts.
+* as, as1 requests, and comments: Comments.
+* as, as1 requests, and warnings: Warnings.
+* ASCII approximation output register (.A) <1>: Built-in Registers.
+* ASCII approximation output register (.A): Groff Options.
+* ASCII, encoding: Groff Options.
+* asciify request, and writem: I/O.
+* assigning formats (af): Assigning Formats.
+* assignments, indirect: Interpolating Registers.
+* assignments, nested: Interpolating Registers.
+* AT&T troff, ms macro package differences: Differences from AT&T ms.
+* auto-increment: Auto-increment.
+* available glyphs, list (`groff_char(7)' man page): Using Symbols.
+* backslash, printing (\\, \e, \E, \[rs]) <1>: Implementation Differences.
+* backslash, printing (\\, \e, \E, \[rs]): Escapes.
+* backspace character: Identifiers.
+* backspace character, and translations: Character Translations.
+* backtrace of input stack (backtrace): Debugging.
+* baseline: Sizes.
+* basic unit (u): Measurements.
+* basics of macros: Basics.
+* bd request, and font styles: Font Families.
+* bd request, and font translations: Changing Fonts.
+* bd request, incompatibilities with AT&T troff: Implementation Differences.
+* begin of conditional block (\{): if-else.
+* beginning diversion (di): Diversions.
+* blank line <1>: Requests.
+* blank line: Implicit Line Breaks.
+* blank line (sp): Basics.
+* blank line macro (blm) <1>: Blank Line Traps.
+* blank line macro (blm) <2>: Requests.
+* blank line macro (blm): Implicit Line Breaks.
+* blank line traps: Blank Line Traps.
+* blank lines, disabling: Manipulating Spacing.
+* block, conditional, begin (\{): if-else.
+* block, condititional, end (\}): if-else.
+* bold face [man]: Man font macros.
+* bold face, imitating (bd): Artificial Fonts.
+* bottom margin: Page Layout.
+* bounding box: Miscellaneous.
+* box rule glyph (\[br]): Drawing Requests.
+* box, boxa requests, and warnings: Warnings.
+* bp request, and top-level diversion: Page Control.
+* bp request, causing implicit linebreak: Manipulating Filling and Adjusting.
+* bp request, using + and -: Expressions.
+* br glyph, and cflags: Using Symbols.
+* break <1>: Manipulating Filling and Adjusting.
+* break: Basics.
+* break (br): Basics.
+* break request, in a while loop: while.
+* break, implicit: Implicit Line Breaks.
+* built-in registers: Built-in Registers.
+* bulleted list, example markup [ms]: Lists in ms.
+* c unit: Measurements.
+* calling convention of preprocessors: Preprocessors in man pages.
+* capabilities of groff: groff Capabilities.
+* ce request, causing implicit linebreak: Manipulating Filling and Adjusting.
+* ce request, difference to .ad c: Manipulating Filling and Adjusting.
+* centered text: Manipulating Filling and Adjusting.
+* centering lines (ce) <1>: Manipulating Filling and Adjusting.
+* centering lines (ce): Basics.
+* centimeter unit (c): Measurements.
+* cf request, causing implicit linebreak: Manipulating Filling and Adjusting.
+* changing font family (fam, \F): Font Families.
+* changing font position (\f): Font Positions.
+* changing font style (sty): Font Families.
+* changing fonts (ft, \f): Changing Fonts.
+* changing format, and read-only registers: Assigning Formats.
+* changing the font height (\H): Artificial Fonts.
+* changing the font slant (\S): Artificial Fonts.
+* changing the page number character (pc): Page Layout.
+* changing trap location (ch): Page Location Traps.
+* changing type sizes (ps, \s): Changing Type Sizes.
+* changing vertical line spacing (vs): Changing Type Sizes.
+* char request, and soft hyphen character: Manipulating Hyphenation.
+* char request, and translations: Character Translations.
+* char request, used with \N: Using Symbols.
+* character: Using Symbols.
+* character properties (cflags): Using Symbols.
+* character translations: Character Translations.
+* character, backspace: Identifiers.
+* character, backspace, and translations: Character Translations.
+* character, control (.): Requests.
+* character, control, changing (cc): Character Translations.
+* character, defining (char): Using Symbols.
+* character, escape, changing (ec): Character Translations.
+* character, escape, while defining glyph: Using Symbols.
+* character, field delimiting (fc): Fields.
+* character, field padding (fc): Fields.
+* character, hyphenation (\%): Manipulating Hyphenation.
+* character, leader repetition (lc): Leaders.
+* character, leader, and translations: Character Translations.
+* character, leader, non-interpreted (\a): Leaders.
+* character, named (\C): Using Symbols.
+* character, newline: Escapes.
+* character, newline, and translations: Character Translations.
+* character, no-break control ('): Requests.
+* character, no-break control, changing (c2): Character Translations.
+* character, soft hyphen, setting (shc): Manipulating Hyphenation.
+* character, space: Escapes.
+* character, special: Character Translations.
+* character, tab: Escapes.
+* character, tab repetition (tc): Tabs and Fields.
+* character, tab, and translations: Character Translations.
+* character, tab, non-interpreted (\t): Tabs and Fields.
+* character, tabulator: Tab Stops.
+* character, transparent <1>: Using Symbols.
+* character, transparent: Sentences.
+* character, whitespace: Identifiers.
+* character, zero width space (\&) <1>: Drawing Requests.
+* character, zero width space (\&) <2>: Ligatures and Kerning.
+* character, zero width space (\&): Requests.
+* characters, argument delimiting: Escapes.
+* characters, end-of-sentence: Using Symbols.
+* characters, hyphenation: Using Symbols.
+* characters, input, and output glyphs, compatibility with AT&T troff: Implementation Differences.
+* characters, invalid for trf request: I/O.
+* characters, invalid input: Identifiers.
+* characters, overlapping: Using Symbols.
+* characters, special: Special Characters.
+* characters, unnamed, accessing with \N: Font File Format.
+* circle, drawing (\D'c ...'): Drawing Requests.
+* circle, solid, drawing (\D'C ...'): Drawing Requests.
+* closing file (close): I/O.
+* code, hyphenation (hcode): Manipulating Hyphenation.
+* color, default: Colors.
+* colors: Colors.
+* command prefix: Environment.
+* command-line options: Groff Options.
+* commands, embedded: Embedded Commands.
+* comments: Comments.
+* comments in font files: Font File Format.
+* comments, lining up with tabs: Comments.
+* comments, with ds: Strings.
+* common features: Common Features.
+* common name space of macros, diversions, and strings: Strings.
+* comparison operators: Expressions.
+* compatibility mode <1>: Implementation Differences.
+* compatibility mode: Warnings.
+* conditional block, begin (\{): if-else.
+* conditional block, end (\}): if-else.
+* conditional page break (ne): Page Control.
+* conditionals and loops: Conditionals and Loops.
+* consecutive hyphenated lines (hlm): Manipulating Hyphenation.
+* constant glyph space mode (cs): Artificial Fonts.
+* contents, table of <1>: Leaders.
+* contents, table of: Table of Contents.
+* continuation, input line (\): Line Control.
+* continuation, output line (\c): Line Control.
+* continue request, in a while loop: while.
+* continuous underlining (cu): Artificial Fonts.
+* control character (.): Requests.
+* control character, changing (cc): Character Translations.
+* control character, no-break ('): Requests.
+* control character, no-break, changing (c2): Character Translations.
+* control, line: Line Control.
+* control, page: Page Control.
+* conventions for input: Input Conventions.
+* copy-in mode: Copy-in Mode.
+* copy-in mode, and macro arguments: Parameters.
+* copy-in mode, and write requests: I/O.
+* copying environment (evc): Environments.
+* correction between italic and roman glyph (\/, \,): Ligatures and Kerning.
+* correction, italic (\/): Ligatures and Kerning.
+* correction, left italic (\,): Ligatures and Kerning.
+* cover page macros, [ms]: ms Cover Page Macros.
+* cp request, and glyph definitions: Using Symbols.
+* cp1047: Groff Options.
+* creating alias, for diversion (als): Strings.
+* creating alias, for macro (als): Strings.
+* creating alias, for number register (aln): Setting Registers.
+* creating alias, for string (als): Strings.
+* creating new characters (char): Using Symbols.
+* credits: Credits.
+* cs request, and font styles: Font Families.
+* cs request, and font translations: Changing Fonts.
+* cs request, incompatibilities with AT&T troff: Implementation Differences.
+* cs request, with fractional type sizes: Fractional Type Sizes.
+* current directory: Macro Directories.
+* current input file name register (.F): Built-in Registers.
+* current time: I/O.
+* current time, hours (hours): Built-in Registers.
+* current time, minutes (minutes): Built-in Registers.
+* current time, seconds (seconds): Built-in Registers.
+* da request, and warnings: Warnings.
+* date, day of the month register (dy): Built-in Registers.
+* date, day of the week register (dw): Built-in Registers.
+* date, month of the year register (mo): Built-in Registers.
+* date, year register (year, yr): Built-in Registers.
+* day of the month register (dy): Built-in Registers.
+* day of the week register (dw): Built-in Registers.
+* de request, and while: while.
+* de, de1, dei requests, and warnings: Warnings.
+* debugging: Debugging.
+* default color: Colors.
+* default indentation [man]: Miscellaneous man macros.
+* default indentation, resetting [man]: Man usage.
+* default units: Default Units.
+* defining character (char): Using Symbols.
+* defining glyph (char): Using Symbols.
+* defining symbol (char): Using Symbols.
+* delayed text: Footnotes and Annotations.
+* delimited arguments, incompatibilities with AT&T troff: Implementation Differences.
+* delimiting character, for fields (fc): Fields.
+* delimiting characters for arguments: Escapes.
+* DESC file, format: DESC File Format.
+* devices for output <1>: Output Devices.
+* devices for output: Output device intro.
+* dg glyph, at end of sentence <1>: Using Symbols.
+* dg glyph, at end of sentence: Sentences.
+* di request, and warnings: Warnings.
+* differences in implementation: Implementation Differences.
+* digit width space (\0): Page Motions.
+* digits, and delimiters: Escapes.
+* dimensions, line: Line Layout.
+* directories for fonts: Font Directories.
+* directories for macros: Macro Directories.
+* directory, current: Macro Directories.
+* directory, for tmac files: Macro Directories.
+* directory, home: Macro Directories.
+* directory, platform-specific: Macro Directories.
+* directory, site-specific <1>: Font Directories.
+* directory, site-specific: Macro Directories.
+* disabling \ (eo): Character Translations.
+* disabling hyphenation (\%): Manipulating Hyphenation.
+* displays: Displays.
+* displays [ms]: ms Displays and Keeps.
+* distance to next trap register (.t): Page Location Traps.
+* ditroff, the program: History.
+* diversion name register (.z): Diversions.
+* diversion trap, setting (dt): Diversion Traps.
+* diversion traps: Diversion Traps.
+* diversion, appending (da): Diversions.
+* diversion, beginning (di): Diversions.
+* diversion, creating alias (als): Strings.
+* diversion, ending (di): Diversions.
+* diversion, nested: Diversions.
+* diversion, removing (rm): Strings.
+* diversion, renaming (rn): Strings.
+* diversion, stripping final newline: Strings.
+* diversion, top-level: Diversions.
+* diversion, top-level, and \!: Diversions.
+* diversion, top-level, and \?: Diversions.
+* diversion, top-level, and bp: Page Control.
+* diversion, unformatting (asciify): Diversions.
+* diversion, vertical position in, register (.d): Diversions.
+* diversions: Diversions.
+* diversions, shared name space with macros and strings: Strings.
+* documents, multi-file: Debugging.
+* documents, structuring the source code: Requests.
+* double quote, in a macro argument: Request Arguments.
+* double-spacing (ls) <1>: Manipulating Spacing.
+* double-spacing (ls): Basics.
+* double-spacing (vs, pvs): Changing Type Sizes.
+* drawing a circle (\D'c ...'): Drawing Requests.
+* drawing a line (\D'l ...'): Drawing Requests.
+* drawing a polygon (\D'p ...'): Drawing Requests.
+* drawing a solid circle (\D'C ...'): Drawing Requests.
+* drawing a solid ellipse (\D'E ...'): Drawing Requests.
+* drawing a solid polygon (\D'P ...'): Drawing Requests.
+* drawing a spline (\D'~ ...'): Drawing Requests.
+* drawing an arc (\D'a ...'): Drawing Requests.
+* drawing an ellipse (\D'e ...'): Drawing Requests.
+* drawing horizontal lines (\l): Drawing Requests.
+* drawing requests: Drawing Requests.
+* drawing vertical lines (\L): Drawing Requests.
+* ds request, and comments: Strings.
+* ds request, and double quotes: Request Arguments.
+* ds request, and leading spaces: Strings.
+* ds, ds1 requests, and comments: Comments.
+* ds, ds1 requests, and warnings: Warnings.
+* dumping number registers (pnr): Debugging.
+* dumping symbol table (pm): Debugging.
+* dumping traps (ptr): Debugging.
+* EBCDIC encoding <1>: Tab Stops.
+* EBCDIC encoding: Groff Options.
+* EBCDIC encoding of a tab: Tabs and Fields.
+* EBCDIC encoding of backspace: Identifiers.
+* el request, and warnings: Warnings.
+* ellipse, drawing (\D'e ...'): Drawing Requests.
+* ellipse, solid, drawing (\D'E ...'): Drawing Requests.
+* em glyph, and cflags: Using Symbols.
+* em unit (m): Measurements.
+* embedded commands: Embedded Commands.
+* embedding PostScript: Embedding PostScript.
+* embolding of special fonts: Artificial Fonts.
+* empty line: Implicit Line Breaks.
+* empty line (sp): Basics.
+* empty space before a paragraph [man]: Miscellaneous man macros.
+* en unit (n): Measurements.
+* enabling vertical position traps (vpt): Page Location Traps.
+* encoding, ASCII: Groff Options.
+* encoding, cp1047: Groff Options.
+* encoding, EBCDIC <1>: Tab Stops.
+* encoding, EBCDIC: Groff Options.
+* encoding, latin-1: Groff Options.
+* encoding, utf-8: Groff Options.
+* end of conditional block (\}): if-else.
+* end-of-input macro (em): End-of-input Traps.
+* end-of-input trap, setting (em): End-of-input Traps.
+* end-of-input traps: End-of-input Traps.
+* end-of-sentence characters: Using Symbols.
+* ending diversion (di): Diversions.
+* environment number/name register (.ev): Environments.
+* environment variables: Environment.
+* environment, copying (evc): Environments.
+* environment, last glyph: Environments.
+* environment, switching (ev): Environments.
+* environments: Environments.
+* eqn, the program: geqn.
+* equations [ms]: ms Insertions.
+* escape character, changing (ec): Character Translations.
+* escape character, while defining glyph: Using Symbols.
+* escapes: Escapes.
+* escaping newline characters, in strings: Strings.
+* ex request, use in debugging: Debugging.
+* ex request, used with nx and rd: I/O.
+* example markup, bulleted list [ms]: Lists in ms.
+* example markup, glossary-style list [ms]: Lists in ms.
+* example markup, multi-page table [ms]: Example multi-page table.
+* example markup, numbered list [ms]: Lists in ms.
+* example markup, title page: ms Cover Page Macros.
+* examples of invocation: Invocation Examples.
+* exiting (ex): Debugging.
+* expansion of strings (\*): Strings.
+* explicit hyphen (\%): Manipulating Hyphenation.
+* expression, order of evaluation: Expressions.
+* expressions: Expressions.
+* expressions, and space characters: Expressions.
+* extra post-vertical line space (\x): Changing Type Sizes.
+* extra post-vertical line space register (.a): Manipulating Spacing.
+* extra pre-vertical line space (\x): Changing Type Sizes.
+* extra spaces: Filling and Adjusting.
+* extremum operators (>?, <?): Expressions.
+* f unit: Measurements.
+* f unit, and colors: Colors.
+* fam request, and changing fonts: Changing Fonts.
+* fam request, and font positions: Font Positions.
+* families, font: Font Families.
+* FDL, GNU Free Documentation License: GNU Free Documentation License.
+* features, common: Common Features.
+* fi request, causing implicit linebreak: Manipulating Filling and Adjusting.
+* field delimiting character (fc): Fields.
+* field padding character (fc): Fields.
+* fields: Fields.
+* fields, and tabs: Tabs and Fields.
+* figures [ms]: ms Insertions.
+* file formats: File formats.
+* file, appending to (opena): I/O.
+* file, closing (close): I/O.
+* file, inclusion (so): I/O.
+* file, opening (open): I/O.
+* file, processing next (nx): I/O.
+* file, writing to (write): I/O.
+* files, font: Font Files.
+* files, macro, searching: Macro Directories.
+* fill mode <1>: Warnings.
+* fill mode <2>: Manipulating Filling and Adjusting.
+* fill mode: Implicit Line Breaks.
+* fill mode (fi): Manipulating Filling and Adjusting.
+* fill mode, and \c: Line Control.
+* filling: Filling and Adjusting.
+* filling and adjusting, manipulating: Manipulating Filling and Adjusting.
+* final newline, stripping in diversions: Strings.
+* fl request, causing implicit linebreak: Manipulating Filling and Adjusting.
+* floating keep: Displays.
+* flush output (fl): Debugging.
+* font description file, format <1>: Font File Format.
+* font description file, format: DESC File Format.
+* font directories: Font Directories.
+* font families: Font Families.
+* font family, changing (fam, \F): Font Families.
+* font file, format: Font File Format.
+* font files: Font Files.
+* font files, comments: Font File Format.
+* font for underlining (uf): Artificial Fonts.
+* font height, changing (\H): Artificial Fonts.
+* font path: Font Directories.
+* font position register (.f): Font Positions.
+* font position, changing (\f): Font Positions.
+* font positions: Font Positions.
+* font selection [man]: Man font macros.
+* font slant, changing (\S): Artificial Fonts.
+* font style, changing (sty): Font Families.
+* font styles: Font Families.
+* font, mounting (fp): Font Positions.
+* font, previous (ft, \f[], \fP): Changing Fonts.
+* fonts <1>: Changing Fonts.
+* fonts: Fonts.
+* fonts, artificial: Artificial Fonts.
+* fonts, changing (ft, \f): Changing Fonts.
+* fonts, PostScript: Font Families.
+* fonts, searching: Font Directories.
+* fonts, special: Special Fonts.
+* footers <1>: Page Location Traps.
+* footers: Page Layout.
+* footers [ms]: ms Headers and Footers.
+* footnotes: Footnotes and Annotations.
+* footnotes [ms]: ms Footnotes.
+* form letters: I/O.
+* format of font description file: DESC File Format.
+* format of font description files: Font File Format.
+* format of font files: Font File Format.
+* format of register (\g): Assigning Formats.
+* formats, assigning (af): Assigning Formats.
+* formats, file: File formats.
+* fp request, and font translations: Changing Fonts.
+* fp request, incompatibilities with AT&T troff: Implementation Differences.
+* fractional point sizes <1>: Implementation Differences.
+* fractional point sizes: Fractional Type Sizes.
+* fractional type sizes <1>: Implementation Differences.
+* fractional type sizes: Fractional Type Sizes.
+* french-spacing: Sentences.
+* fspecial request, and font styles: Font Families.
+* fspecial request, and font translations: Changing Fonts.
+* fspecial request, and imitating bold: Artificial Fonts.
+* ft request, and font translations: Changing Fonts.
+* geqn, invoking: Invoking geqn.
+* geqn, the program: geqn.
+* ggrn, invoking: Invoking ggrn.
+* ggrn, the program: ggrn.
+* glossary-style list, example markup [ms]: Lists in ms.
+* glyph: Using Symbols.
+* glyph for line drawing: Drawing Requests.
+* glyph pile (\b): Drawing Requests.
+* glyph properties (cflags): Using Symbols.
+* glyph, box rule (\[br]): Drawing Requests.
+* glyph, constant space: Artificial Fonts.
+* glyph, defining (char): Using Symbols.
+* glyph, for line drawing: Drawing Requests.
+* glyph, for margins (mc): Miscellaneous.
+* glyph, italic correction (\/): Ligatures and Kerning.
+* glyph, leader repetition (lc): Leaders.
+* glyph, left italic correction (\,): Ligatures and Kerning.
+* glyph, numbered (\N) <1>: Using Symbols.
+* glyph, numbered (\N): Character Translations.
+* glyph, removing definition (rchar): Using Symbols.
+* glyph, soft hyphen (hy): Manipulating Hyphenation.
+* glyph, tab repetition (tc): Tabs and Fields.
+* glyph, underscore (\[ru]): Drawing Requests.
+* glyphs, available, list (`groff_char(7)' man page): Using Symbols.
+* glyphs, output, and input characters, compatibility with AT&T troff: Implementation Differences.
+* glyphs, overstriking (\o): Page Motions.
+* glyphs, unnamed: Using Symbols.
+* glyphs, unnamed, accessing with \N: Font File Format.
+* GNU-specific register (.g): Built-in Registers.
+* gpic, invoking: Invoking gpic.
+* gpic, the program: gpic.
+* grap, the program: grap.
+* gray shading (\D'f ...'): Drawing Requests.
+* grefer, invoking: Invoking grefer.
+* grefer, the program: grefer.
+* grn, the program: ggrn.
+* grodvi, invoking: Invoking grodvi.
+* grodvi, the program: grodvi.
+* groff - what is it?: What Is groff?.
+* groff capabilities: groff Capabilities.
+* groff invocation: Invoking groff.
+* groff, and pi request: I/O.
+* GROFF_BIN_PATH, environment variable: Environment.
+* GROFF_COMMAND_PREFIX, environment variable: Environment.
+* GROFF_FONT_PATH, environment variable <1>: Font Directories.
+* GROFF_FONT_PATH, environment variable: Environment.
+* GROFF_TMAC_PATH, environment variable <1>: Macro Directories.
+* GROFF_TMAC_PATH, environment variable: Environment.
+* GROFF_TMPDIR, environment variable: Environment.
+* GROFF_TYPESETTER, environment variable: Environment.
+* grohtml, invoking: Invoking grohtml.
+* grohtml, registers and strings: grohtml specific registers and strings.
+* grohtml, the program <1>: grohtml.
+* grohtml, the program: Groff Options.
+* grolbp, invoking: Invoking grolbp.
+* grolbp, the program: grolbp.
+* grolj4, invoking: Invoking grolj4.
+* grolj4, the program: grolj4.
+* grops, invoking: Invoking grops.
+* grops, the program: grops.
+* grotty, invoking: Invoking grotty.
+* grotty, the program: grotty.
+* gsoelim, invoking: Invoking gsoelim.
+* gsoelim, the program: gsoelim.
+* gtbl, invoking: Invoking gtbl.
+* gtbl, the program: gtbl.
+* gtroff, identification register (.g): Built-in Registers.
+* gtroff, interactive use: Debugging.
+* gtroff, output: gtroff Output.
+* gtroff, process ID register ($$): Built-in Registers.
+* gtroff, reference: gtroff Reference.
+* gxditview, invoking: Invoking gxditview.
+* gxditview, the program: gxditview.
+* hanging indentation [man]: Man usage.
+* hcode request, and glyph definitions: Using Symbols.
+* headers <1>: Page Location Traps.
+* headers: Page Layout.
+* headers [ms]: ms Headers and Footers.
+* height, font, changing (\H): Artificial Fonts.
+* high-water mark register (.h): Diversions.
+* history: History.
+* home directory: Macro Directories.
+* horizontal input line position register (hp): Page Motions.
+* horizontal input line position, saving (\k): Page Motions.
+* horizontal line, drawing (\l): Drawing Requests.
+* horizontal motion (\h): Page Motions.
+* horizontal output line position register (.k): Page Motions.
+* horizontal resolution register (.H): Built-in Registers.
+* horizontal space (\h): Page Motions.
+* horizontal space, unformatting: Strings.
+* hours, current time (hours): Built-in Registers.
+* hpf request, and hyphenation language: Manipulating Hyphenation.
+* hw request, and hyphenation language: Manipulating Hyphenation.
+* hy glyph, and cflags: Using Symbols.
+* hyphen, explicit (\%): Manipulating Hyphenation.
+* hyphenated lines, consecutive (hlm): Manipulating Hyphenation.
+* hyphenating characters: Using Symbols.
+* hyphenation: Hyphenation.
+* hyphenation character (\%): Manipulating Hyphenation.
+* hyphenation code (hcode): Manipulating Hyphenation.
+* hyphenation language register (.hla): Manipulating Hyphenation.
+* hyphenation margin (hym): Manipulating Hyphenation.
+* hyphenation margin register (.hym): Manipulating Hyphenation.
+* hyphenation patterns (hpf): Manipulating Hyphenation.
+* hyphenation restrictions register (.hy): Manipulating Hyphenation.
+* hyphenation space (hys): Manipulating Hyphenation.
+* hyphenation space register (.hys): Manipulating Hyphenation.
+* hyphenation, disabling (\%): Manipulating Hyphenation.
+* hyphenation, manipulating: Manipulating Hyphenation.
+* i unit: Measurements.
+* i/o: I/O.
+* IBM cp1047: Groff Options.
+* identifiers: Identifiers.
+* identifiers, undefined: Identifiers.
+* ie request, and warnings: Warnings.
+* if request, and the ! operator: Expressions.
+* if request, operators to use with: Operators in Conditionals.
+* if-else: if-else.
+* imitating bold face (bd): Artificial Fonts.
+* implementation differences: Implementation Differences.
+* implicit breaks of lines: Implicit Line Breaks.
+* implicit line breaks: Implicit Line Breaks.
+* in request, causing implicit linebreak: Manipulating Filling and Adjusting.
+* in request, using + and -: Expressions.
+* inch unit (i): Measurements.
+* including a file (so): I/O.
+* incompatibilities with AT&T troff: Implementation Differences.
+* increment value without changing the register: Auto-increment.
+* increment, automatic: Auto-increment.
+* indentaion, resetting to default [man]: Man usage.
+* indentation (in): Line Layout.
+* index, in macro package: Indices.
+* indirect assignments: Interpolating Registers.
+* input and output requests: I/O.
+* input characters and output glyphs, compatibility with AT&T troff: Implementation Differences.
+* input characters, invalid: Identifiers.
+* input conventions: Input Conventions.
+* input file name, current, register (.F): Built-in Registers.
+* input level in delimited arguments: Implementation Differences.
+* input line continuation (\): Line Control.
+* input line number register (.c, c.): Built-in Registers.
+* input line number, setting (lf): Debugging.
+* input line position, horizontal, saving (\k): Page Motions.
+* input line trap, setting (it): Input Line Traps.
+* input line traps: Input Line Traps.
+* input line traps and interrupted lines (itc): Input Line Traps.
+* input line, horizontal position, register (hp): Page Motions.
+* input stack, backtrace (backtrace): Debugging.
+* input stack, setting limit: Debugging.
+* input token: Gtroff Internals.
+* input, 8-bit: Font File Format.
+* input, standard, reading from (rd): I/O.
+* inserting horizontal space (\h): Page Motions.
+* installation: Installation.
+* interactive use of gtroff: Debugging.
+* intermediate output: gtroff Output.
+* interpolating registers (\n): Interpolating Registers.
+* interpolation of strings (\*): Strings.
+* interrupted line: Line Control.
+* interrupted line register (.int): Line Control.
+* interrupted lines and input line traps (itc): Input Line Traps.
+* introduction: Introduction.
+* invalid characters for trf request: I/O.
+* invalid input characters: Identifiers.
+* invocation examples: Invocation Examples.
+* invoking geqn: Invoking geqn.
+* invoking ggrn: Invoking ggrn.
+* invoking gpic: Invoking gpic.
+* invoking grefer: Invoking grefer.
+* invoking grodvi: Invoking grodvi.
+* invoking groff: Invoking groff.
+* invoking grohtml: Invoking grohtml.
+* invoking grolbp: Invoking grolbp.
+* invoking grolj4: Invoking grolj4.
+* invoking grops: Invoking grops.
+* invoking grotty: Invoking grotty.
+* invoking gsoelim: Invoking gsoelim.
+* invoking gtbl: Invoking gtbl.
+* invoking gxditview: Invoking gxditview.
+* italic correction (\/): Ligatures and Kerning.
+* italic fonts [man]: Man font macros.
+* italic glyph, correction after roman glyph (\,): Ligatures and Kerning.
+* italic glyph, correction before roman glyph (\/): Ligatures and Kerning.
+* justifying text: Manipulating Filling and Adjusting.
+* justifying text (rj): Manipulating Filling and Adjusting.
+* keep: Displays.
+* keep, floating: Displays.
+* keeps [ms]: ms Displays and Keeps.
+* kerning and ligatures: Ligatures and Kerning.
+* kerning enabled register (.kern): Ligatures and Kerning.
+* kerning, activating (kern): Ligatures and Kerning.
+* kerning, track: Ligatures and Kerning.
+* last-requested point size registers (.psr, .sr): Fractional Type Sizes.
+* latin-1, encoding: Groff Options.
+* layout, line: Line Layout.
+* layout, page: Page Layout.
+* lc request, and glyph definitions: Using Symbols.
+* leader character: Leaders.
+* leader character, and translations: Character Translations.
+* leader character, non-interpreted (\a): Leaders.
+* leader repetition character (lc): Leaders.
+* leaders: Leaders.
+* leading: Sizes.
+* leading spaces: Filling and Adjusting.
+* leading spaces with ds: Strings.
+* left italic correction (\,): Ligatures and Kerning.
+* left margin (po): Line Layout.
+* left margin, how to move [man]: Man usage.
+* length of a string (length): Strings.
+* length of line (ll): Line Layout.
+* length of page (pl): Page Layout.
+* length of title line (lt): Page Layout.
+* letters, form: I/O.
+* level of warnings (warn): Debugging.
+* ligature: Using Symbols.
+* ligatures and kerning: Ligatures and Kerning.
+* ligatures enabled register (.lg): Ligatures and Kerning.
+* ligatures, activating (lg): Ligatures and Kerning.
+* limitations of \b escape: Drawing Requests.
+* line break <1>: Manipulating Filling and Adjusting.
+* line break <2>: Implicit Line Breaks.
+* line break: Basics.
+* line break (br): Basics.
+* line breaks, with vertical space [man]: Man usage.
+* line breaks, without vertical space [man]: Man usage.
+* line control: Line Control.
+* line dimensions: Line Layout.
+* line drawing glyph: Drawing Requests.
+* line indentation (in): Line Layout.
+* line layout: Line Layout.
+* line length (ll): Line Layout.
+* line length register (.l): Line Layout.
+* line number, input, register (.c, c.): Built-in Registers.
+* line number, output, register (ln): Built-in Registers.
+* line numbers, printing (nm): Miscellaneous.
+* line space, extra post-vertical (\x): Changing Type Sizes.
+* line space, extra pre-vertical (\x): Changing Type Sizes.
+* line spacing register (.L): Manipulating Spacing.
+* line spacing, post-vertical (pvs): Changing Type Sizes.
+* line thickness (\D't ...'): Drawing Requests.
+* line, blank: Implicit Line Breaks.
+* line, drawing (\D'l ...'): Drawing Requests.
+* line, empty (sp): Basics.
+* line, horizontal, drawing (\l): Drawing Requests.
+* line, implicit breaks: Implicit Line Breaks.
+* line, input, continuation (\): Line Control.
+* line, input, horizontal position, register (hp): Page Motions.
+* line, input, horizontal position, saving (\k): Page Motions.
+* line, interrupted: Line Control.
+* line, output, continuation (\c): Line Control.
+* line, output, horizontal position, register (.k): Page Motions.
+* line, vertical, drawing (\L): Drawing Requests.
+* line-tabs mode: Tabs and Fields.
+* lines, blank, disabling: Manipulating Spacing.
+* lines, centering (ce) <1>: Manipulating Filling and Adjusting.
+* lines, centering (ce): Basics.
+* lines, consecutive hyphenated (hlm): Manipulating Hyphenation.
+* lines, interrupted, and input line traps (itc): Input Line Traps.
+* list: Displays.
+* list of available glyphs (`groff_char(7)' man page): Using Symbols.
+* ll request, using + and -: Expressions.
+* location, vertical, page, marking (mk): Page Motions.
+* location, vertical, page, returning to marked (rt): Page Motions.
+* logical operators: Expressions.
+* long names: Implementation Differences.
+* loops and conditionals: Conditionals and Loops.
+* lq glyph, and lq string [man]: Predefined man strings.
+* ls request, alternative to (pvs): Changing Type Sizes.
+* lt request, using + and -: Expressions.
+* M unit: Measurements.
+* m unit: Measurements.
+* machine unit (u): Measurements.
+* macro basics: Basics.
+* macro directories: Macro Directories.
+* macro files, searching: Macro Directories.
+* macro name register (\$0): Parameters.
+* macro names, starting with [ or ], and refer: Identifiers.
+* macro packages <1>: Macro Packages.
+* macro packages: Macro Package Intro.
+* macro packages, structuring the source code: Requests.
+* macro, appending (am): Writing Macros.
+* macro, arguments (\$): Parameters.
+* macro, creating alias (als): Strings.
+* macro, end-of-input (em): End-of-input Traps.
+* macro, removing (rm): Strings.
+* macro, renaming (rn): Strings.
+* macros: Macros.
+* macros for manual pages [man]: Man usage.
+* macros, recursive: while.
+* macros, searching: Macro Directories.
+* macros, shared name space with strings and diversions: Strings.
+* macros, tutorial for users: Tutorial for Macro Users.
+* macros, writing: Writing Macros.
+* major quotes: Displays.
+* major version number register (.x): Built-in Registers.
+* man macros: Man usage.
+* man macros, bold face: Man font macros.
+* man macros, default indentation: Miscellaneous man macros.
+* man macros, empty space before a paragraph: Miscellaneous man macros.
+* man macros, hanging indentation: Man usage.
+* man macros, how to set fonts: Man font macros.
+* man macros, italic fonts: Man font macros.
+* man macros, line breaks with vertical space: Man usage.
+* man macros, line breaks without vertical space: Man usage.
+* man macros, moving left margin: Man usage.
+* man macros, resetting default indentation: Man usage.
+* man macros, tab stops: Miscellaneous man macros.
+* man pages: man.
+* manipulating filling and adjusting: Manipulating Filling and Adjusting.
+* manipulating hyphenation: Manipulating Hyphenation.
+* manipulating spacing: Manipulating Spacing.
+* manual pages: man.
+* margin for hyphenation (hym): Manipulating Hyphenation.
+* margin glyph (mc): Miscellaneous.
+* margin, bottom: Page Layout.
+* margin, left (po): Line Layout.
+* margin, top: Page Layout.
+* mark, high-water, register (.h): Diversions.
+* marking vertical page location (mk): Page Motions.
+* maximum values of Roman numerals: Assigning Formats.
+* mdoc macros: mdoc.
+* me macro package: me.
+* measurement unit: Measurements.
+* measurements: Measurements.
+* measurements, specifying safely: Default Units.
+* minimum values of Roman numerals: Assigning Formats.
+* minor version number register (.y): Built-in Registers.
+* minutes, current time (minutes): Built-in Registers.
+* mm macro package: mm.
+* mode for constant glyph space (cs): Artificial Fonts.
+* mode, compatibility: Implementation Differences.
+* mode, copy-in: Copy-in Mode.
+* mode, copy-in, and write requests: I/O.
+* mode, fill <1>: Warnings.
+* mode, fill <2>: Manipulating Filling and Adjusting.
+* mode, fill: Implicit Line Breaks.
+* mode, fill (fi): Manipulating Filling and Adjusting.
+* mode, fill, and \c: Line Control.
+* mode, line-tabs: Tabs and Fields.
+* mode, no-fill (nf): Manipulating Filling and Adjusting.
+* mode, no-fill, and \c: Line Control.
+* mode, no-space (ns): Manipulating Spacing.
+* mode, nroff: Troff and Nroff Mode.
+* mode, safer <1>: I/O.
+* mode, safer <2>: Macro Directories.
+* mode, safer: Groff Options.
+* mode, troff: Troff and Nroff Mode.
+* mode, unsafe <1>: I/O.
+* mode, unsafe <2>: Macro Directories.
+* mode, unsafe: Groff Options.
+* month of the year register (mo): Built-in Registers.
+* motion operators: Expressions.
+* motion, horizontal (\h): Page Motions.
+* motion, vertical (\v): Page Motions.
+* motions, page: Page Motions.
+* mounting font (fp): Font Positions.
+* ms macros: ms.
+* ms macros, accent marks: ms Strings and Special Characters.
+* ms macros, body text: ms Body Text.
+* ms macros, cover page: ms Cover Page Macros.
+* ms macros, creating table of contents: ms TOC.
+* ms macros, differences from AT&T: Differences from AT&T ms.
+* ms macros, displays: ms Displays and Keeps.
+* ms macros, document control registers: ms Document Control Registers.
+* ms macros, equations: ms Insertions.
+* ms macros, figures: ms Insertions.
+* ms macros, footers: ms Headers and Footers.
+* ms macros, footnotes: ms Footnotes.
+* ms macros, general structure: General ms Structure.
+* ms macros, headers: ms Headers and Footers.
+* ms macros, headings: Headings in ms.
+* ms macros, highlighting: Highlighting in ms.
+* ms macros, keeps: ms Displays and Keeps.
+* ms macros, lists: Lists in ms.
+* ms macros, margins: ms Margins.
+* ms macros, multiple columns: ms Multiple Columns.
+* ms macros, nested lists: Lists in ms.
+* ms macros, page layout: ms Page Layout.
+* ms macros, paragraph handling: Paragraphs in ms.
+* ms macros, references: ms Insertions.
+* ms macros, special characters: ms Strings and Special Characters.
+* ms macros, strings: ms Strings and Special Characters.
+* ms macros, tables: ms Insertions.
+* multi-file documents: Debugging.
+* multi-line strings: Strings.
+* multi-page table, example markup [ms]: Example multi-page table.
+* multiple columns [ms]: ms Multiple Columns.
+* n unit: Measurements.
+* name space, common, of macros, diversions, and strings: Strings.
+* named character (\C): Using Symbols.
+* names, long: Implementation Differences.
+* ne request, and the .trunc register: Page Location Traps.
+* ne request, comparison with sv: Page Control.
+* negating register values: Setting Registers.
+* nested assignments: Interpolating Registers.
+* nested diversions: Diversions.
+* nested lists [ms]: Lists in ms.
+* new page (bp) <1>: Page Control.
+* new page (bp): Basics.
+* newline character <1>: Escapes.
+* newline character: Identifiers.
+* newline character, and translations: Character Translations.
+* newline character, in strings, escaping: Strings.
+* newline, final, stripping in diversions: Strings.
+* next file, processing (nx): I/O.
+* next free font position register (.fp): Font Positions.
+* nf request, causing implicit linebreak: Manipulating Filling and Adjusting.
+* nl register, and .d: Diversions.
+* nl register, difference to .h: Diversions.
+* nm request, using + and -: Expressions.
+* no-break control character ('): Requests.
+* no-break control character, changing (c2): Character Translations.
+* no-fill mode (nf): Manipulating Filling and Adjusting.
+* no-fill mode, and \c: Line Control.
+* no-space mode (ns): Manipulating Spacing.
+* node, output: Gtroff Internals.
+* nr request, and warnings: Warnings.
+* nr request, using + and -: Expressions.
+* nroff mode: Troff and Nroff Mode.
+* nroff, the program: History.
+* number of arguments register (.$): Parameters.
+* number register, creating alias (aln): Setting Registers.
+* number register, removing (rr): Setting Registers.
+* number register, renaming (rnn): Setting Registers.
+* number registers, dumping (pnr): Debugging.
+* number, input line, setting (lf): Debugging.
+* number, page (pn): Page Layout.
+* numbered glyph (\N) <1>: Using Symbols.
+* numbered glyph (\N): Character Translations.
+* numbered list, example markup [ms]: Lists in ms.
+* numbers, and delimiters: Escapes.
+* numbers, line, printing (nm): Miscellaneous.
+* numerals, Roman: Assigning Formats.
+* numeric expression, valid: Expressions.
+* offset, page (po): Line Layout.
+* open request, and safer mode: Groff Options.
+* opena request, and safer mode: Groff Options.
+* opening file (open): I/O.
+* operator, scaling: Expressions.
+* operators, arithmetic: Expressions.
+* operators, as delimiters: Escapes.
+* operators, comparison: Expressions.
+* operators, extremum (>?, <?): Expressions.
+* operators, logical: Expressions.
+* operators, motion: Expressions.
+* operators, unary: Expressions.
+* options: Groff Options.
+* order of evaluation in expressions: Expressions.
+* orphan lines, preventing with ne: Page Control.
+* os request, and no-space mode: Page Control.
+* output and input requests: I/O.
+* output device name string register (.T) <1>: Built-in Registers.
+* output device name string register (.T): Groff Options.
+* output device usage number register (.T): Groff Options.
+* output devices <1>: Output Devices.
+* output devices: Output device intro.
+* output glyphs, and input characters,compatibility with AT&T troff: Implementation Differences.
+* output line number register (ln): Built-in Registers.
+* output line, continuation (\c): Line Control.
+* output line, horizontal position, register (.k): Page Motions.
+* output node: Gtroff Internals.
+* output request, and \!: Diversions.
+* output, flush (fl): Debugging.
+* output, gtroff: gtroff Output.
+* output, intermediate: gtroff Output.
+* output, suppressing (\O): Suppressing output.
+* output, transparent (\!, \?): Diversions.
+* output, transparent (cf, trf): I/O.
+* output, transparent, incompatibilities with AT&T troff: Implementation Differences.
+* output, troff: gtroff Output.
+* overlapping characters: Using Symbols.
+* overstriking glyphs (\o): Page Motions.
+* P unit: Measurements.
+* p unit: Measurements.
+* packages, macros: Macro Packages.
+* padding character, for fields (fc): Fields.
+* page break, conditional (ne): Page Control.
+* page control: Page Control.
+* page footers: Page Location Traps.
+* page headers: Page Location Traps.
+* page layout: Page Layout.
+* page layout [ms]: ms Page Layout.
+* page length (pl): Page Layout.
+* page length register (.p): Page Layout.
+* page location traps: Page Location Traps.
+* page location, vertical, marking (mk): Page Motions.
+* page location, vertical, returning to marked (rt): Page Motions.
+* page motions: Page Motions.
+* page number (pn): Page Layout.
+* page number character (%): Page Layout.
+* page number character, changing (pc): Page Layout.
+* page number register (%): Page Layout.
+* page offset (po): Line Layout.
+* page, new (bp): Page Control.
+* paper formats: Paper Formats.
+* paragraphs: Paragraphs.
+* parameters: Parameters.
+* parentheses: Expressions.
+* path, for font files: Font Directories.
+* path, for tmac files: Macro Directories.
+* patterns for hyphenation (hpf): Manipulating Hyphenation.
+* pi request, and groff: I/O.
+* pi request, and safer mode: Groff Options.
+* pic, the program: gpic.
+* pica unit (P): Measurements.
+* pile, glyph (\b): Drawing Requests.
+* pl request, using + and -: Expressions.
+* planting a trap: Traps.
+* platform-specific directory: Macro Directories.
+* pn request, using + and -: Expressions.
+* po request, using + and -: Expressions.
+* point size registers (.s, .ps): Changing Type Sizes.
+* point size registers, last-requested (.psr, .sr): Fractional Type Sizes.
+* point sizes, changing (ps, \s): Changing Type Sizes.
+* point sizes, fractional <1>: Implementation Differences.
+* point sizes, fractional: Fractional Type Sizes.
+* point unit (p): Measurements.
+* polygon, drawing (\D'p ...'): Drawing Requests.
+* polygon, solid, drawing (\D'P ...'): Drawing Requests.
+* position of lowest text line (.h): Diversions.
+* position, absolute, operator (|): Expressions.
+* position, horizontal input line, saving (\k): Page Motions.
+* position, horizontal, in input line, register (hp): Page Motions.
+* position, horizontal, in output line, register (.k): Page Motions.
+* position, vertical, in diversion, register (.d): Diversions.
+* positions, font: Font Positions.
+* post-vertical line spacing: Changing Type Sizes.
+* post-vertical line spacing register (.pvs): Changing Type Sizes.
+* post-vertical line spacing, changing (pvs): Changing Type Sizes.
+* postprocessor access: Postprocessor Access.
+* postprocessors: Output device intro.
+* PostScript fonts: Font Families.
+* PostScript, bounding box: Miscellaneous.
+* PostScript, embedding: Embedding PostScript.
+* prefix, for commands: Environment.
+* preprocessor, calling convention: Preprocessors in man pages.
+* preprocessors <1>: Preprocessors.
+* preprocessors: Preprocessor Intro.
+* previous font (ft, \f[], \fP): Changing Fonts.
+* print current page register (.P): Groff Options.
+* printing backslash (\\, \e, \E, \[rs]) <1>: Implementation Differences.
+* printing backslash (\\, \e, \E, \[rs]): Escapes.
+* printing line numbers (nm): Miscellaneous.
+* printing to stderr (tm, tm1, tmc): Debugging.
+* printing, zero-width (\z, \Z): Page Motions.
+* process ID of gtroff register ($$): Built-in Registers.
+* processing next file (nx): I/O.
+* properties of characters (cflags): Using Symbols.
+* properties of glyphs (cflags): Using Symbols.
+* ps request, and constant glyph space mode: Artificial Fonts.
+* ps request, incompatibilities with AT&T troff: Implementation Differences.
+* ps request, using + and -: Expressions.
+* ps request, with fractional type sizes: Fractional Type Sizes.
+* pso request, and safer mode: Groff Options.
+* pvs request, using + and -: Expressions.
+* quotes, major: Displays.
+* quotes, trailing: Strings.
+* ragged-left: Manipulating Filling and Adjusting.
+* ragged-right: Manipulating Filling and Adjusting.
+* rc request, and glyph definitions: Using Symbols.
+* read-only register, changing format: Assigning Formats.
+* reading from standard input (rd): I/O.
+* recursive macros: while.
+* refer, and macro names starting with [ or ]: Identifiers.
+* refer, the program: grefer.
+* reference, gtroff: gtroff Reference.
+* references [ms]: ms Insertions.
+* register, creating alias (aln): Setting Registers.
+* register, format (\g): Assigning Formats.
+* register, removing (rr): Setting Registers.
+* register, renaming (rnn): Setting Registers.
+* registers: Registers.
+* registers specific to grohtml: grohtml specific registers and strings.
+* registers, built-in: Built-in Registers.
+* registers, interpolating (\n): Interpolating Registers.
+* registers, setting (nr, \R): Setting Registers.
+* removing diversion (rm): Strings.
+* removing glyph definition (rchar): Using Symbols.
+* removing macro (rm): Strings.
+* removing number register (rr): Setting Registers.
+* removing request (rm): Strings.
+* removing string (rm): Strings.
+* renaming diversion (rn): Strings.
+* renaming macro (rn): Strings.
+* renaming number register (rnn): Setting Registers.
+* renaming request (rn): Strings.
+* renaming string (rn): Strings.
+* request arguments: Request Arguments.
+* request, removing (rm): Strings.
+* request, renaming (rn): Strings.
+* request, undefined: Comments.
+* requests: Requests.
+* requests for drawing: Drawing Requests.
+* requests for input and output: I/O.
+* resolution, horizontal, register (.H): Built-in Registers.
+* resolution, vertical, register (.V): Built-in Registers.
+* returning to marked vertical page location (rt): Page Motions.
+* revision number register (.Y): Built-in Registers.
+* rf, the program: History.
+* right-justifying (rj): Manipulating Filling and Adjusting.
+* rj request, causing implicit linebreak: Manipulating Filling and Adjusting.
+* rn glyph, and cflags: Using Symbols.
+* roff, the program: History.
+* roman glyph, correction after italic glyph (\/): Ligatures and Kerning.
+* roman glyph, correction before italic glyph (\,): Ligatures and Kerning.
+* Roman numerals: Assigning Formats.
+* Roman numerals, maximum and minimum: Assigning Formats.
+* rq glyph, and rq string [man]: Predefined man strings.
+* rq glyph, at end of sentence <1>: Using Symbols.
+* rq glyph, at end of sentence: Sentences.
+* rt request, using + and -: Expressions.
+* ru glyph, and cflags: Using Symbols.
+* runoff, the program: History.
+* s unit <1>: Fractional Type Sizes.
+* s unit: Measurements.
+* safer mode <1>: I/O.
+* safer mode <2>: Macro Directories.
+* safer mode: Groff Options.
+* saving horizontal input line position (\k): Page Motions.
+* scaling operator: Expressions.
+* searching fonts: Font Directories.
+* searching macro files: Macro Directories.
+* searching macros: Macro Directories.
+* seconds, current time (seconds): Built-in Registers.
+* sentence space: Sentences.
+* sentence space size register (.sss): Manipulating Filling and Adjusting.
+* sentences: Sentences.
+* setting diversion trap (dt): Diversion Traps.
+* setting end-of-input trap (em): End-of-input Traps.
+* setting input line number (lf): Debugging.
+* setting input line trap (it): Input Line Traps.
+* setting registers (nr, \R): Setting Registers.
+* shading filled objects (\D'f ...'): Drawing Requests.
+* shc request, and translations: Character Translations.
+* site-specific directory <1>: Font Directories.
+* site-specific directory: Macro Directories.
+* size of sentence space register (.sss): Manipulating Filling and Adjusting.
+* size of type: Sizes.
+* size of word space register (.ss): Manipulating Filling and Adjusting.
+* sizes: Sizes.
+* sizes, fractional <1>: Implementation Differences.
+* sizes, fractional: Fractional Type Sizes.
+* slant, font, changing (\S): Artificial Fonts.
+* soelim, the program: gsoelim.
+* soft hyphen character, setting (shc): Manipulating Hyphenation.
+* soft hyphen glyph (hy): Manipulating Hyphenation.
+* solid circle, drawing (\D'C ...'): Drawing Requests.
+* solid ellipse, drawing (\D'E ...'): Drawing Requests.
+* solid polygon, drawing (\D'P ...'): Drawing Requests.
+* sp request, and no-space mode: Manipulating Spacing.
+* sp request, causing implicit linebreak: Manipulating Filling and Adjusting.
+* space between sentences: Sentences.
+* space between sentences register (.sss): Manipulating Filling and Adjusting.
+* space between words register (.ss): Manipulating Filling and Adjusting.
+* space character: Escapes.
+* space character, zero width (\&) <1>: Drawing Requests.
+* space character, zero width (\&) <2>: Ligatures and Kerning.
+* space character, zero width (\&): Requests.
+* space characters, in expressions: Expressions.
+* space, horizontal (\h): Page Motions.
+* space, horizontal, unformatting: Strings.
+* space, unbreakable: Page Motions.
+* space, vertical, unit (v): Measurements.
+* space, width of a digit (\0): Page Motions.
+* spaces with ds: Strings.
+* spaces, leading and trailing: Filling and Adjusting.
+* spacing: Basics.
+* spacing, manipulating: Manipulating Spacing.
+* spacing, vertical: Sizes.
+* special characters <1>: Special Characters.
+* special characters: Character Translations.
+* special characters [ms]: ms Strings and Special Characters.
+* special fonts <1>: Font File Format.
+* special fonts <2>: Special Fonts.
+* special fonts: Using Symbols.
+* special fonts, emboldening: Artificial Fonts.
+* special request, and font translations: Changing Fonts.
+* spline, drawing (\D'~ ...'): Drawing Requests.
+* springing a trap: Traps.
+* stacking glyphs (\b): Drawing Requests.
+* standard input, reading from (rd): I/O.
+* stderr, printing to (tm, tm1, tmc): Debugging.
+* stops, tabulator: Tab Stops.
+* string arguments: Strings.
+* string expansion (\*): Strings.
+* string interpolation (\*): Strings.
+* string, appending (as): Strings.
+* string, creating alias (als): Strings.
+* string, length of (length): Strings.
+* string, removing (rm): Strings.
+* string, renaming (rn): Strings.
+* strings: Strings.
+* strings [ms]: ms Strings and Special Characters.
+* strings specific to grohtml: grohtml specific registers and strings.
+* strings, multi-line: Strings.
+* strings, shared name space with macros and diversions: Strings.
+* stripping final newline in diversions: Strings.
+* structuring source code of documents or macro packages: Requests.
+* sty request, and changing fonts: Changing Fonts.
+* sty request, and font positions: Font Positions.
+* sty request, and font translations: Changing Fonts.
+* styles, font: Font Families.
+* substring (substring): Strings.
+* suppressing output (\O): Suppressing output.
+* sv request, and no-space mode: Page Control.
+* switching environments (ev): Environments.
+* sy request, and safer mode: Groff Options.
+* symbol: Using Symbols.
+* symbol table, dumping (pm): Debugging.
+* symbol, defining (char): Using Symbols.
+* symbols, using: Using Symbols.
+* system() return value register (systat): I/O.
+* tab character <1>: Escapes.
+* tab character: Tab Stops.
+* tab character, and translations: Character Translations.
+* tab character, non-interpreted (\t): Tabs and Fields.
+* tab repetition character (tc): Tabs and Fields.
+* tab settings register (.tabs): Tabs and Fields.
+* tab stops: Tab Stops.
+* tab stops [man]: Miscellaneous man macros.
+* tab stops, for TTY output devices: Tabs and Fields.
+* tab, line-tabs mode: Tabs and Fields.
+* table of contents <1>: Leaders.
+* table of contents: Table of Contents.
+* table of contents, creating [ms]: ms TOC.
+* tables [ms]: ms Insertions.
+* tabs, and fields: Tabs and Fields.
+* tabs, before comments: Comments.
+* tbl, the program: gtbl.
+* text line, position of lowest (.h): Diversions.
+* text, gtroff processing: Text.
+* text, justifying: Manipulating Filling and Adjusting.
+* text, justifying (rj): Manipulating Filling and Adjusting.
+* thickness of lines (\D't ...'): Drawing Requests.
+* three-part title (tl): Page Layout.
+* ti request, causing implicit linebreak: Manipulating Filling and Adjusting.
+* ti request, using + and -: Expressions.
+* time, current: I/O.
+* time, current, hours (hours): Built-in Registers.
+* time, current, minutes (minutes): Built-in Registers.
+* time, current, seconds (seconds): Built-in Registers.
+* title line (tl): Page Layout.
+* title line length register (.lt): Page Layout.
+* title line, length (lt): Page Layout.
+* title page, example markup: ms Cover Page Macros.
+* titles: Page Layout.
+* tkf request, and font styles: Font Families.
+* tkf request, and font translations: Changing Fonts.
+* tkf request, with fractional type sizes: Fractional Type Sizes.
+* tl request, and mc: Miscellaneous.
+* tmac, directory: Macro Directories.
+* tmac, path: Macro Directories.
+* TMPDIR, environment variable: Environment.
+* token, input: Gtroff Internals.
+* top margin: Page Layout.
+* top-level diversion: Diversions.
+* top-level diversion, and \!: Diversions.
+* top-level diversion, and \?: Diversions.
+* top-level diversion, and bp: Page Control.
+* tr request, and glyph definitions: Using Symbols.
+* tr request, and soft hyphen character: Manipulating Hyphenation.
+* tr request, incompatibilities with AT&T troff: Implementation Differences.
+* track kerning: Ligatures and Kerning.
+* track kerning, activating (tkf): Ligatures and Kerning.
+* trailing quotes: Strings.
+* trailing spaces: Filling and Adjusting.
+* translations of characters: Character Translations.
+* transparent characters <1>: Using Symbols.
+* transparent characters: Sentences.
+* transparent output (\!, \?): Diversions.
+* transparent output (cf, trf): I/O.
+* transparent output, incompatibilities with AT&T troff: Implementation Differences.
+* trap, changing location (ch): Page Location Traps.
+* trap, distance, register (.t): Page Location Traps.
+* trap, diversion, setting (dt): Diversion Traps.
+* trap, end-of-input, setting (em): End-of-input Traps.
+* trap, input line, setting (it): Input Line Traps.
+* trap, planting: Traps.
+* trap, springing: Traps.
+* traps: Traps.
+* traps, blank line: Blank Line Traps.
+* traps, diversion: Diversion Traps.
+* traps, dumping (ptr): Debugging.
+* traps, end-of-input: End-of-input Traps.
+* traps, input line: Input Line Traps.
+* traps, input line, and interrupted lines (itc): Input Line Traps.
+* traps, page location: Page Location Traps.
+* trf request, and invalid characters: I/O.
+* trf request, causing implicit linebreak: Manipulating Filling and Adjusting.
+* trin request, and asciify: Diversions.
+* troff mode: Troff and Nroff Mode.
+* troff output: gtroff Output.
+* truncated vertical space register (.trunc): Page Location Traps.
+* tutorial for macro users: Tutorial for Macro Users.
+* type size: Sizes.
+* type size registers (.s, .ps): Changing Type Sizes.
+* type sizes, changing (ps, \s): Changing Type Sizes.
+* type sizes, fractional <1>: Implementation Differences.
+* type sizes, fractional: Fractional Type Sizes.
+* u unit: Measurements.
+* uf request, and font styles: Font Families.
+* ul glyph, and cflags: Using Symbols.
+* ul request, and font translations: Changing Fonts.
+* unary operators: Expressions.
+* unbreakable space: Page Motions.
+* undefined identifiers: Identifiers.
+* undefined request: Comments.
+* underline font (uf): Artificial Fonts.
+* underlining (ul): Artificial Fonts.
+* underlining, continuous (cu): Artificial Fonts.
+* underscore glyph (\[ru]): Drawing Requests.
+* unformatting diversions (asciify): Diversions.
+* unformatting horizontal space: Strings.
+* Unicode <1>: Using Symbols.
+* Unicode: Identifiers.
+* unit, c: Measurements.
+* unit, f: Measurements.
+* unit, f, and colors: Colors.
+* unit, i: Measurements.
+* unit, M: Measurements.
+* unit, m: Measurements.
+* unit, n: Measurements.
+* unit, P: Measurements.
+* unit, p: Measurements.
+* unit, s <1>: Fractional Type Sizes.
+* unit, s: Measurements.
+* unit, u: Measurements.
+* unit, v: Measurements.
+* unit, z <1>: Fractional Type Sizes.
+* unit, z: Measurements.
+* units of measurement: Measurements.
+* units, default: Default Units.
+* unnamed glyphs: Using Symbols.
+* unnamed glyphs, accessing with \N: Font File Format.
+* unsafe mode <1>: I/O.
+* unsafe mode <2>: Macro Directories.
+* unsafe mode: Groff Options.
+* user's macro tutorial: Tutorial for Macro Users.
+* user's tutorial for macros: Tutorial for Macro Users.
+* using symbols: Using Symbols.
+* utf-8, encoding: Groff Options.
+* v unit: Measurements.
+* valid numeric expression: Expressions.
+* value, incrementing without changing the register: Auto-increment.
+* variables in environment: Environment.
+* version number, major, register (.x): Built-in Registers.
+* version number, minor, register (.y): Built-in Registers.
+* vertical line drawing (\L): Drawing Requests.
+* vertical line spacing register (.v): Changing Type Sizes.
+* vertical line spacing, changing (vs): Changing Type Sizes.
+* vertical line spacing, effective value: Changing Type Sizes.
+* vertical motion (\v): Page Motions.
+* vertical page location, marking (mk): Page Motions.
+* vertical page location, returning to marked (rt): Page Motions.
+* vertical position in diversion register (.d): Diversions.
+* vertical position trap enable register (.vpt): Page Location Traps.
+* vertical position traps, enabling (vpt): Page Location Traps.
+* vertical resolution register (.V): Built-in Registers.
+* vertical space unit (v): Measurements.
+* vertical spacing: Sizes.
+* warnings <1>: Warnings.
+* warnings: Debugging.
+* warnings, level (warn): Debugging.
+* what is groff?: What Is groff?.
+* while: while.
+* while request, and the ! operator: Expressions.
+* while request, confusing with br: while.
+* while request, operators to use with: Operators in Conditionals.
+* whitespace characters: Identifiers.
+* width escape (\w): Page Motions.
+* word space size register (.ss): Manipulating Filling and Adjusting.
+* writing macros: Writing Macros.
+* writing to file (write): I/O.
+* year, current, register (year, yr): Built-in Registers.
+* z unit <1>: Fractional Type Sizes.
+* z unit: Measurements.
+* zero width space character (\&) <1>: Drawing Requests.
+* zero width space character (\&) <2>: Ligatures and Kerning.
+* zero width space character (\&): Requests.
+* zero-width printing (\z, \Z): Page Motions.
+* |, and page motion: Expressions.
+
+
diff --git a/contrib/groff/doc/groff-2 b/contrib/groff/doc/groff-2
new file mode 100644
index 0000000..d1f7f99
--- /dev/null
+++ b/contrib/groff/doc/groff-2
@@ -0,0 +1,1683 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+File: groff, Node: Man usage, Next: Man font macros, Prev: Man options, Up: man
+
+Usage
+-----
+
+ This section describes the available macros for manual pages. For
+further customization, put additional macros and requests into the file
+`man.local' which is loaded immediately after the `man' package.
+
+ - Macro: .TH title section [extra1 [extra2 [extra3]]]
+ Set the title of the man page to TITLE and the section to SECTION,
+ which must have a value between 1 and 8. The value of SECTION may
+ also have a string appended, e.g. `.pm', to indicate a specific
+ subsection of the man pages.
+
+ Both TITLE and SECTION are positioned at the left and right in the
+ header line (with SECTION in parentheses immediately appended to
+ TITLE. EXTRA1 is positioned in the middle of the footer line.
+ EXTRA2 is positioned at the left in the footer line (or at the
+ left on even pages and at the right on odd pages if double-sided
+ printing is active). EXTRA3 is centered in the header line.
+
+ For HTML output, headers and footers are completely suppressed.
+
+ Additionally, this macro starts a new page; the new line number
+ is 1 again (except if the `-rC1' option is given on the command
+ line) - this feature is intended only for formatting multiple man
+ pages; a single man page should contain exactly one `TH' macro at
+ the beginning of the file.
+
+ - Macro: .SH [heading]
+ Set up an unnumbered section heading sticking out to the left.
+ Prints out all the text following `SH' up to the end of the line
+ (or the text in the next line if there is no argument to `SH') in
+ bold face, one size larger than the base document size.
+ Additionally, the left margin for the following text is reset to
+ its default value.
+
+ - Macro: .SS [heading]
+ Set up an unnumbered (sub)section heading. Prints out all the text
+ following `SS' up to the end of the line (or the text in the next
+ line if there is no argument to `SS') in bold face, at the same
+ size as the base document size. Additionally, the left margin for
+ the following text is reset to its default value.
+
+ - Macro: .TP [nnn]
+ Set up an indented paragraph with label. The indentation is set to
+ NNN if that argument is supplied (the default unit is `n' if
+ omitted), otherwise it is set to the 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
+ has default font settings.
+
+ - Macro: .LP
+ - Macro: .PP
+ - Macro: .P
+ These macros are mutual aliases. Any of them causes a line break
+ at the current position, followed by a vertical space downwards by
+ the amount specified by the `PD' macro. The font size and shape
+ are reset to the default value (10pt roman if no `-rS' option is
+ given on the command line). Finally, the current left margin is
+ restored.
+
+ - Macro: .IP [designator [nnn]]
+ Set up an indented paragraph, using DESIGNATOR as a tag to mark
+ its beginning. The indentation is set to NNN if that argument is
+ supplied (default unit is `n'), otherwise 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 `""' (two double quotes) as the first argument of
+ `IP'.
+
+ For example, to start a paragraph with bullets as the designator
+ and 4 en indentation, write
+
+
+ .IP \(bu 4
+
+
+ - Macro: .HP [nnn]
+ Set up a paragraph with hanging left indentation. The indentation
+ is set to NNN if that argument is supplied (default unit is `n'),
+ otherwise the default indentation value is used. Font size and
+ face are reset to their default values.
+
+ - Macro: .RS [nnn]
+ Move the left margin to the right by the value NNN if specified
+ (default unit is `n'); otherwise the default indentation value is
+ used. Calls to the `RS' macro can be nested.
+
+ - Macro: .RE [nnn]
+ Move the left margin back to level NNN; if no argument is given,
+ it moves one level back. The first level (i.e., no call to `RS'
+ yet) has number 1, and each call to `RS' increases the level by 1.
+
+ To summarize, the following macros cause a line break with the
+insertion of vertical space (which amount can be changed with the `PD'
+macro): `SH', `SS', `TP', `LP' (`PP', `P'), `IP', and `HP'.
+
+ The macros `RS' and `RE' also cause a break but do not insert
+vertical space.
+
+ Finally, the macros `SH', `SS', `LP' (`PP', `P'), and `RS' reset the
+indentation to its default value.
+
+
+File: groff, Node: Man font macros, Next: Miscellaneous man macros, Prev: Man usage, Up: man
+
+Macros to set fonts
+-------------------
+
+ The standard font is roman; the default text size is 10 point. If
+command line option `-rS=N' is given, use Npt as the default text size.
+
+ - Macro: .SM [text]
+ Set the text on the same line or the text on the next line in a
+ font that is one point size smaller than the default font.
+
+ - Macro: .SB [text]
+ Set the text on the same line or the text on the next line in bold
+ face font, one point size smaller than the default font.
+
+ - Macro: .BI text
+ Set its arguments alternately in bold face and italic. Thus,
+
+
+ .BI this "word and" that
+
+ would set "this" and "that" in bold face, and "word and" in
+ italics.
+
+ - Macro: .IB text
+ Set its arguments alternately in italic and bold face.
+
+ - Macro: .RI text
+ Set its arguments alternately in roman and italic.
+
+ - Macro: .IR text
+ Set its arguments alternately in italic and roman.
+
+ - Macro: .BR text
+ Set its arguments alternately in bold face and roman.
+
+ - Macro: .RB text
+ Set its arguments alternately in roman and bold face.
+
+ - Macro: .B [text]
+ Set TEXT in bold face. If no text is present on the line where
+ the macro is called, then the text of the next line appears in bold
+ face.
+
+ - Macro: .I [text]
+ Set TEXT in italic. If no text is present on the line where the
+ macro is called, then the text of the next line appears in italic.
+
+
+File: groff, Node: Miscellaneous man macros, Next: Predefined man strings, Prev: Man font macros, Up: man
+
+Miscellaneous macros
+--------------------
+
+ The default indentation is 7.2 en for all output devices except for
+`grohtml' which ignores indentation.
+
+ - Macro: .DT
+ Set tabs every 0.5 inches. Since this macro is always executed
+ during a call to the `TH' macro, it makes sense to call it only if
+ the tab positions have been changed.
+
+ - Macro: .PD [nnn]
+ Adjust the empty space before a new paragraph (or section). The
+ optional argument gives the amount of space (default unit is `v');
+ without parameter, the value is reset to its default value (1 line
+ for TTY devices, 0.4v otherwise).
+
+ This affects the macros `SH', `SS', `TP', `LP' (as well as `PP' and
+`P'), `IP', and `HP'.
+
+
+File: groff, Node: Predefined man strings, Next: Preprocessors in man pages, Prev: Miscellaneous man macros, Up: man
+
+Predefined strings
+------------------
+
+ The following strings are defined:
+
+ - String: \*[S]
+ Switch back to the default font size.
+
+ - String: \*[R]
+ The `registered' sign.
+
+ - String: \*[Tm]
+ The `trademark' sign.
+
+ - String: \*[lq]
+ - String: \*[rq]
+ Left and right quote. This is equal to `\(lq' and `\(rq',
+ respectively.
+
+
+File: groff, Node: Preprocessors in man pages, Prev: Predefined man strings, Up: man
+
+Preprocessors in `man' pages
+----------------------------
+
+ If a preprocessor like `gtbl' or `geqn' is needed, it has become
+common usage to make the first line of the man page look like this:
+
+
+ '\" WORD
+
+Note the single space character after the double quote. WORD consists
+of letters for the needed preprocessors: `e' for `geqn', `r' for
+`grefer', `t' for `gtbl'. Modern implementations of the `man' program
+read this first line and automatically call the right preprocessor(s).
+
+
+File: groff, Node: mdoc, Next: ms, Prev: man, Up: Macro Packages
+
+`mdoc'
+======
+
+ See the `groff_mdoc(7)' man page (type `man groff_mdoc' at the
+command line).
+
+
+File: groff, Node: ms, Next: me, Prev: mdoc, Up: Macro Packages
+
+`ms'
+====
+
+ The `-ms' macros are suitable for reports, letters, books, user
+manuals, and so forth. The package provides macros for cover pages,
+section headings, paragraphs, lists, footnotes, pagination, and a table
+of contents.
+
+* Menu:
+
+* ms Intro::
+* General ms Structure::
+* ms Document Control Registers::
+* ms Cover Page Macros::
+* ms Body Text::
+* ms Page Layout::
+* Differences from AT&T ms::
+
+
+File: groff, Node: ms Intro, Next: General ms Structure, Prev: ms, Up: ms
+
+Introduction to `ms'
+--------------------
+
+ The original `-ms' macros were included with AT&T `troff' as well as
+the `man' macros. While the `man' package is intended for brief
+documents that can be read on-line as well as printed, the `ms' macros
+are suitable for longer documents that are meant to be printed rather
+than read on-line.
+
+ The `ms' macro package included with `groff' is a complete,
+bottom-up re-implementation. Several macros (specific to AT&T or
+Berkeley) are not included, while several new commands are. *Note
+Differences from AT&T ms::, for more information.
+
+
+File: groff, Node: General ms Structure, Next: ms Document Control Registers, Prev: ms Intro, Up: ms
+
+General structure of an `ms' document
+-------------------------------------
+
+ The `ms' macro package expects a certain amount of structure, but
+not as much as packages such as `man' or `mdoc'.
+
+ The simplest documents can begin with a paragraph macro (such as
+`LP' or `PP'), and consist of text separated by paragraph macros or
+even blank lines. Longer documents have a structure as follows:
+
+*Document type*
+ If you invoke the `RP' (report) macro on the first line of the
+ document, `groff' prints the cover page information on its own
+ page; otherwise it prints the information on the first page with
+ your document text immediately following. Other document formats
+ found in AT&T `troff' are specific to AT&T or Berkeley, and are
+ not supported in `groff'.
+
+*Format and layout*
+ By setting number registers, you can change your document's type
+ (font and size), margins, spacing, headers and footers, and
+ footnotes. *Note ms Document Control Registers::, for more
+ details.
+
+*Cover page*
+ A cover page consists of a title, the author's name and
+ institution, an abstract, and the date. (1) (*note General ms
+ Structure-Footnote-1::) *Note ms Cover Page Macros::, for more
+ details.
+
+*Body*
+ Following the cover page is your document. You can use the `ms'
+ macros to write reports, letters, books, and so forth. The
+ package is designed for structured documents, consisting of
+ paragraphs interspersed with headings and augmented by lists,
+ footnotes, tables, and other common constructs. *Note ms Body
+ Text::, for more details.
+
+*Table of contents*
+ Longer documents usually include a table of contents, which you
+ can invoke by placing the `TC' macro at the end of your document.
+ The `ms' macros have minimal indexing facilities, consisting of the
+ `IX' macro, which prints an entry on standard error. Printing the
+ table of contents at the end is necessary since `groff' is a
+ single-pass text formatter, thus it cannot determine the page
+ number of each section until that section has actually been set
+ and printed. Since `ms' output is intended for hardcopy, you can
+ manually relocate the pages containing the table of contents
+ between the cover page and the body text after printing.
+
+
+File: groff, Node: General ms Structure-Footnotes, Up: General ms Structure
+
+ (1) Actually, only the title is required.
+
+
+File: groff, Node: ms Document Control Registers, Next: ms Cover Page Macros, Prev: General ms Structure, Up: ms
+
+Document control registers
+--------------------------
+
+ The following is a list of document control number registers. For
+the sake of consistency, set registers related to margins at the
+beginning of your document, or just after the `RP' macro. You can set
+other registers later in your document, but you should keep them
+together at the beginning to make them easy to find and edit as
+necessary.
+
+Margin Settings
+...............
+
+ - Register: \n[PO]
+ Defines the page offset (i.e. the left margin). There is no
+ explicit right margin setting; the combination of the `PO' and
+ `LL' registers implicitly define the right margin width.
+
+ Effective: next page.
+
+ Default value: 1i.
+
+ - Register: \n[LL]
+ Defines the line length (i.e. the width of the body text).
+
+ Effective: next paragraph.
+
+ Default: 6i.
+
+ - Register: \n[LT]
+ Defines the title length (i.e. the header and footer width). This
+ is usually the same as `LL', but not necessarily.
+
+ Effective: next paragraph.
+
+ Default: 6i.
+
+ - Register: \n[HM]
+ Defines the header margin height at the top of the page.
+
+ Effective: next page.
+
+ Default: 1i.
+
+ - Register: \n[FM]
+ Defines the footer margin height at the bottom of the page.
+
+ Effective: next page.
+
+ Default: 1i.
+
+Text Settings
+.............
+
+ - Register: \n[PS]
+ Defines the point size of the body text.
+
+ Effective: next paragraph.
+
+ Default: 10p.
+
+ - Register: \n[VS]
+ Defines the space between lines (line height plus leading).
+
+ Effective: next paragraph.
+
+ Default: 12p.
+
+Paragraph Settings
+..................
+
+ - Register: \n[PI]
+ Defines the initial indent of a `.PP' paragraph.
+
+ Effective: next paragraph.
+
+ Default: 5n.
+
+ - Register: \n[PD]
+ Defines the space between paragraphs.
+
+ Effective: next paragraph.
+
+ Default: 0.3v.
+
+ - Register: \n[QI]
+ Defines the indent on both sides of a quoted (`.QP') paragraph.
+
+ Effective: next paragraph.
+
+ Default: 5n.
+
+Footnote Settings
+.................
+
+ - Register: \n[FL]
+ Defines the length of a footnote.
+
+ Effective: next footnote.
+
+ Default: `\n[LL]' * 5 / 6.
+
+ - Register: \n[FI]
+ Defines the footnote indent.
+
+ Effective: next footnote.
+
+ Default: 2n.
+
+ - Register: \n[FF]
+ The footnote format:
+ `0'
+ Prints the footnote number as a superscript; indents the
+ footnote (default).
+
+ `1'
+ Prints the number followed by a period (like 1.) and indents
+ the footnote.
+
+ `2'
+ Like 1, without an indent.
+
+ `3'
+ Like 1, but prints the footnote number as a hanging paragraph.
+
+ Effective: next footnote.
+
+ Default: 0.
+
+Miscellaneous Number Registers
+..............................
+
+ - Register: \n[MINGW]
+ Defines the minimum width between columns in a multi-column
+ document.
+
+ Effective: next page.
+
+ Default: 2n.
+
+
+File: groff, Node: ms Cover Page Macros, Next: ms Body Text, Prev: ms Document Control Registers, Up: ms
+
+Cover page macros
+-----------------
+
+ Use the following macros to create a cover page for your document in
+the order shown.
+
+ - Macro: .RP [`no']
+ Specifies the report format for your document. The report format
+ creates a separate cover page. The default action (no `.RP'
+ macro) is to print a subset of the cover page on page 1 of your
+ document.
+
+ If you use the word `no' as an optional argument, `groff' prints a
+ title page but does not repeat any of the title page information
+ (title, author, abstract, etc.) on page 1 of the document.
+
+ - Macro: .DA [...]
+ (optional) Print the current date, or the arguments to the macro
+ if any, on the title page (if specified) and in the footers. This
+ is the default for `nroff'.
+
+ - Macro: .ND [...]
+ (optional) Print the current date, or the arguments to the macro
+ if any, on the title page (if specified) but not in the footers.
+ This is the default for `troff'.
+
+ - Macro: .TL
+ Specifies the document title. `groff' collects text following the
+ `.TL' macro into the title, until reaching the author name or
+ abstract.
+
+ - Macro: .AU
+ Specifies the author's name, which appears on the line (or lines)
+ immediately following. You can specify multiple authors as
+ follows:
+
+
+ .AU
+ John Doe
+ .AI
+ University of West Bumblefuzz
+ .AU
+ Martha Buck
+ .AI
+ Monolithic Corporation
+
+ ...
+
+
+ - Macro: .AI
+ Specifies the author's institution. You can specify multiple
+ institutions in the same way that you specify multiple authors.
+
+ - Macro: .AB [`no']
+ Begins the abstract. The default is to print the word ABSTRACT,
+ centered and in italics, above the text of the abstract. The word
+ `no' as an optional argument suppresses this heading.
+
+ - Macro: .AE
+ End the abstract.
+
+ The following is example mark-up for a title page.
+
+
+ .RP
+ .TL
+ The Inevitability of Code Bloat
+ in Commercial and Free Software
+ .AU
+ J. Random Luser
+ .AI
+ University of West Bumblefuzz
+ .AB
+ This report examines the long-term growth
+ of the code bases in two large, popular software
+ packages; the free Emacs and the commercial
+ Microsoft Word.
+ While differences appear in the type or order
+ of features added, due to the different
+ methodologies used, the results are the same
+ in the end.
+ .PP
+ The free software approach is shown to be
+ superior in that while free software can
+ become as bloated as commercial offerings,
+ free software tends to have fewer serious
+ bugs and the added features are in line with
+ user demand.
+ .AE
+
+ ... the rest of the paper follows ...
+
+
+File: groff, Node: ms Body Text, Next: ms Page Layout, Prev: ms Cover Page Macros, Up: ms
+
+Body text
+---------
+
+ This section describes macros used to mark up the body of your
+document. Examples include paragraphs, sections, and other groups.
+
+* Menu:
+
+* Paragraphs in ms::
+* Headings in ms::
+* Highlighting in ms::
+* Lists in ms::
+* Indents in ms::
+* Tabstops in ms::
+* ms Displays and Keeps::
+* ms Insertions::
+* Example multi-page table::
+* ms Footnotes::
+
+
+File: groff, Node: Paragraphs in ms, Next: Headings in ms, Prev: ms Body Text, Up: ms Body Text
+
+Paragraphs
+..........
+
+ The following paragraph types are available.
+
+ - Macro: .PP
+ Sets a paragraph with an initial indent.
+
+ - Macro: .LP
+ Sets a paragraph with no initial indent.
+
+ - Macro: .QP
+ Sets a paragraph that is indented at both left and right margins.
+ The effect is identical to the HTML `<BLOCKQUOTE>' element. The
+ next paragraph or heading returns margins to normal.
+
+ - Macro: .XP
+ Sets a paragraph whose lines are indented, except for the first
+ line. This is a Berkeley extension.
+
+ The following markup uses all four paragraph macros.
+
+
+ .NH 2
+ Cases used in the study
+ .LP
+ The following software and versions were
+ considered for this report.
+ .PP
+ For commercial software, we chose
+ .B "Microsoft Word for Windows" ,
+ starting with version 1.0 through the
+ current version (Word 2000).
+ .PP
+ For free software, we chose
+ .B Emacs ,
+ from its first appearance as a standalone
+ editor through the current version (v20).
+ See [Bloggs 2002] for details.
+ .QP
+ Franklin's Law applied to software:
+ software expands to outgrow both
+ RAM and disk space over time.
+ .LP
+ Bibliography:
+ .XP
+ Bloggs, Joseph R.,
+ .I "Everyone's a Critic" ,
+ Underground Press, March 2002.
+ A definitive work that answers all questions
+ and criticisms about the quality and usability of
+ free software.
+
+
+File: groff, Node: Headings in ms, Next: Highlighting in ms, Prev: Paragraphs in ms, Up: ms Body Text
+
+Headings
+........
+
+ Use headings to create a hierarchical structure for your document.
+The `ms' macros print headings in *bold*, using the same font family
+and point size as the body text.
+
+ The following describes the heading macros:
+
+ - Macro: .NH curr-level
+ - Macro: .NH S level0 ...
+ Numbered heading. The argument is either a numeric argument to
+ indicate the level of the heading, or the letter `S' followed by
+ numeric arguments to set the heading level explicitly.
+
+ If you specify heading levels out of sequence, such as invoking
+ `.NH 3' after `.NH 1', `groff' prints a warning on standard error.
+
+ - Macro: .SH
+ Unnumbered subheading.
+
+
+File: groff, Node: Highlighting in ms, Next: Lists in ms, Prev: Headings in ms, Up: ms Body Text
+
+Highlighting
+............
+
+ The `ms' macros provide a variety of methods to highlight or
+emphasize text:
+
+ - Macro: .B [txt [post [pre]]]
+ Sets its first argument in *bold type*. If you specify a second
+ argument, `groff' prints it in the previous font after the bold
+ text, with no intervening space (this allows you to set
+ punctuation after the highlighted text without highlighting the
+ punctuation). Similarly, it prints the third argument (if any) in
+ the previous font *before* the first argument. For example,
+
+
+ .B foo ) (
+
+ prints (*foo*).
+
+ If you give this macro no arguments, `groff' prints all text
+ following in bold until the next highlighting, paragraph, or
+ heading macro.
+
+ - Macro: .R [txt [post [pre]]]
+ Sets its first argument in roman (or regular) type. It operates
+ similarly to the `B' macro otherwise.
+
+ - Macro: .I [txt [post [pre]]]
+ Sets its first argument in _italic type_. It operates similarly
+ to the `B' macro otherwise.
+
+ - Macro: .CW [txt [post [pre]]]
+ Sets its first argument in a `constant width face'. It operates
+ similarly to the `B' macro otherwise.
+
+ - Macro: .BI [txt [post [pre]]]
+ Sets its first argument in bold italic type. It operates
+ similarly to the `B' macro otherwise.
+
+ - Macro: .BX [txt]
+ Prints its argument and draws a box around it. If you want to box
+ a string that contains spaces, use a digit-width space (`\0').
+
+ - Macro: .UL [txt [post]]
+ Prints its first argument with an underline. If you specify a
+ second argument, `groff' prints it in the previous font after the
+ underlined text, with no intervening space.
+
+ - Macro: .LG
+ Prints all text following in larger type (two points larger than
+ the current point size) until the next font size, highlighting,
+ paragraph, or heading macro. You can specify this macro multiple
+ times to enlarge the point size as needed.
+
+ - Macro: .SM
+ Prints all text following in smaller type (two points smaller than
+ the current point size) until the next type size, highlighting,
+ paragraph, or heading macro. You can specify this macro multiple
+ times to reduce the point size as needed.
+
+ - Macro: .NL
+ Prints all text following in the normal point size (that is, the
+ value of the `PS' register).
+
+
+File: groff, Node: Lists in ms, Next: Indents in ms, Prev: Highlighting in ms, Up: ms Body Text
+
+Lists
+.....
+
+ The `.IP' macro handles duties for all lists.
+
+ - Macro: .IP [marker [width]]
+ The MARKER is usually a bullet glyph (`\[bu]') for unordered
+ lists, a number (or auto-incrementing number register) for
+ numbered lists, or a word or phrase for indented (glossary-style)
+ lists.
+
+ The WIDTH specifies the indent for the body of each list item; its
+ default unit is `n'. Once specified, the indent remains the same
+ for all list items in the document until specified again.
+
+ The following is an example of a bulleted list.
+
+
+ A bulleted list:
+ .IP \[bu] 2
+ lawyers
+ .IP \[bu]
+ guns
+ .IP \[bu]
+ money
+
+ Produces:
+
+
+ A bulleted list:
+
+ o lawyers
+
+ o guns
+
+ o money
+
+
+ The following is an example of a numbered list.
+
+
+ .nr step 1 1
+ A numbered list:
+ .IP \n[step] 3
+ lawyers
+ .IP \n+[step]
+ guns
+ .IP \n+[step]
+ money
+
+ Produces:
+
+
+ A numbered list:
+
+ 1. lawyers
+
+ 2. guns
+
+ 3. money
+
+ Note the use of the auto-incrementing number register in this
+example.
+
+
+ The following is an example of a glossary-style list.
+
+
+ A glossary-style list:
+ .IP lawyers 0.4i
+ Two or more attorneys.
+ .IP guns
+ Firearms, preferably
+ large-caliber.
+ .IP money
+ Gotta pay for those
+ lawyers and guns!
+
+ Produces:
+
+
+ A glossary-style list:
+
+ lawyers
+ Two or more attorneys.
+
+ guns Firearms, preferably large-caliber.
+
+ money
+ Gotta pay for those lawyers and guns!
+
+ In the last example, the `IP' macro places the definition on the
+same line as the term if it has enough space; otherwise, it breaks to
+the next line and starts the definition below the term. This may or
+may not be the effect you want, especially if some of the definitions
+break and some do not. The following examples show two possible ways
+to force a break.
+
+ The first workaround uses the `br' request to force a break after
+printing the term or label.
+
+
+ A glossary-style list:
+ .IP lawyers 0.4i
+ Two or more attorneys.
+ .IP guns
+ .br
+ Firearms, preferably large-caliber.
+ .IP money
+ Gotta pay for those lawyers and guns!
+
+
+ The second workaround uses the `\p' escape to force the break. Note
+the space following the escape; this is important. If you omit the
+space, `groff' prints the first word on the same line as the term or
+label (if it fits) *then* breaks the line.
+
+
+ A glossary-style list:
+ .IP lawyers 0.4i
+ Two or more attorneys.
+ .IP guns
+ \p Firearms, preferably large-caliber.
+ .IP money
+ Gotta pay for those lawyers and guns!
+
+
+ To set nested lists, use the `RS' and `RE' macros. *Note Indents in
+ms::, for more information.
+
+ For example:
+
+
+ .IP \[bu] 2
+ Lawyers:
+ .RS
+ .IP \[bu]
+ Dewey,
+ .IP \[bu]
+ Cheatham,
+ .IP \[bu]
+ and Howe.
+ .RE
+ .IP \[bu]
+ Guns
+
+ Produces:
+
+
+ o Lawyers:
+
+ o Dewey,
+
+ o Cheatham,
+
+ o and Howe.
+
+ o Guns
+
+
+File: groff, Node: Indents in ms, Next: Tabstops in ms, Prev: Lists in ms, Up: ms Body Text
+
+Indents
+.......
+
+ In many situations, you may need to indent a section of text while
+still wrapping and filling. *Note Lists in ms::, for an example of
+nested lists.
+
+ - Macro: .RS
+ - Macro: .RE
+ These macros begin and end an indented section. The `PI' register
+ controls the amount of indent, allowing the indented text to line
+ up under hanging and indented paragraphs.
+
+ *Note ms Displays and Keeps::, for macros to indent and turn off
+filling.
+
+
+File: groff, Node: Tabstops in ms, Next: ms Displays and Keeps, Prev: Indents in ms, Up: ms Body Text
+
+Tab Stops
+.........
+
+ Use the `ta' request to define tab stops as needed. *Note Tabs and
+Fields::.
+
+ - Macro: .TA
+ Use this macro to reset the tab stops to the default for `ms'
+ (every 5n). You can redefine the `TA' macro to create a different
+ set of default tab stops.
+
+
+File: groff, Node: ms Displays and Keeps, Next: ms Insertions, Prev: Tabstops in ms, Up: ms Body Text
+
+Displays and keeps
+..................
+
+ Use displays to show text-based examples or figures (such as code
+listings).
+
+ Displays turn off filling, so lines of code are displayed as-is
+without inserting `br' requests in between each line. Displays can be
+"kept" on a single page, or allowed to break across pages.
+
+ - Macro: .DS L
+ - Macro: .LD
+ - Macro: .DE
+ Left-justified display. The `.DS L' call generates a page break,
+ if necessary, to keep the entire display on one page. The `LD'
+ macro allows the display to break across pages. The `DE' macro
+ ends the display.
+
+ - Macro: .DS I
+ - Macro: .ID
+ - Macro: .DE
+ Indents the display as defined by the `DI' register. The `.DS I'
+ call generates a page break, if necessary, to keep the entire
+ display on one page. The `ID' macro allows the display to break
+ across pages. The `DE' macro ends the display.
+
+ - Macro: .DS B
+ - Macro: .BD
+ - Macro: .DE
+ Sets a block-centered display: the entire display is
+ left-justified, but indented so that the longest line in the
+ display is centered on the page. The `.DS B' call generates a
+ page break, if necessary, to keep the entire display on one page.
+ The `BD' macro allows the display to break across pages. The `DE'
+ macro ends the display.
+
+ - Macro: .DS C
+ - Macro: .CD
+ - Macro: .DE
+ Sets a centered display: each line in the display is centered.
+ The `.DS C' call generates a page break, if necessary, to keep the
+ entire display on one page. The `CD' macro allows the display to
+ break across pages. The `DE' macro ends the display.
+
+ - Macro: .DS R
+ - Macro: .RD
+ - Macro: .DE
+ Right-justifies each line in the display. The `.DS R' call
+ generates a page break, if necessary, to keep the entire display
+ on one page. The `RD' macro allows the display to break across
+ pages. The `DE' macro ends the display.
+
+
+ On occasion, you may want to "keep" other text together on a page.
+For example, you may want to keep two paragraphs together, or a
+paragraph that refers to a table (or list, or other item) immediately
+following. The `ms' macros provide the `KS' and `KE' macros for this
+purpose.
+
+ - Macro: .KS
+ - Macro: .KE
+ The `KS' macro begins a block of text to be kept on a single page,
+ and the `KE' macro ends the block.
+
+ - Macro: .KF
+ - Macro: .KE
+ Specifies a "floating keep"; if the keep cannot fit on the current
+ page, `groff' holds the contents of the keep and allows text
+ following the keep (in the source file) to fill in the remainder of
+ the current page. When the page breaks, whether by an explicit
+ `bp' request or by reaching the end of the page, `groff' prints
+ the floating keep at the top of the new page. This is useful for
+ printing large graphics or tables that do not need to appear
+ exactly where specified.
+
+ You can also use the `ne' request to force a page break if there is
+not enough vertical space remaining on the page.
+
+
+ Use the following macros to draw a box around a section of text
+(such as a display).
+
+ - Macro: .B1
+ - Macro: .B2
+ Marks the beginning and ending of text that is to have a box drawn
+ around it. The `B1' macro begins the box; the `B2' macro ends it.
+ Text in the box is automatically placed in a diversion (keep).
+
+
+File: groff, Node: ms Insertions, Next: Example multi-page table, Prev: ms Displays and Keeps, Up: ms Body Text
+
+Tables, figures, equations, and references
+..........................................
+
+ The `ms' macros support the standard `groff' preprocessors: `tbl',
+`pic', `eqn', and `refer'. You mark text meant for preprocessors by
+enclosing it in pairs of tags as follows.
+
+ - Macro: .TS [`H']
+ - Macro: .TE
+ Denotes a table, to be processed by the `tbl' preprocessor. The
+ optional argument `H' to `TS' instructs `groff' to create a
+ running header with the information up to the `TH' macro. `groff'
+ prints the header at the beginning of the table; if the table runs
+ onto another page, `groff' prints the header on the next page as
+ well.
+
+ - Macro: .PS
+ - Macro: .PE
+ Denotes a graphic, to be processed by the `pic' preprocessor. You
+ can create a `pic' file by hand, using the AT&T `pic' manual
+ available on the Web as a reference, or by using a graphics
+ program such as `xfig'.
+
+ - Macro: .EQ [align]
+ - Macro: .EN
+ Denotes an equation, to be processed by the `eqn' preprocessor.
+ The optional ALIGN argument can be `C', `L', or `I' to center (the
+ default), left-justify, or indent the equation.
+
+ - Macro: .[
+ - Macro: .]
+ Denotes a reference, to be processed by the `refer' preprocessor.
+ The GNU `refer(1)' man page provides a comprehensive reference to
+ the preprocessor and the format of the bibliographic database.
+
+* Menu:
+
+* Example multi-page table::
+
+
+File: groff, Node: Example multi-page table, Next: ms Footnotes, Prev: ms Insertions, Up: ms Body Text
+
+An example multi-page table
+...........................
+
+ The following is an example of how to set up a table that may print
+across two or more pages.
+
+
+ .TS H
+ allbox expand;
+ cb | cb .
+ Text ...of heading...
+ _
+ .TH
+ .T&
+ l | l .
+ ... the rest of the table follows...
+ .CW
+ .TE
+
+
+File: groff, Node: ms Footnotes, Prev: Example multi-page table, Up: ms Body Text
+
+Footnotes
+.........
+
+ The `ms' macro package has a flexible footnote system. You can
+specify either numbered footnotes or symbolic footnotes (that is, using
+a marker such as a dagger symbol).
+
+ - String: \*[*]
+ Specifies the location of a numbered footnote marker in the text.
+
+ - Macro: .FS
+ - Macro: .FE
+ Specifies the text of the footnote. The default action is to
+ create a numbered footnote; you can create a symbolic footnote by
+ specifying a "mark" glyph (such as `\[dg]' for the dagger glyph)
+ in the body text and as an argument to the `FS' macro, followed by
+ the text of the footnote and the `FE' macro.
+
+ You can control how `groff' prints footnote numbers by changing the
+value of the `FF' register. *Note ms Document Control Registers::.
+
+
+File: groff, Node: ms Page Layout, Next: Differences from AT&T ms, Prev: ms Body Text, Up: ms
+
+Page layout
+-----------
+
+ The default output from the `ms' macros provides a minimalist page
+layout: it prints a single column, with the page number centered at the
+top of each page. It prints no footers.
+
+ You can change the layout by setting the proper number registers and
+strings.
+
+* Menu:
+
+* ms Headers and Footers::
+* ms Margins::
+* ms Multiple Columns::
+* ms TOC::
+* ms Strings and Special Characters::
+
+
+File: groff, Node: ms Headers and Footers, Next: ms Margins, Prev: ms Page Layout, Up: ms Page Layout
+
+Headers and footers
+...................
+
+ For documents that do not distinguish between odd and even pages,
+set the following strings:
+
+ - String: \*[LH]
+ - String: \*[CH]
+ - String: \*[RH]
+ Sets the left, center, and right headers.
+
+ - String: \*[LF]
+ - String: \*[CF]
+ - String: \*[RF]
+ Sets the left, center, and right footers.
+
+
+ For documents that need different information printed in the even
+and odd pages, use the following macros:
+
+ - Macro: .OH 'left'center'right'
+ - Macro: .EH 'left'center'right'
+ - Macro: .OF 'left'center'right'
+ - Macro: .EF 'left'center'right'
+ The `OH' and `EH' macros define headers for the odd and even pages;
+ the `OF' and `EF' macros define footers for the odd and even pages.
+ This is more flexible than defining the individual strings.
+
+ You can replace the quote (`'') marks with any character not
+ appearing in the header or footer text.
+
+
+File: groff, Node: ms Margins, Next: ms Multiple Columns, Prev: ms Headers and Footers, Up: ms Page Layout
+
+Margins
+.......
+
+ You control margins using a set of number registers. *Note ms
+Document Control Registers::, for details.
+
+
+File: groff, Node: ms Multiple Columns, Next: ms TOC, Prev: ms Margins, Up: ms Page Layout
+
+Multiple columns
+................
+
+ The `ms' macros can set text in as many columns as will reasonably
+fit on the page. The following macros are available; all of them force
+a page break if a multi-column mode is already set. However, if the
+current mode is single-column, starting a multi-column mode does *not*
+force a page break.
+
+ - Macro: .1C
+ Single-column mode.
+
+ - Macro: .2C
+ Two-column mode.
+
+ - Macro: .MC [width [gutter]]
+ Multi-column mode. If you specify no arguments, it is equivalent
+ to the `2C' macro. Otherwise, WIDTH is the width of each column
+ and GUTTER is the space between columns. The `MINGW' number
+ register controls the default gutter width.
+
+
+File: groff, Node: ms TOC, Next: ms Strings and Special Characters, Prev: ms Multiple Columns, Up: ms Page Layout
+
+Creating a table of contents
+............................
+
+ The facilities in the `ms' macro package for creating a table of
+contents are semi-automated at best. Assuming that you want the table
+of contents to consist of the document's headings, you need to repeat
+those headings wrapped in `XS' and `XE' macros.
+
+ - Macro: .XS [page]
+ - Macro: .XA [page]
+ - Macro: .XE
+ These macros define a table of contents or an individual entry in
+ the table of contents, depending on their use. The macros are
+ very simple; they cannot indent a heading based on its level. The
+ easiest way to work around this is to add tabs to the table of
+ contents string. The following is an example:
+
+
+ .NH 1
+ Introduction
+ .XS
+ Introduction
+ .XE
+ .LP
+ ...
+ .CW
+ .NH 2
+ Methodology
+ .XS
+ Methodology
+ .XE
+ .LP
+ ...
+
+ You can manually create a table of contents by beginning with the
+ `XS' macro for the first entry, specifying the page number for
+ that entry as the argument to `XS'. Add subsequent entries using
+ the `XA' macro, specifying the page number for that entry as the
+ argument to `XA'. The following is an example:
+
+
+ .XS 1
+ Introduction
+ .XA 2
+ A Brief History of the Universe
+ .XA 729
+ Details of Galactic Formation
+ ...
+ .XE
+
+
+ - Macro: .TC [`no']
+ Prints the table of contents on a new page, setting the page
+ number to *i* (Roman numeral one). You should usually place this
+ macro at the end of the file, since `groff' is a single-pass
+ formatter and can only print what has been collected up to the
+ point that the `TC' macro appears.
+
+ The optional argument `no' suppresses printing the title specified
+ by the string register `TOC'.
+
+ - Macro: .PX [`no']
+ Prints the table of contents on a new page, using the current page
+ numbering sequence. Use this macro to print a manually-generated
+ table of contents at the beginning of your document.
+
+ The optional argument `no' suppresses printing the title specified
+ by the string register `TOC'.
+
+ The `Groff and Friends HOWTO' includes a `sed' script that
+automatically inserts `XS' and `XE' macro entries after each heading in
+a document.
+
+ Altering the `NH' macro to automatically build the table of contents
+is perhaps initially more difficult, but would save a great deal of
+time in the long run if you use `ms' regularly.
+
+
+File: groff, Node: ms Strings and Special Characters, Prev: ms TOC, Up: ms Page Layout
+
+Strings and Special Characters
+..............................
+
+ The `ms' macros provide the following predefined strings. You can
+change the string definitions to help in creating documents in
+languages other than English.
+
+ - String: \*[REFERENCES]
+ Contains the string printed at the beginning of the references
+ (bibliography) page. The default is `References'.
+
+ - String: \*[ABSTRACT]
+ Contains the string printed at the beginning of the abstract. The
+ default is `ABSTRACT'.
+
+ - String: \*[TOC]
+ Contains the string printed at the beginning of the table of
+ contents.
+
+ - String: \*[MONTH1]
+ - String: \*[MONTH2]
+ - String: \*[MONTH3]
+ - String: \*[MONTH4]
+ - String: \*[MONTH5]
+ - String: \*[MONTH6]
+ - String: \*[MONTH7]
+ - String: \*[MONTH8]
+ - String: \*[MONTH9]
+ - String: \*[MONTH10]
+ - String: \*[MONTH11]
+ - String: \*[MONTH12]
+ Prints the full name of the month in dates. The default is
+ `January', `February', etc.
+
+ The following special characters are available(1) (*note ms Strings
+and Special Characters-Footnote-1::):
+
+ - String: \*[-]
+ Prints an em dash.
+
+ - String: \*[*Q]
+ - String: \*[*U]
+ Prints typographer's quotes in troff, plain quotes in nroff. `*Q'
+ is the left quote and `*U' is the right quote.
+
+ Improved accent marks are available in the `ms' macros.
+
+ - Macro: .AM
+ Specify this macro at the beginning of your document to enable
+ extended accent marks and special characters. This is a Berkeley
+ extension.
+
+ To use the accent marks, place them *after* the character being
+ accented.
+
+ The following accent marks are available after invoking the `AM'
+macro:
+
+ - String: \*[']
+ Acute accent.
+
+ - String: \*[`]
+ Grave accent.
+
+ - String: \*[^]
+ Circumflex.
+
+ - String: \*[,]
+ Cedilla.
+
+ - String: \*[~]
+ Tilde.
+
+ - String: \*[:]
+ Umlaut.
+
+ - String: \*[v]
+ Hacek.
+
+ - String: \*[_]
+ Macron (overbar).
+
+ - String: \*[.]
+ Underdot.
+
+ - String: \*[o]
+ Ring above.
+
+ The following are standalone characters available after invoking the
+`AM' macro:
+
+ - String: \*[?]
+ Upside-down question mark.
+
+ - String: \*[!]
+ Upside-down exclamation point.
+
+ - String: \*[8]
+ German ss ligature.
+
+ - String: \*[3]
+ Yogh.
+
+ - String: \*[Th]
+ Uppercase thorn.
+
+ - String: \*[th]
+ Lowercase thorn.
+
+ - String: \*[D-]
+ Uppercase eth.
+
+ - String: \*[d-]
+ Lowercase eth.
+
+ - String: \*[q]
+ Hooked o.
+
+ - String: \*[ae]
+ Lowercase ae ligature.
+
+ - String: \*[Ae]
+ Uppercase AE ligature.
+
+
+File: groff, Node: ms Strings and Special Characters-Footnotes, Up: ms Strings and Special Characters
+
+ (1) For an explanation what special characters are see *Note Special
+Characters::.
+
+
+File: groff, Node: Differences from AT&T ms, Prev: ms Page Layout, Up: ms
+
+Differences from AT&T `ms'
+--------------------------
+
+ This section lists the (minor) differences between the `groff -ms'
+macros and AT&T `troff -ms' macros.
+
+* Menu:
+
+* Missing ms Macros::
+* Additional ms Macros::
+
+
+File: groff, Node: Missing ms Macros, Next: Additional ms Macros, Prev: Differences from AT&T ms, Up: Differences from AT&T ms
+
+`troff' macros not appearing in `groff'
+.......................................
+
+ Macros missing from `groff -ms' are cover page macros specific to
+Bell Labs. The macros known to be missing are:
+
+`.TM'
+ Technical memorandum; a cover sheet style
+
+`.IM'
+ Internal memorandum; a cover sheet style
+
+`.MR'
+ Memo for record; a cover sheet style
+
+`.MF'
+ Memo for file; a cover sheet style
+
+`.EG'
+ Engineer's notes; a cover sheet style
+
+`.TR'
+ Computing Science Tech Report; a cover sheet style
+
+`.OK'
+ Other keywords
+
+`.CS'
+ Cover sheet information
+
+`.MH'
+ A cover sheet macro
+
+
+File: groff, Node: Additional ms Macros, Prev: Missing ms Macros, Up: Differences from AT&T ms
+
+`groff' macros not appearing in AT&T `troff'
+............................................
+
+ The `groff -ms' macros have a few minor extensions compared to the
+AT&T `troff -ms' macros.
+
+ - Macro: .AM
+ Improved accent marks. *Note ms Strings and Special Characters::,
+ for details.
+
+ - Macro: .DS I
+ Indented display. The default behavior of AT&T `troff -ms' was to
+ indent; the `groff' default prints displays flush left with the
+ body text.
+
+ - Macro: .CW
+ Print text in `constant width' (Courier) font.
+
+ - Macro: .IX
+ Indexing term (printed on standard error). You can write a script
+ to capture and process an index generated in this manner.
+
+
+ The following additional number registers appear in `groff -ms':
+
+ - Register: \n[MINGW]
+ Specifies a minimum space between columns (for multi-column
+ output); this takes the place of the `GW' register that was
+ documented but apparently not implemented in AT&T `troff'.
+
+
+ Several new string registers are available as well. You can change
+these to handle (for example) the local language. *Note ms Strings and
+Special Characters::, for details.
+
+
+File: groff, Node: me, Next: mm, Prev: ms, Up: Macro Packages
+
+`me'
+====
+
+ See the `meintro.me' and `meref.me' documents in groff's `doc'
+directory.
+
+
+File: groff, Node: mm, Prev: me, Up: Macro Packages
+
+`mm'
+====
+
+ See the `groff_mm(7)' man page (type `man groff_mm' at the command
+line).
+
+
+File: groff, Node: gtroff Reference, Next: Preprocessors, Prev: Macro Packages, Up: Top
+
+`gtroff' Reference
+******************
+
+ This chapter covers *all* of the facilities of `gtroff'. Users of
+macro packages may skip it if not interested in details.
+
+* Menu:
+
+* Text::
+* Input Conventions::
+* Measurements::
+* Expressions::
+* Identifiers::
+* Embedded Commands::
+* Registers::
+* Manipulating Filling and Adjusting::
+* Manipulating Hyphenation::
+* Manipulating Spacing::
+* Tabs and Fields::
+* Character Translations::
+* Troff and Nroff Mode::
+* Line Layout::
+* Line Control::
+* Page Layout::
+* Page Control::
+* Fonts::
+* Sizes::
+* Strings::
+* Conditionals and Loops::
+* Writing Macros::
+* Page Motions::
+* Drawing Requests::
+* Traps::
+* Diversions::
+* Environments::
+* Suppressing output::
+* Colors::
+* I/O::
+* Postprocessor Access::
+* Miscellaneous::
+* Gtroff Internals::
+* Debugging::
+* Implementation Differences::
+
+
+File: groff, Node: Text, Next: Input Conventions, Prev: gtroff Reference, Up: gtroff Reference
+
+Text
+====
+
+ `gtroff' input files contain text with control commands interspersed
+throughout. But, even without control codes, `gtroff' still does
+several things with the input text:
+
+ * filling and adjusting
+
+ * adding additional space after sentences
+
+ * hyphenating
+
+ * inserting implicit line breaks
+
+* Menu:
+
+* Filling and Adjusting::
+* Hyphenation::
+* Sentences::
+* Tab Stops::
+* Implicit Line Breaks::
+
+
+File: groff, Node: Filling and Adjusting, Next: Hyphenation, Prev: Text, Up: Text
+
+Filling and Adjusting
+---------------------
+
+ When `gtroff' reads text, it collects words from the input and fits
+as many of them together on one output line as it can. This is known as
+"filling".
+
+ Once `gtroff' has a "filled" line, it tries to "adjust" it. This
+means it widens the spacing between words until the text reaches the
+right margin (in the default adjustment mode). Extra spaces between
+words are preserved, but spaces at the end of lines are ignored.
+Spaces at the front of a line cause a "break" (breaks are explained in
+*Note Implicit Line Breaks::).
+
+ *Note Manipulating Filling and Adjusting::.
+
+
+File: groff, Node: Hyphenation, Next: Sentences, Prev: Filling and Adjusting, Up: Text
+
+Hyphenation
+-----------
+
+ Since the odds are not great for finding a set of words, for every
+output line, which fit nicely on a line without inserting excessive
+amounts of space between words, `gtroff' hyphenates words so that it
+can justify lines without inserting too much space between words. It
+uses an internal hyphenation algorithm (a simplified version of the
+algorithm used within TeX) to indicate which words can be hyphenated
+and how to do so. When a word is hyphenated, the first part of the
+word is added to the current filled line being output (with an attached
+hyphen), and the other portion is added to the next line to be filled.
+
+ *Note Manipulating Hyphenation::.
+
+
+File: groff, Node: Sentences, Next: Tab Stops, Prev: Hyphenation, Up: Text
+
+Sentences
+---------
+
+ Although it is often debated, some typesetting rules say there
+should be different amounts of space after various punctuation marks.
+For example, the `Chicago typsetting manual' says that a period at the
+end of a sentence should have twice as much space following it as would
+a comma or a period as part of an abbreviation.
+
+ `gtroff' does this by flagging certain characters (normally `!',
+`?', and `.') as "end-of-sentence" characters. When `gtroff'
+encounters one of these characters at the end of a line, it appends a
+normal space followed by a "sentence space" in the formatted output.
+(This justifies one of the conventions mentioned in *Note Input
+Conventions::.)
+
+ In addition, the following characters and symbols are treated
+transparently while handling end-of-sentence characters: `"', `'', `)',
+`]', `*', `\[dg]', and `\[rq]'.
+
+ See the `cflags' request in *Note Using Symbols::, for more details.
+
+ To prevent the insertion of extra space after an end-of-sentence
+character (at the end of a line), append `\&'.
+
diff --git a/contrib/groff/doc/groff-3 b/contrib/groff/doc/groff-3
new file mode 100644
index 0000000..b808a39
--- /dev/null
+++ b/contrib/groff/doc/groff-3
@@ -0,0 +1,1374 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+File: groff, Node: Tab Stops, Next: Implicit Line Breaks, Prev: Sentences, Up: Text
+
+Tab Stops
+---------
+
+ `gtroff' translates "tabulator characters", also called "tabs"
+(normally code point ASCII `0x09' or EBCDIC `0x05'), in the input into
+movements to the next tabulator stop. These tab stops are initially
+located every half inch across the page. Using this, simple tables can
+be made easily. However, it can often be deceptive as the appearance
+(and width) of the text on a terminal and the results from `gtroff' can
+vary greatly.
+
+ Also, a possible sticking point is that lines beginning with tab
+characters are still filled, again producing unexpected results. For
+example, the following input
+
+ 1 2 3
+ 4 5
+
+produces
+
+ 1 2 3 4 5
+
+ *Note Tabs and Fields::.
+
+
+File: groff, Node: Implicit Line Breaks, Prev: Tab Stops, Up: Text
+
+Implicit Line Breaks
+--------------------
+
+ An important concept in `gtroff' is the "break". When a break
+occurs, `gtroff' outputs the partially filled line (unjustified), and
+resumes collecting and filling text on the next output line.
+
+ There are several ways to cause a break in `gtroff'. A blank line
+not only causes a break, but it also outputs a one-line vertical space
+(effectively a blank line). Note that this behaviour can be modified
+with the blank line macro request `blm'. *Note Blank Line Traps::.
+
+ A line that begins with a space causes a break and the space is
+output at the beginning of the next line. Note that this space isn't
+adjusted, even in fill mode.
+
+ The end of file also causes a break - otherwise the last line of the
+document may vanish!
+
+ Certain requests also cause breaks, implicitly or explicitly. This
+is discussed in *Note Manipulating Filling and Adjusting::.
+
+
+File: groff, Node: Input Conventions, Next: Measurements, Prev: Text, Up: gtroff Reference
+
+Input Conventions
+=================
+
+ Since `gtroff' does filling automatically, it is traditional in
+`groff' not to try and type things in as nicely formatted paragraphs.
+These are some conventions commonly used when typing `gtroff' text:
+
+ * Break lines after punctuation, particularly at the end of a
+ sentence and in other logical places. Keep separate phrases on
+ lines by themselves, as entire phrases are often added or deleted
+ when editing.
+
+ * Try to keep lines less than 40-60 characters, to allow space for
+ inserting more text.
+
+ * Do not try to do any formatting in a WYSIWYG manner (i.e., don't
+ try using spaces to get proper indentation).
+
+
+File: groff, Node: Measurements, Next: Expressions, Prev: Input Conventions, Up: gtroff Reference
+
+Measurements
+============
+
+ `gtroff' (like many other programs) requires numeric parameters to
+specify various measurements. Most numeric parameters(1) (*note
+Measurements-Footnote-1::) may have a "measurement unit" attached.
+These units are specified as a single character which immediately
+follows the number or expression. Each of these units are understood,
+by `gtroff', to be a multiple of its "basic unit". So, whenever a
+different measurement unit is specified `gtroff' converts this into its
+"basic units". This basic unit, represented by a `u', is a device
+dependent measurement which is quite small, ranging from 1/75th to
+1/72000th of an inch. The values may be given as fractional numbers;
+however, fractional basic units are always rounded to integers.
+
+ Some of the measurement units are completely independent of any of
+the current settings (e.g. type size) of `gtroff'.
+
+`i'
+ Inches. An antiquated measurement unit still in use in certain
+ backwards countries with incredibly low-cost computer equipment.
+ One inch is equal to 2.54cm.
+
+`c'
+ Centimeters. One centimeter is equal to 0.3937in.
+
+`p'
+ Points. This is a typesetter's measurement used for measure type
+ size. It is 72 points to an inch.
+
+`P'
+ Pica. Another typesetting measurement. 6 Picas to an inch (and
+ 12 points to a pica).
+
+`s'
+`z'
+ *Note Fractional Type Sizes::, for a discussion of these units.
+
+`f'
+ Fractions. Value is 65536. *Note Colors::, for usage.
+
+ The other measurements understood by `gtroff' depend on settings
+currently in effect in `gtroff'. These are very useful for specifying
+measurements which should look proper with any size of text.
+
+`m'
+ Ems. This unit is equal to the current font size in points. So
+ called because it is _approximately_ the width of the letter `m'
+ in the current font.
+
+`n'
+ Ens. In `groff', this is half of an em.
+
+`v'
+ Vertical space. This is equivalent to the current line spacing.
+ *Note Sizes::, for more information about this.
+
+`M'
+ 100ths of an em.
+
+* Menu:
+
+* Default Units::
+
+
+File: groff, Node: Measurements-Footnotes, Up: Measurements
+
+ (1) those that specify vertical or horizontal motion or a type size
+
+
+File: groff, Node: Default Units, Prev: Measurements, Up: Measurements
+
+Default Units
+-------------
+
+ Many requests take a default unit. While this can be helpful at
+times, it can cause strange errors in some expressions. For example,
+the line length request expects em units. Here are several attempts to
+get a line length of 3.5 inches and their results:
+
+
+ 3.5i => 3.5i
+ 7/2 => 0i
+ 7/2i => 0i
+ (7 / 2)u => 0i
+ 7i/2 => 0.1i
+ 7i/2u => 3.5i
+
+Everything is converted to basic units first. In the above example it
+is assumed that 1i equals 240u, and 1m equals 10p (thus 1m equals 33u).
+The value 7i/2 is first handled as 7i/2m, then converted to 1680u/66u
+which is 25u, and this is approximately 0.1i. As can be seen, a
+scaling indicator after a closing parenthesis is simply ignored.
+
+ Thus, the safest way to specify measurements is to always attach a
+scaling indicator. If you want to multiply or divide by a certain
+scalar value, use `u' as the unit for that value.
+
+
+File: groff, Node: Expressions, Next: Identifiers, Prev: Measurements, Up: gtroff Reference
+
+Expressions
+===========
+
+ `gtroff' has most arithmetic operators common to other languages:
+
+ * Arithmetic: `+' (addition), `-' (subtraction), `/' (division), `*'
+ (multiplication), `%' (modulo).
+
+ `gtroff' only provides integer arithmetic. The internal type used
+ for computing results is `int', which is usually a 32bit signed
+ integer.
+
+ * Comparison: `<' (less than), `>' (greater than), `<=' (less than
+ or equal), `>=' (greater than or equal), `=' (equal), `==' (the
+ same as `=').
+
+ * Logical: `&' (logical and), `:' (logical or).
+
+ * Unary operators: `-' (negating, i.e. changing the sign), `+' (just
+ for completeness; does nothing in expressions), `!' (logical not;
+ this works only within `if' and `while' requests). See below for
+ the use of unary operators in motion requests.
+
+ * Extrema: `>?' (maximum), `<?' (minimum).
+
+ Example:
+
+
+ .nr x 5
+ .nr y 3
+ .nr z (\n[x] >? \n[y])
+
+ The register `z' now contains 5.
+
+ * Scaling: `(C;E)'. Evaluate E using C as the default scaling
+ indicator. If C is missing, ignore scaling indicators in the
+ evaluation of E.
+
+ Parentheses may be used as in any other language. However, in
+`gtroff' they are necessary to ensure order of evaluation. `gtroff'
+has no operator precedence; expressions are evaluated left to right.
+This means that `gtroff' evaluates `3+5*4' as if it were parenthesized
+like `(3+5)*4', not as `3+(5*4)', as might be expected.
+
+ For many requests which cause a motion on the page, the unary
+operators `+' and `-' work differently if leading an expression. They
+then indicate a motion relative to the current position (down or up,
+respectively).
+
+ Similarly, a leading `|' operator indicates an absolute position.
+For vertical movements, it specifies the distance from the top of the
+page; for horizontal movements, it gives the distance from the beginning
+of the _input_ line.
+
+ `+' and `-' are also treated differently by the following requests
+and escapes: `bp', `in', `ll', `lt', `nm', `nr', `pl', `pn', `po', `ps',
+`pvs', `rt', `ti', `\H', `\R', and `\s'. Here, leading plus and minus
+signs indicate increments and decrements.
+
+ *Note Setting Registers::, for some examples.
+
+ - Escape: \B'ANYTHING'
+ Return 1 if ANYTHING is a valid numeric expression; or 0 if
+ ANYTHING is empty or not a valid numeric expression.
+
+ Due to the way arguments are parsed, spaces are not allowed in
+expressions, unless the entire expression is surrounded by parentheses.
+
+ *Note Request Arguments::, and *Note Conditionals and Loops::.
+
+
+File: groff, Node: Identifiers, Next: Embedded Commands, Prev: Expressions, Up: gtroff Reference
+
+Identifiers
+===========
+
+ Like any other language, `gtroff' has rules for properly formed
+"identifiers". In `gtroff', an identifier can be made up of almost any
+printable character, with the exception of the following characters:
+
+ * Whitespace characters (spaces, tabs, and newlines).
+
+ * Backspace (ASCII `0x08' or EBCDIC `0x16') and character code
+ `0x01'.
+
+ * The following input characters are invalid and are ignored if
+ `groff' runs on a machine based on ASCII, causing a warning
+ message of type `input' (see *Note Debugging::, for more details):
+ `0x00', `0x0B', `0x0D'-`0x1F', `0x80'-`0x9F'.
+
+ And here are the invalid input characters if `groff' runs on an
+ EBCDIC host: `0x00', `0x08', `0x09', `0x0B', `0x0D'-`0x14',
+ `0x17'-`0x1F', `0x30'-`0x3F'.
+
+ Currently, some of these reserved codepoints are used internally,
+ thus making it non-trivial to extend `gtroff' to cover Unicode or
+ other character sets and encodings which use characters of these
+ ranges.
+
+ Note that invalid characters are removed before parsing; an
+ identifier `foo', followed by an invalid character, followed by
+ `bar' is treated as `foobar'.
+
+ For example, any of the following is valid.
+
+
+ br
+ PP
+ (l
+ end-list
+ @_
+
+Note that identifiers longer than two characters with a closing bracket
+(`]') in its name can't be accessed with escape sequences which expect
+an identifier as a parameter. For example, `\[foo]]' accesses the
+glyph `foo', followed by `]', whereas `\C'foo]'' really asks for glyph
+`foo]'.
+
+ To avoid problems with the `refer' preprocessor, macro names should
+not start with `[' or `]'. Due to backwards compatibility, everything
+after `.[' and `.]' is handled as a special argument to `refer'. For
+example, `.[foo' makes `refer' to start a reference, using `foo' as a
+parameter.
+
+ - Escape: \A'IDENT'
+ Test whether an identifier IDENT is valid in `gtroff'. It expands
+ to the character 1 or 0 according to whether its argument (usually
+ delimited by quotes) is or is not acceptable as the name of a
+ string, macro, diversion, number register, environment, or font.
+ It returns 0 if no argument is given. This is useful for looking
+ up user input in some sort of associative table.
+
+
+ \A'end-list'
+ => 1
+
+
+ *Note Escapes::, for details on parameter delimiting characters.
+
+ Identifiers in `gtroff' can be any length, but, in some contexts,
+`gtroff' needs to be told where identifiers end and text begins (and in
+different ways depending on their length):
+
+ * Single character.
+
+ * Two characters. Must be prefixed with `(' in some situations.
+
+ * Arbitrary length (`gtroff' only). Must be bracketed with `['
+ and `]' in some situations. Any length identifier can be put in
+ brackets.
+
+ Unlike many other programming languages, undefined identifiers are
+silently ignored or expanded to nothing. When `gtroff' finds an
+undefined identifier, it emits a warning, doing the following:
+
+ * If the identifier is a string, macro, or diversion, `gtroff'
+ defines it as empty.
+
+ * If the identifier is a number register, `gtroff' defines it with a
+ value of 0.
+
+ *Note Warnings::., *Note Interpolating Registers::, and *Note
+Strings::.
+
+ Note that macros, strings, and diversions share the same name space.
+
+
+ .de xxx
+ . nop foo
+ ..
+ .
+ .di xxx
+ bar
+ .br
+ .di
+ .
+ .xxx
+ => bar
+
+As can be seen in the previous example, `gtroff' reuses the identifier
+`xxx', changing it from a macro to a diversion. No warning is emitted!
+The contents of the first macro definition is lost.
+
+ *Note Interpolating Registers::, and *Note Strings::.
+
+
+File: groff, Node: Embedded Commands, Next: Registers, Prev: Identifiers, Up: gtroff Reference
+
+Embedded Commands
+=================
+
+ Most documents need more functionality beyond filling, adjusting and
+implicit line breaking. In order to gain further functionality,
+`gtroff' allows commands to be embedded into the text, in two ways.
+
+ The first is a "request" which takes up an entire line, and does
+some large-scale operation (e.g. break lines, start new pages).
+
+ The other is an "escape" which can be usually embedded anywhere in
+the text; most requests can accept it even as an argument. Escapes
+generally do more minor operations like sub- and superscripts, print a
+symbol, etc.
+
+* Menu:
+
+* Requests::
+* Macros::
+* Escapes::
+
+
+File: groff, Node: Requests, Next: Macros, Prev: Embedded Commands, Up: Embedded Commands
+
+Requests
+--------
+
+ A request line begins with a control character, which is either a
+single quote (`'', the "no-break control character") or a period (`.',
+the normal "control character"). These can be changed; see *Note
+Character Translations::, for details. After this there may be
+optional tabs or spaces followed by an identifier which is the name of
+the request. This may be followed by any number of space-separated
+arguments (_no_ tabs here).
+
+ Since a control character followed by whitespace only is ignored, it
+is common practice to use this feature for structuring the source code
+of documents or macro packages.
+
+
+ .de foo
+ . tm This is foo.
+ ..
+ .
+ .
+ .de bar
+ . tm This is bar.
+ ..
+
+ Another possibility is to use the blank line macro request `blm' by
+assigning an empty macro to it.
+
+
+ .de do-nothing
+ ..
+ .blm do-nothing \" activate blank line macro
+
+ .de foo
+ . tm This is foo.
+ ..
+
+
+ .de bar
+ . tm This is bar.
+ ..
+
+ .blm \" deactivate blank line macro
+
+ *Note Blank Line Traps::.
+
+ To begin a line with a control character without it being
+interpreted, precede it with `\&'. This represents a zero width space,
+which means it does not affect the output.
+
+ In most cases the period is used as a control character. Several
+requests cause a break implicitly; using the single quote control
+character prevents this.
+
+* Menu:
+
+* Request Arguments::
+
+
+File: groff, Node: Request Arguments, Prev: Requests, Up: Requests
+
+Request Arguments
+.................
+
+ Arguments to requests (and macros) are processed much like the shell:
+The line is split into arguments according to spaces.(1) (*note Request
+Arguments-Footnote-1::) An argument which is intended to contain
+spaces can either be enclosed in double quotes, or have the spaces
+"escaped" with backslashes.
+
+ Here are a few examples:
+
+
+ .uh The Mouse Problem
+ .uh "The Mouse Problem"
+ .uh The\ Mouse\ Problem
+
+The first line is the `uh' macro being called with 3 arguments, `The',
+`Mouse', and `Problem'. The latter two have the same effect of calling
+the `uh' macro with one argument, `The Mouse Problem'.(2) (*note
+Request Arguments-Footnote-2::)
+
+ A double quote which isn't preceded by a space doesn't start a macro
+argument. If not closing a string, it is printed literally.
+
+ For example,
+
+
+ .xxx a" "b c" "de"fg"
+
+has the arguments `a"', `b c', `de', and `fg"'. Don't rely on this
+obscure behaviour!
+
+ There are two possibilities to get a double quote reliably.
+
+ * Enclose the whole argument with double quotes and use two
+ consecutive double quotes to represent a single one. This
+ traditional solution has the disadvantage that double quotes don't
+ survive argument expansion again if called in compatibility mode
+ (using the `-C' option of `groff'):
+
+
+ .de xx
+ . tm xx: `\\$1' `\\$2' `\\$3'
+ .
+ . yy "\\$1" "\\$2" "\\$3"
+ ..
+ .de yy
+ . tm yy: `\\$1' `\\$2' `\\$3'
+ ..
+ .xx A "test with ""quotes""" .
+ => xx: `A' `test with "quotes"' `.'
+ => yy: `A' `test with ' `quotes""'
+
+ If not in compatibility mode, you get the expected result
+
+
+ xx: `A' `test with "quotes"' `.'
+ yy: `A' `test with "quotes"' `.'
+
+ since `gtroff' preserves the input level.
+
+ * Use the double quote glyph `\(dq'. This works with and without
+ compatibility mode enabled since `gtroff' doesn't convert `\(dq'
+ back to a double quote input character.
+
+ Not that this method won't work with UNIX `troff' in general since
+ the glyph `dq' isn't defined normally.
+
+ Double quotes in the `ds' request are handled differently. *Note
+Strings::, for more details.
+
+
+File: groff, Node: Request Arguments-Footnotes, Up: Request Arguments
+
+ (1) Plan 9's `troff' implementation also allows tabs for argument
+separation - `gtroff' intentionally doesn't support this.
+
+ (2) The last solution, i.e., using escaped spaces, is "classical" in
+the sense that it can be found in most `troff' documents.
+Nevertheless, it is not optimal in all situations, since `\ ' inserts a
+fixed-width, non-breaking space character which can't stretch.
+`gtroff' provides a different command `\~' to insert a stretchable,
+non-breaking space.
+
+
+File: groff, Node: Macros, Next: Escapes, Prev: Requests, Up: Embedded Commands
+
+Macros
+------
+
+ `gtroff' has a "macro" facility for defining a series of lines which
+can be invoked by name. They are called in the same manner as requests
+- arguments also may be passed in the same manner.
+
+ *Note Writing Macros::, and *Note Request Arguments::.
+
+
+File: groff, Node: Escapes, Prev: Macros, Up: Embedded Commands
+
+Escapes
+-------
+
+ Escapes may occur anywhere in the input to `gtroff'. They usually
+begin with a backslash and are followed by a single character which
+indicates the function to be performed. The escape character can be
+changed; see *Note Character Translations::.
+
+ Escape sequences which require an identifier as a parameter accept
+three possible syntax forms.
+
+ * The next single character is the identifier.
+
+ * If this single character is an opening parenthesis, take the
+ following two characters as the identifier. Note that there is no
+ closing parenthesis after the identifier.
+
+ * If this single character is an opening bracket, take all characters
+ until a closing bracket as the identifier.
+
+Examples:
+
+
+ \fB
+ \n(XX
+ \*[TeX]
+
+ Other escapes may require several arguments and/or some special
+format. In such cases the argument is traditionally enclosed in single
+quotes (and quotes are always used in this manual for the definitions
+of escape sequences). The enclosed text is then processed according to
+what that escape expects. Example:
+
+
+ \l'1.5i\(bu'
+
+ Note that the quote character can be replaced with any other
+character which does not occur in the argument (even a newline or a
+space character) in the following escapes: `\o', `\b', and `\X'. This
+makes e.g.
+
+
+ A caf
+ \o
+ e\'
+
+
+ in Paris
+ => A cafe' in Paris
+
+possible, but it is better not to use this feature to avoid confusion.
+
+ The following escapes sequences (which are handled similarly to
+characters since they don't take a parameter) are also allowed as
+delimiters: `\%', `\ ', `\|', `\^', `\{', `\}', `\'', `\`', `\-', `\_',
+`\!', `\?', `\@', `\)', `\/', `\,', `\&', `\:', `\~', `\0', `\a', `\c',
+`\d', `\e', `\E', `\p', `\r', `\t', and `\u'. Again, don't use these
+if possible.
+
+ No newline characters as delimiters are allowed in the following
+escapes: `\A', `\B', `\Z', `\C', and `\w'.
+
+ Finally, the escapes `\D', `\h', `\H', `\l', `\L', `\N', `\R', `\s',
+`\S', `\v', and `\x' can't use the following characters as delimiters:
+
+ * The digits `0'-`9'.
+
+ * The (single-character) operators `+-/*%<>=&:().'.
+
+ * The space, tab, and newline characters.
+
+ * All escape sequences except `\%', `\:', `\{', `\}', `\'', `\`',
+ `\-', `\_', `\!', `\@', `\/', `\c', `\e', and `\p'.
+
+ To have a backslash (actually, the current escape character) appear
+in the output several escapes are defined: `\\', `\e' or `\E'. These
+are very similar, and only differ with respect to being used in macros
+or diversions. *Note Character Translations::, for an exact
+description of those escapes.
+
+ *Note Implementation Differences::, *Note Copy-in Mode::, and *Note
+Diversions::, *Note Identifiers::, for more information.
+
+* Menu:
+
+* Comments::
+
+
+File: groff, Node: Comments, Prev: Escapes, Up: Escapes
+
+Comments
+........
+
+ Probably one of the most(1) (*note Comments-Footnote-1::) common
+forms of escapes is the comment.
+
+ - Escape: \"
+ Start a comment. Everything to the end of the input line is
+ ignored.
+
+ This may sound simple, but it can be tricky to keep the comments
+ from interfering with the appearance of the final output.
+
+ If the escape is to the right of some text or a request, that
+ portion of the line is ignored, but the space leading up to it is
+ noticed by `gtroff'. This only affects the `ds' and `as' request
+ and its variants.
+
+ One possibly irritating idiosyncracy is that tabs must not be used
+ to line up comments. Tabs are not treated as whitespace between
+ the request and macro arguments.
+
+ A comment on a line by itself is treated as a blank line, because
+ after eliminating the comment, that is all that remains:
+
+
+ Test
+ \" comment
+ Test
+
+ produces
+
+
+ Test
+
+ Test
+
+ To avoid this, it is common to start the line with `.\"' which
+ causes the line to be treated as an undefined request and thus
+ ignored completely.
+
+ Another commenting scheme seen sometimes is three consecutive
+ single quotes (`'''') at the beginning of a line. This works, but
+ `gtroff' gives a warning about an undefined macro (namely `'''),
+ which is harmless, but irritating.
+
+ - Escape: \#
+ To avoid all this, `gtroff' has a new comment mechanism using the
+ `\#' escape. This escape works the same as `\"' except that the
+ newline is also ignored:
+
+
+ Test
+ \# comment
+ Test
+
+ produces
+
+
+ Test Test
+
+ as expected.
+
+ - Request: .ig yy
+ Ignore all input until `gtroff' encounters the macro named `.'YY
+ on a line by itself (or `..' if YY is not specified). This is
+ useful for commenting out large blocks of text:
+
+
+ text text text...
+ .ig
+ This is part of a large block
+ of text that has been
+ temporarily(?) commented out.
+
+ We can restore it simply by removing
+ the .ig request and the ".." at the
+ end of the block.
+ ..
+ More text text text...
+
+ produces
+
+
+ text text text... More text text text...
+
+ Note that the commented-out block of text does not cause a break.
+
+ The input is read in copy-mode; auto-incremented registers _are_
+ affected (*note Auto-increment::).
+
+
+File: groff, Node: Comments-Footnotes, Up: Comments
+
+ (1) Unfortunately, this is a lie. But hopefully future `gtroff'
+hackers will believe it `:-)'
+
+
+File: groff, Node: Registers, Next: Manipulating Filling and Adjusting, Prev: Embedded Commands, Up: gtroff Reference
+
+Registers
+=========
+
+ Numeric variables in `gtroff' are called "registers". There are a
+number of built-in registers, supplying anything from the date to
+details of formatting parameters.
+
+ *Note Identifiers::, for details on register identifiers.
+
+* Menu:
+
+* Setting Registers::
+* Interpolating Registers::
+* Auto-increment::
+* Assigning Formats::
+* Built-in Registers::
+
+
+File: groff, Node: Setting Registers, Next: Interpolating Registers, Prev: Registers, Up: Registers
+
+Setting Registers
+-----------------
+
+ Define or set registers using the `nr' request or the `\R' escape.
+
+ - Request: .nr ident value
+ - Escape: \R'IDENT VALUE'
+ Set number register IDENT to VALUE. If IDENT doesn't exist,
+ `gtroff' creates it.
+
+ The argument to `\R' usually has to be enclosed in quotes. *Note
+ Escapes::, for details on parameter delimiting characters.
+
+ The `\R' escape doesn't produce an input token in `gtroff'; with
+ other words, it vanishes completely after `gtroff' has processed
+ it.
+
+ For example, the following two lines are equivalent:
+
+
+ .nr a (((17 + (3 * 4))) % 4)
+ \R'a (((17 + (3 * 4))) % 4)'
+ => 1
+
+ Both `nr' and `\R' have two additional special forms to increment or
+decrement a register.
+
+ - Request: .nr ident +value
+ - Request: .nr ident -value
+ - Escape: \R'IDENT +VALUE'
+ - Escape: \R'IDENT -VALUE'
+ Increment (decrement) register IDENT by VALUE.
+
+
+ .nr a 1
+ .nr a +1
+ \na
+ => 2
+
+ To assign the negated value of a register to another register,
+ some care must be taken to get the desired result:
+
+
+ .nr a 7
+ .nr b 3
+ .nr a -\nb
+ \na
+ => 4
+ .nr a (-\nb)
+ \na
+ => -3
+
+ The surrounding parentheses prevent the interpretation of the
+ minus sign as a decrementing operator. An alternative is to start
+ the assignment with a `0':
+
+
+ .nr a 7
+ .nr b -3
+ .nr a \nb
+ \na
+ => 4
+ .nr a 0\nb
+ \na
+ => -3
+
+
+ - Request: .rr ident
+ Remove number register IDENT. If IDENT doesn't exist, the request
+ is ignored.
+
+ - Request: .rnn ident1 ident2
+ Rename number register IDENT1 to IDENT2. If either IDENT1 or
+ IDENT2 doesn't exist, the request is ignored.
+
+ - Request: .aln ident1 ident2
+ Create an alias IDENT1 for a number register IDENT2. The new name
+ and the old name are exactly equivalent. If IDENT1 is undefined,
+ a warning of type `reg' is generated, and the request is ignored.
+ *Note Debugging::, for information about warnings.
+
+
+File: groff, Node: Interpolating Registers, Next: Auto-increment, Prev: Setting Registers, Up: Registers
+
+Interpolating Registers
+-----------------------
+
+ Numeric registers can be accessed via the `\n' escape.
+
+ - Escape: \nI
+ - Escape: \n(ID
+ - Escape: \n[IDENT]
+ Interpolate number register with name IDENT (one-character name I,
+ two-character name ID). This means that the value of the register
+ is expanded in-place while `gtroff' is parsing the input line.
+ Nested assignments (also called indirect assignments) are possible.
+
+
+ .nr a 5
+ .nr as \na+\na
+ \n(as
+ => 10
+
+
+ .nr a1 5
+ .nr ab 6
+ .ds str b
+ .ds num 1
+ \n[a\n[num]]
+ => 5
+ \n[a\*[str]]
+ => 6
+
+
+
+File: groff, Node: Auto-increment, Next: Assigning Formats, Prev: Interpolating Registers, Up: Registers
+
+Auto-increment
+--------------
+
+ Number registers can also be auto-incremented and auto-decremented.
+The increment or decrement value can be specified with a third argument
+to the `nr' request or `\R' escape.
+
+ - Request: .nr ident value incr
+ Set number register IDENT to VALUE; the increment for
+ auto-incrementing is set to INCR. Note that the `\R' escape
+ doesn't support this notation.
+
+ To activate auto-incrementing, the escape `\n' has a special syntax
+form.
+
+ - Escape: \n+I
+ - Escape: \n-I
+ - Escape: \n(+ID
+ - Escape: \n(-ID
+ - Escape: \n+(ID
+ - Escape: \n-(ID
+ - Escape: \n[+IDENT]
+ - Escape: \n[-IDENT]
+ - Escape: \n+[IDENT]
+ - Escape: \n-[IDENT]
+ Before interpolating, increment or decrement IDENT (one-character
+ name I, two-character name ID) by the auto-increment value as
+ specified with the `nr' request (or the `\R' escape). If no
+ auto-increment value has been specified, these syntax forms are
+ identical to `\n'.
+
+ For example,
+
+
+ .nr a 0 1
+ .nr xx 0 5
+ .nr foo 0 -2
+ \n+a, \n+a, \n+a, \n+a, \n+a
+ .br
+ \n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
+ .br
+ \n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
+
+produces
+
+
+ 1, 2, 3, 4, 5
+ -5, -10, -15, -20, -25
+ -2, -4, -6, -8, -10
+
+ To change the increment value without changing the value of a
+register (A in the example), the following can be used:
+
+
+ .nr a \na 10
+
+
+File: groff, Node: Assigning Formats, Next: Built-in Registers, Prev: Auto-increment, Up: Registers
+
+Assigning Formats
+-----------------
+
+ When a register is used in the text of an input file (as opposed to
+part of an expression), it is textually replaced (or interpolated) with
+a representation of that number. This output format can be changed to
+a variety of formats (numbers, Roman numerals, etc.). This is done
+using the `af' request.
+
+ - Request: .af ident format
+ Change the output format of a number register. The first argument
+ IDENT is the name of the number register to be changed, and the
+ second argument FORMAT is the output format. The following output
+ formats are available:
+
+ `1'
+ Decimal arabic numbers. This is the default format: 0, 1, 2,
+ 3, ....
+
+ `0...0'
+ Decimal numbers with as many digits as specified. So, `00'
+ would result in printing numbers as 01, 02, 03, ....
+
+ In fact, any digit instead of zero will do; `gtroff' only
+ counts how many digits are specified. As a consequence,
+ `af''s default format `1' could be specified as `0' also (and
+ exactly this is returned by the `\g' escape, see below).
+
+ `I'
+ Upper-case Roman numerals: 0, I, II, III, IV, ....
+
+ `i'
+ Lower-case Roman numerals: 0, i, ii, iii, iv, ....
+
+ `A'
+ Upper-case letters: 0, A, B, C, ..., Z, AA, AB, ....
+
+ `a'
+ Lower-case letters: 0, a, b, c, ..., z, aa, ab, ....
+
+ Omitting the number register format causes a warning of type
+ `missing'. *Note Debugging::, for more details. Specifying a
+ nonexistent format causes an error.
+
+ The following example produces `10, X, j, 010':
+
+
+ .nr a 10
+ .af a 1 \" the default format
+ \na,
+ .af a I
+ \na,
+ .af a a
+ \na,
+ .af a 001
+ \na
+
+ The largest number representable for the `i' and `I' formats is
+ 39999 (or -39999); UNIX `troff' uses `z' and `w' to represent
+ 10000 and 5000 in Roman numerals, and so does `gtroff'.
+ Currently, the correct glyphs of Roman numeral five thousand and
+ Roman numeral ten thousand (Unicode code points `U+2182' and
+ `U+2181', respectively) are not available.
+
+ If IDENT doesn't exist, it is created.
+
+ Changing the output format of a read-only register causes an
+ error. It is necessary to first copy the register's value to a
+ writeable register, then apply the `af' request to this other
+ register.
+
+ - Escape: \gI
+ - Escape: \g(ID
+ - Escape: \g[IDENT]
+ Return the current format of the specified register IDENT
+ (one-character name I, two-character name ID). For example, `\ga'
+ after the previous example would produce the string `000'. If the
+ register hasn't been defined yet, nothing is returned.
+
+
+File: groff, Node: Built-in Registers, Prev: Assigning Formats, Up: Registers
+
+Built-in Registers
+------------------
+
+ The following lists some built-in registers which are not described
+elsewhere in this manual. Any register which begins with a `.' is
+read-only. A complete listing of all built-in registers can be found in
+appendix *Note Register Index::.
+
+`.F'
+ This string-valued register returns the current input file name.
+
+`.H'
+ Horizontal resolution in basic units.
+
+`.V'
+ Vertical resolution in basic units.
+
+`seconds'
+ The number of seconds after the minute, normally in the range 0
+ to 59, but can be up to 61 to allow for leap seconds. Initialized
+ at start-up of `gtroff'.
+
+`minutes'
+ The number of minutes after the hour, in the range 0 to 59.
+ Initialized at start-up of `gtroff'.
+
+`hours'
+ The number of hours past midnight, in the range 0 to 23.
+ Initialized at start-up of `gtroff'.
+
+`dw'
+ Day of the week (1-7).
+
+`dy'
+ Day of the month (1-31).
+
+`mo'
+ Current month (1-12).
+
+`year'
+ The current year.
+
+`yr'
+ The current year minus 1900. Unfortunately, the documentation of
+ UNIX Version 7's `troff' had a year 2000 bug: It incorrectly
+ claimed that `yr' contains the last two digits of the year. That
+ claim has never been true of either AT&T `troff' or GNU `troff'.
+ Old `troff' input that looks like this:
+
+
+ '\" The following line stopped working after 1999
+ This document was formatted in 19\n(yr.
+
+ can be corrected as follows:
+
+
+ This document was formatted in \n[year].
+
+ or, to be portable to older `troff' versions, as follows:
+
+
+ .nr y4 1900+\n(yr
+ This document was formatted in \n(y4.
+
+`.c'
+`c.'
+ The current _input_ line number. Register `.c' is read-only,
+ whereas `c.' (a `gtroff' extension) is writable also, affecting
+ both `.c' and `c.'.
+
+`ln'
+ The current _output_ line number after a call to the `nm' request
+ to activate line numbering.
+
+ *Note Miscellaneous::, for more information about line numbering.
+
+`.x'
+ The major version number. For example, if the version number
+ is 1.03 then `.x' contains `1'.
+
+`.y'
+ The minor version number. For example, if the version number
+ is 1.03 then `.y' contains `03'.
+
+`.Y'
+ The revision number of `groff'.
+
+`$$'
+ The process ID of `gtroff'.
+
+`.g'
+ Always 1. Macros should use this to determine whether they are
+ running under GNU `troff'.
+
+`.A'
+ If the command line option `-a' is used to produce an ASCII
+ approximation of the output, this is set to 1, zero otherwise.
+ *Note Groff Options::.
+
+`.P'
+ This register is set to 1 (and to 0 otherwise) if the current page
+ is actually being printed, i.e., if the `-o' option is being used
+ to only print selected pages. *Note Groff Options::, for more
+ information.
+
+`.T'
+ If `gtroff' is called with the `-T' command line option, the
+ number register `.T' is set to 1, and zero otherwise. *Note Groff
+ Options::.
+
+ Additionally, `gtroff' predefines a single read-write string
+ register `.T' which contains the current output device (for
+ example, `latin1' or `ps').
+
+
+File: groff, Node: Manipulating Filling and Adjusting, Next: Manipulating Hyphenation, Prev: Registers, Up: gtroff Reference
+
+Manipulating Filling and Adjusting
+==================================
+
+ Various ways of causing "breaks" were given in *Note Implicit Line
+Breaks::. The `br' request likewise causes a break. Several other
+requests also cause breaks, but implicitly. These are `bp', `ce',
+`cf', `fi', `fl', `in', `nf', `rj', `sp', `ti', and `trf'.
+
+ - Request: .br
+ Break the current line, i.e., the input collected so far is emitted
+ without adjustment.
+
+ If the no-break control character is used, `gtroff' suppresses the
+ break:
+
+
+ a
+ 'br
+ b
+ => a b
+
+
+ Initially, `gtroff' fills and adjusts text to both margins. Filling
+can be disabled via the `nf' request and re-enabled with the `fi'
+request.
+
+ - Request: .fi
+ - Register: \n[.u]
+ Activate fill mode (which is the default). This request implicitly
+ enables adjusting; it also inserts a break in the text currently
+ being filled. The read-only number register `.u' is set to 1.
+
+ The fill mode status is associated with the current environment
+ (*note Environments::).
+
+ See *Note Line Control::, for interaction with the `\c' escape.
+
+ - Request: .nf
+ Activate no-fill mode. Input lines are output as-is, retaining
+ line breaks and ignoring the current line length. This command
+ implicitly disables adjusting; it also causes a break. The number
+ register `.u' is set to 0.
+
+ The fill mode status is associated with the current environment
+ (*note Environments::).
+
+ See *Note Line Control::, for interaction with the `\c' escape.
+
+ - Request: .ad [mode]
+ - Register: \n[.j]
+ Set adjusting mode.
+
+ Activation and deactivation of adjusting is done implicitly with
+ calls to the `fi' or `nf' requests.
+
+ MODE can have one of the following values:
+
+ `l'
+ Adjust text to the left margin. This produces what is
+ traditionally called ragged-right text.
+
+ `r'
+ Adjust text to the right margin, producing ragged-left text.
+
+ `c'
+ Center filled text. This is different to the `ce' request
+ which only centers text without filling.
+
+ `b'
+ `n'
+ Justify to both margins. This is the default used by
+ `gtroff'.
+
+ With no argument, `gtroff' adjusts lines in the same way it did
+ before adjusting was deactivated (with a call to `na', for
+ example).
+
+
+ text
+ .ad r
+ text
+ .ad c
+ text
+ .na
+ text
+ .ad \" back to centering
+ text
+
+ The current adjustment mode is available in the read-only number
+ register `.j'; it can be stored and subsequently used to set
+ adjustment.
+
+ The adjustment mode status is associated with the current
+ environment (*note Environments::).
+
+ - Request: .na
+ Disable adjusting. This request won't change the current
+ adjustment mode: A subsequent call to `ad' uses the previous
+ adjustment setting.
+
+ The adjustment mode status is associated with the current
+ environment (*note Environments::).
+
+ - Request: .brp
+ - Escape: \p
+ Adjust the current line and cause a break.
+
+ In most cases this produces very ugly results since `gtroff'
+ doesn't have a sophisticated paragraph building algorithm (as TeX
+ have, for example); instead, `gtroff' fills and adjusts a paragraph
+ line by line:
+
+
+ This is an uninteresting sentence.
+ This is an uninteresting sentence.\p
+ This is an uninteresting sentence.
+
+ is formatted as
+
+
+ This is an uninteresting sentence. This is an
+ uninteresting sentence.
+ This is an uninteresting sentence.
+
+
+ - Request: .ss word_space_size [sentence_space_size]
+ - Register: \n[.ss]
+ - Register: \n[.sss]
+ Change the 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 WORD_SPACE_SIZE and
+ SENTENCE_SPACE_SIZE are 12.
+
+ If two arguments are given to the `ss' request, the second
+ argument sets the sentence space size. If the second argument is
+ not given, sentence space size is set to WORD_SPACE_SIZE. The
+ sentence space size is used in two circumstances: If the end of a
+ sentence occurs at the end of a line in fill mode, then both an
+ inter-word space and a sentence space are added; if two spaces
+ follow the end of a sentence in the middle of a line, then the
+ second space is a sentence space. If a second argument is never
+ given to the `ss' request, the behaviour of UNIX `troff' is the
+ same as that exhibited by GNU `troff'. In GNU `troff', as in UNIX
+ `troff', a sentence should always be followed by either a newline
+ or two spaces.
+
+ The read-only number registers `.ss' and `.sss' hold the values of
+ the parameters set by the first and second arguments of the `ss'
+ request.
+
+ The word space and sentence space values are associated with the
+ current environment (*note Environments::).
+
+ Contrary to AT&T `troff', this request is _not_ ignored if a TTY
+ output device is used; the given values are then rounded down to a
+ multiple of 12 (*note Implementation Differences::).
+
+ The request is ignored if there is no parameter.
+
+ - Request: .ce [nnn]
+ - Register: \n[.ce]
+ Center text. While the `.ad c' request also centers text, it
+ fills the text as well. `ce' does not fill the text it affects.
+ This request causes a break. The number of lines still to be
+ centered is associated with the current environment (*note
+ Environments::).
+
+ The following example demonstrates the differences. Here the
+ input:
+
+
+ .ll 4i
+ .ce 1000
+ This is a small text fragment which shows the differences
+ between the `.ce' and the `.ad c' request.
+ .ce 0
+
+ .ad c
+ This is a small text fragment which shows the differences
+ between the `.ce' and the `.ad c' request.
+
+ And here the result:
+
+
+ This is a small text fragment which
+ shows the differences
+ between the `.ce' and the `.ad c' request.
+
+ This is a small text fragment which
+ shows the differences between the `.ce'
+ and the `.ad c' request.
+
+ With no arguments, `ce' centers the next line of text. NNN
+ specifies the number of lines to be centered. If the argument is
+ zero or negative, centering is disabled.
+
+ The basic length for centering text is the line length (as set
+ with the `ll' request) minus the indentation (as set with the `in'
+ request). Temporary indentation is ignored.
+
+ As can be seen in the previous example, it is a common idiom to
+ turn on centering for a large number of lines, and to turn off
+ centering after text to be centered. This is useful for any
+ request which takes a number of lines as an argument.
+
+ The `.ce' read-only number register contains the number of lines
+ remaining to be centered, as set by the `ce' request.
+
+ - Request: .rj [nnn]
+ - Register: \n[.rj]
+ Justify unfilled text to the right margin. Arguments are
+ identical to the `ce' request. The `.rj' read-only number
+ register is the number of lines to be right-justified as set by
+ the `rj' request. This request causes a break. The number of
+ lines still to be right-justified is associated with the current
+ environment (*note Environments::).
+
diff --git a/contrib/groff/doc/groff-4 b/contrib/groff/doc/groff-4
new file mode 100644
index 0000000..8b6d91a
--- /dev/null
+++ b/contrib/groff/doc/groff-4
@@ -0,0 +1,1316 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+File: groff, Node: Manipulating Hyphenation, Next: Manipulating Spacing, Prev: Manipulating Filling and Adjusting, Up: gtroff Reference
+
+Manipulating Hyphenation
+========================
+
+ As discussed in *Note Hyphenation::, `gtroff' hyphenates words.
+There are a number of ways to influence hyphenation.
+
+ - Request: .hy [mode]
+ - Register: \n[.hy]
+ Enable hyphenation. The request has an optional numeric argument,
+ MODE, to restrict hyphenation if necessary:
+
+ `1'
+ The default argument if MODE is omitted. Hyphenate without
+ restrictions. This is also the start-up value of `gtroff'.
+
+ `2'
+ Do not hyphenate the last word on a page or column.
+
+ `4'
+ Do not hyphenate the last two characters of a word.
+
+ `8'
+ Do not hyphenate the first two characters of a word.
+
+ Values in the previous table are additive. For example, the
+ value 12 causes `gtroff' to neither hyphenate the last two nor the
+ first two characters of a word.
+
+ The current hyphenation restrictions can be found in the read-only
+ number register `.hy'.
+
+ The hyphenation mode is associated with the current environment
+ (*note Environments::).
+
+ - Request: .nh
+ Disable hyphenation (i.e., set the hyphenation mode to zero). Note
+ that the hyphenation mode of the last call to `hy' is not
+ remembered.
+
+ The hyphenation mode is associated with the current environment
+ (*note Environments::).
+
+ - Request: .hlm [nnn]
+ - Register: \n[.hlm]
+ - Register: \n[.hlc]
+ Set the maximum number of consecutive hyphenated lines to NNN. If
+ this number is negative, there is no maximum. The default value
+ is -1 if NNN is omitted. This value is associated with the
+ current environment (*note Environments::). Only lines output
+ from a given environment count towards the maximum associated with
+ that environment. Hyphens resulting from `\%' are counted;
+ explicit hyphens are not.
+
+ The current setting of `hlm' is available in the `.hlm' read-only
+ number register. Also the number of immediately preceding
+ consecutive hyphenated lines are available in the read-only number
+ register `.hlc'.
+
+ - Request: .hw word1 word2 ...
+ Define how WORD1, WORD2, etc. are to be hyphenated. The words
+ must be given with hyphens at the hyphenation points. For example:
+
+
+ .hw in-sa-lub-rious
+
+ Besides the space character, any character whose hyphenation code
+ value is zero can be used to separate the arguments of `hw' (see
+ the documentation for the `hcode' request below for more
+ information). In addition, this request can be used more than
+ once.
+
+ Hyphenation exceptions specified with the `hw' request are
+ associated with the current hyphenation language; it causes an
+ error if there is no current hyphenation language.
+
+ This request is ignored if there is no parameter.
+
+ In old versions of `troff' there was a limited amount of space to
+ store such information; fortunately, with `gtroff', this is no
+ longer a restriction.
+
+ - Escape: \%
+ - Escape: \:
+ To tell `gtroff' how to hyphenate words on the fly, use the `\%'
+ escape, also known as the "hyphenation character". Preceding a
+ word with this character prevents it from being hyphenated;
+ putting it inside a word indicates to `gtroff' that the word may
+ be hyphenated at that point. Note that this mechanism only
+ affects that one occurrence of the word; to change the hyphenation
+ of a word for the entire document, use the `hw' request.
+
+ The `\:' escape inserts a zero-width break point (that is, the
+ word breaks but without adding a hyphen).
+
+
+ ... check the /var/log/\:httpd/\:access_log file ...
+
+ Note that `\X' and `\Y' start a word, that is, the `\%' escape in
+ (say) ` \X'...'\%foobar' and ` \Y'...'\%foobar' no longer prevents
+ hyphenation but inserts a hyphenation point at the beginning of
+ `foobar'; most likely this isn't what you want to do.
+
+ - Request: .hc [char]
+ Change the hyphenation character to CHAR. This character then
+ works the same as the `\%' escape, and thus, no longer appears in
+ the output. Without an argument, `hc' resets the hyphenation
+ character to be `\%' (the default) only.
+
+ The hyphenation character is associated with the current
+ environment (*note Environments::).
+
+ - Request: .hpf pattern_file
+ - Request: .hpfa pattern_file
+ - Request: .hpfcode a b [c d ...]
+ Read in a file of hyphenation patterns. This file is searched for
+ in the same way as `NAME.tmac' (or `tmac.NAME') is searched for if
+ the `-mNAME' option is specified.
+
+ It should have the same format as (simple) TeX patterns files.
+ More specifically, the following scanning rules are implemented.
+
+ * A percent sign starts a comment (up to the end of the line)
+ even if preceded by a backslash.
+
+ * No support for `digraphs' like `\$'.
+
+ * `^^XX' (X is 0-9 or a-f) and `^^X' (character code of X in
+ the range 0-127) are recognized; other use of `^' causes an
+ error.
+
+ * No macro expansion.
+
+ * `hpf' checks for the expression `\patterns{...}' (possibly
+ with whitespace before and after the braces). Everything
+ between the braces is taken as hyphenation patterns.
+ Consequently, `{' and `}' are not allowed in patterns.
+
+ * Similarly, `\hyphenation{...}' gives a list of hyphenation
+ exceptions.
+
+ * `\endinput' is recognized also.
+
+ * For backwards compatibility, if `\patterns' is missing, the
+ whole file is treated as a list of hyphenation patterns (only
+ recognizing the `%' character as the start of a comment).
+
+ If no `hpf' request is specified (either in the document or in a
+ macro package), `gtroff' won't hyphenate at all.
+
+ The `hpfa' request appends a file of patterns to the current list.
+
+ The `hpfcode' request defines mapping values for character codes in
+ hyphenation patterns. `hpf' or `hpfa' then apply the mapping
+ (after reading the patterns) before replacing or appending them to
+ the current list of patterns. Its arguments are pairs of
+ character codes - integers from 0 to 255. The request maps
+ character code A to code B, code C to code D, and so on. You can
+ use character codes which would be invalid otherwise.
+
+ The set of hyphenation patterns is associated with the current
+ language set by the `hla' request. The `hpf' request is usually
+ invoked by the `troffrc' or `troffrc-end' file; by default,
+ `troffrc' loads hyphenation patterns for American English (in file
+ `hyphen.us').
+
+ A second call to `hpf' (for the same language) will replace the
+ hyphenation patterns with the new ones.
+
+ Invoking `hpf' causes an error if there is no current hyphenation
+ language.
+
+ - Request: .hcode c1 code1 c2 code2 ...
+ Set the hyphenation code of character C1 to CODE1, that of C2 to
+ CODE2, etc. A hyphenation code must be a single input character
+ (not a special character) other than a digit or a space.
+ Initially each lower-case letter (`a'-`z') has its hyphenation
+ code set to itself, and each upper-case letter (`A'-`Z') has a
+ hyphenation code which is the lower-case version of itself.
+
+ This request is ignored if it has no parameter.
+
+ - Request: .hym [length]
+ - Register: \n[.hym]
+ Set the (right) hyphenation margin to LENGTH. If the current
+ adjustment mode is not `b' or `n', the line is not hyphenated if
+ it is shorter than LENGTH. Without an argument, the hyphenation
+ margin is reset to its default value, which is 0. The default
+ scaling indicator for this request is `m'. The hyphenation margin
+ is associated with the current environment (*note Environments::).
+
+ A negative argument resets the hyphenation margin to zero, emitting
+ a warning of type `range'.
+
+ The current hyphenation margin is available in the `.hym' read-only
+ number register.
+
+ - Request: .hys [hyphenation_space]
+ - Register: \n[.hys]
+ Set the hyphenation space to HYPHENATION_SPACE. If the current
+ adjustment mode is `b' or `n', don't hyphenate the line if it can
+ be justified by adding no more than HYPHENATION_SPACE extra space
+ to each word space. Without argument, the hyphenation space is
+ set to its default value, which is 0. The default scaling
+ indicator for this request is `m'. The hyphenation space is
+ associated with the current environment (*note Environments::).
+
+ A negative argument resets the hyphenation space to zero, emitting
+ a warning of type `range'.
+
+ The current hyphenation space is available in the `.hys' read-only
+ number register.
+
+ - Request: .shc [glyph]
+ Set the "soft hyphen character" to GLYPH.(1) (*note Manipulating
+ Hyphenation-Footnote-1::) If the argument is omitted, the soft
+ hyphen character is set to the default glyph `\(hy' (this is the
+ start-up value of `gtroff' also). The soft hyphen character is
+ the glyph that is inserted when a word is hyphenated at a line
+ break. If the soft hyphen character does not exist in the font of
+ the character immediately preceding a potential break point, then
+ the line is not broken at that point. Neither definitions
+ (specified with the `char' request) nor translations (specified
+ with the `tr' request) are considered when finding the soft hyphen
+ character.
+
+ - Request: .hla language
+ - Register: \n[.hla]
+ Set the current hyphenation language to the string LANGUAGE.
+ Hyphenation exceptions specified with the `hw' request and
+ hyphenation patterns specified with the `hpf' and `hpfa' requests
+ are both associated with the current hyphenation language. The
+ `hla' request is usually invoked by the `troffrc' or the
+ `troffrc-end' files; `troffrc' sets the default language to `us'.
+
+ The current hyphenation language is available as a string in the
+ read-only number register `.hla'.
+
+
+ .ds curr_language \n[.hla]
+ \*[curr_language]
+ => us
+
+
+
+File: groff, Node: Manipulating Hyphenation-Footnotes, Up: Manipulating Hyphenation
+
+ (1) "Soft hyphen character" is a misnomer since it is an output
+glyph.
+
+
+File: groff, Node: Manipulating Spacing, Next: Tabs and Fields, Prev: Manipulating Hyphenation, Up: gtroff Reference
+
+Manipulating Spacing
+====================
+
+ - Request: .sp [distance]
+ Space downwards DISTANCE. With no argument it advances 1 line. A
+ negative argument causes `gtroff' to move up the page the
+ specified distance. If the argument is preceded by a `|' then
+ `gtroff' moves that distance from the top of the page. This
+ request causes a line break. The default scaling indicator is `v'.
+
+ - Request: .ls [nnn]
+ - Register: \n[.L]
+ Output NNN-1 blank lines after each line of text. With no
+ argument, `gtroff' uses the previous value before the last `ls'
+ call.
+
+
+ .ls 2 \" This causes double-spaced output
+ .ls 3 \" This causes triple-spaced output
+ .ls \" Again double-spaced
+
+ The line spacing is associated with the current environment (*note
+ Environments::).
+
+ The read-only number register `.L' contains the current line
+ spacing setting.
+
+ *Note Changing Type Sizes::, for the requests `vs' and `pvs' as
+alternatives to `ls'.
+
+ - Escape: \x'SPACING'
+ - Register: \n[.a]
+ Sometimes, extra vertical spacing is only needed occasionally, e.g.
+ to allow space for a tall construct (like an equation). The `\x'
+ escape does this. The escape is given a numerical argument,
+ usually enclosed in quotes (like `\x'3p''); the default scaling
+ indicator is `v'. If this number is positive extra vertical space
+ is inserted below the current line. A negative number adds space
+ above. If this escape is used multiple times on the same line,
+ the maximum of the values is used.
+
+ *Note Escapes::, for details on parameter delimiting characters.
+
+ The `.a' read-only number register contains the most recent
+ (nonnegative) extra vertical line space.
+
+ Using `\x' can be necessary in combination with the `\b' escape,
+ as the following example shows.
+
+
+ This is a test with the \[rs]b escape.
+ .br
+ This is a test with the \[rs]b escape.
+ .br
+ This is a test with \b'xyz'\x'-1m'\x'1m'.
+ .br
+ This is a test with the \[rs]b escape.
+ .br
+ This is a test with the \[rs]b escape.
+
+ produces
+
+
+ This is a test with the \b escape.
+ This is a test with the \b escape.
+ x
+ This is a test with y.
+ z
+ This is a test with the \b escape.
+ This is a test with the \b escape.
+
+
+ - Request: .ns
+ - Request: .rs
+ - Register: \n[.ns]
+ Enable "no-space mode". In this mode, spacing (either via `sp' or
+ via blank lines) is disabled. The `bp' request to advance to the
+ next page is also disabled, except if it is accompanied by a page
+ number (see *Note Page Control::, for more information). This
+ mode ends when actual text is output or the `rs' request is
+ encountered which ends no-space mode. The read-only number
+ register `.ns' is set to 1 as long as no-space mode is active.
+
+ This request is useful for macros that conditionally insert
+ vertical space before the text starts (for example, a paragraph
+ macro could insert some space except when it is the first
+ paragraph after a section header).
+
+
+File: groff, Node: Tabs and Fields, Next: Character Translations, Prev: Manipulating Spacing, Up: gtroff Reference
+
+Tabs and Fields
+===============
+
+ A tab character (ASCII char 9, EBCDIC char 5) causes a horizontal
+movement to the next tab stop (much like it did on a typewriter).
+
+ - Escape: \t
+ This escape is a non-interpreted tab character. In copy mode
+ (*note Copy-in Mode::), `\t' is the same as a real tab character.
+
+ - Request: .ta [n1 n2 ... nn T r1 r2 ... rn]
+ - Register: \n[.tabs]
+ Change tab stop positions. This request takes a series of tab
+ specifiers as arguments (optionally divided into two groups with
+ the letter `T') which indicate where each tab stop is to be
+ (overriding any previous settings).
+
+ Tab stops can be specified absolutely, i.e., as the distance from
+ the left margin. For example, the following sets 6 tab stops every
+ one inch.
+
+
+ .ta 1i 2i 3i 4i 5i 6i
+
+ Tab stops can also be specified using a leading `+' which means
+ that the specified tab stop is set relative to the previous tab
+ stop. For example, the following is equivalent to the previous
+ example.
+
+
+ .ta 1i +1i +1i +1i +1i +1i
+
+ `gtroff' supports an extended syntax to specify repeat values after
+ the `T' mark (these values are always taken as relative) - this is
+ the usual way to specify tabs set at equal intervals. The
+ following is, yet again, the same as the previous examples. It
+ does even more since it defines an infinite number of tab stops
+ separated by one inch.
+
+
+ .ta T 1i
+
+ Now we are ready to interpret the full syntax given at the
+ beginning: Set tabs at positions N1, N2, ..., NN and then set tabs
+ at NN+R1, NN+R2, ..., NN+RN and then at NN+RN+R1, NN+RN+R2, ...,
+ NN+RN+RN, and so on.
+
+ Example: `4c +6c T 3c 5c 2c' is equivalent to `4c 10c 13c 18c 20c
+ 23c 28c 30c ...'.
+
+ The material in each tab column (i.e., the column between two tab
+ stops) may be justified to the right or left or centered in the
+ column. This is specified by appending `R', `L', or `C' to the tab
+ specifier. The default justification is `L'. Example:
+
+
+ .ta 1i 2iC 3iR
+
+ Some notes:
+
+ * The default unit of the `ta' request is `m'.
+
+ * A tab stop is converted into a non-breakable horizontal
+ movement which can be neither stretched nor squeezed. For
+ example,
+
+
+ .ds foo a\tb\tc
+ .ta T 5i
+ \*[foo]
+
+ creates a single line which is a bit longer than 10 inches (a
+ string is used to show exactly where the tab characters are).
+ Now consider the following:
+
+
+ .ds bar a\tb b\tc
+ .ta T 5i
+ \*[bar]
+
+ `gtroff' first converts the tab stops of the line into
+ unbreakable horizontal movements, then splits the line after
+ the second `b' (assuming a sufficiently short line length).
+ Usually, this isn't what the user wants.
+
+ * Superfluous tabs (i.e., tab characters which do not
+ correspond to a tab stop) are ignored except the first one
+ which delimits the characters belonging to the last tab stop
+ for right-justifying or centering. Consider the following
+ example
+
+
+ .ds Z foo\tbar\tfoo
+ .ds ZZ foo\tbar\tfoobar
+ .ds ZZZ foo\tbar\tfoo\tbar
+ .ta 2i 4iR
+ \*[Z]
+ .br
+ \*[ZZ]
+ .br
+ \*[ZZZ]
+ .br
+
+ which produces the following output:
+
+
+ foo bar foo
+ foo bar foobar
+ foo bar foobar
+
+ The first line right-justifies the second `foo' relative to
+ the tab stop. The second line right-justifies `foobar'. The
+ third line finally right-justifies only `foo' because of the
+ additional tab character which marks the end of the string
+ belonging to the last defined tab stop.
+
+ * Tab stops are associated with the current environment (*note
+ Environments::).
+
+ * Calling `ta' without an argument removes all tab stops.
+
+ * The start-up value of `gtroff' is `T 0.5i' in troff mode and
+ `T 0.8i' in nroff mode (the latter is done with an explicit
+ call to the `ta' request in the file `tty.tmac'.
+
+ The read-only number register `.tabs' contains a string
+ representation of the current tab settings suitable for use as an
+ argument to the `ta' request.
+
+
+ .ds tab-string \n[.tabs]
+ \*[tab-string]
+ => T120u
+
+ The `troff' version of the Plan 9 operating system uses register
+ `.S' for the same purpose.
+
+ - Request: .tc [fill-glyph]
+ Normally `gtroff' fills the space to the next tab stop with
+ whitespace. This can be changed with the `tc' request. With no
+ argument `gtroff' reverts to using whitespace, which is the
+ default. The value of this "tab repetition character" is
+ associated with the current environment (*note Environments::).(1)
+ (*note Tabs and Fields-Footnote-1::)
+
+ - Request: .linetabs n
+ - Register: \n[.linetabs]
+ If N is missing or not zero, enable "line-tabs" mode, or disable
+ it otherwise (the default). In line-tabs mode, `gtroff' computes
+ tab distances relative to the (current) output line instead of the
+ input line.
+
+ For example, the following code:
+
+
+ .ds x a\t\c
+ .ds y b\t\c
+ .ds z c
+ .ta 1i 3i
+ \*x
+ \*y
+ \*z
+
+ in normal mode, results in the output
+
+
+ a b c
+
+ in line-tabs mode, the same code outputs
+
+
+ a b c
+
+ Line-tabs mode is associated with the current environment. The
+ read-only register `.linetabs' is set to 1 if in line-tabs mode,
+ and 0 in normal mode.
+
+* Menu:
+
+* Leaders::
+* Fields::
+
+
+File: groff, Node: Tabs and Fields-Footnotes, Up: Tabs and Fields
+
+ (1) "Tab repetition character" is a misnomer since it is an output
+glyph.
+
+
+File: groff, Node: Leaders, Next: Fields, Prev: Tabs and Fields, Up: Tabs and Fields
+
+Leaders
+-------
+
+ Sometimes it may may be desirable to use the `tc' request to fill a
+particular tab stop with a given glyph (for example dots in a table of
+contents), but also normal tab stops on the rest of the line. For this
+`gtroff' provides an alternate tab mechanism, called "leaders" which
+does just that.
+
+ A leader character (character code 1) behaves similarly to a tab
+character: It moves to the next tab stop. The only difference is that
+for this movement, the fill glyph defaults to a period character and
+not to space.
+
+ - Escape: \a
+ This escape is a non-interpreted leader character. In copy mode
+ (*note Copy-in Mode::), `\a' is the same as a real leader
+ character.
+
+ - Request: .lc [fill-glyph]
+ Declare the "leader repetition character".(1) (*note
+ Leaders-Footnote-1::) Without an argument, leaders act the same as
+ tabs (i.e., using whitespace for filling). `gtroff''s start-up
+ value is a dot (`.'). The value of the leader repetition
+ character is associated with the current environment (*note
+ Environments::).
+
+ For a table of contents, to name an example, tab stops may be
+defined so that the section number is one tab stop, the title is the
+second with the remaining space being filled with a line of dots, and
+then the page number slightly separated from the dots.
+
+
+ .ds entry 1.1\tFoo\a\t12
+ .lc .
+ .ta 1i 5i +.25i
+ \*[entry]
+
+This produces
+
+
+ 1.1 Foo.......................................... 12
+
+
+File: groff, Node: Leaders-Footnotes, Up: Leaders
+
+ (1) "Leader repetition character" is a misnomer since it is an
+output glyph.
+
+
+File: groff, Node: Fields, Prev: Leaders, Up: Tabs and Fields
+
+Fields
+------
+
+ "Fields" are a more general way of laying out tabular data. A field
+is defined as the data between a pair of "delimiting characters". It
+contains substrings which are separated by "padding characters". The
+width of a field is the distance on the _input_ line from the position
+where the field starts to the next tab stop. A padding character
+inserts stretchable space similar to TeX's `\hss' command (thus it can
+even be negative) to make the sum of all substring lengths plus the
+stretchable space equal to the field width. If more than one padding
+character is inserted, the available space is evenly distributed among
+them.
+
+ - Request: .fc [delim-char [padding-char]]
+ Define a delimiting and a padding character for fields. If the
+ latter is missing, the padding character defaults to a space
+ character. If there is no argument at all, the field mechanism is
+ disabled (which is the default). Note that contrary to e.g. the
+ tab repetition character, delimiting and padding characters are
+ _not_ associated to the current environment (*note Environments::).
+
+ Example:
+
+
+ .fc # ^
+ .ta T 3i
+ #foo^bar^smurf#
+ .br
+ #foo^^bar^smurf#
+
+ and here the result:
+
+
+ foo bar smurf
+ foo bar smurf
+
+
+
+File: groff, Node: Character Translations, Next: Troff and Nroff Mode, Prev: Tabs and Fields, Up: gtroff Reference
+
+Character Translations
+======================
+
+ The control character (`.') and the no-break control character (`'')
+can be changed with the `cc' and `c2' requests, respectively.
+
+ - Request: .cc [c]
+ Set the control character to C. With no argument the default
+ control character `.' is restored. The value of the control
+ character is associated with the current environment (*note
+ Environments::).
+
+ - Request: .c2 [c]
+ Set the no-break control character to C. With no argument the
+ default control character `'' is restored. The value of the
+ no-break control character is associated with the current
+ environment (*note Environments::).
+
+ - Request: .eo
+ Disable the escape mechanism completely. After executing this
+ request, the backslash character `\' no longer starts an escape
+ sequence.
+
+ This request can be very helpful in writing macros since it is not
+ necessary then to double the escape character. Here an example:
+
+
+ .\" This is a simplified version of the
+ .\" .BR request from the man macro package
+ .eo
+ .de BR
+ . ds result \&
+ . while (\n[.$] >= 2) \{\
+ . as result \fB\$1\fR\$2
+ . shift 2
+ . \}
+ . if \n[.$] .as result \fB\$1
+ \*[result]
+ . ft R
+ ..
+ .ec
+
+
+ - Request: .ec [c]
+ Set the escape character to C. With no argument the default
+ escape character `\' is restored. It can be also used to
+ re-enable the escape mechanism after an `eo' request.
+
+ Note that changing the escape character globally will likely break
+ macro packages since `gtroff' has no mechanism to `intern' macros,
+ i.e., to convert a macro definition into an internal form which is
+ independent of its representation (TeX has this mechanism). If a
+ macro is called, it is executed literally.
+
+ - Request: .ecs
+ - Request: .ecr
+ The `ecs' request saves the current escape character in an
+ internal register. Use this request in combination with the `ec'
+ request to temporarily change the escape character.
+
+ The `ecr' request restores the escape character saved with `ecs'.
+ Without a previous call to `ecs', this request sets the escape
+ character to `\'.
+
+ - Escape: \\
+ - Escape: \e
+ - Escape: \E
+ Print the current escape character (which is the backslash
+ character `\' by default).
+
+ `\\' is a `delayed' backslash; more precisely, it is the default
+ escape character followed by a backslash, which no longer has
+ special meaning due to the leading escape character. It is _not_
+ an escape sequence in the usual sense! In any unknown escape
+ sequence `\X' the escape character is ignored and X is printed.
+ But if X is equal to the current escape character, no warning is
+ emitted.
+
+ As a consequence, only at top-level or in a diversion a backslash
+ glyph is printed; in copy-in mode, it expands to a single
+ backslash which then combines with the following character to an
+ escape sequence.
+
+ The `\E' escape differs from `\e' by printing an escape character
+ that is not interpreted in copy mode. Use this to define strings
+ with escapes that work when used in copy mode (for example, as a
+ macro argument). The following example defines strings to begin
+ and end a superscript:
+
+
+ .ds { \v'-.3m'\s'\Es[.s]*60/100'
+ .ds } \s0\v'.3m'
+
+ Another example to demonstrate the differences between the various
+ escape sequences, using a strange escape character, `-'.
+
+
+ .ec -
+ .de xxx
+ --A'123'
+ ..
+ .xxx
+ => -A'foo'
+
+ The result is surprising for most users, expecting `1' since `foo'
+ is a valid identifier. What has happened? As mentioned above,
+ the leading escape character makes the following character
+ ordinary. Written with the default escape character the sequence
+ `--' becomes `\-' - this is the minus sign.
+
+ If the escape character followed by itself is a valid escape
+ sequence, only `\E' yields the expected result:
+
+
+ .ec -
+ .de xxx
+ -EA'123'
+ ..
+ .xxx
+ => 1
+
+
+ - Escape: \.
+ Similar to `\\', the sequence `\.' isn't a real escape sequence.
+ As before, a warning message is suppressed if the escape character
+ is followed by a dot, and the dot itself is printed.
+
+
+ .de foo
+ . nop foo
+ .
+ . de bar
+ . nop bar
+ \\..
+ .
+ ..
+ .foo
+ .bar
+ => foo bar
+
+ The first backslash is consumed while the macro is read, and the
+ second is swallowed while exexuting macro `foo'.
+
+ A "translation" is a mapping of an input character to an output
+glyph. The mapping occurs at output time, i.e., the input character
+gets assigned the metric information of the mapped output character
+right before input tokens are converted to nodes (*note Gtroff
+Internals::, for more on this process).
+
+ - Request: .tr abcd...
+ - Request: .trin abcd...
+ Translate character A to glyph B, character C to glyph D, etc. If
+ there is an odd number of arguments, the last one is translated to
+ an unstretchable space (`\ ').
+
+ The `trin' request is identical to `tr', but when you unformat a
+ diversion with `asciify' it ignores the translation. *Note
+ Diversions::, for details about the `asciify' request.
+
+ Some notes:
+
+ * Special characters (`\(XX', `\[XXX]', `\C'XXX'', `\'', `\`',
+ `\-', `\_'), glyphs defined with the `char' request, and
+ numbered glyphs (`\N'XXX'') can be translated also.
+
+ * The `\e' escape can be translated also.
+
+ * Characters can be mapped onto the `\%' and `\~' escapes (but
+ `\%' and `\~' can't be mapped onto another glyph).
+
+ * The following characters can't be translated: space (with one
+ exception, see below), backspace, newline, leader (and `\a'),
+ tab (and `\t').
+
+ * Translations are not considered for finding the soft hyphen
+ character set with the `shc' request.
+
+ * The pair `C\&' (this is an arbitrary character C followed by
+ the zero width space character) maps this character to
+ nothing.
+
+
+ .tr a\&
+ foo bar
+ => foo br
+
+ It is even possible to map the space character to nothing:
+
+
+ .tr aa \&
+ foo bar
+ => foobar
+
+ As shown in the example, the space character can't be the
+ first character/glyph pair as an argument of `tr'.
+ Additionally, it is not possible to map the space character
+ to any other glyph; requests like `.tr aa x' undo `.tr aa \&'
+ instead.
+
+ If justification is active, lines are justified in spite of
+ the `empty' space character (but there is no minimal
+ distance, i.e. the space character, between words).
+
+ * After an output glyph has been constructed (this happens at
+ the moment immediately before the glyph is appended to an
+ output glyph list, either by direct output, in a macro,
+ diversion, or string), it is no longer affected by `tr'.
+
+ * Translating character to glyphs where one of them or both are
+ undefined is possible also; `tr' does not check whether the
+ entities in its argument do exist.
+
+ *Note Gtroff Internals::.
+
+ * `troff' no longer has a hard-coded dependency on Latin-1; all
+ `charXXX' entities have been removed from the font
+ description files. This has a notable consequence which
+ shows up in warnings like `can't find character with input
+ code XXX' if the `tr' request isn't handled properly.
+
+ Consider the following translation:
+
+
+ .tr e'E'
+
+ This maps input character `e'' onto glyph `E'', which is
+ identical to glyph `char201'. But this glyph intentionally
+ doesn't exist! Instead, `\[char201]' is treated as an input
+ character entity and is by default mapped onto `\['E]', and
+ `gtroff' doesn't handle translations of translations.
+
+ The right way to write the above translation is
+
+
+ .tr e'\['E]
+
+ With other words, the first argument of `tr' should be an
+ input character or entity, and the second one a glyph entity.
+
+ * Without an argument, the `tr' request is ignored.
+
+ - Request: .trnt abcd...
+ `trnt' is the same as the `tr' request except that the
+ translations do not apply to text that is transparently throughput
+ into a diversion with `\!'. *Note Diversions::, for more
+ information.
+
+ For example,
+
+
+ .tr ab
+ .di x
+ \!.tm a
+ .di
+ .x
+
+ prints `b' to the standard error stream; if `trnt' is used instead
+ of `tr' it prints `a'.
+
+
+File: groff, Node: Troff and Nroff Mode, Next: Line Layout, Prev: Character Translations, Up: gtroff Reference
+
+Troff and Nroff Mode
+====================
+
+ Originally, `nroff' and `troff' were two separate programs, the
+former for TTY output, the latter for everything else. With GNU
+`troff', both programs are merged into one executable, sending its
+output to a device driver (`grotty' for TTY devices, `grops' for
+POSTSCRIPT, etc.) which interprets the intermediate output of `gtroff'.
+For UNIX `troff' it makes sense to talk about "Nroff mode" and "Troff
+mode" since the differences are hardcoded. For GNU `troff', this
+distinction is not appropriate because `gtroff' simply takes the
+information given in the font files for a particular device without
+handling requests specially if a TTY output device is used.
+
+ Usually, a macro package can be used with all output devices.
+Nevertheless, it is sometimes necessary to make a distinction between
+TTY and non-TTY devices: `gtroff' provides two built-in conditions `n'
+and `t' for the `if', `ie', and `while' requests to decide whether
+`gtroff' shall behave like `nroff' or like `troff'.
+
+ - Request: .troff
+ Make the `t' built-in condition true (and the `n' built-in
+ condition false) for `if', `ie', and `while' conditional requests.
+ This is the default if `gtroff' (_not_ `groff') is started with
+ the `-R' switch to avoid loading of the start-up files `troffrc'
+ and `troffrc-end'. Without `-R', `gtroff' stays in troff mode if
+ the output device is not a TTY (e.g. `ps').
+
+ - Request: .nroff
+ Make the `n' built-in condition true (and the `t' built-in
+ condition false) for `if', `ie', and `while' conditional requests.
+ This is the default if `gtroff' uses a TTY output device; the
+ code for switching to nroff mode is in the file `tty.tmac' which
+ is loaded by the start-up file `troffrc'.
+
+ *Note Conditionals and Loops::, for more details on built-in
+conditions.
+
+
+File: groff, Node: Line Layout, Next: Line Control, Prev: Troff and Nroff Mode, Up: gtroff Reference
+
+Line Layout
+===========
+
+ The following drawing shows the dimensions which `gtroff' uses for
+placing a line of output onto the page. They are labeled with the
+request which manipulates each dimension.
+
+
+ -->| in |<--
+ |<-----------ll------------>|
+ +----+----+----------------------+----+
+ | : : : |
+ +----+----+----------------------+----+
+ -->| po |<--
+ |<--------paper width---------------->|
+
+These dimensions are:
+
+`po'
+ "Page offset" - this is the leftmost position of text on the final
+ output, defining the "left margin".
+
+`in'
+ "Indentation" - this is the distance from the left margin where
+ text is printed.
+
+`ll'
+ "Line length" - this is the distance from the left margin to right
+ margin.
+
+ A simple demonstration:
+
+
+ .ll 3i
+ This is text without indentation.
+ The line length has been set to 3\~inch.
+ .in +.5i
+ .ll -.5i
+ Now the left and right margins are both increased.
+ .in
+ .ll
+ Calling .in and .ll without parameters restore
+ the previous values.
+
+ Result:
+
+
+ This is text without indenta-
+ tion. The line length has
+ been set to 3 inch.
+ Now the left and
+ right margins are
+ both increased.
+ Calling .in and .ll without
+ parameters restore the previ-
+ ous values.
+
+ - Request: .po [offset]
+ - Request: .po +offset
+ - Request: .po -offset
+ - Register: \n[.o]
+ Set horizontal page offset to OFFSET (or increment or decrement
+ the current value by OFFSET). Note that this request does not
+ cause a break, so changing the page offset in the middle of text
+ being filled may not yield the expected result. The initial value
+ is 1i. For TTY output devices, it is set to 0 in the startup file
+ `troffrc'; the default scaling indicator is `m' (and not `v' as
+ incorrectly documented in the original UNIX troff manual).
+
+ The current page offset can be found in the read-only number
+ register `.o'.
+
+ If `po' is called without an argument, the page offset is reset to
+ the previous value before the last call to `po'.
+
+
+ .po 3i
+ \n[.o]
+ => 720
+ .po -1i
+ \n[.o]
+ => 480
+ .po
+ \n[.o]
+ => 720
+
+
+ - Request: .in [indent]
+ - Request: .in +indent
+ - Request: .in -indent
+ - Register: \n[.i]
+ Set indentation to INDENT (or increment or decrement the current
+ value by INDENT). This request causes a break. Initially, there
+ is no indentation.
+
+ If `in' is called without an argument, the indentation is reset to
+ the previous value before the last call to `in'. The default
+ scaling indicator is `m'.
+
+ The indentation is associated with the current environment (*note
+ Environments::).
+
+ If a negative indentation value is specified (which is not
+ allowed), `gtroff' emits a warning of type `range' and sets the
+ indentation to zero.
+
+ The effect of `in' is delayed until a partially collected line (if
+ it exists) is output. A temporary indent value is reset to zero
+ also.
+
+ The current indentation (as set by `in') can be found in the
+ read-only number register `.i'.
+
+ - Request: .ti offset
+ - Request: .ti +offset
+ - Request: .ti -offset
+ - Register: \n[.in]
+ Temporarily indent the next output line by OFFSET. If an
+ increment or decrement value is specified, adjust the temporary
+ indentation relative to the value set by the `in' request.
+
+ This request causes a break; its value is associated with the
+ current environment (*note Environments::). The default scaling
+ indicator is `m'. A call of `ti' without an argument is ignored.
+
+ If the total indentation value is negative (which is not allowed),
+ `gtroff' emits a warning of type `range' and sets the temporary
+ indentation to zero. `Total indentation' is either OFFSET if
+ specified as an absolute value, or the temporary plus normal
+ indentation, if OFFSET is given as a relative value.
+
+ The effect of `ti' is delayed until a partially collected line (if
+ it exists) is output.
+
+ The read-only number register `.in' is the indentation that applies
+ to the current output line.
+
+ The difference between `.i' and `.in' is that the latter takes
+ into account whether a partially collected line still uses the old
+ indentation value or a temporary indentation value is active.
+
+ - Request: .ll [length]
+ - Request: .ll +length
+ - Request: .ll -length
+ - Register: \n[.l]
+ - Register: \n[.ll]
+ Set the line length to LENGTH (or increment or decrement the
+ current value by LENGTH). Initially, the line length is set to
+ 6.5i. The effect of `ll' is delayed until a partially collected
+ line (if it exists) is output. The default scaling indicator is
+ `m'.
+
+ If `ll' is called without an argument, the line length is reset to
+ the previous value before the last call to `ll'. If a negative
+ line length is specified (which is not allowed), `gtroff' emits a
+ warning of type `range' and sets the line length to zero.
+
+ The line length is associated with the current environment (*note
+ Environments::).
+
+ The current line length (as set by `ll') can be found in the
+ read-only number register `.l'. The read-only number register
+ `.ll' is the line length that applies to the current output line.
+
+ Similar to `.i' and `.in', the difference between `.l' and `.ll'
+ is that the latter takes into account whether a partially
+ collected line still uses the old line length value.
+
+
+File: groff, Node: Line Control, Next: Page Layout, Prev: Line Layout, Up: gtroff Reference
+
+Line Control
+============
+
+ It is important to understand how `gtroff' handles input and output
+lines.
+
+ Many escapes use positioning relative to the input line. For
+example, this
+
+
+ This is a \h'|1.2i'test.
+
+ This is a
+ \h'|1.2i'test.
+
+produces
+
+
+ This is a test.
+
+ This is a test.
+
+ The main usage of this feature is to define macros which act exactly
+at the place where called.
+
+
+ .\" A simple macro to underline a word
+ .de underline
+ . nop \\$1\l'|0\[ul]'
+ ..
+
+In the above example, `|0' specifies a negative distance from the
+current position (at the end of the just emitted argument `\$1') back
+to the beginning of the input line. Thus, the `\l' escape draws a line
+from right to left.
+
+ `gtroff' makes a difference between input and output line
+continuation; the latter is also called "interrupting" a line.
+
+ - Escape: \<RET>
+ - Escape: \c
+ - Register: \n[.int]
+ Continue a line. `\<RET>' (this is a backslash at the end of a
+ line immediately followed by a newline) works on the input level,
+ suppressing the effects of the following newline in the input.
+
+
+ This is a \
+ .test
+ => This is a .test
+
+ The `|' operator is also affected.
+
+ `\c' works on the output level. Anything after this escape on the
+ same line is ignored, except `\R' which works as usual. Anything
+ before `\c' on the same line will be appended to the current
+ partial output line. The next non-command line after an
+ interrupted line counts as a new input line.
+
+ The visual results depend on whether no-fill mode is active.
+
+ * If no-fill mode is active (using the `nf' request), the next
+ input text line after `\c' will be handled as a continuation
+ of the same input text line.
+
+
+ .nf
+ This is a \c
+ test.
+ => This is a test.
+
+ * If fill mode is active (using the `fi' request), a word
+ interrupted with `\c' will be continued with the text on the
+ next input text line, without an intervening space.
+
+
+ This is a te\c
+ st.
+ => This is a test.
+
+
+ Note that an intervening control line which causes a break is
+ stronger than `\c', flushing out the current partial line in the
+ usual way.
+
+ The `.int' register contains a positive value if the last output
+ line was interrupted with `\c'; this is associated with the
+ current environment (*note Environments::).
+
+
+
+File: groff, Node: Page Layout, Next: Page Control, Prev: Line Control, Up: gtroff Reference
+
+Page Layout
+===========
+
+ `gtroff' provides some very primitive operations for controlling
+page layout.
+
+ - Request: .pl [length]
+ - Request: .pl +length
+ - Request: .pl -length
+ - Register: \n[.p]
+ Set the "page length" to LENGTH (or increment or decrement the
+ current value by LENGTH). This is the length of the physical
+ output page. The default scaling indicator is `v'.
+
+ The current setting can be found in the read-only number register
+ `.p'.
+
+ Note that this only specifies the size of the page, not the top and
+ bottom margins. Those are not set by `gtroff' directly. *Note
+ Traps::, for further information on how to do this.
+
+ Negative `pl' values are possible also, but not very useful: No
+ trap is sprung, and each line is output on a single page (thus
+ suppressing all vertical spacing).
+
+ If no argument or an invalid argument is given, `pl' sets the page
+ length to 11i.
+
+ `gtroff' provides several operations which help in setting up top
+and bottom titles (or headers and footers).
+
+ - Request: .tl 'left'center'right'
+ Print a "title line". It consists of three parts: a left
+ justified portion, a centered portion, and a right justified
+ portion. The argument separator `'' can be replaced with any
+ character not occurring in the title line. The `%' character is
+ replaced with the current page number. This character can be
+ changed with the `pc' request (see below).
+
+ Without argument, `tl' is ignored.
+
+ Some notes:
+
+ * A title line is not restricted to the top or bottom of a page.
+
+ * `tl' prints the title line immediately, ignoring a partially
+ filled line (which stays untouched).
+
+ * It is not an error to omit closing delimiters. For example,
+ `.tl /foo' is equivalent to `.tl /foo///': It prints a title
+ line with the left justified word `foo'; the centered and
+ right justfied parts are empty.
+
+ * `tl' accepts the same parameter delimiting characters as the
+ `\A' escape; see *Note Escapes::.
+
+ - Request: .lt [length]
+ - Request: .lt +length
+ - Request: .lt -length
+ - Register: \n[.lt]
+ The title line is printed using its own line length, which is
+ specified (or incremented or decremented) with the `lt' request.
+ Initially, the title line length is set to 6.5i. If a negative
+ line length is specified (which is not allowed), `gtroff' emits a
+ warning of type `range' and sets the title line length to zero.
+ The default scaling indicator is `m'. If `lt' is called without
+ an argument, the title length is reset to the previous value
+ before the last call to `lt'.
+
+ The current setting of this is available in the `.lt' read-only
+ number register; it is associated with the current environment
+ (*note Environments::).
+
+
+ - Request: .pn page
+ - Request: .pn +page
+ - Request: .pn -page
+ - Register: \n[.pn]
+ Change (increase or decrease) the page number of the _next_ page.
+ The only argument is the page number; the request is ignored
+ without a parameter.
+
+ The read-only number register `.pn' contains the number of the next
+ page: either the value set by a `pn' request, or the number of the
+ current page plus 1.
+
+ - Register: \n[%]
+ A read-write register holding the current page number.
+
+ - Request: .pc [char]
+ Change the page number character (used by the `tl' request) to a
+ different character. With no argument, this mechanism is disabled.
+ Note that this doesn't affect the number register `%'.
+
+ *Note Traps::.
+
diff --git a/contrib/groff/doc/groff-5 b/contrib/groff/doc/groff-5
new file mode 100644
index 0000000..3a93483
--- /dev/null
+++ b/contrib/groff/doc/groff-5
@@ -0,0 +1,1185 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+File: groff, Node: Page Control, Next: Fonts, Prev: Page Layout, Up: gtroff Reference
+
+Page Control
+============
+
+ - Request: .bp [page]
+ - Request: .bp +page
+ - Request: .bp -page
+ Stop processing the current page and move to the next page. This
+ request causes a break. It can also take an argument to set
+ (increase, decrease) the page number of the next page. The only
+ difference between `bp' and `pn' is that `pn' does not cause a
+ break or actually eject a page.
+
+
+ .de newpage \" define macro
+ 'bp \" begin page
+ 'sp .5i \" vertical space
+ .tl 'left top'center top'right top' \" title
+ 'sp .3i \" vertical space
+ .. \" end macro
+
+ `bp' has no effect if not called within the top-level diversion
+ (*note Diversions::).
+
+ - Request: .ne [space]
+ It is often necessary to force a certain amount of space before a
+ new page occurs. This is most useful to make sure that there is
+ not a single "orphan" line left at the bottom of a page. The `ne'
+ request ensures that there is a certain distance, specified by the
+ first argument, before the next page is triggered (see *Note
+ Traps::, for further information). The default scaling indicator
+ for `ne' is `v'; the default value of SPACE is 1v if no argument
+ is given.
+
+ For example, to make sure that no fewer than 2 lines get orphaned,
+ do the following before each paragraph:
+
+
+ .ne 2
+ text text text
+
+ `ne' will then automatically cause a page break if there is space
+ for one line only.
+
+ - Request: .sv [space]
+ - Request: .os
+ `sv' is similar to the `ne' request; it reserves the specified
+ amount of vertical space. If the desired amount of space exists
+ before the next trap (or the bottom page boundary if no trap is
+ set), the space is output immediately (ignoring a partially filled
+ line which stays untouched). If there is not enough space, it is
+ stored for later output via the `os' request. The default value
+ is 1v if no argument is given; the default scaling indicator is
+ `v'.
+
+ Both `sv' and `os' ignore no-space mode. While the `sv' request
+ allows negative values for SPACE, `os' will ignore them.
+
+ - Register: \n[nl]
+ This register contains the current vertical position. If the
+ vertical position is zero and the top of page transition hasn't
+ happened yet, `nl' is set to negative value. `gtroff' itself does
+ this at the very beginning of a document before anything has been
+ printed, but the main usage is to plant a header trap on a page if
+ this page has already started.
+
+ Consider the following:
+
+
+ .de xxx
+ . sp
+ . tl ''Header''
+ . sp
+ ..
+ .
+ First page.
+ .bp
+ .wh 0 xxx
+ .nr nl (-1)
+ Second page.
+
+ Result:
+
+
+ First page.
+
+ ...
+
+ Header
+
+ Second page.
+
+ ...
+
+ Without resetting `nl' to a negative value, the just planted trap
+ would be active beginning with the _next_ page, not the current
+ one.
+
+ *Note Diversions::, for a comparison with the `.h' and `.d'
+ registers.
+
+
+File: groff, Node: Fonts, Next: Sizes, Prev: Page Control, Up: gtroff Reference
+
+Fonts
+=====
+
+ `gtroff' can switch fonts at any point in the text.
+
+ The basic set of fonts is `R', `I', `B', and `BI'. These are Times
+Roman, Italic, Bold, and Bold Italic. For non-TTY devices, there is
+also at least one symbol font which contains various special symbols
+(Greek, mathematics).
+
+* Menu:
+
+* Changing Fonts::
+* Font Families::
+* Font Positions::
+* Using Symbols::
+* Special Fonts::
+* Artificial Fonts::
+* Ligatures and Kerning::
+
+
+File: groff, Node: Changing Fonts, Next: Font Families, Prev: Fonts, Up: Fonts
+
+Changing Fonts
+--------------
+
+ - Request: .ft [font]
+ - Escape: \fF
+ - Escape: \f(FN
+ - Escape: \f[FONT]
+ The `ft' request and the `\f' escape change the current font to
+ FONT (one-character name F, two-character name FN).
+
+ If FONT is a style name (as set with the `sty' request or with the
+ `styles' command in the `DESC' file), use it within the current
+ font family (as set with the `fam' request, `\F' escape, or with
+ the `family' command in the `DESC' file).
+
+ With no argument or using `P' as an argument, `.ft' switches to
+ the previous font. Use `\f[]' to do this with the escape. The
+ old syntax forms `\fP' or `\f[P]' are also supported.
+
+ Fonts are generally specified as upper-case strings, which are
+ usually 1 to 4 characters representing an abbreviation or acronym
+ of the font name. This is no limitation, just a convention.
+
+ The example below produces two identical lines.
+
+
+ eggs, bacon,
+ .ft B
+ spam
+ .ft
+ and sausage.
+
+ eggs, bacon, \fBspam\fP and sausage.
+
+ Note that `\f' doesn't produce an input token in `gtroff'. As a
+ consequence, it can be used in requests like `mc' (which expects a
+ single character as an argument) to change the font on the fly:
+
+
+ .mc \f[I]x\f[]
+
+ *Note Font Positions::, for an alternative syntax.
+
+ - Request: .ftr f [g]
+ Translate font F to font G. Whenever a font named F is referred
+ to in a `\f' escape sequence, or in the `ft', `ul', `bd', `cs',
+ `tkf', `special', `fspecial', `fp', or `sty' requests, font G is
+ used. If G is missing or equal to F the translation is undone.
+
+
+File: groff, Node: Font Families, Next: Font Positions, Prev: Changing Fonts, Up: Fonts
+
+Font Families
+-------------
+
+ Due to the variety of fonts available, `gtroff' has added the
+concept of "font families" and "font styles". The fonts are specified
+as the concatenation of the font family and style. Specifying a font
+without the family part causes `gtroff' to use that style of the
+current family.
+
+ Currently, fonts for the devices `-Tps', `-Tdvi', and `-Tlbp' are
+set up to this mechanism. By default, `gtroff' uses the Times family
+with the four styles `R', `I', `B', and `BI'.
+
+ This way, it is possible to use the basic four fonts and to select a
+different font family on the command line (*note Groff Options::).
+
+ - Request: .fam [family]
+ - Register: \n[.fam]
+ - Escape: \FF
+ - Escape: \F(FM
+ - Escape: \F[FAMILY]
+ - Register: \n[.fn]
+ Switch font family to FAMILY (one-character name F, two-character
+ name FM). If no argument is given, switch back to the previous
+ font family. Use `\F[]' to do this with the escape. Note that
+ `\FP' doesn't work; it selects font family `P' instead.
+
+ The value at start-up is `T'. The current font family is
+ available in the read-only number register `.fam' (this is a
+ string-valued register); it is associated with the current
+ environment.
+
+
+ spam,
+ .fam H \" helvetica family
+ spam, \" used font is family H + style R = HR
+ .ft B \" family H + style B = font HB
+ spam,
+ .fam T \" times family
+ spam, \" used font is family T + style B = TB
+ .ft AR \" font AR (not a style)
+ baked beans,
+ .ft R \" family T + style R = font TR
+ and spam.
+
+ Note that `\F' doesn't produce an input token in `gtroff'. As a
+ consequence, it can be used in requests like `mc' (which expects a
+ single character as an argument) to change the font family on the
+ fly:
+
+
+ .mc \F[P]x\F[]
+
+ The `.fn' register contains the current "real font name" of the
+ current font. This is a string-valued register. If the current
+ font is a style, the value of `\n[.fn]' is the proper
+ concatenation of family and style name.
+
+ - Request: .sty n style
+ Associate STYLE with font position N. A font position can be
+ associated either with a font or with a style. The current font
+ is the index of a font position and so is also either a font or a
+ style. If it is a style, the font that is actually used is the
+ font which name is the concatenation of the name of the current
+ family and the name of the current style. For example, if the
+ current font is 1 and font position 1 is associated with style `R'
+ and the current font family is `T', then font `TR' will be used.
+ If the current font is not a style, then the current family is
+ ignored. If the requests `cs', `bd', `tkf', `uf', or `fspecial'
+ are applied to a style, they will instead be applied to the member
+ of the current family corresponding to that style.
+
+ N must be a non-negative integer value.
+
+ The default family can be set with the `-f' option (*note Groff
+ Options::). The `styles' command in the `DESC' file controls
+ which font positions (if any) are initially associated with styles
+ rather than fonts. For example, the default setting for
+ POSTSCRIPT fonts
+
+
+ styles R I B BI
+
+ is equivalent to
+
+
+ .sty 1 R
+ .sty 2 I
+ .sty 3 B
+ .sty 4 BI
+
+ `fam' and `\F' always check whether the current font position is
+ valid; this can give surprising results if the current font
+ position is associated with a style.
+
+ In the following example, we want to access the POSTSCRIPT font
+ `FooBar' from the font family `Foo':
+
+
+ .sty \n[.fp] Bar
+ .fam Foo
+ => warning: can't find font `FooR'
+
+ The default font position at start-up is 1; for the POSTSCRIPT
+ device, this is associated with style `R', so `gtroff' tries to
+ open `FooR'.
+
+ A solution to this problem is to use a dummy font like the
+ following:
+
+
+ .fp 0 dummy TR \" set up dummy font at position 0
+ .sty \n[.fp] Bar \" register style `Bar'
+ .ft 0 \" switch to font at position 0
+ .fam Foo \" activate family `Foo'
+ .ft Bar \" switch to font `FooBar'
+
+ *Note Font Positions::.
+
+
+File: groff, Node: Font Positions, Next: Using Symbols, Prev: Font Families, Up: Fonts
+
+Font Positions
+--------------
+
+ For the sake of old phototypesetters and compatibility with old
+versions of `troff', `gtroff' has the concept of font "positions", on
+which various fonts are mounted.
+
+ - Request: .fp pos font [external-name]
+ - Register: \n[.f]
+ - Register: \n[.fp]
+ Mount font FONT at position POS (which must be a non-negative
+ integer). This numeric position can then be referred to with font
+ changing commands. When `gtroff' starts it is using font
+ position 1 (which must exist; position 0 is unused usually at
+ start-up).
+
+ The current font in use, as a font position, is available in the
+ read-only number register `.f'. This can be useful to remember the
+ current font for later recall. It is associated with the current
+ environment (*note Environments::).
+
+
+ .nr save-font \n[.f]
+ .ft B
+ ... text text text ...
+ .ft \n[save-font]
+
+ The number of the next free font position is available in the
+ read-only number register `.fp'. This is useful when mounting a
+ new font, like so:
+
+
+ .fp \n[.fp] NEATOFONT
+
+ Fonts not listed in the `DESC' file are automatically mounted on
+ the next available font position when they are referenced. If a
+ font is to be mounted explicitly with the `fp' request on an unused
+ font position, it should be mounted on the first unused font
+ position, which can be found in the `.fp' register. Although
+ `gtroff' does not enforce this strictly, it is not allowed to
+ mount a font at a position whose number is much greater (approx.
+ 1000 positions) than that of any currently used position.
+
+ The `fp' request has an optional third argument. This argument
+ gives the external name of the font, which is used for finding the
+ font description file. The second argument gives the internal
+ name of the font which is used to refer to the font in `gtroff'
+ after it has been mounted. If there is no third argument then the
+ internal name is used as the external name. This feature makes it
+ possible to use fonts with long names in compatibility mode.
+
+ Both the `ft' request and the `\f' escape have alternative syntax
+forms to access font positions.
+
+ - Request: .ft nnn
+ - Escape: \fN
+ - Escape: \f(NN
+ - Escape: \f[NNN]
+ Change the current font position to NNN (one-digit position N,
+ two-digit position NN), which must be a non-negative integer.
+
+ If NNN is associated with a style (as set with the `sty' request
+ or with the `styles' command in the `DESC' file), use it within
+ the current font family (as set with the `fam' request, the `\F'
+ escape, or with the `family' command in the `DESC' file).
+
+
+ this is font 1
+ .ft 2
+ this is font 2
+ .ft \" switch back to font 1
+ .ft 3
+ this is font 3
+ .ft
+ this is font 1 again
+
+ *Note Changing Fonts::, for the standard syntax form.
+
+
+File: groff, Node: Using Symbols, Next: Special Fonts, Prev: Font Positions, Up: Fonts
+
+Using Symbols
+-------------
+
+ A "glyph" is a graphical representation of a "character". While a
+character is an abstract entity containing semantic information, a
+glyph is something which can be actually seen on screen or paper. It
+is possible that a character has multiple glyph representation forms
+(for example, the character `A' can be either written in a roman or an
+italic font, yielding two different glyphs); sometimes more than one
+character maps to a single glyph (this is a "ligature" - the most
+common is `fi').
+
+ A "symbol" is simply a named glyph. Within `gtroff', all glyph
+names of a particular font are defined in its font file. If the user
+requests a glyph not available in this font, `gtroff' looks up an
+ordered list of "special fonts". By default, the POSTSCRIPT output
+device supports the two special fonts `SS' (slanted symbols) and `S'
+(symbols) (the former is looked up before the latter). Other output
+devices use different names for special fonts. Fonts mounted with the
+`fonts' keyword in the `DESC' file are globally available. To install
+additional special fonts locally (i.e. for a particular font), use the
+`fspecial' request.
+
+ In summary, `gtroff' tries the following to find a given symbol:
+
+ * If the symbol has been defined with the `char' request, use it.
+ This hides a symbol with the same name in the current font.
+
+ * Check the current font.
+
+ * If the symbol has been defined with the `fchar' request, use it.
+
+ * Check all fonts given with the `fspecial' request, in the order of
+ appearance in `fspecial' calls.
+
+ * Check all fonts given with the `special' request, in the order of
+ appearance in `special' calls (inclusively the special fonts
+ defined in the `DESC' file, which come first).
+
+ * As a last resort, consult all fonts loaded up to now (in the order
+ they have been called the first time) for special fonts and check
+ them.
+
+ *Note Font Files::, and *Note Special Fonts::, for more details.
+
+ - Escape: \(NM
+ - Escape: \[NAME]
+ Insert a symbol NAME (two-character name NM). There is no special
+ syntax for one-character names - the natural form `\N' would
+ collide with escapes.(1) (*note Using Symbols-Footnote-1::)
+
+ If NAME is undefined, a warning of type `char' is generated, and
+ the escape is ignored. *Note Debugging::, for information about
+ warnings.
+
+ The list of available symbols is device dependent; see the
+ `groff_char(7)' man page for a complete list for the given output
+ device. For example, say
+
+
+ man -Tdvi groff_char > groff_char.dvi
+
+ for a list using the default DVI fonts (not all versions of the
+ `man' program support the `-T' option). If you want to use an
+ additional macro package to change the used fonts, `groff' must be
+ called directly:
+
+
+ groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
+
+
+ - Escape: \C'XXX'
+ Typeset the glyph named XXX.(2) (*note Using Symbols-Footnote-2::)
+ Normally it is more convenient to use `\[XXX]', but `\C' has the
+ advantage that it is compatible with newer versions of AT&T
+ `troff' and is available in compatibility mode.
+
+ - Escape: \N'N'
+ Typeset the glyph with code N in the current font (`n' is *not*
+ the input character code). The number N can be any non-negative
+ decimal integer. Most devices only have glyphs with codes between
+ 0 and 255; the Unicode output device uses codes in the range
+ 0-65535. If the current font does not contain a glyph with that
+ code, special fonts are _not_ searched. The `\N' escape sequence
+ can be conveniently used in conjunction with the `char' request:
+
+
+ .char \[phone] \f[ZD]\N'37'
+
+ The code of each glyph is given in the fourth column in the font
+ description file after the `charset' command. It is possible to
+ include unnamed glyphs in the font description file by using a
+ name of `---'; the `\N' escape sequence is the only way to use
+ these.
+
+ Some escape sequences directly map onto special glyphs.
+
+ - Escape: \'
+ This is a backslash followed by the apostrophe character, ASCII
+ character `0x27' (EBCDIC character `0x7D'). The same as `\[aa]',
+ the acute accent.
+
+ - Escape: \`
+ This is a backslash followed by ASCII character `0x60' (EBCDIC
+ character `0x79' usually). The same as `\[ga]', the grave accent.
+
+ - Escape: \-
+ This is the same as `\[-]', the minus sign in the current font.
+
+ - Request: .cflags n c1 c2 ...
+ Input characters and symbols have certain properties associated
+ with it.(3) (*note Using Symbols-Footnote-3::) These properties
+ can be modified with the `cflags' request. The first argument is
+ the sum of the desired flags and the remaining arguments are the
+ characters or symbols to have those properties. It is possible to
+ omit the spaces between the characters or symbols.
+
+ `1'
+ The character ends sentences (initially characters `.?!' have
+ this property).
+
+ `2'
+ Lines can be broken before the character (initially no
+ characters have this property).
+
+ `4'
+ Lines can be broken after the character (initially the
+ character `-' and the symbols `\(hy' and `\(em' have this
+ property).
+
+ `8'
+ The character overlaps horizontally (initially the symbols
+ `\(ul\(rn\(ru' have this property).
+
+ `16'
+ The character overlaps vertically (initially symbol `\(br' has
+ this property).
+
+ `32'
+ An end-of-sentence character followed by any number of
+ characters with this property is treated as the end of a
+ sentence if followed by a newline or two spaces; in other
+ words the character is "transparent" for the purposes of
+ end-of-sentence recognition - this is the same as having a
+ zero space factor in TeX (initially characters `"')]*' and
+ the symbols `\(dg\(rq' have this property).
+
+ - Request: .char g [string]
+ - Request: .fchar g [string]
+ Define a new glyph G to be STRING (which can be empty).(4) (*note
+ Using Symbols-Footnote-4::) Every time glyph G needs to be
+ printed, STRING is processed in a temporary environment and the
+ result is wrapped up into a single object. Compatibility mode is
+ turned off and the escape character is set to `\' while STRING is
+ being processed. Any emboldening, constant spacing or track
+ kerning is applied to this object rather than to individual
+ characters in STRING.
+
+ A glyph defined by this request can be used just like a normal
+ glyph provided by the output device. In particular, other
+ characters can be translated to it with the `tr' or `trin'
+ requests; it can be made the leader character by the `lc' request;
+ repeated patterns can be drawn with the glyph using the `\l' and
+ `\L' escape sequences; words containing the glyph can be
+ hyphenated correctly if the `hcode' request is used to give the
+ glyph's symbol a hyphenation code.
+
+ There is a special anti-recursion feature: Use of `g' within the
+ glyph's definition is handled like normal characters and symbols
+ not defined with `char'.
+
+ Note that the `tr' and `trin' requests take precedence if `char'
+ accesses the same symbol.
+
+
+ .tr XY
+ X
+ => Y
+ .char X Z
+ X
+ => Y
+ .tr XX
+ X
+ => Z
+
+ The `fchar' request defines a fallback glyph: `gtroff' only checks
+ for glyphs defined with `fchar' if it cannot find the glyph in the
+ current font. `gtroff' carries out this test before checking
+ special fonts.
+
+ - Request: .rchar c1 c2 ...
+ Remove the definitions of glyphs C1, C2, .... This undoes the
+ effect of a `char' or `fchar' request.
+
+ It is possible to omit the whitespace between arguments.
+
+ *Note Special Characters::.
+
+
+File: groff, Node: Using Symbols-Footnotes, Up: Using Symbols
+
+ (1) Note that a one-character symbol is not the same as an input
+character, i.e., the character `a' is not the same as `\[a]'. By
+default, `groff' defines only a single one-character symbol, `\[-]'; it
+is usually accessed as `\-'. On the other hand, `gtroff' has the
+special feature that `\[charXXX]' is the same as the input character
+with character code XXX. For example, `\[char97]' is identical to the
+letter `a' if ASCII encoding is active.
+
+ (2) `\C' is actually a misnomer since it accesses an output glyph.
+
+ (3) Note that the output glyphs themselves don't have such
+properties. For `gtroff', a glyph is a numbered box with a given
+width, depth, and height, nothing else. All manipulations with the
+`cflags' request work on the input level.
+
+ (4) `char' is a misnomer since an output glyph is defined.
+
+
+File: groff, Node: Special Fonts, Next: Artificial Fonts, Prev: Using Symbols, Up: Fonts
+
+Special Fonts
+-------------
+
+ Special fonts are those that `gtroff' searches when it cannot find
+the requested glyph in the current font. The Symbol font is usually a
+special font.
+
+ `gtroff' provides the following two requests to add more special
+fonts. *Note Using Symbols::, for a detailed description of the glyph
+searching mechanism in `gtroff'.
+
+ Usually, only non-TTY devices have special fonts.
+
+ - Request: .special s1 s2 ...
+ - Request: .fspecial f s1 s2 ...
+ Use the `special' request to define special fonts. They are
+ appended to the list of global special fonts in the given order.
+ The first entries in this list are the fonts defined with the
+ `fonts' command in the `DESC' file which are marked as special in
+ the corresponding font description files.
+
+ Use the `fspecial' request to designate special fonts only when
+ font F font is active. They are appended to the list of special
+ fonts for F in the given order. Initially, this list is empty.
+
+
+File: groff, Node: Artificial Fonts, Next: Ligatures and Kerning, Prev: Special Fonts, Up: Fonts
+
+Artificial Fonts
+----------------
+
+ There are a number of requests and escapes for artificially creating
+fonts. These are largely vestiges of the days when output devices did
+not have a wide variety of fonts, and when `nroff' and `troff' were
+separate programs. Most of them are no longer necessary in GNU
+`troff'. Nevertheless, they are supported.
+
+ - Escape: \H'HEIGHT'
+ - Escape: \H'+HEIGHT'
+ - Escape: \H'-HEIGHT'
+ Change (increment, decrement) the height of the current font, but
+ not the width. If HEIGHT is zero, restore the original height.
+ Default scaling indicator is `z'.
+
+ Currently, only the `-Tps' device supports this feature.
+
+ Note that `\H' doesn't produce an input token in `gtroff'. As a
+ consequence, it can be used in requests like `mc' (which expects a
+ single character as an argument) to change the font on the fly:
+
+
+ .mc \H'+5z'x\H'0'
+
+ In compatibility mode, `gtroff' behaves differently: If an
+ increment or decrement is used, it is always taken relative to the
+ current point size and not relative to the previously selected font
+ height. Thus,
+
+
+ .cp 1
+ \H'+5'test \H'+5'test
+
+ prints the word `test' twice with the same font height (five
+ points larger than the current font size).
+
+ - Escape: \S'SLANT'
+ Slant the current font by SLANT degrees. Positive values slant to
+ the right.
+
+ Currently, only the `-Tps' device supports this feature.
+
+ Note that `\S' doesn't produce an input token in `gtroff'. As a
+ consequence, it can be used in requests like `mc' (which expects a
+ single character as an argument) to change the font on the fly:
+
+
+ .mc \S'20'x\S'0'
+
+ This request is incorrectly documented in the original UNIX troff
+ manual; the slant is always set to an absolute value.
+
+ - Request: .ul [lines]
+ The `ul' request normally underlines subsequent lines if a TTY
+ output device is used. Otherwise, the lines are printed in italics
+ (only the term `underlined' is used in the following). The single
+ argument is the number of input lines to be underlined; with no
+ argument, the next line is underlined. If LINES is zero or
+ negative, stop the effects of `ul' (if it was active). Requests
+ and empty lines do not count for computing the number of underlined
+ input lines, even if they produce some output like `tl'. Lines
+ inserted by macros (e.g. invoked by a trap) do count.
+
+ At the beginning of `ul', the current font is stored and the
+ underline font is activated. Within the span of a `ul' request,
+ it is possible to change fonts, but after the last line affected by
+ `ul' the saved font is restored.
+
+ This number of lines still to be underlined is associated with the
+ current environment (*note Environments::). The underline font
+ can be changed with the `uf' request.
+
+ The `ul' request does not underline spaces.
+
+ - Request: .cu [lines]
+ The `cu' request is similar to `ul' but underlines spaces as well
+ (if a TTY output device is used).
+
+ - Request: .uf font
+ Set the underline font (globally) used by `ul' and `cu'. By
+ default, this is the font at position 2. FONT can be either a
+ non-negative font position or the name of a font.
+
+ - Request: .bd font [offset]
+ - Request: .bd font1 font2 [offset]
+ - Register: \n[.b]
+ Artificially create a bold font by printing each glyph twice,
+ slightly offset.
+
+ Two syntax forms are available.
+
+ * Imitate a bold font unconditionally. The first argument
+ specifies the font to embolden, and the second is the number
+ of basic units, minus one, by which the two glyphs are
+ offset. If the second argument is missing, emboldening is
+ turned off.
+
+ FONT can be either a non-negative font position or the name
+ of a font.
+
+ OFFSET is available in the `.b' read-only register if a
+ special font is active; in the `bd' request, its default unit
+ is `u'.
+
+ * Imitate a bold form conditionally. Embolden FONT1 by OFFSET
+ only if font FONT2 is the current font. This command can be
+ issued repeatedly to set up different emboldening values for
+ different current fonts. If the second argument is missing,
+ emboldening is turned off for this particular current font.
+
+ This affects special fonts only (either set up with the
+ `special' command in font files or with the `fspecial'
+ request).
+
+ - Request: .cs font [width [em-size]]
+ Switch to and from "constant glyph space mode". If activated, the
+ width of every glyph is WIDTH/36 ems. The em size is given
+ absolutely by EM-SIZE; if this argument is missing, the em value
+ is taken from the current font size (as set with the `ps' request)
+ when the font is effectively in use. Without second and third
+ argument, constant glyph space mode is deactivated.
+
+ Default scaling indicator for EM-SIZE is `z'; WIDTH is an integer.
+
+
+File: groff, Node: Ligatures and Kerning, Prev: Artificial Fonts, Up: Fonts
+
+Ligatures and Kerning
+---------------------
+
+ Ligatures are groups of characters that are run together, i.e,
+producing a single glyph. For example, the letters `f' and `i' can
+form a ligature `fi' as in the word `file'. This produces a cleaner
+look (albeit subtle) to the printed output. Usually, ligatures are not
+available in fonts for TTY output devices.
+
+ Most POSTSCRIPT fonts support the fi and fl ligatures. The C/A/T
+typesetter that was the target of AT&T `troff' also supported `ff',
+`ffi', and `ffl' ligatures. Advanced typesetters or `expert' fonts may
+include ligatures for `ft' and `ct', although GNU `troff' does not
+support these (yet).
+
+ - Request: .lg [flag]
+ - Register: \n[.lg]
+ Switch the ligature mechanism on or off; if the parameter is
+ non-zero or missing, ligatures are enabled, otherwise disabled.
+ Default is on. The current ligature mode can be found in the
+ read-only number register `.lg' (set to 1 or 2 if ligatures are
+ enabled, 0 otherwise).
+
+ Setting the ligature mode to 2 enables the two-character ligatures
+ (fi, fl, and ff) and disables the three-character ligatures (ffi
+ and ffl).
+
+ "Pairwise kerning" is another subtle typesetting mechanism that
+modifies the distance between a glyph pair to improve readability. In
+most cases (but not always) the distance is decreased. Typewriter-like
+fonts and fonts for terminals where all glyphs have the same width
+don't use kerning.
+
+ - Request: .kern [flag]
+ - Register: \n[.kern]
+ Switch kerning on or off. If the parameter is non-zero or missing,
+ enable pairwise kerning, otherwise disable it. The read-only
+ number register `.kern' is set to 1 if pairwise kerning is enabled,
+ 0 otherwise.
+
+ If the font description file contains pairwise kerning information,
+ glyphs from that font are kerned. Kerning between two glyphs can
+ be inhibited by placing `\&' between them: `V\&A'.
+
+ *Note Font File Format::.
+
+ "Track kerning" expands or reduces the space between glyphs. This
+can be handy, for example, if you need to squeeze a long word onto a
+single line or spread some text to fill a narrow column. It must be
+used with great care since it is usually considered bad typography if
+the reader notices the effect.
+
+ - Request: .tkf f s1 n1 s2 n2
+ Enable track kerning for font F. If the current font is F the
+ width of every glyph is increased by an amount between N1 and N2
+ (N1, N2 can be negative); if the current point size is less than
+ or equal to S1 the width is increased by N1; if it is greater than
+ or equal to S2 the width is increased by N2; if the point size is
+ greater than or equal to S1 and less than or equal to S2 the
+ increase in width is a linear function of the point size.
+
+ The default scaling indicator is `z' for S1 and S2, `p' for N1 and
+ N2.
+
+ Note that the track kerning amount is added even to the rightmost
+ glyph in a line; for large values it is thus recommended to
+ increase the line length by the same amount to compensate it.
+
+ Sometimes, when typesetting letters of different fonts, more or less
+space at such boundaries are needed. There are two escapes to help
+with this.
+
+ - Escape: \/
+ Increase the width of the preceding glyph so that the spacing
+ between that glyph and the following glyph is correct if the
+ following glyph is a roman glyph. For example, if an italic `f'
+ is immediately followed by a roman right parenthesis, then in many
+ fonts the top right portion of the `f' overlaps the top left of
+ the right parenthesis. Use this escape sequence whenever an
+ italic glyph is immediately followed by a roman glyph without any
+ intervening space. This small amount of space is also called
+ "italic correction".
+
+
+ - Escape: \,
+ Modify the spacing of the following glyph so that the spacing
+ between that glyph and the preceding glyph is correct if the
+ preceding glyph is a roman glyph. Use this escape sequence
+ whenever a roman glyph is immediately followed by an italic glyph
+ without any intervening space. In analogy to above, this space
+ could be called "left italic correction", but this term isn't used
+ widely.
+
+
+ - Escape: \&
+ Insert a zero-width character, which is invisible. Its intended
+ use is to stop interaction of a character with its surrounding.
+
+ * It prevents the insertion of extra space after an
+ end-of-sentence character.
+
+
+ Test.
+ Test.
+ => Test. Test.
+ Test.\&
+ Test.
+ => Test. Test.
+
+ * It prevents interpretation of a control character at the
+ beginning of an input line.
+
+
+ .Test
+ => warning: `Test' not defined
+ \&.Test
+ => .Test
+
+ * It prevents kerning between two glyphs.
+
+ * It is needed to map an arbitrary character to nothing in the
+ `tr' request (*note Character Translations::).
+
+ - Escape: \)
+ This escape is similar to `\&' except that it behaves like a
+ character declared with the `cflags' request to be transparent for
+ the purposes of an end-of-sentence character.
+
+ Its main usage is in macro definitions to protect against arguments
+ starting with a control character.
+
+
+ .de xxx
+ \)\\$1
+ ..
+ .de yyy
+ \&\\$1
+ ..
+ This is a test.\c
+ .xxx '
+ This is a test.
+ =>This is a test.' This is a test.
+ This is a test.\c
+ .yyy '
+ This is a test.
+ =>This is a test.' This is a test.
+
+
+
+File: groff, Node: Sizes, Next: Strings, Prev: Fonts, Up: gtroff Reference
+
+Sizes
+=====
+
+ `gtroff' uses two dimensions with each line of text, type size and
+vertical spacing. The "type size" is approximately the height of the
+tallest glyph.(1) (*note Sizes-Footnote-1::) "Vertical spacing" is the
+amount of space `gtroff' allows for a line of text; normally, this is
+about 20% larger than the current type size. Ratios smaller than this
+can result in hard-to-read text; larger than this, it spreads the text
+out more vertically (useful for term papers). By default, `gtroff'
+uses 10 point type on 12 point spacing.
+
+ The difference between type size and vertical spacing is known, by
+typesetters, as "leading" (this is pronounced `ledding').
+
+* Menu:
+
+* Changing Type Sizes::
+* Fractional Type Sizes::
+
+
+File: groff, Node: Sizes-Footnotes, Up: Sizes
+
+ (1) This is usually the parenthesis. Note that in most cases the
+real dimensions of the glyphs in a font are _not_ related to its type
+size! For example, the standard POSTSCRIPT font families `Times
+Roman', `Helvetica', and `Courier' can't be used together at 10pt; to
+get acceptable output, the size of `Helvetica' has to be reduced by one
+point, and the size of `Courier' must be increased by one point.
+
+
+File: groff, Node: Changing Type Sizes, Next: Fractional Type Sizes, Prev: Sizes, Up: Sizes
+
+Changing Type Sizes
+-------------------
+
+ - Request: .ps [size]
+ - Request: .ps +size
+ - Request: .ps -size
+ - Escape: \sSIZE
+ - Register: \n[.s]
+ Use the `ps' request or the `\s' escape to change (increase,
+ decrease) the type size (in points). Specify SIZE as either an
+ absolute point size, or as a relative change from the current size.
+ The size 0, or no argument, goes back to the previous size.
+
+ Default scaling indicator of `size' is `z'. If `size' is zero or
+ negative, it is set to 1u.
+
+ The read-only number register `.s' returns the point size in
+ points as a decimal fraction. This is a string. To get the point
+ size in scaled points, use the `.ps' register instead.
+
+ `.s' is associated with the current environment (*note
+ Environments::).
+
+
+ snap, snap,
+ .ps +2
+ grin, grin,
+ .ps +2
+ wink, wink, \s+2nudge, nudge,\s+8 say no more!
+ .ps 10
+
+ The `\s' escape may be called in a variety of ways. Much like
+ other escapes there must be a way to determine where the argument
+ ends and the text begins. Any of the following forms are valid:
+
+ `\sN'
+ Set the point size to N points. N must be either 0 or in the
+ range 4 to 39.
+
+ `\s+N'
+ `\s-N'
+ Increase or decrease the point size by N points. N must be
+ exactly one digit.
+
+ `\s(NN'
+ Set the point size to NN points. NN must be exactly two
+ digits.
+
+ `\s+(NN'
+ `\s-(NN'
+ `\s(+NN'
+ `\s(-NN'
+ Increase or decrease the point size by NN points. NN must be
+ exactly two digits.
+
+ Note that `\s' doesn't produce an input token in `gtroff'. As a
+ consequence, it can be used in requests like `mc' (which expects a
+ single character as an argument) to change the font on the fly:
+
+
+ .mc \s[20]x\s[0]
+
+ *Note Fractional Type Sizes::, for yet another syntactical form of
+ using the `\s' escape.
+
+ - Request: .sizes s1 s2 ... sn [0]
+ Some devices may only have certain permissible sizes, in which case
+ `gtroff' rounds to the nearest permissible size. The `DESC' file
+ specifies which sizes are permissible for the device.
+
+ Use the `sizes' request to change the permissible sizes for the
+ current output device. Arguments are in scaled points; the
+ `sizescale' line in the `DESC' file for the output device provides
+ the scaling factor. For example, if the scaling factor is 1000,
+ then the value 12000 is 12 points.
+
+ Each argument can be a single point size (such as `12000'), or a
+ range of sizes (such as `4000-72000'). You can optionally end the
+ list with a zero.
+
+ - Request: .vs [space]
+ - Request: .vs +space
+ - Request: .vs -space
+ - Register: \n[.v]
+ Change (increase, decrease) the vertical spacing by SPACE. The
+ default scaling indicator is `p'.
+
+ If `vs' is called without an argument, the vertical spacing is
+ reset to the previous value before the last call to `vs'.
+
+ `gtroff' creates a warning of type `range' if SPACE is zero or
+ negative; the vertical spacing is then set to the vertical
+ resolution (as given in the `.V' register).
+
+ The read-only number register `.v' contains the current vertical
+ spacing; it is associated with the current environment (*note
+ Environments::).
+
+ The effective vertical line spacing consists of four components.
+
+ * The vertical line spacing as set with the `vs' request.
+
+ * The "post-vertical line spacing" as set with the `pvs' request.
+ This is vertical space which will be added after a line has been
+ output.
+
+ * The "extra pre-vertical line space" as set with the `\x' request,
+ using a negative value. This is vertical space which will be
+ added once before the current line has been output.
+
+ * The "extra post-vertical line space" as set with the `\x' request,
+ using a positive value. This is vertical space which will be
+ added once after the current line has been output.
+
+ It is usually better to use `vs' or `pvs' instead of `ls' to produce
+double-spaced documents: `vs' and `pvs' have a finer granularity for
+the inserted vertical space compared to `ls'; furthermore, certain
+preprocessors assume single-spacing.
+
+ *Note Manipulating Spacing::, for more details on the `\x' escape
+and the `ls' request.
+
+ - Request: .pvs [space]
+ - Request: .pvs +space
+ - Request: .pvs -space
+ - Register: \n[.pvs]
+ Change (increase, decrease) the post-vertical spacing by SPACE.
+ The default scaling indicator is `p'.
+
+ If `pvs' is called without an argument, the post-vertical spacing
+ is reset to the previous value before the last call to `pvs'.
+
+ `gtroff' creates a warning of type `range' if SPACE is zero or
+ negative; the vertical spacing is then set to zero.
+
+ The read-only number register `.pvs' contains the current
+ post-vertical spacing; it is associated with the current
+ environment (*note Environments::).
+
+
+File: groff, Node: Fractional Type Sizes, Prev: Changing Type Sizes, Up: Sizes
+
+Fractional Type Sizes
+---------------------
+
+ A "scaled point" is equal to 1/SIZESCALE points, where SIZESCALE is
+specified in the `DESC' file (1 by default). There is a new scale
+indicator `z' which has the effect of multiplying by SIZESCALE.
+Requests and escape sequences in `gtroff' interpret arguments that
+represent a point size as being in units of scaled points, but they
+evaluate each such argument using a default scale indicator of `z'.
+Arguments treated in this way are the argument to the `ps' request, the
+third argument to the `cs' request, the second and fourth arguments to
+the `tkf' request, the argument to the `\H' escape sequence, and those
+variants of the `\s' escape sequence that take a numeric expression as
+their argument (see below).
+
+ For example, suppose SIZESCALE is 1000; then a scaled point is
+equivalent to a millipoint; the request `.ps 10.25' is equivalent to
+`.ps 10.25z' and thus sets the point size to 10250 scaled points, which
+is equal to 10.25 points.
+
+ `gtroff' disallows the use of the `z' scale indicator in instances
+where it would make no sense, such as a numeric expression whose
+default scale indicator was neither `u' nor `z'. Similarly it would
+make no sense to use a scaling indicator other than `z' or `u' in a
+numeric expression whose default scale indicator was `z', and so
+`gtroff' disallows this as well.
+
+ There is also new scale indicator `s' which multiplies by the number
+of units in a scaled point. So, for example, `\n[.ps]s' is equal to
+`1m'. Be sure not to confuse the `s' and `z' scale indicators.
+
+ - Register: \n[.ps]
+ A read-only number register returning the point size in scaled
+ points.
+
+ `.ps' is associated with the current environment (*note
+ Environments::).
+
+ - Register: \n[.psr]
+ - Register: \n[.sr]
+ The last-requested point size in scaled points is contained in the
+ `.psr' read-only number register. The last requested point size
+ in points as a decimal fraction can be found in `.sr'. This is a
+ string-valued read-only number register.
+
+ Note that the requested point sizes are device-independent, whereas
+ the values returned by the `.ps' and `.s' registers are not. For
+ example, if a point size of 11pt is requested, and a `sizes'
+ request (or a `sizescale' line in a `DESC' file) specifies 10.95pt
+ instead, this value is actually used.
+
+ Both registers are associated with the current environment (*note
+ Environments::).
+
+ The `\s' escape has the following syntax for working with fractional
+type sizes:
+
+`\s[N]'
+`\s'N''
+ Set the point size to N scaled points; N is a numeric expression
+ with a default scale indicator of `z'.
+
+`\s[+N]'
+`\s[-N]'
+`\s+[N]'
+`\s-[N]'
+`\s'+N''
+`\s'-N''
+`\s+'N''
+`\s-'N''
+ Increase or or decrease the point size by N scaled points; N is a
+ numeric expression with a default scale indicator of `z'.
+
+ *Note Font Files::.
+
diff --git a/contrib/groff/doc/groff-6 b/contrib/groff/doc/groff-6
new file mode 100644
index 0000000..c7d9b81
--- /dev/null
+++ b/contrib/groff/doc/groff-6
@@ -0,0 +1,1415 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+File: groff, Node: Strings, Next: Conditionals and Loops, Prev: Sizes, Up: gtroff Reference
+
+Strings
+=======
+
+ `gtroff' has string variables, which are entirely for user
+convenience (i.e. there are no built-in strings exept `.T', but even
+this is a read-write string variable).
+
+ - Request: .ds name [string]
+ - Request: .ds1 name [string]
+ - Escape: \*N
+ - Escape: \*(NM
+ - Escape: \*[NAME ARG1 ARG2 ...]
+ Define and access a string variable NAME (one-character name N,
+ two-character name NM). If NAME already exists, `ds' overwrites
+ the previous definition. Only the syntax form using brackets can
+ take arguments which are handled identically to macro arguments;
+ the single exception is that a closing bracket as an argument must
+ be enclosed in double quotes. *Note Request Arguments::, and
+ *Note Parameters::.
+
+ Example:
+
+
+ .ds foo a \\$1 test
+ .
+ This is \*[foo nice].
+ => This is a nice test.
+
+ The `\*' escape "interpolates" (expands in-place) a
+ previously-defined string variable. To be more precise, the stored
+ string is pushed onto the input stack which is then parsed by
+ `gtroff'. Similar to number registers, it is possible to nest
+ strings, i.e. string variables can be called within string
+ variables.
+
+ If the string named by the `\*' escape does not exist, it is
+ defined as empty, and a warning of type `mac' is emitted (see
+ *Note Debugging::, for more details).
+
+ *Caution:* Unlike other requests, the second argument to the `ds'
+ request takes up the entire line including trailing spaces. This
+ means that comments on a line with such a request can introduce
+ unwanted space into a string.
+
+
+ .ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
+
+ Instead the comment should be put on another line or have the
+ comment escape adjacent with the end of the string.
+
+
+ .ds UX \s-1UNIX\s0\u\s-3tm\s0\d\" UNIX trademark
+
+ To produce leading space the string can be started with a double
+ quote. No trailing quote is needed; in fact, any trailing quote is
+ included in your string.
+
+
+ .ds sign " Yours in a white wine sauce,
+
+ Strings are not limited to a single line of text. A string can
+ span several lines by escaping the newlines with a backslash. The
+ resulting string is stored _without_ the newlines.
+
+
+ .ds foo lots and lots \
+ of text are on these \
+ next several lines
+
+ It is not possible to have real newlines in a string. To put a
+ single double quote character into a string, use two consecutive
+ double quote characters.
+
+ The `ds1' request turns off compatibility mode while interpreting
+ a string. To be more precise, a "compatibility save" input token
+ is inserted at the beginning of the string, and a "compatibility
+ restore" input token at the end.
+
+
+ .nr xxx 12345
+ .ds aa The value of xxx is \\n[xxx].
+ .ds1 bb The value of xxx ix \\n[xxx].
+ .
+ .cp 1
+ .
+ \*(aa
+ => warning: number register `[' not defined
+ => The value of xxx is 0xxx].
+ \*(bb
+ => The value of xxx ix 12345.
+
+ Strings, macros, and diversions (and boxes) share the same name
+ space. Internally, even the same mechanism is used to store them.
+ This has some interesting consequences. For example, it is
+ possible to call a macro with string syntax and vice versa.
+
+
+ .de xxx
+ a funny test.
+ ..
+ This is \*[xxx]
+ => This is a funny test.
+
+ .ds yyy a funny test
+ This is
+ .yyy
+ => This is a funny test.
+
+ Diversions and boxes can be also called with string syntax.
+
+ Another consequence is that you can copy one-line diversions or
+ boxes to a string.
+
+
+ .di xxx
+ a \fItest\fR
+ .br
+ .di
+ .ds yyy This is \*[xxx]\c
+ \*[yyy].
+ => This is a test.
+
+ As the previous example shows, it is possible to store formatted
+ output in strings. The `\c' escape prevents the insertion of an
+ additional blank line in the output.
+
+ Copying diversions longer than a single output line produces
+ unexpected results.
+
+
+ .di xxx
+ a funny
+ .br
+ test
+ .br
+ .di
+ .ds yyy This is \*[xxx]\c
+ \*[yyy].
+ => test This is a funny.
+
+ Usually, it is not predictable whether a diversion contains one or
+ more output lines, so this mechanism should be avoided. With UNIX
+ `troff', this was the only solution to strip off a final newline
+ from a diversion. Another disadvantage is that the spaces in the
+ copied string are already formatted, making them unstretchable.
+ This can cause ugly results.
+
+ A clean solution to this problem is available in GNU `troff',
+ using the requests `chop' to remove the final newline of a
+ diversion, and `unformat' to make the horizontal spaces
+ stretchable again.
+
+
+ .box xxx
+ a funny
+ .br
+ test
+ .br
+ .box
+ .chop xxx
+ .unformat xxx
+ This is \*[xxx].
+ => This is a funny test.
+
+ *Note Gtroff Internals::, for more information.
+
+ - Request: .as name [string]
+ - Request: .as1 name [string]
+ The `as' request is similar to `ds' but appends STRING to the
+ string stored as NAME instead of redefining it. If NAME doesn't
+ exist yet, it is created.
+
+
+ .as sign " with shallots, onions and garlic,
+
+ The `as1' request is similar to `as', but compatibility mode is
+ switched off while the appended string is interpreted. To be more
+ precise, a "compatibility save" input token is inserted at the
+ beginning of the appended string, and a "compatibility restore"
+ input token at the end.
+
+ Rudimentary string manipulation routines are given with the next two
+requests.
+
+ - Request: .substring str n1 [n2]
+ Replace the string named STR with the substring defined by the
+ indices N1 and N2. The first character in the string has index 0.
+ If N2 is omitted, it is taken to be equal to the string's length.
+ If the index value N1 or N2 is negative, it is counted from the
+ end of the string, going backwards: The last character has
+ index -1, the character before the last character has index -2,
+ etc.
+
+
+ .ds xxx abcdefgh
+ .substring xxx 1 -4
+ \*[xxx]
+ => bcde
+
+
+ - Request: .length reg str
+ Compute the number of characters of STR and return it in the
+ number register REG. If REG doesn't exist, it is created. `str'
+ is read in copy mode.
+
+
+ .ds xxx abcd\h'3i'efgh
+ .length yyy \n[xxx]
+ \n[yyy]
+ => 14
+
+
+ - Request: .rn xx yy
+ Rename the request, macro, diversion, or string XX to YY.
+
+ - Request: .rm xx
+ Remove the request, macro, diversion, or string XX. `gtroff'
+ treats subsequent invocations as if the object had never been
+ defined.
+
+ - Request: .als new old
+ Create an alias named NEW for the request, string, macro, or
+ diversion object named OLD. The new name and the old name are
+ exactly equivalent (it is similar to a hard rather than a soft
+ link). If OLD is undefined, `gtroff' generates a warning of type
+ `mac' and ignores the request.
+
+ - Request: .chop xx
+ Remove (chop) the last character from the macro, string, or
+ diversion named XX. This is useful for removing the newline from
+ the end of diversions that are to be interpolated as strings.
+ This command can be used repeatedly; see *Note Gtroff Internals::,
+ for details on nodes inserted additionally by `gtroff'.
+
+ *Note Identifiers::, and *Note Comments::.
+
+
+File: groff, Node: Conditionals and Loops, Next: Writing Macros, Prev: Strings, Up: gtroff Reference
+
+Conditionals and Loops
+======================
+
+* Menu:
+
+* Operators in Conditionals::
+* if-else::
+* while::
+
+
+File: groff, Node: Operators in Conditionals, Next: if-else, Prev: Conditionals and Loops, Up: Conditionals and Loops
+
+Operators in Conditionals
+-------------------------
+
+ In `if' and `while' requests, there are several more operators
+available:
+
+`e'
+`o'
+ True if the current page is even or odd numbered (respectively).
+
+`n'
+ True if the document is being processed in nroff mode (i.e., the
+ `.nroff' command has been issued).
+
+`t'
+ True if the document is being processed in troff mode (i.e., the
+ `.troff' command has been issued).
+
+`v'
+ Always false. This condition is for compatibility with other
+ `troff' versions only.
+
+`'XXX'YYY''
+ True if the string XXX is equal to the string YYY. Other
+ characters can be used in place of the single quotes; the same set
+ of delimiters as for the `\D' escape is used (*note Escapes::).
+ `gtroff' formats the strings before being compared:
+
+
+ .ie "|"\fR|\fP" \
+ true
+ .el \
+ false
+ => true
+
+ The resulting motions, glyph sizes, and fonts have to match,(1)
+ (*note Operators in Conditionals-Footnote-1::) and not the
+ individual motion, size, and font requests. In the previous
+ example, `|' and `\fR|\fP' both result in a roman `|' glyph with
+ the same point size and at the same location on the page, so the
+ strings are equal. If `.ft I' had been added before the `.ie',
+ the result would be "false" because (the first) `|' produces an
+ italic `|' rather than a roman one.
+
+`r XXX'
+ True if there is a number register named XXX.
+
+`d XXX'
+ True if there is a string, macro, diversion, or request named XXX.
+
+`m XXX'
+ True if there is a color named XXX.
+
+`c G'
+ True if there is a glyph G available(2) (*note Operators in
+ Conditionals-Footnote-2::); G is either an ASCII character or a
+ special character (`\(GG' or `\[GGG]'); the condition is also true
+ if G has been defined by the `char' request.
+
+ Note that these operators can't be combined with other operators like
+`:' or `&'; only a leading `!' (without whitespace between the
+exclamation mark and the operator) can be used to negate the result.
+
+
+ .nr xxx 1
+ .ie !r xxx \
+ true
+ .el \
+ false
+ => false
+
+ A whitespace after `!' always evaluates to zero (this bizarre
+behaviour is due to compatibility with UNIX `troff').
+
+
+ .nr xxx 1
+ .ie ! r xxx \
+ true
+ .el \
+ false
+ => r xxx true
+
+ It is possible to omit the whitespace before the argument to the
+`r', `d', and `c' operators.
+
+ *Note Expressions::.
+
+
+File: groff, Node: Operators in Conditionals-Footnotes, Up: Operators in Conditionals
+
+ (1) The created output nodes must be identical. *Note Gtroff
+Internals::.
+
+ (2) The name of this conditional operator is a misnomer since it
+tests names of output glyphs.
+
+
+File: groff, Node: if-else, Next: while, Prev: Operators in Conditionals, Up: Conditionals and Loops
+
+if-else
+-------
+
+ `gtroff' has if-then-else constructs like other languages, although
+the formatting can be painful.
+
+ - Request: .if expr anything
+ Evaluate the expression EXPR, and executes ANYTHING (the remainder
+ of the line) if EXPR evaluates to non-zero (true). ANYTHING is
+ interpreted as though it was on a line by itself (except that
+ leading spaces are swallowed). *Note Expressions::, for more info.
+
+
+ .nr xxx 1
+ .nr yyy 2
+ .if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
+ => true
+
+
+ - Request: .nop anything
+ Executes ANYTHING. This is similar to `.if 1'.
+
+ - Request: .ie expr anything
+ - Request: .el anything
+ Use the `ie' and `el' requests to write an if-then-else. The
+ first request is the `if' part and the latter is the `else' part.
+
+
+ .ie n .ls 2 \" double-spacing in nroff
+ .el .ls 1 \" single-spacing in troff
+
+
+ - Escape: \{
+ - Escape: \}
+ In many cases, an if (or if-else) construct needs to execute more
+ than one request. This can be done using the `\{' and `\}'
+ escapes. The following example shows the possible ways to use
+ these escapes (note the position of the opening and closing
+ braces).
+
+
+ .ie t \{\
+ . ds lq ``
+ . ds rq ''
+ .\}
+ .el \
+ .\{\
+ . ds lq "
+ . ds rq "\}
+
+
+ *Note Expressions::.
+
+
+File: groff, Node: while, Prev: if-else, Up: Conditionals and Loops
+
+while
+-----
+
+ `gtroff' provides a looping construct using the `while' request,
+which is used much like the `if' (and related) requests.
+
+ - Request: .while expr anything
+ Evaluate the expression EXPR, and repeatedly execute ANYTHING (the
+ remainder of the line) until EXPR evaluates to 0.
+
+
+ .nr a 0 1
+ .while (\na < 9) \{\
+ \n+a,
+ .\}
+ \n+a
+ => 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
+
+ Some remarks.
+
+ * The body of a `while' request is treated like the body of a
+ `de' request: `gtroff' temporarily stores it in a macro which
+ is deleted after the loop has been exited. It can
+ considerably slow down a macro if the body of the `while'
+ request (within the macro) is large. Each time the macro is
+ executed, the `while' body is parsed and stored again as a
+ temporary macro.
+
+
+ .de xxx
+ . nr num 10
+ . while (\\n[num] > 0) \{\
+ . \" many lines of code
+ . nr num -1
+ . \}
+ ..
+
+ The traditional and ofter better solution (UNIX `troff'
+ doesn't have the `while' request) is to use a recursive macro
+ instead which is parsed only once during its definition.
+
+
+ .de yyy
+ . if (\\n[num] > 0) \{\
+ . \" many lines of code
+ . nr num -1
+ . yyy
+ . \}
+ ..
+ .
+ .de xxx
+ . nr num 10
+ . yyy
+ ..
+
+ Note that the number of available recursion levels is set
+ to 1000 (this is a compile-time constant value of `gtroff').
+
+ * The closing brace of a `while' body must end a line.
+
+
+ .if 1 \{\
+ . nr a 0 1
+ . while (\n[a] < 10) \{\
+ . nop \n+[a]
+ .\}\}
+ => unbalanced \{ \}
+
+
+ - Request: .break
+ Break out of a `while' loop. Be sure not to confuse this with the
+ `br' request (causing a line break).
+
+ - Request: .continue
+ Finish the current iteration of a `while' loop, immediately
+ restarting the next iteration.
+
+ *Note Expressions::.
+
+
+File: groff, Node: Writing Macros, Next: Page Motions, Prev: Conditionals and Loops, Up: gtroff Reference
+
+Writing Macros
+==============
+
+ A "macro" is a collection of text and embedded commands which can be
+invoked multiple times. Use macros to define common operations.
+
+ - Request: .de name [end]
+ - Request: .de1 name [end]
+ - Request: .dei name [end]
+ Define a new macro named NAME. `gtroff' copies subsequent lines
+ (starting with the next one) into an internal buffer until it
+ encounters the line `..' (two dots). The optional second argument
+ to `de' changes this to a macro to `.END'.
+
+ There can be whitespace after the first dot in the line containing
+ the ending token (either `.' or macro `END').
+
+ Here a small example macro called `P' which causes a break and
+ inserts some vertical space. It could be used to separate
+ paragraphs.
+
+
+ .de P
+ . br
+ . sp .8v
+ ..
+
+ The following example defines a macro within another. Remember
+ that expansion must be protected twice; once for reading the macro
+ and once for executing.
+
+
+ \# a dummy macro to avoid a warning
+ .de end
+ ..
+ .
+ .de foo
+ . de bar end
+ . nop \f[B]Hallo \\\\$1!\f[]
+ . end
+ ..
+ .
+ .foo
+ .bar Joe
+ => Hallo Joe!
+
+ Since `\f' has no expansion, it isn't necessary to protect its
+ backslash. Had we defined another macro within `bar' which takes
+ a parameter, eight backslashes would be necessary before `$1'.
+
+ The `de1' request turns off compatibility mode while executing the
+ macro. On entry, the current compatibility mode is saved and
+ restored at exit.
+
+
+ .nr xxx 12345
+ .
+ .de aa
+ The value of xxx is \\n[xxx].
+ ..
+ .de1 bb
+ The value of xxx ix \\n[xxx].
+ ..
+ .
+ .cp 1
+ .
+ .aa
+ => warning: number register ' not defined
+ => The value of xxx is 0xxx].
+ .bb
+ => The value of xxx ix 12345.
+
+ The `dei' request defines a macro indirectly. That is, it expands
+ strings whose names are NAME or END before performing the append.
+
+ This:
+
+
+ .ds xx aa
+ .ds yy bb
+ .dei xx yy
+
+ is equivalent to:
+
+
+ .de aa bb
+
+ Using `trace.tmac', you can trace calls to `de' and `de1'.
+
+ Note that macro identifiers are shared with identifiers for
+ strings and diversions.
+
+ - Request: .am xx
+ - Request: .am1 xx
+ - Request: .ami xx yy
+ Works similarly to `de' except it appends onto the macro named XX.
+ So, to make the previously defined `P' macro actually do indented
+ instead of block paragraphs, add the necessary code to the
+ existing macro like this:
+
+
+ .am P
+ .ti +5n
+ ..
+
+ The `am1' request turns off compatibility mode while executing the
+ appended macro piece. To be more precise, a "compatibility save"
+ input token is inserted at the beginning of the appended code, and
+ a "compatibility restore" input token at the end.
+
+ The `ami' request appends indirectly, meaning that `gtroff'
+ expands strings whose names are XX or YY before performing the
+ append.
+
+ Using `trace.tmac', you can trace calls to `am' and `am1'.
+
+ *Note Strings::, for the `als' request to rename a macro.
+
+ The `de', `am', `di', `da', `ds', and `as' requests (together with
+its variants) only create a new object if the name of the macro,
+diversion or string diversion is currently undefined or if it is
+defined to be a request; normally they modify the value of an existing
+object.
+
+ - Request: .return
+ Exit a macro, immediately returning to the caller.
+
+* Menu:
+
+* Copy-in Mode::
+* Parameters::
+
+
+File: groff, Node: Copy-in Mode, Next: Parameters, Prev: Writing Macros, Up: Writing Macros
+
+Copy-in Mode
+------------
+
+ When `gtroff' reads in the text for a macro, string, or diversion,
+it copies the text (including request lines, but excluding escapes) into
+an internal buffer. Escapes are converted into an internal form,
+except for `\n', `\$', `\*', `\\' and `\<RET>' which are evaluated and
+inserted into the text where the escape was located. This is known as
+"copy-in" mode or "copy" mode.
+
+ What this means is that you can specify when these escapes are to be
+evaluated (either at copy-in time or at the time of use) by insulating
+the escapes with an extra backslash. Compare this to the `\def' and
+`\edef' commands in TeX.
+
+ The following example prints the numbers 20 and 10:
+
+
+ .nr x 20
+ .de y
+ .nr x 10
+ \&\nx
+ \&\\nx
+ ..
+ .y
+
+
+File: groff, Node: Parameters, Prev: Copy-in Mode, Up: Writing Macros
+
+Parameters
+----------
+
+ The arguments to a macro or string can be examined using a variety of
+escapes.
+
+ - Register: \n[.$]
+ The number of arguments passed to a macro or string. This is a
+ read-only number register.
+
+ Any individual argument can be retrieved with one of the following
+escapes:
+
+ - Escape: \$N
+ - Escape: \$(NN
+ - Escape: \$[NNN]
+ Retrieve the Nth, NNth or NNNth argument. As usual, the first
+ form only accepts a single number (larger than zero), the second a
+ two-digit number (larger or equal to 10), and the third any
+ positive integer value (larger than zero). Macros and strings can
+ have an unlimited number of arguments. Note that due to copy-in
+ mode, use two backslashes on these in actual use to prevent
+ interpolation until the macro is actually invoked.
+
+ - Request: .shift [n]
+ Shift the arguments 1 position, or as many positions as specified
+ by its argument. After executing this request, argument I becomes
+ argument I-N; arguments 1 to N are no longer available. Shifting
+ by negative amounts is currently undefined.
+
+ - Escape: \$*
+ - Escape: \$@
+ In some cases it is convenient to use all of the arguments at once
+ (for example, to pass the arguments along to another macro). The
+ `\$*' escape concatenates all the arguments separated by spaces. A
+ similar escape is `\$@', which concatenates all the arguments with
+ each surrounded by double quotes, and separated by spaces. If not
+ in compatibility mode, the input level of double quotes is
+ preserved (see *Note Request Arguments::).
+
+ - Escape: \$0
+ The name used to invoke the current macro. The `als' request can
+ make a macro have more than one name.
+
+
+ .de generic-macro
+ . ...
+ . if \\n[error] \{\
+ . tm \\$0: Houston, we have a problem.
+ . return
+ . \}
+ ..
+ .
+ .als foo generic-macro
+ .als bar generic-macro
+
+
+ *Note Request Arguments::.
+
+
+File: groff, Node: Page Motions, Next: Drawing Requests, Prev: Writing Macros, Up: gtroff Reference
+
+Page Motions
+============
+
+ *Note Manipulating Spacing::, for a discussion of the main request
+for vertical motion, `sp'.
+
+ - Request: .mk [reg]
+ - Request: .rt [dist]
+ The request `mk' can be used to mark a location on a page, for
+ movement to later. This request takes a register name as an
+ argument in which to store the current page location. With no
+ argument it stores the location in an internal register. The
+ results of this can be used later by the `rt' or the `sp' request
+ (or the `\v' escape).
+
+ The `rt' request returns _upwards_ to the location marked with the
+ last `mk' request. If used with an argument, return to a position
+ which distance from the top of the page is DIST (no previous call
+ to `mk' is necessary in this case). Default scaling indicator is
+ `v'.
+
+ Here a primitive solution for a two-column macro.
+
+
+ .nr column-length 1.5i
+ .nr column-gap 4m
+ .nr bottom-margin 1m
+ .
+
+
+ .de 2c
+ . br
+ . mk
+ . ll \\n[column-length]u
+ . wh -\\n[bottom-margin]u 2c-trap
+ . nr right-side 0
+ ..
+ .
+
+
+ .de 2c-trap
+ . ie \\n[right-side] \{\
+ . nr right-side 0
+ . po -(\\n[column-length]u + \\n[column-gap]u)
+ . \" remove trap
+ . wh -\\n[bottom-margin]u
+ . \}
+ . el \{\
+ . \" switch to right side
+ . nr right-side 1
+ . po +(\\n[column-length]u + \\n[column-gap]u)
+ . rt
+ . \}
+ ..
+ .
+
+
+ .pl 1.5i
+ .ll 4i
+ This is a small test which shows how the
+ rt request works in combination with mk.
+
+ .2c
+ Starting here, text is typeset in two columns.
+ Note that this implementation isn't robust
+ and thus not suited for a real two-column
+ macro.
+
+ Result:
+
+
+ This is a small test which shows how the
+ rt request works in combination with mk.
+
+ Starting here, isn't robust
+ text is typeset and thus not
+ in two columns. suited for a
+ Note that this real two-column
+ implementation macro.
+
+
+ The following escapes give fine control of movements about the page.
+
+ - Escape: \v'E'
+ Move vertically, usually from the current location on the page (if
+ no absolute position operator `|' is used). The argument E
+ specifies the distance to move; positive is downwards and negative
+ upwards. The default scaling indicator for this escape is `v'.
+ Beware, however, that `gtroff' continues text processing at the
+ point where the motion ends, so you should always balance motions
+ to avoid interference with text processing.
+
+ `\v' doesn't trigger a trap. This can be quite useful; for
+ example, consider a page bottom trap macro which prints a marker
+ in the margin to indicate continuation of a footnote or something
+ similar.
+
+ There are some special-case escapes for vertical motion.
+
+ - Escape: \r
+ Move upwards 1v.
+
+ - Escape: \u
+ Move upwards .5v.
+
+ - Escape: \d
+ Move down .5v.
+
+ - Escape: \h'E'
+ Move horizontally, usually from the current location (if no
+ absolute position operator `|' is used). The expression E
+ indicates how far to move: positive is rightwards and negative
+ leftwards. The default scaling indicator for this escape is `m'.
+
+ There are a number of special-case escapes for horizontal motion.
+
+ - Escape: \<SP>
+ An unbreakable and unpaddable (i.e. not expanded during filling)
+ space. (Note: This is a backslash followed by a space.)
+
+ - Escape: \~
+ An unbreakable space that stretches like a normal inter-word space
+ when a line is adjusted.
+
+ - Escape: \|
+ A 1/6th em space. Ignored for TTY output devices (rounded to
+ zero).
+
+ - Escape: \^
+ A 1/12th em space. Ignored for TTY output devices (rounded to
+ zero).
+
+ - Escape: \0
+ A space the size of a digit.
+
+ The following string sets the TeX logo:
+
+
+ .ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+
+ - Escape: \w'TEXT'
+ - Register: \n[st]
+ - Register: \n[sb]
+ - Register: \n[rst]
+ - Register: \n[rsb]
+ - Register: \n[ct]
+ - Register: \n[ssc]
+ - Register: \n[skw]
+ Return the width of the specified TEXT in basic units. This
+ allows horizontal movement based on the width of some arbitrary
+ text (e.g. given as an argument to a macro).
+
+
+ The length of the string `abc' is \w'abc'u.
+ => The length of the string `abc' is 72u.
+
+ Font changes may occur in TEXT which don't affect current settings.
+
+ After use, `\w' sets several registers:
+
+ `st'
+ `sb'
+ The highest and lowest point of the baseline, respectively,
+ in TEXT.
+
+ `rst'
+ `rsb'
+ Like the `st' and `sb' registers, but takes account of the
+ heights and depths of glyphs. With other words, this gives
+ the highest and lowest point of TEXT.
+
+ `ct'
+ Defines the kinds of glyphs occurring in TEXT:
+
+ 0
+ only short glyphs, no descenders or tall glyphs.
+
+ 1
+ at least one descender.
+
+ 2
+ at least one tall glyph.
+
+ 3
+ at least one each of a descender and a tall glyph.
+
+ `ssc'
+ The amount of horizontal space (possibly negative) that
+ should be added to the last glyph before a subscript.
+
+ `skw'
+ How far to right of the center of the last glyph in the `\w'
+ argument, the center of an accent from a roman font should be
+ placed over that glyph.
+
+ - Escape: \kP
+ - Escape: \k(PS
+ - Escape: \k[POSITION]
+ Store the current horizontal position in the _input_ line in
+ number register with name POSITION (one-character name P,
+ two-character name PS). Use this, for example, to return to the
+ beginning of a string for highlighting or other decoration.
+
+ - Register: \n[hp]
+ The current horizontal position at the input line.
+
+ - Register: \n[.k]
+ A read-only number register containing the current horizontal
+ output position.
+
+ - Escape: \o'ABC'
+ Overstrike glyphs A, B, C, ...; the glyphs are centered, and the
+ resulting spacing is the largest width of the affected glyphs.
+
+ - Escape: \zG
+ Print glyph G with zero width, i.e., without spacing. Use this to
+ overstrike glyphs left-aligned.
+
+ - Escape: \Z'ANYTHING'
+ Print ANYTHING, then restore the horizontal and vertical position.
+ The argument may not contain tabs or leaders.
+
+ The following is an example of a strike-through macro:
+
+
+ .de ST
+ .nr ww \w'\\$1'
+ \Z@\v'-.25m'\l'\\n[ww]u'@\\$1
+ ..
+ .
+ This is
+ .ST "a test"
+ an actual emergency!
+
+
+
+File: groff, Node: Drawing Requests, Next: Traps, Prev: Page Motions, Up: gtroff Reference
+
+Drawing Requests
+================
+
+ `gtroff' provides a number of ways to draw lines and other figures
+on the page. Used in combination with the page motion commands (see
+*Note Page Motions::, for more info), a wide variety of figures can be
+drawn. However, for complex drawings these operations can be quite
+cumbersome, and it may be wise to use graphic preprocessors like `gpic'
+or `ggrn'. *Note gpic::, and *Note ggrn::, for more information.
+
+ All drawing is done via escapes.
+
+ - Escape: \l'L'
+ - Escape: \l'LG'
+ Draw a line horizontally. L is the length of the line to be
+ drawn. If it is positive, start the line at the current location
+ and draw to the right; its end point is the new current location.
+ Negative values are handled differently: The line starts at the
+ current location and draws to the left, but the current location
+ doesn't move.
+
+ L can also be specified absolutely (i.e. with a leading `|') which
+ draws back to the beginning of the input line. Default scaling
+ indicator is `m'.
+
+ The optional second parameter G is a glyph to draw the line with.
+ If this second argument is not specified, `gtroff' uses the
+ underscore glyph, `\[ru]'.
+
+ To separate the two arguments (to prevent `gtroff' from
+ interpreting a drawing glyph as a scaling indicator if the glyph is
+ represented by a single character) use `\&'.
+
+ Here a small useful example:
+
+
+ .de box
+ \[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
+ ..
+
+ Note that this works by outputting a box rule (a vertical line),
+ then the text given as an argument and then another box rule.
+ Finally, the line drawing escapes both draw from the current
+ location to the beginning of the _input_ line - this works because
+ the line length is negative, not moving the current point.
+
+ - Escape: \L'L'
+ - Escape: \L'LG'
+ Draw vertical lines. Its parameters are similar to the `\l'
+ escape, except that the default scaling indicator is `v'. The
+ movement is downwards for positive values, and upwards for
+ negative values. The default glyph is the box rule glyph,
+ `\[br]'. As with the vertical motion escapes, text processing
+ blindly continues where the line ends.
+
+
+ This is a \L'3v'test.
+
+ Here the result, produced with `grotty'.
+
+
+ This is a
+ |
+ |
+ |test.
+
+
+ - Escape: \D'COMMAND ARG ...'
+ The `\D' escape provides a variety of drawing functions. Note
+ that on character devices, only vertical and horizontal lines are
+ supported within `grotty'; other devices may only support a subset
+ of the available drawing functions.
+
+ The default scaling indicator for all subcommands of `\D' is `m'
+ for horizontal distances and `v' for vertical ones. Exceptions
+ are `\D'f ...'' and `\D't ...'' which use `u' as the default.
+
+ `\D'l DX DY''
+ Draw a line from the current location to the relative point
+ specified by (DX,DY).
+
+ The following example is a macro for creating a box around a
+ text string; for simplicity, the box margin is taken as a
+ fixed value, 0.2m.
+
+
+ .de BOX
+ . nr @wd \w'\\$1'
+ \h'.2m'\
+ \h'-.2m'\v'(.2m - \\n[rsb]u)'\
+ \D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
+ \D'l (\\n[@wd]u + .4m) 0'\
+ \D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
+ \D'l -(\\n[@wd]u + .4m) 0'\
+ \h'.2m'\v'-(.2m - \\n[rsb]u)'\
+ \\$1\
+ \h'.2m'
+ ..
+
+ First, the width of the string is stored in register `@wd'.
+ Then, four lines are drawn to form a box, properly offset by
+ the box margin. The registers `rst' and `rsb' are set by the
+ `\w' escape, containing the largest height and depth of the
+ whole string.
+
+ `\D'c D''
+ Draw a circle with a diameter of D with the leftmost point at
+ the current position.
+
+ `\D'C D''
+ Draw a solid circle with the same parameters as an outlined
+ circle. No outline is drawn.
+
+ `\D'e X Y''
+ Draw an ellipse with a horizontal diameter of X and a vertical
+ diameter of Y with the leftmost point at the current position.
+
+ `\D'E X Y''
+ Draw a solid ellipse with the same parameters as an outlined
+ ellipse. No outline is drawn.
+
+ `\D'a DX1 DY1 DX2 DY2''
+ Draw an arc clockwise from the current location through the
+ two specified relative locations (DX1,DY1) and (DX2,DY2).
+ The coordinates of the first point are relative to the
+ current position, and the coordinates of the second point are
+ relative to the first point.
+
+ `\D'~ DX1 DY1 DX2 DY2 ...''
+ Draw a spline from the current location to the relative point
+ (DX1,DY1) and then to (DX2,DY2), and so on.
+
+ `\D'f N''
+ Set the shade of gray to be used for filling solid objects
+ to N; N must be an integer between 0 and 1000, where 0
+ corresponds solid white and 1000 to solid black, and values
+ in between correspond to intermediate shades of gray. This
+ applies only to solid circles, solid ellipses, and solid
+ polygons. By default, a level of 1000 is used.
+
+ `\D'p DX1 DY1 DX2 DY2 ...''
+ Draw a polygon from the current location to the relative
+ position (DX1,DY1) and then to (DX2,DY2) and so on. When the
+ specified data points are exhausted, a line is drawn back to
+ the starting point.
+
+ `\D'P DX1 DY1 DX2 DY2 ...''
+ Draw a solid polygon with the same parameters as an outlined
+ polygon. No outline is drawn.
+
+ Here a better variant of the box macro to fill the box with
+ some color. Note that the box must be drawn before the text
+ since colors in `gtroff' are not transparent; the filled
+ polygon would hide the text completely.
+
+
+ .de BOX
+ . nr @wd \w'\\$1'
+ \h'.2m'\
+ \h'-.2m'\v'(.2m - \\n[rsb]u)'\
+ \M[lightcyan]\
+ \D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
+ (\\n[@wd]u + .4m) 0 \
+ 0 (\\n[rst]u - \\n[rsb]u + .4m) \
+ -(\\n[@wd]u + .4m) 0'\
+ \h'.2m'\v'-(.2m - \\n[rsb]u)'\
+ \M[]\
+ \\$1\
+ \h'.2m'
+ ..
+
+ `\D't N''
+ Set the current line thickness to N machine units. A value of
+ zero selects the smallest available line thickness. A
+ negative value makes the line thickness proportional to the
+ current point size (this is the default behaviour of AT&T
+ `troff').
+
+ *Note Graphics Commands::.
+
+ - Escape: \b'STRING'
+ "Pile" a sequence of glyphs vertically, and center it vertically
+ on the current line. Use it to build large brackets and braces.
+
+ Here an example how to create a large opening brace:
+
+
+ \b'\[lt]\[bv]\[lk]\[bv]\[lb]'
+
+ The first glyph is on the top, the last glyph in STRING is at the
+ bottom. Note that `gtroff' separates the glyphs vertically by 1m,
+ and the whole object is centered 0.5m above the current baseline;
+ the largest glyph width is used as the width for the whole object.
+ This rather unflexible positioning algorithm doesn't work with
+ `-Tdvi' since the bracket pieces vary in height for this device.
+ Instead, use the `eqn' preprocessor.
+
+ *Note Manipulating Spacing::, how to adjust the vertical spacing
+ with the `\x' escape.
+
+
+File: groff, Node: Traps, Next: Diversions, Prev: Drawing Requests, Up: gtroff Reference
+
+Traps
+=====
+
+ "Traps" are locations, which, when reached, call a specified macro.
+These traps can occur at a given location on the page, at a given
+location in the current diversion, at a blank line, after a certain
+number of input lines, or at the end of input.
+
+ Setting a trap is also called "planting". It is also said that a
+trap is "sprung" if the associated macro is executed.
+
+* Menu:
+
+* Page Location Traps::
+* Diversion Traps::
+* Input Line Traps::
+* Blank Line Traps::
+* End-of-input Traps::
+
+
+File: groff, Node: Page Location Traps, Next: Diversion Traps, Prev: Traps, Up: Traps
+
+Page Location Traps
+-------------------
+
+ "Page location traps" perform an action when `gtroff' reaches or
+passes a certain vertical location on the page. Page location traps
+have a variety of purposes, including:
+
+ * setting headers and footers
+
+ * setting body text in multiple columns
+
+ * setting footnotes
+
+ - Request: .vpt flag
+ - Register: \n[.vpt]
+ Enable vertical position traps if FLAG is non-zero, or disables
+ them otherwise. Vertical position traps are traps set by the `wh'
+ or `dt' requests. Traps set by the `it' request are not vertical
+ position traps. The parameter that controls whether vertical
+ position traps are enabled is global. Initially vertical position
+ traps are enabled. The current setting of this is available in the
+ `.vpt' read-only number register.
+
+ - Request: .wh dist [macro]
+ Set a page location trap. Positive values for DIST set the trap
+ relative to the top of the page; negative values set the trap
+ relative to the bottom of the page. Default scaling indicator is
+ `v'.
+
+ MACRO is the name of the macro to execute when the trap is sprung.
+ If MACRO is missing, remove the first trap (if any) at DIST.
+
+ The following is a simple example of how many macro packages set
+ headers and footers.
+
+
+ .de hd \" Page header
+ ' sp .5i
+ . tl 'Title''date'
+ ' sp .3i
+ ..
+ .
+ .de fo \" Page footer
+ ' sp 1v
+ . tl ''%''
+ ' bp
+ ..
+ .
+ .wh 0 hd \" trap at top of the page
+ .wh -1i fo \" trap one inch from bottom
+
+ A trap at or below the bottom of the page is ignored; it can be
+ made active by either moving it up or increasing the page length
+ so that the trap is on the page.
+
+ It is possible to have more than one trap at the same location; to
+ do so, the traps must be defined at different locations, then
+ moved together with the `ch' request; otherwise the second trap
+ would replace the first one. Earlier defined traps hide later
+ defined traps if moved to the same position (the many empty lines
+ caused by the `bp' request are omitted):
+
+
+ .de a
+ . nop a
+ ..
+ .de b
+ . nop b
+ ..
+ .de c
+ . nop c
+ ..
+ .
+ .wh 1i a
+ .wh 2i b
+ .wh 3i c
+ .bp
+ => a b c
+
+
+ .ch b 1i
+ .ch c 1i
+ .bp
+ => a
+
+
+ .ch a 0.5i
+ .bp
+ => a b
+
+
+ - Register: \n[.t]
+ A read-only number register holding the distance to the next trap.
+
+ If there are no traps between the current position and the bottom
+ of the page, it contains the distance to the page bottom. In a
+ diversion, the distance to the page bottom is infinite (the
+ returned value is the biggest integer which can be represented in
+ `groff') if there are no diversion traps.
+
+ - Request: .ch macro dist
+ Change the location of a trap. The first argument is the name of
+ the macro to be invoked at the trap, and the second argument is
+ the new location for the trap (note that the parameters are
+ specified the opposite of the `wh' request). This is useful for
+ building up footnotes in a diversion to allow more space at the
+ bottom of the page for them.
+
+ Default scaling indicator for DIST is `v'. If DIST is missing,
+ the trap is removed.
+
+
+ - Register: \n[.ne]
+ The read-only number register `.ne' contains the amount of space
+ that was needed in the last `ne' request that caused a trap to be
+ sprung. Useful in conjunction with the `.trunc' register. *Note
+ Page Control::, for more information.
+
+ - Register: \n[.trunc]
+ A read-only register containing the amount of vertical space
+ truncated by the most recently sprung vertical position trap, or,
+ if the trap was sprung by an `ne' request, minus the amount of
+ vertical motion produced by the `ne' request. In other words, at
+ the point a trap is sprung, it represents the difference of what
+ the vertical position would have been but for the trap, and what
+ the vertical position actually is.
+
+
+File: groff, Node: Diversion Traps, Next: Input Line Traps, Prev: Page Location Traps, Up: Traps
+
+Diversion Traps
+---------------
+
+ - Request: .dt dist macro
+ Set a trap _within_ a diversion. DIST is the location of the trap
+ (identical to the `.wh' request; default scaling indicator is `v')
+ and MACRO is the name of the macro to be invoked. The number
+ register `.t' still works within diversions. *Note Diversions::,
+ for more information.
+
+
+File: groff, Node: Input Line Traps, Next: Blank Line Traps, Prev: Diversion Traps, Up: Traps
+
+Input Line Traps
+----------------
+
+ - Request: .it n macro
+ - Request: .itc n macro
+ Set an input line trap. N is the number of lines of input which
+ may be read before springing the trap, MACRO is the macro to be
+ invoked. Request lines are not counted as input lines.
+
+ For example, one possible use is to have a macro which prints the
+ next N lines in a bold font.
+
+
+ .de B
+ . it \\$1 B-end
+ . ft B
+ ..
+ .
+ .de B-end
+ . ft R
+ ..
+
+ The `itc' request is identical, except that a line interrupted
+ with `\c' counts as one input line.
+
+ Both requests are associated with the current environment (*note
+ Environments::); switching to another environment disables the
+ current input trap, and going back reactivates it, restoring the
+ number of already processed lines.
+
+
+File: groff, Node: Blank Line Traps, Next: End-of-input Traps, Prev: Input Line Traps, Up: Traps
+
+Blank Line Traps
+----------------
+
+ - Request: .blm macro
+ Set a blank line trap. `gtroff' executes MACRO when it encounters
+ a blank line in the input file.
+
+
+File: groff, Node: End-of-input Traps, Prev: Blank Line Traps, Up: Traps
+
+End-of-input Traps
+------------------
+
+ - Request: .em macro
+ Set a trap at the end of input. MACRO is executed after the last
+ line of the input file has been processed.
+
+ For example, if the document had to have a section at the bottom
+ of the last page for someone to approve it, the `em' request could
+ be used.
+
+
+ .de approval
+ . ne 5v
+ . sp |(\\n[.t] - 6v)
+ . in +4i
+ . lc _
+ . br
+ Approved:\t\a
+ . sp
+ Date:\t\t\a
+ ..
+ .
+ .em approval
+
+
diff --git a/contrib/groff/doc/groff-7 b/contrib/groff/doc/groff-7
new file mode 100644
index 0000000..382e218
--- /dev/null
+++ b/contrib/groff/doc/groff-7
@@ -0,0 +1,1608 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+File: groff, Node: Diversions, Next: Environments, Prev: Traps, Up: gtroff Reference
+
+Diversions
+==========
+
+ In `gtroff' it is possible to "divert" text into a named storage
+area. Due to the similarity to defining macros it is sometimes said to
+be stored in a macro. This is used for saving text for output at a
+later time, which is useful for keeping blocks of text on the same
+page, footnotes, tables of contents, and indices.
+
+ For orthogonality it is said that `gtroff' is in the "top-level
+diversion" if no diversion is active (i.e., the data is diverted to the
+output device).
+
+ - Request: .di macro
+ - Request: .da macro
+ Begin a diversion. Like the `de' request, it takes an argument of
+ a macro name to divert subsequent text into. The `da' macro
+ appends to an existing diversion.
+
+ `di' or `da' without an argument ends the diversion.
+
+ - Request: .box macro
+ - Request: .boxa macro
+ Begin (or appends to) a diversion like the `di' and `da' requests.
+ The difference is that `box' and `boxa' do not include a
+ partially-filled line in the diversion.
+
+ Compare this:
+
+
+ Before the box.
+ .box xxx
+ In the box.
+ .br
+ .box
+ After the box.
+ .br
+ => Before the box. After the box.
+ .xxx
+ => In the box.
+
+ with this:
+
+
+ Before the diversion.
+ .di yyy
+ In the diversion.
+ .br
+ .di
+ After the diversion.
+ .br
+ => After the diversion.
+ .yyy
+ => Before the diversion. In the diversion.
+
+ `box' or `boxa' without an argument ends the diversion.
+
+ - Register: \n[.z]
+ - Register: \n[.d]
+ Diversions may be nested. The read-only number register `.z'
+ contains the name of the current diversion (this is a string-valued
+ register). The read-only number register `.d' contains the current
+ vertical place in the diversion. If not in a diversion it is the
+ same as the register `nl'.
+
+ - Register: \n[.h]
+ The "high-water mark" on the current page. It corresponds to the
+ text baseline of the lowest line on the page. This is a read-only
+ register.
+
+
+ .tm .h==\n[.h], nl==\n[nl]
+ => .h==0, nl==-1
+ This is a test.
+ .br
+ .sp 2
+ .tm .h==\n[.h], nl==\n[nl]
+ => .h==40, nl==120
+
+ As can be seen in the previous example, empty lines are not
+ considered in the return value of the `.h' register.
+
+ - Register: \n[dn]
+ - Register: \n[dl]
+ After completing a diversion, the read-write number registers `dn'
+ and `dl' contain the vertical and horizontal size of the diversion.
+
+
+ .\" Center text both horizontally & vertically
+ .
+ .\" Enclose macro definitions in .eo and .ec
+ .\" to avoid the doubling of the backslash
+ .eo
+ .\" macro .(c starts centering mode
+ .de (c
+ . br
+ . ev (c
+ . evc 0
+ . in 0
+ . nf
+ . di @c
+ ..
+
+
+ .\" macro .)c terminates centering mode
+ .de )c
+ . br
+ . ev
+ . di
+ . nr @s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
+ . sp \n[@s]u
+ . ce 1000
+ . @c
+ . ce 0
+ . sp \n[@s]u
+ . br
+ . fi
+ . rr @s
+ . rm @s
+ . rm @c
+ ..
+ .\" End of macro definitions, restore escape mechanism
+ .ec
+
+
+ - Escape: \!
+ - Escape: \?ANYTHING\?
+ Prevent requests, macros, and escapes from being interpreted when
+ read into a diversion. This takes the given text and
+ "transparently" embeds it into the diversion. This is useful for
+ macros which shouldn't be invoked until the diverted text is
+ actually output.
+
+ The `\!' escape transparently embeds text up to and including the
+ end of the line. The `\?' escape transparently embeds text until
+ the next occurrence of the `\?' escape. For example:
+
+
+ \?ANYTHING\?
+
+ ANYTHING may not contain newlines; use `\!' to embed newlines in
+ a diversion. The escape sequence `\?' is also recognized in copy
+ mode and turned into a single internal code; it is this code that
+ terminates ANYTHING. Thus the following example prints 4.
+
+
+ .nr x 1
+ .nf
+ .di d
+ \?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
+ .di
+ .nr x 2
+ .di e
+ .d
+ .di
+ .nr x 3
+ .di f
+ .e
+ .di
+ .nr x 4
+ .f
+
+ Both escapes read the data in copy mode.
+
+ If `\!' is used in the top-level diversion, its argument is
+ directly embedded into the `gtroff' intermediate output. This can
+ be used for example to control a postprocessor which processes the
+ data before it is sent to the device driver.
+
+ The `\?' escape used in the top-level diversion produces no output
+ at all; its argument is simply ignored.
+
+ - Request: .output string
+ Emit STRING directly to the `gtroff' intermediate output (subject
+ to copy-mode interpretation); this is similar to `\!' used at the
+ top level. An initial double quote in STRING is stripped off to
+ allow initial blanks.
+
+ This request can't be used before the first page has started - if
+ you get an error, simply insert `.br' before the `output' request.
+
+ Without argument, `output' is ignored.
+
+ Use with caution! It is normally only needed for mark-up used by a
+ postprocessor which does something with the output before sending
+ it to the output device, filtering out `string' again.
+
+ - Request: .asciify div
+ "Unformat" the diversion specified by DIV in such a way that ASCII
+ characters, characters translated with the `trin' request, space
+ characters, and some escape sequences that were formatted and
+ diverted are treated like ordinary input characters when the
+ diversion is reread. It can be also used for gross hacks; for
+ example, the following sets register `n' to 1.
+
+
+ .tr @.
+ .di x
+ @nr n 1
+ .br
+ .di
+ .tr @@
+ .asciify x
+ .x
+
+ *Note Copy-in Mode::.
+
+ - Request: .unformat div
+ Like `asciify', unformat the specified diversion. However,
+ `unformat' only unformats spaces and tabs between words.
+ Unformatted tabs are treated as input tokens, and spaces are
+ stretchable again.
+
+ The vertical size of lines is not preserved; glyph information
+ (font, font size, space width, etc.) is retained.
+
+
+File: groff, Node: Environments, Next: Suppressing output, Prev: Diversions, Up: gtroff Reference
+
+Environments
+============
+
+ It happens frequently that some text should be printed in a certain
+format regardless of what may be in effect at the time, for example, in
+a trap invoked macro to print headers and footers. To solve this
+`gtroff' processes text in "environments". An environment contains
+most of the parameters that control text processing. It is possible to
+switch amongst these environments; by default `gtroff' processes text
+in environment 0. The following is the information kept in an
+environment.
+
+ * font parameters (size, family, style, glyph height and slant, space
+ and sentence space size)
+
+ * page parameters (line length, title length, vertical spacing, line
+ spacing, indentation, line numbering, centering, right-justifying,
+ underlining, hyphenation data)
+
+ * fill and adjust mode
+
+ * tab stops, tab and leader characters, escape character, no-break
+ and hyphen indicators, margin character data
+
+ * partially collected lines
+
+ * input traps
+
+ * drawing and fill colours
+
+ These environments may be given arbitrary names (see *Note
+Identifiers::, for more info). Old versions of `troff' only had
+environments named `0', `1', and `2'.
+
+ - Request: .ev [env]
+ - Register: \n[.ev]
+ Switch to another environment. The argument ENV is the name of
+ the environment to switch to. With no argument, `gtroff' switches
+ back to the previous environment. There is no limit on the number
+ of named environments; they are created the first time that they
+ are referenced. The `.ev' read-only register contains the name or
+ number of the current environment. This is a string-valued
+ register.
+
+ Note that a call to `ev' (with argument) pushes the previously
+ active environment onto a stack. If, say, environments `foo',
+ `bar', and `zap' are called (in that order), the first `ev'
+ request without parameter switches back to environment `bar'
+ (which is popped off the stack), and a second call switches back
+ to environment `foo'.
+
+ Here is an example:
+
+
+ .ev footnote-env
+ .fam N
+ .ps 6
+ .vs 8
+ .ll -.5i
+ .ev
+
+ ...
+
+ .ev footnote-env
+ \(dg Note the large, friendly letters.
+ .ev
+
+
+ - Request: .evc env
+ Copy the environment ENV into the current environment.
+
+ The following environment data is not copied:
+
+ * Partially filled lines.
+
+ * The status whether the previous line was interrupted.
+
+ * The number of lines still to center, or to right-justify, or
+ to underline (with or without underlined spaces); they are
+ set to zero.
+
+ * The status whether a temporary indent is active.
+
+ * Input traps and its associated data.
+
+ * Line numbering mode is disabled; it can be reactivated with
+ `.nm +0'.
+
+ * The number of consecutive hyphenated lines (set to zero).
+
+ - Register: \n[.cht]
+ - Register: \n[.cdp]
+ - Register: \n[.csk]
+ The `\n[.cht]' register contains the maximum extent (above the
+ baseline) of the last glyph added to the current environment.
+
+ The `\n[.cdp]' register contains the maximum extent (below the
+ baseline) of the last glyph added to the current environment.
+
+ The `\n[.csk]' register contains the "skew" (how far to the right
+ of the glyph's center that `gtroff' shold place an accent) of the
+ last glyph added to the current environment.
+
+
+File: groff, Node: Suppressing output, Next: Colors, Prev: Environments, Up: gtroff Reference
+
+Suppressing output
+==================
+
+ - Escape: \ONUM
+ Disable or enable output depending on the value of NUM:
+
+ `\O0'
+ Disable any glyphs from being emitted to the device driver,
+ provided that the escape occurs at the outer level (see
+ `\O[3]' and `\O[4]'). Motion is not suppressed so
+ effectively `\O[0]' means _pen up_.
+
+ `\O1'
+ Enable output of glyphs, provided that the escape occurs at
+ the outer level.
+
+ `\O0' and `\O1' also reset the four registers `opminx', `opminy',
+ `opmaxx', and `opmaxy' to -1. *Note Register Index::. These four
+ registers mark the top left and bottom right hand corners of a box
+ which encompasses all written glyphs.
+
+ For example the input text:
+
+
+ Hello \O[0]world \O[1]this is a test.
+
+ produces the following output:
+
+
+ Hello this is a test.
+
+ `\O2'
+ Provided that the escape occurs at the outer level, enable
+ output of glyphs and also write out to `stderr' the page
+ number and four registers encompassing the glyphs previously
+ written since the last call to `\O'.
+
+ `\O3'
+ Begin a nesting level. At start-up, `gtroff' is at outer
+ level.
+
+ `\O4'
+ End a nesting level.
+
+ `\O[5PFILENAME]'
+ This escape is `grohtml' specific. Provided that this escape
+ occurs at the outer nesting level write the `filename' to
+ `stderr'. The position of the image, P, must be specified
+ and must be one of `l', `r', `c', or `i' (left, right,
+ centered, inline). FILENAME will be associated with the
+ production of the next inline image.
+
+
+File: groff, Node: Colors, Next: I/O, Prev: Suppressing output, Up: gtroff Reference
+
+Colors
+======
+
+ - Request: .color [n]
+ - Register: \n[.color]
+ If N is missing or non-zero, activate colors (this is the default);
+ otherwise, turn it off.
+
+ The read-only number register `.color' is 1 if colors are active,
+ 0 otherwise.
+
+ Internally, `color' sets a global flag; it does not produce a
+ token. Similar to the `cp' request, you should use it at the
+ beginning of your document to control color output.
+
+ Colors can be also turned off with the `-c' command line option.
+
+ - Request: .defcolor ident scheme color_components
+ Define color with name IDENT. SCHEME can be one of the following
+ values: `rgb' (three components), `cym' (three components), `cmyk'
+ (four components), and `gray' or `grey' (one component).
+
+ Color components can be given either as a hexadecimal string or as
+ positive decimal integers in the range 0-65535. A hexadecimal
+ string contains all color components concatenated. It must start
+ with either `#' or `##'; the former specifies hex values in the
+ range 0-255 (which are internally multiplied by 257), the latter
+ in the range 0-65535. Examples: `#FFC0CB' (pink), `##ffff0000ffff'
+ (magenta). The default color name value is device-specific
+ (usually black). It is possible that the default color for `\m'
+ and `\M' is not identical.
+
+ A new scaling indicator `f' has been introduced which multiplies
+ its value by 65536; this makes it convenient to specify color
+ components as fractions in the range 0 to 1 (1f equals 65536u).
+ Example:
+
+
+ .defcolor darkgreen rgb 0.1f 0.5f 0.2f
+
+ Note that `f' is the default scaling indicator for the `defcolor'
+ request, thus the above statement is equivalent to
+
+
+ .defcolor darkgreen rgb 0.1 0.5 0.2
+
+
+ - Escape: \mC
+ - Escape: \m(CO
+ - Escape: \m[COLOR]
+ Set drawing color. The following example shows how to turn the
+ next four words red.
+
+
+ \m[red]these are in red\m[] and these words are in black.
+
+ The escape `\m[]' returns to the previous color.
+
+ The drawing color is associated with the current environment
+ (*note Environments::).
+
+ Note that `\m' doesn't produce an input token in `gtroff'. As a
+ consequence, it can be used in requests like `mc' (which expects a
+ single character as an argument) to change the color on the fly:
+
+
+ .mc \m[red]x\m[]
+
+
+ - Escape: \MC
+ - Escape: \M(CO
+ - Escape: \M[COLOR]
+ Set background color for filled objects drawn with the `\D'...''
+ commands.
+
+ A red ellipse can be created with the following code:
+
+
+ \M[red]\h'0.5i'\D'E 2i 1i'\M[]
+
+ The escape `\M[]' returns to the previous fill color.
+
+ The fill color is associated with the current environment (*note
+ Environments::).
+
+ Note that `\M' doesn't produce an input token in `gtroff'.
+
+
+File: groff, Node: I/O, Next: Postprocessor Access, Prev: Colors, Up: gtroff Reference
+
+I/O
+===
+
+ `gtroff' has several requests for including files:
+
+ - Request: .so file
+ Read in the specified FILE and includes it in place of the `so'
+ request. This is quite useful for large documents, e.g. keeping
+ each chapter in a separate file. *Note gsoelim::, for more
+ information.
+
+ Since `gtroff' replaces the `so' request with the contents of
+ `file', it makes a difference whether the data is terminated with
+ a newline or not: Assuming that file `xxx' contains the word `foo'
+ without a final newline, this
+
+
+ This is
+ .so xxx
+ bar
+
+ yields `This is foobar'.
+
+ - Request: .pso command
+ Read the standard output from the specified COMMAND and includes
+ it in place of the `pso' request.
+
+ This request causes an error if used in safer mode (which is the
+ default). Use `groff''s or `troff''s `-U' option to activate
+ unsafe mode.
+
+ The comment regarding a final newline for the `so' request is valid
+ for `pso' also.
+
+ - Request: .mso file
+ Identical to the `so' request except that `gtroff' searches for
+ the specified FILE in the same directories as macro files for the
+ the `-m' command line option. If the file name to be included has
+ the form `NAME.tmac' and it isn't found, `mso' tries to include
+ `tmac.NAME' and vice versa.
+
+ - Request: .trf file
+ - Request: .cf file
+ Transparently output the contents of FILE. Each line is output as
+ if it were preceded by `\!'; however, the lines are not subject to
+ copy mode interpretation. If the file does not end with a newline,
+ then a newline is added (`trf' only). For example, to define a
+ macro `x' containing the contents of file `f', use
+
+
+ .di x
+ .trf f
+ .di
+
+ Both `trf' and `cf', when used in a diversion, embeds an object in
+ the diversion which, when reread, causes the contents of FILE to
+ be transparently copied through to the output. In UNIX `troff',
+ the contents of FILE is immediately copied through to the output
+ regardless of whether there is a current diversion; this behaviour
+ is so anomalous that it must be considered a bug.
+
+ While `cf' copies the contents of FILE completely unprocessed,
+ `trf' disallows characters such as NUL that are not valid `gtroff'
+ input characters (*note Identifiers::).
+
+ Both requests cause a line break.
+
+ - Request: .nx [file]
+ Force `gtroff' to continue processing of the file specified as an
+ argument. If no argument is given, immediately jump to the end of
+ file.
+
+ - Request: .rd [prompt [arg1 arg2 ...]]
+ Read from standard input, and include what is read as though it
+ were part of the input file. Text is read until a blank line is
+ encountered.
+
+ If standard input is a TTY input device (keyboard), write PROMPT
+ to standard error, followed by a colon (or send BEL for a beep if
+ no argument is given).
+
+ Arguments after PROMPT are available for the input. For example,
+ the line
+
+
+ .rd data foo bar
+
+ with the input `This is \$2.' prints
+
+
+ This is bar.
+
+
+ Using the `nx' and `rd' requests, it is easy to set up form letters.
+The form letter template is constructed like this, putting the
+following lines into a file called `repeat.let':
+
+
+ .ce
+ \*(td
+ .sp 2
+ .nf
+ .rd
+ .sp
+ .rd
+ .fi
+ Body of letter.
+ .bp
+ .nx repeat.let
+
+When this is run, a file containing the following lines should be
+redirected in. Note that requests included in this file are executed
+as though they were part of the form letter. The last block of input
+is the `ex' request which tells `groff' to stop processing. If this
+was not there, `groff' would not know when to stop.
+
+
+ Trent A. Fisher
+ 708 NW 19th Av., #202
+ Portland, OR 97209
+
+ Dear Trent,
+
+ Len Adollar
+ 4315 Sierra Vista
+ San Diego, CA 92103
+
+ Dear Mr. Adollar,
+
+ .ex
+
+ - Request: .pi pipe
+ Pipe the output of `gtroff' to the shell command(s) specified by
+ PIPE. This request must occur before `gtroff' has a chance to
+ print anything.
+
+ `pi' causes an error if used in safer mode (which is the default).
+ Use `groff''s or `troff''s `-U' option to activate unsafe mode.
+
+ Multiple calls to `pi' are allowed, acting as a chain. For
+ example,
+
+
+ .pi foo
+ .pi bar
+ ...
+
+ is the same as `.pi foo | bar'.
+
+ Note that the intermediate output format of `gtroff' is piped to
+ the specified commands. Consequently, calling `groff' without the
+ `-Z' option normally causes a fatal error.
+
+ - Request: .sy cmds
+ - Register: \n[systat]
+ Execute the shell command(s) specified by CMDS. The output is not
+ saved anyplace, so it is up to the user to do so.
+
+ This request causes an error if used in safer mode (which is the
+ default). Use `groff''s or `troff''s `-U' option to activate
+ unsafe mode.
+
+ For example, the following code fragment introduces the current
+ time into a document:
+
+
+ .sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
+ (localtime(time))[2,1,0]' > /tmp/x\n[$$]
+ .so /tmp/x\n[$$]
+ .sy rm /tmp/x\n[$$]
+ \nH:\nM:\nS
+
+ Note that this works by having the `perl' script (run by `sy')
+ print out the `nr' requests which set the number registers `H',
+ `M', and `S', and then reads those commands in with the `so'
+ request.
+
+ For most practical purposes, the number registers `seconds',
+ `minutes', and `hours' which are initialized at start-up of
+ `gtroff' should be sufficient. Use the `af' request to get a
+ formatted output:
+
+
+ .af hours 00
+ .af minutes 00
+ .af seconds 00
+ \n[hours]:\n[minutes]:\n[seconds]
+
+ The `systat' read-write number register contains the return value
+ of the `system()' function executed by the last `sy' request.
+
+ - Request: .open stream file
+ - Request: .opena stream file
+ Open the specified FILE for writing and associates the specified
+ STREAM with it.
+
+ The `opena' request is like `open', but if the file exists, append
+ to it instead of truncating it.
+
+ Both `open' and `opena' cause an error if used in safer mode
+ (which is the default). Use `groff''s or `troff''s `-U' option to
+ activate unsafe mode.
+
+ - Request: .write stream data
+ - Request: .writec stream data
+ Write to the file associated with the specified STREAM. The
+ stream must previously have been the subject of an open request.
+ The remainder of the line is interpreted as the `ds' request reads
+ its second argument: A leading `"' is stripped, and it is read in
+ copy-in mode.
+
+ The `writec' request is like `write', but only `write' appends a
+ newline to the data.
+
+ - Request: .writem stream xx
+ Write the contents of the macro or string XX to the file
+ associated with the specified STREAM.
+
+ XX is read in copy mode, i.e., already formatted elements are
+ ignored. Consequently, diversions must be unformatted with the
+ `asciify' request before calling `writem'. Usually, this means a
+ loss of information.
+
+ - Request: .close stream
+ Close the specified STREAM; the stream is no longer an acceptable
+ argument to the `write' request.
+
+ Here a simple macro to write an index entry.
+
+
+ .open idx test.idx
+ .
+ .de IX
+ . write idx \\n[%] \\$*
+ ..
+ .
+ .IX test entry
+ .
+ .close idx
+
+
+ - Escape: \VE
+ - Escape: \V(EV
+ - Escape: \V[ENV]
+ Interpolate the contents of the specified environment variable ENV
+ (one-character name E, two-character name EV) as returned by the
+ function `getenv'. `\V' is interpreted in copy-in mode.
+
+
+File: groff, Node: Postprocessor Access, Next: Miscellaneous, Prev: I/O, Up: gtroff Reference
+
+Postprocessor Access
+====================
+
+ There are two escapes which give information directly to the
+postprocessor. This is particularly useful for embedding POSTSCRIPT
+into the final document.
+
+ - Escape: \X'XXX'
+ Embeds its argument into the `gtroff' output preceded with `x X'.
+
+ The escapes `\&', `\)', `\%', and `\:' are ignored within `\X',
+ `\ ' and `\~' are converted to single space characters. All other
+ escapes (except `\\' which produces a backslash) cause an error.
+
+ If the `use_charnames_in_special' keyword is set in the `DESC'
+ file, special characters no longer cause an error; the name XX is
+ represented as `\(XX)' in the `x X' output command. Additionally,
+ the backslash is represented as `\\'.
+
+ `use_charnames_in_special' is currently used by `grohtml' only.
+
+ - Escape: \YN
+ - Escape: \Y(NM
+ - Escape: \Y[NAME]
+ This is approximately equivalent to `\X'\*[NAME]'' (one-character
+ name N, two-character name NM). However, the contents of the
+ string or macro NAME are not interpreted; also it is permitted for
+ NAME to have been defined as a macro and thus contain newlines (it
+ is not permitted for the argument to `\X' to contain newlines).
+ The inclusion of newlines requires an extension to the UNIX `troff'
+ output format, and confuses drivers that do not know about this
+ extension (*note Device Control Commands::).
+
+ *Note Output Devices::.
+
+
+File: groff, Node: Miscellaneous, Next: Gtroff Internals, Prev: Postprocessor Access, Up: gtroff Reference
+
+Miscellaneous
+=============
+
+ This section documents parts of `gtroff' which cannot (yet) be
+categorized elsewhere in this manual.
+
+ - Request: .nm [start [inc [space [indent]]]]
+ Print line numbers. START is the line number of the _next_ output
+ line. INC indicates which line numbers are printed. For example,
+ the value 5 means to emit only line numbers which are multiples
+ of 5; this defaults to 1. SPACE is the space to be left between
+ the number and the text; this defaults to one digit space. The
+ fourth argument is the indentation of the line numbers, defaulting
+ to zero. Both SPACE and INDENT are given as multiples of digit
+ spaces; they can be negative also. Without any arguments, line
+ numbers are turned off.
+
+ `gtroff' reserves three digit spaces for the line number (which is
+ printed right-justified) plus the amount given by INDENT; the
+ output lines are concatenated to the line numbers, separated by
+ SPACE, and _without_ reducing the line length. Depending on the
+ value of the horizontal page offset (as set with the `po'
+ request), line numbers which are longer than the reserved space
+ stick out to the left, or the whole line is moved to the right.
+
+ Parameters corresponding to missing arguments are not changed; any
+ non-digit argument (to be more precise, any argument starting with
+ a character valid as a delimiter for identifiers) is also treated
+ as missing.
+
+ If line numbering has been disabled with a call to `nm' without an
+ argument, it can be reactivated with `.nm +0', using the
+ previously active line numbering parameters.
+
+ The parameters of `nm' are associated with the current environment
+ (*note Environments::). The current output line number is
+ available in the number register `ln'.
+
+
+ .po 1m
+ .ll 2i
+ This test shows how line numbering works with groff.
+ .nm 999
+ This test shows how line numbering works with groff.
+ .br
+ .nm xxx 3 2
+ .ll -\w'0'u
+ This test shows how line numbering works with groff.
+ .nn 2
+ This test shows how line numbering works with groff.
+
+ And here the result:
+
+
+ This test shows how
+ line numbering works
+ 999 with groff. This
+ 1000 test shows how line
+ 1001 numbering works with
+ 1002 groff.
+ This test shows how
+ line numbering
+ works with groff.
+ This test shows how
+ 1005 line numbering
+ works with groff.
+
+
+ - Request: .nn [skip]
+ Temporarily turn off line numbering. The argument is the number
+ of lines not to be numbered; this defaults to 1.
+
+ - Request: .mc glyph [dist]
+ Print a "margin character" to the right of the text.(1) (*note
+ Miscellaneous-Footnote-1::) The first argument is the glyph to be
+ printed. The second argument is the distance away from the right
+ margin. If missing, the previously set value is used; default is
+ 10pt). For text lines that are too long (that is, longer than the
+ text length plus DIST), the margin character is directly appended
+ to the lines.
+
+ With no arguments the margin character is turned off. If this
+ occurs before a break, no margin character is printed.
+
+ For empty lines and lines produced by the `tl' request no margin
+ character is emitted.
+
+ The margin character is associated with the current environment
+ (*note Environments::).
+
+ This is quite useful for indicating text that has changed, and, in
+ fact, there are programs available for doing this (they are called
+ `nrchbar' and `changebar' and can be found in any
+ `comp.sources.unix' archive.
+
+
+ .ll 3i
+ .mc |
+ This paragraph is highlighted with a margin
+ character.
+ .sp
+ Note that vertical space isn't marked.
+ .br
+ \&
+ .br
+ But we can fake it with `\&'.
+
+ Result:
+
+
+ This paragraph is highlighted |
+ with a margin character. |
+
+ Note that vertical space isn't |
+ marked. |
+ |
+ But we can fake it with `\&'. |
+
+
+ - Request: .psbb filename
+ - Register: \n[llx]
+ - Register: \n[lly]
+ - Register: \n[urx]
+ - Register: \n[ury]
+ Retrieve the bounding box of the PostScript image found in
+ FILENAME. The file must conform to Adobe's "Document Structuring
+ Conventions" (DSC); the command searches for a `%%BoundingBox'
+ comment and extracts the bounding box values into the number
+ registers `llx', `lly', `urx', and `ury'. If an error occurs (for
+ example, `psbb' cannot find the `%%BoundingBox' comment), it sets
+ the four number registers to zero.
+
+
+File: groff, Node: Miscellaneous-Footnotes, Up: Miscellaneous
+
+ (1) "Margin character" is a misnomer since it is an output glyph.
+
+
+File: groff, Node: Gtroff Internals, Next: Debugging, Prev: Miscellaneous, Up: gtroff Reference
+
+`gtroff' Internals
+==================
+
+ `gtroff' processes input in three steps. One or more input
+characters are converted to an "input token".(1) (*note Gtroff
+Internals-Footnote-1::) Then, one or more input tokens are converted
+to an "output node". Finally, output nodes are converted to the
+intermediate output language understood by all output devices.
+
+ Actually, before step one happens, `gtroff' converts certain escape
+sequences into reserved input characters (not accessible by the user);
+such reserved characters are used for other internal processing also -
+this is the very reason why not all characters are valid input. *Note
+Identifiers::, for more on this topic.
+
+ For example, the input string `fi\[:u]' is converted into a
+character token `f', a character token `i', and a special token `:u'
+(representing u umlaut). Later on, the character tokens `f' and `i'
+are merged to a single output node representing the ligature glyph `fi'
+(provided the current font has a glyph for this ligature); the same
+happens with `:u'. All output glyph nodes are `processed' which means
+that they are invariably associated with a given font, font size,
+advance width, etc. During the formatting process, `gtroff' itself
+adds various nodes to control the data flow.
+
+ Macros, diversions, and strings collect elements in two chained
+lists: a list of input tokens which have been passed unprocessed, and a
+list of output nodes. Consider the following the diversion.
+
+
+ .di xxx
+ a
+ \!b
+ c
+ .br
+ .di
+
+It contains these elements.
+
+node list token list element number
+line start node -- 1
+glyph node `a' -- 2
+word space node -- 3
+-- `b' 4
+-- `\n' 5
+glyph node `c' -- 6
+vertical size node -- 7
+vertical size node -- 8
+-- `\n' 9
+
+Elements 1, 7, and 8 are inserted by `gtroff'; the latter two (which
+are always present) specify the vertical extent of the last line,
+possibly modified by `\x'. The `br' request finishes the current
+partial line, inserting a newline input token which is subsequently
+converted to a space when the diversion is reread. Note that the word
+space node has a fixed width which isn't stretchable anymore. To
+convert horizontal space nodes back to input tokens, use the `unformat'
+request.
+
+ Macros only contain elements in the token list (and the node list is
+empty); diversions and strings can contain elements in both lists.
+
+ Note that the `chop' request simply reduces the number of elements
+in a macro, string, or diversion by one. Exceptions are "compatibility
+save" and "compatibility ignore" input tokens which are ignored. The
+`substring' request also ignores those input tokens.
+
+ Some requests like `tr' or `cflags' work on glyph identifiers only;
+this means that the associated glyph can be changed without destroying
+this association. This can be very helpful for substituting glyphs.
+In the following example, we assume that glyph `foo' isn't available by
+default, so we provide a substitution using the `fchar' request and map
+it to input character `x'.
+
+
+ .fchar \[foo] foo
+ .tr x \[foo]
+
+Now let us assume that we install an additional special font `bar'
+which has glyph `foo'.
+
+
+ .special bar
+ .rchar \[foo]
+
+Since glyphs defined with `fchar' are searched before glyphs in special
+fonts, we must call `rchar' to remove the definition of the fallback
+glyph. Anyway, the translation is still active; `x' now maps to the
+real glyph `foo'.
+
+
+File: groff, Node: Gtroff Internals-Footnotes, Up: Gtroff Internals
+
+ (1) Except the escapes `\f', `\F', `\H', `\m', `\M', `\R', `\s', and
+`\S' which are processed immediately if not in copy-in mode.
+
+
+File: groff, Node: Debugging, Next: Implementation Differences, Prev: Gtroff Internals, Up: gtroff Reference
+
+Debugging
+=========
+
+ `gtroff' is not easy to debug, but there are some useful features
+and strategies for debugging.
+
+ - Request: .lf line filename
+ Change the line number and the file name `gtroff' shall use for
+ error and warning messages. LINE is the input line number of the
+ _next_ line.
+
+ Without argument, the request is ignored.
+
+ This is a debugging aid for documents which are split into many
+ files, then put together with `soelim' and other preprocessors.
+ Usually, it isn't invoked manually.
+
+ - Request: .tm string
+ - Request: .tm1 string
+ - Request: .tmc string
+ Send STRING to the standard error output; this is very useful for
+ printing debugging messages among other things.
+
+ STRING is read in copy mode.
+
+ The `tm' request ignores leading spaces of STRING; `tm1' handles
+ its argument similar to the `ds' request: a leading double quote
+ in STRING is stripped to allow initial blanks.
+
+ The `tmc' request is similar to `tm1' but does not append a
+ newline (as is done in `tm' and `tm1').
+
+ - Request: .ab [string]
+ Similar to the `tm' request, except that it causes `gtroff' to
+ stop processing. With no argument it prints `User Abort.' to
+ standard error.
+
+ - Request: .ex
+ The `ex' request also causes `gtroff' to stop processing; see also
+ *Note I/O::.
+
+ When doing something involved it is useful to leave the debugging
+statements in the code and have them turned on by a command line flag.
+
+
+ .if \n(DB .tm debugging output
+
+To activate these statements say
+
+
+ groff -rDB=1 file
+
+ If it is known in advance that there will be many errors and no
+useful output, `gtroff' can be forced to suppress formatted output with
+the `-z' flag.
+
+ - Request: .pm
+ Print the entire symbol table on `stderr'. Names of all defined
+ macros, strings, and diversions are print together with their size
+ in bytes. Since `gtroff' sometimes adds nodes by itself, the
+ returned size can be larger than expected.
+
+ This request differs from UNIX `troff': `gtroff' reports the sizes
+ of diversions, ignores an additional argument to print only the
+ total of the sizes, and the size isn't returned in blocks of 128
+ characters.
+
+ - Request: .pnr
+ Print the names and contents of all currently defined number
+ registers on `stderr'.
+
+ - Request: .ptr
+ Print the names and positions of all traps (not including input
+ line traps and diversion traps) on `stderr'. Empty slots in the
+ page trap list are printed as well, because they can affect the
+ priority of subsequently planted traps.
+
+ - Request: .fl
+ Instruct `gtroff' to flush its output immediately. The intent is
+ for interactive use, but this behaviour is currently not
+ implemented in `gtroff'. Contrary to UNIX `troff', TTY output is
+ sent to a device driver also (`grotty'), making it non-trivial to
+ communicate interactively.
+
+ This request causes a line break.
+
+ - Request: .backtrace
+ Print a backtrace of the input stack to the standard error stream.
+
+ Consider the following in file `test':
+
+
+ .de xxx
+ . backtrace
+ ..
+ .de yyy
+ . xxx
+ ..
+ .
+ .yyy
+
+ On execution, `gtroff' prints the following:
+
+
+ test:2: backtrace: macro `xxx'
+ test:5: backtrace: macro `yyy'
+ test:8: backtrace: file `test'
+
+ The option `-b' of `gtroff' internally calls a variant of this
+ request on each error and warning.
+
+ - Register: \n[slimit]
+ Use the `slimit' number register to set the maximum number of
+ objects on the input stack. If `slimit' is less than or equal
+ to 0, there is no limit set. With no limit, a buggy recursive
+ macro can exhaust virtual memory.
+
+ The default value is 1000; this is a compile-time constant.
+
+ - Request: .warnscale si
+ Set the scaling indicator used in warnings to SI. Valid values for
+ SI are `u', `i', `c', `p', and `P'. At startup, it is set to `i'.
+
+ - Request: .spreadwarn [limit]
+ Make `gtroff' emit a warning if the additional space inserted for
+ each space between words in an output line is larger or equal to
+ LIMIT. A negative value is changed to zero; no argument toggles
+ the warning on and off without changing LIMIT. The default scaling
+ indicator is `m'. At startup, `spreadwarn' is deactivated, and
+ LIMIT is set to 3m.
+
+ For example,
+
+
+ .spreadwarn 0.2m
+
+ will cause a warning if `gtroff' must add 0.2m or more for each
+ interword space in a line.
+
+ This request is active only if text is justified to both margins
+ (using `.ad b').
+
+ `gtroff' has command line options for printing out more warnings
+(`-w') and for printing backtraces (`-b') when a warning or an error
+occurs. The most verbose level of warnings is `-ww'.
+
+ - Request: .warn [flags]
+ - Register: \n[.warn]
+ Control the level of warnings checked for. The FLAGS are the sum
+ of the numbers associated with each warning that is to be enabled;
+ all other warnings are disabled. The number associated with each
+ warning is listed below. For example, `.warn 0' disables all
+ warnings, and `.warn 1' disables all warnings except that about
+ missing glyphs. If no argument is given, all warnings are enabled.
+
+ The read-only number register `.warn' contains the current warning
+ level.
+
+* Menu:
+
+* Warnings::
+
+
+File: groff, Node: Warnings, Prev: Debugging, Up: Debugging
+
+Warnings
+--------
+
+ The warnings that can be given to `gtroff' are divided into the
+following categories. The name associated with each warning is used by
+the `-w' and `-W' options; the number is used by the `warn' request and
+by the `.warn' register.
+
+`char'
+`1'
+ Non-existent glyphs.(1) (*note Warnings-Footnote-1::) This is
+ enabled by default.
+
+`number'
+`2'
+ Invalid numeric expressions. This is enabled by default. *Note
+ Expressions::.
+
+`break'
+`4'
+ In fill mode, lines which could not be broken so that their length
+ was less than the line length. This is enabled by default.
+
+`delim'
+`8'
+ Missing or mismatched closing delimiters.
+
+`el'
+`16'
+ Use of the `el' request with no matching `ie' request. *Note
+ if-else::.
+
+`scale'
+`32'
+ Meaningless scaling indicators.
+
+`range'
+`64'
+ Out of range arguments.
+
+`syntax'
+`128'
+ Dubious syntax in numeric expressions.
+
+`di'
+`256'
+ Use of `di' or `da' without an argument when there is no current
+ diversion.
+
+`mac'
+`512'
+ Use of undefined strings, macros and diversions. When an undefined
+ string, macro, or diversion is used, that string is automatically
+ defined as empty. So, in most cases, at most one warning is given
+ for each name.
+
+`reg'
+`1024'
+ Use of undefined number registers. When an undefined number
+ register is used, that register is automatically defined to have a
+ value of 0. So, in most cases, at most one warning is given for
+ use of a particular name.
+
+`tab'
+`2048'
+ Use of a tab character where a number was expected.
+
+`right-brace'
+`4096'
+ Use of `\}' where a number was expected.
+
+`missing'
+`8192'
+ Requests that are missing non-optional arguments.
+
+`input'
+`16384'
+ Invalid input characters.
+
+`escape'
+`32768'
+ Unrecognized escape sequences. When an unrecognized escape
+ sequence `\X' is encountered, the escape character is ignored, and
+ X is printed.
+
+`space'
+`65536'
+ Missing space between a request or macro and its argument. This
+ warning is given when an undefined name longer than two characters
+ is encountered, and the first two characters of the name make a
+ defined name. The request or macro is not invoked. When this
+ warning is given, no macro is automatically defined. This is
+ enabled by default. This warning never occurs in compatibility
+ mode.
+
+`font'
+`131072'
+ Non-existent fonts. This is enabled by default.
+
+`ig'
+`262144'
+ Invalid escapes in text ignored with the `ig' request. These are
+ conditions that are errors when they do not occur in ignored text.
+
+`color'
+`524288'
+ Color related warnings.
+
+`all'
+ All warnings except `di', `mac' and `reg'. It is intended that
+ this covers all warnings that are useful with traditional macro
+ packages.
+
+`w'
+ All warnings.
+
+
+File: groff, Node: Warnings-Footnotes, Up: Warnings
+
+ (1) `char' is a misnomer since it reports missing glyphs - there
+aren't missing input characters, only invalid ones.
+
+
+File: groff, Node: Implementation Differences, Prev: Debugging, Up: gtroff Reference
+
+Implementation Differences
+==========================
+
+ GNU `troff' has a number of features which cause incompatibilities
+with documents written with old versions of `troff'.
+
+ Long names cause some incompatibilities. UNIX `troff' interprets
+
+
+ .dsabcd
+
+as defining a string `ab' with contents `cd'. Normally, GNU `troff'
+interprets this as a call of a macro named `dsabcd'. Also UNIX `troff'
+interprets `\*[' or `\n[' as references to a string or number register
+called `['. In GNU `troff', however, this is normally interpreted as
+the start of a long name. In compatibility mode GNU `troff' interprets
+long names in the traditional way (which means that they are not
+recognized as names).
+
+ - Request: .cp [n]
+ - Request: .do cmd
+ - Register: \n[.C]
+ If N is missing or non-zero, turn on compatibility mode;
+ otherwise, turn it off.
+
+ The read-only number register `.C' is 1 if compatibility mode is
+ on, 0 otherwise.
+
+ Compatibility mode can be also turned on with the `-C' command line
+ option.
+
+ The `do' request turns off compatibility mode while executing its
+ arguments as a `gtroff' command.
+
+
+ .do fam T
+
+ executes the `fam' request when compatibility mode is enabled.
+
+ `gtroff' restores the previous compatibility setting before
+ interpreting any files sourced by the CMD.
+
+ Two other features are controlled by `-C'. If not in compatibility
+mode, GNU `troff' preserves the input level in delimited arguments:
+
+
+ .ds xx '
+ \w'abc\*(xxdef'
+
+In compatibility mode, the string `72def'' is returned; without `-C'
+the resulting string is `168' (assuming a TTY output device).
+
+ Finally, the escapes `\f', `\H', `\m', `\M', `\R', `\s', and `\S'
+are transparent for recognizing the beginning of a line only in
+compatibility mode (this is a rather obscure feature). For example,
+the code
+
+
+ .de xx
+ Hallo!
+ ..
+ \fB.xx\fP
+
+ prints `Hallo!' in bold face if in compatibility mode, and `.xx' in
+bold face otherwise.
+
+ GNU `troff' does not allow the use of the escape sequences `\|',
+`\^', `\&', `\{', `\}', `\<SP>', `\'', `\`', `\-', `\_', `\!', `\%',
+and `\c' in names of strings, macros, diversions, number registers,
+fonts or environments; UNIX `troff' does. The `\A' escape sequence
+(*note Identifiers::) may be helpful in avoiding use of these escape
+sequences in names.
+
+ Fractional point sizes cause one noteworthy incompatibility. In
+UNIX `troff' the `ps' request ignores scale indicators and thus
+
+
+ .ps 10u
+
+sets the point size to 10 points, whereas in GNU `troff' it sets the
+point size to 10 scaled points. *Note Fractional Type Sizes::, for
+more information.
+
+ In GNU `troff' there is a fundamental difference between
+(unformatted) input characters and (formatted) output glyphs.
+Everything that affects how a glyph is output is stored with the glyph
+node; once a glyph node has been constructed it is unaffected by any
+subsequent requests that are executed, including `bd', `cs', `tkf',
+`tr', or `fp' requests. Normally glyphs are constructed from input
+characters at the moment immediately before the glyph is added to the
+current output line. Macros, diversions and strings are all, in fact,
+the same type of object; they contain lists of input characters and
+glyph nodes in any combination. A glyph node does not behave like an
+input character for the purposes of macro processing; it does not
+inherit any of the special properties that the input character from
+which it was constructed might have had. For example,
+
+
+ .di x
+ \\\\
+ .br
+ .di
+ .x
+
+prints `\\' in GNU `troff'; each pair of input backslashes is turned
+into one output backslash and the resulting output backslashes are not
+interpreted as escape characters when they are reread. UNIX `troff'
+would interpret them as escape characters when they were reread and
+would end up printing one `\'. The correct way to obtain a printable
+backslash is to use the `\e' escape sequence: This always prints a
+single instance of the current escape character, regardless of whether
+or not it is used in a diversion; it also works in both GNU `troff' and
+UNIX `troff'.(1) (*note Implementation Differences-Footnote-1::) To
+store, for some reason, an escape sequence in a diversion that will be
+interpreted when the diversion is reread, either use the traditional
+`\!' transparent output facility, or, if this is unsuitable, the new
+`\?' escape sequence.
+
+ *Note Diversions::, and *Note Gtroff Internals::, for more
+information.
+
+
+File: groff, Node: Implementation Differences-Footnotes, Up: Implementation Differences
+
+ (1) To be completely independent of the current escape character,
+use `\(rs' which represents a reverse solidus (backslash) glyph.
+
+
+File: groff, Node: Preprocessors, Next: Output Devices, Prev: gtroff Reference, Up: Top
+
+Preprocessors
+*************
+
+ This chapter describes all preprocessors that come with `groff' or
+which are freely available.
+
+* Menu:
+
+* geqn::
+* gtbl::
+* gpic::
+* ggrn::
+* grap::
+* grefer::
+* gsoelim::
+
+
+File: groff, Node: geqn, Next: gtbl, Prev: Preprocessors, Up: Preprocessors
+
+`geqn'
+======
+
+* Menu:
+
+* Invoking geqn::
+
+
+File: groff, Node: Invoking geqn, Prev: geqn, Up: geqn
+
+Invoking `geqn'
+---------------
+
+
+File: groff, Node: gtbl, Next: gpic, Prev: geqn, Up: Preprocessors
+
+`gtbl'
+======
+
+* Menu:
+
+* Invoking gtbl::
+
+
+File: groff, Node: Invoking gtbl, Prev: gtbl, Up: gtbl
+
+Invoking `gtbl'
+---------------
+
+
+File: groff, Node: gpic, Next: ggrn, Prev: gtbl, Up: Preprocessors
+
+`gpic'
+======
+
+* Menu:
+
+* Invoking gpic::
+
+
+File: groff, Node: Invoking gpic, Prev: gpic, Up: gpic
+
+Invoking `gpic'
+---------------
+
+
+File: groff, Node: ggrn, Next: grap, Prev: gpic, Up: Preprocessors
+
+`ggrn'
+======
+
+* Menu:
+
+* Invoking ggrn::
+
+
+File: groff, Node: Invoking ggrn, Prev: ggrn, Up: ggrn
+
+Invoking `ggrn'
+---------------
+
+
+File: groff, Node: grap, Next: grefer, Prev: ggrn, Up: Preprocessors
+
+`grap'
+======
+
+ A free implementation of `grap', written by Ted Faber, is available
+as an extra package from the following address:
+
+ <http://www.lunabase.org/~faber/Vault/software/grap/>
+
+
+File: groff, Node: grefer, Next: gsoelim, Prev: grap, Up: Preprocessors
+
+`grefer'
+========
+
+* Menu:
+
+* Invoking grefer::
+
+
+File: groff, Node: Invoking grefer, Prev: grefer, Up: grefer
+
+Invoking `grefer'
+-----------------
+
+
+File: groff, Node: gsoelim, Prev: grefer, Up: Preprocessors
+
+`gsoelim'
+=========
+
+* Menu:
+
+* Invoking gsoelim::
+
+
+File: groff, Node: Invoking gsoelim, Prev: gsoelim, Up: gsoelim
+
+Invoking `gsoelim'
+------------------
+
+
+File: groff, Node: Output Devices, Next: File formats, Prev: Preprocessors, Up: Top
+
+Output Devices
+**************
+
+* Menu:
+
+* Special Characters::
+* grotty::
+* grops::
+* grodvi::
+* grolj4::
+* grolbp::
+* grohtml::
+* gxditview::
+
+
+File: groff, Node: Special Characters, Next: grotty, Prev: Output Devices, Up: Output Devices
+
+Special Characters
+==================
+
+ *Note Font Files::.
+
+
+File: groff, Node: grotty, Next: grops, Prev: Special Characters, Up: Output Devices
+
+`grotty'
+========
+
+* Menu:
+
+* Invoking grotty::
+
+
+File: groff, Node: Invoking grotty, Prev: grotty, Up: grotty
+
+Invoking `grotty'
+-----------------
+
diff --git a/contrib/groff/doc/groff-8 b/contrib/groff/doc/groff-8
new file mode 100644
index 0000000..540f8fd
--- /dev/null
+++ b/contrib/groff/doc/groff-8
@@ -0,0 +1,1268 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+File: groff, Node: grops, Next: grodvi, Prev: grotty, Up: Output Devices
+
+`grops'
+=======
+
+* Menu:
+
+* Invoking grops::
+* Embedding PostScript::
+
+
+File: groff, Node: Invoking grops, Next: Embedding PostScript, Prev: grops, Up: grops
+
+Invoking `grops'
+----------------
+
+
+File: groff, Node: Embedding PostScript, Prev: Invoking grops, Up: grops
+
+Embedding POSTSCRIPT
+--------------------
+
+
+File: groff, Node: grodvi, Next: grolj4, Prev: grops, Up: Output Devices
+
+`grodvi'
+========
+
+* Menu:
+
+* Invoking grodvi::
+
+
+File: groff, Node: Invoking grodvi, Prev: grodvi, Up: grodvi
+
+Invoking `grodvi'
+-----------------
+
+
+File: groff, Node: grolj4, Next: grolbp, Prev: grodvi, Up: Output Devices
+
+`grolj4'
+========
+
+* Menu:
+
+* Invoking grolj4::
+
+
+File: groff, Node: Invoking grolj4, Prev: grolj4, Up: grolj4
+
+Invoking `grolj4'
+-----------------
+
+
+File: groff, Node: grolbp, Next: grohtml, Prev: grolj4, Up: Output Devices
+
+`grolbp'
+========
+
+* Menu:
+
+* Invoking grolbp::
+
+
+File: groff, Node: Invoking grolbp, Prev: grolbp, Up: grolbp
+
+Invoking `grolbp'
+-----------------
+
+
+File: groff, Node: grohtml, Next: gxditview, Prev: grolbp, Up: Output Devices
+
+`grohtml'
+=========
+
+* Menu:
+
+* Invoking grohtml::
+* grohtml specific registers and strings::
+
+
+File: groff, Node: Invoking grohtml, Next: grohtml specific registers and strings, Prev: grohtml, Up: grohtml
+
+Invoking `grohtml'
+------------------
+
+
+File: groff, Node: grohtml specific registers and strings, Prev: Invoking grohtml, Up: grohtml
+
+`grohtml' specific registers and strings
+----------------------------------------
+
+ - Register: \n[ps4html]
+ - String: \*[www-image-template]
+ The registers `ps4html' and `www-image-template' are defined by
+ the `pre-grohtml' preprocessor. `pre-grohtml' reads in the
+ `troff' input, marks up the inline equations and passes the result
+ firstly to
+
+
+ troff -Tps -rps4html=1 -dwww-image-template=TEMPLATE
+
+ and secondly to
+
+
+ troff -Thtml
+
+ The PostScript device is used to create all the image files, and
+ the register `ps4html' enables the macro sets to ignore floating
+ keeps, footers, and headings.
+
+ The register `www-image-template' is set to the user specified
+ template name or the default name.
+
+
+File: groff, Node: gxditview, Prev: grohtml, Up: Output Devices
+
+`gxditview'
+===========
+
+* Menu:
+
+* Invoking gxditview::
+
+
+File: groff, Node: Invoking gxditview, Prev: gxditview, Up: gxditview
+
+Invoking `gxditview'
+--------------------
+
+
+File: groff, Node: File formats, Next: Installation, Prev: Output Devices, Up: Top
+
+File formats
+************
+
+ All files read and written by `gtroff' are text files. The
+following two sections describe their format.
+
+* Menu:
+
+* gtroff Output::
+* Font Files::
+
+
+File: groff, Node: gtroff Output, Next: Font Files, Prev: File formats, Up: File formats
+
+`gtroff' Output
+===============
+
+ This section describes the intermediate output format of GNU
+`troff'. This output is produced by a run of `gtroff' before it is fed
+into a device postprocessor program.
+
+ As `groff' is a wrapper program around `gtroff' that automatically
+calls a postprocessor, this output does not show up normally. This is
+why it is called "intermediate". `groff' provides the option `-Z' to
+inhibit postprocessing, such that the produced intermediate output is
+sent to standard output just like calling `gtroff' manually.
+
+ Here, the term "troff output" describes what is output by `gtroff',
+while "intermediate output" refers to the language that is accepted by
+the parser that prepares this output for the postprocessors. This
+parser is smarter on whitespace and implements obsolete elements for
+compatibility, otherwise both formats are the same.(1) (*note gtroff
+Output-Footnote-1::)
+
+ The main purpose of the intermediate output concept is to facilitate
+the development of postprocessors by providing a common programming
+interface for all devices. It has a language of its own that is
+completely different from the `gtroff' language. While the `gtroff'
+language is a high-level programming language for text processing, the
+intermediate output language is a kind of low-level assembler language
+by specifying all positions on the page for writing and drawing.
+
+ The intermediate output produced by `gtroff' is fairly readable,
+while output from AT&T `troff' is rather hard to understand because of
+strange habits that are still supported, but not used any longer by
+`gtroff'.
+
+* Menu:
+
+* Language Concepts::
+* Command Reference::
+* Intermediate Output Examples::
+* Output Language Compatibility::
+
+
+File: groff, Node: gtroff Output-Footnotes, Up: gtroff Output
+
+ (1) The parser and postprocessor for intermediate output can be
+found in the file
+`GROFF-SOURCE-DIR/src/libs/libdriver/input.cc'.
+
+
+File: groff, Node: Language Concepts, Next: Command Reference, Prev: gtroff Output, Up: gtroff Output
+
+Language Concepts
+-----------------
+
+ During the run of `gtroff', the input data is cracked down to the
+information on what has to be printed at what position on the intended
+device. So the language of the intermediate output format can be quite
+small. Its only elements are commands with and without arguments. In
+this section, the term "command" always refers to the intermediate
+output language, and never to the `gtroff' language used for document
+formatting. There are commands for positioning and text writing, for
+drawing, and for device controlling.
+
+* Menu:
+
+* Separation::
+* Argument Units::
+* Document Parts::
+
+
+File: groff, Node: Separation, Next: Argument Units, Prev: Language Concepts, Up: Language Concepts
+
+Separation
+..........
+
+ AT&T `troff' output has strange requirements on whitespace. The
+`gtroff' output parser, however, is smart about whitespace by making it
+maximally optional. The whitespace characters, i.e., the tab, space,
+and newline characters, always have a syntactical meaning. They are
+never printable because spacing within the output is always done by
+positioning commands.
+
+ Any sequence of space or tab characters is treated as a single
+"syntactical space". It separates commands and arguments, but is only
+required when there would occur a clashing between the command code and
+the arguments without the space. Most often, this happens when
+variable-length command names, arguments, argument lists, or command
+clusters meet. Commands and arguments with a known, fixed length need
+not be separated by syntactical space.
+
+ A line break is a syntactical element, too. Every command argument
+can be followed by whitespace, a comment, or a newline character. Thus
+a "syntactical line break" is defined to consist of optional
+syntactical space that is optionally followed by a comment, and a
+newline character.
+
+ The normal commands, those for positioning and text, consist of a
+single letter taking a fixed number of arguments. For historical
+reasons, the parser allows to stack such commands on the same line, but
+fortunately, in `gtroff''s intermediate output, every command with at
+least one argument is followed by a line break, thus providing
+excellent readability.
+
+ The other commands - those for drawing and device controlling - have
+a more complicated structure; some recognize long command names, and
+some take a variable number of arguments. So all `D' and `x' commands
+were designed to request a syntactical line break after their last
+argument. Only one command, `x X', has an argument that can stretch
+over several lines; all other commands must have all of their arguments
+on the same line as the command, i.e., the arguments may not be
+splitted by a line break.
+
+ Empty lines (these are lines containing only space and/or a
+comment), can occur everywhere. They are just ignored.
+
+
+File: groff, Node: Argument Units, Next: Document Parts, Prev: Separation, Up: Language Concepts
+
+Argument Units
+..............
+
+ Some commands take integer arguments that are assumed to represent
+values in a measurement unit, but the letter for the corresponding
+scale indicator is not written with the output command arguments. Most
+commands assume the scale indicator `u', the basic unit of the device,
+some use `z', the scaled point unit of the device, while others, such
+as the color commands, expect plain integers.
+
+ Note that single characters can have the eighth bit set, as can the
+names of fonts and special characters. The names of characters and
+fonts can be of arbitrary length. A character that is to be printed
+will always be in the current font.
+
+ A string argument is always terminated by the next whitespace
+character (space, tab, or newline); an embedded `#' character is
+regarded as part of the argument, not as the beginning of a comment
+command. An integer argument is already terminated by the next
+non-digit character, which then is regarded as the first character of
+the next argument or command.
+
+
+File: groff, Node: Document Parts, Prev: Argument Units, Up: Language Concepts
+
+Document Parts
+..............
+
+ A correct intermediate output document consists of two parts, the
+"prologue" and the "body".
+
+ The task of the prologue is to set the general device parameters
+using three exactly specified commands. `gtroff''s prologue is
+guaranteed to consist of the following three lines (in that order):
+
+
+ x T DEVICE
+ x res N H V
+ x init
+
+with the arguments set as outlined in *Note Device Control Commands::.
+Note that the parser for the intermediate output format is able to
+swallow additional whitespace and comments as well even in the prologue.
+
+ The body is the main section for processing the document data.
+Syntactically, it is a sequence of any commands different from the ones
+used in the prologue. Processing is terminated as soon as the first
+`x stop' command is encountered; the last line of any `gtroff'
+intermediate output always contains such a command.
+
+ Semantically, the body is page oriented. A new page is started by a
+`p' command. Positioning, writing, and drawing commands are always
+done within the current page, so they cannot occur before the first `p'
+command. Absolute positioning (by the `H' and `V' commands) is done
+relative to the current page; all other positioning is done relative to
+the current location within this page.
+
+
+File: groff, Node: Command Reference, Next: Intermediate Output Examples, Prev: Language Concepts, Up: gtroff Output
+
+Command Reference
+-----------------
+
+ This section describes all intermediate output commands, both from
+AT&T `troff' as well as the `gtroff' extensions.
+
+* Menu:
+
+* Comment Command::
+* Simple Commands::
+* Graphics Commands::
+* Device Control Commands::
+* Obsolete Command::
+
+
+File: groff, Node: Comment Command, Next: Simple Commands, Prev: Command Reference, Up: Command Reference
+
+Comment Command
+...............
+
+`#ANYTHING<end of line>'
+ A comment. Ignore any characters from the `#' character up to the
+ next newline character.
+
+ This command is the only possibility for commenting in the
+ intermediate output. Each comment can be preceded by arbitrary
+ syntactical space; every command can be terminated by a comment.
+
+
+File: groff, Node: Simple Commands, Next: Graphics Commands, Prev: Comment Command, Up: Command Reference
+
+Simple Commands
+...............
+
+ The commands in this subsection have a command code consisting of a
+single character, taking a fixed number of arguments. Most of them are
+commands for positioning and text writing. These commands are smart
+about whitespace. Optionally, syntactical space can be inserted
+before, after, and between the command letter and its arguments. All
+of these commands are stackable, i.e., they can be preceded by other
+simple commands or followed by arbitrary other commands on the same
+line. A separating syntactical space is only necessary when two
+integer arguments would clash or if the preceding argument ends with a
+string argument.
+
+`C XXX<whitespace>'
+ Print a special character named XXX. The trailing syntactical
+ space or line break is necessary to allow glyph names of arbitrary
+ length. The glyph is printed at the current print position; the
+ glyph's size is read from the font file. The print position is
+ not changed.
+
+`c G'
+ Print glyph G at the current print position;(1) (*note Simple
+ Commands-Footnote-1::) the glyph's size is read from the font
+ file. The print position is not changed.
+
+`f N'
+ Set font to font number N (a non-negative integer).
+
+`H N'
+ Move right to the absolute vertical position N (a non-negative
+ integer in basic units `u' relative to left edge of current page.
+
+`h N'
+ Move N (a non-negative integer) basic units `u' horizontally to
+ the right. The original UNIX troff manual allows negative values
+ for N also, but `gtroff' doesn't use this.
+
+`m COLOR-SCHEME [COMPONENT ...]'
+ Set the color for text (glyphs), line drawing, and the outline of
+ graphic objects using different color schemes; the analoguous
+ command for the filling color of graphic objects is `DF'. The
+ color components are specified as integer arguments between 0 and
+ 65536. The number of color components and their meaning vary for
+ the different color schemes. These commands are generated by
+ `gtroff''s escape sequence `\m'. No position changing. These
+ commands are a `gtroff' extension.
+
+ `mc CYAN MAGENTA YELLOW'
+ Set color using the CMY color scheme, having the 3 color
+ components CYAN, MAGENTA, and YELLOW.
+
+ `md'
+ Set color to the default color value (black in most cases).
+ No component arguments.
+
+ `mg GRAY'
+ Set color to the shade of gray given by the argument, an
+ integer between 0 (black) and 65536 (white).
+
+ `mk CYAN MAGENTA YELLOW BLACK'
+ Set color using the CMYK color scheme, having the 4 color
+ components CYAN, MAGENTA, YELLOW, and BLACK.
+
+ `mr RED GREEN BLUE'
+ Set color using the RGB color scheme, having the 3 color
+ components RED, GREEN, and BLUE.
+
+`N N'
+ Print glyph with index N (a non-negative integer) of the current
+ font. This command is a `gtroff' extension.
+
+`n B A'
+ Inform the device about a line break, but no positioning is done by
+ this command. In AT&T `troff', the integer arguments B and A
+ informed about the space before and after the current line to make
+ the intermediate output more human readable without performing any
+ action. In `groff', they are just ignored, but they must be
+ provided for compatibility reasons.
+
+`p N'
+ Begin a new page in the outprint. The page number is set to N.
+ This page is completely independent of pages formerly processed
+ even if those have the same page number. The vertical position on
+ the outprint is automatically set to 0. All positioning, writing,
+ and drawing is always done relative to a page, so a `p' command
+ must be issued before any of these commands.
+
+`s N'
+ Set point size to N scaled points (this is unit `z'). AT&T
+ `troff' used the unit points (`p') instead. *Note Output Language
+ Compatibility::.
+
+`t XXX<whitespace>'
+`t XXX DUMMY-ARG<whitespace>'
+ Print a word, i.e., a sequence of characters XXX representing
+ output glyphs which names are single characters, terminated by a
+ space character or a line break; an optional second integer
+ argument is ignored (this allows the formatter to generate an even
+ number of arguments). The first glyph should be printed at the
+ current position, the current horizontal position should then be
+ increased by the width of the first glyph, and so on for each
+ glyph. The widths of the glyphs are read from the font file,
+ scaled for the current point size, and rounded to a multiple of
+ the horizontal resolution. Special characters cannot be printed
+ using this command (use the `C' command for special characters).
+ This command is a `gtroff' extension; it is only used for devices
+ whose `DESC' file contains the `tcommand' keyword (*note DESC File
+ Format::).
+
+`u N XXX<whitespace>'
+ Print word with track kerning. This is the same as the `t'
+ command except that after printing each glyph, the current
+ horizontal position is increased by the sum of the width of that
+ glyph and N (an integer in basic units `u'). This command is a
+ `gtroff' extension; it is only used for devices whose `DESC' file
+ contains the `tcommand' keyword (*note DESC File Format::).
+
+`V N'
+ Move down to the absolute vertical position N (a non-negative
+ integer in basic units `u') relative to upper edge of current page.
+
+`v N'
+ Move N basic units `u' down (N is a non-negative integer). The
+ original UNIX troff manual allows negative values for N also, but
+ `gtroff' doesn't use this.
+
+`w'
+ Informs about a paddable white space to increase readability. The
+ spacing itself must be performed explicitly by a move command.
+
+
+File: groff, Node: Simple Commands-Footnotes, Up: Simple Commands
+
+ (1) `c' is actually a misnomer since it outputs a glyph.
+
+
+File: groff, Node: Graphics Commands, Next: Device Control Commands, Prev: Simple Commands, Up: Command Reference
+
+Graphics Commands
+.................
+
+ Each graphics or drawing command in the intermediate output starts
+with the letter `D', followed by one or two characters that specify a
+subcommand; this is followed by a fixed or variable number of integer
+arguments that are separated by a single space character. A `D'
+command may not be followed by another command on the same line (apart
+from a comment), so each `D' command is terminated by a syntactical
+line break.
+
+ `gtroff' output follows the classical spacing rules (no space
+between command and subcommand, all arguments are preceded by a single
+space character), but the parser allows optional space between the
+command letters and makes the space before the first argument optional.
+As usual, each space can be any sequence of tab and space characters.
+
+ Some graphics commands can take a variable number of arguments. In
+this case, they are integers representing a size measured in basic
+units `u'. The arguments called H1, H2, ..., HN stand for horizontal
+distances where positive means right, negative left. The arguments
+called V1, V2, ..., VN stand for vertical distances where positive
+means down, negative up. All these distances are offsets relative to
+the current location.
+
+ Unless indicated otherwise, each graphics command directly
+corresponds to a similar `gtroff' `\D' escape sequence. *Note Drawing
+Requests::.
+
+ Unknown `D' commands are assumed to be device-specific. Its
+arguments are parsed as strings; the whole information is then sent to
+the postprocessor.
+
+ In the following command reference, the syntax element <line break>
+means a syntactical line break as defined above.
+
+`D~ H1 V1 H2 V2 ... HN VN<line break>'
+ Draw B-spline from current position to offset (H1,V1), then to
+ offset (H2,V2), if given, etc. up to (HN,VN). This command takes
+ a variable number of argument pairs; the current position is moved
+ to the terminal point of the drawn curve.
+
+`Da H1 V1 H2 V2<line break>'
+ Draw arc from current position to (H1,V1)+(H2,V2) with center at
+ (H1,V1); then move the current position to the final point of the
+ arc.
+
+`DC D<line break>'
+`DC D DUMMY-ARG<line break>'
+ Draw a solid circle using the current fill color with diameter D
+ (integer in basic units `u') with leftmost point at the current
+ position; then move the current position to the rightmost point of
+ the circle. An optional second integer argument is ignored (this
+ allows the formatter to generate an even number of arguments).
+ This command is a `gtroff' extension.
+
+`Dc D<line break>'
+ Draw circle line with diameter D (integer in basic units `u') with
+ leftmost point at the current position; then move the current
+ position to the rightmost point of the circle.
+
+`DE H V<line break>'
+ Draw a solid ellipse in the current fill color with a horizontal
+ diameter of H and a vertical diameter of V (both integers in basic
+ units `u') with the leftmost point at the current position; then
+ move to the rightmost point of the ellipse. This command is a
+ `gtroff' extension.
+
+`De H V<line break>'
+ Draw an outlined ellipse with a horizontal diameter of H and a
+ vertical diameter of V (both integers in basic units `u') with the
+ leftmost point at current position; then move to the rightmost
+ point of the ellipse.
+
+`DF COLOR-SCHEME [COMPONENT ...]<line break>'
+ Set fill color for solid drawing objects using different color
+ schemes; the analoguous command for setting the color of text, line
+ graphics, and the outline of graphic objects is `m'. The color
+ components are specified as integer arguments between 0 and 65536.
+ The number of color components and their meaning vary for the
+ different color schemes. These commands are generated by
+ `gtroff''s escape sequences `\D'F ...'' and `\M' (with no other
+ corresponding graphics commands). No position changing. This
+ command is a `gtroff' extension.
+
+ `DFc CYAN MAGENTA YELLOW<line break>'
+ Set fill color for solid drawing objects using the CMY color
+ scheme, having the 3 color components CYAN, MAGENTA, and
+ YELLOW.
+
+ `DFd<line break>'
+ Set fill color for solid drawing objects to the default fill
+ color value (black in most cases). No component arguments.
+
+ `DFg GRAY<line break>'
+ Set fill color for solid drawing objects to the shade of gray
+ given by the argument, an integer between 0 (black) and 65536
+ (white).
+
+ `DFk CYAN MAGENTA YELLOW BLACK<line break>'
+ Set fill color for solid drawing objects using the CMYK color
+ scheme, having the 4 color components CYAN, MAGENTA, YELLOW,
+ and BLACK.
+
+ `DFr RED GREEN BLUE<line break>'
+ Set fill color for solid drawing objects using the RGB color
+ scheme, having the 3 color components RED, GREEN, and BLUE.
+
+`Df N<line break>'
+ The argument N must be an integer in the range -32767 to 32767.
+
+ 0 <= N <= 1000
+ Set the color for filling solid drawing objects to a shade of
+ gray, where 0 corresponds to solid white, 1000 (the default)
+ to solid black, and values in between to intermediate shades
+ of gray; this is obsoleted by command `DFg'.
+
+ N < 0 or N < 1000
+ Set the filling color to the color that is currently being
+ used for the text and the outline, see command `m'. For
+ example, the command sequence
+
+
+ mg 0 0 65536
+ Df -1
+
+ sets all colors to blue.
+
+ No position changing. This command is a `gtroff' extension.
+
+`Dl H V<line break>'
+ Draw line from current position to offset (H,V) (integers in basic
+ units `u'); then set current position to the end of the drawn line.
+
+`Dp H1 V1 H2 V2 ... HN VN<line break>'
+ Draw a polygon line from current position to offset (H1,V1), from
+ there to offset (H2,V2), etc. up to offset (HN,VN), and from there
+ back to the starting position. For historical reasons, the
+ position is changed by adding the sum of all arguments with odd
+ index to the actual horizontal position and the even ones to the
+ vertical position. Although this doesn't make sense it is kept
+ for compatibility. This command is a `gtroff' extension.
+
+`Dp H1 V1 H2 V2 ... HN VN<line break>'
+ Draw a solid polygon in the current fill color rather than an
+ outlined polygon, using the same arguments and positioning as the
+ corresponding `Dp' command. This command is a `gtroff' extension.
+
+`Dt N<line break>'
+ Set the current line thickness to N (an integer in basic units
+ `u') if N>0; if N=0 select the smallest available line thickness;
+ if N<0 set the line thickness proportional to the point size (this
+ is the default before the first `Dt' command was specified). For
+ historical reasons, the horizontal position is changed by adding
+ the argument to the actual horizontal position, while the vertical
+ position is not changed. Although this doesn't make sense it is
+ kept for compatibility. This command is a `gtroff' extension.
+
+
+File: groff, Node: Device Control Commands, Next: Obsolete Command, Prev: Graphics Commands, Up: Command Reference
+
+Device Control Commands
+.......................
+
+ Each device control command starts with the letter `x', followed by
+a space character (optional or arbitrary space or tab in `gtroff') and
+a subcommand letter or word; each argument (if any) must be preceded by
+a syntactical space. All `x' commands are terminated by a syntactical
+line break; no device control command can be followed by another
+command on the same line (except a comment).
+
+ The subcommand is basically a single letter, but to increase
+readability, it can be written as a word, i.e., an arbitrary sequence
+of characters terminated by the next tab, space, or newline character.
+All characters of the subcommand word but the first are simply ignored.
+For example, `gtroff' outputs the initialization command `x i' as
+`x init' and the resolution command `x r' as `x res'.
+
+ In the following, the syntax element <line break> means a
+syntactical line break (*note Separation::).
+
+`xF NAME<line break>'
+ The `F' stands for FILENAME.
+
+ Use NAME as the intended name for the current file in error
+ reports. This is useful for remembering the original file name
+ when `gtroff' uses an internal piping mechanism. The input file is
+ not changed by this command. This command is a `gtroff' extension.
+
+`xf N S<line break>'
+ The `f' stands for FONT.
+
+ Mount font position N (a non-negative integer) with font named S
+ (a text word). *Note Font Positions::.
+
+`xH N<line break>'
+ The `H' stands for HEIGHT.
+
+ Set glyph height to N (a positive integer in scaled points `z').
+ AT&T `troff' uses the unit points (`p') instead. *Note Output
+ Language Compatibility::.
+
+`xi<line break>'
+ The `i' stands for INIT.
+
+ Initialize device. This is the third command of the prologue.
+
+`xp<line break>'
+ The `p' stands for PAUSE.
+
+ Parsed but ignored. The original UNIX troff manual writes
+
+ pause device, can be restarted
+
+`xr N H V<line break>'
+ The `r' stands for RESOLUTION.
+
+ Resolution is N, while H is the minimal horizontal motion, and V
+ the minimal vertical motion possible with this device; all
+ arguments are positive integers in basic units `u' per inch. This
+ is the second command of the prologue.
+
+`xS N<line break>'
+ The `S' stands for SLANT.
+
+ Set slant to N (an integer in basic units `u').
+
+`xs<line break>'
+ The `s' stands for STOP.
+
+ Terminates the processing of the current file; issued as the last
+ command of any intermediate troff output.
+
+`xt<line break>'
+ The `t' stands for TRAILER.
+
+ Generate trailer information, if any. In GTROFF, this is actually
+ just ignored.
+
+`xT XXX<line break>'
+ The `T' stands for TYPESETTER.
+
+ Set name of device to word XXX, a sequence of characters ended by
+ the next white space character. The possible device names coincide
+ with those from the `groff' `-T' option. This is the first
+ command of the prologue.
+
+`xu N<line break>'
+ The `u' stands for UNDERLINE.
+
+ Configure underlining of spaces. If N is 1, start underlining of
+ spaces; if N is 0, stop underlining of spaces. This is needed for
+ the `cu' request in nroff mode and is ignored otherwise. This
+ command is a `gtroff' extension.
+
+`xX ANYTHING<line break>'
+ The `x' stands for X-ESCAPE.
+
+ Send string ANYTHING uninterpreted to the device. If the line
+ following this command starts with a `+' character this line is
+ interpreted as a continuation line in the following sense. The
+ `+' is ignored, but a newline character is sent instead to the
+ device, the rest of the line is sent uninterpreted. The same
+ applies to all following lines until the first character of a line
+ is not a `+' character. This command is generated by the `gtroff'
+ escape sequence `\X'. The line-continuing feature is a `gtroff'
+ extension.
+
+
+File: groff, Node: Obsolete Command, Prev: Device Control Commands, Up: Command Reference
+
+Obsolete Command
+................
+
+ In AT&T `troff' output, the writing of a single glyph is mostly done
+by a very strange command that combines a horizontal move and a single
+character giving the glyph name. It doesn't have a command code, but
+is represented by a 3-character argument consisting of exactly 2 digits
+and a character.
+
+DDG
+ Move right DD (exactly two decimal digits) basic units `u', then
+ print glyph G (represented as a single character).
+
+ In `gtroff', arbitrary syntactical space around and within this
+ command is allowed to be added. Only when a preceding command on
+ the same line ends with an argument of variable length a
+ separating space is obligatory. In AT&T `troff', large clusters
+ of these and other commands are used, mostly without spaces; this
+ made such output almost unreadable.
+
+ For modern high-resolution devices, this command does not make sense
+because the width of the glyphs can become much larger than two decimal
+digits. In `gtroff', this is only used for the devices `X75',
+`X75-12', `X100', and `X100-12'. For other devices, the commands `t'
+and `u' provide a better functionality.
+
+
+File: groff, Node: Intermediate Output Examples, Next: Output Language Compatibility, Prev: Command Reference, Up: gtroff Output
+
+Intermediate Output Examples
+----------------------------
+
+ This section presents the intermediate output generated from the same
+input for three different devices. The input is the sentence `hell
+world' fed into `gtroff' on the command line.
+
+High-resolution device `ps'
+ This is the standard output of `gtroff' if no `-T' option is given.
+
+ shell> echo "hell world" | groff -Z -T ps
+
+ x T ps
+ x res 72000 1 1
+ x init
+ p1
+ x font 5 TR
+ f5
+ s10000
+ V12000
+ H72000
+ thell
+ wh2500
+ tw
+ H96620
+ torld
+ n12000 0
+ x trailer
+ V792000
+ x stop
+
+ This output can be fed into `grops' to get its representation as a
+ PostScript file.
+
+Low-resolution device `latin1'
+ This is similar to the high-resolution device except that the
+ positioning is done at a minor scale. Some comments (lines
+ starting with `#') were added for clarification; they were not
+ generated by the formatter.
+
+ shell> echo "hell world" | groff -Z -T latin1
+
+ # prologue
+ x T latin1
+ x res 240 24 40
+ x init
+ # begin a new page
+ p1
+ # font setup
+ x font 1 R
+ f1
+ s10
+ # initial positioning on the page
+ V40
+ H0
+ # write text `hell'
+ thell
+ # inform about space, and issue a horizontal jump
+ wh24
+ # write text `world'
+ tworld
+ # announce line break, but do nothing because ...
+ n40 0
+ # ... the end of the document has been reached
+ x trailer
+ V2640
+ x stop
+
+ This output can be fed into `grotty' to get a formatted text
+ document.
+
+AT&T `troff' output
+ Since a computer monitor has a very low resolution compared to
+ modern printers the intermediate output for the X Window devices
+ can use the jump-and-write command with its 2-digit displacements.
+
+ shell> echo "hell world" | groff -Z -T X100
+
+ x T X100
+ x res 100 1 1
+ x init
+ p1
+ x font 5 TR
+ f5
+ s10
+ V16
+ H100
+ # write text with jump-and-write commands
+ ch07e07l03lw06w11o07r05l03dh7
+ n16 0
+ x trailer
+ V1100
+ x stop
+
+ This output can be fed into `xditview' or `gxditview' for
+ displaying in X.
+
+ Due to the obsolete jump-and-write command, the text clusters in
+ the AT&T `troff' output are almost unreadable.
+
+
+File: groff, Node: Output Language Compatibility, Prev: Intermediate Output Examples, Up: gtroff Output
+
+Output Language Compatibility
+-----------------------------
+
+ The intermediate output language of AT&T `troff' was first
+documented in the UNIX troff manual, with later additions documented in
+`A Typesetter-indenpendent TROFF', written by Brian Kernighan.
+
+ The `gtroff' intermediate output format is compatible with this
+specification except for the following features.
+
+ * The classical quasi device independence is not yet implemented.
+
+ * The old hardware was very different from what we use today. So the
+ `groff' devices are also fundamentally different from the ones in
+ AT&T `troff'. For example, the AT&T PostScript device is called
+ `post' and has a resolution of only 720 units per inch, suitable
+ for printers 20 years ago, while `groff''s `ps' device has a
+ resolution of 72000 units per inch. Maybe, by implementing some
+ rescaling mechanism similar to the classical quasi device
+ independence, `groff' could emulate AT&T's `post' device.
+
+ * The B-spline command `D~' is correctly handled by the intermediate
+ output parser, but the drawing routines aren't implemented in some
+ of the postprocessor programs.
+
+ * The argument of the commands `s' and `x H' has the implicit unit
+ scaled point `z' in `gtroff', while AT&T `troff' has point (`p').
+ This isn't an incompatibility but a compatible extension, for both
+ units coincide for all devices without a `sizescale' parameter in
+ the `DESC' file, including all postprocessors from AT&T and
+ `groff''s text devices. The few `groff' devices with a
+ `sizescale' parameter either do not exist for AT&T `troff', have a
+ different name, or seem to have a different resolution. So
+ conflicts are very unlikely.
+
+ * The position changing after the commands `Dp', `DP', and `Dt' is
+ illogical, but as old versions of `gtroff' used this feature it is
+ kept for compatibility reasons.
+
+
+
+File: groff, Node: Font Files, Prev: gtroff Output, Up: File formats
+
+Font Files
+==========
+
+ The `gtroff' font format is roughly a superset of the `ditroff' font
+format (as used in later versions of AT&T `troff' and its descendants).
+Unlike the `ditroff' font format, there is no associated binary
+format; all files are text files.(1) (*note Font Files-Footnote-1::)
+The font files for device NAME are stored in a directory `devNAME'.
+There are two types of file: a device description file called `DESC'
+and for each font F a font file called `F'.
+
+* Menu:
+
+* DESC File Format::
+* Font File Format::
+
+
+File: groff, Node: Font Files-Footnotes, Up: Font Files
+
+ (1) Plan 9 `troff' has also abandoned the binary format.
+
+
+File: groff, Node: DESC File Format, Next: Font File Format, Prev: Font Files, Up: Font Files
+
+`DESC' File Format
+------------------
+
+ The `DESC' file can contain the following types of line. Except for
+the `charset' keyword which must comes last (if at all), the order of
+the lines is not important.
+
+`res N'
+ There are N machine units per inch.
+
+`hor N'
+ The horizontal resolution is N machine units.
+
+`vert N'
+ The vertical resolution is N machine units.
+
+`sizescale N'
+ The scale factor for point sizes. By default this has a value
+ of 1. One scaled point is equal to one point/N. The arguments to
+ the `unitwidth' and `sizes' commands are given in scaled points.
+ *Note Fractional Type Sizes::, for more information.
+
+`unitwidth N'
+ Quantities in the font files are given in machine units for fonts
+ whose point size is N scaled points.
+
+`prepro PROGRAM'
+ Call PROGRAM as a preprocessor. Currently, this keyword is used
+ by `groff' with option `-Thtml' only.
+
+`postpro PROGRAM'
+ Call PROGRAM as a postprocessor. For example, the line
+
+
+ postpro grodvi
+
+ in the file `devdvi/DESC' makes `groff' call `grodvi' if option
+ `-Tdvi' is given (and `-Z' isn't used).
+
+`tcommand'
+ This means that the postprocessor can handle the `t' and `u'
+ intermediate output commands.
+
+`sizes S1 S2 ... SN 0'
+ This means that the device has fonts at S1, S2, ... SN scaled
+ points. The list of sizes must be terminated by 0 (this is digit
+ zero). Each SI can also be a range of sizes M-N. The list can
+ extend over more than one line.
+
+`styles S1 S2 ... SM'
+ The first M font positions are associated with styles S1 ... SM.
+
+`fonts N F1 F2 F3 ... FN'
+ Fonts F1 ... FN are mounted in the font positions M+1, ..., M+N
+ where M is the number of styles. This command may extend over
+ more than one line. A font name of 0 means no font is mounted on
+ the corresponding font position.
+
+`family FAM'
+ The default font family is FAM.
+
+`use_charnames_in_special'
+ This command indicates that `gtroff' should encode special
+ characters inside special commands. Currently, this is only used
+ by the HTML output device. *Note Postprocessor Access::.
+
+`papersize STRING ...'
+ Select a paper size. Valid values for STRING are the ISO paper
+ types `A0'-`A7', `B0'-`B7', `C0'-`C7', `D0'-`D7', `DL', and the US
+ paper types `letter', `legal', `tabloid', `ledger', `statement',
+ `executive', `com10', and `monarch'. Case is not significant for
+ STRING if it holds predefined paper types. Alternatively, STRING
+ can be a file name (e.g. `/etc/papersize'); if the file can be
+ opened, `groff' reads the first line and tests for the above paper
+ sizes. Finally, STRING can be a custom paper size in the format
+ `LENGTH,WIDTH' (no spaces before and after the comma). Both
+ LENGTH and WIDTH must have a unit appended; valid values are `i'
+ for inches, `C' for centimeters, `p' for points, and `P' for
+ picas. Example: `12c,235p'. An argument which starts with a
+ digit is always treated as a custom paper format. `papersize'
+ sets both the vertical and horizontal dimension of the output
+ medium.
+
+ More than one argument can be specified; `groff' scans from left to
+ right and uses the first valid paper specification.
+
+`pass_filenames'
+ Tell `gtroff' to emit the name of the source file currently being
+ processed. This is achieved by the intermediate output command
+ `F'. Currently, this is only used by the HTML output device.
+
+`print PROGRAM'
+ Use PROGRAM as a spooler program for printing. If omitted, the
+ `-l' and `-L' options of `groff' are ignored.
+
+`charset'
+ This line and everything following in the file are ignored. It is
+ allowed for the sake of backwards compatibility.
+
+ The `res', `unitwidth', `fonts', and `sizes' lines are mandatory.
+Other commands are ignored by `gtroff' but may be used by
+postprocessors to store arbitrary information about the device in the
+`DESC' file.
+
+ Here a list of obsolete keywords which are recognized by `groff' but
+completely ignored: `spare1', `spare2', `biggestfont'.
+
+
+File: groff, Node: Font File Format, Prev: DESC File Format, Up: Font Files
+
+Font File Format
+----------------
+
+ A "font file", also (and probably better) called a "font description
+file", has two sections. The first section is a sequence of lines each
+containing a sequence of blank delimited words; the first word in the
+line is a key, and subsequent words give a value for that key.
+
+`name F'
+ The name of the font is F.
+
+`spacewidth N'
+ The normal width of a space is N.
+
+`slant N'
+ The glyphs of the font have a slant of N degrees. (Positive means
+ forward.)
+
+`ligatures LIG1 LIG2 ... LIGN [0]'
+ Glyphs LIG1, LIG2, ..., LIGN are ligatures; possible ligatures are
+ `ff', `fi', `fl', `ffi' and `ffl'. For backwards compatibility,
+ the list of ligatures may be terminated with a 0. The list of
+ ligatures may not extend over more than one line.
+
+`special'
+ The font is "special"; this means that when a glyph is requested
+ that is not present in the current font, it is searched for in any
+ special fonts that are mounted.
+
+ Other commands are ignored by `gtroff' but may be used by
+postprocessors to store arbitrary information about the font in the font
+file.
+
+ The first section can contain comments which start with the `#'
+character and extend to the end of a line.
+
+ The second section contains one or two subsections. It must contain
+a `charset' subsection and it may also contain a `kernpairs'
+subsection. These subsections can appear in any order. Each
+subsection starts with a word on a line by itself.
+
+ The word `charset' starts the character set subsection.(1) (*note
+Font File Format-Footnote-1::) The `charset' line is followed by a
+sequence of lines. Each line gives information for one glyph. A line
+comprises a number of fields separated by blanks or tabs. The format is
+
+ NAME METRICS TYPE CODE [ENTITY-NAME] [`--' COMMENT]
+
+NAME identifies the glyph name(2) (*note Font File Format-Footnote-2::):
+If NAME is a single character C then it corresponds to the `gtroff'
+input character C; if it is of the form `\C' where C is a single
+character, then it corresponds to the special character `\[C]';
+otherwise it corresponds to the special character `\[NAME]'. If it is
+exactly two characters XX it can be entered as `\(XX'. Note that
+single-letter special characters can't be accessed as `\C'; the only
+exception is `\-' which is identical to `\[-]'.
+
+ `gtroff' supports 8-bit input characters; however some utilities
+have difficulties with eight-bit characters. For this reason, there is
+a convention that the entity name `charN' is equivalent to the single
+input character whose code is N. For example, `char163' would be
+equivalent to the character with code 163 which is the pounds sterling
+sign in the ISO Latin-1 character set. You shouldn't use `charN'
+entities in font description files since they are related to input, not
+output. Otherwise, you get hard-coded connections between input and
+output encoding which prevents use of different (input) character sets.
+
+ The name `---' is special and indicates that the glyph is unnamed;
+such glyphs can only be used by means of the `\N' escape sequence in
+`gtroff'.
+
+ The TYPE field gives the glyph type:
+
+`1'
+ the glyph has a descender, for example, `p';
+
+`2'
+ the glyph has an ascender, for example, `b';
+
+`3'
+ the glyph has both an ascender and a descender, for example, `('.
+
+ The CODE field gives the code which the postprocessor uses to print
+the glyph. The glyph can also be input to `gtroff' using this code by
+means of the `\N' escape sequence. CODE can be any integer. If it
+starts with `0' it is interpreted as octal; if it starts with `0x' or
+`0X' it is interpreted as hexadecimal. Note, however, that the `\N'
+escape sequence only accepts a decimal integer.
+
+ The ENTITY-NAME field gives an ASCII string identifying the glyph
+which the postprocessor uses to print the `gtroff' glyph NAME. This
+field is optional and has been introduced so that the HTML device
+driver can encode its character set. For example, the glyph `\[Po]' is
+represented as `&pound;' in HTML 4.0.
+
+ Anything on the line after the ENTITY-NAME field resp. after `--'
+will be ignored.
+
+ The METRICS field has the form:
+
+ WIDTH[`,'HEIGHT[`,'DEPTH[`,'ITALIC-CORRECTION
+ [`,'LEFT-ITALIC-CORRECTION[`,'SUBSCRIPT-CORRECTION]]]]]
+
+There must not be any spaces between these subfields (it has been split
+here into two lines for better legibility only). Missing subfields are
+assumed to be 0. The subfields are all decimal integers. Since there
+is no associated binary format, these values are not required to fit
+into a variable of type `char' as they are in `ditroff'. The WIDTH
+subfield gives the width of the glyph. The HEIGHT subfield gives the
+height of the glyph (upwards is positive); if a glyph does not extend
+above the baseline, it should be given a zero height, rather than a
+negative height. The DEPTH subfield gives the depth of the glyph, that
+is, the distance from the baseline to the lowest point below the
+baseline to which the glyph extends (downwards is positive); if a glyph
+does not extend below the baseline, it should be given a zero depth,
+rather than a negative depth. The ITALIC-CORRECTION subfield gives the
+amount of space that should be added after the glyph when it is
+immediately to be followed by a glyph from a roman font. The
+LEFT-ITALIC-CORRECTION subfield gives the amount of space that should
+be added before the glyph when it is immediately to be preceded by a
+glyph from a roman font. The SUBSCRIPT-CORRECTION gives the amount of
+space that should be added after a glyph before adding a subscript.
+This should be less than the italic correction.
+
+ A line in the `charset' section can also have the format
+
+
+ NAME "
+
+This indicates that NAME is just another name for the glyph mentioned
+in the preceding line.
+
+ The word `kernpairs' starts the kernpairs section. This contains a
+sequence of lines of the form:
+
+
+ C1 C2 N
+
+This means that when glyph C1 appears next to glyph C2 the space
+between them should be increased by N. Most entries in the kernpairs
+section have a negative value for N.
+
+
+File: groff, Node: Font File Format-Footnotes, Up: Font File Format
+
+ (1) This keyword is misnamed since it starts a list of ordered
+glyphs, not characters.
+
+ (2) The distinction between input, characters, and output, glyphs,
+is not clearly separated in the terminology of `groff'; for example,
+the `char' request should be called `glyph' since it defines an output
+entity.
+
+
+File: groff, Node: Installation, Next: Copying This Manual, Prev: File formats, Up: Top
+
+Installation
+************
+
+
+File: groff, Node: Copying This Manual, Next: Request Index, Prev: Installation, Up: Top
+
+Copying This Manual
+*******************
+
+* Menu:
+
+* GNU Free Documentation License:: License for copying this manual.
+
diff --git a/contrib/groff/doc/groff-9 b/contrib/groff/doc/groff-9
new file mode 100644
index 0000000..4f4cc68
--- /dev/null
+++ b/contrib/groff/doc/groff-9
@@ -0,0 +1,931 @@
+This is groff, produced by makeinfo version 4.2 from ./groff.texinfo.
+
+This manual documents GNU `troff' version 1.18.
+
+ Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.1 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover texts
+ being `A GNU Manual," and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ `GNU Free Documentation License."
+
+ (a) The FSF's Back-Cover Text is: `You have freedom to copy and
+ modify this GNU Manual, like GNU software. Copies published by
+ the Free Software Foundation raise funds for GNU development."
+
+INFO-DIR-SECTION Miscellaneous
+START-INFO-DIR-ENTRY
+* Groff: (groff). The GNU troff document formatting system.
+END-INFO-DIR-ENTRY
+
+
+File: groff, Node: GNU Free Documentation License, Up: Copying This Manual
+
+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 "Acknowledgments" or "Dedications",
+ preserve the section's title, and preserve in the section all
+ the substance and tone of each of the contributor
+ acknowledgments 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
+ "Acknowledgments", 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.
+
+
+File: groff, Node: Request Index, Next: Escape Index, Prev: Copying This Manual, Up: Top
+
+Request Index
+*************
+
+ Requests appear without the leading control character (normally
+either `.' or `'').
+
+* Menu:
+
+* ab: Debugging.
+* ad: Manipulating Filling and Adjusting.
+* af: Assigning Formats.
+* aln: Setting Registers.
+* als: Strings.
+* am: Writing Macros.
+* am1: Writing Macros.
+* ami: Writing Macros.
+* as: Strings.
+* as1: Strings.
+* asciify: Diversions.
+* backtrace: Debugging.
+* bd: Artificial Fonts.
+* blm: Blank Line Traps.
+* box: Diversions.
+* boxa: Diversions.
+* bp: Page Control.
+* br: Manipulating Filling and Adjusting.
+* break: while.
+* brp: Manipulating Filling and Adjusting.
+* c2: Character Translations.
+* cc: Character Translations.
+* ce: Manipulating Filling and Adjusting.
+* cf: I/O.
+* cflags: Using Symbols.
+* ch: Page Location Traps.
+* char: Using Symbols.
+* chop: Strings.
+* close: I/O.
+* color: Colors.
+* continue: while.
+* cp: Implementation Differences.
+* cs: Artificial Fonts.
+* cu: Artificial Fonts.
+* da: Diversions.
+* de: Writing Macros.
+* de1: Writing Macros.
+* defcolor: Colors.
+* dei: Writing Macros.
+* di: Diversions.
+* do: Implementation Differences.
+* ds: Strings.
+* ds1: Strings.
+* dt: Diversion Traps.
+* ec: Character Translations.
+* ecr: Character Translations.
+* ecs: Character Translations.
+* el: if-else.
+* em: End-of-input Traps.
+* eo: Character Translations.
+* ev: Environments.
+* evc: Environments.
+* ex: Debugging.
+* fam: Font Families.
+* fc: Fields.
+* fchar: Using Symbols.
+* fi: Manipulating Filling and Adjusting.
+* fl: Debugging.
+* fp: Font Positions.
+* fspecial: Special Fonts.
+* ft <1>: Font Positions.
+* ft: Changing Fonts.
+* ftr: Changing Fonts.
+* hc: Manipulating Hyphenation.
+* hcode: Manipulating Hyphenation.
+* hla: Manipulating Hyphenation.
+* hlm: Manipulating Hyphenation.
+* hpf: Manipulating Hyphenation.
+* hpfa: Manipulating Hyphenation.
+* hpfcode: Manipulating Hyphenation.
+* hw: Manipulating Hyphenation.
+* hy: Manipulating Hyphenation.
+* hym: Manipulating Hyphenation.
+* hys: Manipulating Hyphenation.
+* ie: if-else.
+* if: if-else.
+* ig: Comments.
+* in: Line Layout.
+* it: Input Line Traps.
+* itc: Input Line Traps.
+* kern: Ligatures and Kerning.
+* lc: Leaders.
+* length: Strings.
+* lf: Debugging.
+* lg: Ligatures and Kerning.
+* linetabs: Tabs and Fields.
+* ll: Line Layout.
+* ls: Manipulating Spacing.
+* lt: Page Layout.
+* mc: Miscellaneous.
+* mk: Page Motions.
+* mso: I/O.
+* na: Manipulating Filling and Adjusting.
+* ne: Page Control.
+* nf: Manipulating Filling and Adjusting.
+* nh: Manipulating Hyphenation.
+* nm: Miscellaneous.
+* nn: Miscellaneous.
+* nop: if-else.
+* nr <1>: Auto-increment.
+* nr: Setting Registers.
+* nroff: Troff and Nroff Mode.
+* ns: Manipulating Spacing.
+* nx: I/O.
+* open: I/O.
+* opena: I/O.
+* os: Page Control.
+* output: Diversions.
+* pc: Page Layout.
+* pi: I/O.
+* pl: Page Layout.
+* pm: Debugging.
+* pn: Page Layout.
+* pnr: Debugging.
+* po: Line Layout.
+* ps: Changing Type Sizes.
+* psbb: Miscellaneous.
+* pso: I/O.
+* ptr: Debugging.
+* pvs: Changing Type Sizes.
+* rchar: Using Symbols.
+* rd: I/O.
+* return: Writing Macros.
+* rj: Manipulating Filling and Adjusting.
+* rm: Strings.
+* rn: Strings.
+* rnn: Setting Registers.
+* rr: Setting Registers.
+* rs: Manipulating Spacing.
+* rt: Page Motions.
+* shc: Manipulating Hyphenation.
+* shift: Parameters.
+* sizes: Changing Type Sizes.
+* so: I/O.
+* sp: Manipulating Spacing.
+* special: Special Fonts.
+* spreadwarn: Debugging.
+* ss: Manipulating Filling and Adjusting.
+* sty: Font Families.
+* substring: Strings.
+* sv: Page Control.
+* sy: I/O.
+* ta: Tabs and Fields.
+* tc: Tabs and Fields.
+* ti: Line Layout.
+* tkf: Ligatures and Kerning.
+* tl: Page Layout.
+* tm: Debugging.
+* tm1: Debugging.
+* tmc: Debugging.
+* tr: Character Translations.
+* trf: I/O.
+* trin: Character Translations.
+* trnt: Character Translations.
+* troff: Troff and Nroff Mode.
+* uf: Artificial Fonts.
+* ul: Artificial Fonts.
+* unformat: Diversions.
+* vpt: Page Location Traps.
+* vs: Changing Type Sizes.
+* warn: Debugging.
+* warnscale: Debugging.
+* wh: Page Location Traps.
+* while: while.
+* write: I/O.
+* writec: I/O.
+* writem: I/O.
+
+
+File: groff, Node: Escape Index, Next: Operator Index, Prev: Request Index, Up: Top
+
+Escape Index
+************
+
+ Any escape sequence `\X' with X not in the list below emits a
+warning, printing glyph X.
+
+* Menu:
+
+* <colon>: Manipulating Hyphenation.
+* \: Using Symbols.
+* \!: Diversions.
+* \": Comments.
+* \#: Comments.
+* \$: Parameters.
+* \$*: Parameters.
+* \$0: Parameters.
+* \$@: Parameters.
+* \%: Manipulating Hyphenation.
+* \&: Ligatures and Kerning.
+* \': Using Symbols.
+* \): Ligatures and Kerning.
+* \*: Strings.
+* \,: Ligatures and Kerning.
+* \-: Using Symbols.
+* \.: Character Translations.
+* \/: Ligatures and Kerning.
+* \0: Page Motions.
+* \<RET>: Line Control.
+* \<SP>: Page Motions.
+* \?: Diversions.
+* \\: Character Translations.
+* \^: Page Motions.
+* \`: Using Symbols.
+* \a: Leaders.
+* \A: Identifiers.
+* \b: Drawing Requests.
+* \B: Expressions.
+* \C: Using Symbols.
+* \c: Line Control.
+* \D: Drawing Requests.
+* \d: Page Motions.
+* \E: Character Translations.
+* \e: Character Translations.
+* \f: Font Positions.
+* \F: Font Families.
+* \f: Changing Fonts.
+* \g: Assigning Formats.
+* \h: Page Motions.
+* \H: Artificial Fonts.
+* \k: Page Motions.
+* \L: Drawing Requests.
+* \l: Drawing Requests.
+* \M: Colors.
+* \m: Colors.
+* \N: Using Symbols.
+* \n <1>: Auto-increment.
+* \n: Interpolating Registers.
+* \O: Suppressing output.
+* \o: Page Motions.
+* \p: Manipulating Filling and Adjusting.
+* \r: Page Motions.
+* \R: Setting Registers.
+* \s: Changing Type Sizes.
+* \S: Artificial Fonts.
+* \t: Tabs and Fields.
+* \u: Page Motions.
+* \V: I/O.
+* \v: Page Motions.
+* \w: Page Motions.
+* \X: Postprocessor Access.
+* \x: Manipulating Spacing.
+* \Y: Postprocessor Access.
+* \Z: Page Motions.
+* \z: Page Motions.
+* \{: if-else.
+* \|: Page Motions.
+* \}: if-else.
+* \~: Page Motions.
+
+
+File: groff, Node: Operator Index, Next: Register Index, Prev: Escape Index, Up: Top
+
+Operator Index
+**************
+
+* Menu:
+
+* !: Expressions.
+* %: Expressions.
+* &: Expressions.
+* (: Expressions.
+* ): Expressions.
+* *: Expressions.
+* +: Expressions.
+* -: Expressions.
+* /: Expressions.
+* <: Expressions.
+* <=: Expressions.
+* <?: Expressions.
+* <colon>: Expressions.
+* =: Expressions.
+* ==: Expressions.
+* >: Expressions.
+* >=: Expressions.
+* >?: Expressions.
+
+
+File: groff, Node: Register Index, Next: Macro Index, Prev: Operator Index, Up: Top
+
+Register Index
+**************
+
+ The macro package or program a specific register belongs to is
+appended in brackets.
+
+ A register name `x' consisting of exactly one character can be
+accessed as `\nx'. A register name `xx' consisting of exactly two
+characters can be accessed as `\n(xx'. Register names `xxx' of any
+length can be accessed as `\n[xxx]'.
+
+* Menu:
+
+* $$: Built-in Registers.
+* %: Page Layout.
+* .$: Parameters.
+* .a: Manipulating Spacing.
+* .A: Built-in Registers.
+* .b: Artificial Fonts.
+* .C: Implementation Differences.
+* .c: Built-in Registers.
+* .cdp: Environments.
+* .ce: Manipulating Filling and Adjusting.
+* .cht: Environments.
+* .color: Colors.
+* .csk: Environments.
+* .d: Diversions.
+* .ev: Environments.
+* .f: Font Positions.
+* .F: Built-in Registers.
+* .fam: Font Families.
+* .fn: Font Families.
+* .fp: Font Positions.
+* .g: Built-in Registers.
+* .h: Diversions.
+* .H: Built-in Registers.
+* .hla: Manipulating Hyphenation.
+* .hlc: Manipulating Hyphenation.
+* .hlm: Manipulating Hyphenation.
+* .hy: Manipulating Hyphenation.
+* .hym: Manipulating Hyphenation.
+* .hys: Manipulating Hyphenation.
+* .i: Line Layout.
+* .in: Line Layout.
+* .int: Line Control.
+* .j: Manipulating Filling and Adjusting.
+* .k: Page Motions.
+* .kern: Ligatures and Kerning.
+* .l: Line Layout.
+* .L: Manipulating Spacing.
+* .lg: Ligatures and Kerning.
+* .linetabs: Tabs and Fields.
+* .ll: Line Layout.
+* .lt: Page Layout.
+* .ne: Page Location Traps.
+* .ns: Manipulating Spacing.
+* .o: Line Layout.
+* .p: Page Layout.
+* .P: Built-in Registers.
+* .pn: Page Layout.
+* .ps: Fractional Type Sizes.
+* .psr: Fractional Type Sizes.
+* .pvs: Changing Type Sizes.
+* .rj: Manipulating Filling and Adjusting.
+* .s: Changing Type Sizes.
+* .sr: Fractional Type Sizes.
+* .ss: Manipulating Filling and Adjusting.
+* .sss: Manipulating Filling and Adjusting.
+* .t: Page Location Traps.
+* .T: Built-in Registers.
+* .tabs: Tabs and Fields.
+* .trunc: Page Location Traps.
+* .u: Manipulating Filling and Adjusting.
+* .v: Changing Type Sizes.
+* .V: Built-in Registers.
+* .vpt: Page Location Traps.
+* .warn: Debugging.
+* .x: Built-in Registers.
+* .Y: Built-in Registers.
+* .y: Built-in Registers.
+* .z: Diversions.
+* c.: Built-in Registers.
+* ct: Page Motions.
+* dl: Diversions.
+* dn: Diversions.
+* dw: Built-in Registers.
+* dy: Built-in Registers.
+* FF [ms]: ms Document Control Registers.
+* FI [ms]: ms Document Control Registers.
+* FL [ms]: ms Document Control Registers.
+* FM [ms]: ms Document Control Registers.
+* HM [ms]: ms Document Control Registers.
+* hours: Built-in Registers.
+* hp: Page Motions.
+* LL [ms]: ms Document Control Registers.
+* llx: Miscellaneous.
+* lly: Miscellaneous.
+* ln: Built-in Registers.
+* LT [ms]: ms Document Control Registers.
+* MINGW [ms] <1>: Additional ms Macros.
+* MINGW [ms]: ms Document Control Registers.
+* minutes: Built-in Registers.
+* mo: Built-in Registers.
+* nl: Page Control.
+* opmaxx: Suppressing output.
+* opmaxy: Suppressing output.
+* opminx: Suppressing output.
+* opminy: Suppressing output.
+* PD [ms]: ms Document Control Registers.
+* PI [ms]: ms Document Control Registers.
+* PO [ms]: ms Document Control Registers.
+* PS [ms]: ms Document Control Registers.
+* ps4html [grohtml]: grohtml specific registers and strings.
+* QI [ms]: ms Document Control Registers.
+* rsb: Page Motions.
+* rst: Page Motions.
+* sb: Page Motions.
+* seconds: Built-in Registers.
+* skw: Page Motions.
+* slimit: Debugging.
+* ssc: Page Motions.
+* st: Page Motions.
+* systat: I/O.
+* urx: Miscellaneous.
+* ury: Miscellaneous.
+* VS [ms]: ms Document Control Registers.
+* year: Built-in Registers.
+* yr: Built-in Registers.
+
+
+File: groff, Node: Macro Index, Next: String Index, Prev: Register Index, Up: Top
+
+Macro Index
+***********
+
+ The macro package a specific macro belongs to is appended in
+brackets. They appear without the leading control character (normally
+`.').
+
+* Menu:
+
+* 1C [ms]: ms Multiple Columns.
+* 2C [ms]: ms Multiple Columns.
+* [ [ms]: ms Insertions.
+* ] [ms]: ms Insertions.
+* AB [ms]: ms Cover Page Macros.
+* AE [ms]: ms Cover Page Macros.
+* AI [ms]: ms Cover Page Macros.
+* AM [ms] <1>: Additional ms Macros.
+* AM [ms]: ms Strings and Special Characters.
+* AU [ms]: ms Cover Page Macros.
+* B [man]: Man font macros.
+* B [ms]: Highlighting in ms.
+* B1 [ms]: ms Displays and Keeps.
+* B2 [ms]: ms Displays and Keeps.
+* BD [ms]: ms Displays and Keeps.
+* BI [man]: Man font macros.
+* BI [ms]: Highlighting in ms.
+* BR [man]: Man font macros.
+* BX [ms]: Highlighting in ms.
+* CD [ms]: ms Displays and Keeps.
+* CW [ms] <1>: Additional ms Macros.
+* CW [ms]: Highlighting in ms.
+* DA [ms]: ms Cover Page Macros.
+* DE [ms]: ms Displays and Keeps.
+* DS [ms] <1>: Additional ms Macros.
+* DS [ms]: ms Displays and Keeps.
+* DT [man]: Miscellaneous man macros.
+* EF [ms]: ms Headers and Footers.
+* EH [ms]: ms Headers and Footers.
+* EN [ms]: ms Insertions.
+* EQ [ms]: ms Insertions.
+* FE [ms]: ms Footnotes.
+* FS [ms]: ms Footnotes.
+* HP [man]: Man usage.
+* I [man]: Man font macros.
+* I [ms]: Highlighting in ms.
+* IB [man]: Man font macros.
+* ID [ms]: ms Displays and Keeps.
+* IP [man]: Man usage.
+* IP [ms]: Lists in ms.
+* IR [man]: Man font macros.
+* IX [ms]: Additional ms Macros.
+* KE [ms]: ms Displays and Keeps.
+* KF [ms]: ms Displays and Keeps.
+* KS [ms]: ms Displays and Keeps.
+* LD [ms]: ms Displays and Keeps.
+* LG [ms]: Highlighting in ms.
+* LP [man]: Man usage.
+* LP [ms]: Paragraphs in ms.
+* MC [ms]: ms Multiple Columns.
+* ND [ms]: ms Cover Page Macros.
+* NH [ms]: Headings in ms.
+* NL [ms]: Highlighting in ms.
+* OF [ms]: ms Headers and Footers.
+* OH [ms]: ms Headers and Footers.
+* P [man]: Man usage.
+* PD [man]: Miscellaneous man macros.
+* PE [ms]: ms Insertions.
+* PP [man]: Man usage.
+* PP [ms]: Paragraphs in ms.
+* PS [ms]: ms Insertions.
+* PX [ms]: ms TOC.
+* QP [ms]: Paragraphs in ms.
+* R [ms]: Highlighting in ms.
+* RB [man]: Man font macros.
+* RD [ms]: ms Displays and Keeps.
+* RE [man]: Man usage.
+* RE [ms]: Indents in ms.
+* RI [man]: Man font macros.
+* RP [ms]: ms Cover Page Macros.
+* RS [man]: Man usage.
+* RS [ms]: Indents in ms.
+* SB [man]: Man font macros.
+* SH [man]: Man usage.
+* SH [ms]: Headings in ms.
+* SM [man]: Man font macros.
+* SM [ms]: Highlighting in ms.
+* SS [man]: Man usage.
+* TA [ms]: Tabstops in ms.
+* TC [ms]: ms TOC.
+* TE [ms]: ms Insertions.
+* TH [man]: Man usage.
+* TL [ms]: ms Cover Page Macros.
+* TP [man]: Man usage.
+* TS [ms]: ms Insertions.
+* UL [ms]: Highlighting in ms.
+* XA [ms]: ms TOC.
+* XE [ms]: ms TOC.
+* XP [ms]: Paragraphs in ms.
+* XS [ms]: ms TOC.
+
diff --git a/contrib/groff/doc/groff.texinfo b/contrib/groff/doc/groff.texinfo
index c8965c7..410a9d5 100644
--- a/contrib/groff/doc/groff.texinfo
+++ b/contrib/groff/doc/groff.texinfo
@@ -4,15 +4,43 @@
@c Please convert this manual with `texi2dvi -e groff.texinfo' due to a bug
@c in texinfo regarding expansion of user-defined macros.
@c
+@c You need texinfo 4.2 or newer to format this document!
+@c
@c %**start of header (This is for running Texinfo on a region.)
-@setfilename groff
+@setfilename groff
@settitle The GNU Troff Manual
@setchapternewpage odd
@footnotestyle separate
@c %**end of header (This is for running Texinfo on a region.)
+@smallbook
+
+@finalout
+
+
+@copying
+This manual documents GNU @code{troff} version 1.18.
+
+Copyright @copyright{} 1994-2000, 2001, 2002 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being `A GNU Manual,''
+and with the Back-Cover Texts as in (a) below. A copy of the
+license is included in the section entitled `GNU Free Documentation
+License.''
+
+(a) The FSF's Back-Cover Text is: `You have freedom to copy and modify
+this GNU Manual, like GNU software. Copies published by the Free
+Software Foundation raise funds for GNU development.''
+@end quotation
+@end copying
+
+
@c We use the following indices:
@c
@c cindex: concepts
@@ -24,7 +52,6 @@
@c tindex: environment variables
@c maindex: macros
@c stindex: strings
-@c glindex: glyph names
@c opindex: operators
@c
@c tindex and cindex are merged.
@@ -33,7 +60,6 @@
@defcodeindex es
@defcodeindex ma
@defcodeindex st
-@defcodeindex gl
@defcodeindex op
@syncodeindex tp cp
@@ -53,16 +79,66 @@
@end tex
+@c To assure correct HTML translation, some ugly hacks are necessary.
+@c While processing a @def... request, the HTML translator looks at the
+@c next line to decide whether it should start indentation or not. If
+@c it is something starting with @def... (e.g. @deffnx), it doesn't.
+@c So we must assure during macro expansion that a @def... is seen.
+@c
+@c The following macros have to be used:
+@c
+@c One item:
+@c
+@c @Def...
+@c
+@c Two items:
+@c
+@c @Def...List
+@c @Def...ListEnd
+@c
+@c More than two:
+@c
+@c @Def...List
+@c @Def...Item
+@c @Def...Item
+@c ...
+@c @Def...ListEnd
+@c
+@c The definition block must end with
+@c
+@c @endDef...
+@c
+@c The above is valid for texinfo 4.0f.
+
+
+@c a dummy macro to assure the `@def...'
+
+@macro defdummy
+@end macro
+
+
@c definition of requests
@macro Defreq{name, arg}
+@deffn Request @t{.\name\} \arg\
@rqindex \name\
+@end macro
+
+@macro DefreqList{name, arg}
@deffn Request @t{.\name\} \arg\
+@defdummy
+@rqindex \name\
@end macro
-@macro Defreqx{name, arg}
+@macro DefreqItem{name, arg}
+@deffnx Request @t{.\name\} \arg\
+@defdummy
@rqindex \name\
+@end macro
+
+@macro DefreqListEnd{name, arg}
@deffnx Request @t{.\name\} \arg\
+@rqindex \name\
@end macro
@macro endDefreq
@@ -73,13 +149,25 @@
@c definition of escapes
@macro Defesc{name, delimI, arg, delimII}
+@deffn Escape @t{\name\\delimI\}@var{\arg\}@t{\delimII\}
@esindex \name\
+@end macro
+
+@macro DefescList{name, delimI, arg, delimII}
@deffn Escape @t{\name\\delimI\}@var{\arg\}@t{\delimII\}
+@defdummy
+@esindex \name\
@end macro
-@macro Defescx{name, delimI, arg, delimII}
+@macro DefescItem{name, delimI, arg, delimII}
+@deffnx Escape @t{\name\\delimI\}@var{\arg\}@t{\delimII\}
+@defdummy
@esindex \name\
+@end macro
+
+@macro DefescListEnd{name, delimI, arg, delimII}
@deffnx Escape @t{\name\\delimI\}@var{\arg\}@t{\delimII\}
+@esindex \name\
@end macro
@macro endDefesc
@@ -90,13 +178,25 @@
@c definition of registers
@macro Defreg{name}
+@deffn Register @t{\\n[\name\]}
@vindex \name\
+@end macro
+
+@macro DefregList{name}
@deffn Register @t{\\n[\name\]}
+@defdummy
+@vindex \name\
@end macro
-@macro Defregx{name}
+@macro DefregItem{name}
+@deffnx Register @t{\\n[\name\]}
+@defdummy
@vindex \name\
+@end macro
+
+@macro DefregListEnd{name}
@deffnx Register @t{\\n[\name\]}
+@vindex \name\
@end macro
@macro endDefreg
@@ -104,16 +204,57 @@
@end macro
+@c definition of registers specific to macro packages, preprocessors, etc.
+
+@macro Defmpreg{name, package}
+@deffn Register @t{\\n[\name\]}
+@vindex \name\ @r{[}\package\@r{]}
+@end macro
+
+@macro DefmpregList{name, package}
+@deffn Register @t{\\n[\name\]}
+@defdummy
+@vindex \name\ @r{[}\package\@r{]}
+@end macro
+
+@macro DefmpregItem{name, package}
+@deffnx Register @t{\\n[\name\]}
+@defdummy
+@vindex \name\ @r{[}\package\@r{]}
+@end macro
+
+@macro DefmpregListEnd{name, package}
+@deffnx Register @t{\\n[\name\]}
+@vindex \name\ @r{[}\package\@r{]}
+@end macro
+
+@macro endDefmpreg
+@end deffn
+@end macro
+
+
@c definition of macros
-@macro Defmac{name, arg}
-@maindex \name\
+@macro Defmac{name, arg, package}
@defmac @t{.\name\} \arg\
+@maindex \name\ @r{[}\package\@r{]}
+@end macro
+
+@macro DefmacList{name, arg, package}
+@defmac @t{.\name\} \arg\
+@defdummy
+@maindex \name\ @r{[}\package\@r{]}
+@end macro
+
+@macro DefmacItem{name, arg, package}
+@defmacx @t{.\name\} \arg\
+@defdummy
+@maindex \name\ @r{[}\package\@r{]}
@end macro
-@macro Defmacx{name, arg}
-@maindex \name\
+@macro DefmacListEnd{name, arg, package}
@defmacx @t{.\name\} \arg\
+@maindex \name\ @r{[}\package\@r{]}
@end macro
@macro endDefmac
@@ -123,14 +264,26 @@
@c definition of strings
-@macro Defstr{name, arg}
-@stindex \name\
-@deffn String @t{\name\} \arg\
+@macro Defstr{name, package}
+@deffn String @t{\\*[\name\]}
+@stindex \name\ @r{[}\package\@r{]}
+@end macro
+
+@macro DefstrList{name, package}
+@deffn String @t{\\*[\name\]}
+@defdummy
+@stindex \name\ @r{[}\package\@r{]}
+@end macro
+
+@macro DefstrItem{name, package}
+@deffnx String @t{\\*[\name\]}
+@defdummy
+@stindex \name\ @r{[}\package\@r{]}
@end macro
-@macro Defstrx{name, arg}
-@stindex \name\
-@deffnx String @t{\name\} \arg\
+@macro DefstrListEnd{name, package}
+@deffnx String @t{\\*[\name\]}
+@stindex \name\ @r{[}\package\@r{]}
@end macro
@macro endDefstr
@@ -151,15 +304,50 @@
@end macro
+@c <text>
+
+@tex
+\gdef\angles#1{\angleleft{}\r{#1}\angleright{}}
+@end tex
+
+@macro angles{text}
+<\text\>
+@end macro
+
+
+@c a <= sign
+
+@tex
+\gdef\LE{\le}
+@end tex
+
+@macro LE
+<=
+@end macro
+
+
+@c due to a bug in texinfo 4.2, the spacing of `<' is bad in @item
+
+@tex
+\gdef\LT{\string<}
+@end tex
+
+@macro LT
+<
+@end macro
+
+
@c We need special parentheses and brackets:
@c
@c . Real parentheses in @deffn produce an error while compiling with
@c TeX
@c . Real brackets use the wrong font in @deffn, overriding @t{}.
@c
+@c Since macros aren't expanded in @deffn during -E, the following
+@c definitions are for non-TeX only.
+@c
@c This is true for texinfo 4.0.
-@ifnottex
@macro lparen
(
@end macro
@@ -172,147 +360,54 @@
@macro rbrack
]
@end macro
-@end ifnottex
-@iftex
-@macro lparen
-@@lparen
-@end macro
-@macro rparen
-@@rparen
-@end macro
-@macro lbrack
-@@lbrack
-@end macro
-@macro rbrack
-@@rbrack
-@end macro
-@end iftex
-
-@c Note: We say `Roman numerals' but `roman font'.
+@tex
+\gdef\gobblefirst#1#2{#2}
+\gdef\putwordAppendix{\gobblefirst}
+@end tex
-@c XXX comment all examples
+@c Note: We say `Roman numerals' but `roman font'.
@dircategory Miscellaneous
@direntry
-* Groff: (groff). The GNU troff document formatting system.
+* Groff: (groff). The GNU troff document formatting system.
@end direntry
-@smallbook
-
-
-@iftex
-@finalout
-@end iftex
-
-
-@ifinfo
-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-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.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries copying permission notice
-identical to this one except for the removal of this paragraph (this
-paragraph not being relevant to the printed manual).
-
-@end ignore
-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 stated in a translation
-approved by the Foundation.
-
-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.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that the section entitled ``GNU General Public License'' may be
-included in a translation approved by the Free Software Foundation
-instead of in the original English.
-@end ifinfo
-
-
@titlepage
@title groff
@subtitle The GNU implementation of @code{troff}
-@subtitle Edition 1.16
-@subtitle Spring 2000
+@subtitle Edition 1.18
+@subtitle Spring 2002
@author by Trent A.@w{ }Fisher
-@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.
+@author and Werner Lemberg (@email{bug-groff@@gnu.org})
@page
@vskip 0pt plus 1filll
-Copyright @copyright@w{ }1994-2000 Free Software Foundation,@w{ }Inc.
-@sp 2
-Version 1.16 of @code{groff}, @*
-Spring 2000
-@sp 2
-Published by the Free Software Foundation @*
-59 Temple Place, Suite 330 @*
-Boston, MA 02111-1307 USA
-
-
-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 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.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that the section entitled ``GNU General Public License'' may be
-included in a translation approved by the Free Software Foundation
-instead of in the original English.
-
-Cover art by Etienne Suvasa.
+@insertcopying
@end titlepage
-@page
-
-@node Top, Copying, (dir), (dir)
+@contents
@ifinfo
-This Info file documents groff version 1.16, the GNU implementation of
-the troff typesetting system.
+@node Top, Introduction, (dir), (dir)
+@top GNU troff
-This is an in-progress document; contributions, comments, or
-contributions are welcome. Send them to bug-groff@@gnu.org.
+@insertcopying
@end ifinfo
+@ifhtml
+@node Top, Introduction, (dir), (dir)
+@top GNU troff
+
+@insertcopying
+@end ifhtml
+
@menu
-* Copying::
* Introduction::
* Invoking groff::
* Tutorial for Macro Users::
@@ -322,6 +417,7 @@ contributions are welcome. Send them to bug-groff@@gnu.org.
* Output Devices::
* File formats::
* Installation::
+* Copying This Manual::
* Request Index::
* Escape Index::
* Operator Index::
@@ -336,406 +432,10 @@ contributions are welcome. Send them to bug-groff@@gnu.org.
-@node Copying, Introduction, Top, Top
-@cindex copying
-@unnumbered GNU GENERAL PUBLIC LICENSE
-@center Version 2, June 1991
-
-@display
-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.
-@end display
-
-@unnumberedsec Preamble
-
-The licenses for most software are designed to take away your freedom to
-share and change it. By contrast, the GNU General Public License is
-intended to guarantee your freedom to share and change free software --
-to make sure the software is free for all its users. This General
-Public License applies to most of the Free Software Foundation's
-software and to any other program whose authors commit to using it.
-(Some other Free Software Foundation software is covered by the GNU
-Library General Public License instead.) You can apply it to your
-programs, too.
-
-When we speak of free software, we are referring to freedom, not price.
-Our General Public Licenses are designed to make sure that you have the
-freedom to distribute copies of free software (and charge for this
-service if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs; and that you know you can do these things.
-
-To protect your rights, we need to make restrictions that forbid anyone
-to deny you these rights or to ask you to surrender the rights. These
-restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-For example, if you distribute copies of such a program, whether gratis
-or for a fee, you must give the recipients all the rights that you have.
-You must make sure that they, too, receive or can get the source code.
-And you must show them these terms so they know their rights.
-
-We protect your rights with two steps: (1)@w{ }copyright the software,
-and (2)@w{ }offer you this license which gives you legal permission to
-copy, distribute and/or modify the software.
-
-Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-Finally, any free program is threatened constantly by software patents.
-We wish to avoid the danger that redistributors of a free program will
-individually obtain patent licenses, in effect making the program
-proprietary. To prevent this, we have made it clear that any patent
-must be licensed for everyone's free use or not licensed at all.
-
-The precise terms and conditions for copying, distribution and
-modification follow.
-
-@iftex
-@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end iftex
-@ifinfo
-@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end ifinfo
-
-@enumerate 0
-@item
-This License applies to any program or other work which contains a
-notice placed by the copyright holder saying it may be distributed under
-the terms of this General Public License. The ``Program'', below,
-refers to any such program or work, and a ``work based on the Program''
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it, either
-verbatim or with modifications and/or translated into another language.
-(Hereinafter, translation is included without limitation in the term
-``modification''.) Each licensee is addressed as ``you''.
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of running
-the Program is not restricted, and the output from the Program is
-covered only if its contents constitute a work based on the Program
-(independent of having been made by running the Program). Whether that
-is true depends on what the Program does.
-
-@item
-You may copy and distribute verbatim copies of the Program's source code
-as you receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice and
-disclaimer of warranty; keep intact all the notices that refer to this
-License and to the absence of any warranty; and give any other
-recipients of the Program a copy of this License along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-@item
-You may modify your copy or copies of the Program or any portion of it,
-thus forming a work based on the Program, and copy and distribute such
-modifications or work under the terms of Section@w{ }1 above, provided
-that you also meet all of these conditions:
-
-@enumerate a
-@item
-You must cause the modified files to carry prominent notices stating
-that you changed the files and the date of any change.
-
-@item
-You must cause any work that you distribute or publish, that in whole or
-in part contains or is derived from the Program or any part thereof, to
-be licensed as a whole at no charge to all third parties under the terms
-of this License.
-
-@item
-If the modified program normally reads commands interactively when run,
-you must cause it, when started running for such interactive use in the
-most ordinary way, to print or display an announcement including an
-appropriate copyright notice and a notice that there is no warranty (or
-else, saying that you provide a warranty) and that users may
-redistribute the program under these conditions, and telling the user
-how to view a copy of this License. (Exception: if the Program itself
-is interactive but does not normally print such an announcement, your
-work based on the Program is not required to print an announcement.)
-@end enumerate
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program, and
-can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based on
-the Program, the distribution of the whole must be on the terms of this
-License, whose permissions for other licensees extend to the entire
-whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of a
-storage or distribution medium does not bring the other work under the
-scope of this License.
-
-@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@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@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@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@w{ }b above.)
-@end enumerate
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to control
-compilation and installation of the executable. However, as a special
-exception, the source code distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies the
-executable.
-
-If distribution of executable or object code is made by offering access
-to copy from a designated place, then offering equivalent access to copy
-the source code from the same place counts as distribution of the source
-code, even though third parties are not compelled to copy the source
-along with the object code.
-
-@item
-You may not copy, modify, sublicense, or distribute the Program except
-as expressly provided under this License. Any attempt otherwise to
-copy, modify, sublicense or distribute the Program is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this License
-will not have their licenses terminated so long as such parties remain
-in full compliance.
-
-@item
-You are not required to accept this License, since you have not signed
-it. However, nothing else grants you permission to modify or distribute
-the Program or its derivative works. These actions are prohibited by
-law if you do not accept this License. Therefore, by modifying or
-distributing the Program (or any work based on the Program), you
-indicate your acceptance of this License to do so, and all its terms and
-conditions for copying, distributing or modifying the Program or works
-based on it.
-
-@item
-Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further restrictions
-on the recipients' exercise of the rights granted herein. You are not
-responsible for enforcing compliance by third parties to this License.
-
-@item
-If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent license
-would not permit royalty-free redistribution of the Program by all those
-who receive copies directly or indirectly through you, then the only way
-you could satisfy both it and this License would be to refrain entirely
-from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is implemented
-by public license practices. Many people have made generous
-contributions to the wide range of software distributed through that
-system in reliance on consistent application of that system; it is up to
-the author/donor to decide if he or she is willing to distribute
-software through any other system and a licensee cannot impose that
-choice.
-
-This section is intended to make thoroughly clear what is believed to be
-a consequence of the rest of this License.
-
-@item
-If the distribution and/or use of the Program is restricted in certain
-countries either by patents or by copyrighted interfaces, the original
-copyright holder who places the Program under this License may add an
-explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-@item
-The Free Software Foundation may publish revised and/or new versions of
-the General Public License from time to time. Such new versions will be
-similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and ``any
-later version'', you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Program does not specify a version
-number of this License, you may choose any version ever published by the
-Free Software Foundation.
-
-@item
-If you wish to incorporate parts of the Program into other free programs
-whose distribution conditions are different, write to the author to ask
-for permission. For software which is copyrighted by the Free Software
-Foundation, write to the Free Software Foundation; we sometimes make
-exceptions for this. Our decision will be guided by the two goals of
-preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-@iftex
-@heading NO WARRANTY
-@end iftex
-@ifinfo
-@center NO WARRANTY
-@end ifinfo
-
-@item
-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
-THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW@. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER
-EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE@.
-THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
-YOU@. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
-NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-@item
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
-DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
-DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
-(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
-INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
-THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
-OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-@end enumerate
-
-@iftex
-@heading END OF TERMS AND CONDITIONS
-@end iftex
-@ifinfo
-@center END OF TERMS AND CONDITIONS
-@end ifinfo
-
-
-@page
-@unnumberedsec How to Apply These Terms to Your New Programs
-
-If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
-To do so, attach the following notices to the program. It is safest to
-attach them to the start of each source file to most effectively convey
-the exclusion of warranty; and each file should have at least the
-``copyright'' line and a pointer to where the full notice is found.
-
-@smallexample
-@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 distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR 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.
-@end smallexample
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-@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.
-@end smallexample
-
-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
-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.
-
-@var{signature of Ty Coon}, 1 April 1989
-Ty Coon, President of Vice
-@end group
-@end smallexample
-
-This General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications
-with the library. If this is what you want to do, use the GNU Library
-General Public License instead of this License.
-
-
-
@c =====================================================================
@c =====================================================================
-@node Introduction, Invoking groff, Copying, Top
+@node Introduction, Invoking groff, Top, Top
@chapter Introduction
@cindex introduction
@@ -811,8 +511,8 @@ impossible to accomplish complex actions.'' --Doug Gwyn (22/Jun/91 in
@section History
@cindex history
-@cindex @code{runoff}
-@cindex @code{rf}
+@cindex @code{runoff}, the program
+@cindex @code{rf}, the program
@code{troff} can trace its origins back to a formatting program called
@code{runoff}, written by J.@w{ }E.@w{ }Saltzer, which ran on MIT's CTSS
operating system in the mid-sixties. This name came from the common
@@ -823,16 +523,16 @@ of @code{runoff}). It was rewritten as @code{rf} for the @w{PDP-7}
McIllroy rewrote an extended and simplified version of @code{roff} in
the @acronym{BCPL} programming language.
-@cindex @code{roff}
+@cindex @code{roff}, the program
The first version of @acronym{UNIX} was developed on a @w{PDP-7} which
was sitting around Bell Labs. In 1971 the developers wanted to get a
@w{PDP-11} for further work on the operating system. In order to
justify the cost for this system, they proposed that they would
-implement a document formatting system for the AT&T patents division.
-This first formatting program was a reimplementation of McIllroy's
-@code{roff}, written by J.@w{ }F.@w{ }Ossanna.
+implement a document formatting system for the @acronym{AT&T} patents
+division. This first formatting program was a reimplementation of
+McIllroy's @code{roff}, written by J.@w{ }F.@w{ }Ossanna.
-@cindex @code{nroff}
+@cindex @code{nroff}, the program
When they needed a more flexible language, a new version of @code{roff}
called @code{nroff} (``Newer @code{roff}'') was written. It had a much
more complicated syntax, but provided the basis for all future versions.
@@ -866,12 +566,12 @@ 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,
-Ossanna was killed in an auto accident.
+Ossanna was killed in a car accident.
@pindex ditroff
-@cindex @code{ditroff}
+@cindex @code{ditroff}, the program
So, Brian Kernighan took on the task of rewriting @code{troff}. The
-newly rewritten version produced a device independent code which was
+newly rewritten version produced device independent code which was
very easy for postprocessors to read and translate to the appropriate
printer codes. Also, this new version of @code{troff} (called
@code{ditroff} for ``device independent @code{troff}'') had several
@@ -897,7 +597,7 @@ The @code{soelim}, @code{pic}, @code{tbl}, and @code{eqn} preprocessors.
@item
Postprocessors for character devices, @sc{PostScript}, @TeX{} DVI, and
-X@w{ }windows. GNU @code{troff} also eliminated the need for a
+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.
@@ -947,10 +647,10 @@ hyphenation
page control
@item
-font and character size control
+font and glyph size control
@item
-vertical spacing (i.e.@: double spacing)
+vertical spacing (e.g.@: double-spacing)
@item
line length and indenting
@@ -1020,15 +720,15 @@ common (and the ones described in this manual) are @file{man},
Although @code{groff} provides most functions needed to format a
document, some operations would be unwieldy (e.g.@: to draw pictures).
-Therefore, programs called preprocessors were written which understand
-their own language and produce the necessary @code{groff} operations.
-These preprocessors are able to differentiate their own input from the
-rest of the document via markers.
+Therefore, programs called @dfn{preprocessors} were written which
+understand their own language and produce the necessary @code{groff}
+operations. These preprocessors are able to differentiate their own
+input from the rest of the document via markers.
To use a preprocessor, @acronym{UNIX} pipes are used to feed the output
from the preprocessor into @code{groff}. Any number of preprocessors
may be used on a given document; in this case, the preprocessors are
-linked together into one pipeline. However, in @code{groff}, the user
+linked together into one pipeline. However, with @code{groff}, the user
does not need to construct the pipe, but only tell @code{groff} what
preprocessors to use.
@@ -1078,6 +778,7 @@ 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.
+Larry Kollar contributed the section in the @file{ms} macro package.
@@ -1096,15 +797,24 @@ the preprocessors, @code{gtroff} and the postprocessor.
It has become a tradition that GNU programs get the prefix @samp{g} to
distinguish it from its original counterparts provided by the host (see
@ref{Environment}, for more details). Thus, for example, @code{geqn} is
-GNU @code{eqn}. On operating systems like 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}.
+GNU @code{eqn}. On operating systems like GNU/Linux or the Hurd, which
+don't contain proprietary versions of @code{troff}, and on
+MS-DOS/MS-Windows, where @code{troff} and associated programs are not
+available at all, this prefix is omitted since GNU @code{troff} is the
+only used incarnation of @code{troff}. Exception: @samp{groff} is never
+replaced by @samp{roff}.
+
+In this document, we consequently say @samp{gtroff} when talking about
+the GNU @code{troff} program. All other implementations of @code{troff}
+are called @acronym{AT&T} @code{troff} which is the common origin of
+all @code{troff} derivates (with more or less compatible changes).
+Similarly, we say @samp{gpic}, @samp{geqn}, etc.
@menu
* Groff Options::
* Environment::
+* Macro Directories::
+* Font Directories::
* Invocation Examples::
@end menu
@@ -1142,7 +852,7 @@ grolbp}, and @ref{Invoking gxditview}.
The command line format for @code{groff} is:
@Example
-groff [ -abeghilpstvzCEGNRSUVXZ ] [ -F@var{dir} ] [ -m@var{name} ]
+groff [ -abceghilpstvzCEGNRSUVXZ ] [ -F@var{dir} ] [ -m@var{name} ]
[ -T@var{def} ] [ -f@var{fam} ] [ -w@var{name} ] [ -W@var{name} ]
[ -M@var{dir} ] [ -d@var{cs} ] [ -r@var{cn} ] [ -n@var{num} ]
[ -o@var{list} ] [ -P@var{arg} ] [ -L@var{arg} ] [ -I@var{dir} ]
@@ -1152,7 +862,7 @@ groff [ -abeghilpstvzCEGNRSUVXZ ] [ -F@var{dir} ] [ -m@var{name} ]
The command line format for @code{gtroff} is as follows.
@Example
-gtroff [ -abivzCERU ] [ -w@var{name} ] [ -W@var{name} ] [ -d@var{cs} ]
+gtroff [ -abcivzCERU ] [ -w@var{name} ] [ -W@var{name} ] [ -d@var{cs} ]
[ -f@var{fam} ] [ -m@var{name} ] [ -n@var{num} ]
[ -o@var{list} ] [ -r@var{cn} ] [ -T@var{name} ]
[ -F@var{dir} ] [ -M@var{dir} ] [ @var{files}@dots{} ]
@@ -1162,8 +872,8 @@ gtroff [ -abivzCERU ] [ -w@var{name} ] [ -W@var{name} ] [ -d@var{cs} ]
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
+Options without an argument can be grouped behind a single@w{ }@option{-}.
+A filename of@w{ }@file{-} denotes the standard input. It is possible to
have whitespace between an option and its parameter.
The @code{grog} command can be used to guess the correct @code{groff}
@@ -1194,6 +904,9 @@ Preprocess with @code{gpic}.
@item -s
Preprocess with @code{gsoelim}.
+@item -c
+Suppress color output.
+
@item -R
Preprocess with @code{grefer}. No mechanism is provided for passing
arguments to @code{grefer} because most @code{grefer} options have
@@ -1232,9 +945,9 @@ ignored.
@item -L@var{arg}
Pass @var{arg} to the spooler. Each argument should be passed with a
-separate @option{-L} option. Note that @code{groff} does not prepend a
-@samp{-} to @var{arg} before passing it to the postprocessor. If the
-@code{print} keyword in the device description file is missing,
+separate @option{-L} option. Note that @code{groff} does not prepend
+a @samp{-} to @var{arg} before passing it to the postprocessor.
+If the @code{print} keyword in the device description file is missing,
@option{-L} is ignored.
@item -T@var{dev}
@@ -1252,29 +965,46 @@ For @TeX{} DVI format.
@item X75
For a 75@dmn{dpi} X11 previewer.
+@item X75-12
+For a 75@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
+document.
+
@item X100
For a 100@dmn{dpi} X11 previewer.
+@item X100-12
+For a 100@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
+document.
+
@item ascii
-For typewriter-like devices.
+@cindex encoding, @acronym{ASCII}
+@cindex @acronym{ASCII}, encoding
+For typewriter-like devices using the (7-bit) @acronym{ASCII}
+character set.
@item latin1
+@cindex encoding, latin-1
+@cindex latin-1, encoding
For typewriter-like devices that support the @w{Latin-1} (@w{ISO
8859-1}) character set.
@item utf8
+@cindex encoding, utf-8
+@cindex utf-8, encoding
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 encoding, @acronym{EBCDIC}
+@cindex encoding, cp1047
@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.
+For HP LaserJet4-compatible (or other PCL5-compatible) printers.
@item lbp
For Canon @acronym{CAPSL} printers (@w{LBP-4} and @w{LBP-8} series laser
@@ -1282,15 +1012,15 @@ printers).
@pindex pre-grohtml
@pindex post-grohtml
-@cindex @code{grohtml}
+@cindex @code{grohtml}, the program
@item html
To produce @acronym{HTML} output. Note that the @acronym{HTML} driver
consists of two parts, a preprocessor (@code{pre-grohtml}) and a
postprocessor (@code{post-grohtml}).
@end table
-@vindex .T
-@stindex .T
+@cindex output device name string register (@code{.T})
+@cindex output device usage number register (@code{.T})
The predefined @code{gtroff} string register @code{.T} contains the
current output device; the read-only number register @code{.T} is set
to@w{ }1 if this option is used (which is always true if @code{groff} is
@@ -1315,15 +1045,25 @@ Don't allow newlines with @code{eqn} delimiters. This is the same as
the @option{-N} option in @code{geqn}.
@item -S
+@cindex @code{open} request, and safer mode
+@cindex @code{opena} request, and safer mode
+@cindex @code{pso} request, and safer mode
+@cindex @code{sy} request, and safer mode
+@cindex @code{pi} request, and safer mode
+@cindex safer mode
+@cindex mode, safer
Safer mode. Pass the @option{-S} option to @code{gpic} and disable the
@code{open}, @code{opena}, @code{pso}, @code{sy}, and @code{pi}
requests. For security reasons, this is enabled by default.
@item -U
-Unsafe mode. Reverts to the old unsafe behaviour.
+@cindex mode, unsafe
+@cindex unsafe mode
+Unsafe mode. This enables the @code{open}, @code{opena}, @code{pso},
+@code{sy}, and @code{pi} requests.
@item -a
-@vindex .A
+@cindex @acronym{ASCII} approximation output register (@code{.A})
Generate an @acronym{ASCII} approximation of the typeset output. The
read-only register @code{.A} is then set to@w{ }1. @xref{Built-in
Registers}. A typical example is
@@ -1359,13 +1099,13 @@ Inhibit all error messages.
@item -C
Enable compatibility mode. @xref{Implementation Differences}, for the
-list of incompatibilities between @code{groff} and traditional Unix
+list of incompatibilities between @code{groff} and @acronym{AT&T}
@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 name; @var{name} can be of arbitrary length. All string
+@item -d@var{c}@var{s}
+@itemx -d@var{name}=@var{s}
+Define @var{c} or @var{name} to be a string@w{ }@var{s}. @var{c}@w{ }must
+be a one-letter name; @var{name} can be of arbitrary length. All string
assignments happen before loading any macro file (including the start-up
file).
@@ -1375,20 +1115,18 @@ Use @var{fam} as the default font family. @xref{Font Families}.
@item -m@var{name}
Read in the file @file{@var{name}.tmac}. Normally @code{groff} searches
for this in its macro directories. If it isn't found, it tries
-@file{tmac.@var{name}} (and searches in the same directories).
-
-@c XXX document local and system macro dirs
+@file{tmac.@var{name}} (searching in the same directories).
@item -n@var{num}
Number the first page @var{num}.
@item -o@var{list}
-@vindex .P
+@cindex print current page register (@code{.P})
Output only pages in @var{list}, which is a comma-separated list of page
-ranges; @samp{@var{n}} means print page @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} exits after printing the
+ranges; @samp{@var{n}} means print page@w{ }@var{n}, @samp{@var{m}-@var{n}}
+means print every page between @var{m} and@w{ }@var{n}, @samp{-@var{n}}
+means print every page up to@w{ }@var{n}, @samp{@var{n}-} means print every
+page beginning with@w{ }@var{n}. @code{gtroff} exits after printing the
last page in the list. All the ranges are inclusive on both ends.
Within @code{gtroff}, this information can be extracted with the
@@ -1398,22 +1136,24 @@ If your document restarts page numbering at the beginning of each
chapter, then @code{gtroff} prints the specified page range for each
chapter.
-@item -r@var{cn}
+@item -r@var{c}@var{n}
@itemx -r@var{name}=@var{n}
-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. All register
-assignments happen before loading any macro file (including the start-up
-file).
+Set number register@w{ }@var{c} or @var{name} to the value@w{ }@var{n}.
+@var{c}@w{ }must be a one-letter name; @var{name} can be of arbitrary
+length. @var{n}@w{ }can be any @code{gtroff} numeric expression. All
+register assignments happen before loading any macro file (including
+the start-up file).
@item -F@var{dir}
Search @file{@var{dir}} for subdirectories @file{dev@var{name}}
(@var{name} is the name of the device), for the @file{DESC} file, and
-for font files before looking in the standard directories.
+for font files before looking in the standard directories (@pxref{Font
+Directories}). This option is passed to all pre- and postprocessors
+using the @env{GROFF_FONT_PATH} environment variable.
@item -M@var{dir}
Search directory @file{@var{dir}} for macro files before the standard
-directories.
+directories (@pxref{Macro Directories}).
@item -I@var{dir}
This option is as described in @ref{gsoelim}. It implies the
@@ -1423,7 +1163,7 @@ This option is as described in @ref{gsoelim}. It implies the
@c =====================================================================
-@node Environment, Invocation Examples, Groff Options, Invoking groff
+@node Environment, Macro Directories, Groff Options, Invoking groff
@section Environment
@cindex environment variables
@cindex variables in environment
@@ -1433,40 +1173,42 @@ 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} runs @code{@var{X}troff}
+@tindex GROFF_COMMAND_PREFIX@r{, environment variable}
+@cindex command prefix
+@cindex prefix, for commands
+If this is set to@w{ }@var{X}, then @code{groff} runs @code{@var{X}troff}
instead of @code{gtroff}. This also applies to @code{tbl}, @code{pic},
@code{eqn}, @code{grn}, @code{refer}, and @code{soelim}. It does not
apply to @code{grops}, @code{grodvi}, @code{grotty}, @code{pre-grohtml},
@code{post-grohtml}, @code{grolj4}, and @code{gxditview}.
-@c XXX document default values
+The default command prefix is determined during the installation process.
+If a non-GNU troff system is found, prefix @samp{g} is used, none
+otherwise.
@item GROFF_TMAC_PATH
-@tindex GROFF_TMAC_PATH, environment variable
+@tindex GROFF_TMAC_PATH@r{, environment variable}
A colon-separated list of directories in which to search for macro files
-(before the default directories are tried).
-
-@c XXX document local and system macro dirs
+(before the default directories are tried). @xref{Macro Directories}.
@item GROFF_TYPESETTER
-@tindex GROFF_TYPESETTER, environment variable
+@tindex GROFF_TYPESETTER@r{, environment variable}
The default output device.
@item GROFF_FONT_PATH
-@tindex GROFF_FONT_PATH, environment variable
+@tindex GROFF_FONT_PATH@r{, environment variable}
A colon-separated list of directories in which to search for the
@code{dev}@var{name} directory (before the default directories are
-tried).
+tried). @xref{Font Directories}.
@item GROFF_BIN_PATH
-@tindex GROFF_BIN_PATH, environment variable
+@tindex GROFF_BIN_PATH@r{, environment variable}
This search path, followed by @code{PATH}, is used for commands executed
by @code{groff}.
@item GROFF_TMPDIR
-@tindex GROFF_TMPDIR, environment variable
-@tindex TMPDIR, environment variable
+@tindex GROFF_TMPDIR@r{, environment variable}
+@tindex TMPDIR@r{, environment variable}
The directory in which @code{groff} creates temporary files. If this is
not set and @env{TMPDIR} is set, temporary files are created in that
directory. Otherwise temporary files are created in a system-dependent
@@ -1482,7 +1224,137 @@ above.
@c =====================================================================
-@node Invocation Examples, , Environment, Invoking groff
+@node Macro Directories, Font Directories, Environment, Invoking groff
+@section Macro Directories
+@cindex macro directories
+@cindex directories for macros
+@cindex searching macros
+@cindex macros, searching
+
+All macro file names must be named @code{@var{name}.tmac} or
+@code{tmac.@var{name}} to make the @option{-m@var{name}} command line
+option work. The @code{mso} request doesn't have this restriction; any
+file name can be used, and @code{gtroff} won't try to append or prepend
+the @samp{tmac} string.
+
+@cindex tmac, directory
+@cindex directory, for tmac files
+@cindex tmac, path
+@cindex path, for tmac files
+@cindex searching macro files
+@cindex macro files, searching
+@cindex files, macro, searching
+Macro files are kept in the @dfn{tmac directories}, all of which
+constitute the @dfn{tmac path}. The elements of the search path for
+macro files are (in that order):
+
+@itemize @bullet
+@item
+The directories specified with @code{gtroff}'s or @code{groff}'s
+@option{-M} command line option.
+
+@item
+@tindex GROFF_TMAC_PATH@r{, environment variable}
+The directories given in the @env{GROFF_TMAC_PATH} environment
+variable.
+
+@item
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+@cindex current directory
+@cindex directory, current
+The current directory (only if in unsafe mode using the @option{-U}
+command line switch).
+
+@item
+@cindex home directory
+@cindex directory, home
+The home directory.
+
+@item
+@cindex site-specific directory
+@cindex directory, site-specific
+@cindex platform-specific directory
+@cindex directory, platform-specific
+A platform-dependent directory, a site-specific (platform-independent)
+directory, and the main tmac directory; the default locations are
+
+@Example
+/usr/local/lib/groff/site-tmac
+/usr/local/share/groff/site-tmac
+/usr/local/share/groff/1.18/tmac
+@endExample
+
+@noindent
+assuming that the version of @code{groff} is 1.18, and the installation
+prefix was @file{/usr/local}. It is possible to fine-tune those
+directories during the installation process.
+@end itemize
+
+
+@c =====================================================================
+
+@node Font Directories, Invocation Examples, Macro Directories, Invoking groff
+@section Font Directories
+@cindex font directories
+@cindex directories for fonts
+@cindex searching fonts
+@cindex fonts, searching
+
+Basically, there is no restriction how font files for @code{groff} are
+named and how long font names are; however, to make the font family
+mechanism work (@pxref{Font Families}), fonts within a family should
+start with the family name, followed by the shape. For example, the
+Times family uses @samp{T} for the family name and @samp{R}, @samp{B},
+@samp{I}, and @samp{BI} to indicate the shapes `roman', `bold',
+`italic', and `bold italic', respectively. Thus the final font names
+are @samp{TR}, @samp{TB}, @samp{TI}, and @samp{TBI}.
+
+@cindex font path
+@cindex path, for font files
+All font files are kept in the @dfn{font directories} which constitute
+the @dfn{font path}. The file search functions will always append the
+directory @code{dev}@var{name}, where @var{name} is the name of the
+output device. Assuming, say, DVI output, and @file{/foo/bar} as a
+font directory, the font files for @code{grodvi} must be in
+@file{/foo/bar/devdvi}.
+
+The elements of the search path for font files are (in that order):
+
+@itemize @bullet
+@item
+The directories specified with @code{gtroff}'s or @code{groff}'s
+@option{-F} command line option. All device drivers and some
+preprocessors also have this option.
+
+@item
+@tindex GROFF_FONT_PATH@r{, environment variable}
+The directories given in the @env{GROFF_FONT_PATH} environment
+variable.
+
+@item
+@cindex site-specific directory
+@cindex directory, site-specific
+A site-specific directory and the main font directory; the default
+locations are
+
+@Example
+/usr/local/share/groff/site-font
+/usr/local/share/groff/1.18/font
+@endExample
+
+@noindent
+assuming that the version of @code{groff} is 1.18, and the installation
+prefix was @file{/usr/local}. It is possible to fine-tune those
+directories during the installation process.
+@end itemize
+
+
+@c =====================================================================
+
+@node Invocation Examples, , Font Directories, Invoking groff
@section Invocation Examples
@cindex invocation examples
@cindex examples of invocation
@@ -1548,16 +1420,16 @@ double-sided printing -- don't produce any output.
and/or macro packages are required for formatting them, and prints the
@code{groff} command including those options on the standard output. It
generates one or more of the options @option{-e}, @option{-man},
-@option{-me}, @option{-mm}, @option{-ms}, @option{-mdoc},
+@option{-me}, @option{-mm}, @option{-mom}, @option{-ms}, @option{-mdoc},
@option{-mdoc-old}, @option{-p}, @option{-R}, @option{-g}, @option{-G},
@option{-s}, and @option{-t}.
-A special file name @file{-} refers to the standard input. Specifying
+A special file name@w{ }@file{-} refers to the standard input. Specifying
no files also means to read the standard input. Any specified options
are included in the printed command. No space is allowed between
options and their arguments. The only options recognized are
@option{-C} (which is also passed on) to enable compatibility mode, and
-@option{-v} (if it is the only parameter) to print the version number.
+@option{-v} to print the version number and exit.
For example,
@@ -1654,7 +1526,7 @@ for all good men
to come to the aid
of their party.
Four score and seven
-years ago,...
+years ago, etc.
@endExample
@noindent
@@ -1662,7 +1534,7 @@ is read, packed onto output lines, and justified to produce:
@quotation
Now is the time for all good men to come to the aid of their party.
-Four score and seven years ago,...
+Four score and seven years ago, etc.
@end quotation
@cindex break
@@ -1707,24 +1579,25 @@ hyphens out and join a word back together. Also, words such as
can occur where not wanted, such as ``@w{mother- in}-law''.
@end itemize
-@rqindex ls
-@cindex double spacing
+@cindex double-spacing (@code{ls})
@cindex spacing
-@code{gtroff} double spaces output text automatically if you use the
-request @w{@samp{.ls 2}}. Reactivate single spaced mode by typing
-@w{@samp{.ls 1}}.
+@code{gtroff} double-spaces output text automatically if you use the
+request @w{@samp{.ls 2}}. Reactivate single-spaced mode by typing
+@w{@samp{.ls 1}}.@footnote{If you need finer granularity of the
+vertical space, use the @code{pvs} request (@pxref{Changing Type
+Sizes}).}
A number of requests allow to change the way the output looks,
sometimes called the @dfn{layout} of the output page. Most of these
-requests adjust the placing of @dfn{white space} (blank lines or
+requests adjust the placing of @dfn{whitespace} (blank lines or
spaces).
-@cindex new page
-The @samp{.bp} request starts a new page, causing a line break.
+@cindex new page (@code{bp})
+The @code{bp} request starts a new page, causing a line break.
-@cindex blank line
-@cindex empty line
-@cindex line, empty
+@cindex blank line (@code{sp})
+@cindex empty line (@code{sp})
+@cindex line, empty (@code{sp})
The request @w{@samp{.sp @var{N}}} leaves @var{N}@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
@@ -1741,9 +1614,8 @@ leaves one and a half inches of space, followed by the line ``My
thoughts on the subject'', followed by a single blank line (more
measurement units are available, see @ref{Measurements}).
-@rqindex ce
-@cindex centering lines
-@cindex lines, centering
+@cindex centering lines (@code{ce})
+@cindex lines, centering (@code{ce})
Text lines can be centered by using the @code{ce} request. The line
after @code{ce} is centered (horizontally) on the page. To center more
than one line, use @w{@samp{.ce @var{N}}} (where @var{N} is the number
@@ -1760,9 +1632,8 @@ lines to center
The @w{@samp{.ce 0}} request tells @code{groff} to center zero more
lines, in other words, stop centering.
-@rqindex br
-@cindex line break
-@cindex break
+@cindex line break (@code{br})
+@cindex break (@code{br})
All of these requests cause a break; that is, they always start a new
line. To start a new line without performing any other action, use
@code{br}.
@@ -1823,24 +1694,28 @@ sacred to be touched.
And there are also indented paragraphs which begin with a tag or label
at the margin and the remaining text indented.
-@example
-@group
+@Example
one This is the first paragraph. Notice how the first
line of the resulting paragraph lines up with the
other lines in the paragraph.
-@end group
-@group
+@endExample
+@Example
longlabel
This paragraph had a long label. The first
character of text on the first line does not line up
with the text on second and subsequent lines,
although they line up with each other.
-@end group
-@end example
+@endExample
A variation of this is a bulleted list.
-@c XXX description
+@Example
+. Bulleted lists start with a bullet. It is possible
+ to use other glyphs instead of the bullet. In nroff
+ mode using the ASCII character set for output, a dot
+ is used instead of a real bullet.
+@endExample
+
@c ---------------------------------------------------------------------
@@ -1858,11 +1733,15 @@ supply macros for starting chapters and appendices.
@node Headers and Footers, Page Layout Adjustment, Sections and Chapters, Common Features
@subsection Headers and Footers
-Every macro package gives some way to manipulate the headers and footers
-(or @dfn{titles}) on each page. Some packages allow for different ones
-on the even and odd pages (for material printed in a book form).
+Every macro package gives some way to manipulate the @dfn{headers} and
+@dfn{footers} (also called @dfn{titles}) on each page. This is text
+put at the top and bottom of each page, respectively, which contain
+data like the current page number, the current chapter title, and so
+on. Its appearance is not affected by the running text. Some packages
+allow for different ones on the even and odd pages (for material printed
+in a book form).
-The titles are called three-part titles, that is, there is a
+The titles are called @dfn{three-part titles}, that is, there is a
left-justified part, a centered part, and a right-justified part. An
automatically generated page number may be put in any of these fields
with the @samp{%} character (see @ref{Page Layout}, for more details).
@@ -1881,9 +1760,9 @@ other details about the appearance of the printed pages.
@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.
+@dfn{Displays} are sections of text to be set off from the body of
+the paper. Major quotes, tables, and figures are types of displays, as
+are all the examples used in this document.
@cindex quotes, major
@cindex major quotes
@@ -1891,7 +1770,7 @@ examples used in this document.
are set in from the rest of the text without quote marks around them.
@cindex list
-A @dfn{list} is an indented, single spaced, unfilled display. Lists
+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.
@@ -1904,7 +1783,7 @@ not.
@cindex keep, floating
@cindex floating keep
-Floating keeps move relative to the text. Hence, they are good for
+@dfn{Floating keeps} move relative to the text. Hence, they are good for
things which are referred to by name, such as ``See figure@w{ }3''. A
floating keep appears at the bottom of the current page if it fits;
otherwise, it appears at the top of the next page. Meanwhile, the
@@ -1954,6 +1833,10 @@ While some macro packages use the term @dfn{index}, none actually
provide that functionality. The facilities they call indices are
actually more appropriate for tables of contents.
+@pindex makeindex
+To produce a real index in a document, external tools like the
+@code{makeindex} program are necessary.
+
@c ---------------------------------------------------------------------
@node Paper Formats, Multiple Columns, Indices, Common Features
@@ -1995,12 +1878,12 @@ various special characters.
@node Preprocessor Support, Configuration and Customization, Predefined Strings, Common Features
@subsection Preprocessor Support
-All macro packages provide support for the various preprocessors and may
+All macro packages provide support for various preprocessors and may
extend their functionality.
For example, all macro packages mark tables (which are processed with
-@code{gtbl}) by placing them between @code{.TS} and @code{.TE} macros.
-The @file{ms} macro package has an option, @code{.TS@w{}H}, that prints
+@code{gtbl}) by placing them between @code{TS} and @code{TE} macros.
+The @file{ms} macro package has an option, @samp{.TS@w{ }H}, that prints
a caption at the top of a new page (when the table is too long to fit on
a single page).
@@ -2039,8 +1922,8 @@ This chapter documents the main macro packages that come with
@node man, mdoc, Macro Packages, Macro Packages
@section @file{man}
-@cindex @file{man}
@cindex manual pages
+@cindex man pages
@pindex an.tmac
@pindex man.tmac
@pindex man-old.tmac
@@ -2067,7 +1950,8 @@ The command line format for using the @file{man} macros with
@code{groff} is:
@Example
-groff -m man [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [ -rP@var{nnn} ]
+groff -m man [ -rLL=@var{length} ] [ -rLT=@var{length} ]
+ [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [ -rP@var{nnn} ]
[ -rS@var{xx} ] [ -rX@var{nnn} ] [ @var{files}@dots{} ]
@endExample
@@ -2075,8 +1959,18 @@ groff -m man [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [ -rP@var{nnn} ]
It is possible to use @samp{-man} instead of @w{@samp{-m man}}.
@table @code
+@item -rLL=@var{length}
+Set line length to @var{length}. If not specified, the line length
+defaults to 78@w{ }en in nroff mode (this is 78@w{ }characters per
+line) and 6.5@w{ }inch otherwise.
+
+@item -rLT=@var{length}
+Set title length to @var{length}. If not specified, the title length
+defaults to 78@w{ }en in nroff mode (this is 78@w{ }characters per
+line) and 6.5@w{ }inch otherwise.
+
@item -rcR=1
-This option (the default if a tty output device is used) creates a
+This option (the default if a TTY output device is used) creates a
single, very long page instead of multiple pages. Use @code{-rcR=0}
to disable it.
@@ -2106,7 +2000,7 @@ following page numbers: 1, 2, 2a, 2b, 2c, etc.
@node Man usage, Man font macros, Man options, man
@subsection Usage
@cindex @code{man} macros
-@cindex macros for manual pages
+@cindex macros for manual pages [@code{man}]
@pindex man.local
This section describes the available macros for manual pages. For
@@ -2114,7 +2008,7 @@ further customization, put additional macros and requests into the file
@file{man.local} which is loaded immediately after the @file{man}
package.
-@Defmac {TH, title section [@Var{extra1}] [@Var{extra2}] [@Var{extra3}]}
+@Defmac {TH, title section [@Var{extra1} [@Var{extra2} [@Var{extra3}]]], man}
Set the title of the man page to @var{title} and the section to
@var{section}, which must have a value between 1 and@w{ }8. The value
of @var{section} may also have a string appended, e.g.@: @samp{.pm},
@@ -2137,7 +2031,7 @@ single man page should contain exactly one @code{TH} macro at the
beginning of the file.
@endDefmac
-@Defmac {SH, [@Var{heading}]}
+@Defmac {SH, [@Var{heading}], man}
Set up an unnumbered section heading sticking out to the left. Prints
out all the text following @code{SH} up to the end of the line (or the
text in the next line if there is no argument to @code{SH}) in bold
@@ -2145,7 +2039,7 @@ face, one size larger than the base document size. Additionally, the
left margin for the following text is reset to its default value.
@endDefmac
-@Defmac {SS, [@Var{heading}]}
+@Defmac {SS, [@Var{heading}], man}
Set up an unnumbered (sub)section heading. Prints out all the text
following @code{SS} up to the end of the line (or the text in the next
line if there is no argument to @code{SS}) in bold face, at the same
@@ -2153,7 +2047,7 @@ size as the base document size. Additionally, the left margin for the
following text is reset to its default value.
@endDefmac
-@Defmac {TP, [@Var{nnn}]}
+@Defmac {TP, [@Var{nnn}], man}
Set up an indented paragraph with label. The indentation is set to
@var{nnn} if that argument is supplied (the default unit is @samp{n}
if omitted), otherwise it is set to the default indentation value.
@@ -2171,17 +2065,18 @@ set to a default value; on the other hand, the rest of the text has
default font settings.
@endDefmac
-@Defmac {LP}
-@Defmacx {PP}
-@Defmacx {P}
+@DefmacList {LP, , man}
+@DefmacItem {PP, , man}
+@DefmacListEnd {P, , man}
These macros are mutual aliases. Any of them causes a line break at
the current position, followed by a vertical space downwards by the
amount specified by the @code{PD} macro. The font size and shape are
-reset to the default value (10@dmn{pt} roman). Finally, the current
-left margin is restored.
+reset to the default value (10@dmn{pt} roman if no @option{-rS} option
+is given on the command line). Finally, the current left margin is
+restored.
@endDefmac
-@Defmac {IP, [@Var{designator}] [@Var{nnn}]}
+@Defmac {IP, [@Var{designator} [@Var{nnn}]], man}
Set up an indented paragraph, using @var{designator} as a tag to mark
its beginning. The indentation is set to @var{nnn} if that argument
is supplied (default unit is @samp{n}), otherwise the default
@@ -2192,74 +2087,79 @@ 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
+4@w{ }en indentation, write
@Example
.IP \(bu 4
@endExample
@endDefmac
-@cindex hanging indentation, in manual pages
-@Defmac {HP, [@Var{nnn}]}
+@Defmac {HP, [@Var{nnn}], man}
+@cindex hanging indentation [@code{man}]
+@cindex @code{man} macros, hanging indentation
Set up a paragraph with hanging left indentation. The indentation is
set to @var{nnn} if that argument is supplied (default unit is
@samp{n}), otherwise the default indentation value is used. Font size
and face are reset to their default values.
@endDefmac
-@cindex left margin, how to move, in manual pages
-@Defmac {RS, [@Var{nnn}]}
+@Defmac {RS, [@Var{nnn}], man}
+@cindex left margin, how to move [@code{man}]
+@cindex @code{man} macros, moving left margin
Move the left margin to the right by the value @var{nnn} if specified
-(default unit is @samp{n}); otherwise the default indentation value is
-used. Calls to the @code{RS} macro can be nested.
+(default unit is @samp{n}); otherwise the default indentation value
+is used. Calls to the @code{RS} macro can be nested.
@endDefmac
-@Defmac {RE, [@Var{nnn}]}
+@Defmac {RE, [@Var{nnn}], man}
Move 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.
@endDefmac
-@maindex SH
-@maindex SS
-@maindex TP
-@maindex LP
-@maindex PP
-@maindex P
-@maindex IP
-@maindex HP
+@cindex line breaks, with vertical space [@code{man}]
+@cindex @code{man} macros, line breaks with vertical space
To summarize, the following macros cause a line break with the insertion
of vertical space (which amount can be changed with the @code{PD}
macro): @code{SH}, @code{SS}, @code{TP}, @code{LP} (@code{PP},
@code{P}), @code{IP}, and @code{HP}.
-@maindex RS
-@maindex RE
+@cindex line breaks, without vertical space [@code{man}]
+@cindex @code{man} macros, line breaks without vertical space
The macros @code{RS} and @code{RE} also cause a break but do not insert
vertical space.
+@cindex default indentation, resetting [@code{man}]
+@cindex indentaion, resetting to default [@code{man}]
+@cindex @code{man} macros, resetting default indentation
+Finally, the macros @code{SH}, @code{SS}, @code{LP} (@code{PP}, @code{P}),
+and @code{RS} reset the indentation to its default value.
+
@c ---------------------------------------------------------------------
@node Man font macros, Miscellaneous man macros, Man usage, man
@subsection Macros to set fonts
-@cindex fonts in manual pages
-@cindex @code{man}, how to set fonts
+@cindex font selection [@code{man}]
+@cindex @code{man} macros, how to set fonts
The standard font is roman; the default text size is 10@w{ }point.
+If command line option @option{-rS=@var{n}} is given, use
+@var{n}@dmn{pt} as the default text size.
-@Defmac {SM, [@Var{text}]}
+@Defmac {SM, [@Var{text}], man}
Set the text on the same line or the text on the next line in a font
that is one point size smaller than the default font.
@endDefmac
-@cindex boldface, in manual pages
-@Defmac {SB, [@Var{text}]}
-Set the text on the same line or the text on the next line in boldface
+@Defmac {SB, [@Var{text}], man}
+@cindex bold face [@code{man}]
+@cindex @code{man} macros, bold face
+Set the text on the same line or the text on the next line in bold face
font, one point size smaller than the default font.
@endDefmac
-@Defmac {BI, text}
+@Defmac {BI, text, man}
Set its arguments alternately in bold face and italic. Thus,
@Example
@@ -2271,41 +2171,35 @@ would set ``this'' and ``that'' in bold face, and ``word and'' in
italics.
@endDefmac
-@Defmac {IB, text}
+@Defmac {IB, text, man}
Set its arguments alternately in italic and bold face.
@endDefmac
-@Defmac {RI, text}
+@Defmac {RI, text, man}
Set its arguments alternately in roman and italic.
@endDefmac
-@Defmac {IR, text}
+@Defmac {IR, text, man}
Set its arguments alternately in italic and roman.
@endDefmac
-@Defmac {BR, text}
+@Defmac {BR, text, man}
Set its arguments alternately in bold face and roman.
@endDefmac
-@Defmac {RB, text}
+@Defmac {RB, text, man}
Set its arguments alternately in roman and bold face.
@endDefmac
-@Defmac {R, [@Var{text}]}
-Set @var{text} 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.
-@endDefmac
-
-@Defmac {B, [@Var{text}]}
+@Defmac {B, [@Var{text}], man}
Set @var{text} in bold face. If no text is present on the line where
the macro is called, then the text of the next line appears in bold
face.
@endDefmac
-@cindex italic, in manual pages
-@Defmac {I, [@Var{text}]}
+@Defmac {I, [@Var{text}], man}
+@cindex italic fonts [@code{man}]
+@cindex @code{man} macros, italic fonts
Set @var{text} in italic. If no text is present on the line where the
macro is called, then the text of the next line appears in italic.
@endDefmac
@@ -2316,35 +2210,28 @@ macro is called, then the text of the next line appears in italic.
@subsection Miscellaneous macros
@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
+@cindex @code{man} macros, default indentation
+@cindex default indentation [@code{man}]
+The default indentation is 7.2@w{ }en for all output devices except for
@code{grohtml} which ignores indentation.
-@maindex TH
-@cindex tab stops, in manual pages
-@Defmac {DT}
-Set 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.
+@Defmac {DT, , man}
+@cindex tab stops [@code{man}]
+@cindex @code{man} macros, tab stops
+Set tabs every 0.5@w{ }inches. Since this macro is always executed
+during a call to the @code{TH} macro, it makes sense to call it only if
+the tab positions have been changed.
@endDefmac
-@cindex empty space before a paragraph, in manual pages
-@Defmac {PD, [@Var{nnn}]}
+@Defmac {PD, [@Var{nnn}], man}
+@cindex empty space before a paragraph [@code{man}]
+@cindex @code{man} macros, empty space before a paragraph
Adjust the empty space before a new paragraph (or section). The
optional argument gives the amount of space (default unit is
@samp{v}); without parameter, the value is reset to its default value
-(1@w{ }line for tty devices, 0.4@dmn{v}@w{ }otherwise).
+(1@w{ }line for TTY devices, 0.4@dmn{v}@w{ }otherwise).
@endDefmac
-@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} (as
well as @code{PP} and @code{P}), @code{IP}, and @code{HP}.
@@ -2355,22 +2242,22 @@ well as @code{PP} and @code{P}), @code{IP}, and @code{HP}.
The following strings are defined:
-@Defstr {*S}
+@Defstr {S, man}
Switch back to the default font size.
@endDefstr
-@Defstr {*R}
+@Defstr {R, man}
The `registered' sign.
@endDefstr
-@Defstr {Tm}
+@Defstr {Tm, man}
The `trademark' sign.
@endDefstr
-@glindex lq
-@glindex rq
-@Defstr {lq}
-@Defstrx {rq}
+@DefstrList {lq, man}
+@DefstrListEnd {rq, man}
+@cindex @code{lq} glyph, and @code{lq} string [@code{man}]
+@cindex @code{rq} glyph, and @code{rq} string [@code{man}]
Left and right quote. This is equal to @code{\(lq} and @code{\(rq},
respectively.
@endDefstr
@@ -2387,7 +2274,7 @@ become common usage to make the first line of the man page look like
this:
@Example
-.\" @var{word}
+'\" @var{word}
@endExample
@pindex geqn@r{, invocation in manual pages}
@@ -2406,37 +2293,1536 @@ and automatically call the right preprocessor(s).
@node mdoc, ms, man, Macro Packages
@section @file{mdoc}
-@cindex @file{mdoc}
+@cindex @code{mdoc} macros
@c XXX documentation
+@c XXX this is a placeholder until we get stuff knocked into shape
+See the @cite{groff_mdoc(7)} man page (type @command{man groff_mdoc}
+at the command line).
@c =====================================================================
@node ms, me, mdoc, Macro Packages
@section @file{ms}
-@cindex @file{ms}
+@cindex @code{ms} macros
-@c XXX documentation
+The @file{-ms}
+macros are suitable for reports, letters, books,
+user manuals, and so forth.
+The package provides macros for cover pages, section headings,
+paragraphs, lists, footnotes, pagination,
+and a table of contents.
+
+@menu
+* ms Intro::
+* General ms Structure::
+* ms Document Control Registers::
+* ms Cover Page Macros::
+* ms Body Text::
+* ms Page Layout::
+* Differences from AT&T ms::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node ms Intro, General ms Structure, ms, ms
+@subsection Introduction to @file{ms}
+
+The original @file{-ms} macros were included with
+@acronym{AT&T} @code{troff} as well as the
+@file{man} macros.
+While the @file{man} package is intended for brief documents
+that can be read on-line as well as printed, the @file{ms}
+macros are suitable for longer documents that are meant to be
+printed rather than read on-line.
+
+The @file{ms} macro package included with @code{groff}
+is a complete, bottom-up re-implementation.
+Several macros (specific to @acronym{AT&T}
+or Berkeley) are not included, while several new commands are.
+@xref{Differences from AT&T ms}, for more information.
+
+@c ---------------------------------------------------------------------
+
+@node General ms Structure, ms Document Control Registers, ms Intro, ms
+@subsection General structure of an @file{ms} document
+@cindex @code{ms} macros, general structure
+
+The @file{ms} macro package expects a certain amount of structure,
+but not as much as packages such as @file{man} or @file{mdoc}.
+
+The simplest documents can begin with a paragraph macro
+(such as @code{LP} or @code{PP}),
+and consist of text separated by paragraph macros
+or even blank lines.
+Longer documents have a structure as follows:
+
+@table @strong
+@item Document type
+If you invoke the @code{RP}
+(report) macro on the first line of the document,
+@code{groff} prints the cover page information on its own page;
+otherwise it prints the information on the
+first page with your document text immediately following.
+Other document formats found in @acronym{AT&T} @code{troff}
+are specific to @acronym{AT&T} or Berkeley, and are not supported in
+@code{groff}.
+
+@item Format and layout
+By setting number registers,
+you can change your document's type (font and size),
+margins, spacing, headers and footers, and footnotes.
+@xref{ms Document Control Registers}, for more details.
+
+@item Cover page
+A cover page consists of a title, the author's name and institution,
+an abstract, and the date.
+@footnote{Actually, only the title is required.}
+@xref{ms Cover Page Macros}, for more details.
+
+@item Body
+Following the cover page is your document.
+You can use the @file{ms}
+macros to write reports, letters, books, and so forth.
+The package is designed for structured documents,
+consisting of paragraphs interspersed with headings
+and augmented by lists, footnotes, tables, and other
+common constructs.
+@xref{ms Body Text}, for more details.
+
+@item Table of contents
+Longer documents usually include a table of contents,
+which you can invoke by placing the
+@code{TC}
+macro at the end of your document.
+The @file{ms}
+macros have minimal indexing facilities, consisting of the
+@code{IX} macro, which prints an entry on standard error.
+Printing the table of contents at the end is necessary since
+@code{groff} is a single-pass text formatter,
+thus it cannot determine the page number of each section
+until that section has actually been set and printed.
+Since @file{ms} output is intended for hardcopy,
+you can manually relocate the pages containing
+the table of contents between the cover page and the
+body text after printing.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node ms Document Control Registers, ms Cover Page Macros, General ms Structure, ms
+@subsection Document control registers
+@cindex @code{ms} macros, document control registers
+
+The following is a list of document control number registers.
+For the sake of consistency,
+set registers related to margins at the beginning of your document,
+or just after the @code{RP} macro.
+You can set other registers later in your document,
+but you should keep them together at the beginning
+to make them easy to find and edit as necessary.
+
+@unnumberedsubsubsec Margin Settings
+
+@Defmpreg {PO, ms}
+Defines the page offset (i.e.@: the left margin).
+There is no explicit right margin setting; the combination of
+the @code{PO} and @code{LL} registers implicitly define the
+right margin width.
+
+Effective: next page.
+
+Default value: 1@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {LL, ms}
+Defines the line length (i.e.@: the width of the body text).
+
+Effective: next paragraph.
+
+Default: 6@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {LT, ms}
+Defines the title length (i.e.@: the header and footer width).
+This is usually the same as @code{LL}, but not necessarily.
+
+Effective: next paragraph.
+
+Default: 6@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {HM, ms}
+Defines the header margin height at the top of the page.
+
+Effective: next page.
+
+Default: 1@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {FM, ms}
+Defines the footer margin height at the bottom of the page.
+
+Effective: next page.
+
+Default: 1@dmn{i}.
+@endDefmpreg
+
+@unnumberedsubsubsec Text Settings
+
+@Defmpreg {PS, ms}
+Defines the point size of the body text.
+
+Effective: next paragraph.
+
+Default: 10@dmn{p}.
+@endDefmpreg
+
+@Defmpreg {VS, ms}
+Defines the space between lines (line height plus leading).
+
+Effective: next paragraph.
+
+Default: 12@dmn{p}.
+@endDefmpreg
+
+@unnumberedsubsubsec Paragraph Settings
+
+@Defmpreg {PI, ms}
+Defines the initial indent of a @code{.PP} paragraph.
+
+Effective: next paragraph.
+
+Default: 5@dmn{n}.
+@endDefmpreg
+
+@Defmpreg {PD, ms}
+Defines the space between paragraphs.
+
+Effective: next paragraph.
+
+Default: 0.3@dmn{v}.
+@endDefmpreg
+
+@Defmpreg {QI, ms}
+Defines the indent on both sides of a quoted (@code{.QP}) paragraph.
+
+Effective: next paragraph.
+
+Default: 5@dmn{n}.
+@endDefmpreg
+
+@unnumberedsubsubsec Footnote Settings
+
+@Defmpreg {FL, ms}
+Defines the length of a footnote.
+
+Effective: next footnote.
+
+Default: @math{@code{@\n[LL]} * 5 / 6}.
+@endDefmpreg
+
+@Defmpreg {FI, ms}
+Defines the footnote indent.
+
+Effective: next footnote.
+
+Default: 2@dmn{n}.
+@endDefmpreg
+
+@Defmpreg {FF, ms}
+The footnote format:
+@table @code
+@item 0
+Prints the footnote number as a superscript; indents the footnote (default).
+
+@item 1
+Prints the number followed by a period (like 1.)
+and indents the footnote.
+
+@item 2
+Like 1, without an indent.
+
+@item 3
+Like 1, but prints the footnote number as a hanging paragraph.
+@end table
+
+Effective: next footnote.
+
+Default: 0.
+@endDefmpreg
+
+@unnumberedsubsubsec Miscellaneous Number Registers
+
+@Defmpreg {MINGW, ms}
+Defines the minimum width between columns in a multi-column document.
+
+Effective: next page.
+
+Default: 2@dmn{n}.
+@endDefmpreg
+
+@c ---------------------------------------------------------------------
+
+@node ms Cover Page Macros, ms Body Text, ms Document Control Registers, ms
+@subsection Cover page macros
+@cindex @code{ms} macros, cover page
+@cindex cover page macros, [@code{ms}]
+
+Use the following macros to create a cover page for your document
+in the order shown.
+
+@Defmac {RP, [@code{no}], ms}
+Specifies the report format for your document.
+The report format creates a separate cover page.
+The default action (no @code{.RP}
+macro) is to print a subset of the
+cover page on page 1 of your document.
+
+If you use the word @code{no} as an optional argument,
+@code{groff} prints a title page but
+does not repeat any of the title page information
+(title, author, abstract, etc.)
+on page 1 of the document.
+@endDefmac
+
+@Defmac {DA, [@dots{}], ms}
+(optional) Print the current date, or the arguments to the macro if any,
+on the title page (if specified) and in the footers.
+This is the default for @code{nroff}.
+@endDefmac
+
+@Defmac {ND, [@dots{}], ms}
+(optional) Print the current date, or the arguments to the macro if any,
+on the title page (if specified) but not in the footers.
+This is the default for @code{troff}.
+@endDefmac
+
+@Defmac {TL, , ms}
+Specifies the document title.
+@code{groff} collects text following the @code{.TL}
+macro into the title, until reaching the author name or abstract.
+@endDefmac
+
+@Defmac {AU, , ms}
+Specifies the author's name, which appears on the
+line (or lines) immediately following.
+You can specify multiple authors as follows:
+
+@Example
+.AU
+John Doe
+.AI
+University of West Bumblefuzz
+.AU
+Martha Buck
+.AI
+Monolithic Corporation
+
+...
+@endExample
+@endDefmac
+
+@Defmac {AI, , ms}
+Specifies the author's institution.
+You can specify multiple institutions in the same way
+that you specify multiple authors.
+@endDefmac
+
+@Defmac {AB, [@code{no}], ms}
+Begins the abstract.
+The default is to print the word @acronym{ABSTRACT},
+centered and in italics, above the text of the abstract.
+The word @code{no} as an optional argument suppresses this heading.
+@endDefmac
+
+@Defmac {AE, , ms}
+End the abstract.
+@endDefmac
+
+The following is example mark-up for a title page.
+@cindex title page, example markup
+@cindex example markup, title page
+
+@Example
+@cartouche
+.RP
+.TL
+The Inevitability of Code Bloat
+in Commercial and Free Software
+.AU
+J. Random Luser
+.AI
+University of West Bumblefuzz
+.AB
+This report examines the long-term growth
+of the code bases in two large, popular software
+packages; the free Emacs and the commercial
+Microsoft Word.
+While differences appear in the type or order
+of features added, due to the different
+methodologies used, the results are the same
+in the end.
+.PP
+The free software approach is shown to be
+superior in that while free software can
+become as bloated as commercial offerings,
+free software tends to have fewer serious
+bugs and the added features are in line with
+user demand.
+.AE
+
+... the rest of the paper follows ...
+@end cartouche
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node ms Body Text, ms Page Layout, ms Cover Page Macros, ms
+@subsection Body text
+@cindex @code{ms} macros, body text
+
+This section describes macros used to mark up the body of your document.
+Examples include paragraphs, sections, and other groups.
+
+@menu
+* Paragraphs in ms::
+* Headings in ms::
+* Highlighting in ms::
+* Lists in ms::
+* Indents in ms::
+* Tabstops in ms::
+* ms Displays and Keeps::
+* ms Insertions::
+* Example multi-page table::
+* ms Footnotes::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Paragraphs in ms, Headings in ms, ms Body Text, ms Body Text
+@subsubsection Paragraphs
+@cindex @code{ms} macros, paragraph handling
+
+The following paragraph types are available.
+
+@Defmac {PP, , ms}
+Sets a paragraph with an initial indent.
+@endDefmac
+
+@Defmac {LP, , ms}
+Sets a paragraph with no initial indent.
+@endDefmac
+
+@Defmac {QP, , ms}
+Sets a paragraph that is indented at both left and right margins.
+The effect is identical to the @acronym{HTML} @code{<BLOCKQUOTE>} element.
+The next paragraph or heading returns margins to normal.
+@endDefmac
+
+@Defmac {XP, , ms}
+Sets a paragraph whose lines are indented,
+except for the first line.
+This is a Berkeley extension.
+@endDefmac
+
+The following markup uses all four paragraph macros.
+
+@Example
+@cartouche
+.NH 2
+Cases used in the study
+.LP
+The following software and versions were
+considered for this report.
+.PP
+For commercial software, we chose
+.B "Microsoft Word for Windows" ,
+starting with version 1.0 through the
+current version (Word 2000).
+.PP
+For free software, we chose
+.B Emacs ,
+from its first appearance as a standalone
+editor through the current version (v20).
+See [Bloggs 2002] for details.
+.QP
+Franklin's Law applied to software:
+software expands to outgrow both
+RAM and disk space over time.
+.LP
+Bibliography:
+.XP
+Bloggs, Joseph R.,
+.I "Everyone's a Critic" ,
+Underground Press, March 2002.
+A definitive work that answers all questions
+and criticisms about the quality and usability of
+free software.
+
+@end cartouche
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Headings in ms, Highlighting in ms, Paragraphs in ms, ms Body Text
+@subsubsection Headings
+@cindex @code{ms} macros, headings
+
+Use headings to create a hierarchical structure for your document.
+The @file{ms} macros print headings in @strong{bold},
+using the same font family and point size as the body text.
+
+The following describes the heading macros:
+
+@DefmacList {NH, @Var{curr-level}, ms}
+@DefmacListEnd {NH, @t{S} @Var{level0} @dots{}, ms}
+Numbered heading.
+The argument is either a numeric argument to indicate the
+level of the heading, or the letter@w{ }@code{S} followed by numeric
+arguments to set the heading level explicitly.
+
+If you specify heading levels out of sequence, such as invoking
+@samp{.NH 3} after @samp{.NH 1}, @code{groff}
+prints a warning on standard error.
+@endDefmac
+
+@Defmac {SH, , ms}
+Unnumbered subheading.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node Highlighting in ms, Lists in ms, Headings in ms, ms Body Text
+@subsubsection Highlighting
+@cindex @code{ms} macros, highlighting
+
+The @file{ms} macros provide a variety of methods to highlight
+or emphasize text:
+
+@Defmac {B, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in @strong{bold type}.
+If you specify a second argument, @code{groff} prints it in the
+previous font after the bold text, with no intervening space
+(this allows you to set punctuation after the highlighted text
+without highlighting the punctuation).
+Similarly, it prints the third argument (if any) in the previous
+font @strong{before} the first argument.
+For example,
+
+@Example
+.B foo ) (
+@endExample
+
+prints (@strong{foo}).
+
+If you give this macro no arguments, @code{groff}
+prints all text following in bold until
+the next highlighting, paragraph, or heading macro.
+@endDefmac
+
+@Defmac {R, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in roman (or regular) type.
+It operates similarly to the @code{B}@w{ }macro otherwise.
+@endDefmac
+
+@Defmac {I, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in @emph{italic type}.
+It operates similarly to the @code{B}@w{ }macro otherwise.
+@endDefmac
+
+@Defmac {CW, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in a @code{constant width face}.
+It operates similarly to the @code{B}@w{ }macro otherwise.
+@endDefmac
+
+@Defmac {BI, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in bold italic type.
+It operates similarly to the @code{B}@w{ }macro otherwise.
+@endDefmac
+
+@Defmac {BX, [@Var{txt}], ms}
+Prints its argument and draws a box around it.
+If you want to box a string that contains spaces,
+use a digit-width space (@code{\0}).
+@endDefmac
+
+@Defmac {UL, [@Var{txt} [@Var{post}]], ms}
+Prints its first argument with an underline.
+If you specify a second argument, @code{groff}
+prints it in the previous font after
+the underlined text, with no intervening space.
+@endDefmac
+
+@Defmac {LG, , ms}
+Prints all text following in larger type
+(two points larger than the current point size) until
+the next font size, highlighting, paragraph, or heading macro.
+You can specify this macro multiple times
+to enlarge the point size as needed.
+@endDefmac
+
+@Defmac {SM, , ms}
+Prints all text following in smaller type
+(two points smaller than the current point size) until
+the next type size, highlighting, paragraph, or heading macro.
+You can specify this macro multiple times
+to reduce the point size as needed.
+@endDefmac
+
+@Defmac {NL, , ms}
+Prints all text following in the normal point size
+(that is, the value of the @code{PS} register).
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node Lists in ms, Indents in ms, Highlighting in ms, ms Body Text
+@subsubsection Lists
+@cindex @code{ms} macros, lists
+
+The @code{.IP} macro handles duties for all lists.
+
+@Defmac {IP, [@Var{marker} [@Var{width}]], ms}
+The @var{marker} is usually a bullet glyph (@code{\[bu]})
+for unordered lists, a number (or auto-incrementing number
+register) for numbered lists, or a word or phrase for indented
+(glossary-style) lists.
+
+The @var{width} specifies the indent for the body of each list item;
+its default unit is @samp{n}.
+Once specified, the indent remains the same for all
+list items in the document until specified again.
+@endDefmac
+
+The following is an example of a bulleted list.
+@cindex example markup, bulleted list [@code{ms}]
+@cindex bulleted list, example markup [@code{ms}]
+
+@Example
+A bulleted list:
+.IP \[bu] 2
+lawyers
+.IP \[bu]
+guns
+.IP \[bu]
+money
+@endExample
+
+Produces:
+
+@Example
+A bulleted list:
+
+o lawyers
+
+o guns
+
+o money
+@endExample
+
+@sp 1
+
+The following is an example of a numbered list.
+@cindex example markup, numbered list [@code{ms}]
+@cindex numbered list, example markup [@code{ms}]
+
+@Example
+.nr step 1 1
+A numbered list:
+.IP \n[step] 3
+lawyers
+.IP \n+[step]
+guns
+.IP \n+[step]
+money
+@endExample
+
+Produces:
+
+@Example
+A numbered list:
+
+1. lawyers
+
+2. guns
+
+3. money
+@endExample
+
+Note the use of the auto-incrementing number
+register in this example.
+
+@sp 1
+The following is an example of a glossary-style list.
+@cindex example markup, glossary-style list [@code{ms}]
+@cindex glossary-style list, example markup [@code{ms}]
+
+@Example
+A glossary-style list:
+.IP lawyers 0.4i
+Two or more attorneys.
+.IP guns
+Firearms, preferably
+large-caliber.
+.IP money
+Gotta pay for those
+lawyers and guns!
+@endExample
+
+Produces:
+
+@Example
+A glossary-style list:
+
+lawyers
+ Two or more attorneys.
+
+guns Firearms, preferably large-caliber.
+
+money
+ Gotta pay for those lawyers and guns!
+@endExample
+
+In the last example, the @code{IP} macro places the definition
+on the same line as the term if it has enough space; otherwise,
+it breaks to the next line and starts the definition below the
+term.
+This may or may not be the effect you want, especially if some
+of the definitions break and some do not.
+The following examples show two possible ways to force a break.
+
+The first workaround uses the @code{br}
+request to force a break after printing the term or label.
+
+@Example
+@cartouche
+A glossary-style list:
+.IP lawyers 0.4i
+Two or more attorneys.
+.IP guns
+.br
+Firearms, preferably large-caliber.
+.IP money
+Gotta pay for those lawyers and guns!
+@end cartouche
+@endExample
+
+@sp 1
+The second workaround uses the @code{\p} escape to force the break.
+Note the space following the escape; this is important.
+If you omit the space, @code{groff} prints the first word on
+the same line as the term or label (if it fits) @strong{then}
+breaks the line.
+
+@Example
+@cartouche
+A glossary-style list:
+.IP lawyers 0.4i
+Two or more attorneys.
+.IP guns
+\p Firearms, preferably large-caliber.
+.IP money
+Gotta pay for those lawyers and guns!
+@end cartouche
+@endExample
+
+@sp 1
+To set nested lists, use the @code{RS} and @code{RE} macros.
+@xref{Indents in ms}, for more information.
+@cindex @code{ms} macros, nested lists
+@cindex nested lists [@code{ms}]
+
+For example:
+
+@Example
+@cartouche
+.IP \[bu] 2
+Lawyers:
+.RS
+.IP \[bu]
+Dewey,
+.IP \[bu]
+Cheatham,
+.IP \[bu]
+and Howe.
+.RE
+.IP \[bu]
+Guns
+@end cartouche
+@endExample
+
+Produces:
+
+@Example
+o Lawyers:
+
+ o Dewey,
+
+ o Cheatham,
+
+ o and Howe.
+
+o Guns
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Indents in ms, Tabstops in ms, Lists in ms, ms Body Text
+@subsubsection Indents
+
+In many situations,
+you may need to indent a section of text
+while still wrapping and filling.
+@xref{Lists in ms},
+for an example of nested lists.
+
+@DefmacList {RS, , ms}
+@DefmacListEnd {RE, , ms}
+These macros begin and end an indented section.
+The @code{PI} register controls the amount of indent,
+allowing the indented text to line up under hanging
+and indented paragraphs.
+@endDefmac
+
+@xref{ms Displays and Keeps},
+for macros to indent and turn off filling.
+
+@c ---------------------------------------------------------------------
+
+@node Tabstops in ms, ms Displays and Keeps, Indents in ms, ms Body Text
+@subsubsection Tab Stops
+
+Use the @code{ta} request to define tab stops as needed.
+@xref{Tabs and Fields}.
+
+@Defmac{TA, , ms}
+Use this macro to reset the tab stops to the default for @file{ms}
+(every 5n).
+You can redefine the @code{TA} macro to create a different set
+of default tab stops.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms Displays and Keeps, ms Insertions, Tabstops in ms, ms Body Text
+@subsubsection Displays and keeps
+@cindex @code{ms} macros, displays
+@cindex @code{ms} macros, keeps
+@cindex keeps [@code{ms}]
+@cindex displays [@code{ms}]
+
+Use displays to show text-based examples or figures
+(such as code listings).
+
+Displays turn off filling, so lines of code are displayed
+as-is without inserting @code{br} requests in between each line.
+Displays can be @dfn{kept} on a single page, or allowed
+to break across pages.
+
+@DefmacList {DS, @t{L}, ms}
+@DefmacItem {LD, , ms}
+@DefmacListEnd {DE, , ms}
+Left-justified display.
+The @samp{.DS L} call generates a page break, if necessary,
+to keep the entire display on one page.
+The @code{LD} macro allows the display to break across pages.
+The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{I}, ms}
+@DefmacItem {ID, , ms}
+@DefmacListEnd {DE, , ms}
+Indents the display as defined by the @code{DI} register.
+The @samp{.DS I} call generates a page break, if necessary,
+to keep the entire display on one page.
+The @code{ID} macro allows the display to break across pages.
+The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{B}, ms}
+@DefmacItem {BD, , ms}
+@DefmacListEnd {DE, , ms}
+Sets a block-centered display: the entire display is left-justified,
+but indented so that the longest line in the display is centered
+on the page.
+The @samp{.DS B} call generates a page break, if necessary,
+to keep the entire display on one page.
+The @code{BD} macro allows the display to break across pages.
+The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{C}, ms}
+@DefmacItem {CD, , ms}
+@DefmacListEnd {DE, , ms}
+Sets a centered display: each line in the display is centered.
+The @samp{.DS C} call generates a page break, if necessary,
+to keep the entire display on one page.
+The @code{CD} macro allows the display to break across pages.
+The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{R}, ms}
+@DefmacItem {RD, , ms}
+@DefmacListEnd {DE, , ms}
+Right-justifies each line in the display.
+The @samp{.DS R} call generates a page break, if necessary,
+to keep the entire display on one page.
+The @code{RD} macro allows the display to break across pages.
+The @code{DE} macro ends the display.
+@endDefmac
+
+@sp 1
+On occasion, you may want to @dfn{keep} other text together on a page.
+For example, you may want to keep two paragraphs together, or
+a paragraph that refers to a table (or list, or other item)
+immediately following.
+The @file{ms} macros provide the @code{KS} and @code{KE}
+macros for this purpose.
+
+@DefmacList {KS, , ms}
+@DefmacListEnd {KE, , ms}
+The @code{KS} macro begins a block of text to be kept on a
+single page, and the @code{KE} macro ends the block.
+@endDefmac
+
+@DefmacList {KF, , ms}
+@DefmacListEnd {KE, , ms}
+Specifies a @dfn{floating keep};
+if the keep cannot fit on the current page, @code{groff}
+holds the contents of the keep and allows text following
+the keep (in the source file) to fill in the remainder of
+the current page.
+When the page breaks, whether by an explicit @code{bp}
+request or by reaching the end of the page, @code{groff}
+prints the floating keep at the top of the new page.
+This is useful for printing large graphics or tables
+that do not need to appear exactly where specified.
+@endDefmac
+
+You can also use the @code{ne} request to force a page break if
+there is not enough vertical space remaining on the page.
+
+@sp 1
+Use the following macros to draw a box around a section of
+text (such as a display).
+
+@DefmacList {B1, , ms}
+@DefmacListEnd {B2, , ms}
+Marks the beginning and ending of text that is to have a
+box drawn around it.
+The @code{B1} macro begins the box; the @code{B2} macro ends it.
+Text in the box is automatically placed in a diversion (keep).
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms Insertions, Example multi-page table, ms Displays and Keeps, ms Body Text
+@subsubsection Tables, figures, equations, and references
+@cindex @code{ms} macros, tables
+@cindex @code{ms} macros, figures
+@cindex @code{ms} macros, equations
+@cindex @code{ms} macros, references
+@cindex tables [@code{ms}]
+@cindex figures [@code{ms}]
+@cindex equations [@code{ms}]
+@cindex references [@code{ms}]
+
+The @file{ms} macros support the standard
+@code{groff} preprocessors:
+@code{tbl}, @code{pic}, @code{eqn}, and @code{refer}.
+@pindex tbl
+@pindex pic
+@pindex eqn
+@pindex refer
+You mark text meant for preprocessors by enclosing it
+in pairs of tags as follows.
+
+@DefmacList {TS, [@code{H}], ms}
+@DefmacListEnd {TE, , ms}
+Denotes a table, to be processed by the @code{tbl} preprocessor.
+The optional argument@w{ }@code{H} to @code{TS} instructs @code{groff}
+to create a running header with the information
+up to the @code{TH} macro.
+@code{groff} prints the header at the beginning of the
+table; if the table runs onto another page, @code{groff}
+prints the header on the next page as well.
+@endDefmac
+
+@DefmacList {PS, , ms}
+@DefmacListEnd {PE, , ms}
+Denotes a graphic, to be processed by the @code{pic} preprocessor.
+You can create a @code{pic} file by hand, using the @acronym{AT&T}
+@code{pic} manual available on the Web as a reference, or by using
+a graphics program such as @code{xfig}.
+@endDefmac
+
+@DefmacList {EQ, [@Var{align}], ms}
+@DefmacListEnd {EN, , ms}
+Denotes an equation, to be processed by the @code{eqn} preprocessor.
+The optional @var{align} argument can be @code{C}, @code{L}, or@w{
+}@code{I} to center (the default), left-justify, or indent the equation.
+@endDefmac
+
+@DefmacList {[, , ms}
+@DefmacListEnd {], , ms}
+Denotes a reference, to be processed by the @code{refer} preprocessor.
+The @acronym{GNU} @cite{refer(1)} man page provides a comprehensive
+reference to the preprocessor and the format of the bibliographic
+database.
+@endDefmac
+
+@menu
+* Example multi-page table::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Example multi-page table, ms Footnotes, ms Insertions, ms Body Text
+@subsubsection An example multi-page table
+@cindex example markup, multi-page table [@code{ms}]
+@cindex multi-page table, example markup [@code{ms}]
+
+The following is an example of how to set up a
+table that may print across two or more pages.
+
+@Example
+@cartouche
+.TS H
+allbox expand;
+cb | cb .
+Text ...of heading...
+_
+.TH
+.T&
+l | l .
+... the rest of the table follows...
+.CW
+.TE
+@end cartouche
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node ms Footnotes, , Example multi-page table, ms Body Text
+@subsubsection Footnotes
+@cindex @code{ms} macros, footnotes
+@cindex footnotes [@code{ms}]
+
+The @file{ms} macro package has a flexible footnote system.
+You can specify either numbered footnotes or symbolic footnotes
+(that is, using a marker such as a dagger symbol).
+
+@Defstr {*, ms}
+Specifies the location of a numbered footnote marker in the text.
+@endDefesc
+
+@DefmacList {FS, , ms}
+@DefmacListEnd {FE, , ms}
+Specifies the text of the footnote.
+The default action is to create a numbered footnote;
+you can create a symbolic footnote by specifying
+a @dfn{mark} glyph
+(such as @code{\[dg]} for the dagger glyph)
+in the body text and as an argument to the @code{FS} macro,
+followed by the text of the footnote
+and the @code{FE} macro.
+@endDefmac
+
+You can control how @code{groff}
+prints footnote numbers by changing the value of the
+@code{FF} register. @xref{ms Document Control Registers}.
+
+@c ---------------------------------------------------------------------
+
+@node ms Page Layout, Differences from AT&T ms, ms Body Text, ms
+@subsection Page layout
+@cindex @code{ms} macros, page layout
+@cindex page layout [@code{ms}]
+
+The default output from the @file{ms}
+macros provides a minimalist page layout:
+it prints a single column, with the page number centered at the top
+of each page.
+It prints no footers.
+
+You can change the layout by setting
+the proper number registers and strings.
+
+@menu
+* ms Headers and Footers::
+* ms Margins::
+* ms Multiple Columns::
+* ms TOC::
+* ms Strings and Special Characters::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node ms Headers and Footers, ms Margins, ms Page Layout, ms Page Layout
+@subsubsection Headers and footers
+@cindex @code{ms} macros, headers
+@cindex @code{ms} macros, footers
+@cindex headers [@code{ms}]
+@cindex footers [@code{ms}]
+
+For documents that do not distinguish between odd and even pages,
+set the following strings:
+
+@DefstrList {LH, ms}
+@DefstrItem {CH, ms}
+@DefstrListEnd {RH, ms}
+Sets the left, center, and right headers.
+@endDefstr
+
+@DefstrList {LF, ms}
+@DefstrItem {CF, ms}
+@DefstrListEnd {RF, ms}
+Sets the left, center, and right footers.
+@endDefstr
+
+@sp 1
+For documents that need different information printed in the
+even and odd pages, use the following macros:
+
+@DefmacList {OH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+@DefmacItem {EH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+@DefmacItem {OF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+@DefmacListEnd {EF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+The @code{OH} and @code{EH} macros define headers for the odd and even pages;
+the @code{OF} and @code{EF} macros define footers for the odd and even pages.
+This is more flexible than defining the individual strings.
+
+You can replace the quote (@code{'}) marks with any character not
+appearing in the header or footer text.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms Margins, ms Multiple Columns, ms Headers and Footers, ms Page Layout
+@subsubsection Margins
+@cindex @code{ms} macros, margins
+
+You control margins using a set of number registers.
+@xref{ms Document Control Registers}, for details.
+
+@c ---------------------------------------------------------------------
+
+@node ms Multiple Columns, ms TOC, ms Margins, ms Page Layout
+@subsubsection Multiple columns
+@cindex @code{ms} macros, multiple columns
+@cindex multiple columns [@code{ms}]
+
+The @file{ms} macros can set text in as many columns as will
+reasonably fit on the page.
+The following macros are available;
+all of them force a page break if a multi-column mode is already set.
+However, if the current mode is single-column, starting a multi-column
+mode does @strong{not} force a page break.
+
+@Defmac {1C, , ms}
+Single-column mode.
+@endDefmac
+
+@Defmac {2C, , ms}
+Two-column mode.
+@endDefmac
+
+@Defmac {MC, [@Var{width} [@Var{gutter}]], ms}
+Multi-column mode.
+If you specify no arguments, it is equivalent to the
+@code{2C} macro.
+Otherwise, @var{width} is the width of each column and
+@var{gutter} is the space between columns.
+The @code{MINGW} number register controls the default gutter width.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms TOC, ms Strings and Special Characters, ms Multiple Columns, ms Page Layout
+@subsubsection Creating a table of contents
+@cindex @code{ms} macros, creating table of contents
+@cindex table of contents, creating [@code{ms}]
+
+The facilities in the @file{ms} macro package for creating
+a table of contents are semi-automated at best.
+Assuming that you want the table of contents to consist of
+the document's headings, you need to repeat those headings
+wrapped in @code{XS} and @code{XE} macros.
+
+@DefmacList {XS, [@Var{page}], ms}
+@DefmacItem {XA, [@Var{page}], ms}
+@DefmacListEnd {XE, , ms}
+These macros define a table of contents
+or an individual entry in the table of contents,
+depending on their use.
+The macros are very simple; they cannot indent a heading based on its level.
+The easiest way to work around this is to add tabs
+to the table of contents string.
+The following is an example:
+
+@Example
+@cartouche
+.NH 1
+Introduction
+.XS
+Introduction
+.XE
+.LP
+...
+.CW
+.NH 2
+Methodology
+.XS
+ Methodology
+.XE
+.LP
+...
+@end cartouche
+@endExample
+
+You can manually create a table of contents
+by beginning with the @code{XS} macro for the first entry,
+specifying the page number for that entry as the argument to @code{XS}.
+Add subsequent entries using the @code{XA} macro,
+specifying the page number for that entry as the argument to @code{XA}.
+The following is an example:
+
+@Example
+@cartouche
+.XS 1
+Introduction
+.XA 2
+A Brief History of the Universe
+.XA 729
+Details of Galactic Formation
+...
+.XE
+@end cartouche
+@endExample
+@endDefmac
+
+@Defmac {TC, [@code{no}], ms}
+Prints the table of contents on a new page,
+setting the page number to@w{ }@strong{i} (Roman numeral one).
+You should usually place this macro at the end of the
+file, since @code{groff} is a single-pass formatter and
+can only print what has been collected up to the point
+that the @code{TC} macro appears.
+
+The optional argument @code{no} suppresses printing
+the title specified by the string register @code{TOC}.
+@endDefmac
+
+@Defmac{PX, [@code{no}], ms}
+Prints the table of contents on a new page,
+using the current page numbering sequence.
+Use this macro to print a manually-generated table of contents
+at the beginning of your document.
+
+The optional argument @code{no} suppresses printing
+the title specified by the string register @code{TOC}.
+@endDefmac
+
+The @cite{Groff and Friends HOWTO}
+includes a @code{sed} script that automatically inserts
+@code{XS} and @code{XE} macro entries after each heading in a document.
+
+Altering the @code{NH} macro to automatically build the table
+of contents is perhaps initially more difficult, but would save
+a great deal of time in the long run if you use @file{ms} regularly.
+
+@c ---------------------------------------------------------------------
+
+@node ms Strings and Special Characters, , ms TOC, ms Page Layout
+@subsubsection Strings and Special Characters
+@cindex @code{ms} macros, strings
+@cindex @code{ms} macros, special characters
+@cindex @code{ms} macros, accent marks
+@cindex accent marks [@code{ms}]
+@cindex special characters [@code{ms}]
+@cindex strings [@code{ms}]
+
+The @file{ms} macros provide the following predefined strings.
+You can change the string definitions to help in creating
+documents in languages other than English.
+
+@Defstr {REFERENCES, ms}
+Contains the string printed at the beginning of the
+references (bibliography) page.
+The default is @samp{References}.
+@endDefstr
+
+@Defstr {ABSTRACT, ms}
+Contains the string printed at the beginning of the abstract.
+The default is @samp{ABSTRACT}.
+@endDefstr
+
+@Defstr {TOC, ms}
+Contains the string printed at the beginning of the table of contents.
+@endDefstr
+
+@DefstrList {MONTH1, ms}
+@DefstrItem {MONTH2, ms}
+@DefstrItem {MONTH3, ms}
+@DefstrItem {MONTH4, ms}
+@DefstrItem {MONTH5, ms}
+@DefstrItem {MONTH6, ms}
+@DefstrItem {MONTH7, ms}
+@DefstrItem {MONTH8, ms}
+@DefstrItem {MONTH9, ms}
+@DefstrItem {MONTH10, ms}
+@DefstrItem {MONTH11, ms}
+@DefstrListEnd {MONTH12, ms}
+Prints the full name of the month in dates.
+The default is @samp{January}, @samp{February}, etc.
+@endDefstr
+
+The following special characters are available@footnote{For an
+explanation what special characters are see @ref{Special Characters}.}:
+
+@Defstr {-, ms}
+Prints an em dash.
+@endDefstr
+
+@DefstrList {*Q, ms}
+@DefstrListEnd {*U, ms}
+Prints typographer's quotes in troff,
+plain quotes in nroff.
+@code{*Q} is the left quote and @code{*U} is the right quote.
+@endDefstr
+
+Improved accent marks are available in the @file{ms} macros.
+
+@Defmac {AM, , ms}
+Specify this macro at the beginning of your document
+to enable extended accent marks and special characters.
+This is a Berkeley extension.
+
+To use the accent marks, place them @strong{after}
+the character being accented.
+@endDefmac
+
+The following accent marks are available
+after invoking the @code{AM} macro:
+
+@Defstr {\', ms}
+Acute accent.
+@endDefstr
+
+@Defstr {\`, ms}
+Grave accent.
+@endDefstr
+
+@Defstr {^, ms}
+Circumflex.
+@endDefstr
+
+@Defstr {\,, ms}
+Cedilla.
+@endDefstr
+
+@Defstr {~, ms}
+Tilde.
+@endDefstr
+
+@deffn String @t{\*[:]}
+@ifnotinfo
+@stindex : @r{[}ms@r{]}
+@end ifnotinfo
+@ifinfo
+@stindex @r{<colon>} @r{[}ms@r{]}
+@end ifinfo
+Umlaut.
+@end deffn
+
+@Defstr {v, ms}
+Hacek.
+@endDefstr
+
+@Defstr {_, ms}
+Macron (overbar).
+@endDefstr
+
+@Defstr {., ms}
+Underdot.
+@endDefstr
+
+@Defstr {o, ms}
+Ring above.
+@endDefstr
+
+The following are standalone characters
+available after invoking the @code{AM} macro:
+
+@Defstr {?, ms}
+Upside-down question mark.
+@endDefstr
+
+@Defstr {!, ms}
+Upside-down exclamation point.
+@endDefstr
+
+@Defstr {8, ms}
+German @ss{} ligature.
+@endDefstr
+
+@Defstr {3, ms}
+Yogh.
+@endDefstr
+
+@Defstr {Th, ms}
+Uppercase thorn.
+@endDefstr
+
+@Defstr {th, ms}
+Lowercase thorn.
+@endDefstr
+
+@Defstr {D-, ms}
+Uppercase eth.
+@endDefstr
+
+@Defstr {d-, ms}
+Lowercase eth.
+@endDefstr
+
+@Defstr {q, ms}
+Hooked o.
+@endDefstr
+
+@Defstr {ae, ms}
+Lowercase @ae{} ligature.
+@endDefstr
+
+@Defstr {Ae, ms}
+Uppercase @AE{} ligature.
+@endDefstr
+
+@c ---------------------------------------------------------------------
+
+@node Differences from AT&T ms, , ms Page Layout, ms
+@subsection Differences from @acronym{AT&T} @file{ms}
+@cindex @code{ms} macros, differences from @acronym{AT&T}
+@cindex @acronym{AT&T} @code{troff}, @code{ms} macro package differences
+
+This section lists the (minor) differences between the
+@code{groff -ms} macros and @acronym{AT&T}
+@code{troff -ms} macros.
+
+@menu
+* Missing ms Macros::
+* Additional ms Macros::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Missing ms Macros, Additional ms Macros, Differences from AT&T ms, Differences from AT&T ms
+@subsubsection @code{troff} macros not appearing in @code{groff}
+
+Macros missing from @code{groff -ms}
+are cover page macros specific to Bell Labs.
+The macros known to be missing are:
+
+@table @code
+@item .TM
+Technical memorandum; a cover sheet style
+
+@item .IM
+Internal memorandum; a cover sheet style
+
+@item .MR
+Memo for record; a cover sheet style
+
+@item .MF
+Memo for file; a cover sheet style
+
+@item .EG
+Engineer's notes; a cover sheet style
+
+@item .TR
+Computing Science Tech Report; a cover sheet style
+
+@item .OK
+Other keywords
+
+@item .CS
+Cover sheet information
+
+@item .MH
+A cover sheet macro
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Additional ms Macros, , Missing ms Macros, Differences from AT&T ms
+@subsubsection @code{groff} macros not appearing in @acronym{AT&T} @code{troff}
+
+The @code{groff -ms} macros have a few minor extensions
+compared to the @acronym{AT&T} @code{troff -ms} macros.
+
+@Defmac {AM, , ms}
+Improved accent marks.
+@xref{ms Strings and Special Characters}, for details.
+@endDefmac
+
+@Defmac {DS, @t{I}, ms}
+Indented display.
+The default behavior of @acronym{AT&T} @code{troff -ms}
+was to indent; the @code{groff} default prints displays
+flush left with the body text.
+@endDefmac
+
+@Defmac {CW, , ms}
+Print text in @code{constant width} (Courier) font.
+@endDefmac
+
+@Defmac {IX, , ms}
+Indexing term (printed on standard error).
+You can write a script to capture and process an index
+generated in this manner.
+@endDefmac
+
+@sp 1
+The following additional number registers
+appear in @code{groff -ms}:
+
+@Defmpreg {MINGW, ms}
+Specifies a minimum space
+between columns (for multi-column output); this takes the
+place of the @code{GW} register that was documented but apparently
+not implemented in @acronym{AT&T} @code{troff}.
+@endDefmpreg
+
+@sp 1
+Several new string registers are available as well.
+You can change these to handle (for example) the local language.
+@xref{ms Strings and Special Characters}, for details.
@c =====================================================================
@node me, mm, ms, Macro Packages
@section @file{me}
-@cindex @file{me}
+@cindex @code{me} macro package
@c XXX documentation
+@c XXX this is a placeholder until we get stuff knocked into shape
+See the @file{meintro.me} and @file{meref.me} documents in
+groff's @file{doc} directory.
@c =====================================================================
@node mm, , me, Macro Packages
@section @file{mm}
-@cindex @file{mm}
+@cindex @code{mm} macro package
@c XXX documentation
-
+@c XXX this is a placeholder until we get stuff knocked into shape
+See the @cite{groff_mm(7)} man page (type @command{man groff_mm} at
+the command line).
@c =====================================================================
@@ -2445,7 +3831,7 @@ and automatically call the right preprocessor(s).
@node gtroff Reference, Preprocessors, Macro Packages, Top
@chapter @code{gtroff} Reference
@cindex reference, @code{gtroff}
-@cindex @code{gtroff} reference
+@cindex @code{gtroff}, reference
This chapter covers @strong{all} of the facilities of @code{gtroff}.
Users of macro packages may skip it if not interested in details.
@@ -2466,6 +3852,7 @@ Users of macro packages may skip it if not interested in details.
* Character Translations::
* Troff and Nroff Mode::
* Line Layout::
+* Line Control::
* Page Layout::
* Page Control::
* Fonts::
@@ -2479,13 +3866,13 @@ Users of macro packages may skip it if not interested in details.
* Diversions::
* Environments::
* Suppressing output::
+* Colors::
* I/O::
* Postprocessor Access::
* Miscellaneous::
* Gtroff Internals::
* Debugging::
* Implementation Differences::
-* Summary::
@end menu
@@ -2541,7 +3928,7 @@ it. This means it widens the spacing between words until the text
reaches the right margin (in the default adjustment mode). Extra spaces
between words are preserved, but spaces at the end of lines are ignored.
Spaces at the front of a line cause a @dfn{break} (breaks are
-explained in @ref{Implicit Line Breaks})
+explained in @ref{Implicit Line Breaks}).
@xref{Manipulating Filling and Adjusting}.
@@ -2582,7 +3969,7 @@ a comma or a period as part of an abbreviation.
@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.
+@samp{!}, @samp{?}, and @samp{.}) as @dfn{end-of-sentence} characters.
When @code{gtroff} encounters one of these characters at the end of a
line, it appends a normal space followed by a @dfn{sentence space} in
the formatted output. (This justifies one of the conventions mentioned
@@ -2590,21 +3977,21 @@ in @ref{Input Conventions}.)
@cindex transparent characters
@cindex character, transparent
-@glindex dg
-@glindex rq
-@cindex "
-@cindex '
-@cindex )
-@cindex ]
-@cindex *
-In addition, the following characters or glyphs are treated
-transparently while handling end of sentence characters: @samp{"},
-@samp{'}, @samp{)}, @samp{]}, @samp{*}, @code{dg}, and @code{rq}.
+@cindex @code{dg} glyph, at end of sentence
+@cindex @code{rq} glyph, at end of sentence
+@cindex @code{"}, at end of sentence
+@cindex @code{'}, at end of sentence
+@cindex @code{)}, at end of sentence
+@cindex @code{]}, at end of sentence
+@cindex @code{*}, at end of sentence
+In addition, the following characters and symbols are treated
+transparently while handling end-of-sentence characters: @samp{"},
+@samp{'}, @samp{)}, @samp{]}, @samp{*}, @code{\[dg]}, and @code{\[rq]}.
See the @code{cflags} request in @ref{Using Symbols}, for more details.
-@esindex \&
-To prevent the insertion of extra space after an end of sentence
+@cindex @code{\&}, at end of sentence
+To prevent the insertion of extra space after an end-of-sentence
character (at the end of a line), append @code{\&}.
@c ---------------------------------------------------------------------
@@ -2617,6 +4004,7 @@ character (at the end of a line), append @code{\&}.
@cindex character, tabulator
@cindex @acronym{EBCDIC} encoding
+@cindex encoding, @acronym{EBCDIC}
@code{gtroff} translates @dfn{tabulator characters}, also called
@dfn{tabs} (normally code point @acronym{ASCII} @code{0x09} or
@acronym{EBCDIC} @code{0x05}), in the input into movements to the next
@@ -2664,14 +4052,12 @@ line.
@cindex blank line
@cindex empty line
@cindex line, blank
-@cindex blank line macro
-@rqindex blm
+@cindex blank line macro (@code{blm})
There are several ways to cause a break in @code{gtroff}. A blank
-line not only causes a break, but it also outputs a one line vertical
+line not only causes a break, but it also outputs a one-line vertical
space (effectively a blank line). Note that this behaviour can be
modified with the blank line macro request @code{blm}.
-
-@c XXX xref for blm
+@xref{Blank Line Traps}.
@cindex fill mode
@cindex mode, fill
@@ -2721,9 +4107,9 @@ don't try using spaces to get proper indentation).
@cindex measurements
@cindex units of measurement
-@cindex basic units
-@cindex machine units
-@cindex measurement units
+@cindex basic unit (@code{u})
+@cindex machine unit (@code{u})
+@cindex measurement unit
@cindex @code{u} unit
@cindex unit, @code{u}
@code{gtroff} (like many other programs) requires numeric parameters to
@@ -2744,7 +4130,7 @@ current settings (e.g.@: type size) of @code{gtroff}.
@table @code
@item i
-@cindex inch
+@cindex inch unit (@code{i})
@cindex @code{i} unit
@cindex unit, @code{i}
Inches. An antiquated measurement unit still in use in certain
@@ -2752,20 +4138,20 @@ backwards countries with incredibly low-cost computer equipment. One
inch is equal to@w{ }2.54@dmn{cm}.
@item c
-@cindex centimeter
+@cindex centimeter unit (@code{c})
@cindex @code{c} unit
@cindex unit, @code{c}
Centimeters. One centimeter is equal to@w{ }0.3937@dmn{in}.
@item p
-@cindex points
+@cindex point unit (@code{p})
@cindex @code{p} unit
@cindex unit, @code{p}
Points. This is a typesetter's measurement used for measure type size.
It is 72@w{ }points to an inch.
@item P
-@cindex pica
+@cindex pica unit (@code{P})
@cindex @code{P} unit
@cindex unit, @code{P}
Pica. Another typesetting measurement. 6@w{ }Picas to an inch (and
@@ -2778,6 +4164,12 @@ Pica. Another typesetting measurement. 6@w{ }Picas to an inch (and
@cindex @code{z} unit
@cindex unit, @code{z}
@xref{Fractional Type Sizes}, for a discussion of these units.
+
+@item f
+@cindex @code{f} unit
+@cindex unit, @code{f}
+Fractions. Value is 65536.
+@xref{Colors}, for usage.
@end table
The other measurements understood by @code{gtroff} depend on
@@ -2787,7 +4179,7 @@ text.
@table @code
@item m
-@cindex em unit
+@cindex em unit (@code{m})
@cindex @code{m} unit
@cindex unit, @code{m}
Ems. This unit is equal to the current font size in points. So called
@@ -2795,14 +4187,14 @@ because it is @emph{approximately} the width of the letter@w{ }@samp{m}
in the current font.
@item n
-@cindex en unit
+@cindex en unit (@code{n})
@cindex @code{n} unit
@cindex unit, @code{n}
-Ens. This is half of an em.
+Ens. In @code{groff}, this is half of an em.
@item v
-@cindex vertical space
-@cindex space, vertical
+@cindex vertical space unit (@code{v})
+@cindex space, vertical, unit (@code{v})
@cindex @code{v} unit
@cindex unit, @code{v}
Vertical space. This is equivalent to the current line spacing.
@@ -2834,6 +4226,7 @@ line length of 3.5@w{ }inches and their results:
3.5i @result{} 3.5i
7/2 @result{} 0i
7/2i @result{} 0i
+(7 / 2)u @result{} 0i
7i/2 @result{} 0.1i
7i/2u @result{} 3.5i
@endExample
@@ -2844,7 +4237,8 @@ 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 7@dmn{i}/2
is first handled as 7@dmn{i}/2@dmn{m}, then converted to
1680@dmn{u}/66@dmn{u} which is 25@dmn{u}, and this is approximately
-0.1@dmn{i}.
+0.1@dmn{i}. As can be seen, a scaling indicator after a closing
+parenthesis is simply ignored.
@cindex measurements, specifying safely
Thus, the safest way to specify measurements is to always
@@ -2860,8 +4254,6 @@ certain scalar value, use @samp{u} as the unit for that value.
@code{gtroff} has most arithmetic operators common to other languages:
-@c XXX more details; examples
-
@itemize @bullet
@item
@cindex arithmetic operators
@@ -2895,7 +4287,12 @@ Comparison: @samp{<} (less than), @samp{>} (greater than), @samp{<=}
@cindex logical operators
@cindex operators, logical
@opindex &
+@ifnotinfo
@opindex :
+@end ifnotinfo
+@ifinfo
+@opindex @r{<colon>}
+@end ifinfo
Logical: @samp{&} (logical and), @samp{:} (logical or).
@item
@@ -2904,31 +4301,37 @@ Logical: @samp{&} (logical and), @samp{:} (logical or).
@opindex -
@opindex +
@opindex !
-@rqindex if
-@rqindex while
-@cindex @code{if}, and the @samp{!} operator
-@cindex @code{while}, and the @samp{!} operator
+@cindex @code{if} request, and the @samp{!} operator
+@cindex @code{while} request, and the @samp{!} operator
Unary operators: @samp{-} (negating, i.e.@: changing the sign), @samp{+}
(just for completeness; does nothing in expressions), @samp{!} (logical
not; this works only within @code{if} and @code{while} requests). See
below for the use of unary operators in motion requests.
@item
-@cindex extremum operators
-@cindex operators, extremum
+@cindex extremum operators (@code{>?}, @code{<?})
+@cindex operators, extremum (@code{>?}, @code{<?})
@opindex >?
@opindex <?
-Extrema: @samp{>?} (maximum), @samp{<?} (minimum). For example,
-@samp{5>?3} yields@w{ }@samp{5}.
+Extrema: @samp{>?} (maximum), @samp{<?} (minimum).
+
+Example:
-@c XXX add examples
+@Example
+.nr x 5
+.nr y 3
+.nr z (\n[x] >? \n[y])
+@endExample
+
+@noindent
+The register@w{ }@code{z} now contains@w{ }5.
@item
@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}.
+Scaling: @code{(@var{c};@var{e})}. Evaluate@w{ }@var{e} using@w{ }@var{c}
+as the default scaling indicator. If @var{c} is missing, ignore scaling
+indicators in the evaluation of@w{ }@var{e}.
@end itemize
@cindex parentheses
@@ -2943,28 +4346,56 @@ to right. This means that @code{gtroff} evaluates @samp{3+5*4} as if it were
parenthesized like @samp{(3+5)*4}, not as @samp{3+(5*4)}, as might be
expected.
-@opindex +@r{, and page motion}
-@opindex -@r{, and page motion}
-@opindex |@r{, and page motion}
+@cindex @code{+}, and page motion
+@cindex @code{-}, and page motion
@cindex motion operators
@cindex operators, motion
For many requests which cause a motion on the page, the unary operators
-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{-} work differently if leading an expression. They
+then indicate a motion relative to the current position (down or up,
+respectively).
+
+@cindex @code{|}, and page motion
+@cindex absolute position operator (@code{|})
+@cindex position, absolute, operator (@code{|})
+Similarly, a leading @samp{|} operator indicates an absolute position.
+For vertical movements, it specifies the distance from the top of the
+page; for horizontal movements, it gives the distance from the beginning
+of the @emph{input} line.
+
+@cindex @code{bp} request, using @code{+} and@w{ }@code{-}
+@cindex @code{in} request, using @code{+} and@w{ }@code{-}
+@cindex @code{ll} request, using @code{+} and@w{ }@code{-}
+@cindex @code{lt} request, using @code{+} and@w{ }@code{-}
+@cindex @code{nm} request, using @code{+} and@w{ }@code{-}
+@cindex @code{nr} request, using @code{+} and@w{ }@code{-}
+@cindex @code{pl} request, using @code{+} and@w{ }@code{-}
+@cindex @code{pn} request, using @code{+} and@w{ }@code{-}
+@cindex @code{po} request, using @code{+} and@w{ }@code{-}
+@cindex @code{ps} request, using @code{+} and@w{ }@code{-}
+@cindex @code{pvs} request, using @code{+} and@w{ }@code{-}
+@cindex @code{rt} request, using @code{+} and@w{ }@code{-}
+@cindex @code{ti} request, using @code{+} and@w{ }@code{-}
+@cindex @code{\H}, using @code{+} and@w{ }@code{-}
+@cindex @code{\R}, using @code{+} and@w{ }@code{-}
+@cindex @code{\s}, using @code{+} and@w{ }@code{-}
@samp{+} and @samp{-} are also treated differently by the following
requests and escapes: @code{bp}, @code{in}, @code{ll}, @code{lt},
@code{nm}, @code{nr}, @code{pl}, @code{pn}, @code{po}, @code{ps},
-@code{rt}, @code{ti}, @code{\R}, and @code{\s}. Here the plus and minus
-signs indicate increments and decrements.
+@code{pvs}, @code{rt}, @code{ti}, @code{\H}, @code{\R}, and @code{\s}.
+Here, leading plus and minus signs indicate increments and decrements.
-@c XXX add more xref
-@xref{Setting Registers}.
+@xref{Setting Registers}, for some examples.
-@cindex space characters in expressions
-@cindex expressions and space characters
+@Defesc {\\B, ', anything, '}
+@cindex numeric expression, valid
+@cindex valid numeric expression
+Return@w{ }1 if @var{anything} is a valid numeric expression;
+or@w{ }0 if @var{anything} is empty or not a valid numeric expression.
+@endDefesc
+
+@cindex space characters, in expressions
+@cindex expressions, and space characters
Due to the way arguments are parsed, spaces are not allowed in
expressions, unless the entire expression is surrounded by parentheses.
@@ -3000,7 +4431,7 @@ Backspace (@acronym{ASCII}@w{ }@code{0x08} or @acronym{EBCDIC}@w{
@cindex invalid input characters
@cindex input characters, invalid
@cindex characters, invalid input
-@cindex unicode
+@cindex Unicode
The following input characters are invalid and are ignored if
@code{groff} runs on a machine based on @acronym{ASCII}, causing a
warning message of type @samp{input} (see @ref{Debugging}, for more
@@ -3031,7 +4462,7 @@ end-list
@@_
@endExample
-@rqindex ]
+@cindex @code{]}, as part of an identifier
@noindent
Note that identifiers longer than two characters with a closing bracket
(@samp{]}) in its name can't be accessed with escape sequences which
@@ -3039,7 +4470,15 @@ expect an identifier as a parameter. For example, @samp{\[foo]]}
accesses the glyph @samp{foo}, followed by @samp{]}, whereas
@samp{\C'foo]'} really asks for glyph @samp{foo]}.
-@c XXX xref
+@cindex @code{refer}, and macro names starting with @code{[} or @code{]}
+@cindex @code{[}, macro names starting with, and @code{refer}
+@cindex @code{]}, macro names starting with, and @code{refer}
+@cindex macro names, starting with @code{[} or @code{]}, and @code{refer}
+To avoid problems with the @code{refer} preprocessor, macro names
+should not start with @samp{[} or @samp{]}. Due to backwards
+compatibility, everything after @samp{.[} and @samp{.]} is handled as
+a special argument to @code{refer}. For example, @samp{.[foo} makes
+@code{refer} to start a reference, using @samp{foo} as a parameter.
@Defesc {\\A, ', ident, '}
Test whether an identifier @var{ident} is valid in @code{gtroff}. It
@@ -3057,22 +4496,20 @@ looking up user input in some sort of associative table.
@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):
-@rqindex (
-@rqindex [
-@rqindex ]
@itemize @bullet
@item
Single character.
+@cindex @code{(}, starting a two-character identifier
@item
Two characters. Must be prefixed with @samp{(} in some situations.
+@cindex @code{[}, starting an identifier
+@cindex @code{]}, ending an identifier
@item
Arbitrary length (@code{gtroff} only). Must be bracketed with @samp{[}
and@w{ }@samp{]} in some situations. Any length identifier can be put
@@ -3080,11 +4517,11 @@ in brackets.
@end itemize
@cindex undefined identifiers
-@cindex indentifiers, undefined
+@cindex identifiers, undefined
Unlike many other programming languages, undefined identifiers are
silently ignored or expanded to nothing.
When @code{gtroff} finds an undefined identifier, it emits a
-warning then:
+warning, doing the following:
@itemize @bullet
@item
@@ -3096,9 +4533,29 @@ If the identifier is a number register, @code{gtroff}
defines it with a value of@w{ }0.
@end itemize
-@xref{Warnings}.
+@xref{Warnings}., @ref{Interpolating Registers}, and @ref{Strings}.
+
+Note that macros, strings, and diversions share the same name space.
+
+@Example
+.de xxx
+. nop foo
+..
+.
+.di xxx
+bar
+.br
+.di
+.
+.xxx
+ @result{} bar
+@endExample
-@c XXX info about common identifier pool for strings and macros.
+@noindent
+As can be seen in the previous example, @code{gtroff} reuses the
+identifier @samp{xxx}, changing it from a macro to a diversion.
+No warning is emitted! The contents of the first macro definition is
+lost.
@xref{Interpolating Registers}, and @ref{Strings}.
@@ -3117,9 +4574,8 @@ implicit line breaking. In order to gain further functionality,
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 the text,
-or even as an argument to a request.
-@c XXX (Not always?)
+The other is an @dfn{escape} which can be usually embedded anywhere
+in the text; most requests can accept it even as an argument.
Escapes generally do more minor operations like sub- and superscripts,
print a symbol, etc.
@@ -3135,13 +4591,11 @@ print a symbol, etc.
@subsection Requests
@cindex requests
-@cindex control character
-@cindex character, control
-@cindex no-break control character
-@cindex character, no-break control
-@cindex control character, no-break
-@rqindex '
-@rqindex .
+@cindex control character (@code{.})
+@cindex character, control (@code{.})
+@cindex no-break control character (@code{'})
+@cindex character, no-break control (@code{'})
+@cindex control character, no-break (@code{'})
A request line begins with a control character, which is either a single
quote (@samp{'}, the @dfn{no-break control character}) or a period
(@samp{.}, the normal @dfn{control character}). These can be changed;
@@ -3152,7 +4606,7 @@ arguments (@emph{no} tabs here).
@cindex structuring source code of documents or macro packages
@cindex documents, structuring the source code
-@cindex macro packages, strucuring the source code
+@cindex macro packages, structuring the source code
Since a control character followed by whitespace only is ignored, it
is common practice to use this feature for structuring the source code
of documents or macro packages.
@@ -3169,8 +4623,7 @@ of documents or macro packages.
@endExample
@cindex blank line
-@cindex blank line macro
-@rqindex blm
+@cindex blank line macro (@code{blm})
Another possibility is to use the blank line macro request @code{blm}
by assigning an empty macro to it.
@@ -3191,12 +4644,11 @@ by assigning an empty macro to it.
.blm \" deactivate blank line macro
@endExample
-@c XXX xref to blm
+@xref{Blank Line Traps}.
-@cindex zero width space character
-@cindex character, zero width space
-@cindex space character, zero width
-@esindex \&
+@cindex zero width space character (@code{\&})
+@cindex character, zero width space (@code{\&})
+@cindex space character, zero width (@code{\&})
@cindex @code{\&}, escaping control characters
To begin a line with a control character without it being interpreted,
precede it with @code{\&}. This represents a zero width space, which
@@ -3216,9 +4668,12 @@ character prevents this.
@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 double
-quotes, or have the spaces @dfn{escaped} with backslashes.
+The line is split into arguments according to
+spaces.@footnote{Plan@w{ }9's @code{troff} implementation also allows
+tabs for argument separation -- @code{gtroff} intentionally doesn't
+support this.} An argument which is intended to contain spaces can
+either be enclosed in double quotes, or have the spaces @dfn{escaped}
+with backslashes.
Here are a few examples:
@@ -3228,8 +4683,8 @@ Here are a few examples:
.uh The\ Mouse\ Problem
@endExample
-@esindex \~
-@esindex \@key{SP}
+@cindex @code{\~}, difference to @code{\@key{SP}}
+@cindex @code{\@key{SP}}, difference to @code{\~}
@noindent
The first line is the @code{uh} macro being called with 3 arguments,
@samp{The}, @samp{Mouse}, and @samp{Problem}. The latter two have the
@@ -3241,8 +4696,8 @@ documents. Nevertheless, it is not optimal in all situations, since
can't stretch. @code{gtroff} provides a different command @code{\~} to
insert a stretchable, non-breaking space.}
-@cindex @code{"}, as a macro argument
-@cindex double quote, as a macro argument
+@cindex @code{"}, in a macro argument
+@cindex double quote, in a macro argument
A double quote which isn't preceded by a space doesn't start a macro
argument. If not closing a string, it is printed literally.
@@ -3254,9 +4709,53 @@ For example,
@noindent
has the arguments @samp{a"}, @w{@samp{b c}}, @samp{de}, and @samp{fg"}.
+Don't rely on this obscure behaviour!
-@rqindex ds
-Duoble quotes in the @code{ds} request are handled differently.
+There are two possibilities to get a double quote reliably.
+
+@itemize @bullet
+@item
+Enclose the whole argument with double quotes and use two consecutive double
+quotes to represent a single one. This traditional solution has the
+disadvantage that double quotes don't survive argument expansion again if
+called in compatibility mode (using the @option{-C} option of @code{groff}):
+
+@Example
+.de xx
+. tm xx: `\\$1' `\\$2' `\\$3'
+.
+. yy "\\$1" "\\$2" "\\$3"
+..
+.de yy
+. tm yy: `\\$1' `\\$2' `\\$3'
+..
+.xx A "test with ""quotes""" .
+ @result{} xx: `A' `test with "quotes"' `.'
+ @result{} yy: `A' `test with ' `quotes""'
+@endExample
+
+@noindent
+If not in compatibility mode, you get the expected result
+
+@Example
+xx: `A' `test with "quotes"' `.'
+yy: `A' `test with "quotes"' `.'
+@endExample
+
+@noindent
+since @code{gtroff} preserves the input level.
+
+@item
+Use the double quote glyph @code{\(dq}. This works with and without
+compatibility mode enabled since @code{gtroff} doesn't convert @code{\(dq}
+back to a double quote input character.
+
+Not that this method won't work with @acronym{UNIX} @code{troff} in general
+since the glyph `dq' isn't defined normally.
+@end itemize
+
+@cindex @code{ds} request, and double quotes
+Double quotes in the @code{ds} request are handled differently.
@xref{Strings}, for more details.
@c ---------------------------------------------------------------------
@@ -3282,9 +4781,6 @@ 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}.
-@rqindex (
-@rqindex [
-@rqindex ]
Escape sequences which require an identifier as a parameter accept three
possible syntax forms.
@@ -3292,11 +4788,14 @@ possible syntax forms.
@item
The next single character is the identifier.
+@cindex @code{(}, starting a two-character identifier
@item
If this single character is an opening parenthesis, take the following
two characters as the identifier. Note that there is no closing
parenthesis after the identifier.
+@cindex @code{[}, starting an identifier
+@cindex @code{]}, ending an identifier
@item
If this single character is an opening bracket, take all characters
until a closing bracket as the identifier.
@@ -3311,7 +4810,7 @@ Examples:
\*[TeX]
@endExample
-@rqindex '
+@cindex @code{'}, delimiting arguments
@cindex argument delimiting characters
@cindex characters, argument delimiting
@cindex delimiting characters for arguments
@@ -3325,9 +4824,9 @@ escape expects. Example:
\l'1.5i\(bu'
@endExample
-@esindex \o
-@esindex \b
-@esindex \X
+@cindex @code{\o}, possible quote characters
+@cindex @code{\b}, possible quote characters
+@cindex @code{\X}, possible quote characters
Note that the quote character can be replaced with any other character
which does not occur in the argument (even a newline or a space
character) in the following escapes: @code{\o}, @code{\b}, and
@@ -3346,86 +4845,98 @@ in Paris
@noindent
possible, but it is better not to use this feature to avoid confusion.
-@esindex \%
-@esindex \@key{SP}
-@esindex \|
-@esindex \^
-@esindex \@{
-@esindex \@}
-@esindex \'
-@esindex \`
-@esindex \-
-@esindex \_
-@esindex \!
-@esindex \?
-@esindex \@@
-@esindex \)
-@esindex \/
-@esindex \,
-@esindex \&
-@esindex \~
-@esindex \0
-@esindex \a
-@esindex \c
-@esindex \d
-@esindex \e
-@esindex \E
-@esindex \p
-@esindex \r
-@esindex \t
-@esindex \u
+@cindex @code{\%}, used as delimiter
+@cindex @code{\@key{SP}}, used as delimiter
+@cindex @code{\|}, used as delimiter
+@cindex @code{\^}, used as delimiter
+@cindex @code{\@{}, used as delimiter
+@cindex @code{\@}}, used as delimiter
+@cindex @code{\'}, used as delimiter
+@cindex @code{\`}, used as delimiter
+@cindex @code{\-}, used as delimiter
+@cindex @code{\_}, used as delimiter
+@cindex @code{\!}, used as delimiter
+@cindex @code{\?}, used as delimiter
+@cindex @code{\@@}, used as delimiter
+@cindex @code{\)}, used as delimiter
+@cindex @code{\/}, used as delimiter
+@cindex @code{\,}, used as delimiter
+@cindex @code{\&}, used as delimiter
+@ifnotinfo
+@cindex @code{\:}, used as delimiter
+@end ifnotinfo
+@ifinfo
+@cindex @code{\@r{<colon>}}, used as delimiter
+@end ifinfo
+@cindex @code{\~}, used as delimiter
+@cindex @code{\0}, used as delimiter
+@cindex @code{\a}, used as delimiter
+@cindex @code{\c}, used as delimiter
+@cindex @code{\d}, used as delimiter
+@cindex @code{\e}, used as delimiter
+@cindex @code{\E}, used as delimiter
+@cindex @code{\p}, used as delimiter
+@cindex @code{\r}, used as delimiter
+@cindex @code{\t}, used as delimiter
+@cindex @code{\u}, used as delimiter
The following escapes sequences (which are handled similarly to
characters since they don't take a parameter) are also allowed as
delimiters: @code{\%}, @w{@samp{\ }}, @code{\|}, @code{\^}, @code{\@{},
@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
@code{\?}, @code{\@@}, @code{\)}, @code{\/}, @code{\,}, @code{\&},
-@code{\~}, @code{\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.
-
-@esindex \A
-@esindex \Z
-@esindex \C
-@esindex \w
+@code{\:}, @code{\~}, @code{\0}, @code{\a}, @code{\c}, @code{\d},
+@code{\e}, @code{\E}, @code{\p}, @code{\r}, @code{\t}, and @code{\u}.
+Again, don't use these if possible.
+
+@cindex @code{\A}, allowed delimiters
+@cindex @code{\B}, allowed delimiters
+@cindex @code{\Z}, allowed delimiters
+@cindex @code{\C}, allowed delimiters
+@cindex @code{\w}, allowed delimiters
No newline characters as delimiters are allowed in the following
-escapes: @code{\A}, @code{\Z}, @code{\C}, and @code{\w}.
-
-@esindex \D
-@esindex \h
-@esindex \H
-@esindex \l
-@esindex \L
-@esindex \N
-@esindex \R
-@esindex \s
-@esindex \S
-@esindex \v
-@esindex \x
+escapes: @code{\A}, @code{\B}, @code{\Z}, @code{\C}, and @code{\w}.
+
+@cindex @code{\D}, allowed delimiters
+@cindex @code{\h}, allowed delimiters
+@cindex @code{\H}, allowed delimiters
+@cindex @code{\l}, allowed delimiters
+@cindex @code{\L}, allowed delimiters
+@cindex @code{\N}, allowed delimiters
+@cindex @code{\R}, allowed delimiters
+@cindex @code{\s}, allowed delimiters
+@cindex @code{\S}, allowed delimiters
+@cindex @code{\v}, allowed delimiters
+@cindex @code{\x}, allowed delimiters
Finally, the escapes @code{\D}, @code{\h}, @code{\H}, @code{\l},
-@code{\L}, @code{\N}, @code{\R}, @code{\s}, @code{\S}, @code{\v}, and
-@code{\x} can't use the following characters as delimiters:
+@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
+@cindex numbers, and delimiters
+@cindex digits, and delimiters
The digits @code{0}-@code{9}.
@item
-@cindex operators
-@opindex +
-@opindex -
-@opindex /
-@opindex *
-@opindex %
-@opindex <
-@opindex >
-@opindex =
-@opindex &
-@opindex :
-@opindex (
-@opindex )
-@opindex .
+@cindex operators, as delimiters
+@cindex @code{+}, as delimiter
+@cindex @code{-}, as delimiter
+@cindex @code{/}, as delimiter
+@cindex @code{*}, as delimiter
+@cindex @code{%}, as delimiter
+@cindex @code{<}, as delimiter
+@cindex @code{>}, as delimiter
+@cindex @code{=}, as delimiter
+@cindex @code{&}, as delimiter
+@ifnotinfo
+@cindex @code{:}, as delimiter
+@end ifnotinfo
+@ifinfo
+@cindex <colon>, as delimiter
+@end ifinfo
+@cindex @code{(}, as delimiter
+@cindex @code{)}, as delimiter
+@cindex @code{.}, as delimiter
The (single-character) operators @samp{+-/*%<>=&:().}.
@item
@@ -3438,36 +4949,40 @@ The (single-character) operators @samp{+-/*%<>=&:().}.
The space, tab, and newline characters.
@item
-@esindex \%
-@esindex \@{
-@esindex \@}
-@esindex \'
-@esindex \`
-@esindex \-
-@esindex \_
-@esindex \!
-@esindex \@@
-@esindex \/
-@esindex \c
-@esindex \e
-@esindex \p
-All escape sequences except @code{\%}, @code{\@{}, @code{\@}},
+@cindex @code{\%}, used as delimiter
+@ifnotinfo
+@cindex @code{\:}, used as delimiter
+@end ifnotinfo
+@ifinfo
+@cindex @code{\@r{<colon>}}, used as delimiter
+@end ifinfo
+@cindex @code{\@{}, used as delimiter
+@cindex @code{\@}}, used as delimiter
+@cindex @code{\'}, used as delimiter
+@cindex @code{\`}, used as delimiter
+@cindex @code{\-}, used as delimiter
+@cindex @code{\_}, used as delimiter
+@cindex @code{\!}, used as delimiter
+@cindex @code{\@@}, used as delimiter
+@cindex @code{\/}, used as delimiter
+@cindex @code{\c}, used as delimiter
+@cindex @code{\e}, used as delimiter
+@cindex @code{\p}, used as delimiter
+All escape sequences except @code{\%}, @code{\:}, @code{\@{}, @code{\@}},
@code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!}, @code{\@@},
@code{\/}, @code{\c}, @code{\e}, and @code{\p}.
@end itemize
-@esindex \\
-@esindex \e
-@esindex \E
+@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
+@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
To have a backslash (actually, the current escape character) appear in the
output several escapes are defined: @code{\\}, @code{\e} or @code{\E}.
These are very similar, and only differ with respect to being used in
-macros or diversions. @xref{Copy-in Mode}, and @ref{Diversions}, for
-more information.
-
-@c XXX explanation of \E
+macros or diversions. @xref{Character Translations}, for an exact
+description of those escapes.
-@xref{Identifiers}, and @ref{Character Translations}.
+@xref{Implementation Differences}, @ref{Copy-in Mode}, and @ref{Diversions},
+@ref{Identifiers}, for more information.
@menu
* Comments::
@@ -3487,17 +5002,17 @@ Start a comment. Everything to the end of the input line is ignored.
This may sound simple, but it can be tricky to keep the comments from
interfering with the appearance of the final output.
-@rqindex ds
-@rqindex as
+@cindex @code{ds}, @code{ds1} requests, and comments
+@cindex @code{as}, @code{as1} requests, and comments
If the escape is to the right of some text or a request, that portion
of the line is ignored, but the space leading up to it is noticed by
-@code{gtroff}. This only affects the @code{.ds} and @code{.as}
-request.
+@code{gtroff}. This only affects the @code{ds} and @code{as}
+request and its variants.
-@cindex tabs before comments
+@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
+line up comments. Tabs are not treated as whitespace between the
request and macro arguments.
@cindex undefined request
@@ -3524,7 +5039,7 @@ To avoid this, it is common to start the line with @code{.\"} which
causes the line to be treated as an undefined request and thus ignored
completely.
-@rqindex '
+@cindex @code{'}, as a comment
Another commenting scheme seen sometimes is three consecutive single
quotes (@code{'''}) at the beginning of a line. This works, but
@code{gtroff} gives a warning about an undefined macro (namely
@@ -3612,35 +5127,40 @@ details of formatting parameters.
@node Setting Registers, Interpolating Registers, Registers, Registers
@subsection Setting Registers
-@cindex setting registers
-@cindex registers, setting
+@cindex setting registers (@code{nr}, @code{\R})
+@cindex registers, setting (@code{nr}, @code{\R})
Define or set registers using the @code{nr} request or the
@code{\R} escape.
-@Defreq {nr, ident value}
-@Defescx {\\R, ', ident value, '}
+@DefreqList {nr, ident value}
+@DefescListEnd {\\R, ', ident value, '}
Set number register @var{ident} to @var{value}. If @var{ident}
doesn't exist, @code{gtroff} creates it.
The argument to @code{\R} usually has to be enclosed in quotes.
@xref{Escapes}, for details on parameter delimiting characters.
+
+The @code{\R} escape doesn't produce an input token in @code{gtroff};
+with other words, it vanishes completely after @code{gtroff} has
+processed it.
@endDefreq
For example, the following two lines are equivalent:
@Example
-.nr a 1
-\R'a 1'
+.nr a (((17 + (3 * 4))) % 4)
+\R'a (((17 + (3 * 4))) % 4)'
+ @result{} 1
@endExample
Both @code{nr} and @code{\R} have two additional special forms to
increment or decrement a register.
-@Defreq {nr, ident @t{+}@Var{value}}
-@Defreqx {nr, ident @t{-}@Var{value}}
-@Defescx {\\R, ', ident @t{+}@Var{value}, '}
-@Defescx {\\R, ', ident @t{-}@Var{value}, '}
+@DefreqList {nr, ident @t{+}@Var{value}}
+@DefreqItem {nr, ident @t{-}@Var{value}}
+@DefescItem {\\R, ', ident @t{+}@Var{value}, '}
+@DefescListEnd {\\R, ', ident @t{-}@Var{value}, '}
Increment (decrement) register @var{ident} by @var{value}.
@Example
@@ -3683,16 +5203,26 @@ with a @samp{0}:
@endDefreq
@Defreq {rr, ident}
+@cindex removing number register (@code{rr})
+@cindex number register, removing (@code{rr})
+@cindex register, removing (@code{rr})
Remove number register @var{ident}. If @var{ident} doesn't exist, the
request is ignored.
@endDefreq
@Defreq {rnn, ident1 ident2}
+@cindex renaming number register (@code{rnn})
+@cindex number register, renaming (@code{rnn})
+@cindex register, renaming (@code{rnn})
Rename number register @var{ident1} to @var{ident2}. If either
@var{ident1} or @var{ident2} doesn't exist, the request is ignored.
@endDefreq
@Defreq {aln, ident1 ident2}
+@cindex alias, number register, creating (@code{aln})
+@cindex creating alias, for number register (@code{aln})
+@cindex number register, creating alias (@code{aln})
+@cindex register, creating alias (@code{aln})
Create an alias @var{ident1} for a number register @var{ident2}. The
new name and the old name are exactly equivalent. If @var{ident1} is
undefined, a warning of type @samp{reg} is generated, and the request
@@ -3703,23 +5233,22 @@ is ignored. @xref{Debugging}, for information about warnings.
@node Interpolating Registers, Auto-increment, Setting Registers, Registers
@subsection Interpolating Registers
-@cindex interpolating registers
-@cindex registers, interpolating
+@cindex interpolating registers (@code{\n})
+@cindex registers, interpolating (@code{\n})
Numeric registers can be accessed via the @code{\n} escape.
+@DefescList {\\n, , i, }
+@DefescItem {\\n, @lparen{}, id, }
+@DefescListEnd {\\n, @lbrack{}, ident, @rbrack}
@cindex nested assignments
@cindex assignments, nested
@cindex indirect assignments
@cindex assignments, indirect
-@Defesc {\\n, , i, }
-@Defescx {\\n, @lparen{}, id, }
-@Defescx {\\n, @lbrack{}, ident, @rbrack}
-Interpolate number register with name @var{ident} (one-character name
-@var{i}, two-character name @var{id}). This means that the value of
-the register is expanded in-place while @code{gtroff} is parsing the
-input line. Nested assignments (also called indirect assignments) are
-possible.
+Interpolate number register with name @var{ident} (one-character name@w{
+}@var{i}, two-character name @var{id}). This means that the value of the
+register is expanded in-place while @code{gtroff} is parsing the input line.
+Nested assignments (also called indirect assignments) are possible.
@Example
.nr a 5
@@ -3751,8 +5280,8 @@ Number registers can also be auto-incremented and auto-decremented.
The increment or decrement value can be specified with a third
argument to the @code{nr} request or @code{\R} escape.
-@esindex \R
@Defreq {nr, ident value incr}
+@cindex @code{\R}, difference to @code{nr}
Set number register @var{ident} to @var{value}; the increment for
auto-incrementing is set to @var{incr}. Note that the @code{\R}
escape doesn't support this notation.
@@ -3761,18 +5290,18 @@ escape doesn't support this notation.
To activate auto-incrementing, the escape @code{\n} has a special
syntax form.
-@Defesc {\\n, +, i, }
-@Defescx {\\n, -, i, }
-@Defescx {\\n, @lparen{}+, id, }
-@Defescx {\\n, @lparen{}-, id, }
-@Defescx {\\n, +@lparen{}, id, }
-@Defescx {\\n, -@lparen{}, id, }
-@Defescx {\\n, @lbrack{}+, ident, @rbrack{}}
-@Defescx {\\n, @lbrack{}-, ident, @rbrack{}}
-@Defescx {\\n, +@lbrack{}, ident, @rbrack{}}
-@Defescx {\\n, -@lbrack{}, ident, @rbrack{}}
+@DefescList {\\n, +, i, }
+@DefescItem {\\n, -, i, }
+@DefescItem {\\n, @lparen{}+, id, }
+@DefescItem {\\n, @lparen{}-, id, }
+@DefescItem {\\n, +@lparen{}, id, }
+@DefescItem {\\n, -@lparen{}, id, }
+@DefescItem {\\n, @lbrack{}+, ident, @rbrack{}}
+@DefescItem {\\n, @lbrack{}-, ident, @rbrack{}}
+@DefescItem {\\n, +@lbrack{}, ident, @rbrack{}}
+@DefescListEnd {\\n, -@lbrack{}, ident, @rbrack{}}
Before interpolating, increment or decrement @var{ident}
-(one-character name @var{i}, two-character name @var{id}) by the
+(one-character name@w{ }@var{i}, two-character name @var{id}) by the
auto-increment value as specified with the @code{nr} request (or the
@code{\R} escape). If no auto-increment value has been specified,
these syntax forms are identical to @code{\n}.
@@ -3801,6 +5330,7 @@ produces
@endExample
@cindex increment value without changing the register
+@cindex value, incrementing without changing the register
To change the increment value without changing the value of a register
(@var{a} in the example), the following can be used:
@@ -3812,8 +5342,8 @@ To change the increment value without changing the value of a register
@node Assigning Formats, Built-in Registers, Auto-increment, Registers
@subsection Assigning Formats
-@cindex assigning formats
-@cindex formats, assigning
+@cindex assigning formats (@code{af})
+@cindex formats, assigning (@code{af})
When a register is used in the text of an input file (as opposed to
part of an expression), it is textually replaced (or interpolated)
@@ -3887,19 +5417,19 @@ thousand and Roman numeral ten thousand (Unicode code points
If @var{ident} doesn't exist, it is created.
@cindex read-only register, changing format
-@cindex changing format, read-only register
+@cindex changing format, and read-only registers
Changing the output format of a read-only register causes an error. It
is necessary to first copy the register's value to a writeable register,
then apply the @code{af} request to this other register.
@endDefreq
-@cindex format of register
-@cindex register, format
-@Defesc {\\g, , i, }
-@Defescx {\\g, @lparen{}, id, }
-@Defescx {\\g, @lbrack{}, ident, @rbrack{}}
+@DefescList {\\g, , i, }
+@DefescItem {\\g, @lparen{}, id, }
+@DefescListEnd {\\g, @lbrack{}, ident, @rbrack{}}
+@cindex format of register (@code{\g})
+@cindex register, format (@code{\g})
Return the current format of the specified register @var{ident}
-(one-character name @var{i}, two-character name @var{id}). For
+(one-character name@w{ }@var{i}, two-character name @var{id}). For
example, @samp{\ga} after the previous example would produce the
string @samp{000}. If the register hasn't been defined yet, nothing
is returned.
@@ -3915,42 +5445,73 @@ is returned.
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}.
+appendix@w{ }@ref{Register Index}.
@table @code
+@item .F
+@cindex current input file name register (@code{.F})
+@cindex input file name, current, register (@code{.F})
+@vindex .F
+This string-valued register returns the current input file name.
+
@item .H
-@cindex horizontal resolution register
-@cindex resolution, horizontal, register
+@cindex horizontal resolution register (@code{.H})
+@cindex resolution, horizontal, register (@code{.H})
@vindex .H
Horizontal resolution in basic units.
@item .V
-@cindex vertical resolution register
-@cindex resolution, vertical, register
+@cindex vertical resolution register (@code{.V})
+@cindex resolution, vertical, register (@code{.V})
@vindex .V
Vertical resolution in basic units.
+@item seconds
+@cindex seconds, current time (@code{seconds})
+@cindex time, current, seconds (@code{seconds})
+@cindex current time, seconds (@code{seconds})
+@vindex seconds
+The number of seconds after the minute, normally in the range@w{ }0
+to@w{ }59, but can be up to@w{ }61 to allow for leap seconds. Initialized
+at start-up of @code{gtroff}.
+
+@item minutes
+@cindex minutes, current time (@code{minutes})
+@cindex time, current, minutes (@code{minutes})
+@cindex current time, minutes (@code{minutes})
+@vindex minutes
+The number of minutes after the hour, in the range@w{ }0 to@w{ }59.
+Initialized at start-up of @code{gtroff}.
+
+@item hours
+@cindex hours, current time (@code{hours})
+@cindex time, current, hours (@code{hours})
+@cindex current time, hours (@code{hours})
+@vindex hours
+The number of hours past midnight, in the range@w{ }0 to@w{ }23.
+Initialized at start-up of @code{gtroff}.
+
@item dw
-@cindex day of the week register
-@cindex date, day of the week register
+@cindex day of the week register (@code{dw})
+@cindex date, day of the week register (@code{dw})
@vindex dw
Day of the week (1-7).
@item dy
-@cindex day of the month register
-@cindex date, day of the month register
+@cindex day of the month register (@code{dy})
+@cindex date, day of the month register (@code{dy})
@vindex dy
Day of the month (1-31).
@item mo
-@cindex month of the year register
-@cindex date, month of the year register
+@cindex month of the year register (@code{mo})
+@cindex date, month of the year register (@code{mo})
@vindex mo
Current month (1-12).
@item year
-@cindex date, year register
-@cindex year, current, register
+@cindex date, year register (@code{year}, @code{yr})
+@cindex year, current, register (@code{year}, @code{yr})
@vindex year
The current year.
@@ -3959,8 +5520,9 @@ The current year.
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:
+year. That claim has never been true of either @acronym{AT&T}
+@code{troff} or GNU @code{troff}. Old @code{troff} input that looks
+like this:
@Example
'\" The following line stopped working after 1999
@@ -3986,17 +5548,16 @@ This document was formatted in \n(y4.
@vindex .c
@itemx c.
@vindex c.
-@cindex input line number register
-@cindex line number, input, register
+@cindex input line number register (@code{.c}, @code{c.})
+@cindex line number, input, register (@code{.c}, @code{c.})
The current @emph{input} line number. Register @samp{.c} is read-only,
whereas @samp{c.} (a @code{gtroff} extension) is writable also,
affecting both @samp{.c} and @samp{c.}.
@item ln
@vindex ln
-@rqindex nm
-@cindex output line number register
-@cindex line number, output, register
+@cindex output line number register (@code{ln})
+@cindex line number, output, register (@code{ln})
The current @emph{output} line number after a call to the @code{nm}
request to activate line numbering.
@@ -4004,33 +5565,39 @@ request to activate line numbering.
@item .x
@vindex .x
-@cindex major version number register
-@cindex version number, major, register
+@cindex major version number register (@code{.x})
+@cindex version number, major, register (@code{.x})
The major version number. For example, if the version number is@w{
}1.03 then @code{.x} contains@w{ }@samp{1}.
@item .y
@vindex .y
-@cindex minor version number register
-@cindex version number, minor, register
+@cindex minor version number register (@code{.y})
+@cindex version number, minor, register (@code{.y})
The minor version number. For example, if the version number is@w{
}1.03 then @code{.y} contains@w{ }@samp{03}.
@item .Y
@vindex .Y
-@cindex revision number register
+@cindex revision number register (@code{.Y})
The revision number of @code{groff}.
+@item $$
+@vindex $$
+@cindex process ID of @code{gtroff} register (@code{$$})
+@cindex @code{gtroff}, process ID register (@code{$$})
+The process ID of @code{gtroff}.
+
@item .g
@vindex .g
-@cindex @code{gtroff} identification register
-@cindex GNU-specific register
+@cindex @code{gtroff}, identification register (@code{.g})
+@cindex GNU-specific register (@code{.g})
Always@w{ }1. Macros should use this to determine whether they are
running under GNU @code{troff}.
@item .A
@vindex .A
-@cindex @acronym{ASCII} approximation output register
+@cindex @acronym{ASCII} approximation output register (@code{.A})
If the command line option @option{-a} is used to produce an
@acronym{ASCII} approximation of the output, this is set to@w{ }1, zero
otherwise. @xref{Groff Options}.
@@ -4049,7 +5616,7 @@ number register @code{.T} is set to@w{ }1, and zero otherwise.
@xref{Groff Options}.
@stindex .T
-@cindex output device register
+@cindex output device name string register (@code{.T})
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}).
@@ -4068,17 +5635,17 @@ example, @samp{latin1} or @samp{ps}).
@cindex break
@cindex line break
-@rqindex bp
-@rqindex ce
-@rqindex cf
-@rqindex fi
-@rqindex fl
-@rqindex in
-@rqindex nf
-@rqindex rj
-@rqindex sp
-@rqindex ti
-@rqindex trf
+@cindex @code{bp} request, causing implicit linebreak
+@cindex @code{ce} request, causing implicit linebreak
+@cindex @code{cf} request, causing implicit linebreak
+@cindex @code{fi} request, causing implicit linebreak
+@cindex @code{fl} request, causing implicit linebreak
+@cindex @code{in} request, causing implicit linebreak
+@cindex @code{nf} request, causing implicit linebreak
+@cindex @code{rj} request, causing implicit linebreak
+@cindex @code{sp} request, causing implicit linebreak
+@cindex @code{ti} request, causing implicit linebreak
+@cindex @code{trf} request, causing implicit linebreak
Various ways of causing @dfn{breaks} were given in @ref{Implicit Line
Breaks}. The @code{br} request likewise causes a break. Several
other requests also cause breaks, but implicitly. These are
@@ -4104,21 +5671,23 @@ Initially, @code{gtroff} fills and adjusts text to both margins.
Filling can be disabled via the @code{nf} request and re-enabled with
the @code{fi} request.
-@cindex fill mode
-@cindex mode, fill
-@Defreq {fi, }
-@Defregx {.u}
+@DefreqList {fi, }
+@DefregListEnd {.u}
+@cindex fill mode (@code{fi})
+@cindex mode, fill (@code{fi})
Activate fill mode (which is the default). This request implicitly
enables adjusting; it also inserts a break in the text currently being
filled. The read-only number register @code{.u} is set to@w{ }1.
The fill mode status is associated with the current environment
(@pxref{Environments}).
+
+See @ref{Line Control}, for interaction with the @code{\c} escape.
@endDefreq
-@cindex no-fill mode
-@cindex mode, no-fill
@Defreq {nf, }
+@cindex no-fill mode (@code{nf})
+@cindex mode, no-fill (@code{nf})
Activate no-fill mode. Input lines are output as-is, retaining line
breaks and ignoring the current line length. This command implicitly
disables adjusting; it also causes a break. The number register
@@ -4126,10 +5695,12 @@ disables adjusting; it also causes a break. The number register
The fill mode status is associated with the current environment
(@pxref{Environments}).
+
+See @ref{Line Control}, for interaction with the @code{\c} escape.
@endDefreq
-@Defreq {ad, [@Var{mode}]}
-@Defregx {.j}
+@DefreqList {ad, [@Var{mode}]}
+@DefregListEnd {.j}
Set adjusting mode.
Activation and deactivation of adjusting is done implicitly with
@@ -4149,7 +5720,7 @@ Adjust text to the right margin, producing ragged-left text.
@item c
@cindex centered text
-@rqindex ce
+@cindex @code{ce} request, difference to @samp{.ad@w{ }c}
Center filled text. This is different to the @code{ce} request which
only centers text without filling.
@@ -4174,7 +5745,7 @@ text
text
@endExample
-@cindex current adjustment mode register
+@cindex adjustment mode register (@code{.j})
The current adjustment mode is available in the read-only number
register @code{.j}; it can be stored and subsequently used to set
adjustment.
@@ -4192,10 +5763,11 @@ The adjustment mode status is associated with the current environment
(@pxref{Environments}).
@endDefreq
-@Defesc {\\p, , , }
+@DefreqList {brp, }
+@DefescListEnd {\\p, , , }
Adjust the current line and cause a break.
-In most cases this produces very ugly results, since @code{gtroff}
+In most cases this produces very ugly results since @code{gtroff}
doesn't have a sophisticated paragraph building algorithm (as @TeX{}
have, for example); instead, @code{gtroff} fills and adjusts a paragraph
line by line:
@@ -4214,17 +5786,17 @@ is formatted as
uninteresting sentence.
This is an uninteresting sentence.
@endExample
-@endDefesc
+@endDefreq
-@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
-@Defreq {ss, word_space_size [@Var{sentence_space_size}]}
-@Defregx {.ss}
-@Defregx {.sss}
+@DefreqList {ss, word_space_size [@Var{sentence_space_size}]}
+@DefregItem {.ss}
+@DefregListEnd {.sss}
+@cindex word space size register (@code{.ss})
+@cindex size of word space register (@code{.ss})
+@cindex space between words register (@code{.ss})
+@cindex sentence space size register (@code{.sss})
+@cindex size of sentence space register (@code{.sss})
+@cindex space between sentences register (@code{.sss})
Change the 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
@@ -4252,22 +5824,22 @@ values of the parameters set by the first and second arguments of the
The word space and sentence space values are associated with the current
environment (@pxref{Environments}).
-Contrary to traditional Unix @code{troff}, this request is @emph{not}
-ignored if a tty output device is used; the given values are then
-rounded down to a multiple of@w{ }12.
-
-@c XXX xref implementation differences
+Contrary to @acronym{AT&T} @code{troff}, this request is @emph{not}
+ignored if a TTY output device is used; the given values are then
+rounded down to a multiple of@w{ }12 (@pxref{Implementation Differences}).
The request is ignored if there is no parameter.
@endDefreq
-@cindex centering lines
-@cindex lines, centering
-@Defreq {ce, [@Var{nnn}]}
-@Defregx {.ce}
+@DefreqList {ce, [@Var{nnn}]}
+@DefregListEnd {.ce}
+@cindex centering lines (@code{ce})
+@cindex lines, centering (@code{ce})
Center text. While the @w{@samp{.ad c}} request also centers text,
it fills the text as well. @code{ce} does not fill the
-text it affects. This request causes a break.
+text it affects. This request causes a break. The number of lines
+still to be centered is associated with the current environment
+(@pxref{Environments}).
The following example demonstrates the differences.
Here the input:
@@ -4301,9 +5873,6 @@ With no arguments, @code{ce} centers the next line of text. @var{nnn}
specifies the number of lines to be centered. If the argument is zero
or negative, centering is disabled.
-@rqindex ll
-@rqindex in
-@rqindex 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.
@@ -4317,15 +5886,17 @@ The @code{.ce} read-only number register contains the number of lines
remaining to be centered, as set by the @code{ce} request.
@endDefreq
-@cindex justifying text
-@cindex text, justifying
-@cindex right-justifying
-@Defreq {rj, [@Var{nnn}]}
-@Defregx {.rj}
+@DefreqList {rj, [@Var{nnn}]}
+@DefregListEnd {.rj}
+@cindex justifying text (@code{rj})
+@cindex text, justifying (@code{rj})
+@cindex right-justifying (@code{rj})
Justify unfilled text to the right margin. Arguments are identical to
the @code{ce} request. The @code{.rj} read-only number register is
the number of lines to be right-justified as set by the @code{rj}
-request. This request causes a break.
+request. This request causes a break. The number of lines still to be
+right-justified is associated with the current environment
+(@pxref{Environments}).
@endDefreq
@@ -4339,8 +5910,8 @@ request. This request causes a break.
As discussed in @ref{Hyphenation}, @code{gtroff} hyphenates words.
There are a number of ways to influence hyphenation.
-@Defreq {hy, [@Var{mode}]}
-@Defregx {.hy}
+@DefreqList {hy, [@Var{mode}]}
+@DefregListEnd {.hy}
Enable hyphenation. The request has an optional numeric argument,
@var{mode}, to restrict hyphenation if necessary:
@@ -4363,7 +5934,7 @@ 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.
-@cindex hyphenation restrictions register
+@cindex hyphenation restrictions register (@code{.hy})
The current hyphenation restrictions can be found in the read-only
number register @samp{.hy}.
@@ -4380,15 +5951,14 @@ The hyphenation mode is associated with the current environment
(@pxref{Environments}).
@endDefreq
-@esindex \%
-@cindex explicit hyphens
-@cindex hyphen, explicit
-@cindex consecutive hyphenated lines
-@cindex lines, consecutive hyphenated
-@cindex hyphenated lines, consecutive
-@Defreq {hlm, [@Var{nnn}]}
-@Defregx {.hlm}
-@Defregx {.hlc}
+@DefreqList {hlm, [@Var{nnn}]}
+@DefregItem {.hlm}
+@DefregListEnd {.hlc}
+@cindex explicit hyphen (@code{\%})
+@cindex hyphen, explicit (@code{\%})
+@cindex consecutive hyphenated lines (@code{hlm})
+@cindex lines, consecutive hyphenated (@code{hlm})
+@cindex hyphenated lines, consecutive (@code{hlm})
Set the maximum number of consecutive hyphenated lines to @var{nnn}.
If this number is negative, there is no maximum. The default value
is@w{ }@minus{}1 if @var{nnn} is omitted. This value is associated
@@ -4429,11 +5999,18 @@ store such information; fortunately, with @code{gtroff}, this is no
longer a restriction.
@endDefreq
-@cindex hyphenation character
-@cindex character, hyphenation
-@cindex disabling hyphenation
-@cindex hyphenation, disabling
-@Defesc {\\%, , , }
+@DefescList {\\%, , , }
+@deffnx Escape @t{\:}
+@ifnotinfo
+@esindex \:
+@end ifnotinfo
+@ifinfo
+@esindex @r{<colon>}
+@end ifinfo
+@cindex hyphenation character (@code{\%})
+@cindex character, hyphenation (@code{\%})
+@cindex disabling hyphenation (@code{\%})
+@cindex hyphenation, disabling (@code{\%})
To tell @code{gtroff} how to hyphenate words on the fly, use the
@code{\%} escape, also known as the @dfn{hyphenation character}.
Preceding a word with this character prevents it from being
@@ -4442,6 +6019,22 @@ the word may be hyphenated at that point. Note that this mechanism
only affects that one occurrence of the word; to change the
hyphenation of a word for the entire document, use the @code{hw}
request.
+
+The @code{\:} escape inserts a zero-width break point
+(that is, the word breaks but without adding a hyphen).
+
+@Example
+... check the /var/log/\:httpd/\:access_log file ...
+@endExample
+
+@cindex @code{\X}, followed by @code{\%}
+@cindex @code{\Y}, followed by @code{\%}
+@cindex @code{\%}, following @code{\X} or @code{\Y}
+Note that @code{\X} and @code{\Y} start a word, that is, the @code{\%}
+escape in (say) @w{@samp{ \X'...'\%foobar}} and
+@w{@samp{ \Y'...'\%foobar}} no longer prevents hyphenation but inserts
+a hyphenation point at the beginning of @samp{foobar}; most likely
+this isn't what you want to do.
@endDefesc
@Defreq {hc, [@Var{char}]}
@@ -4454,23 +6047,66 @@ The hyphenation character is associated with the current environment
(@pxref{Environments}).
@endDefreq
-@cindex hyphenation patterns
-@cindex patterns for hyphenation
-@Defreq {hpf, pattern_file}
+@DefreqList {hpf, pattern_file}
+@DefreqItem {hpfa, pattern_file}
+@DefreqListEnd {hpfcode, a b [c d @dots{}]}
+@cindex hyphenation patterns (@code{hpf})
+@cindex patterns for hyphenation (@code{hpf})
Read in a file of hyphenation patterns. This file is searched for in
the same way as @file{@var{name}.tmac} (or @file{tmac.@var{name}}) is
searched for if the @option{-m@var{name}} option is specified.
-It should have the same format as 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.
+It should have the same format as (simple) @TeX{} patterns files.
+More specifically, the following scanning rules are implemented.
+
+@itemize @bullet
+@item
+A percent sign starts a comment (up to the end of the line)
+even if preceded by a backslash.
+
+@item
+No support for `digraphs' like @code{\$}.
+
+@item
+@code{^^@var{xx}} (@var{x} is 0-9 or a-f) and @code{^^@var{x}} (character
+code of @var{x} in the range 0-127) are recognized; other use of @code{^}
+causes an error.
+
+@item
+No macro expansion.
+
+@item
+@code{hpf} checks for the expression @code{\patterns@{@dots{}@}}
+(possibly with whitespace before and after the braces).
+Everything between the braces is taken as hyphenation patterns.
+Consequently, @code{@{} and @code{@}} are not allowed in patterns.
+
+@item
+Similarly, @code{\hyphenation@{@dots{}@}} gives a list of hyphenation
+exceptions.
+
+@item
+@code{\endinput} is recognized also.
+
+@item
+For backwards compatibility, if @code{\patterns} is missing,
+the whole file is treated as a list of hyphenation patterns
+(only recognizing the @code{%} character as the start of a comment).
+@end itemize
If no @code{hpf} request is specified (either in the document or in a
macro package), @code{gtroff} won't hyphenate at all.
-@rqindex hla
+The @code{hpfa} request appends a file of patterns to the current list.
+
+The @code{hpfcode} request defines mapping values for character codes in
+hyphenation patterns. @code{hpf} or @code{hpfa} then apply the mapping
+(after reading the patterns) before replacing or appending them to
+the current list of patterns. Its arguments are pairs of character codes
+-- integers from 0 to@w{ }255. The request maps character code@w{ }@var{a}
+to code@w{ }@var{b}, code@w{ }@var{c} to code@w{ }@var{d}, and so on. You
+can use character codes which would be invalid otherwise.
+
@pindex troffrc
@pindex troffrc-end
@pindex hyphen.us
@@ -4480,76 +6116,81 @@ 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}).
+A second call to @code{hpf} (for the same language) will replace the
+hyphenation patterns with the new ones.
+
Invoking @code{hpf} causes an error if there is no current hyphenation
language.
@endDefreq
-@cindex hyphenation code
-@cindex code, hyphenation
@Defreq {hcode, c1 code1 c2 code2 @dots{}}
+@cindex hyphenation code (@code{hcode})
+@cindex code, hyphenation (@code{hcode})
Set the hyphenation code of character @var{c1} to @var{code1}, that of
@var{c2} to @var{code2}, etc. A hyphenation code must be a single
input character (not a special character) other than a digit or a
space. Initially each lower-case letter (@samp{a}-@samp{z}) has its
-hyphenation set to itself, and each upper-case letter
+hyphenation code 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 is ignored if it has no parameter.
@endDefreq
-@cindex hyphenation margin
-@cindex margin for hyphenation
-@rqindex ad
-@Defreq {hym, [@Var{length}]}
-@Defregx {.hym}
+@DefreqList {hym, [@Var{length}]}
+@DefregListEnd {.hym}
+@cindex hyphenation margin (@code{hym})
+@cindex margin for hyphenation (@code{hym})
+@cindex @code{ad} request, and hyphenation margin
Set the (right) hyphenation margin to @var{length}. If the current
-adjustment mode is not @samp{b} or@w{ }@samp{n}, the line is not
+adjustment mode is not @samp{b} or @samp{n}, the line is not
hyphenated if it is shorter than @var{length}. Without an argument,
the hyphenation margin is reset to its default value, which is@w{ }0.
-The default scaling indicator for this request is@w{ }@code{m}. The
+The default scaling indicator for this request is @samp{m}. The
hyphenation margin is associated with the current environment
(@pxref{Environments}).
A negative argument resets the hyphenation margin to zero, emitting
a warning of type @samp{range}.
-@cindex current hyphenation margin register
+@cindex hyphenation margin register (@code{.hym})
The current hyphenation margin is available in the @code{.hym} read-only
number register.
@endDefreq
-@cindex hyphenation space
-@rqindex ad
-@Defreq {hys, [@Var{hyphenation_space}]}
-@Defregx {.hys}
+@DefreqList {hys, [@Var{hyphenation_space}]}
+@DefregListEnd {.hys}
+@cindex hyphenation space (@code{hys})
+@cindex @code{ad} request, and hyphenation space
Set the hyphenation space to @var{hyphenation_space}. If the current
-adjustment mode is @samp{b} or@w{ }@samp{n}, don't hyphenate the line
+adjustment mode is @samp{b} or @samp{n}, don't hyphenate the line
if it can be justified by adding no more than @var{hyphenation_space}
extra space to each word space. Without argument, the hyphenation
space is set to its default value, which is@w{ }0. The default
-scaling indicator for this request is@w{ }@code{m}. The hyphenation
+scaling indicator for this request is @samp{m}. The hyphenation
space is associated with the current environment
(@pxref{Environments}).
A negative argument resets the hyphenation space to zero, emitting a
warning of type @samp{range}.
-@cindex current hyphenation space register
+@cindex hyphenation space register (@code{.hys})
The current hyphenation space is available in the @code{.hys} read-only
number register.
@endDefreq
-@cindex soft hyphen character
-@cindex character, soft hyphen
-@glindex hy
-@rqindex char
-@rqindex tr
-@Defreq {shc, [@Var{char}]}
-Set the soft hyphen character to @var{char}. If the argument is
-omitted, the soft hyphen character is set to the default character
-@code{\(hy} (this is the start-up value of @code{gtroff} also). The
-soft hyphen character is the character that is inserted when a word is
+@Defreq {shc, [@Var{glyph}]}
+@cindex soft hyphen character, setting (@code{shc})
+@cindex character, soft hyphen, setting (@code{shc})
+@cindex glyph, soft hyphen (@code{hy})
+@cindex soft hyphen glyph (@code{hy})
+@cindex @code{char} request, and soft hyphen character
+@cindex @code{tr} request, and soft hyphen character
+Set the @dfn{soft hyphen character} to @var{glyph}.@footnote{@dfn{Soft
+hyphen character} is a misnomer since it is an output glyph.} If the
+argument is omitted, the soft hyphen character is set to the default
+glyph @code{\(hy} (this is the start-up value of @code{gtroff} also).
+The soft hyphen character is the glyph that is inserted when a word is
hyphenated at a line break. If the soft hyphen character does not
exist in the font of the character immediately preceding a potential
break point, then the line is not broken at that point. Neither
@@ -4558,21 +6199,21 @@ definitions (specified with the @code{char} request) nor translations
soft hyphen character.
@endDefreq
-@rqindex hpf
-@rqindex hw
+@DefreqList {hla, language}
+@DefregListEnd {.hla}
+@cindex @code{hpf} request, and hyphenation language
+@cindex @code{hw} request, and hyphenation language
@pindex troffrc
@pindex troffrc-end
-@Defreq {hla, language}
-@Defregx {.hla}
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
+hyphenation patterns specified with the @code{hpf} and @code{hpfa}
+requests are both associated with the current hyphenation language.
+The @code{hla} request is usually invoked by the @file{troffrc} or the
@file{troffrc-end} files; @file{troffrc} sets the default language to
@samp{us}.
-@cindex current hyphenation language register
+@cindex hyphenation language register (@code{.hla})
The current hyphenation language is available as a string in the
read-only number register @samp{.hla}.
@@ -4596,13 +6237,12 @@ Space downwards @var{distance}. With no argument it advances 1@w{
}line. A negative argument causes @code{gtroff} to move up the page
the specified distance. If the argument is preceded by a @samp{|}
then @code{gtroff} moves that distance from the top of the page. This
-request causes a line break. The default scaling indicator is@w{
-}@code{v}.
+request causes a line break. The default scaling indicator is @samp{v}.
@endDefreq
-@cindex double-spacing
-@Defreq {ls, [@Var{nnn}]}
-@Defregx {.L}
+@DefreqList {ls, [@Var{nnn}]}
+@DefregListEnd {.L}
+@cindex double-spacing (@code{ls})
Output @w{@var{nnn}@minus{}1} blank lines after each line of text.
With no argument, @code{gtroff} uses the previous value before the
last @code{ls} call.
@@ -4610,70 +6250,86 @@ last @code{ls} call.
@Example
.ls 2 \" This causes double-spaced output
.ls 3 \" This causes triple-spaced output
-.ls \" Again double spaced
+.ls \" Again double-spaced
@endExample
The line spacing is associated with the current environment
(@pxref{Environments}).
-@cindex current line spacing register
+@cindex line spacing register (@code{.L})
The read-only number register @code{.L} contains the current line
spacing setting.
@endDefreq
-@c XXX document \n[nl]
-@c XXX document \n[nl] == -1 if vertical position is zero
+@xref{Changing Type Sizes}, for the requests @code{vs} and @code{pvs}
+as alternatives to @code{ls}.
-@Defesc {\\x, ', spacing, '}
-@Defregx {.a}
+@DefescList {\\x, ', spacing, '}
+@DefregListEnd {.a}
Sometimes, extra vertical spacing is only needed occasionally, e.g.@:
to allow space for a tall construct (like an equation). The @code{\x}
escape does this. The escape is given a numerical argument, usually
enclosed in quotes (like @samp{\x'3p'}); the default scaling indicator
-is@w{ }@code{v}. If this number is positive extra vertical space is
+is @samp{v}. If this number is positive extra vertical space is
inserted below the current line. A negative number adds space above.
If this escape is used multiple times on the same line, the maximum of
the values is used.
@xref{Escapes}, for details on parameter delimiting characters.
-@cindex extra vertical line space register
+@cindex extra post-vertical line space register (@code{.a})
The @code{.a} read-only number register contains the most recent
(nonnegative) extra vertical line space.
-@c XXX
-@ignore
+Using @code{\x} can be necessary in combination with the @code{\b}
+escape, as the following example shows.
+
@Example
-... example of inline equation ...
+This is a test with the \[rs]b escape.
+.br
+This is a test with the \[rs]b escape.
+.br
+This is a test with \b'xyz'\x'-1m'\x'1m'.
+.br
+This is a test with the \[rs]b escape.
+.br
+This is a test with the \[rs]b escape.
+@endExample
+
+@noindent
+produces
+
+@Example
+This is a test with the \b escape.
+This is a test with the \b escape.
+ x
+This is a test with y.
+ z
+This is a test with the \b escape.
+This is a test with the \b escape.
@endExample
-@end ignore
@endDefesc
-@rqindex sp
-@cindex no-space mode
-@cindex mode, no-space
+@DefreqList {ns, }
+@DefreqItem {rs, }
+@DefregListEnd {.ns}
+@cindex @code{sp} request, and no-space mode
+@cindex no-space mode (@code{ns})
+@cindex mode, no-space (@code{ns})
@cindex blank lines, disabling
@cindex lines, blank, disabling
-@Defreq {ns, }
-@Defregx {.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 ends when actual text is output or the @code{rs} request is
-encountered. The read-only number register @code{.ns} is set to@w{ }1.
-
-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).
-
-@c XXX xref
-@endDefreq
-
-@Defreq {rs, }
-Disable no-space mode.
+encountered which ends no-space mode. The read-only number register
+@code{.ns} is set to@w{ }1 as long as no-space mode is active.
-@c XXX xref
+This request is useful for macros that conditionally
+insert vertical space before the text starts
+(for example, a paragraph macro could insert some space
+except when it is the first paragraph after a section header).
@endDefreq
@@ -4681,8 +6337,8 @@ Disable no-space mode.
@node Tabs and Fields, Character Translations, Manipulating Spacing, gtroff Reference
@section Tabs and Fields
-@cindex tabs and fields
-@cindex fields and tabs
+@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{
@@ -4690,12 +6346,14 @@ A tab character (@acronym{ASCII} char@w{ }9, @acronym{EBCDIC} char@w{
like it did on a typewriter).
@Defesc {\\t, , , }
+@cindex tab character, non-interpreted (@code{\t})
+@cindex character, tab, non-interpreted (@code{\t})
This escape is a non-interpreted tab character. In copy mode
(@pxref{Copy-in Mode}), @code{\t} is the same as a real tab character.
@endDefesc
-@Defreq {ta, [@Var{n1} @Var{n2} @dots{} @Var{nn} @t{T} @Var{r1} @Var{r2} @dots{} @Var{rn}]}
-@Defregx {.tabs}
+@DefreqList {ta, [@Var{n1} @Var{n2} @dots{} @Var{nn} @t{T} @Var{r1} @Var{r2} @dots{} @Var{rn}]}
+@DefregListEnd {.tabs}
Change tab stop positions. This request takes a series of tab
specifiers as arguments (optionally divided into two groups with the
letter @samp{T}) which indicate where each tab stop is to be
@@ -4743,7 +6401,7 @@ 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
+.ta 1i 2iC 3iR
@endExample
Some notes:
@@ -4821,15 +6479,13 @@ Tab stops are associated with the current environment
Calling @code{ta} without an argument removes all tab stops.
@item
-@cindex tab stops, for tty output devices
-The start-up value of @code{gtroff} is @w{@samp{T 0.5i}}. This value
-is used even for tty output devices (contrary to @acronym{UNIX}
-@code{nroff} which has tab stops preset every 0.8@dmn{i}).
-
-@c XXX xref implementation differences
+@cindex tab stops, for TTY output devices
+The start-up value of @code{gtroff} is @w{@samp{T 0.5i}} in troff mode
+and @w{@samp{T 0.8i}} in nroff mode (the latter is done with an
+explicit call to the @code{ta} request in the file @file{tty.tmac}.
@end itemize
-@cindex current tab settings register
+@cindex tab settings register (@code{.tabs})
The read-only number register @code{.tabs} contains a string
representation of the current tab settings suitable for use as an
argument to the @code{ta} request.
@@ -4839,16 +6495,65 @@ argument to the @code{ta} request.
\*[tab-string]
@result{} T120u
@endExample
+
+@cindex @code{.S} register, Plan@w{ }9 alias for @code{.tabs}
+@cindex @code{.tabs} register, Plan@w{ }9 alias (@code{.S})
+The @code{troff} version of the Plan@w{ }9 operating system uses
+register @code{.S} for the same purpose.
@endDefreq
-@cindex tab repetition character
-@cindex character, tab repetition
-@Defreq {tc, [@Var{fill-char}]}
+@Defreq {tc, [@Var{fill-glyph}]}
+@cindex tab repetition character (@code{tc})
+@cindex character, tab repetition (@code{tc})
+@cindex glyph, tab repetition (@code{tc})
Normally @code{gtroff} fills the space to the next tab stop with
whitespace. This can be changed with the @code{tc} request. With no
argument @code{gtroff} reverts to using whitespace, which is the
-default. The value of this @dfn{tab repetition} character is
-associated with the current environment (@pxref{Environments}).
+default. The value of this @dfn{tab repetition character} is
+associated with the current environment
+(@pxref{Environments}).@footnote{@dfn{Tab repetition character} is a
+misnomer since it is an output glyph.}
+@endDefreq
+
+@DefreqList {linetabs, n}
+@DefregListEnd {.linetabs}
+@cindex tab, line-tabs mode
+@cindex line-tabs mode
+@cindex mode, line-tabs
+If @var{n} is missing or not zero, enable @dfn{line-tabs} mode,
+or disable it otherwise (the default).
+In line-tabs mode, @code{gtroff} computes tab distances
+relative to the (current) output line instead of the input line.
+
+For example, the following code:
+
+@Example
+.ds x a\t\c
+.ds y b\t\c
+.ds z c
+.ta 1i 3i
+\*x
+\*y
+\*z
+@endExample
+
+@noindent
+in normal mode, results in the output
+
+@Example
+a b c
+@endExample
+
+@noindent
+in line-tabs mode, the same code outputs
+
+@Example
+a b c
+@endExample
+
+Line-tabs mode is associated with the current environment.
+The read-only register @code{.linetabs} is set to@w{ }1 if in line-tabs
+mode, and 0 in normal mode.
@endDefreq
@menu
@@ -4863,7 +6568,7 @@ associated with the current environment (@pxref{Environments}).
@cindex leaders
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
+particular tab stop with a given glyph (for example dots in a table
of contents), but also normal tab stops on the rest of the line. For
this @code{gtroff} provides an alternate tab mechanism, called
@dfn{leaders} which does just that.
@@ -4871,23 +6576,27 @@ this @code{gtroff} provides an alternate tab mechanism, called
@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
+for this movement, the fill glyph defaults to a period character and
not to space.
@Defesc {\\a, , , }
+@cindex leader character, non-interpreted (@code{\a})
+@cindex character, leader, non-interpreted (@code{\a})
This escape is a non-interpreted leader character. In copy mode
(@pxref{Copy-in Mode}), @code{\a} is the same as a real leader
character.
@endDefesc
-@cindex leader repetition character
-@cindex character, leader repetition
-@Defreq {lc, [@Var{fill-char}]}
-Declare the leader character. Without an argument, leaders act the
-same as tabs (i.e., using whitespace for filling). @code{gtroff}'s
-start-up value is @samp{.}. The value of this @dfn{leader repetition}
-character is associated with the current environment
-(@pxref{Environments}).
+@Defreq {lc, [@Var{fill-glyph}]}
+@cindex leader repetition character (@code{lc})
+@cindex character, leader repetition (@code{lc})
+@cindex glyph, leader repetition (@code{lc})
+Declare the @dfn{leader repetition character}.@footnote{@dfn{Leader
+repetition character} is a misnomer since it is an output glyph.}
+Without an argument, leaders act the same as tabs (i.e., using
+whitespace for filling). @code{gtroff}'s start-up value is a dot
+(@samp{.}). The value of the leader repetition character is
+associated with the current environment (@pxref{Environments}).
@endDefreq
@cindex table of contents
@@ -4917,12 +6626,12 @@ This produces
@subsection Fields
@cindex fields
-@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
+@cindex field delimiting character (@code{fc})
+@cindex delimiting character, for fields (@code{fc})
+@cindex character, field delimiting (@code{fc})
+@cindex field padding character (@code{fc})
+@cindex padding character, for fields (@code{fc})
+@cindex character, field padding (@code{fc})
@dfn{Fields} are a more general way of laying out tabular data. A field
is defined as the data between a pair of @dfn{delimiting characters}.
It contains substrings which are separated by @dfn{padding characters}.
@@ -4939,8 +6648,8 @@ Define a delimiting and a padding character for fields. If the latter
is missing, the padding character defaults to a space character. If
there is no argument at all, the field mechanism is disabled (which is
the default). Note that contrary to e.g.@: the tab repetition
-character, delimiting and padding characters are not associated to the
-current environment (@pxref{Environments}).
+character, delimiting and padding characters are @emph{not} associated
+to the current environment (@pxref{Environments}).
Example:
@@ -4969,33 +6678,32 @@ foo bar smurf
@cindex character translations
@cindex translations of characters
-@rqindex .
-@rqindex '
-@cindex control character
-@cindex character, control
-@cindex no-break control character
-@cindex character, no-break control
-@cindex control character, no-break
+@cindex control character, changing (@code{cc})
+@cindex character, control, changing (@code{cc})
+@cindex no-break control character, changing (@code{c2})
+@cindex character, no-break control, changing (@code{c2})
+@cindex control character, no-break, changing (@code{c2})
The control character (@samp{.}) and the no-break control character
(@samp{'}) can be changed with the @code{cc} and @code{c2} requests,
respectively.
@Defreq {cc, [@Var{c}]}
-Set the control character to @var{c}. With no argument the default
+Set the control character to@w{ }@var{c}. With no argument the default
control character @samp{.} is restored. The value of the control
character is associated with the current environment
(@pxref{Environments}).
@endDefreq
@Defreq {c2, [@Var{c}]}
-Set the no-break control character to @var{c}. With no argument the
+Set the no-break control character to@w{ }@var{c}. With no argument the
default control character @samp{'} is restored. The value of the
no-break control character is associated with the current environment
(@pxref{Environments}).
@endDefreq
-@esindex \\
@Defreq {eo, }
+@cindex disabling @code{\} (@code{eo})
+@cindex @code{\}, disabling (@code{eo})
Disable the escape mechanism completely. After executing this
request, the backslash character @samp{\} no longer starts an escape
sequence.
@@ -5021,92 +6729,191 @@ necessary then to double the escape character. Here an example:
@endExample
@endDefreq
-@cindex escape character
-@cindex character, escape
@Defreq {ec, [@Var{c}]}
-Set the escape character to @var{c}. With no argument the default
+@cindex escape character, changing (@code{ec})
+@cindex character, escape, changing (@code{ec})
+Set the escape character to@w{ }@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 is executed literally.
+macro packages since @code{gtroff} has no mechanism to `intern' macros,
+i.e., to convert a macro definition into an internal form which is
+independent of its representation (@TeX{} has this mechanism).
+If a macro is called, it is executed literally.
+@endDefreq
+
+@DefreqList {ecs, }
+@DefreqListEnd {ecr, }
+The @code{ecs} request saves the current escape character
+in an internal register.
+Use this request in combination with the @code{ec} request to
+temporarily change the escape character.
+
+The @code{ecr} request restores the escape character
+saved with @code{ecs}.
+Without a previous call to @code{ecs}, this request
+sets the escape character to @code{\}.
@endDefreq
-@Defesc {\\e, , , }
-This escape sequence prints the current escape character (which is the
-backslash character @samp{\} by default).
+@DefescList {\\\\, , , }
+@DefescItem {\\e, , , }
+@DefescListEnd {\\E, , , }
+Print the current escape character (which is the backslash character
+@samp{\} by default).
+
+@code{\\} is a `delayed' backslash; more precisely, it is the default
+escape character followed by a backslash, which no longer has special
+meaning due to the leading escape character. It is @emph{not} an escape
+sequence in the usual sense! In any unknown escape sequence
+@code{\@var{X}} the escape character is ignored and @var{X} is printed.
+But if @var{X} is equal to the current escape character, no warning is
+emitted.
+
+As a consequence, only at top-level or in a diversion a backslash glyph is
+printed; in copy-in mode, it expands to a single backslash which then
+combines with the following character to an escape sequence.
+
+The @code{\E} escape differs from @code{\e} by printing an escape
+character that is not interpreted in copy mode.
+Use this to define strings with escapes that work
+when used in copy mode (for example, as a macro argument).
+The following example defines strings to begin and end
+a superscript:
+
+@Example
+.ds @{ \v'-.3m'\s'\Es[.s]*60/100'
+.ds @} \s0\v'.3m'
+@endExample
+
+Another example to demonstrate the differences between the various escape
+sequences, using a strange escape character, @samp{-}.
+
+@Example
+.ec -
+.de xxx
+--A'123'
+..
+.xxx
+ @result{} -A'foo'
+@endExample
+
+@noindent
+The result is surprising for most users, expecting @samp{1} since
+@samp{foo} is a valid identifier. What has happened? As mentioned
+above, the leading escape character makes the following character
+ordinary. Written with the default escape character the sequence
+@samp{--} becomes @samp{\-} -- this is the minus sign.
+
+If the escape character followed by itself is a valid escape sequence,
+only @code{\E} yields the expected result:
+
+@Example
+.ec -
+.de xxx
+-EA'123'
+..
+.xxx
+ @result{} 1
+@endExample
@endDefesc
-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.
+@Defesc {\\., , , }
+Similar to @code{\\}, the sequence @code{\.} isn't a real escape sequence.
+As before, a warning message is suppressed if the escape character is
+followed by a dot, and the dot itself is printed.
-@Defreq {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 is
-translated to the space character.
+@Example
+.de foo
+. nop foo
+.
+. de bar
+. nop bar
+\\..
+.
+..
+.foo
+.bar
+ @result{} foo bar
+@endExample
+
+@noindent
+The first backslash is consumed while the macro is read, and the second
+is swallowed while exexuting macro @code{foo}.
+@endDefesc
+
+A @dfn{translation} is a mapping of an input character to an output
+glyph. The mapping occurs at output time, i.e., the input character
+gets assigned the metric information of the mapped output character
+right before input tokens are converted to nodes (@pxref{Gtroff
+Internals}, for more on this process).
+
+@DefreqList {tr, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
+@DefreqListEnd {trin, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
+Translate character @var{a} to glyph@w{ }@var{b}, character @var{c} to
+glyph@w{ }@var{d}, etc. If there is an odd number of arguments, the
+last one is translated to an unstretchable space (@w{@samp{\ }}).
+
+The @code{trin} request is identical to @code{tr},
+but when you unformat a diversion with @code{asciify}
+it ignores the translation.
+@xref{Diversions}, for details about the @code{asciify} request.
Some notes:
@itemize @bullet
@item
-@esindex \(
-@esindex \[
-@esindex \'
-@esindex \`
-@esindex \-
-@esindex \_
-@esindex \C
-@esindex \N
-@rqindex char
-@cindex special character
+@cindex @code{\(}, and translations
+@cindex @code{\[}, and translations
+@cindex @code{\'}, and translations
+@cindex @code{\`}, and translations
+@cindex @code{\-}, and translations
+@cindex @code{\_}, and translations
+@cindex @code{\C}, and translations
+@cindex @code{\N}, and translations
+@cindex @code{char} request, and translations
+@cindex special characters
@cindex character, special
-@cindex numbered character
-@cindex character, numbered
+@cindex numbered glyph (@code{\N})
+@cindex glyph, numbered (@code{\N})
Special characters (@code{\(@var{xx}}, @code{\[@var{xxx}]},
@code{\C'@var{xxx}'}, @code{\'}, @code{\`}, @code{\-}, @code{\_}),
-characters defined with the @code{char} request, and numbered characters
+glyphs defined with the @code{char} request, and numbered glyphs
(@code{\N'@var{xxx}'}) can be translated also.
@item
-@esindex \e
+@cindex @code{\e}, and translations
The @code{\e} escape can be translated also.
@item
-@esindex \%
-@esindex \~
+@cindex @code{\%}, and translations
+@cindex @code{\~}, and translations
Characters can be mapped onto the @code{\%} and @code{\~} escapes (but
-@code{\%} and @code{\~} can't be mapped onto another character).
+@code{\%} and @code{\~} can't be mapped onto another glyph).
@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
-@esindex \a
-@esindex \t
+@cindex backspace character, and translations
+@cindex character, backspace, and translations
+@cindex leader character, and translations
+@cindex character, leader, and translations
+@cindex newline character, and translations
+@cindex character, newline, and translations
+@cindex tab character, and translations
+@cindex character, tab, and translations
+@cindex @code{\a}, and translations
+@cindex @code{\t}, and translations
The following characters can't be translated: space (with one exception,
see below), backspace, newline, leader (and @code{\a}), tab (and
@code{\t}).
@item
-@rqindex shc
+@cindex @code{shc} request, and translations
Translations are not considered for finding the soft hyphen character
set with the @code{shc} request.
@item
-@esindex \&
-The character pair @samp{@var{c}\&} (this is an arbitrary character@w{
+@cindex @code{\&}, and translations
+The pair @samp{@var{c}\&} (this is an arbitrary character@w{
}@var{c} followed by the zero width space character) maps this
character to nothing.
@@ -5127,8 +6934,8 @@ foo bar
@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
+character/glyph pair as an argument of @code{tr}. Additionally, it is
+not possible to map the space character to any other glyph; requests
like @w{@samp{.tr aa x}} undo @w{@samp{.tr aa \&}} instead.
If justification is active, lines are justified in spite of the
@@ -5136,21 +6943,55 @@ If justification is active, lines are justified in spite of 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
+After an output glyph has been constructed (this happens at the
+moment immediately before the glyph is appended to an output
+glyph list, either by direct output, in a macro, diversion, or
string), it is no longer affected by @code{tr}.
-@c XXX xref
+@item
+Translating character to glyphs where one of them or both are
+undefined is possible also; @code{tr} does not check whether the
+entities in its argument do exist.
+
+@xref{Gtroff Internals}.
+
+@item
+@code{troff} no longer has a hard-coded dependency on @w{Latin-1};
+all @code{char@var{XXX}} entities have been removed from the font
+description files. This has a notable consequence which shows up in
+warnings like @code{can't find character with input code @var{XXX}}
+if the @code{tr} request isn't handled properly.
+
+Consider the following translation:
+
+@Example
+.tr @'e@'E
+@endExample
+
+@noindent
+This maps input character @code{@'e} onto glyph @code{@'E}, which is
+identical to glyph @code{char201}. But this glyph intentionally
+doesn't exist! Instead, @code{\[char201]} is treated as an input
+character entity and is by default mapped onto @code{\['E]}, and
+@code{gtroff} doesn't handle translations of translations.
+
+The right way to write the above translation is
+
+@Example
+.tr @'e\['E]
+@endExample
+
+@noindent
+With other words, the first argument of @code{tr} should be an input
+character or entity, and the second one a glyph entity.
@item
Without an argument, the @code{tr} request is ignored.
@end itemize
@endDefreq
-@esindex \!
-@cindex @code{\!}, and @code{trnt}
@Defreq {trnt, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
+@cindex @code{\!}, and @code{trnt}
@code{trnt} is the same as the @code{tr} request except that the
translations do not apply to text that is transparently throughput
into a diversion with @code{\!}. @xref{Diversions}, for more
@@ -5182,41 +7023,41 @@ instead of @code{tr} it prints @samp{a}.
@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
+the former for TTY output, the latter for everything else. With GNU
@code{troff}, both programs are merged into one executable, sending
-its output to a device driver (@code{grotty} for tty devices,
+its output to a device driver (@code{grotty} for TTY devices,
@code{grops} for @sc{PostScript}, etc.) which interprets the
intermediate output of @code{gtroff}. For @acronym{UNIX} @code{troff}
it makes sense to talk about @dfn{Nroff mode} and @dfn{Troff mode}
since the differences are hardcoded. For GNU @code{troff}, this
distinction is not appropriate because @code{gtroff} simply takes the
information given in the font files for a particular device without
-handling requests specially if a tty output device is used.
+handling requests specially if a TTY output device is used.
Usually, a macro package can be used with all output devices.
Nevertheless, it is sometimes necessary to make a distinction between
-tty and non-tty devices: @code{gtroff} provides two built-in
+TTY and non-TTY devices: @code{gtroff} provides two built-in
conditions @samp{n} and @samp{t} for the @code{if}, @code{ie}, and
@code{while} requests to decide whether @code{gtroff} shall behave
like @code{nroff} or like @code{troff}.
+@Defreq {troff, }
@pindex troffrc
@pindex troffrc-end
-@Defreq {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').
+mode if the output device is not a TTY (e.g.@: `ps').
@endDefreq
-@pindex tty.tmac
@Defreq {nroff, }
+@pindex tty.tmac
Make the @samp{n} built-in condition true (and the @samp{t} built-in
condition false) for @code{if}, @code{ie}, and @code{while}
-conditional requests. This is the default if @code{gtroff} uses a tty
+conditional requests. This is the default if @code{gtroff} uses a TTY
output device; the code for switching to nroff mode is in the file
@file{tty.tmac} which is loaded by the start-up file @code{troffrc}.
@endDefreq
@@ -5224,26 +7065,10 @@ output device; the code for switching to nroff mode is in the file
@xref{Conditionals and Loops}, for more details on built-in
conditions.
-@c XXX move the following to grotty section
-
-@pindex less
-@cindex Teletype
-@cindex ISO 6249 SGR
-@cindex terminal control sequences
-@cindex control sequences, for terminals
-For tty output devices, underlining is done by emitting sequences of
-@samp{_} and @samp{\b} (the backspace character) before the actual
-character. Literally, this is printing an underline character, then
-moving back one character position, and printing the actual character
-at the same position as the underline character (similar to a
-typewriter). Usually, a modern terminal can't interpret this (and the
-original Teletype machines for which this sequence was appropriate are
-no longer in use). You need a pager program like @code{less} which
-translates this into ISO 6429 SGR sequences to control terminals.
@c =====================================================================
-@node Line Layout, Page Layout, Troff and Nroff Mode, gtroff Reference
+@node Line Layout, Line Control, Troff and Nroff Mode, gtroff Reference
@section Line Layout
@cindex line layout
@cindex layout, line
@@ -5269,50 +7094,67 @@ These dimensions are:
@ftable @code
@item po
-@cindex left margin
-@cindex margin, left
-@cindex page offset
-@cindex offset, page
+@cindex left margin (@code{po})
+@cindex margin, left (@code{po})
+@cindex page offset (@code{po})
+@cindex offset, page (@code{po})
@dfn{Page offset} -- this is the leftmost position of text on the final
output, defining the @dfn{left margin}.
@item in
-@cindex indentation
-@cindex line indentation
+@cindex indentation (@code{in})
+@cindex line indentation (@code{in})
@dfn{Indentation} -- this is the distance from the left margin where
text is printed.
@item ll
-@cindex line length
-@cindex length of line
+@cindex line length (@code{ll})
+@cindex length of line (@code{ll})
@dfn{Line length} -- this is the distance from the left margin to right
margin.
@end ftable
-@c XXX improve example
+A simple demonstration:
@Example
+.ll 3i
+This is text without indentation.
+The line length has been set to 3\~inch.
.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!
-.in -.5i
-.ll +.5i
+Now the left and right margins are both increased.
+.in
+.ll
+Calling .in and .ll without parameters restore
+the previous values.
@endExample
+Result:
+
+@Example
+This is text without indenta-
+tion. The line length has
+been set to 3 inch.
+ Now the left and
+ right margins are
+ both increased.
+Calling .in and .ll without
+parameters restore the previ-
+ous values.
+@endExample
+
+@DefreqList {po, [@Var{offset}]}
+@DefreqItem {po, @t{+}@Var{offset}}
+@DefreqItem {po, @t{-}@Var{offset}}
+@DefregListEnd {.o}
@pindex troffrc
-@Defreq {po, [@Var{offset}]}
-@Defreqx {po, @t{+}@Var{offset}}
-@Defreqx {po, @t{-}@Var{offset}}
-@Defregx {.o}
Set horizontal page offset to @var{offset} (or increment or decrement
the current value by @var{offset}). Note that this request does not
cause a break, so changing the page offset in the middle of text being
filled may not yield the expected result. The initial value is
-1@dmn{i}. For tty output devices, it is set to 0 in the startup file
-@file{troffrc}; the default scaling indicator is@w{ }@code{m} (and
-not@w{ }@code{v} as incorrectly documented in the original
+1@dmn{i}. For TTY output devices, it is set to 0 in the startup file
+@file{troffrc}; the default scaling indicator is @samp{m} (and
+not @samp{v} as incorrectly documented in the original
@acronym{UNIX} troff manual).
The current page offset can be found in the read-only number register
@@ -5334,19 +7176,20 @@ the previous value before the last call to @code{po}.
@endExample
@endDefreq
-@Defreq {in, [@Var{indent}]}
-@Defreqx {in, @t{+}@Var{indent}}
-@Defreqx {in, @t{-}@Var{indent}}
-@Defregx {.i}
+@DefreqList {in, [@Var{indent}]}
+@DefreqItem {in, @t{+}@Var{indent}}
+@DefreqItem {in, @t{-}@Var{indent}}
+@DefregListEnd {.i}
Set indentation to @var{indent} (or increment or decrement the
current value by @var{indent}). This request causes a break.
Initially, there is no indentation.
If @code{in} is called without an argument, the indentation is reset to
the previous value before the last call to @code{in}. The default
-scaling indicator is@w{ }@code{m}.
+scaling indicator is @samp{m}.
-The indentation is associated with the current environment.
+The indentation is associated with the current environment
+(@pxref{Environments}).
If a negative indentation value is specified (which is not allowed),
@code{gtroff} emits a warning of type @samp{range} and sets the
@@ -5359,17 +7202,17 @@ The current indentation (as set by @code{in}) can be found in the
read-only number register @samp{.i}.
@endDefreq
-@Defreq {ti, offset}
-@Defreqx {ti, @t{+}@Var{offset}}
-@Defreqx {ti, @t{-}@Var{offset}}
-@Defregx {.in}
+@DefreqList {ti, offset}
+@DefreqItem {ti, @t{+}@Var{offset}}
+@DefreqItem {ti, @t{-}@Var{offset}}
+@DefregListEnd {.in}
Temporarily indent the next output line by @var{offset}. If an
increment or decrement value is specified, adjust the temporary
indentation relative to the value set by the @code{in} request.
This request causes a break; its value is associated with the current
-environment. The default scaling indicator is@w{ }@code{m}. A call
-of @code{ti} without an argument is ignored.
+environment (@pxref{Environments}). The default scaling indicator
+is @samp{m}. A call of @code{ti} without an argument is ignored.
If the total indentation value is negative (which is not allowed),
@code{gtroff} emits a warning of type @samp{range} and sets the
@@ -5388,25 +7231,26 @@ into account whether a partially collected line still uses the old
indentation value or a temporary indentation value is active.
@endDefreq
-@Defreq {ll, [@Var{length}]}
-@Defreqx {ll, @t{+}@Var{length}}
-@Defreqx {ll, @t{-}@Var{length}}
-@Defregx {.l}
-@Defregx {.ll}
+@DefreqList {ll, [@Var{length}]}
+@DefreqItem {ll, @t{+}@Var{length}}
+@DefreqItem {ll, @t{-}@Var{length}}
+@DefregItem {.l}
+@DefregListEnd {.ll}
Set the line length to @var{length} (or increment or decrement the
current value by @var{length}). Initially, the line length is set to
6.5@dmn{i}. The effect of @code{ll} is delayed until a partially
collected line (if it exists) is output. The default scaling
-indicator is@w{ }@code{m}.
+indicator is @samp{m}.
If @code{ll} is called without an argument, the line length is reset to
the previous value before the last call to @code{ll}. If a negative
line length is specified (which is not allowed), @code{gtroff} emits a
warning of type @samp{range} and sets the line length to zero.
-The line length is associated with the current environment.
+The line length is associated with the current environment
+(@pxref{Environments}).
-@cindex current line length register
+@cindex line length register (@code{.l})
The current line length (as set by @code{ll}) can be found in the
read-only number register @samp{.l}. The read-only number register
@code{.ll} is the line length that applies to the current output line.
@@ -5419,7 +7263,128 @@ collected line still uses the old line length value.
@c =====================================================================
-@node Page Layout, Page Control, Line Layout, gtroff Reference
+@node Line Control, Page Layout, Line Layout, gtroff Reference
+@section Line Control
+@cindex line control
+@cindex control, line
+
+It is important to understand how @code{gtroff} handles input and output
+lines.
+
+Many escapes use positioning relative to the input line. For example,
+this
+
+@Example
+This is a \h'|1.2i'test.
+
+This is a
+\h'|1.2i'test.
+@endExample
+
+@noindent
+produces
+
+@Example
+This is a test.
+
+This is a test.
+@endExample
+
+The main usage of this feature is to define macros which act exactly
+at the place where called.
+
+@Example
+.\" A simple macro to underline a word
+.de underline
+. nop \\$1\l'|0\[ul]'
+..
+@endExample
+
+@noindent
+In the above example, @samp{|0} specifies a negative distance from the
+current position (at the end of the just emitted argument @code{\$1}) back
+to the beginning of the input line. Thus, the @samp{\l} escape draws a
+line from right to left.
+
+@cindex input line continuation (@code{\})
+@cindex line, input, continuation (@code{\})
+@cindex continuation, input line (@code{\})
+@cindex output line, continuation (@code{\c})
+@cindex line, output, continuation (@code{\c})
+@cindex continuation, output line (@code{\c})
+@cindex interrupted line
+@cindex line, interrupted
+@code{gtroff} makes a difference between input and output line
+continuation; the latter is also called @dfn{interrupting} a line.
+
+@DefescList {\\@key{RET}, , ,}
+@DefescItem {\\c, , ,}
+@DefregListEnd{.int}
+Continue a line. @code{\@key{RET}} (this is a backslash at the end
+of a line immediately followed by a newline) works on the input level,
+suppressing the effects of the following newline in the input.
+
+@Example
+This is a \
+.test
+ @result{} This is a .test
+@endExample
+
+The @samp{|} operator is also affected.
+
+@cindex @code{\R}, after @code{\c}
+@code{\c} works on the output level. Anything after this escape on the
+same line is ignored, except @code{\R} which works as usual. Anything
+before @code{\c} on the same line will be appended to the current partial
+output line. The next non-command line after an interrupted line counts
+as a new input line.
+
+The visual results depend on whether no-fill mode is active.
+
+@itemize @bullet
+@item
+@cindex @code{\c}, and no-fill mode
+@cindex no-fill mode, and @code{\c}
+@cindex mode, no-fill, and @code{\c}
+If no-fill mode is active (using the @code{nf} request), the next input
+text line after @code{\c} will be handled as a continuation of the same
+input text line.
+
+@Example
+.nf
+This is a \c
+test.
+ @result{} This is a test.
+@endExample
+
+@item
+@cindex @code{\c}, and fill mode
+@cindex fill mode, and @code{\c}
+@cindex mode, fill, and @code{\c}
+If fill mode is active (using the @code{fi} request), a word interrupted
+with @code{\c} will be continued with the text on the next input text line,
+without an intervening space.
+
+@Example
+This is a te\c
+st.
+ @result{} This is a test.
+@endExample
+@end itemize
+
+Note that an intervening control line which causes a break is stronger
+than @code{\c}, flushing out the current partial line in the usual way.
+
+@cindex interrupted line register (@code{.int})
+The @code{.int} register contains a positive value
+if the last output line was interrupted with @code{\c}; this is
+associated with the current environment (@pxref{Environments}).
+
+@endDefesc
+
+@c =====================================================================
+
+@node Page Layout, Page Control, Line Control, gtroff Reference
@section Page Layout
@cindex page layout
@cindex layout, page
@@ -5427,17 +7392,17 @@ collected line still uses the old line length value.
@code{gtroff} provides some very primitive operations for controlling
page layout.
-@cindex page length
-@cindex length of page
-@Defreq {pl, [@Var{length}]}
-@Defreqx {pl, @t{+}@Var{length}}
-@Defreqx {pl, @t{-}@Var{length}}
-@Defregx {.p}
+@DefreqList {pl, [@Var{length}]}
+@DefreqItem {pl, @t{+}@Var{length}}
+@DefreqItem {pl, @t{-}@Var{length}}
+@DefregListEnd {.p}
+@cindex page length (@code{pl})
+@cindex length of page (@code{pl})
Set the @dfn{page length} to @var{length} (or increment or decrement
the current value by @var{length}). This is the length of the
-physical output page. The default scaling indicator is@w{ }@code{v}.
+physical output page. The default scaling indicator is @samp{v}.
-@cindex current page length register
+@cindex page length register (@code{.p})
The current setting can be found in the read-only number register
@samp{.p}.
@@ -5463,10 +7428,10 @@ length to 11@dmn{i}.
@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
-@cindex page number character
@Defreq {tl, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}}
+@cindex title line (@code{tl})
+@cindex three-part title (@code{tl})
+@cindex page number character (@code{%})
Print a @dfn{title line}. It consists of three parts: a left
justified portion, a centered portion, and a right justified portion.
The argument separator @samp{'} can be replaced with any character not
@@ -5493,28 +7458,24 @@ title line with the left justified word @samp{foo}; the centered and
right justfied parts are empty.
@item
-Any modifications to the current environment within @code{tl} (e.g.@:
-changing the font or font size) are undone after processing @code{tl}.
-
-@item
@code{tl} accepts the same parameter delimiting characters as the
@code{\A} escape; see @ref{Escapes}.
@end itemize
@endDefreq
-@cindex length of title line
-@cindex title line, length
-@cindex current title line length register
-@Defreq {lt, [@Var{length}]}
-@Defreqx {lt, @t{+}@Var{length}}
-@Defreqx {lt, @t{-}@Var{length}}
-@Defregx {.lt}
+@DefreqList {lt, [@Var{length}]}
+@DefreqItem {lt, @t{+}@Var{length}}
+@DefreqItem {lt, @t{-}@Var{length}}
+@DefregListEnd {.lt}
+@cindex length of title line (@code{lt})
+@cindex title line, length (@code{lt})
+@cindex title line length register (@code{.lt})
The title line is printed using its own line length, which is
specified (or incremented or decremented) with the @code{lt} request.
Initially, the title line length is set to 6.5@dmn{i}. If a negative
line length is specified (which is not allowed), @code{gtroff} emits a
warning of type @samp{range} and sets the title line length to zero.
-The default scaling indicator is@w{ }@code{m}. If @code{lt} is called
+The default scaling indicator is @samp{m}. If @code{lt} is called
without an argument, the title length is reset to the previous value
before the last call to @code{lt}.
@@ -5524,12 +7485,12 @@ number register; it is associated with the current environment
@endDefreq
-@cindex page number
-@cindex number, page
-@Defreq {pn, page}
-@Defreqx {pn, @t{+}@Var{page}}
-@Defreqx {pn, @t{-}@Var{page}}
-@Defregx {.pn}
+@DefreqList {pn, page}
+@DefreqItem {pn, @t{+}@Var{page}}
+@DefreqItem {pn, @t{-}@Var{page}}
+@DefregListEnd {.pn}
+@cindex page number (@code{pn})
+@cindex number, page (@code{pn})
Change (increase or decrease) the page number of the @emph{next} page.
The only argument is the page number; the request is ignored without a
parameter.
@@ -5539,18 +7500,18 @@ page: either the value set by a @code{pn} request, or the number of the
current page plus@w{ }1.
@endDefreq
-@cindex current page number register
@Defreg {%}
+@cindex page number register (@code{%})
A read-write register holding the current page number.
@endDefreg
-@cindex changing the page number character
-@cindex page number character, changing
-@vindex %
@Defreq {pc, [@Var{char}]}
+@cindex changing the page number character (@code{pc})
+@cindex page number character, changing (@code{pc})
+@vindex %
Change the page number character (used by the @code{tl} request) to a
different character. With no argument, this mechanism is disabled.
-Note that this doesn't affect the number register @code{%}.
+Note that this doesn't affect the number register@w{ }@code{%}.
@endDefreq
@xref{Traps}.
@@ -5563,11 +7524,11 @@ Note that this doesn't affect the number register @code{%}.
@cindex page control
@cindex control, page
-@rqindex pn
-@cindex new page
-@Defreq {bp, [@Var{page}]}
-@Defreqx {bp, @t{+}@Var{page}}
-@Defreqx {bp, @t{-}@Var{page}}
+@DefreqList {bp, [@Var{page}]}
+@DefreqItem {bp, @t{+}@Var{page}}
+@DefreqListEnd {bp, @t{-}@Var{page}}
+@cindex new page (@code{bp})
+@cindex page, new (@code{bp})
Stop processing the current page and move to the next page. This
request causes a break. It can also take an argument to set
(increase, decrease) the page number of the next page. The only
@@ -5583,22 +7544,25 @@ cause a break or actually eject a page.
.. \" end macro
@endExample
-@cindex top-level diversion
-@cindex diversion, top-level
+@cindex @code{bp} request, and top-level diversion
+@cindex top-level diversion, and @code{bp}
+@cindex diversion, top-level, and @code{bp}
@code{bp} has no effect if not called within the top-level diversion
(@pxref{Diversions}).
@endDefreq
-@cindex orphan line
@Defreq {ne, [@Var{space}]}
+@cindex orphan lines, preventing with @code{ne}
+@cindex conditional page break (@code{ne})
+@cindex page break, conditional (@code{ne})
It is often necessary to force a certain amount of space before a new
page occurs. This is most useful to make sure that there is not a
single @dfn{orphan} line left at the bottom of a page. The @code{ne}
request ensures that there is a certain distance, specified by the
first argument, before the next page is triggered (see @ref{Traps},
-for further information). The default unit for @code{ne} is @samp{v};
-the default value of @var{space} is@w{ }1@dmn{v} if no argument is
-given.
+for further information). The default scaling indicator for @code{ne}
+is @samp{v}; the default value of @var{space} is@w{ }1@dmn{v} if no
+argument is given.
For example, to make sure that no fewer than 2@w{ }lines get orphaned,
do the following before each paragraph:
@@ -5607,20 +7571,76 @@ do the following before each paragraph:
.ne 2
text text text
@endExample
+
+@code{ne} will then automatically cause a page break if there is space
+for one line only.
@endDefreq
-@rqindex os
-@rqindex ne
-@Defreq {sv, [@Var{space}]}
+@DefreqList {sv, [@Var{space}]}
+@DefreqListEnd {os, }
+@cindex @code{ne} request, comparison with @code{sv}
@code{sv} is similar to the @code{ne} request; it reserves the
specified amount of vertical space. If the desired amount of space
-exists before the next trap (bottom page boundary), the space is
-output immediately (ignoring a partial filled line which stays
-untouched). If there is not enough space, it is stored for later
-output via the @code{os} request. The default value is@w{ }1@dmn{v}
-if no argument is given; the default unit is @samp{v}.
+exists before the next trap (or the bottom page boundary if no trap is
+set), the space is output immediately (ignoring a partially filled line
+which stays untouched). If there is not enough space, it is stored for
+later output via the @code{os} request. The default value is@w{ }1@dmn{v}
+if no argument is given; the default scaling indicator is @samp{v}.
+
+@cindex @code{sv} request, and no-space mode
+@cindex @code{os} request, and no-space mode
+Both @code{sv} and @code{os} ignore no-space mode. While the @code{sv}
+request allows negative values for @var{space}, @code{os} will ignore
+them.
@endDefreq
+@Defreg {nl}
+This register contains the current vertical position. If the vertical
+position is zero and the top of page transition hasn't happened yet,
+@code{nl} is set to negative value. @code{gtroff} itself does this at
+the very beginning of a document before anything has been printed, but
+the main usage is to plant a header trap on a page if this page has
+already started.
+
+Consider the following:
+
+@Example
+.de xxx
+. sp
+. tl ''Header''
+. sp
+..
+.
+First page.
+.bp
+.wh 0 xxx
+.nr nl (-1)
+Second page.
+@endExample
+
+@noindent
+Result:
+
+@Example
+First page.
+
+...
+
+ Header
+
+Second page.
+
+...
+@endExample
+
+@noindent
+Without resetting @code{nl} to a negative value, the just planted trap
+would be active beginning with the @emph{next} page, not the current
+one.
+
+@xref{Diversions}, for a comparison with the @code{.h} and @code{.d}
+registers.
+@endDefreg
@c =====================================================================
@@ -5631,7 +7651,7 @@ if no argument is given; the default unit is @samp{v}.
@code{gtroff} can switch fonts at any point in the text.
The basic set of fonts is @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
-These are Times Roman, Italic, Bold, and Bold Italic. For non-tty
+These are Times Roman, Italic, Bold, and Bold Italic. For non-TTY
devices, there is also at least one symbol font which contains various
special symbols (Greek, mathematics).
@@ -5649,32 +7669,34 @@ special symbols (Greek, mathematics).
@node Changing Fonts, Font Families, Fonts, Fonts
@subsection Changing Fonts
-@cindex changing fonts
-@cindex fonts, changing
+@cindex fonts
-@rqindex sty
-@rqindex fam
+@DefreqList {ft, [@Var{font}]}
+@DefescItem {\\f, , f, }
+@DefescItem {\\f, @lparen{}, fn, }
+@DefescListEnd {\\f, @lbrack{}, font, @rbrack}
+@cindex changing fonts (@code{ft}, @code{\f})
+@cindex fonts, changing (@code{ft}, @code{\f})
+@cindex @code{sty} request, and changing fonts
+@cindex @code{fam} request, and changing fonts
+@cindex @code{\F}, and changing fonts
@kindex styles
@kindex family
@pindex DESC
-@Defreq {ft, [@Var{font}]}
-@Defescx {\\f, , f, }
-@Defescx {\\f, @lparen{}, fn, }
-@Defescx {\\f, @lbrack{}, font, @rbrack}
The @code{ft} request and the @code{\f} escape change the current font
-to @var{font} (one-character name @var{f}, two-character name
+to @var{font} (one-character name@w{ }@var{f}, two-character name
@var{fn}).
If @var{font} is a style name (as set with the @code{sty} request or
with the @code{styles} command in the @file{DESC} file), use it within
-the current font family (as set with the @code{fam} request or with
-the @code{family} command in the @file{DESC} file).
+the current font family (as set with the @code{fam} request, @code{\F}
+escape, or with the @code{family} command in the @file{DESC} file).
-@cindex previous font
-@cindex font, previous
+@cindex previous font (@code{ft}, @code{\f[]}, @code{\fP})
+@cindex font, previous (@code{ft}, @code{\f[]}, @code{\fP})
With no argument or using @samp{P} as an argument, @code{.ft} switches
-to the previous font. Use @code{\fP} or @code{\f[P]} to do this with
-the escape.
+to the previous font. Use @code{\f[]} to do this with the escape. The
+old syntax forms @code{\fP} or @code{\f[P]} are also supported.
Fonts are generally specified as upper-case strings, which are usually
1@w{ }to 4 characters representing an abbreviation or acronym of the
@@ -5692,25 +7714,34 @@ and sausage.
eggs, bacon, \fBspam\fP and sausage.
@endExample
+Note that @code{\f} doesn't produce an input token in @code{gtroff}.
+As a consequence, it can be used in requests like @code{mc} (which
+expects a single character as an argument) to change the font on
+the fly:
+
+@Example
+.mc \f[I]x\f[]
+@endExample
+
@xref{Font Positions}, for an alternative syntax.
@endDefreq
-@rqindex ft
-@rqindex ul
-@rqindex bd
-@esindex \f
-@rqindex cs
-@rqindex tkf
-@rqindex special
-@rqindex fspecial
-@rqindex fp
-@rqindex code
@Defreq {ftr, f [@Var{g}]}
-Translate 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
+@cindex @code{ft} request, and font translations
+@cindex @code{ul} request, and font translations
+@cindex @code{bd} request, and font translations
+@cindex @code{\f}, and font translations
+@cindex @code{cs} request, and font translations
+@cindex @code{tkf} request, and font translations
+@cindex @code{special} request, and font translations
+@cindex @code{fspecial} request, and font translations
+@cindex @code{fp} request, and font translations
+@cindex @code{sty} request, and font translations
+Translate font@w{ }@var{f} to font@w{ }@var{g}. Whenever a font named@w{
+}@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} is used. If @var{g} is missing or equal to @var{f}
+@code{special}, @code{fspecial}, @code{fp}, or @code{sty} requests,
+font@w{ }@var{g} is used. If @var{g} is missing or equal to@w{ }@var{f}
the translation is undone.
@endDefreq
@@ -5729,21 +7760,34 @@ specified as the concatenation of the font family and style. Specifying
a font without the family part causes @code{gtroff} to use that style of
the current family.
-@cindex postscript fonts
-@cindex fonts, postscript
-Currently, only @sc{PostScript} fonts are set up to this mechanism.
+@cindex PostScript fonts
+@cindex fonts, PostScript
+Currently, fonts for the devices @option{-Tps}, @option{-Tdvi}, and
+@option{-Tlbp} are set up to this mechanism.
By default, @code{gtroff} uses the Times family with the four styles
@samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
This way, it is possible to use the basic four fonts and to select a
different font family on the command line (@pxref{Groff Options}).
-@Defreq {fam, [@Var{family}]}
-@Defregx {.fam}
-Switch font family to @var{family}. If no argument is given, switch
-back to the previous font family. The current font family is available
-in the read-only number register @samp{.fam} (this is a string-valued
-register); it is associated with the current environment.
+@DefreqList {fam, [@Var{family}]}
+@DefregItem {.fam}
+@DefescItem {\\F, , f, }
+@DefescItem {\\F, @lparen{}, fm, }
+@DefescItem {\\F, @lbrack{}, family, @rbrack}
+@DefregListEnd {.fn}
+@cindex changing font family (@code{fam}, @code{\F})
+@cindex font family, changing (@code{fam}, @code{\F})
+Switch font family to @var{family} (one-character name@w{ }@var{f},
+two-character name @var{fm}). If no argument is given, switch
+back to the previous font family. Use @code{\F[]} to do this with the
+escape. Note that @code{\FP} doesn't work; it selects font family
+@samp{P} instead.
+
+The value at start-up is @samp{T}.
+The current font family is available in the read-only number register
+@samp{.fam} (this is a string-valued register); it is associated with
+the current environment.
@Example
spam,
@@ -5758,29 +7802,46 @@ baked beans,
.ft R \" family T + style R = font TR
and spam.
@endExample
+
+Note that @code{\F} doesn't produce an input token in @code{gtroff}.
+As a consequence, it can be used in requests like @code{mc} (which
+expects a single character as an argument) to change the font family on
+the fly:
+
+@Example
+.mc \F[P]x\F[]
+@endExample
+
+The @samp{.fn} register contains the current @dfn{real font name}
+of the current font.
+This is a string-valued register.
+If the current font is a style, the value of @code{\n[.fn]}
+is the proper concatenation of family and style name.
@endDefreq
-@rqindex cs
-@rqindex bd
-@rqindex tkf
-@rqindex uf
-@rqindex fspecial
@Defreq {sty, n style}
+@cindex changing font style (@code{sty})
+@cindex font style, changing (@code{sty})
+@cindex @code{cs} request, and font styles
+@cindex @code{bd} request, and font styles
+@cindex @code{tkf} request, and font styles
+@cindex @code{uf} request, and font styles
+@cindex @code{fspecial} request, and font styles
Associate @var{style} with font position@w{ }@var{n}. A font position
can be associated either with a font or with a style. The current
font is the index of a font position and so is also either a font or a
-style. When it is a style, the font that is actually used is the font
-the name of which is the concatenation of the name of the current
+style. If it is a style, the font that is actually used is the font
+which name is the concatenation of the name of the current
family and the name of the current style. For example, if the current
-font is@w{ }1 and font position@w{ }1 is associated with style@w{
-}@samp{R} and the current font family is@w{ }@samp{T}, then font
+font is@w{ }1 and font position@w{ }1 is associated with style
+@samp{R} and the current font family is @samp{T}, then font
@samp{TR} will be used. If the current font is not a style, then the
-current family is ignored. When the requests @code{cs}, @code{bd},
-@code{tkf}, @code{uf}, or @code{fspecial} are applied to a style, then
+current family is ignored. If the requests @code{cs}, @code{bd},
+@code{tkf}, @code{uf}, or @code{fspecial} are applied to a style,
they will instead be applied to the member of the current family
corresponding to that style.
-@var{n} must be a non-negative integer value.
+@var{n}@w{ }must be a non-negative integer value.
@pindex DESC
@kindex styles
@@ -5804,8 +7865,8 @@ is equivalent to
.sty 4 BI
@endExample
-@code{.fam} always checks whether the current font position is valid;
-this can give surprising results if the current font position is
+@code{fam} and @code{\F} always check whether the current font position
+is valid; this can give surprising results if the current font position is
associated with a style.
In the following example, we want to access the @sc{PostScript} font
@@ -5846,16 +7907,18 @@ For the sake of old phototypesetters and compatibility with old versions
of @code{troff}, @code{gtroff} has the concept of font @dfn{positions},
on which various fonts are mounted.
-@Defreq {fp, pos font [@Var{external-name}]}
-@Defregx {.f}
-@Defregx {.fp}
+@DefreqList {fp, pos font [@Var{external-name}]}
+@DefregItem {.f}
+@DefregListEnd {.fp}
+@cindex mounting font (@code{fp})
+@cindex font, mounting (@code{fp})
Mount font @var{font} at position @var{pos} (which must be a
non-negative integer). This numeric position can then be referred to
with font changing commands. When @code{gtroff} starts it is using
font position@w{ }1 (which must exist; position@w{ }0 is unused
usually at start-up).
-@cindex current font position register
+@cindex font position register (@code{.f})
The current font in use, as a font position, is available in the
read-only number register @samp{.f}. This can be useful to remember the
current font for later recall. It is associated with the current
@@ -5868,7 +7931,7 @@ environment (@pxref{Environments}).
.ft \n[save-font]
@endExample
-@cindex next free font position register
+@cindex next free font position register (@code{.fp})
The number of the next free font position is available in the read-only
number register @samp{.fp}. This is useful when mounting a new font,
like so:
@@ -5899,23 +7962,27 @@ fonts with long names in compatibility mode.
Both the @code{ft} request and the @code{\f} escape have alternative
syntax forms to access font positions.
-@rqindex sty
-@rqindex fam
+@DefreqList {ft, nnn}
+@DefescItem {\\f, , n, }
+@DefescItem {\\f, @lparen{}, nn, }
+@DefescListEnd {\\f, @lbrack{}, nnn, @rbrack}
+@cindex changing font position (@code{\f})
+@cindex font position, changing (@code{\f})
+@cindex @code{sty} request, and font positions
+@cindex @code{fam} request, and font positions
+@cindex @code{\F}, and font positions
@kindex styles
@kindex family
@pindex DESC
-@Defreq {ft, nnn}
-@Defescx {\\f, , n, }
-@Defescx {\\f, @lparen{}, nn, }
-@Defescx {\\f, @lbrack{}, nnn, @rbrack}
-Change the current font position to @var{nnn} (one-digit position
-@var{n}, two-digit position @var{nn}), which must be a non-negative
+Change the current font position to @var{nnn} (one-digit position@w{
+}@var{n}, two-digit position @var{nn}), which must be a non-negative
integer.
If @var{nnn} is associated with a style (as set with the @code{sty}
request or with the @code{styles} command in the @file{DESC} file), use
-it within the current font family (as set with the @code{fam} request or
-with the @code{family} command in the @file{DESC} file).
+it within the current font family (as set with the @code{fam} request,
+the @code{\F} escape, or with the @code{family} command in the @file{DESC}
+file).
@Example
this is font 1
@@ -5950,17 +8017,10 @@ written in a roman or an italic font, yielding two different glyphs);
sometimes more than one character maps to a single glyph (this is a
@dfn{ligature} -- the most common is `fi').
-@c XXX
-
-Please note that currently the distinction between glyphs and
-characters in this reference is not clearly carried out. This will be
-improved eventually in the next revision.
-
@cindex symbol
@cindex special fonts
@kindex fonts
@pindex DESC
-@rqindex fspecial
A @dfn{symbol} is simply a named glyph. Within @code{gtroff}, all
glyph names of a particular font are defined in its font file. If the
user requests a glyph not available in this font, @code{gtroff} looks
@@ -5973,42 +8033,100 @@ special fonts. Fonts mounted with the @code{fonts} keyword in the
special fonts locally (i.e.@: for a particular font), use the
@code{fspecial} request.
+In summary, @code{gtroff} tries the following to find a given symbol:
+
+@itemize @bullet
+@item
+If the symbol has been defined with the @code{char} request, use it.
+This hides a symbol with the same name in the current font.
+
+@item
+Check the current font.
+
+@item
+If the symbol has been defined with the @code{fchar} request, use it.
+
+@item
+Check all fonts given with the @code{fspecial} request, in the order
+of appearance in @code{fspecial} calls.
+
+@item
+Check all fonts given with the @code{special} request, in the order
+of appearance in @code{special} calls (inclusively the special fonts
+defined in the @file{DESC} file, which come first).
+
+@item
+As a last resort, consult all fonts loaded up to now (in the order they
+have been called the first time) for special fonts and check them.
+@end itemize
+
@xref{Font Files}, and @ref{Special Fonts}, for more details.
-@Defesc {\\, @lparen{}, nm, }
-@Defescx {\\, @lbrack{}, name, @rbrack}
+@DefescList {\\, @lparen{}, nm, }
+@DefescListEnd {\\, @lbrack{}, name, @rbrack}
Insert a symbol @var{name} (two-character name @var{nm}). There is no
special syntax for one-character names -- the natural form
-@samp{\@var{n}} would collide with escapes.
+@samp{\@var{n}} would collide with escapes.@footnote{Note that a
+one-character symbol is not the same as an input character, i.e., the
+character @code{a} is not the same as @code{\[a]}. By default,
+@code{groff} defines only a single one-character symbol, @code{\[-]};
+it is usually accessed as @code{\-}. On the other hand, @code{gtroff}
+has the special feature that @code{\[char@var{XXX}]} is the same as the
+input character with character code @var{XXX}. For example,
+@code{\[char97]} is identical to the letter @code{a} if @acronym{ASCII}
+encoding is active.}
If @var{name} is undefined, a warning of type @samp{char} is generated,
and the escape is ignored. @xref{Debugging}, for information about
warnings.
-The list of available symbols is device dependent; see @ref{Glyph Name
-Index} for some of them discussed in this reference.
+@cindex list of available glyphs (@cite{groff_char(7)} man page)
+@cindex available glyphs, list (@cite{groff_char(7)} man page)
+@cindex glyphs, available, list (@cite{groff_char(7)} man page)
+The list of available symbols is device dependent; see the
+@cite{groff_char(7)} man page for a complete list for the given output
+device. For example, say
+
+@Example
+man -Tdvi groff_char > groff_char.dvi
+@endExample
+
+@noindent
+for a list using the default DVI fonts (not all versions of the
+@code{man} program support the @option{-T} option). If you want to
+use an additional macro package to change the used fonts, @code{groff}
+must be called directly:
+
+@Example
+groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
+@endExample
@c XXX list of common symbols
@endDefesc
@Defesc {\\C, ', xxx, '}
-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 newer versions of @code{ditroff} and is available in
-compatibility mode.
+@cindex named character (@code{\C})
+@cindex character, named (@code{\C})
+Typeset the glyph named @var{xxx}.@footnote{@code{\C} is actually a
+misnomer since it accesses an output glyph.} Normally it is more
+convenient to use @code{\[@var{xxx}]}, but @code{\C} has the advantage
+that it is compatible with newer versions of @acronym{AT&T}
+@code{troff} and is available in compatibility mode.
@endDefesc
-@rqindex char
-@cindex unicode
@Defesc {\\N, ', n, '}
-Typeset the character with code@w{ }@var{n} in the current font (this
-is @strong{not} the input character code). @var{n} can be any
-integer. Most devices only have characters with codes between 0
-and@w{ }255; the Unicode output device uses codes in the range
-0--65535. If the current font does not contain a character with that
-code, special fonts are @emph{not} searched. The @code{\N} escape
-sequence can be conveniently used in conjunction with the @code{char}
-request:
+@cindex numbered glyph (@code{\N})
+@cindex glyph, numbered (@code{\N})
+@cindex @code{char} request, used with @code{\N}
+@cindex Unicode
+Typeset the glyph with code@w{ }@var{n} in the current font
+(@code{n}@w{ }is @strong{not} the input character code). The
+number @var{n}@w{ }can be any non-negative decimal integer. Most devices
+only have glyphs with codes between 0 and@w{ }255; the Unicode
+output device uses codes in the range 0--65535. If the current
+font does not contain a glyph with that code, special fonts are
+@emph{not} searched. The @code{\N} escape sequence can be
+conveniently used in conjunction with the @code{char} request:
@Example
.char \[phone] \f[ZD]\N'37'
@@ -6016,117 +8134,171 @@ request:
@noindent
@pindex DESC
-@cindex unnamed characters
-@cindex characters, unnamed
-The code of each character is given in the fourth column in the font
+@cindex unnamed glyphs
+@cindex glyphs, unnamed
+The code of each glyph is given in the fourth column in the font
description file after the @code{charset} command. It is possible to
-include unnamed characters in the font description file by using a
+include unnamed glyphs in the font description file by using a
name of @samp{---}; the @code{\N} escape sequence is the only way to
use these.
@endDefesc
-@c XXX should be `glyph', not `character'
+Some escape sequences directly map onto special glyphs.
+
+@Defesc {\\', , , }
+This is a backslash followed by the apostrophe character, @acronym{ASCII}
+character @code{0x27} (@acronym{EBCDIC} character @code{0x7D}). The same
+as @code{\[aa]}, the acute accent.
+@endDefesc
+
+@Defesc {\\`, , , }
+This is a backslash followed by @acronym{ASCII} character @code{0x60}
+(@acronym{EBCDIC} character @code{0x79} usually). The same as
+@code{\[ga]}, the grave accent.
+@endDefesc
+
+@Defesc {\\-, , , }
+This is the same as @code{\[-]}, the minus sign in the current font.
+@endDefesc
-@cindex character properties
-@cindex properties of characters
@Defreq {cflags, n c1 c2 @dots{}}
-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. It is possible
-to omit the spaces between the characters.
+@cindex glyph properties (@code{cflags})
+@cindex character properties (@code{cflags})
+@cindex properties of glyphs (@code{cflags})
+@cindex properties of characters (@code{cflags})
+Input characters and symbols have certain properties associated
+with it.@footnote{Note that the output glyphs themselves don't have
+such properties. For @code{gtroff}, a glyph is a numbered box with
+a given width, depth, and height, nothing else. All manipulations
+with the @code{cflags} request work on the input level.} These
+properties can be modified with the @code{cflags} request. The
+first argument is the sum of the desired flags and the remaining
+arguments are the characters or symbols to have those properties.
+It is possible to omit the spaces between the characters or symbols.
@table @code
@item 1
-@cindex end of sentence characters
-@cindex characters, end of sentence
-the character ends sentences (initially characters @samp{.?!} have this
-property)
+@cindex end-of-sentence characters
+@cindex characters, end-of-sentence
+The character ends sentences (initially characters @samp{.?!} have this
+property).
@item 2
@cindex hyphenating characters
@cindex characters, hyphenation
-lines can be broken before the character (initially no characters have
-this property)
+Lines can be broken before the character (initially no characters have
+this property).
@item 4
-@glindex hy
-@glindex em
-lines can be broken after the character (initially the characters
-@samp{-\(hy\(em} have this property)
+@cindex @code{hy} glyph, and @code{cflags}
+@cindex @code{em} glyph, and @code{cflags}
+Lines can be broken after the character (initially the character
+@samp{-} and the symbols @samp{\(hy} and @samp{\(em} have this property).
@item 8
@cindex overlapping characters
@cindex characters, overlapping
-@glindex ul
-@glindex rn
-@glindex ru
-the character overlaps horizontally (initially the characters
-@samp{\(ul\(rn\(ru} have this property)
+@cindex @code{ul} glyph, and @code{cflags}
+@cindex @code{rn} glyph, and @code{cflags}
+@cindex @code{ru} glyph, and @code{cflags}
+The character overlaps horizontally (initially the symbols
+@samp{\(ul\(rn\(ru} have this property).
@item 16
-@glindex br
-the character overlaps vertically (initially character @samp{\(br} has
-this property)
+@cindex @code{br} glyph, and @code{cflags}
+The character overlaps vertically (initially symbol @samp{\(br} has
+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
+@cindex @code{"}, at end of sentence
+@cindex @code{'}, at end of sentence
+@cindex @code{)}, at end of sentence
+@cindex @code{]}, at end of sentence
+@cindex @code{*}, at end of sentence
+@cindex @code{dg} glyph, at end of sentence
+@cindex @code{rq} glyph, at end of sentence
+An end-of-sentence character followed by any number of characters with
this property is treated as the end of a sentence if followed by a
newline or two spaces; in other words the character is
-@dfn{transparent} for the purposes of end of sentence recognition --
+@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).
+characters @samp{"')]*} and the symbols @samp{\(dg\(rq} have this
+property).
@end table
@endDefreq
-@cindex defining characters
-@cindex characters, defining
-@cindex creating new characters
-@cindex escape character
-@cindex character, escape
-@rqindex tr
-@rqindex cp
-@rqindex rc
-@rqindex lc
-@esindex \l
-@esindex \L
-@esindex \&
-@esindex \e
-@rqindex hcode
-@Defreq {char, c [@Var{string}]}
-Define a new character@w{ }@var{c} to be @var{string} (which can be
-empty). Every time character@w{ }@var{c} needs to be printed,
+@DefreqList {char, g [@Var{string}]}
+@DefreqListEnd {fchar, g [@Var{string}]}
+@cindex defining character (@code{char})
+@cindex character, defining (@code{char})
+@cindex creating new characters (@code{char})
+@cindex defining symbol (@code{char})
+@cindex symbol, defining (@code{char})
+@cindex defining glyph (@code{char})
+@cindex glyph, defining (@code{char})
+@cindex escape character, while defining glyph
+@cindex character, escape, while defining glyph
+@cindex @code{tr} request, and glyph definitions
+@cindex @code{cp} request, and glyph definitions
+@cindex @code{rc} request, and glyph definitions
+@cindex @code{lc} request, and glyph definitions
+@cindex @code{\l}, and glyph definitions
+@cindex @code{\L}, and glyph definitions
+@cindex @code{\&}, and glyph definitions
+@cindex @code{\e}, and glyph definitions
+@cindex @code{hcode} request, and glyph definitions
+Define a new glyph@w{ }@var{g} to be @var{string} (which can be
+empty).@footnote{@code{char} is a misnomer since an output glyph is
+defined.} Every time glyph@w{ }@var{g} needs to be printed,
@var{string} is processed in a temporary environment and the result is
wrapped up into a single object. Compatibility mode is turned off and
the escape character is set to @samp{\} while @var{string} is being
processed. Any emboldening, constant spacing or track kerning is
applied to this object rather than to individual characters in
-@var{string}. A 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 is handled
-like normal characters not defined with @code{char}.
-@endDefreq
-
-@cindex removing character definition
-@cindex character, removing definition
+@var{string}.
+
+A glyph defined by this request can be used just
+like a normal glyph provided by the output device. In particular,
+other characters can be translated to it with the @code{tr} or
+@code{trin} requests; it can be made the leader character by the
+@code{lc} request; repeated patterns can be drawn with the glyph
+using the @code{\l} and @code{\L} escape sequences; words containing
+the glyph can be hyphenated correctly if the @code{hcode} request
+is used to give the glyph's symbol a hyphenation code.
+
+There is a special anti-recursion feature: Use of @code{g} within
+the glyph's definition is handled like normal characters and symbols
+not defined with @code{char}.
+
+Note that the @code{tr} and @code{trin} requests take precedence if
+@code{char} accesses the same symbol.
+
+@Example
+.tr XY
+X
+ @result{} Y
+.char X Z
+X
+ @result{} Y
+.tr XX
+X
+ @result{} Z
+@endExample
+
+The @code{fchar} request defines a fallback glyph:
+@code{gtroff} only checks for glyphs defined with @code{fchar}
+if it cannot find the glyph in the current font.
+@code{gtroff} carries out this test before checking special fonts.
+@endDefreq
+
@Defreq {rchar, c1 c2 @dots{}}
-Remove the definitions of characters @var{c1}, @var{c2},@w{
-}@enddots{} This undoes the effect of a @code{char} request.
+@cindex removing glyph definition (@code{rchar})
+@cindex glyph, removing definition (@code{rchar})
+Remove the definitions of glyphs @var{c1}, @var{c2},@w{
+}@enddots{} This undoes the effect of a @code{char} or @code{fchar}
+request.
It is possible to omit the whitespace between arguments.
@endDefreq
@@ -6140,9 +8312,31 @@ It is possible to omit the whitespace between arguments.
@cindex special fonts
@cindex fonts, special
-@c XXX
+Special fonts are those that @code{gtroff} searches
+when it cannot find the requested glyph in the current font.
+The Symbol font is usually a special font.
+
+@code{gtroff} provides the following two requests to add more special
+fonts. @xref{Using Symbols}, for a detailed description of the glyph
+searching mechanism in @code{gtroff}.
-To be written.
+Usually, only non-TTY devices have special fonts.
+
+@DefreqList {special, s1 s2 @dots{}}
+@DefreqListEnd {fspecial, f s1 s2 @dots{}}
+@kindex fonts
+@pindex DESC
+Use the @code{special} request to define special fonts. They are
+appended to the list of global special fonts in the given order.
+The first entries in this list are the fonts defined with the
+@code{fonts} command in the @file{DESC} file which are marked as
+special in the corresponding font description files.
+
+Use the @code{fspecial} request to designate special fonts
+only when font@w{ }@var{f} font is active. They are appended to the
+list of special fonts for @var{f} in the given order. Initially, this
+list is empty.
+@endDefreq
@c ---------------------------------------------------------------------
@@ -6151,15 +8345,73 @@ To be written.
@cindex artificial fonts
@cindex fonts, artificial
-There are a number of requests for artificially creating fonts. These
-are largely vestiges of the days when output devices did not have a
-wide variety of fonts, and when @code{nroff} and @code{troff} were
-separate programs. These are no longer necessary in GNU
-@code{troff}. Nevertheless, they are supported.
+There are a number of requests and escapes for artificially creating
+fonts. These are largely vestiges of the days when output devices
+did not have a wide variety of fonts, and when @code{nroff} and
+@code{troff} were separate programs. Most of them are no longer
+necessary in GNU @code{troff}. Nevertheless, they are supported.
+
+@DefescList {\\H, ', height, '}
+@DefescItem {\\H, ', @t{+}@Var{height}, '}
+@DefescListEnd {\\H, ', @t{-}@Var{height}, '}
+@cindex changing the font height (@code{\H})
+@cindex font height, changing (@code{\H})
+@cindex height, font, changing (@code{\H})
+Change (increment, decrement) the height of the current font, but not
+the width. If @var{height} is zero, restore the original height.
+Default scaling indicator is @samp{z}.
+
+Currently, only the @option{-Tps} device supports this feature.
+
+Note that @code{\H} doesn't produce an input token in @code{gtroff}.
+As a consequence, it can be used in requests like @code{mc} (which
+expects a single character as an argument) to change the font on
+the fly:
+
+@Example
+.mc \H'+5z'x\H'0'
+@endExample
+
+In compatibility mode, @code{gtroff} behaves differently: If an
+increment or decrement is used, it is always taken relative to the
+current point size and not relative to the previously selected font
+height. Thus,
+
+@Example
+.cp 1
+\H'+5'test \H'+5'test
+@endExample
+
+@noindent
+prints the word @samp{test} twice with the same font height (five
+points larger than the current font size).
+@endDefesc
+
+@DefescList {\\S, ', slant, '}
+@cindex changing the font slant (@code{\S})
+@cindex font slant, changing (@code{\S})
+@cindex slant, font, changing (@code{\S})
+Slant the current font by @var{slant} degrees. Positive values slant
+to the right.
+
+Currently, only the @option{-Tps} device supports this feature.
+
+Note that @code{\S} doesn't produce an input token in @code{gtroff}.
+As a consequence, it can be used in requests like @code{mc} (which
+expects a single character as an argument) to change the font on
+the fly:
+
+@Example
+.mc \S'20'x\S'0'
+@endExample
+
+This request is incorrectly documented in the original @acronym{UNIX}
+troff manual; the slant is always set to an absolute value.
+@endDefesc
-@cindex underlining
@Defreq {ul, [@Var{lines}]}
-The @code{ul} request normally underlines subsequent lines if a tty
+@cindex underlining (@code{ul})
+The @code{ul} request normally underlines subsequent lines if a TTY
output device is used. Otherwise, the lines are printed in italics
(only the term `underlined' is used in the following). The single
argument is the number of input lines to be underlined; with no
@@ -6174,43 +8426,39 @@ underline font is activated. Within the span of a @code{ul} request,
it is possible to change fonts, but after the last line affected by
@code{ul} the saved font is restored.
-@cindex underline font
-@cindex font, for underlining
-@rqindex uf
-This command is associated with the current environment. The
-underline font can be changed with the @code{uf} request.
+This number of lines still to be underlined is associated with the
+current environment (@pxref{Environments}). The underline font can be
+changed with the @code{uf} request.
@c XXX @xref should be changed to grotty
-@xref{Troff and Nroff Mode}, for a discussion how underlining is
-implemented in for tty output devices, and which problems can arise.
+@c @xref{Troff and Nroff Mode}, for a discussion how underlining is
+@c implemented in for TTY output devices, and which problems can arise.
The @code{ul} request does not underline spaces.
@endDefreq
-@cindex continuous underlining
-@cindex underlining, continuous
@Defreq {cu, [@Var{lines}]}
+@cindex continuous underlining (@code{cu})
+@cindex underlining, continuous (@code{cu})
The @code{cu} request is similar to @code{ul} but underlines spaces as
-well (if a tty output device is used).
+well (if a TTY output device is used).
@endDefreq
-@cindex underline font
-@cindex font for underlining
-@rqindex ul
-@rqindex cu
@Defreq {uf, font}
+@cindex underline font (@code{uf})
+@cindex font for underlining (@code{uf})
Set the underline font (globally) used by @code{ul} and @code{cu}. By
default, this is the font at position@w{ }2. @var{font} can be either
a non-negative font position or the name of a font.
@endDefreq
-@cindex imitating bold face
-@cindex bold face, imitating
-@Defreq {bd, font [@Var{offset}]}
-@Defreqx {bd, font1 font2 [@Var{offset}]}
-@Defregx {.b}
-Artificially create a bold font by printing each character twice,
+@DefreqList {bd, font [@Var{offset}]}
+@DefreqItem {bd, font1 font2 [@Var{offset}]}
+@DefregListEnd {.b}
+@cindex imitating bold face (@code{bd})
+@cindex bold face, imitating (@code{bd})
+Artificially create a bold font by printing each glyph twice,
slightly offset.
Two syntax forms are available.
@@ -6219,7 +8467,7 @@ Two syntax forms are available.
@item
Imitate a bold font unconditionally. The first argument specifies the
font to embolden, and the second is the number of basic units, minus
-one, by which the two characters is offset. If the second argument is
+one, by which the two glyphs are offset. If the second argument is
missing, emboldening is turned off.
@var{font} can be either a non-negative font position or the name of a
@@ -6229,7 +8477,7 @@ font.
special font is active; in the @code{bd} request, its default unit is
@samp{u}.
-@rqindex fspecial
+@cindex @code{fspecial} request, and imitating bold
@kindex special
@cindex embolding of special fonts
@cindex special fonts, emboldening
@@ -6245,19 +8493,20 @@ command in font files or with the @code{fspecial} request).
@end itemize
@endDefreq
-@cindex constant character space mode
-@cindex mode for constant character space
-@cindex character, constant space
-@rqindex ps
@Defreq {cs, font [@Var{width} [@Var{em-size}]]}
-Switch to and from constant character space mode. If activated, the
-width of every character is @math{@var{width}/36} ems. The em size is
+@cindex constant glyph space mode (@code{cs})
+@cindex mode for constant glyph space (@code{cs})
+@cindex glyph, constant space
+@cindex @code{ps} request, and constant glyph space mode
+Switch to and from @dfn{constant glyph space mode}. If activated, the
+width of every glyph is @math{@var{width}/36} ems. The em size is
given absolutely by @var{em-size}; if this argument is missing, the em
value is taken from the current font size (as set with the @code{ps}
request) when the font is effectively in use. Without second and
-third argument, constant character space mode is deactivated.
+third argument, constant glyph space mode is deactivated.
-Default unit for @var{em-size} is @samp{z}; @var{width} is an integer.
+Default scaling indicator for @var{em-size} is @samp{z}; @var{width} is
+an integer.
@endDefreq
@c ---------------------------------------------------------------------
@@ -6267,26 +8516,27 @@ Default unit for @var{em-size} is @samp{z}; @var{width} is an integer.
@cindex ligatures and kerning
@cindex kerning and ligatures
-Ligatures are groups of characters that are run together. For
-example, the letters `f' and `i' can form a ligature `fi' as in the
-word `file'. This produces a cleaner look (albeit subtle) to the
-printed output. Usually, ligatures are not available in fonts for tty
-output devices.
+Ligatures are groups of characters that are run together, i.e, producing
+a single glyph. For example, the letters `f' and `i' can form a
+ligature `fi' as in the word `file'. This produces a cleaner look
+(albeit subtle) to the printed output. Usually, ligatures are not
+available in fonts for TTY output devices.
Most @sc{PostScript} fonts support the fi and fl ligatures. The C/A/T
-typesetter that was the target of AT&T @code{troff} also supported
-`ff', `ffi', and `ffl' ligatures. Advanced typesetters or `expert'
-fonts may include ligatures for `ft' and `ct', although GNU
+typesetter that was the target of @acronym{AT&T} @code{troff} also
+supported `ff', `ffi', and `ffl' ligatures. Advanced typesetters or
+`expert' fonts may include ligatures for `ft' and `ct', although GNU
@code{troff} does not support these (yet).
-@cindex ligatures enabled register
-@Defreq {lg, [@Var{flag}]}
-@Defregx {.lg}
-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 read-only number register @code{.lg} (set to
-1 or@w{ }2 if ligatures are enabled, 0@w{ }otherwise).
+@DefreqList {lg, [@Var{flag}]}
+@DefregListEnd {.lg}
+@cindex activating ligatures (@code{lg})
+@cindex ligatures, activating (@code{lg})
+@cindex ligatures enabled register (@code{.lg})
+Switch the ligature mechanism on or off; if the parameter is non-zero
+or missing, ligatures are enabled, otherwise disabled. Default is on.
+The current ligature mode can be found in the read-only number register
+@code{.lg} (set to 1 or@w{ }2 if ligatures are enabled, 0@w{ }otherwise).
Setting the ligature mode to@w{ }2 enables the two-character ligatures
(fi, fl, and ff) and disables the three-character ligatures (ffi and
@@ -6294,28 +8544,30 @@ ffl).
@endDefreq
@dfn{Pairwise kerning} is another subtle typesetting mechanism that
-modifies the distance between a character pair to improve readability.
+modifies the distance between a glyph pair to improve readability.
In most cases (but not always) the distance is decreased.
@ifnotinfo
For example, compare the combination of the letters `V' and `A'. With
kerning, `VA' is printed. Without kerning it appears as `V@w{}A'.
@end ifnotinfo
-Typewriter-like fonts and fonts for terminals where all characters
+Typewriter-like fonts and fonts for terminals where all glyphs
have the same width don't use kerning.
-@cindex kerning enabled register
-@Defreq {kern, [@Var{flag}]}
-@Defregx {.kern}
-Kerning can be activated with the @code{kern} request. If the
-parameter is non-zero or missing, enable pairwise kerning, otherwise
-disable it. The read-only number register @code{.kern} is set to@w{
-}1 if pairwise kerning is enabled, 0@w{ }otherwise.
-
-@cindex zero width space character
-@cindex character, zero width space
-@cindex space character, zero width
+@DefreqList {kern, [@Var{flag}]}
+@DefregListEnd {.kern}
+@cindex activating kerning (@code{kern})
+@cindex kerning, activating (@code{kern})
+@cindex kerning enabled register (@code{.kern})
+Switch kerning on or off. If the parameter is non-zero or missing,
+enable pairwise kerning, otherwise disable it. The read-only number
+register @code{.kern} is set to@w{ }1 if pairwise kerning is enabled,
+0@w{ }otherwise.
+
+@cindex zero width space character (@code{\&})
+@cindex character, zero width space (@code{\&})
+@cindex space character, zero width (@code{\&})
If the font description file contains pairwise kerning information,
-characters from that font are kerned. Kerning between two characters
+glyphs from that font are kerned. Kerning between two glyphs
can be inhibited by placing @code{\&} between them: @samp{V\&A}.
@xref{Font File Format}.
@@ -6323,15 +8575,17 @@ can be inhibited by placing @code{\&} between them: @samp{V\&A}.
@cindex track kerning
@cindex kerning, track
-@dfn{Track kerning} expands or reduces the space between characters.
+@dfn{Track kerning} expands or reduces the space between glyphs.
This can be handy, for example, if you need to squeeze a long word
onto a single line or spread some text to fill a narrow column. It
must be used with great care since it is usually considered bad
typography if the reader notices the effect.
@Defreq {tkf, f s1 n1 s2 n2}
+@cindex activating track kerning (@code{tkf})
+@cindex track kerning, activating (@code{tkf})
Enable track kerning for font@w{ }@var{f}. If the current font is@w{
-}@var{f} the width of every character is increased by an amount
+}@var{f} the width of every glyph is increased by an amount
between @var{n1} and @var{n2} (@var{n1}, @var{n2} can be negative); if
the current point size is less than or equal to @var{s1} the width is
increased by @var{n1}; if it is greater than or equal to @var{s2} the
@@ -6339,28 +8593,33 @@ width is increased by @var{n2}; if the point size is greater than or
equal to @var{s1} and less than or equal to @var{s2} the increase in
width is a linear function of the point size.
-The default unit is @samp{z} for @var{s1} and @var{s2}, @samp{p} for
-@var{n1} and @var{n2}.
+The default scaling indicator is @samp{z} for @var{s1} and @var{s2},
+@samp{p} for @var{n1} and @var{n2}.
+
+Note that the track kerning amount is added even to the rightmost glyph
+in a line; for large values it is thus recommended to increase the line
+length by the same amount to compensate it.
@endDefreq
Sometimes, when typesetting letters of different fonts, more or less
space at such boundaries are needed. There are two escapes to help
with this.
-@cindex italic correction
-@cindex correction, italic
-@cindex correction between italic and roman character
-@cindex roman character, correction after italic character
-@cindex italic character, correction before roman character
@Defesc {\\/, , , }
-Increase the width of the preceding character so that the spacing
-between that character and the following character is correct if the
-following character is a roman character. For example, if an
+@cindex italic correction (@code{\/})
+@cindex correction, italic (@code{\/})
+@cindex correction between italic and roman glyph (@code{\/}, @code{\,})
+@cindex roman glyph, correction after italic glyph (@code{\/})
+@cindex italic glyph, correction before roman glyph (@code{\/})
+@cindex glyph, italic correction (@code{\/})
+Increase the width of the preceding glyph so that the spacing
+between that glyph and the following glyph is correct if the
+following glyph is a roman glyph. For example, if an
italic@w{ }@code{f} is immediately followed by a roman right
-parenthesis, then in many fonts the top right portion of the @code{f}
+parenthesis, then in many fonts the top right portion of the@w{ }@code{f}
overlaps the top left of the right parenthesis. Use this escape
-sequence whenever an italic character is immediately followed by a
-roman character without any intervening space. This small amount of
+sequence whenever an italic glyph is immediately followed by a
+roman glyph without any intervening space. This small amount of
space is also called @dfn{italic correction}.
@iftex
@@ -6375,16 +8634,17 @@ space is also called @dfn{italic correction}.
@end iftex
@endDefesc
-@cindex left italic correction
-@cindex correction, left italic
-@cindex roman character, correction before italic character
-@cindex italic character, correction after roman character
@Defesc {\\\,, , , }
-Modify the spacing of the following character so that the spacing
-between that character and the preceding character is correct if the
-preceding character is a roman character. Use this escape sequence
-whenever a roman character is immediately followed by an italic
-character without any intervening space. In analogy to above, this
+@cindex left italic correction (@code{\,})
+@cindex correction, left italic (@code{\,})
+@cindex glyph, left italic correction (@code{\,})
+@cindex roman glyph, correction before italic glyph (@code{\,})
+@cindex italic glyph, correction after roman glyph (@code{\,})
+Modify the spacing of the following glyph so that the spacing
+between that glyph and the preceding glyph is correct if the
+preceding glyph is a roman glyph. Use this escape sequence
+whenever a roman glyph is immediately followed by an italic
+glyph without any intervening space. In analogy to above, this
space could be called @dfn{left italic correction}, but this term
isn't used widely.
@@ -6406,7 +8666,7 @@ is to stop interaction of a character with its surrounding.
@itemize @bullet
@item
-It prevents the insertion of extra space after an end of sentence
+It prevents the insertion of extra space after an end-of-sentence
character.
@Example
@@ -6430,7 +8690,7 @@ an input line.
@endExample
@item
-It prevents kerning between two characters.
+It prevents kerning between two glyphs.
@ifnotinfo
@example
@@ -6449,6 +8709,32 @@ request (@pxref{Character Translations}).
@end itemize
@endDefesc
+@Defesc {\\), , , }
+This escape is similar to @code{\&} except that it behaves like a
+character declared with the @code{cflags} request to be transparent
+for the purposes of an end-of-sentence character.
+
+Its main usage is in macro definitions to protect against arguments
+starting with a control character.
+
+@Example
+.de xxx
+\)\\$1
+..
+.de yyy
+\&\\$1
+..
+This is a test.\c
+.xxx '
+This is a test.
+ @result{}This is a test.' This is a test.
+This is a test.\c
+.yyy '
+This is a test.
+ @result{}This is a test.' This is a test.
+@endExample
+@endDefesc
+
@c =====================================================================
@@ -6463,7 +8749,7 @@ request (@pxref{Character Translations}).
@cindex spacing, vertical
@code{gtroff} uses two dimensions with each line of text, type size
and vertical spacing. The @dfn{type size} is approximately the height
-of the tallest character.@footnote{This is usually the parenthesis.
+of the tallest glyph.@footnote{This is usually the parenthesis.
Note that in most cases the real dimensions of the glyphs in a font
are @emph{not} related to its type size! For example, the standard
@sc{PostScript} font families `Times Roman', `Helvetica', and
@@ -6479,7 +8765,7 @@ term papers). By default, @code{gtroff} uses 10@w{ }point type on
@cindex leading
The difference between type size and vertical spacing is known, by
-typesetters, as @dfn{leading}.
+typesetters, as @dfn{leading} (this is pronounced `ledding').
@menu
* Changing Type Sizes::
@@ -6490,22 +8776,25 @@ typesetters, as @dfn{leading}.
@node Changing Type Sizes, Fractional Type Sizes, Sizes, Sizes
@subsection Changing Type Sizes
-@cindex changing type sizes
-@cindex type sizes, changing
-
-@Defreq {ps, [@Var{size}]}
-@Defreqx {ps, @t{+}@Var{size}}
-@Defreqx {ps, @t{-}@Var{size}}
-@Defescx {\\s, , size, }
-@Defregx {.s}
+
+@DefreqList {ps, [@Var{size}]}
+@DefreqItem {ps, @t{+}@Var{size}}
+@DefreqItem {ps, @t{-}@Var{size}}
+@DefescItem {\\s, , size, }
+@DefregListEnd {.s}
+@cindex changing type sizes (@code{ps}, @code{\s})
+@cindex type sizes, changing (@code{ps}, @code{\s})
+@cindex point sizes, changing (@code{ps}, @code{\s})
Use the @code{ps} request or the @code{\s} escape to change (increase,
decrease) the type size (in points). Specify @var{size} as either an
absolute point size, or as a relative change from the current size.
The size@w{ }0, or no argument, goes back to the previous size.
-Default unit of @code{size} is @samp{z}. If @code{size} is zero or
-negative, it is set to 1@dmn{u}.
+Default scaling indicator of @code{size} is @samp{z}. If @code{size}
+is zero or negative, it is set to 1@dmn{u}.
+@cindex type size registers (@code{.s}, @code{.ps})
+@cindex point size registers (@code{.s}, @code{.ps})
The read-only number register @code{.s} returns the point size in
points as a decimal fraction. This is a string. To get the point
size in scaled points, use the @code{.ps} register instead.
@@ -6548,26 +8837,52 @@ Increase or decrease the point size by @var{nn}@w{ }points. @var{nn}
must be exactly two digits.
@end table
+Note that @code{\s} doesn't produce an input token in @code{gtroff}.
+As a consequence, it can be used in requests like @code{mc} (which
+expects a single character as an argument) to change the font on
+the fly:
+
+@Example
+.mc \s[20]x\s[0]
+@endExample
+
@xref{Fractional Type Sizes}, for yet another syntactical form of
using the @code{\s} escape.
+@endDefreq
+@Defreq {sizes, s1 s2 @dots{} sn [0]}
Some devices may only have certain permissible sizes, in which case
@code{gtroff} rounds to the nearest permissible size.
+The @file{DESC} file specifies which sizes are permissible for the device.
+
+Use the @code{sizes} request to change the permissible sizes
+for the current output device.
+Arguments are in scaled points;
+the @code{sizescale} line in the
+@file{DESC} file for the output device
+provides the scaling factor.
+For example, if the scaling factor is 1000,
+then the value 12000 is 12@w{ }points.
+
+Each argument can be a single point size (such as @samp{12000}),
+or a range of sizes (such as @samp{4000-72000}).
+You can optionally end the list with a zero.
@endDefreq
-@cindex current type size register
-@cindex current vertical spacing register
-@Defreq {vs, [@Var{space}]}
-@Defreqx {vs, @t{+}@Var{space}}
-@Defreqx {vs, @t{-}@Var{space}}
-@Defregx {.v}
+@DefreqList {vs, [@Var{space}]}
+@DefreqItem {vs, @t{+}@Var{space}}
+@DefreqItem {vs, @t{-}@Var{space}}
+@DefregListEnd {.v}
+@cindex changing vertical line spacing (@code{vs})
+@cindex vertical line spacing, changing (@code{vs})
+@cindex vertical line spacing register (@code{.v})
Change (increase, decrease) the vertical spacing by @var{space}. The
-default unit is @samp{p}.
+default scaling indicator is @samp{p}.
If @code{vs} is called without an argument, the vertical spacing is
reset to the previous value before the last call to @code{vs}.
-@vindex .V
+@cindex @code{.V} register, and @code{vs}
@code{gtroff} creates a warning of type @samp{range} if @var{space} is
zero or negative; the vertical spacing is then set to the vertical
resolution (as given in the @code{.V} register).
@@ -6577,30 +8892,85 @@ spacing; it is associated with the current environment
(@pxref{Environments}).
@endDefreq
-@c XXX example
+@cindex vertical line spacing, effective value
+The effective vertical line spacing consists of four components.
+
+@itemize @bullet
+@item
+The vertical line spacing as set with the @code{vs} request.
+
+@cindex post-vertical line spacing
+@cindex line spacing, post-vertical (@code{pvs})
+@item
+The @dfn{post-vertical line spacing} as set with the @code{pvs} request.
+This is vertical space which will be added after a line has been
+output.
+
+@cindex extra pre-vertical line space (@code{\x})
+@cindex line space, extra pre-vertical (@code{\x})
+@item
+The @dfn{extra pre-vertical line space} as set with the @code{\x} request,
+using a negative value. This is vertical space which will be added once
+before the current line has been output.
+
+@cindex extra post-vertical line space (@code{\x})
+@cindex line space, extra post-vertical (@code{\x})
+@item
+The @dfn{extra post-vertical line space} as set with the @code{\x} request,
+using a positive value. This is vertical space which will be added once
+after the current line has been output.
+@end itemize
+
+@cindex double-spacing (@code{vs}, @code{pvs})
+It is usually better to use @code{vs} or @code{pvs} instead of @code{ls}
+to produce double-spaced documents: @code{vs} and @code{pvs} have a finer
+granularity for the inserted vertical space compared to @code{ls};
+furthermore, certain preprocessors assume single-spacing.
+
+@xref{Manipulating Spacing}, for more details on the @code{\x} escape
+and the @code{ls} request.
+
+@DefreqList {pvs, [@Var{space}]}
+@DefreqItem {pvs, @t{+}@Var{space}}
+@DefreqItem {pvs, @t{-}@Var{space}}
+@DefregListEnd {.pvs}
+@cindex @code{ls} request, alternative to (@code{pvs})
+@cindex post-vertical line spacing, changing (@code{pvs})
+@cindex post-vertical line spacing register (@code{.pvs})
+Change (increase, decrease) the post-vertical spacing by
+@var{space}. The default scaling indicator is @samp{p}.
+
+If @code{pvs} is called without an argument, the post-vertical spacing is
+reset to the previous value before the last call to @code{pvs}.
+
+@code{gtroff} creates a warning of type @samp{range} if @var{space} is
+zero or negative; the vertical spacing is then set to zero.
+
+The read-only number register @code{.pvs} contains the current
+post-vertical spacing; it is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
-@ignore
-@Example
-... .sz macro example?? ...
-@endExample
-@end ignore
@c ---------------------------------------------------------------------
@node Fractional Type Sizes, , Changing Type Sizes, Sizes
@subsection Fractional Type Sizes
@cindex fractional type sizes
+@cindex fractional point sizes
@cindex type sizes, fractional
+@cindex point sizes, fractional
+@cindex sizes, fractional
@cindex @code{s} unit
@cindex unit, @code{s}
@cindex @code{z} unit
@cindex unit, @code{z}
-@rqindex ps
-@rqindex cs
-@rqindex tkf
-@esindex \H
-@esindex \s
+@cindex @code{ps} request, with fractional type sizes
+@cindex @code{cs} request, with fractional type sizes
+@cindex @code{tkf} request, with fractional type sizes
+@cindex @code{\H}, with fractional type sizes
+@cindex @code{\s}, with fractional type sizes
A @dfn{scaled point} is equal to @math{1/@var{sizescale}} points,
where @var{sizescale} is specified in the @file{DESC} file (1@w{ }by
default). There is a new scale indicator @samp{z} which has the
@@ -6632,7 +9002,6 @@ 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.
-@vindex .s
@Defreg {.ps}
A read-only number register returning the point size in scaled points.
@@ -6640,12 +9009,12 @@ A read-only number register returning the point size in scaled points.
(@pxref{Environments}).
@endDefreg
-@cindex last-requested point size register
-@cindex point size, last-requested
-@vindex .ps
-@vindex .s
-@Defreg {.psr}
-@Defregx {.sr}
+@DefregList {.psr}
+@DefregListEnd {.sr}
+@cindex last-requested point size registers (@code{.psr}, @code{.sr})
+@cindex point size registers, last-requested (@code{.psr}, @code{.sr})
+@cindex @code{.ps} register, in comparison with @code{.psr}
+@cindex @code{.s} register, in comparison with @code{.sr}
The last-requested point size in scaled points is contained in the
@code{.psr} read-only number register. The last requested point size
in points as a decimal fraction can be found in @code{.sr}. This is a
@@ -6653,9 +9022,9 @@ string-valued read-only number register.
Note that the requested point sizes are device-independent, whereas
the values returned by the @code{.ps} and @code{.s} registers are not.
-For example, if a point size of 11@dmn{pt} is requested for a DVI
-device, 10.95@dmn{pt} are actually used (as specified in the
-@file{DESC} file).
+For example, if a point size of 11@dmn{pt} is requested, and a
+@code{sizes} request (or a @code{sizescale} line in a @file{DESC} file)
+specifies 10.95@dmn{pt} instead, this value is actually used.
Both registers are associated with the current environment
(@pxref{Environments}).
@@ -6667,7 +9036,7 @@ fractional type sizes:
@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
+Set the point size to @var{n}@w{ }scaled points; @var{n}@w{ }is a numeric
expression with a default scale indicator of @samp{z}.
@item \s[+@var{n}]
@@ -6678,8 +9047,8 @@ expression with a default scale indicator of @samp{z}.
@itemx \s'-@var{n}'
@itemx \s+'@var{n}'
@itemx \s-'@var{n}'
-Increase or or decrease the point size by @var{n} scaled points;
-@var{n} is a numeric expression with a default scale indicator of
+Increase or or decrease the point size by @var{n}@w{ }scaled points;
+@var{n}@w{ }is a numeric expression with a default scale indicator of
@samp{z}.
@end table
@@ -6696,38 +9065,46 @@ Increase or or decrease the point size by @var{n} scaled points;
convenience (i.e.@: there are no built-in strings exept @code{.T}, but
even this is a read-write string variable).
-@cindex string interpolation
-@cindex string expansion
-@cindex interpolation of strings
-@cindex expansion of strings
-@Defreq {ds, name [@Var{string}]}
-@Defescx {\\*, , n, }
-@Defescx {\\*, @lparen{}, nm, }
-@Defescx {\\*, @lbrack{}, name, @rbrack{}}
-Define and access a string variable @var{name} (one-character name
-@var{n}, two-character name @var{nm}). If @var{name} already exists,
-@code{ds} overwrites the previous definition.
+@DefreqList {ds, name [@Var{string}]}
+@DefreqItem {ds1, name [@Var{string}]}
+@DefescItem {\\*, , n, }
+@DefescItem {\\*, @lparen{}, nm, }
+@DefescListEnd {\\*, @lbrack{}, name arg1 arg2 @dots{}, @rbrack{}}
+@cindex string interpolation (@code{\*})
+@cindex string expansion (@code{\*})
+@cindex interpolation of strings (@code{\*})
+@cindex expansion of strings (@code{\*})
+@cindex string arguments
+@cindex arguments, of strings
+Define and access a string variable @var{name} (one-character name@w{
+}@var{n}, two-character name @var{nm}). If @var{name} already exists,
+@code{ds} overwrites the previous definition. Only the syntax form
+using brackets can take arguments which are handled identically to
+macro arguments; the single exception is that a closing bracket as an
+argument must be enclosed in double quotes. @xref{Request Arguments},
+and @ref{Parameters}.
Example:
@Example
-.ds UX \s-1UNIX\s0\u\s-3tm\s0\d
+.ds foo a \\$1 test
.
-The \*(UX Operating System
+This is \*[foo nice].
+ @result{} This is a nice test.
@endExample
The @code{\*} escape @dfn{interpolates} (expands in-place) a
previously-defined string variable. To be more precise, the stored
string is pushed onto the input stack which is then parsed by
@code{gtroff}. Similar to number registers, it is possible to nest
-strings, i.e. a string variables can be called within string
-variables.
+strings, i.e. string variables can be called within string variables.
-If the string named by the @code{\*} does not exist, it is defined as
-empty, and a warning of type @samp{mac} is emitted (see
+If the string named by the @code{\*} escape does not exist, it is
+defined as empty, and a warning of type @samp{mac} is emitted (see
@ref{Debugging}, for more details).
@cindex comments, with @code{ds}
+@cindex @code{ds} request, and comments
@strong{Caution:} Unlike other requests, the second argument to the
@code{ds} request takes up the entire line including trailing spaces.
This means that comments on a line with such a request can introduce
@@ -6749,6 +9126,7 @@ escape adjacent with the end of the string.
@cindex quotes, trailing
@cindex leading spaces with @code{ds}
@cindex spaces with @code{ds}
+@cindex @code{ds} request, and leading spaces
To produce leading space the string can be started with a double
quote. No trailing quote is needed; in fact, any trailing quote is
included in your string.
@@ -6757,11 +9135,10 @@ included in your string.
.ds sign " Yours in a white wine sauce,
@endExample
-@esindex \@key{RET}
@cindex multi-line strings
@cindex strings, multi-line
-@cindex newline character in strings, escaping
-@cindex escaping newline characters in strings
+@cindex newline character, in strings, escaping
+@cindex escaping newline characters, in strings
Strings are not limited to a single line of text. A string can span
several lines by escaping the newlines with a backslash. The
resulting string is stored @emph{without} the newlines.
@@ -6772,11 +9149,34 @@ of text are on these \
next several lines
@endExample
-It is not possible to have real newlines in a string.
+It is not possible to have real newlines in a string. To put a single
+double quote character into a string, use two consecutive double quote
+characters.
-@cindex name space of macros and strings
-@cindex macros, shared name space with strings
-@cindex strings, shared name space with macros
+The @code{ds1} request turns off compatibility mode
+while interpreting a string. To be more precise, a @dfn{compatibility
+save} input token is inserted at the beginning of the string, and a
+@dfn{compatibility restore} input token at the end.
+
+@Example
+.nr xxx 12345
+.ds aa The value of xxx is \\n[xxx].
+.ds1 bb The value of xxx ix \\n[xxx].
+.
+.cp 1
+.
+\*(aa
+ @result{} warning: number register `[' not defined
+ @result{} The value of xxx is 0xxx].
+\*(bb
+ @result{} The value of xxx ix 12345.
+@endExample
+
+@cindex name space, common, of macros, diversions, and strings
+@cindex common name space of macros, diversions, and strings
+@cindex macros, shared name space with strings and diversions
+@cindex strings, shared name space with macros and diversions
+@cindex diversions, shared name space with macros and strings
Strings, macros, and diversions (and boxes) share the same name space.
Internally, even the same mechanism is used to store them. This has
some interesting consequences. For example, it is possible to call a
@@ -6795,8 +9195,7 @@ This is
@result{} This is a funny test.
@endExample
-Diversions and boxes can be also called with string syntax. It is not
-possible to pass arguments to a macro if called with @code{\*}.
+Diversions and boxes can be also called with string syntax.
Another consequence is that you can copy one-line diversions or boxes
to a string.
@@ -6838,8 +9237,13 @@ final newline from a diversion. Another disadvantage is that the
spaces in the copied string are already formatted, making them
unstretchable. This can cause ugly results.
-@rqindex chop
-@rqindex unformat
+@cindex stripping final newline in diversions
+@cindex diversion, stripping final newline
+@cindex final newline, stripping in diversions
+@cindex newline, final, stripping in diversions
+@cindex horizontal space, unformatting
+@cindex space, horizontal, unformatting
+@cindex unformatting horizontal space
A clean solution to this problem is available in GNU @code{troff},
using the requests @code{chop} to remove the final newline of a
diversion, and @code{unformat} to make the horizontal spaces
@@ -6861,9 +9265,10 @@ This is \*[xxx].
@xref{Gtroff Internals}, for more information.
@endDefreq
-@cindex appending to strings
-@cindex strings, appending
-@Defreq {as, name [@Var{string}]}
+@DefreqList {as, name [@Var{string}]}
+@DefreqListEnd {as1, name [@Var{string}]}
+@cindex appending to a string (@code{as})
+@cindex string, appending (@code{as})
The @code{as} request is similar to @code{ds} but appends @var{string}
to the string stored as @var{name} instead of redefining it. If
@var{name} doesn't exist yet, it is created.
@@ -6871,60 +9276,85 @@ to the string stored as @var{name} instead of redefining it. If
@Example
.as sign " with shallots, onions and garlic,
@endExample
+
+The @code{as1} request is similar to @code{as}, but compatibility mode
+is switched off while the appended string is interpreted. To be more
+precise, a @dfn{compatibility save} input token is inserted at the
+beginning of the appended string, and a @dfn{compatibility restore}
+input token at the end.
@endDefreq
Rudimentary string manipulation routines are given with the next two
requests.
-@cindex substring
@Defreq {substring, str n1 [@Var{n2}]}
-Replace the string in register@w{ }@var{str} with the substring
+@cindex substring (@code{substring})
+Replace the string named @var{str} 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
+in the string has index@w{ }0. If @var{n2} is omitted, it is taken to
be equal to the string's length. If the index value @var{n1} or
-@var{n2} is negative or zero, it is 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{ }@minus{}1, etc.
+@var{n2} is negative, it is counted from the end of the
+string, going backwards: The last character has index@w{ }@minus{}1, the
+character before the last character has index@w{ }@minus{}2, etc.
@Example
.ds xxx abcdefgh
-.substring xxx 2 -3
+.substring xxx 1 -4
\*[xxx]
@result{} bcde
@endExample
@endDefreq
-@cindex length of a string
-@cindex string, length of
@Defreq {length, reg str}
-Compute the length of @var{str} and returns it in the number
-register@w{ }@var{reg}. If @var{reg} doesn't exist, it is created.
+@cindex length of a string (@code{length})
+@cindex string, length of (@code{length})
+Compute the number of characters of @var{str} and return it in the
+number register @var{reg}. If @var{reg} doesn't exist, it is created.
+@code{str} is read in copy mode.
@Example
-.ds xxx abcdefgh
-.length yyy xxx
+.ds xxx abcd\h'3i'efgh
+.length yyy \n[xxx]
\n[yyy]
- @result{} 8
+ @result{} 14
@endExample
@endDefreq
-@cindex rename request
-@cindex rename macro
-@cindex rename string
@Defreq {rn, xx yy}
-Rename the request, macro, or string @var{xx} to @var{yy}.
+@cindex renaming request (@code{rn})
+@cindex request, renaming (@code{rn})
+@cindex renaming macro (@code{rn})
+@cindex macro, renaming (@code{rn})
+@cindex renaming string (@code{rn})
+@cindex string, renaming (@code{rn})
+@cindex renaming diversion (@code{rn})
+@cindex diversion, renaming (@code{rn})
+Rename the request, macro, diversion, or string @var{xx} to @var{yy}.
@endDefreq
-@cindex remove request
-@cindex remove macro
-@cindex remove string
@Defreq {rm, xx}
-Remove the request, macro, or string @var{xx}. @code{gtroff} treats
-subsequent invocations as if the object had never been defined.
+@cindex removing request (@code{rm})
+@cindex request, removing (@code{rm})
+@cindex removing macro (@code{rm})
+@cindex macro, removing (@code{rm})
+@cindex removing string (@code{rm})
+@cindex string, removing (@code{rm})
+@cindex removing diversion (@code{rm})
+@cindex diversion, removing (@code{rm})
+Remove the request, macro, diversion, or string @var{xx}. @code{gtroff}
+treats subsequent invocations as if the object had never been defined.
@endDefreq
-@cindex alias
@Defreq {als, new old}
+@cindex alias, string, creating (@code{als})
+@cindex alias, macro, creating (@code{als})
+@cindex alias, diversion, creating (@code{als})
+@cindex creating alias, for string (@code{als})
+@cindex creating alias, for macro (@code{als})
+@cindex creating alias, for diversion (@code{als})
+@cindex string, creating alias (@code{als})
+@cindex macro, creating alias (@code{als})
+@cindex diversion, creating alias (@code{als})
Create an alias named @var{new} for the request, string, macro, or
diversion object named @var{old}. The new name and the old name are
exactly equivalent (it is similar to a hard rather than a soft
@@ -6934,10 +9364,10 @@ type @samp{mac} and ignores the request.
@Defreq {chop, xx}
Remove (chop) the last character from the macro, string, or diversion
-named @var{xx}. This is useful for removing the newline from the end
+named @var{xx}. This is useful for removing the newline from the end
of diversions that are to be interpolated as strings. This command
can be used repeatedly; see @ref{Gtroff Internals}, for details on
-nodes inserted by @code{gtroff} automatically.
+nodes inserted additionally by @code{gtroff}.
@endDefreq
@xref{Identifiers}, and @ref{Comments}.
@@ -6961,10 +9391,8 @@ nodes inserted by @code{gtroff} automatically.
@node Operators in Conditionals, if-else, Conditionals and Loops, Conditionals and Loops
@subsection Operators in Conditionals
-@rqindex if
-@rqindex while
-@cindex @code{if}, operators to use with it
-@cindex @code{while}, operators to use with it
+@cindex @code{if} request, operators to use with
+@cindex @code{while} request, operators to use with
In @code{if} and @code{while} requests, there are several more
operators available:
@@ -6974,17 +9402,16 @@ operators available:
True if the current page is even or odd numbered (respectively).
@item n
-@rqindex nroff
True if the document is being processed in nroff mode (i.e., the
@code{.nroff} command has been issued).
@item t
-@rqindex troff
True if the document is being processed in troff mode (i.e., the
@code{.troff} command has been issued).
@item v
-Always false.
+Always false. This condition is for compatibility with other
+@code{troff} versions only.
@item '@var{xxx}'@var{yyy}'
True if the string @var{xxx} is equal to the string @var{yyy}. Other
@@ -7001,11 +9428,11 @@ false
@endExample
@noindent
-The resulting motions, character sizes, and fonts have to
+The resulting motions, glyph sizes, and fonts have to
match,@footnote{The created output nodes must be identical.
@xref{Gtroff Internals}.} and not the individual motion, size, and
font requests. In the previous example, @samp{|} and @samp{\fR|\fP}
-both result in a roman @samp{|} character with the same point size and
+both result in a roman @samp{|} glyph with the same point size and
at the same location on the page, so the strings are equal. If
@samp{.ft@w{ }I} had been added before the @samp{.ie}, the result
would be ``false'' because (the first) @samp{|} produces an italic
@@ -7017,12 +9444,15 @@ 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}
-@rqindex 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 is also true if @var{ch} has been
-defined by the @code{char} request.
+@item m @var{xxx}
+True if there is a color named @var{xxx}.
+
+@item c @var{g}
+True if there is a glyph @var{g} available@footnote{The name of this
+conditional operator is a misnomer since it tests names of output
+glyphs.}; @var{g} is either an @acronym{ASCII} character or a special
+character (@code{\(@var{gg}} or @code{\[@var{ggg}]}); the condition
+is also true if @var{g} has been defined by the @code{char} request.
@end table
Note that these operators can't be combined with other operators like
@@ -7080,26 +9510,39 @@ more info.
@endExample
@endDefreq
-@c XXX .nop request
+@Defreq{nop, anything}
+Executes @var{anything}.
+This is similar to @code{.if@w{ }1}.
+@endDefreq
-@Defreq {ie, expr anything}
-@Defreqx {el, anything}
+@DefreqList {ie, expr anything}
+@DefreqListEnd {el, anything}
Use the @code{ie} and @code{el} requests to write an if-then-else.
The first request is the `if' part and the latter is the `else' part.
@Example
-.ie n .ls 2 \" double spacing in nroff
-.el .ls 1 \" single spacing in troff
+.ie n .ls 2 \" double-spacing in nroff
+.el .ls 1 \" single-spacing in troff
@endExample
@endDefreq
-@c this is a bug in makeinfo: you can't have `@{' as an argument
-@c to deffn
+@c there is a bug in makeinfo <= 4.1a: you can't have `@{' as an argument
+@c to @deffn
+@c
+@c and in 4.2 you still can't use @{ in macros.
+@c @DefescList {\@{, , , }
+@c @DefescListEnd {\@}, , , }
+@deffn Escape @t{\@{}
+@deffnx Escape @t{\@}}
@esindex \@{
@esindex \@}
-@c @Defesc {\\@@@{, , , }
-@c @Defescx {\\@@@}, , , }
+@cindex begin of conditional block (@code{\@{})
+@cindex end of conditional block (@code{\@}})
+@cindex conditional block, begin (@code{\@{})
+@cindex conditional block, end (@code{\@}})
+@cindex block, conditional, begin (@code{\@{})
+@cindex block, condititional, end (@code{\@}})
In many cases, an if (or if-else) construct needs to execute more than
one request. This can be done using the @code{\@{} and @code{\@}}
escapes. The following example shows the possible ways to use these
@@ -7116,6 +9559,7 @@ escapes (note the position of the opening and closing braces).
. ds rq "\@}
@endExample
@c @endDefesc
+@end deffn
@xref{Expressions}.
@@ -7144,7 +9588,7 @@ to@w{ }0.
Some remarks.
-@rqindex de
+@cindex @code{de} request, and @code{while}
@itemize @bullet
@item
The body of a @code{while} request is treated like the body of a
@@ -7204,16 +9648,16 @@ The closing brace of a @code{while} body must end a line.
@end itemize
@endDefreq
-@rqindex while
-@cindex @code{break}, in a @code{while} loop
-@cindex @code{continue}, in a @code{while} loop
@Defreq {break, }
+@cindex @code{while} request, confusing with @code{br}
+@cindex @code{break} request, in a @code{while} loop
+@cindex @code{continue} request, in a @code{while} loop
Break out of a @code{while} loop. Be sure not to confuse this with
the @code{br} request (causing a line break).
@endDefreq
@Defreq {continue, }
-Finishes the current iteration of a @code{while} loop, immediately
+Finish the current iteration of a @code{while} loop, immediately
restarting the next iteration.
@endDefreq
@@ -7230,14 +9674,16 @@ restarting the next iteration.
A @dfn{macro} is a collection of text and embedded commands which can
be invoked multiple times. Use macros to define common operations.
-@Defreq {de, name [@Var{end}]}
+@DefreqList {de, name [@Var{end}]}
+@DefreqItem {de1, name [@Var{end}]}
+@DefreqListEnd {dei, name [@Var{end}]}
Define a new macro named @var{name}. @code{gtroff} copies subsequent
lines (starting with the next one) into an internal buffer until it
encounters the line @samp{..} (two dots). The optional second
argument to @code{de} changes this to a macro to @samp{.@var{end}}.
-Note that no leading whitespace is allowed in the line containing the
-ending token (either @samp{..} or the macro @samp{.@var{end}}).
+There can be whitespace after the first dot in the line containing the
+ending token (either @samp{.} or macro @samp{@var{end}}).
Here a small example macro called @samp{P} which causes a break and
inserts some vertical space. It could be used to separate paragraphs.
@@ -7249,25 +9695,85 @@ inserts some vertical space. It could be used to separate paragraphs.
..
@endExample
-@c XXX add info about macro definitions in macros.
+The following example defines a macro within another. Remember that
+expansion must be protected twice; once for reading the macro and
+once for executing.
+
+@Example
+\# a dummy macro to avoid a warning
+.de end
+..
+.
+.de foo
+. de bar end
+. nop \f[B]Hallo \\\\$1!\f[]
+. end
+..
+.
+.foo
+.bar Joe
+ @result{} @b{Hallo Joe!}
+@endExample
+
+@noindent
+Since @code{\f} has no expansion, it isn't necessary to protect its
+backslash. Had we defined another macro within @code{bar} which takes
+a parameter, eight backslashes would be necessary before @samp{$1}.
-@c XXX give example for end macro.
+The @code{de1} request turns off compatibility mode
+while executing the macro. On entry, the current compatibility mode
+is saved and restored at exit.
-@c XXX add info about indirect macro calls:
-@c
-@c .de xxx
-@c from yyy\c
-@c ..
-@c
-@c test \*[xxx] test
-@c => test from yyy test
+@Example
+.nr xxx 12345
+.
+.de aa
+The value of xxx is \\n[xxx].
+..
+.de1 bb
+The value of xxx ix \\n[xxx].
+..
+.
+.cp 1
+.
+.aa
+ @result{} warning: number register ' not defined
+ @result{} The value of xxx is 0xxx].
+.bb
+ @result{} The value of xxx ix 12345.
+@endExample
-@c XXX info about common identifier pool for strings, macros, and
-@c diversions.
+The @code{dei} request defines a macro indirectly.
+That is, it expands strings whose names
+are @var{name} or @var{end} before performing the append.
+
+This:
+
+@Example
+.ds xx aa
+.ds yy bb
+.dei xx yy
+@endExample
+
+@noindent
+is equivalent to:
+
+@Example
+.de aa bb
+@endExample
+
+@pindex trace.tmac
+Using @file{trace.tmac}, you can trace calls to @code{de} and @code{de1}.
+
+Note that macro identifiers are shared with identifiers for strings and
+diversions.
@endDefreq
-@cindex appending, to a macro
-@Defreq {am, xx}
+@DefreqList {am, xx}
+@DefreqItem {am1, xx}
+@DefreqListEnd {ami, xx yy}
+@cindex appending to a macro (@code{am})
+@cindex macro, appending (@code{am})
Works similarly to @code{de} except it appends onto the macro named
@var{xx}. So, to make the previously defined @samp{P} macro actually
do indented instead of block paragraphs, add the necessary code to the
@@ -7278,21 +9784,31 @@ existing macro like this:
.ti +5n
..
@endExample
+
+The @code{am1} request turns off compatibility mode
+while executing the appended macro piece. To be more precise, a
+@dfn{compatibility save} input token is inserted at the beginning of
+the appended code, and a @dfn{compatibility restore} input token at
+the end.
+
+The @code{ami} request appends indirectly,
+meaning that @code{gtroff} expands strings whose names
+are @var{xx} or @var{yy} before performing the append.
+
+@pindex trace.tmac
+Using @file{trace.tmac}, you can trace calls to @code{am} and @code{am1}.
@endDefreq
-@cindex alias
-@Defreq {als, new old}
-Create an alias named @var{new} for the request, string, macro, or
-diversion object named @var{old}. The new name and the old name are
-exactly equivalent (it is similar to a hard rather than a soft
-link). If @var{old} is undefined, @code{gtroff} generates a warning of
-type @samp{mac} and ignores the request.
+@xref{Strings}, for the @code{als} request to rename a macro.
+
+The @code{de}, @code{am}, @code{di}, @code{da}, @code{ds}, and
+@code{as} requests (together with its variants) only create a new object
+if the name of the macro, diversion or string diversion is currently
+undefined or if it is defined to be a request; normally they modify the
+value of an existing object.
-The @code{de}, @code{am}, @code{di}, @code{da}, @code{ds},
-and @code{as} requests only create a new object if the name
-of the macro, diversion or string diversion is currently
-undefined or if it is defined to be a request; normally
-they modify the value of an existing object.
+@Defreq {return, }
+Exit a macro, immediately returning to the caller.
@endDefreq
@menu
@@ -7307,19 +9823,14 @@ they modify the value of an existing object.
@cindex copy-in mode
@cindex mode, copy-in
-@esindex \n
-@esindex \$
-@esindex \*
-@esindex \\
-@esindex \@key{RET}
@cindex @code{\n}, when reading text for a macro
@cindex @code{\$}, when reading text for a macro
@cindex @code{\*}, when reading text for a macro
@cindex @code{\\}, when reading text for a macro
@cindex \@key{RET}, when reading text for a macro
-When @code{gtroff} reads in the text for a macro or diversion, it copies
-the text (including request lines, but excluding escapes) into an
-internal buffer. Escapes are converted into an internal form,
+When @code{gtroff} reads in the text for a macro, string, or diversion,
+it copies the text (including request lines, but excluding escapes) into
+an internal buffer. Escapes are converted into an internal form,
except for @code{\n}, @code{\$}, @code{\*}, @code{\\} and
@code{\@key{RET}} which are evaluated and inserted into the text where
the escape was located. This is known as @dfn{copy-in} mode or
@@ -7348,62 +9859,69 @@ The following example prints the numbers 20 and@w{ }10:
@subsection Parameters
@cindex parameters
-@vindex .$
-The arguments to a macro can be examined using a variety of escapes.
-The number of arguments is available in the @code{.$} number register.
+The arguments to a macro or string can be examined using a variety of
+escapes.
+
+@Defreg {.$}
+@cindex number of arguments register (@code{.$})
+The number of arguments passed to a macro or string. This is a read-only
+number register.
+@endDefreg
+
Any individual argument can be retrieved with one of the following
escapes:
+@DefescList {\\$, , n, }
+@DefescItem {\\$, @lparen{}, nn, }
+@DefescListEnd {\\$, @lbrack{}, nnn, @rbrack{}}
@cindex copy-in mode, and macro arguments
-@Defesc {\\$, n, , }
-@Defescx {\\$, @lparen{}, nn, }
-@Defescx {\\$, @lbrack{}, nnn, @rbrack{}}
-The escapes @code{\$@var{n}}, @code{\$(@var{nn}} and
-@code{\$[@var{nnn}]} retrieve the @var{n}@dmn{th}, @var{nn}@dmn{th} or
-@var{nnn}@dmn{th} argument. As usual, the first form only accepts a
-single number (larger than zero), the second a two-digit number (larger
-or equal to@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, use two backslashes on these in actual use to
-prevent interpolation until the macro is actually invoked.
+@cindex macro, arguments (@code{\$})
+@cindex arguments, macro (@code{\$})
+Retrieve the @var{n}@dmn{th}, @var{nn}@dmn{th} or @var{nnn}@dmn{th}
+argument. As usual, the first form only accepts a single number
+(larger than zero), the second a two-digit number (larger or equal
+to@w{ }10), and the third any positive integer value (larger
+than zero). Macros and strings can have an unlimited number of arguments.
+Note that due to copy-in mode, use two backslashes on these in actual use
+to prevent interpolation until the macro is actually invoked.
@endDefesc
@Defreq {shift, [@Var{n}]}
-Shifts the arguments 1@w{ }position, or as
+Shift the arguments 1@w{ }position, or as
many positions as specified by its argument. After executing this
-request, argument@w{ }@var{i} becomes argument @var{i}-@var{n};
+request, argument@w{ }@var{i} becomes argument @math{@var{i}-@var{n}};
arguments 1 to@w{ }@var{n} are no longer available. Shifting by
negative amounts is currently undefined.
@endDefreq
-@Defesc {\\$*, , , }
-@Defescx {\\$@@, , , }
+@DefescList {\\$*, , , }
+@DefescListEnd {\\$@@, , , }
In some cases it is convenient to use all of the arguments at once (for
example, to pass the arguments along to another macro). The @code{\$*}
escape concatenates all the arguments separated by spaces. A
similar escape is @code{\$@@}, which concatenates all the
arguments with each surrounded by double quotes, and separated by
-spaces.
+spaces. If not in compatibility mode, the input level of double quotes
+is preserved (see @ref{Request Arguments}).
@endDefesc
-@rqindex als
-@cindex @code{als}, use with @code{\$0}
@Defesc {\\$0, , , }
+@cindex macro name register (@code{\$0})
+@cindex @code{als} request, and @code{\$0}
The name used to invoke the current macro.
The @code{als} request can make a macro have more than one name.
@Example
-.de vl
-.ie \\n(.$=1 .ds Vl Pre-Release Version
-.el .ds Vl Version \\$3, \\$4.
+.de generic-macro
+. ...
+. if \\n[error] \@{\
+. tm \\$0: Houston, we have a problem.
+. return
+. \@}
..
-@endExample
-
-@noindent
-This would be called as
-
-@Example
-.vl $Id: groff.texinfo,v 1.77 2001/05/07 13:36:24 wlemb Exp $
+.
+.als foo generic-macro
+.als bar generic-macro
@endExample
@endDefesc
@@ -7417,102 +9935,167 @@ This would be called as
@cindex page motions
@cindex motions, page
-@cindex @code{sp}, as vertical page motion
-@Defreq {sp, [@Var{len}]}
-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.
-@endDefreq
-
-@Defreq {mk, [@Var{reg}]}
-@Defreqx {rt, reg}
+@xref{Manipulating Spacing}, for a discussion of the main request for
+vertical motion, @code{sp}.
+
+@DefreqList {mk, [@Var{reg}]}
+@DefreqListEnd {rt, [@Var{dist}]}
+@cindex marking vertical page location (@code{mk})
+@cindex page location, vertical, marking (@code{mk})
+@cindex location, vertical, page, marking (@code{mk})
+@cindex vertical page location, marking (@code{mk})
+@cindex returning to marked vertical page location (@code{rt})
+@cindex page location, vertical, returning to marked (@code{rt})
+@cindex location, vertical, page, returning to marked (@code{rt})
+@cindex vertical page location, returning to marked (@code{rt})
The request @code{mk} can be used to mark a location on a page, for
-movement to later. This request takes a register name as an argument in
-which to store the current page location. With no argument it
-stores the location in an internal register. The results of this can be
-used later by the @code{rt} or the @code{sp} request. The @code{rt}
-request returns @emph{upwards} to the location given in the register
-name given as an argument; with no argument it returns to the
-location marked with the @code{mk} request.
-
-@c XXX example
-@ignore
+movement to later. This request takes a register name as an argument
+in which to store the current page location. With no argument it
+stores the location in an internal register. The results of this can
+be used later by the @code{rt} or the @code{sp} request (or the
+@code{\v} escape).
+
+The @code{rt} request returns @emph{upwards} to the location marked
+with the last @code{mk} request. If used with an argument, return to
+a position which distance from the top of the page is @var{dist} (no
+previous call to @code{mk} is necessary in this case). Default scaling
+indicator is @samp{v}.
+
+Here a primitive solution for a two-column macro.
+
@Example
-... dual column example ...
+.nr column-length 1.5i
+.nr column-gap 4m
+.nr bottom-margin 1m
+.
+@endExample
+@Example
+.de 2c
+. br
+. mk
+. ll \\n[column-length]u
+. wh -\\n[bottom-margin]u 2c-trap
+. nr right-side 0
+..
+.
+@endExample
+@Example
+.de 2c-trap
+. ie \\n[right-side] \@{\
+. nr right-side 0
+. po -(\\n[column-length]u + \\n[column-gap]u)
+. \" remove trap
+. wh -\\n[bottom-margin]u
+. \@}
+. el \@{\
+. \" switch to right side
+. nr right-side 1
+. po +(\\n[column-length]u + \\n[column-gap]u)
+. rt
+. \@}
+..
+.
+@endExample
+@Example
+.pl 1.5i
+.ll 4i
+This is a small test which shows how the
+rt request works in combination with mk.
+
+.2c
+Starting here, text is typeset in two columns.
+Note that this implementation isn't robust
+and thus not suited for a real two-column
+macro.
+@endExample
+
+Result:
+
+@Example
+This is a small test which shows how the
+rt request works in combination with mk.
+
+Starting here, isn't robust
+text is typeset and thus not
+in two columns. suited for a
+Note that this real two-column
+implementation macro.
@endExample
-@end ignore
@endDefreq
The following escapes give fine control of movements about the page.
-@cindex vertical motion
-@cindex motion, vertical
@Defesc {\\v, ', e, '}
-The @code{\v'@var{e}'} escape 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 @samp{v}. Beware, however, that
-@code{gtroff} continues text processing at the point where the motion
-ends, so you should always balance motions to avoid interference with
-text processing.
+@cindex vertical motion (@code{\v})
+@cindex motion, vertical (@code{\v})
+Move vertically, usually from the current location on the page (if no
+absolute position operator @samp{|} is used). The
+argument@w{ }@var{e} specifies the distance to move; positive is
+downwards and negative upwards. The default scaling indicator for this
+escape is @samp{v}. Beware, however, that @code{gtroff} continues text
+processing at the point where the motion ends, so you should always
+balance motions to avoid interference with text processing.
+
+@code{\v} doesn't trigger a trap. This can be quite useful; for example,
+consider a page bottom trap macro which prints a marker in the margin to
+indicate continuation of a footnote or something similar.
@endDefesc
-There are some special case escapes for vertical motion.
+There are some special-case escapes for vertical motion.
-@ftable @code
-@item \r
-move upwards@w{ }1@dmn{v}.
+@Defesc {\\r, , , }
+Move upwards@w{ }1@dmn{v}.
+@endDefesc
-@item \u
-move upwards@w{ }.5@dmn{v}.
+@Defesc {\\u, , , }
+Move upwards@w{ }.5@dmn{v}.
+@endDefesc
-@item \d
-move down@w{ }.5@dmn{v}.
-@end ftable
+@Defesc {\\d, , , }
+Move down@w{ }.5@dmn{v}.
+@endDefesc
-@cindex inserting horizontal space
-@cindex horizontal space
-@cindex space, horizontal
@Defesc {\\h, ', e, '}
-The @code{\h'@var{e}'} escape provides horizontal motions. The
-expression@w{ }@var{e} indicates how far to move: positive is rightwards
-and negative leftwards.
-@c XXX Is there a default unit for this?
+@cindex inserting horizontal space (@code{\h})
+@cindex horizontal space (@code{\h})
+@cindex space, horizontal (@code{\h})
+@cindex horizontal motion (@code{\h})
+@cindex motion, horizontal (@code{\h})
+Move horizontally, usually from the current location (if no absolute
+position operator @samp{|} is used). The expression@w{ }@var{e}
+indicates how far to move: positive is rightwards and negative
+leftwards. The default scaling indicator for this escape is @samp{m}.
@endDefesc
-There are a number of special case escapes for horizontal motion:
+There are a number of special-case escapes for horizontal motion.
-@ftable @code
-@item \@key{SP}
+@Defesc {\\@key{SP}, , , }
+@cindex space, unbreakable
+@cindex unbreakable space
An unbreakable and unpaddable (i.e.@: not expanded during filling)
space. (Note: This is a backslash followed by a space.)
+@endDefesc
-@item \~
+@Defesc {\\~, , , }
An unbreakable space that stretches like a normal inter-word space
when a line is adjusted.
+@endDefesc
-@item \|
-A 1/6@dmn{th} em space. Ignored for tty output devices (rounded to
+@Defesc {\\|, , , }
+A 1/6@dmn{th} em space. Ignored for TTY output devices (rounded to
zero).
+@endDefesc
-@item \^
-A 1/12@dmn{th} em space. Ignored for tty output devices (rounded to
+@Defesc {\\^, , , }
+A 1/12@dmn{th} em space. Ignored for TTY output devices (rounded to
zero).
+@endDefesc
-@item \0
+@Defesc {\\0, , , }
+@cindex space, width of a digit (@code{\0})
+@cindex digit width space (@code{\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.
-@end ftable
+@endDefesc
The following string sets the @TeX{} logo:
@@ -7520,21 +10103,23 @@ The following string sets the @TeX{} logo:
.ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
@endExample
-@cindex width escape
-@cindex escape, width
-@Defesc {\\w, ', text, '}
-Used as @code{\w'@var{text}'},
-returns the width of the specified @var{text} in basic units.
+@DefescList {\\w, ', text, '}
+@DefregItem {st}
+@DefregItem {sb}
+@DefregItem {rst}
+@DefregItem {rsb}
+@DefregItem {ct}
+@DefregItem {ssc}
+@DefregListEnd {skw}
+@cindex width escape (@code{\w})
+Return the width of the specified @var{text} in basic units.
This allows horizontal movement based on the width of some
arbitrary text (e.g.@: given as an argument to a macro).
-@c XXX example
-
-@ignore
@Example
-... strlen example ...
+The length of the string `abc' is \w'abc'u.
+ @result{} The length of the string `abc' is 72u.
@endExample
-@end ignore
Font changes may occur in @var{text} which don't affect current
settings.
@@ -7544,60 +10129,107 @@ After use, @code{\w} sets several registers:
@table @code
@item st
@itemx sb
-@vindex st
-@vindex sb
-The highest and lowest point, respectively, in @var{text}.
+The highest and lowest point of the baseline, respectively, in @var{text}.
@item 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.
+heights and depths of glyphs. With other words, this gives the
+highest and lowest point of @var{text}.
@item ct
-@vindex ct
-Defines the kinds of characters occurring in @var{text}:
+Defines the kinds of glyphs occurring in @var{text}:
@table @asis
@item 0
-only short characters, no descenders or tall characters.
+only short glyphs, no descenders or tall glyphs.
@item 1
at least one descender.
@item 2
-at least one tall character.
+at least one tall glyph.
@item 3
-at least one each of a descender and a tall character.
+at least one each of a descender and a tall glyph.
@end table
@item ssc
-@vindex ssc
The amount of horizontal space (possibly negative) that should be added
-to the last character before a subscript.
+to the last glyph before a subscript.
@item skw
-@vindex skw
-How far to right of the center of the last character in the @code{\w}
+How far to right of the center of the last glyph in the @code{\w}
argument, the center of an accent from a roman font should be placed
-over that character.
+over that glyph.
@end table
@endDefesc
-@Defesc {\\k, ', x, '}
-Stores the current horizontal position in register @var{x}.
-Use this, for example, to return to the beginning of a string
-for highlighting or other decoration.
+@DefescList {\\k, , p, }
+@DefescItem {\\k, @lparen{}, ps, }
+@DefescListEnd {\\k, @lbrack{}, position, @rbrack}
+@cindex saving horizontal input line position (@code{\k})
+@cindex horizontal input line position, saving (@code{\k})
+@cindex input line position, horizontal, saving (@code{\k})
+@cindex position, horizontal input line, saving (@code{\k})
+@cindex line, input, horizontal position, saving (@code{\k})
+Store the current horizontal position in the @emph{input} line in
+number register with name @var{position} (one-character name@w{ }@var{p},
+two-character name @var{ps}). Use this, for example, to return to the
+beginning of a string for highlighting or other decoration.
@endDefesc
+@Defreg {hp}
+@cindex horizontal input line position register (@code{hp})
+@cindex input line, horizontal position, register (@code{hp})
+@cindex position, horizontal, in input line, register (@code{hp})
+@cindex line, input, horizontal position, register (@code{hp})
+The current horizontal position at the input line.
+@endDefreg
+
@Defreg {.k}
+@cindex horizontal output line position register (@code{.k})
+@cindex output line, horizontal position, register (@code{.k})
+@cindex position, horizontal, in output line, register (@code{.k})
+@cindex line, output, horizontal position, register (@code{.k})
A read-only number register containing the current horizontal output
position.
@endDefreg
-@c XXX documentation
+@Defesc {\\o, ', @Var{a}@Var{b}@Var{c}, '}
+@cindex overstriking glyphs (@code{\o})
+@cindex glyphs, overstriking (@code{\o})
+Overstrike glyphs @var{a}, @var{b}, @var{c}, @dots{}; the glyphs
+are centered, and the resulting spacing is the largest width of the
+affected glyphs.
+@endDefesc
+
+@Defesc {\\z, , g, , }
+@cindex zero-width printing (@code{\z}, @code{\Z})
+@cindex printing, zero-width (@code{\z}, @code{\Z})
+Print glyph @var{g} with zero width, i.e., without spacing. Use
+this to overstrike glyphs left-aligned.
+@endDefesc
+
+@Defesc {\\Z, ', anything, '}
+@cindex zero-width printing (@code{\z}, @code{\Z})
+@cindex printing, zero-width (@code{\z}, @code{\Z})
+Print @var{anything}, then restore the horizontal and vertical position.
+The argument may not contain tabs or leaders.
+
+The following is an example of a strike-through macro:
+
+@Example
+.de ST
+.nr ww \w'\\$1'
+\Z@@\v'-.25m'\l'\\n[ww]u'@@\\$1
+..
+.
+This is
+.ST "a test"
+an actual emergency!
+@endExample
+@endDefesc
@c =====================================================================
@@ -7617,188 +10249,251 @@ information.
All drawing is done via escapes.
-@cindex drawing horizontal lines
-@cindex horizontal line, drawing
-@cindex line, horizontal, drawing
-@Defesc {\\l, ', l c, '}
-Draws a line rightwards from the current
-location. The full syntax for this escape is:
-
-@Example
-\l'@var{l}@var{c}'
-@endExample
-
-@noindent
-where @var{l} is the length of the line to be drawn, starting at the
-current location; positive numbers draw to the right, and negative
-numbers draw towards the left. This can also be specified absolutely
-(i.e.@: with a leading @samp{|}) which draws 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
+@DefescList {\\l, ', @Var{l}, '}
+@DefescListEnd {\\l, ', @Var{l}@Var{g}, '}
+@cindex drawing horizontal lines (@code{\l})
+@cindex horizontal line, drawing (@code{\l})
+@cindex line, horizontal, drawing (@code{\l})
+Draw a line horizontally. @var{l} is the length of the line to be
+drawn. If it is positive, start the line at the current location and
+draw to the right; its end point is the new current location. Negative
+values are handled differently: The line starts at the current location
+and draws to the left, but the current location doesn't move.
+
+@var{l} can also be specified absolutely (i.e.@: with a leading
+@samp{|}) which draws back to the beginning of the input line.
+Default scaling indicator is @samp{m}.
+
+@cindex underscore glyph (@code{\[ru]})
+@cindex glyph, underscore (@code{\[ru]})
+@cindex line drawing glyph
+@cindex glyph, for line drawing
+The optional second parameter@w{ }@var{g} is a glyph to draw the line
with. If this second argument is not specified, @code{gtroff} uses
-the underscore character.
+the underscore glyph, @code{\[ru]}.
-@cindex zero width space character
-@cindex character, zero width space
-@cindex space character, zero width
-@esindex \&
+@cindex zero width space character (@code{\&})
+@cindex character, zero width space (@code{\&})
+@cindex space character, zero width (@code{\&})
To separate the two arguments (to prevent @code{gtroff} from
-interpreting a drawing character as a scaling indicator) use @code{\&}.
+interpreting a drawing glyph as a scaling indicator if the glyph is
+represented by a single character) use @code{\&}.
Here a small useful example:
@Example
.de box
-\(br\\$*\(br\l'|0\(rn'\l'|0\(ul'
+\[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
..
@endExample
-@opindex |
@noindent
Note that this works by outputting a box rule (a vertical line), then
-the text given as an argument and then another box rule. Then the line
-drawing escapes both draw from the current location to the beginning of
-the @emph{input} line.
+the text given as an argument and then another box rule. Finally, the
+line drawing escapes both draw from the current location to the
+beginning of the @emph{input} line -- this works because the line
+length is negative, not moving the current point.
@endDefesc
-@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
-@Defesc {\\L, ', l c, '}
-Draws vertical lines. Its parameters are
-similar to the @code{\l} escape. The
-movement is downwards for positive values,
-and upwards for negative values. The
-default character is the box rule character. As with the vertical
-motion escapes, text processing blindly continues where the line
-ends.
-
-@c XXX example
+@DefescList {\\L, ', @Var{l}, '}
+@DefescListEnd {\\L, ', @Var{l}@Var{g}, '}
+@cindex drawing vertical lines (@code{\L})
+@cindex vertical line drawing (@code{\L})
+@cindex line, vertical, drawing (@code{\L})
+@cindex line drawing glyph
+@cindex glyph for line drawing
+@cindex box rule glyph (@code{\[br]})
+@cindex glyph, box rule (@code{\[br]})
+Draw vertical lines. Its parameters are
+similar to the @code{\l} escape, except that the default scaling
+indicator is @samp{v}. The movement is downwards for positive values,
+and upwards for negative values. The default glyph is the box rule
+glyph, @code{\[br]}. As with the vertical motion escapes, text
+processing blindly continues where the line ends.
-@ignore
@Example
-...box macro...
+This is a \L'3v'test.
+@endExample
+
+@noindent
+Here the result, produced with @code{grotty}.
+
+@Example
+This is a
+ |
+ |
+ |test.
@endExample
-@end ignore
@endDefesc
@Defesc {\\D, ', command arg @dots{}, '}
The @code{\D} escape provides a variety of drawing functions.
-While the previous escapes work on a character device, these
-escapes do not.
+Note that on character devices, only vertical and horizontal lines are
+supported within @code{grotty}; other devices may only support a subset
+of the available drawing functions.
+
+The default scaling indicator for all subcommands of @code{\D} is
+@samp{m} for horizontal distances and @samp{v} for vertical ones.
+Exceptions are @w{@code{\D'f @dots{}'}} and @w{@code{\D't @dots{}'}}
+which use @code{u} as the default.
@table @code
@item \D'l @var{dx} @var{dy}'
+@cindex line, drawing (@w{@code{\D'l @dots{}'}})
+@cindex drawing a line (@w{@code{\D'l @dots{}'}})
Draw a line from the current location to the relative point specified by
(@var{dx},@var{dy}).
-@c XXX example
-
-@ignore
-@Example
-...revised box macro...
+The following example is a macro for creating a box around a text string;
+for simplicity, the box margin is taken as a fixed value, 0.2@dmn{m}.
+
+@Example
+.de BOX
+. nr @@wd \w'\\$1'
+\h'.2m'\
+\h'-.2m'\v'(.2m - \\n[rsb]u)'\
+\D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
+\D'l (\\n[@@wd]u + .4m) 0'\
+\D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
+\D'l -(\\n[@@wd]u + .4m) 0'\
+\h'.2m'\v'-(.2m - \\n[rsb]u)'\
+\\$1\
+\h'.2m'
+..
@endExample
-@end ignore
+
+@noindent
+First, the width of the string is stored in register @code{@@wd}. Then,
+four lines are drawn to form a box, properly offset by the box margin.
+The registers @code{rst} and @code{rsb} are set by the @code{\w} escape,
+containing the largest height and depth of the whole string.
@item \D'c @var{d}'
-@cindex circle drawing
-@cindex drawing a circle
-Draw a circle with a diameter of @var{d} with the leftmost point at the
+@cindex circle, drawing (@w{@code{\D'c @dots{}'}})
+@cindex drawing a circle (@w{@code{\D'c @dots{}'}})
+Draw a circle with a diameter of@w{ }@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}'
+@cindex circle, solid, drawing (@w{@code{\D'C @dots{}'}})
+@cindex drawing a solid circle (@w{@code{\D'C @dots{}'}})
+@cindex solid circle, drawing (@w{@code{\D'C @dots{}'}})
+Draw a solid circle with the same parameters as an outlined circle. No
+outline is drawn.
+
+@item \D'e @var{x} @var{y}'
+@cindex drawing an ellipse (@w{@code{\D'e @dots{}'}})
+@cindex ellipse, drawing (@w{@code{\D'e @dots{}'}})
+Draw an ellipse with a horizontal diameter of @var{x} and a vertical
+diameter of @var{y} with the leftmost point at the current position.
+
+@item \D'E @var{x} @var{y}'
+@cindex ellipse, solid, drawing (@w{@code{\D'E @dots{}'}})
+@cindex drawing a solid ellipse (@w{@code{\D'E @dots{}'}})
+@cindex solid ellipse, drawing (@w{@code{\D'E @dots{}'}})
Draw a solid ellipse with the same parameters as an outlined ellipse.
+No outline is drawn.
@item \D'a @var{dx1} @var{dy1} @var{dx2} @var{dy2}'
-@cindex arc drawing
-@cindex drawing an arc
+@cindex arc, drawing (@w{@code{\D'a @dots{}'}})
+@cindex drawing an arc (@w{@code{\D'a @dots{}'}})
Draw an arc clockwise from the current location through the two
-specified locations (@var{dx1},@var{dy1}) and (@var{dx2},@var{dy2}).
+specified relative locations (@var{dx1},@var{dy1}) and
+(@var{dx2},@var{dy2}). The coordinates of the first point are relative
+to the current position, and the coordinates of the second point are
+relative to the first point.
-@item \D'~ @var{dx1} @var{dy1} @var{dx2} @var{dy2} ...'
-@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'~ @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
+@cindex drawing a spline (@w{@code{\D'~ @dots{}'}})
+@cindex spline, drawing (@w{@code{\D'~ @dots{}'}})
+Draw a spline from the current location to the relative point
+(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}), and so on.
@item \D'f @var{n}'
-@cindex gray shading
-@cindex shading
-@cindex shades for filling objects
+@cindex gray shading (@w{@code{\D'f @dots{}'}})
+@cindex shading filled objects (@w{@code{\D'f @dots{}'}})
Set the shade of gray to be used for filling solid objects to@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 is 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)...
-@endExample
-@end ignore
-
-@item \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} ...'
+circles, solid ellipses, and solid polygons. By default, a level of
+1000 is used.
+
+@item \D'p @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
+@cindex drawing a polygon (@w{@code{\D'p @dots{}'}})
+@cindex polygon, drawing (@w{@code{\D'p @dots{}'}})
+Draw a polygon from the current location to the relative position
+(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}) and so on.
+When the specified data points are exhausted, a line is drawn back
+to the starting point.
+
+@item \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
+@cindex polygon, solid, drawing (@w{@code{\D'P @dots{}'}})
+@cindex drawing a solid polygon (@w{@code{\D'P @dots{}'}})
+@cindex solid polygon, drawing (@w{@code{\D'P @dots{}'}})
Draw a solid polygon with the same parameters as an outlined polygon.
-
-@c XXX example
-
-@ignore
-@Example
-... shaded box example ...
+No outline is drawn.
+
+Here a better variant of the box macro to fill the box with some color.
+Note that the box must be drawn before the text since colors in
+@code{gtroff} are not transparent; the filled polygon would hide the
+text completely.
+
+@Example
+.de BOX
+. nr @@wd \w'\\$1'
+\h'.2m'\
+\h'-.2m'\v'(.2m - \\n[rsb]u)'\
+\M[lightcyan]\
+\D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
+ (\\n[@@wd]u + .4m) 0 \
+ 0 (\\n[rst]u - \\n[rsb]u + .4m) \
+ -(\\n[@@wd]u + .4m) 0'\
+\h'.2m'\v'-(.2m - \\n[rsb]u)'\
+\M[]\
+\\$1\
+\h'.2m'
+..
@endExample
-@end ignore
@item \D't @var{n}'
-@cindex line thickness
-@cindex thickness of lines
-Set the current line thickness to @var{n} machine units. A value of
+@cindex line thickness (@w{@code{\D't @dots{}'}})
+@cindex thickness of lines (@w{@code{\D't @dots{}'}})
+Set the current line thickness to @var{n}@w{ }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}).
+the default behaviour of @acronym{AT&T} @code{troff}).
@end table
@endDefesc
-@cindex pile, character
-@cindex character pile
+@xref{Graphics Commands}.
+
@Defesc {\\b, ', string, '}
-@dfn{Piles} a sequence of characters
-vertically, and centers it vertically on the current line. Use it
-to build large brackets and braces.
+@cindex pile, glyph (@code{\b})
+@cindex glyph pile (@code{\b})
+@cindex stacking glyphs (@code{\b})
+@dfn{Pile} a sequence of glyphs vertically, and center it vertically
+on the current line. Use it to build large brackets and braces.
+
+Here an example how to create a large opening brace:
@Example
-\b'\(lt\(bv\(lk\(bv\(lb'
+\b'\[lt]\[bv]\[lk]\[bv]\[lb]'
@endExample
-@endDefesc
-@xref{Drawing Functions}.
+@cindex @code{\b}, limitations
+@cindex limitations of @code{\b} escape
+The first glyph is on the top, the last glyph in @var{string} is
+at the bottom. Note that @code{gtroff} separates the glyphs
+vertically by 1@dmn{m}, and the whole object is centered 0.5@dmn{m}
+above the current baseline; the largest glyph width is used as the
+width for the whole object. This rather unflexible positioning
+algorithm doesn't work with @option{-Tdvi} since the bracket pieces vary
+in height for this device. Instead, use the @code{eqn} preprocessor.
+
+@xref{Manipulating Spacing}, how to adjust the vertical spacing with
+the @code{\x} escape.
+@endDefesc
@c =====================================================================
@@ -7809,13 +10504,22 @@ to build large brackets and braces.
@dfn{Traps} are locations, which, when reached, call a specified
macro. These traps can occur at a given location on the page, at a
-given location in the current diversion, after a certain number of input
-lines or at the end of input.
+given location in the current diversion, at a blank line,
+after a certain number of input lines, or at the end of input.
+
+@cindex planting a trap
+@cindex trap, planting
+Setting a trap is also called @dfn{planting}.
+@cindex trap, springing
+@cindex springing a trap
+It is also said that a trap is @dfn{sprung} if the associated macro
+is executed.
@menu
* Page Location Traps::
* Diversion Traps::
* Input Line Traps::
+* Blank Line Traps::
* End-of-input Traps::
@end menu
@@ -7827,8 +10531,8 @@ lines or at the end of input.
@cindex traps, page location
@dfn{Page location traps} perform an action when @code{gtroff}
-reaches a certain vertical location on the page. Page location
-traps have a variety of purposes, including:
+reaches or passes a certain vertical location on the page. Page
+location traps have a variety of purposes, including:
@itemize
@item
@@ -7841,10 +10545,12 @@ setting body text in multiple columns
setting footnotes
@end itemize
-@cindex vertical position trap enable register
-@Defreq {vpt, flag}
-@Defregx {.vpt}
-Enables vertical position traps if @var{flag} is non-zero, or disables
+@DefreqList {vpt, flag}
+@DefregListEnd {.vpt}
+@cindex enabling vertical position traps (@code{vpt})
+@cindex vertical position traps, enabling (@code{vpt})
+@cindex vertical position trap enable register (@code{.vpt})
+Enable vertical position traps if @var{flag} is non-zero, or disables
them otherwise. Vertical position traps are traps set by the @code{wh}
or @code{dt} requests. Traps set by the @code{it} request are not
vertical position traps. The parameter that controls whether vertical
@@ -7853,13 +10559,15 @@ are enabled. The current setting of this is available in the
@code{.vpt} read-only number register.
@endDefreq
-@Defreq {wh, dist macro}
-Sets a page location trap. Positive values for @var{dist} set
+@Defreq {wh, dist [@Var{macro}]}
+Set a page location trap. Positive values for @var{dist} set
the trap relative to the top of the page; negative values set
-the trap relative to the bottom of the page.
+the trap relative to the bottom of the page. Default scaling
+indicator is @samp{v}.
@var{macro} is the name of the macro to execute when the
-trap is sprung.
+trap is sprung. If @var{macro} is missing, remove the first trap
+(if any) at @var{dist}.
@cindex page headers
@cindex page footers
@@ -7870,35 +10578,85 @@ set headers and footers.
@Example
.de hd \" Page header
-'sp .5i
-.tl 'Title''date'
-'sp .3i
+' sp .5i
+. tl 'Title''date'
+' sp .3i
..
+.
.de fo \" Page footer
-'sp 1v
-.tl ''%''
-'bp
+' sp 1v
+. tl ''%''
+' bp
..
+.
.wh 0 hd \" trap at top of the page
.wh -1i fo \" trap one inch from bottom
@endExample
+
+A trap at or below the bottom of the page is ignored; it can be made
+active by either moving it up or increasing the page length so that the
+trap is on the page.
+
+It is possible to have more than one trap at the same location; to do so,
+the traps must be defined at different locations, then moved together with
+the @code{ch} request; otherwise the second trap would replace the first
+one. Earlier defined traps hide later defined traps if moved to the same
+position (the many empty lines caused by the @code{bp} request are omitted):
+
+@Example
+.de a
+. nop a
+..
+.de b
+. nop b
+..
+.de c
+. nop c
+..
+.
+.wh 1i a
+.wh 2i b
+.wh 3i c
+.bp
+ @result{} a b c
+@endExample
+@Example
+.ch b 1i
+.ch c 1i
+.bp
+ @result{} a
+@endExample
+@Example
+.ch a 0.5i
+.bp
+ @result{} a b
+@endExample
@endDefreq
-@cindex distance to next trap
-@cindex trap, distance
@Defreg {.t}
+@cindex distance to next trap register (@code{.t})
+@cindex trap, distance, register (@code{.t})
A read-only number register holding the distance to the next trap.
+
+If there are no traps between the current position and the bottom of the
+page, it contains the distance to the page bottom. In a diversion, the
+distance to the page bottom is infinite (the returned value is the biggest
+integer which can be represented in @code{groff}) if there are no diversion
+traps.
@endDefreg
-@cindex changing trap location
-@cindex trap, changing location
-@Defreq {ch, dist macro}
-Changes the location of a trap.
+@Defreq {ch, macro dist}
+@cindex changing trap location (@code{ch})
+@cindex trap, changing location (@code{ch})
+Change the location of a trap.
The first argument is the name of the macro to be invoked at
the trap, and the second argument is the new location for the trap
-(note that the parameters are specified the opposite of the @code{.wh} request).
-This is useful for building up footnotes in a diversion to allow more
-space at the bottom of the page for them.
+(note that the parameters are specified the opposite of the @code{wh}
+request). This is useful for building up footnotes in a diversion to
+allow more space at the bottom of the page for them.
+
+Default scaling indicator for @var{dist} is @samp{v}. If @var{dist}
+is missing, the trap is removed.
@c XXX
@@ -7916,9 +10674,9 @@ sprung. Useful in conjunction with the @code{.trunc} register.
@xref{Page Control}, for more information.
@endDefreg
-@rqindex ne
-@cindex @code{ne}, and the @code{.trunc} register
@Defreg {.trunc}
+@cindex @code{ne} request, and the @code{.trunc} register
+@cindex truncated vertical space register (@code{.trunc})
A read-only register containing the amount of vertical space truncated
by the most recently sprung vertical position trap, or, if the trap was
sprung by an @code{ne} request, minus the amount of vertical motion
@@ -7935,28 +10693,34 @@ actually is.
@cindex diversion traps
@cindex traps, diversion
-@vindex .t
-@cindex @code{.t}, and diversions
@Defreq {dt, dist macro}
-Sets a trap @emph{within} a diversion.
-@var{dist} is the first argument is the location of the trap
-(identical to the @code{.wh} request)
-and @var{macro} is the name of the macro to be invoked. The
+@cindex @code{.t} register, and diversions
+@cindex setting diversion trap (@code{dt})
+@cindex diversion trap, setting (@code{dt})
+@cindex trap, diversion, setting (@code{dt})
+Set a trap @emph{within} a diversion.
+@var{dist} is the location of the trap
+(identical to the @code{.wh} request; default scaling indicator is
+@samp{v}) and @var{macro} is the name of the macro to be invoked. The
number register @code{.t} still works within diversions.
@xref{Diversions}, for more information.
@endDefreq
@c ---------------------------------------------------------------------
-@node Input Line Traps, End-of-input Traps, Diversion Traps, Traps
+@node Input Line Traps, Blank Line Traps, Diversion Traps, Traps
@subsection Input Line Traps
@cindex input line traps
@cindex traps, input line
-@Defreq {it, n macro}
-Sets an input line trap.
-@var{n} is the number of lines of input which may be read before
-@dfn{springing} the trap, @var{macro} is the macro to be invoked.
+@DefreqList {it, n macro}
+@DefreqItem {itc, n macro}
+@cindex setting input line trap (@code{it})
+@cindex input line trap, setting (@code{it})
+@cindex trap, input line, setting (@code{it})
+Set an input line trap.
+@var{n}@w{ }is the number of lines of input which may be read before
+springing the trap, @var{macro} is the macro to be invoked.
Request lines are not counted as input lines.
For example, one possible use is to have a macro which prints the
@@ -7964,26 +10728,58 @@ next @var{n}@w{ }lines in a bold font.
@Example
.de B
-.it \\$1 B-end
-.ft B
+. it \\$1 B-end
+. ft B
..
+.
.de B-end
-.ft R
+. ft R
..
@endExample
+
+@cindex input line traps and interrupted lines (@code{itc})
+@cindex interrupted lines and input line traps (@code{itc})
+@cindex traps, input line, and interrupted lines (@code{itc})
+@cindex lines, interrupted, and input line traps (@code{itc})
+The @code{itc} request is identical,
+except that a line interrupted with @code{\c}
+counts as one input line.
+
+Both requests are associated with the current environment
+(@pxref{Environments}); switching to another environment disables the
+current input trap, and going back reactivates it, restoring the number
+of already processed lines.
@endDefreq
@c ---------------------------------------------------------------------
-@node End-of-input Traps, , Input Line Traps, Traps
+@node Blank Line Traps, End-of-input Traps, Input Line Traps, Traps
+@subsection Blank Line Traps
+@cindex blank line traps
+@cindex traps, blank line
+
+@Defreq {blm, macro}
+@cindex blank line macro (@code{blm})
+Set a blank line trap.
+@code{gtroff} executes @var{macro} when it encounters a blank line in
+the input file.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node End-of-input Traps, , Blank Line Traps, Traps
@subsection End-of-input Traps
@cindex end-of-input traps
@cindex traps, end-of-input
@Defreq {em, macro}
-Sets a trap at the end of input. The @var{macro}
-specified is executed after the last line of the
-input file has been processed.
+@cindex setting end-of-input trap (@code{em})
+@cindex end-of-input trap, setting (@code{em})
+@cindex trap, end-of-input, setting (@code{em})
+@cindex end-of-input macro (@code{em})
+@cindex macro, end-of-input (@code{em})
+Set a trap at the end of input. @var{macro} is executed after the
+last line of the input file has been processed.
For example, if the document had to have a section at the bottom of the
last page for someone to approve it, the @code{em} request could be
@@ -7991,15 +10787,16 @@ used.
@Example
.de approval
-.ne 5v
-.sp |(\\n(.t-6v)
-.in +4i
-.lc _
-.br
+. ne 5v
+. sp |(\\n[.t] - 6v)
+. in +4i
+. lc _
+. br
Approved:\t\a
-.sp
+. sp
Date:\t\t\a
..
+.
.em approval
@endExample
@endDefreq
@@ -8015,34 +10812,79 @@ 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.
-
-@c XXX describe top-level diversion
-@c XXX index entry for top-level diversion
+page, footnotes, tables of contents, and indices.
-@Defreq {di, macro}
-@Defreqx {da, macro}
-Begins a diversion. Like the @code{de}
+@cindex top-level diversion
+@cindex diversion, top-level
+For orthogonality it is said that @code{gtroff} is in the @dfn{top-level
+diversion} if no diversion is active (i.e., the data is diverted to the
+output device).
+
+@DefreqList {di, macro}
+@DefreqListEnd {da, macro}
+@cindex beginning diversion (@code{di})
+@cindex diversion, beginning (@code{di})
+@cindex ending diversion (@code{di})
+@cindex diversion, ending (@code{di})
+@cindex appending to a diversion (@code{da})
+@cindex diversion, appending (@code{da})
+Begin a diversion. Like the @code{de}
request, it takes an argument of a macro name to divert subsequent text
into. The @code{da} macro appends to an existing diversion.
@code{di} or @code{da} without an argument ends the diversion.
+@endDefreq
-@c XXX example
+@DefreqList {box, macro}
+@DefreqListEnd {boxa, macro}
+Begin (or appends to) a diversion like the
+@code{di} and @code{da} requests.
+The difference is that @code{box} and @code{boxa}
+do not include a partially-filled line in the diversion.
+
+Compare this:
-@ignore
@Example
-... end-note example ...
+Before the box.
+.box xxx
+In the box.
+.br
+.box
+After the box.
+.br
+ @result{} Before the box. After the box.
+.xxx
+ @result{} In the box.
@endExample
-@end ignore
+
+@noindent
+with this:
+
+@Example
+Before the diversion.
+.di yyy
+In the diversion.
+.br
+.di
+After the diversion.
+.br
+ @result{} After the diversion.
+.yyy
+ @result{} Before the diversion. In the diversion.
+@endExample
+
+@code{box} or @code{boxa} without an argument ends the diversion.
@endDefreq
-@vindex nl
-@vindex .h
+@DefregList {.z}
+@DefregListEnd {.d}
+@cindex @code{nl} register, and @code{.d}
@cindex nested diversions
@cindex diversion, nested
-@Defreg {.z}
-@Defregx {.d}
+@cindex diversion name register (@code{.z})
+@cindex vertical position in diversion register (@code{.d})
+@cindex position, vertical, in diversion, register (@code{.d})
+@cindex diversion, vertical position in, register (@code{.d})
Diversions may be nested. The read-only number register @code{.z}
contains the name of the current diversion (this is a string-valued
register). The read-only number register @code{.d} contains the current
@@ -8050,60 +10892,86 @@ vertical place in the diversion. If not in a diversion it is the same
as the register @code{nl}.
@endDefreg
-@c XXX more info
-
@Defreg {.h}
+@cindex high-water mark register (@code{.h})
+@cindex mark, high-water, register (@code{.h})
+@cindex position of lowest text line (@code{.h})
+@cindex text line, position of lowest (@code{.h})
The @dfn{high-water mark} on the current page. It corresponds to the
text baseline of the lowest line on the page. This is a read-only
register.
+
+@Example
+.tm .h==\n[.h], nl==\n[nl]
+ @result{} .h==0, nl==-1
+This is a test.
+.br
+.sp 2
+.tm .h==\n[.h], nl==\n[nl]
+ @result{} .h==40, nl==120
+@endExample
+
+@cindex @code{.h} register, difference to @code{nl}
+@cindex @code{nl} register, difference to @code{.h}
+@noindent
+As can be seen in the previous example, empty lines are not considered
+in the return value of the @code{.h} register.
@endDefreg
-@Defreg {dn}
-@Defregx {dl}
+@DefregList {dn}
+@DefregListEnd {dl}
After completing a diversion, the read-write number registers @code{dn}
and @code{dl} contain the vertical and horizontal size of the diversion.
-@example
-@group
+@Example
.\" Center text both horizontally & vertically
+.
+.\" Enclose macro definitions in .eo and .ec
+.\" to avoid the doubling of the backslash
+.eo
+.\" macro .(c starts centering mode
.de (c
-.br
-.nf
-.di @@c
+. br
+. ev (c
+. evc 0
+. in 0
+. nf
+. di @@c
..
-@end group
-@group
+@endExample
+@Example
+.\" macro .)c terminates centering mode
.de )c
-.br
-.di
-.nr @@s (((\\n(.tu-\\n(dnu)/2u)-1v)
-.sp \\n(@@su
-.ce 1000
-.nf
-.@c
-.br
-.ce 0
-.sp \\n(@@su
-.br
-.fi
-.rr @@s
+. br
+. ev
+. di
+. nr @@s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
+. sp \n[@@s]u
+. ce 1000
+. @@c
+. ce 0
+. sp \n[@@s]u
+. br
+. fi
+. rr @@s
+. rm @@s
+. rm @@c
..
-@end group
-@end example
+.\" End of macro definitions, restore escape mechanism
+.ec
+@endExample
@endDefreg
-@cindex transparent output
-@cindex output, transparent
-@Defesc {\\!, , , }
-@Defescx {\\?, , @Var{anything}, \\?}
-Prevents requests, macros and escapes from being
+@DefescList {\\!, , , }
+@DefescListEnd {\\?, , @Var{anything}, \\?}
+@cindex transparent output (@code{\!}, @code{\?})
+@cindex output, transparent (@code{\!}, @code{\?})
+Prevent requests, macros, and escapes from being
interpreted when read into a diversion. This takes the given text
and @dfn{transparently} embeds it into the diversion. This is useful for
macros which shouldn't be invoked until the diverted text is actually
output.
-@c XXX anything is read in copy mode. (what about \! ??)
-
The @code{\!} escape transparently embeds text up to
and including the end of the line.
The @code{\?} escape transparently embeds text until the next
@@ -8117,7 +10985,7 @@ occurrence of the @code{\?} escape. For example:
@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
+this code that terminates @var{anything}. Thus the following example
prints@w{ }4.
@Example
@@ -8137,16 +11005,52 @@ prints@w{ }4.
.nr x 4
.f
@endExample
+
+Both escapes read the data in copy mode.
+
+@cindex @code{\!}, in top-level diversion
+@cindex top-level diversion, and @code{\!}
+@cindex diversion, top-level, and @code{\!}
+If @code{\!} is used in the top-level diversion, its argument is
+directly embedded into the @code{gtroff} intermediate output. This can
+be used for example to control a postprocessor which processes the data
+before it is sent to the device driver.
+
+@cindex @code{\?}, in top-level diversion
+@cindex top-level diversion, and @code{\?}
+@cindex diversion, top-level, and @code{\?}
+The @code{\?} escape used in the top-level diversion produces no output
+at all; its argument is simply ignored.
@endDefesc
-@cindex unformatting diversions
-@cindex diversion, unformatting
+@cindex @code{\!}, and @code{output}
+@cindex @code{output} request, and @code{\!}
+@Defreq {output, string}
+Emit @var{string} directly to the @code{gtroff} intermediate output
+(subject to copy-mode interpretation); this is similar to @code{\!} used
+at the top level. An initial double quote in @var{string} is stripped off
+to allow initial blanks.
+
+This request can't be used before the first page has started -- if you get
+an error, simply insert @code{.br} before the @code{output} request.
+
+Without argument, @code{output} is ignored.
+
+Use with caution! It is normally only needed for mark-up used by a
+postprocessor which does something with the output before sending it to
+the output device, filtering out @code{string} again.
+@endDefreq
+
@Defreq {asciify, div}
-@dfn{Unformats} the diversion specified by @var{div}
-in such a way that @acronym{ASCII} and space characters that
+@cindex unformatting diversions (@code{asciify})
+@cindex diversion, unformatting (@code{asciify})
+@cindex @code{trin} request, and @code{asciify}
+@dfn{Unformat} the diversion specified by @var{div}
+in such a way that @acronym{ASCII} characters, characters translated with
+the @code{trin} request, space characters, and some escape sequences that
were formatted and diverted are treated like ordinary input
characters when the diversion is reread. It can be also used for gross
-hacks; for example, the following sets register @code{n} to@w{ }1.
+hacks; for example, the following sets register@w{ }@code{n} to@w{ }1.
@Example
.tr @@.
@@ -8162,6 +11066,17 @@ hacks; for example, the following sets register @code{n} to@w{ }1.
@xref{Copy-in Mode}.
@endDefreq
+@Defreq {unformat, div}
+Like @code{asciify}, unformat the specified diversion.
+However, @code{unformat} only unformats spaces and tabs
+between words.
+Unformatted tabs are treated as input tokens,
+and spaces are stretchable again.
+
+The vertical size of lines is not preserved; glyph information (font,
+font size, space width, etc.)@: is retained.
+@endDefreq
+
@c =====================================================================
@@ -8180,33 +11095,41 @@ following is the information kept in an environment.
@itemize @bullet
@item
-font parameters (size, family, style, character height and slant, space
+font parameters (size, family, style, glyph height and slant, space
and sentence space size)
@item
page parameters (line length, title length, vertical spacing,
-line spacing, indentation, line numbering, hyphenation data)
+line spacing, indentation, line numbering, centering, right-justifying,
+underlining, hyphenation data)
@item
fill and adjust mode
@item
-tab stops, tab and leader characters, escape character, no-break and
-hyphen indicators, margin character data
+tab stops, tab and leader characters, escape character,
+no-break and hyphen indicators, margin character data
@item
partially collected lines
+
+@item
+input traps
+
+@item
+drawing and fill colours
@end itemize
These environments may be given arbitrary names (see @ref{Identifiers},
for more info). Old versions of @code{troff} only had environments
-named @samp{0}, @samp{1} and@w{ }@samp{2}.
-
-@cindex switch environments
-@cindex current environment number/name register
-@Defreq {ev, env}
-@Defregx {.ev}
-Switches to another environment. The argument @var{env} is the name of
+named @samp{0}, @samp{1}, and @samp{2}.
+
+@DefreqList {ev, [@Var{env}]}
+@DefregListEnd {.ev}
+@cindex switching environments (@code{ev})
+@cindex environment, switching (@code{ev})
+@cindex environment number/name register (@code{.ev})
+Switch to another environment. The argument @var{env} is the name of
the environment to switch to. With no argument, @code{gtroff} switches
back to the previous environment. There is no limit on the number of
named environments; they are created the first time that they are
@@ -8220,14 +11143,6 @@ active environment onto a stack. If, say, environments @samp{foo},
@samp{bar} (which is popped off the stack), and a second call
switches back to environment @samp{foo}.
-@c XXX example
-
-@ignore
-@Example
-... page break macro, revised ...
-@endExample
-@end ignore
-
Here is an example:
@Example
@@ -8246,27 +11161,77 @@ Here is an example:
@endExample
@endDefreq
-@cindex copy environment
@Defreq {evc, env}
-Copies the environment @var{env} into the current environment.
+@cindex copying environment (@code{evc})
+@cindex environment, copying (@code{evc})
+Copy the environment @var{env} into the current environment.
+
+The following environment data is not copied:
+
+@itemize @bullet
+@item
+Partially filled lines.
+
+@item
+The status whether the previous line was interrupted.
+
+@item
+The number of lines still to center, or to right-justify, or to underline
+(with or without underlined spaces); they are set to zero.
+
+@item
+The status whether a temporary indent is active.
+
+@item
+Input traps and its associated data.
+
+@item
+Line numbering mode is disabled; it can be reactivated with
+@w{@samp{.nm +0}}.
+
+@item
+The number of consecutive hyphenated lines (set to zero).
+@end itemize
@endDefreq
+@DefregList {.cht}
+@DefregItem {.cdp}
+@DefregListEnd {.csk}
+@cindex environment, last glyph
+The @code{\n[.cht]} register contains the
+maximum extent (above the baseline)
+of the last glyph added to the current environment.
+
+The @code{\n[.cdp]} register contains the
+maximum extent (below the baseline)
+of the last glyph added to the current environment.
+
+The @code{\n[.csk]} register contains the
+@dfn{skew} (how far to the right of the glyph's center
+that @code{gtroff} shold place an accent)
+of the last glyph added to the current environment.
+@endDefreg
+
@c =====================================================================
-@node Suppressing output, I/O, Environments, gtroff Reference
+@node Suppressing output, Colors, Environments, gtroff Reference
@section Suppressing output
-@cindex suppressing output
@Defesc {\\O, , num, }
-Disables or enables output depending on the value of @var{num}:
+@cindex suppressing output (@code{\O})
+@cindex output, suppressing (@code{\O})
+Disable or enable output depending on the value of @var{num}:
@table @samp
@item \O0
-Disable any ditroff glyphs from being emitted to the device driver.
+Disable any glyphs from being emitted to the device driver, provided that
+the escape occurs at the outer level (see @code{\O[3]} and @code{\O[4]}).
+Motion is not suppressed so effectively @code{\O[0]} means @emph{pen up}.
@item \O1
-Enable output of glyphs.
+Enable output of glyphs, provided that the escape occurs at the outer
+level.
@end table
@vindex opminx
@@ -8278,25 +11243,148 @@ Enable output of glyphs.
@xref{Register Index}. These four registers mark the top left and
bottom right hand corners of a box which encompasses all written glyphs.
-The following two forms of @code{\O} are specific to @code{grohtml}.
+For example the input text:
+
+@Example
+Hello \O[0]world \O[1]this is a test.
+@endExample
+
+@noindent
+produces the following output:
+
+@Example
+Hello this is a test.
+@endExample
@table @samp
@item \O2
-Disable any ditroff glyphs from being emitted to the device driver. Also
-write out to @code{stderr} the page number and four registers encompassing
-the glyphs previously written since the last call to @code{\O}.
+Provided that the escape occurs at the outer level, enable output of
+glyphs and also write out to @code{stderr} the page number and four
+registers encompassing the glyphs previously written since the last call
+to @code{\O}.
@item \O3
-Enable output of glyphs (the default). Also write out to @code{stderr}
-the page number and four registers encompassing the glyphs previously
-written since the last call to @code{\O}.
+Begin a nesting level. At start-up, @code{gtroff} is at outer level.
+
+@item \O4
+End a nesting level.
+
+@item \O[5@var{P}@var{filename}]
+This escape is @code{grohtml} specific. Provided that this escape
+occurs at the outer nesting level write the @code{filename} to
+@code{stderr}. The position of the image, @var{P}, must be specified
+and must be one of @code{l}, @code{r}, @code{c}, or@w{ }@code{i} (left,
+right, centered, inline). @var{filename} will be associated with the
+production of the next inline image.
@end table
@endDefesc
+@c =====================================================================
+
+@node Colors, I/O, Suppressing output, gtroff Reference
+@section Colors
+@cindex colors
+
+@DefreqList {color, [@Var{n}]}
+@DefregListEnd {.color}
+If @var{n} is missing or non-zero, activate colors (this is the default);
+otherwise, turn it off.
+
+The read-only number register @code{.color} is@w{ }1 if colors are active,
+0@w{ }otherwise.
+
+Internally, @code{color} sets a global flag; it does not produce a token.
+Similar to the @code{cp} request, you should use it at the beginning of
+your document to control color output.
+
+Colors can be also turned off with the @option{-c} command line option.
+@endDefreq
+
+@Defreq {defcolor, ident scheme color_components}
+Define color with name @var{ident}. @var{scheme} can be one of the
+following values: @code{rgb} (three components), @code{cym} (three
+components), @code{cmyk} (four components), and @code{gray} or
+@code{grey} (one component).
+
+@cindex default color
+@cindex color, default
+Color components can be given either as a hexadecimal string or as
+positive decimal integers in the range 0--65535. A hexadecimal string
+contains all color components concatenated. It must start with either
+@code{#} or @code{##}; the former specifies hex values in the range
+0--255 (which are internally multiplied by@w{ }257), the latter in the
+range 0--65535. Examples: @code{#FFC0CB} (pink), @code{##ffff0000ffff}
+(magenta). The default color name @c{default} can't be redefined; its
+value is device-specific (usually black). It is possible that the
+default color for @code{\m} and @code{\M} is not identical.
+
+@cindex @code{f} unit, and colors
+@cindex unit, @code{f}, and colors
+A new scaling indicator@w{ }@code{f} has been introduced which multiplies
+its value by 65536; this makes it convenient to specify color components
+as fractions in the range 0 to@w{ }1 (1f equals 65536u). Example:
+
+@Example
+.defcolor darkgreen rgb 0.1f 0.5f 0.2f
+@endExample
+
+Note that @code{f} is the default scaling indicator for the
+@code{defcolor} request, thus the above statement is equivalent to
+
+@Example
+.defcolor darkgreen rgb 0.1 0.5 0.2
+@endExample
+@endDefreq
+
+@DefescList {\\m, , c, }
+@DefescItem {\\m, @lparen{}, co, }
+@DefescListEnd {\\m, @lbrack{}, color, @rbrack}
+Set drawing color. The following example shows how to turn the next four
+words red.
+
+@Example
+\m[red]these are in red\m[] and these words are in black.
+@endExample
+
+The escape @code{\m[]} returns to the previous color.
+
+The drawing color is associated with the current environment
+(@pxref{Environments}).
+
+Note that @code{\m} doesn't produce an input token in @code{gtroff}.
+As a consequence, it can be used in requests like @code{mc} (which
+expects a single character as an argument) to change the color on
+the fly:
+
+@Example
+.mc \m[red]x\m[]
+@endExample
+@endDefesc
+
+@DefescList {\\M, , c, }
+@DefescItem {\\M, @lparen{}, co, }
+@DefescListEnd {\\M, @lbrack{}, color, @rbrack}
+Set background color for filled objects drawn with the
+@code{\D'@dots{}'} commands.
+
+A red ellipse can be created with the following code:
+
+@Example
+\M[red]\h'0.5i'\D'E 2i 1i'\M[]
+@endExample
+
+The escape @code{\M[]} returns to the previous fill color.
+
+The fill color is associated with the current environment
+(@pxref{Environments}).
+
+Note that @code{\M} doesn't produce an input token in @code{gtroff}.
+@endDefesc
+
@c =====================================================================
-@node I/O, Postprocessor Access, Suppressing output, gtroff Reference
+@node I/O, Postprocessor Access, Colors, gtroff Reference
@section I/O
@cindex i/o
@cindex input and output requests
@@ -8305,33 +11393,62 @@ written since the last call to @code{\O}.
@code{gtroff} has several requests for including files:
-@cindex including a file
-@cindex file inclusion
@Defreq {so, file}
-Reads in the specified @var{file} and
+@cindex including a file (@code{so})
+@cindex file, inclusion (@code{so})
+Read in the specified @var{file} and
includes it in place of the @code{so} request. This is quite useful for
large documents, e.g.@: keeping each chapter in a separate file.
@xref{gsoelim}, for more information.
+
+Since @code{gtroff} replaces the @code{so} request with the contents
+of @code{file}, it makes a difference whether the data is terminated with
+a newline or not: Assuming that file @file{xxx} contains the word
+@samp{foo} without a final newline, this
+
+@Example
+This is
+.so xxx
+bar
+@endExample
+
+@noindent
+yields @samp{This is foobar}.
+@endDefreq
+
+@Defreq {pso, command}
+Read the standard output from the specified @var{command}
+and includes it in place of the @code{pso} request.
+
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+This request causes an error if used in safer mode (which is the default).
+Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe
+mode.
+
+The comment regarding a final newline for the @code{so} request is valid
+for @code{pso} also.
@endDefreq
@Defreq {mso, file}
-Identical to the @code{so} request except that @code{gtroff}
-searches for the specified
-@var{file} in the same directories as macro files for the
+Identical to the @code{so} request except that @code{gtroff} searches for
+the specified @var{file} in the same directories as macro files for the
the @option{-m} command line option. If the file name to be included
has the form @file{@var{name}.tmac} and it isn't found, @code{mso} tries
to include @file{tmac.@var{name}} and vice versa.
@endDefreq
-@cindex transparent output
-@cindex output, transparent
-@Defreq {cf, file}
-@Defreqx {trf, file}
-Transparently outputs the contents of @var{file}. 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 is added. For example, to define a macro@w{ }@code{x}
-containing the contents of file@w{ }@file{f}, use
+@DefreqList {trf, file}
+@DefreqListEnd {cf, file}
+@cindex transparent output (@code{cf}, @code{trf})
+@cindex output, transparent (@code{cf}, @code{trf})
+Transparently output the contents of @var{file}. Each line is output
+as if it were preceded by @code{\!}; however, the lines are not subject
+to copy mode interpretation. If the file does not end with a newline,
+then a newline is added (@code{trf} only). For example, to define a
+macro@w{ }@code{x} containing the contents of file@w{ }@file{f}, use
@Example
.di x
@@ -8339,38 +11456,65 @@ containing the contents of file@w{ }@file{f}, use
.di
@endExample
-The request @w{@code{.cf @var{filename}}}, when used in a diversion,
+Both @code{trf} and @code{cf}, when used in a diversion,
embeds an object in the diversion which, when reread, causes the
-contents of @var{filename} to be transparently copied through to the
-output.
-
-In @acronym{UNIX} @code{troff}, the contents of @var{filename}
+contents of @var{file} to be transparently copied through to the
+output. In @acronym{UNIX} @code{troff}, the contents of @var{file}
is immediately copied through to the output regardless of whether there
is a current diversion; this behaviour is so anomalous that it must be
-considered a bug. This request causes a line break.
+considered a bug.
-@rqindex trf
-With @code{trf}, unlike @code{cf}, the file cannot contain characters
-such as NUL that are not valid @code{gtroff} input characters
-(@pxref{Identifiers}). This request causes a line break.
+@cindex @code{trf} request, and invalid characters
+@cindex characters, invalid for @code{trf} request
+@cindex invalid characters for @code{trf} request
+While @code{cf} copies the contents of @var{file} completely unprocessed,
+@code{trf} disallows characters such as NUL that are not valid
+@code{gtroff} input characters (@pxref{Identifiers}).
+
+Both requests cause a line break.
@endDefreq
-@Defreq {nx, }
-Forces @code{gtroff} to continue processing of
-the file specified as an argument.
+@Defreq {nx, [@Var{file}]}
+@cindex processing next file (@code{nx})
+@cindex file, processing next (@code{nx})
+@cindex next file, processing (@code{nx})
+Force @code{gtroff} to continue processing of
+the file specified as an argument. If no argument is given, immediately
+jump to the end of file.
@endDefreq
-@Defreq {rd, }
-The @code{rd} request reads from standard input, and includes what is
-read as though it were part of the input file. Text is read until a
-blank line is encountered.
+@Defreq {rd, [@Var{prompt} [@Var{arg1} @Var{arg2} @dots{}]]}
+@cindex reading from standard input (@code{rd})
+@cindex standard input, reading from (@code{rd})
+@cindex input, standard, reading from (@code{rd})
+Read from standard input, and include what is read as though it
+were part of the input file. Text is read until a blank line
+is encountered.
+
+If standard input is a TTY input device (keyboard), write @var{prompt}
+to standard error, followed by a colon (or send BEL for a beep if no
+argument is given).
+
+Arguments after @var{prompt} are available for the input. For example,
+the line
+
+@Example
+.rd data foo bar
+@endExample
+
+with the input @w{@samp{This is \$2.}} prints
+
+@Example
+This is bar.
+@endExample
@endDefreq
@cindex form letters
@cindex letters, form
Using the @code{nx} and @code{rd} requests,
it is easy to set up form letters. The form
-letter template is constructed like this:
+letter template is constructed like this, putting the following lines
+into a file called @file{repeat.let}:
@Example
.ce
@@ -8386,13 +11530,13 @@ Body of letter.
.nx repeat.let
@endExample
-@rqindex ex
+@cindex @code{ex} request, used with @code{nx} and @code{rd}
@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.
+When this is run, a file containing the following lines should be
+redirected in. Note that requests included in this file are executed
+as though they were part of the form letter. The last block of input
+is the @code{ex} request which tells @code{groff} to stop processing. If
+this was not there, @code{groff} would not know when to stop.
@Example
Trent A. Fisher
@@ -8411,21 +11555,50 @@ Dear Mr. Adollar,
@endExample
@Defreq {pi, pipe}
-Pipes the output of @code{gtroff} to the shell command(s)
+Pipe the output of @code{gtroff} to the shell command(s)
specified by @var{pipe}. This request must occur before
@code{gtroff} has a chance to print anything.
+
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+@code{pi} causes an error if used in safer mode (which is the default).
+Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe
+mode.
+
+Multiple calls to @code{pi} are allowed, acting as a chain. For example,
+
+@Example
+.pi foo
+.pi bar
+...
+@endExample
+
+is the same as @w{@samp{.pi foo | bar}}.
+
+@cindex @code{groff}, and @code{pi} request
+@cindex @code{pi} request, and @code{groff}
+Note that the intermediate output format of @code{gtroff} is piped to
+the specified commands. Consequently, calling @code{groff} without the
+@option{-Z} option normally causes a fatal error.
@endDefreq
-@Defreq {sy, cmds}
-@Defregx {systat}
-In @dfn{unsafe} mode, executes the shell command(s) specified by
-@var{cmds}. The output is not saved anyplace, so it is up to the user
-to do so.
+@DefreqList {sy, cmds}
+@DefregListEnd {systat}
+Execute the shell command(s) specified by @var{cmds}. The output is not
+saved anyplace, so it is up to the user to do so.
-@c XXX add info about safer and unsafe mode
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+This request causes an error if used in safer mode (which is the default).
+Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe
+mode.
-For example, the following example introduces the current time
-into a document:
+For example, the following code fragment introduces the current time into a
+document:
@cindex time, current
@cindex current time
@@ -8441,53 +11614,103 @@ into a document:
@noindent
Note that this works by having the @code{perl} script (run by @code{sy})
print out the @code{nr} requests which set the number registers
-@samp{H}, @samp{M} and @samp{S}, and then reads those commands in with
+@code{H}, @code{M}, and @code{S}, and then reads those commands in with
the @code{so} request.
-@cindex @code{system()} return value register
+For most practical purposes, the number registers @code{seconds},
+@code{minutes}, and @code{hours} which are initialized at start-up of
+@code{gtroff} should be sufficient. Use the @code{af} request to get a
+formatted output:
+
+@Example
+.af hours 00
+.af minutes 00
+.af seconds 00
+\n[hours]:\n[minutes]:\n[seconds]
+@endExample
+
+@cindex @code{system()} return value register (@code{systat})
The @code{systat} read-write number register contains the return value
of the @code{system()} function executed by the last @code{sy} request.
@endDefreq
-@Defreq {open, stream file}
-@Defreqx {opena, stream file}
-Opens the specified @var{file} for writing and
+@DefreqList {open, stream file}
+@DefreqListEnd {opena, stream file}
+@cindex opening file (@code{open})
+@cindex file, opening (@code{open})
+@cindex appending to a file (@code{opena})
+@cindex file, appending to (@code{opena})
+Open the specified @var{file} for writing and
associates the specified @var{stream} with it.
-The @code{opena} is like @code{open}, but if the file exists, append to
-it instead of truncating it.
+The @code{opena} request is like @code{open}, but if the file exists,
+append to it instead of truncating it.
+
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+Both @code{open} and @code{opena} cause an error if used in safer mode
+(which is the default). Use @code{groff}'s or @code{troff}'s @option{-U}
+option to activate unsafe mode.
@endDefreq
+@DefreqList {write, stream data}
+@DefreqListEnd {writec, stream data}
@cindex copy-in mode, and @code{write} requests
@cindex mode, copy-in, and @code{write} requests
-@Defreq {write, stream data}
-Writes to the file associated with the specified @var{stream}.
+@cindex writing to file (@code{write})
+@cindex file, writing to (@code{write})
+Write to the file associated with the specified @var{stream}.
The stream must previously have
been the subject of an open request. The remainder of the line is
interpreted as the @code{ds} request reads its second argument: A
leading @samp{"} is stripped, and it is read in copy-in mode.
+
+The @code{writec} request is like @code{write}, but only
+@code{write} appends a newline to the data.
+@endDefreq
+
+@Defreq {writem, stream xx}
+@cindex @code{asciify} request, and @code{writem}
+Write the contents of the macro or string @var{xx}
+to the file associated with the specified @var{stream}.
+
+@var{xx} is read in copy mode, i.e., already formatted elements are
+ignored. Consequently, diversions must be unformatted with the
+@code{asciify} request before calling @code{writem}. Usually, this
+means a loss of information.
@endDefreq
@Defreq {close, stream}
-Closes the specified @var{stream};
+@cindex closing file (@code{close})
+@cindex file, closing (@code{close})
+Close the specified @var{stream};
the stream is no longer an acceptable argument to the
@code{write} request.
-@c XXX example
+Here a simple macro to write an index entry.
-@ignore
@Example
-... example of open write &c...
+.open idx test.idx
+.
+.de IX
+. write idx \\n[%] \\$*
+..
+.
+.IX test entry
+.
+.close idx
@endExample
-@end ignore
@endDefreq
-@Defesc {\\V, ', xxx, '}
-Interpolates the contents of the specified
-environment variable, as returned by the function @code{getenv}.
-Specify the argument to @code{\V} 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.
+@DefescList {\\V, , e, }
+@DefescItem {\\V, @lparen{}, ev, }
+@DefescListEnd {\\V, @lbrack{}, env, @rbrack}
+Interpolate the contents of the specified environment variable
+@var{env} (one-character name@w{ }@var{e}, two-character name @var{ev})
+as returned by the function @code{getenv}. @code{\V} is interpreted
+in copy-in mode.
@endDefesc
@@ -8505,18 +11728,44 @@ postprocessor. This is particularly useful for embedding
@Defesc {\\X, ', xxx, '}
Embeds its argument into the @code{gtroff}
output preceded with @w{@samp{x X}}.
+
+@cindex @code{\&}, in @code{\X}
+@cindex @code{\)}, in @code{\X}
+@cindex @code{\%}, in @code{\X}
+@ifnotinfo
+@cindex @code{\:}, in @code{\X}
+@end ifnotinfo
+@ifinfo
+@cindex @code{\@r{<colon>}}, in @code{\X}
+@end ifinfo
+The escapes @code{\&}, @code{\)}, @code{\%}, and @code{\:} are ignored
+within @code{\X}, @w{@samp{\ }} and @code{\~} are converted to single
+space characters. All other escapes (except @code{\\} which produces a
+backslash) cause an error.
+
+@kindex use_charnames_in_special
+@pindex DESC@r{, and @code{use_charnames_in_special}}
+@cindex @code{\X}, and special characters
+If the @samp{use_charnames_in_special} keyword is set in the @file{DESC}
+file, special characters no longer cause an error; the name @var{xx} is
+represented as @samp{\(@var{xx})} in the @w{@samp{x X}} output command.
+Additionally, the backslash is represented as @code{\\}.
+
+@samp{use_charnames_in_special} is currently used by @code{grohtml} only.
@endDefesc
-@Defesc {\\Y, ', xxx, '}
-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 confuses drivers
-that do not know about this extension.
+@DefescList {\\Y, , n, }
+@DefescItem {\\Y, @lparen{}, nm, }
+@DefescListEnd {\\Y, @lbrack{}, name, @rbrack}
+This is approximately equivalent to @samp{\X'\*[@var{name}]'}
+(one-character name@w{ }@var{n}, two-character name @var{nm}).
+However, the contents of the string or macro @var{name} are not
+interpreted; also it is permitted for @var{name} to have been defined
+as a macro and thus contain newlines (it is not permitted for the
+argument to @code{\X} to contain newlines). The inclusion of
+newlines requires an extension to the @acronym{UNIX} @code{troff}
+output format, and confuses drivers that do not know about this
+extension (@pxref{Device Control Commands}).
@endDefesc
@xref{Output Devices}.
@@ -8526,50 +11775,105 @@ that do not know about this extension.
@node Miscellaneous, Gtroff Internals, Postprocessor Access, gtroff Reference
@section Miscellaneous
-@cindex miscellaneous
This section documents parts of @code{gtroff} which cannot (yet) be
categorized elsewhere in this manual.
-@cindex line numbers
-@cindex numbers, line
-@Defreq {nm, start inc space indent}
-Prints line numbers in the left margin.
+@Defreq {nm, [@Var{start} [@Var{inc} [@Var{space} [@Var{indent}]]]]}
+@cindex printing line numbers (@code{nm})
+@cindex line numbers, printing (@code{nm})
+@cindex numbers, line, printing (@code{nm})
+Print line numbers.
@var{start} is the line number of the @emph{next}
-output line; this defaults to@w{ }1. @var{inc} indicates on
-which lines numbers are printed, i.e.@: 5 means put line numbers on
-every 5@w{ }lines; this defaults to@w{ }1. @var{space} 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.
-@endDefreq
-
-@c XXX xref ln register
-
-@Defreq {nn, [@Var{skip}]}
-Temporarily turns off line numbering. The
-argument is the number of lines not to be numbered; this defaults
-to@w{ }1.
-
-@c XXX (does this disable incrementing or display?)
+output line. @var{inc} indicates which line numbers are printed.
+For example, the value@w{ }5 means to emit only line numbers which
+are multiples of@w{ }5; this defaults to@w{ }1. @var{space} is the
+space to be left between the number and the text; this defaults to
+one digit space. The fourth argument is the indentation of the line
+numbers, defaulting to zero. Both @var{space} and @var{indent} are
+given as multiples of digit spaces; they can be negative also.
+Without any arguments, line numbers are turned off.
+
+@code{gtroff} reserves three digit spaces for the line number (which is
+printed right-justified) plus the amount given by @var{indent}; the
+output lines are concatenated to the line numbers, separated by
+@var{space}, and @emph{without} reducing the line length. Depending
+on the value of the horizontal page offset (as set with the
+@code{po} request), line numbers which are longer than the reserved
+space stick out to the left, or the whole line is moved to the right.
+
+Parameters corresponding to missing arguments are not changed; any
+non-digit argument (to be more precise, any argument starting with a
+character valid as a delimiter for identifiers) is also treated as
+missing.
+
+If line numbering has been disabled with a call to @code{nm} without
+an argument, it can be reactivated with @samp{.nm +0}, using the
+previously active line numbering parameters.
+
+The parameters of @code{nm} are associated with the current environment
+(@pxref{Environments}). The current output line number is available
+in the number register @code{ln}.
+
+@Example
+.po 1m
+.ll 2i
+This test shows how line numbering works with groff.
+.nm 999
+This test shows how line numbering works with groff.
+.br
+.nm xxx 3 2
+.ll -\w'0'u
+This test shows how line numbering works with groff.
+.nn 2
+This test shows how line numbering works with groff.
+@endExample
-@c XXX example
+@noindent
+And here the result:
-@ignore
@Example
-... line numbering example ...
+ This test shows how
+ line numbering works
+ 999 with groff. This
+1000 test shows how line
+1001 numbering works with
+1002 groff.
+ This test shows how
+ line numbering
+ works with groff.
+ This test shows how
+1005 line numbering
+ works with groff.
@endExample
-@end ignore
@endDefreq
-@cindex margin characters
-@cindex characters for margins
-@Defreq {mc, char dist}
-Prints margin characters to the right of the text.
-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 is printed.
+@Defreq {nn, [@Var{skip}]}
+Temporarily turn off line numbering. The argument is the number
+of lines not to be numbered; this defaults to@w{ }1.
+@endDefreq
+
+@Defreq {mc, glyph [@Var{dist}]}
+@cindex margin glyph (@code{mc})
+@cindex glyph, for margins (@code{mc})
+Print a @dfn{margin character} to the right of the
+text.@footnote{@dfn{Margin character} is a misnomer since it is an
+output glyph.} The first argument is the glyph to be
+printed. The second argument is the distance away from the right
+margin. If missing, the previously set value is used; default is
+10@dmn{pt}). For text lines that are too long (that is, longer than
+the text length plus @var{dist}), the margin character is directly
+appended to the lines.
+
+With no arguments the margin character is turned off.
+If this occurs before a break, no margin character is printed.
+
+@cindex @code{tl} request, and @code{mc}
+For empty lines and lines produced by the @code{tl} request no margin
+character is emitted.
+
+The margin character is associated with the current environment
+(@pxref{Environments}).
@pindex nrchbar
@pindex changebar
@@ -8578,33 +11882,49 @@ 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 ...
+.ll 3i
+.mc |
+This paragraph is highlighted with a margin
+character.
+.sp
+Note that vertical space isn't marked.
+.br
+\&
+.br
+But we can fake it with `\&'.
@endExample
-@end ignore
-@endDefreq
-@pindex soelim
-@cindex multi-file documents
-@cindex documents, multi-file
-@Defreq {lf, line filename}
-A debugging aid for
-documents which are split into many files, then put together
-with @code{soelim} and other preprocessors. The second argument is the
-name of the file and the first 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
+Result:
-@ignore
@Example
-... example of soelim'ed doc ...
+This paragraph is highlighted |
+with a margin character. |
+
+Note that vertical space isn't |
+marked. |
+ |
+But we can fake it with `\&'. |
@endExample
-@end ignore
+@endDefreq
+
+@DefreqList {psbb, filename}
+@DefregItem {llx}
+@DefregItem {lly}
+@DefregItem {urx}
+@DefregListEnd {ury}
+@cindex PostScript, bounding box
+@cindex bounding box
+Retrieve the bounding box of the PostScript image
+found in @var{filename}.
+The file must conform to
+Adobe's @dfn{Document Structuring Conventions} (DSC);
+the command searches for a @code{%%BoundingBox} comment
+and extracts the bounding box values into the number registers
+@code{llx}, @code{lly}, @code{urx}, and @code{ury}.
+If an error occurs (for example, @code{psbb} cannot find
+the @code{%%BoundingBox} comment),
+it sets the four number registers to zero.
@endDefreq
@@ -8618,20 +11938,29 @@ intelligible to the user.
@cindex output node
@cindex node, output
@code{gtroff} processes input in three steps. One or more input
-characters are converted to an @dfn{input token}. Then, one or more
-input tokens are converted to an @dfn{output node}. Finally, output
-nodes are converted to the intermediate output language understood by
-all output devices.
-
-For example, the input string @samp{fi\[:u]} is converted in a
+characters are converted to an @dfn{input token}.@footnote{Except the
+escapes @code{\f}, @code{\F}, @code{\H}, @code{\m}, @code{\M}, @code{\R},
+@code{\s}, and @code{\S} which are processed immediately if not in
+copy-in mode.} Then, one or more input tokens are converted to an
+@dfn{output node}. Finally, output nodes are converted to the
+intermediate output language understood by all output devices.
+
+Actually, before step one happens, @code{gtroff} converts certain
+escape sequences into reserved input characters (not accessible by
+the user); such reserved characters are used for other internal
+processing also -- this is the very reason why not all characters
+are valid input. @xref{Identifiers}, for more on this topic.
+
+For example, the input string @samp{fi\[:u]} is converted into a
character token @samp{f}, a character token @samp{i}, and a special
token @samp{:u} (representing u@w{ }umlaut). Later on, the character
tokens @samp{f} and @samp{i} are merged to a single output node
-representing the ligature glyph @samp{fi}; the same happens with
-@samp{:u}. All output glyph nodes are `processed' which means that
-they are invariably associated with a given font, font size, advance
-width, etc. During the formatting process, @code{gtroff} itself adds
-various nodes to control the data flow.
+representing the ligature glyph @samp{fi} (provided the current font
+has a glyph for this ligature); the same happens with @samp{:u}. All
+output glyph nodes are `processed' which means that they are invariably
+associated with a given font, font size, advance width, etc. During
+the formatting process, @code{gtroff} itself adds various nodes to
+control the data flow.
Macros, diversions, and strings collect elements in two chained lists:
a list of input tokens which have been passed unprocessed, and a list
@@ -8663,12 +11992,11 @@ It contains these elements.
@item --- @tab @code{\n} @tab 9
@end multitable
-@esindex \v
-@rqindex unformat
+@cindex @code{\v}, internal representation
@noindent
Elements 1, 7, and@w{ }8 are inserted by @code{gtroff}; the latter two
(which are always present) specify the vertical extent of the last
-line, possibly modified by @code{\v}. The @code{br} request finishes
+line, possibly modified by @code{\x}. The @code{br} request finishes
the current partial line, inserting a newline input token which is
subsequently converted to a space when the diversion is reread. Note
that the word space node has a fixed width which isn't stretchable
@@ -8678,6 +12006,39 @@ the @code{unformat} request.
Macros only contain elements in the token list (and the node list is
empty); diversions and strings can contain elements in both lists.
+Note that the @code{chop} request simply reduces the number of elements in a
+macro, string, or diversion by one. Exceptions are @dfn{compatibility save}
+and @dfn{compatibility ignore} input tokens which are ignored. The
+@code{substring} request also ignores those input tokens.
+
+Some requests like @code{tr} or @code{cflags} work on glyph
+identifiers only; this means that the associated glyph can be changed
+without destroying this association. This can be very helpful for
+substituting glyphs. In the following example, we assume that
+glyph @samp{foo} isn't available by default, so we provide a
+substitution using the @code{fchar} request and map it to input
+character @samp{x}.
+
+@Example
+.fchar \[foo] foo
+.tr x \[foo]
+@endExample
+
+@noindent
+Now let us assume that we install an additional special font
+@samp{bar} which has glyph @samp{foo}.
+
+@Example
+.special bar
+.rchar \[foo]
+@endExample
+
+@noindent
+Since glyphs defined with @code{fchar} are searched before glyphs
+in special fonts, we must call @code{rchar} to remove the definition
+of the fallback glyph. Anyway, the translation is still active;
+@samp{x} now maps to the real glyph @samp{foo}.
+
@c =====================================================================
@@ -8688,23 +12049,54 @@ empty); diversions and strings can contain elements in both lists.
@code{gtroff} is not easy to debug, but there are some useful features
and strategies for debugging.
-@Defreq {tm, string}
-Sends the @var{string} to the standard error stream;
-this is very useful for printing debugging output among other things.
+@Defreq {lf, line filename}
+@pindex soelim
+@cindex multi-file documents
+@cindex documents, multi-file
+@cindex setting input line number (@code{lf})
+@cindex input line number, setting (@code{lf})
+@cindex number, input line, setting (@code{lf})
+Change the line number and the file name @code{gtroff} shall use for
+error and warning messages. @var{line} is the input line number of the
+@emph{next} line.
+
+Without argument, the request is ignored.
+
+This is a debugging aid for documents which are split into many files,
+then put together with @code{soelim} and other preprocessors. Usually,
+it isn't invoked manually.
+@endDefreq
+
+@DefreqList {tm, string}
+@DefreqItem {tm1, string}
+@DefreqListEnd {tmc, string}
+@cindex printing to stderr (@code{tm}, @code{tm1}, @code{tmc})
+@cindex stderr, printing to (@code{tm}, @code{tm1}, @code{tmc})
+Send @var{string} to the standard error output;
+this is very useful for printing debugging messages among other things.
+
+@var{string} is read in copy mode.
+
+The @code{tm} request ignores leading spaces of @var{string}; @code{tm1}
+handles its argument similar to the @code{ds} request: a leading double
+quote in @var{string} is stripped to allow initial blanks.
+
+The @code{tmc} request is similar to @code{tm1} but does
+not append a newline (as is done in @code{tm} and @code{tm1}).
@endDefreq
-@cindex aborting
@Defreq {ab, [@Var{string}]}
+@cindex aborting (@code{ab})
Similar to the @code{tm} request, except that
it causes @code{gtroff} to stop processing. With no argument it
-prints @samp{User Abort}.
+prints @samp{User Abort.} to standard error.
@endDefreq
-@cindex @code{ex}, use in debugging
-@cindex exiting
@Defreq {ex, }
-The @code{ex} request also causes @code{gtroff} to stop processing
-if encountered at the topmost level; see also @ref{I/O}.
+@cindex @code{ex} request, use in debugging
+@cindex exiting (@code{ex})
+The @code{ex} request also causes @code{gtroff} to stop processing;
+see also @ref{I/O}.
@endDefreq
When doing something involved it is useful to leave the debugging
@@ -8721,50 +12113,122 @@ To activate these statements say
groff -rDB=1 file
@endExample
-@c XXX .tm1, .tmc requests
-
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.
-@cindex dumping symbol table
-@cindex symbol table, dumping
@Defreq {pm, }
-The @code{pm} request prints out the entire symbol table on @code{stderr}.
+@cindex dumping symbol table (@code{pm})
+@cindex symbol table, dumping (@code{pm})
+Print the entire symbol table on @code{stderr}. Names of all defined
+macros, strings, and diversions are print together with their size in
+bytes. Since @code{gtroff} sometimes adds nodes by itself, the
+returned size can be larger than expected.
+
+This request differs from @acronym{UNIX} @code{troff}: @code{gtroff}
+reports the sizes of diversions, ignores an additional argument to
+print only the total of the sizes, and the size isn't returned in
+blocks of 128 characters.
@endDefreq
-@cindex dumping number registers
-@cindex number registers, dumping
@Defreq {pnr, }
-Prints the names and contents of all
+@cindex dumping number registers (@code{pnr})
+@cindex number registers, dumping (@code{pnr})
+Print the names and contents of all
currently defined number registers on @code{stderr}.
@endDefreq
-@cindex dumping traps
-@cindex traps, dumping
@Defreq {ptr, }
-Prints the names and positions of all traps
+@cindex dumping traps (@code{ptr})
+@cindex traps, dumping (@code{ptr})
+Print the names and positions of all traps
(not including input line traps and diversion traps) on @code{stderr}.
Empty slots in the page trap list are printed as well, because they can
affect the priority of subsequently planted traps.
@endDefreq
-@cindex flush output
-@cindex output, flush
+@Defreq {fl, }
+@cindex flush output (@code{fl})
+@cindex output, flush (@code{fl})
@cindex interactive use of @code{gtroff}
@cindex @code{gtroff}, interactive use
-@Defreq {fl, }
-Instructs @code{gtroff} to flush its output
-immediately. The intent is for interactive use.
-@code{gtroff}; there is little other use for it. This
-request causes a line break.
+Instruct @code{gtroff} to flush its output immediately. The intent
+is for interactive use, but this behaviour is currently not
+implemented in @code{gtroff}. Contrary to @acronym{UNIX} @code{troff},
+TTY output is sent to a device driver also (@code{grotty}), making it
+non-trivial to communicate interactively.
+
+This request causes a line break.
@endDefreq
-@cindex backtrace of input stack
-@cindex input stack, backtrace
@Defreq {backtrace, }
-The @code{backtrace} request prints a backtrace of the input stack
-to the standard error stream.
+@cindex backtrace of input stack (@code{backtrace})
+@cindex input stack, backtrace (@code{backtrace})
+Print a backtrace of the input stack to the standard error stream.
+
+Consider the following in file @file{test}:
+
+@Example
+.de xxx
+. backtrace
+..
+.de yyy
+. xxx
+..
+.
+.yyy
+@endExample
+
+@noindent
+On execution, @code{gtroff} prints the following:
+
+@Example
+test:2: backtrace: macro `xxx'
+test:5: backtrace: macro `yyy'
+test:8: backtrace: file `test'
+@endExample
+
+The option @option{-b} of @code{gtroff} internally calls a variant of
+this request on each error and warning.
+@endDefreq
+
+@Defreg {slimit}
+@cindex input stack, setting limit
+Use the @code{slimit} number register
+to set the maximum number of objects on the input stack.
+If @code{slimit} is less than or equal to@w{ }0,
+there is no limit set.
+With no limit, a buggy recursive macro can exhaust virtual memory.
+
+The default value is 1000; this is a compile-time constant.
+@endDefreg
+
+@Defreq {warnscale, si}
+Set the scaling indicator used in warnings to @var{si}. Valid values for
+@var{si} are @samp{u}, @samp{i}, @samp{c}, @samp{p}, and @samp{P}. At
+startup, it is set to @samp{i}.
+@endDefreq
+
+@Defreq {spreadwarn, [@Var{limit}]}
+Make @code{gtroff} emit a warning if the additional space inserted for
+each space between words in an output line is larger or equal to
+@var{limit}. A negative value is changed to zero; no argument toggles the
+warning on and off without changing @var{limit}. The default scaling
+indicator is @samp{m}. At startup, @code{spreadwarn} is deactivated, and
+@var{limit} is set to 3@dmn{m}.
+
+For example,
+
+@Example
+.spreadwarn 0.2m
+@endExample
+
+@noindent
+will cause a warning if @code{gtroff} must add 0.2@dmn{m} or more for each
+interword space in a line.
+
+This request is active only if text is justified to both margins (using
+@w{@samp{.ad b}}).
@endDefreq
@cindex warnings
@@ -8772,16 +12236,16 @@ to the standard error stream.
(@option{-w}) and for printing backtraces (@option{-b}) when a warning
or an error occurs. The most verbose level of warnings is @option{-ww}.
-@cindex level of warnings
-@cindex warnings, level
-@Defreq {warn, [@Var{flags}]}
-@Defregx {.warn}
-Controls the level of warnings checked for. The @var{flags} are the sum
+@DefreqList {warn, [@Var{flags}]}
+@DefregListEnd {.warn}
+@cindex level of warnings (@code{warn})
+@cindex warnings, level (@code{warn})
+Control the level of warnings checked for. The @var{flags} are the sum
of the numbers associated with each warning that is to be enabled; all
other warnings are disabled. The number associated with each warning is
listed below. For example, @w{@code{.warn 0}} disables all warnings,
and @w{@code{.warn 1}} disables all warnings except that about missing
-characters. If an argument is not given, all warnings are enabled.
+glyphs. If no argument is given, all warnings are enabled.
The read-only number register @code{.warn} contains the current warning
level.
@@ -8805,7 +12269,9 @@ the @option{-w} and @option{-W} options; the number is used by the
@table @samp
@item char
@itemx 1
-Non-existent characters. This is enabled by default.
+Non-existent glyphs.@footnote{@code{char} is a misnomer since it reports
+missing glyphs -- there aren't missing input characters, only invalid
+ones.} This is enabled by default.
@item number
@itemx 2
@@ -8825,8 +12291,8 @@ Missing or mismatched closing delimiters.
@item el
@itemx 16
-@rqindex ie
-@rqindex el
+@cindex @code{ie} request, and warnings
+@cindex @code{el} request, and warnings
Use of the @code{el} request with no matching @code{ie} request.
@xref{if-else}.
@@ -8844,55 +12310,61 @@ Dubious syntax in numeric expressions.
@item di
@itemx 256
-@rqindex di
-@rqindex da
-@cindex @code{di}, debugging
-@cindex @code{da}, debugging
+@cindex @code{di} request, and warnings
+@cindex @code{da} request, and warnings
Use of @code{di} or @code{da} without an argument when there is no
current diversion.
@item mac
@itemx 512
-@rqindex de
-@c XXX more index entries
+@cindex @code{de}, @code{de1}, @code{dei} requests, and warnings
+@cindex @code{am}, @code{am1}, @code{ami} requests, and warnings
+@cindex @code{ds}, @code{ds1} requests, and warnings
+@cindex @code{as}, @code{as1} requests, and warnings
+@cindex @code{di} request, and warnings
+@cindex @code{da} request, and warnings
+@cindex @code{box}, @code{boxa} requests, and warnings
+@cindex @code{\*}, and warnings
Use of undefined strings, macros and diversions. When an undefined
-string, macro or diversion is used, that string is automatically defined
-as empty. So, in most cases, at most one warning is given for each
-name.
+string, macro, or diversion is used, that string is automatically
+defined as empty. So, in most cases, at most one warning is given
+for each name.
-@item reg
+@item reg
@itemx 1024
-@rqindex nr
-@c XXX more index entries
+@cindex @code{nr} request, and warnings
+@cindex @code{\R}, and warnings
+@cindex @code{\n}, and warnings
Use of undefined number registers. When an undefined number register is
used, that register is automatically defined to have a value of@w{ }0.
-A definition is automatically made with a value of@w{ }0. So, in most
-cases, at most one warning is given for use of a particular name.
+So, in most cases, at most one warning is given for use of a particular
+name.
-@item tab
+@item tab
@itemx 2048
+@cindex @code{\t}, and warnings
Use of a tab character where a number was expected.
-@item right-brace
+@item right-brace
@itemx 4096
-@esindex \@}
-@cindex @code{\@}}, debugging
+@cindex @code{\@}}, and warnings
Use of @code{\@}} where a number was expected.
-@item missing
+@item missing
@itemx 8192
Requests that are missing non-optional arguments.
-@item input
+@item input
@itemx 16384
-Illegal input characters.
+Invalid input characters.
-@item escape
+@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
+@code{\@var{X}} is encountered, the escape character is ignored, and
+@var{X} is printed.
-@item space
+@item space
@itemx 65536
@cindex compatibility mode
Missing space between a request or macro and its argument. This warning
@@ -8902,10 +12374,19 @@ name. The request or macro is not invoked. When this warning is
given, no macro is automatically defined. This is enabled by default.
This warning never occurs in compatibility mode.
-@item font
+@item font
@itemx 131072
Non-existent fonts. This is enabled by default.
+@item ig
+@itemx 262144
+Invalid escapes in text ignored with the @code{ig} request. These are
+conditions that are errors when they do not occur in ignored text.
+
+@item color
+@itemx 524288
+Color related warnings.
+
@item all
All warnings except @samp{di}, @samp{mac} and @samp{reg}. It is
intended that this covers all warnings that are useful with traditional
@@ -8918,11 +12399,11 @@ All warnings.
@c =====================================================================
-@node Implementation Differences, Summary, Debugging, gtroff Reference
+@node Implementation Differences, , Debugging, gtroff Reference
@section Implementation Differences
@cindex implementation differences
@cindex differences in implementation
-@cindex incompatibilities with Unix @code{troff}
+@cindex incompatibilities with @acronym{AT&T} @code{troff}
@cindex compatibility mode
@cindex mode, compatibility
@@ -8938,12 +12419,8 @@ interprets
.dsabcd
@endExample
-@esindex \*
-@esindex \n
-@cindex @code{\*}, incompatibilities with Unix @code{troff}
-@cindex @code{\n}, incompatibilities with Unix @code{troff}
-@rqindex cp
-@vindex .C
+@cindex @code{\*}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\n}, incompatibilities with @acronym{AT&T} @code{troff}
@noindent
as defining a string @samp{ab} with contents @samp{cd}. Normally, GNU
@code{troff} interprets this as a call of a macro named
@@ -8953,25 +12430,83 @@ called @samp{[}. In GNU @code{troff}, however, this is normally
interpreted as the start of a long name. In compatibility mode GNU
@code{troff} interprets long names in the traditional way
(which means that they are not recognized as names).
-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.
-
-@esindex \A
-@esindex \|
-@esindex \^
-@esindex \&
-@esindex \@{
-@esindex \@}
-@esindex \@key{SP}
-@esindex \'
-@esindex \`
-@esindex \-
-@esindex \_
-@esindex \!
-@esindex \%
-@esindex \c
+
+@DefreqList {cp, [@Var{n}]}
+@DefreqItem {do, cmd}
+@DefregListEnd {.C}
+If @var{n} is missing or non-zero, turn on compatibility mode;
+otherwise, turn it off.
+
+The read-only number register @code{.C} is@w{ }1 if compatibility mode is
+on, 0@w{ }otherwise.
+
+Compatibility mode can be also turned on with the @option{-C} command line
+option.
+
+The @code{do} request turns off compatibility mode
+while executing its arguments as a @code{gtroff} command.
+
+@Example
+.do fam T
+@endExample
+
+@noindent
+executes the @code{fam} request when compatibility mode
+is enabled.
+
+@code{gtroff} restores the previous compatibility setting
+before interpreting any files sourced by the @var{cmd}.
+@endDefreq
+
+@cindex input level in delimited arguments
+@cindex delimited arguments, incompatibilities with @acronym{AT&T} @code{troff}
+Two other features are controlled by @option{-C}. If not in
+compatibility mode, GNU @code{troff} preserves the input level in
+delimited arguments:
+
+@Example
+.ds xx '
+\w'abc\*(xxdef'
+@endExample
+
+@noindent
+In compatibility mode, the string @samp{72def'} is returned; without
+@option{-C} the resulting string is @samp{168} (assuming a TTY output
+device).
+
+@cindex @code{\f}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\H}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\s}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\S}, incompatibilities with @acronym{AT&T} @code{troff}
+Finally, the escapes @code{\f}, @code{\H}, @code{\m}, @code{\M},
+@code{\R}, @code{\s}, and @code{\S} are transparent for recognizing the
+beginning of a line only in compatibility mode (this is a rather obscure
+feature). For example, the code
+
+@Example
+.de xx
+Hallo!
+..
+\fB.xx\fP
+@endExample
+
+prints @samp{Hallo!} in bold face if in compatibility mode, and
+@samp{.xx} in bold face otherwise.
+
+@cindex @code{\A}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\|}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\^}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\&}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\@{}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\@}}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\@key{SP}}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\'}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\`}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\-}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\_}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\%}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\c}, incompatibilities with @acronym{AT&T} @code{troff}
GNU @code{troff} does not allow the use of the escape sequences
@code{\|}, @code{\^}, @code{\&}, @code{\@{}, @code{\@}},
@code{\@key{SP}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
@@ -8981,9 +12516,11 @@ registers, fonts or environments; @acronym{UNIX} @code{troff} does. The
avoiding use of these escape sequences in names.
@cindex fractional point sizes
+@cindex fractional type sizes
@cindex point sizes, fractional
-@rqindex ps
-@cindex @code{ps}, incompatibilities with Unix @code{troff}
+@cindex type sizes, fractional
+@cindex sizes, fractional
+@cindex @code{ps} request, incompatibilities with @acronym{AT&T} @code{troff}
Fractional point sizes cause one noteworthy incompatibility. In
@acronym{UNIX} @code{troff} the @code{ps} request ignores scale
indicators and thus
@@ -8997,30 +12534,25 @@ sets the point size to 10@w{ }points, whereas in GNU @code{troff} it
sets the point size to 10@w{ }scaled points. @xref{Fractional Type
Sizes}, for more information.
-@rqindex bd
-@rqindex cs
-@rqindex tkf
-@rqindex tr
-@rqindex fp
-@cindex @code{bd}, incompatibilities with Unix @code{troff}
-@cindex @code{cs}, incompatibilities with Unix @code{troff}
-@cindex @code{tkf}, incompatibilities with Unix @code{troff}
-@cindex @code{tr}, incompatibilities with Unix @code{troff}
-@cindex @code{fp}, 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
+@cindex @code{bd} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{cs} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{tr} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{fp} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex input characters and output glyphs, compatibility with @acronym{AT&T} @code{troff}
+@cindex output glyphs, and input characters,compatibility with @acronym{AT&T} @code{troff}
+@cindex characters, input, and output glyphs, compatibility with @acronym{AT&T} @code{troff}
+@cindex glyphs, output, and input characters, compatibility with @acronym{AT&T} @code{troff}
In GNU @code{troff} there is a fundamental difference between
-unformatted, input characters, and formatted, output characters.
-Everything that affects how an output character is output is stored
-with the character; once an output character has been constructed it is
+(unformatted) input characters and (formatted) output glyphs.
+Everything that affects how a glyph is output is stored
+with the glyph node; once a glyph node has been constructed it is
unaffected by any subsequent requests that are executed, including
@code{bd}, @code{cs}, @code{tkf}, @code{tr}, or @code{fp} requests.
-Normally output characters are constructed from input characters at the
-moment immediately before the character is added to the current output
+Normally glyphs are constructed from input characters at the
+moment immediately before the glyph is added to the current output
line. Macros, diversions and strings are all, in fact, the same type of
-object; they contain lists of input characters and output characters in
-any combination. An output character does not behave like an input
+object; they contain lists of input characters and glyph nodes in
+any combination. A glyph node does not behave like an input
character for the purposes of macro processing; it does not inherit any
of the special properties that the input character from which it was
constructed might have had. For example,
@@ -9033,14 +12565,13 @@ constructed might have had. For example,
.x
@endExample
-@esindex \e
-@esindex \!
-@esindex \?
-@cindex @code{\e}, incompatibilities with Unix @code{troff}
-@cindex @code{\!}, incompatibilities with Unix @code{troff}
-@cindex @code{\?}, incompatibilities with Unix @code{troff}
-@cindex transparent output, incompatibilities with Unix @code{troff}
-@cindex output, transparent, incompatibilities with Unix @code{troff}
+@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
+@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
+@cindex @code{\e}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\?}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex transparent output, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex output, transparent, incompatibilities with @acronym{AT&T} @code{troff}
@noindent
prints @samp{\\} in GNU @code{troff}; each pair of input backslashes
is turned into one output backslash and the resulting output backslashes
@@ -9051,24 +12582,14 @@ correct way to obtain a printable backslash is to use the @code{\e}
escape sequence: This always prints a single instance of the current
escape character, regardless of whether or not it is used in a
diversion; it also works in both GNU @code{troff} and @acronym{UNIX}
-@code{troff}. To store, for some reason, an escape sequence in a
+@code{troff}.@footnote{To be completely independent of the current
+escape character, use @code{\(rs} which represents a reverse solidus
+(backslash) glyph.} To store, for some reason, an escape sequence in a
diversion that will be interpreted when the diversion is reread, either
use the traditional @code{\!} transparent output facility, or, if this
is unsuitable, the new @code{\?} escape sequence.
-@c XXX .tl compatibility mode -> input stack level
-@c XXX .if compatibility mode -> input stack level
-
-@xref{Diversions}, for more information.
-
-
-@c =====================================================================
-
-@node Summary, , Implementation Differences, gtroff Reference
-@section Summary
-@cindex summary
-
-@c XXX documentation
+@xref{Diversions}, and @ref{Gtroff Internals}, for more information.
@@ -9097,8 +12618,8 @@ which are freely available.
@node geqn, gtbl, Preprocessors, Preprocessors
@section @code{geqn}
-@cindex @code{eqn}
-@cindex @code{geqn}
+@cindex @code{eqn}, the program
+@cindex @code{geqn}, the program
@c XXX
@@ -9120,8 +12641,8 @@ which are freely available.
@node gtbl, gpic, geqn, Preprocessors
@section @code{gtbl}
-@cindex @code{tbl}
-@cindex @code{gtbl}
+@cindex @code{tbl}, the program
+@cindex @code{gtbl}, the program
@c XXX
@@ -9143,8 +12664,8 @@ which are freely available.
@node gpic, ggrn, gtbl, Preprocessors
@section @code{gpic}
-@cindex @code{pic}
-@cindex @code{gpic}
+@cindex @code{pic}, the program
+@cindex @code{gpic}, the program
@c XXX
@@ -9166,8 +12687,8 @@ which are freely available.
@node ggrn, grap, gpic, Preprocessors
@section @code{ggrn}
-@cindex @code{grn}
-@cindex @code{ggrn}
+@cindex @code{grn}, the program
+@cindex @code{ggrn}, the program
@c XXX
@@ -9189,7 +12710,7 @@ which are freely available.
@node grap, grefer, ggrn, Preprocessors
@section @code{grap}
-@cindex @code{grap}
+@cindex @code{grap}, the program
A free implementation of @code{grap}, written by Ted Faber,
is available as an extra package from the following address:
@@ -9203,8 +12724,8 @@ is available as an extra package from the following address:
@node grefer, gsoelim, grap, Preprocessors
@section @code{grefer}
-@cindex @code{refer}
-@cindex @code{grefer}
+@cindex @code{refer}, the program
+@cindex @code{grefer}, the program
@c XXX
@@ -9226,8 +12747,8 @@ is available as an extra package from the following address:
@node gsoelim, , grefer, Preprocessors
@section @code{gsoelim}
-@cindex @code{soelim}
-@cindex @code{gsoelim}
+@cindex @code{soelim}, the program
+@cindex @code{gsoelim}, the program
@c XXX
@@ -9284,7 +12805,7 @@ is available as an extra package from the following address:
@node grotty, grops, Special Characters, Output Devices
@section @code{grotty}
-@cindex @code{grotty}
+@cindex @code{grotty}, the program
@c XXX
@@ -9301,12 +12822,29 @@ is available as an extra package from the following address:
@c XXX
+@c The following is no longer true; fix and extend it.
+
+@c @pindex less
+@c @cindex Teletype
+@c @cindex ISO 6249 SGR
+@c @cindex terminal control sequences
+@c @cindex control sequences, for terminals
+@c For TTY output devices, underlining is done by emitting sequences of
+@c @samp{_} and @samp{\b} (the backspace character) before the actual
+@c character. Literally, this is printing an underline character, then
+@c moving back one character position, and printing the actual character
+@c at the same position as the underline character (similar to a
+@c typewriter). Usually, a modern terminal can't interpret this (and the
+@c original Teletype machines for which this sequence was appropriate are
+@c no longer in use). You need a pager program like @code{less} which
+@c translates this into ISO 6429 SGR sequences to control terminals.
+
@c =====================================================================
@node grops, grodvi, grotty, Output Devices
@section @code{grops}
-@cindex @code{grops}
+@cindex @code{grops}, the program
@c XXX
@@ -9328,8 +12866,8 @@ is available as an extra package from the following address:
@node Embedding PostScript, , Invoking grops, grops
@subsection Embedding @sc{PostScript}
-@cindex embedding postscript
-@cindex postscript, embedding
+@cindex embedding PostScript
+@cindex PostScript, embedding
@c XXX
@@ -9338,7 +12876,7 @@ is available as an extra package from the following address:
@node grodvi, grolj4, grops, Output Devices
@section @code{grodvi}
-@cindex @code{grodvi}
+@cindex @code{grodvi}, the program
@c XXX
@@ -9360,7 +12898,7 @@ is available as an extra package from the following address:
@node grolj4, grolbp, grodvi, Output Devices
@section @code{grolj4}
-@cindex @code{grolj4}
+@cindex @code{grolj4}, the program
@c XXX
@@ -9382,7 +12920,7 @@ is available as an extra package from the following address:
@node grolbp, grohtml, grolj4, Output Devices
@section @code{grolbp}
-@cindex @code{grolbp}
+@cindex @code{grolbp}, the program
@c XXX
@@ -9404,29 +12942,64 @@ is available as an extra package from the following address:
@node grohtml, gxditview, grolbp, Output Devices
@section @code{grohtml}
-@cindex @code{grohtml}
+@cindex @code{grohtml}, the program
@c XXX
@menu
* Invoking grohtml::
+* grohtml specific registers and strings::
@end menu
@c ---------------------------------------------------------------------
-@node Invoking grohtml, , grohtml, grohtml
+@node Invoking grohtml, grohtml specific registers and strings, grohtml, grohtml
@subsection Invoking @code{grohtml}
@cindex invoking @code{grohtml}
@cindex @code{grohtml}, invoking
@c XXX
+@c ---------------------------------------------------------------------
+
+@node grohtml specific registers and strings, , Invoking grohtml, grohtml
+@subsection @code{grohtml} specific registers and strings
+@cindex registers specific to @code{grohtml}
+@cindex strings specific to @code{grohtml}
+@cindex @code{grohtml}, registers and strings
+
+@DefmpregList {ps4html, grohtml}
+@DefstrListEnd {www-image-template, grohtml}
+The registers @code{ps4html} and @code{www-image-template} are defined
+by the @code{pre-grohtml} preprocessor. @code{pre-grohtml} reads in
+the @code{troff} input, marks up the inline equations and passes the
+result firstly to
+
+@Example
+troff -Tps -rps4html=1 -dwww-image-template=@var{template}
+@endExample
+
+@noindent
+and secondly to
+
+@Example
+troff -Thtml
+@endExample
+
+The PostScript device is used to create all the image files, and the
+register @code{ps4html} enables the macro sets to ignore floating
+keeps, footers, and headings.
+
+The register @code{www-image-template} is set to the user specified
+template name or the default name.
+@endDefmpreg
+
@c =====================================================================
@node gxditview, , grohtml, Output Devices
@section @code{gxditview}
-@cindex @code{gxditview}
+@cindex @code{gxditview}, the program
@c XXX
@@ -9454,7 +13027,8 @@ is available as an extra package from the following address:
@cindex file formats
@cindex formats, file
-@c XXX
+All files read and written by @code{gtroff} are text files. The
+following two sections describe their format.
@menu
* gtroff Output::
@@ -9466,280 +13040,887 @@ is available as an extra package from the following address:
@node gtroff Output, Font Files, File formats, File formats
@section @code{gtroff} Output
-@cindex @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 -- but
-not identical -- to that used by
-@acronym{UNIX} device-independent @code{troff} (@code{ditroff}).
+This section describes the intermediate output format of GNU
+@code{troff}. This output is produced by a run of @code{gtroff}
+before it is fed into a device postprocessor program.
+
+As @code{groff} is a wrapper program around @code{gtroff} that
+automatically calls a postprocessor, this output does not show up
+normally. This is why it is called @dfn{intermediate}.
+@code{groff} provides the option @option{-Z} to inhibit postprocessing,
+such that the produced intermediate output is sent to standard output
+just like calling @code{gtroff} manually.
+
+@cindex troff output
+@cindex output, troff
+@cindex intermediate output
+@cindex output, intermediate
+Here, the term @dfn{troff output} describes what is output by
+@code{gtroff}, while @dfn{intermediate output} refers to the language
+that is accepted by the parser that prepares this output for the
+postprocessors. This parser is smarter on whitespace and implements
+obsolete elements for compatibility, otherwise both formats are the
+same.@footnote{The parser and postprocessor for intermediate output
+can be found in the file@*
+@file{@var{groff-source-dir}/src/libs/libdriver/input.cc}.}
+
+The main purpose of the intermediate output concept is to facilitate
+the development of postprocessors by providing a common programming
+interface for all devices. It has a language of its own that is
+completely different from the @code{gtroff} language. While the
+@code{gtroff} language is a high-level programming language for text
+processing, the intermediate output language is a kind of low-level
+assembler language by specifying all positions on the page for writing
+and drawing.
+
+The intermediate output produced by @code{gtroff} is fairly readable,
+while output from @acronym{AT&T} @code{troff} is rather hard to
+understand because of strange habits that are still supported, but not
+used any longer by @code{gtroff}.
@menu
-* Output Format::
-* Device Control::
-* Drawing Functions::
-* Line Continuation::
+* Language Concepts::
+* Command Reference::
+* Intermediate Output Examples::
+* Output Language Compatibility::
@end menu
@c ---------------------------------------------------------------------
-@node Output Format, Device Control, gtroff Output, gtroff Output
-@subsection Output Format
-@cindex output format
-@cindex format of output
+@node Language Concepts, Command Reference, gtroff Output, gtroff Output
+@subsection Language Concepts
-@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.
+During the run of @code{gtroff}, the input data is cracked down to the
+information on what has to be printed at what position on the intended
+device. So the language of the intermediate output format can be quite
+small. Its only elements are commands with and without arguments.
+In this section, the term @dfn{command} always refers to the intermediate
+output language, and never to the @code{gtroff} language used for document
+formatting. There are commands for positioning and text writing, for drawing, and
+for device controlling.
-The output format consists of single command characters with attached
-parameters which are separated from subsequent text by whitespace or a
-newline.
+@menu
+* Separation::
+* Argument Units::
+* Document Parts::
+@end menu
-The names of characters and fonts can be of arbitrary length; drivers
-should not assume that they are only two characters long (as
-@code{ditroff} does).
+@node Separation, Argument Units, Language Concepts, Language Concepts
+@subsubsection Separation
+
+@acronym{AT&T} @code{troff} output has strange requirements on whitespace.
+The @code{gtroff} output parser, however, is smart about whitespace by
+making it maximally optional. The whitespace characters, i.e., the
+tab, space, and newline characters, always have a syntactical meaning.
+They are never printable because spacing within the output is always
+done by positioning commands.
+
+Any sequence of space or tab characters is treated as a single
+@dfn{syntactical space}. It separates commands and arguments, but is
+only required when there would occur a clashing between the command code
+and the arguments without the space. Most often, this happens when
+variable-length command names, arguments, argument lists, or command
+clusters meet. Commands and arguments with a known, fixed length need
+not be separated by syntactical space.
+
+A line break is a syntactical element, too. Every command argument can be
+followed by whitespace, a comment, or a newline character. Thus a
+@dfn{syntactical line break} is defined to consist of optional
+syntactical space that is optionally followed by a comment, and a
+newline character.
+
+The normal commands, those for positioning and text, consist of a
+single letter taking a fixed number of arguments. For historical reasons,
+the parser allows to stack such commands on the same line, but
+fortunately, in @code{gtroff}'s intermediate output, every command with
+at least one argument is followed by a line break, thus providing
+excellent readability.
+
+The other commands -- those for drawing and device controlling --
+have a more complicated structure; some recognize long command names,
+and some take a variable number of arguments. So all @samp{D} and
+@samp{x} commands were designed to request a syntactical line break
+after their last argument. Only one command, @w{@samp{x X}},
+has an argument that can stretch over several lines; all other
+commands must have all of their arguments on the same line as the
+command, i.e., the arguments may not be splitted by a line break.
+
+Empty lines (these are lines containing only space and/or a comment), can
+occur everywhere. They are just ignored.
+
+@node Argument Units, Document Parts, Separation, Language Concepts
+@subsubsection Argument Units
+
+Some commands take integer arguments that are assumed to represent
+values in a measurement unit, but the letter for the corresponding
+scale indicator is not written with the output command arguments.
+Most commands assume the scale indicator @samp{u}, the basic unit of
+the device, some use @samp{z}, the scaled point unit of the device,
+while others, such as the color commands, expect plain integers.
+
+Note that single characters can have the eighth bit set, as can the
+names of fonts and special characters. The names of characters and
+fonts can be of arbitrary length. A character that is to be printed
+will always be in the current font.
+
+A string argument is always terminated by the next whitespace
+character (space, tab, or newline); an embedded @samp{#} character is
+regarded as part of the argument, not as the beginning of a comment
+command. An integer argument is already terminated by the next
+non-digit character, which then is regarded as the first character of
+the next argument or command.
+
+@node Document Parts, , Argument Units, Language Concepts
+@subsubsection Document Parts
+
+A correct intermediate output document consists of two parts, the
+@dfn{prologue} and the @dfn{body}.
+
+The task of the prologue is to set the general device parameters
+using three exactly specified commands. @code{gtroff}'s prologue
+is guaranteed to consist of the following three lines (in that order):
+
+@Example
+x T @var{device}
+x res @var{n} @var{h} @var{v}
+x init
+@endExample
-When a character is to be printed, that character is always in the
-current font. Unlike @code{ditroff}, it is not necessary for drivers to
-search special fonts to find a character.
+@noindent
+with the arguments set as outlined in @ref{Device Control Commands}.
+Note that the parser for the intermediate output format is able to
+swallow additional whitespace and comments as well even in the
+prologue.
+
+The body is the main section for processing the document data.
+Syntactically, it is a sequence of any commands different from the
+ones used in the prologue. Processing is terminated as soon as the
+first @w{@samp{x stop}} command is encountered; the last line of any
+@code{gtroff} intermediate output always contains such a command.
+
+Semantically, the body is page oriented. A new page is started by a
+@samp{p} command. Positioning, writing, and drawing commands are
+always done within the current page, so they cannot occur before the
+first @samp{p} command. Absolute positioning (by the @samp{H} and
+@samp{V} commands) is done relative to the current page; all other
+positioning is done relative to the current location within this page.
-@table @code
-@item H@var{n}
-@c XXX
+@c ---------------------------------------------------------------------
-@item V@var{n}
-@c XXX
+@node Command Reference, Intermediate Output Examples, Language Concepts, gtroff Output
+@subsection Command Reference
-@item h@var{n}
-@c XXX
+This section describes all intermediate output commands, both from
+@acronym{AT&T} @code{troff} as well as the @code{gtroff} extensions.
-@item v@var{n}
-@c XXX
+@menu
+* Comment Command::
+* Simple Commands::
+* Graphics Commands::
+* Device Control Commands::
+* Obsolete Command::
+@end menu
-@item c@var{n}
-@c XXX
+@node Comment Command, Simple Commands, Command Reference, Command Reference
+@subsubsection Comment Command
-@item C@var{n}
-@c XXX
+@table @code
+@item #@var{anything}@angles{end of line}
+A comment. Ignore any characters from the @samp{#} character up to
+the next newline character.
-@item @var{nn}@var{c}
-@c XXX
+This command is the only possibility for commenting in the intermediate
+output. Each comment can be preceded by arbitrary syntactical space;
+every command can be terminated by a comment.
+@end table
-@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.
+@node Simple Commands, Graphics Commands, Comment Command, Command Reference
+@subsubsection Simple Commands
-@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.
+The commands in this subsection have a command code consisting of a
+single character, taking a fixed number of arguments. Most of them
+are commands for positioning and text writing. These commands are
+smart about whitespace. Optionally, syntactical space can be inserted
+before, after, and between the command letter and its arguments.
+All of these commands are stackable, i.e., they can be preceded by
+other simple commands or followed by arbitrary other commands on the
+same line. A separating syntactical space is only necessary when two
+integer arguments would clash or if the preceding argument ends with a
+string argument.
+
+@table @code
+@ignore
+.if (\n[@USE_ENV_STACK] == 1) \{\
+.command {
+Open a new environment by copying the actual device configuration data
+to the environment stack.
+.
+The current environment is setup by the device specification and
+manipulated by the setting commands.
+.
+.
+.command }
+Close the actual environment (opened by a preceding
+.BR { \~command)
+and restore the previous environment from the environment
+stack as the actual device configuration data.
+.
+\} \" endif @USE_ENV_STACK
+@end ignore
-@item u@var{n} @var{xxx}
-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@w{ }@var{n}.
+@item C @var{xxx}@angles{whitespace}
+Print a special character named @var{xxx}. The trailing
+syntactical space or line break is necessary to allow glyph names
+of arbitrary length. The glyph is printed at the current print
+position; the glyph's size is read from the font file. The print
+position is not changed.
+
+@item c @var{g}
+Print glyph@w{ }@var{g} at the current print position;@footnote{@samp{c}
+is actually a misnomer since it outputs a glyph.} the glyph's size is
+read from the font file. The print position is not changed.
+
+@item f @var{n}
+Set font to font number@w{ }@var{n} (a non-negative integer).
+
+@item H @var{n}
+Move right to the absolute vertical position@w{ }@var{n} (a
+non-negative integer in basic units @samp{u} relative to left edge
+of current page.
+
+@item h @var{n}
+Move @var{n} (a non-negative integer) basic units @samp{u} horizontally
+to the right. The original @acronym{UNIX} troff manual allows negative
+values for @var{n} also, but @code{gtroff} doesn't use this.
+
+@item m @var{color-scheme} @r{[}@var{component} @dots{}@r{]}
+Set the color for text (glyphs), line drawing, and the outline of
+graphic objects using different color schemes; the analoguous command
+for the filling color of graphic objects is @samp{DF}. The color
+components are specified as integer arguments between 0 and 65536.
+The number of color components and their meaning vary for the
+different color schemes. These commands are generated by
+@code{gtroff}'s escape sequence @code{\m}. No position changing.
+These commands are a @code{gtroff} extension.
-This command is only allowed if the @samp{tcommand} line is present in
-the @file{DESC} file.
+@table @code
+@item mc @var{cyan} @var{magenta} @var{yellow}
+Set color using the CMY color scheme, having the 3@w{ }color components
+@var{cyan}, @var{magenta}, and @var{yellow}.
-@item n@var{a}@var{b}
-@c XXX
+@item md
+Set color to the default color value (black in most cases).
+No component arguments.
-@item p@var{n}
-@c XXX
+@item mg @var{gray}
+Set color to the shade of gray given by the argument, an integer
+between 0 (black) and 65536 (white).
-@item s@var{n}
-@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 mk @var{cyan} @var{magenta} @var{yellow} @var{black}
+Set color using the CMYK color scheme, having the 4@w{ }color components
+@var{cyan}, @var{magenta}, @var{yellow}, and @var{black}.
-@item f@var{n}
-@item x @dots{} \n
-Device control.
-@c XXX more info
+@item mr @var{red} @var{green} @var{blue}
+Set color using the RGB color scheme, having the 3@w{ }color components
+@var{red}, @var{green}, and @var{blue}.
-@item D@var{c} @var{x}@dots{}\n
-@c XXX
@end table
-@c ---------------------------------------------------------------------
+@item N @var{n}
+Print glyph with index@w{ }@var{n} (a non-negative integer) of the
+current font. This command is a @code{gtroff} extension.
+
+@item n @var{b} @var{a}
+Inform the device about a line break, but no positioning is done by
+this command. In @acronym{AT&T} @code{troff}, the integer arguments
+@var{b} and@w{ }@var{a} informed about the space before and after the
+current line to make the intermediate output more human readable
+without performing any action. In @code{groff}, they are just ignored, but
+they must be provided for compatibility reasons.
+
+@item p @var{n}
+Begin a new page in the outprint. The page number is set
+to@w{ }@var{n}. This page is completely independent of pages formerly
+processed even if those have the same page number. The vertical
+position on the outprint is automatically set to@w{ }0. All
+positioning, writing, and drawing is always done relative to a page,
+so a @samp{p} command must be issued before any of these commands.
+
+@item s @var{n}
+Set point size to @var{n}@w{ }scaled points (this is unit @samp{z}).
+@acronym{AT&T} @code{troff} used the unit points (@samp{p}) instead.
+@xref{Output Language Compatibility}.
+
+@item t @var{xxx}@angles{whitespace}
+@itemx t @var{xxx} @var{dummy-arg}@angles{whitespace}
+Print a word, i.e., a sequence of characters @var{xxx} representing
+output glyphs which names are single characters, terminated by
+a space character or a line break; an optional second integer argument
+is ignored (this allows the formatter to generate an even number of
+arguments). The first glyph should be printed at the current
+position, the current horizontal position should then be increased by
+the width of the first glyph, and so on for each glyph.
+The widths of the glyphs are read from the font file, scaled for the
+current point size, and rounded to a multiple of the horizontal
+resolution. Special characters cannot be printed using this command
+(use the @samp{C} command for special characters). This command is a
+@code{gtroff} extension; it is only used for devices whose @file{DESC}
+file contains the @code{tcommand} keyword (@pxref{DESC File Format}).
+
+@item u @var{n} @var{xxx}@angles{whitespace}
+Print word with track kerning. This is the same as the @samp{t}
+command except that after printing each glyph, the current
+horizontal position is increased by the sum of the width of that
+glyph and@w{ }@var{n} (an integer in basic units @samp{u}).
+This command is a @code{gtroff} extension; it is only used for devices
+whose @file{DESC} file contains the @code{tcommand} keyword
+(@pxref{DESC File Format}).
+
+@item V @var{n}
+Move down to the absolute vertical position@w{ }@var{n} (a
+non-negative integer in basic units @samp{u}) relative to upper edge
+of current page.
+
+@item v @var{n}
+Move @var{n}@w{ }basic units @samp{u} down (@var{n} is a non-negative
+integer). The original @acronym{UNIX} troff manual allows negative
+values for @var{n} also, but @code{gtroff} doesn't use this.
-@node Device Control, Drawing Functions, Output Format, gtroff Output
-@subsection Device Control
-@cindex device control
-@cindex control of devices
+@item w
+Informs about a paddable white space to increase readability.
+The spacing itself must be performed explicitly by a move command.
-The @samp{x} command is normally followed by a letter or word indicating
-the function to perform, followed by white space separated arguments.
+@end table
-The first argument can be abbreviated to the first letter.
+@node Graphics Commands, Device Control Commands, Simple Commands, Command Reference
+@subsubsection Graphics Commands
+
+Each graphics or drawing command in the intermediate output starts
+with the letter @samp{D}, followed by one or two characters that
+specify a subcommand; this is followed by a fixed or variable number
+of integer arguments that are separated by a single space character.
+A @samp{D} command may not be followed by another command on the same line
+(apart from a comment), so each @samp{D} command is terminated by a
+syntactical line break.
+
+@code{gtroff} output follows the classical spacing rules (no space
+between command and subcommand, all arguments are preceded by a
+single space character), but the parser allows optional space between
+the command letters and makes the space before the first argument
+optional. As usual, each space can be any sequence of tab and space
+characters.
+
+Some graphics commands can take a variable number of arguments.
+In this case, they are integers representing a size measured in basic
+units @samp{u}. The arguments called @var{h1}, @var{h2}, @dots{},
+@var{hn} stand for horizontal distances where positive means right,
+negative left. The arguments called @var{v1}, @var{v2}, @dots{},
+@var{vn} stand for vertical distances where positive means down,
+negative up. All these distances are offsets relative to the current
+location.
+
+Unless indicated otherwise, each graphics command directly corresponds
+to a similar @code{gtroff} @code{\D} escape sequence. @xref{Drawing
+Requests}.
+
+Unknown @samp{D} commands are assumed to be device-specific.
+Its arguments are parsed as strings; the whole information is then
+sent to the postprocessor.
+
+In the following command reference, the syntax element
+@angles{line break} means a syntactical line break as defined above.
@table @code
-@item x init
-@c XXX
+@item D~ @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
+Draw B-spline from current position to offset (@var{h1},@var{v1}),
+then to offset (@var{h2},@var{v2}), if given, etc.@: up to
+(@var{hn},@var{vn}). This command takes a variable number of argument
+pairs; the current position is moved to the terminal point of the drawn
+curve.
+
+@item Da @var{h1} @var{v1} @var{h2} @var{v2}@angles{line break}
+Draw arc from current position to
+(@var{h1},@var{v1})@math{+}(@var{h2},@var{v2}) with center at
+(@var{h1},@var{v1}); then move the current position to the final point
+of the arc.
+
+@item DC @var{d}@angles{line break}
+@itemx DC @var{d} @var{dummy-arg}@angles{line break}
+Draw a solid circle using the current fill color with
+diameter@w{ }@var{d} (integer in basic units @samp{u}) with leftmost
+point at the current position; then move the current position to the
+rightmost point of the circle. An optional second integer argument is
+ignored (this allows the formatter to generate an even number of
+arguments). This command is a @code{gtroff} extension.
+
+@item Dc @var{d}@angles{line break}
+Draw circle line with diameter@w{ }@var{d} (integer in basic units
+@samp{u}) with leftmost point at the current position; then move the
+current position to the rightmost point of the circle.
+
+@item DE @var{h} @var{v}@angles{line break}
+Draw a solid ellipse in the current fill color with a horizontal
+diameter of@w{ }@var{h} and a vertical diameter of@w{ }@var{v} (both
+integers in basic units @samp{u}) with the leftmost point at the
+current position; then move to the rightmost point of the ellipse.
+This command is a @code{gtroff} extension.
+
+@item De @var{h} @var{v}@angles{line break}
+Draw an outlined ellipse with a horizontal diameter of@w{ }@var{h}
+and a vertical diameter of@w{ }@var{v} (both integers in basic units
+@samp{u}) with the leftmost point at current position; then move to
+the rightmost point of the ellipse.
+
+@item DF @var{color-scheme} @r{[}@var{component} @dots{}@r{]}@angles{line break}
+Set fill color for solid drawing objects using different color
+schemes; the analoguous command for setting the color of text, line
+graphics, and the outline of graphic objects is @samp{m}.
+The color components are specified as integer arguments between 0 and
+65536. The number of color components and their meaning vary for the
+different color schemes. These commands are generated by @code{gtroff}'s
+escape sequences @w{@code{\D'F @dots{}'}} and @code{\M} (with no other
+corresponding graphics commands). No position changing. This command
+is a @code{gtroff} extension.
-@item x T
-@c XXX
+@table @code
+@item DFc @var{cyan} @var{magenta} @var{yellow}@angles{line break}
+Set fill color for solid drawing objects using the CMY color scheme,
+having the 3@w{ }color components @var{cyan}, @var{magenta}, and
+@var{yellow}.
-@item x res @var{n} @var{h} @var{v}
-@c XXX
+@item DFd@angles{line break}
+Set fill color for solid drawing objects to the default fill color value
+(black in most cases). No component arguments.
+
+@item DFg @var{gray}@angles{line break}
+Set fill color for solid drawing objects to the shade of gray given by
+the argument, an integer between 0 (black) and 65536 (white).
+
+@item DFk @var{cyan} @var{magenta} @var{yellow} @var{black}@angles{line break}
+Set fill color for solid drawing objects using the CMYK color scheme,
+having the 4@w{ }color components @var{cyan}, @var{magenta}, @var{yellow},
+and @var{black}.
+
+@item DFr @var{red} @var{green} @var{blue}@angles{line break}
+Set fill color for solid drawing objects using the RGB color scheme,
+having the 3@w{ }color components @var{red}, @var{green}, and @var{blue}.
-@item x H
-@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:
+@item Df @var{n}@angles{line break}
+The argument@w{ }@var{n} must be an integer in the range @math{-32767}
+to 32767.
-@Example
-x T device
-x res n h v
-x init
-@endExample
+@table @asis
+@item @math{0 @LE @var{n} @LE 1000}
+Set the color for filling solid drawing objects to a shade of gray,
+where 0 corresponds to solid white, 1000 (the default) to solid black,
+and values in between to intermediate shades of gray; this is
+obsoleted by command @samp{DFg}.
-@noindent
-For example, the input
+@item @math{@var{n} @LT 0} or @math{@var{n} @LT 1000}
+Set the filling color to the color that is currently being used for
+the text and the outline, see command @samp{m}. For example, the
+command sequence
@Example
-crunchy \fH\s+2frog\s0\fP!?
+mg 0 0 65536
+Df -1
@endExample
@noindent
-produces
+sets all colors to blue.
-@c XXX example
+@end table
+@noindent
+No position changing. This command is a @code{gtroff} extension.
+
+@item Dl @var{h} @var{v}@angles{line break}
+Draw line from current position to offset (@var{h},@var{v}) (integers
+in basic units @samp{u}); then set current position to the end of the
+drawn line.
+
+@item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
+Draw a polygon line from current position to offset (@var{h1},@var{v1}),
+from there to offset (@var{h2},@var{v2}), etc.@: up to offset
+(@var{hn},@var{vn}), and from there back to the starting position.
+For historical reasons, the position is changed by adding the sum of
+all arguments with odd index to the actual horizontal position and the
+even ones to the vertical position. Although this doesn't make sense
+it is kept for compatibility.
@ignore
-@Example
-... sample output here ...
-@endExample
+As the polygon is closed, the end of drawing is the starting point, so
+the position doesn't change.
@end ignore
+This command is a @code{gtroff} extension.
-@c ---------------------------------------------------------------------
+@item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
+Draw a solid polygon in the current fill color rather than an outlined
+polygon, using the same arguments and positioning as the corresponding
+@samp{Dp} command.
+@ignore
+No position changing.
+@end ignore
+This command is a @code{gtroff} extension.
+
+@item Dt @var{n}@angles{line break}
+Set the current line thickness to@w{ }@var{n} (an integer in basic
+units @samp{u}) if @math{@var{n}>0}; if @math{@var{n}=0} select the
+smallest available line thickness; if @math{@var{n}<0} set the line
+thickness proportional to the point size (this is the default before
+the first @samp{Dt} command was specified). For historical reasons,
+the horizontal position is changed by adding the argument to the actual
+horizontal position, while the vertical position is not changed.
+Although this doesn't make sense it is kept for compatibility.
+@ignore
+No position changing.
+@end ignore
+This command is a @code{gtroff} extension.
-@node Drawing Functions, Line Continuation, Device Control, gtroff Output
-@subsection Drawing Functions
-@cindex drawing functions
-@cindex functions for drawing
+@end table
-@pindex gpic
-The @samp{D} drawing command has been extended. These extensions are
-used by GNU @code{pic} only if the @option{-x} option is given.
+@node Device Control Commands, Obsolete Command, Graphics Commands, Command Reference
+@subsubsection Device Control Commands
+
+Each device control command starts with the letter @samp{x},
+followed by a space character (optional or arbitrary space or tab in
+@code{gtroff}) and a subcommand letter or word; each argument (if any)
+must be preceded by a syntactical space. All @samp{x} commands are
+terminated by a syntactical line break; no device control command can
+be followed by another command on the same line (except a comment).
+
+The subcommand is basically a single letter, but to increase
+readability, it can be written as a word, i.e., an arbitrary sequence
+of characters terminated by the next tab, space, or newline character.
+All characters of the subcommand word but the first are simply ignored.
+For example, @code{gtroff} outputs the initialization command
+@w{@samp{x i}} as @w{@samp{x init}} and the resolution command
+@w{@samp{x r}} as @w{@samp{x res}}.
-@xref{Drawing Requests}.
+In the following, the syntax element @angles{line break} means a
+syntactical line break (@pxref{Separation}).
@table @code
-@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 is 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
-is 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 xF @var{name}@angles{line break}
+The @samp{F} stands for @var{Filename}.
+
+Use @var{name} as the intended name for the current file in error
+reports. This is useful for remembering the original file name when
+@code{gtroff} uses an internal piping mechanism. The input file is
+not changed by this command. This command is a @code{gtroff} extension.
+
+@item xf @var{n} @var{s}@angles{line break}
+The @samp{f} stands for @var{font}.
+
+Mount font position@w{ }@var{n} (a non-negative integer) with font
+named@w{ }@var{s} (a text word). @xref{Font Positions}.
+
+@item xH @var{n}@angles{line break}
+The @samp{H} stands for @var{Height}.
+
+Set glyph height to@w{ }@var{n} (a positive integer in scaled
+points @samp{z}). @acronym{AT&T} @code{troff} uses the unit points
+(@samp{p}) instead. @xref{Output Language Compatibility}.
+
+@item xi@angles{line break}
+The @samp{i} stands for @var{init}.
+
+Initialize device. This is the third command of the prologue.
+
+@item xp@angles{line break}
+The @samp{p} stands for @var{pause}.
+
+Parsed but ignored. The original @acronym{UNIX} troff manual writes
+
+@display
+pause device, can be restarted
+@end display
+
+@item xr @var{n} @var{h} @var{v}@angles{line break}
+The @samp{r} stands for @var{resolution}.
+
+Resolution is@w{ }@var{n}, while @var{h} is the minimal horizontal
+motion, and @var{v} the minimal vertical motion possible with this
+device; all arguments are positive integers in basic units @samp{u}
+per inch. This is the second command of the prologue.
+
+@item xS @var{n}@angles{line break}
+The @samp{S} stands for @var{Slant}.
+
+Set slant to@w{ }@var{n} (an integer in basic units @samp{u}).
+
+@item xs@angles{line break}
+The @samp{s} stands for @var{stop}.
+
+Terminates the processing of the current file; issued as the last
+command of any intermediate troff output.
+
+@item xt@angles{line break}
+The @samp{t} stands for @var{trailer}.
+
+Generate trailer information, if any. In @var{gtroff}, this is
+actually just ignored.
+
+@item xT @var{xxx}@angles{line break}
+The @samp{T} stands for @var{Typesetter}.
+
+Set name of device to word @var{xxx}, a sequence of characters ended
+by the next white space character. The possible device names coincide
+with those from the @code{groff} @option{-T} option. This is the first
+command of the prologue.
+
+@item xu @var{n}@angles{line break}
+The @samp{u} stands for @var{underline}.
+
+Configure underlining of spaces. If @var{n} is@w{ }1, start
+underlining of spaces; if @var{n} is@w{ }0, stop underlining of spaces.
+This is needed for the @code{cu} request in nroff mode and is ignored
+otherwise. This command is a @code{gtroff} extension.
+
+@item xX @var{anything}@angles{line break}
+The @samp{x} stands for @var{X-escape}.
+
+Send string @var{anything} uninterpreted to the device. If the line
+following this command starts with a @samp{+} character this line is
+interpreted as a continuation line in the following sense. The
+@samp{+} is ignored, but a newline character is sent instead to the
+device, the rest of the line is sent uninterpreted. The same applies
+to all following lines until the first character of a line is not a
+@samp{+} character. This command is generated by the @code{gtroff}
+escape sequence @code{\X}. The line-continuing feature is a
+@code{gtroff} extension.
-@item Dp @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{} @var{dxn} @var{dyn}
-Draw a polygon with automatic closure. 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}@dmn{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
-@esindex \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 @code{pic} does not depend on this. Given a
-drawing command of the form
+@node Obsolete Command, , Device Control Commands, Command Reference
+@subsubsection Obsolete Command
+In @acronym{AT&T} @code{troff} output, the writing of a single
+glyph is mostly done by a very strange command that combines a
+horizontal move and a single character giving the glyph name. It
+doesn't have a command code, but is represented by a 3-character
+argument consisting of exactly 2@w{ }digits and a character.
-@Example
-\D'@var{c} @var{x1} @var{y1} @var{x2} @var{y2} @dots{} @var{xn} @var{yn}'
-@endExample
+@table @asis
+@item @var{dd}@var{g}
+Move right @var{dd} (exactly two decimal digits) basic units @samp{u},
+then print glyph@w{ }@var{g} (represented as a single character).
+
+In @code{gtroff}, arbitrary syntactical space around and within this
+command is allowed to be added. Only when a preceding command on the
+same line ends with an argument of variable length a separating space
+is obligatory. In @acronym{AT&T} @code{troff}, large clusters of these
+and other commands are used, mostly without spaces; this made such output
+almost unreadable.
+
+@end table
+
+For modern high-resolution devices, this command does not make sense
+because the width of the glyphs can become much larger than two
+decimal digits. In @code{gtroff}, this is only used for the devices
+@code{X75}, @code{X75-12}, @code{X100}, and @code{X100-12}. For other
+devices, the commands @samp{t} and @samp{u} provide a better
+functionality.
+
+@c ---------------------------------------------------------------------
+
+@node Intermediate Output Examples, Output Language Compatibility, Command Reference, gtroff Output
+@subsection Intermediate Output Examples
+
+This section presents the intermediate output generated from the same
+input for three different devices. The input is the sentence
+@samp{hell world} fed into @code{gtroff} on the command line.
+
+@table @asis
+@item High-resolution device @code{ps}
+
+This is the standard output of @code{gtroff} if no @option{-T} option
+is given.
+
+@example
+@group
+shell> echo "hell world" | groff -Z -T ps
+
+x T ps
+x res 72000 1 1
+x init
+@end group
+p1
+x font 5 TR
+f5
+s10000
+V12000
+H72000
+thell
+wh2500
+tw
+H96620
+torld
+n12000 0
+@group
+x trailer
+V792000
+x stop
+@end group
+@end example
-@esindex \w
-@vindex st
-@vindex sb
@noindent
-where @var{c} is not one of @samp{c}, @samp{e}, @samp{l}, @samp{a} or
-@samp{~}, @acronym{UNIX} @code{troff} treats each x@w{ }value
-as a horizontal quantity, and each y@w{ }value as a vertical
-quantity; it assumes that the width of the drawn object is the sum of
-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
+This output can be fed into @code{grops} to get its representation as
+a PostScript file.
-@Example
-D@var{c} @var{x1} @var{y1} @var{x2} @var{y2} @dots{} @var{xn} @var{yn}
-@endExample
+@item Low-resolution device @code{latin1}
+
+This is similar to the high-resolution device except that the
+positioning is done at a minor scale. Some comments (lines starting
+with @samp{#}) were added for clarification; they were not generated
+by the formatter.
+
+@example
+@group
+shell> echo "hell world" | groff -Z -T latin1
+
+# prologue
+x T latin1
+x res 240 24 40
+x init
+@end group
+# begin a new page
+p1
+# font setup
+x font 1 R
+f1
+s10
+# initial positioning on the page
+V40
+H0
+# write text `hell'
+thell
+# inform about space, and issue a horizontal jump
+wh24
+# write text `world'
+tworld
+# announce line break, but do nothing because ...
+n40 0
+@group
+# ... the end of the document has been reached
+x trailer
+V2640
+x stop
+@end group
+@end example
@noindent
-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.
+This output can be fed into @code{grotty} to get a formatted text
+document.
+
+@item @acronym{AT&T} @code{troff} output
+Since a computer monitor has a very low resolution compared to modern
+printers the intermediate output for the X@w{ }Window devices can use
+the jump-and-write command with its 2-digit displacements.
+
+@example
+@group
+shell> echo "hell world" | groff -Z -T X100
+
+x T X100
+x res 100 1 1
+x init
+@end group
+p1
+x font 5 TR
+f5
+s10
+V16
+H100
+# write text with jump-and-write commands
+ch07e07l03lw06w11o07r05l03dh7
+n16 0
+@group
+x trailer
+V1100
+x stop
+@end group
+@end example
+
+@noindent
+This output can be fed into @code{xditview} or @code{gxditview}
+for displaying in@w{ }X.
+
+Due to the obsolete jump-and-write command, the text clusters in the
+@acronym{AT&T} @code{troff} output are almost unreadable.
+
+@end table
@c ---------------------------------------------------------------------
-@node Line Continuation, , Drawing Functions, gtroff Output
-@subsection Line Continuation
-@cindex line continuation in output commands
-@cindex output commands, line continuation
+@node Output Language Compatibility, , Intermediate Output Examples, gtroff Output
+@subsection Output Language Compatibility
-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} follows each newline
-in the argument with a @samp{+} character (as usual, it terminates
-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.
+The intermediate output language of @acronym{AT&T} @code{troff}
+was first documented in the @acronym{UNIX} troff manual, with later
+additions documented in @cite{A Typesetter-indenpendent TROFF},
+written by Brian Kernighan.
+
+The @code{gtroff} intermediate output format is compatible with this
+specification except for the following features.
+
+@itemize @bullet
+@item
+The classical quasi device independence is not yet implemented.
+
+@item
+The old hardware was very different from what we use today. So the
+@code{groff} devices are also fundamentally different from the ones in
+@acronym{AT&T} @code{troff}. For example, the @acronym{AT&T}
+PostScript device is called @code{post} and has a resolution of only
+720 units per inch, suitable for printers 20 years ago, while
+@code{groff}'s @code{ps} device has a resolution of
+72000 units per inch. Maybe, by implementing some rescaling
+mechanism similar to the classical quasi device independence,
+@code{groff} could emulate @acronym{AT&T}'s @code{post} device.
+
+@item
+The B-spline command @samp{D~} is correctly handled by the
+intermediate output parser, but the drawing routines aren't
+implemented in some of the postprocessor programs.
+
+@item
+The argument of the commands @samp{s} and @w{@samp{x H}} has the
+implicit unit scaled point @samp{z} in @code{gtroff}, while
+@acronym{AT&T} @code{troff} has point (@samp{p}). This isn't an
+incompatibility but a compatible extension, for both units coincide
+for all devices without a @code{sizescale} parameter in the @file{DESC}
+file, including all postprocessors from @acronym{AT&T} and
+@code{groff}'s text devices. The few @code{groff} devices with
+a @code{sizescale} parameter either do not exist for @acronym{AT&T}
+@code{troff}, have a different name, or seem to have a different
+resolution. So conflicts are very unlikely.
+
+@item
+The position changing after the commands @samp{Dp}, @samp{DP}, and
+@samp{Dt} is illogical, but as old versions of @code{gtroff} used this
+feature it is kept for compatibility reasons.
+
+@ignore
+Temporarily, there existed some confusion on the positioning after the
+@samp{D} commands that are groff extensions. This has been clarified
+by establishing the classical rule for all @code{groff} drawing commands:
+
+@itemize
+@item
+The position after a graphic object has been drawn is at its end;
+for circles and ellipses, the `end' is at the right side.
+
+@item
+From this, the positionings specified for the drawing commands above
+follow quite naturally.
+@end itemize
+@end ignore
+
+@end itemize
@c =====================================================================
@@ -9750,9 +13931,11 @@ treated as part of the argument to the @w{@samp{x X}} command, the
@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
+@code{ditroff} font format (as used in later versions of @acronym{AT&T}
+@code{troff} and its descendants). Unlike the @code{ditroff} font
+format, there is no associated binary format; all files are text
+files.@footnote{Plan@w{ }9 @code{troff} has also abandoned the binary
+format.} The font files for device @var{name} are stored in a directory
@file{dev@var{name}}. There are two types of file: a device description
file called @file{DESC} and for each font@w{ }@var{f} a font file
called@w{ }@file{@var{f}}.
@@ -9766,25 +13949,27 @@ called@w{ }@file{@var{f}}.
@node DESC File Format, Font File Format, Font Files, Font Files
@subsection @file{DESC} File Format
-@cindex @file{DESC} file format
-@cindex font description file format
+@cindex @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:
+The @file{DESC} file can contain the following types of line. Except
+for the @code{charset} keyword which must comes last (if at all), the
+order of the lines is not important.
@table @code
@item res @var{n}
@kindex res
-There are @var{n} machine units per inch.
+There are @var{n}@w{ }machine units per inch.
@item hor @var{n}
@kindex hor
-The horizontal resolution is @var{n} machine units.
+The horizontal resolution is @var{n}@w{ }machine units.
@item vert @var{n}
@kindex vert
-The vertical resolution is @var{n} machine units.
+The vertical resolution is @var{n}@w{ }machine units.
@item sizescale @var{n}
@kindex sizescale
@@ -9798,17 +13983,34 @@ One scaled point is equal to one point/@var{n}. The arguments to the
Quantities in the font files are given in machine units for fonts whose
point size is @var{n}@w{ }scaled points.
+@item prepro @var{program}
+@kindex prepro
+Call @var{program} as a preprocessor. Currently, this keyword is used
+by @code{groff} with option @option{-Thtml} only.
+
+@item postpro @var{program}
+@kindex postpro
+Call @var{program} as a postprocessor. For example, the line
+
+@Example
+postpro grodvi
+@endExample
+
+@noindent
+in the file @file{devdvi/DESC} makes @code{groff} call @code{grodvi}
+if option @option{-Tdvi} is given (and @option{-Z} isn't used).
+
@item tcommand
@kindex tcommand
This means that the postprocessor can handle the @samp{t} and @samp{u}
-output commands.
+intermediate output commands.
@item sizes @var{s1} @var{s2} @dots{} @var{sn} 0
@kindex sizes
This means that the device has fonts at @var{s1}, @var{s2}, @dots{}
-@var{sn} scaled points. The list of sizes must be terminated by 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.
+@var{sn} scaled points. The list of sizes must be terminated by@w{ }0
+(this is digit zero). Each @var{si} can also be a range of sizes
+@var{m}-@var{n}. The list can extend over more than one line.
@item styles @var{S1} @var{S2} @dots{} @var{Sm}
@kindex styles
@@ -9820,36 +14022,84 @@ The first @var{m}@w{ }font positions are associated with styles
Fonts @var{F1} @dots{} @var{Fn} are mounted in the font positions
@var{m}+1, @dots{}, @var{m}+@var{n} where @var{m} is the number of
styles. This command may extend over more than one line. A font name
-of@var{ }0 means no font is mounted on the corresponding font position.
+of@w{ }0 means no font is mounted on the corresponding font position.
@item family @var{fam}
@kindex family
The default font family is @var{fam}.
+@item use_charnames_in_special
+@kindex use_charnames_in_special
+This command indicates that @code{gtroff} should encode special
+characters inside special commands. Currently, this is only used
+by the @acronym{HTML} output device. @xref{Postprocessor Access}.
+
+@item papersize @var{string} @dots{}
+@kindex papersize
+Select a paper size. Valid values for @var{string} are the ISO paper
+types @code{A0}-@code{A7}, @code{B0}-@code{B7}, @code{C0}-@code{C7},
+@code{D0}-@code{D7}, @code{DL}, and the US paper types @code{letter},
+@code{legal}, @code{tabloid}, @code{ledger}, @code{statement},
+@code{executive}, @code{com10}, and @code{monarch}. Case is not significant
+for @var{string} if it holds predefined paper types. Alternatively,
+@var{string} can be a file name (e.g.@: @file{/etc/papersize}); if the file
+can be opened, @code{groff} reads the first line and tests for the above
+paper sizes. Finally, @var{string} can be a custom paper size in the format
+@code{@var{length},@var{width}} (no spaces before and after the comma).
+Both @var{length} and @var{width} must have a unit appended; valid values
+are @samp{i} for inches, @samp{C} for centimeters, @samp{p} for points, and
+@samp{P} for picas. Example: @code{12c,235p}. An argument which starts
+with a digit is always treated as a custom paper format. @code{papersize}
+sets both the vertical and horizontal dimension of the output medium.
+
+More than one argument can be specified; @code{groff} scans from left to
+right and uses the first valid paper specification.
+
+@item pass_filenames
+@kindex pass_filenames
+Tell @code{gtroff} to emit the name of the source file currently
+being processed. This is achieved by the intermediate output command
+@samp{F}. Currently, this is only used by the @acronym{HTML} output
+device.
+
+@item print @var{program}
+@kindex print
+Use @var{program} as a spooler program for printing. If omitted,
+the @option{-l} and @option{-L} options of @code{groff} are ignored.
+
@item charset
@kindex charset
This line and everything following in the file are ignored. It is
allowed for the sake of backwards compatibility.
@end table
-The @code{res}, @code{unitwidth}, @code{fonts} and @code{sizes} lines
+The @code{res}, @code{unitwidth}, @code{fonts}, and @code{sizes} lines
are mandatory. Other commands are ignored by @code{gtroff} but may be
used by postprocessors to store arbitrary information about the device
in the @file{DESC} file.
-@c XXX add other commands resp. xrefs to output devices
-@c XXX add obsolete commands
+@kindex spare1
+@kindex spare2
+@kindex biggestfont
+Here a list of obsolete keywords which are recognized by @code{groff}
+but completely ignored: @code{spare1}, @code{spare2},
+@code{biggestfont}.
+
@c ---------------------------------------------------------------------
@node Font File Format, , DESC File Format, Font Files
@subsection Font File Format
-@cindex font file format
+@cindex font file, format
+@cindex font description file, format
@cindex format of font files
+@cindex format of font description 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.
+A @dfn{font file}, also (and probably better) called a @dfn{font
+description file}, has two sections. The first section is a sequence
+of lines each containing a sequence of blank delimited words; the first
+word in the line is a key, and subsequent words give a value for that
+key.
@table @code
@item name @var{f}
@@ -9862,21 +14112,22 @@ The normal width of a space is@w{ }@var{n}.
@item slant @var{n}
@kindex slant
-The characters of the font have a slant of @var{n}@w{ }degrees.
+The glyphs of the font have a slant of @var{n}@w{ }degrees.
(Positive means forward.)
@item ligatures @var{lig1} @var{lig2} @dots{} @var{lign} [0]
@kindex ligatures
-Characters @var{lig1}, @var{lig2}, @dots{}, @var{lign} are ligatures;
+Glyphs @var{lig1}, @var{lig2}, @dots{}, @var{lign} are ligatures;
possible ligatures are @samp{ff}, @samp{fi}, @samp{fl}, @samp{ffi} and
@samp{ffl}. For backwards compatibility, the list of ligatures may be
terminated with a@w{ }0. The list of ligatures may not extend over more
than one line.
@item special
+@cindex special fonts
@kindex special
-The font is special; this means that when a character is requested that
-is not present in the current font, it is searched for in any
+The font is @dfn{special}; this means that when a glyph is requested
+that is not present in the current font, it is searched for in any
special fonts that are mounted.
@end table
@@ -9896,68 +14147,94 @@ subsection. These subsections can appear in any order. Each
subsection starts with a word on a line by itself.
@kindex charset
-The word @code{charset} starts the character set subsection. 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
+The word @code{charset} starts the character set
+subsection.@footnote{This keyword is misnamed since it starts a list
+of ordered glyphs, not characters.} The @code{charset} line is
+followed by a sequence of lines. Each line gives information for one
+glyph. A line comprises a number of fields separated by blanks or
+tabs. The format is
-@c XXX fix it for new HTML additions
-
-@Example
-@var{name} @var{metrics} @var{type} @var{code} @var{comment}
-@endExample
+@quotation
+@var{name} @var{metrics} @var{type} @var{code}
+[@var{entity-name}] [@code{--} @var{comment}]
+@end quotation
@cindex 8-bit input
@cindex input, 8-bit
-@esindex \N
+@cindex accessing unnamed glyphs with @code{\N}
+@cindex unnamed glyphs, accessing with @code{\N}
+@cindex characters, unnamed, accessing with @code{\N}
+@cindex glyphs, unnamed, accessing with @code{\N}
@kindex ---
@noindent
-@var{name} identifies the 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:
+@var{name} identifies the glyph name@footnote{The distinction between
+input, characters, and output, glyphs, is not clearly separated in the
+terminology of @code{groff}; for example, the @code{char} request
+should be called @code{glyph} since it defines an output entity.}:
+If @var{name} is a single character@w{ }@var{c} then it corresponds
+to the @code{gtroff} input character@w{ }@var{c}; if it is of the form
+@samp{\@var{c}} where @var{c} is a single character, then it
+corresponds to the special character @code{\[@var{c}]}; otherwise it
+corresponds to the special character @samp{\[@var{name}]}. If it
+is exactly two characters @var{xx} it can be entered as
+@samp{\(@var{xx}}. Note that single-letter special characters can't
+be accessed as @samp{\@var{c}}; the only exception is @samp{\-} which
+is identical to @code{\[-]}.
+
+@code{gtroff} supports 8-bit input characters; however some utilities
+have difficulties with eight-bit characters. For this reason, there is
+a convention that the entity name @samp{char@var{n}} is equivalent to
+the single input character whose code is@w{ }@var{n}. For example,
+@samp{char163} would be equivalent to the character with code@w{ }163
+which is the pounds sterling sign in the @w{ISO Latin-1} character set.
+You shouldn't use @samp{char@var{n}} entities in font description files
+since they are related to input, not output. Otherwise, you get
+hard-coded connections between input and output encoding which
+prevents use of different (input) character sets.
+
+The name @samp{---} is special and indicates that the glyph is
+unnamed; such glyphs can only be used by means of the @code{\N}
+escape sequence in @code{gtroff}.
+
+The @var{type} field gives the glyph type:
@table @code
@item 1
-the character has an descender, for example, `p';
+the glyph has a descender, for example, @samp{p};
@item 2
-the character has an ascender, for example, `b';
+the glyph has an ascender, for example, @samp{b};
@item 3
-the character has both an ascender and a descender, for example, `('.
+the glyph has both an ascender and a descender, for example, @samp{(}.
@end table
The @var{code} field gives the code which the postprocessor uses to
-print the 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 is interpreted as
+print the glyph. The glyph can also be input to @code{gtroff}
+using this code by means of the @code{\N} escape sequence. @var{code}
+can be any integer. If it starts with @samp{0} it is interpreted as
octal; if it starts with @samp{0x} or @samp{0X} it is interpreted as
-hexadecimal.
+hexadecimal. Note, however, that the @code{\N} escape sequence only
+accepts a decimal integer.
-Anything on the line after the @var{code} field is ignored.
+The @var{entity-name} field gives an @acronym{ASCII} string
+identifying the glyph which the postprocessor uses to print the
+@code{gtroff} glyph @var{name}. This field is optional and has been
+introduced so that the @acronym{HTML} device driver can encode its
+character set. For example, the glyph @samp{\[Po]} is
+represented as @samp{&pound;} in @acronym{HTML} 4.0.
+
+Anything on the line after the @var{entity-name} field resp.@: after
+@samp{--} will be ignored.
The @var{metrics} field has the form:
-@Example
-@var{width}[,@var{height}[,@var{depth}[,@var{italic_correction}
- [,@var{left_italic_correction}[,@var{subscript_correction}]]]]]
-@endExample
+@display
+@group
+@var{width}[@code{,}@var{height}[@code{,}@var{depth}[@code{,}@var{italic-correction}
+ [@code{,}@var{left-italic-correction}[@code{,}@var{subscript-correction}]]]]]
+@end group
+@end display
@noindent
There must not be any spaces between these subfields (it has been split
@@ -9965,22 +14242,21 @@ 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
+The @var{width} subfield gives the width of the glyph. The @var{height}
+subfield gives the height of the glyph (upwards is positive); if a
+glyph does not extend above the baseline, it should be given a zero
+height, rather than a negative height. The @var{depth} subfield gives
+the depth of the glyph, that is, the distance from the baseline to the
+lowest point below the baseline to which the glyph extends (downwards is
+positive); if a glyph does not extend below the baseline, it should be
+given a zero depth, rather than a negative depth. The
+@var{italic-correction} subfield gives the amount of space that should
+be added after the glyph when it is immediately to be followed by a
+glyph from a roman font. The @var{left-italic-correction} subfield
+gives the amount of space that should be added before the glyph when it
+is immediately to be preceded by a glyph from a roman font. The
+@var{subscript-correction} gives the amount of space that should be
+added after a glyph before adding a subscript. This should be less
than the italic correction.
A line in the @code{charset} section can also have the format
@@ -9990,7 +14266,7 @@ A line in the @code{charset} section can also have the format
@endExample
@noindent
-This indicates that @var{name} is just another name for the character
+This indicates that @var{name} is just another name for the glyph
mentioned in the preceding line.
@kindex kernpairs
@@ -10002,17 +14278,16 @@ sequence of lines of the form:
@endExample
@noindent
-This means that when character @var{c1} appears next to character
-@var{c2} the space between them should be increased by@w{ }@var{n}.
-Most entries in the kernpairs section have a negative value for@w{
-}@var{n}.
+This means that when glyph @var{c1} appears next to glyph @var{c2}
+the space between them should be increased by@w{ }@var{n}. Most
+entries in the kernpairs section have a negative value for@w{ }@var{n}.
@c =====================================================================
@c =====================================================================
-@node Installation, Request Index, File formats, Top
+@node Installation, Copying This Manual, File formats, Top
@chapter Installation
@cindex installation
@@ -10023,8 +14298,22 @@ Most entries in the kernpairs section have a negative value for@w{
@c =====================================================================
@c =====================================================================
-@node Request Index, Escape Index, Installation, Top
-@chapter Request Index
+@node Copying This Manual, Request Index, Installation, Top
+@appendix Copying This Manual
+
+@menu
+* GNU Free Documentation License:: License for copying this manual.
+@end menu
+
+@include fdl.texi
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Request Index, Escape Index, Copying This Manual, Top
+@appendix Request Index
Requests appear without the leading control character (normally either
@samp{.} or @samp{'}).
@@ -10037,7 +14326,10 @@ Requests appear without the leading control character (normally either
@c =====================================================================
@node Escape Index, Operator Index, Request Index, Top
-@chapter Escape Index
+@appendix Escape Index
+
+Any escape sequence @code{\@var{X}} with @var{X} not in the list below
+emits a warning, printing glyph @var{X}.
@printindex es
@@ -10047,7 +14339,7 @@ Requests appear without the leading control character (normally either
@c =====================================================================
@node Operator Index, Register Index, Escape Index, Top
-@chapter Operator Index
+@appendix Operator Index
@printindex op
@@ -10057,7 +14349,15 @@ Requests appear without the leading control character (normally either
@c =====================================================================
@node Register Index, Macro Index, Operator Index, Top
-@chapter Register Index
+@appendix Register Index
+
+The macro package or program a specific register belongs to is appended in
+brackets.
+
+A register name@w{ }@code{x} consisting of exactly one character can be
+accessed as @samp{\nx}. A register name @code{xx} consisting of exactly
+two characters can be accessed as @samp{\n(xx}. Register names @code{xxx}
+of any length can be accessed as @samp{\n[xxx]}.
@printindex vr
@@ -10067,7 +14367,10 @@ Requests appear without the leading control character (normally either
@c =====================================================================
@node Macro Index, String Index, Register Index, Top
-@chapter Macro Index
+@appendix Macro Index
+
+The macro package a specific macro belongs to is appended in brackets.
+They appear without the leading control character (normally @samp{.}).
@printindex ma
@@ -10077,7 +14380,16 @@ Requests appear without the leading control character (normally either
@c =====================================================================
@node String Index, Glyph Name Index, Macro Index, Top
-@chapter String Index
+@appendix String Index
+
+The macro package or program a specific string belongs to is appended in
+brackets.
+
+A string name@w{ }@code{x} consisting of exactly one character can be
+accessed as @samp{\*x}. A string name @code{xx} consisting of exactly
+two characters can be accessed as @samp{\*(xx}. String names @code{xxx}
+of any length can be accessed as @samp{\*[xxx]}.
+
@printindex st
@@ -10087,13 +14399,13 @@ Requests appear without the leading control character (normally either
@c =====================================================================
@node Glyph Name Index, Font File Keyword Index, String Index, Top
-@chapter Glyph Name Index
+@appendix Glyph Name Index
A glyph name @code{xx} consisting of exactly two characters can be
accessed as @samp{\(xx}. Glyph names @code{xxx} of any length can be
accessed as @samp{\[xxx]}.
-@printindex gl
+@c XXX
@@ -10101,7 +14413,7 @@ accessed as @samp{\[xxx]}.
@c =====================================================================
@node Font File Keyword Index, Program and File Index, Glyph Name Index, Top
-@chapter Font File Keyword Index
+@appendix Font File Keyword Index
@printindex ky
@@ -10111,7 +14423,7 @@ accessed as @samp{\[xxx]}.
@c =====================================================================
@node Program and File Index, Concept Index, Font File Keyword Index, Top
-@chapter Program and File Index
+@appendix Program and File Index
@printindex pg
@@ -10121,12 +14433,9 @@ accessed as @samp{\[xxx]}.
@c =====================================================================
@node Concept Index, , Program and File Index, Top
-@chapter Concept Index
+@appendix Concept Index
@printindex cp
-
-@summarycontents
-@contents
@bye
diff --git a/contrib/groff/doc/pic.ms b/contrib/groff/doc/pic.ms
index 627a84f..9206526 100644
--- a/contrib/groff/doc/pic.ms
+++ b/contrib/groff/doc/pic.ms
@@ -3,14 +3,14 @@
.\" There is no hope that this will ever look right under nroff.
.\"
.\" Comments beginning with %% are cut lines so portions of this
- \" document can be automatically extracted. %%TUTORIAL%% begins the
+.\" document can be automatically extracted. %%TUTORIAL%% begins the
.\" tutorial part; %%REFERENCE%% the reference part. %%POSTLUDE%% the
- \" bibliography and end matter after the reference part.
+.\" bibliography and end matter after the reference part.
.\"
.\" This document was written for free use and redistribution by
.\" Eric S. Raymond <esr@thyrsus.com> in August 1995.
.\"
-.\" $Id: pic.ms,v 1.4 2001/06/24 13:03:27 wlemb Exp $
+.\" $Id: pic.ms,v 1.19 2002/09/20 12:14:56 wlemb Exp $
.\"
.\" Set a proper TeX
.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
@@ -28,13 +28,13 @@ Making Pictures With GNU PIC
.AU
Eric S. Raymond
.AI
-<esr@snark.thyrsus.com>
+\[la]\fIesr@snark.thyrsus.com\fP\[ra]
.AB
The \fBpic\fP language is a \fBtroff\fP extension that makes it easy
to create and alter box-and-arrow diagrams of the kind frequently used
in technical papers and textbooks. This paper is both an introduction
-to and reference for \fIgpic\fP(1), the implementation distributed by
-the Free Software Foundation for use with \fIgroff\fP(1).
+to and reference for \fIgpic\/\fP(1), the implementation distributed by
+the Free Software Foundation for use with \fIgroff\/\fP(1).
.AE
.\"%%TUTORIAL%%
.NH 1
@@ -50,44 +50,42 @@ layouts, and other kinds of illustration involving repetitive uses of
simple geometric forms and splines. Because these descriptions are
procedural and object-based, they are both compact and easy to modify.
.PP
-The \fIgpic\fP(1) implementation of \fBpic\fP is distributed by the
-Free Software Foundation for use with their \fIgroff\fP(1)
+The \fIgpic\/\fP(1) implementation of \fBpic\fP is distributed by the
+Free Software Foundation for use with their \fIgroff\/\fP(1)
implementation of \fBtroff\fP. Because both implementations are
widely available in source form for free, they are good bets for
writing very portable documentation.
.NH 2
PIC Versions
.PP
-The original 1984 pre-\fIditroff\fP(1) version of \fBpic\fP is long
+The original 1984 pre-\fIditroff\/\fP(1) version of \fBpic\fP is long
obsolete. The rewritten 1991 version is still available as part of
the Documenter's Work Bench module of System V.
.PP
Where differences between Documenter's Work Bench (1991) \fBpic\fP and GNU
\fBpic\fP need to be described, original \fBpic\fP is referred to as
-"DWB pic". Details on the history of the program are given at the end
-of this document.
+\[lq]DWB pic\[rq]. Details on the history of the program are given at the
+end of this document.
.PP
-In this document, the \fIgpic\fP(1) extensions will be marked as such.
+In this document, the \fIgpic\/\fP(1) extensions will be marked as such.
.NH 1
Invoking PIC
.PP
Every \fBpic\fP description is a little program, which gets compiled
-by \fIpic\fP(1) into \fIgtroff\fP(1) macros. Programs that process or
-display \fIgtroff\fP(1) output need not know or care that parts of the
+by \fIpic\/\fP(1) into \fIgtroff\/\fP(1) macros. Programs that process or
+display \fIgtroff\/\fP(1) output need not know or care that parts of the
image began life as \fBpic\fP descriptions.
.PP
-The \fIpic\fP(1) program tries to translate anything between \fB.PS\fP
+The \fIpic\/\fP(1) program tries to translate anything between \fB.PS\fP
and \fB.PE\fP markers, and passes through everything else. The normal
definitions of \fB.PS\fP and \fB.PE\fP in the \fIms\fP macro package
and elsewhere have also the side-effect of centering the \fBpic\fP output
on the page.
-.PP
-Other details of the \fI[gt]roff\fP(1) interface
.NH 2
PIC Error Messages
.PP
-If you make a \fBpic\fP syntax error, \fIgpic\fP(1) will issue an
-error message in the standard \fIgcc\fP(1)-like syntax. A typical
+If you make a \fBpic\fP syntax error, \fIgpic\/\fP(1) will issue an
+error message in the standard \fIgcc\/\fP(1)-like syntax. A typical
error message looks like this,
.KS
.DS
@@ -98,7 +96,7 @@ pic:pic.ms:<nnn>: giving up on this picture
.R
.KE
.LP
-where <nnn> is a line number, and <token> is a token near (usually
+where \[la]nnn\[ra] is a line number, and \[la]token\[ra] is a token near (usually
just after) the error location.
.NH 1
Basic PIC Concepts
@@ -112,11 +110,11 @@ flow of data in \fBpic\fP processing:
.PS
ellipse "document";
arrow;
-box "\fIgpic\fP(1)"
+box width 0.6 "\fIgpic\/\fP(1)"
arrow;
-box width 1.2 "\fIgtbl\fP(1) or \fIgeqn\fP(1)" "(optional)" dashed;
+box width 1.1 "\fIgtbl\/\fP(1) or \fIgeqn\/\fP(1)" "(optional)" dashed;
arrow;
-box "\fIgtroff\fP(1)";
+box width 0.6 "\fIgtroff\/\fP(1)";
arrow;
ellipse "PostScript"
.PE
@@ -125,17 +123,19 @@ ellipse "PostScript"
This was produced from the following \fBpic\fP program:
.KS
.DS
+.ps -1
+.vs -1
.CW
\&.PS
-\&ellipse "document";
-\&arrow;
-\&box "\\fIpic\\fP(1)"
-\&arrow;
-\&box width 1.2 "\\fIgtbl\\fP(1) or \\fIgeqn\\fP(1)" "(optional)" dashed;
-\&arrow;
-\&box "\\fIgtroff\\fP(1)";
-\&arrow;
-\&ellipse "PostScript"
+ellipse "document";
+arrow;
+box width 0.6 "\efIpic\e/\efP(1)"
+arrow;
+box width 1.1 "\efIgtbl\e/\efP(1) or \efIgeqn\e/\efP(1)" "(optional)" dashed;
+arrow;
+box width 0.6 "\efIgtroff\e/\efP(1)";
+arrow;
+ellipse "PostScript"
\&.PE
.DE
.R
@@ -152,8 +152,9 @@ this facility in detail in the next section).
We also get to see \fBpic\fP's simple syntax. Statements are ended by
newlines or semicolons. String quotes are required around all text
arguments, whether or not they contain spaces. In general, the order
-of command arguments and modifiers like "width 1.2" or "dashed" doesn't
-matter, except that the order of text arguments is significant.
+of command arguments and modifiers like \[lq]width 1.2\[rq] or
+\[lq]dashed\[rq] doesn't matter, except that the order of text arguments
+is significant.
.PP
Here are all but one of the basic \fBpic\fP objects at their default sizes:
.KS
@@ -177,7 +178,7 @@ to collect objects into \fIblock composites\fP which allows you to
treat the whole group as a single object (resembling a box) for many
purposes. We'll describe both of these later on.
.PP
-The box, ellipse, circle, and block composite objects are \fIclosed\fR;
+The box, ellipse, circle, and block composite objects are \fIclosed\/\fR;
lines, arrows, arcs and splines are \fIopen\fP. This distinction
will often be important in explaining command modifiers.
.PP
@@ -187,17 +188,17 @@ which introduces some more basic concepts:
.DS
.CW
\&.PS
-\&box "box";
-\&move;
-\&line "line" "";
-\&move;
-\&arrow "arrow" "";
-\&move;
-\&circle "circle";
-\&move;
-\&ellipse "ellipse";
-\&move;
-\&arc; down; move; "arc"
+box "box";
+move;
+line "line" "";
+move;
+arrow "arrow" "";
+move;
+circle "circle";
+move;
+ellipse "ellipse";
+move;
+arc; down; move; "arc"
\&.PE
.DE
.ft R
@@ -264,7 +265,8 @@ arc cw; move; "arc";
.PE
.CE "6: Result of \fBarc cw; move; \"arc\"\fP"
.PP
-All we've done differently here is specify "cw" for a clockwise arc.
+All we've done differently here is specify \[lq]cw\[rq] for a clockwise arc
+(\[lq]ccw\[rq] specifies counter-clockwise direction).
Observe how it changes the default direction to down, rather than up.
.PP
Another good way to see this via with the following program:
@@ -283,7 +285,7 @@ line; arc; arc cw; line;
.PE
.CE "7: Result of \fBline; arc; arc cw; line\fP"
.LP
-Notice that we did not have to specify "up" for the second arc to be
+Notice that we did not have to specify \[lq]up\[rq] for the second arc to be
joined to the end of the first.
.PP
Finally, observe that a string, alone, is treated as text to be
@@ -297,16 +299,14 @@ Sizes and Spacing
Sizes are specified in inches. If you don't like inches, it's
possible to set a global style variable \fBscale\fP that changes the
unit. Setting \fBscale = 2.54\fP will effectively change the internal
-unit to centimeters (all other size variable valuess will be scaled
+unit to centimeters (all other size variable values will be scaled
correspondingly).
.NH 2
Default Sizes of Objects
.PP
Here are the default sizes for \fBpic\fP objects:
-.RS
-.KS
-.TS
-tab(@), linesize(2);
+.TS H
+center, tab(@), linesize(2);
lb | lb
l | l.
.sp 2p
@@ -314,6 +314,7 @@ Object@Default Size
.sp 2p
_
.sp 2p
+.TH
box@0.75" wide by 0.5" high
circle@0.5" diameter
ellipse@0.75" wide by 0.5" high
@@ -323,8 +324,6 @@ arrow@0.5" long
.sp 5p
_
.TE
-.KE
-.RE
.PP
The simplest way to think about these defaults is that they make the
other basic objects fit snugly into a default-sized box.
@@ -333,19 +332,19 @@ Objects Do Not Stretch!
.PP
Text is rendered in the current font with normal troff line spacing.
Boxes, circles, and ellipses do \fInot\fP automatically resize to fit
-enclosed text. Thus, if you say \fBbox "text far too long"\fP
-you'll get this:
+enclosed text. Thus, if you say \fBbox "this text far too long for a
+default box"\fP you'll get this:
.KS
.PS
box "this text is far too long for a default box"
.PE
.CE "1: Boxes do not automatically resize"
-.PP
+.LP
which is probably not the effect you want.
.NH 2
Resizing Boxes
.PP
-To change the box size, you can specify a box width with the "width"
+To change the box size, you can specify a box width with the \[lq]width\[rq]
modifier:
.KS
.PS
@@ -353,16 +352,15 @@ box width 3 "this text is far too long for a default box"
.PE
.CE "2: Result of \fBbox width 3 \"text far too long\"\fP"
.PP
-This modifier takes a dimension in inches. There is also a "height"
+This modifier takes a dimension in inches. There is also a \[lq]height\[rq]
modifier that will change a box's height. The \fBwidth\fP keyword may
-be abbreviated to \fBewid\fP; the \fBheight\fP keyword to
-\fBheight\fP.
+be abbreviated to \fBwid\fP; the \fBheight\fP keyword to \fBht\fP.
.NH 2
Resizing Other Object Types
.PP
-To change the size of a circle, give it a \fBrad\fP or \fBdiam\fP
-modifier; this changes the radius or diameter of the circle, according
-to the numeric argument that follows.
+To change the size of a circle, give it a \fBrad[ius]\fP or
+\fBdiam[eter]\fP modifier; this changes the radius or diameter of the
+circle, according to the numeric argument that follows.
.KS
.PS
{circle rad 0.1; move down 0.2 from last circle .s; "0.1"};
@@ -376,8 +374,8 @@ it how many inches to move in the current direction.
Ellipses are sized to fit in the rectangular box defined by their
axes, and can be resized with \fBwidth\fP and \fBheight\fP like boxes.
.PP
-You can also change the radius of curvature of an arc with \fBrad\fP
-(which specifies the radius of the circle of which the arc is a segnmment).
+You can also change the radius of curvature of an arc with \fBrad[ius]\fP
+(which specifies the radius of the circle of which the arc is a segment).
Larger values yield flatter arcs.
.KS
.PS
@@ -401,7 +399,7 @@ of its type. As an example, the program
.DS
.CW
\&.PS
-\&box; box wid 1 ht 1; box same; box
+box; box wid 1 ht 1; box same; box
\&.PE
.R
.DE
@@ -428,19 +426,23 @@ of the drawing area as being gridded with standard-sized boxes.
# Draw a demonstration up left arrow with grid box overlay
define gridarrow
{
+ move right 0.1
[
{arrow up left $1;}
box wid 0.5 ht 0.5 dotted with .nw at last arrow .end;
- for i = 2 to ($1 / 0.5) do
- {
+ for i = 2 to ($1 / 0.5) do {
box wid 0.5 ht 0.5 dotted with .sw at last box .se;
}
move down from last arrow .center;
[
- if ( $1 == boxht ) then { "\fBline up left\fP" } else { sprintf("\fBarrow up left %g\fP", $1) };
+ if ( $1 == boxht ) then {
+ "\fBline up left\fP"
+ } else {
+ sprintf("\fBarrow up left %g\fP", $1)
+ }
]
]
- move right from last [] .e;
+ move right 0.1 from last [] .e;
}
gridarrow(0.5);
gridarrow(1);
@@ -452,9 +454,10 @@ undef gridarrow
.NH 2
Multi-Segment Line Objects
.PP
-A "line" or "arrow" object may actually be a path consisting of any number of
-segments of varying lengths and directions. To describe a path,
-connect several line or arrow commands with the keyword \fBthen\fP.
+A \[lq]line\[rq] or \[lq]arrow\[rq] object may actually be a path
+consisting of any number of segments of varying lengths and directions.
+To describe a path, connect several line or arrow commands with the
+keyword \fBthen\fP.
.KS
.PS
define zigzag { $1 right 1 then down .5 left 1 then right 1 }
@@ -487,7 +490,7 @@ undef zigzag;
.CE "3: \fBspline right 1 then down .5 left 1 then right 1\fP"
.PP
You can describe many natural-looking but irregular curves this
-way. For example:
+way. For example:
.KS
.PS
[spline right then up then left then down ->;]
@@ -499,18 +502,18 @@ move up 0.2;
[spline left then up right then down right ->;]
.PE
.CE "4: Two more spline examples"
-.PP
+.LP
Note the arrow decorations. Arrowheads can be applied naturally to
any path-based object, line or spline. We'll see how in the next
section.
.NH 1
-Decorating Objects.
+Decorating Objects
.NH 2
Dashed Objects
.PP
We've already seen that the modifier \fBdashed\fP can change the line
style of an object from solid to dashed. GNU \fBgpic\fP permits you to
-dot or dash ellipses, circles, and arcs (and splines in \(*tx mode
+dot or dash ellipses, circles, and arcs (and splines in \*[tx] mode
only); some versions of DWB may only permit dashing of lines and
boxes. It's possible to change the dash interval by specifying a
number after the modifier.
@@ -532,7 +535,7 @@ box dashed 0.2 "0.2";
Dotted Objects
.PP
Another available qualifier is \fBdotted\fP. GNU \fBgpic\fP permits
-you to dot or dash ellipses, circles, and arcs (and splines in \(*tx
+you to dot or dash ellipses, circles, and arcs (and splines in \*[tx]
mode only); some versions of DWB may only permit dashing of lines and
boxes. It too can be suffixed with a number to specify the interval
between dots:
@@ -553,20 +556,20 @@ box dotted 0.2 "0.2";
Rounding Box Corners
.PP
It is also possible, in GNU \fBgpic\fP only, to modify a box so it has
-rounded corners
+rounded corners:
.KS
.PS
box rad 0.05 "rad 0.05";
move;
box rad 0.1 "rad 0.1";
move;
-box rad 0.15 "rad=0.15";
+box rad 0.15 "rad 0.15";
move;
-box rad 0.2 "rad=0.2";
+box rad 0.2 "rad 0.2";
move;
-box rad 0.25 "rad=0.25";
+box rad 0.25 "rad 0.25";
.PE
-.CE "3: \fBbox rad\fP with increasing radius values;"
+.CE "3: \fBbox rad\fP with increasing radius values"
.PP
Radius values higher than half the minimum box dimension are silently
truncated to that value.
@@ -584,29 +587,30 @@ line <- ->
.PP
In fact, the \fBarrow\fP command is just shorthand for \fBline ->\fP. And
there is a double-head modifier <->, so the figure above could have been made
-with \fCWline <->\fP.
+with \fBline <->\fP.
.PP
Arrowheads have a \fBwidth\fP attribute, the distance across the rear;
and a \fBheight\fP attribute, the length of the arrowhead along the shaft.
.PP
Arrowhead style is controlled by the style variable \fBarrowhead\fP.
The DWB and GNU versions interpret it differently. DWB defaults to
-open arrowheads and an \fBarrowhead\fP value of 2; the Kernighan
-paper says a value of 7 will make solid arrowheads. GNU \fBgpic\fP
-defaults to solid arrowheads and an \fBarrowhead\fP value of 1; a
-value of 0 will produce open arrowheads.
+open arrowheads and an \fBarrowhead\fP value of\~2; the Kernighan
+paper says a value of\~7 will make solid arrowheads. GNU \fBgpic\fP
+defaults to solid arrowheads and an \fBarrowhead\fP value of\~1; a
+value of\~0 will produce open arrowheads. Note that solid arrowheads are
+always filled with the current outline color.
.NH 2
Line Thickness
.PP
It's also possible to change the line thickness of an object (this is
-a GNU extension, DWB \fBpic\fP doesn't support it.).
+a GNU extension, DWB \fBpic\fP doesn't support it).
The default thickness of the lines used to draw objects is controlled by the
.B linethick
variable.
This gives the thickness of lines in points.
A negative value means use the default thickness:
-in \(*tx output mode, this means use a thickness of 8 milliinches;
-in \(*tx output mode with the
+in \*[tx] output mode, this means use a thickness of 8 milliinches;
+in \*[tx] output mode with the
.B -c
option, this means use the line thickness specified by
.B .ps
@@ -624,10 +628,10 @@ line.
.NH 2
Invisible Objects
.PP
-The modifier \fBinvis\fP makes an object entirely invisible. This
+The modifier \fBinvis[ible]\fP makes an object entirely invisible. This
used to be useful for positioning text in an invisible object that is
properly joined to neighboring ones. Newer DWB versions and GNU
-\fBpic\fP treat standalone text in exactly this way.
+\fBpic\fP treat stand-alone text in exactly this way.
.NH 2
Filled Objects
.PP
@@ -640,9 +644,9 @@ and different defaults. DWB \fBfillval\fP defaults to 0.3 and smaller
values are darker; GNU \fBfillval\fP uses 0 for white and 1 for black.
.KS
.PS
-circle fill; move; circle fill 0.4; move; circle fill 0.2;
+circle fill; move; circle fill 0.4; move; circle fill 0.9;
.PE
-.CE "5: \fBcircle fill; move; circle fill 0.4; move; circle fill 0.9;\fB"
+.CE "5: \fBcircle fill; move; circle fill 0.4; move; circle fill 0.9;\fR"
.PP
GNU \fBgpic\fP makes some additional guarantees. A fill value greater
than 1 can also be used: this means fill with the shade of gray that
@@ -652,16 +656,40 @@ The invisible attribute does not affect the filling of objects. Any
text associated with a filled object will be added after the object
has been filled, so that the text will not be obscured by the filling.
.PP
-The closed-object modifier \fBsolid\fR is equivalent to \fBfill\fR
-with the darkest fill value (DWB \fBpic\fR had this capability but
-mentioned it only in a reference opinion).
+The closed-object modifier \fBsolid\fP is equivalent to \fBfill\fP
+with the darkest fill value (DWB \fBpic\fP had this capability but
+mentioned it only in a reference section).
+.NH 2
+Colored Objects
+.PP
+As a GNU extension, three additional modifiers are available to specify
+colored objects. \fBoutline\fP sets the color of the outline, \fBshaded\fP
+the fill color, and \fBcolor\fP sets both. All three keywords expect a
+suffix specifying the color. Example:
+.KS
+.PS
+box color "yellow"; arrow color "cyan"; circle shaded "green" outline "black";
+.PE
+.CE "6: \fBbox color ""yellow""; arrow color ""cyan""; \
+circle shaded ""green"" outline ""black"";\fR"
+.PP
+Alternative spellings are \fBcolour\fP, \fBcolored\fP, \fBcoloured\fP,
+and \fBoutlined\fP.
+.PP
+Currently, color support is not available in \*[tx] mode. Predefined color
+names for \fIgroff\/\fP(1) are in the device macro files, for example
+\f(CWps.tmac\fP; additional colors can be defined with the \fB.defcolor\fP
+request (see the manual page of GNU \fItroff\/\fP(1) for more details).
+.PP
+\fBpic\fP assumes that at the beginning of a picture both glyph and fill
+color are set to the default value.
.NH 1
More About Text Placement
.PP
By default, text is centered at the geometric center of the object it is
-associated with. The modifier \fBljust\fR causes the left end to be
+associated with. The modifier \fBljust\fP causes the left end to be
at the specified point (which means that the text lies to the right of
-the specified place!), The modifier \fBrjust\fP puts the right end at
+the specified place!), the modifier \fBrjust\fP puts the right end at
the place. The modifiers \fBabove\fP and \fBbelow\fP center the text
one half line space in the given direction.
.PP
@@ -678,10 +706,10 @@ move;
.PE
.CE "1: Text attributes"
.PP
-What actually happens is that n text strings are centered in a box
+What actually happens is that \fIn\fP text strings are centered in a box
that is \fBtextwid\fP wide by \fBtextht\fP high. Both these variables
are initially zero (that is \fBpic\fR's way of not making assumptions
-about \fI[tg]roff\fP(1)'s default point size).
+about \fI[tg]roff\/\fP(1)'s default point size).
.PP
In GNU \fBgpic\fR, objects can have an
.B aligned
@@ -746,14 +774,14 @@ in the obvious way:
.PS
box; arrow; circle; down; arrow; ellipse
.PE
-.CE "3: \fBbox; arrow; circle; down; arrow; ellipse\fP
+.CE "3: \fBbox; arrow; circle; down; arrow; ellipse\fP"
.LP
You might have expected that program to yield this:
.KS
.PS
box; arrow; circle; move to last circle .s; down; arrow; ellipse
.PE
-.CE "4: More intuitive?
+.CE "4: More intuitive?"
.LP
But, in fact, to get Figure \*[SN]3 you have to do this:
.KS
@@ -771,6 +799,7 @@ ellipse
.R
.DE
.KE
+.LP
Why is this? Because the exit point for the current direction is
already set when you draw the object. The second arrow in Figure
\*[SN]2 dropped downwards from the circle's attachment point for an
@@ -792,22 +821,23 @@ Naming Objects By Order Of Drawing
The simplest (and generally the most useful) way to name an object is
with a \fBlast\fP clause. It needs to be followed by an object type
name; \fBbox\fP, \fBcircle\fP, \fBellipse\fP, \fBline\fP, \fBarrow\fP,
-\fBspline\fP or \fB[]\fP (the last type refers to a \fIcomposite
+\fBspline\fP, \fB""\fP, or \fB[]\fP (the last type refers to a \fIcomposite
object\fP which we'll discuss later). So, for example, the \fBlast
circle\fP clause in the program attached to Figure \*[SN]3 refers to the
last circle drawn.
.PP
More generally, objects of a given type are implicitly numbered
-(starting from 1). You can refer to (say) the third ellipse in the
+(starting from\~1). You can refer to (say) the third ellipse in the
current picture with \fB3rd ellipse\fP, or to the first box as \fB1st
-box\fP, or to the fifth line as \fB5th line\fP.
+box\fP, or to the fifth text string (which isn't an attribute to another
+object) as \fB5th ""\fP.
.PP
-Objects are also numbered backwards by type from the last one of
+Objects are also numbered backwards by type from the last one.
You can say \fB2nd last box\fP to get the second-to-last box, or
-\fB3rd last ellipse\fP to get the third-to-last box.
+\fB3rd last ellipse\fP to get the third-to-last ellipse.
.PP
-In places where \fIn\fBth\fR is allowed, \fB`\fIexpr\fB'th\fR is also allowed.
-Note that
+In places where \fIn\/\fBth\fR is allowed, \fB`\fIexpr\/\fB'th\fR is
+also allowed. Note that
.B 'th
is a single token: no space is allowed between the
.B '
@@ -815,13 +845,13 @@ and the \fBth\fP.
For example,
.IP
.KS
-.R
.DS
+.CW
for i = 1 to 4 do {
line from `i'th box.nw to `i+1'th box.se
}
-.R
.DE
+.R
.KE
.NH 2
Naming Objects With Labels
@@ -838,7 +868,7 @@ A: box "first" "object"
move;
B: ellipse "second" "object"
move;
-arrow left at A;
+arrow right at A .r;
\&.PE
.R
.DE
@@ -852,7 +882,7 @@ A: box "first" "object"
move;
B: ellipse "second" "object"
move;
-arrow left at A .l;
+arrow right at A .r;
.PE
.CE "1: Example of label use"
The \fBat\fP statement in the fourth line uses the label \fBA\fP (the
@@ -883,7 +913,7 @@ and Y increases upwards). An absolute location may always be written in the
conventional form as two comma-separated numbers surrounded by
parentheses (and this is recommended for clarity). In contexts where
it creates no ambiguity, the pair of X and Y coordinates suffices
-without punctuation.
+without parentheses.
.PP
It is a good idea to avoid absolute coordinates, however. They tend
to make picture descriptions difficult to understand and modify.
@@ -893,7 +923,7 @@ relative to \fBpic\fP objects and previous locations.
.NH 2
Locations Relative to Objects
.PP
-The symbol \fBhere\fP always refers to the position of the last object
+The symbol \fBHere\fP always refers to the position of the last object
drawn or the destination of the last \fBmove\fP.
.PP
Alone and unqualified, a \fBlast circle\fP or any other way of
@@ -945,10 +975,13 @@ explanation of Figure 7.3's program is now complete.
\&\fB.s\fP, \fB.e\fP, and \fB.w\fP respectively; they can even be
abbreviated to \fB.t\fP, \fB.b\fP, \fB.l\fP and \fB.r\fP).
.PP
-The names \fBcenter\fP, \fBtop\fP, \fBbottom\fP, \fBleft\fP and
-\fBright\fP can also be used (without the leading dot) in a prefix
-form marked by \fBof\fP; thus, \fBcenter of last circle\fP and
-\fBtop of 2nd last ellipse\fP are both valid object references.
+The names \fBcenter\fP, \fBtop\fP, \fBbottom\fP, \fBleft\fP, \fBright\fP,
+\fBnorth\fP, \fBsouth\fP, \fBeast\fP, and \fBwest\fP can also be used
+(without the leading dot) in a prefix form marked by \fBof\fP; thus,
+\fBcenter of last circle\fP and \fBtop of 2nd last ellipse\fP are both
+valid object references. Finally, the names \fBleft\fP and \fBright\fP
+can be prefixed with \fBupper\fP and \fBlower\fP which both have the
+obvious meaning.
.PP
Arc objects also have compass point; they are the compass points of
the implied circle.
@@ -956,26 +989,25 @@ the implied circle.
Locations Relative to Open Objects
.PP
Every open object (line, arrow, arc, or spline) has three named
-points; \fB.start\fP, \fB.center\fP, and \fB.end\fP. They can
-also be used without leading dots in the \fBof\fP prefix form.
+points: \fB.start\fP, \fB.center\fP (or \fB.c\fP), and \fB.end\fP. They
+can also be used without leading dots in the \fBof\fP prefix form.
The center of an arc is the center of its circle, but the center of
a line, path, or spline is halfway between its endpoints.
.KS
.PS
define critical {
[ ME: $1;
- dot(ME.c); ".center" rjust at ME.center + (-0.1, 0.1)
- dot(ME.start); ".start" rjust at ME.start + (-0.1, 0.1)
- dot(ME.end); ".end" rjust at ME.end + (-0.1, 0.1)
+ dot(ME.c); "\fB.center\fP" rjust at ME.center + (-0.1, 0.1)
+ dot(ME.start); "\fB.start\fP" rjust at ME.start + (-0.1, 0.1)
+ dot(ME.end); "\fB.end\fP" rjust at ME.end + (-0.1, 0.1)
]
- move down 0.2 from last [] .s;
}
critical(line up right 1);
-move right from last [] .e;
+move right 1 from last [] .e;
critical(arc rad 0.5 cw);
-move right from last [] .e;
+move down 0.5 from 2nd last [] .s;
critical(line right 1 then down .5 left 1 then right 1);
-move right from last [] .e;
+move right 1 from last [] .e;
critical(spline right 1 then up right then left then left 1);
.PE
.CE "2: Special points on open objects"
@@ -988,7 +1020,9 @@ combine them to specify new positions.
.NH 3
Vector Sums and Displacements
.PP
-Any two positions may be added or subtracted to yield a new position.
+Positions may be added or subtracted to yield a new position (to be
+more precise, you can only add a position and an expression pair; the
+latter must be on the right side of the addition or subtraction sign).
The result is the conventional vector sum or difference of coordinates.
For example, \fBlast box .ne + (0.1, 0)\fP is a valid position. This
example illustrates a common use, to define a position slightly offset
@@ -998,12 +1032,12 @@ Interpolation Between Positions
.PP
A position may be interpolated between any two positions. The syntax
is `\fIfraction\fP \fBof the way between\fP \fIposition1\fP \fBand\fP
-\fIposition2\fP.' For example, you can say \fB1/3 of the way between
+\fIposition2\fP'. For example, you can say \fB1/3 of the way between
here and last ellipse .ne\fP. The fraction may be in
numerator/denominator form or may be an ordinary number (values are
-\&\fInot\fP restricted to [0,1]). As an alternative to this verbose
-syntax, you can say `\fIfraction\fP \fB<\fP\fIposition1\fP \fB,\fP
-\fIposition2\fP\fB>\fP.'; thus, the example could also be written
+\fInot\fP restricted to [0,1]). As an alternative to this verbose
+syntax, you can say `\fIfraction\fP \fB<\,\fP\fIposition1\fP \fB,\fP
+\fIposition2\/\fP\fB>\fP'; thus, the example could also be written as
\fB1/3 <here, last ellipse>\fP.
.KS
.PS
@@ -1013,10 +1047,11 @@ dot(P); move right 0.1; "P";
.PE
.CE "3: \fBP: 1/3 of the way between last arrow .start and last arrow .end\fP"
.PP
-This facility can be used, for example, to double connections.
+This facility can be used, for example, to draw double connections.
.KS
.PS
-A: box "yin"; move; B: box "yang";
+A: box "yin"; move;
+B: box "yang";
arrow right at 1/4 <A.e,A.ne>;
arrow left at 1/4 <B.w,B.sw>;
.PE
@@ -1041,7 +1076,7 @@ Note the use of the short form for interpolating points.
Projections of Points
.PP
Given two positions \fIp\fP and \fIq\fP, the position
-\fB(\fP\fIp\fP\fB,\fP \fIq\fP\fB)\fP has the X coordinate of \fIp\fP
+\fB(\,\fP\fIp\fP\fB,\fP \fIq\fP\fB)\fP has the X coordinate of \fIp\fP
and the Y coordinate of \fIq\fP. This can be helpful in placing an
object at one of the corners of the virtual box defined by two other
objects.
@@ -1079,7 +1114,7 @@ mechanism for connecting objects. For example, the following program
box "from"
move 0.75;
ellipse "to"
-arc cw from 1/3 of the way \\
+arc cw from 1/3 of the way \e
between last box .n and last box .ne to last ellipse .n;
\&.PE
.R
@@ -1092,36 +1127,46 @@ yields:
box "from"
move 0.75;
ellipse "to"
-arc cw from 1/3 of the way between last box .n and last box .ne to last ellipse .n;
+arc cw from 1/3 of the way \
+ between last box .n and last box .ne to last ellipse .n;
.PE
.CE "6: A tricky connection specified with English-like syntax"
.PP
The \fBwith\fP modifier allows you to identify a named attachment
-point of an object with another point. This is very useful for connecting
-objects in a natural way. For an example, consider these two programs:
+point of an object (or a position within the object) with another point.
+This is very useful for connecting objects in a natural way. For an
+example, consider these two programs:
.KS
.PS
[
- box wid 0.5 ht 0.5; box wid 0.75 ht 0.75;
- move down from last box .s 0.1;
+ [
+ box wid 0.5 ht 0.5;
+ box wid 0.75 ht 0.75;
+ ]
+ move down 0.3 from last [] .s 0.1;
"\fBbox wid 0.5 ht 0.5; box wid 0.75 ht 0.75\fP"
]
-move from last [].e 2
+move from last [].e 1.5
[
- box wid 0.5 ht 0.5; box wid 0.75 ht 0.75 with .sw at last box .se;
- move down from last box .s 0.1;
- "\fBbox wid 0.5 ht 0.5; box wid 0.75 ht 0.75 with .sw at last box .se;\fP"
+ [
+ box wid 0.5 ht 0.5;
+ box wid 0.75 ht 0.75 with .sw at last box .se;
+ ]
+ move down 0.3 from last [] .s 0.1;
+ box invisible "\fBbox wid 0.5 ht 0.5;\fP" \
+ "\fBbox wid 0.75 ht 0.75 with .sw at last box .se;\fP"
]
.PE
.CE "7: Using the \fBwith\fP modifier for attachments"
.NH 2
-The chop modifier
+The `chop' Modifier
.PP
When drawing lines between circles that don't intersect them at a
compass point, it is useful to be able to shorten a line by the radius
of the circle at either or both ends. Consider the following program:
.KS
.DS
+.CW
\&.PS
circle "x"
circle "y" at 1st circle - (0.4, 0.6)
@@ -1131,6 +1176,7 @@ arrow from 2nd circle to 3rd circle chop
arrow from 3rd circle to 1st circle chop
\&.PE
.DE
+.R
.KE
.LP
It yields the following:
@@ -1146,11 +1192,11 @@ arrow from 3rd circle to 1st circle chop
.CE "8: The \fBchop\fR modifier"
.LP
Notice that the \fBchop\fR attribute moves arrowheads rather than
-stepping on them. By default, the \fBchop\fR modifier shortens both
+stepping on them. By default, the \fBchop\fR modifier shortens both
ends of the line by \fBcirclerad\fR. By suffixing it with a number
you can change the amount of chopping.
.PP
-If you say \fBline ... chop \fIr1\fP chop \fIr2\fP\fR with \fIr1\fP
+If you say \fBline .\|.\|.\& chop \fIr1\fP chop \fIr2\fP\fR with \fIr1\fP
and \fIr2\fP both numbers, you can vary the amount of chopping at both
ends. You can use this in combination with trigonometric functions
to write code that will deal with more complex intersections.
@@ -1176,15 +1222,15 @@ Here is an example. The program fragment
.KS
.DS
.CW
-\&A: [
-\& circle;
-\& line up 1 at last circle .n;
-\& line down 1 at last circle .s;
-\& line right 1 at last circle .e;
-\& line left 1 at last circle .w;
-\& box dashed with .nw at last circle .se + (0.2, -0.2);
-\& Caption: center of last box;
-\&]
+A: [
+ circle;
+ line up 1 at last circle .n;
+ line down 1 at last circle .s;
+ line right 1 at last circle .e;
+ line left 1 at last circle .w;
+ box dashed with .nw at last circle .se + (0.2, -0.2);
+ Caption: center of last box;
+]
.R
.DE
.KE
@@ -1212,13 +1258,13 @@ compass([junction()]);
To refer to one of the composite's attachment points, you can say
(for example) \fBA .s\fP. For purposes of object naming, composites
are a class. You could write \fBlast [] .s\fP as an equivalent
-refrence, usable anywhere a location is needed. This construction is
+reference, usable anywhere a location is needed. This construction is
very important for putting together large, multi-part diagrams.
.PP
-Blocks are also a variable-scoping mechanism, like a \fIgroff\fP(1)
+Blocks are also a variable-scoping mechanism, like a \fIgroff\/\fP(1)
environment. All variable assignments done inside a block are undone
at the end of it. To get at values within a block, write a name of
-the block followed by a dot, followed by the variable or label you
+the block followed by a dot, followed by the label you
want. For example, we could refer the the center of the box in the
above composite as \fBlast [] .Caption\fP or \fBA.Caption\fP.
.PP
@@ -1237,6 +1283,30 @@ modifier. This means that the example composite could be placed
relative to its caption box by a command containing \fBwith A.Caption
at\fP.
.PP
+Note that both width and height of the block composite object are always
+positive:
+.KS
+.PS
+[
+ [
+ box wid -0.5 ht 0.5
+ box wid 0.75 ht 0.75
+ ]
+ move down 0.3 from last [].s 0.1
+ "\fBbox wid -0.5 ht 0.5; box wid 0.75 ht 0.75\fP"
+]
+move from last [].e 2
+[
+ [
+ [ box wid -0.5 ht 0.5 ]
+ box wid 0.75 ht 0.75
+ ]
+ move down 0.3 from last [].s 0.1
+ "\fB[box wid -0.5 ht 0.5]; box wid 0.75 ht 0.75\fP"
+]
+.PE
+.CE "3: Composite block objects always have positive width and height
+.PP
Blocks may be nested. This means you can use block attachment points
to build up complex diagrams hierarchically, from the inside out.
Note that \fBlast\fP and the other sequential naming mechanisms
@@ -1261,7 +1331,7 @@ the arrow in the last line will be attached to object \fBP\fP, not
object \fBQ\fP.
.PP
In DWB \fBpic\fP, only references one level deep into enclosed blocks
-were permitted. GNU \fBgpic\fP removes this restriction.
+were permitted. GNU \fBgpic\fP removes this restriction.
.PP
The combination of block variable scoping, assignability of labels and
the macro facility that we'll describe later on can be used to
@@ -1275,7 +1345,7 @@ change its overall behavior. We've mentioned several of them in
previous sections. They're all described here. For each variable,
the default is given.
.TS H
-tab(@), linesize(2);
+center, tab(@), linesize(2);
lb | lb | lb
l | n | l.
.sp 2p
@@ -1285,9 +1355,10 @@ _
.sp 2p
.TH
boxht@0.5@Default height of a box
-boxwid@0.75@Default height of a box
+boxwid@0.75@Default width of a box
lineht@0.5@Default length of vertical line
linewid@0.75@Default length of horizontal line
+linethick@-1@Default line thickness
arcrad @0.25@Default radius of an arc
circlerad@0.25@Default radius of a circle
ellipseht@0.5@Default height of an ellipse
@@ -1320,8 +1391,8 @@ size-related state variables so that their values remain equivalent in
the new units.
.PP
The command \fBreset\fP resets all style variables to their defaults.
-You can give it a comma-separated list of variable names as arguments,
-in which case it resets only those.
+You can give it a list of variable names as arguments (optionally
+separated by commas), in which case it resets only those.
.PP
State variables retain their values across pictures until reset.
.NH 1
@@ -1336,18 +1407,35 @@ Anywhere a number is expected, the language will also accept a
variable. Variables may be the built-in style variable described in
the last section, or new variables created by assignment.
.PP
-DWB \fBpic\fP supports only the ordinary assignment via =, defines the
-variable in the current block if it is not already defined there, and
-then changes the value in the current block.
-GNU \fBgpic\fP supports an alternate form of assignment using :=. The
-.I variable
-(right side) must already be defined,
-and the value of
-.I variable
-will be changed only in the innermost block in which it is defined.
+DWB \fBpic\fP supports only the ordinary assignment via \fB=\fP, which
+defines the variable (on the left side of the equal sign) in the current
+block if it is not already defined there, and then changes the value (on
+the right side) in the current block. The variable is not visible outside
+of the block. This is similar to the C\~programming language where a
+variable within a block shadows a variable with the same name outside of
+the block.
+.PP
+GNU \fBgpic\fP supports an alternate form of assignment using \fB:=\fP.
+The variable must already be defined, and the value will be assigned to
+that variable without creating a variable local to the current block.
+For example, this
+.KS
+.DS
+.CW
+x=5
+y=5
+[
+ x:=3
+ y=3
+]
+print x " " y
+.DE
+.KE
+.LP
+prints \fB3 5\fP.
.PP
You can use the height, width, radius, and x and y coordinates of any
-object or corner in expressions If \fBA\fP is an object label or name,
+object or corner in expressions. If \fBA\fP is an object label or name,
all the following are valid:
.KS
.DS
@@ -1360,30 +1448,34 @@ A.ht # and its height
.R
.DE
.KE
+.LP
Note the second expression, showing how to extract a corner coordinate.
.PP
-Basic arithmetic resembling those of C operators are available; +, *,
--, /, and %. So is ^ for exponentiation. Grouping is permitted in
-the usual way using parentheses. GNU \fBgpic\fP allows logical
-operators to appear in expressions; ! (logical negation, not
-factorial), &&, ||, ==, !=, >=, <=, <, >.
+Basic arithmetic resembling those of C operators are available; \fB+\fP,
+\fB*\fP, \fB-\fP, \fB/\fP, and \fB%\fP. So is \fB^\fP for exponentiation.
+Grouping is permitted in the usual way using parentheses. GNU \fBgpic\fP
+allows logical operators to appear in expressions; \fB!\&\fP (logical
+negation, not factorial), \fB&&\fP, \fB|\||\fP, \fB==\fP, \fB!=\fP,
+\fB>=\fP, \fB<=\fP, \fB<\fP, \fB>\fP.
.PP
Various built-in functions are supported: \fBsin(\fIx\fB)\fR,
\fBcos(\fIx\fB)\fR, \fBlog(\fIx\fB)\fR, \fBexp(\fIx\fB)\fR,
\fBsqrt(\fIx\fB)\fR, \fBmax(\fIx\fB,\fIy\fB)\fR,
\fBatan2(\fIx\fB,\fIy\fB)\fR, \fBmin(\fIx\fB,\fIy\fB)\fR,
-\fBint(\fIx\fB)\fR, and \fBrand()\fP.
+\fBint(\fIx\fB)\fR, \fBrand()\fP, and \fBsrand()\fP.
Both \fBexp\fP and \fBlog\fP are
-base 10; \fBint\fP does integer truncation; and \fBrand()\fP returns a
-random number in [0-1).
+base\~10; \fBint\fP does integer truncation; \fBrand()\fP returns a
+random number in [0-1), and \fBsrand()\fP sets the seed for
+a new sequence of pseudo-random numbers to be returned by \fBrand()\fP
+(\fBsrand()\fP is a GNU extension).
.PP
GNU \fBgpic\fP also documents a one-argument form or rand,
\fBrand(\fIx\fB)\fR, which returns a random number between 1 and
\fIx\fP, but this is deprecated and may be removed in a future
version.
.PP
-The function \fBsprintf()\fP behaves like a C \fIsprintf\fP(3) that
-only takes %, %e, %f, and %g format strings.
+The function \fBsprintf()\fP behaves like a C \fIsprintf\/\fP(3)
+function that only takes %, %e, %f, and %g format strings.
.NH 1
Macros
.PP
@@ -1402,65 +1494,71 @@ This defines \fIname\fR as a macro to be replaced by the replacement
text (not including the braces). The macro may be called as
.DS
.CW
-\fIname\fB(\fIarg1, arg2, ... argn\fB)\fR
+\fIname\fB(\fIarg1, arg2, \|.\|.\|.\& argn\fB)\fR
.R
.DE
.LP
-The arguments (if any) will be substituted for tokens $1, $2 ... $n
+The arguments (if any) will be substituted for tokens \fB$1\fP, \fB$2\fP
+\&.\|.\|.\& \fB$n\fP
appearing in the replacement text.
.PP
-As an example of macro use, consider the following:
+As an example of macro use, consider this:
.KS
.DS
.CW
+.ps -1
+.vs -1
\&.PS
-\&# Plot a single jumper in a $1 by $2 box, $3 is the on-off state
-\&define jumper { [
-\& shrinkfactor = 0.8;
-\& Outer: box invis wid 0.5 ht 1;
-\&
-\& # Count on end ] to reset these
-\& boxwid = Outer.wid * shrinkfactor / 2;
-\& boxht = Outer.ht * shrinkfactor / 2;
-\&
-\& box fill (!$1) with .s at center of Outer;
-\& box fill ($1) with .n at center of Outer;
-\&] }
-\&
-\&# Plot a block of six jumpers
-\&define jumperblock {
-\& jumper($1);
-\& jumper($2);
-\& jumper($3);
-\& jumper($4);
-\& jumper($5);
-\& jumper($6);
-\&
-\& jwidth = last [].Outer.wid;
-\& jheight = last [].Outer.ht;
-\&
-\& box with .nw at 6th last [].nw wid 6*jwidth ht jheight;
-\&
-\& # Use {} to avoid changing position from last box draw.
-\& # This is necessary so move in any direction will work as expected
-\& {"Jumpers in state $1$2$2$3$4$5$6" at last box .s + (0, -0.2);}
-\&}
-\&
-\&# Sample macro invocations
-\&jumperblock(1,1,0,0,1,0);
-\&move;
-\&jumperblock(1,0,1,0,1,1);
-.PE
+# Plot a single jumper in a box, $1 is the on-off state.
+define jumper { [
+ shrinkfactor = 0.8;
+ Outer: box invis wid 0.45 ht 1;
+
+ # Count on end ] to reset these
+ boxwid = Outer.wid * shrinkfactor / 2;
+ boxht = Outer.ht * shrinkfactor / 2;
+
+ box fill (!$1) with .s at center of Outer;
+ box fill ($1) with .n at center of Outer;
+] }
+
+# Plot a block of six jumpers.
+define jumperblock {
+ jumper($1);
+ jumper($2);
+ jumper($3);
+ jumper($4);
+ jumper($5);
+ jumper($6);
+
+ jwidth = last [].Outer.wid;
+ jheight = last [].Outer.ht;
+
+ box with .nw at 6th last [].nw wid 6*jwidth ht jheight;
+
+ # Use {} to avoid changing position from last box draw.
+ # This is necessary so move in any direction will work as expected
+ {"Jumpers in state $1$2$3$4$5$6" at last box .s + (0, -0.2);}
+}
+
+# Sample macro invocations.
+jumperblock(1,1,0,0,1,0);
+move;
+jumperblock(1,0,1,0,1,1);
+\&.PE
+.ps
+.vs
.R
.DE
.KE
+.LP
It yields the following:
.KS
.PS
-# Plot a single jumper in a $1 by $2 box, $3 is the on-off state
+# Plot a single jumper in a box, $1 is the on-off state.
define jumper { [
shrinkfactor = 0.8;
- Outer: box invis wid 0.5 ht 1;
+ Outer: box invis wid 0.45 ht 1;
# Count on end ] to reset these
boxwid = Outer.wid * shrinkfactor / 2;
@@ -1486,12 +1584,12 @@ define jumperblock {
# Use {} to avoid changing position from last box draw.
# This is necessary so move in any direction will work as expected
- {"Jumpers in state $1$2$2$3$4$5$6" at last box .s + (0, -0.2);}
+ {"Jumpers in state $1$2$3$4$5$6" at last box .s + (0, -0.2);}
}
# Sample macro invocations
jumperblock(1,1,0,0,1,0);
-move;
+move 0.25;
jumperblock(1,0,1,0,1,1);
.PE
.CE "1: Sample use of a macro"
@@ -1500,9 +1598,10 @@ This macro example illustrates how you can combine [], brace grouping,
and variable assignment to write true functions.
.PP
One detail the example above does not illustrate is the fact that
-macro argument parsing is not token-oriented. If you call \fBjumper(
-1 )\fP, the value of $1 will be \fB" 1 "\fP. You could even call
-\fBjumper(big string)\fP to give $1 the value \fB"big string"\fP.
+macro argument parsing is not token-oriented. If you call
+\fBjumper(\ 1\ )\fP, the value of $1 will be \fB"\ 1\ "\fP. You could
+even call \fBjumper(big\ string)\fP to give $1 the value
+\fB"big\ string"\fP.
.PP
If you want to pass in a coordinate pair, you can avoid getting
tripped up by the comma by wrapping the pair in parentheses.
@@ -1527,37 +1626,39 @@ The statement
.DS
\f(CWcopy\fP \fIfilename\fR
.DE
+.LP
inserts the contents of \fIfilename\fR in the \fBpic\fP input stream.
-Any .PS/.PE pair in the file will be ignored. This, you can use this
-to include pre-generated images.
+Any \fB.PS\fP/\fB.PE\fP pair in the file will be ignored. This, you
+can use this to include pre-generated images.
.PP
A variant of this statement replicates the \fBcopy thru\fP feature of
-\fIgrap\fP(1). If you say
+\fIgrap\fP(1). The call
.DS
\f(CWcopy\fP \fIfilename\fR \f(CWthru\fP \fImacro\fP
.DE
.LP
-calls the \fImacro\fP (which may be either a name or replacement text)
+calls \fImacro\fP (which may be either a name or replacement text)
on the arguments obtained by breaking each line of the file into
-blank-separated fields. The macro may have up to 9 arguments. The
+blank-separated fields. The macro may have up to 9\~arguments. The
replacement text may be delimited by braces or by a pair of instances
of any character not appearing in the rest of the text.
.PP
If you write
.DS
-\f(CWcopy thru\fP \fImacro\fP
+\f(CWcopy\fP \f(CWthru\fP \fImacro\fP
.DE
.LP
omitting the filename, lines to be parsed are taken from the input
-source up to the next .PE.
+source up to the next \fB.PE\fP.
.PP
-In either of the \fBcopy\fP commands, GNU \fBgpic\fP permits a
-trailing `\fBuntil\fP \fIword\fP' clause to be added which terminates
+In either of the last two \fBcopy\fP commands, GNU \fBgpic\fP permits a
+trailing `\fBuntil\fP \fIword\/\fP' clause to be added which terminates
the copy when the first word matches the argument (the default
behavior is therefore equivalent to \fBuntil .PE\fP).
.PP
Accordingly, the command
.RS
+.KS
.IP
.ft CW
.nf
@@ -1571,10 +1672,12 @@ box
\&.PE
.R
.fi
+.KE
.RE
.LP
is equivalent to
.RS
+.KS
.IP
.ft CW
.nf
@@ -1586,14 +1689,14 @@ box
\&.PE
.R
.fi
+.KE
.RE
.NH 2
Debug Messages
.PP
-The command \fBprint\fR accepts any number of comma-separated
-arguments, concatenates their output forms, and writes the result to
-standard error. Each argument must be an expression, a position, or
-a text string.
+The command \fBprint\fR accepts any number of arguments, concatenates
+their output forms, and writes the result to standard error. Each
+argument must be an expression, a position, or a text string.
.NH 2
Escape to Post-Processor
.PP
@@ -1603,23 +1706,23 @@ If you write
.DE
.LP
\fBpic\fP concatenates the arguments and pass them through as a line
-to troff or \*(tx. Each
+to troff or \*[tx]. Each
.I arg
must be an expression, a position, or text.
This has a similar effect to a line beginning with
.B .
or
-\fB\e\fR,
+\fB\e\fR\|,
but allows the values of variables to be passed through.
.NH 2
Executing Shell Commands
.PP
The command
.DS
-\f(CWsh { \fIanything...\fP }\fP
+\f(CWsh\fP \f(CW{\fP \fIanything.\|.\|.\fP \f(CW}\fP
.DE
.LP
-macroexpands the text in braces, then executes it as a shell command.
+macro-expands the text in braces, then executes it as a shell command.
This could be used to generate images or data tables for later
inclusion. The delimiters shown as {} here may also be two copies of
any one character not present in the shell command text. In either
@@ -1657,12 +1760,12 @@ for i = 0 to 2 * pi by 0.1 do {
.LP
The syntax of the \fBfor\fP statement is:
.DS
-\fBfor\fR \fIvariable\fR \fB=\fR \fIexpr1\fR \fBto\fR \fIexpr2\fR \
-[\fBby\fR [\fB*\fR]\fIexpr3\fR] \fBdo\fR \fIX\fR \fIbody\fR \fIX\fR
+\fBfor\fR \fIvariable\fR \fB=\fR \fIexpr1\/\fR \fBto\fR \fIexpr2\/\fR \
+[\fBby\fR [\fB*\fR]\fIexpr3\/\fR] \fBdo\fR \fIX\fR \fIbody\fR \fIX\fR
.DE
The semantics are as follows: Set
.I variable
-to \fIexpr\fR1 .
+to \fIexpr1\fR.
While the value of
.I variable
is less than or equal to
@@ -1677,10 +1780,10 @@ if
.B by
is not given, increment
.I variable
-by 1.
+by\~1.
If
.I expr3
-is prefixed by
+is prefixed by\~\c
.B *
then
.I variable
@@ -1688,12 +1791,13 @@ will instead be multiplied by
\fIexpr3\fR.
.I X
can be any character not occurring in
-\fIbody\fR; or the two Xs may be paired braces (as in the \fBsh\fR command).
+\fIbody\fR; or the two \fIX\/\fPs may be paired braces (as in the
+\fBsh\fR command).
.PP
The syntax of the \fBif\fP statement is as follows:
.DS
\fBif\fR \fIexpr\fR \fBthen\fR \fIX\fR \fIif-true\fR \fIX\fR \
-[\fBelse\fR \fIY\fR \fIif-false\fR \fIY\fR]
+[\fBelse\fR \fIY\fR \fIif-false\fR \fIY\/\fR]
.DE
Its semantics are as follows: Evaluate
\fIexpr\fR;
@@ -1708,81 +1812,91 @@ can be any character not occurring in
can be any character not occurring in
\fIif-false\fR.
.PP
-Eithe or both of the X or Y pairs may instead be balanced pairs of
-braces ({ and }) as in the \fBsh\fR command. In either case, the
+Eithe or both of the
+.I X
+or
+.I Y
+pairs may instead be balanced pairs of
+braces ({ and\~}) as in the \fBsh\fR command. In either case, the
\fIif-true\fR may contain balanced pairs of braces. None of these
delimiters will be seen inside strings.
.PP
All the usual relational operators my be used in conditional expressions;
-! (logical negation, not factorial), &&, ||, ==, !=, >=, <=, <, >.
+\fB!\&\fP (logical negation, not factorial), \fB&&\fP, \fB|\||\fP, \fB==\fP,
+\fB!=\fP, \fB>=\fP, \fB<=\fP, \fB<\fP, \fB>\fP.
.PP
-String comparison is also supported using == and !=. String
+String comparison is also supported using \fB==\fP and \fB!=\fP. String
comparisons may need to be parenthesized to avoid syntactic
ambiguities.
.NH 1
Interface To [gt]roff
.PP
The output of \fBpic\fP is \fB[gt]roff\fP drawing commands. The GNU
-\fIgpic\fP(1) command warns that it relies on drawing extensions
-present in \fIgroff\fP(1) that are not present in \fItroff\fP(1).
+\fIgpic\/\fP(1) command warns that it relies on drawing extensions
+present in \fIgroff\/\fP(1) that are not present in \fItroff\/\fP(1).
.NH 2
Scaling Arguments
.PP
-The DWB \fIpic\fP(1) program will accept one or two arguments to
+The DWB \fIpic\/\fP(1) program will accept one or two arguments to
\&\fB.PS\fP, which is interpreted as a width and height in inches to
-which the results of \fIpic\fP(1) should be scaled (width and height
+which the results of \fIpic\/\fP(1) should be scaled (width and height
scale independently). If there is only one argument, it is
interpreted as a width to scale the picture to, and height will be
scaled by the same proportion.
.PP
GNU \fBgpic\fP is less general; it will accept a single width to scale
to, or a zero width and a maximum height to scale to. With
-two nonzero arguments, it will scale to the maximum height.
+two non-zero arguments, it will scale to the maximum height.
.NH 2
How Scaling is Handled
.PP
-When \fBpic\fP processes a picture description on input, it passes .PS
-and .PE through to the postprocessor. The .PS gets decorated with two
-numeric arguments which are the X and Y dimensions of the picture in
-inches. The post-processor can use these to reserve space for the
-picture and center it.
+When \fBpic\fP processes a picture description on input, it passes
+\fB.PS\fP and \fB.PE\fP through to the postprocessor. The \fB.PS\fP
+gets decorated with two numeric arguments which are the X and
+Y\~dimensions of the picture in inches. The post-processor can use
+these to reserve space for the picture and center it.
.PP
-The \fBmgs\fP macros, for example, include the following definitions:
+The GNU incarnation of the \fBms\fP macro package, for example, includes
+the following definitions:
.KS
.DS
+.ps -1
+.vs -1
.CW
\&.de PS
\&.br
-\&.sp \\n[DD]u
-\&.ie \\n[.$]<2 .@error bad arguments to PS (not preprocessed with pic?)
-\&.el \{\
-\&. ds@need (u;\\$1)+1v
-\&. in +(u;\\n[.l]-\\n[.i]-\\$2/2>?0)
-\&.\}
+\&.sp \e\en[DD]u
+\&.ie \e\en[.$]<2 .@error bad arguments to PS (not preprocessed with pic?)
+\&.el \e{\e
+\&. ds@need (u;\e\e$1)+1v
+\&. in +(u;\e\en[.l]-\e\en[.i]-\e\e$2/2>?0)
+\&.\e}
\&..
\&.de PE
\&.par@reset
-\&.sp \\n[DD]u+.5m
+\&.sp \e\en[DD]u+.5m
\&..
.R
.DE
+.ps
+.vs
.KE
.LP
-Equivalent definition will be supplied by GNU \fIpic\fP(1) if you use
-the -mpic option; this should make it usable with macro pages other
-than \fIms\fR(1).
+Equivalent definition will be supplied by GNU \fIpic\/\fP(1) if you use
+the \-mpic option; this should make it usable with macro pages other
+than \fIms\/\fR(1).
.PP
-if .PF is used instead of .PE, the \fBtroff\fP position is restored to
-what it was at the picture start (Kernighan notes that the F stands
-for "flyback").
+If \fB.PF\fP is used instead of \fB.PE\fP, the \fBtroff\fP position is
+restored to what it was at the picture start (Kernighan notes that
+the\~F stands for \[lq]flyback\[rq]).
.PP
The invocation
.DS
-\&\fB.PS <\fP\fIfile\fP
+\&\fB.PS <\,\fP\fIfile\fP
.DE
.LP
-causes the contents of \fIfile\fP to replace the .PS line. This
-feature is deprecated; use \fBcopy file\fR instead).
+causes the contents of \fIfile\fP to replace the \fB.PS\fP line. This
+feature is deprecated; use `\fBcopy\fP \fIfile\fR' instead).
.PP
By default, input lines that begin with a period are passed to the
postprocessor, embedded at the corresponding point in the output.
@@ -1796,10 +1910,10 @@ The state of \fB[gt]roff\fP's fill mode is preserved across pictures.
.PP
The Kernighan paper notes that there is a subtle problem with
complicated equations inside \fBpic\fR pictures; they come out wrong if
-\fIeqn\fP(1) has to leave extra vertical space for the equation.
+\fIeqn\/\fP(1) has to leave extra vertical space for the equation.
If your equation involves more than subscripts and superscripts, you
must add to the beginning of each equation the extra information
-\f(CWspace 0\fP. He gives the following example:
+\fBspace\~0\fP. He gives the following example:
.KS
.DS
.CW
@@ -1823,16 +1937,16 @@ arrow
Interface to TeX
.PP
.PP
-\*(tx mode is enabled by the
+\*[tx] mode is enabled by the
.B \-t
option.
-In \*(tx mode, pic will define a vbox called
+In \*[tx] mode, pic will define a vbox called
.B \egraph
for each picture.
You must yourself print that vbox using, for example, the command
.RS
.LP
-.B
+.CW
\ecenterline{\ebox\egraph}
.RE
.LP
@@ -1840,15 +1954,15 @@ Actually, since the vbox has a height of zero this will produce
slightly more vertical space above the picture than below it;
.RS
.LP
-.B
+.CW
\ecenterline{\eraise 1em\ebox\egraph}
.RE
.LP
would avoid this.
.PP
-You must use a \*(tx driver that supports the
+You must use a \*[tx] driver that supports the
.B tpic
-specials, version 2.
+specials, version\~2.
.PP
Lines beginning with
.B \e
@@ -1856,16 +1970,16 @@ are passed through transparently; a
.B %
is added to the end of the line to avoid unwanted spaces.
You can safely use this feature to change fonts or to
-change the value of \fI\ebaselineskip\fR.
+change the value of \fB\ebaselineskip\fR.
Anything else may well produce undesirable results; use at your own risk.
Lines beginning with a period are not given any special treatment.
.PP
-The \(*tx mode of \fIpic\fP(1) will \fInot\fP translate \fBtroff\fP
+The \*[tx] mode of \fIpic\/\fP(1) will \fInot\fP translate \fBtroff\fP
font and size changes included in text strings!
.NH 1
Obsolete Commands
.PP
-GNU \fIgpic\fP(1) has a command
+GNU \fIgpic\/\fP(1) has a command
.DS
\fBplot\fR \fIexpr\fR [\fB"\fItext\fB"\fR]
.DE
@@ -1876,7 +1990,7 @@ with an argument of
\fIexpr\fP.
If
.I text
-is omitted a format string of "%g" is used.
+is omitted a format string of \fB"%g"\fP is used.
Attributes can be specified in the same way as for a normal text
object.
Be very careful that you specify an appropriate format string;
@@ -1887,44 +2001,51 @@ This is deprecated in favour of
Some Larger Examples
.PP
Here are a few larger examples, with complete source code.
-.PP
One of our earlier examples is generated in an instructive way using a
for loop:
.KS
.DS
+.ps -1
+.vs -1
.CW
\&.PS
-\&# Draw a demonstration up left arrow with grid box overlay
-\&define gridarrow
-\&{
-\& [
-\& {arrow up left $1;}
-\& box wid 0.5 ht 0.5 dotted with .nw at last arrow .end;
-\& for i = 2 to ($1 / 0.5) do
-\& {
-\& box wid 0.5 ht 0.5 dotted with .sw at last box .se;
-\& }
-\& move down from last arrow .center;
-\& [
-\& if ( $1 == boxht ) then { "\\fBline up left\\fP" } else { sprintf("\\fBarrow up left %g\\fP", $1) };
-\& ]
-\& ]
-\& move right from last [] .e;
-\&}
-\&gridarrow(0.5);
-\&gridarrow(1);
-\&gridarrow(1.5);
-\&gridarrow(2);
-\&undef gridarrow
+# Draw a demonstration up left arrow with grid box overlay
+define gridarrow
+{
+ move right 0.1
+ [
+ {arrow up left $1;}
+ box wid 0.5 ht 0.5 dotted with .nw at last arrow .end;
+ for i = 2 to ($1 / 0.5) do
+ {
+ box wid 0.5 ht 0.5 dotted with .sw at last box .se;
+ }
+ move down from last arrow .center;
+ [
+ if ( $1 == boxht ) \e
+ then { "\efBline up left\efP" } \e
+ else { sprintf("\efBarrow up left %g\efP", $1) };
+ ]
+ ]
+ move right 0.1 from last [] .e;
+}
+gridarrow(0.5);
+gridarrow(1);
+gridarrow(1.5);
+gridarrow(2);
+undef gridarrow
\&.PE
.R
.DE
+.ps
+.vs
.KE
.KS
.PS
# Draw a demonstration up left arrow with grid box overlay
define gridarrow
{
+ move right 0.1
[
{arrow up left $1;}
box wid 0.5 ht 0.5 dotted with .nw at last arrow .end;
@@ -1934,10 +2055,12 @@ define gridarrow
}
move down from last arrow .center;
[
- if ( $1 == boxht ) then { "\fBline up left\fP" } else { sprintf("\fBarrow up left %g\fP", $1) };
+ if ( $1 == boxht ) \
+ then { "\fBline up left\fP" } \
+ else { sprintf("\fBarrow up left %g\fP", $1) };
]
]
- move right from last [] .e;
+ move right 0.1 from last [] .e;
}
gridarrow(0.5);
gridarrow(1);
@@ -1951,71 +2074,75 @@ Here's an example concocted to demonstrate layout of a large,
multiple-part pattern:
.KS
.DS
+.ps -1
+.vs -1
.CW
\&.PS
-\&define filter {box ht 0.25 rad 0.125}
-\&lineht = 0.25;
-\&Top: [
-\& right;
-\& box "\\fBms\\fR" "sources";
-\& move;
-\& box "\\fBHTML\\fR" "sources";
-\& move;
-\& box "\\fBlinuxdoc-sgml\\fP" "sources" wid 1.5;
-\& move;
-\& box "\\fBTexinfo\\fP" "sources";
-\&
-\& line down from 1st box .s lineht;
-\& A: line down;
-\& line down from 2nd box .s; filter "\\fBhtml2ms\\fP";
-\& B: line down;
-\& line down from 3rd box .s; filter "\\fBformat\\fP";
-\& C: line down;
-\& line down from 4th box .s; filter "\\fBtexi2roff\\fP";
-\& D: line down;
-\&]
-\&move down 1 from last [] .s;
-\&Anchor: box wid 1 ht 0.75 "\\fBms\\fR" "intermediate" "form";
-\&arrow from Top.A.end to Anchor.nw;
-\&arrow from Top.B.end to 1/3 of the way between Anchor.nw and Anchor.ne;
-\&arrow from Top.C.end to 2/3 of the way between Anchor.nw and Anchor.ne;
-\&arrow from Top.D.end to Anchor.ne
-\&{
-\& # PostScript column
-\& move to Anchor .sw;
-\& line down left then down ->;
-\& filter "\\fBpic\\fP";
-\& arrow;
-\& filter "\\fBeqn\\fP";
-\& arrow;
-\& filter "\\fBtbl\\fP";
-\& arrow;
-\& filter "\\fBgroff\\fP";
-\& arrow;
-\& box "PostScript";
-\&
-\& # HTML column
-\& move to Anchor .se;
-\& line down right then down ->;
-\& A: filter dotted "\\fBpic2img\\fP";
-\& arrow;
-\& B: filter dotted "\\fBeqn2html\\fP";
-\& arrow;
-\& C: filter dotted "\\fBtbl2html\\fP";
-\& arrow;
-\& filter "\\fBms2html\\fP";
-\& arrow;
-\& box "HTML";
-\&
-\& # Nonexistence caption
-\& box dashed wid 1 at B + (2, 0) "These tools" "don't yet exist";
-\& line chop 0 chop 0.1 dashed from last box .nw to A.e ->;
-\& line chop 0 chop 0.1 dashed from last box .w to B.e ->;
-\& line chop 0 chop 0.1 dashed from last box .sw to C.e ->;
-\&}
+define filter {box ht 0.25 rad 0.125}
+lineht = 0.25;
+Top: [
+ right;
+ box "\efBms\efR" "sources";
+ move;
+ box "\efBHTML\efR" "sources";
+ move;
+ box "\efBlinuxdoc-sgml\efP" "sources" wid 1.5;
+ move;
+ box "\efBTexinfo\efP" "sources";
+
+ line down from 1st box .s lineht;
+ A: line down;
+ line down from 2nd box .s; filter "\efBhtml2ms\efP";
+ B: line down;
+ line down from 3rd box .s; filter "\efBformat\efP";
+ C: line down;
+ line down from 4th box .s; filter "\efBtexi2roff\efP";
+ D: line down;
+]
+move down 1 from last [] .s;
+Anchor: box wid 1 ht 0.75 "\efBms\efR" "intermediate" "form";
+arrow from Top.A.end to Anchor.nw;
+arrow from Top.B.end to 1/3 of the way between Anchor.nw and Anchor.ne;
+arrow from Top.C.end to 2/3 of the way between Anchor.nw and Anchor.ne;
+arrow from Top.D.end to Anchor.ne
+{
+ # PostScript column
+ move to Anchor .sw;
+ line down left then down ->;
+ filter "\efBpic\efP";
+ arrow;
+ filter "\efBeqn\efP";
+ arrow;
+ filter "\efBtbl\efP";
+ arrow;
+ filter "\efBgroff\efP";
+ arrow;
+ box "PostScript";
+
+ # HTML column
+ move to Anchor .se;
+ line down right then down ->;
+ A: filter dotted "\efBpic2img\efP";
+ arrow;
+ B: filter dotted "\efBeqn2html\efP";
+ arrow;
+ C: filter dotted "\efBtbl2html\efP";
+ arrow;
+ filter "\efBms2html\efP";
+ arrow;
+ box "HTML";
+
+ # Nonexistence caption
+ box dashed wid 1 at B + (2, 0) "These tools" "don't yet exist";
+ line chop 0 chop 0.1 dashed from last box .nw to A.e ->;
+ line chop 0 chop 0.1 dashed from last box .w to B.e ->;
+ line chop 0 chop 0.1 dashed from last box .sw to C.e ->;
+}
\&.PE
.R
.DE
+.ps
+.vs
.KE
.KS
.PS
@@ -2086,7 +2213,7 @@ arrow from Top.D.end to Anchor.ne
.NH 1
PIC Reference
.PP
-This is an annotated grammar of PIC.
+This is an annotated grammar of \fBpic\fP.
.NH 2
Lexical Items
.PP
@@ -2094,42 +2221,68 @@ In general, \fBpic\fP is a free-format, token-oriented language that
ignores whitespace outside strings. But certain lines and contructs
are specially interpreted at the lexical level:
.PP
-A comment begins with # and continues to \en (comments may also follow
-text in a line). A line beginning with a period or backslash may be
-interpreted as text to be passed through to the post-processor,
-depending on command-line options. An end-of-line backslash is
-interpreted as a request to continue the line; the backslash and
-following newline are ignored.
-.LP
+A comment begins with \fB#\fP and continues to \fB\en\fP (comments may
+also follow text in a line). A line beginning with a period or
+backslash may be interpreted as text to be passed through to the
+post-processor, depending on command-line options. An end-of-line
+backslash is interpreted as a request to continue the line; the
+backslash and following newline are ignored.
+.PP
+.RS
Here are the grammar terminals:
-.IP <number>
-A decimal numeric constant. May contain a decimal point or be
-expressed in scientific notation in the style of \fIprintf\fP(3)'s %e
-escape. (All variables are represented internally in floating-point.)
-.IP <string>
-Any ASCII characters surrounded by a pair of double quotes. May
-contain a double quote if preceded by a backslash.
-.IP <variable>
-A lower-case alphabetic character, followed by any number of
-alphanumerics. (Values of variables are preserved across pictures.)
-.IP <label>
-An upper-case alphabetic character, followed by any number of
-alphanumerics.
+.IP \s[-1]INT\s[0]
+A positive integer.
+.IP \s[-1]NUMBER\s[0]
+A floating point numeric constant. May contain a decimal point or be
+expressed in scientific notation in the style of \fIprintf\/\fP(3)'s %e
+escape. A trailing `i' or `I' (indicating the unit `inch') is ignored.
+.IP \s[-1]TEXT\s[0]
+A string enclosed in double quotes. A double quote within \s[-1]TEXT\s[0]
+must be preceded by a backslash. Instead of \s[-1]TEXT\s[0] you can use
+.DS
+.CW
+sprintf ( TEXT [, <expr> ...] )
+.R
+.DE
+.IP
+except after the `until' and `last' keywords, and after all ordinal
+keywords (`th' and friends).
+.IP \s[-1]VARIABLE\s[0]
+A string starting with a character from the set [a-z], optionally
+followed by one or more characters of the set [a-zA-Z0-9_].
+(Values of variables are preserved across pictures.)
+.IP \s[-1]LABEL\s[0]
+A string starting with a character from the set [A-Z], optionally
+followed by one or more characters of the set [a-zA-Z0-9_].
+.IP \s[-1]COMMAND-LINE\s[0]
+A line starting with a command character (`.' in groff mode, `\e' in
+\*[tx] mode).
+.IP \s[-1]BALANCED-TEXT\s[0]
+A string either enclosed by `{' and `}' or with \fIX\fP and \fIX\fP,
+where \fIX\fP doesn't occur in the string.
+.IP \s[-1]BALANCED-BODY\s[0]
+Delimiters as in \s[-1]BALANCED-TEXT\s[0]; the body will be interpreted as
+`\fB\[la]command\[ra].\|.\|.\fP'.
+.IP \s[-1]FILENAME\s[0]
+The name of a file. This has the same semantics as \s[-1]TEXT\s[0].
+.IP \s[-1]MACRONAME\s[0]
+Either \s[-1]VARIABLE\s[0] or \s[-1]LABEL\s[0].
+.RE
.NH 2
Semi-Formal Grammar
.PP
-Tokens not enclosed in <> are literals, except:
+Tokens not enclosed in \[la]\|\[ra] are literals, except:
.IP 1.
-\en is a newline
+\fB\en\fP is a newline.
.IP 2.
-three dots is a suffix meaning \&`replace with 0 or more repetitions
-of the preceding element.
+Three dots is a suffix meaning `replace with 0 or more repetitions
+of the preceding element(s).
.IP 3.
-enclosure in square brackets has its usual meaning of `this clause is
+An enclosure in square brackets has its usual meaning of `this clause is
optional'.
.IP 4.
Square-bracket-enclosed portions within tokens are optional. Thus,
-\fBh[eigh]t\fR matches either `height' or `ht'.
+`h\^[eigh]\^t' matches either `height' or `ht'.
.LP
If one of these special tokens has to be referred to literally, it is
surrounded with single quotes.
@@ -2137,169 +2290,351 @@ surrounded with single quotes.
The top-level \fBpic\fP object is a picture.
.DS
.CW
-<picture> ::= .PS [width [height]]\en
- <statement> ...
- .PE \en
+<picture> ::=
+ .PS [NUMBER [NUMBER]]\en
+ <statement> ...
+ .PE \en
.R
.DE
-.LP
-The \fIwidth\fP and \fIheight\fP arguments, if present, cause
-\fBpic\fR to attempt to scale the picture to the given dimensions in
-inches. In no case, however, will the X and Y dimensions of the
-picture exceed the values of the style variables \fBmaxpswid\fP,
-\fBmaxpsheight\fP (which default to the normal 8.5 by 11 page size)\fP.
-.LP
-If the ending .PS is replaced by .PF, the page vertical position is
-restored to its value at the time .PS was encountered. Another
-alternate form of invocation is \f(CW.PS <\fIfilename\fR, which
-replaces the .PS line with a file to be interpreted by \fBpic\fR (but
+.PP
+The arguments, if present, represent the width and height of the picture,
+causing \fBpic\fR to attempt to scale it to the given dimensions in
+inches. In no case, however, will the X and Y\~dimensions of the
+picture exceed the values of the style variables \fBmaxpswid\fP and
+\fBmaxpsheight\fP (which default to the normal 8.5\^i by 11\^i page size).
+.PP
+If the ending `.PE' is replaced by `.PF', the page vertical position is
+restored to its value at the time `.PS' was encountered. Another
+alternate form of invocation is `.PS\ <\s[-1]FILENAME\s[0]', which
+replaces the `.PS' line with a file to be interpreted by \fBpic\fR (but
this feature is deprecated).
-.LP
-The .PS, .PE, and .PF macros to perform centering and scaling are
+.PP
+The `.PS', `.PE', and `.PF' macros to perform centering and scaling are
normally supplied by the post-processor.
+.PP
+In the following, either `|' or a new line starts an alternative.
.DS
.CW
-
-<statement> ::= <command> ;
- <command> \en
-
-<command> ::= <primitive> <modifier>...
- <label> : <command>
- <label> : <position>
- <variable> = <expr>
- <direction>
- { <command> ... }
- '[' <command> ... ']'
- for <var> = <expr> to <expr> [by <expr>] do { <command> ... }
- if <expr> then { <command> ... } [else { <command> ... }]
- copy <filename> [until <word>]
- copy <filename> thru <macroname> [until <word>]
- sh <balanced-text>
- print <print-item>
- reset [ <variable> ... ]
+<statement> ::=
+ <command> ;
+ <command> \en
.R
.DE
-.LP
-The current position and direction are saved on entry to a { } and
-restored on exit from it.
-.LP
-Drawn objects within [ ] are treated as a single composite object with
-a rectangular shape (that of the bounding box of all the elements).
-Variable and label assignments within a block are local to the block.
-Current direction of motion is restored to the value at start of block
-upon exit. Position is \fInot\fR restored (unlike { }) instead, the
-current position becomes the exit position for the current direction
-on the block's bounding box.
.DS
.CW
-<primitive> ::= box \fR# Closed object -- rectangle\fP
- circle \fR# Closed object -- circle\fP
- ellipse \fR# Closed object -- ellipse\fP
- arc \fR# Open object -- quarter-circle\fP
- line \fR# Open object -- line\fP
- arrow \fR# Open object -- line with arrowhead\fP
- spline \fR# Open object -- spline curve\fP
- move
- <text> <text> ... \fR# Text within invisible box\fP
-
-<attribute> ::= h[eigh]t <expr> \fR# Set height of closed figure \fP
- wid[th] <expr> \fR# Set width of closed figure \fP
- rad[ius] <expr> \fR# Set radius of circle/arc \fP
- diam[eter] <expr> \fR# Set diameter of circle/arc \fP
- up [ <expr> ] \fR# Move up \fP
- down [ <expr> ] \fR# Move down \fP
- left [ <expr> ] \fR# Move left \fP
- right [ <expr> ] \fR# Move right \fP
- from <position> \fR# Set from position of open figure\fP
- to <position> \fR# Set to position of open figure\fP
- at <position> \fR# Set center of open figure\fP
- with <corner> \fR# Fix corner at specified location\fP
- by <expr> <expr> \fR# Set object's attachment point\fP
- then \fR# Sequential segment composition\fP
- dotted [ <expr> ] \fR# Set dotted line style\fP
- dashed [ <expr> ] \fR# Set dashed line style\fP
- chop [ <expr> ] \fR# Chop end(s) of segment\fP
- -> \fR# Decorate with "to" arrow\fP
- <- \fR# Decorate with "from" arrow\fP
- <-> \fR# Decorate with both arrows\fP
- invis \fR# Make primitive invisible\fP
- solid \fR# Make closed figure solid\fP
- fill <expr> \fR# Set fill density for figure\fP
- same \fR# Copy size of previous object\fP
- <text> <text> ... \fR# Text within object\fP
- <expr> \fR# Motion in the current direction\fR
+<command> ::=
+ <primitive> [<attribute>]
+ LABEL : [;] <command>
+ LABEL : [;] <command> [<position>]
+ { <command> ... }
+ VARIABLE [:] = <any-expr>
+ up | down | left | right
+ COMMAND-LINE
+ command <print-arg> ...
+ print <print-arg> ...
+ sh BALANCED-TEXT
+ copy FILENAME
+ copy [FILENAME] thru MACRONAME [until TEXT]
+ copy [FILENAME] thru BALANCED-BODY [until TEXT]
+ for VARIABLE = <expr> to <expr> [by [*] <expr>] do BALANCED-BODY
+ if <any-expr> then BALANCED-BODY [else BALANCED-BODY]
+ reset [VARIABLE [[,] VARIABLE ...]]
+.R
+.DE
+.DS
+.CW
+<print-arg> ::=
+ TEXT
+ <expr>
+ <position>
.R
.DE
-.LP
-Missing attributes are supplied from defaults; inappropriate ones are
-silently ignored. For lines, splines, and arcs, height and width
-refer to arrowhead size.
.PP
-The \f(CWat\fP primitive sets the center of the current object. The
-\f(CWwith\fP attribute fixes the specified feature of the given object
-to a specified location.
+The current position and direction are saved on entry to a `{\ .\|.\|.\ }'
+construction and restored on exit from it.
.PP
-The \f(CWby\fR primitive is not documented in the tutorial portion of
-the Kernighan paper, and should probably be considered unreliable.
+Note that in `if' constructions, newlines can only occur in
+\s[-1]BALANCED-BODY\s[0]. This means that
+.DS
+.CW
+if
+{ ... }
+else
+{ ... }
+.R
+.DE
.PP
-The primitive \fBarrow\fR is a synonym for \fBline ->\fR.
+will fail. You have to use the braces on the same line as the keywords:
.DS
.CW
-<text> ::= <string> [ <placement> ... ]
- sprintf("format", <expr> ...) [ <placement> ... ]
-
-<placement> ::= center | ljust | rjust | above | below
+if {
+\&...
+} else {
+\&...
+}
.R
.DE
-.LP
+.PP
+This restriction doesn't hold for the body after the `do' in a `for'
+construction.
+.DS
+.CW
+<any-expr> ::=
+ <expr>
+ <text-expr>
+ <any-expr> <logical-op> <any-expr>
+ ! <any-expr>
+.R
+.DE
+.DS
+.CW
+<logical-op> ::=
+ == | != | && | '||'
+.R
+.DE
+.DS
+.CW
+<text-expr> ::=
+ TEXT == TEXT
+ TEXT != TEXT
+.R
+.DE
+.PP
+Logical operators are handled specially by \fBpic\fP since they can
+deal with text strings also. \fBpic\fP uses \%\fIstrcmp\/\fP(3) to test
+for equality of strings; an empty string is considered as `false' for
+`&&' and `|\||'.
+.DS
+.CW
+<primitive> ::=
+ box \fR# closed object \[em] rectangle\fP
+ circle \fR# closed object \[em] circle\fP
+ ellipse \fR# closed object \[em] ellipse\fP
+ arc \fR# open object \[em] quarter-circle\fP
+ line \fR# open object \[em] line\fP
+ arrow \fR# open object \[em] line with arrowhead\fP
+ spline \fR# open object \[em] spline curve\fP
+ move
+ TEXT TEXT ... \fR# text within invisible box\fP
+ plot <expr> TEXT \fR# formatted text\fP
+ '[' <command> ... ']'
+.R
+.DE
+.PP
+Drawn objects within `[\ .\|.\|.\ ]' are treated as a single composite
+object with a rectangular shape (that of the bounding box of all the
+elements). Variable and label assignments within a block are local to
+the block. Current direction of motion is restored to the value at start
+of block upon exit. Position is \fInot\fR restored (unlike `{\ }');
+instead, the current position becomes the exit position for the current
+direction on the block's bounding box.
+.DS
+.CW
+<attribute> ::=
+ h[eigh]t <expr> \fR# set height of closed figure \fP
+ wid[th] <expr> \fR# set width of closed figure \fP
+ rad[ius] <expr> \fR# set radius of circle/arc \fP
+ diam[eter] <expr> \fR# set diameter of circle/arc \fP
+ up [<expr>] \fR# move up \fP
+ down [<expr>] \fR# move down \fP
+ left [<expr>] \fR# move left \fP
+ right [<expr>] \fR# move right \fP
+ from <position> \fR# set from position of open figure\fP
+ to <position> \fR# set to position of open figure\fP
+ at <position> \fR# set center of open figure\fP
+ with <path> \fR# fix corner/named point at specified location\fP
+ with <position> \fR# fix position of object at specified location\fP
+ by <expr-pair> \fR# set object's attachment point\fP
+ then \fR# sequential segment composition\fP
+ dotted [<expr>] \fR# set dotted line style\fP
+ dashed [<expr>] \fR# set dashed line style\fP
+ thick[ness] <expr> \fR# set thickness of lines\fP
+ chop [<expr>] \fR# chop end(s) of segment\fP
+ '->' | '<-' | '<->' \fR# decorate with arrows\fP
+ invis[ible] \fR# make primitive invisible\fP
+ solid \fR# make closed figure solid\fP
+ fill[ed] [<expr>] \fR# set fill density for figure\fP
+ colo[u]r[ed] TEXT \fR# set fill and outline color for figure\fP
+ outline[d] TEXT \fR# set outline color for figure\fP
+ shaded TEXT \fR# set fill color for figure\fP
+ same \fR# copy size of previous object\fP
+ cw | ccw \fR# set orientation of curves\fP
+ ljust | rjust \fR# adjust text horizontally\fP
+ above | below \fR# adjust text vertically\fP
+ aligned \fR# align parallel to object\fP
+ TEXT TEXT ... \fR# text within object\fP
+ <expr> \fR# motion in the current direction\fR
+.R
+.DE
+.PP
+Missing attributes are supplied from defaults; inappropriate ones are
+silently ignored. For lines, splines, and arcs, height and width
+refer to arrowhead size.
+.PP
+The `at' primitive sets the center of the current object. The
+`with' attribute fixes the specified feature of the given object
+to a specified location. (Note that `with' is incorrectly described
+in the Kernighan paper.)
+.PP
+The `by' primitive is not documented in the tutorial portion of
+the Kernighan paper, and should probably be considered unreliable.
+.PP
+The primitive `arrow' is a synonym for `line\ ->'.
+.PP
Text is normally an attribute of some object, in which case successive
strings are vertically stacked and centered on the object's center by
default. Standalone text is treated as though placed in an invisible
box.
.PP
A text item consists of a string or sprintf-expression, optionally
-followed by positioning information. Text or format strings may
-contain {gtn}roff font changes, size changes, and local motions,
-provided those changes are undone before the end of the current item.
+followed by positioning information. Text (or strings specified with
+`sprintf' may contain [gtn]roff font changes, size changes, and local
+motions, provided those changes are undone before the end of the current
+item.
.PP
-A position is an (x, y) coordinate pair. There are lots of different
+A position is an (x,y) coordinate pair. There are lots of different
ways to specify positions:
.DS
.CW
-<position> ::= <expr> , <expr>
- <place> {+-} <expr> , <expr>
- <place> {+-} ( <expr> , <expr> )
- ( <position> , <position> )
- <expr> [of the way] between <position> and <position>
- <expr> '<' <position> , <position> '>'
- ( <position> )
-
-<place> ::= <label> [ <dot-corner> ]
- <corner> of <label>
- [0|1|2|3|4|5|6|7|8|9]th [last] <primitive> <dot-corner>
- <expr>'th [last]<primitive> <dot-corner>
- <corner> of [0|1|2|3|4|5|6|7|8|9]th [last] <primitive>
- <corner> of <expr>'th [last] <primitive>
- Here
-
-<dot-corner> ::= .n | .e | .w | .s | .ne | .nw | .se | .sw | .c | .start | .end
-
-<corner> ::= top | bot | left | right | start | end
+<position> ::=
+ <position-not-place>
+ <place>
.R
.DE
-.LP
-As Kernighan notes, "since barbarisms like \fB1th\fP and \fB3th\fP are
-barbaric, synonyms like \fB1st\fP and \fB3rd\fP are accepted as well".
+.DS
+.CW
+<position-not-place> ::=
+ <expr-pair>
+ <position> + <expr-pair>
+ <position> - <expr-pair>
+ ( <position> , <position> )
+ <expr> [of the way] between <position> and <position>
+ <expr> '<' <position> , <position> '>'
+.R
+.DE
+.DS
+.CW
+<expr-pair> ::=
+ <expr> , <expr>
+ ( expr-pair )
+.R
+.DE
+.DS
+.CW
+<place> ::=
+ <label>
+ <label> <corner>
+ <corner> [of] <label>
+ Here
+.R
+.DE
+.DS
+.CW
+<label> ::=
+ LABEL [. LABEL ...]
+ <nth-primitive>
+.R
+.DE
+.DS
+.CW
+<corner> ::=
+ .n | .e | .w | .s
+ .ne | .se | .nw | .sw
+ .c[enter] | .start | .end
+ .t[op] | .b[ot[tom]] | .l[eft] | .r[ight]
+ left | right | <top-of> | <bottom-of>
+ <north-of> | <south-of> | <east-of> | <west-of>
+ <center-of> | <start-of> | <end-of>
+ upper left | lower left | upper right | lower right
+.R
+.DE
+.DS
+.CW
+<xxx-of> ::=
+ xxx \fR# followed by `of'\fP
+.R
+.DE
+.DS
+.CW
+<nth-primitive> ::=
+ <ordinal> <object-type>
+ [<ordinal>] last <object-type>
+.R
+.DE
+.DS
+.CW
+<ordinal> ::=
+ INT th
+ INT st | INT nd | INT rd
+ ` <any-expr> 'th
+.R
+.DE
+.DS
+.CW
+<object-type> ::=
+ box
+ circle
+ ellipse
+ arc
+ line
+ arrow
+ spline
+ '[]'
+ TEXT
+.R
+.DE
+.PP
+As Kernighan notes, \[lq]since barbarisms like \fB1th\fP and \fB3th\fP are
+barbaric, synonyms like \fB1st\fP and \fB3rd\fP are accepted as well.\[rq]
Objects of a given type are numbered from 1 upwards in order of
declaration; the \fBlast\fP modifier counts backwards.
.PP
-The "'th" form (which allows you to select a previous object with an
-expression, as opposed to a numeric literal) is not documented in DWB
-\fBpic\fR(1).
+The \[lq]'th\[rq] form (which allows you to select a previous object with
+an expression, as opposed to a numeric literal) is not documented in DWB's
+\fIpic\/\fR(1).
+.PP
+The \[la]\|\fIxxx\fP-of\|\[ra] rule is special: The lexical parser checks whether
+\fIxxx\fP is followed by the token `of' without eliminating it so that
+the grammar parser can still see `of'. Valid examples of specifying a
+place with corner and label are thus
+.DS
+.CW
+A .n
+\&.n of A
+\&.n A
+north of A
+.R
+.DE
+.LP
+while
+.DS
+.CW
+north A
+A north
+.R
+.DE
+both cause a syntax error. (DWB \fBpic\fP also allows the weird form
+`A\ north\ of'.)
+.PP
+Here the special rules for the `with' keyword using a path:
+.DS
+.CW
+<path> ::=
+ <relative-path>
+ ( <relative-path> , <relative-path> )
+.R
+.DE
+.DS
+.CW
+<relative-path> ::=
+ <corner>
+ . LABEL [. LABEL ...] [<corner>]
+.R
+.DE
.PP
The following style variables control output:
.TS H
-tab(@), linesize(2);
+center tab(@), linesize(2);
lb | lb | lb
l | n | l.
.sp 2p
@@ -2332,40 +2667,51 @@ fillval@0.5@Default fill value
_
.TE
Any of these can be set by assignment, or reset using the \fBreset\fP
-statement. Style variables assigned within [] blocks are restored to
+statement. Style variables assigned within `[\ ]' blocks are restored to
their beginning-of-block value on exit; top-level assignments persist
across pictures. Dimensions are divided by \fBscale\fR on output.
.PP
All \fBpic\fP expressions are evaluated in floating point; units
-default to inches. Expressions have the following simple grammar,
-with semantics very similar to C expressions:
+are always inches (a trailing `i' or `I' is ignored). Expressions have
+the following simple grammar, with semantics very similar to
+C\~expressions:
.DS
.CW
-<expr> ::= <expr> <op> <expr>
- ! <expr>
- ( <expr> )
- - <expr>
- <variable>
- <number>
- <place> .x
- <place> .y
- <place> .ht
- <place> .wid
- <place> .rad
- sin(<expr>)
- cos(<expr>)
- log(<expr>)
- exp(<expr>)
- sqrt(<expr>)
- max(<expr>, <expr>...)
- atan2(<expr>, <expr>)
- min(<expr>, <expr>...)
- int(<expr>)
- rand()
-
-<op> := + | - | * | / | % | ^ |
- != | == | '<' | '>' | >= | <= |
- '||' | &&
+<expr> ::=
+ VARIABLE
+ NUMBER
+ <place> <place-attribute>
+ <expr> <op> <expr>
+ - <expr>
+ ( <any-expr> )
+ ! <expr>
+ <func1> ( <any-expr> )
+ <func2> ( <any-expr> , <any-expr> )
+ rand ( )
+.R
+.DE
+.DS
+.CW
+<place-attribute>
+ .x | .y | .h[eigh]t | .wid[th] | .rad
+.R
+.DE
+.DS
+.CW
+<op> ::=
+ + | - | * | / | % | ^ | '<' | '>' | '<=' | '>='
+.R
+.DE
+.DS
+.CW
+<func1> ::=
+ sin | cos | log | exp | sqrt | int | rand | srand
+.R
+.DE
+.DS
+.CW
+<func2> ::=
+ atan2 | max | min
.R
.DE
.LP
@@ -2377,7 +2723,7 @@ of the grammar (they behave as pre-processor macros to the language).
These may be used to define pseudo-functions.
.DS
.CW
-\fBdefine\fP \fIname\fP \fB{\fP \fIreplacement text \fB}\fP
+\fBdefine\fP \fIname\fP \fB{\fP \fIreplacement-text\fP \fB}\fP
.R
.DE
.LP
@@ -2385,49 +2731,58 @@ This defines \fIname\fR as a macro to be replaced by the replacement
text (not including the braces). The macro may be called as
.DS
.CW
-\fIname\fB(\fIarg1, arg2, ... argn\fB)\fR
+\fIname\/\fB(\,\fIarg1, arg2, .\|.\|., argn\fB\/)\fR
.R
.DE
.LP
-The arguments (if any) will be substituted for tokens $1, $2 ... $n
-appearing in the replacement text. To undefine a macro, say \fBundef\fP
+The arguments (if any) will be substituted for tokens $1, $2 .\|.\|.\& $n
+appearing in the replacement text. To undefine a macro, say \fBundef\fP
\fIname\fR, specifying the name to be undefined.
.\"%%POSTLUDE%%
.NH 1
History and Acknowledgements
.PP
Original \fBpic\fP was written to go with Joseph Ossanna's original
-\&\fItroff\fP(1) by Brian Kernighan, and later re-written by Kernighan
+\fItroff\/\fP(1) by Brian Kernighan, and later re-written by Kernighan
with substantial enhancements (apparently as part of the evolution of
-\&\fItroff\fP(1) into \&\fIditroff\fP(1) to generate
+\fItroff\/\fP(1) into \fIditroff\/\fP(1) to generate
device-independent output).
.PP
The language had been inspired by some earlier graphics languages
including \fBideal\fP and \fBgrap\fP. Kernighan credits Chris van Wyk
(the designer of \fBideal\fP) with many of the ideas that went into
\fBpic\fP.
+.PP
+.\" the original definitions of EQ and EN cause insertion of vertical
+.\" space which is not appropriate here
+.de EQ
+..
+.de EN
+..
.EQ
delim $$
.EN
-.PP
The \fBpic\fP language was originally described by Brian Kernighan in
Bell Labs Computing Science Technical Report #116 (you can obtain a
PostScript copy of the revised version, [1], by sending a mail message to
-\&\fInetlib@research.att.com\fP with a body of \&`send 116 from
-research/cstr'.). There have been two revisions, in 1984 and 1991.
+\fInetlib@research.att.com\fP with a body of `send 116 from
+research/cstr'). There have been two revisions, in 1984 and 1991.
.PP
The document you are reading effectively subsumes Kernighan's
-description; it was written to fill in lacunae in the exposition and
-integrate in descriptions of the GNU \fIgpic\fP(1) features.
+description; it was written to fill in lacun\[ae] in the exposition and
+integrate in descriptions of the GNU \fIgpic\/\fP(1) features.
.PP
-The GNU \fBgpic\fR implementation was written and is maintained by
-James Clark \fI<jjc@jclark.com>\fP.
+The GNU \fBgpic\fR implementation was written by James Clark
+\[la]\,\fIjjc@jclark.com\/\fP\[ra]. It is currently maintained by Werner
+Lemberg \[la]\,\fIwl@gnu.org\/\fP\[ra].
.NH 1
Bibliography
.IP 1.
-Kernighan, B. W. \fBPIC -- A Graphics Language for Typesetting
-(Revised User Manual)\fP Bell Labs Computing Science Technical Report
+Kernighan, B. W. \fBPIC \[em] A Graphics Language for Typesetting
+(Revised User Manual)\fP. Bell Labs Computing Science Technical Report
#116, December 1991.
.IP 2.
-Van Wyk, C.J. \fBA high-level language for specifying pictures\fP \fIACM
-Transactions On Graphics\fP 1,2 (1982) 163-182.
+Van Wyk, C. J. \fBA high-level language for specifying pictures\fP.
+\fIACM Transactions On Graphics\fP 1,2 (1982) 163-182.
+.
+.\" end of pic.ms
diff --git a/contrib/groff/doc/texinfo.tex b/contrib/groff/doc/texinfo.tex
index faad86b..c83af30 100644
--- a/contrib/groff/doc/texinfo.tex
+++ b/contrib/groff/doc/texinfo.tex
@@ -3,10 +3,10 @@
% 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}
+\def\texinfoversion{2002-03-26.08-wl}
%
-% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
-% Free Software Foundation, Inc.
+% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+% 2000, 01, 02 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
@@ -30,14 +30,17 @@
% 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.
+% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html)
+% ftp://texinfo.org/texinfo/texinfo.tex
+% ftp://tug.org/tex/texinfo.tex
+% (and all CTAN mirrors, see http://www.ctan.org),
+% and /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/.
+%
+% Texinfo has a small home page at http://texinfo.org/ and also
+% http://www.gnu.org/software/texinfo.
%
% Send bug reports to bug-texinfo@gnu.org. Please include including a
% complete document in each bug report with which we can reproduce the
@@ -50,13 +53,13 @@
% 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.
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
% Sometimes one run after texindex suffices, and sometimes you need more
% than two; texi2dvi does it as many times as necessary.
%
% It is possible to adapt texinfo.tex for other languages. You can get
-% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/.
+% the existing language-specific files from the full Texinfo distribution.
\message{Loading texinfo [version \texinfoversion]:}
@@ -170,6 +173,16 @@
}%
\fi
+% add check for \lastpenalty to plain's definitions. If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi\fi}
+
% For @cropmarks command.
% Do @cropmarks to get crop marks.
%
@@ -431,7 +444,7 @@
% environments. --karl, 6may93
%{\advance \baselineskip by -\singlespaceskip
%\kern \baselineskip}%
- \setleading \singlespaceskip
+ \setleading\singlespaceskip
}
%% Simple single-character @ commands
@@ -688,16 +701,54 @@ where each line of input produces a line of output.}
\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}}}
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph. For more general purposes, use the \margin insertion
+% class. WHICH is `l' or `r'.
+%
\newskip\inmarginspacing \inmarginspacing=1cm
\def\strutdepth{\dp\strutbox}
-
-%\hbox{{\rm#1}}\hfil\break}}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+ \nobreak
+ \kern-\strutdepth
+ \vtop to \strutdepth{%
+ \baselineskip=\strutdepth
+ \vss
+ % if you have multiple lines of stuff to put here, you'll need to
+ % make the vbox yourself of the appropriate size.
+ \ifx#1l%
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
+ \else
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+ \fi
+ \null
+ }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \def\lefttext{#1}% have both texts
+ \def\righttext{#2}%
+ \else
+ \def\lefttext{#1}% have only one text
+ \def\righttext{#1}%
+ \fi
+ %
+ \ifodd\pageno
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+ \else
+ \def\temp{\inleftmargin\lefttext}%
+ \fi
+ \temp
+}
% @include file insert text of that file as input.
% Allow normal characters that we make active in the argument (a file name).
@@ -785,18 +836,43 @@ where each line of input produces a line of output.}
%
\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.
+% @math outputs its argument in math mode.
+% We don't use $'s directly in the definition of \math because we need
+% to set catcodes according to plain TeX first, to allow for subscripts,
+% superscripts, special math chars, etc.
+%
+% @math does not do math typesetting in section titles, index
+% entries, and other such contexts where the catcodes are set before
+% @math gets a chance to work. This could perhaps be fixed, but for now
+% at least we can have real math in the main text, where it's needed most.
%
-% This isn't quite enough for @math to work properly in indices, but it
-% seems unlikely it will ever be needed there.
+\let\implicitmath = $%$ font-lock fix
%
-\let\implicitmath = $
-\def\math#1{\implicitmath #1\implicitmath}
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
+% _ within @math be active (mathcode "8000), and distinguish by seeing
+% if the current family is \slfam, which is what @var uses.
+%
+{\catcode95 = \active % 95 = _
+\gdef\mathunderscore{%
+ \catcode95=\active
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+}}
+%
+% Another complication: we want \\ (and @\) to output a \ character.
+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
+% this is not advertised and we don't care. Texinfo does not
+% otherwise define @\.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+ \tex
+ \mathcode`\_="8000 \mathunderscore
+ \let\\ = \mathbackslash
+ \implicitmath\finishmath}
+\def\finishmath#1{#1\implicitmath\Etex}
% @bullet and @minus need the same treatment as @math, just above.
\def\bullet{\implicitmath\ptexbullet\implicitmath}
@@ -879,19 +955,25 @@ where each line of input produces a line of output.}
\def\dopdfimage#1#2#3{%
\def\imagewidth{#2}%
\def\imageheight{#3}%
+ % without \immediate, pdftex seg faults when the same image is
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
\ifnum\pdftexversion < 14
- \pdfimage
+ \immediate\pdfimage
\else
- \pdfximage
+ \immediate\pdfximage
\fi
\ifx\empty\imagewidth\else width \imagewidth \fi
\ifx\empty\imageheight\else height \imageheight \fi
- {#1.pdf}%
+ \ifnum\pdftexversion<13
+ #1.pdf%
+ \else
+ {#1.pdf}%
+ \fi
\ifnum\pdftexversion < 14 \else
\pdfrefximage \pdflastximage
\fi}
- \def\pdfmkdest#1{\pdfdest name{#1@} xyz}
- \def\pdfmkpgn#1{#1@}
+ \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}}
+ \def\pdfmkpgn#1{#1}
\let\linkcolor = \Blue % was Cyan, but that seems light?
\def\endlink{\Black\pdfendlink}
% Adding outlines to PDF; macros for calculating structure of outlines
@@ -903,7 +985,7 @@ where each line of input produces a line of output.}
\expandafter\xdef\csname#1\endcsname{\the\tempnum}}
\def\pdfmakeoutlines{{%
\openin 1 \jobname.toc
- \ifeof 1\else\bgroup
+ \ifeof 1\else\begingroup
\closein 1
\indexnofonts
\def\tt{}
@@ -913,32 +995,34 @@ where each line of input produces a line of output.}
\edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
%
\def\chapentry ##1##2##3{}
+ \let\appendixentry = \chapentry
\def\unnumbchapentry ##1##2{}
\def\secentry ##1##2##3##4{\advancenumber{chap##2}}
- \def\unnumbsecentry ##1##2{}
+ \def\unnumbsecentry ##1##2##3{\advancenumber{chap##2}}
\def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}}
- \def\unnumbsubsecentry ##1##2{}
+ \def\unnumbsubsecentry ##1##2##3##4{\advancenumber{sec##2.##3}}
\def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}}
- \def\unnumbsubsubsecentry ##1##2{}
+ \def\unnumbsubsubsecentry ##1##2##3##4##5{\advancenumber{subsec##2.##3.##4}}
\input \jobname.toc
\def\chapentry ##1##2##3{%
\pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}}
+ \let\appendixentry = \chapentry
\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\unnumbsecentry ##1##2##3{%
+ \pdfoutline goto name{\pdfmkpgn{##3}}{##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\unnumbsubsecentry ##1##2##3##4{%
+ \pdfoutline goto name{\pdfmkpgn{##4}}{##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}}
+ \def\unnumbsubsubsecentry ##1##2##3##4##5{%
+ \pdfoutline goto name{\pdfmkpgn{##5}}{##1}}
\input \jobname.toc
- \egroup\fi
+ \endgroup\fi
}}
\def\makelinks #1,{%
\def\params{#1}\def\E{END}%
@@ -988,6 +1072,7 @@ where each line of input produces a line of output.}
\def\pdfurl#1{%
\begingroup
\normalturnoffactive\def\@{@}%
+ \let\value=\expandablevalue
\leavevmode\Red
\startlink attr{/Border [0 0 0]}%
user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
@@ -1015,9 +1100,8 @@ where each line of input produces a line of output.}
\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}}
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
\linkcolor #1\endlink}
- \def\mkpgn#1{#1@}
\def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
\fi % \ifx\pdfoutput
@@ -1034,9 +1118,26 @@ where each line of input produces a line of output.}
% We don't need math for this one.
\def\ttsl{\tenttsl}
-% Use Computer Modern fonts at \magstephalf (11pt).
-\newcount\mainmagstep
-\mainmagstep=\magstephalf
+% Default leading.
+\newdimen\textleading \textleading = 13.2pt
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+\def\setleading#1{%
+ \normalbaselineskip = #1\relax
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
% Set the font macro #1 to the font named #2, adding on the
% specified font prefix (normally `cm').
@@ -1066,13 +1167,16 @@ where each line of input produces a line of output.}
\def\scshape{csc}
\def\scbshape{csc}
+\newcount\mainmagstep
\ifx\bigger\relax
-\let\mainmagstep=\magstep1
-\setfont\textrm\rmshape{12}{1000}
-\setfont\texttt\ttshape{12}{1000}
+ % not really supported.
+ \let\mainmagstep=\magstep1
+ \setfont\textrm\rmshape{12}{1000}
+ \setfont\texttt\ttshape{12}{1000}
\else
-\setfont\textrm\rmshape{10}{\mainmagstep}
-\setfont\texttt\ttshape{10}{\mainmagstep}
+ \mainmagstep=\magstephalf
+ \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
@@ -1103,6 +1207,18 @@ where each line of input produces a line of output.}
\font\smalli=cmmi9
\font\smallsy=cmsy9
+% Fonts for small examples (8pt).
+\setfont\smallerrm\rmshape{8}{1000}
+\setfont\smallertt\ttshape{8}{1000}
+\setfont\smallerbf\bfshape{10}{800}
+\setfont\smallerit\itshape{8}{1000}
+\setfont\smallersl\slshape{8}{1000}
+\setfont\smallersf\sfshape{8}{1000}
+\setfont\smallersc\scshape{10}{800}
+\setfont\smallerttsl\ttslshape{10}{800}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+
% Fonts for title page:
\setfont\titlerm\rmbshape{12}{\magstep3}
\setfont\titleit\itbshape{10}{\magstep4}
@@ -1115,6 +1231,7 @@ where each line of input produces a line of output.}
\font\titlei=cmmi12 scaled \magstep3
\font\titlesy=cmsy10 scaled \magstep4
\def\authorrm{\secrm}
+\def\authortt{\sectt}
% Chapter (and unnumbered) fonts (17.28pt).
\setfont\chaprm\rmbshape{12}{\magstep2}
@@ -1140,20 +1257,6 @@ where each line of input produces a line of output.}
\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}
@@ -1170,17 +1273,16 @@ where each line of input produces a line of output.}
% 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).
+% texinfo doesn't allow for producing subscripts and superscripts except
+% in the main text, we don't bother to reset \scriptfont and
+% \scriptscriptfont (which would also require loading a lot more fonts).
%
\def\resetmathfonts{%
- \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy
- \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf
- \textfont\ttfam = \tentt \textfont\sffam = \tensf
+ \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
@@ -1191,7 +1293,7 @@ where each line of input produces a line of output.}
\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}
+ \resetmathfonts \setleading{\textleading}}
\def\titlefonts{%
\let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
\let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
@@ -1220,7 +1322,14 @@ where each line of input produces a line of output.}
\let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
\let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
\let\tenttsl=\smallttsl
- \resetmathfonts \setleading{11pt}}
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+ \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+ \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+ \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+ \let\tenttsl=\smallerttsl
+ \resetmathfonts \setleading{9.5pt}}
+\let\smallexamplefonts = \smallerfonts
% Set up the default fonts, so we can use them for creating boxes.
%
@@ -1237,6 +1346,7 @@ where each line of input produces a line of output.}
\setfont\shortcontrm\rmshape{12}{1000}
\setfont\shortcontbf\bxshape{12}{1000}
\setfont\shortcontsl\slshape{12}{1000}
+\setfont\shortconttt\ttshape{12}{1000}
%% Add scribe-like font environments, plus @l for inline lisp (usually sans
%% serif) and @ii for TeX italic
@@ -1334,11 +1444,19 @@ where each line of input produces a line of output.}
\def\realdash{-}
\def\codedash{-\discretionary{}{}{}}
-\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}}
+\def\codeunder{%
+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+ % will therefore expand the active definition of _, which is us
+ % (inside @code that is), therefore an endless loop.
+ \ifusingtt{\ifmmode
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+ \else\normalunderscore \fi
+ \discretionary{}{}{}}%
+ {\_}%
+}
\def\codex #1{\tclose{#1}\endgroup}
-%\let\exp=\tclose %Was temporary
-
% @kbd is like @code, except that if the argument is just one @key command,
% then @kbd has no effect.
@@ -1476,7 +1594,8 @@ where each line of input produces a line of output.}
\let\subtitlerm=\tenrm
\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}%
%
- \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}%
+ \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
+ \let\tt=\authortt}%
%
% Leave some space at the very top of the page.
\vglue\titlepagetopglue
@@ -1523,6 +1642,10 @@ where each line of input produces a line of output.}
\oldpage
\endgroup
%
+ % Need this before the \...aftertitlepage checks so that if they are
+ % in effect the toc pages will come out with page numbers.
+ \HEADINGSon
+ %
% If they want short, they certainly want long too.
\ifsetshortcontentsaftertitlepage
\shortcontents
@@ -1536,10 +1659,6 @@ where each line of input produces a line of output.}
\global\let\contents = \relax
\global\let\shortcontents = \relax
\fi
- %
- \ifpdf \pdfmakepagedesttrue \fi
- %
- \HEADINGSon
}
\def\finishtitlepage{%
@@ -2297,18 +2416,19 @@ width0pt\relax} \fi
\let\item = \relax
}
-% Ignore @ignore ... @end ignore.
+% Ignore @ignore, @ifhtml, @ifinfo, @ifplaintext, @ifnottex, @html, @menu,
+% @direntry, and @documentdescription.
%
\def\ignore{\doignore{ignore}}
-
-% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text.
-%
-\def\ifinfo{\doignore{ifinfo}}
\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifplaintext{\doignore{ifplaintext}}
\def\ifnottex{\doignore{ifnottex}}
\def\html{\doignore{html}}
\def\menu{\doignore{menu}}
\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\documentdescriptionword{documentdescription}
% @dircategory CATEGORY -- specify a category of the dir file
% which this file should belong to. Ignore this in TeX.
@@ -2335,14 +2455,21 @@ width0pt\relax} \fi
% 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
+ \def\ignoreword{#1}%
+ \ifx\ignoreword\documentdescriptionword
+ % The c kludge breaks documentdescription, since
+ % `documentdescription' contains a `c'. Means not everything will
+ % be ignored inside @documentdescription, but oh well...
+ \else
+ % 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
+ \fi
%
- % And now expand that command.
+ % And now expand the command defined above.
\doignoretext
}
@@ -2414,10 +2541,14 @@ width0pt\relax} \fi
\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).
+ % Similarly for index fonts.
\let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont
\let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont
\let\smallsf=\nullfont
+ % Similarly for smallexample fonts.
+ \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont
+ \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont
+ \let\smallersf=\nullfont
%
% Don't complain when characters are missing from the fonts.
\tracinglostchars = 0
@@ -2529,19 +2660,21 @@ width0pt\relax} \fi
\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.
+% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext 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}}
+\def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}}
\defineunmatchedend{iftex}
\defineunmatchedend{ifnothtml}
\defineunmatchedend{ifnotinfo}
+\defineunmatchedend{ifnotplaintext}
-% 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
+% We can't just want to start a group at @iftex (etc.) 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
@@ -2593,42 +2726,48 @@ width0pt\relax} \fi
}
% @defindex foo == \newindex{foo}
-
+%
\def\defindex{\parsearg\newindex}
% Define @defcodeindex, like @defindex except put all entries in @code.
-
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
\def\newcodeindex#1{%
\iflinks
\expandafter\newwrite \csname#1indfile\endcsname
\openout \csname#1indfile\endcsname \jobname.#1
\fi
\expandafter\xdef\csname#1index\endcsname{%
- \noexpand\docodeindex{#1}}
+ \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}}%
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+ % Only do \closeout if we haven't already done it, else we'll end up
+ % closing the target index.
+ \expandafter \ifx\csname donesynindex#2\endcsname \undefined
+ % The \closeout helps reduce unnecessary open files; the limit on the
+ % Acorn RISC OS is a mere 16 files.
+ \expandafter\closeout\csname#2indfile\endcsname
+ \expandafter\let\csname\donesynindex#2\endcsname = 1
+ \fi
+ % redefine \fooindfile:
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+ \expandafter\let\csname#2indfile\endcsname=\temp
+ % redefine \fooindex:
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
}
% Define \doindex, the driver for all \fooindex macros.
@@ -2648,9 +2787,23 @@ width0pt\relax} \fi
\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+% 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\indexdummies{%
\def\ { }%
+\def\@{@}% change to @@ when we switch to @ as escape char in aux files.
+% 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 _}}%
+\normalturnoffactive
+%
% Take care of the plain tex accent commands.
+\def\,##1{\realbackslash ,{##1}}%
\def\"{\realbackslash "}%
\def\`{\realbackslash `}%
\def\'{\realbackslash '}%
@@ -2663,69 +2816,66 @@ width0pt\relax} \fi
\def\u{\realbackslash u}%
\def\v{\realbackslash v}%
\def\H{\realbackslash H}%
+\def\dotless##1{\realbackslash dotless {##1}}%
% 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\AE{\realbackslash AE}%
+\def\L{\realbackslash L}%
+\def\OE{\realbackslash OE}%
\def\O{\realbackslash O}%
+\def\aa{\realbackslash aa}%
+\def\ae{\realbackslash ae}%
\def\l{\realbackslash l}%
-\def\L{\realbackslash L}%
+\def\oe{\realbackslash oe}%
+\def\o{\realbackslash o}%
\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 }%
+%
+% Although these internals commands shouldn't show up, sometimes they do.
\def\bf{\realbackslash bf }%
+\def\gtr{\realbackslash gtr}%
+\def\hat{\realbackslash hat}%
+\def\less{\realbackslash less}%
%\def\rm{\realbackslash rm }%
-\def\sl{\realbackslash sl }%
\def\sf{\realbackslash sf}%
+\def\sl{\realbackslash sl }%
+\def\tclose##1{\realbackslash tclose {##1}}%
\def\tt{\realbackslash tt}%
-\def\gtr{\realbackslash gtr}%
-\def\less{\realbackslash less}%
-\def\hat{\realbackslash hat}%
+%
+\def\b##1{\realbackslash b {##1}}%
+\def\i##1{\realbackslash i {##1}}%
+\def\sc##1{\realbackslash sc {##1}}%
+\def\t##1{\realbackslash t {##1}}%
+\def\r##1{\realbackslash r {##1}}%
+%
\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\acronym##1{\realbackslash acronym {##1}}%
+\def\cite##1{\realbackslash cite {##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\dfn##1{\realbackslash dfn {##1}}%
+\def\dots{\realbackslash dots }%
+\def\emph##1{\realbackslash emph {##1}}%
+\def\env##1{\realbackslash env {##1}}%
+\def\file##1{\realbackslash file {##1}}%
+\def\kbd##1{\realbackslash kbd {##1}}%
+\def\key##1{\realbackslash key {##1}}%
+\def\math##1{\realbackslash math {##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\strong##1{\realbackslash strong {##1}}%
+\def\uref##1{\realbackslash uref {##1}}%
+\def\url##1{\realbackslash url {##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}}%
+\def\w{\realbackslash w }%
+%
+% These math commands don't seem likely to be used in index entries.
+\def\copyright{\realbackslash copyright}%
+\def\equiv{\realbackslash equiv}%
+\def\error{\realbackslash error}%
+\def\expansion{\realbackslash expansion}%
+\def\point{\realbackslash point}%
+\def\print{\realbackslash print}%
+\def\result{\realbackslash result}%
%
% Handle some cases of @value -- where the variable name does not
% contain - or _, and the value does not contain any
@@ -2739,7 +2889,7 @@ width0pt\relax} \fi
% 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 \ ).
+% expansion of \tie (\leavevmode \penalty \@M \ ).
{\obeyspaces
\gdef\unsepspaces{\obeyspaces\let =\space}}
@@ -2750,7 +2900,10 @@ width0pt\relax} \fi
\def\indexdummydots{...}
\def\indexnofonts{%
-% Just ignore accents.
+\def\@{@}%
+% how to handle braces?
+\def\_{\normalunderscore}%
+%
\let\,=\indexdummyfont
\let\"=\indexdummyfont
\let\`=\indexdummyfont
@@ -2766,45 +2919,49 @@ width0pt\relax} \fi
\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\AE{AE}%
+\def\L{L}%
+\def\OE{OE}%
\def\O{O}%
+\def\aa{aa}%
+\def\ae{ae}%
\def\l{l}%
-\def\L{L}%
+\def\oe{oe}%
+\def\o{o}%
\def\ss{ss}%
-\let\w=\indexdummyfont
-\let\t=\indexdummyfont
-\let\r=\indexdummyfont
-\let\i=\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 <, >, |, etc.
+% Likewise with the other plain tex font commands.
+%\let\tt=\indexdummyfont
+%
\let\b=\indexdummyfont
-\let\emph=\indexdummyfont
-\let\strong=\indexdummyfont
-\let\cite=\indexdummyfont
+\let\i=\indexdummyfont
+\let\r=\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\t=\indexdummyfont
+%
+\let\TeX=\indexdummytex
\let\acronym=\indexdummyfont
+\let\cite=\indexdummyfont
+\let\code=\indexdummyfont
\let\command=\indexdummyfont
-\let\option=\indexdummyfont
+\let\dfn=\indexdummyfont
+\let\dots=\indexdummydots
+\let\emph=\indexdummyfont
+\let\env=\indexdummyfont
\let\file=\indexdummyfont
-\let\samp=\indexdummyfont
\let\kbd=\indexdummyfont
\let\key=\indexdummyfont
+\let\math=\indexdummyfont
+\let\option=\indexdummyfont
+\let\samp=\indexdummyfont
+\let\strong=\indexdummyfont
+\let\uref=\indexdummyfont
+\let\url=\indexdummyfont
\let\var=\indexdummyfont
-\let\TeX=\indexdummytex
-\let\dots=\indexdummydots
-\def\@{@}%
+\let\w=\indexdummyfont
}
% To define \realbackslash, we must make \ not be an escape.
@@ -2860,16 +3017,17 @@ width0pt\relax} \fi
% 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.
+ % If the third (subentry) arg is present, add it to the index
+ % line to write.
\ifx\thirdarg\emptymacro \else
- \toks0 = \expandafter{\the\toks0 \space #3}%
+ \toks0 = \expandafter{\the\toks0{#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.
+ % Set up the complete index entry, with both the sort key and
+ % the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file (four in the
+ % subentry case), texindex reduces to two when writing the .??s
+ % sorted result.
\edef\temp{%
\write\csname#1indfile\endcsname{%
\realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}%
@@ -3091,11 +3249,18 @@ width0pt\relax} \fi
\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
+\def\secondary#1#2{{%
+ \parfillskip=0in
+ \parskip=0in
+ \hangindent=1in
+ \hangafter=1
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+ \ifpdf
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \else
+ #2
+ \fi
+ \par
}}
% Define two-column mode, which we use to typeset indexes.
@@ -3155,7 +3320,6 @@ width0pt\relax} \fi
%
% 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
}
@@ -3169,6 +3333,7 @@ width0pt\relax} \fi
% previous page.
\dimen@ = \vsize
\divide\dimen@ by 2
+ \advance\dimen@ by -\ht\partialpage
%
% box0 will be the left-hand column, box2 the right.
\setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
@@ -3176,15 +3341,18 @@ width0pt\relax} \fi
\unvbox255
\penalty\outputpenalty
}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
\def\pagesofar{%
- % 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}%
}
+%
+% All done with double columns.
\def\enddoublecolumns{%
\output = {%
% Split the last of the double-column material. Leave it on the
@@ -3209,8 +3377,9 @@ width0pt\relax} \fi
% \endgroup where \vsize got restored).
\pagegoal = \vsize
}
+%
+% Called at the end of the double column material.
\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
@@ -3383,19 +3552,24 @@ width0pt\relax} \fi
\global\let\subsubsection = \numberedsubsubsec
}
+% we use \chapno to avoid indenting back
+\def\appendixbox#1{%
+ \setbox0 = \hbox{\putwordAppendix{} \the\chapno}%
+ \hbox to \wd0{#1\hss}}
+
\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}%
+\chapmacro {#1}{\appendixbox{\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}}}%
+\edef\temp{\noexpand\writetocentry{\realbackslash appendixentry{\the\toks0}%
+ {\appendixletter}}}%
\temp
\appendixnoderef
\global\let\section = \appendixsec
@@ -3472,7 +3646,8 @@ width0pt\relax} \fi
\def\unnumberedseczzz #1{%
\plainsecheading {#1}\gdef\thissection{#1}%
\toks0 = {#1}%
-\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}%
+\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry%
+ {\the\toks0}{\the\chapno}}}%
\temp
\unnumbnoderef
\nobreak
@@ -3511,7 +3686,7 @@ width0pt\relax} \fi
\plainsubsecheading {#1}\gdef\thissection{#1}%
\toks0 = {#1}%
\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry%
- {\the\toks0}}}%
+ {\the\toks0}{\the\chapno}{\the\secno}}}%
\temp
\unnumbnoderef
\nobreak
@@ -3552,7 +3727,7 @@ width0pt\relax} \fi
\plainsubsubsecheading {#1}\gdef\thissection{#1}%
\toks0 = {#1}%
\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry%
- {\the\toks0}}}%
+ {\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}}}%
\temp
\unnumbnoderef
\nobreak
@@ -3764,7 +3939,7 @@ width0pt\relax} \fi
% 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.
+% fixed time so that @contents can be put in the document anywhere.
%
\newif\iftocfileopened
\def\writetocentry#1{%
@@ -3773,6 +3948,14 @@ width0pt\relax} \fi
\global\tocfileopenedtrue
\fi
\iflinks \write\tocfile{#1{\folio}}\fi
+ %
+ % Tell \shipout to create a page destination if we're doing pdf, which
+ % will be the target of the links in the table of contents. We can't
+ % just do it on every page because the title pages are numbered 1 and
+ % 2 (the page numbers aren't printed), and so are the first two pages
+ % of the document. Thus, we'd have two destinations named `1', and
+ % two named `2'.
+ \ifpdf \pdfmakepagedesttrue \fi
}
\newskip\contentsrightmargin \contentsrightmargin=1in
@@ -3828,19 +4011,21 @@ width0pt\relax} \fi
\startcontents{\putwordShortTOC}%
%
\let\chapentry = \shortchapentry
+ \let\appendixentry = \shortappendixentry
\let\unnumbchapentry = \shortunnumberedentry
% We want a true roman here for the page numbers.
\secfonts
- \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
\rm
\hyphenpenalty = 10000
\advance\baselineskip by 1pt % Open it up a little.
\def\secentry ##1##2##3##4{}
- \def\unnumbsecentry ##1##2{}
+ \def\unnumbsecentry ##1##2##3{}
\def\subsecentry ##1##2##3##4##5{}
- \def\unnumbsubsecentry ##1##2{}
+ \def\unnumbsubsecentry ##1##2##3##4{}
\def\subsubsecentry ##1##2##3##4##5##6{}
- \def\unnumbsubsubsecentry ##1##2{}
+ \def\unnumbsubsubsecentry ##1##2##3##4##5{}
\openin 1 \jobname.toc
\ifeof 1 \else
\closein 1
@@ -3863,16 +4048,24 @@ width0pt\relax} \fi
% 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.
+% Chapters, in the main contents.
\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}}
-
-% See comments in \dochapentry re vbox and related settings
+%
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
\def\shortchapentry#1#2#3{%
\tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}%
}
+% Appendices, in the main contents.
+\def\appendixentry#1#2#3{%
+ \dochapentry{\appendixbox{\putwordAppendix{} #2}\labelspace#1}{#3}}
+%
+% Appendices, in the short toc.
+\let\shortappendixentry = \shortchapentry
+
% 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.
+% 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.
@@ -3880,38 +4073,31 @@ width0pt\relax} \fi
\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
+ % This space should be enough, since a single number is .5em, and the
% widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % But use \hss just in case.
% (This space doesn't include the extra space that gets added after
% the label; that gets put in by \shortchapentry above.)
- \advance\dimen0 by 1.1em
- \hbox to \dimen0{#1\hfil}%
+ \dimen0 = 1em
+ \hbox to \dimen0{#1\hss}%
}
+% Unnumbered chapters.
\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}}
+\def\unnumbsecentry#1#2#3{\dosecentry{#1}{#3}}
% Subsections.
\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}}
-\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}}
+\def\unnumbsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
% 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}}
+\def\unnumbsubsubsecentry#1#2#3#4#5{\dosubsubsecentry{#1}{#5}}
% This parameter controls the indentation of the various levels.
\newdimen\tocindent \tocindent = 3pc
@@ -3952,7 +4138,7 @@ width0pt\relax} \fi
\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
+ % typeset in cmr, characters such as _ would come out wrong; we
% have to do the usual translation tricks.
\entry{#1}{#2}%
\endgroup}
@@ -3972,36 +4158,27 @@ width0pt\relax} \fi
\message{environments,}
% @foo ... @end foo.
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
% Since these characters are used in examples, it should be an even number of
% \tt widths. Each \tt character is 1en, so two makes it 1em.
-% 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}}
+% The @error{} command.
% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
{\tentt \global\dimen0 = 3em}% Width of the box.
\dimen2 = .55pt % Thickness of rules
% The text. (`r' is open on the right, `e' somewhat less so on the left.)
\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
-
+%
\global\setbox\errorbox=\hbox to \dimen0{\hfil
\hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
\advance\hsize by -2\dimen2 % Rules.
@@ -4012,8 +4189,7 @@ width0pt\relax} \fi
\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.
@@ -4053,9 +4229,9 @@ width0pt\relax} \fi
\def\@{@}%
\let\Etex=\endgroup}
-% Define @lisp ... @endlisp.
+% Define @lisp ... @end lisp.
% @lisp does a \begingroup so it can rebind things,
-% including the definition of @endlisp (which normally is erroneous).
+% including the definition of @end lisp (which normally is erroneous).
% Amount to narrow the margins by for @lisp.
\newskip\lispnarrowing \lispnarrowing=0.4in
@@ -4086,9 +4262,17 @@ width0pt\relax} \fi
% 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}}
+\def\aboveenvbreak{{%
+ \ifnum\lastpenalty < 10000
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ \penalty-50
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
\let\afterenvbreak = \aboveenvbreak
@@ -4220,7 +4404,7 @@ width0pt\relax} \fi
\def\smalllispx{\begingroup
\def\Esmalllisp{\nonfillfinish\endgroup}%
\def\Esmallexample{\nonfillfinish\endgroup}%
- \smallfonts
+ \smallexamplefonts
\lisp
}
@@ -4231,12 +4415,12 @@ width0pt\relax} \fi
\let\Edisplay = \nonfillfinish
\gobble
}
-
+%
% @smalldisplay (when @smallbook): @display plus smaller fonts.
%
\def\smalldisplayx{\begingroup
\def\Esmalldisplay{\nonfillfinish\endgroup}%
- \smallfonts \rm
+ \smallexamplefonts \rm
\display
}
@@ -4248,12 +4432,12 @@ width0pt\relax} \fi
\let\Eformat = \nonfillfinish
\gobble
}
-
+%
% @smallformat (when @smallbook): @format plus smaller fonts.
%
\def\smallformatx{\begingroup
\def\Esmallformat{\nonfillfinish\endgroup}%
- \smallfonts \rm
+ \smallexamplefonts \rm
\format
}
@@ -4271,6 +4455,7 @@ width0pt\relax} \fi
\gobble
}
+
% @quotation does normal linebreaking (hence we can't use \nonfillstart)
% and narrows the margins.
%
@@ -4293,6 +4478,173 @@ width0pt\relax} \fi
}
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
+%
+% [Knuth] p. 344; only we need to do '@' too
+\def\dospecials{%
+ \do\ \do\\\do\@\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=12}\dospecials}
+%
+% [Knuth] pp. 380,381,391
+% Disable Spanish ligatures ?` and !` of \tt font
+\begingroup
+ \catcode`\`=\active\gdef`{\relax\lq}
+\endgroup
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\leavevmode\endgraf}%
+ \catcode`\`=\active
+ \tabeightspaces
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+\def\starttabbox{\setbox0=\hbox\bgroup}
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen0=\wd0 % the width so far, or since the previous tab
+ \divide\dimen0 by\tabw
+ \multiply\dimen0 by\tabw % compute previous multiple of \tabw
+ \advance\dimen0 by\tabw % advance to next multiple of \tabw
+ \wd0=\dimen0 \box0 \starttabbox
+ }%
+ }
+\endgroup
+\def\setupverbatim{%
+ % Easiest (and conventionally used) font for verbatim
+ \tt
+ \def\par{\leavevmode\egroup\box0\endgraf}%
+ \catcode`\`=\active
+ \tabexpand
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+ \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters. Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+% \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+ \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+% \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%% Include LaTeX hack for completeness -- never know
+%% \begingroup
+%% \catcode`|=0 \catcode`[=1
+%% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active
+%% \catcode`\\=12|gdef|doverbatim#1@end verbatim[
+%% #1|endgroup|def|Everbatim[]|end[verbatim]]
+%% |endgroup
+\begingroup
+ \catcode`\ =\active
+ \gdef\doverbatim#1@end verbatim{#1\end{verbatim}}
+\endgroup
+%
+\def\verbatim{%
+ \def\Everbatim{\nonfillfinish\endgroup}%
+ \begingroup
+ \nonfillstart
+ \advance\leftskip by -\defbodyindent
+ \begingroup\setupverbatim\doverbatim
+}
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+% Allow normal characters that we make active in the argument (a file name).
+\def\verbatiminclude{%
+ \begingroup
+ \catcode`\\=12
+ \catcode`~=12
+ \catcode`^=12
+ \catcode`_=12
+ \catcode`|=12
+ \catcode`<=12
+ \catcode`>=12
+ \catcode`+=12
+ \parsearg\doverbatiminclude
+}
+\def\setupverbatiminclude{%
+ \begingroup
+ \nonfillstart
+ \advance\leftskip by -\defbodyindent
+ \begingroup\setupverbatim
+}
+%
+\def\doverbatiminclude#1{%
+ % Restore active chars for included file.
+ \endgroup
+ \begingroup
+ \def\thisfile{#1}%
+ \expandafter\expandafter\setupverbatiminclude\input\thisfile
+ \endgroup\nonfillfinish\endgroup
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+\newbox\copyingbox
+%
+\def\copying{\begingroup
+ \parindent = 0pt % looks wrong on title page
+ \def\Ecopying{\egroup\endgroup}%
+ \global\setbox\copyingbox = \vbox\bgroup
+}
+
+% @insertcopying.
+%
+\def\insertcopying{\unvcopy\copyingbox}
+
+
\message{defuns,}
% @defun etc.
@@ -4620,7 +4972,7 @@ width0pt\relax} \fi
% #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}%
+\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}%
\deftypefunargs {#3}\endgroup %
\catcode 61=\other % Turn off change made in \defparsebody
}
@@ -4629,9 +4981,9 @@ width0pt\relax} \fi
\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader}
-% \defheaderxcond#1\relax$$$
+% \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}
+\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}
@@ -4641,7 +4993,7 @@ width0pt\relax} \fi
\begingroup
\normalparens % notably, turn off `&' magic, which prevents
% at least some C++ text from working
-\defname {\defheaderxcond#2\relax$$$#3}{#1}%
+\defname {\defheaderxcond#2\relax$.$#3}{#1}%
\deftypefunargs {#4}\endgroup %
\catcode 61=\other % Turn off change made in \defparsebody
}
@@ -4687,7 +5039,7 @@ width0pt\relax} \fi
\def\deftypeopheader#1#2#3#4{%
\dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index
\begingroup
- \defname{\defheaderxcond#2\relax$$$#3}
+ \defname{\defheaderxcond#2\relax$.$#3}
{\deftypeopcategory\ \putwordon\ \code{#1}}%
\deftypefunargs{#4}%
\endgroup
@@ -4702,7 +5054,7 @@ width0pt\relax} \fi
\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}}%
+ \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}%
\deftypefunargs{#4}%
\endgroup
}
@@ -4716,7 +5068,7 @@ width0pt\relax} \fi
\def\deftypeivarheader#1#2#3{%
\dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index
\begingroup
- \defname{\defheaderxcond#2\relax$$$#3}
+ \defname{\defheaderxcond#2\relax$.$#3}
{\putwordInstanceVariableof\ \code{#1}}%
\defvarargs{#3}%
\endgroup
@@ -4799,7 +5151,7 @@ width0pt\relax} \fi
% 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}%
+\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}%
\interlinepenalty=10000
\endgraf\nobreak\vskip -\parskip\nobreak
\endgroup}
@@ -4810,7 +5162,7 @@ width0pt\relax} \fi
\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader}
\def\deftypevrheader #1#2#3{\dovarind#3 \relax%
-\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1}
+\begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1}
\interlinepenalty=10000
\endgraf\nobreak\vskip -\parskip\nobreak
\endgroup}
@@ -4970,7 +5322,7 @@ width0pt\relax} \fi
\message{Warning: redefining \the\macname}%
\else
\expandafter\ifx\csname \the\macname\endcsname \relax
- \else \errmessage{The name \the\macname\space is reserved}\fi
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
\global\cslet{macsave.\the\macname}{\the\macname}%
\global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
% Add the macroname to \macrolist
@@ -5251,13 +5603,15 @@ width0pt\relax} \fi
\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
+ {\normalturnoffactive
+ \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
%
@@ -5519,8 +5873,15 @@ width0pt\relax} \fi
%
\smallfonts \rm
%
- % Hang the footnote text off the number.
- \hang
+ % Because we use hanging indentation in footnotes, a @noindent appears
+ % to exdent this text, so make it be a no-op. makeinfo does not use
+ % hanging indentation so @noindent can still be needed within footnote
+ % text after an @example or the like (not that this is good style).
+ \let\noindent = \relax
+ %
+ % Hang the footnote text off the number. Use \everypar in case the
+ % footnote extends for more than one paragraph.
+ \everypar = {\hang}%
\textindent{\thisfootno}%
%
% Don't crash into the line above the footnote text. Since this
@@ -5537,24 +5898,6 @@ width0pt\relax} \fi
}%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
@@ -5619,40 +5962,44 @@ width0pt\relax} \fi
\global\warnednoepsftrue
\fi
\else
- \imagexxx #1,,,\finish
+ \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{%
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing this stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ \normalturnoffactive % allow _ et al. in names
+ % If the image is by itself, center it.
+ \ifvmode
+ \imagevmodetrue
+ \nobreak\bigskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \nobreak\vskip\parskip
+ \nobreak
+ \line\bgroup\hss
+ \fi
+ %
+ % Output the image.
\ifpdf
- \centerline{\dopdfimage{#1}{#2}{#3}}%
+ \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
+ \epsfbox{#1.eps}%
\fi
-}
+ %
+ \ifimagevmode \hss \egroup \bigbreak \fi % space after the image
+\endgroup}
\message{localization,}
@@ -5721,10 +6068,12 @@ should work if nowhere else does.}
}
% 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.
+% 4) hoffset; 5) binding offset; 6) topskip, 7) pdf pageheight;
+% 8) pdf pagewidth. We also call \setleading{\textleading}, so
+% the caller should define \textleading. The caller should also
+% set \parskip.
%
-\def\internalpagesizes#1#2#3#4#5#6{%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
\voffset = #3\relax
\topskip = #6\relax
\splittopskip = \topskip
@@ -5743,25 +6092,47 @@ should work if nowhere else does.}
\normaloffset = #4\relax
\bindingoffset = #5\relax
%
+ \setleading{\textleading}
+ %
\parindent = \defaultparindent
\setemergencystretch
+ %
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ \fi
+}
+
+% Use `small' versions.
+%
+\def\smallenvironments{%
+ \let\smalldisplay = \smalldisplayx
+ \let\smallexample = \smalllispx
+ \let\smallformat = \smallformatx
+ \let\smalllisp = \smalllispx
}
% @letterpaper (the default).
\def\letterpaper{{\globaldefs = 1
\parskip = 3pt plus 2pt minus 1pt
- \setleading{13.2pt}%
+ \textleading = 13.2pt
%
% If page is nothing but text, make it come out even.
- \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}%
+ \internalpagesizes{46\baselineskip}{6in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
}}
% Use @smallbook to reset parameters for 7x9.5 (or so) format.
\def\smallbook{{\globaldefs = 1
\parskip = 2pt plus 1pt
- \setleading{12pt}%
+ \textleading = 12pt
%
- \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}%
+ \internalpagesizes{7.5in}{5.in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
%
\lispnarrowing = 0.3in
\tolerance = 700
@@ -5769,47 +6140,77 @@ should work if nowhere else does.}
\contentsrightmargin = 0pt
\deftypemargin = 0pt
\defbodyindent = .5cm
- %
- \let\smalldisplay = \smalldisplayx
- \let\smallexample = \smalllispx
- \let\smallformat = \smallformatx
- \let\smalllisp = \smalllispx
+ \smallenvironments
}}
% Use @afourpaper to print on European A4 paper.
\def\afourpaper{{\globaldefs = 1
- \setleading{12pt}%
\parskip = 3pt plus 2pt minus 1pt
+ \textleading = 12pt
%
- \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}%
+ \internalpagesizes{53\baselineskip}{160mm}%
+ {\voffset}{4mm}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
%
\tolerance = 700
\hfuzz = 1pt
}}
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+ \parskip = 2pt plus 1pt minus 0.1pt
+ \textleading = 12.5pt
+ %
+ \internalpagesizes{166mm}{120mm}%
+ {\voffset}{-8mm}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
+ %
+ \lispnarrowing = 0.2in
+ \tolerance = 800
+ \hfuzz = 1.2pt
+ \contentsrightmargin = 0mm
+ \deftypemargin = 0pt
+ \defbodyindent = 2mm
+ \tableindent = 12mm
+ %
+ \smallenvironments
+}}
+
% 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}%
+ \textleading = 13.6pt
%
\afourpaper
- \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}%
+ \internalpagesizes{237mm}{150mm}%
+ {3.6mm}{3.6mm}%
+ {3mm}{7mm}%
+ {297mm}{210mm}%
%
+ % Must explicitly reset to 0 because we call \afourpaper, apparently,
+ % although this does not entirely make sense.
\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
+ \internalpagesizes{6.5in}{9.5in}%
+ {\hoffset}{\normaloffset}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
}
% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
% Perhaps we should allow setting the margins, \topskip, \parskip,
% and/or leading, also. Or perhaps we should compute them somehow.
%
+\newdimen \tempdima
+\newdimen \tempdimb
\def\pagesizes{\parsearg\pagesizesxxx}
\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish}
\def\pagesizesyyy#1,#2,#3\finish{{%
@@ -5817,9 +6218,16 @@ should work if nowhere else does.}
\globaldefs = 1
%
\parskip = 3pt plus 2pt minus 1pt
- \setleading{13.2pt}%
+ \setleading{\textleading}%
%
- \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}%
+ \tempdima #1\relax
+ \advance\tempdima by 1in
+ \tempdimb #2\relax
+ \advance\tempdimb by 1in
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\tempdima}{\tempdimb}%
}}
% Set default to letter.
@@ -5847,7 +6255,7 @@ should work if nowhere else does.}
\def\normalless{<}
\def\normalgreater{>}
\def\normalplus{+}
-\def\normaldollar{$}
+\def\normaldollar{$}%$ font-lock fix
% 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,
@@ -5896,7 +6304,7 @@ should work if nowhere else does.}
\catcode`\+=\active
\def+{{\tt \char 43}}
\catcode`\$=\active
-\def${\ifusingit{{\sl\$}}\normaldollar}
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
%\catcode 27=\active
%\def^^[{$\diamondsuit$}
@@ -5941,7 +6349,7 @@ should work if nowhere else does.}
@let<=@normalless
@let>=@normalgreater
@let+=@normalplus
-@let$=@normaldollar}
+@let$=@normaldollar}%$ font-lock fix
@def@normalturnoffactive{@let"=@normaldoublequote
@let\=@normalbackslash
@@ -5952,7 +6360,7 @@ should work if nowhere else does.}
@let<=@normalless
@let>=@normalgreater
@let+=@normalplus
-@let$=@normaldollar}
+@let$=@normaldollar}%$ font-lock fix
% Make _ and + \other characters, temporarily.
% This is canceled by @fixbackslash.
diff --git a/contrib/groff/doc/webpage.ms b/contrib/groff/doc/webpage.ms
new file mode 100644
index 0000000..f40b29b
--- /dev/null
+++ b/contrib/groff/doc/webpage.ms
@@ -0,0 +1,969 @@
+.\" This file gives a small example how a web page could look like if created
+.\" with groff.
+.\"
+.\"
+.\" To make it work with other output devices also, we include www.tmac
+.\" directly.
+.\"
+.nr PS 10
+.nr VS 12
+.if '\*[.T]'html' .nr LL 10i
+.if r ps4html .nr LL 10i
+.mso www.tmac
+.
+.de blm-macro
+. nr tmp \\n[.i]
+. LP
+. in \\n[tmp]u
+..
+.blm blm-macro
+.
+.HX 0
+.
+.defcolor mydarkred rgb 0.65f 0.1f 0.2f
+.defcolor mydarkgreen rgb 0.1f 0.5f 0.2f
+.defcolor mydarkblue rgb 0.1f 0.2f 0.6f
+.
+.ds GNU \m[mydarkred]G\m[]\m[mydarkgreen]N\m[]\m[mydarkblue]U\m[]
+.
+.HTL
+.NHR
+.
+Home of Groff (GNU Troff).
+.
+.HTML-IMAGE-LEFT
+.PSPIC -L gnu.eps 2i 2i
+.ie r ps4html \
+. nop \v'-0.66i'\h'2.0i'\s[100]\*[GNU] Troff\s0
+.el \
+. nop \v'-0.66i'\h'2.0i'\s[60]\*[GNU] Troff\s0
+.HTML-IMAGE-END
+.
+.HnS 1
+.HR
+GNU Troff
+.URL http://\:groff.ffii.org/ (Groff)
+\[em] a
+.URL http://\:www.gnu.org/ GNU
+project.
+Hosted by
+.URL http://\:ffii.org/ FFII .
+.HR
+.HnE
+.LK
+
+.DC T HE mydarkred
+groff (GNU Troff) software
+is a typesetting package which reads plain text mixed with
+formatting commands and produces formatted output.
+Groff now supports HTML.
+.
+.
+.SH
+Download
+
+.URL "ftp://\:groff.ffii.org/\:pub/\:groff/" Germany
+|
+.URL "ftp://\:ftp.gnu.org/\:gnu/\:groff/" USA
+
+.URL http://\:www.gnu.org/\:copyleft/\:gpl.html License
+|
+.URL http://\:ffii.org/\:mailman/\:listinfo/\:groff/ "Mailing list"
+|
+.URL "http://\:gnuwin32.sf.net/\:packages/\:groffl.htm" "Groff for Windows"
+
+User issues lead:
+.MTO Ted.Harding@\:nessie.mcc.ac.uk "Ted Harding"
+.br
+Technical issues lead:
+.MTO wl@\:gnu.org "Werner Lemberg"
+.
+.
+.SH
+README
+
+This is the GNU groff document formatting system.
+The version number is given in the file VERSION.
+
+Included in this release are implementations of troff, pic, eqn, tbl, 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
+.MTO jh@\:axis.se "J\[:o]rgen H\[:a]gg" .
+
+See the file INSTALL for installation instructions.
+You will require a C++ compiler.
+
+The file NEWS describes recent user-visible changes to groff.
+
+Groff is free software.
+See the file COPYING for copying permission.
+
+The file PROBLEMS describes various problems that have been encountered in
+compiling, installing, and running groff.
+
+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.
+
+A CVS repository is now available, containing the current development
+version of groff.
+You can access it with the commands
+
+.RS
+.nf
+.ft C
+export CVSROOT=:pserver:anoncvs@anoncvs.ffii.org:/var/cvs
+cvs login
+cvs -z9 co groff
+.ft P
+.fi
+.RE
+
+(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
+
+.RS
+.ft C
+cvs -z9 update -dP
+.ft P
+.RE
+
+Please read the info pages of cvs for further details.
+
+Alternatively, you can download snapshots (which are updated twice a day)
+from
+.URL ftp://\:ftp.ffii.org/\:pub/\:groff/\:devel/\:groff-current.tar.gz here
+or a diff file relative to the latest official groff release as:
+
+.RS
+.ft C
+ftp://ftp.ffii.org/pub/groff/devel/groff-\[la]version\[ra]-current.diff.gz
+.ft P
+.RE
+
+Assuming that groff-\[la]version\[ra].tar.gz and
+groff-\[la]version\[ra]-current.diff.gz are in the same directory, do the
+following to apply the diff file:
+
+.RS
+.nf
+.ft C
+tar xzvf groff-\[la]version\[ra].tar.gz
+cd groff-\[la]version\[ra]
+gunzip -c ../groff-\[la]version\[ra]-current.diff.gz | patch -p1
+.ft P
+.fi
+.RE
+
+Please report bugs using the form in the file BUG-REPORT; the idea of this
+is to make sure that FSF has all the information it needs to fix the bug.
+At the very least, read the BUG-REPORT form and make sure that you supply
+all the information that it asks for.
+Even if you are not sure that something is a bug, report it using
+BUG-REPORT: this will enable us to determine whether it really is a bug or
+not.
+
+Three mailing lists are available:
+
+.ULS
+.LI
+.MTO bug-groff@gnu.org bug-groff@gnu.org
+for reporting bugs
+
+.LI
+.MTO groff@gnu.org groff@gnu.org
+for general discussion of groff
+
+.LI
+.MTO groff-commit@ffii.org groff-commit@ffii.org
+a read-only list showing logs of commitments to the CVS repository
+.ULE
+
+Note that groff@gnu.org is an alias for
+.MTO groff@\:ffii.org groff@\:ffii.org ;
+you must be subscribed to the `groff' list to send mails.
+
+To subscribe, send e-mail to \[la]list\[ra]-request@\[la]domain\[ra]
+(example:
+.MTO groff-request@\:ffii.org groff-request@\:ffii.org )
+with the word `subscribe' in either the
+subject or body of the e-mail (don't include the quotes).
+
+GNU groff was written by
+.MTO jjc@\:jclark.com "James Clark" .
+It is now maintained by
+.MTO Ted.Harding@\:nessie.mcc.ac.uk "Ted Harding"
+and
+.MTO wl@\:gnu.org "Werner Lemberg" .
+.
+.
+.SH
+NEWS VERSION 1.18.1
+.
+.SH 2
+troff
+
+.ULS
+.LI
+The non-slanted PostScript font definition files have been regenerated to
+include left and right italic correction values.
+Applying those to a glyph (this is, prepending the glyph with `\e,' and
+appending `\e/' to the glyph) sets the glyph width to the real value given
+by the horizontal bounding box values.
+Without those escapes, the advance width for the particular glyph is used
+(which can differ considerably).
+
+Most users will neither need this feature nor notice a difference in
+existing documents (provided \e, and \e/ is used as advertised, namely for
+italic fonts only); its main goal is to improve image generation with
+grohtml.
+
+This is an experimental change, and feedback is welcome.
+.ULE
+.
+.SH 2
+tbl
+
+.ULS
+.LI
+Added global option `nospaces' to ignore leading and trailing spaces in data
+items.
+.ULE
+.
+.SH 2
+grolbp
+
+.ULS
+.LI
+The option \-w (\-\-linewidth) has been added (similar to other device
+drivers) to set the default line width.
+.ULE
+.
+.SH 2
+grn
+
+.ULS
+.LI
+Support for b-spline and Bezier curves has been added.
+.ULE
+.
+.SH 2
+groffer
+
+.ULS
+.LI
+New option \-\-shell to select the shell under wich groffer shall run.
+.ULE
+.
+.SH 2
+Macro Packages
+
+.ULS
+.LI
+The string `Am' (producing an ampersand) has been added to mdoc for
+compatibility with NetBSD.
+
+.LI
+`.IX' is now deprecated for mom; you should use `.IQ' (Indent Quit)
+instead.
+
+.LI
+In mom, new inlines `FWD', `BCK', `UP', and `DOWN' deal with horizontal
+and vertical movements; please refer to contrib/mom/NEWS for more
+details.
+
+.LI
+New macro ENDNOTES_HDRFTR_CENTER for mom to better control headers.
+.ULE
+.
+.SH 2
+Miscellaneous
+
+.ULS
+.LI
+The `papersize' keyword in the DESC file now accepts multiple arguments.
+It is scanned from left to the right, and the first valid argument is used.
+This makes it possible to provide a fallback paper size.
+
+Example:
+.RS
+.ft C
+papersize /etc/papersize a4
+.ft P
+.RE
+
+.LI
+A local font directory has been prepended to the default font path; it
+defaults to /usr/local/share/groff/site-font. Similar to the normal
+font searching process, files must be placed into a dev\fIXXX\fP
+subdirectory, e.g.
+
+.RS
+.ft C
+/usr/local/share/groff/site-font/devps/FOO
+.ft P
+.RE
+
+for a PostScript font definition file FOO.
+.ULE
+.
+.
+.SH
+NEWS VERSION 1.18
+
+This section describes recent user-visible changes in groff.
+Bug fixes are not described.
+There are more details in the man pages.
+
+.ad c
+\s[+5]\m[red]\
+Please read the changes below regarding
+.ie '\*[.T]'html' \
+. URL #grotty grotty ,
+.el \
+. nop grotty,
+groff's tty frontend.\
+\m[]\s[0]
+.br
+.ad n
+.
+.SH 2
+Troff
+
+.ULS
+.LI
+Color support has been added to troff and pic (and to the device drivers
+grops, grodvi, grotty, and grohtml -- other preprocessors and drivers will
+follow).
+A new function `defcolor' defines colors; the escape sequence `\em' sets the
+drawing color, the escape sequence `\eM' specifies the background color for
+closed objects created with \eD'.\|.\|.' commands.
+`\em[]' and `\eM[]' switch back to the previous color.
+`\em' and `\eM' correspond to the new troff output command sets starting
+with `m' and `DF'.
+The device-specific default color is called `default' and can't be
+redefined.
+
+Use the `color' request to toggle the usage of colors (default is on); the
+read-only register `.color' is\~0 if colors are not active, and non-zero
+otherwise.
+
+The old `Df' output command is mapped onto `DFg'; all color output
+commands don't change the current font position (consequently, `Df'
+doesn't either).
+
+Outputting color can be disabled in troff and groff with the option\~\-c
+(it is always disabled in compatibility mode).
+See the section on grotty for the
+.ie '\*[.T]'html' \
+. URL #GROFF_NO_SGR GROFF_NO_SGR
+.el \
+. nop GROFF_NO_SGR
+environment variable also.
+
+For defining color components as fractions between 0 and\~1, a new scaling
+indicator `f' has been defined: 1f\~=\~65536u.
+For testing whether a color is defined (with .if and .ie), a new
+conditional operator `m' is available.
+
+More details can be found in the groff_diff.7 manual page and in
+groff.texinfo.
+
+.LI
+Similar to \em and \eM, \ef[] switches back to the previous font.
+\efP (and \ef[P]) is still valid for backwards compatibility.
+
+.LI
+The new escape \eF is the same as `.fam'; \eF[] switches back to previous
+family -- \eF[P] selects family `P'.
+
+.LI
+Two new glyph symbols are available: `eu' is the official Euro symbol;
+`Eu' is a font-specific glyph variant.
+
+.LI
+The new glyph symbols `t+\-', `tdi', and `tmu' are textual variants of
+`+\-', `di', and `mu', respectively.
+
+.LI
+Latin-1 character 181 (PS name `mu', Unicode name U+00B5 MICRO SIGN) has
+got the troff glyph name `mc'.
+
+.LI
+\-Tutf8 is now available on EBCDIC hosts.
+
+.LI
+Strings can take arguments, using this syntax: \e*[foo\~arg1\~arg2\~.\|.\|.].
+Example:
+.RS
+.nf
+.ft C
+\&.ds xxx This is a \e\e$1 test.
+\e*[xxx nice]
+.ft P
+.fi
+.RE
+
+.LI
+It is now possible to have whitespace between the first and second dot (or
+the name of the ending macro) to end a macro definition.
+Example:
+.RS
+.nf
+.ft C
+\&.de !
+\&..
+\&.
+\&.de foo
+\&. nop Hello, I'm `foo'.
+\&. nop I will now define `bar'.
+\&. de bar !
+\&. nop Hello, I'm `bar'.
+\&. !
+\&..
+.ft P
+.fi
+.RE
+
+.LI
+`.fn' is a new string-valued register which returns the (internal) real
+font name; styles and families are properly concatenated.
+
+.LI
+Three new read/write registers `seconds', `minutes', and `hours' contain
+the current time, set at start-up of troff.
+Use the `af' request to control their output format.
+
+.LI
+The new request `fchar' can be used to provide fallback characters.
+It has the same syntax as the `char' request; the only difference is that
+a character defined with `.char' hides the glyph with the same name in the
+current font, whereas a character defined with `.fchar' is checked only if
+the particular glyph isn't found in the current font.
+This test happens before checking special fonts.
+
+.LI
+In analogy to the `tmc' request, `.writec' is the same as `.write' but
+doesn't emit a final newline.
+
+.LI
+The new request `itc' is a variant of `.it' for which a line interrupted
+with \ec counts as one input line.
+
+.LI
+Two new requests `ds1' and `as1' which are similar to `ds' and `as' but
+with compatibility mode disabled during expansion of strings defined by
+them.
+
+.LI
+The syntax of the `substring' request has been changed:
+The first character in a string now has index\~0, the last character
+has index\~\-1.
+Note that this is an incompatible change.
+
+.LI
+To emit strings directly to the intermediate output, a new `output'
+request has been added; it is similar to `\e!' used at the top level.
+
+.LI
+`.hpf' has been extended.
+It can now handle most TeX hyphenation pattern files without
+modification.
+To do that, the commands \epatterns, \ehyphenation, and \eendinput are
+recognized.
+Please refer to groff_diff.7 for more information.
+
+.LI
+`hpfcode' is a new request to provide an input encoding mapping for the
+`hpf' request.
+
+.LI
+The new request `hpfa' appends hyphenation patterns (`hpf' replaces
+already existing patterns).
+
+.LI
+A new request `ami' (append macro indirect) has been added.
+The first and second parameter of `ami' are taken from string registers
+rather than directly; this very special request is needed to make
+`trace.tmac' independent from the escape character (which might even
+be disabled).
+
+.LI
+The new request `sizes' is similar to the `sizes' command in DESC files.
+It expects the same syntax; the data must be on a single line, and the
+final `0' can be omitted.
+
+.LI
+`trin' (translate input) is a new request which is similar to `tr' with
+the exception that the `asciify' request will use the character code (if
+any) before the character translation.
+Example:
+.RS
+.nf
+.ft C
+\&.trin ax
+\&.di xxx
+a
+\&.br
+\&.di
+\&.xxx
+\&.trin aa
+\&.asciify xxx
+\&.xxx
+.ft P
+.fi
+.RE
+
+The result is `x\~a'. Using `tr', the result would be `x\~x'.
+
+.LI
+The request `pvs' isn't new, but hasn't been documented before.
+It adds vertical space after a line has been output.
+This makes it an alternative to the `ls' request to produce
+double-spaced documents.
+The read-only register `.pvs' holds the current amount of the
+post-vertical line space.
+
+.LI
+For compatibility with plan 9's troff, multiple `pi' requests are
+supported:
+
+.RS
+.nf
+.ft C
+\&.pi foo
+\&.pi bar
+.ft P
+.fi
+.RE
+
+is now equivalent to
+.RS
+.ft C
+\&.pi foo | bar
+.ft P
+.RE
+
+.LI
+A new escape sequence `\eO' is available to disable and enable glyph
+output.
+Please see groff_diff.man and groff.texinfo for more details.
+
+.LI
+The escapes `\e%', `\e&', `\e)', and `\e:' no longer cause an error in \eX;
+they are ignored now.
+Additionally `\e\ ' and `\e~' are converted to single space characters.
+
+.LI
+The default tab distance in nroff mode is now 0.8i to be compatible
+with UNIX troff.
+
+.LI
+Using the latin-1 input character 0xAD (soft hyphen) for the `shc'
+request was a bad idea.
+Instead, it is now translated to `\e%', and the default hyphenation
+character is again \e[hy].
+Note that the glyph \e[shc] is not useful for typographic purposes;
+it only exists to have glyph names for all latin-1 characters.
+.ULE
+.
+.SH 2
+Macro Packages
+
+.ULS
+.LI
+.MTO df191@\:ncf.ca "Peter Schaffter"
+has contributed a new major macro package called `mom', mainly for
+non-scientific writers, which takes care of many typographic issues.
+It comes with a complete reference (in HTML format) and some examples.
+`mom' has been designed to format documents for PostScript output only.
+
+.LI
+Two macros `AT' (AT&T) and `UC' (Univ. of California) have been added to
+the man macros for compatibility with older BSD releases.
+
+.LI
+Both the man and mdoc macro packages now use the LL and LT registers for
+setting the line and title length, respectively (similar to those
+registers in the ms macro package).
+If not set on the command line or in a macro file loaded before the macro
+package itself, they default to 78n in nroff mode and 6.5i in troff mode.
+
+.LI
+The `\-xwidth' specifier in the mdoc macro package has been removed.
+Its functionality is now integrated directly into `\-width'.
+Similarly, `\-column' has been extended to has this functionality also.
+
+.LI
+A new macro `Ex' has been added to the mdoc macro package to document an
+exit status.
+
+.LI
+`troff.man' has been split. Differences to UNIX troff are now documented
+in the new man page `groff_diff.man'.
+
+.LI
+The PSPIC macro has been extended to work with DVI output (`pspic.tmac' is
+now automatically loaded for \-Tdvi), using a dvips special to load the EPS
+file.
+
+.LI
+The trace.tmac package now traces calls to `am' also.
+Additionally, it works in compatibility mode.
+
+.LI
+`troff.1' has been split.
+Differences to UNIX troff are now documented in the new man page
+`groff_diff.7'.
+
+.LI
+`groff_mwww.7' has been renamed to `groff_www.7'.
+The file mwww.tmac has been removed.
+
+.LI
+`groff_ms.7' has been completely rewritten.
+It now contains a complete reference to the ms macros.
+
+.LI
+`groff_trace.7' documents the trace macro package.
+
+.LI
+Changes in www.tmac
+
+Note that HTML support is still in alpha change, so it is rather likely
+that both macro names and macro syntax will change.
+Some of the macros mentioned below aren't really new but haven't been
+documented properly before.
+
+.ULS
+.LI
+The following macros have been renamed:
+.RS
+.nf
+MAILTO -> MTO
+IMAGE -> IMG
+LINE -> HR
+.fi
+.RE
+
+.LI
+For consistency, the macros `URL', `FTL', and `MTO' now all have the
+address as the first parameter followed by the description.
+
+.LI
+By default, grohtml generates links to all section headings at the top
+of the document.
+Use the new `LK' macro to specify a different place.
+
+.LI
+For specifying the background color and a background image, use the
+new macros `BCL' and `BGIMG', respectively.
+
+.LI
+The macro `NHR' has been added; it suppresses the generation of top and
+bottom rules which grohtml emits by default.
+
+.LI
+The new macro `HX' determines the cut-off point for automatic link
+generation to headings.
+
+.LI
+The image position parameter names in `IMG' have been changed to `\-L',
+`\-R', and `\-C'.
+
+.LI
+New macro `PIMG' for inclusion of a PNG image (it will automatically
+convert it into an EPS file if not \-Thtml is used).
+
+.LI
+New macro `MPIMG' for putting a PNG image into the left or right margin
+(it will automatically convert it into an EPS file if not \-Thtml is used).
+
+.LI
+New macros `HnS', `HnE' to start and end a header line block.
+
+.LI
+New macro `DC' to produce dropcap characters.
+
+.LI
+New macro `HTL' to generate an HTML title line only but no H1 heading.
+
+.LI
+New macros `ULS' and `ULE' to start and end an unordered list.
+The new macro `LI' inserts a list item.
+.ULE
+.ULE
+.
+.
+.SH 2
+groff
+
+.ULS
+.LI
+The new command line `\-c' disables color output (which is always disabled
+in compatibility mode).
+.ULE
+.
+.
+.SH 2
+Nroff
+
+.ULS
+.LI
+Two new command line options `\-c' and `\-C'; the former passes `\-c' to
+grotty (switching to the old output scheme); the latter passes `\-C' to
+groff (enabling compatibility mode).
+.ULE
+.
+.
+.SH 2
+pic
+
+.ULS
+.LI
+New keywords `color' (or `colour', `colored', `coloured'), `outline' (or
+`outlined'), and `shaded' are available.
+`outline' sets the color of the outline, `shaded' the fill color, and
+`color' sets both.
+Example:
+.RS
+.ft C
+circle shaded "green" outline "black" ;
+.ft P
+.RE
+
+Filled arrows always use the outline color for filling.
+
+Color support for TeX output is not implemented yet.
+.ULE
+.
+.
+.SH 2
+Pic2graph
+
+.ULS
+.LI
+A new script contributed by
+.MTO esr@\:thyrsus.com "Eric S.\~Raymond" .
+It converts a PIC diagram into a cropped image.
+Since it uses gs and the PNM library, virtually all graphics formats
+are available for output.
+.ULE
+.
+.
+.SH 2
+Eqn2graph
+
+.ULS
+.LI
+A new script contributed by
+.MTO esr@\:thyrsus.com "Eric S.\~Raymond" .
+It converts an EQN diagram into a cropped image.
+Since it uses gs and the PNM library, virtually all graphics formats
+are available for output.
+.ULE
+.
+.
+.SH 2
+Groffer
+
+.ULS
+.LI
+A new script contributed by
+.MTO bwarken@mayn.de "Bernd Warken" .
+It displays groff files and man pages on X and tty, taking care of most
+parameters automatically.
+.ULE
+.
+.
+.SH 2
+Grog
+
+.ULS
+.LI
+Documents using the mom macro package are recognized.
+.ULE
+.
+.
+.SH 2
+grops
+
+.ULS
+.LI
+Color support has been added.
+
+.LI
+A new option `\-p' is available to select the output paper size.
+It has the same syntax as the new `papersize' keyword in the DESC file.
+.ULE
+.
+.
+.SH 2
+Grodvi
+
+.ULS
+.LI
+By default, font sizes are now available in the range 5\-10000pt, similar
+to PS fonts.
+If you want the old behaviour (i.e., font sizes at discrete values only),
+insert the following at the start of your document:
+.RS
+.nf
+.ft C
+\&.if '\e*[.T]'dvi' \e
+\&. sizes 500 600 700 800 900 1000 1095 1200 1400 1440 1600 \e
+\& 1728 1800 2000 2074 2200 2400 2488 2800 3600
+.ft P
+.fi
+.RE
+
+.LI
+A new font file HBI (using cmssbxo10; this is slanted sans serif bold
+extended) has been added.
+
+.LI
+Two font families are now available: `T' and `H'.
+
+.LI
+EC and TC fonts have been integrated.
+Use `\-mec' (calling the file ec.tmac) to switch to them.
+Those fonts give a much better coverage of the symbols defined by groff
+than the CM fonts.
+
+Note that ec.tmac must be called before any language-specific files; it
+doesn't take care of hcode values.
+
+.LI
+Color support has been added.
+For drawing commands, colors are translated to gray values currently.
+.ULE
+.
+.
+.TAG grotty
+.SH 2
+Grotty
+
+.ULS
+.LI
+Color support has been added, using the SGR (ISO\~6429, sometimes called
+ANSI color) escape sequences.
+
+.LI
+SGR escape sequences are now used by default for underlining and bold
+printing also, no longer using the backspace character trick.
+To revert to the old behaviour, use the `\-c' switch.
+
+Note that you have to use the `\-R' option of `less' to make SGR escapes
+display correctly.
+On the other hand, terminal programs and consoles like `xterm' which
+support SGR sequences natively can directly display the output of grotty.
+Consequently, the options `\-b', `\-B', `\-u', and `\-U' work only in
+combination with `\-c' and are ignored silently otherwise.
+
+For the `man' program, it may be necessary to add the `\-R' option of
+`less' to the $PAGER environment variable; alternatively, you can use
+`man's `\-P' option (or adapt its configuration file accordingly).
+See man(1) for more details.
+
+.TAG GROFF_NO_SGR
+.LI
+If the environment variable GROFF_NO_SGR is set, SGR output is disabled,
+reverting to the old behaviour.
+
+.LI
+A new special \eX'tty:\~sgr\~n' has been added; if n is non-zero or missing,
+enable SGR output (the default).
+
+.LI
+If the new option `\-i' is used (only in SGR mode), grotty sends escape
+sequences to set the italic font attribute instead of the underline
+attribute for italic fonts.
+Note that many terminals don't have support for this (including xterm).
+.ULE
+.
+.
+.SH 2
+grohtml
+
+.ULS
+.LI
+Color support for glyphs has been added.
+
+.LI
+New option `\-h' to select the style of headings in HTML output.
+
+.LI
+New option `\-b' to set the background colour to white.
+
+.LI
+New options `\-a' and `\-g' to control the number of bits for anti-aliasing
+used for text and graphics, respectively.
+Default value is\~4; 0\~means no anti-aliasing.
+
+.LI
+groff character/glyph entities now map onto HTML\~4 character entities.
+.ULE
+.
+.
+.SH 2
+Grolbp
+
+.ULS
+.LI
+Valid paper sizes are now specified as with the new `papersize' keyword
+in the DESC file.
+Specifically, the old custom paper type format `custAAAxBBB' is no longer
+supported.
+.ULE
+.
+.
+.SH 2
+Miscellaneous
+
+.ULS
+.LI
+A new manual page `ditroff.7' is available.
+
+.LI
+The groff texinfo manual will now be installed, together with a bunch
+of examples.
+
+.LI
+A new keyword `papersize' has been added to the DESC file format.
+Its argument is either
+
+.RS
+.IP \[bu]
+a predefined paper format (e.g. `A4' or `letter')
+
+.IP \[bu]
+a file name pointing to a file which must contain a paper size
+specification in its first line (e.g. `/etc/papersize')
+
+.IP \[bu]
+a custom paper size definition like `35c,4i'
+.RE
+
+See groff_font(5) for more details.
+This keyword only affects the physical dimensions of the output medium;
+grops, grolj4, and grolbp use it currently.
+troff completely ignores it.
+.ULE
+.
+.HR
+.
+\s-2\fIThis document was produced using
+.URL http://groff.ffii.org/ groff-\n[.x].\n[.y].\n[.Y] .
+.br
+The image at the top has been contributed by Imogen Mulley (born 1991),
+based on a similar picture found on the
+.URL http://www.gnu.org "GNU server" .
+.HR
+.\" EOF
diff --git a/contrib/groff/font/devX100-12/CB b/contrib/groff/font/devX100-12/CB
index d151ee3..13c25dc 100644
--- a/contrib/groff/font/devX100-12/CB
+++ b/contrib/groff/font/devX100-12/CB
@@ -1,6 +1,7 @@
name CB
spacewidth 10
charset
+--- 10,9 0 00
--- 10,1 0 040
! 10,11 0 041
" 10,11 0 042
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 10,1 0 0240
r! 10,7,3 0 0241
-¡ "
ct 10,10 0 0242
-¢ "
Po 10,10 0 0243
-£ "
Cs 10,8 0 0244
-¤ "
Ye 10,10 0 0245
-¥ "
bb 10,11,2 0 0246
-¦ "
sc 10,11,1 0 0247
-§ "
ad 10,10 0 0250
-¨ "
co 10,10 0 0251
-© "
Of 10,10 0 0252
-ª "
Fo 10,7 0 0253
-« "
no 10,7 0 0254
-¬ "
- 10,6 0 0255
hy "
-­ "
rg 10,10 0 0256
-® "
a- 10,10 0 0257
-¯ "
de 10,11 0 0260
-° "
-+- 10,9 0 0261
-± "
+t+- 10,9 0 0261
S2 10,11 0 0262
-² "
S3 10,11 0 0263
-³ "
aa 10,11 0 0264
-´ "
-µ 10,7,3 0 0265
+mc 10,7,3 0 0265
ps 10,11,1 0 0266
-¶ "
pc 10,6 0 0267
-· "
ac 10,1,3 0 0270
-¸ "
S1 10,11 0 0271
-¹ "
Om 10,10 0 0272
-º "
Fc 10,7 0 0273
-» "
14 10,11 0 0274
-¼ "
12 10,11 0 0275
-½ "
34 10,11 0 0276
-¾ "
r? 10,7,3 0 0277
-¿ "
`A 10,14 0 0300
-À "
'A 10,14 0 0301
-Á "
^A 10,14 0 0302
-Â "
~A 10,13 0 0303
-Ã "
:A 10,13 0 0304
-Ä "
oA 10,14 0 0305
-Å "
AE 10,10 0 0306
-Æ "
,C 10,10,3 0 0307
-Ç "
`E 10,14 0 0310
-È "
'E 10,14 0 0311
-É "
^E 10,14 0 0312
-Ê "
:E 10,13 0 0313
-Ë "
`I 10,14 0 0314
-Ì "
'I 10,14 0 0315
-Í "
^I 10,14 0 0316
-Î "
:I 10,13 0 0317
-Ï "
-D 10,10 0 0320
-Ð "
~N 10,13 0 0321
-Ñ "
`O 10,14 0 0322
-Ò "
'O 10,14 0 0323
-Ó "
^O 10,14 0 0324
-Ô "
~O 10,13 0 0325
-Õ "
:O 10,13 0 0326
-Ö "
-mu 10,8 0 0327
-× "
+tmu 10,8 0 0327
/O 10,11,1 0 0330
-Ø "
`U 10,14 0 0331
-Ù "
'U 10,14 0 0332
-Ú "
^U 10,14 0 0333
-Û "
:U 10,13 0 0334
-Ü "
'Y 10,14 0 0335
-Ý "
TP 10,10 0 0336
-Þ "
ss 10,11 0 0337
-ß "
`a 10,11 0 0340
-à "
'a 10,11 0 0341
-á "
^a 10,11 0 0342
-â "
~a 10,10 0 0343
-ã "
:a 10,10 0 0344
-ä "
oa 10,12 0 0345
-å "
ae 10,7 0 0346
-æ "
,c 10,7,3 0 0347
-ç "
`e 10,11 0 0350
-è "
'e 10,11 0 0351
-é "
^e 10,11 0 0352
-ê "
:e 10,10 0 0353
-ë "
`i 10,11 0 0354
-ì "
'i 10,11 0 0355
-í "
^i 10,11 0 0356
-î "
:i 10,10 0 0357
-ï "
Sd 10,12 0 0360
-ð "
~n 10,10 0 0361
-ñ "
`o 10,11 0 0362
-ò "
'o 10,11 0 0363
-ó "
^o 10,11 0 0364
-ô "
~o 10,10 0 0365
-õ "
:o 10,10 0 0366
-ö "
-di 10,9 0 0367
-÷ "
+tdi 10,9 0 0367
/o 10,8,1 0 0370
-ø "
`u 10,11 0 0371
-ù "
'u 10,11 0 0372
-ú "
^u 10,11 0 0373
-û "
:u 10,10 0 0374
-ü "
'y 10,11,3 0 0375
-ý "
Tp 10,11,3 0 0376
-þ "
:y 10,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/CBI b/contrib/groff/font/devX100-12/CBI
index f298973..b0d2ba6 100644
--- a/contrib/groff/font/devX100-12/CBI
+++ b/contrib/groff/font/devX100-12/CBI
@@ -1,6 +1,7 @@
name CBI
spacewidth 10
charset
+--- 10,9 0 00
--- 10,1 0 040
! 10,11 0 041
" 10,11 0 042
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 10,1 0 0240
r! 10,7,4 0 0241
-¡ "
ct 10,10 0 0242
-¢ "
Po 10,10 0 0243
-£ "
Cs 10,8 0 0244
-¤ "
Ye 10,10 0 0245
-¥ "
bb 10,11,2 0 0246
-¦ "
sc 10,11,1 0 0247
-§ "
ad 10,10 0 0250
-¨ "
co 10,10 0 0251
-© "
Of 10,10 0 0252
-ª "
Fo 10,7 0 0253
-« "
no 10,7 0 0254
-¬ "
- 10,6 0 0255
hy "
-­ "
rg 10,10 0 0256
-® "
a- 10,9 0 0257
-¯ "
de 10,11 0 0260
-° "
-+- 10,10 0 0261
-± "
+t+- 10,10 0 0261
S2 10,11 0 0262
-² "
S3 10,11 0 0263
-³ "
aa 10,11 0 0264
-´ "
-µ 10,7,3 0 0265
+mc 10,7,3 0 0265
ps 10,11,1 0 0266
-¶ "
pc 10,6 0 0267
-· "
ac 10,0,3 0 0270
-¸ "
S1 10,11 0 0271
-¹ "
Om 10,10 0 0272
-º "
Fc 10,7 0 0273
-» "
14 10,11 0 0274
-¼ "
12 10,11 0 0275
-½ "
34 10,11 0 0276
-¾ "
r? 10,7,4 0 0277
-¿ "
`A 10,14 0 0300
-À "
'A 10,14 0 0301
-Á "
^A 10,14 0 0302
-Â "
~A 10,13 0 0303
-Ã "
:A 10,13 0 0304
-Ä "
oA 10,14 0 0305
-Å "
AE 10,10 0 0306
-Æ "
,C 10,10,3 0 0307
-Ç "
`E 10,14 0 0310
-È "
'E 10,14 0 0311
-É "
^E 10,14 0 0312
-Ê "
:E 10,13 0 0313
-Ë "
`I 10,14 0 0314
-Ì "
'I 10,14 0 0315
-Í "
^I 10,14 0 0316
-Î "
:I 10,13 0 0317
-Ï "
-D 10,10 0 0320
-Ð "
~N 10,13 0 0321
-Ñ "
`O 10,14 0 0322
-Ò "
'O 10,14 0 0323
-Ó "
^O 10,14 0 0324
-Ô "
~O 10,13 0 0325
-Õ "
:O 10,13 0 0326
-Ö "
-mu 10,8 0 0327
-× "
+tmu 10,8 0 0327
/O 10,10 0 0330
-Ø "
`U 10,14 0 0331
-Ù "
'U 10,14 0 0332
-Ú "
^U 10,14 0 0333
-Û "
:U 10,13 0 0334
-Ü "
'Y 10,14 0 0335
-Ý "
TP 10,10 0 0336
-Þ "
ss 10,11 0 0337
-ß "
`a 10,11 0 0340
-à "
'a 10,11 0 0341
-á "
^a 10,11 0 0342
-â "
~a 10,10 0 0343
-ã "
:a 10,10 0 0344
-ä "
oa 10,11 0 0345
-å "
ae 10,7 0 0346
-æ "
,c 10,7,3 0 0347
-ç "
`e 10,11 0 0350
-è "
'e 10,11 0 0351
-é "
^e 10,11 0 0352
-ê "
:e 10,10 0 0353
-ë "
`i 10,11 0 0354
-ì "
'i 10,11 0 0355
-í "
^i 10,11 0 0356
-î "
:i 10,10 0 0357
-ï "
Sd 10,12 0 0360
-ð "
~n 10,10 0 0361
-ñ "
`o 10,11 0 0362
-ò "
'o 10,11 0 0363
-ó "
^o 10,11 0 0364
-ô "
~o 10,10 0 0365
-õ "
:o 10,10 0 0366
-ö "
-di 10,9 0 0367
-÷ "
+tdi 10,9 0 0367
/o 10,8,1 0 0370
-ø "
`u 10,11 0 0371
-ù "
'u 10,11 0 0372
-ú "
^u 10,11 0 0373
-û "
:u 10,10 0 0374
-ü "
'y 10,11,3 0 0375
-ý "
Tp 10,11,3 0 0376
-þ "
:y 10,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/CI b/contrib/groff/font/devX100-12/CI
index 3f1437f..bacffb1 100644
--- a/contrib/groff/font/devX100-12/CI
+++ b/contrib/groff/font/devX100-12/CI
@@ -1,6 +1,7 @@
name CI
spacewidth 10
charset
+--- 10,9 0 00
--- 10,1 0 040
! 10,11 0 041
" 10,11 0 042
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 10,1 0 0240
r! 10,7,4 0 0241
-¡ "
ct 10,10 0 0242
-¢ "
Po 10,10 0 0243
-£ "
Cs 10,8 0 0244
-¤ "
Ye 10,10 0 0245
-¥ "
bb 10,11,2 0 0246
-¦ "
sc 10,11,1 0 0247
-§ "
ad 10,10 0 0250
-¨ "
co 10,10 0 0251
-© "
Of 10,10 0 0252
-ª "
Fo 10,7 0 0253
-« "
no 10,6 0 0254
-¬ "
- 10,5 0 0255
hy "
-­ "
rg 10,10 0 0256
-® "
a- 10,10 0 0257
-¯ "
de 10,11 0 0260
-° "
-+- 10,9 0 0261
-± "
+t+- 10,9 0 0261
S2 10,11 0 0262
-² "
S3 10,11 0 0263
-³ "
aa 10,11 0 0264
-´ "
-µ 10,7,3 0 0265
+mc 10,7,3 0 0265
ps 10,11,1 0 0266
-¶ "
pc 10,6 0 0267
-· "
ac 10,0,3 0 0270
-¸ "
S1 10,11 0 0271
-¹ "
Om 10,10 0 0272
-º "
Fc 10,7 0 0273
-» "
14 10,11 0 0274
-¼ "
12 10,11 0 0275
-½ "
34 10,11 0 0276
-¾ "
r? 10,7,3 0 0277
-¿ "
`A 10,14 0 0300
-À "
'A 10,14 0 0301
-Á "
^A 10,14 0 0302
-Â "
~A 10,13 0 0303
-Ã "
:A 10,13 0 0304
-Ä "
oA 10,14 0 0305
-Å "
AE 10,10 0 0306
-Æ "
,C 10,10,3 0 0307
-Ç "
`E 10,14 0 0310
-È "
'E 10,14 0 0311
-É "
^E 10,14 0 0312
-Ê "
:E 10,13 0 0313
-Ë "
`I 10,14 0 0314
-Ì "
'I 10,14 0 0315
-Í "
^I 10,14 0 0316
-Î "
:I 10,13 0 0317
-Ï "
-D 10,10 0 0320
-Ð "
~N 10,13 0 0321
-Ñ "
`O 10,14 0 0322
-Ò "
'O 10,14 0 0323
-Ó "
^O 10,14 0 0324
-Ô "
~O 10,13 0 0325
-Õ "
:O 10,13 0 0326
-Ö "
-mu 10,8 0 0327
-× "
+tmu 10,8 0 0327
/O 10,10 0 0330
-Ø "
`U 10,14 0 0331
-Ù "
'U 10,14 0 0332
-Ú "
^U 10,14 0 0333
-Û "
:U 10,13 0 0334
-Ü "
'Y 10,14 0 0335
-Ý "
TP 10,10 0 0336
-Þ "
ss 10,11 0 0337
-ß "
`a 10,11 0 0340
-à "
'a 10,11 0 0341
-á "
^a 10,11 0 0342
-â "
~a 10,10 0 0343
-ã "
:a 10,10 0 0344
-ä "
oa 10,11 0 0345
-å "
ae 10,7 0 0346
-æ "
,c 10,7,3 0 0347
-ç "
`e 10,11 0 0350
-è "
'e 10,11 0 0351
-é "
^e 10,11 0 0352
-ê "
:e 10,10 0 0353
-ë "
`i 10,11 0 0354
-ì "
'i 10,11 0 0355
-í "
^i 10,11 0 0356
-î "
:i 10,10 0 0357
-ï "
Sd 10,11 0 0360
-ð "
~n 10,10 0 0361
-ñ "
`o 10,11 0 0362
-ò "
'o 10,11 0 0363
-ó "
^o 10,11 0 0364
-ô "
~o 10,10 0 0365
-õ "
:o 10,10 0 0366
-ö "
-di 10,8 0 0367
-÷ "
+tdi 10,8 0 0367
/o 10,8,1 0 0370
-ø "
`u 10,11 0 0371
-ù "
'u 10,11 0 0372
-ú "
^u 10,11 0 0373
-û "
:u 10,10 0 0374
-ü "
'y 10,11,3 0 0375
-ý "
Tp 10,11,3 0 0376
-þ "
:y 10,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/CR b/contrib/groff/font/devX100-12/CR
index 895c5dd..33f1454 100644
--- a/contrib/groff/font/devX100-12/CR
+++ b/contrib/groff/font/devX100-12/CR
@@ -1,6 +1,7 @@
name CR
spacewidth 10
charset
+--- 10,9 0 00
--- 10,1 0 040
! 10,11 0 041
" 10,11 0 042
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 10,1 0 0240
r! 10,7,3 0 0241
-¡ "
ct 10,10 0 0242
-¢ "
Po 10,10 0 0243
-£ "
Cs 10,8 0 0244
-¤ "
Ye 10,10 0 0245
-¥ "
bb 10,10,2 0 0246
-¦ "
sc 10,11,1 0 0247
-§ "
ad 10,10 0 0250
-¨ "
co 10,10 0 0251
-© "
Of 10,10 0 0252
-ª "
Fo 10,7 0 0253
-« "
no 10,6 0 0254
-¬ "
- 10,5 0 0255
hy "
-­ "
rg 10,10 0 0256
-® "
a- 10,9 0 0257
-¯ "
de 10,11 0 0260
-° "
-+- 10,9 0 0261
-± "
+t+- 10,9 0 0261
S2 10,11 0 0262
-² "
S3 10,11 0 0263
-³ "
aa 10,11 0 0264
-´ "
-µ 10,7,3 0 0265
+mc 10,7,3 0 0265
ps 10,11,1 0 0266
-¶ "
pc 10,6 0 0267
-· "
ac 10,1,3 0 0270
-¸ "
S1 10,11 0 0271
-¹ "
Om 10,10 0 0272
-º "
Fc 10,7 0 0273
-» "
14 10,11 0 0274
-¼ "
12 10,11 0 0275
-½ "
34 10,11 0 0276
-¾ "
r? 10,7,3 0 0277
-¿ "
`A 10,14 0 0300
-À "
'A 10,14 0 0301
-Á "
^A 10,14 0 0302
-Â "
~A 10,13 0 0303
-Ã "
:A 10,13 0 0304
-Ä "
oA 10,14 0 0305
-Å "
AE 10,10 0 0306
-Æ "
,C 10,10,3 0 0307
-Ç "
`E 10,14 0 0310
-È "
'E 10,14 0 0311
-É "
^E 10,14 0 0312
-Ê "
:E 10,13 0 0313
-Ë "
`I 10,14 0 0314
-Ì "
'I 10,14 0 0315
-Í "
^I 10,14 0 0316
-Î "
:I 10,13 0 0317
-Ï "
-D 10,10 0 0320
-Ð "
~N 10,13 0 0321
-Ñ "
`O 10,14 0 0322
-Ò "
'O 10,14 0 0323
-Ó "
^O 10,14 0 0324
-Ô "
~O 10,13 0 0325
-Õ "
:O 10,13 0 0326
-Ö "
-mu 10,8 0 0327
-× "
+tmu 10,8 0 0327
/O 10,10 0 0330
-Ø "
`U 10,14 0 0331
-Ù "
'U 10,14 0 0332
-Ú "
^U 10,14 0 0333
-Û "
:U 10,13 0 0334
-Ü "
'Y 10,14 0 0335
-Ý "
TP 10,10 0 0336
-Þ "
ss 10,11 0 0337
-ß "
`a 10,11 0 0340
-à "
'a 10,11 0 0341
-á "
^a 10,11 0 0342
-â "
~a 10,10 0 0343
-ã "
:a 10,10 0 0344
-ä "
oa 10,12 0 0345
-å "
ae 10,7 0 0346
-æ "
,c 10,7,3 0 0347
-ç "
`e 10,11 0 0350
-è "
'e 10,11 0 0351
-é "
^e 10,11 0 0352
-ê "
:e 10,10 0 0353
-ë "
`i 10,11 0 0354
-ì "
'i 10,11 0 0355
-í "
^i 10,11 0 0356
-î "
:i 10,10 0 0357
-ï "
Sd 10,11 0 0360
-ð "
~n 10,10 0 0361
-ñ "
`o 10,11 0 0362
-ò "
'o 10,11 0 0363
-ó "
^o 10,11 0 0364
-ô "
~o 10,10 0 0365
-õ "
:o 10,10 0 0366
-ö "
-di 10,8 0 0367
-÷ "
+tdi 10,8 0 0367
/o 10,8,1 0 0370
-ø "
`u 10,11 0 0371
-ù "
'u 10,11 0 0372
-ú "
^u 10,11 0 0373
-û "
:u 10,10 0 0374
-ü "
'y 10,11,3 0 0375
-ý "
Tp 10,11,3 0 0376
-þ "
:y 10,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/HB b/contrib/groff/font/devX100-12/HB
index 9e91e0b..23aedb4 100644
--- a/contrib/groff/font/devX100-12/HB
+++ b/contrib/groff/font/devX100-12/HB
@@ -1,6 +1,7 @@
name HB
spacewidth 5
charset
+--- 12,11 0 00
--- 5,1 0 040
! 6,12 0 041
" 8,12 0 042
@@ -11,14 +12,14 @@ $ 9,13,1 0 044
Do "
% 14,12 0 045
& 12,12 0 046
-' 5,12 0 047
+' 4,12 0 047
cq "
( 6,12,3 0 050
) 6,12,3 0 051
* 6,12 0 052
+ 10,8 0 053
, 4,2,3 0 054
-\- 10,5 0 055
+\- 5,5 0 055
. 4,2 0 056
/ 5,12 0 057
sl "
@@ -42,12 +43,12 @@ eq "
@ 16,12,2 0 0100
at "
A 12,12 0 0101
-B 12,12 0 0102
+B 11,12 0 0102
C 12,12 0 0103
D 12,12 0 0104
-E 11,12 0 0105
+E 10,12 0 0105
F 10,12 0 0106
-G 13,12 0 0107
+G 12,12 0 0107
H 12,12 0 0110
I 4,12 0 0111
J 9,12 0 0112
@@ -77,20 +78,20 @@ rB "
a^ "
ha "
_ 9,0,3 0 0137
-` 5,12 0 0140
+` 6,13 0 0140
oq "
a 9,9 0 0141
b 10,12 0 0142
c 9,9 0 0143
d 10,12 0 0144
-e 9,9 0 0145
-f 5,12 0 0146
+e 10,9 0 0145
+f 6,12 0 0146
g 10,9,4 0 0147
h 10,12 0 0150
i 4,12 0 0151
j 5,12,4 0 0152
k 9,12 0 0153
-l 5,12 0 0154
+l 4,12 0 0154
m 14,9 0 0155
n 10,9 0 0156
o 10,9 0 0157
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 5,1 0 0240
r! 6,9,3 0 0241
-¡ "
ct 9,10,1 0 0242
-¢ "
Po 9,12 0 0243
-£ "
Cs 9,9 0 0244
-¤ "
Ye 9,12 0 0245
-¥ "
bb 5,12,4 0 0246
-¦ "
sc 9,12,3 0 0247
-§ "
ad 6,12 0 0250
-¨ "
co 12,12 0 0251
-© "
Of 6,12 0 0252
-ª "
Fo 9,8 0 0253
-« "
no 10,7 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,12 0 0256
-® "
a- 6,11 0 0257
-¯ "
de 7,12 0 0260
-° "
-+- 10,11 0 0261
-± "
+t+- 10,11 0 0261
S2 6,12 0 0262
-² "
S3 6,12 0 0263
-³ "
aa 6,13 0 0264
-´ "
-µ 10,9,3 0 0265
+mc 10,9,3 0 0265
ps 9,12,3 0 0266
-¶ "
pc 5,6 0 0267
-· "
ac 6,0,4 0 0270
-¸ "
S1 6,12 0 0271
-¹ "
Om 6,12 0 0272
-º "
Fc 9,8 0 0273
-» "
14 14,12 0 0274
-¼ "
12 14,12 0 0275
-½ "
34 14,12 0 0276
-¾ "
r? 10,9,3 0 0277
-¿ "
`A 12,16 0 0300
-À "
'A 12,16 0 0301
-Á "
^A 12,16 0 0302
-Â "
~A 12,15 0 0303
-Ã "
:A 12,15 0 0304
-Ä "
oA 12,16 0 0305
-Å "
-AE 16,12 0 0306
-Æ "
+AE 15,12 0 0306
,C 12,12,4 0 0307
-Ç "
-`E 11,16 0 0310
-È "
-'E 11,16 0 0311
-É "
-^E 11,16 0 0312
-Ê "
-:E 11,15 0 0313
-Ë "
+`E 10,16 0 0310
+'E 10,16 0 0311
+^E 10,16 0 0312
+:E 10,15 0 0313
`I 4,16 0 0314
-Ì "
'I 4,16 0 0315
-Í "
^I 4,16 0 0316
-Î "
:I 4,15 0 0317
-Ï "
-D 12,12 0 0320
-Ð "
~N 12,15 0 0321
-Ñ "
`O 13,16 0 0322
-Ò "
'O 13,16 0 0323
-Ó "
^O 13,16 0 0324
-Ô "
~O 13,15 0 0325
-Õ "
:O 13,15 0 0326
-Ö "
-mu 10,9 0 0327
-× "
+tmu 10,9 0 0327
/O 13,12 0 0330
-Ø "
`U 12,16 0 0331
-Ù "
'U 12,16 0 0332
-Ú "
^U 12,16 0 0333
-Û "
:U 12,15 0 0334
-Ü "
'Y 11,16 0 0335
-Ý "
TP 11,12 0 0336
-Þ "
ss 10,12 0 0337
-ß "
`a 9,13 0 0340
-à "
'a 9,13 0 0341
-á "
^a 9,13 0 0342
-â "
~a 9,12 0 0343
-ã "
:a 9,12 0 0344
-ä "
oa 9,13 0 0345
-å "
ae 15,9 0 0346
-æ "
,c 9,9,4 0 0347
-ç "
-`e 9,13 0 0350
-è "
-'e 9,13 0 0351
-é "
-^e 9,13 0 0352
-ê "
-:e 9,12 0 0353
-ë "
+`e 10,13 0 0350
+'e 10,13 0 0351
+^e 10,13 0 0352
+:e 10,12 0 0353
`i 4,13 0 0354
-ì "
'i 4,13 0 0355
-í "
^i 4,13 0 0356
-î "
:i 4,12 0 0357
-ï "
Sd 10,12 0 0360
-ð "
~n 10,12 0 0361
-ñ "
`o 10,13 0 0362
-ò "
'o 10,13 0 0363
-ó "
^o 10,13 0 0364
-ô "
~o 10,12 0 0365
-õ "
:o 10,12 0 0366
-ö "
-di 10,8 0 0367
-÷ "
+tdi 10,8 0 0367
/o 10,9 0 0370
-ø "
`u 10,13 0 0371
-ù "
'u 10,13 0 0372
-ú "
^u 10,13 0 0373
-û "
:u 10,12 0 0374
-ü "
'y 9,13,4 0 0375
-ý "
Tp 10,12,4 0 0376
-þ "
:y 9,12,4 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/HBI b/contrib/groff/font/devX100-12/HBI
index 12011ca..c26bc33 100644
--- a/contrib/groff/font/devX100-12/HBI
+++ b/contrib/groff/font/devX100-12/HBI
@@ -1,6 +1,7 @@
name HBI
spacewidth 5
charset
+--- 12,11 0 00
--- 5,1 0 040
! 6,12 0 041
" 8,12 0 042
@@ -11,20 +12,20 @@ $ 9,13,1 0 044
Do "
% 14,12 0 045
& 12,12 0 046
-' 5,12 0 047
+' 4,12 0 047
cq "
( 6,12,3 0 050
) 6,12,3 0 051
* 6,12 0 052
+ 10,8 0 053
, 4,2,3 0 054
-\- 10,5 0 055
+\- 5,5 0 055
. 4,2 0 056
/ 5,12 0 057
sl "
-0 10,12 0 060
+0 9,12 0 060
1 9,12 0 061
-2 10,12 0 062
+2 9,12 0 062
3 9,12 0 063
4 9,12 0 064
5 9,12 0 065
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 9,0,3 0 0137
-` 5,12 0 0140
+` 6,13 0 0140
oq "
a 9,9 0 0141
b 10,12 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 5,1 0 0240
r! 6,9,3 0 0241
-¡ "
ct 9,10,1 0 0242
-¢ "
Po 9,12 0 0243
-£ "
Cs 9,9 0 0244
-¤ "
Ye 9,12 0 0245
-¥ "
bb 5,12,4 0 0246
-¦ "
sc 9,12,3 0 0247
-§ "
ad 6,12 0 0250
-¨ "
co 12,12 0 0251
-© "
Of 6,12 0 0252
-ª "
Fo 9,8 0 0253
-« "
no 10,7 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,12 0 0256
-® "
a- 6,11 0 0257
-¯ "
de 7,12 0 0260
-° "
-+- 10,11 0 0261
-± "
+t+- 10,11 0 0261
S2 6,12 0 0262
-² "
S3 6,12 0 0263
-³ "
aa 6,13 0 0264
-´ "
-µ 10,9,4 0 0265
+mc 10,9,4 0 0265
ps 9,12,3 0 0266
-¶ "
pc 5,6 0 0267
-· "
ac 6,0,4 0 0270
-¸ "
S1 6,12 0 0271
-¹ "
Om 6,12 0 0272
-º "
Fc 9,8 0 0273
-» "
14 14,12 0 0274
-¼ "
12 14,12 0 0275
-½ "
34 14,12 0 0276
-¾ "
r? 10,9,3 0 0277
-¿ "
`A 12,16 0 0300
-À "
'A 12,16 0 0301
-Á "
^A 12,16 0 0302
-Â "
~A 12,15 0 0303
-Ã "
:A 12,15 0 0304
-Ä "
oA 12,15 0 0305
-Å "
AE 17,12 0 0306
-Æ "
,C 12,12,4 0 0307
-Ç "
`E 11,16 0 0310
-È "
'E 11,16 0 0311
-É "
^E 11,16 0 0312
-Ê "
:E 11,15 0 0313
-Ë "
`I 4,16 0 0314
-Ì "
'I 4,16 0 0315
-Í "
^I 4,16 0 0316
-Î "
:I 4,15 0 0317
-Ï "
-D 12,12 0 0320
-Ð "
~N 12,15 0 0321
-Ñ "
`O 13,16 0 0322
-Ò "
'O 13,16 0 0323
-Ó "
^O 13,16 0 0324
-Ô "
~O 13,15 0 0325
-Õ "
:O 13,15 0 0326
-Ö "
-mu 10,8 0 0327
-× "
+tmu 10,8 0 0327
/O 13,12 0 0330
-Ø "
`U 12,16 0 0331
-Ù "
'U 12,16 0 0332
-Ú "
^U 12,16 0 0333
-Û "
:U 12,15 0 0334
-Ü "
'Y 11,16 0 0335
-Ý "
TP 11,12 0 0336
-Þ "
ss 10,12 0 0337
-ß "
`a 9,13 0 0340
-à "
'a 9,13 0 0341
-á "
^a 9,13 0 0342
-â "
~a 9,12 0 0343
-ã "
:a 9,12 0 0344
-ä "
oa 9,13 0 0345
-å "
ae 15,9 0 0346
-æ "
,c 9,9,4 0 0347
-ç "
`e 9,13 0 0350
-è "
'e 9,13 0 0351
-é "
^e 9,13 0 0352
-ê "
:e 9,12 0 0353
-ë "
`i 4,13 0 0354
-ì "
'i 4,13 0 0355
-í "
^i 4,13 0 0356
-î "
:i 4,12 0 0357
-ï "
Sd 10,13 0 0360
-ð "
~n 10,12 0 0361
-ñ "
`o 10,13 0 0362
-ò "
'o 10,13 0 0363
-ó "
^o 10,13 0 0364
-ô "
~o 10,12 0 0365
-õ "
:o 10,12 0 0366
-ö "
-di 10,8 0 0367
-÷ "
+tdi 10,8 0 0367
/o 10,9 0 0370
-ø "
`u 10,13 0 0371
-ù "
'u 10,13 0 0372
-ú "
^u 10,13 0 0373
-û "
:u 10,12 0 0374
-ü "
'y 9,13,4 0 0375
-ý "
Tp 10,12,4 0 0376
-þ "
:y 9,12,4 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/HI b/contrib/groff/font/devX100-12/HI
index c5be9f9..532a7e6 100644
--- a/contrib/groff/font/devX100-12/HI
+++ b/contrib/groff/font/devX100-12/HI
@@ -1,6 +1,7 @@
name HI
spacewidth 5
charset
+--- 12,11 0 00
--- 5,1 0 040
! 5,12 0 041
" 6,12 0 042
@@ -11,14 +12,14 @@ $ 9,13,1 0 044
Do "
% 14,12 0 045
& 11,12 0 046
-' 4,12 0 047
+' 3,12 0 047
cq "
( 6,12,3 0 050
) 6,12,3 0 051
* 6,12 0 052
+ 10,9 0 053
, 4,2,2 0 054
-\- 10,5 0 055
+\- 5,5 0 055
. 4,2 0 056
/ 5,12 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 9,0,3 0 0137
-` 4,12 0 0140
+` 6,13 0 0140
oq "
a 9,9 0 0141
b 9,12 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 5,1 0 0240
r! 6,9,3 0 0241
-¡ "
ct 9,10,1 0 0242
-¢ "
Po 9,12 0 0243
-£ "
Cs 9,10 0 0244
-¤ "
Ye 9,12 0 0245
-¥ "
bb 4,12,4 0 0246
-¦ "
sc 9,12,3 0 0247
-§ "
ad 5,12 0 0250
-¨ "
co 12,12 0 0251
-© "
Of 6,12 0 0252
-ª "
Fo 9,8 0 0253
-« "
no 10,6 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,12 0 0256
-® "
a- 6,11 0 0257
-¯ "
de 7,12 0 0260
-° "
-+- 10,11 0 0261
-± "
+t+- 10,11 0 0261
S2 6,12 0 0262
-² "
S3 6,12 0 0263
-³ "
aa 6,13 0 0264
-´ "
-µ 9,9,4 0 0265
+mc 9,9,4 0 0265
ps 9,12,3 0 0266
-¶ "
pc 5,7 0 0267
-· "
ac 6,0,4 0 0270
-¸ "
S1 6,12 0 0271
-¹ "
Om 6,12 0 0272
-º "
Fc 9,8 0 0273
-» "
14 14,12 0 0274
-¼ "
12 14,13 0 0275
-½ "
34 14,12 0 0276
-¾ "
r? 10,9,3 0 0277
-¿ "
`A 11,16 0 0300
-À "
'A 11,16 0 0301
-Á "
^A 11,16 0 0302
-Â "
~A 11,15 0 0303
-Ã "
:A 11,15 0 0304
-Ä "
oA 11,15 0 0305
-Å "
AE 16,12 0 0306
-Æ "
,C 12,12,3 0 0307
-Ç "
`E 11,16 0 0310
-È "
'E 11,16 0 0311
-É "
^E 11,16 0 0312
-Ê "
:E 11,15 0 0313
-Ë "
`I 4,16 0 0314
-Ì "
'I 4,16 0 0315
-Í "
^I 4,16 0 0316
-Î "
:I 4,15 0 0317
-Ï "
-D 12,12 0 0320
-Ð "
~N 12,15 0 0321
-Ñ "
`O 13,16 0 0322
-Ò "
'O 13,16 0 0323
-Ó "
^O 13,16 0 0324
-Ô "
~O 13,15 0 0325
-Õ "
:O 13,15 0 0326
-Ö "
-mu 10,8 0 0327
-× "
+tmu 10,8 0 0327
/O 13,12 0 0330
-Ø "
`U 12,16 0 0331
-Ù "
'U 12,16 0 0332
-Ú "
^U 12,16 0 0333
-Û "
:U 12,15 0 0334
-Ü "
'Y 11,16 0 0335
-Ý "
TP 11,12 0 0336
-Þ "
ss 10,12 0 0337
-ß "
`a 9,13 0 0340
-à "
'a 9,13 0 0341
-á "
^a 9,13 0 0342
-â "
~a 9,12 0 0343
-ã "
:a 9,12 0 0344
-ä "
oa 9,13 0 0345
-å "
ae 15,9 0 0346
-æ "
,c 8,9,3 0 0347
-ç "
`e 9,13 0 0350
-è "
'e 9,13 0 0351
-é "
^e 9,13 0 0352
-ê "
:e 9,12 0 0353
-ë "
`i 4,13 0 0354
-ì "
'i 4,13 0 0355
-í "
^i 4,13 0 0356
-î "
:i 4,12 0 0357
-ï "
Sd 9,12 0 0360
-ð "
~n 9,12 0 0361
-ñ "
`o 9,13 0 0362
-ò "
'o 9,13 0 0363
-ó "
^o 9,13 0 0364
-ô "
~o 9,12 0 0365
-õ "
:o 9,12 0 0366
-ö "
-di 10,9 0 0367
-÷ "
+tdi 10,9 0 0367
/o 10,9 0 0370
-ø "
`u 9,13 0 0371
-ù "
'u 9,13 0 0372
-ú "
^u 9,13 0 0373
-û "
:u 9,12 0 0374
-ü "
'y 8,13,4 0 0375
-ý "
Tp 9,12,4 0 0376
-þ "
:y 8,12,4 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/HR b/contrib/groff/font/devX100-12/HR
index 55d6bf5..b09ff12 100644
--- a/contrib/groff/font/devX100-12/HR
+++ b/contrib/groff/font/devX100-12/HR
@@ -1,6 +1,7 @@
name HR
spacewidth 5
charset
+--- 12,11 0 00
--- 5,1 0 040
! 5,12 0 041
" 6,12 0 042
@@ -11,14 +12,14 @@ $ 9,13,2 0 044
Do "
% 14,12 0 045
& 11,12 0 046
-' 4,12 0 047
+' 3,12 0 047
cq "
( 6,12,4 0 050
) 6,12,4 0 051
* 6,12 0 052
+ 10,9 0 053
, 4,2,2 0 054
-\- 10,5 0 055
+\- 5,5 0 055
. 4,2 0 056
/ 5,12 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 9,0,3 0 0137
-` 4,12 0 0140
+` 6,13 0 0140
oq "
a 9,9 0 0141
b 9,12 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 5,1 0 0240
r! 6,9,3 0 0241
-¡ "
ct 9,11,2 0 0242
-¢ "
Po 9,12 0 0243
-£ "
Cs 9,10 0 0244
-¤ "
Ye 9,12 0 0245
-¥ "
bb 4,12,4 0 0246
-¦ "
sc 9,12,3 0 0247
-§ "
ad 5,12 0 0250
-¨ "
co 12,12 0 0251
-© "
Of 6,12 0 0252
-ª "
Fo 9,8 0 0253
-« "
no 10,6 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,12 0 0256
-® "
a- 6,11 0 0257
-¯ "
de 7,12 0 0260
-° "
-+- 10,11 0 0261
-± "
+t+- 10,11 0 0261
S2 6,12 0 0262
-² "
S3 6,12 0 0263
-³ "
aa 6,13 0 0264
-´ "
-µ 9,9,4 0 0265
+mc 9,9,4 0 0265
ps 9,12,3 0 0266
-¶ "
pc 5,6 0 0267
-· "
ac 6,0,4 0 0270
-¸ "
S1 6,12 0 0271
-¹ "
Om 6,12 0 0272
-º "
Fc 9,8 0 0273
-» "
14 14,12 0 0274
-¼ "
12 14,13 0 0275
-½ "
34 14,12 0 0276
-¾ "
r? 10,9,3 0 0277
-¿ "
`A 11,16 0 0300
-À "
'A 11,16 0 0301
-Á "
^A 11,16 0 0302
-Â "
~A 11,15 0 0303
-Ã "
:A 11,15 0 0304
-Ä "
oA 11,15 0 0305
-Å "
AE 16,12 0 0306
-Æ "
,C 12,12,4 0 0307
-Ç "
`E 11,16 0 0310
-È "
'E 11,16 0 0311
-É "
^E 11,16 0 0312
-Ê "
:E 11,15 0 0313
-Ë "
`I 4,16 0 0314
-Ì "
'I 4,16 0 0315
-Í "
^I 4,16 0 0316
-Î "
:I 4,15 0 0317
-Ï "
-D 12,12 0 0320
-Ð "
~N 12,15 0 0321
-Ñ "
`O 13,16 0 0322
-Ò "
'O 13,16 0 0323
-Ó "
^O 13,16 0 0324
-Ô "
~O 13,15 0 0325
-Õ "
:O 13,15 0 0326
-Ö "
-mu 10,8 0 0327
-× "
+tmu 10,8 0 0327
/O 13,13,1 0 0330
-Ø "
`U 12,16 0 0331
-Ù "
'U 12,16 0 0332
-Ú "
^U 12,16 0 0333
-Û "
:U 12,15 0 0334
-Ü "
'Y 11,16 0 0335
-Ý "
TP 11,12 0 0336
-Þ "
ss 10,12 0 0337
-ß "
`a 9,13 0 0340
-à "
'a 9,13 0 0341
-á "
^a 9,13 0 0342
-â "
~a 9,12 0 0343
-ã "
:a 9,12 0 0344
-ä "
oa 9,13 0 0345
-å "
ae 15,9 0 0346
-æ "
,c 8,9,4 0 0347
-ç "
`e 9,13 0 0350
-è "
'e 9,13 0 0351
-é "
^e 9,13 0 0352
-ê "
:e 9,12 0 0353
-ë "
`i 4,13 0 0354
-ì "
'i 4,13 0 0355
-í "
^i 4,13 0 0356
-î "
:i 4,12 0 0357
-ï "
Sd 9,12 0 0360
-ð "
~n 9,12 0 0361
-ñ "
`o 9,13 0 0362
-ò "
'o 9,13 0 0363
-ó "
^o 9,13 0 0364
-ô "
~o 9,12 0 0365
-õ "
:o 9,12 0 0366
-ö "
-di 10,9 0 0367
-÷ "
+tdi 10,9 0 0367
/o 10,10 0 0370
-ø "
`u 9,13 0 0371
-ù "
'u 9,13 0 0372
-ú "
^u 9,13 0 0373
-û "
:u 9,12 0 0374
-ü "
'y 8,13,3 0 0375
-ý "
Tp 9,12,4 0 0376
-þ "
:y 8,12,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/NB b/contrib/groff/font/devX100-12/NB
index 975de35..6e20749 100644
--- a/contrib/groff/font/devX100-12/NB
+++ b/contrib/groff/font/devX100-12/NB
@@ -1,6 +1,7 @@
name NB
spacewidth 4
charset
+--- 15,11 0 00
--- 4,1 0 040
! 5,12 0 041
" 6,12 0 042
@@ -18,19 +19,19 @@ cq "
* 8,12 0 052
+ 10,8 0 053
, 5,3,3 0 054
-\- 10,5 0 055
+\- 5,5 0 055
. 5,3 0 056
/ 5,12 0 057
sl "
0 10,12 0 060
-1 9,12 0 061
-2 9,12 0 062
+1 10,12 0 061
+2 10,12 0 062
3 10,12 0 063
-4 9,12 0 064
+4 10,12 0 064
5 10,12 0 065
-6 9,12 0 066
-7 9,12 0 067
-8 9,12 0 070
+6 10,12 0 066
+7 10,12 0 067
+8 10,12 0 070
9 10,12 0 071
: 5,8 0 072
; 5,8,3 0 073
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 8,0,2 0 0137
-` 4,12 0 0140
+` 6,12 0 0140
oq "
a 10,8 0 0141
b 11,12 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 5,9,3 0 0241
-¡ "
ct 10,10,2 0 0242
-¢ "
Po 10,12 0 0243
-£ "
Cs 10,10 0 0244
-¤ "
Ye 10,12 0 0245
-¥ "
bb 10,12 0 0246
-¦ "
sc 9,12,3 0 0247
-§ "
ad 6,11 0 0250
-¨ "
co 12,12 0 0251
-© "
Of 6,12 0 0252
-ª "
Fo 8,7 0 0253
-« "
no 10,7 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,12 0 0256
-® "
a- 6,11 0 0257
-¯ "
de 7,12 0 0260
-° "
-+- 10,9 0 0261
-± "
+t+- 10,9 0 0261
S2 6,12 0 0262
-² "
S3 6,12 0 0263
-³ "
aa 6,12 0 0264
-´ "
-µ 11,8,3 0 0265
+mc 11,8,3 0 0265
ps 12,12 0 0266
-¶ "
pc 5,6 0 0267
-· "
ac 6,1,3 0 0270
-¸ "
S1 6,12 0 0271
-¹ "
Om 6,12 0 0272
-º "
Fc 8,7 0 0273
-» "
14 14,12 0 0274
-¼ "
12 14,12 0 0275
-½ "
34 14,12 0 0276
-¾ "
r? 8,9,3 0 0277
-¿ "
`A 13,16 0 0300
-À "
'A 13,16 0 0301
-Á "
^A 13,16 0 0302
-Â "
~A 13,15 0 0303
-Ã "
:A 13,15 0 0304
-Ä "
oA 13,16 0 0305
-Å "
AE 16,12 0 0306
-Æ "
,C 13,12,3 0 0307
-Ç "
`E 12,16 0 0310
-È "
'E 12,16 0 0311
-É "
^E 12,16 0 0312
-Ê "
:E 12,15 0 0313
-Ë "
`I 7,16 0 0314
-Ì "
'I 7,16 0 0315
-Í "
^I 7,16 0 0316
-Î "
:I 7,15 0 0317
-Ï "
-D 14,12 0 0320
-Ð "
~N 14,15 0 0321
-Ñ "
`O 14,16 0 0322
-Ò "
'O 14,16 0 0323
-Ó "
^O 14,16 0 0324
-Ô "
~O 14,15 0 0325
-Õ "
:O 14,15 0 0326
-Ö "
-mu 10,8 0 0327
-× "
+tmu 10,8 0 0327
/O 14,13,1 0 0330
-Ø "
`U 14,16 0 0331
-Ù "
'U 14,16 0 0332
-Ú "
^U 14,16 0 0333
-Û "
:U 14,15 0 0334
-Ü "
'Y 12,16 0 0335
-Ý "
TP 13,12 0 0336
-Þ "
ss 10,12 0 0337
-ß "
`a 10,12 0 0340
-à "
'a 10,12 0 0341
-á "
^a 10,12 0 0342
-â "
~a 10,11 0 0343
-ã "
:a 10,11 0 0344
-ä "
oa 10,12 0 0345
-å "
ae 15,8 0 0346
-æ "
,c 9,8,3 0 0347
-ç "
`e 10,12 0 0350
-è "
'e 10,12 0 0351
-é "
^e 10,12 0 0352
-ê "
:e 10,11 0 0353
-ë "
`i 6,12 0 0354
-ì "
'i 6,12 0 0355
-í "
^i 6,12 0 0356
-î "
:i 6,11 0 0357
-ï "
Sd 11,13 0 0360
-ð "
~n 11,11 0 0361
-ñ "
`o 11,12 0 0362
-ò "
'o 11,12 0 0363
-ó "
^o 11,12 0 0364
-ô "
~o 11,11 0 0365
-õ "
:o 11,11 0 0366
-ö "
-di 10,8 0 0367
-÷ "
+tdi 10,8 0 0367
/o 10,10,2 0 0370
-ø "
`u 11,12 0 0371
-ù "
'u 11,12 0 0372
-ú "
^u 11,12 0 0373
-û "
:u 11,11 0 0374
-ü "
'y 10,12,3 0 0375
-ý "
Tp 11,12,3 0 0376
-þ "
:y 10,11,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/NBI b/contrib/groff/font/devX100-12/NBI
index d67e0e4..f4e3b4c 100644
--- a/contrib/groff/font/devX100-12/NBI
+++ b/contrib/groff/font/devX100-12/NBI
@@ -1,6 +1,7 @@
name NBI
spacewidth 4
charset
+--- 14,11 0 00
--- 4,1 0 040
! 6,12 0 041
" 7,12 0 042
@@ -11,14 +12,14 @@ $ 9,14,1 0 044
Do "
% 15,12 0 045
& 15,12 0 046
-' 4,12 0 047
+' 5,12 0 047
cq "
( 7,12,2 0 050
) 7,12,2 0 051
* 8,12 0 052
+ 10,8 0 053
, 5,3,3 0 054
-\- 10,5 0 055
+\- 5,5 0 055
. 5,3 0 056
/ 5,12 0 057
sl "
@@ -27,8 +28,8 @@ sl "
2 9,12 0 062
3 9,12 0 063
4 9,12 0 064
-5 10,12 0 065
-6 10,12 0 066
+5 9,12 0 065
+6 9,12 0 066
7 9,12 0 067
8 9,12 0 070
9 9,12 0 071
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 8,0,3 0 0137
-` 4,12 0 0140
+` 6,12 0 0140
oq "
a 11,8 0 0141
b 10,12 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 6,9,3 0 0241
-¡ "
ct 10,10,2 0 0242
-¢ "
Po 10,12 0 0243
-£ "
Cs 10,10 0 0244
-¤ "
Ye 10,12 0 0245
-¥ "
bb 10,12 0 0246
-¦ "
sc 9,12,3 0 0247
-§ "
ad 6,11 0 0250
-¨ "
co 12,12 0 0251
-© "
Of 7,12 0 0252
-ª "
Fo 8,7 0 0253
-« "
no 10,7 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,12 0 0256
-® "
a- 6,11 0 0257
-¯ "
de 7,12 0 0260
-° "
-+- 10,8 0 0261
-± "
+t+- 10,8 0 0261
S2 6,12 0 0262
-² "
S3 6,12 0 0263
-³ "
aa 6,12 0 0264
-´ "
-µ 11,8,3 0 0265
+mc 11,8,3 0 0265
ps 11,12 0 0266
-¶ "
pc 5,6 0 0267
-· "
ac 5,1,3 0 0270
-¸ "
S1 6,12 0 0271
-¹ "
Om 6,12 0 0272
-º "
Fc 8,7 0 0273
-» "
14 14,12 0 0274
-¼ "
12 14,12 0 0275
-½ "
34 14,12 0 0276
-¾ "
r? 8,9,3 0 0277
-¿ "
`A 12,16 0 0300
-À "
'A 12,16 0 0301
-Á "
^A 12,16 0 0302
-Â "
~A 12,15 0 0303
-Ã "
:A 12,15 0 0304
-Ä "
oA 12,16 0 0305
-Å "
AE 15,12 0 0306
-Æ "
,C 13,12,3 0 0307
-Ç "
`E 12,16 0 0310
-È "
'E 12,16 0 0311
-É "
^E 12,16 0 0312
-Ê "
:E 12,15 0 0313
-Ë "
`I 7,16 0 0314
-Ì "
'I 7,16 0 0315
-Í "
^I 7,16 0 0316
-Î "
:I 7,15 0 0317
-Ï "
-D 14,12 0 0320
-Ð "
~N 14,15 0 0321
-Ñ "
`O 14,16 0 0322
-Ò "
'O 14,16 0 0323
-Ó "
^O 14,16 0 0324
-Ô "
~O 14,15 0 0325
-Õ "
:O 14,15 0 0326
-Ö "
-mu 10,8 0 0327
-× "
+tmu 10,8 0 0327
/O 14,13,1 0 0330
-Ø "
`U 14,16 0 0331
-Ù "
'U 14,16 0 0332
-Ú "
^U 14,16 0 0333
-Û "
:U 14,15 0 0334
-Ü "
'Y 12,16 0 0335
-Ý "
TP 12,12 0 0336
-Þ "
ss 10,12,3 0 0337
-ß "
`a 11,12 0 0340
-à "
'a 11,12 0 0341
-á "
^a 11,12 0 0342
-â "
~a 11,11 0 0343
-ã "
:a 11,11 0 0344
-ä "
oa 11,13 0 0345
-å "
ae 14,8 0 0346
-æ "
,c 9,8,3 0 0347
-ç "
`e 9,12 0 0350
-è "
'e 9,12 0 0351
-é "
^e 9,12 0 0352
-ê "
:e 9,11 0 0353
-ë "
`i 6,12 0 0354
-ì "
'i 6,12 0 0355
-í "
^i 6,12 0 0356
-î "
:i 6,11 0 0357
-ï "
Sd 10,13 0 0360
-ð "
~n 11,11 0 0361
-ñ "
`o 10,12 0 0362
-ò "
'o 10,12 0 0363
-ó "
^o 10,12 0 0364
-ô "
~o 10,11 0 0365
-õ "
:o 10,11 0 0366
-ö "
-di 10,8 0 0367
-÷ "
+tdi 10,8 0 0367
/o 10,10,2 0 0370
-ø "
`u 11,12 0 0371
-ù "
'u 11,12 0 0372
-ú "
^u 11,12 0 0373
-û "
:u 11,11 0 0374
-ü "
'y 9,12,3 0 0375
-ý "
Tp 11,11,3 0 0376
-þ "
:y 9,11,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/NI b/contrib/groff/font/devX100-12/NI
index be54ca3..58b233d 100644
--- a/contrib/groff/font/devX100-12/NI
+++ b/contrib/groff/font/devX100-12/NI
@@ -1,6 +1,7 @@
name NI
spacewidth 4
charset
+--- 14,11 0 00
--- 4,1 0 040
! 6,12 0 041
" 7,12 0 042
@@ -11,14 +12,14 @@ $ 9,14,1 0 044
Do "
% 14,12 0 045
& 14,12 0 046
-' 3,12 0 047
+' 5,12 0 047
cq "
( 6,12,2 0 050
) 5,12,2 0 051
* 8,12 0 052
+ 10,9 0 053
, 4,2,3 0 054
-\- 10,5 0 055
+\- 5,4 0 055
. 4,2 0 056
/ 10,12,2 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 8,0,3 0 0137
-` 3,12 0 0140
+` 5,12 0 0140
oq "
a 10,8 0 0141
b 9,12 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 6,9,3 0 0241
-¡ "
ct 9,10,2 0 0242
-¢ "
Po 9,12 0 0243
-£ "
Cs 9,10 0 0244
-¤ "
Ye 9,12 0 0245
-¥ "
bb 10,12 0 0246
-¦ "
sc 8,12,3 0 0247
-§ "
ad 6,11 0 0250
-¨ "
co 12,12 0 0251
-© "
Of 7,12 0 0252
-ª "
Fo 7,6 0 0253
-« "
no 10,6 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 12,12 0 0256
-® "
a- 5,10 0 0257
-¯ "
de 7,12 0 0260
-° "
-+- 10,9 0 0261
-± "
+t+- 10,9 0 0261
S2 6,12 0 0262
-² "
S3 6,12 0 0263
-³ "
aa 5,12 0 0264
-´ "
-µ 10,8,3 0 0265
+mc 10,8,3 0 0265
ps 11,12 0 0266
-¶ "
pc 5,5 0 0267
-· "
ac 5,1,3 0 0270
-¸ "
S1 6,12 0 0271
-¹ "
Om 6,12 0 0272
-º "
Fc 7,6 0 0273
-» "
14 14,12 0 0274
-¼ "
12 14,12 0 0275
-½ "
34 14,12 0 0276
-¾ "
r? 7,9,3 0 0277
-¿ "
`A 12,16 0 0300
-À "
'A 12,16 0 0301
-Á "
^A 12,16 0 0302
-Â "
~A 12,15 0 0303
-Ã "
:A 12,15 0 0304
-Ä "
oA 12,16 0 0305
-Å "
AE 14,12 0 0306
-Æ "
,C 12,12,3 0 0307
-Ç "
`E 12,16 0 0310
-È "
'E 12,16 0 0311
-É "
^E 12,16 0 0312
-Ê "
:E 12,15 0 0313
-Ë "
`I 7,16 0 0314
-Ì "
'I 7,16 0 0315
-Í "
^I 7,16 0 0316
-Î "
:I 7,15 0 0317
-Ï "
-D 13,12 0 0320
-Ð "
~N 13,15 0 0321
-Ñ "
`O 13,16 0 0322
-Ò "
'O 13,16 0 0323
-Ó "
^O 13,16 0 0324
-Ô "
~O 13,15 0 0325
-Õ "
:O 13,15 0 0326
-Ö "
-mu 10,8 0 0327
-× "
+tmu 10,8 0 0327
/O 13,13,1 0 0330
-Ø "
`U 13,16 0 0331
-Ù "
'U 13,16 0 0332
-Ú "
^U 13,16 0 0333
-Û "
:U 13,15 0 0334
-Ü "
'Y 11,16 0 0335
-Ý "
TP 11,12 0 0336
-Þ "
ss 9,12,3 0 0337
-ß "
`a 10,12 0 0340
-à "
'a 10,12 0 0341
-á "
^a 10,12 0 0342
-â "
~a 10,11 0 0343
-ã "
:a 10,11 0 0344
-ä "
oa 10,13 0 0345
-å "
ae 12,8 0 0346
-æ "
,c 8,8,3 0 0347
-ç "
`e 7,12 0 0350
-è "
'e 7,12 0 0351
-é "
^e 7,12 0 0352
-ê "
:e 7,11 0 0353
-ë "
`i 6,12 0 0354
-ì "
'i 6,12 0 0355
-í "
^i 6,12 0 0356
-î "
:i 6,11 0 0357
-ï "
Sd 8,13 0 0360
-ð "
~n 10,11 0 0361
-ñ "
`o 8,12 0 0362
-ò "
'o 8,12 0 0363
-ó "
^o 8,12 0 0364
-ô "
~o 8,11 0 0365
-õ "
:o 8,11 0 0366
-ö "
-di 10,8 0 0367
-÷ "
+tdi 10,8 0 0367
/o 8,10,2 0 0370
-ø "
`u 10,12 0 0371
-ù "
'u 10,12 0 0372
-ú "
^u 10,12 0 0373
-û "
:u 10,11 0 0374
-ü "
'y 8,12,3 0 0375
-ý "
Tp 9,11,3 0 0376
-þ "
:y 8,11,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/NR b/contrib/groff/font/devX100-12/NR
index f4f922e..6f02389 100644
--- a/contrib/groff/font/devX100-12/NR
+++ b/contrib/groff/font/devX100-12/NR
@@ -1,6 +1,7 @@
name NR
spacewidth 4
charset
+--- 14,11 0 00
--- 4,1 0 040
! 5,12 0 041
" 6,12 0 042
@@ -18,7 +19,7 @@ cq "
* 8,12 0 052
+ 10,9 0 053
, 4,2,3 0 054
-\- 10,5 0 055
+\- 5,4 0 055
. 4,2 0 056
/ 5,12 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 8,0,2 0 0137
-` 3,12 0 0140
+` 5,12 0 0140
oq "
a 9,8 0 0141
b 9,12 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 5,9,3 0 0241
-¡ "
ct 9,10,2 0 0242
-¢ "
Po 9,12 0 0243
-£ "
Cs 9,10 0 0244
-¤ "
Ye 9,12 0 0245
-¥ "
bb 10,12 0 0246
-¦ "
sc 8,12,3 0 0247
-§ "
ad 5,11 0 0250
-¨ "
co 12,12 0 0251
-© "
Of 6,12 0 0252
-ª "
Fo 7,6 0 0253
-« "
no 10,6 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 12,12 0 0256
-® "
a- 5,10 0 0257
-¯ "
de 7,12 0 0260
-° "
-+- 10,9 0 0261
-± "
+t+- 10,9 0 0261
S2 6,12 0 0262
-² "
S3 6,12 0 0263
-³ "
aa 5,12 0 0264
-´ "
-µ 10,8,3 0 0265
+mc 10,8,3 0 0265
ps 10,12,3 0 0266
-¶ "
pc 5,5 0 0267
-· "
ac 5,1,3 0 0270
-¸ "
S1 6,12 0 0271
-¹ "
Om 5,12 0 0272
-º "
Fc 7,6 0 0273
-» "
14 14,12 0 0274
-¼ "
12 13,12 0 0275
-½ "
34 14,12 0 0276
-¾ "
r? 7,9,3 0 0277
-¿ "
`A 12,16 0 0300
-À "
'A 12,16 0 0301
-Á "
^A 12,16 0 0302
-Â "
~A 12,15 0 0303
-Ã "
:A 12,15 0 0304
-Ä "
oA 12,16 0 0305
-Å "
AE 17,12 0 0306
-Æ "
,C 12,12,3 0 0307
-Ç "
`E 12,16 0 0310
-È "
'E 12,16 0 0311
-É "
^E 12,16 0 0312
-Ê "
:E 12,15 0 0313
-Ë "
`I 7,16 0 0314
-Ì "
'I 7,16 0 0315
-Í "
^I 7,16 0 0316
-Î "
:I 7,15 0 0317
-Ï "
-D 13,12 0 0320
-Ð "
~N 13,15 0 0321
-Ñ "
`O 13,16 0 0322
-Ò "
'O 13,16 0 0323
-Ó "
^O 13,16 0 0324
-Ô "
~O 13,15 0 0325
-Õ "
:O 13,15 0 0326
-Ö "
-mu 10,8 0 0327
-× "
+tmu 10,8 0 0327
/O 13,13,1 0 0330
-Ø "
`U 13,16 0 0331
-Ù "
'U 13,16 0 0332
-Ú "
^U 13,16 0 0333
-Û "
:U 13,15 0 0334
-Ü "
'Y 12,16 0 0335
-Ý "
TP 11,12 0 0336
-Þ "
ss 10,12 0 0337
-ß "
`a 9,12 0 0340
-à "
'a 9,12 0 0341
-á "
^a 9,12 0 0342
-â "
~a 9,11 0 0343
-ã "
:a 9,11 0 0344
-ä "
oa 9,13 0 0345
-å "
ae 13,8 0 0346
-æ "
,c 7,8,3 0 0347
-ç "
`e 8,12 0 0350
-è "
'e 8,12 0 0351
-é "
^e 8,12 0 0352
-ê "
:e 8,11 0 0353
-ë "
`i 5,12 0 0354
-ì "
'i 5,12 0 0355
-í "
^i 5,12 0 0356
-î "
:i 5,11 0 0357
-ï "
Sd 8,13 0 0360
-ð "
~n 10,11 0 0361
-ñ "
`o 8,12 0 0362
-ò "
'o 8,12 0 0363
-ó "
^o 8,12 0 0364
-ô "
~o 8,11 0 0365
-õ "
:o 8,11 0 0366
-ö "
-di 10,8 0 0367
-÷ "
+tdi 10,8 0 0367
/o 8,9,1 0 0370
-ø "
`u 10,12 0 0371
-ù "
'u 10,12 0 0372
-ú "
^u 10,12 0 0373
-û "
:u 10,11 0 0374
-ü "
'y 9,12,3 0 0375
-ý "
Tp 9,11,3 0 0376
-þ "
:y 9,11,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/S b/contrib/groff/font/devX100-12/S
index 453c295..2f03400 100644
--- a/contrib/groff/font/devX100-12/S
+++ b/contrib/groff/font/devX100-12/S
@@ -73,7 +73,7 @@ tf 14,8 0 0134
] 5,12,2 0 0135
rB "
pp 11,11 0 0136
-_ 8,0,4 0 0137
+_ 8,0,3 0 0137
radicalex 8,13 0 0140
*a 11,9 0 0141
*b 9,13,4 0 0142
@@ -88,7 +88,6 @@ radicalex 8,13 0 0140
*k 9,9 0 0153
*l 9,13 0 0154
*m 9,9,4 0 0155
-µ "
*n 8,9 0 0156
*o 9,9 0 0157
*p 9,9 0 0160
@@ -128,18 +127,14 @@ arrowverttp "
da 10,13,2 0 0257
arrowvertbt "
de 6,11 0 0260
-° "
+- 9,11 0 0261
-± "
sd 7,12 0 0262
>= 9,11 0 0263
mu 9,9 0 0264
-× "
pt 11,7 0 0265
pd 8,13,1 0 0266
bu 8,8 0 0267
di 9,8 0 0270
-÷ "
!= 9,9,1 0 0271
== 9,8 0 0272
~= 9,7 0 0273
@@ -159,7 +154,7 @@ ca 12,9 0 0307
cu 12,9 0 0310
sp 11,8 0 0311
ip 11,7,3 0 0312
---- 11,9,1 0 0313
+nb 11,9,1 0 0313
sb 11,8 0 0314
ib 11,8,2 0 0315
mo 11,7 0 0316
@@ -173,7 +168,6 @@ tm 14,11 0 0324
sr 9,13,3 0 0326
md 4,5 0 0327
no 12,5 0 0330
-¬ "
AN 10,8 0 0331
OR 10,8 0 0332
hA 17,9 0 0333
@@ -204,7 +198,6 @@ lb "
bracerightex 8,13,4 0 0357
braceleftex "
bv "
---- 13,13 0 0360
ra 5,13,2 0 0361
is 5,13,4 0 0362
--- 11,13,4 0 0363
diff --git a/contrib/groff/font/devX100-12/TB b/contrib/groff/font/devX100-12/TB
index b81e017..58468cd 100644
--- a/contrib/groff/font/devX100-12/TB
+++ b/contrib/groff/font/devX100-12/TB
@@ -1,7 +1,8 @@
name TB
-spacewidth 4
+spacewidth 5
charset
---- 4,1 0 040
+--- 12,11 0 00
+--- 5,1 0 040
! 6,11 0 041
" 9,11 0 042
dq "
@@ -11,14 +12,14 @@ $ 8,12,1 0 044
Do "
% 16,12 0 045
& 14,11 0 046
-' 6,11 0 047
+' 5,11 0 047
cq "
( 6,11,3 0 050
) 6,11,3 0 051
* 8,11 0 052
+ 9,8 0 053
, 4,2,3 0 054
-\- 9,5 0 055
+\- 5,5 0 055
. 4,2 0 056
/ 5,11 0 057
sl "
@@ -42,28 +43,28 @@ eq "
@ 16,11,2 0 0100
at "
A 12,11 0 0101
-B 11,11 0 0102
-C 12,11 0 0103
-D 12,11 0 0104
-E 11,11 0 0105
+B 10,11 0 0102
+C 11,11 0 0103
+D 11,11 0 0104
+E 10,11 0 0105
F 10,11 0 0106
-G 13,11 0 0107
-H 13,11 0 0110
+G 12,11 0 0107
+H 12,11 0 0110
I 6,11 0 0111
J 8,11,2 0 0112
K 13,11 0 0113
L 11,11 0 0114
M 15,11 0 0115
N 12,11 0 0116
-O 13,11 0 0117
+O 12,11 0 0117
P 10,11 0 0120
-Q 13,11,3 0 0121
+Q 12,11,3 0 0121
R 12,11 0 0122
S 9,11 0 0123
T 11,11 0 0124
U 12,11 0 0125
V 12,11 0 0126
-W 16,11 0 0127
+W 17,11 0 0127
X 12,11 0 0130
Y 12,11 0 0131
Z 11,11 0 0132
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 8,0,4 0 0137
-` 6,11 0 0140
+` 6,12 0 0140
oq "
a 8,8 0 0141
b 9,11 0 0142
@@ -91,7 +92,7 @@ i 5,11 0 0151
j 5,11,4 0 0152
k 9,11 0 0153
l 5,11 0 0154
-m 14,8 0 0155
+m 13,8 0 0155
n 9,8 0 0156
o 8,8 0 0157
p 9,8,4 0 0160
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 5,1 0 0240
r! 6,8,4 0 0241
-¡ "
ct 8,10,2 0 0242
-¢ "
Po 8,11 0 0243
-£ "
Cs 8,8 0 0244
-¤ "
Ye 8,11 0 0245
-¥ "
bb 4,12,3 0 0246
-¦ "
sc 8,11,4 0 0247
-§ "
ad 6,11 0 0250
-¨ "
co 12,11 0 0251
-© "
Of 5,11 0 0252
-ª "
Fo 8,7 0 0253
-« "
no 9,7 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,11 0 0256
-® "
a- 6,10 0 0257
-¯ "
de 7,11 0 0260
-° "
-+- 9,9 0 0261
-± "
+t+- 9,9 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 6,12 0 0264
-´ "
-µ 9,8,3 0 0265
+mc 9,8,3 0 0265
ps 9,11,4 0 0266
-¶ "
pc 4,6 0 0267
-· "
ac 6,0,4 0 0270
-¸ "
S1 5,11 0 0271
-¹ "
Om 6,11 0 0272
-º "
Fc 8,7 0 0273
-» "
14 12,11 0 0274
-¼ "
12 12,11 0 0275
-½ "
34 12,11 0 0276
-¾ "
r? 8,8,3 0 0277
-¿ "
`A 12,15 0 0300
-À "
'A 12,15 0 0301
-Á "
^A 12,15 0 0302
-Â "
~A 12,14 0 0303
-Ã "
:A 12,14 0 0304
-Ä "
oA 12,16 0 0305
-Å "
AE 16,11 0 0306
-Æ "
-,C 12,11,4 0 0307
-Ç "
-`E 11,15 0 0310
-È "
-'E 11,15 0 0311
-É "
-^E 11,15 0 0312
-Ê "
-:E 11,14 0 0313
-Ë "
+,C 11,11,4 0 0307
+`E 10,15 0 0310
+'E 10,15 0 0311
+^E 10,15 0 0312
+:E 10,14 0 0313
`I 6,15 0 0314
-Ì "
'I 6,15 0 0315
-Í "
^I 6,15 0 0316
-Î "
:I 6,14 0 0317
-Ï "
--D 12,11 0 0320
-Ð "
+-D 11,11 0 0320
~N 12,14 0 0321
-Ñ "
-`O 13,15 0 0322
-Ò "
-'O 13,15 0 0323
-Ó "
-^O 13,15 0 0324
-Ô "
-~O 13,15 0 0325
-Õ "
-:O 13,14 0 0326
-Ö "
-mu 9,8 0 0327
-× "
+`O 12,15 0 0322
+'O 12,15 0 0323
+^O 12,15 0 0324
+~O 12,14 0 0325
+:O 12,14 0 0326
+tmu 9,8 0 0327
/O 13,12,1 0 0330
-Ø "
`U 12,15 0 0331
-Ù "
'U 12,15 0 0332
-Ú "
^U 12,15 0 0333
-Û "
:U 12,14 0 0334
-Ü "
'Y 12,15 0 0335
-Ý "
TP 10,11 0 0336
-Þ "
ss 9,11 0 0337
-ß "
`a 8,12 0 0340
-à "
'a 8,12 0 0341
-á "
^a 8,12 0 0342
-â "
~a 8,11 0 0343
-ã "
:a 8,11 0 0344
-ä "
oa 8,13 0 0345
-å "
ae 12,8 0 0346
-æ "
,c 7,8,4 0 0347
-ç "
`e 7,12 0 0350
-è "
'e 7,12 0 0351
-é "
^e 7,12 0 0352
-ê "
:e 7,11 0 0353
-ë "
`i 5,12 0 0354
-ì "
'i 5,12 0 0355
-í "
^i 5,12 0 0356
-î "
:i 5,11 0 0357
-ï "
Sd 8,11 0 0360
-ð "
~n 9,11 0 0361
-ñ "
`o 8,12 0 0362
-ò "
'o 8,12 0 0363
-ó "
^o 8,12 0 0364
-ô "
~o 8,11 0 0365
-õ "
:o 8,11 0 0366
-ö "
-di 9,8 0 0367
-÷ "
+tdi 9,8 0 0367
/o 8,9,1 0 0370
-ø "
`u 9,12 0 0371
-ù "
'u 9,12 0 0372
-ú "
^u 9,12 0 0373
-û "
:u 9,11 0 0374
-ü "
'y 8,12,4 0 0375
-ý "
Tp 9,11,4 0 0376
-þ "
:y 8,11,4 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/TBI b/contrib/groff/font/devX100-12/TBI
index 712f7d2..c909962 100644
--- a/contrib/groff/font/devX100-12/TBI
+++ b/contrib/groff/font/devX100-12/TBI
@@ -1,6 +1,7 @@
name TBI
spacewidth 4
charset
+--- 13,11 0 00
--- 4,1 0 040
! 6,11 0 041
" 9,11 0 042
@@ -11,14 +12,14 @@ $ 8,12,1 0 044
Do "
% 13,11 0 045
& 13,11 0 046
-' 6,11 0 047
+' 5,11 0 047
cq "
( 6,11,3 0 050
) 6,11,3 0 051
* 8,11 0 052
+ 10,9 0 053
, 4,2,3 0 054
-\- 10,6 0 055
+\- 5,5 0 055
. 4,2 0 056
/ 5,12 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 8,0,2 0 0137
-` 6,11 0 0140
+` 6,12 0 0140
oq "
a 8,8 0 0141
b 8,11 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 6,8,4 0 0241
-¡ "
ct 8,10,2 0 0242
-¢ "
Po 8,11 0 0243
-£ "
Cs 8,9 0 0244
-¤ "
Ye 8,11 0 0245
-¥ "
bb 4,12 0 0246
-¦ "
sc 8,11,3 0 0247
-§ "
ad 6,11 0 0250
-¨ "
co 12,11 0 0251
-© "
Of 4,11 0 0252
-ª "
Fo 8,7 0 0253
-« "
no 10,5 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,11 0 0256
-® "
a- 6,10 0 0257
-¯ "
de 7,11 0 0260
-° "
-+- 10,10 0 0261
-± "
+t+- 10,10 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 6,12 0 0264
-´ "
-µ 9,8,3 0 0265
+mc 9,8,3 0 0265
ps 8,11,3 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 6,1,3 0 0270
-¸ "
S1 5,11 0 0271
-¹ "
Om 5,11 0 0272
-º "
Fc 8,7 0 0273
-» "
14 13,11 0 0274
-¼ "
12 13,11 0 0275
-½ "
34 13,11 0 0276
-¾ "
r? 8,8,4 0 0277
-¿ "
`A 11,15 0 0300
-À "
'A 11,15 0 0301
-Á "
^A 11,15 0 0302
-Â "
~A 11,14 0 0303
-Ã "
:A 11,14 0 0304
-Ä "
oA 11,15 0 0305
-Å "
AE 15,11 0 0306
-Æ "
,C 11,11,3 0 0307
-Ç "
`E 11,15 0 0310
-È "
'E 11,15 0 0311
-É "
^E 11,15 0 0312
-Ê "
:E 11,14 0 0313
-Ë "
`I 6,15 0 0314
-Ì "
'I 6,15 0 0315
-Í "
^I 6,15 0 0316
-Î "
:I 6,14 0 0317
-Ï "
-D 12,11 0 0320
-Ð "
~N 12,14 0 0321
-Ñ "
`O 12,15 0 0322
-Ò "
'O 12,15 0 0323
-Ó "
^O 12,15 0 0324
-Ô "
~O 12,14 0 0325
-Õ "
:O 12,14 0 0326
-Ö "
-mu 10,9 0 0327
-× "
+tmu 10,9 0 0327
/O 12,12,2 0 0330
-Ø "
`U 12,15 0 0331
-Ù "
'U 12,15 0 0332
-Ú "
^U 12,15 0 0333
-Û "
:U 12,14 0 0334
-Ü "
'Y 10,15 0 0335
-Ý "
TP 10,11 0 0336
-Þ "
ss 8,12,3 0 0337
-ß "
`a 8,12 0 0340
-à "
'a 8,12 0 0341
-á "
^a 8,12 0 0342
-â "
~a 8,11 0 0343
-ã "
:a 8,11 0 0344
-ä "
oa 8,12 0 0345
-å "
ae 12,8 0 0346
-æ "
,c 7,8,3 0 0347
-ç "
`e 7,12 0 0350
-è "
'e 7,12 0 0351
-é "
^e 7,12 0 0352
-ê "
:e 7,11 0 0353
-ë "
`i 5,12 0 0354
-ì "
'i 5,12 0 0355
-í "
^i 5,12 0 0356
-î "
:i 5,11 0 0357
-ï "
Sd 8,11 0 0360
-ð "
~n 9,11 0 0361
-ñ "
`o 8,12 0 0362
-ò "
'o 8,12 0 0363
-ó "
^o 8,12 0 0364
-ô "
~o 8,11 0 0365
-õ "
:o 8,11 0 0366
-ö "
-di 10,9 0 0367
-÷ "
+tdi 10,9 0 0367
/o 8,10,2 0 0370
-ø "
`u 9,12 0 0371
-ù "
'u 9,12 0 0372
-ú "
^u 9,12 0 0373
-û "
:u 9,11 0 0374
-ü "
'y 7,12,3 0 0375
-ý "
Tp 8,11,3 0 0376
-þ "
:y 7,11,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/TI b/contrib/groff/font/devX100-12/TI
index 72ed683..7e00aab 100644
--- a/contrib/groff/font/devX100-12/TI
+++ b/contrib/groff/font/devX100-12/TI
@@ -1,6 +1,7 @@
name TI
spacewidth 4
charset
+--- 12,11 0 00
--- 4,1 0 040
! 6,11 0 041
" 7,10 0 042
@@ -11,14 +12,14 @@ $ 8,12,1 0 044
Do "
% 13,11 0 045
& 13,11 0 046
-' 6,10 0 047
+' 4,10 0 047
cq "
( 6,11,3 0 050
) 6,11,3 0 051
* 8,11 0 052
+ 11,9 0 053
, 4,2,2 0 054
-\- 11,5 0 055
+\- 5,4 0 055
. 4,2 0 056
/ 5,11 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 8,0,4 0 0137
-` 6,10 0 0140
+` 6,12 0 0140
oq "
a 8,8 0 0141
b 8,11 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 6,8,3 0 0241
-¡ "
ct 8,9,1 0 0242
-¢ "
Po 8,11 0 0243
-£ "
Cs 8,9 0 0244
-¤ "
Ye 8,11 0 0245
-¥ "
bb 5,11,3 0 0246
-¦ "
sc 8,12,1 0 0247
-§ "
ad 6,11 0 0250
-¨ "
co 13,11 0 0251
-© "
Of 5,11 0 0252
-ª "
Fo 8,6 0 0253
-« "
no 11,6 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 13,11 0 0256
-® "
a- 6,10 0 0257
-¯ "
de 7,11 0 0260
-° "
-+- 11,11 0 0261
-± "
+t+- 11,11 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 6,12 0 0264
-´ "
-µ 8,8,4 0 0265
+mc 8,8,4 0 0265
ps 9,11,3 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 6,1,3 0 0270
-¸ "
S1 5,11 0 0271
-¹ "
Om 5,11 0 0272
-º "
Fc 8,6 0 0273
-» "
14 13,11 0 0274
-¼ "
12 13,11 0 0275
-½ "
34 13,11 0 0276
-¾ "
r? 8,8,3 0 0277
-¿ "
`A 10,15 0 0300
-À "
'A 10,15 0 0301
-Á "
^A 10,15 0 0302
-Â "
~A 10,14 0 0303
-Ã "
:A 10,14 0 0304
-Ä "
oA 10,15 0 0305
-Å "
AE 15,11 0 0306
-Æ "
,C 11,11,3 0 0307
-Ç "
`E 10,15 0 0310
-È "
'E 10,15 0 0311
-É "
^E 10,15 0 0312
-Ê "
:E 10,14 0 0313
-Ë "
`I 6,15 0 0314
-Ì "
'I 6,15 0 0315
-Í "
^I 6,15 0 0316
-Î "
:I 6,14 0 0317
-Ï "
-D 12,11 0 0320
-Ð "
~N 11,14 0 0321
-Ñ "
`O 12,15 0 0322
-Ò "
'O 12,15 0 0323
-Ó "
^O 12,15 0 0324
-Ô "
~O 12,14 0 0325
-Õ "
:O 12,14 0 0326
-Ö "
-mu 11,9 0 0327
-× "
+tmu 11,9 0 0327
/O 12,12,1 0 0330
-Ø "
`U 12,15 0 0331
-Ù "
'U 12,15 0 0332
-Ú "
^U 12,15 0 0333
-Û "
:U 12,14 0 0334
-Ü "
'Y 9,15 0 0335
-Ý "
TP 10,11 0 0336
-Þ "
ss 8,11,4 0 0337
-ß "
`a 8,12 0 0340
-à "
'a 8,12 0 0341
-á "
^a 8,12 0 0342
-â "
~a 8,11 0 0343
-ã "
:a 8,11 0 0344
-ä "
oa 8,13 0 0345
-å "
ae 11,8 0 0346
-æ "
,c 7,8,3 0 0347
-ç "
`e 7,12 0 0350
-è "
'e 7,12 0 0351
-é "
^e 7,12 0 0352
-ê "
:e 7,11 0 0353
-ë "
`i 5,12 0 0354
-ì "
'i 5,12 0 0355
-í "
^i 5,12 0 0356
-î "
:i 5,11 0 0357
-ï "
Sd 8,12 0 0360
-ð "
~n 8,11 0 0361
-ñ "
`o 8,12 0 0362
-ò "
'o 8,12 0 0363
-ó "
^o 8,12 0 0364
-ô "
~o 8,11 0 0365
-õ "
:o 8,11 0 0366
-ö "
-di 11,8 0 0367
-÷ "
+tdi 11,8 0 0367
/o 8,9,1 0 0370
-ø "
`u 8,12 0 0371
-ù "
'u 8,12 0 0372
-ú "
^u 8,12 0 0373
-û "
:u 8,11 0 0374
-ü "
'y 7,12,4 0 0375
-ý "
Tp 8,11,4 0 0376
-þ "
:y 7,11,4 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100-12/TR b/contrib/groff/font/devX100-12/TR
index 989dd56..e95e2f4 100644
--- a/contrib/groff/font/devX100-12/TR
+++ b/contrib/groff/font/devX100-12/TR
@@ -1,6 +1,7 @@
name TR
spacewidth 4
charset
+--- 12,11 0 00
--- 4,1 0 040
! 5,11 0 041
" 7,11 0 042
@@ -11,14 +12,14 @@ $ 8,12,1 0 044
Do "
% 14,11 0 045
& 13,11 0 046
-' 5,11 0 047
+' 3,11 0 047
cq "
( 5,11,3 0 050
) 5,11,3 0 051
* 8,11 0 052
+ 9,8 0 053
, 4,2,1 0 054
-\- 9,5 0 055
+\- 5,5 0 055
. 4,2 0 056
/ 5,11,2 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 8,0,2 0 0137
-` 5,11 0 0140
+` 6,11 0 0140
oq "
a 7,8 0 0141
b 8,11 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 5,8,3 0 0241
-¡ "
ct 8,10,2 0 0242
-¢ "
Po 8,11 0 0243
-£ "
Cs 8,10 0 0244
-¤ "
Ye 8,11 0 0245
-¥ "
bb 3,11 0 0246
-¦ "
sc 8,11,3 0 0247
-§ "
ad 6,11 0 0250
-¨ "
co 13,11 0 0251
-© "
Of 5,11 0 0252
-ª "
Fo 8,7 0 0253
-« "
no 9,5 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 13,11 0 0256
-® "
a- 6,10 0 0257
-¯ "
de 7,11 0 0260
-° "
-+- 9,9 0 0261
-± "
+t+- 9,9 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 6,11 0 0264
-´ "
-µ 8,8,3 0 0265
+mc 8,8,3 0 0265
ps 8,11,4 0 0266
-¶ "
pc 4,6 0 0267
-· "
ac 6,0,4 0 0270
-¸ "
S1 5,11 0 0271
-¹ "
Om 5,11 0 0272
-º "
Fc 8,7 0 0273
-» "
14 13,11 0 0274
-¼ "
12 13,11 0 0275
-½ "
34 13,11 0 0276
-¾ "
r? 7,8,3 0 0277
-¿ "
`A 12,15 0 0300
-À "
'A 12,15 0 0301
-Á "
^A 12,15 0 0302
-Â "
~A 12,14 0 0303
-Ã "
:A 12,14 0 0304
-Ä "
oA 12,14 0 0305
-Å "
AE 15,11 0 0306
-Æ "
,C 11,11,4 0 0307
-Ç "
`E 10,15 0 0310
-È "
'E 10,15 0 0311
-É "
^E 10,15 0 0312
-Ê "
:E 10,14 0 0313
-Ë "
`I 5,15 0 0314
-Ì "
'I 5,15 0 0315
-Í "
^I 5,15 0 0316
-Î "
:I 5,14 0 0317
-Ï "
-D 12,11 0 0320
-Ð "
~N 12,14 0 0321
-Ñ "
`O 12,15 0 0322
-Ò "
'O 12,15 0 0323
-Ó "
^O 12,15 0 0324
-Ô "
~O 12,14 0 0325
-Õ "
:O 12,14 0 0326
-Ö "
-mu 9,7 0 0327
-× "
+tmu 9,7 0 0327
/O 12,12,1 0 0330
-Ø "
`U 12,15 0 0331
-Ù "
'U 12,15 0 0332
-Ú "
^U 12,15 0 0333
-Û "
:U 12,14 0 0334
-Ü "
'Y 12,15 0 0335
-Ý "
TP 9,11 0 0336
-Þ "
ss 8,11 0 0337
-ß "
`a 7,12 0 0340
-à "
'a 7,12 0 0341
-á "
^a 7,12 0 0342
-â "
~a 7,11 0 0343
-ã "
:a 7,11 0 0344
-ä "
oa 7,12 0 0345
-å "
ae 11,8 0 0346
-æ "
,c 7,8,4 0 0347
-ç "
`e 7,12 0 0350
-è "
'e 7,12 0 0351
-é "
^e 7,12 0 0352
-ê "
:e 7,11 0 0353
-ë "
`i 5,12 0 0354
-ì "
'i 5,12 0 0355
-í "
^i 5,12 0 0356
-î "
:i 5,11 0 0357
-ï "
Sd 8,11 0 0360
-ð "
~n 8,11 0 0361
-ñ "
`o 8,12 0 0362
-ò "
'o 8,12 0 0363
-ó "
^o 8,12 0 0364
-ô "
~o 8,11 0 0365
-õ "
:o 8,11 0 0366
-ö "
-di 9,9 0 0367
-÷ "
+tdi 9,9 0 0367
/o 8,10,2 0 0370
-ø "
`u 8,12 0 0371
-ù "
'u 8,12 0 0372
-ú "
^u 8,12 0 0373
-û "
:u 8,11 0 0374
-ü "
'y 8,12,4 0 0375
-ý "
Tp 8,11,4 0 0376
-þ "
:y 8,11,4 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/CB b/contrib/groff/font/devX100/CB
index 7353611..54e3124 100644
--- a/contrib/groff/font/devX100/CB
+++ b/contrib/groff/font/devX100/CB
@@ -1,6 +1,7 @@
name CB
spacewidth 9
charset
+--- 9,9 0 00
--- 9,1 0 040
! 9,9 0 041
" 9,10 0 042
@@ -11,7 +12,7 @@ $ 9,11,1 0 044
Do "
% 9,10 0 045
& 9,8 0 046
-' 9,10 0 047
+' 9,9 0 047
cq "
( 9,9,2 0 050
) 9,9,2 0 051
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 9,0,2 0 0137
-` 9,10 0 0140
+` 9,9 0 0140
oq "
a 9,7 0 0141
b 9,10 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 9,1 0 0240
r! 9,7,2 0 0241
-¡ "
ct 9,9,1 0 0242
-¢ "
Po 9,9 0 0243
-£ "
Cs 9,7 0 0244
-¤ "
Ye 9,9 0 0245
-¥ "
bb 9,9,2 0 0246
-¦ "
sc 9,10,1 0 0247
-§ "
ad 9,10 0 0250
-¨ "
co 9,9 0 0251
-© "
Of 9,9 0 0252
-ª "
Fo 9,6 0 0253
-« "
no 9,5 0 0254
-¬ "
- 9,5 0 0255
hy "
-­ "
rg 9,9 0 0256
-® "
a- 9,9 0 0257
-¯ "
de 9,9 0 0260
-° "
-+- 9,8 0 0261
-± "
+t+- 9,8 0 0261
S2 9,10 0 0262
-² "
S3 9,10 0 0263
-³ "
aa 9,9 0 0264
-´ "
-µ 9,7,3 0 0265
+mc 9,7,3 0 0265
ps 9,10,1 0 0266
-¶ "
pc 9,5 0 0267
-· "
ac 9,1,3 0 0270
-¸ "
S1 9,10 0 0271
-¹ "
Om 9,9 0 0272
-º "
Fc 9,6 0 0273
-» "
14 9,10 0 0274
-¼ "
12 9,10 0 0275
-½ "
34 9,10 0 0276
-¾ "
r? 9,7,2 0 0277
-¿ "
`A 9,12 0 0300
-À "
'A 9,12 0 0301
-Á "
^A 9,12 0 0302
-Â "
~A 9,12 0 0303
-Ã "
:A 9,12 0 0304
-Ä "
oA 9,12 0 0305
-Å "
AE 9,9 0 0306
-Æ "
,C 9,9,4 0 0307
-Ç "
`E 9,12 0 0310
-È "
'E 9,12 0 0311
-É "
^E 9,12 0 0312
-Ê "
:E 9,12 0 0313
-Ë "
`I 9,12 0 0314
-Ì "
'I 9,12 0 0315
-Í "
^I 9,12 0 0316
-Î "
:I 9,12 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 9,12 0 0321
-Ñ "
`O 9,12 0 0322
-Ò "
'O 9,12 0 0323
-Ó "
^O 9,12 0 0324
-Ô "
~O 9,12 0 0325
-Õ "
:O 9,12 0 0326
-Ö "
-mu 9,8 0 0327
-× "
+tmu 9,8 0 0327
/O 9,10 0 0330
-Ø "
`U 9,12 0 0331
-Ù "
'U 9,12 0 0332
-Ú "
^U 9,12 0 0333
-Û "
:U 9,12 0 0334
-Ü "
'Y 9,12 0 0335
-Ý "
TP 9,9 0 0336
-Þ "
ss 9,9 0 0337
-ß "
`a 9,10 0 0340
-à "
'a 9,10 0 0341
-á "
^a 9,10 0 0342
-â "
~a 9,10 0 0343
-ã "
:a 9,10 0 0344
-ä "
oa 9,10 0 0345
-å "
ae 9,7 0 0346
-æ "
,c 9,7,4 0 0347
-ç "
`e 9,10 0 0350
-è "
'e 9,10 0 0351
-é "
^e 9,10 0 0352
-ê "
:e 9,10 0 0353
-ë "
`i 9,10 0 0354
-ì "
'i 9,10 0 0355
-í "
^i 9,10 0 0356
-î "
:i 9,10 0 0357
-ï "
Sd 9,10 0 0360
-ð "
~n 9,10 0 0361
-ñ "
`o 9,10 0 0362
-ò "
'o 9,10 0 0363
-ó "
^o 9,10 0 0364
-ô "
~o 9,10 0 0365
-õ "
:o 9,10 0 0366
-ö "
-di 9,8 0 0367
-÷ "
+tdi 9,8 0 0367
/o 9,7 0 0370
-ø "
`u 9,10 0 0371
-ù "
'u 9,10 0 0372
-ú "
^u 9,10 0 0373
-û "
:u 9,10 0 0374
-ü "
'y 9,10,3 0 0375
-ý "
Tp 9,9,3 0 0376
-þ "
:y 9,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/CBI b/contrib/groff/font/devX100/CBI
index d590a19..6139361 100644
--- a/contrib/groff/font/devX100/CBI
+++ b/contrib/groff/font/devX100/CBI
@@ -1,6 +1,7 @@
name CBI
spacewidth 9
charset
+--- 9,9 0 00
--- 9,1 0 040
! 9,10 0 041
" 9,9 0 042
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 9,1 0 0240
r! 9,7,3 0 0241
-¡ "
ct 9,9,1 0 0242
-¢ "
Po 9,9 0 0243
-£ "
Cs 9,7 0 0244
-¤ "
Ye 9,9 0 0245
-¥ "
bb 9,10,2 0 0246
-¦ "
sc 9,10,1 0 0247
-§ "
ad 9,10 0 0250
-¨ "
co 9,9 0 0251
-© "
Of 9,9 0 0252
-ª "
Fo 9,6 0 0253
-« "
no 9,6 0 0254
-¬ "
- 9,5 0 0255
hy "
-­ "
rg 9,9 0 0256
-® "
a- 9,9 0 0257
-¯ "
de 9,10 0 0260
-° "
-+- 9,8 0 0261
-± "
+t+- 9,8 0 0261
S2 9,10 0 0262
-² "
S3 9,10 0 0263
-³ "
aa 9,10 0 0264
-´ "
-µ 9,7,3 0 0265
+mc 9,7,3 0 0265
ps 9,10,1 0 0266
-¶ "
pc 9,5 0 0267
-· "
ac 9,1,3 0 0270
-¸ "
S1 9,10 0 0271
-¹ "
Om 9,9 0 0272
-º "
Fc 9,6 0 0273
-» "
14 9,10 0 0274
-¼ "
12 9,10 0 0275
-½ "
34 9,10 0 0276
-¾ "
r? 9,7,2 0 0277
-¿ "
`A 9,12 0 0300
-À "
'A 9,12 0 0301
-Á "
^A 9,12 0 0302
-Â "
~A 9,12 0 0303
-Ã "
:A 9,12 0 0304
-Ä "
oA 9,12 0 0305
-Å "
AE 9,9 0 0306
-Æ "
,C 9,9,4 0 0307
-Ç "
`E 9,12 0 0310
-È "
'E 9,12 0 0311
-É "
^E 9,12 0 0312
-Ê "
:E 9,12 0 0313
-Ë "
`I 9,12 0 0314
-Ì "
'I 9,12 0 0315
-Í "
^I 9,12 0 0316
-Î "
:I 9,12 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 9,12 0 0321
-Ñ "
`O 9,12 0 0322
-Ò "
'O 9,12 0 0323
-Ó "
^O 9,12 0 0324
-Ô "
~O 9,12 0 0325
-Õ "
:O 9,12 0 0326
-Ö "
-mu 9,8 0 0327
-× "
+tmu 9,8 0 0327
/O 9,9 0 0330
-Ø "
`U 9,12 0 0331
-Ù "
'U 9,12 0 0332
-Ú "
^U 9,12 0 0333
-Û "
:U 9,12 0 0334
-Ü "
'Y 9,12 0 0335
-Ý "
TP 9,9 0 0336
-Þ "
ss 9,9 0 0337
-ß "
`a 9,10 0 0340
-à "
'a 9,10 0 0341
-á "
^a 9,10 0 0342
-â "
~a 9,10 0 0343
-ã "
:a 9,10 0 0344
-ä "
oa 9,10 0 0345
-å "
ae 9,7 0 0346
-æ "
,c 9,7,4 0 0347
-ç "
`e 9,10 0 0350
-è "
'e 9,10 0 0351
-é "
^e 9,10 0 0352
-ê "
:e 9,10 0 0353
-ë "
`i 9,10 0 0354
-ì "
'i 9,10 0 0355
-í "
^i 9,10 0 0356
-î "
:i 9,10 0 0357
-ï "
Sd 9,10 0 0360
-ð "
~n 9,10 0 0361
-ñ "
`o 9,10 0 0362
-ò "
'o 9,10 0 0363
-ó "
^o 9,10 0 0364
-ô "
~o 9,10 0 0365
-õ "
:o 9,10 0 0366
-ö "
-di 9,8 0 0367
-÷ "
+tdi 9,8 0 0367
/o 9,8 0 0370
-ø "
`u 9,10 0 0371
-ù "
'u 9,10 0 0372
-ú "
^u 9,10 0 0373
-û "
:u 9,10 0 0374
-ü "
'y 9,10,3 0 0375
-ý "
Tp 9,9,3 0 0376
-þ "
:y 9,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/CI b/contrib/groff/font/devX100/CI
index 484eeca..578c7b3 100644
--- a/contrib/groff/font/devX100/CI
+++ b/contrib/groff/font/devX100/CI
@@ -1,6 +1,7 @@
name CI
spacewidth 9
charset
+--- 9,9 0 00
--- 9,1 0 040
! 9,9 0 041
" 9,10 0 042
@@ -11,7 +12,7 @@ $ 9,10,1 0 044
Do "
% 9,10 0 045
& 9,8 0 046
-' 9,10 0 047
+' 9,9 0 047
cq "
( 9,10,3 0 050
) 9,10,3 0 051
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 9,0,3 0 0137
-` 9,10 0 0140
+` 9,9 0 0140
oq "
a 9,7 0 0141
b 9,10 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 9,1 0 0240
r! 9,7,2 0 0241
-¡ "
ct 9,10 0 0242
-¢ "
Po 9,9 0 0243
-£ "
Cs 9,7 0 0244
-¤ "
Ye 9,9 0 0245
-¥ "
bb 9,9,2 0 0246
-¦ "
sc 9,9,1 0 0247
-§ "
ad 9,9 0 0250
-¨ "
co 9,9 0 0251
-© "
Of 9,9 0 0252
-ª "
Fo 9,7 0 0253
-« "
no 9,6 0 0254
-¬ "
- 9,5 0 0255
hy "
-­ "
rg 9,9 0 0256
-® "
a- 9,9 0 0257
-¯ "
de 9,10 0 0260
-° "
-+- 9,8 0 0261
-± "
+t+- 9,8 0 0261
S2 9,10 0 0262
-² "
S3 9,10 0 0263
-³ "
aa 9,9 0 0264
-´ "
-µ 9,7,3 0 0265
+mc 9,7,3 0 0265
ps 9,9,1 0 0266
-¶ "
pc 9,5 0 0267
-· "
ac 9,1,3 0 0270
-¸ "
S1 9,10 0 0271
-¹ "
Om 9,9 0 0272
-º "
Fc 9,7 0 0273
-» "
14 9,10 0 0274
-¼ "
12 9,10 0 0275
-½ "
34 9,10 0 0276
-¾ "
r? 9,7,2 0 0277
-¿ "
`A 9,12 0 0300
-À "
'A 9,12 0 0301
-Á "
^A 9,12 0 0302
-Â "
~A 9,12 0 0303
-Ã "
:A 9,11 0 0304
-Ä "
oA 9,12 0 0305
-Å "
AE 9,9 0 0306
-Æ "
,C 9,9,3 0 0307
-Ç "
`E 9,12 0 0310
-È "
'E 9,12 0 0311
-É "
^E 9,12 0 0312
-Ê "
:E 9,11 0 0313
-Ë "
`I 9,12 0 0314
-Ì "
'I 9,12 0 0315
-Í "
^I 9,12 0 0316
-Î "
:I 9,11 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 9,12 0 0321
-Ñ "
`O 9,12 0 0322
-Ò "
'O 9,12 0 0323
-Ó "
^O 9,12 0 0324
-Ô "
~O 9,12 0 0325
-Õ "
:O 9,11 0 0326
-Ö "
-mu 9,8 0 0327
-× "
+tmu 9,8 0 0327
/O 9,9 0 0330
-Ø "
`U 9,12 0 0331
-Ù "
'U 9,12 0 0332
-Ú "
^U 9,12 0 0333
-Û "
:U 9,11 0 0334
-Ü "
'Y 9,12 0 0335
-Ý "
TP 9,9 0 0336
-Þ "
ss 9,9 0 0337
-ß "
`a 9,10 0 0340
-à "
'a 9,10 0 0341
-á "
^a 9,10 0 0342
-â "
~a 9,10 0 0343
-ã "
:a 9,9 0 0344
-ä "
oa 9,11 0 0345
-å "
ae 9,7 0 0346
-æ "
,c 9,7,3 0 0347
-ç "
`e 9,10 0 0350
-è "
'e 9,10 0 0351
-é "
^e 9,10 0 0352
-ê "
:e 9,9 0 0353
-ë "
`i 9,10 0 0354
-ì "
'i 9,10 0 0355
-í "
^i 9,10 0 0356
-î "
:i 9,9 0 0357
-ï "
Sd 9,10 0 0360
-ð "
~n 9,10 0 0361
-ñ "
`o 9,10 0 0362
-ò "
'o 9,10 0 0363
-ó "
^o 9,10 0 0364
-ô "
~o 9,10 0 0365
-õ "
:o 9,9 0 0366
-ö "
-di 9,8 0 0367
-÷ "
+tdi 9,8 0 0367
/o 9,7 0 0370
-ø "
`u 9,10 0 0371
-ù "
'u 9,10 0 0372
-ú "
^u 9,10 0 0373
-û "
:u 9,9 0 0374
-ü "
'y 9,10,3 0 0375
-ý "
Tp 9,9,3 0 0376
-þ "
:y 9,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/CR b/contrib/groff/font/devX100/CR
index b8b35d1..c268312 100644
--- a/contrib/groff/font/devX100/CR
+++ b/contrib/groff/font/devX100/CR
@@ -1,6 +1,7 @@
name CR
spacewidth 9
charset
+--- 9,9 0 00
--- 9,1 0 040
! 9,9 0 041
" 9,10 0 042
@@ -11,7 +12,7 @@ $ 9,11,2 0 044
Do "
% 9,10 0 045
& 9,8 0 046
-' 9,10 0 047
+' 9,9 0 047
cq "
( 9,10,2 0 050
) 9,10,2 0 051
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 9,1 0 0240
r! 9,7,2 0 0241
-¡ "
ct 9,9 0 0242
-¢ "
Po 9,9 0 0243
-£ "
Cs 9,7 0 0244
-¤ "
Ye 9,9 0 0245
-¥ "
bb 9,9,2 0 0246
-¦ "
sc 9,9,1 0 0247
-§ "
ad 9,9 0 0250
-¨ "
co 9,9 0 0251
-© "
Of 9,9 0 0252
-ª "
Fo 9,7 0 0253
-« "
no 9,6 0 0254
-¬ "
- 9,5 0 0255
hy "
-­ "
rg 9,9 0 0256
-® "
a- 9,9 0 0257
-¯ "
de 9,10 0 0260
-° "
-+- 9,8 0 0261
-± "
+t+- 9,8 0 0261
S2 9,10 0 0262
-² "
S3 9,10 0 0263
-³ "
aa 9,10 0 0264
-´ "
-µ 9,7,3 0 0265
+mc 9,7,3 0 0265
ps 9,9,1 0 0266
-¶ "
pc 9,5 0 0267
-· "
ac 9,0,3 0 0270
-¸ "
S1 9,10 0 0271
-¹ "
Om 9,9 0 0272
-º "
Fc 9,7 0 0273
-» "
14 9,10 0 0274
-¼ "
12 9,10 0 0275
-½ "
34 9,10 0 0276
-¾ "
r? 9,7,2 0 0277
-¿ "
`A 9,12 0 0300
-À "
'A 9,12 0 0301
-Á "
^A 9,12 0 0302
-Â "
~A 9,12 0 0303
-Ã "
:A 9,11 0 0304
-Ä "
oA 9,12 0 0305
-Å "
AE 9,9 0 0306
-Æ "
,C 9,9,3 0 0307
-Ç "
`E 9,12 0 0310
-È "
'E 9,12 0 0311
-É "
^E 9,12 0 0312
-Ê "
:E 9,11 0 0313
-Ë "
`I 9,12 0 0314
-Ì "
'I 9,12 0 0315
-Í "
^I 9,12 0 0316
-Î "
:I 9,11 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 9,12 0 0321
-Ñ "
`O 9,12 0 0322
-Ò "
'O 9,12 0 0323
-Ó "
^O 9,12 0 0324
-Ô "
~O 9,12 0 0325
-Õ "
:O 9,11 0 0326
-Ö "
-mu 9,8 0 0327
-× "
+tmu 9,8 0 0327
/O 9,9 0 0330
-Ø "
`U 9,12 0 0331
-Ù "
'U 9,12 0 0332
-Ú "
^U 9,12 0 0333
-Û "
:U 9,11 0 0334
-Ü "
'Y 9,12 0 0335
-Ý "
TP 9,9 0 0336
-Þ "
ss 9,9 0 0337
-ß "
`a 9,10 0 0340
-à "
'a 9,10 0 0341
-á "
^a 9,10 0 0342
-â "
~a 9,10 0 0343
-ã "
:a 9,9 0 0344
-ä "
oa 9,10 0 0345
-å "
ae 9,7 0 0346
-æ "
,c 9,7,3 0 0347
-ç "
`e 9,10 0 0350
-è "
'e 9,10 0 0351
-é "
^e 9,10 0 0352
-ê "
:e 9,9 0 0353
-ë "
`i 9,10 0 0354
-ì "
'i 9,10 0 0355
-í "
^i 9,10 0 0356
-î "
:i 9,9 0 0357
-ï "
Sd 9,12 0 0360
-ð "
~n 9,10 0 0361
-ñ "
`o 9,10 0 0362
-ò "
'o 9,10 0 0363
-ó "
^o 9,10 0 0364
-ô "
~o 9,10 0 0365
-õ "
:o 9,9 0 0366
-ö "
-di 9,8 0 0367
-÷ "
+tdi 9,8 0 0367
/o 9,7 0 0370
-ø "
`u 9,10 0 0371
-ù "
'u 9,10 0 0372
-ú "
^u 9,10 0 0373
-û "
:u 9,9 0 0374
-ü "
'y 9,10,3 0 0375
-ý "
Tp 9,9,3 0 0376
-þ "
:y 9,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/HB b/contrib/groff/font/devX100/HB
index 1a1d963..b4a5982 100644
--- a/contrib/groff/font/devX100/HB
+++ b/contrib/groff/font/devX100/HB
@@ -1,6 +1,7 @@
name HB
spacewidth 4
charset
+--- 10,11 0 00
--- 4,1 0 040
! 4,11 0 041
" 7,11 0 042
@@ -11,14 +12,14 @@ $ 8,12,2 0 044
Do "
% 13,11 0 045
& 11,10 0 046
-' 5,11 0 047
+' 4,11 0 047
cq "
( 5,11,3 0 050
) 5,11,3 0 051
* 6,11 0 052
+ 9,8 0 053
, 4,2,1 0 054
-\- 9,5 0 055
+\- 4,5 0 055
. 4,2 0 056
/ 4,11 0 057
sl "
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 4,8,3 0 0241
-¡ "
ct 8,9,1 0 0242
-¢ "
Po 8,11 0 0243
-£ "
Cs 8,9 0 0244
-¤ "
Ye 9,11 0 0245
-¥ "
bb 4,11,3 0 0246
-¦ "
sc 8,11,3 0 0247
-§ "
ad 5,11 0 0250
-¨ "
co 12,11 0 0251
-© "
Of 6,11 0 0252
-ª "
Fo 9,7 0 0253
-« "
no 9,6 0 0254
-¬ "
- 4,5 0 0255
hy "
-­ "
rg 12,11 0 0256
-® "
a- 5,10 0 0257
-¯ "
de 6,11 0 0260
-° "
-+- 9,9 0 0261
-± "
+t+- 9,9 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 5,11 0 0264
-´ "
-µ 9,8,3 0 0265
+mc 9,8,3 0 0265
ps 8,11,3 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 5,0,3 0 0270
-¸ "
S1 4,11 0 0271
-¹ "
Om 6,11 0 0272
-º "
Fc 9,7 0 0273
-» "
14 12,11 0 0274
-¼ "
12 12,11 0 0275
-½ "
34 12,11 0 0276
-¾ "
r? 9,8,3 0 0277
-¿ "
`A 10,14 0 0300
-À "
'A 10,14 0 0301
-Á "
^A 10,14 0 0302
-Â "
~A 10,14 0 0303
-Ã "
:A 10,14 0 0304
-Ä "
oA 10,14 0 0305
-Å "
AE 15,11 0 0306
-Æ "
,C 11,11,3 0 0307
-Ç "
`E 9,14 0 0310
-È "
'E 9,14 0 0311
-É "
^E 9,14 0 0312
-Ê "
:E 9,14 0 0313
-Ë "
`I 4,14 0 0314
-Ì "
'I 4,14 0 0315
-Í "
^I 4,14 0 0316
-Î "
:I 4,14 0 0317
-Ï "
-D 11,11 0 0320
-Ð "
~N 11,14 0 0321
-Ñ "
`O 12,14 0 0322
-Ò "
'O 12,14 0 0323
-Ó "
^O 12,14 0 0324
-Ô "
~O 12,14 0 0325
-Õ "
:O 12,14 0 0326
-Ö "
-mu 9,8 0 0327
-× "
+tmu 9,8 0 0327
/O 12,11 0 0330
-Ø "
`U 11,14 0 0331
-Ù "
'U 11,14 0 0332
-Ú "
^U 11,14 0 0333
-Û "
:U 11,14 0 0334
-Ü "
'Y 10,14 0 0335
-Ý "
TP 10,11 0 0336
-Þ "
ss 8,11 0 0337
-ß "
`a 8,11 0 0340
-à "
'a 8,11 0 0341
-á "
^a 8,11 0 0342
-â "
~a 8,11 0 0343
-ã "
:a 8,11 0 0344
-ä "
oa 8,11 0 0345
-å "
ae 13,8 0 0346
-æ "
,c 9,8,3 0 0347
-ç "
`e 8,11 0 0350
-è "
'e 8,11 0 0351
-é "
^e 8,11 0 0352
-ê "
:e 8,11 0 0353
-ë "
`i 4,11 0 0354
-ì "
'i 4,11 0 0355
-í "
^i 4,11 0 0356
-î "
:i 4,11 0 0357
-ï "
Sd 9,11 0 0360
-ð "
~n 9,11 0 0361
-ñ "
`o 9,11 0 0362
-ò "
'o 9,11 0 0363
-ó "
^o 9,11 0 0364
-ô "
~o 9,11 0 0365
-õ "
:o 9,11 0 0366
-ö "
-di 9,8 0 0367
-÷ "
+tdi 9,8 0 0367
/o 9,8 0 0370
-ø "
`u 9,11 0 0371
-ù "
'u 9,11 0 0372
-ú "
^u 9,11 0 0373
-û "
:u 9,11 0 0374
-ü "
'y 8,11,3 0 0375
-ý "
Tp 9,11,3 0 0376
-þ "
:y 8,11,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/HBI b/contrib/groff/font/devX100/HBI
index bcfbfae..a259d29 100644
--- a/contrib/groff/font/devX100/HBI
+++ b/contrib/groff/font/devX100/HBI
@@ -1,6 +1,7 @@
name HBI
spacewidth 4
charset
+--- 10,11 0 00
--- 4,1 0 040
! 5,11 0 041
" 7,11 0 042
@@ -11,14 +12,14 @@ $ 8,12,1 0 044
Do "
% 13,11 0 045
& 11,10 0 046
-' 5,11 0 047
+' 4,11 0 047
cq "
( 5,11,3 0 050
) 6,11,3 0 051
* 6,11 0 052
+ 9,8 0 053
, 4,2,2 0 054
-\- 9,5 0 055
+\- 5,5 0 055
. 4,2 0 056
/ 4,11 0 057
sl "
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 5,8,3 0 0241
-¡ "
ct 8,9,1 0 0242
-¢ "
Po 9,11 0 0243
-£ "
Cs 9,8 0 0244
-¤ "
Ye 9,11 0 0245
-¥ "
bb 4,11,3 0 0246
-¦ "
sc 9,11,3 0 0247
-§ "
ad 5,11 0 0250
-¨ "
co 12,11 0 0251
-© "
Of 6,11 0 0252
-ª "
Fo 11,7 0 0253
-« "
no 9,6 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,11 0 0256
-® "
a- 5,11 0 0257
-¯ "
de 6,11 0 0260
-° "
-+- 9,9 0 0261
-± "
+t+- 9,9 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 5,11 0 0264
-´ "
-µ 9,8,3 0 0265
+mc 9,8,3 0 0265
ps 8,11,3 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 5,1,3 0 0270
-¸ "
S1 5,11 0 0271
-¹ "
Om 6,11 0 0272
-º "
Fc 11,7 0 0273
-» "
14 12,11 0 0274
-¼ "
12 12,11 0 0275
-½ "
34 13,11 0 0276
-¾ "
r? 8,8,3 0 0277
-¿ "
`A 9,14 0 0300
-À "
'A 9,14 0 0301
-Á "
^A 9,14 0 0302
-Â "
~A 9,14 0 0303
-Ã "
:A 9,14 0 0304
-Ä "
oA 9,14 0 0305
-Å "
AE 14,11 0 0306
-Æ "
,C 11,11,3 0 0307
-Ç "
`E 9,14 0 0310
-È "
'E 9,14 0 0311
-É "
^E 9,14 0 0312
-Ê "
:E 9,14 0 0313
-Ë "
`I 4,14 0 0314
-Ì "
'I 4,14 0 0315
-Í "
^I 4,14 0 0316
-Î "
:I 4,14 0 0317
-Ï "
-D 11,11 0 0320
-Ð "
~N 11,14 0 0321
-Ñ "
`O 12,14 0 0322
-Ò "
'O 12,14 0 0323
-Ó "
^O 12,14 0 0324
-Ô "
~O 12,14 0 0325
-Õ "
:O 12,14 0 0326
-Ö "
-mu 9,8 0 0327
-× "
+tmu 9,8 0 0327
/O 12,11 0 0330
-Ø "
`U 11,14 0 0331
-Ù "
'U 11,14 0 0332
-Ú "
^U 11,14 0 0333
-Û "
:U 11,14 0 0334
-Ü "
'Y 10,14 0 0335
-Ý "
TP 10,11 0 0336
-Þ "
ss 9,11 0 0337
-ß "
`a 8,11 0 0340
-à "
'a 8,11 0 0341
-á "
^a 8,11 0 0342
-â "
~a 8,11 0 0343
-ã "
:a 8,11 0 0344
-ä "
oa 8,11 0 0345
-å "
ae 13,8 0 0346
-æ "
,c 8,8,3 0 0347
-ç "
`e 8,11 0 0350
-è "
'e 8,11 0 0351
-é "
^e 8,11 0 0352
-ê "
:e 8,11 0 0353
-ë "
`i 4,11 0 0354
-ì "
'i 4,11 0 0355
-í "
^i 4,11 0 0356
-î "
:i 4,11 0 0357
-ï "
Sd 8,11 0 0360
-ð "
~n 9,11 0 0361
-ñ "
`o 8,11 0 0362
-ò "
'o 8,11 0 0363
-ó "
^o 8,11 0 0364
-ô "
~o 8,11 0 0365
-õ "
:o 8,11 0 0366
-ö "
-di 9,8 0 0367
-÷ "
+tdi 9,8 0 0367
/o 8,8 0 0370
-ø "
`u 9,11 0 0371
-ù "
'u 9,11 0 0372
-ú "
^u 9,11 0 0373
-û "
:u 9,11 0 0374
-ü "
'y 7,11,3 0 0375
-ý "
Tp 9,11,3 0 0376
-þ "
:y 7,11,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/HI b/contrib/groff/font/devX100/HI
index 4be615c..34371e4 100644
--- a/contrib/groff/font/devX100/HI
+++ b/contrib/groff/font/devX100/HI
@@ -1,6 +1,7 @@
name HI
spacewidth 4
charset
+--- 11,11 0 00
--- 4,1 0 040
! 4,11 0 041
" 5,11 0 042
@@ -18,7 +19,7 @@ cq "
* 8,11 0 052
+ 9,8 0 053
, 3,2,2 0 054
-\- 9,5 0 055
+\- 5,5 0 055
. 3,2 0 056
/ 4,11 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 8,0,3 0 0137
-` 3,11 0 0140
+` 4,11 0 0140
oq "
a 8,8 0 0141
b 8,11 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 4,8,3 0 0241
-¡ "
ct 8,9,1 0 0242
-¢ "
Po 9,11 0 0243
-£ "
Cs 8,8 0 0244
-¤ "
Ye 9,11 0 0245
-¥ "
bb 4,11,3 0 0246
-¦ "
sc 8,11,3 0 0247
-§ "
ad 5,10 0 0250
-¨ "
co 12,11 0 0251
-© "
Of 5,11 0 0252
-ª "
Fo 8,6 0 0253
-« "
no 9,6 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,11 0 0256
-® "
a- 4,10 0 0257
-¯ "
de 6,11 0 0260
-° "
-+- 9,9 0 0261
-± "
+t+- 9,9 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 4,11 0 0264
-´ "
-µ 8,8,3 0 0265
+mc 8,8,3 0 0265
ps 8,11,3 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 3,0,3 0 0270
-¸ "
S1 5,11 0 0271
-¹ "
Om 5,11 0 0272
-º "
Fc 8,6 0 0273
-» "
14 12,11 0 0274
-¼ "
12 12,11 0 0275
-½ "
34 12,11 0 0276
-¾ "
r? 8,8,3 0 0277
-¿ "
`A 11,14 0 0300
-À "
'A 11,14 0 0301
-Á "
^A 11,14 0 0302
-Â "
~A 11,14 0 0303
-Ã "
:A 11,13 0 0304
-Ä "
oA 11,14 0 0305
-Å "
AE 15,11 0 0306
-Æ "
,C 10,11,3 0 0307
-Ç "
`E 9,14 0 0310
-È "
'E 9,14 0 0311
-É "
^E 9,14 0 0312
-Ê "
:E 9,13 0 0313
-Ë "
`I 5,14 0 0314
-Ì "
'I 5,14 0 0315
-Í "
^I 5,14 0 0316
-Î "
:I 5,13 0 0317
-Ï "
-D 10,11 0 0320
-Ð "
~N 11,14 0 0321
-Ñ "
`O 11,14 0 0322
-Ò "
'O 11,14 0 0323
-Ó "
^O 11,14 0 0324
-Ô "
~O 11,14 0 0325
-Õ "
:O 11,13 0 0326
-Ö "
-mu 9,8 0 0327
-× "
+tmu 9,8 0 0327
/O 11,11 0 0330
-Ø "
`U 11,14 0 0331
-Ù "
'U 11,14 0 0332
-Ú "
^U 11,14 0 0333
-Û "
:U 11,13 0 0334
-Ü "
'Y 9,14 0 0335
-Ý "
TP 9,11 0 0336
-Þ "
ss 8,11 0 0337
-ß "
`a 8,11 0 0340
-à "
'a 8,11 0 0341
-á "
^a 8,11 0 0342
-â "
~a 8,11 0 0343
-ã "
:a 8,11 0 0344
-ä "
oa 8,11 0 0345
-å "
ae 12,8 0 0346
-æ "
,c 7,8,3 0 0347
-ç "
`e 8,11 0 0350
-è "
'e 8,11 0 0351
-é "
^e 8,11 0 0352
-ê "
:e 8,11 0 0353
-ë "
`i 3,11 0 0354
-ì "
'i 3,11 0 0355
-í "
^i 3,11 0 0356
-î "
:i 3,11 0 0357
-ï "
Sd 8,11 0 0360
-ð "
~n 8,11 0 0361
-ñ "
`o 8,11 0 0362
-ò "
'o 8,11 0 0363
-ó "
^o 8,11 0 0364
-ô "
~o 8,11 0 0365
-õ "
:o 8,11 0 0366
-ö "
-di 9,8 0 0367
-÷ "
+tdi 9,8 0 0367
/o 8,9,1 0 0370
-ø "
`u 8,11 0 0371
-ù "
'u 8,11 0 0372
-ú "
^u 8,11 0 0373
-û "
:u 8,11 0 0374
-ü "
'y 7,11,3 0 0375
-ý "
Tp 8,11,3 0 0376
-þ "
:y 7,11,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/HR b/contrib/groff/font/devX100/HR
index f462a24..c11485a 100644
--- a/contrib/groff/font/devX100/HR
+++ b/contrib/groff/font/devX100/HR
@@ -1,6 +1,7 @@
name HR
spacewidth 4
charset
+--- 10,11 0 00
--- 4,1 0 040
! 4,11 0 041
" 5,11 0 042
@@ -18,7 +19,7 @@ cq "
* 7,11 0 052
+ 9,8 0 053
, 3,2,2 0 054
-\- 9,5 0 055
+\- 4,5 0 055
. 3,2 0 056
/ 4,11 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 8,0,3 0 0137
-` 3,11 0 0140
+` 5,11 0 0140
oq "
a 8,8 0 0141
b 7,11 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 4,8,3 0 0241
-¡ "
ct 8,9,1 0 0242
-¢ "
Po 8,11 0 0243
-£ "
Cs 8,8 0 0244
-¤ "
Ye 7,11 0 0245
-¥ "
bb 3,11,3 0 0246
-¦ "
sc 8,11,3 0 0247
-§ "
ad 5,10 0 0250
-¨ "
co 12,11 0 0251
-© "
Of 6,11 0 0252
-ª "
Fo 8,7 0 0253
-« "
no 9,6 0 0254
-¬ "
- 4,5 0 0255
hy "
-­ "
rg 12,11 0 0256
-® "
a- 4,10 0 0257
-¯ "
de 6,11 0 0260
-° "
-+- 9,9 0 0261
-± "
+t+- 9,9 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 5,11 0 0264
-´ "
-µ 8,8,3 0 0265
+mc 8,8,3 0 0265
ps 8,11,3 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 5,0,3 0 0270
-¸ "
S1 5,11 0 0271
-¹ "
Om 6,11 0 0272
-º "
Fc 8,7 0 0273
-» "
14 12,11 0 0274
-¼ "
12 12,11 0 0275
-½ "
34 12,11 0 0276
-¾ "
r? 8,8,3 0 0277
-¿ "
`A 9,14 0 0300
-À "
'A 9,14 0 0301
-Á "
^A 9,14 0 0302
-Â "
-~A 9,13 0 0303
-Ã "
-:A 9,14 0 0304
-Ä "
+~A 9,14 0 0303
+:A 9,13 0 0304
oA 9,14 0 0305
-Å "
AE 14,11 0 0306
-Æ "
,C 10,11,3 0 0307
-Ç "
`E 9,14 0 0310
-È "
'E 9,14 0 0311
-É "
^E 9,14 0 0312
-Ê "
:E 9,13 0 0313
-Ë "
`I 4,14 0 0314
-Ì "
'I 4,14 0 0315
-Í "
^I 4,14 0 0316
-Î "
:I 4,13 0 0317
-Ï "
-D 10,11 0 0320
-Ð "
~N 10,14 0 0321
-Ñ "
`O 11,14 0 0322
-Ò "
'O 11,14 0 0323
-Ó "
^O 11,14 0 0324
-Ô "
~O 11,14 0 0325
-Õ "
:O 11,13 0 0326
-Ö "
-mu 9,8 0 0327
-× "
+tmu 9,8 0 0327
/O 11,11 0 0330
-Ø "
`U 10,14 0 0331
-Ù "
'U 10,14 0 0332
-Ú "
^U 10,14 0 0333
-Û "
:U 10,13 0 0334
-Ü "
'Y 9,14 0 0335
-Ý "
TP 9,11 0 0336
-Þ "
ss 7,11 0 0337
-ß "
`a 8,11 0 0340
-à "
'a 8,11 0 0341
-á "
^a 8,11 0 0342
-â "
~a 8,11 0 0343
-ã "
:a 8,11 0 0344
-ä "
oa 8,12 0 0345
-å "
ae 13,8 0 0346
-æ "
,c 8,8,3 0 0347
-ç "
`e 8,11 0 0350
-è "
'e 8,11 0 0351
-é "
^e 8,11 0 0352
-ê "
:e 8,11 0 0353
-ë "
`i 3,11 0 0354
-ì "
'i 3,11 0 0355
-í "
^i 3,11 0 0356
-î "
:i 3,11 0 0357
-ï "
Sd 8,11 0 0360
-ð "
~n 8,11 0 0361
-ñ "
`o 8,11 0 0362
-ò "
'o 8,11 0 0363
-ó "
^o 8,11 0 0364
-ô "
~o 8,11 0 0365
-õ "
:o 8,11 0 0366
-ö "
-di 9,8 0 0367
-÷ "
+tdi 9,8 0 0367
/o 8,8 0 0370
-ø "
`u 8,11 0 0371
-ù "
'u 8,11 0 0372
-ú "
^u 8,11 0 0373
-û "
:u 8,11 0 0374
-ü "
'y 7,11,3 0 0375
-ý "
Tp 8,11,3 0 0376
-þ "
-:y 7,10,3 0 0377
-ÿ "
+:y 7,11,3 0 0377
diff --git a/contrib/groff/font/devX100/NB b/contrib/groff/font/devX100/NB
index f99169e..80be698 100644
--- a/contrib/groff/font/devX100/NB
+++ b/contrib/groff/font/devX100/NB
@@ -1,7 +1,8 @@
name NB
-spacewidth 11
+spacewidth 4
charset
---- 11,1 0 040
+--- 12,11 0 00
+--- 4,1 0 040
! 4,11 0 041
" 5,11 0 042
dq "
@@ -11,19 +12,19 @@ $ 8,12,1 0 044
Do "
% 13,11 0 045
& 13,11 0 046
-' 4,11 0 047
+' 3,11 0 047
cq "
( 5,11,2 0 050
) 5,11,2 0 051
* 6,11 0 052
+ 8,8 0 053
, 4,3,2 0 054
-\- 8,5 0 055
+\- 5,5 0 055
. 4,3 0 056
/ 5,11 0 057
sl "
0 8,11 0 060
-1 6,11 0 061
+1 8,11 0 061
2 8,11 0 062
3 8,11 0 063
4 8,11 0 064
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,2 0 0137
-` 4,11 0 0140
+` 6,11 0 0140
oq "
a 9,7 0 0141
b 10,11 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 5,8,3 0 0241
-¡ "
ct 8,8,1 0 0242
-¢ "
Po 9,11 0 0243
-£ "
Cs 9,10 0 0244
-¤ "
Ye 11,11 0 0245
-¥ "
bb 8,11 0 0246
-¦ "
sc 7,11,2 0 0247
-§ "
ad 7,10 0 0250
-¨ "
co 12,11 0 0251
-© "
Of 6,11 0 0252
-ª "
Fo 8,6 0 0253
-« "
no 8,6 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,11 0 0256
-® "
a- 7,9 0 0257
-¯ "
de 6,11 0 0260
-° "
-+- 8,8 0 0261
-± "
+t+- 8,8 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 6,11 0 0264
-´ "
-µ 10,7,3 0 0265
+mc 10,7,3 0 0265
ps 10,11 0 0266
-¶ "
pc 5,6 0 0267
-· "
ac 5,0,3 0 0270
-¸ "
S1 5,11 0 0271
-¹ "
Om 6,11 0 0272
-º "
Fc 8,6 0 0273
-» "
14 12,11 0 0274
-¼ "
12 12,11 0 0275
-½ "
34 12,11 0 0276
-¾ "
r? 7,8,3 0 0277
-¿ "
`A 11,15 0 0300
-À "
'A 11,15 0 0301
-Á "
^A 11,15 0 0302
-Â "
~A 11,14 0 0303
-Ã "
:A 11,14 0 0304
-Ä "
oA 11,15 0 0305
-Å "
AE 15,11 0 0306
-Æ "
,C 11,11,3 0 0307
-Ç "
`E 10,15 0 0310
-È "
'E 10,15 0 0311
-É "
^E 10,15 0 0312
-Ê "
:E 10,14 0 0313
-Ë "
`I 7,15 0 0314
-Ì "
'I 7,15 0 0315
-Í "
^I 7,15 0 0316
-Î "
:I 7,14 0 0317
-Ï "
-D 12,11 0 0320
-Ð "
~N 12,14 0 0321
-Ñ "
`O 12,15 0 0322
-Ò "
'O 12,15 0 0323
-Ó "
^O 12,15 0 0324
-Ô "
~O 12,14 0 0325
-Õ "
:O 12,14 0 0326
-Ö "
-mu 8,8 0 0327
-× "
+tmu 8,8 0 0327
/O 12,11 0 0330
-Ø "
`U 12,15 0 0331
-Ù "
'U 12,15 0 0332
-Ú "
^U 12,15 0 0333
-Û "
:U 12,14 0 0334
-Ü "
-'Y 11,14 0 0335
-Ý "
+'Y 11,15 0 0335
TP 10,11 0 0336
-Þ "
ss 9,11 0 0337
-ß "
`a 9,11 0 0340
-à "
'a 9,11 0 0341
-á "
^a 9,11 0 0342
-â "
~a 9,10 0 0343
-ã "
:a 9,10 0 0344
-ä "
oa 9,11 0 0345
-å "
ae 14,7 0 0346
-æ "
,c 8,7,3 0 0347
-ç "
`e 9,11 0 0350
-è "
'e 9,11 0 0351
-é "
^e 9,11 0 0352
-ê "
:e 9,10 0 0353
-ë "
`i 5,11 0 0354
-ì "
'i 5,11 0 0355
-í "
^i 5,11 0 0356
-î "
:i 5,10 0 0357
-ï "
Sd 9,11 0 0360
-ð "
~n 10,10 0 0361
-ñ "
`o 9,11 0 0362
-ò "
'o 9,11 0 0363
-ó "
^o 9,11 0 0364
-ô "
~o 9,10 0 0365
-õ "
:o 9,10 0 0366
-ö "
-di 8,8 0 0367
-÷ "
+tdi 8,8 0 0367
/o 9,8,1 0 0370
-ø "
`u 10,11 0 0371
-ù "
'u 10,11 0 0372
-ú "
^u 10,11 0 0373
-û "
:u 10,10 0 0374
-ü "
'y 7,11,3 0 0375
-ý "
Tp 10,11,3 0 0376
-þ "
:y 7,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/NBI b/contrib/groff/font/devX100/NBI
index dd940af..e1b13d0 100644
--- a/contrib/groff/font/devX100/NBI
+++ b/contrib/groff/font/devX100/NBI
@@ -1,6 +1,7 @@
name NBI
spacewidth 4
charset
+--- 12,11 0 00
--- 4,1 0 040
! 5,11 0 041
" 6,11 0 042
@@ -18,7 +19,7 @@ cq "
* 7,11 0 052
+ 8,8 0 053
, 4,2,3 0 054
-\- 8,5 0 055
+\- 5,5 0 055
. 4,2 0 056
/ 5,11 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 9,0,2 0 0137
-` 4,11 0 0140
+` 5,11 0 0140
oq "
a 10,7 0 0141
b 8,11 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 5,8,3 0 0241
-¡ "
ct 8,8,1 0 0242
-¢ "
Po 10,11 0 0243
-£ "
Cs 8,9 0 0244
-¤ "
Ye 10,11 0 0245
-¥ "
bb 8,11 0 0246
-¦ "
sc 9,11,2 0 0247
-§ "
ad 6,10 0 0250
-¨ "
co 12,11 0 0251
-© "
Of 8,11 0 0252
-ª "
Fo 10,7 0 0253
-« "
no 9,7 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 12,11 0 0256
-® "
a- 6,9 0 0257
-¯ "
de 6,11 0 0260
-° "
-+- 8,8 0 0261
-± "
+t+- 8,8 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 5,11 0 0264
-´ "
-µ 10,7,3 0 0265
+mc 10,7,3 0 0265
ps 9,11 0 0266
-¶ "
pc 5,6 0 0267
-· "
ac 5,0,3 0 0270
-¸ "
S1 5,11 0 0271
-¹ "
Om 8,11 0 0272
-º "
Fc 10,7 0 0273
-» "
14 12,11 0 0274
-¼ "
12 12,11 0 0275
-½ "
34 12,11 0 0276
-¾ "
r? 7,8,3 0 0277
-¿ "
`A 11,15 0 0300
-À "
'A 11,15 0 0301
-Á "
^A 11,15 0 0302
-Â "
~A 11,14 0 0303
-Ã "
:A 11,14 0 0304
-Ä "
oA 11,15 0 0305
-Å "
AE 14,11 0 0306
-Æ "
,C 11,11,3 0 0307
-Ç "
`E 10,15 0 0310
-È "
'E 10,15 0 0311
-É "
^E 10,15 0 0312
-Ê "
:E 10,14 0 0313
-Ë "
`I 6,15 0 0314
-Ì "
'I 6,15 0 0315
-Í "
^I 6,15 0 0316
-Î "
:I 6,14 0 0317
-Ï "
-D 12,11 0 0320
-Ð "
~N 13,14 0 0321
-Ñ "
`O 12,15 0 0322
-Ò "
'O 12,15 0 0323
-Ó "
^O 12,15 0 0324
-Ô "
~O 12,14 0 0325
-Õ "
:O 12,14 0 0326
-Ö "
-mu 8,8 0 0327
-× "
+tmu 8,8 0 0327
/O 12,11 0 0330
-Ø "
`U 12,15 0 0331
-Ù "
'U 12,15 0 0332
-Ú "
^U 12,15 0 0333
-Û "
:U 12,14 0 0334
-Ü "
'Y 9,15 0 0335
-Ý "
TP 11,11 0 0336
-Þ "
ss 10,11,3 0 0337
-ß "
`a 10,11 0 0340
-à "
'a 10,11 0 0341
-á "
^a 10,11 0 0342
-â "
~a 10,10 0 0343
-ã "
:a 10,10 0 0344
-ä "
oa 10,11 0 0345
-å "
ae 13,7 0 0346
-æ "
,c 8,7,3 0 0347
-ç "
`e 8,11 0 0350
-è "
'e 8,11 0 0351
-é "
^e 8,11 0 0352
-ê "
:e 8,10 0 0353
-ë "
`i 5,11 0 0354
-ì "
'i 5,11 0 0355
-í "
^i 5,11 0 0356
-î "
:i 5,10 0 0357
-ï "
Sd 8,11 0 0360
-ð "
~n 10,10 0 0361
-ñ "
`o 8,11 0 0362
-ò "
'o 8,11 0 0363
-ó "
^o 8,11 0 0364
-ô "
~o 8,10 0 0365
-õ "
:o 8,10 0 0366
-ö "
-di 8,8 0 0367
-÷ "
+tdi 8,8 0 0367
/o 8,7 0 0370
-ø "
`u 10,11 0 0371
-ù "
'u 10,11 0 0372
-ú "
^u 10,11 0 0373
-û "
:u 10,10 0 0374
-ü "
'y 9,11,3 0 0375
-ý "
Tp 8,11,3 0 0376
-þ "
:y 9,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/NI b/contrib/groff/font/devX100/NI
index bb31b53..1213564 100644
--- a/contrib/groff/font/devX100/NI
+++ b/contrib/groff/font/devX100/NI
@@ -1,6 +1,7 @@
name NI
spacewidth 4
charset
+--- 11,11 0 00
--- 4,1 0 040
! 5,11 0 041
" 6,11 0 042
@@ -18,7 +19,7 @@ cq "
* 6,11 0 052
+ 8,8 0 053
, 4,2,2 0 054
-\- 9,5 0 055
+\- 5,5 0 055
. 4,2 0 056
/ 9,11,3 0 057
sl "
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 4,8,3 0 0241
-¡ "
ct 8,9,2 0 0242
-¢ "
Po 9,11 0 0243
-£ "
Cs 8,9 0 0244
-¤ "
Ye 9,11 0 0245
-¥ "
bb 8,11 0 0246
-¦ "
sc 7,11,2 0 0247
-§ "
ad 7,10 0 0250
-¨ "
co 13,11 0 0251
-© "
Of 6,11 0 0252
-ª "
Fo 8,7 0 0253
-« "
no 8,6 0 0254
-¬ "
- 5,5 0 0255
hy "
-­ "
rg 13,11 0 0256
-® "
a- 6,9 0 0257
-¯ "
de 6,11 0 0260
-° "
-+- 8,8 0 0261
-± "
+t+- 8,8 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 4,11 0 0264
-´ "
-µ 9,7,3 0 0265
+mc 9,7,3 0 0265
ps 9,11 0 0266
-¶ "
pc 5,6 0 0267
-· "
ac 5,0,3 0 0270
-¸ "
S1 5,11 0 0271
-¹ "
Om 6,11 0 0272
-º "
Fc 8,7 0 0273
-» "
14 12,11 0 0274
-¼ "
12 12,11 0 0275
-½ "
34 12,11 0 0276
-¾ "
r? 6,8,3 0 0277
-¿ "
`A 11,14 0 0300
-À "
'A 11,14 0 0301
-Á "
^A 11,14 0 0302
-Â "
~A 11,14 0 0303
-Ã "
:A 11,14 0 0304
-Ä "
oA 11,14 0 0305
-Å "
AE 14,11 0 0306
-Æ "
,C 10,11,3 0 0307
-Ç "
`E 9,14 0 0310
-È "
'E 9,14 0 0311
-É "
^E 9,14 0 0312
-Ê "
:E 9,14 0 0313
-Ë "
`I 7,14 0 0314
-Ì "
'I 7,14 0 0315
-Í "
^I 7,14 0 0316
-Î "
:I 7,14 0 0317
-Ï "
-D 11,11 0 0320
-Ð "
~N 12,14 0 0321
-Ñ "
`O 10,14 0 0322
-Ò "
'O 10,14 0 0323
-Ó "
^O 10,14 0 0324
-Ô "
~O 10,14 0 0325
-Õ "
:O 10,14 0 0326
-Ö "
-mu 8,8 0 0327
-× "
+tmu 8,8 0 0327
/O 10,11 0 0330
-Ø "
`U 12,14 0 0331
-Ù "
'U 12,14 0 0332
-Ú "
^U 12,14 0 0333
-Û "
:U 12,14 0 0334
-Ü "
'Y 9,14 0 0335
-Ý "
TP 10,11 0 0336
-Þ "
ss 8,11,3 0 0337
-ß "
`a 9,11 0 0340
-à "
'a 9,11 0 0341
-á "
^a 9,11 0 0342
-â "
~a 9,10 0 0343
-ã "
:a 9,10 0 0344
-ä "
oa 9,11 0 0345
-å "
ae 10,7 0 0346
-æ "
,c 6,7,3 0 0347
-ç "
`e 6,11 0 0350
-è "
'e 6,11 0 0351
-é "
^e 6,11 0 0352
-ê "
:e 6,10 0 0353
-ë "
`i 4,11 0 0354
-ì "
'i 4,11 0 0355
-í "
^i 4,11 0 0356
-î "
:i 4,10 0 0357
-ï "
Sd 7,11 0 0360
-ð "
~n 9,10 0 0361
-ñ "
`o 7,11 0 0362
-ò "
'o 7,11 0 0363
-ó "
^o 7,11 0 0364
-ô "
~o 7,10 0 0365
-õ "
:o 7,10 0 0366
-ö "
-di 8,8 0 0367
-÷ "
+tdi 8,8 0 0367
/o 7,8,1 0 0370
-ø "
`u 9,11 0 0371
-ù "
'u 9,11 0 0372
-ú "
^u 9,11 0 0373
-û "
:u 9,10 0 0374
-ü "
'y 7,11,3 0 0375
-ý "
Tp 7,11,3 0 0376
-þ "
:y 7,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/NR b/contrib/groff/font/devX100/NR
index 729f76e..86def3e 100644
--- a/contrib/groff/font/devX100/NR
+++ b/contrib/groff/font/devX100/NR
@@ -1,6 +1,7 @@
name NR
spacewidth 4
charset
+--- 12,11 0 00
--- 4,1 0 040
! 3,11 0 041
" 5,11 0 042
@@ -11,14 +12,14 @@ $ 8,12,2 0 044
Do "
% 12,11 0 045
& 13,11 0 046
-' 4,11 0 047
+' 3,11 0 047
cq "
( 5,11,2 0 050
) 6,11,2 0 051
* 7,11 0 052
+ 9,7 0 053
, 4,2,2 0 054
-\- 9,4 0 055
+\- 5,4 0 055
. 4,2 0 056
/ 4,11 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,2 0 0137
-` 4,11 0 0140
+` 5,11 0 0140
oq "
a 8,7 0 0141
b 7,11 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 4,8,3 0 0241
-¡ "
ct 8,9,2 0 0242
-¢ "
Po 8,11 0 0243
-£ "
Cs 8,9 0 0244
-¤ "
Ye 8,11 0 0245
-¥ "
bb 9,11 0 0246
-¦ "
sc 7,11,2 0 0247
-§ "
ad 6,10 0 0250
-¨ "
co 14,11 0 0251
-© "
Of 6,11 0 0252
-ª "
Fo 7,6 0 0253
-« "
no 9,5 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 14,11 0 0256
-® "
a- 5,9 0 0257
-¯ "
de 6,11 0 0260
-° "
-+- 9,7 0 0261
-± "
+t+- 9,7 0 0261
S2 5,11 0 0262
-² "
S3 5,11 0 0263
-³ "
aa 5,11 0 0264
-´ "
-µ 9,7,3 0 0265
+mc 9,7,3 0 0265
ps 9,11,2 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 5,1,3 0 0270
-¸ "
S1 5,11 0 0271
-¹ "
Om 5,11 0 0272
-º "
Fc 7,6 0 0273
-» "
14 12,11 0 0274
-¼ "
12 12,11 0 0275
-½ "
34 12,11 0 0276
-¾ "
r? 6,8,3 0 0277
-¿ "
`A 10,14 0 0300
-À "
'A 10,14 0 0301
-Á "
^A 10,14 0 0302
-Â "
~A 10,14 0 0303
-Ã "
:A 10,13 0 0304
-Ä "
oA 10,14 0 0305
-Å "
AE 15,11 0 0306
-Æ "
,C 11,11,3 0 0307
-Ç "
`E 10,14 0 0310
-È "
'E 10,14 0 0311
-É "
^E 10,14 0 0312
-Ê "
:E 10,14 0 0313
-Ë "
`I 6,14 0 0314
-Ì "
'I 6,14 0 0315
-Í "
^I 6,14 0 0316
-Î "
:I 6,14 0 0317
-Ï "
-D 11,11 0 0320
-Ð "
~N 13,14 0 0321
-Ñ "
`O 11,14 0 0322
-Ò "
'O 11,14 0 0323
-Ó "
^O 11,14 0 0324
-Ô "
~O 11,14 0 0325
-Õ "
:O 11,14 0 0326
-Ö "
-mu 9,7 0 0327
-× "
+tmu 9,7 0 0327
/O 11,11 0 0330
-Ø "
`U 13,14 0 0331
-Ù "
'U 13,14 0 0332
-Ú "
^U 13,14 0 0333
-Û "
:U 13,14 0 0334
-Ü "
'Y 10,14 0 0335
-Ý "
TP 10,11 0 0336
-Þ "
ss 8,11 0 0337
-ß "
`a 8,11 0 0340
-à "
'a 8,11 0 0341
-á "
^a 8,11 0 0342
-â "
~a 8,10 0 0343
-ã "
:a 8,10 0 0344
-ä "
oa 8,11 0 0345
-å "
ae 12,7 0 0346
-æ "
,c 7,7,3 0 0347
-ç "
`e 7,11 0 0350
-è "
'e 7,11 0 0351
-é "
^e 7,11 0 0352
-ê "
:e 7,10 0 0353
-ë "
`i 4,11 0 0354
-ì "
'i 4,11 0 0355
-í "
^i 4,11 0 0356
-î "
:i 4,10 0 0357
-ï "
Sd 7,11 0 0360
-ð "
~n 9,10 0 0361
-ñ "
`o 7,11 0 0362
-ò "
'o 7,11 0 0363
-ó "
^o 7,11 0 0364
-ô "
~o 7,10 0 0365
-õ "
:o 7,10 0 0366
-ö "
-di 9,7 0 0367
-÷ "
+tdi 9,7 0 0367
/o 7,8,1 0 0370
-ø "
`u 9,11 0 0371
-ù "
'u 9,11 0 0372
-ú "
^u 9,11 0 0373
-û "
:u 9,10 0 0374
-ü "
'y 8,11,3 0 0375
-ý "
Tp 8,11,3 0 0376
-þ "
:y 8,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/S b/contrib/groff/font/devX100/S
index 59af889..2669ba1 100644
--- a/contrib/groff/font/devX100/S
+++ b/contrib/groff/font/devX100/S
@@ -88,7 +88,6 @@ radicalex 7,12 0 0140
*k 8,7 0 0153
*l 8,10 0 0154
*m 8,7,2 0 0155
-µ "
*n 8,7 0 0156
*o 8,7 0 0157
*p 8,7 0 0160
@@ -128,18 +127,14 @@ arrowverttp "
da 9,12,3 0 0257
arrowvertbt "
de 6,10 0 0260
-° "
+- 8,9 0 0261
-± "
sd 6,10 0 0262
>= 8,9 0 0263
mu 8,7 0 0264
-× "
pt 10,6 0 0265
pd 7,11 0 0266
bu 7,6 0 0267
di 8,7 0 0270
-÷ "
!= 8,7 0 0271
== 8,6 0 0272
~= 8,7 0 0273
@@ -159,7 +154,7 @@ ca 10,7 0 0307
cu 10,7 0 0310
sp 10,7 0 0311
ip 10,7,2 0 0312
---- 10,8,1 0 0313
+nb 10,8,1 0 0313
sb 10,7 0 0314
ib 10,7,2 0 0315
mo 10,7 0 0316
@@ -173,7 +168,6 @@ tm 11,10 0 0324
sr 8,12 0 0326
md 4,5 0 0327
no 10,5 0 0330
-¬ "
AN 9,7 0 0331
OR 9,7 0 0332
hA 15,7 0 0333
@@ -204,7 +198,6 @@ lb "
bracerightex 7,12,3 0 0357
braceleftex "
bv "
---- 12,12 0 0360
ra 5,12,3 0 0361
is 4,12,1 0 0362
--- 10,12,3 0 0363
diff --git a/contrib/groff/font/devX100/TB b/contrib/groff/font/devX100/TB
index f9f191c..cc40c0b 100644
--- a/contrib/groff/font/devX100/TB
+++ b/contrib/groff/font/devX100/TB
@@ -1,6 +1,7 @@
name TB
spacewidth 3
charset
+--- 11,9 0 00
--- 3,1 0 040
! 4,10 0 041
" 7,10 0 042
@@ -18,7 +19,7 @@ cq "
* 7,10 0 052
+ 8,7 0 053
, 3,2,2 0 054
-\- 9,4 0 055
+\- 4,4 0 055
. 3,2 0 056
/ 4,10 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,3 0 0137
-` 4,10 0 0140
+` 5,11 0 0140
oq "
a 7,7 0 0141
b 8,10 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 4,7,3 0 0241
-¡ "
ct 7,9,2 0 0242
-¢ "
Po 8,10 0 0243
-£ "
Cs 8,8 0 0244
-¤ "
Ye 8,10 0 0245
-¥ "
bb 3,10,2 0 0246
-¦ "
sc 7,10,2 0 0247
-§ "
ad 5,10 0 0250
-¨ "
co 12,10 0 0251
-© "
Of 5,10 0 0252
-ª "
Fo 9,6 0 0253
-« "
no 9,5 0 0254
-¬ "
- 4,4 0 0255
hy "
-­ "
rg 12,10 0 0256
-® "
a- 5,9 0 0257
-¯ "
de 6,10 0 0260
-° "
-+- 8,9 0 0261
-± "
+t+- 8,9 0 0261
S2 4,10 0 0262
-² "
S3 4,10 0 0263
-³ "
aa 5,11 0 0264
-´ "
-µ 7,7,3 0 0265
+mc 7,7,3 0 0265
ps 8,10,3 0 0266
-¶ "
pc 4,6 0 0267
-· "
ac 5,0,3 0 0270
-¸ "
S1 4,10 0 0271
-¹ "
Om 5,10 0 0272
-º "
Fc 9,6 0 0273
-» "
14 10,10 0 0274
-¼ "
12 10,10 0 0275
-½ "
34 10,10 0 0276
-¾ "
r? 7,7,3 0 0277
-¿ "
`A 10,14 0 0300
-À "
'A 10,14 0 0301
-Á "
^A 10,14 0 0302
-Â "
~A 10,13 0 0303
-Ã "
:A 10,13 0 0304
-Ä "
oA 10,14 0 0305
-Å "
AE 14,10 0 0306
-Æ "
,C 10,10,3 0 0307
-Ç "
`E 9,14 0 0310
-È "
'E 9,14 0 0311
-É "
^E 9,14 0 0312
-Ê "
:E 9,13 0 0313
-Ë "
`I 5,14 0 0314
-Ì "
'I 5,14 0 0315
-Í "
^I 5,14 0 0316
-Î "
:I 5,13 0 0317
-Ï "
-D 11,10 0 0320
-Ð "
~N 10,13 0 0321
-Ñ "
`O 11,14 0 0322
-Ò "
'O 11,14 0 0323
-Ó "
^O 11,14 0 0324
-Ô "
~O 11,13 0 0325
-Õ "
:O 11,13 0 0326
-Ö "
-mu 8,7 0 0327
-× "
+tmu 8,7 0 0327
/O 11,11,1 0 0330
-Ø "
`U 10,14 0 0331
-Ù "
'U 10,14 0 0332
-Ú "
^U 10,14 0 0333
-Û "
:U 10,13 0 0334
-Ü "
'Y 10,14 0 0335
-Ý "
TP 9,10 0 0336
-Þ "
ss 8,10 0 0337
-ß "
`a 7,11 0 0340
-à "
'a 7,11 0 0341
-á "
^a 7,11 0 0342
-â "
~a 7,10 0 0343
-ã "
:a 7,10 0 0344
-ä "
oa 7,11 0 0345
-å "
ae 11,7 0 0346
-æ "
,c 7,7,3 0 0347
-ç "
`e 7,11 0 0350
-è "
'e 7,11 0 0351
-é "
^e 7,11 0 0352
-ê "
:e 7,10 0 0353
-ë "
`i 4,11 0 0354
-ì "
'i 4,11 0 0355
-í "
^i 4,11 0 0356
-î "
:i 4,10 0 0357
-ï "
Sd 7,10 0 0360
-ð "
~n 8,10 0 0361
-ñ "
`o 7,11 0 0362
-ò "
'o 7,11 0 0363
-ó "
^o 7,11 0 0364
-ô "
~o 7,10 0 0365
-õ "
:o 7,10 0 0366
-ö "
-di 8,7 0 0367
-÷ "
+tdi 8,7 0 0367
/o 7,8,1 0 0370
-ø "
`u 7,11 0 0371
-ù "
'u 7,11 0 0372
-ú "
^u 7,11 0 0373
-û "
:u 7,10 0 0374
-ü "
'y 7,11,3 0 0375
-ý "
Tp 8,10,3 0 0376
-þ "
:y 7,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/TBI b/contrib/groff/font/devX100/TBI
index 76e9828..d892249 100644
--- a/contrib/groff/font/devX100/TBI
+++ b/contrib/groff/font/devX100/TBI
@@ -1,6 +1,7 @@
name TBI
spacewidth 3
charset
+--- 11,9 0 00
--- 3,1 0 040
! 7,10 0 041
" 7,10 0 042
@@ -11,14 +12,14 @@ $ 7,11,1 0 044
Do "
% 14,10 0 045
& 10,10 0 046
-' 5,10 0 047
+' 4,10 0 047
cq "
( 6,10,3 0 050
) 6,10,3 0 051
* 7,10 0 052
+ 9,7 0 053
, 4,2,2 0 054
-\- 9,4 0 055
+\- 5,4 0 055
. 3,2 0 056
/ 6,10 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,2 0 0137
-` 5,10 0 0140
+` 6,10 0 0140
oq "
a 8,7 0 0141
b 7,10 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 7,7,3 0 0241
-¡ "
ct 7,8,1 0 0242
-¢ "
Po 7,10 0 0243
-£ "
Cs 8,8 0 0244
-¤ "
Ye 7,10 0 0245
-¥ "
bb 4,10 0 0246
-¦ "
sc 8,10,3 0 0247
-§ "
ad 6,9 0 0250
-¨ "
co 12,10 0 0251
-© "
Of 6,10 0 0252
-ª "
Fo 8,6 0 0253
-« "
no 9,5 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 12,10 0 0256
-® "
a- 6,9 0 0257
-¯ "
de 6,10 0 0260
-° "
-+- 9,9 0 0261
-± "
+t+- 9,9 0 0261
S2 4,10 0 0262
-² "
S3 4,10 0 0263
-³ "
aa 6,10 0 0264
-´ "
-µ 7,7,3 0 0265
+mc 7,7,3 0 0265
ps 8,10,3 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 5,0,3 0 0270
-¸ "
S1 4,10 0 0271
-¹ "
Om 6,10 0 0272
-º "
Fc 8,6 0 0273
-» "
14 10,10 0 0274
-¼ "
12 10,10 0 0275
-½ "
34 10,10 0 0276
-¾ "
r? 8,7,3 0 0277
-¿ "
`A 9,13 0 0300
-À "
'A 9,13 0 0301
-Á "
^A 9,13 0 0302
-Â "
~A 9,13 0 0303
-Ã "
:A 9,13 0 0304
-Ä "
oA 9,13 0 0305
-Å "
AE 14,10 0 0306
-Æ "
,C 9,10,3 0 0307
-Ç "
`E 10,13 0 0310
-È "
'E 10,13 0 0311
-É "
^E 10,13 0 0312
-Ê "
:E 10,13 0 0313
-Ë "
`I 5,13 0 0314
-Ì "
'I 5,13 0 0315
-Í "
^I 5,13 0 0316
-Î "
:I 5,13 0 0317
-Ï "
-D 10,10 0 0320
-Ð "
~N 11,13 0 0321
-Ñ "
`O 10,13 0 0322
-Ò "
'O 10,13 0 0323
-Ó "
^O 10,13 0 0324
-Ô "
~O 10,13 0 0325
-Õ "
:O 10,13 0 0326
-Ö "
-mu 9,7 0 0327
-× "
+tmu 9,7 0 0327
/O 10,11,1 0 0330
-Ø "
`U 10,13 0 0331
-Ù "
'U 10,13 0 0332
-Ú "
^U 10,13 0 0333
-Û "
:U 10,13 0 0334
-Ü "
'Y 8,13 0 0335
-Ý "
TP 9,10 0 0336
-Þ "
ss 7,10,3 0 0337
-ß "
`a 8,10 0 0340
-à "
'a 8,10 0 0341
-á "
^a 8,11 0 0342
-â "
~a 8,10 0 0343
-ã "
:a 8,10 0 0344
-ä "
oa 8,11 0 0345
-å "
ae 11,7 0 0346
-æ "
,c 6,7,3 0 0347
-ç "
`e 7,10 0 0350
-è "
'e 7,10 0 0351
-é "
^e 7,11 0 0352
-ê "
:e 7,10 0 0353
-ë "
`i 4,10 0 0354
-ì "
'i 4,10 0 0355
-í "
^i 4,11 0 0356
-î "
:i 4,10 0 0357
-ï "
Sd 7,10 0 0360
-ð "
~n 8,10 0 0361
-ñ "
`o 7,10 0 0362
-ò "
'o 7,10 0 0363
-ó "
^o 7,11 0 0364
-ô "
~o 7,10 0 0365
-õ "
:o 7,10 0 0366
-ö "
-di 9,7 0 0367
-÷ "
+tdi 9,7 0 0367
/o 7,8,1 0 0370
-ø "
`u 7,10 0 0371
-ù "
'u 7,10 0 0372
-ú "
^u 7,11 0 0373
-û "
:u 7,10 0 0374
-ü "
'y 6,10,2 0 0375
-ý "
Tp 7,10,3 0 0376
-þ "
:y 6,10,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/TI b/contrib/groff/font/devX100/TI
index 53401e5..12fec44 100644
--- a/contrib/groff/font/devX100/TI
+++ b/contrib/groff/font/devX100/TI
@@ -1,6 +1,7 @@
name TI
spacewidth 3
charset
+--- 10,9 0 00
--- 3,1 0 040
! 5,10 0 041
" 6,10 0 042
@@ -11,14 +12,14 @@ $ 7,11,1 0 044
Do "
% 12,10 0 045
& 11,10 0 046
-' 5,10 0 047
+' 3,10 0 047
cq "
( 5,10,3 0 050
) 5,10,3 0 051
* 7,10 0 052
+ 10,7 0 053
, 4,2,1 0 054
-\- 9,4 0 055
+\- 5,4 0 055
. 3,2 0 056
/ 4,10 0 057
sl "
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 6,7,3 0 0241
-¡ "
ct 7,9,2 0 0242
-¢ "
Po 7,10 0 0243
-£ "
Cs 7,8 0 0244
-¤ "
Ye 7,10 0 0245
-¥ "
bb 4,10,3 0 0246
-¦ "
sc 7,11,2 0 0247
-§ "
ad 5,10 0 0250
-¨ "
co 12,10 0 0251
-© "
Of 5,10 0 0252
-ª "
Fo 7,6 0 0253
-« "
no 9,6 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 12,10 0 0256
-® "
a- 5,10 0 0257
-¯ "
de 6,10 0 0260
-° "
-+- 10,9 0 0261
-± "
+t+- 10,9 0 0261
S2 4,10 0 0262
-² "
S3 4,10 0 0263
-³ "
aa 4,10 0 0264
-´ "
-µ 7,7,3 0 0265
+mc 7,7,3 0 0265
ps 8,10,3 0 0266
-¶ "
pc 4,4 0 0267
-· "
ac 5,0,3 0 0270
-¸ "
S1 4,10 0 0271
-¹ "
Om 5,10 0 0272
-º "
Fc 7,6 0 0273
-» "
14 10,10 0 0274
-¼ "
12 10,10 0 0275
-½ "
34 10,10 0 0276
-¾ "
r? 7,7,3 0 0277
-¿ "
`A 9,13 0 0300
-À "
'A 9,13 0 0301
-Á "
^A 9,13 0 0302
-Â "
~A 9,13 0 0303
-Ã "
:A 9,12 0 0304
-Ä "
oA 9,13 0 0305
-Å "
AE 13,10 0 0306
-Æ "
,C 9,10,3 0 0307
-Ç "
`E 9,13 0 0310
-È "
'E 9,13 0 0311
-É "
^E 9,13 0 0312
-Ê "
:E 9,12 0 0313
-Ë "
`I 5,13 0 0314
-Ì "
'I 5,13 0 0315
-Í "
^I 5,13 0 0316
-Î "
:I 5,12 0 0317
-Ï "
-D 10,10 0 0320
-Ð "
~N 11,13 0 0321
-Ñ "
`O 10,13 0 0322
-Ò "
'O 10,13 0 0323
-Ó "
^O 10,13 0 0324
-Ô "
~O 10,13 0 0325
-Õ "
:O 10,12 0 0326
-Ö "
-mu 10,7 0 0327
-× "
+tmu 10,7 0 0327
/O 10,11,1 0 0330
-Ø "
`U 10,13 0 0331
-Ù "
'U 10,13 0 0332
-Ú "
^U 10,13 0 0333
-Û "
:U 10,12 0 0334
-Ü "
'Y 8,13 0 0335
-Ý "
TP 9,10 0 0336
-Þ "
ss 7,10,3 0 0337
-ß "
`a 7,10 0 0340
-à "
'a 7,10 0 0341
-á "
^a 7,11 0 0342
-â "
~a 7,10 0 0343
-ã "
:a 7,9 0 0344
-ä "
oa 7,10 0 0345
-å "
ae 10,7 0 0346
-æ "
,c 6,7,3 0 0347
-ç "
`e 7,10 0 0350
-è "
'e 7,10 0 0351
-é "
^e 7,11 0 0352
-ê "
:e 7,9 0 0353
-ë "
`i 4,10 0 0354
-ì "
'i 4,10 0 0355
-í "
^i 4,11 0 0356
-î "
:i 4,9 0 0357
-ï "
Sd 7,10 0 0360
-ð "
~n 7,10 0 0361
-ñ "
`o 7,10 0 0362
-ò "
'o 7,10 0 0363
-ó "
^o 7,11 0 0364
-ô "
~o 7,10 0 0365
-õ "
:o 7,9 0 0366
-ö "
-di 10,7 0 0367
-÷ "
+tdi 10,7 0 0367
/o 7,8,1 0 0370
-ø "
`u 7,10 0 0371
-ù "
'u 7,10 0 0372
-ú "
^u 7,11 0 0373
-û "
:u 7,9 0 0374
-ü "
'y 7,10,3 0 0375
-ý "
Tp 7,10,3 0 0376
-þ "
:y 7,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX100/TR b/contrib/groff/font/devX100/TR
index 39d106a..f27ea9d 100644
--- a/contrib/groff/font/devX100/TR
+++ b/contrib/groff/font/devX100/TR
@@ -1,6 +1,7 @@
name TR
spacewidth 3
charset
+--- 10,9 0 00
--- 3,1 0 040
! 5,10 0 041
" 6,10 0 042
@@ -11,14 +12,14 @@ $ 7,11,1 0 044
Do "
% 12,10 0 045
& 11,10 0 046
-' 4,10 0 047
+' 3,10 0 047
cq "
( 5,10,3 0 050
) 5,10,3 0 051
* 7,10 0 052
+ 8,7 0 053
, 4,1,2 0 054
-\- 9,4 0 055
+\- 4,4 0 055
. 4,1 0 056
/ 4,10,2 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,3 0 0137
-` 4,10 0 0140
+` 5,11 0 0140
oq "
a 7,7 0 0141
b 7,10 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 5,7,3 0 0241
-¡ "
ct 7,8,1 0 0242
-¢ "
Po 8,10 0 0243
-£ "
Cs 7,8 0 0244
-¤ "
Ye 7,10 0 0245
-¥ "
bb 3,10 0 0246
-¦ "
sc 7,10,3 0 0247
-§ "
ad 5,10 0 0250
-¨ "
co 12,10 0 0251
-© "
Of 4,10 0 0252
-ª "
Fo 7,6 0 0253
-« "
no 9,6 0 0254
-¬ "
- 4,4 0 0255
hy "
-­ "
rg 12,10 0 0256
-® "
a- 4,9 0 0257
-¯ "
de 6,10 0 0260
-° "
-+- 8,7 0 0261
-± "
+t+- 8,7 0 0261
S2 4,10 0 0262
-² "
S3 4,10 0 0263
-³ "
aa 5,11 0 0264
-´ "
-µ 7,7,3 0 0265
+mc 7,7,3 0 0265
ps 7,10,3 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 5,0,3 0 0270
-¸ "
S1 4,10 0 0271
-¹ "
Om 5,10 0 0272
-º "
Fc 7,6 0 0273
-» "
14 10,10 0 0274
-¼ "
12 10,10 0 0275
-½ "
34 10,10 0 0276
-¾ "
r? 6,7,3 0 0277
-¿ "
`A 11,14 0 0300
-À "
'A 11,14 0 0301
-Á "
^A 11,14 0 0302
-Â "
~A 11,14 0 0303
-Ã "
:A 11,13 0 0304
-Ä "
oA 11,14 0 0305
-Å "
AE 13,10 0 0306
-Æ "
,C 10,10,3 0 0307
-Ç "
`E 9,14 0 0310
-È "
'E 9,14 0 0311
-É "
^E 9,14 0 0312
-Ê "
:E 9,13 0 0313
-Ë "
`I 5,14 0 0314
-Ì "
'I 5,14 0 0315
-Í "
^I 5,14 0 0316
-Î "
:I 5,13 0 0317
-Ï "
-D 10,10 0 0320
-Ð "
~N 11,14 0 0321
-Ñ "
`O 10,14 0 0322
-Ò "
'O 10,14 0 0323
-Ó "
^O 10,14 0 0324
-Ô "
~O 10,14 0 0325
-Õ "
:O 10,13 0 0326
-Ö "
-mu 8,7 0 0327
-× "
+tmu 8,7 0 0327
/O 10,11,1 0 0330
-Ø "
`U 10,14 0 0331
-Ù "
'U 10,14 0 0332
-Ú "
^U 10,14 0 0333
-Û "
:U 10,13 0 0334
-Ü "
'Y 9,14 0 0335
-Ý "
TP 8,10 0 0336
-Þ "
ss 7,10 0 0337
-ß "
`a 7,11 0 0340
-à "
'a 7,11 0 0341
-á "
^a 7,11 0 0342
-â "
~a 7,11 0 0343
-ã "
:a 7,10 0 0344
-ä "
oa 7,11 0 0345
-å "
ae 11,7 0 0346
-æ "
,c 7,7,3 0 0347
-ç "
`e 7,11 0 0350
-è "
'e 7,11 0 0351
-é "
^e 7,11 0 0352
-ê "
:e 7,10 0 0353
-ë "
`i 3,11 0 0354
-ì "
'i 3,11 0 0355
-í "
^i 3,11 0 0356
-î "
:i 3,10 0 0357
-ï "
Sd 7,10 0 0360
-ð "
~n 7,11 0 0361
-ñ "
`o 7,11 0 0362
-ò "
'o 7,11 0 0363
-ó "
^o 7,11 0 0364
-ô "
~o 7,11 0 0365
-õ "
:o 7,10 0 0366
-ö "
-di 8,7 0 0367
-÷ "
+tdi 8,7 0 0367
/o 7,8,1 0 0370
-ø "
`u 7,11 0 0371
-ù "
'u 7,11 0 0372
-ú "
^u 7,11 0 0373
-û "
:u 7,10 0 0374
-ü "
'y 7,11,3 0 0375
-ý "
Tp 7,10,3 0 0376
-þ "
:y 7,10,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/CB b/contrib/groff/font/devX75-12/CB
index 8b3766c..e1ea460 100644
--- a/contrib/groff/font/devX75-12/CB
+++ b/contrib/groff/font/devX75-12/CB
@@ -1,6 +1,7 @@
name CB
spacewidth 7
charset
+--- 7,7 0 00
--- 7,1 0 040
! 7,9 0 041
" 7,8 0 042
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,2 0 0137
-` 7,8 0 0140
+` 7,9 0 0140
oq "
a 7,6 0 0141
b 7,9 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 7,1 0 0240
r! 7,6,3 0 0241
-¡ "
ct 7,8,1 0 0242
-¢ "
Po 7,8 0 0243
-£ "
Cs 7,7 0 0244
-¤ "
Ye 7,8 0 0245
-¥ "
bb 7,8,2 0 0246
-¦ "
sc 7,9,1 0 0247
-§ "
ad 7,9 0 0250
-¨ "
co 7,8 0 0251
-© "
Of 7,9 0 0252
-ª "
Fo 7,5 0 0253
-« "
no 7,5 0 0254
-¬ "
- 7,4 0 0255
hy "
-­ "
rg 7,8 0 0256
-® "
a- 7,8 0 0257
-¯ "
de 7,8 0 0260
-° "
-+- 7,6 0 0261
-± "
+t+- 7,6 0 0261
S2 7,8 0 0262
-² "
S3 7,8 0 0263
-³ "
aa 7,9 0 0264
-´ "
-µ 7,6,3 0 0265
+mc 7,6,3 0 0265
ps 7,9,1 0 0266
-¶ "
pc 7,5 0 0267
-· "
ac 7,0,3 0 0270
-¸ "
S1 7,8 0 0271
-¹ "
Om 7,9 0 0272
-º "
Fc 7,5 0 0273
-» "
14 7,9,1 0 0274
-¼ "
12 7,9,1 0 0275
-½ "
34 7,9,1 0 0276
-¾ "
r? 7,6,3 0 0277
-¿ "
`A 7,11 0 0300
-À "
'A 7,11 0 0301
-Á "
^A 7,11 0 0302
-Â "
~A 7,11 0 0303
-Ã "
:A 7,10 0 0304
-Ä "
oA 7,11 0 0305
-Å "
AE 7,8 0 0306
-Æ "
,C 7,8,3 0 0307
-Ç "
`E 7,11 0 0310
-È "
'E 7,11 0 0311
-É "
^E 7,11 0 0312
-Ê "
:E 7,10 0 0313
-Ë "
`I 7,11 0 0314
-Ì "
'I 7,11 0 0315
-Í "
^I 7,11 0 0316
-Î "
:I 7,10 0 0317
-Ï "
-D 7,8 0 0320
-Ð "
~N 7,11 0 0321
-Ñ "
`O 7,11 0 0322
-Ò "
'O 7,11 0 0323
-Ó "
^O 7,11 0 0324
-Ô "
~O 7,11 0 0325
-Õ "
:O 7,10 0 0326
-Ö "
-mu 7,6 0 0327
-× "
+tmu 7,6 0 0327
/O 7,8 0 0330
-Ø "
`U 7,11 0 0331
-Ù "
'U 7,11 0 0332
-Ú "
^U 7,11 0 0333
-Û "
:U 7,10 0 0334
-Ü "
'Y 7,11 0 0335
-Ý "
TP 7,8 0 0336
-Þ "
ss 7,9 0 0337
-ß "
`a 7,9 0 0340
-à "
'a 7,9 0 0341
-á "
^a 7,9 0 0342
-â "
~a 7,9 0 0343
-ã "
:a 7,8 0 0344
-ä "
oa 7,10 0 0345
-å "
ae 7,6 0 0346
-æ "
,c 7,6,3 0 0347
-ç "
`e 7,9 0 0350
-è "
'e 7,9 0 0351
-é "
^e 7,9 0 0352
-ê "
:e 7,8 0 0353
-ë "
`i 7,9 0 0354
-ì "
'i 7,9 0 0355
-í "
^i 7,9 0 0356
-î "
:i 7,8 0 0357
-ï "
Sd 7,9 0 0360
-ð "
~n 7,9 0 0361
-ñ "
`o 7,9 0 0362
-ò "
'o 7,9 0 0363
-ó "
^o 7,9 0 0364
-ô "
~o 7,9 0 0365
-õ "
:o 7,8 0 0366
-ö "
-di 7,6 0 0367
-÷ "
+tdi 7,6 0 0367
/o 7,7,1 0 0370
-ø "
`u 7,9 0 0371
-ù "
'u 7,9 0 0372
-ú "
^u 7,9 0 0373
-û "
:u 7,8 0 0374
-ü "
'y 7,9,3 0 0375
-ý "
Tp 7,8,3 0 0376
-þ "
:y 7,8,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/CBI b/contrib/groff/font/devX75-12/CBI
index 23df8ea..cd6af97 100644
--- a/contrib/groff/font/devX75-12/CBI
+++ b/contrib/groff/font/devX75-12/CBI
@@ -1,6 +1,7 @@
name CBI
spacewidth 7
charset
+--- 7,7 0 00
--- 7,1 0 040
! 7,9 0 041
" 7,8 0 042
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,2 0 0137
-` 7,8 0 0140
+` 7,9 0 0140
oq "
a 7,6 0 0141
b 7,9 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 7,1 0 0240
r! 7,6,2 0 0241
-¡ "
ct 7,8,1 0 0242
-¢ "
Po 7,8 0 0243
-£ "
Cs 7,7 0 0244
-¤ "
Ye 7,8 0 0245
-¥ "
bb 7,8,1 0 0246
-¦ "
sc 7,9,1 0 0247
-§ "
ad 7,9 0 0250
-¨ "
co 7,8 0 0251
-© "
Of 7,8 0 0252
-ª "
Fo 7,5 0 0253
-« "
no 7,5 0 0254
-¬ "
- 7,4 0 0255
hy "
-­ "
rg 7,8 0 0256
-® "
a- 7,8 0 0257
-¯ "
de 7,8 0 0260
-° "
-+- 7,6 0 0261
-± "
+t+- 7,6 0 0261
S2 7,8 0 0262
-² "
S3 7,8 0 0263
-³ "
aa 7,9 0 0264
-´ "
-µ 7,6,3 0 0265
+mc 7,6,3 0 0265
ps 7,9,1 0 0266
-¶ "
pc 7,5 0 0267
-· "
ac 7,0,3 0 0270
-¸ "
S1 7,8 0 0271
-¹ "
Om 7,8 0 0272
-º "
Fc 7,5 0 0273
-» "
14 7,9 0 0274
-¼ "
12 7,9 0 0275
-½ "
34 7,9 0 0276
-¾ "
r? 7,6,2 0 0277
-¿ "
`A 7,11 0 0300
-À "
'A 7,11 0 0301
-Á "
^A 7,11 0 0302
-Â "
~A 7,11 0 0303
-Ã "
:A 7,10 0 0304
-Ä "
oA 7,11 0 0305
-Å "
AE 7,8 0 0306
-Æ "
,C 7,8,3 0 0307
-Ç "
`E 7,11 0 0310
-È "
'E 7,11 0 0311
-É "
^E 7,11 0 0312
-Ê "
:E 7,10 0 0313
-Ë "
`I 7,11 0 0314
-Ì "
'I 7,11 0 0315
-Í "
^I 7,11 0 0316
-Î "
:I 7,10 0 0317
-Ï "
-D 7,8 0 0320
-Ð "
~N 7,11 0 0321
-Ñ "
`O 7,11 0 0322
-Ò "
'O 7,11 0 0323
-Ó "
^O 7,11 0 0324
-Ô "
~O 7,11 0 0325
-Õ "
:O 7,10 0 0326
-Ö "
-mu 7,6 0 0327
-× "
+tmu 7,6 0 0327
/O 7,8 0 0330
-Ø "
`U 7,11 0 0331
-Ù "
'U 7,11 0 0332
-Ú "
^U 7,11 0 0333
-Û "
:U 7,10 0 0334
-Ü "
'Y 7,11 0 0335
-Ý "
TP 7,8 0 0336
-Þ "
ss 7,8 0 0337
-ß "
`a 7,9 0 0340
-à "
'a 7,9 0 0341
-á "
^a 7,9 0 0342
-â "
~a 7,9 0 0343
-ã "
:a 7,8 0 0344
-ä "
oa 7,10 0 0345
-å "
ae 7,6 0 0346
-æ "
,c 7,6,3 0 0347
-ç "
`e 7,9 0 0350
-è "
'e 7,9 0 0351
-é "
^e 7,9 0 0352
-ê "
:e 7,8 0 0353
-ë "
`i 7,9 0 0354
-ì "
'i 7,9 0 0355
-í "
^i 7,9 0 0356
-î "
:i 7,8 0 0357
-ï "
Sd 7,10 0 0360
-ð "
~n 7,9 0 0361
-ñ "
`o 7,9 0 0362
-ò "
'o 7,9 0 0363
-ó "
^o 7,9 0 0364
-ô "
~o 7,9 0 0365
-õ "
:o 7,8 0 0366
-ö "
-di 7,6 0 0367
-÷ "
+tdi 7,6 0 0367
/o 7,7,1 0 0370
-ø "
`u 7,9 0 0371
-ù "
'u 7,9 0 0372
-ú "
^u 7,9 0 0373
-û "
:u 7,8 0 0374
-ü "
'y 7,9,3 0 0375
-ý "
Tp 7,8,3 0 0376
-þ "
:y 7,8,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/CI b/contrib/groff/font/devX75-12/CI
index 04f4c46..a87b13a 100644
--- a/contrib/groff/font/devX75-12/CI
+++ b/contrib/groff/font/devX75-12/CI
@@ -1,6 +1,7 @@
name CI
spacewidth 7
charset
+--- 7,7 0 00
--- 7,1 0 040
! 7,8 0 041
" 7,8 0 042
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,3 0 0137
-` 7,8 0 0140
+` 7,9 0 0140
oq "
a 7,6 0 0141
b 7,9 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 7,1 0 0240
r! 7,6,3 0 0241
-¡ "
ct 7,8,1 0 0242
-¢ "
Po 7,8 0 0243
-£ "
Cs 7,7 0 0244
-¤ "
Ye 7,8 0 0245
-¥ "
bb 7,8,2 0 0246
-¦ "
sc 7,9,1 0 0247
-§ "
ad 7,8 0 0250
-¨ "
co 7,8 0 0251
-© "
Of 7,8 0 0252
-ª "
Fo 7,6 0 0253
-« "
no 7,5 0 0254
-¬ "
- 7,4 0 0255
hy "
-­ "
rg 7,8 0 0256
-® "
a- 7,8 0 0257
-¯ "
de 7,8 0 0260
-° "
-+- 7,6 0 0261
-± "
+t+- 7,6 0 0261
S2 7,8 0 0262
-² "
S3 7,8 0 0263
-³ "
aa 7,9 0 0264
-´ "
-µ 7,6,3 0 0265
+mc 7,6,3 0 0265
ps 7,9,1 0 0266
-¶ "
pc 7,4 0 0267
-· "
ac 7,0,3 0 0270
-¸ "
S1 7,8 0 0271
-¹ "
Om 7,8 0 0272
-º "
Fc 7,6 0 0273
-» "
14 7,9,1 0 0274
-¼ "
12 7,9,1 0 0275
-½ "
34 7,9,1 0 0276
-¾ "
r? 7,6,2 0 0277
-¿ "
`A 7,11 0 0300
-À "
'A 7,11 0 0301
-Á "
^A 7,11 0 0302
-Â "
~A 7,11 0 0303
-Ã "
:A 7,10 0 0304
-Ä "
oA 7,11 0 0305
-Å "
AE 7,8 0 0306
-Æ "
,C 7,8,3 0 0307
-Ç "
`E 7,11 0 0310
-È "
'E 7,11 0 0311
-É "
^E 7,11 0 0312
-Ê "
:E 7,10 0 0313
-Ë "
`I 7,11 0 0314
-Ì "
'I 7,11 0 0315
-Í "
^I 7,11 0 0316
-Î "
:I 7,10 0 0317
-Ï "
-D 7,8 0 0320
-Ð "
~N 7,11 0 0321
-Ñ "
`O 7,11 0 0322
-Ò "
'O 7,11 0 0323
-Ó "
^O 7,11 0 0324
-Ô "
~O 7,11 0 0325
-Õ "
:O 7,10 0 0326
-Ö "
-mu 7,6 0 0327
-× "
+tmu 7,6 0 0327
/O 7,8 0 0330
-Ø "
`U 7,11 0 0331
-Ù "
'U 7,11 0 0332
-Ú "
^U 7,11 0 0333
-Û "
:U 7,10 0 0334
-Ü "
'Y 7,11 0 0335
-Ý "
TP 7,8 0 0336
-Þ "
ss 7,9 0 0337
-ß "
`a 7,9 0 0340
-à "
'a 7,9 0 0341
-á "
^a 7,9 0 0342
-â "
~a 7,9 0 0343
-ã "
:a 7,8 0 0344
-ä "
oa 7,10 0 0345
-å "
ae 7,6 0 0346
-æ "
,c 7,6,3 0 0347
-ç "
`e 7,9 0 0350
-è "
'e 7,9 0 0351
-é "
^e 7,9 0 0352
-ê "
:e 7,8 0 0353
-ë "
`i 7,9 0 0354
-ì "
'i 7,9 0 0355
-í "
^i 7,9 0 0356
-î "
:i 7,8 0 0357
-ï "
Sd 7,10 0 0360
-ð "
~n 7,9 0 0361
-ñ "
`o 7,9 0 0362
-ò "
'o 7,9 0 0363
-ó "
^o 7,9 0 0364
-ô "
~o 7,9 0 0365
-õ "
:o 7,8 0 0366
-ö "
-di 7,6 0 0367
-÷ "
+tdi 7,6 0 0367
/o 7,7,1 0 0370
-ø "
`u 7,9 0 0371
-ù "
'u 7,9 0 0372
-ú "
^u 7,9 0 0373
-û "
:u 7,8 0 0374
-ü "
'y 7,9,3 0 0375
-ý "
Tp 7,9,3 0 0376
-þ "
:y 7,8,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/CR b/contrib/groff/font/devX75-12/CR
index 957ce6a..fcd9876 100644
--- a/contrib/groff/font/devX75-12/CR
+++ b/contrib/groff/font/devX75-12/CR
@@ -1,6 +1,7 @@
name CR
spacewidth 7
charset
+--- 7,7 0 00
--- 7,1 0 040
! 7,9 0 041
" 7,8 0 042
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,3 0 0137
-` 7,8 0 0140
+` 7,9 0 0140
oq "
a 7,6 0 0141
b 7,9 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 7,1 0 0240
r! 7,6,3 0 0241
-¡ "
ct 7,8,1 0 0242
-¢ "
Po 7,8 0 0243
-£ "
Cs 7,7 0 0244
-¤ "
Ye 7,8 0 0245
-¥ "
bb 7,8,2 0 0246
-¦ "
sc 7,9,1 0 0247
-§ "
ad 7,8 0 0250
-¨ "
co 7,8 0 0251
-© "
Of 7,8 0 0252
-ª "
Fo 7,6 0 0253
-« "
no 7,5 0 0254
-¬ "
- 7,4 0 0255
hy "
-­ "
rg 7,8 0 0256
-® "
a- 7,8 0 0257
-¯ "
de 7,8 0 0260
-° "
-+- 7,6 0 0261
-± "
+t+- 7,6 0 0261
S2 7,8 0 0262
-² "
S3 7,8 0 0263
-³ "
aa 7,9 0 0264
-´ "
-µ 7,6,3 0 0265
+mc 7,6,3 0 0265
ps 7,9,1 0 0266
-¶ "
pc 7,4 0 0267
-· "
ac 7,0,3 0 0270
-¸ "
S1 7,8 0 0271
-¹ "
Om 7,8 0 0272
-º "
Fc 7,6 0 0273
-» "
14 7,9,1 0 0274
-¼ "
12 7,9,1 0 0275
-½ "
34 7,9,1 0 0276
-¾ "
r? 7,6,2 0 0277
-¿ "
`A 7,11 0 0300
-À "
'A 7,11 0 0301
-Á "
^A 7,11 0 0302
-Â "
~A 7,11 0 0303
-Ã "
:A 7,10 0 0304
-Ä "
oA 7,11 0 0305
-Å "
AE 7,8 0 0306
-Æ "
,C 7,8,3 0 0307
-Ç "
`E 7,11 0 0310
-È "
'E 7,11 0 0311
-É "
^E 7,11 0 0312
-Ê "
:E 7,10 0 0313
-Ë "
`I 7,11 0 0314
-Ì "
'I 7,11 0 0315
-Í "
^I 7,11 0 0316
-Î "
:I 7,10 0 0317
-Ï "
-D 7,8 0 0320
-Ð "
~N 7,11 0 0321
-Ñ "
`O 7,11 0 0322
-Ò "
'O 7,11 0 0323
-Ó "
^O 7,11 0 0324
-Ô "
~O 7,11 0 0325
-Õ "
:O 7,10 0 0326
-Ö "
-mu 7,6 0 0327
-× "
+tmu 7,6 0 0327
/O 7,9,1 0 0330
-Ø "
`U 7,11 0 0331
-Ù "
'U 7,11 0 0332
-Ú "
^U 7,11 0 0333
-Û "
:U 7,10 0 0334
-Ü "
'Y 7,11 0 0335
-Ý "
TP 7,8 0 0336
-Þ "
ss 7,9 0 0337
-ß "
`a 7,9 0 0340
-à "
'a 7,9 0 0341
-á "
^a 7,9 0 0342
-â "
~a 7,9 0 0343
-ã "
:a 7,8 0 0344
-ä "
oa 7,9 0 0345
-å "
ae 7,6 0 0346
-æ "
,c 7,6,3 0 0347
-ç "
`e 7,9 0 0350
-è "
'e 7,9 0 0351
-é "
^e 7,9 0 0352
-ê "
:e 7,8 0 0353
-ë "
`i 7,9 0 0354
-ì "
'i 7,9 0 0355
-í "
^i 7,9 0 0356
-î "
:i 7,8 0 0357
-ï "
Sd 7,10 0 0360
-ð "
~n 7,9 0 0361
-ñ "
`o 7,9 0 0362
-ò "
'o 7,9 0 0363
-ó "
^o 7,9 0 0364
-ô "
~o 7,9 0 0365
-õ "
:o 7,8 0 0366
-ö "
-di 7,6 0 0367
-÷ "
+tdi 7,6 0 0367
/o 7,7,1 0 0370
-ø "
`u 7,9 0 0371
-ù "
'u 7,9 0 0372
-ú "
^u 7,9 0 0373
-û "
:u 7,8 0 0374
-ü "
'y 7,9,3 0 0375
-ý "
Tp 7,9,3 0 0376
-þ "
:y 7,8,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/HB b/contrib/groff/font/devX75-12/HB
index f9ccd5f..d98123a 100644
--- a/contrib/groff/font/devX75-12/HB
+++ b/contrib/groff/font/devX75-12/HB
@@ -1,6 +1,7 @@
name HB
spacewidth 4
charset
+--- 9,9 0 00
--- 4,1 0 040
! 4,9 0 041
" 5,9 0 042
@@ -11,14 +12,14 @@ $ 7,9,2 0 044
Do "
% 12,9 0 045
& 9,9 0 046
-' 4,9 0 047
+' 3,9 0 047
cq "
( 6,9,3 0 050
) 6,9,3 0 051
* 6,9 0 052
+ 7,6 0 053
, 4,2,2 0 054
-\- 8,4 0 055
+\- 5,4 0 055
. 4,2 0 056
/ 4,9 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,3 0 0137
-` 4,9 0 0140
+` 4,10 0 0140
oq "
a 7,7 0 0141
b 7,9 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 4,7,3 0 0241
-¡ "
ct 7,8,1 0 0242
-¢ "
Po 7,9 0 0243
-£ "
Cs 7,7 0 0244
-¤ "
Ye 7,9 0 0245
-¥ "
bb 4,9,2 0 0246
-¦ "
sc 7,9,3 0 0247
-§ "
ad 5,9 0 0250
-¨ "
co 11,9 0 0251
-© "
Of 6,9 0 0252
-ª "
Fo 8,6 0 0253
-« "
no 8,6 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 11,9 0 0256
-® "
a- 4,9 0 0257
-¯ "
de 5,8 0 0260
-° "
-+- 7,7 0 0261
-± "
+t+- 7,7 0 0261
S2 4,9 0 0262
-² "
S3 4,9 0 0263
-³ "
aa 4,10 0 0264
-´ "
-µ 7,7,3 0 0265
+mc 7,7,3 0 0265
ps 7,9,3 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 4,1,3 0 0270
-¸ "
S1 4,9 0 0271
-¹ "
Om 6,9 0 0272
-º "
Fc 8,6 0 0273
-» "
14 10,9 0 0274
-¼ "
12 10,9 0 0275
-½ "
34 10,9 0 0276
-¾ "
r? 8,7,3 0 0277
-¿ "
`A 8,12 0 0300
-À "
'A 8,12 0 0301
-Á "
^A 8,12 0 0302
-Â "
~A 8,12 0 0303
-Ã "
:A 8,11 0 0304
-Ä "
oA 8,12 0 0305
-Å "
AE 13,9 0 0306
-Æ "
,C 8,9,3 0 0307
-Ç "
`E 8,12 0 0310
-È "
'E 8,12 0 0311
-É "
^E 8,12 0 0312
-Ê "
:E 8,11 0 0313
-Ë "
`I 4,12 0 0314
-Ì "
'I 4,12 0 0315
-Í "
^I 4,12 0 0316
-Î "
:I 4,11 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 9,12 0 0321
-Ñ "
`O 10,12 0 0322
-Ò "
'O 10,12 0 0323
-Ó "
^O 10,12 0 0324
-Ô "
~O 10,12 0 0325
-Õ "
:O 10,11 0 0326
-Ö "
-mu 7,6 0 0327
-× "
+tmu 7,6 0 0327
/O 10,9,1 0 0330
-Ø "
`U 9,12 0 0331
-Ù "
'U 9,12 0 0332
-Ú "
^U 9,12 0 0333
-Û "
:U 9,11 0 0334
-Ü "
'Y 8,12 0 0335
-Ý "
TP 8,9 0 0336
-Þ "
ss 8,9 0 0337
-ß "
`a 7,10 0 0340
-à "
'a 7,10 0 0341
-á "
^a 7,10 0 0342
-â "
~a 7,10 0 0343
-ã "
:a 7,9 0 0344
-ä "
oa 7,11 0 0345
-å "
ae 11,7 0 0346
-æ "
,c 7,7,3 0 0347
-ç "
`e 7,10 0 0350
-è "
'e 7,10 0 0351
-é "
^e 7,10 0 0352
-ê "
:e 7,9 0 0353
-ë "
`i 3,10 0 0354
-ì "
'i 3,10 0 0355
-í "
^i 3,10 0 0356
-î "
:i 3,9 0 0357
-ï "
Sd 7,10 0 0360
-ð "
~n 7,10 0 0361
-ñ "
`o 7,10 0 0362
-ò "
'o 7,10 0 0363
-ó "
^o 7,10 0 0364
-ô "
~o 7,10 0 0365
-õ "
:o 7,9 0 0366
-ö "
-di 7,6 0 0367
-÷ "
+tdi 7,6 0 0367
/o 7,7 0 0370
-ø "
`u 7,10 0 0371
-ù "
'u 7,10 0 0372
-ú "
^u 7,10 0 0373
-û "
:u 7,9 0 0374
-ü "
'y 8,10,3 0 0375
-ý "
Tp 7,9,3 0 0376
-þ "
:y 8,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/HBI b/contrib/groff/font/devX75-12/HBI
index 21d4355..1efb56b 100644
--- a/contrib/groff/font/devX75-12/HBI
+++ b/contrib/groff/font/devX75-12/HBI
@@ -1,6 +1,7 @@
name HBI
spacewidth 4
charset
+--- 10,9 0 00
--- 4,1 0 040
! 4,9 0 041
" 6,9 0 042
@@ -18,7 +19,7 @@ cq "
* 6,9 0 052
+ 8,6 0 053
, 3,2,2 0 054
-\- 8,4 0 055
+\- 5,4 0 055
. 3,2 0 056
/ 5,9 0 057
sl "
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 4,7,3 0 0241
-¡ "
ct 7,8,1 0 0242
-¢ "
Po 7,9 0 0243
-£ "
Cs 7,7 0 0244
-¤ "
Ye 7,9 0 0245
-¥ "
bb 4,9,2 0 0246
-¦ "
sc 7,9,3 0 0247
-§ "
ad 5,9 0 0250
-¨ "
co 11,9 0 0251
-© "
Of 6,9 0 0252
-ª "
Fo 10,6 0 0253
-« "
no 8,5 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 11,9 0 0256
-® "
a- 4,9 0 0257
-¯ "
de 5,8 0 0260
-° "
-+- 8,7 0 0261
-± "
+t+- 8,7 0 0261
S2 4,9 0 0262
-² "
S3 4,9 0 0263
-³ "
aa 4,9 0 0264
-´ "
-µ 7,7,3 0 0265
+mc 7,7,3 0 0265
ps 7,9,3 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 4,1,3 0 0270
-¸ "
S1 4,9 0 0271
-¹ "
Om 6,9 0 0272
-º "
Fc 10,6 0 0273
-» "
14 10,9 0 0274
-¼ "
12 10,9 0 0275
-½ "
34 10,9 0 0276
-¾ "
r? 7,7,2 0 0277
-¿ "
`A 8,12 0 0300
-À "
'A 8,12 0 0301
-Á "
^A 8,12 0 0302
-Â "
~A 8,12 0 0303
-Ã "
:A 8,11 0 0304
-Ä "
oA 8,12 0 0305
-Å "
AE 11,9 0 0306
-Æ "
,C 8,9,3 0 0307
-Ç "
`E 8,12 0 0310
-È "
'E 8,12 0 0311
-É "
^E 8,12 0 0312
-Ê "
:E 8,11 0 0313
-Ë "
`I 5,12 0 0314
-Ì "
'I 5,12 0 0315
-Í "
^I 5,12 0 0316
-Î "
:I 5,11 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 10,12 0 0321
-Ñ "
`O 9,12 0 0322
-Ò "
'O 9,12 0 0323
-Ó "
^O 9,12 0 0324
-Ô "
~O 9,12 0 0325
-Õ "
:O 9,11 0 0326
-Ö "
-mu 8,6 0 0327
-× "
+tmu 8,6 0 0327
/O 9,9 0 0330
-Ø "
`U 8,12 0 0331
-Ù "
'U 8,12 0 0332
-Ú "
^U 8,12 0 0333
-Û "
:U 8,11 0 0334
-Ü "
'Y 7,12 0 0335
-Ý "
TP 8,9 0 0336
-Þ "
ss 7,9 0 0337
-ß "
`a 6,10 0 0340
-à "
'a 6,10 0 0341
-á "
^a 6,10 0 0342
-â "
~a 6,10 0 0343
-ã "
:a 6,9 0 0344
-ä "
oa 6,10 0 0345
-å "
ae 10,7 0 0346
-æ "
,c 7,7,3 0 0347
-ç "
`e 7,10 0 0350
-è "
'e 7,10 0 0351
-é "
^e 7,10 0 0352
-ê "
:e 7,9 0 0353
-ë "
`i 3,10 0 0354
-ì "
'i 3,10 0 0355
-í "
^i 3,10 0 0356
-î "
:i 3,9 0 0357
-ï "
Sd 7,10 0 0360
-ð "
~n 7,10 0 0361
-ñ "
`o 7,10 0 0362
-ò "
'o 7,10 0 0363
-ó "
^o 7,10 0 0364
-ô "
~o 7,10 0 0365
-õ "
:o 7,9 0 0366
-ö "
-di 8,6 0 0367
-÷ "
+tdi 8,6 0 0367
/o 7,8 0 0370
-ø "
`u 7,10 0 0371
-ù "
'u 7,10 0 0372
-ú "
^u 7,10 0 0373
-û "
:u 7,9 0 0374
-ü "
'y 7,10,3 0 0375
-ý "
Tp 7,9,3 0 0376
-þ "
:y 7,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/HI b/contrib/groff/font/devX75-12/HI
index 6051dc7..47bd713 100644
--- a/contrib/groff/font/devX75-12/HI
+++ b/contrib/groff/font/devX75-12/HI
@@ -1,6 +1,7 @@
name HI
spacewidth 4
charset
+--- 10,9 0 00
--- 4,1 0 040
! 3,9 0 041
" 5,9 0 042
@@ -18,7 +19,7 @@ cq "
* 5,9 0 052
+ 7,6 0 053
, 3,1,2 0 054
-\- 8,4 0 055
+\- 5,4 0 055
. 3,1 0 056
/ 4,9 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,3 0 0137
-` 3,9 0 0140
+` 2,10 0 0140
oq "
a 7,7 0 0141
b 7,9 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 4,6,3 0 0241
-¡ "
ct 8,8,1 0 0242
-¢ "
Po 8,9 0 0243
-£ "
Cs 7,7 0 0244
-¤ "
Ye 7,9 0 0245
-¥ "
bb 4,9,2 0 0246
-¦ "
sc 7,9,3 0 0247
-§ "
ad 3,9 0 0250
-¨ "
co 11,9 0 0251
-© "
Of 5,9 0 0252
-ª "
Fo 7,6 0 0253
-« "
no 8,6 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 11,9 0 0256
-® "
a- 4,9 0 0257
-¯ "
de 5,8 0 0260
-° "
-+- 7,7 0 0261
-± "
+t+- 7,7 0 0261
S2 4,8 0 0262
-² "
S3 4,8 0 0263
-³ "
aa 2,10 0 0264
-´ "
-µ 7,7,3 0 0265
+mc 7,7,3 0 0265
ps 8,9,3 0 0266
-¶ "
pc 3,4 0 0267
-· "
ac 3,1,3 0 0270
-¸ "
S1 4,8 0 0271
-¹ "
Om 5,9 0 0272
-º "
Fc 7,6 0 0273
-» "
14 10,9 0 0274
-¼ "
12 10,9 0 0275
-½ "
34 10,9 0 0276
-¾ "
r? 7,6,3 0 0277
-¿ "
`A 9,12 0 0300
-À "
'A 9,12 0 0301
-Á "
^A 9,12 0 0302
-Â "
~A 9,12 0 0303
-Ã "
:A 9,11 0 0304
-Ä "
oA 9,12 0 0305
-Å "
AE 11,9 0 0306
-Æ "
,C 8,9,3 0 0307
-Ç "
`E 8,12 0 0310
-È "
'E 8,12 0 0311
-É "
^E 8,12 0 0312
-Ê "
:E 8,11 0 0313
-Ë "
`I 4,12 0 0314
-Ì "
'I 4,12 0 0315
-Í "
^I 4,12 0 0316
-Î "
:I 4,11 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 10,12 0 0321
-Ñ "
`O 9,12 0 0322
-Ò "
'O 9,12 0 0323
-Ó "
^O 9,12 0 0324
-Ô "
~O 9,12 0 0325
-Õ "
:O 9,11 0 0326
-Ö "
-mu 7,6 0 0327
-× "
+tmu 7,6 0 0327
/O 10,9 0 0330
-Ø "
`U 9,12 0 0331
-Ù "
'U 9,12 0 0332
-Ú "
^U 9,12 0 0333
-Û "
:U 9,11 0 0334
-Ü "
'Y 8,12 0 0335
-Ý "
TP 8,9 0 0336
-Þ "
ss 7,9 0 0337
-ß "
`a 7,10 0 0340
-à "
'a 7,10 0 0341
-á "
^a 7,10 0 0342
-â "
~a 7,10 0 0343
-ã "
:a 7,9 0 0344
-ä "
oa 7,10 0 0345
-å "
ae 11,7 0 0346
-æ "
,c 6,7,3 0 0347
-ç "
`e 6,10 0 0350
-è "
'e 6,10 0 0351
-é "
^e 6,10 0 0352
-ê "
:e 6,9 0 0353
-ë "
`i 3,10 0 0354
-ì "
'i 3,10 0 0355
-í "
^i 3,10 0 0356
-î "
:i 3,9 0 0357
-ï "
Sd 7,11 0 0360
-ð "
~n 7,10 0 0361
-ñ "
`o 7,10 0 0362
-ò "
'o 7,10 0 0363
-ó "
^o 7,10 0 0364
-ô "
~o 7,10 0 0365
-õ "
:o 7,9 0 0366
-ö "
-di 7,6 0 0367
-÷ "
+tdi 7,6 0 0367
/o 7,7 0 0370
-ø "
`u 7,10 0 0371
-ù "
'u 7,10 0 0372
-ú "
^u 7,10 0 0373
-û "
:u 7,9 0 0374
-ü "
'y 6,10,3 0 0375
-ý "
Tp 7,9,3 0 0376
-þ "
:y 7,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/HR b/contrib/groff/font/devX75-12/HR
index f78bed5..ea1c779 100644
--- a/contrib/groff/font/devX75-12/HR
+++ b/contrib/groff/font/devX75-12/HR
@@ -1,13 +1,14 @@
name HR
spacewidth 4
charset
+--- 9,9 0 00
--- 4,1 0 040
! 3,9 0 041
" 5,9 0 042
dq "
# 7,8 0 043
sh "
-$ 6,9,2 0 044
+$ 7,9,1 0 044
Do "
% 11,9 0 045
& 9,9 0 046
@@ -18,7 +19,7 @@ cq "
* 5,9 0 052
+ 7,6 0 053
, 4,1,2 0 054
-\- 8,4 0 055
+\- 5,4 0 055
. 3,1 0 056
/ 4,9 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 7,0,2 0 0137
-` 3,9 0 0140
+` 2,10 0 0140
oq "
a 7,7 0 0141
b 7,9 0 0142
@@ -98,7 +99,7 @@ p 7,7,3 0 0160
q 7,7,3 0 0161
r 4,7 0 0162
s 6,7 0 0163
-t 4,9 0 0164
+t 3,9 0 0164
u 7,7 0 0165
v 7,7 0 0166
w 9,7 0 0167
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 3,7,3 0 0241
-¡ "
ct 7,8,1 0 0242
-¢ "
Po 7,9 0 0243
-£ "
Cs 7,7 0 0244
-¤ "
Ye 7,9 0 0245
-¥ "
bb 3,9,2 0 0246
-¦ "
sc 6,9,3 0 0247
-§ "
ad 3,9 0 0250
-¨ "
co 11,9 0 0251
-© "
Of 5,9 0 0252
-ª "
Fo 7,6 0 0253
-« "
no 8,6 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 11,9 0 0256
-® "
a- 4,9 0 0257
-¯ "
de 5,8 0 0260
-° "
-+- 7,7 0 0261
-± "
+t+- 7,7 0 0261
S2 4,8 0 0262
-² "
S3 4,8 0 0263
-³ "
aa 2,10 0 0264
-´ "
-µ 7,7,3 0 0265
+mc 7,7,3 0 0265
ps 7,9,3 0 0266
-¶ "
pc 3,4 0 0267
-· "
ac 3,1,3 0 0270
-¸ "
S1 4,8 0 0271
-¹ "
Om 5,9 0 0272
-º "
Fc 7,6 0 0273
-» "
14 10,9 0 0274
-¼ "
12 10,9 0 0275
-½ "
34 10,9 0 0276
-¾ "
r? 7,6,3 0 0277
-¿ "
`A 9,12 0 0300
-À "
'A 9,12 0 0301
-Á "
^A 9,12 0 0302
-Â "
~A 9,12 0 0303
-Ã "
:A 9,11 0 0304
-Ä "
oA 9,12 0 0305
-Å "
AE 11,9 0 0306
-Æ "
,C 9,9,3 0 0307
-Ç "
`E 8,12 0 0310
-È "
'E 8,12 0 0311
-É "
^E 8,12 0 0312
-Ê "
:E 8,11 0 0313
-Ë "
`I 3,12 0 0314
-Ì "
'I 3,12 0 0315
-Í "
^I 3,12 0 0316
-Î "
:I 3,11 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 9,12 0 0321
-Ñ "
`O 10,12 0 0322
-Ò "
'O 10,12 0 0323
-Ó "
^O 10,12 0 0324
-Ô "
~O 10,12 0 0325
-Õ "
:O 10,11 0 0326
-Ö "
-mu 7,6 0 0327
-× "
+tmu 7,6 0 0327
/O 10,10,1 0 0330
-Ø "
`U 8,12 0 0331
-Ù "
'U 8,12 0 0332
-Ú "
^U 8,12 0 0333
-Û "
:U 8,11 0 0334
-Ü "
'Y 9,12 0 0335
-Ý "
TP 8,9 0 0336
-Þ "
ss 7,9 0 0337
-ß "
`a 7,10 0 0340
-à "
'a 7,10 0 0341
-á "
^a 7,10 0 0342
-â "
~a 7,10 0 0343
-ã "
:a 7,9 0 0344
-ä "
oa 7,10 0 0345
-å "
ae 11,7 0 0346
-æ "
,c 7,7,3 0 0347
-ç "
`e 7,10 0 0350
-è "
'e 7,10 0 0351
-é "
^e 7,10 0 0352
-ê "
:e 7,9 0 0353
-ë "
`i 3,10 0 0354
-ì "
'i 3,10 0 0355
-í "
^i 3,10 0 0356
-î "
:i 3,9 0 0357
-ï "
Sd 7,10 0 0360
-ð "
~n 7,10 0 0361
-ñ "
`o 7,10 0 0362
-ò "
'o 7,10 0 0363
-ó "
^o 7,10 0 0364
-ô "
~o 7,10 0 0365
-õ "
:o 7,9 0 0366
-ö "
-di 7,6 0 0367
-÷ "
+tdi 7,6 0 0367
/o 7,7 0 0370
-ø "
`u 7,10 0 0371
-ù "
'u 7,10 0 0372
-ú "
^u 7,10 0 0373
-û "
:u 7,9 0 0374
-ü "
'y 7,10,3 0 0375
-ý "
Tp 7,9,3 0 0376
-þ "
:y 7,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/NB b/contrib/groff/font/devX75-12/NB
index b5f4a08..4efa02c 100644
--- a/contrib/groff/font/devX75-12/NB
+++ b/contrib/groff/font/devX75-12/NB
@@ -1,6 +1,7 @@
name NB
spacewidth 4
charset
+--- 11,9 0 00
--- 4,1 0 040
! 4,9 0 041
" 6,9 0 042
@@ -11,19 +12,19 @@ $ 7,10,1 0 044
Do "
% 13,9 0 045
& 11,9 0 046
-' 3,9 0 047
+' 4,9 0 047
cq "
( 5,9,2 0 050
) 5,9,2 0 051
* 6,9 0 052
+ 8,7 0 053
, 4,2,2 0 054
-\- 7,4 0 055
+\- 4,4 0 055
. 4,2 0 056
/ 4,9 0 057
sl "
0 7,9 0 060
-1 5,9 0 061
+1 7,9 0 061
2 7,9 0 062
3 7,9 0 063
4 7,9 0 064
@@ -76,8 +77,8 @@ rB "
^ 6,9 0 0136
a^ "
ha "
-_ 7,0,2 0 0137
-` 3,9 0 0140
+_ 6,0,2 0 0137
+` 5,9 0 0140
oq "
a 8,6 0 0141
b 8,9 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 4,6,3 0 0241
-¡ "
ct 7,7,1 0 0242
-¢ "
Po 8,9 0 0243
-£ "
Cs 8,8 0 0244
-¤ "
Ye 9,9 0 0245
-¥ "
bb 8,9 0 0246
-¦ "
sc 6,9,1 0 0247
-§ "
ad 5,9 0 0250
-¨ "
co 10,9 0 0251
-© "
Of 6,9 0 0252
-ª "
Fo 8,6 0 0253
-« "
no 7,5 0 0254
-¬ "
- 4,4 0 0255
hy "
-­ "
rg 11,9 0 0256
-® "
a- 6,8 0 0257
-¯ "
de 5,9 0 0260
-° "
-+- 8,7 0 0261
-± "
+t+- 8,7 0 0261
S2 4,9 0 0262
-² "
S3 4,9 0 0263
-³ "
aa 5,9 0 0264
-´ "
-µ 9,6,3 0 0265
+mc 9,6,3 0 0265
ps 10,9 0 0266
-¶ "
pc 3,5 0 0267
-· "
ac 5,0,3 0 0270
-¸ "
S1 4,9 0 0271
-¹ "
Om 6,9 0 0272
-º "
Fc 8,6 0 0273
-» "
14 10,9 0 0274
-¼ "
12 10,9 0 0275
-½ "
34 10,9 0 0276
-¾ "
r? 7,6,3 0 0277
-¿ "
`A 11,12 0 0300
-À "
'A 11,12 0 0301
-Á "
^A 11,12 0 0302
-Â "
~A 11,12 0 0303
-Ã "
:A 11,12 0 0304
-Ä "
oA 11,12 0 0305
-Å "
AE 14,9 0 0306
-Æ "
,C 9,9,3 0 0307
-Ç "
`E 9,12 0 0310
-È "
'E 9,12 0 0311
-É "
^E 9,12 0 0312
-Ê "
:E 9,12 0 0313
-Ë "
`I 5,12 0 0314
-Ì "
'I 5,12 0 0315
-Í "
^I 5,12 0 0316
-Î "
:I 5,12 0 0317
-Ï "
-D 10,9 0 0320
-Ð "
~N 11,12 0 0321
-Ñ "
`O 10,12 0 0322
-Ò "
'O 10,12 0 0323
-Ó "
^O 10,12 0 0324
-Ô "
~O 10,12 0 0325
-Õ "
:O 10,12 0 0326
-Ö "
-mu 8,7 0 0327
-× "
+tmu 8,7 0 0327
/O 10,9 0 0330
-Ø "
`U 10,12 0 0331
-Ù "
'U 10,12 0 0332
-Ú "
^U 10,12 0 0333
-Û "
:U 10,12 0 0334
-Ü "
'Y 9,12 0 0335
-Ý "
TP 9,9 0 0336
-Þ "
ss 8,9 0 0337
-ß "
`a 8,9 0 0340
-à "
'a 8,9 0 0341
-á "
^a 8,9 0 0342
-â "
~a 8,9 0 0343
-ã "
:a 8,9 0 0344
-ä "
oa 8,9 0 0345
-å "
ae 11,6 0 0346
-æ "
,c 7,6,3 0 0347
-ç "
`e 7,9 0 0350
-è "
'e 7,9 0 0351
-é "
^e 7,9 0 0352
-ê "
:e 7,9 0 0353
-ë "
`i 5,9 0 0354
-ì "
'i 5,9 0 0355
-í "
^i 5,9 0 0356
-î "
:i 5,9 0 0357
-ï "
Sd 8,9 0 0360
-ð "
~n 9,9 0 0361
-ñ "
`o 8,9 0 0362
-ò "
'o 8,9 0 0363
-ó "
^o 8,9 0 0364
-ô "
~o 8,9 0 0365
-õ "
:o 8,9 0 0366
-ö "
-di 8,7 0 0367
-÷ "
+tdi 8,7 0 0367
/o 8,7,1 0 0370
-ø "
`u 9,9 0 0371
-ù "
'u 9,9 0 0372
-ú "
^u 9,9 0 0373
-û "
:u 9,9 0 0374
-ü "
'y 7,9,3 0 0375
-ý "
Tp 8,9,3 0 0376
-þ "
:y 7,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/NBI b/contrib/groff/font/devX75-12/NBI
index 01539d5..28d82e9 100644
--- a/contrib/groff/font/devX75-12/NBI
+++ b/contrib/groff/font/devX75-12/NBI
@@ -1,6 +1,7 @@
name NBI
spacewidth 4
charset
+--- 11,9 0 00
--- 4,1 0 040
! 5,9 0 041
" 6,9 0 042
@@ -11,14 +12,14 @@ $ 7,10,1 0 044
Do "
% 12,9 0 045
& 12,9 0 046
-' 3,9 0 047
+' 4,9 0 047
cq "
( 5,9,2 0 050
) 5,9,2 0 051
* 6,9 0 052
+ 8,7 0 053
, 3,2,2 0 054
-\- 8,4 0 055
+\- 4,4 0 055
. 3,2 0 056
/ 6,9 0 057
sl "
@@ -76,8 +77,8 @@ rB "
^ 8,9 0 0136
a^ "
ha "
-_ 8,0,2 0 0137
-` 3,9 0 0140
+_ 6,0,2 0 0137
+` 4,9 0 0140
oq "
a 8,6 0 0141
b 7,9 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 4,1 0 0240
r! 5,6,3 0 0241
-¡ "
ct 7,7,1 0 0242
-¢ "
Po 9,9 0 0243
-£ "
Cs 8,8 0 0244
-¤ "
Ye 10,9 0 0245
-¥ "
bb 8,9 0 0246
-¦ "
sc 6,9,2 0 0247
-§ "
ad 4,9 0 0250
-¨ "
co 10,9 0 0251
-© "
Of 6,9 0 0252
-ª "
Fo 9,6 0 0253
-« "
no 7,5 0 0254
-¬ "
-- 5,4 0 0255
+- 4,4 0 0255
hy "
-­ "
rg 10,9 0 0256
-® "
a- 5,8 0 0257
-¯ "
de 5,9 0 0260
-° "
-+- 8,7 0 0261
-± "
+t+- 8,7 0 0261
S2 4,9 0 0262
-² "
S3 4,9 0 0263
-³ "
aa 4,9 0 0264
-´ "
-µ 8,6,3 0 0265
+mc 8,6,3 0 0265
ps 8,9 0 0266
-¶ "
pc 5,5 0 0267
-· "
ac 4,0,3 0 0270
-¸ "
S1 4,9 0 0271
-¹ "
Om 5,9 0 0272
-º "
Fc 9,6 0 0273
-» "
14 10,9 0 0274
-¼ "
12 10,9 0 0275
-½ "
34 10,9 0 0276
-¾ "
r? 6,6,3 0 0277
-¿ "
`A 10,12 0 0300
-À "
'A 10,12 0 0301
-Á "
^A 10,12 0 0302
-Â "
~A 10,12 0 0303
-Ã "
:A 10,12 0 0304
-Ä "
oA 10,12 0 0305
-Å "
AE 12,9 0 0306
-Æ "
,C 9,9,3 0 0307
-Ç "
`E 9,12 0 0310
-È "
'E 9,12 0 0311
-É "
^E 9,12 0 0312
-Ê "
:E 9,12 0 0313
-Ë "
`I 6,12 0 0314
-Ì "
'I 6,12 0 0315
-Í "
^I 6,12 0 0316
-Î "
:I 6,12 0 0317
-Ï "
-D 10,9 0 0320
-Ð "
~N 11,12 0 0321
-Ñ "
`O 10,12 0 0322
-Ò "
'O 10,12 0 0323
-Ó "
^O 10,12 0 0324
-Ô "
~O 10,12 0 0325
-Õ "
:O 10,12 0 0326
-Ö "
-mu 8,7 0 0327
-× "
+tmu 8,7 0 0327
/O 10,9 0 0330
-Ø "
`U 9,12 0 0331
-Ù "
'U 9,12 0 0332
-Ú "
^U 9,12 0 0333
-Û "
:U 9,12 0 0334
-Ü "
'Y 9,12 0 0335
-Ý "
TP 9,9 0 0336
-Þ "
ss 9,9,2 0 0337
-ß "
`a 8,9 0 0340
-à "
'a 8,9 0 0341
-á "
^a 8,10 0 0342
-â "
~a 8,9 0 0343
-ã "
:a 8,9 0 0344
-ä "
oa 8,10 0 0345
-å "
ae 11,6 0 0346
-æ "
,c 6,6,3 0 0347
-ç "
`e 7,9 0 0350
-è "
'e 7,9 0 0351
-é "
^e 7,10 0 0352
-ê "
:e 7,9 0 0353
-ë "
`i 4,9 0 0354
-ì "
'i 4,9 0 0355
-í "
^i 4,10 0 0356
-î "
:i 4,9 0 0357
-ï "
Sd 7,9 0 0360
-ð "
~n 8,9 0 0361
-ñ "
`o 7,9 0 0362
-ò "
'o 7,9 0 0363
-ó "
^o 7,10 0 0364
-ô "
~o 7,9 0 0365
-õ "
:o 7,9 0 0366
-ö "
-di 8,7 0 0367
-÷ "
+tdi 8,7 0 0367
/o 7,6 0 0370
-ø "
`u 8,9 0 0371
-ù "
'u 8,9 0 0372
-ú "
^u 8,10 0 0373
-û "
:u 8,9 0 0374
-ü "
'y 6,9,3 0 0375
-ý "
Tp 8,9,3 0 0376
-þ "
:y 6,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/NI b/contrib/groff/font/devX75-12/NI
index 3ffc940..55b9060 100644
--- a/contrib/groff/font/devX75-12/NI
+++ b/contrib/groff/font/devX75-12/NI
@@ -1,6 +1,7 @@
name NI
spacewidth 3
charset
+--- 10,9 0 00
--- 3,1 0 040
! 4,9 0 041
" 6,9 0 042
@@ -11,14 +12,14 @@ $ 6,10,1 0 044
Do "
% 10,9 0 045
& 10,9 0 046
-' 3,9 0 047
+' 4,9 0 047
cq "
( 5,9,2 0 050
) 5,9,2 0 051
* 7,9 0 052
+ 8,7 0 053
, 2,2,1 0 054
-\- 7,4 0 055
+\- 4,4 0 055
. 2,2 0 056
/ 8,9,1 0 057
sl "
@@ -76,8 +77,8 @@ rB "
^ 6,9 0 0136
a^ "
ha "
-_ 8,0,2 0 0137
-` 3,9 0 0140
+_ 6,0,2 0 0137
+` 4,9 0 0140
oq "
a 8,6 0 0141
b 7,9 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 4,7,2 0 0241
-¡ "
ct 6,7,1 0 0242
-¢ "
Po 8,9 0 0243
-£ "
Cs 9,8 0 0244
-¤ "
Ye 9,9 0 0245
-¥ "
bb 6,9 0 0246
-¦ "
sc 6,9,2 0 0247
-§ "
ad 5,9 0 0250
-¨ "
co 10,9 0 0251
-© "
Of 5,9 0 0252
-ª "
Fo 7,5 0 0253
-« "
no 7,5 0 0254
-¬ "
- 4,4 0 0255
hy "
-­ "
rg 10,9 0 0256
-® "
a- 5,8 0 0257
-¯ "
de 5,9 0 0260
-° "
-+- 8,7 0 0261
-± "
+t+- 8,7 0 0261
S2 4,9 0 0262
-² "
S3 4,9 0 0263
-³ "
aa 4,9 0 0264
-´ "
-µ 8,6,3 0 0265
+mc 8,6,3 0 0265
ps 9,9 0 0266
-¶ "
pc 5,5 0 0267
-· "
ac 4,0,3 0 0270
-¸ "
S1 4,9 0 0271
-¹ "
Om 4,9 0 0272
-º "
Fc 7,5 0 0273
-» "
14 9,9 0 0274
-¼ "
12 9,9 0 0275
-½ "
34 9,9 0 0276
-¾ "
r? 5,7,2 0 0277
-¿ "
`A 8,12 0 0300
-À "
'A 8,12 0 0301
-Á "
^A 8,12 0 0302
-Â "
~A 8,12 0 0303
-Ã "
:A 8,12 0 0304
-Ä "
oA 8,12 0 0305
-Å "
AE 13,9 0 0306
-Æ "
,C 9,9,3 0 0307
-Ç "
`E 9,12 0 0310
-È "
'E 9,12 0 0311
-É "
^E 9,12 0 0312
-Ê "
:E 9,12 0 0313
-Ë "
`I 5,12 0 0314
-Ì "
'I 5,12 0 0315
-Í "
^I 5,12 0 0316
-Î "
:I 5,12 0 0317
-Ï "
-D 10,9 0 0320
-Ð "
~N 11,12 0 0321
-Ñ "
`O 9,12 0 0322
-Ò "
'O 9,12 0 0323
-Ó "
^O 9,12 0 0324
-Ô "
~O 9,12 0 0325
-Õ "
:O 9,12 0 0326
-Ö "
-mu 8,7 0 0327
-× "
+tmu 8,7 0 0327
/O 9,9 0 0330
-Ø "
`U 8,12 0 0331
-Ù "
'U 8,12 0 0332
-Ú "
^U 8,12 0 0333
-Û "
:U 8,12 0 0334
-Ü "
'Y 8,12 0 0335
-Ý "
TP 8,9 0 0336
-Þ "
ss 8,9,3 0 0337
-ß "
`a 8,9 0 0340
-à "
'a 8,9 0 0341
-á "
^a 8,9 0 0342
-â "
~a 8,9 0 0343
-ã "
:a 8,9 0 0344
-ä "
oa 8,10 0 0345
-å "
ae 9,6 0 0346
-æ "
,c 6,6,3 0 0347
-ç "
`e 6,9 0 0350
-è "
'e 6,9 0 0351
-é "
^e 6,9 0 0352
-ê "
:e 6,9 0 0353
-ë "
`i 4,9 0 0354
-ì "
'i 4,9 0 0355
-í "
^i 4,9 0 0356
-î "
:i 4,9 0 0357
-ï "
Sd 6,9 0 0360
-ð "
~n 8,9 0 0361
-ñ "
`o 6,9 0 0362
-ò "
'o 6,9 0 0363
-ó "
^o 6,9 0 0364
-ô "
~o 6,9 0 0365
-õ "
:o 6,9 0 0366
-ö "
-di 8,7 0 0367
-÷ "
+tdi 8,7 0 0367
/o 6,6 0 0370
-ø "
`u 8,9 0 0371
-ù "
'u 8,9 0 0372
-ú "
^u 8,9 0 0373
-û "
:u 8,9 0 0374
-ü "
'y 6,9,3 0 0375
-ý "
Tp 7,9,3 0 0376
-þ "
:y 8,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/NR b/contrib/groff/font/devX75-12/NR
index 1d91f11..be49439 100644
--- a/contrib/groff/font/devX75-12/NR
+++ b/contrib/groff/font/devX75-12/NR
@@ -1,6 +1,7 @@
name NR
spacewidth 3
charset
+--- 10,9 0 00
--- 3,1 0 040
! 4,9 0 041
" 6,9 0 042
@@ -18,7 +19,7 @@ cq "
* 6,9 0 052
+ 8,7 0 053
, 4,2,1 0 054
-\- 7,4 0 055
+\- 4,4 0 055
. 4,2 0 056
/ 4,9 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 8,0,2 0 0137
-` 4,9 0 0140
+` 3,9 0 0140
oq "
a 7,6 0 0141
b 6,9 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 4,7,2 0 0241
-¡ "
ct 7,7,1 0 0242
-¢ "
Po 8,9 0 0243
-£ "
Cs 8,8 0 0244
-¤ "
Ye 8,9 0 0245
-¥ "
bb 8,9 0 0246
-¦ "
sc 6,9,2 0 0247
-§ "
ad 4,9 0 0250
-¨ "
co 11,9 0 0251
-© "
Of 5,9 0 0252
-ª "
Fo 7,6 0 0253
-« "
no 7,5 0 0254
-¬ "
- 4,4 0 0255
hy "
-­ "
rg 11,9 0 0256
-® "
a- 5,8 0 0257
-¯ "
de 5,9 0 0260
-° "
-+- 8,7 0 0261
-± "
+t+- 8,7 0 0261
S2 4,9 0 0262
-² "
S3 4,9 0 0263
-³ "
aa 3,9 0 0264
-´ "
-µ 8,6,3 0 0265
+mc 8,6,3 0 0265
ps 8,9,2 0 0266
-¶ "
pc 4,5 0 0267
-· "
ac 4,0,3 0 0270
-¸ "
S1 4,9 0 0271
-¹ "
Om 5,9 0 0272
-º "
Fc 7,6 0 0273
-» "
14 9,9 0 0274
-¼ "
12 9,9 0 0275
-½ "
34 9,9 0 0276
-¾ "
r? 5,7,2 0 0277
-¿ "
`A 10,12 0 0300
-À "
'A 10,12 0 0301
-Á "
^A 10,12 0 0302
-Â "
~A 10,12 0 0303
-Ã "
:A 10,12 0 0304
-Ä "
oA 10,12 0 0305
-Å "
AE 13,9 0 0306
-Æ "
,C 9,9,3 0 0307
-Ç "
`E 8,12 0 0310
-È "
'E 8,12 0 0311
-É "
^E 8,12 0 0312
-Ê "
:E 8,12 0 0313
-Ë "
`I 6,12 0 0314
-Ì "
'I 6,12 0 0315
-Í "
^I 6,12 0 0316
-Î "
:I 6,12 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 10,12 0 0321
-Ñ "
`O 9,12 0 0322
-Ò "
'O 9,12 0 0323
-Ó "
^O 9,12 0 0324
-Ô "
~O 9,12 0 0325
-Õ "
:O 9,12 0 0326
-Ö "
-mu 8,7 0 0327
-× "
+tmu 8,7 0 0327
/O 9,9 0 0330
-Ø "
`U 10,12 0 0331
-Ù "
'U 10,12 0 0332
-Ú "
^U 10,12 0 0333
-Û "
:U 10,12 0 0334
-Ü "
'Y 10,12 0 0335
-Ý "
TP 8,9 0 0336
-Þ "
ss 7,9 0 0337
-ß "
`a 7,9 0 0340
-à "
'a 7,9 0 0341
-á "
^a 7,9 0 0342
-â "
~a 7,9 0 0343
-ã "
:a 7,9 0 0344
-ä "
oa 7,9 0 0345
-å "
ae 10,6 0 0346
-æ "
,c 6,6,3 0 0347
-ç "
`e 6,9 0 0350
-è "
'e 6,9 0 0351
-é "
^e 6,9 0 0352
-ê "
:e 6,9 0 0353
-ë "
`i 4,9 0 0354
-ì "
'i 4,9 0 0355
-í "
^i 4,9 0 0356
-î "
:i 4,9 0 0357
-ï "
Sd 6,9 0 0360
-ð "
~n 8,9 0 0361
-ñ "
`o 6,9 0 0362
-ò "
'o 6,9 0 0363
-ó "
^o 6,9 0 0364
-ô "
~o 6,9 0 0365
-õ "
:o 6,8 0 0366
-ö "
-di 8,7 0 0367
-÷ "
+tdi 8,7 0 0367
/o 6,7,1 0 0370
-ø "
`u 8,9 0 0371
-ù "
'u 8,9 0 0372
-ú "
^u 8,9 0 0373
-û "
:u 8,9 0 0374
-ü "
'y 6,9,3 0 0375
-ý "
Tp 7,9,3 0 0376
-þ "
:y 6,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/S b/contrib/groff/font/devX75-12/S
index 2e66ad0..6c479c6 100644
--- a/contrib/groff/font/devX75-12/S
+++ b/contrib/groff/font/devX75-12/S
@@ -88,7 +88,6 @@ radicalex 6,12 0 0140
*k 7,6 0 0153
*l 7,9 0 0154
*m 8,6,3 0 0155
-µ "
*n 7,6 0 0156
*o 7,6 0 0157
*p 7,6 0 0160
@@ -128,18 +127,14 @@ arrowverttp "
da 7,12,3 0 0257
arrowvertbt "
de 5,9 0 0260
-° "
+- 7,7 0 0261
-± "
sd 5,9 0 0262
>= 7,7 0 0263
mu 7,6 0 0264
-× "
pt 9,5 0 0265
pd 6,10 0 0266
bu 6,5 0 0267
di 7,6 0 0270
-÷ "
!= 7,7 0 0271
== 7,6 0 0272
~= 7,6 0 0273
@@ -159,7 +154,7 @@ ca 10,6 0 0307
cu 10,6 0 0310
sp 9,6 0 0311
ip 9,6,2 0 0312
---- 9,7,1 0 0313
+nb 9,7,1 0 0313
sb 9,6 0 0314
ib 9,6,2 0 0315
mo 8,6 0 0316
@@ -173,7 +168,6 @@ tm 11,9 0 0324
sr 7,12 0 0326
md 3,4 0 0327
no 9,4 0 0330
-¬ "
AN 8,6 0 0331
OR 8,6 0 0332
hA 13,6 0 0333
@@ -204,7 +198,6 @@ lb "
bracerightex 6,12,4 0 0357
braceleftex "
bv "
---- 10,11 0 0360
ra 4,10,2 0 0361
is 4,12,3 0 0362
--- 9,12,4 0 0363
diff --git a/contrib/groff/font/devX75-12/TB b/contrib/groff/font/devX75-12/TB
index 1ac16ec..fd987a9 100644
--- a/contrib/groff/font/devX75-12/TB
+++ b/contrib/groff/font/devX75-12/TB
@@ -1,6 +1,7 @@
name TB
spacewidth 3
charset
+--- 10,9 0 00
--- 3,1 0 040
! 4,9 0 041
" 5,9 0 042
@@ -11,14 +12,14 @@ $ 6,10,1 0 044
Do "
% 12,9 0 045
& 10,9 0 046
-' 4,9 0 047
+' 3,9 0 047
cq "
( 4,9,3 0 050
) 4,9,3 0 051
* 6,9 0 052
+ 7,6 0 053
, 4,2,2 0 054
-\- 8,4 0 055
+\- 4,4 0 055
. 4,2 0 056
/ 4,9 0 057
sl "
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 4,6,3 0 0241
-¡ "
ct 6,7,2 0 0242
-¢ "
Po 6,9 0 0243
-£ "
Cs 7,8 0 0244
-¤ "
Ye 8,9 0 0245
-¥ "
bb 3,9,3 0 0246
-¦ "
sc 6,9,3 0 0247
-§ "
ad 4,9 0 0250
-¨ "
co 11,9 0 0251
-© "
Of 4,9 0 0252
-ª "
Fo 8,6 0 0253
-« "
no 8,5 0 0254
-¬ "
- 4,4 0 0255
hy "
-­ "
rg 11,9 0 0256
-® "
a- 4,8 0 0257
-¯ "
de 5,9 0 0260
-° "
-+- 7,7 0 0261
-± "
+t+- 7,7 0 0261
S2 4,9 0 0262
-² "
S3 4,9 0 0263
-³ "
aa 4,9 0 0264
-´ "
-µ 6,6,3 0 0265
+mc 6,6,3 0 0265
ps 8,9,3 0 0266
-¶ "
pc 3,5 0 0267
-· "
ac 4,0,3 0 0270
-¸ "
S1 4,9 0 0271
-¹ "
Om 4,9 0 0272
-º "
Fc 8,6 0 0273
-» "
14 9,9 0 0274
-¼ "
12 9,9 0 0275
-½ "
34 9,9 0 0276
-¾ "
r? 7,6,3 0 0277
-¿ "
`A 9,12 0 0300
-À "
'A 9,12 0 0301
-Á "
^A 9,12 0 0302
-Â "
~A 9,12 0 0303
-Ã "
:A 9,12 0 0304
-Ä "
oA 9,12 0 0305
-Å "
AE 13,9 0 0306
-Æ "
,C 8,9,3 0 0307
-Ç "
`E 8,12 0 0310
-È "
'E 8,12 0 0311
-É "
^E 8,12 0 0312
-Ê "
:E 8,12 0 0313
-Ë "
`I 5,12 0 0314
-Ì "
'I 5,12 0 0315
-Í "
^I 5,12 0 0316
-Î "
:I 5,12 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 9,12 0 0321
-Ñ "
`O 9,12 0 0322
-Ò "
'O 9,12 0 0323
-Ó "
^O 9,12 0 0324
-Ô "
~O 9,12 0 0325
-Õ "
:O 9,12 0 0326
-Ö "
-mu 7,6 0 0327
-× "
+tmu 7,6 0 0327
/O 9,10,1 0 0330
-Ø "
`U 9,12 0 0331
-Ù "
'U 9,12 0 0332
-Ú "
^U 9,12 0 0333
-Û "
:U 9,12 0 0334
-Ü "
'Y 9,12 0 0335
-Ý "
TP 8,9 0 0336
-Þ "
ss 8,9 0 0337
-ß "
`a 7,9 0 0340
-à "
'a 7,9 0 0341
-á "
^a 7,9 0 0342
-â "
~a 7,9 0 0343
-ã "
:a 7,9 0 0344
-ä "
oa 7,10 0 0345
-å "
ae 8,6 0 0346
-æ "
,c 6,6,3 0 0347
-ç "
`e 7,9 0 0350
-è "
'e 7,9 0 0351
-é "
^e 7,9 0 0352
-ê "
:e 7,9 0 0353
-ë "
`i 3,9 0 0354
-ì "
'i 3,9 0 0355
-í "
^i 3,9 0 0356
-î "
:i 3,9 0 0357
-ï "
Sd 7,9 0 0360
-ð "
~n 6,9 0 0361
-ñ "
`o 7,9 0 0362
-ò "
'o 7,9 0 0363
-ó "
^o 7,9 0 0364
-ô "
~o 7,9 0 0365
-õ "
:o 7,9 0 0366
-ö "
-di 7,6 0 0367
-÷ "
+tdi 7,6 0 0367
/o 7,7,1 0 0370
-ø "
`u 6,9 0 0371
-ù "
'u 6,9 0 0372
-ú "
^u 6,9 0 0373
-û "
:u 6,9 0 0374
-ü "
'y 6,9,3 0 0375
-ý "
Tp 6,9,3 0 0376
-þ "
:y 6,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/TBI b/contrib/groff/font/devX75-12/TBI
index 68d97ed..4ce7275 100644
--- a/contrib/groff/font/devX75-12/TBI
+++ b/contrib/groff/font/devX75-12/TBI
@@ -1,13 +1,14 @@
name TBI
spacewidth 3
charset
+--- 10,9 0 00
--- 3,1 0 040
! 5,9 0 041
" 7,9 0 042
dq "
# 7,9 0 043
sh "
-$ 7,10,1 0 044
+$ 6,10,1 0 044
Do "
% 12,9 0 045
& 9,9 0 046
@@ -18,7 +19,7 @@ cq "
* 6,9 0 052
+ 7,6 0 053
, 4,2,1 0 054
-\- 8,4 0 055
+\- 4,4 0 055
. 4,2 0 056
/ 5,9 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 6,0,2 0 0137
-` 5,9 0 0140
+` 4,9 0 0140
oq "
a 7,6 0 0141
b 6,9 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 4,6,3 0 0241
-¡ "
ct 6,8,2 0 0242
-¢ "
Po 6,9 0 0243
-£ "
Cs 8,7 0 0244
-¤ "
Ye 6,9 0 0245
-¥ "
bb 4,9 0 0246
-¦ "
sc 7,9,3 0 0247
-§ "
ad 5,9 0 0250
-¨ "
co 11,9 0 0251
-© "
Of 6,9 0 0252
-ª "
Fo 9,6 0 0253
-« "
no 8,6 0 0254
-¬ "
-- 6,4 0 0255
+- 4,4 0 0255
hy "
-­ "
rg 11,9 0 0256
-® "
a- 4,8 0 0257
-¯ "
de 5,9 0 0260
-° "
-+- 7,7 0 0261
-± "
+t+- 7,7 0 0261
S2 4,9 0 0262
-² "
S3 4,9 0 0263
-³ "
aa 4,9 0 0264
-´ "
-µ 7,6,3 0 0265
+mc 7,6,3 0 0265
ps 7,9,3 0 0266
-¶ "
pc 3,5 0 0267
-· "
ac 4,0,3 0 0270
-¸ "
S1 4,9 0 0271
-¹ "
Om 6,9 0 0272
-º "
Fc 9,6 0 0273
-» "
14 9,9 0 0274
-¼ "
12 9,9 0 0275
-½ "
34 9,9 0 0276
-¾ "
r? 6,6,3 0 0277
-¿ "
`A 8,12 0 0300
-À "
'A 8,12 0 0301
-Á "
^A 8,12 0 0302
-Â "
~A 8,12 0 0303
-Ã "
:A 8,12 0 0304
-Ä "
oA 8,12 0 0305
-Å "
AE 12,9 0 0306
-Æ "
,C 8,9,3 0 0307
-Ç "
`E 8,12 0 0310
-È "
'E 8,12 0 0311
-É "
^E 8,12 0 0312
-Ê "
:E 8,12 0 0313
-Ë "
`I 5,12 0 0314
-Ì "
'I 5,12 0 0315
-Í "
^I 5,12 0 0316
-Î "
:I 5,12 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
-~N 9,11 0 0321
-Ñ "
+~N 9,12 0 0321
`O 9,12 0 0322
-Ò "
'O 9,12 0 0323
-Ó "
^O 9,12 0 0324
-Ô "
~O 9,12 0 0325
-Õ "
:O 9,12 0 0326
-Ö "
-mu 7,6 0 0327
-× "
+tmu 7,6 0 0327
/O 9,10,1 0 0330
-Ø "
`U 10,12 0 0331
-Ù "
'U 10,12 0 0332
-Ú "
^U 10,12 0 0333
-Û "
:U 10,12 0 0334
-Ü "
'Y 7,12 0 0335
-Ý "
TP 8,9 0 0336
-Þ "
ss 7,9,3 0 0337
-ß "
`a 7,9 0 0340
-à "
'a 7,9 0 0341
-á "
^a 7,9 0 0342
-â "
~a 7,9 0 0343
-ã "
:a 7,9 0 0344
-ä "
oa 7,9 0 0345
-å "
ae 10,6 0 0346
-æ "
,c 5,6,3 0 0347
-ç "
`e 6,9 0 0350
-è "
'e 6,9 0 0351
-é "
^e 6,9 0 0352
-ê "
:e 6,9 0 0353
-ë "
`i 3,9 0 0354
-ì "
'i 3,9 0 0355
-í "
^i 3,9 0 0356
-î "
:i 3,9 0 0357
-ï "
Sd 6,9 0 0360
-ð "
~n 7,9 0 0361
-ñ "
`o 6,9 0 0362
-ò "
'o 6,9 0 0363
-ó "
^o 6,9 0 0364
-ô "
~o 6,9 0 0365
-õ "
:o 6,9 0 0366
-ö "
-di 7,6 0 0367
-÷ "
+tdi 7,6 0 0367
/o 6,7,1 0 0370
-ø "
`u 7,9 0 0371
-ù "
'u 7,9 0 0372
-ú "
^u 7,9 0 0373
-û "
:u 7,9 0 0374
-ü "
'y 6,9,3 0 0375
-ý "
Tp 6,9,3 0 0376
-þ "
:y 6,9,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/TI b/contrib/groff/font/devX75-12/TI
index 037cec3..55c2aa7 100644
--- a/contrib/groff/font/devX75-12/TI
+++ b/contrib/groff/font/devX75-12/TI
@@ -1,6 +1,7 @@
name TI
spacewidth 3
charset
+--- 9,9 0 00
--- 3,1 0 040
! 4,9 0 041
" 5,9 0 042
@@ -11,14 +12,14 @@ $ 6,10,1 0 044
Do "
% 10,9 0 045
& 9,9 0 046
-' 4,9 0 047
+' 3,9 0 047
cq "
( 4,9,3 0 050
) 4,9,3 0 051
* 6,9 0 052
+ 8,6 0 053
, 3,1,2 0 054
-\- 8,4 0 055
+\- 4,4 0 055
. 3,1 0 056
/ 4,9 0 057
sl "
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 5,6,3 0 0241
-¡ "
ct 6,8,2 0 0242
-¢ "
Po 6,9 0 0243
-£ "
Cs 7,7 0 0244
-¤ "
Ye 6,9 0 0245
-¥ "
bb 4,9,3 0 0246
-¦ "
sc 6,9,2 0 0247
-§ "
ad 4,8 0 0250
-¨ "
co 11,9 0 0251
-© "
Of 4,9 0 0252
-ª "
Fo 6,6 0 0253
-« "
no 8,5 0 0254
-¬ "
- 4,4 0 0255
hy "
-­ "
rg 11,9 0 0256
-® "
a- 4,8 0 0257
-¯ "
de 5,9 0 0260
-° "
-+- 8,7 0 0261
-± "
+t+- 8,7 0 0261
S2 4,9 0 0262
-² "
S3 4,9 0 0263
-³ "
aa 4,9 0 0264
-´ "
-µ 6,6,3 0 0265
+mc 6,6,3 0 0265
ps 7,9,2 0 0266
-¶ "
pc 3,4 0 0267
-· "
ac 4,0,3 0 0270
-¸ "
S1 3,9 0 0271
-¹ "
Om 4,9 0 0272
-º "
Fc 6,6 0 0273
-» "
14 9,9 0 0274
-¼ "
12 9,9 0 0275
-½ "
34 9,9 0 0276
-¾ "
r? 6,6,3 0 0277
-¿ "
`A 8,12 0 0300
-À "
'A 8,12 0 0301
-Á "
^A 8,12 0 0302
-Â "
~A 8,12 0 0303
-Ã "
:A 8,11 0 0304
-Ä "
oA 8,12 0 0305
-Å "
AE 11,9 0 0306
-Æ "
,C 7,9,3 0 0307
-Ç "
`E 8,12 0 0310
-È "
'E 8,12 0 0311
-É "
^E 8,12 0 0312
-Ê "
:E 8,11 0 0313
-Ë "
`I 5,12 0 0314
-Ì "
'I 5,12 0 0315
-Í "
^I 5,12 0 0316
-Î "
:I 5,11 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 9,12 0 0321
-Ñ "
`O 7,12 0 0322
-Ò "
'O 7,12 0 0323
-Ó "
^O 7,12 0 0324
-Ô "
~O 7,12 0 0325
-Õ "
:O 7,11 0 0326
-Ö "
-mu 8,6 0 0327
-× "
+tmu 8,6 0 0327
/O 7,10,1 0 0330
-Ø "
`U 8,12 0 0331
-Ù "
'U 8,12 0 0332
-Ú "
^U 8,12 0 0333
-Û "
:U 8,11 0 0334
-Ü "
'Y 7,12 0 0335
-Ý "
TP 8,9 0 0336
-Þ "
ss 6,9,3 0 0337
-ß "
`a 7,9 0 0340
-à "
'a 7,9 0 0341
-á "
^a 7,9 0 0342
-â "
~a 7,9 0 0343
-ã "
:a 7,8 0 0344
-ä "
oa 7,9 0 0345
-å "
ae 9,6 0 0346
-æ "
,c 5,6,3 0 0347
-ç "
`e 6,9 0 0350
-è "
'e 6,9 0 0351
-é "
^e 6,9 0 0352
-ê "
:e 6,8 0 0353
-ë "
`i 4,9 0 0354
-ì "
'i 4,9 0 0355
-í "
^i 4,9 0 0356
-î "
:i 4,8 0 0357
-ï "
Sd 6,9 0 0360
-ð "
~n 6,9 0 0361
-ñ "
`o 6,9 0 0362
-ò "
'o 6,9 0 0363
-ó "
^o 6,9 0 0364
-ô "
~o 6,9 0 0365
-õ "
:o 6,8 0 0366
-ö "
-di 8,6 0 0367
-÷ "
+tdi 8,6 0 0367
/o 6,7,1 0 0370
-ø "
`u 6,9 0 0371
-ù "
'u 6,9 0 0372
-ú "
^u 6,9 0 0373
-û "
:u 6,8 0 0374
-ü "
'y 6,9,3 0 0375
-ý "
Tp 6,9,3 0 0376
-þ "
:y 6,8,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75-12/TR b/contrib/groff/font/devX75-12/TR
index 16de8a9..390292e 100644
--- a/contrib/groff/font/devX75-12/TR
+++ b/contrib/groff/font/devX75-12/TR
@@ -1,6 +1,7 @@
name TR
spacewidth 3
charset
+--- 9,9 0 00
--- 3,1 0 040
! 3,9 0 041
" 5,9 0 042
@@ -9,16 +10,16 @@ dq "
sh "
$ 6,10,1 0 044
Do "
-% 9,9 0 045
+% 10,9 0 045
& 10,9 0 046
-' 4,9 0 047
+' 2,9 0 047
cq "
( 5,9,3 0 050
) 5,9,3 0 051
* 6,9 0 052
+ 7,6 0 053
, 3,1,2 0 054
-\- 8,4 0 055
+\- 4,4 0 055
. 3,1 0 056
/ 3,9 0 057
sl "
@@ -34,10 +35,10 @@ sl "
9 6,9 0 071
: 3,6 0 072
; 3,6,2 0 073
-< 8,6 0 074
+< 7,6 0 074
= 7,5 0 075
eq "
-> 8,6 0 076
+> 7,6 0 076
? 5,9 0 077
@ 11,9,2 0 0100
at "
@@ -46,12 +47,12 @@ B 8,9 0 0102
C 8,9 0 0103
D 9,9 0 0104
E 8,9 0 0105
-F 8,9 0 0106
+F 7,9 0 0106
G 9,9 0 0107
H 9,9 0 0110
I 4,9 0 0111
-J 4,9 0 0112
-K 8,9 0 0113
+J 5,9 0 0112
+K 9,9 0 0113
L 7,9 0 0114
M 11,9 0 0115
N 9,9 0 0116
@@ -61,17 +62,17 @@ Q 9,9,2 0 0121
R 8,9 0 0122
S 7,9 0 0123
T 7,9 0 0124
-U 8,9 0 0125
+U 9,9 0 0125
V 9,9 0 0126
W 12,9 0 0127
-X 8,9 0 0130
+X 9,9 0 0130
Y 9,9 0 0131
Z 8,9 0 0132
-[ 5,9,3 0 0133
+[ 4,9,3 0 0133
lB "
\ 3,9 0 0134
rs "
-] 5,9,3 0 0135
+] 4,9,3 0 0135
rB "
^ 6,9 0 0136
a^ "
@@ -81,10 +82,10 @@ _ 6,0,3 0 0137
oq "
a 6,6 0 0141
b 6,9 0 0142
-c 5,6 0 0143
+c 6,6 0 0143
d 6,9 0 0144
e 6,6 0 0145
-f 3,9 0 0146
+f 4,9 0 0146
g 6,6,3 0 0147
h 6,9 0 0150
i 3,9 0 0151
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 4,6,3 0 0241
-¡ "
ct 6,7,1 0 0242
-¢ "
Po 6,9 0 0243
-£ "
Cs 7,8 0 0244
-¤ "
Ye 6,9 0 0245
-¥ "
bb 3,9 0 0246
-¦ "
sc 6,9,3 0 0247
-§ "
ad 3,8 0 0250
-¨ "
-co 11,9 0 0251
-© "
+co 10,9 0 0251
Of 5,9 0 0252
-ª "
Fo 7,5 0 0253
-« "
no 8,5 0 0254
-¬ "
-- 6,4 0 0255
+- 4,4 0 0255
hy "
-­ "
rg 11,9 0 0256
-® "
a- 4,8 0 0257
-¯ "
de 5,9 0 0260
-° "
-+- 7,7 0 0261
-± "
+t+- 7,7 0 0261
S2 4,9 0 0262
-² "
S3 4,9 0 0263
-³ "
aa 4,9 0 0264
-´ "
-µ 6,6,3 0 0265
+mc 6,6,3 0 0265
ps 7,9,3 0 0266
-¶ "
pc 3,4 0 0267
-· "
ac 3,0,3 0 0270
-¸ "
S1 4,9 0 0271
-¹ "
Om 5,9 0 0272
-º "
Fc 7,5 0 0273
-» "
14 9,9 0 0274
-¼ "
12 9,9 0 0275
-½ "
34 9,9 0 0276
-¾ "
r? 5,6,3 0 0277
-¿ "
`A 9,12 0 0300
-À "
'A 9,12 0 0301
-Á "
^A 9,12 0 0302
-Â "
~A 9,12 0 0303
-Ã "
:A 9,11 0 0304
-Ä "
oA 9,12 0 0305
-Å "
AE 11,9 0 0306
-Æ "
,C 8,9,3 0 0307
-Ç "
`E 8,12 0 0310
-È "
'E 8,12 0 0311
-É "
^E 8,12 0 0312
-Ê "
:E 8,11 0 0313
-Ë "
`I 4,12 0 0314
-Ì "
'I 4,12 0 0315
-Í "
^I 4,12 0 0316
-Î "
:I 4,11 0 0317
-Ï "
-D 9,9 0 0320
-Ð "
~N 9,12 0 0321
-Ñ "
`O 9,12 0 0322
-Ò "
'O 9,12 0 0323
-Ó "
^O 9,12 0 0324
-Ô "
~O 9,12 0 0325
-Õ "
:O 9,11 0 0326
-Ö "
-mu 7,6 0 0327
-× "
+tmu 7,6 0 0327
/O 9,10 0 0330
-Ø "
`U 8,12 0 0331
-Ù "
'U 8,12 0 0332
-Ú "
^U 8,12 0 0333
-Û "
:U 8,11 0 0334
-Ü "
'Y 9,12 0 0335
-Ý "
TP 7,9 0 0336
-Þ "
ss 6,9 0 0337
-ß "
`a 6,9 0 0340
-à "
'a 6,9 0 0341
-á "
^a 6,9 0 0342
-â "
~a 6,9 0 0343
-ã "
:a 6,8 0 0344
-ä "
oa 6,9 0 0345
-å "
ae 9,6 0 0346
-æ "
,c 5,6,3 0 0347
-ç "
`e 6,9 0 0350
-è "
'e 6,9 0 0351
-é "
^e 6,9 0 0352
-ê "
:e 6,8 0 0353
-ë "
`i 3,9 0 0354
-ì "
'i 3,9 0 0355
-í "
^i 3,9 0 0356
-î "
:i 3,8 0 0357
-ï "
Sd 6,9 0 0360
-ð "
~n 6,9 0 0361
-ñ "
`o 6,9 0 0362
-ò "
'o 6,9 0 0363
-ó "
^o 6,9 0 0364
-ô "
~o 6,9 0 0365
-õ "
:o 6,8 0 0366
-ö "
-di 7,6 0 0367
-÷ "
+tdi 7,6 0 0367
/o 6,6,1 0 0370
-ø "
`u 6,9 0 0371
-ù "
'u 6,9 0 0372
-ú "
^u 6,9 0 0373
-û "
:u 6,8 0 0374
-ü "
'y 6,9,3 0 0375
-ý "
Tp 6,9,3 0 0376
-þ "
:y 6,8,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/CB b/contrib/groff/font/devX75/CB
index 58e0d8b..1a6b6a0 100644
--- a/contrib/groff/font/devX75/CB
+++ b/contrib/groff/font/devX75/CB
@@ -1,6 +1,7 @@
name CB
spacewidth 6
charset
+--- 6,5 0 00
--- 6,1 0 040
! 6,7 0 041
" 6,6 0 042
@@ -11,7 +12,7 @@ $ 6,7,1 0 044
Do "
% 6,6 0 045
& 6,6 0 046
-' 6,7 0 047
+' 6,6 0 047
cq "
( 6,7,1 0 050
) 6,7,1 0 051
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 6,0,2 0 0137
-` 6,7 0 0140
+` 6,8 0 0140
oq "
a 6,5 0 0141
b 6,7 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 6,1 0 0240
r! 6,5,2 0 0241
-¡ "
ct 6,7,1 0 0242
-¢ "
Po 6,7 0 0243
-£ "
Cs 6,6 0 0244
-¤ "
Ye 6,7 0 0245
-¥ "
bb 6,7,2 0 0246
-¦ "
sc 6,7,1 0 0247
-§ "
ad 6,7 0 0250
-¨ "
co 6,7 0 0251
-© "
Of 6,7 0 0252
-ª "
Fo 6,5 0 0253
-« "
no 6,5 0 0254
-¬ "
- 6,4 0 0255
hy "
-­ "
rg 6,7 0 0256
-® "
a- 6,7 0 0257
-¯ "
de 6,7 0 0260
-° "
-+- 6,6 0 0261
-± "
+t+- 6,6 0 0261
S2 6,7 0 0262
-² "
S3 6,7 0 0263
-³ "
aa 6,8 0 0264
-´ "
-µ 6,5,2 0 0265
+mc 6,5,2 0 0265
ps 6,7,1 0 0266
-¶ "
pc 6,5 0 0267
-· "
ac 6,1,2 0 0270
-¸ "
S1 6,7 0 0271
-¹ "
Om 6,7 0 0272
-º "
Fc 6,5 0 0273
-» "
14 6,8,1 0 0274
-¼ "
12 6,8,1 0 0275
-½ "
34 6,8,1 0 0276
-¾ "
r? 6,4,2 0 0277
-¿ "
`A 6,9 0 0300
-À "
'A 6,9 0 0301
-Á "
^A 6,9 0 0302
-Â "
~A 6,9 0 0303
-Ã "
:A 6,9 0 0304
-Ä "
oA 6,9 0 0305
-Å "
AE 6,6 0 0306
-Æ "
,C 6,6,2 0 0307
-Ç "
`E 6,9 0 0310
-È "
'E 6,9 0 0311
-É "
^E 6,9 0 0312
-Ê "
:E 6,9 0 0313
-Ë "
`I 6,9 0 0314
-Ì "
'I 6,9 0 0315
-Í "
^I 6,9 0 0316
-Î "
:I 6,9 0 0317
-Ï "
-D 6,6 0 0320
-Ð "
~N 6,9 0 0321
-Ñ "
`O 6,9 0 0322
-Ò "
'O 6,9 0 0323
-Ó "
^O 6,9 0 0324
-Ô "
~O 6,9 0 0325
-Õ "
:O 6,9 0 0326
-Ö "
-mu 6,6 0 0327
-× "
+tmu 6,6 0 0327
/O 6,6,1 0 0330
-Ø "
`U 6,9 0 0331
-Ù "
'U 6,9 0 0332
-Ú "
^U 6,9 0 0333
-Û "
:U 6,9 0 0334
-Ü "
'Y 6,9 0 0335
-Ý "
TP 6,6 0 0336
-Þ "
ss 6,7 0 0337
-ß "
`a 6,8 0 0340
-à "
'a 6,8 0 0341
-á "
^a 6,8 0 0342
-â "
~a 6,8 0 0343
-ã "
:a 6,8 0 0344
-ä "
oa 6,9 0 0345
-å "
ae 6,5 0 0346
-æ "
,c 6,5,2 0 0347
-ç "
`e 6,8 0 0350
-è "
'e 6,8 0 0351
-é "
^e 6,8 0 0352
-ê "
:e 6,8 0 0353
-ë "
`i 6,8 0 0354
-ì "
'i 6,8 0 0355
-í "
^i 6,8 0 0356
-î "
:i 6,8 0 0357
-ï "
Sd 6,8 0 0360
-ð "
~n 6,8 0 0361
-ñ "
`o 6,8 0 0362
-ò "
'o 6,8 0 0363
-ó "
^o 6,8 0 0364
-ô "
~o 6,8 0 0365
-õ "
:o 6,8 0 0366
-ö "
-di 6,6 0 0367
-÷ "
+tdi 6,6 0 0367
/o 6,6,1 0 0370
-ø "
`u 6,8 0 0371
-ù "
'u 6,8 0 0372
-ú "
^u 6,8 0 0373
-û "
:u 6,8 0 0374
-ü "
'y 6,8,2 0 0375
-ý "
Tp 6,7,2 0 0376
-þ "
:y 6,8,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/CBI b/contrib/groff/font/devX75/CBI
index db6f6ba..c55f142 100644
--- a/contrib/groff/font/devX75/CBI
+++ b/contrib/groff/font/devX75/CBI
@@ -1,6 +1,7 @@
name CBI
spacewidth 6
charset
+--- 6,5 0 00
--- 6,1 0 040
! 6,7 0 041
" 6,7 0 042
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 6,0,2 0 0137
-` 6,7 0 0140
+` 6,8 0 0140
oq "
a 6,5 0 0141
b 6,7 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 6,1 0 0240
r! 6,5,2 0 0241
-¡ "
ct 6,7,1 0 0242
-¢ "
Po 6,6 0 0243
-£ "
Cs 6,6 0 0244
-¤ "
Ye 6,6 0 0245
-¥ "
bb 6,7,1 0 0246
-¦ "
sc 6,7,1 0 0247
-§ "
ad 6,7 0 0250
-¨ "
co 6,7 0 0251
-© "
Of 6,6 0 0252
-ª "
Fo 6,4 0 0253
-« "
no 6,5 0 0254
-¬ "
- 6,4 0 0255
hy "
-­ "
rg 6,7 0 0256
-® "
a- 6,7 0 0257
-¯ "
de 6,7 0 0260
-° "
-+- 6,6 0 0261
-± "
+t+- 6,6 0 0261
S2 6,7 0 0262
-² "
S3 6,7 0 0263
-³ "
aa 6,8 0 0264
-´ "
-µ 6,5,2 0 0265
+mc 6,5,2 0 0265
ps 6,7,1 0 0266
-¶ "
pc 6,4 0 0267
-· "
ac 6,0,2 0 0270
-¸ "
S1 6,7 0 0271
-¹ "
Om 6,6 0 0272
-º "
Fc 6,4 0 0273
-» "
14 6,8,1 0 0274
-¼ "
12 6,8,1 0 0275
-½ "
34 6,8,1 0 0276
-¾ "
r? 6,6,2 0 0277
-¿ "
`A 6,9 0 0300
-À "
'A 6,9 0 0301
-Á "
^A 6,9 0 0302
-Â "
~A 6,9 0 0303
-Ã "
:A 6,8 0 0304
-Ä "
oA 6,9 0 0305
-Å "
AE 6,6 0 0306
-Æ "
,C 6,6,2 0 0307
-Ç "
`E 6,9 0 0310
-È "
'E 6,9 0 0311
-É "
^E 6,9 0 0312
-Ê "
:E 6,8 0 0313
-Ë "
`I 6,9 0 0314
-Ì "
'I 6,9 0 0315
-Í "
^I 6,9 0 0316
-Î "
:I 6,8 0 0317
-Ï "
-D 6,6 0 0320
-Ð "
~N 6,9 0 0321
-Ñ "
`O 6,9 0 0322
-Ò "
'O 6,9 0 0323
-Ó "
^O 6,9 0 0324
-Ô "
~O 6,9 0 0325
-Õ "
:O 6,8 0 0326
-Ö "
-mu 6,6 0 0327
-× "
+tmu 6,6 0 0327
/O 6,7 0 0330
-Ø "
`U 6,9 0 0331
-Ù "
'U 6,9 0 0332
-Ú "
^U 6,9 0 0333
-Û "
:U 6,8 0 0334
-Ü "
'Y 6,9 0 0335
-Ý "
TP 6,6 0 0336
-Þ "
ss 6,7 0 0337
-ß "
`a 6,8 0 0340
-à "
'a 6,8 0 0341
-á "
^a 6,8 0 0342
-â "
~a 6,8 0 0343
-ã "
:a 6,7 0 0344
-ä "
oa 6,9 0 0345
-å "
ae 6,5 0 0346
-æ "
,c 6,5,2 0 0347
-ç "
`e 6,8 0 0350
-è "
'e 6,8 0 0351
-é "
^e 6,8 0 0352
-ê "
:e 6,7 0 0353
-ë "
`i 6,8 0 0354
-ì "
'i 6,8 0 0355
-í "
^i 6,8 0 0356
-î "
:i 6,7 0 0357
-ï "
Sd 6,8 0 0360
-ð "
~n 6,8 0 0361
-ñ "
`o 6,8 0 0362
-ò "
'o 6,8 0 0363
-ó "
^o 6,8 0 0364
-ô "
~o 6,8 0 0365
-õ "
:o 6,7 0 0366
-ö "
-di 6,6 0 0367
-÷ "
+tdi 6,6 0 0367
/o 6,5 0 0370
-ø "
`u 6,8 0 0371
-ù "
'u 6,8 0 0372
-ú "
^u 6,8 0 0373
-û "
:u 6,7 0 0374
-ü "
'y 6,8,2 0 0375
-ý "
Tp 6,7,2 0 0376
-þ "
:y 6,7,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/CI b/contrib/groff/font/devX75/CI
index 43d383a..a429cd0 100644
--- a/contrib/groff/font/devX75/CI
+++ b/contrib/groff/font/devX75/CI
@@ -1,6 +1,7 @@
name CI
spacewidth 6
charset
+--- 6,5 0 00
--- 6,1 0 040
! 6,7 0 041
" 6,7 0 042
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 6,0,2 0 0137
-` 6,7 0 0140
+` 6,8 0 0140
oq "
a 6,5 0 0141
b 6,7 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 6,1 0 0240
r! 6,5,2 0 0241
-¡ "
ct 6,6 0 0242
-¢ "
Po 6,7 0 0243
-£ "
Cs 6,6 0 0244
-¤ "
Ye 6,6 0 0245
-¥ "
bb 6,7,2 0 0246
-¦ "
sc 6,7,1 0 0247
-§ "
ad 6,7 0 0250
-¨ "
co 6,7 0 0251
-© "
Of 6,7 0 0252
-ª "
Fo 6,4 0 0253
-« "
no 6,5 0 0254
-¬ "
- 6,4 0 0255
hy "
-­ "
rg 6,7 0 0256
-® "
a- 6,7 0 0257
-¯ "
de 6,7 0 0260
-° "
-+- 6,6 0 0261
-± "
+t+- 6,6 0 0261
S2 6,7 0 0262
-² "
S3 6,7 0 0263
-³ "
aa 6,8 0 0264
-´ "
-µ 6,5,2 0 0265
+mc 6,5,2 0 0265
ps 6,7,1 0 0266
-¶ "
pc 6,4 0 0267
-· "
ac 6,0,2 0 0270
-¸ "
S1 6,7 0 0271
-¹ "
Om 6,7 0 0272
-º "
Fc 6,4 0 0273
-» "
14 6,8,1 0 0274
-¼ "
12 6,8,1 0 0275
-½ "
34 6,8,1 0 0276
-¾ "
r? 6,4,2 0 0277
-¿ "
`A 6,9 0 0300
-À "
'A 6,9 0 0301
-Á "
^A 6,9 0 0302
-Â "
~A 6,9 0 0303
-Ã "
:A 6,8 0 0304
-Ä "
oA 6,9 0 0305
-Å "
AE 6,6 0 0306
-Æ "
,C 6,6,2 0 0307
-Ç "
`E 6,9 0 0310
-È "
'E 6,9 0 0311
-É "
^E 6,9 0 0312
-Ê "
:E 6,8 0 0313
-Ë "
`I 6,9 0 0314
-Ì "
'I 6,9 0 0315
-Í "
^I 6,9 0 0316
-Î "
:I 6,8 0 0317
-Ï "
-D 6,6 0 0320
-Ð "
~N 6,9 0 0321
-Ñ "
`O 6,9 0 0322
-Ò "
'O 6,9 0 0323
-Ó "
^O 6,9 0 0324
-Ô "
~O 6,9 0 0325
-Õ "
:O 6,8 0 0326
-Ö "
-mu 6,6 0 0327
-× "
+tmu 6,6 0 0327
/O 6,6 0 0330
-Ø "
`U 6,9 0 0331
-Ù "
'U 6,9 0 0332
-Ú "
^U 6,9 0 0333
-Û "
:U 6,8 0 0334
-Ü "
'Y 6,9 0 0335
-Ý "
TP 6,6 0 0336
-Þ "
ss 6,7 0 0337
-ß "
`a 6,8 0 0340
-à "
'a 6,8 0 0341
-á "
^a 6,8 0 0342
-â "
~a 6,8 0 0343
-ã "
:a 6,7 0 0344
-ä "
oa 6,9 0 0345
-å "
ae 6,5 0 0346
-æ "
,c 6,5,2 0 0347
-ç "
`e 6,8 0 0350
-è "
'e 6,8 0 0351
-é "
^e 6,8 0 0352
-ê "
:e 6,7 0 0353
-ë "
`i 6,8 0 0354
-ì "
'i 6,8 0 0355
-í "
^i 6,8 0 0356
-î "
:i 6,7 0 0357
-ï "
Sd 6,8 0 0360
-ð "
~n 6,8 0 0361
-ñ "
`o 6,8 0 0362
-ò "
'o 6,8 0 0363
-ó "
^o 6,8 0 0364
-ô "
~o 6,8 0 0365
-õ "
:o 6,7 0 0366
-ö "
-di 6,6 0 0367
-÷ "
+tdi 6,6 0 0367
/o 6,6,1 0 0370
-ø "
`u 6,8 0 0371
-ù "
'u 6,8 0 0372
-ú "
^u 6,8 0 0373
-û "
:u 6,7 0 0374
-ü "
'y 6,8,2 0 0375
-ý "
Tp 6,7,2 0 0376
-þ "
:y 6,7,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/CR b/contrib/groff/font/devX75/CR
index 900a4a0..d5b65f5 100644
--- a/contrib/groff/font/devX75/CR
+++ b/contrib/groff/font/devX75/CR
@@ -1,6 +1,7 @@
name CR
spacewidth 6
charset
+--- 6,5 0 00
--- 6,1 0 040
! 6,7 0 041
" 6,7 0 042
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 6,0,2 0 0137
-` 6,7 0 0140
+` 6,8 0 0140
oq "
a 6,5 0 0141
b 6,7 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 6,1 0 0240
r! 6,5,2 0 0241
-¡ "
ct 6,7,1 0 0242
-¢ "
Po 6,7 0 0243
-£ "
Cs 6,6 0 0244
-¤ "
Ye 6,7 0 0245
-¥ "
bb 6,7,2 0 0246
-¦ "
sc 6,6,1 0 0247
-§ "
ad 6,7 0 0250
-¨ "
co 6,7 0 0251
-© "
Of 6,6 0 0252
-ª "
Fo 6,4 0 0253
-« "
no 6,5 0 0254
-¬ "
- 6,4 0 0255
hy "
-­ "
rg 6,7 0 0256
-® "
a- 6,7 0 0257
-¯ "
de 6,7 0 0260
-° "
-+- 6,6 0 0261
-± "
+t+- 6,6 0 0261
S2 6,7 0 0262
-² "
S3 6,7 0 0263
-³ "
aa 6,8 0 0264
-´ "
-µ 6,5,2 0 0265
+mc 6,5,2 0 0265
ps 6,6,1 0 0266
-¶ "
pc 6,4 0 0267
-· "
ac 6,1,2 0 0270
-¸ "
S1 6,7 0 0271
-¹ "
Om 6,6 0 0272
-º "
Fc 6,4 0 0273
-» "
14 6,8,1 0 0274
-¼ "
12 6,8,1 0 0275
-½ "
34 6,8,1 0 0276
-¾ "
r? 6,4,2 0 0277
-¿ "
`A 6,9 0 0300
-À "
'A 6,9 0 0301
-Á "
^A 6,9 0 0302
-Â "
~A 6,9 0 0303
-Ã "
:A 6,8 0 0304
-Ä "
oA 6,9 0 0305
-Å "
AE 6,6 0 0306
-Æ "
,C 6,6,2 0 0307
-Ç "
`E 6,9 0 0310
-È "
'E 6,9 0 0311
-É "
^E 6,9 0 0312
-Ê "
:E 6,8 0 0313
-Ë "
`I 6,9 0 0314
-Ì "
'I 6,9 0 0315
-Í "
^I 6,9 0 0316
-Î "
:I 6,8 0 0317
-Ï "
-D 6,6 0 0320
-Ð "
~N 6,9 0 0321
-Ñ "
`O 6,9 0 0322
-Ò "
'O 6,9 0 0323
-Ó "
^O 6,9 0 0324
-Ô "
~O 6,9 0 0325
-Õ "
:O 6,8 0 0326
-Ö "
-mu 6,6 0 0327
-× "
+tmu 6,6 0 0327
/O 6,6 0 0330
-Ø "
`U 6,9 0 0331
-Ù "
'U 6,9 0 0332
-Ú "
^U 6,9 0 0333
-Û "
:U 6,8 0 0334
-Ü "
'Y 6,9 0 0335
-Ý "
TP 6,6 0 0336
-Þ "
ss 6,7 0 0337
-ß "
`a 6,8 0 0340
-à "
'a 6,8 0 0341
-á "
^a 6,8 0 0342
-â "
~a 6,8 0 0343
-ã "
:a 6,7 0 0344
-ä "
oa 6,9 0 0345
-å "
ae 6,5 0 0346
-æ "
,c 6,5,2 0 0347
-ç "
`e 6,8 0 0350
-è "
'e 6,8 0 0351
-é "
^e 6,8 0 0352
-ê "
:e 6,7 0 0353
-ë "
`i 6,8 0 0354
-ì "
'i 6,8 0 0355
-í "
^i 6,8 0 0356
-î "
:i 6,7 0 0357
-ï "
Sd 6,8 0 0360
-ð "
~n 6,8 0 0361
-ñ "
`o 6,8 0 0362
-ò "
'o 6,8 0 0363
-ó "
^o 6,8 0 0364
-ô "
~o 6,8 0 0365
-õ "
:o 6,7 0 0366
-ö "
-di 6,6 0 0367
-÷ "
+tdi 6,6 0 0367
/o 6,5 0 0370
-ø "
`u 6,8 0 0371
-ù "
'u 6,8 0 0372
-ú "
^u 6,8 0 0373
-û "
:u 6,7 0 0374
-ü "
'y 6,8,2 0 0375
-ý "
Tp 6,7,2 0 0376
-þ "
:y 6,7,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/HB b/contrib/groff/font/devX75/HB
index ab6f979..e7011919 100644
--- a/contrib/groff/font/devX75/HB
+++ b/contrib/groff/font/devX75/HB
@@ -1,6 +1,7 @@
name HB
spacewidth 3
charset
+--- 7,7 0 00
--- 3,1 0 040
! 4,8 0 041
" 5,8 0 042
@@ -18,7 +19,7 @@ cq "
* 4,8 0 052
+ 6,6 0 053
, 3,2,2 0 054
-\- 7,4 0 055
+\- 5,4 0 055
. 3,2 0 056
/ 4,8 0 057
sl "
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 4,6,2 0 0241
-¡ "
ct 6,7,1 0 0242
-¢ "
Po 6,8 0 0243
-£ "
Cs 6,7 0 0244
-¤ "
Ye 7,8 0 0245
-¥ "
bb 3,8,2 0 0246
-¦ "
sc 6,8,2 0 0247
-§ "
ad 3,8 0 0250
-¨ "
co 10,8 0 0251
-© "
Of 5,8 0 0252
-ª "
Fo 7,4 0 0253
-« "
no 7,5 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 10,8 0 0256
-® "
a- 3,8 0 0257
-¯ "
de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
+t+- 6,7 0 0261
S2 3,7 0 0262
-² "
S3 3,7 0 0263
-³ "
aa 3,9 0 0264
-´ "
-µ 6,6,2 0 0265
+mc 6,6,2 0 0265
ps 6,8,2 0 0266
-¶ "
pc 3,4 0 0267
-· "
ac 3,0,2 0 0270
-¸ "
S1 3,7 0 0271
-¹ "
Om 5,8 0 0272
-º "
Fc 7,4 0 0273
-» "
14 9,8 0 0274
-¼ "
12 9,8 0 0275
-½ "
34 9,8 0 0276
-¾ "
r? 6,6,2 0 0277
-¿ "
`A 8,11 0 0300
-À "
'A 8,11 0 0301
-Á "
^A 8,11 0 0302
-Â "
~A 8,11 0 0303
-Ã "
:A 8,10 0 0304
-Ä "
oA 8,11 0 0305
-Å "
AE 10,8 0 0306
-Æ "
,C 8,8,2 0 0307
-Ç "
`E 6,11 0 0310
-È "
'E 6,11 0 0311
-É "
^E 6,11 0 0312
-Ê "
:E 6,10 0 0313
-Ë "
`I 3,11 0 0314
-Ì "
'I 3,11 0 0315
-Í "
^I 3,11 0 0316
-Î "
:I 3,10 0 0317
-Ï "
-D 7,8 0 0320
-Ð "
~N 8,11 0 0321
-Ñ "
`O 8,11 0 0322
-Ò "
'O 8,11 0 0323
-Ó "
^O 8,11 0 0324
-Ô "
~O 8,11 0 0325
-Õ "
:O 8,10 0 0326
-Ö "
-mu 6,6 0 0327
-× "
+tmu 6,6 0 0327
/O 8,8 0 0330
-Ø "
`U 7,11 0 0331
-Ù "
'U 7,11 0 0332
-Ú "
^U 7,11 0 0333
-Û "
:U 7,10 0 0334
-Ü "
'Y 9,11 0 0335
-Ý "
TP 7,8 0 0336
-Þ "
ss 6,8 0 0337
-ß "
`a 6,9 0 0340
-à "
'a 6,9 0 0341
-á "
^a 6,9 0 0342
-â "
~a 6,9 0 0343
-ã "
:a 6,9 0 0344
-ä "
oa 6,9 0 0345
-å "
ae 9,6 0 0346
-æ "
,c 5,6,2 0 0347
-ç "
`e 6,9 0 0350
-è "
'e 6,9 0 0351
-é "
^e 6,9 0 0352
-ê "
:e 6,9 0 0353
-ë "
`i 3,9 0 0354
-ì "
'i 3,9 0 0355
-í "
^i 3,9 0 0356
-î "
:i 3,9 0 0357
-ï "
Sd 6,9 0 0360
-ð "
~n 6,9 0 0361
-ñ "
`o 6,9 0 0362
-ò "
'o 6,9 0 0363
-ó "
^o 6,9 0 0364
-ô "
~o 6,9 0 0365
-õ "
:o 6,9 0 0366
-ö "
-di 6,6 0 0367
-÷ "
+tdi 6,6 0 0367
/o 6,6 0 0370
-ø "
`u 6,9 0 0371
-ù "
'u 6,9 0 0372
-ú "
^u 6,9 0 0373
-û "
:u 6,9 0 0374
-ü "
'y 6,9,2 0 0375
-ý "
Tp 6,8,2 0 0376
-þ "
:y 6,9,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/HBI b/contrib/groff/font/devX75/HBI
index ec132d3..a80630e 100644
--- a/contrib/groff/font/devX75/HBI
+++ b/contrib/groff/font/devX75/HBI
@@ -1,6 +1,7 @@
name HBI
spacewidth 3
charset
+--- 7,7 0 00
--- 3,1 0 040
! 4,8 0 041
" 6,8 0 042
@@ -18,7 +19,7 @@ cq "
* 6,8 0 052
+ 6,6 0 053
, 3,2,2 0 054
-\- 7,4 0 055
+\- 5,4 0 055
. 3,2 0 056
/ 5,8 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 6,0,2 0 0137
-` 4,8 0 0140
+` 3,8 0 0140
oq "
a 6,6 0 0141
b 6,8 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 4,6,2 0 0241
-¡ "
ct 7,7,1 0 0242
-¢ "
Po 7,7 0 0243
-£ "
Cs 6,7 0 0244
-¤ "
Ye 7,8 0 0245
-¥ "
bb 4,8,1 0 0246
-¦ "
sc 7,8,2 0 0247
-§ "
ad 4,8 0 0250
-¨ "
co 10,8 0 0251
-© "
Of 5,8 0 0252
-ª "
Fo 8,5 0 0253
-« "
no 7,5 0 0254
-¬ "
- 5,4 0 0255
hy "
-­ "
rg 10,8 0 0256
-® "
a- 4,8 0 0257
-¯ "
de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
+t+- 6,7 0 0261
S2 3,7 0 0262
-² "
S3 3,7 0 0263
-³ "
aa 3,9 0 0264
-´ "
-µ 6,6,2 0 0265
+mc 6,6,2 0 0265
ps 7,8,2 0 0266
-¶ "
pc 3,4 0 0267
-· "
ac 3,1,2 0 0270
-¸ "
S1 3,7 0 0271
-¹ "
Om 5,8 0 0272
-º "
Fc 8,5 0 0273
-» "
14 9,8 0 0274
-¼ "
12 9,8 0 0275
-½ "
34 9,8 0 0276
-¾ "
r? 6,6,2 0 0277
-¿ "
`A 8,11 0 0300
-À "
'A 8,11 0 0301
-Á "
^A 8,11 0 0302
-Â "
~A 8,11 0 0303
-Ã "
:A 8,10 0 0304
-Ä "
oA 8,11 0 0305
-Å "
AE 10,8 0 0306
-Æ "
,C 7,8,2 0 0307
-Ç "
`E 6,11 0 0310
-È "
'E 6,11 0 0311
-É "
^E 6,11 0 0312
-Ê "
:E 6,10 0 0313
-Ë "
`I 3,11 0 0314
-Ì "
'I 3,11 0 0315
-Í "
^I 3,11 0 0316
-Î "
:I 3,10 0 0317
-Ï "
-D 8,8 0 0320
-Ð "
~N 8,11 0 0321
-Ñ "
`O 8,11 0 0322
-Ò "
'O 8,11 0 0323
-Ó "
^O 8,11 0 0324
-Ô "
~O 8,11 0 0325
-Õ "
:O 8,10 0 0326
-Ö "
-mu 6,6 0 0327
-× "
+tmu 6,6 0 0327
/O 8,8 0 0330
-Ø "
`U 7,11 0 0331
-Ù "
'U 7,11 0 0332
-Ú "
^U 7,11 0 0333
-Û "
:U 7,10 0 0334
-Ü "
'Y 7,11 0 0335
-Ý "
TP 7,8 0 0336
-Þ "
ss 7,8 0 0337
-ß "
`a 6,9 0 0340
-à "
'a 6,9 0 0341
-á "
^a 6,9 0 0342
-â "
~a 6,9 0 0343
-ã "
:a 6,8 0 0344
-ä "
oa 6,9 0 0345
-å "
ae 9,6 0 0346
-æ "
,c 5,6,2 0 0347
-ç "
`e 6,9 0 0350
-è "
'e 6,9 0 0351
-é "
^e 6,9 0 0352
-ê "
:e 6,8 0 0353
-ë "
`i 3,9 0 0354
-ì "
'i 3,9 0 0355
-í "
^i 3,9 0 0356
-î "
:i 3,8 0 0357
-ï "
Sd 6,9 0 0360
-ð "
~n 6,9 0 0361
-ñ "
`o 6,9 0 0362
-ò "
'o 6,9 0 0363
-ó "
^o 6,9 0 0364
-ô "
~o 6,9 0 0365
-õ "
:o 6,8 0 0366
-ö "
-di 6,6 0 0367
-÷ "
+tdi 6,6 0 0367
/o 8,6 0 0370
-ø "
`u 6,9 0 0371
-ù "
'u 6,9 0 0372
-ú "
^u 6,9 0 0373
-û "
:u 6,8 0 0374
-ü "
'y 6,9,2 0 0375
-ý "
Tp 6,8,2 0 0376
-þ "
:y 6,8,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/HI b/contrib/groff/font/devX75/HI
index 324e4b7..6f13410 100644
--- a/contrib/groff/font/devX75/HI
+++ b/contrib/groff/font/devX75/HI
@@ -1,6 +1,7 @@
name HI
spacewidth 3
charset
+--- 8,7 0 00
--- 3,1 0 040
! 4,8 0 041
" 4,8 0 042
@@ -11,14 +12,14 @@ $ 6,8,1 0 044
Do "
% 9,8 0 045
& 8,8 0 046
-' 3,8 0 047
+' 2,8 0 047
cq "
( 4,8,2 0 050
) 4,8,2 0 051
* 4,8 0 052
+ 6,6 0 053
, 3,1,2 0 054
-\- 7,4 0 055
+\- 6,4 0 055
. 3,1 0 056
/ 3,8 0 057
sl "
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 4,6,2 0 0241
-¡ "
ct 7,7,1 0 0242
-¢ "
Po 6,8 0 0243
-£ "
Cs 6,7 0 0244
-¤ "
Ye 6,8 0 0245
-¥ "
bb 3,8,2 0 0246
-¦ "
sc 6,8,2 0 0247
-§ "
ad 3,8 0 0250
-¨ "
co 10,8 0 0251
-© "
Of 5,8 0 0252
-ª "
Fo 8,5 0 0253
-« "
no 7,5 0 0254
-¬ "
- 6,4 0 0255
hy "
-­ "
rg 10,8 0 0256
-® "
a- 3,8 0 0257
-¯ "
de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
+t+- 6,7 0 0261
S2 3,8 0 0262
-² "
S3 3,8 0 0263
-³ "
aa 3,9 0 0264
-´ "
-µ 5,6,2 0 0265
+mc 5,6,2 0 0265
ps 6,8,2 0 0266
-¶ "
pc 3,5 0 0267
-· "
ac 3,1,2 0 0270
-¸ "
S1 3,8 0 0271
-¹ "
Om 5,8 0 0272
-º "
Fc 8,5 0 0273
-» "
14 9,8,1 0 0274
-¼ "
12 9,8,1 0 0275
-½ "
34 9,8,1 0 0276
-¾ "
r? 6,6,2 0 0277
-¿ "
`A 7,11 0 0300
-À "
'A 7,11 0 0301
-Á "
^A 7,11 0 0302
-Â "
~A 7,11 0 0303
-Ã "
:A 7,10 0 0304
-Ä "
oA 7,11 0 0305
-Å "
AE 10,8 0 0306
-Æ "
,C 8,8,2 0 0307
-Ç "
`E 7,11 0 0310
-È "
'E 7,11 0 0311
-É "
^E 7,11 0 0312
-Ê "
:E 7,10 0 0313
-Ë "
`I 3,11 0 0314
-Ì "
'I 3,11 0 0315
-Í "
^I 3,11 0 0316
-Î "
:I 3,10 0 0317
-Ï "
-D 8,8 0 0320
-Ð "
~N 8,11 0 0321
-Ñ "
`O 8,11 0 0322
-Ò "
'O 8,11 0 0323
-Ó "
^O 8,11 0 0324
-Ô "
~O 8,11 0 0325
-Õ "
:O 8,10 0 0326
-Ö "
-mu 6,6 0 0327
-× "
+tmu 6,6 0 0327
/O 8,8 0 0330
-Ø "
`U 8,11 0 0331
-Ù "
'U 8,11 0 0332
-Ú "
^U 8,11 0 0333
-Û "
:U 8,10 0 0334
-Ü "
'Y 7,11 0 0335
-Ý "
TP 7,8 0 0336
-Þ "
ss 6,8 0 0337
-ß "
`a 5,9 0 0340
-à "
'a 5,9 0 0341
-á "
^a 5,9 0 0342
-â "
~a 5,9 0 0343
-ã "
:a 5,8 0 0344
-ä "
oa 5,9 0 0345
-å "
ae 8,6 0 0346
-æ "
,c 5,6,2 0 0347
-ç "
`e 5,9 0 0350
-è "
'e 5,9 0 0351
-é "
^e 5,9 0 0352
-ê "
:e 5,8 0 0353
-ë "
`i 2,9 0 0354
-ì "
'i 2,9 0 0355
-í "
^i 2,9 0 0356
-î "
:i 2,8 0 0357
-ï "
Sd 6,9 0 0360
-ð "
~n 6,9 0 0361
-ñ "
`o 6,9 0 0362
-ò "
'o 6,9 0 0363
-ó "
^o 6,9 0 0364
-ô "
~o 6,9 0 0365
-õ "
:o 6,8 0 0366
-ö "
-di 6,6 0 0367
-÷ "
+tdi 6,6 0 0367
/o 6,6 0 0370
-ø "
`u 5,9 0 0371
-ù "
'u 5,9 0 0372
-ú "
^u 5,9 0 0373
-û "
:u 5,8 0 0374
-ü "
'y 5,9,2 0 0375
-ý "
Tp 5,8,2 0 0376
-þ "
:y 5,8,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/HR b/contrib/groff/font/devX75/HR
index fc0143d..b13ca36 100644
--- a/contrib/groff/font/devX75/HR
+++ b/contrib/groff/font/devX75/HR
@@ -1,6 +1,7 @@
name HR
spacewidth 3
charset
+--- 8,7 0 00
--- 3,1 0 040
! 3,8 0 041
" 4,8 0 042
@@ -11,14 +12,14 @@ $ 6,8,1 0 044
Do "
% 9,8 0 045
& 8,8 0 046
-' 3,8 0 047
+' 2,8 0 047
cq "
( 4,8,2 0 050
) 4,8,2 0 051
* 4,8 0 052
+ 6,6 0 053
, 3,1,2 0 054
-\- 7,4 0 055
+\- 4,4 0 055
. 3,1 0 056
/ 3,8 0 057
sl "
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 3,6,2 0 0241
-¡ "
ct 6,7,1 0 0242
-¢ "
Po 6,8 0 0243
-£ "
Cs 5,7 0 0244
-¤ "
Ye 6,8 0 0245
-¥ "
bb 3,8,2 0 0246
-¦ "
sc 6,8,2 0 0247
-§ "
ad 3,8 0 0250
-¨ "
co 9,7 0 0251
-© "
Of 4,8 0 0252
-ª "
Fo 6,5 0 0253
-« "
no 7,5 0 0254
-¬ "
- 4,4 0 0255
hy "
-­ "
rg 9,7 0 0256
-® "
a- 3,8 0 0257
-¯ "
de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
+t+- 6,7 0 0261
S2 3,7 0 0262
-² "
S3 3,7 0 0263
-³ "
aa 3,8 0 0264
-´ "
-µ 5,6,2 0 0265
+mc 5,6,2 0 0265
ps 6,8,2 0 0266
-¶ "
pc 3,4 0 0267
-· "
ac 3,0,2 0 0270
-¸ "
S1 3,7 0 0271
-¹ "
Om 4,8 0 0272
-º "
Fc 6,5 0 0273
-» "
14 9,8 0 0274
-¼ "
12 9,8 0 0275
-½ "
34 9,8 0 0276
-¾ "
r? 6,6,2 0 0277
-¿ "
`A 7,11 0 0300
-À "
'A 7,11 0 0301
-Á "
^A 7,11 0 0302
-Â "
~A 7,11 0 0303
-Ã "
:A 7,10 0 0304
-Ä "
oA 7,11 0 0305
-Å "
AE 10,8 0 0306
-Æ "
,C 8,8,2 0 0307
-Ç "
`E 7,11 0 0310
-È "
'E 7,11 0 0311
-É "
^E 7,11 0 0312
-Ê "
:E 7,10 0 0313
-Ë "
`I 3,11 0 0314
-Ì "
'I 3,11 0 0315
-Í "
^I 3,11 0 0316
-Î "
:I 3,10 0 0317
-Ï "
-D 8,8 0 0320
-Ð "
~N 8,11 0 0321
-Ñ "
`O 8,11 0 0322
-Ò "
'O 8,11 0 0323
-Ó "
^O 8,11 0 0324
-Ô "
~O 8,11 0 0325
-Õ "
:O 8,10 0 0326
-Ö "
-mu 6,6 0 0327
-× "
+tmu 6,6 0 0327
/O 8,9,1 0 0330
-Ø "
`U 8,11 0 0331
-Ù "
'U 8,11 0 0332
-Ú "
^U 8,11 0 0333
-Û "
:U 8,10 0 0334
-Ü "
'Y 7,11 0 0335
-Ý "
TP 7,8 0 0336
-Þ "
ss 5,8 0 0337
-ß "
`a 5,9 0 0340
-à "
'a 5,9 0 0341
-á "
^a 5,9 0 0342
-â "
~a 5,9 0 0343
-ã "
:a 5,8 0 0344
-ä "
oa 5,9 0 0345
-å "
ae 8,6 0 0346
-æ "
,c 5,6,2 0 0347
-ç "
`e 5,9 0 0350
-è "
'e 5,9 0 0351
-é "
^e 5,9 0 0352
-ê "
:e 5,8 0 0353
-ë "
`i 2,9 0 0354
-ì "
'i 2,9 0 0355
-í "
^i 2,9 0 0356
-î "
:i 2,8 0 0357
-ï "
Sd 6,9 0 0360
-ð "
~n 5,9 0 0361
-ñ "
`o 6,9 0 0362
-ò "
'o 6,9 0 0363
-ó "
^o 6,9 0 0364
-ô "
~o 6,9 0 0365
-õ "
:o 6,8 0 0366
-ö "
-di 6,6 0 0367
-÷ "
+tdi 6,6 0 0367
/o 6,6 0 0370
-ø "
`u 5,9 0 0371
-ù "
'u 5,9 0 0372
-ú "
^u 5,9 0 0373
-û "
:u 5,8 0 0374
-ü "
'y 5,9,2 0 0375
-ý "
Tp 6,8,2 0 0376
-þ "
:y 5,8,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/NB b/contrib/groff/font/devX75/NB
index 9ea6576..be515b5 100644
--- a/contrib/groff/font/devX75/NB
+++ b/contrib/groff/font/devX75/NB
@@ -1,6 +1,7 @@
name NB
spacewidth 2
charset
+--- 10,7 0 00
--- 2,1 0 040
! 3,8 0 041
" 6,8 0 042
@@ -11,25 +12,25 @@ $ 6,9,1 0 044
Do "
% 11,8 0 045
& 9,8 0 046
-' 3,8 0 047
+' 4,8 0 047
cq "
( 5,8,2 0 050
) 5,8,2 0 051
* 6,8 0 052
+ 6,6 0 053
, 3,2,2 0 054
-\- 6,4 0 055
+\- 4,4 0 055
. 3,2 0 056
/ 5,8 0 057
sl "
0 6,8 0 060
-1 5,8 0 061
+1 6,8 0 061
2 6,8 0 062
3 6,8 0 063
4 6,8 0 064
5 6,8 0 065
6 6,8 0 066
-7 5,8 0 067
+7 6,8 0 067
8 6,8 0 070
9 6,8 0 071
: 3,5 0 072
@@ -76,8 +77,8 @@ rB "
^ 6,8 0 0136
a^ "
ha "
-_ 6,0,2 0 0137
-` 3,8 0 0140
+_ 5,0,2 0 0137
+` 4,8 0 0140
oq "
a 5,5 0 0141
b 7,8 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 2,1 0 0240
r! 3,6,2 0 0241
-¡ "
ct 6,6,1 0 0242
-¢ "
Po 8,8 0 0243
-£ "
Cs 8,6 0 0244
-¤ "
Ye 9,8 0 0245
-¥ "
bb 6,8 0 0246
-¦ "
sc 5,8,2 0 0247
-§ "
ad 4,8 0 0250
-¨ "
co 9,8 0 0251
-© "
Of 4,8 0 0252
-ª "
Fo 7,5 0 0253
-« "
no 6,5 0 0254
-¬ "
- 4,4 0 0255
hy "
-­ "
rg 9,8 0 0256
-® "
a- 5,7 0 0257
-¯ "
de 4,8 0 0260
-° "
-+- 6,6 0 0261
-± "
+t+- 6,6 0 0261
S2 3,8 0 0262
-² "
S3 3,8 0 0263
-³ "
aa 4,8 0 0264
-´ "
-µ 7,5,2 0 0265
+mc 7,5,2 0 0265
ps 8,8 0 0266
-¶ "
pc 3,5 0 0267
-· "
ac 4,1,2 0 0270
-¸ "
S1 3,8 0 0271
-¹ "
Om 5,8 0 0272
-º "
Fc 7,5 0 0273
-» "
14 9,8 0 0274
-¼ "
12 9,8 0 0275
-½ "
34 9,8 0 0276
-¾ "
r? 6,6,2 0 0277
-¿ "
`A 8,11 0 0300
-À "
'A 8,11 0 0301
-Á "
^A 8,11 0 0302
-Â "
~A 8,11 0 0303
-Ã "
:A 8,11 0 0304
-Ä "
oA 8,11 0 0305
-Å "
AE 11,8 0 0306
-Æ "
,C 8,8,2 0 0307
-Ç "
`E 7,11 0 0310
-È "
'E 7,11 0 0311
-É "
^E 7,11 0 0312
-Ê "
:E 7,11 0 0313
-Ë "
`I 5,11 0 0314
-Ì "
'I 5,11 0 0315
-Í "
^I 5,11 0 0316
-Î "
:I 5,11 0 0317
-Ï "
-D 9,8 0 0320
-Ð "
~N 9,11 0 0321
-Ñ "
`O 8,11 0 0322
-Ò "
'O 8,11 0 0323
-Ó "
^O 8,11 0 0324
-Ô "
~O 8,11 0 0325
-Õ "
:O 8,11 0 0326
-Ö "
-mu 6,6 0 0327
-× "
+tmu 6,6 0 0327
/O 8,8 0 0330
-Ø "
`U 9,11 0 0331
-Ù "
'U 9,11 0 0332
-Ú "
^U 9,11 0 0333
-Û "
:U 9,11 0 0334
-Ü "
'Y 9,11 0 0335
-Ý "
TP 8,8 0 0336
-Þ "
ss 8,8 0 0337
-ß "
`a 5,8 0 0340
-à "
'a 5,8 0 0341
-á "
^a 5,9 0 0342
-â "
~a 5,8 0 0343
-ã "
:a 5,8 0 0344
-ä "
oa 5,8 0 0345
-å "
ae 9,5 0 0346
-æ "
,c 6,5,2 0 0347
-ç "
`e 6,8 0 0350
-è "
'e 6,8 0 0351
-é "
^e 6,9 0 0352
-ê "
:e 6,8 0 0353
-ë "
`i 5,8 0 0354
-ì "
'i 5,8 0 0355
-í "
^i 5,9 0 0356
-î "
:i 5,8 0 0357
-ï "
Sd 7,8 0 0360
-ð "
~n 7,8 0 0361
-ñ "
`o 7,8 0 0362
-ò "
'o 7,8 0 0363
-ó "
^o 7,9 0 0364
-ô "
~o 7,8 0 0365
-õ "
:o 7,8 0 0366
-ö "
-di 6,6 0 0367
-÷ "
+tdi 6,6 0 0367
/o 7,6,1 0 0370
-ø "
`u 7,8 0 0371
-ù "
'u 7,8 0 0372
-ú "
^u 7,9 0 0373
-û "
:u 7,8 0 0374
-ü "
'y 7,8,2 0 0375
-ý "
Tp 7,8,2 0 0376
-þ "
:y 7,8,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/NBI b/contrib/groff/font/devX75/NBI
index 9346faf..b0bd22e 100644
--- a/contrib/groff/font/devX75/NBI
+++ b/contrib/groff/font/devX75/NBI
@@ -1,6 +1,7 @@
name NBI
spacewidth 2
charset
+--- 10,7 0 00
--- 2,1 0 040
! 5,8 0 041
" 6,8 0 042
@@ -11,14 +12,14 @@ $ 6,9,1 0 044
Do "
% 11,8 0 045
& 10,8 0 046
-' 3,8 0 047
+' 4,8 0 047
cq "
( 4,8,1 0 050
) 5,8,1 0 051
* 6,8 0 052
+ 6,6 0 053
, 3,2,2 0 054
-\- 7,4 0 055
+\- 4,4 0 055
. 3,2 0 056
/ 5,8 0 057
sl "
@@ -76,8 +77,8 @@ rB "
^ 6,8 0 0136
a^ "
ha "
-_ 7,0,2 0 0137
-` 3,8 0 0140
+_ 5,0,2 0 0137
+` 4,8 0 0140
oq "
a 7,5 0 0141
b 7,8 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 2,1 0 0240
r! 4,6,2 0 0241
-¡ "
ct 6,6,1 0 0242
-¢ "
Po 7,8 0 0243
-£ "
Cs 7,7 0 0244
-¤ "
Ye 7,8 0 0245
-¥ "
bb 6,8 0 0246
-¦ "
sc 6,8,2 0 0247
-§ "
ad 4,8 0 0250
-¨ "
co 9,8 0 0251
-© "
Of 6,8 0 0252
-ª "
Fo 8,5 0 0253
-« "
no 6,5 0 0254
-¬ "
- 4,4 0 0255
hy "
-­ "
rg 9,8 0 0256
-® "
a- 5,7 0 0257
-¯ "
de 4,8 0 0260
-° "
-+- 6,6 0 0261
-± "
+t+- 6,6 0 0261
S2 3,8 0 0262
-² "
S3 3,8 0 0263
-³ "
aa 4,8 0 0264
-´ "
-µ 7,5,2 0 0265
+mc 7,5,2 0 0265
ps 8,8 0 0266
-¶ "
pc 3,5 0 0267
-· "
ac 4,1,2 0 0270
-¸ "
S1 3,8 0 0271
-¹ "
Om 5,8 0 0272
-º "
Fc 8,5 0 0273
-» "
14 9,8 0 0274
-¼ "
12 9,8 0 0275
-½ "
34 9,8 0 0276
-¾ "
r? 6,6,2 0 0277
-¿ "
`A 8,11 0 0300
-À "
'A 8,11 0 0301
-Á "
^A 8,11 0 0302
-Â "
~A 8,11 0 0303
-Ã "
:A 8,11 0 0304
-Ä "
oA 8,11 0 0305
-Å "
AE 10,8 0 0306
-Æ "
,C 7,8,2 0 0307
-Ç "
`E 8,11 0 0310
-È "
'E 8,11 0 0311
-É "
^E 8,11 0 0312
-Ê "
:E 8,11 0 0313
-Ë "
`I 6,11 0 0314
-Ì "
'I 6,11 0 0315
-Í "
^I 6,11 0 0316
-Î "
:I 6,11 0 0317
-Ï "
-D 9,8 0 0320
-Ð "
~N 8,11 0 0321
-Ñ "
`O 8,11 0 0322
-Ò "
'O 8,11 0 0323
-Ó "
^O 8,11 0 0324
-Ô "
~O 8,11 0 0325
-Õ "
:O 8,11 0 0326
-Ö "
-mu 6,6 0 0327
-× "
+tmu 6,6 0 0327
/O 8,8 0 0330
-Ø "
`U 8,11 0 0331
-Ù "
'U 8,11 0 0332
-Ú "
^U 8,11 0 0333
-Û "
:U 8,11 0 0334
-Ü "
'Y 7,11 0 0335
-Ý "
TP 8,8 0 0336
-Þ "
ss 8,8,2 0 0337
-ß "
`a 7,8 0 0340
-à "
'a 7,8 0 0341
-á "
^a 7,8 0 0342
-â "
~a 7,8 0 0343
-ã "
:a 7,8 0 0344
-ä "
oa 7,9 0 0345
-å "
ae 9,5 0 0346
-æ "
,c 6,5,2 0 0347
-ç "
`e 6,8 0 0350
-è "
'e 6,8 0 0351
-é "
^e 6,8 0 0352
-ê "
:e 6,8 0 0353
-ë "
`i 4,8 0 0354
-ì "
'i 4,8 0 0355
-í "
^i 4,8 0 0356
-î "
:i 4,8 0 0357
-ï "
Sd 6,8 0 0360
-ð "
~n 7,8 0 0361
-ñ "
`o 6,8 0 0362
-ò "
'o 6,8 0 0363
-ó "
^o 6,8 0 0364
-ô "
~o 6,8 0 0365
-õ "
:o 6,8 0 0366
-ö "
-di 6,6 0 0367
-÷ "
+tdi 6,6 0 0367
/o 6,5 0 0370
-ø "
`u 7,8 0 0371
-ù "
'u 7,8 0 0372
-ú "
^u 7,8 0 0373
-û "
:u 7,8 0 0374
-ü "
'y 7,8,2 0 0375
-ý "
Tp 7,8,2 0 0376
-þ "
:y 7,8,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/NI b/contrib/groff/font/devX75/NI
index d14f9ca..a5893a3 100644
--- a/contrib/groff/font/devX75/NI
+++ b/contrib/groff/font/devX75/NI
@@ -1,6 +1,7 @@
name NI
spacewidth 2
charset
+--- 9,7 0 00
--- 2,1 0 040
! 4,8 0 041
" 6,8 0 042
@@ -11,14 +12,14 @@ $ 5,9,1 0 044
Do "
% 9,8 0 045
& 9,8 0 046
-' 3,8 0 047
+' 4,8 0 047
cq "
( 5,8,1 0 050
) 5,8,1 0 051
* 6,8 0 052
+ 6,5 0 053
, 2,2,1 0 054
-\- 6,3 0 055
+\- 4,3 0 055
. 2,2 0 056
/ 5,8,1 0 057
sl "
@@ -76,7 +77,7 @@ rB "
^ 6,8 0 0136
a^ "
ha "
-_ 7,0,2 0 0137
+_ 5,0,2 0 0137
` 3,8 0 0140
oq "
a 6,5 0 0141
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 2,1 0 0240
r! 4,6,2 0 0241
-¡ "
ct 5,6,1 0 0242
-¢ "
Po 6,8 0 0243
-£ "
Cs 8,8 0 0244
-¤ "
Ye 8,8 0 0245
-¥ "
bb 6,8 0 0246
-¦ "
sc 6,8,1 0 0247
-§ "
ad 4,7 0 0250
-¨ "
co 9,8 0 0251
-© "
Of 5,8 0 0252
-ª "
Fo 6,5 0 0253
-« "
no 6,4 0 0254
-¬ "
- 4,3 0 0255
hy "
-­ "
rg 9,8 0 0256
-® "
a- 4,7 0 0257
-¯ "
de 4,8 0 0260
-° "
-+- 6,5 0 0261
-± "
+t+- 6,5 0 0261
S2 3,8 0 0262
-² "
S3 3,8 0 0263
-³ "
aa 3,8 0 0264
-´ "
-µ 6,5,2 0 0265
+mc 6,5,2 0 0265
ps 8,8 0 0266
-¶ "
pc 3,4 0 0267
-· "
ac 4,1,2 0 0270
-¸ "
S1 3,8 0 0271
-¹ "
Om 4,8 0 0272
-º "
Fc 6,5 0 0273
-» "
14 7,8 0 0274
-¼ "
12 7,8 0 0275
-½ "
34 7,8 0 0276
-¾ "
r? 6,6,2 0 0277
-¿ "
`A 8,11 0 0300
-À "
'A 8,11 0 0301
-Á "
^A 8,11 0 0302
-Â "
~A 8,11 0 0303
-Ã "
:A 8,10 0 0304
-Ä "
oA 8,11 0 0305
-Å "
AE 10,8 0 0306
-Æ "
,C 6,8,2 0 0307
-Ç "
`E 7,11 0 0310
-È "
'E 7,11 0 0311
-É "
^E 7,11 0 0312
-Ê "
:E 7,10 0 0313
-Ë "
`I 5,11 0 0314
-Ì "
'I 5,11 0 0315
-Í "
^I 5,11 0 0316
-Î "
:I 5,10 0 0317
-Ï "
-D 8,8 0 0320
-Ð "
~N 9,11 0 0321
-Ñ "
`O 7,11 0 0322
-Ò "
'O 7,11 0 0323
-Ó "
^O 7,11 0 0324
-Ô "
~O 7,11 0 0325
-Õ "
:O 7,10 0 0326
-Ö "
-mu 6,5 0 0327
-× "
+tmu 6,5 0 0327
/O 7,8 0 0330
-Ø "
`U 7,11 0 0331
-Ù "
'U 7,11 0 0332
-Ú "
^U 7,11 0 0333
-Û "
:U 7,10 0 0334
-Ü "
'Y 8,10 0 0335
-Ý "
TP 7,8 0 0336
-Þ "
ss 7,8,2 0 0337
-ß "
`a 6,8 0 0340
-à "
'a 6,8 0 0341
-á "
^a 6,8 0 0342
-â "
~a 6,8 0 0343
-ã "
:a 6,7 0 0344
-ä "
oa 6,9 0 0345
-å "
ae 8,5 0 0346
-æ "
,c 5,5,2 0 0347
-ç "
`e 5,8 0 0350
-è "
'e 5,8 0 0351
-é "
^e 5,8 0 0352
-ê "
:e 5,7 0 0353
-ë "
`i 3,8 0 0354
-ì "
'i 3,8 0 0355
-í "
^i 3,8 0 0356
-î "
:i 3,7 0 0357
-ï "
Sd 6,8 0 0360
-ð "
~n 6,8 0 0361
-ñ "
`o 6,8 0 0362
-ò "
'o 6,8 0 0363
-ó "
^o 6,8 0 0364
-ô "
~o 6,8 0 0365
-õ "
:o 6,7 0 0366
-ö "
-di 6,5 0 0367
-÷ "
+tdi 6,5 0 0367
/o 6,5 0 0370
-ø "
`u 6,8 0 0371
-ù "
'u 6,8 0 0372
-ú "
^u 6,8 0 0373
-û "
:u 6,7 0 0374
-ü "
'y 6,8,2 0 0375
-ý "
Tp 6,8,2 0 0376
-þ "
:y 6,7,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/NR b/contrib/groff/font/devX75/NR
index 8a04d77..d2d2256 100644
--- a/contrib/groff/font/devX75/NR
+++ b/contrib/groff/font/devX75/NR
@@ -1,7 +1,8 @@
name NR
-spacewidth 2
+spacewidth 3
charset
---- 2,1 0 040
+--- 9,7 0 00
+--- 3,1 0 040
! 4,8 0 041
" 6,8 0 042
dq "
@@ -11,14 +12,14 @@ $ 5,9,1 0 044
Do "
% 9,8 0 045
& 10,8 0 046
-' 3,8 0 047
+' 4,8 0 047
cq "
( 4,8,1 0 050
) 4,8,1 0 051
* 6,8 0 052
+ 6,5 0 053
, 3,2,1 0 054
-\- 6,3 0 055
+\- 4,3 0 055
. 4,2 0 056
/ 4,8 0 057
sl "
@@ -76,7 +77,7 @@ rB "
^ 6,8 0 0136
a^ "
ha "
-_ 6,0,2 0 0137
+_ 5,0,2 0 0137
` 3,8 0 0140
oq "
a 6,5 0 0141
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 3,1 0 0240
r! 4,6,2 0 0241
-¡ "
ct 6,6,1 0 0242
-¢ "
Po 7,8 0 0243
-£ "
Cs 7,7 0 0244
-¤ "
Ye 8,8 0 0245
-¥ "
bb 6,8 0 0246
-¦ "
sc 5,8,2 0 0247
-§ "
ad 4,7 0 0250
-¨ "
co 10,8 0 0251
-© "
Of 5,8 0 0252
-ª "
Fo 6,4 0 0253
-« "
no 6,4 0 0254
-¬ "
- 4,3 0 0255
hy "
-­ "
rg 10,8 0 0256
-® "
a- 5,7 0 0257
-¯ "
de 4,8 0 0260
-° "
-+- 6,5 0 0261
-± "
+t+- 6,5 0 0261
S2 3,8 0 0262
-² "
S3 3,8 0 0263
-³ "
aa 3,8 0 0264
-´ "
-µ 6,5,2 0 0265
+mc 6,5,2 0 0265
ps 7,8,2 0 0266
-¶ "
pc 4,4 0 0267
-· "
ac 3,1,2 0 0270
-¸ "
S1 3,8 0 0271
-¹ "
Om 5,8 0 0272
-º "
Fc 6,4 0 0273
-» "
14 7,8 0 0274
-¼ "
12 7,8 0 0275
-½ "
34 7,8 0 0276
-¾ "
r? 5,6,2 0 0277
-¿ "
`A 8,11 0 0300
-À "
'A 8,11 0 0301
-Á "
^A 8,11 0 0302
-Â "
~A 8,11 0 0303
-Ã "
:A 8,10 0 0304
-Ä "
oA 8,11 0 0305
-Å "
AE 11,8 0 0306
-Æ "
,C 7,8,2 0 0307
-Ç "
`E 7,11 0 0310
-È "
'E 7,11 0 0311
-É "
^E 7,11 0 0312
-Ê "
:E 7,10 0 0313
-Ë "
`I 4,11 0 0314
-Ì "
'I 4,11 0 0315
-Í "
^I 4,11 0 0316
-Î "
:I 4,10 0 0317
-Ï "
-D 8,8 0 0320
-Ð "
~N 9,11 0 0321
-Ñ "
`O 8,11 0 0322
-Ò "
'O 8,11 0 0323
-Ó "
^O 8,11 0 0324
-Ô "
~O 8,11 0 0325
-Õ "
:O 8,10 0 0326
-Ö "
-mu 6,5 0 0327
-× "
+tmu 6,5 0 0327
/O 8,8 0 0330
-Ø "
`U 8,11 0 0331
-Ù "
'U 8,11 0 0332
-Ú "
^U 8,11 0 0333
-Û "
:U 8,10 0 0334
-Ü "
-'Y 8,10 0 0335
-Ý "
+'Y 8,11 0 0335
TP 7,8 0 0336
-Þ "
ss 7,8 0 0337
-ß "
`a 6,8 0 0340
-à "
'a 6,8 0 0341
-á "
^a 6,8 0 0342
-â "
~a 6,8 0 0343
-ã "
:a 6,7 0 0344
-ä "
oa 6,8 0 0345
-å "
ae 8,5 0 0346
-æ "
,c 5,5,2 0 0347
-ç "
`e 5,8 0 0350
-è "
'e 5,8 0 0351
-é "
^e 5,8 0 0352
-ê "
:e 5,7 0 0353
-ë "
`i 4,8 0 0354
-ì "
'i 4,8 0 0355
-í "
^i 4,8 0 0356
-î "
:i 4,7 0 0357
-ï "
Sd 5,8 0 0360
-ð "
~n 7,8 0 0361
-ñ "
`o 5,8 0 0362
-ò "
'o 5,8 0 0363
-ó "
^o 5,8 0 0364
-ô "
~o 5,8 0 0365
-õ "
:o 5,7 0 0366
-ö "
-di 6,5 0 0367
-÷ "
+tdi 6,5 0 0367
/o 5,5,1 0 0370
-ø "
`u 6,8 0 0371
-ù "
'u 6,8 0 0372
-ú "
^u 6,8 0 0373
-û "
:u 6,7 0 0374
-ü "
'y 6,8,2 0 0375
-ý "
Tp 5,8,2 0 0376
-þ "
:y 6,7,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/S b/contrib/groff/font/devX75/S
index b1cfbbf..c42dc79 100644
--- a/contrib/groff/font/devX75/S
+++ b/contrib/groff/font/devX75/S
@@ -73,7 +73,7 @@ tf 7,5 0 0134
] 3,7,2 0 0135
rB "
pp 7,7 0 0136
-_ 5,0,3 0 0137
+_ 5,0,2 0 0137
radicalex 5,10 0 0140
*a 7,5 0 0141
*b 5,8,2 0 0142
@@ -88,7 +88,6 @@ radicalex 5,10 0 0140
*k 6,5 0 0153
*l 6,8 0 0154
*m 6,5,2 0 0155
-µ "
*n 6,5 0 0156
*o 5,5 0 0157
*p 6,5 0 0160
@@ -128,18 +127,14 @@ arrowverttp "
da 6,10,2 0 0257
arrowvertbt "
de 4,7 0 0260
-° "
+- 6,7 0 0261
-± "
sd 4,8 0 0262
>= 6,7 0 0263
mu 6,5 0 0264
-× "
pt 7,4 0 0265
pd 5,8 0 0266
bu 5,4 0 0267
di 6,5 0 0270
-÷ "
!= 6,5 0 0271
== 6,5 0 0272
~= 6,5 0 0273
@@ -159,7 +154,7 @@ ca 8,5 0 0307
cu 8,5 0 0310
sp 7,5 0 0311
ip 7,5,2 0 0312
---- 7,6,1 0 0313
+nb 7,6,1 0 0313
sb 7,5 0 0314
ib 7,5,2 0 0315
mo 7,5 0 0316
@@ -173,7 +168,6 @@ tm 10,7 0 0324
sr 6,10 0 0326
md 3,3 0 0327
no 7,3 0 0330
-¬ "
AN 6,5 0 0331
OR 6,5 0 0332
hA 11,5 0 0333
@@ -204,7 +198,6 @@ lb "
bracerightex 5,10,4 0 0357
braceleftex "
bv "
---- 8,9 0 0360
ra 3,7,2 0 0361
is 3,10,2 0 0362
--- 7,10,4 0 0363
diff --git a/contrib/groff/font/devX75/TB b/contrib/groff/font/devX75/TB
index 29fa10a..07c0ba0 100644
--- a/contrib/groff/font/devX75/TB
+++ b/contrib/groff/font/devX75/TB
@@ -1,6 +1,7 @@
name TB
spacewidth 2
charset
+--- 9,7 0 00
--- 2,1 0 040
! 4,7 0 041
" 5,7 0 042
@@ -11,14 +12,14 @@ $ 5,8,1 0 044
Do "
% 9,7 0 045
& 9,7 0 046
-' 4,7 0 047
+' 3,7 0 047
cq "
( 4,7,3 0 050
) 4,7,3 0 051
* 6,7 0 052
+ 6,5 0 053
, 4,2,1 0 054
-\- 7,3 0 055
+\- 3,3 0 055
. 3,2 0 056
/ 3,7 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 5,0,3 0 0137
-` 4,7 0 0140
+` 4,8 0 0140
oq "
a 5,5 0 0141
b 5,7 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 2,1 0 0240
r! 4,4,3 0 0241
-¡ "
ct 6,6,1 0 0242
-¢ "
Po 6,7 0 0243
-£ "
Cs 6,6 0 0244
-¤ "
Ye 6,7 0 0245
-¥ "
bb 3,7,2 0 0246
-¦ "
sc 5,7,2 0 0247
-§ "
ad 4,8 0 0250
-¨ "
co 9,7 0 0251
-© "
Of 4,7 0 0252
-ª "
Fo 6,5 0 0253
-« "
no 7,5 0 0254
-¬ "
- 3,3 0 0255
hy "
-­ "
rg 9,7 0 0256
-® "
a- 4,7 0 0257
-¯ "
de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
+t+- 6,7 0 0261
S2 3,7 0 0262
-² "
S3 3,7 0 0263
-³ "
aa 4,7 0 0264
-´ "
-µ 5,5,3 0 0265
+mc 5,5,3 0 0265
ps 6,7,3 0 0266
-¶ "
pc 3,4 0 0267
-· "
ac 3,0,3 0 0270
-¸ "
S1 3,7 0 0271
-¹ "
Om 4,7 0 0272
-º "
Fc 6,5 0 0273
-» "
14 7,7 0 0274
-¼ "
12 7,7 0 0275
-½ "
34 7,7 0 0276
-¾ "
r? 6,4,3 0 0277
-¿ "
`A 7,10 0 0300
-À "
'A 7,10 0 0301
-Á "
^A 7,10 0 0302
-Â "
~A 7,10 0 0303
-Ã "
:A 7,10 0 0304
-Ä "
oA 7,10 0 0305
-Å "
AE 9,7 0 0306
-Æ "
,C 7,7,3 0 0307
-Ç "
`E 7,10 0 0310
-È "
'E 7,10 0 0311
-É "
^E 7,10 0 0312
-Ê "
:E 7,10 0 0313
-Ë "
`I 5,10 0 0314
-Ì "
'I 5,10 0 0315
-Í "
^I 5,10 0 0316
-Î "
:I 5,10 0 0317
-Ï "
-D 8,7 0 0320
-Ð "
~N 8,10 0 0321
-Ñ "
`O 7,10 0 0322
-Ò "
'O 7,10 0 0323
-Ó "
^O 7,10 0 0324
-Ô "
~O 7,10 0 0325
-Õ "
:O 7,10 0 0326
-Ö "
-mu 6,5 0 0327
-× "
+tmu 6,5 0 0327
/O 7,8,1 0 0330
-Ø "
`U 7,10 0 0331
-Ù "
'U 7,10 0 0332
-Ú "
^U 7,10 0 0333
-Û "
:U 7,10 0 0334
-Ü "
'Y 8,10 0 0335
-Ý "
TP 6,7 0 0336
-Þ "
ss 6,7 0 0337
-ß "
`a 5,8 0 0340
-à "
'a 5,8 0 0341
-á "
^a 5,8 0 0342
-â "
~a 5,8 0 0343
-ã "
:a 5,8 0 0344
-ä "
oa 5,8 0 0345
-å "
ae 8,5 0 0346
-æ "
,c 5,5,3 0 0347
-ç "
`e 5,8 0 0350
-è "
'e 5,8 0 0351
-é "
^e 5,8 0 0352
-ê "
:e 5,8 0 0353
-ë "
`i 3,8 0 0354
-ì "
'i 3,8 0 0355
-í "
^i 3,8 0 0356
-î "
:i 3,8 0 0357
-ï "
Sd 6,8 0 0360
-ð "
~n 6,8 0 0361
-ñ "
`o 6,8 0 0362
-ò "
'o 6,8 0 0363
-ó "
^o 6,8 0 0364
-ô "
~o 6,8 0 0365
-õ "
:o 6,8 0 0366
-ö "
-di 6,5 0 0367
-÷ "
+tdi 6,5 0 0367
/o 6,6,1 0 0370
-ø "
`u 5,8 0 0371
-ù "
'u 5,8 0 0372
-ú "
^u 5,8 0 0373
-û "
:u 5,8 0 0374
-ü "
'y 5,8,3 0 0375
-ý "
Tp 5,7,3 0 0376
-þ "
:y 5,8,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/TBI b/contrib/groff/font/devX75/TBI
index 064d31d..3655a25 100644
--- a/contrib/groff/font/devX75/TBI
+++ b/contrib/groff/font/devX75/TBI
@@ -1,6 +1,7 @@
name TBI
spacewidth 2
charset
+--- 8,7 0 00
--- 2,1 0 040
! 6,7 0 041
" 6,7 0 042
@@ -18,7 +19,7 @@ cq "
* 7,8 0 052
+ 7,5 0 053
, 4,2,1 0 054
-\- 7,3 0 055
+\- 3,3 0 055
. 4,2 0 056
/ 5,7 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 5,0,2 0 0137
-` 4,7 0 0140
+` 4,8 0 0140
oq "
a 5,5 0 0141
b 5,7 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 2,1 0 0240
r! 5,5,3 0 0241
-¡ "
ct 5,6,1 0 0242
-¢ "
Po 5,7 0 0243
-£ "
Cs 7,6 0 0244
-¤ "
Ye 5,7 0 0245
-¥ "
bb 3,7 0 0246
-¦ "
sc 5,7,2 0 0247
-§ "
ad 5,7 0 0250
-¨ "
co 9,7 0 0251
-© "
Of 5,7 0 0252
-ª "
Fo 8,5 0 0253
-« "
no 7,5 0 0254
-¬ "
- 3,3 0 0255
hy "
-­ "
rg 9,7 0 0256
-® "
a- 4,7 0 0257
-¯ "
de 4,7 0 0260
-° "
-+- 7,7 0 0261
-± "
+t+- 7,7 0 0261
S2 3,7 0 0262
-² "
S3 3,7 0 0263
-³ "
aa 4,7 0 0264
-´ "
-µ 5,5,3 0 0265
+mc 5,5,3 0 0265
ps 8,7,3 0 0266
-¶ "
pc 4,4 0 0267
-· "
ac 3,0,3 0 0270
-¸ "
S1 3,7 0 0271
-¹ "
Om 5,7 0 0272
-º "
Fc 8,5 0 0273
-» "
14 7,7 0 0274
-¼ "
12 7,7 0 0275
-½ "
34 7,7 0 0276
-¾ "
r? 5,5,3 0 0277
-¿ "
`A 6,10 0 0300
-À "
'A 6,10 0 0301
-Á "
^A 6,10 0 0302
-Â "
~A 6,10 0 0303
-Ã "
:A 6,10 0 0304
-Ä "
oA 6,10 0 0305
-Å "
AE 9,7 0 0306
-Æ "
,C 7,7,3 0 0307
-Ç "
`E 7,10 0 0310
-È "
'E 7,10 0 0311
-É "
^E 7,10 0 0312
-Ê "
:E 7,10 0 0313
-Ë "
`I 4,10 0 0314
-Ì "
'I 4,10 0 0315
-Í "
^I 4,10 0 0316
-Î "
:I 4,10 0 0317
-Ï "
-D 7,7 0 0320
-Ð "
~N 8,10 0 0321
-Ñ "
`O 7,10 0 0322
-Ò "
'O 7,10 0 0323
-Ó "
^O 7,10 0 0324
-Ô "
~O 7,10 0 0325
-Õ "
:O 7,10 0 0326
-Ö "
-mu 7,5 0 0327
-× "
+tmu 7,5 0 0327
/O 7,8,1 0 0330
-Ø "
`U 8,10 0 0331
-Ù "
'U 8,10 0 0332
-Ú "
^U 8,10 0 0333
-Û "
:U 8,10 0 0334
-Ü "
'Y 6,10 0 0335
-Ý "
TP 6,7 0 0336
-Þ "
ss 6,7,3 0 0337
-ß "
`a 5,8 0 0340
-à "
'a 5,8 0 0341
-á "
^a 5,8 0 0342
-â "
~a 5,8 0 0343
-ã "
:a 5,8 0 0344
-ä "
oa 5,8 0 0345
-å "
ae 8,5 0 0346
-æ "
,c 5,5,3 0 0347
-ç "
`e 5,8 0 0350
-è "
'e 5,8 0 0351
-é "
^e 5,8 0 0352
-ê "
:e 5,8 0 0353
-ë "
`i 3,8 0 0354
-ì "
'i 3,8 0 0355
-í "
^i 3,8 0 0356
-î "
:i 3,8 0 0357
-ï "
Sd 5,8 0 0360
-ð "
~n 5,8 0 0361
-ñ "
`o 5,8 0 0362
-ò "
'o 5,8 0 0363
-ó "
^o 5,8 0 0364
-ô "
~o 5,8 0 0365
-õ "
:o 5,8 0 0366
-ö "
-di 7,5 0 0367
-÷ "
+tdi 7,5 0 0367
/o 5,6,1 0 0370
-ø "
`u 5,8 0 0371
-ù "
'u 5,8 0 0372
-ú "
^u 5,8 0 0373
-û "
:u 5,8 0 0374
-ü "
'y 5,8,2 0 0375
-ý "
Tp 5,7,3 0 0376
-þ "
:y 5,8,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/TI b/contrib/groff/font/devX75/TI
index 6e091e2..a151e9b 100644
--- a/contrib/groff/font/devX75/TI
+++ b/contrib/groff/font/devX75/TI
@@ -1,6 +1,7 @@
name TI
spacewidth 2
charset
+--- 7,7 0 00
--- 2,1 0 040
! 3,7 0 041
" 4,8 0 042
@@ -18,7 +19,7 @@ cq "
* 5,7 0 052
+ 7,5 0 053
, 3,1,2 0 054
-\- 7,3 0 055
+\- 4,3 0 055
. 3,1 0 056
/ 4,7 0 057
sl "
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 2,1 0 0240
r! 4,5,2 0 0241
-¡ "
ct 5,6,1 0 0242
-¢ "
Po 5,7 0 0243
-£ "
Cs 5,7 0 0244
-¤ "
Ye 7,7 0 0245
-¥ "
bb 3,7,2 0 0246
-¦ "
sc 5,7,2 0 0247
-§ "
ad 3,7 0 0250
-¨ "
co 9,7 0 0251
-© "
Of 4,7 0 0252
-ª "
Fo 5,5 0 0253
-« "
no 7,4 0 0254
-¬ "
- 4,3 0 0255
hy "
-­ "
rg 9,7 0 0256
-® "
a- 3,7 0 0257
-¯ "
de 4,7 0 0260
-° "
-+- 7,7 0 0261
-± "
+t+- 7,7 0 0261
S2 3,7 0 0262
-² "
S3 3,7 0 0263
-³ "
aa 3,8 0 0264
-´ "
-µ 5,5,3 0 0265
+mc 5,5,3 0 0265
ps 6,7,3 0 0266
-¶ "
pc 3,3 0 0267
-· "
ac 3,0,2 0 0270
-¸ "
S1 3,7 0 0271
-¹ "
Om 3,7 0 0272
-º "
Fc 5,5 0 0273
-» "
14 7,7 0 0274
-¼ "
12 7,7 0 0275
-½ "
34 7,7 0 0276
-¾ "
r? 5,5,2 0 0277
-¿ "
`A 7,10 0 0300
-À "
'A 7,10 0 0301
-Á "
^A 7,10 0 0302
-Â "
~A 7,10 0 0303
-Ã "
:A 7,9 0 0304
-Ä "
oA 7,10 0 0305
-Å "
AE 8,7 0 0306
-Æ "
,C 7,7,2 0 0307
-Ç "
`E 6,10 0 0310
-È "
'E 6,10 0 0311
-É "
^E 6,10 0 0312
-Ê "
:E 6,9 0 0313
-Ë "
`I 3,10 0 0314
-Ì "
'I 3,10 0 0315
-Í "
^I 3,10 0 0316
-Î "
:I 3,9 0 0317
-Ï "
-D 7,7 0 0320
-Ð "
~N 7,10 0 0321
-Ñ "
`O 7,10 0 0322
-Ò "
'O 7,10 0 0323
-Ó "
^O 7,10 0 0324
-Ô "
~O 7,10 0 0325
-Õ "
:O 7,9 0 0326
-Ö "
-mu 7,5 0 0327
-× "
+tmu 7,5 0 0327
/O 7,8,1 0 0330
-Ø "
`U 7,10 0 0331
-Ù "
'U 7,10 0 0332
-Ú "
^U 7,10 0 0333
-Û "
:U 7,9 0 0334
-Ü "
'Y 6,9 0 0335
-Ý "
TP 6,7 0 0336
-Þ "
ss 6,7,2 0 0337
-ß "
`a 5,8 0 0340
-à "
'a 5,8 0 0341
-á "
^a 5,8 0 0342
-â "
~a 5,8 0 0343
-ã "
:a 5,7 0 0344
-ä "
oa 5,8 0 0345
-å "
ae 7,5 0 0346
-æ "
,c 5,5,2 0 0347
-ç "
`e 5,8 0 0350
-è "
'e 5,8 0 0351
-é "
^e 5,8 0 0352
-ê "
:e 5,7 0 0353
-ë "
`i 3,8 0 0354
-ì "
'i 3,8 0 0355
-í "
^i 3,8 0 0356
-î "
:i 3,7 0 0357
-ï "
Sd 5,8 0 0360
-ð "
~n 5,8 0 0361
-ñ "
`o 5,8 0 0362
-ò "
'o 5,8 0 0363
-ó "
^o 5,8 0 0364
-ô "
~o 5,8 0 0365
-õ "
:o 5,7 0 0366
-ö "
-di 7,5 0 0367
-÷ "
+tdi 7,5 0 0367
/o 5,6,1 0 0370
-ø "
`u 5,8 0 0371
-ù "
'u 5,8 0 0372
-ú "
^u 5,8 0 0373
-û "
:u 5,7 0 0374
-ü "
'y 5,8,3 0 0375
-ý "
Tp 5,7,3 0 0376
-þ "
:y 5,7,3 0 0377
-ÿ "
diff --git a/contrib/groff/font/devX75/TR b/contrib/groff/font/devX75/TR
index 819dff4..900a3f3 100644
--- a/contrib/groff/font/devX75/TR
+++ b/contrib/groff/font/devX75/TR
@@ -1,6 +1,7 @@
name TR
spacewidth 2
charset
+--- 8,7 0 00
--- 2,1 0 040
! 3,7 0 041
" 4,7 0 042
@@ -11,14 +12,14 @@ $ 5,8,1 0 044
Do "
% 8,7 0 045
& 8,7 0 046
-' 3,7 0 047
+' 2,7 0 047
cq "
( 4,7,2 0 050
) 4,7,2 0 051
* 5,7 0 052
+ 6,5 0 053
, 3,1,2 0 054
-\- 7,3 0 055
+\- 4,3 0 055
. 3,1 0 056
/ 3,7 0 057
sl "
@@ -77,7 +78,7 @@ rB "
a^ "
ha "
_ 5,0,3 0 0137
-` 3,7 0 0140
+` 3,8 0 0140
oq "
a 4,5 0 0141
b 5,7 0 0142
@@ -116,193 +117,100 @@ rC "
a~ "
ap "
ti "
+--- 2,1 0 0240
r! 3,5,2 0 0241
-¡ "
ct 5,6,1 0 0242
-¢ "
Po 5,7 0 0243
-£ "
Cs 5,7 0 0244
-¤ "
Ye 5,7 0 0245
-¥ "
bb 2,7 0 0246
-¦ "
sc 5,8,1 0 0247
-§ "
ad 5,7 0 0250
-¨ "
co 9,7 0 0251
-© "
Of 4,7 0 0252
-ª "
Fo 5,5 0 0253
-« "
no 7,4 0 0254
-¬ "
- 4,3 0 0255
hy "
-­ "
rg 9,7 0 0256
-® "
a- 4,7 0 0257
-¯ "
de 4,7 0 0260
-° "
-+- 6,7 0 0261
-± "
+t+- 6,7 0 0261
S2 3,7 0 0262
-² "
S3 3,7 0 0263
-³ "
aa 3,7 0 0264
-´ "
-µ 5,5,2 0 0265
+mc 5,5,2 0 0265
ps 6,7,2 0 0266
-¶ "
pc 2,3 0 0267
-· "
ac 4,0,3 0 0270
-¸ "
S1 3,7 0 0271
-¹ "
Om 4,7 0 0272
-º "
Fc 5,5 0 0273
-» "
14 8,7 0 0274
-¼ "
12 8,7 0 0275
-½ "
34 8,7 0 0276
-¾ "
r? 4,5,2 0 0277
-¿ "
`A 8,10 0 0300
-À "
'A 8,10 0 0301
-Á "
^A 8,10 0 0302
-Â "
~A 8,10 0 0303
-Ã "
:A 8,9 0 0304
-Ä "
oA 8,10 0 0305
-Å "
AE 9,7 0 0306
-Æ "
,C 7,7,3 0 0307
-Ç "
`E 6,10 0 0310
-È "
'E 6,10 0 0311
-É "
^E 6,10 0 0312
-Ê "
:E 6,9 0 0313
-Ë "
`I 4,10 0 0314
-Ì "
'I 4,10 0 0315
-Í "
^I 4,10 0 0316
-Î "
:I 4,9 0 0317
-Ï "
-D 7,7 0 0320
-Ð "
~N 8,10 0 0321
-Ñ "
`O 7,10 0 0322
-Ò "
'O 7,10 0 0323
-Ó "
^O 7,10 0 0324
-Ô "
~O 7,10 0 0325
-Õ "
:O 7,9 0 0326
-Ö "
-mu 6,5 0 0327
-× "
+tmu 6,5 0 0327
/O 8,8,1 0 0330
-Ø "
`U 8,10 0 0331
-Ù "
'U 8,10 0 0332
-Ú "
^U 8,10 0 0333
-Û "
:U 8,9 0 0334
-Ü "
'Y 8,10 0 0335
-Ý "
TP 6,7 0 0336
-Þ "
ss 5,7 0 0337
-ß "
`a 4,8 0 0340
-à "
'a 4,8 0 0341
-á "
^a 4,8 0 0342
-â "
~a 4,8 0 0343
-ã "
:a 4,7 0 0344
-ä "
oa 4,8 0 0345
-å "
ae 6,5 0 0346
-æ "
,c 4,5,3 0 0347
-ç "
`e 4,8 0 0350
-è "
'e 4,8 0 0351
-é "
^e 4,8 0 0352
-ê "
:e 4,7 0 0353
-ë "
`i 4,8 0 0354
-ì "
'i 4,8 0 0355
-í "
^i 4,8 0 0356
-î "
:i 4,7 0 0357
-ï "
Sd 5,8 0 0360
-ð "
~n 5,8 0 0361
-ñ "
`o 5,8 0 0362
-ò "
'o 5,8 0 0363
-ó "
^o 5,8 0 0364
-ô "
~o 5,8 0 0365
-õ "
:o 5,7 0 0366
-ö "
-di 6,5 0 0367
-÷ "
+tdi 6,5 0 0367
/o 5,6,1 0 0370
-ø "
`u 5,8 0 0371
-ù "
'u 5,8 0 0372
-ú "
^u 5,8 0 0373
-û "
:u 5,7 0 0374
-ü "
'y 5,8,2 0 0375
-ý "
Tp 5,7,2 0 0376
-þ "
:y 5,7,2 0 0377
-ÿ "
diff --git a/contrib/groff/font/devascii/R.proto b/contrib/groff/font/devascii/R.proto
index b4d0907..9223e46 100644
--- a/contrib/groff/font/devascii/R.proto
+++ b/contrib/groff/font/devascii/R.proto
@@ -140,6 +140,7 @@ v 24 0 0166
w 24 0 0167
x 24 0 0170
mu "
+tmu "
y 24 0 0171
z 24 0 0172
lC 24 0 0173
diff --git a/contrib/groff/font/devcp1047/R.proto b/contrib/groff/font/devcp1047/R.proto
index 6a624c3..3dc50a7 100644
--- a/contrib/groff/font/devcp1047/R.proto
+++ b/contrib/groff/font/devcp1047/R.proto
@@ -3,23 +3,14 @@ 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 "
@@ -44,23 +35,14 @@ 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 "
@@ -80,23 +62,14 @@ mi "
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
@@ -107,23 +80,14 @@ 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 "
@@ -143,7 +107,6 @@ dq "
lq "
rq "
/O 24 0 0200
-char128 "
a 24 0 0201
b 24 0 0202
c 24 0 0203
@@ -155,19 +118,13 @@ 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 "
+t+- "
de 24 0 0220
-char144 "
j 24 0 0221
k 24 0 0222
l 24 0 0223
@@ -179,19 +136,13 @@ 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 "
+mc "
~ 24 0 0241
a~ "
ap "
@@ -205,50 +156,31 @@ 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 "
+tmu "
{ 24 0 0300
lC "
A 24 0 0301
@@ -266,17 +198,11 @@ H 24 0 0310
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
@@ -295,21 +221,15 @@ P 24 0 0327
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 "
+tdi "
S 24 0 0342
T 24 0 0343
*T "
@@ -323,17 +243,11 @@ Y 24 0 0350
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
@@ -345,12 +259,7 @@ char239 "
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/font/devdvi/CW b/contrib/groff/font/devdvi/CW
index 2039d23..8a01912 100644
--- a/contrib/groff/font/devdvi/CW
+++ b/contrib/groff/font/devdvi/CW
@@ -24,27 +24,19 @@ Fl 550498,407779,233018 1 0017
.i 550498,451470 0 0020
.j 550498,451470,233018 1 0021
ga 550498,640797 2 0022
-char180 550498,640797 2 0023
-aa "
+aa 550498,640797 2 0023
ah 550498,593466 2 0024
ab 550498,640797 2 0025
-char175 550498,593027 2 0026
-a- "
+a- 550498,593027 2 0026
ao 550498,640797 2 0027
-char184 550498,0,203891 1 0030
-ac "
-char223 550498,640797 2 0031
-ss "
-char230 550498,451470 0 0032
-ae "
+ac 550498,0,203891 1 0030
+ss 550498,640797 2 0031
+ae 550498,451470 0 0032
oe 550498,451470 0 0033
-char248 550498,567979,116509 3 0034
-/o "
-char198 550498,640797 2 0035
-AE "
+/o 550498,567979,116509 3 0034
+AE 550498,640797 2 0035
OE 550498,640797 2 0036
-char216 550498,699051,58254 3 0037
-/O "
+/O 550498,699051,58254 3 0037
--- 550498,230104,116509 1 0040
! 550498,640797 2 0041
dq 550498,640797 2 0042
diff --git a/contrib/groff/font/devdvi/CWEC b/contrib/groff/font/devdvi/CWEC
new file mode 100644
index 0000000..9a3d588
--- /dev/null
+++ b/contrib/groff/font/devdvi/CWEC
@@ -0,0 +1,280 @@
+name CWEC
+internalname ectt1000
+spacewidth 550368
+checksum 1900807883
+designsize 10485760
+charset
+ga 550368,640640 2 0000
+aa 550368,640640 2 0001
+a^ 550368,669760 2 0002
+a~ 550368,669760 2 0003
+ad 550368,640640 2 0004
+a" 550368,640640 2 0005
+ao 550368,669760 2 0006
+ah 550368,669760 2 0007
+ab 550368,669760 2 0010
+a- 550368,640640 2 0011
+a. 550368,640640 2 0012
+ac 550368,0,203840 1 0013
+ho 550368,0,232960 1 0014
+bq 550368,131040,145600 1 0015
+fo 550368,460096 2 0016
+fc 550368,460096 2 0017
+lq 550368,640640 2 0020
+rq 550368,640640 2 0021
+Bq 550368,131040,145600 1 0022
+Fo 550368,460096 2 0023
+Fc 550368,460096 2 0024
+en 550368,451360 0 0025
+em 550368,451360 0 0026
+--- 0,451360 0 0027
+--- 550368,728000,87360 3 0030
+.i 550368,451360 0 0031
+.j 550368,451360,232960 1 0032
+ff 550368,640640 2 0033
+fi 550368,640640 2 0034
+fl 550368,640640 2 0035
+Fi 550368,640640 2 0036
+Fl 550368,640640 2 0037
+--- 550368,451360,116480 1 0040
+! 550368,640640 2 0041
+dq 550368,640640 2 0042
+" "
+sh 550368,640640 2 0043
+# "
+Do 550368,728000,87360 3 0044
+$ "
+% 550368,728000,87360 3 0045
+& 550368,640640 2 0046
+cq 550368,640640 2 0047
+' "
+( 550368,728000,87360 3 0050
+) 550368,728000,87360 3 0051
+* 550368,546000 2 0052
+pl 550368,556192,-84448 2 0053
++ "
+, 550368,131040,145600 1 0054
+- 550368,451360 0 0055
+. 550368,131040 0 0056
+sl 550368,728000,87360 3 0057
+/ "
+0 550368,640640 2 0060
+1 550368,640640 2 0061
+2 550368,640640 2 0062
+3 550368,640640 2 0063
+4 550368,640640 2 0064
+5 550368,640640 2 0065
+6 550368,640640 2 0066
+7 550368,640640 2 0067
+8 550368,640640 2 0070
+9 550368,640640 2 0071
+: 550368,451360 0 0072
+; 550368,451360,145600 1 0073
+< 550368,581362,-58240 2 0074
+eq 550368,435706,-204934 0 0075
+= "
+> 550368,581362,-58240 2 0076
+? 550368,640640 2 0077
+at 550368,640640 2 0100
+@ "
+A 550368,640640 2 0101
+B 550368,640640 2 0102
+C 550368,640640 2 0103
+D 550368,640640 2 0104
+E 550368,640640 2 0105
+F 550368,640640 2 0106
+G 550368,640640 2 0107
+H 550368,640640 2 0110
+I 550368,640640 2 0111
+J 550368,640640 2 0112
+K 550368,640640 2 0113
+L 550368,640640 2 0114
+M 550368,640640 2 0115
+N 550368,640640 2 0116
+O 550368,640640 2 0117
+P 550368,640640 2 0120
+Q 550368,640640,145600 3 0121
+R 550368,640640 2 0122
+S 550368,640640 2 0123
+T 550368,640640 2 0124
+U 550368,640640 2 0125
+V 550368,640640 2 0126
+W 550368,640640 2 0127
+X 550368,640640 2 0130
+Y 550368,640640 2 0131
+Z 550368,640640 2 0132
+lB 550368,728000,87360 3 0133
+[ "
+rs 550368,728000,87360 3 0134
+\ "
+rB 550368,728000,87360 3 0135
+] "
+ha 550368,640640 2 0136
+^ "
+_ 550368,0,99733 1 0137
+oq 550368,640640 2 0140
+` "
+a 550368,451360 0 0141
+b 550368,640640 2 0142
+c 550368,451360 0 0143
+d 550368,640640 2 0144
+e 550368,451360 0 0145
+f 550368,640640 2 0146
+g 550368,451360,232960 1 0147
+h 550368,640640 2 0150
+i 550368,640640 2 0151
+j 550368,640640,232960 3 0152
+k 550368,640640 2 0153
+l 550368,640640 2 0154
+m 550368,451360 0 0155
+n 550368,451360 0 0156
+o 550368,451360 0 0157
+p 550368,451360,232960 1 0160
+q 550368,451360,232960 1 0161
+r 550368,451360 0 0162
+s 550368,451360 0 0163
+t 550368,581362 2 0164
+u 550368,451360 0 0165
+v 550368,451360 0 0166
+w 550368,451360 0 0167
+x 550368,451360 0 0170
+y 550368,451360,232960 1 0171
+z 550368,451360 0 0172
+lC 550368,728000,87360 3 0173
+{ "
+ba 550368,728000,87360 3 0174
+bv "
+or "
+| "
+rC 550368,728000,87360 3 0175
+} "
+~ 550368,640640 2 0176
+hy 550368,451360 0 0177
+--- 550368,859040 2 0200
+--- 550368,640640,232960 3 0201
+'C 550368,816227 2 0202
+--- 550368,859040 2 0203
+--- 550368,859040 2 0204
+--- 550368,859040 2 0205
+--- 550368,640640,232960 3 0206
+--- 550368,859040 2 0207
+--- 550368,816227 2 0210
+--- 550368,859040 2 0211
+/L 550368,640640 2 0212
+--- 550368,816227 2 0213
+--- 550368,859040 2 0214
+--- 550368,640640 2 0215
+--- 550368,816227 2 0216
+--- 550368,816227 2 0217
+--- 550368,859040 2 0220
+--- 550368,816227 2 0221
+vS 550368,859040 2 0222
+--- 550368,640640,203840 3 0223
+--- 550368,859040 2 0224
+--- 550368,640640,203840 3 0225
+--- 550368,816227 2 0226
+--- 550368,859040 2 0227
+:Y 550368,859040 2 0230
+--- 550368,816227 2 0231
+vZ 550368,859040 2 0232
+--- 550368,816227 2 0233
+IJ 550368,640640 2 0234
+--- 550368,816227 2 0235
+--- 550368,640640 2 0236
+sc 550368,640640,232960 3 0237
+--- 550368,669760 2 0240
+--- 550368,451360,232960 1 0241
+'c 550368,640640 2 0242
+--- 550368,669760 2 0243
+--- 550368,640640 2 0244
+--- 550368,669760 2 0245
+--- 550368,451360,232960 1 0246
+--- 550368,669760,232960 3 0247
+--- 550368,816227 2 0250
+--- 550368,640640 2 0251
+/l 550368,640640 2 0252
+--- 550368,640640 2 0253
+--- 550368,669760 2 0254
+--- 550368,451360,232960 1 0255
+--- 550368,640640 2 0256
+--- 550368,640640 2 0257
+--- 550368,669760 2 0260
+--- 550368,640640 2 0261
+vs 550368,669760 2 0262
+--- 550368,451360,203840 1 0263
+--- 550368,640640 2 0264
+--- 550368,581362,203840 3 0265
+--- 550368,640640 2 0266
+--- 550368,669760 2 0267
+:y 550368,640640,232960 3 0270
+--- 550368,640640 2 0271
+vz 550368,669760 2 0272
+--- 550368,640640 2 0273
+ij 550368,640640,232960 3 0274
+r! 550368,407680,232960 1 0275
+r? 550368,407680,232960 1 0276
+Po 550368,640640 2 0277
+`A 550368,816227 2 0300
+'A 550368,816227 2 0301
+^A 550368,859040 2 0302
+~A 550368,859040 2 0303
+:A 550368,859040 2 0304
+oA 550368,816227 2 0305
+AE 550368,640640 2 0306
+,C 550368,640640,203840 3 0307
+`E 550368,816227 2 0310
+'E 550368,816227 2 0311
+^E 550368,859040 2 0312
+:E 550368,859040 2 0313
+`I 550368,816227 2 0314
+'I 550368,816227 2 0315
+^I 550368,859040 2 0316
+:I 550368,859040 2 0317
+-D 550368,640640 2 0320
+~N 550368,859040 2 0321
+`O 550368,816227 2 0322
+'O 550368,816227 2 0323
+^O 550368,859040 2 0324
+~O 550368,859040 2 0325
+:O 550368,859040 2 0326
+OE 550368,640640 2 0327
+/O 550368,698880,58240 3 0330
+`U 550368,816227 2 0331
+'U 550368,816227 2 0332
+^U 550368,859040 2 0333
+:U 550368,859040 2 0334
+'Y 550368,816227 2 0335
+TP 550368,640640 2 0336
+--- 550368,640640 2 0337
+`a 550368,640640 2 0340
+'a 550368,640640 2 0341
+^a 550368,669760 2 0342
+~a 550368,669760 2 0343
+:a 550368,640640 2 0344
+oa 550368,669760 2 0345
+ae 550368,451360 0 0346
+,c 550368,451360,203840 1 0347
+`e 550368,640640 2 0350
+'e 550368,640640 2 0351
+^e 550368,669760 2 0352
+:e 550368,640640 2 0353
+`i 550368,640640 2 0354
+'i 550368,640640 2 0355
+^i 550368,669760 2 0356
+:i 550368,640640 2 0357
+Sd 550368,640640 2 0360
+~n 550368,669760 2 0361
+`o 550368,640640 2 0362
+'o 550368,640640 2 0363
+^o 550368,669760 2 0364
+~o 550368,669760 2 0365
+:o 550368,640640 2 0366
+oe 550368,451360 0 0367
+/o 550368,567840,116480 3 0370
+`u 550368,640640 2 0371
+'u 550368,640640 2 0372
+^u 550368,669760 2 0373
+:u 550368,640640 2 0374
+'y 550368,640640,232960 3 0375
+Tp 550368,640640,232960 3 0376
+ss 550368,640640 2 0377
diff --git a/contrib/groff/font/devdvi/CWI b/contrib/groff/font/devdvi/CWI
index 7e7b540..d241754 100644
--- a/contrib/groff/font/devdvi/CWI
+++ b/contrib/groff/font/devdvi/CWI
@@ -24,27 +24,19 @@ 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 "
+aa 550498,640797,0,182045 2 0023
ah 550498,593466,0,182045 2 0024
ab 550498,640797,0,182045 2 0025
-char175 550498,593027,0,182045 2 0026
-a- "
+a- 550498,593027,0,182045 2 0026
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 "
+ac 550498,0,203891,182045 1 0030
+ss 550498,640797,233018,182045 3 0031
+ae 550498,451470,0,182045 0 0032
oe 550498,451470,0,182045 0 0033
-char248 550498,567979,116509,182045 3 0034
-/o "
-char198 550498,640797,0,182045 2 0035
-AE "
+/o 550498,567979,116509,182045 3 0034
+AE 550498,640797,0,182045 2 0035
OE 550498,640797,0,182045 2 0036
-char216 550498,699051,58254,182045 3 0037
-/O "
+/O 550498,699051,58254,182045 3 0037
--- 550498,230104,116509,182045 1 0040
! 550498,640797,0,182045 2 0041
dq 550498,640797,0,182045 2 0042
diff --git a/contrib/groff/font/devdvi/CWIEC b/contrib/groff/font/devdvi/CWIEC
new file mode 100644
index 0000000..8d8fb9d
--- /dev/null
+++ b/contrib/groff/font/devdvi/CWIEC
@@ -0,0 +1,281 @@
+name CWIEC
+internalname ecit1000
+spacewidth 550368
+slant 14.036243
+checksum 1900807883
+designsize 10485760
+charset
+ga 550368,640640,0,182000 2 0000
+aa 550368,640640,0,182000 2 0001
+a^ 550368,669760 2 0002
+a~ 550368,669760,0,182000 2 0003
+ad 550368,640640,0,182000 2 0004
+a" 550368,640640,0,182000 2 0005
+ao 550368,669760,0,182000 2 0006
+ah 550368,669760 2 0007
+ab 550368,669760,0,182000 2 0010
+a- 550368,640640,0,182000 2 0011
+a. 550368,640640,0,182000 2 0012
+ac 550368,0,203840,182000 1 0013
+ho 550368,0,232960,182000 1 0014
+bq 550368,131040,145600,182000 1 0015
+fo 550368,460096,0,182000 2 0016
+fc 550368,460096,0,182000 2 0017
+lq 550368,640640,0,182000 2 0020
+rq 550368,640640,0,182000 2 0021
+Bq 550368,131040,145600,182000 1 0022
+Fo 550368,460096,0,182000 2 0023
+Fc 550368,460096,0,182000 2 0024
+en 550368,451360,0,182000 0 0025
+em 550368,451360,0,182000 0 0026
+--- 0,451360 0 0027
+--- 550368,728000,87360,182000 3 0030
+.i 550368,451360,0,182000 0 0031
+.j 550368,451360,232960,182000 1 0032
+ff 550368,640640,232960,182000 3 0033
+fi 550368,640640,232960,182000 3 0034
+fl 550368,640640,232960,182000 3 0035
+Fi 550368,640640,232960,182000 3 0036
+Fl 550368,640640,232960,182000 3 0037
+--- 550368,451360,116480,182000 1 0040
+! 550368,640640,0,182000 2 0041
+dq 550368,640640,0,182000 2 0042
+" "
+sh 550368,640640,0,182000 2 0043
+# "
+Do 550368,728000,87360,182000 3 0044
+$ "
+% 550368,728000,87360,182000 3 0045
+& 550368,640640,0,182000 2 0046
+cq 550368,640640,0,182000 2 0047
+' "
+( 550368,728000,87360,182000 3 0050
+) 550368,728000,87360,182000 3 0051
+* 550368,546000,0,182000 2 0052
+pl 550368,556192,-84448,182000 2 0053
++ "
+, 550368,131040,145600,182000 1 0054
+- 550368,451360,0,182000 0 0055
+. 550368,131040,0,182000 0 0056
+sl 550368,728000,87360,182000 3 0057
+/ "
+0 550368,640640,0,182000 2 0060
+1 550368,640640,0,182000 2 0061
+2 550368,640640,0,182000 2 0062
+3 550368,640640,0,182000 2 0063
+4 550368,640640,232960,182000 3 0064
+5 550368,640640,0,182000 2 0065
+6 550368,640640,0,182000 2 0066
+7 550368,640640,0,182000 2 0067
+8 550368,640640,0,182000 2 0070
+9 550368,640640,0,182000 2 0071
+: 550368,451360,0,182000 0 0072
+; 550368,451360,145600,182000 1 0073
+< 550368,582400,-58240,182000 2 0074
+eq 550368,435706,-204934,182000 0 0075
+= "
+> 550368,582400,-58240,182000 2 0076
+? 550368,640640,0,182000 2 0077
+at 550368,640640,0,182000 2 0100
+@ "
+A 550368,640640,0,182000 2 0101
+B 550368,640640,0,182000 2 0102
+C 550368,640640,0,182000 2 0103
+D 550368,640640,0,182000 2 0104
+E 550368,640640,0,182000 2 0105
+F 550368,640640,0,182000 2 0106
+G 550368,640640,0,182000 2 0107
+H 550368,640640,0,182000 2 0110
+I 550368,640640,0,182000 2 0111
+J 550368,640640,0,182000 2 0112
+K 550368,640640,0,182000 2 0113
+L 550368,640640,0,182000 2 0114
+M 550368,640640,0,182000 2 0115
+N 550368,640640,0,182000 2 0116
+O 550368,640640,0,182000 2 0117
+P 550368,640640,0,182000 2 0120
+Q 550368,640640,145600,182000 3 0121
+R 550368,640640,0,182000 2 0122
+S 550368,640640,0,182000 2 0123
+T 550368,640640,0,182000 2 0124
+U 550368,640640,0,182000 2 0125
+V 550368,640640,0,182000 2 0126
+W 550368,640640,0,182000 2 0127
+X 550368,640640,0,182000 2 0130
+Y 550368,640640,0,182000 2 0131
+Z 550368,640640,0,182000 2 0132
+lB 550368,728000,87360,182000 3 0133
+[ "
+rs 550368,728000,87360,182000 3 0134
+\ "
+rB 550368,728000,87360,182000 3 0135
+] "
+ha 550368,640640,0,182000 2 0136
+^ "
+_ 550368,0,99733,182000 1 0137
+oq 550368,640640,0,182000 2 0140
+` "
+a 550368,451360,0,182000 0 0141
+b 550368,640640,0,182000 2 0142
+c 550368,451360,0,182000 0 0143
+d 550368,640640,0,182000 2 0144
+e 550368,451360,0,182000 0 0145
+f 550368,640640,232960,182000 3 0146
+g 550368,451360,232960,182000 1 0147
+h 550368,640640,0,182000 2 0150
+i 550368,640640,0,182000 2 0151
+j 550368,640640,232960,182000 3 0152
+k 550368,640640,0,182000 2 0153
+l 550368,640640,0,182000 2 0154
+m 550368,451360,0,182000 0 0155
+n 550368,451360,0,182000 0 0156
+o 550368,451360,0,182000 0 0157
+p 550368,451360,232960,182000 1 0160
+q 550368,451360,232960,182000 1 0161
+r 550368,451360,0,182000 0 0162
+s 550368,451360,0,182000 0 0163
+t 550368,640640,0,182000 2 0164
+u 550368,451360,0,182000 0 0165
+v 550368,451360,0,182000 0 0166
+w 550368,451360,0,182000 0 0167
+x 550368,451360,0,182000 0 0170
+y 550368,451360,232960,182000 1 0171
+z 550368,451360,0,182000 0 0172
+lC 550368,728000,87360,182000 3 0173
+{ "
+ba 550368,728000,87360,182000 3 0174
+bv "
+or "
+| "
+rC 550368,728000,87360,182000 3 0175
+} "
+~ 550368,640640,0,182000 2 0176
+hy 550368,451360,0,182000 0 0177
+--- 550368,859040,0,182000 2 0200
+--- 550368,640640,232960,182000 3 0201
+'C 550368,816379,0,182000 2 0202
+--- 550368,859040,0,182000 2 0203
+--- 550368,859040,0,182000 2 0204
+--- 550368,859040,0,182000 2 0205
+--- 550368,640640,232960,182000 3 0206
+--- 550368,859040,0,182000 2 0207
+--- 550368,816379,0,182000 2 0210
+--- 550368,859040,0,182000 2 0211
+/L 550368,640640,0,182000 2 0212
+--- 550368,816379,0,182000 2 0213
+--- 550368,859040,0,182000 2 0214
+--- 550368,640640,0,160160 2 0215
+--- 550368,816379,0,182000 2 0216
+--- 550368,816379,0,182000 2 0217
+--- 550368,859040,0,182000 2 0220
+--- 550368,816379,0,182000 2 0221
+vS 550368,859040,0,182000 2 0222
+--- 550368,640640,203840,182000 3 0223
+--- 550368,859040,0,182000 2 0224
+--- 550368,640640,203840,182000 3 0225
+--- 550368,816379,0,182000 2 0226
+--- 550368,859040,0,182000 2 0227
+:Y 550368,859040,0,182000 2 0230
+--- 550368,816379,0,182000 2 0231
+vZ 550368,859040,0,182000 2 0232
+--- 550368,816379,0,182000 2 0233
+IJ 550368,640640,0,182000 2 0234
+--- 550368,816379,0,182000 2 0235
+--- 550368,640640,0,182000 2 0236
+sc 550368,640640,232960,182000 3 0237
+--- 550368,669760,0,182000 2 0240
+--- 550368,451360,232960,182000 1 0241
+'c 550368,640640,0,182000 2 0242
+--- 550368,669760,0,182000 2 0243
+--- 550368,640640,0,182000 2 0244
+--- 550368,669760,0,182000 2 0245
+--- 550368,451360,232960,182000 1 0246
+--- 550368,669760,232960,182000 3 0247
+--- 550368,816379,0,182000 2 0250
+--- 550368,640640,0,182000 2 0251
+/l 550368,640640,0,182000 2 0252
+--- 550368,640640,0,182000 2 0253
+--- 550368,669760,0,182000 2 0254
+--- 550368,451360,232960,182000 1 0255
+--- 550368,669760,0,182000 2 0256
+--- 550368,640640,0,182000 2 0257
+--- 550368,669760,0,182000 2 0260
+--- 550368,640640,0,182000 2 0261
+vs 550368,669760,0,182000 2 0262
+--- 550368,451360,203840,182000 1 0263
+--- 550368,640640,0,182000 2 0264
+--- 550368,640640,203840,182000 3 0265
+--- 550368,640640,0,182000 2 0266
+--- 550368,669760,0,182000 2 0267
+:y 550368,669760,232960,182000 3 0270
+--- 550368,640640,0,182000 2 0271
+vz 550368,669760,0,182000 2 0272
+--- 550368,640640,0,182000 2 0273
+ij 550368,640640,232960,182000 3 0274
+r! 550368,407680,232960,182000 1 0275
+r? 550368,407680,232960,182000 1 0276
+Po 550368,640640,0,182000 2 0277
+`A 550368,816379,0,182000 2 0300
+'A 550368,816379,0,182000 2 0301
+^A 550368,859040,0,182000 2 0302
+~A 550368,859040,0,182000 2 0303
+:A 550368,859040,0,182000 2 0304
+oA 550368,816379,0,182000 2 0305
+AE 550368,640640,0,182000 2 0306
+,C 550368,640640,203840,182000 3 0307
+`E 550368,816379,0,182000 2 0310
+'E 550368,816379,0,182000 2 0311
+^E 550368,859040,0,182000 2 0312
+:E 550368,859040,0,182000 2 0313
+`I 550368,816379,0,182000 2 0314
+'I 550368,816379,0,182000 2 0315
+^I 550368,859040,0,182000 2 0316
+:I 550368,859040,0,182000 2 0317
+-D 550368,640640,0,182000 2 0320
+~N 550368,859040,0,182000 2 0321
+`O 550368,816379,0,182000 2 0322
+'O 550368,816379,0,182000 2 0323
+^O 550368,859040,0,182000 2 0324
+~O 550368,859040,0,182000 2 0325
+:O 550368,859040,0,182000 2 0326
+OE 550368,640640,0,182000 2 0327
+/O 550368,698880,58240,182000 3 0330
+`U 550368,816379,0,182000 2 0331
+'U 550368,816379,0,182000 2 0332
+^U 550368,859040,0,182000 2 0333
+:U 550368,859040,0,182000 2 0334
+'Y 550368,816379,0,182000 2 0335
+TP 550368,640640,0,182000 2 0336
+--- 550368,640640,0,182000 2 0337
+`a 550368,640640,0,182000 2 0340
+'a 550368,640640,0,182000 2 0341
+^a 550368,669760,0,182000 2 0342
+~a 550368,669760,0,182000 2 0343
+:a 550368,669760,0,182000 2 0344
+oa 550368,669760,0,182000 2 0345
+ae 550368,451360,0,182000 0 0346
+,c 550368,451360,203840,182000 1 0347
+`e 550368,640640,0,182000 2 0350
+'e 550368,640640,0,182000 2 0351
+^e 550368,669760,0,182000 2 0352
+:e 550368,669760,0,182000 2 0353
+`i 550368,640640,0,182000 2 0354
+'i 550368,640640,0,182000 2 0355
+^i 550368,669760,0,182000 2 0356
+:i 550368,669760,0,182000 2 0357
+Sd 550368,640640,0,182000 2 0360
+~n 550368,669760,0,182000 2 0361
+`o 550368,640640,0,182000 2 0362
+'o 550368,640640,0,182000 2 0363
+^o 550368,669760,0,182000 2 0364
+~o 550368,669760,0,182000 2 0365
+:o 550368,669760,0,182000 2 0366
+oe 550368,451360,0,182000 0 0367
+/o 550368,567840,116480,182000 3 0370
+`u 550368,640640,0,182000 2 0371
+'u 550368,640640,0,182000 2 0372
+^u 550368,669760,0,182000 2 0373
+:u 550368,669760,0,182000 2 0374
+'y 550368,640640,232960,182000 3 0375
+Tp 550368,640640,232960,182000 3 0376
+ss 550368,640640,232960,182000 3 0377
diff --git a/contrib/groff/font/devdvi/CWITC b/contrib/groff/font/devdvi/CWITC
new file mode 100644
index 0000000..bf4aa1b
--- /dev/null
+++ b/contrib/groff/font/devdvi/CWITC
@@ -0,0 +1,139 @@
+name CWITC
+special
+internalname tcit1000
+spacewidth 550368
+slant 14.036243
+checksum 1703447420
+designsize 10485760
+charset
+--- 550368,628074,0,182000 2 0000
+--- 550368,628074,0,182000 2 0001
+--- 550368,669760,0,182000 2 0002
+--- 550368,669760,0,182000 2 0003
+--- 550368,669760,0,182000 2 0004
+--- 550368,628074,0,182000 2 0005
+--- 550368,669760,0,182000 2 0006
+--- 550368,669760,0,182000 2 0007
+--- 550368,669760,0,182000 2 0010
+--- 550368,669760,0,182000 2 0011
+--- 550368,628074,0,182000 2 0012
+--- 550368,0,203840,182000 1 0013
+--- 550368,0,232960,182000 1 0014
+--- 550368,104832,232960,182000 1 0015
+--- 550368,104832,232960,182000 1 0022
+--- 550368,451360,0,182000 0 0025
+--- 550368,451360,0,182000 0 0026
+--- 0,640640 2 0027
+<- 550368,435706,-204934,182000 0 0030
+-> 550368,435706,-204934,182000 0 0031
+--- 550368,640640,0,182000 2 0032
+--- 550368,829920,0,182000 2 0033
+--- 550368,640640,0,182000 2 0034
+--- 550368,640640,0,182000 2 0035
+--- 0,640640 2 0037
+--- 550368,640640,0,182000 2 0040
+Do 550368,728000,87360,182000 3 0044
+$ "
+aq 550368,640640,0,182000 2 0047
+** 550368,551096,-94640,182000 2 0052
+, 550368,130000,145600,182000 1 0054
+--- 550368,435706,-204934,182000 0 0055
+. 550368,130000,0,182000 0 0056
+f/ 550368,728000,87360,182000 3 0057
+0 550368,451360,0,182000 0 0060
+1 550368,451360,0,182000 0 0061
+2 550368,451360,0,182000 0 0062
+3 550368,451360,232960,182000 1 0063
+4 550368,451360,232960,182000 1 0064
+5 550368,451360,232960,182000 1 0065
+6 550368,640640,0,182000 2 0066
+7 550368,451360,232960,182000 1 0067
+8 550368,640640,0,182000 2 0070
+9 550368,451360,232960,182000 1 0071
+la 550368,728000,87360,182000 3 0074
+mi 550368,551096,-84448,182000 2 0075
+\- "
+ra 550368,728000,87360,182000 3 0076
+--- 550368,640640,0,182000 2 0115
+ci 550368,728000,232960,182000 3 0117
+--- 550368,640640,0,182000 2 0127
+--- 550368,728000,87360,182000 3 0133
+--- 550368,728000,87360,182000 3 0135
+ua 550368,640640,0,182000 2 0136
+da 550368,640640,0,182000 2 0137
+--- 550368,640640,0,182000 2 0140
+--- 550368,551096,-94640,182000 2 0142
+--- 550368,551096,-94640,182000 2 0143
+--- 550368,571115,18930,182000 3 0144
+--- 550368,640640,0,182000 2 0154
+--- 550368,551096,-94640,182000 2 0155
+--- 672672,640640 2 0156
+ti 550368,130000,0,182000 0 0176
+~ "
+--- 550368,435706,-204934,182000 0 0177
+--- 550368,640640,0,182000 2 0200
+--- 550368,640640,0,182000 2 0201
+--- 550368,640640,0,182000 2 0202
+--- 550368,640640,0,182000 2 0203
+dg 550368,640640,232960,182000 3 0204
+dd 550368,640640,232960,182000 3 0205
+--- 550368,728000,87360,182000 3 0206
+%O 550368,728000,87360,182000 3 0207
+bu 550368,534352,-106288,182000 2 0210
+--- 550368,640640,0,182000 2 0211
+--- 550368,728000,87360,182000 3 0212
+--- 550368,571115,116480,182000 3 0213
+Fn 550368,640640,232960,182000 3 0214
+--- 550368,728000,87360,182000 3 0215
+--- 550368,640640,0,182000 2 0216
+--- 550368,640640,0,182000 2 0217
+--- 550368,728000,87360,182000 3 0220
+--- 550368,640640,0,182000 2 0221
+--- 550368,640640,0,182000 2 0222
+--- 550368,640640,0,182000 2 0223
+--- 550368,640640,0,182000 2 0224
+--- 550368,407680,232960,182000 1 0225
+--- 550368,728000,0,182000 2 0226
+tm 550368,728000,0,182000 2 0227
+--- 550368,728000,87360,182000 3 0230
+--- 550368,640640,232960,182000 3 0231
+--- 550368,728000,87360,182000 3 0232
+--- 550368,640640,0,182000 2 0233
+--- 550368,728000,0,182000 2 0234
+--- 550368,640640,0,182000 2 0235
+--- 550368,534352,-106288,182000 2 0236
+--- 550368,728000,0,182000 2 0237
+--- 550368,728000,87360,182000 3 0240
+--- 550368,728000,87360,182000 3 0241
+ct 550368,571115,116480,182000 3 0242
+Po 550368,640640,0,182000 2 0243
+Cs 550368,580323,0,182000 2 0244
+Ye 550368,640640,0,182000 2 0245
+bb 550368,728000,87360,182000 3 0246
+sc 550368,640640,232960,182000 3 0247
+--- 550368,640640,0,182000 2 0250
+co 550368,728000,232960,182000 3 0251
+Of 550368,728000,0,182000 2 0252
+--- 550368,728000,232960,182000 3 0253
+no 550368,451360,0,182000 0 0254
+--- 550368,728000,232960,182000 3 0255
+rg 550368,728000,232960,182000 3 0256
+rn 550368,640640,0,182000 2 0257
+de 550368,640640,0,182000 2 0260
+t+- 550368,551096,-84448,182000 2 0261
+S2 550368,728000,0,182000 2 0262
+S3 550368,728000,0,182000 2 0263
+--- 550368,640640,0,182000 2 0264
+mc 550368,451360,232960,182000 1 0265
+ps 550368,640640,232960,182000 3 0266
+pc 550368,451360,0,182000 0 0267
+--- 550368,514453,0,182000 2 0270
+S1 550368,728000,0,182000 2 0271
+Om 550368,728000,0,182000 2 0272
+--- 550368,728000,14560,182000 3 0273
+14 550368,728000,232960,182000 3 0274
+12 550368,728000,232960,182000 3 0275
+34 550368,728000,232960,182000 3 0276
+Eu 550368,640640,0,182000 2 0277
+tmu 550368,551096,-84448,182000 2 0326
+tdi 550368,551096,-84448,182000 2 0366
diff --git a/contrib/groff/font/devdvi/CWTC b/contrib/groff/font/devdvi/CWTC
new file mode 100644
index 0000000..2c6d028
--- /dev/null
+++ b/contrib/groff/font/devdvi/CWTC
@@ -0,0 +1,138 @@
+name CWTC
+special
+internalname tctt1000
+spacewidth 550368
+checksum 1703447420
+designsize 10485760
+charset
+--- 550368,627768 2 0000
+--- 550368,627768 2 0001
+--- 550368,669760 2 0002
+--- 550368,669760 2 0003
+--- 550368,669760 2 0004
+--- 550368,627768 2 0005
+--- 550368,669760 2 0006
+--- 550368,669760 2 0007
+--- 550368,669760 2 0010
+--- 550368,669760 2 0011
+--- 550368,627768 2 0012
+--- 550368,0,203840 1 0013
+--- 550368,0,232960 1 0014
+--- 550368,104832,232960 1 0015
+--- 550368,104832,232960 1 0022
+--- 550368,451360 0 0025
+--- 550368,451360 0 0026
+--- 0,640640 2 0027
+<- 550368,435706,-204934 0 0030
+-> 550368,435706,-204934 0 0031
+--- 550368,640640 2 0032
+--- 550368,829920 2 0033
+--- 550368,640640 2 0034
+--- 550368,640640 2 0035
+--- 0,640640 2 0037
+--- 550368,640640 2 0040
+Do 550368,728000,87360 3 0044
+$ "
+aq 550368,640640 2 0047
+** 550368,551096,-94640 2 0052
+, 550368,130000,145600 1 0054
+--- 550368,435706,-204934 0 0055
+. 550368,130000 0 0056
+f/ 550368,728000,87360 3 0057
+0 550368,451360 0 0060
+1 550368,451360 0 0061
+2 550368,451360 0 0062
+3 550368,451360,232960 1 0063
+4 550368,451360,232960 1 0064
+5 550368,451360,232960 1 0065
+6 550368,640640 2 0066
+7 550368,451360,232960 1 0067
+8 550368,640640 2 0070
+9 550368,451360,232960 1 0071
+la 550368,728000,87360 3 0074
+mi 550368,551096,-84448 2 0075
+\- "
+ra 550368,728000,87360 3 0076
+--- 550368,640640 2 0115
+ci 550368,728000,232960 3 0117
+--- 550368,640640 2 0127
+--- 550368,728000,87360 3 0133
+--- 550368,728000,87360 3 0135
+ua 550368,640640 2 0136
+da 550368,640640 2 0137
+--- 550368,640640 2 0140
+--- 550368,551096,-94640 2 0142
+--- 550368,551096,-94640 2 0143
+--- 550368,571115,18930 3 0144
+--- 550368,640640 2 0154
+--- 550368,551096,-94640 2 0155
+--- 672672,640640 2 0156
+ti 550368,130000 0 0176
+~ "
+--- 550368,435706,-204934 0 0177
+--- 550368,640640 2 0200
+--- 550368,640640 2 0201
+--- 550368,640640 2 0202
+--- 550368,640640 2 0203
+dg 550368,640640,232960 3 0204
+dd 550368,640640,232960 3 0205
+--- 550368,728000,87360 3 0206
+%O 550368,728000,87360 3 0207
+bu 550368,534352,-106288 2 0210
+--- 550368,640640 2 0211
+--- 550368,728000,87360 3 0212
+--- 550368,571115,116480 3 0213
+Fn 550368,640640 2 0214
+--- 550368,728000,87360 3 0215
+--- 550368,640640 2 0216
+--- 550368,640640 2 0217
+--- 550368,728000,87360 3 0220
+--- 550368,640640 2 0221
+--- 550368,640640 2 0222
+--- 550368,640640 2 0223
+--- 550368,640640 2 0224
+--- 550368,407680,232960 1 0225
+--- 550368,728000 2 0226
+tm 550368,728000 2 0227
+--- 550368,728000,87360 3 0230
+--- 550368,640640,232960 3 0231
+--- 550368,728000,87360 3 0232
+--- 550368,640640 2 0233
+--- 550368,728000 2 0234
+--- 550368,640640 2 0235
+--- 550368,534352,-106288 2 0236
+--- 550368,728000 2 0237
+--- 550368,728000,87360 3 0240
+--- 550368,728000,87360 3 0241
+ct 550368,571115,116480 3 0242
+Po 550368,640640 2 0243
+Cs 550368,580323 2 0244
+Ye 550368,640640 2 0245
+bb 550368,728000,87360 3 0246
+sc 550368,640640,232960 3 0247
+--- 550368,640640 2 0250
+co 550368,728000,232960 3 0251
+Of 550368,728000 2 0252
+--- 550368,728000,232960 3 0253
+no 550368,451360 0 0254
+--- 550368,728000,232960 3 0255
+rg 550368,728000,232960 3 0256
+rn 550368,640640 2 0257
+de 550368,640640 2 0260
+t+- 550368,551096,-84448 2 0261
+S2 550368,728000 2 0262
+S3 550368,728000 2 0263
+--- 550368,640640 2 0264
+mc 550368,451360,232960 1 0265
+ps 550368,640640,232960 3 0266
+pc 550368,451360 0 0267
+--- 550368,514453 2 0270
+S1 550368,728000 2 0271
+Om 550368,728000 2 0272
+--- 550368,728000,14560 3 0273
+14 550368,728000,232960 3 0274
+12 550368,728000,232960 3 0275
+34 550368,728000,232960 3 0276
+Eu 550368,640640 2 0277
+tmu 550368,551096,-84448 2 0326
+tdi 550368,551096,-84448 2 0366
diff --git a/contrib/groff/font/devdvi/DESC.in b/contrib/groff/font/devdvi/DESC.in
index 54c1302b..b5df761 100644
--- a/contrib/groff/font/devdvi/DESC.in
+++ b/contrib/groff/font/devdvi/DESC.in
@@ -3,8 +3,9 @@ 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
+sizes 500-1000000 0
+styles R I B BI
+family T
+fonts 13 0 0 0 0 0 0 0 0 0 MI S EX CW
tcommand
postpro grodvi
diff --git a/contrib/groff/font/devdvi/HB b/contrib/groff/font/devdvi/HB
index c0cc6e2..bd91584 100644
--- a/contrib/groff/font/devdvi/HB
+++ b/contrib/groff/font/devdvi/HB
@@ -172,27 +172,19 @@ Fl 934986,728178 2 0017
.i 267971,480597 0 0020
.j 300011,480597,203890 1 0021
ga 576720,728178 2 0022
-char180 576720,728178 2 0023
-aa "
+aa 576720,728178 2 0023
ah 576720,666283 2 0024
ab 576720,728178 2 0025
-char175 576720,668757 2 0026
-a- "
+a- 576720,668757 2 0026
ao 768960,728178 2 0027
-char184 512640,0,178403 1 0030
-ac "
-char223 592739,728178 2 0031
-ss "
-char230 833040,480597 0 0032
-ae "
+ac 512640,0,178403 1 0030
+ss 592739,728178 2 0031
+ae 833040,480597 0 0032
oe 897120,480597 0 0033
-char248 576720,582542,101946 3 0034
-/o "
-char198 993240,728178 2 0035
-AE "
+/o 576720,582542,101946 3 0034
+AE 993240,728178 2 0035
OE 1121400,728178 2 0036
-char216 897120,779150,50973 3 0037
-/O "
+/O 897120,779150,50973 3 0037
--- 267971,480597 0 0040
! 384480,728178 2 0041
rq 585458,728178 2 0042
@@ -209,8 +201,7 @@ cq 320400,728178 2 0047
* 576720,786432 2 0052
+ 897120,646624,122336 3 0053
, 320400,136898,110683 1 0054
-char173 384480,480597 0 0055
-hy "
+hy 384480,480597 0 0055
- "
. 320400,136898 0 0056
sl 576720,786432,262144 3 0057
@@ -227,11 +218,9 @@ sl 576720,786432,262144 3 0057
9 576720,728178 2 0071
: 320400,480597 0 0072
; 320400,480597,110683 1 0073
-char161 384480,524288,203890 3 0074
-r! "
+r! 384480,524288,203890 3 0074
= 897120,425984,-98304 0 0075
-char191 544680,524288,203890 3 0076
-r? "
+r? 544680,524288,203890 3 0076
? 544680,728178 2 0077
at 768960,728178 2 0100
@ "
@@ -303,5 +292,4 @@ em 1153440,480597,0,32040 0 0174
a" 576720,728178 2 0175
~ 576720,728178 2 0176
a~ "
-char168 576720,728178 2 0177
-ad "
+ad 576720,728178 2 0177
diff --git a/contrib/groff/font/devdvi/HBEC b/contrib/groff/font/devdvi/HBEC
new file mode 100644
index 0000000..c0365dd
--- /dev/null
+++ b/contrib/groff/font/devdvi/HBEC
@@ -0,0 +1,1578 @@
+name HBEC
+internalname ecsx1000
+spacewidth 384384
+ligatures ff fi fl ffi ffl 0
+checksum -1149688141
+designsize 10485760
+kernpairs
+bq Bq 128128
+bq j 128128
+bq .j 128128
+bq g 64064
+bq y 64064
+bq :y 64064
+bq 'y 64064
+bq v -96096
+bq w -64064
+bq V -128128
+bq W -96096
+bq Y -96096
+bq :Y -96096
+bq 'Y -96096
+bq O -32032
+bq `O -32032
+bq 'O -32032
+bq ^O -32032
+bq ~O -32032
+bq :O -32032
+bq OE -32032
+bq /O -32032
+bq C -32032
+bq G -32032
+bq 'C -32032
+bq ,C -32032
+bq Q -32032
+lq oq 128128
+lq ` 128128
+lq lq 128128
+rq cq 128128
+rq ' 128128
+rq rq 128128
+Bq bq 128128
+Bq , 128128
+Bq Bq 128128
+Bq j 128128
+Bq .j 128128
+Bq g 64064
+Bq y 64064
+Bq :y 64064
+Bq 'y 64064
+Bq v -96096
+Bq w -64064
+Bq V -128128
+Bq W -96096
+Bq Y -96096
+Bq :Y -96096
+Bq 'Y -96096
+Bq O -32032
+Bq `O -32032
+Bq 'O -32032
+Bq ^O -32032
+Bq ~O -32032
+Bq :O -32032
+Bq OE -32032
+Bq /O -32032
+Bq C -32032
+Bq G -32032
+Bq 'C -32032
+Bq ,C -32032
+Bq Q -32032
+Fc . -96096
+Fc , -96096
+ff cq 80080
+ff ' 80080
+ff oq 80080
+ff ` 80080
+ff lq 80080
+ff rq 80080
+ff ? 80080
+ff ! 80080
+ff ) 80080
+ff rB 80080
+ff ] 80080
+cq rq 128128
+' rq 128128
+cq ? 128128
+' ? 128128
+cq ! 128128
+' ! 128128
+A y -32032
+A :y -32032
+A 'y -32032
+A v -32032
+A w -32032
+A c -32032
+A 'c -32032
+A ,c -32032
+A d -32032
+A Sd -32032
+A e -32032
+A `e -32032
+A 'e -32032
+A ^e -32032
+A :e -32032
+A o -32032
+A `o -32032
+A 'o -32032
+A ^o -32032
+A ~o -32032
+A :o -32032
+A oe -32032
+A /o -32032
+A q -32032
+A t -32032
+A C -32032
+A G -32032
+A 'C -32032
+A ,C -32032
+A Q -32032
+A O -32032
+A `O -32032
+A 'O -32032
+A ^O -32032
+A ~O -32032
+A :O -32032
+A OE -32032
+A /O -32032
+A U -32032
+A `U -32032
+A 'U -32032
+A ^U -32032
+A :U -32032
+A T -96096
+A Y -96096
+A :Y -96096
+A 'Y -96096
+A V -128128
+A W -128128
+D X -32032
+D W -32032
+D A -32032
+D `A -32032
+D 'A -32032
+D ^A -32032
+D ~A -32032
+D :A -32032
+D oA -32032
+D AE -32032
+D V -32032
+D Y -32032
+D :Y -32032
+D 'Y -32032
+F o -32032
+F a -32032
+F e -32032
+F y -32032
+F u -32032
+F r -32032
+F v -32032
+F s -32032
+F c -32032
+F d -32032
+F g -32032
+F m -32032
+F n -32032
+F p -32032
+F w -32032
+F z -32032
+F ae -32032
+F /o -32032
+F A -96096
+F `A -96096
+F 'A -96096
+F ^A -96096
+F ~A -96096
+F :A -96096
+F oA -96096
+F AE -96096
+F O -32032
+F `O -32032
+F 'O -32032
+F ^O -32032
+F ~O -32032
+F :O -32032
+F OE -32032
+F /O -32032
+F C -32032
+F G -32032
+F 'C -32032
+F ,C -32032
+F Q -32032
+I I 32032
+K v -32032
+K o -32032
+K `o -32032
+K 'o -32032
+K ^o -32032
+K ~o -32032
+K :o -32032
+K oe -32032
+K /o -32032
+K C -32032
+K G -32032
+K 'C -32032
+K ,C -32032
+K Q -32032
+L T -96096
+L Y -96096
+L :Y -96096
+L 'Y -96096
+L V -128128
+L W -128128
+O X -32032
+O W -32032
+O A -32032
+O `A -32032
+O 'A -32032
+O ^A -32032
+O ~A -32032
+O :A -32032
+O oA -32032
+O AE -32032
+O V -32032
+O Y -32032
+O :Y -32032
+O 'Y -32032
+P A -96096
+P `A -96096
+P 'A -96096
+P ^A -96096
+P ~A -96096
+P :A -96096
+P oA -96096
+P AE -96096
+P o -32032
+P `o -32032
+P 'o -32032
+P ^o -32032
+P ~o -32032
+P :o -32032
+P oe -32032
+P /o -32032
+P e -32032
+P `e -32032
+P 'e -32032
+P ^e -32032
+P :e -32032
+P a -32032
+P `a -32032
+P 'a -32032
+P ^a -32032
+P ^a -32032
+P ~a -32032
+P :a -32032
+P oa -32032
+P ae -32032
+P . -96096
+P , -96096
+T y -96096
+T e -96096
+T o -96096
+T r -96096
+T a -96096
+T u -96096
+T n -96096
+T .i -96096
+T c -96096
+T d -96096
+T g -96096
+T p -96096
+T s -96096
+T v -96096
+T w -96096
+T x -96096
+T z -96096
+T A -96096
+T `A -96096
+T 'A -96096
+T ^A -96096
+T ~A -96096
+T :A -96096
+T oA -96096
+T AE -96096
+V o -32032
+V a -32032
+V e -32032
+V y -32032
+V u -32032
+V r -32032
+V v -32032
+V s -32032
+V c -32032
+V d -32032
+V g -32032
+V m -32032
+V n -32032
+V p -32032
+V w -32032
+V z -32032
+V ae -32032
+V /o -32032
+V A -96096
+V `A -96096
+V 'A -96096
+V ^A -96096
+V ~A -96096
+V :A -96096
+V oA -96096
+V AE -96096
+V O -32032
+V `O -32032
+V 'O -32032
+V ^O -32032
+V ~O -32032
+V :O -32032
+V OE -32032
+V /O -32032
+V C -32032
+V G -32032
+V 'C -32032
+V ,C -32032
+V Q -32032
+W o -32032
+W a -32032
+W e -32032
+W y -32032
+W u -32032
+W r -32032
+W v -32032
+W s -32032
+W c -32032
+W d -32032
+W g -32032
+W m -32032
+W n -32032
+W p -32032
+W w -32032
+W z -32032
+W ae -32032
+W /o -32032
+W A -96096
+W `A -96096
+W 'A -96096
+W ^A -96096
+W ~A -96096
+W :A -96096
+W oA -96096
+W AE -96096
+W O -32032
+W `O -32032
+W 'O -32032
+W ^O -32032
+W ~O -32032
+W :O -32032
+W OE -32032
+W /O -32032
+W C -32032
+W G -32032
+W 'C -32032
+W ,C -32032
+W Q -32032
+X O -32032
+X `O -32032
+X 'O -32032
+X ^O -32032
+X ~O -32032
+X :O -32032
+X OE -32032
+X /O -32032
+X C -32032
+X G -32032
+X 'C -32032
+X ,C -32032
+X Q -32032
+Y e -96096
+Y o -96096
+Y r -96096
+Y a -96096
+Y u -96096
+Y n -96096
+Y .i -96096
+Y c -96096
+Y d -96096
+Y g -96096
+Y p -96096
+Y s -96096
+Y v -96096
+Y w -96096
+Y x -96096
+Y z -96096
+Y A -96096
+Y `A -96096
+Y 'A -96096
+Y ^A -96096
+Y ~A -96096
+Y :A -96096
+Y oA -96096
+Y AE -96096
+oq lq 128128
+` lq 128128
+oq ? 128128
+` ? 128128
+oq ! 128128
+` ! 128128
+a r -32032
+a y -32032
+a :y -32032
+a 'y -32032
+a w -32032
+b e 32032
+b `e 32032
+b 'e 32032
+b ^e 32032
+b :e 32032
+b o 32032
+b `o 32032
+b 'o 32032
+b ^o 32032
+b ~o 32032
+b :o 32032
+b oe 32032
+b /o 32032
+b x -32032
+b d 32032
+b c 32032
+b 'c 32032
+b ,c 32032
+b q 32032
+b r -32032
+b y -32032
+b :y -32032
+b 'y -32032
+b w -32032
+e V -96096
+f cq 80080
+f ' 80080
+f oq 80080
+f ` 80080
+f lq 80080
+f rq 80080
+f ? 80080
+f ! 80080
+f ) 80080
+f rB 80080
+f ] 80080
+g j 32032
+k W -96096
+k V -96096
+k e -32032
+k `e -32032
+k 'e -32032
+k ^e -32032
+k :e -32032
+k a -32032
+k `a -32032
+k 'a -32032
+k ^a -32032
+k ^a -32032
+k ~a -32032
+k :a -32032
+k oa -32032
+k ae -32032
+k o -32032
+k `o -32032
+k 'o -32032
+k ^o -32032
+k ~o -32032
+k :o -32032
+k oe -32032
+k /o -32032
+k c -32032
+k 'c -32032
+k ,c -32032
+o e 32032
+o `e 32032
+o 'e 32032
+o ^e 32032
+o :e 32032
+o o 32032
+o `o 32032
+o 'o 32032
+o ^o 32032
+o ~o 32032
+o :o 32032
+o oe 32032
+o /o 32032
+o x -32032
+o d 32032
+o c 32032
+o 'c 32032
+o ,c 32032
+o q 32032
+o r -32032
+o y -32032
+o :y -32032
+o 'y -32032
+o w -32032
+p e 32032
+p `e 32032
+p 'e 32032
+p ^e 32032
+p :e 32032
+p o 32032
+p `o 32032
+p 'o 32032
+p ^o 32032
+p ~o 32032
+p :o 32032
+p oe 32032
+p /o 32032
+p x -32032
+p d 32032
+p c 32032
+p 'c 32032
+p ,c 32032
+p q 32032
+p r -32032
+p y -32032
+p :y -32032
+p 'y -32032
+p w -32032
+t y -32032
+t :y -32032
+t 'y -32032
+t w -32032
+u w -32032
+w e -32032
+w `e -32032
+w 'e -32032
+w ^e -32032
+w :e -32032
+w a -32032
+w `a -32032
+w 'a -32032
+w ^a -32032
+w ^a -32032
+w ~a -32032
+w :a -32032
+w oa -32032
+w ae -32032
+w o -32032
+w `o -32032
+w 'o -32032
+w ^o -32032
+w ~o -32032
+w :o -32032
+w oe -32032
+w /o -32032
+w c -32032
+w 'c -32032
+w ,c -32032
+y o -32032
+y `o -32032
+y 'o -32032
+y ^o -32032
+y ~o -32032
+y :o -32032
+y oe -32032
+y /o -32032
+y e -32032
+y `e -32032
+y 'e -32032
+y ^e -32032
+y :e -32032
+y a -32032
+y `a -32032
+y 'a -32032
+y ^a -32032
+y ^a -32032
+y ~a -32032
+y :a -32032
+y oa -32032
+y ae -32032
+y . -96096
+y , -96096
+'C v -32032
+'C w -32032
+'C c -32032
+'C 'c -32032
+'C ,c -32032
+'C d -32032
+'C Sd -32032
+'C e -32032
+'C `e -32032
+'C 'e -32032
+'C ^e -32032
+'C :e -32032
+'C o -32032
+'C `o -32032
+'C 'o -32032
+'C ^o -32032
+'C ~o -32032
+'C :o -32032
+'C oe -32032
+'C /o -32032
+'C q -32032
+'C t -32032
+'C C -32032
+'C G -32032
+'C 'C -32032
+'C ,C -32032
+'C Q -32032
+'C O -32032
+'C `O -32032
+'C 'O -32032
+'C ^O -32032
+'C ~O -32032
+'C :O -32032
+'C OE -32032
+'C /O -32032
+'C U -32032
+'C `U -32032
+'C 'U -32032
+'C ^U -32032
+'C :U -32032
+'C T -96096
+'C Y -96096
+'C :Y -96096
+'C 'Y -96096
+'C V -128128
+'C W -128128
+/L T -96096
+/L Y -96096
+/L :Y -96096
+/L 'Y -96096
+/L V -128128
+/L W -128128
+:Y e -96096
+:Y o -96096
+:Y r -96096
+:Y a -96096
+:Y u -96096
+:Y n -96096
+:Y .i -96096
+:Y c -96096
+:Y d -96096
+:Y g -96096
+:Y p -96096
+:Y s -96096
+:Y v -96096
+:Y w -96096
+:Y x -96096
+:Y z -96096
+:Y A -96096
+:Y `A -96096
+:Y 'A -96096
+:Y ^A -96096
+:Y ~A -96096
+:Y :A -96096
+:Y oA -96096
+:Y AE -96096
+/l cq 32032
+/l ' 32032
+/l a -32032
+/l c -32032
+/l 'c -32032
+/l d -32032
+/l e -32032
+/l g -32032
+/l o -32032
+/l 'o -32032
+/l s -32032
+:y o -32032
+:y `o -32032
+:y 'o -32032
+:y ^o -32032
+:y ~o -32032
+:y :o -32032
+:y oe -32032
+:y /o -32032
+:y e -32032
+:y `e -32032
+:y 'e -32032
+:y ^e -32032
+:y :e -32032
+:y a -32032
+:y `a -32032
+:y 'a -32032
+:y ^a -32032
+:y ^a -32032
+:y ~a -32032
+:y :a -32032
+:y oa -32032
+:y ae -32032
+:y . -96096
+:y , -96096
+`A y -32032
+`A :y -32032
+`A 'y -32032
+`A v -32032
+`A w -32032
+`A c -32032
+`A 'c -32032
+`A ,c -32032
+`A d -32032
+`A Sd -32032
+`A e -32032
+`A `e -32032
+`A 'e -32032
+`A ^e -32032
+`A :e -32032
+`A o -32032
+`A `o -32032
+`A 'o -32032
+`A ^o -32032
+`A ~o -32032
+`A :o -32032
+`A oe -32032
+`A /o -32032
+`A q -32032
+`A t -32032
+`A C -32032
+`A G -32032
+`A 'C -32032
+`A ,C -32032
+`A Q -32032
+`A O -32032
+`A `O -32032
+`A 'O -32032
+`A ^O -32032
+`A ~O -32032
+`A :O -32032
+`A OE -32032
+`A /O -32032
+`A U -32032
+`A `U -32032
+`A 'U -32032
+`A ^U -32032
+`A :U -32032
+`A T -96096
+`A Y -96096
+`A :Y -96096
+`A 'Y -96096
+`A V -128128
+`A W -128128
+'A y -32032
+'A :y -32032
+'A 'y -32032
+'A v -32032
+'A w -32032
+'A c -32032
+'A 'c -32032
+'A ,c -32032
+'A d -32032
+'A Sd -32032
+'A e -32032
+'A `e -32032
+'A 'e -32032
+'A ^e -32032
+'A :e -32032
+'A o -32032
+'A `o -32032
+'A 'o -32032
+'A ^o -32032
+'A ~o -32032
+'A :o -32032
+'A oe -32032
+'A /o -32032
+'A q -32032
+'A t -32032
+'A C -32032
+'A G -32032
+'A 'C -32032
+'A ,C -32032
+'A Q -32032
+'A O -32032
+'A `O -32032
+'A 'O -32032
+'A ^O -32032
+'A ~O -32032
+'A :O -32032
+'A OE -32032
+'A /O -32032
+'A U -32032
+'A `U -32032
+'A 'U -32032
+'A ^U -32032
+'A :U -32032
+'A T -96096
+'A Y -96096
+'A :Y -96096
+'A 'Y -96096
+'A V -128128
+'A W -128128
+^A y -32032
+^A :y -32032
+^A 'y -32032
+^A v -32032
+^A w -32032
+^A c -32032
+^A 'c -32032
+^A ,c -32032
+^A d -32032
+^A Sd -32032
+^A e -32032
+^A `e -32032
+^A 'e -32032
+^A ^e -32032
+^A :e -32032
+^A o -32032
+^A `o -32032
+^A 'o -32032
+^A ^o -32032
+^A ~o -32032
+^A :o -32032
+^A oe -32032
+^A /o -32032
+^A q -32032
+^A t -32032
+^A C -32032
+^A G -32032
+^A 'C -32032
+^A ,C -32032
+^A Q -32032
+^A O -32032
+^A `O -32032
+^A 'O -32032
+^A ^O -32032
+^A ~O -32032
+^A :O -32032
+^A OE -32032
+^A /O -32032
+^A U -32032
+^A `U -32032
+^A 'U -32032
+^A ^U -32032
+^A :U -32032
+^A T -96096
+^A Y -96096
+^A :Y -96096
+^A 'Y -96096
+^A V -128128
+^A W -128128
+~A y -32032
+~A :y -32032
+~A 'y -32032
+~A v -32032
+~A w -32032
+~A c -32032
+~A 'c -32032
+~A ,c -32032
+~A d -32032
+~A Sd -32032
+~A e -32032
+~A `e -32032
+~A 'e -32032
+~A ^e -32032
+~A :e -32032
+~A o -32032
+~A `o -32032
+~A 'o -32032
+~A ^o -32032
+~A ~o -32032
+~A :o -32032
+~A oe -32032
+~A /o -32032
+~A q -32032
+~A t -32032
+~A C -32032
+~A G -32032
+~A 'C -32032
+~A ,C -32032
+~A Q -32032
+~A O -32032
+~A `O -32032
+~A 'O -32032
+~A ^O -32032
+~A ~O -32032
+~A :O -32032
+~A OE -32032
+~A /O -32032
+~A U -32032
+~A `U -32032
+~A 'U -32032
+~A ^U -32032
+~A :U -32032
+~A T -96096
+~A Y -96096
+~A :Y -96096
+~A 'Y -96096
+~A V -128128
+~A W -128128
+:A y -32032
+:A :y -32032
+:A 'y -32032
+:A v -32032
+:A w -32032
+:A c -32032
+:A 'c -32032
+:A ,c -32032
+:A d -32032
+:A Sd -32032
+:A e -32032
+:A `e -32032
+:A 'e -32032
+:A ^e -32032
+:A :e -32032
+:A o -32032
+:A `o -32032
+:A 'o -32032
+:A ^o -32032
+:A ~o -32032
+:A :o -32032
+:A oe -32032
+:A /o -32032
+:A q -32032
+:A t -32032
+:A C -32032
+:A G -32032
+:A 'C -32032
+:A ,C -32032
+:A Q -32032
+:A O -32032
+:A `O -32032
+:A 'O -32032
+:A ^O -32032
+:A ~O -32032
+:A :O -32032
+:A OE -32032
+:A /O -32032
+:A U -32032
+:A `U -32032
+:A 'U -32032
+:A ^U -32032
+:A :U -32032
+:A T -96096
+:A Y -96096
+:A :Y -96096
+:A 'Y -96096
+:A V -128128
+:A W -128128
+oA y -32032
+oA :y -32032
+oA 'y -32032
+oA v -32032
+oA w -32032
+oA c -32032
+oA 'c -32032
+oA ,c -32032
+oA d -32032
+oA Sd -32032
+oA e -32032
+oA `e -32032
+oA 'e -32032
+oA ^e -32032
+oA :e -32032
+oA o -32032
+oA `o -32032
+oA 'o -32032
+oA ^o -32032
+oA ~o -32032
+oA :o -32032
+oA oe -32032
+oA /o -32032
+oA q -32032
+oA t -32032
+oA C -32032
+oA G -32032
+oA 'C -32032
+oA ,C -32032
+oA Q -32032
+oA O -32032
+oA `O -32032
+oA 'O -32032
+oA ^O -32032
+oA ~O -32032
+oA :O -32032
+oA OE -32032
+oA /O -32032
+oA U -32032
+oA `U -32032
+oA 'U -32032
+oA ^U -32032
+oA :U -32032
+oA T -96096
+oA Y -96096
+oA :Y -96096
+oA 'Y -96096
+oA V -128128
+oA W -128128
+-D X -32032
+-D W -32032
+-D A -32032
+-D `A -32032
+-D 'A -32032
+-D ^A -32032
+-D ~A -32032
+-D :A -32032
+-D oA -32032
+-D AE -32032
+-D V -32032
+-D Y -32032
+-D :Y -32032
+-D 'Y -32032
+`O X -32032
+`O W -32032
+`O A -32032
+`O `A -32032
+`O 'A -32032
+`O ^A -32032
+`O ~A -32032
+`O :A -32032
+`O oA -32032
+`O AE -32032
+`O V -32032
+`O Y -32032
+`O :Y -32032
+`O 'Y -32032
+'O X -32032
+'O W -32032
+'O A -32032
+'O `A -32032
+'O 'A -32032
+'O ^A -32032
+'O ~A -32032
+'O :A -32032
+'O oA -32032
+'O AE -32032
+'O V -32032
+'O Y -32032
+'O :Y -32032
+'O 'Y -32032
+^O X -32032
+^O W -32032
+^O A -32032
+^O `A -32032
+^O 'A -32032
+^O ^A -32032
+^O ~A -32032
+^O :A -32032
+^O oA -32032
+^O AE -32032
+^O V -32032
+^O Y -32032
+^O :Y -32032
+^O 'Y -32032
+~O X -32032
+~O W -32032
+~O A -32032
+~O `A -32032
+~O 'A -32032
+~O ^A -32032
+~O ~A -32032
+~O :A -32032
+~O oA -32032
+~O AE -32032
+~O V -32032
+~O Y -32032
+~O :Y -32032
+~O 'Y -32032
+:O X -32032
+:O W -32032
+:O A -32032
+:O `A -32032
+:O 'A -32032
+:O ^A -32032
+:O ~A -32032
+:O :A -32032
+:O oA -32032
+:O AE -32032
+:O V -32032
+:O Y -32032
+:O :Y -32032
+:O 'Y -32032
+/O X -32032
+/O W -32032
+/O A -32032
+/O `A -32032
+/O 'A -32032
+/O ^A -32032
+/O ~A -32032
+/O :A -32032
+/O oA -32032
+/O AE -32032
+/O V -32032
+/O Y -32032
+/O :Y -32032
+/O 'Y -32032
+'Y e -96096
+'Y o -96096
+'Y r -96096
+'Y a -96096
+'Y u -96096
+'Y n -96096
+'Y .i -96096
+'Y c -96096
+'Y d -96096
+'Y g -96096
+'Y p -96096
+'Y s -96096
+'Y v -96096
+'Y w -96096
+'Y x -96096
+'Y z -96096
+'Y A -96096
+'Y `A -96096
+'Y 'A -96096
+'Y ^A -96096
+'Y ~A -96096
+'Y :A -96096
+'Y oA -96096
+'Y AE -96096
+`a r -32032
+`a y -32032
+`a :y -32032
+`a 'y -32032
+`a w -32032
+'a r -32032
+'a y -32032
+'a :y -32032
+'a 'y -32032
+'a w -32032
+^a r -32032
+^a y -32032
+^a :y -32032
+^a 'y -32032
+^a w -32032
+~a r -32032
+~a y -32032
+~a :y -32032
+~a 'y -32032
+~a w -32032
+:a r -32032
+:a y -32032
+:a :y -32032
+:a 'y -32032
+:a w -32032
+oa r -32032
+oa y -32032
+oa :y -32032
+oa 'y -32032
+oa w -32032
+`o e 32032
+`o `e 32032
+`o 'e 32032
+`o ^e 32032
+`o :e 32032
+`o o 32032
+`o `o 32032
+`o 'o 32032
+`o ^o 32032
+`o ~o 32032
+`o :o 32032
+`o oe 32032
+`o /o 32032
+`o x -32032
+`o d 32032
+`o c 32032
+`o 'c 32032
+`o ,c 32032
+`o q 32032
+`o r -32032
+`o y -32032
+`o :y -32032
+`o 'y -32032
+`o w -32032
+'o e 32032
+'o `e 32032
+'o 'e 32032
+'o ^e 32032
+'o :e 32032
+'o o 32032
+'o `o 32032
+'o 'o 32032
+'o ^o 32032
+'o ~o 32032
+'o :o 32032
+'o oe 32032
+'o /o 32032
+'o x -32032
+'o d 32032
+'o c 32032
+'o 'c 32032
+'o ,c 32032
+'o q 32032
+'o r -32032
+'o y -32032
+'o :y -32032
+'o 'y -32032
+'o w -32032
+^o e 32032
+^o `e 32032
+^o 'e 32032
+^o ^e 32032
+^o :e 32032
+^o o 32032
+^o `o 32032
+^o 'o 32032
+^o ^o 32032
+^o ~o 32032
+^o :o 32032
+^o oe 32032
+^o /o 32032
+^o x -32032
+^o d 32032
+^o c 32032
+^o 'c 32032
+^o ,c 32032
+^o q 32032
+^o r -32032
+^o y -32032
+^o :y -32032
+^o 'y -32032
+^o w -32032
+~o e 32032
+~o `e 32032
+~o 'e 32032
+~o ^e 32032
+~o :e 32032
+~o o 32032
+~o `o 32032
+~o 'o 32032
+~o ^o 32032
+~o ~o 32032
+~o :o 32032
+~o oe 32032
+~o /o 32032
+~o x -32032
+~o d 32032
+~o c 32032
+~o 'c 32032
+~o ,c 32032
+~o q 32032
+~o r -32032
+~o y -32032
+~o :y -32032
+~o 'y -32032
+~o w -32032
+:o e 32032
+:o `e 32032
+:o 'e 32032
+:o ^e 32032
+:o :e 32032
+:o o 32032
+:o `o 32032
+:o 'o 32032
+:o ^o 32032
+:o ~o 32032
+:o :o 32032
+:o oe 32032
+:o /o 32032
+:o x -32032
+:o d 32032
+:o c 32032
+:o 'c 32032
+:o ,c 32032
+:o q 32032
+:o r -32032
+:o y -32032
+:o :y -32032
+:o 'y -32032
+:o w -32032
+/o e 32032
+/o `e 32032
+/o 'e 32032
+/o ^e 32032
+/o :e 32032
+/o o 32032
+/o `o 32032
+/o 'o 32032
+/o ^o 32032
+/o ~o 32032
+/o :o 32032
+/o oe 32032
+/o /o 32032
+/o x -32032
+/o d 32032
+/o c 32032
+/o 'c 32032
+/o ,c 32032
+/o q 32032
+/o r -32032
+/o y -32032
+/o :y -32032
+/o 'y -32032
+/o w -32032
+`u w -32032
+'u w -32032
+^u w -32032
+:u w -32032
+'y o -32032
+'y `o -32032
+'y 'o -32032
+'y ^o -32032
+'y ~o -32032
+'y :o -32032
+'y oe -32032
+'y /o -32032
+'y e -32032
+'y `e -32032
+'y 'e -32032
+'y ^e -32032
+'y :e -32032
+'y a -32032
+'y `a -32032
+'y 'a -32032
+'y ^a -32032
+'y ^a -32032
+'y ~a -32032
+'y :a -32032
+'y oa -32032
+'y ae -32032
+'y . -96096
+'y , -96096
+charset
+ga 576576,698880 2 0000
+aa 576576,698880 2 0001
+a^ 576576,698880 2 0002
+a~ 576576,698880 2 0003
+ad 576576,728000 2 0004
+a" 576576,698880,0,14555 2 0005
+ao 768768,698880 2 0006
+ah 576576,698880 2 0007
+ab 576576,698880 2 0010
+a- 576576,728000 2 0011
+a. 320320,755976 2 0012
+ac 512512,0,178360 1 0013
+ho 320320,0,203840 1 0014
+bq 320320,136864,110656 1 0015
+fo 512512,524160 2 0016
+fc 512512,524160 2 0017
+lq 393120,755976 2 0020
+rq 393120,755976 2 0021
+Bq 393120,136864,110656 1 0022
+Fo 768768,524160 2 0023
+Fc 768768,524160 2 0024
+en 576576,480480,0,32032 0 0025
+em 1153152,480480,0,32032 0 0026
+--- 0,480480 0 0027
+--- 512512,782600,29120 3 0030
+.i 267904,480480 0 0031
+.j 299936,480480,203840 1 0032
+ff 672672,755976,0,80080 2 0033
+fi 614432,755976 2 0034
+fl 614432,755976 2 0035
+Fi 934752,755976 2 0036
+Fl 934752,755976 2 0037
+--- 576576,480480,101920 1 0040
+! 384384,755976 2 0041
+dq 576576,755976 2 0042
+" "
+sh 960960,755976,232960 3 0043
+# "
+Do 576576,782600,29120 3 0044
+$ "
+% 1078840,782600,29120 3 0045
+& 870688,755976 2 0046
+cq 320320,755976 2 0047
+' "
+( 448448,782600,262080 3 0050
+) 448448,782600,262080 3 0051
+* 576576,782600 2 0052
+pl 896896,646464,122304 3 0053
++ "
+, 320320,136864,110656 1 0054
+- 384384,480480 0 0055
+. 320320,136864 0 0056
+sl 576576,782600,262080 3 0057
+/ "
+0 576576,728000 2 0060
+1 576576,728000 2 0061
+2 576576,728000 2 0062
+3 576576,728000 2 0063
+4 576576,728000 2 0064
+5 576576,728000 2 0065
+6 576576,728000 2 0066
+7 576576,728000 2 0067
+8 576576,728000 2 0070
+9 576576,728000 2 0071
+: 320320,480480 0 0072
+; 320320,480480,110656 1 0073
+< 896896,636091,111931 3 0074
+eq 896896,425880,-98280 0 0075
+= "
+> 896896,636091,111931 3 0076
+? 544544,755976 2 0077
+at 768768,755976 2 0100
+@ "
+A 768768,728000 2 0101
+B 768768,728000 2 0102
+C 736736,728000,0,0,-32032 2 0103
+D 832832,728000,0,0,0,-32032 2 0104
+E 672672,728000 2 0105
+F 640640,728000,0,0,0,-160160 2 0106
+G 768768,728000,0,0,-32032 2 0107
+H 832832,728000 2 0110
+I 340704,728000 2 0111
+J 544544,728000,0,0,0,-32032 2 0112
+K 800800,728000 2 0113
+L 608608,728000,0,0,0,64064 2 0114
+M 1025024,728000 2 0115
+N 832832,728000 2 0116
+O 832832,728000,0,0,-32032,-32032 2 0117
+P 736736,728000,0,0,0,-160160 2 0120
+Q 832832,728000,110656,0,-32032 3 0121
+R 736736,728000 2 0122
+S 640640,728000 2 0123
+T 768768,728000,0,0,0,-160160 2 0124
+U 800800,728000,0,0,32032 2 0125
+V 768768,728000,0,16016,48048,-240240 2 0126
+W 1089088,728000,0,16016,48048,-144144 2 0127
+X 768768,728000 2 0130
+Y 768768,728000,0,28829,32032,-227427 2 0131
+Z 704704,728000 2 0132
+lB 359632,782600,262080 3 0133
+[ "
+rs 576576,782600,262080 3 0134
+\ "
+rB 359632,782600,262080 3 0135
+] "
+ha 704704,755976 2 0136
+^ "
+_ 896896,0,352171 1 0137
+oq 320320,755976 2 0140
+` "
+a 550368,480480 0 0141
+b 588224,755976 2 0142
+c 512512,480480 0 0143
+d 588224,755976 2 0144
+e 535808,480480 0 0145
+f 352352,755976,0,80080 2 0146
+g 576576,480480,203840,16016 1 0147
+h 588224,755976 2 0150
+i 267904,755976 2 0151
+j 299936,755976,203840 3 0152
+k 556192,755976 2 0153
+l 267904,755976 2 0154
+m 908544,480480 0 0155
+n 588224,480480 0 0156
+o 576576,480480 0 0157
+p 588224,480480,203840 1 0160
+q 588224,480480,203840 1 0161
+r 390208,480480,0,16016 0 0162
+s 442042,480480 0 0163
+t 423696,617763 2 0164
+u 588224,480480 0 0165
+v 524160,480480,0,16016 0 0166
+w 780416,480480,0,16016 0 0167
+x 524160,480480 0 0170
+y 524160,480480,203840,16016 1 0171
+z 499408,480480 0 0172
+lC 576576,782600,262080 3 0173
+{ "
+ba 320320,782600,262080 3 0174
+bv "
+or "
+| "
+rC 576576,782600,262080 3 0175
+} "
+~ 704704,755976 2 0176
+hy 192192,480480 0 0177
+--- 768768,946400 2 0200
+--- 768768,728000,203840 3 0201
+'C 736736,905917 2 0202
+--- 736736,946400,0,0,-32032 2 0203
+--- 832832,946400,0,0,0,-32032 2 0204
+--- 672672,946400 2 0205
+--- 672672,728000,203840 3 0206
+--- 768768,946400,0,0,-32032 2 0207
+--- 608608,905917,0,0,0,64064 2 0210
+--- 608608,946400,0,0,0,64064 2 0211
+/L 704704,728000 2 0212
+--- 832832,905917 2 0213
+--- 832832,946400 2 0214
+--- 864864,728000,0,0,0,-32032 2 0215
+--- 832832,905917,0,0,-32032,-32032 2 0216
+--- 736736,905917 2 0217
+--- 736736,946400 2 0220
+--- 640640,905917 2 0221
+vS 640640,946400 2 0222
+--- 640640,728000,178360 3 0223
+--- 768768,946400,0,0,0,-160160 2 0224
+--- 768768,728000,178360,0,0,-160160 3 0225
+--- 800800,905917,0,0,32032 2 0226
+--- 800800,946400,0,0,32032 2 0227
+:Y 768768,946400,0,28829,32032,-227427 2 0230
+--- 704704,905917 2 0231
+vZ 704704,946400 2 0232
+--- 704704,905917 2 0233
+IJ 853216,728000,0,0,0,-32032 2 0234
+--- 340704,905917 2 0235
+--- 588224,755976 2 0236
+sc 559104,755976,203840 3 0237
+--- 550368,698880 2 0240
+--- 550368,480480,203840 1 0241
+'c 512512,698880 2 0242
+--- 512512,698880 2 0243
+--- 767312,755976 2 0244
+--- 535808,698880 2 0245
+--- 535808,480480,203840 1 0246
+--- 576576,698880,203840,16016 3 0247
+--- 267904,905917,0,123075 2 0250
+--- 446992,755976 2 0251
+/l 399818,755976,0,29120 2 0252
+--- 588224,698880 2 0253
+--- 588224,698880 2 0254
+--- 588224,480480,203840 1 0255
+--- 576576,698880,0,14555 2 0256
+--- 390208,698880,0,16016 2 0257
+--- 390208,698880,0,16016 2 0260
+--- 442042,698880 2 0261
+vs 442042,698880 2 0262
+--- 442042,480480,178360 1 0263
+--- 423696,755976 2 0264
+--- 423696,617763,178360 3 0265
+--- 588224,698880,0,8730 2 0266
+--- 588224,698880 2 0267
+:y 524160,728000,203840,16016 3 0270
+--- 499408,698880 2 0271
+vz 499408,698880 2 0272
+--- 499408,755976 2 0273
+ij 620256,755976,203840 3 0274
+r! 384384,553280,203840 3 0275
+r? 544544,553280,203840 3 0276
+Po 736736,755976 2 0277
+`A 768768,905917 2 0300
+'A 768768,905917 2 0301
+^A 768768,946400 2 0302
+~A 768768,946400 2 0303
+:A 768768,946400 2 0304
+oA 768768,905917 2 0305
+AE 992992,728000 2 0306
+,C 736736,728000,178360,0,-32032 3 0307
+`E 672672,905917 2 0310
+'E 672672,905917 2 0311
+^E 672672,946400 2 0312
+:E 672672,946400 2 0313
+`I 340704,905917 2 0314
+'I 340704,905917,0,85210,0,42605 2 0315
+^I 340704,946400 2 0316
+:I 340704,946400 2 0317
+-D 832832,728000,0,0,0,-32032 2 0320
+~N 832832,946400 2 0321
+`O 832832,905917,0,0,-32032,-32032 2 0322
+'O 832832,905917 2 0323
+^O 832832,946400,0,0,-32032,-32032 2 0324
+~O 832832,946400,0,0,-32032,-32032 2 0325
+:O 832832,946400,0,0,-32032,-32032 2 0326
+OE 1121120,728000 2 0327
+/O 896896,782600,50960 3 0330
+`U 800800,905917,0,0,32032 2 0331
+'U 800800,905917 2 0332
+^U 800800,946400,0,0,32032 2 0333
+:U 800800,946400,0,0,32032 2 0334
+'Y 768768,905917,0,28829,32032,-227427 2 0335
+TP 672672,728000 2 0336
+--- 1281280,728000 2 0337
+`a 550368,698880 2 0340
+'a 550368,698880 2 0341
+^a 550368,698880 2 0342
+~a 550368,698880 2 0343
+:a 550368,728000 2 0344
+oa 550368,698880 2 0345
+ae 832832,480480 0 0346
+,c 512512,480480,178360 1 0347
+`e 535808,698880 2 0350
+'e 535808,698880 2 0351
+^e 535808,698880 2 0352
+:e 535808,728000 2 0353
+`i 267904,698880 2 0354
+'i 267904,698880,0,43683 2 0355
+^i 267904,698880 2 0356
+:i 331968,728000 2 0357
+Sd 576576,755976 2 0360
+~n 588224,698880 2 0361
+`o 576576,698880 2 0362
+'o 576576,698880 2 0363
+^o 576576,698880 2 0364
+~o 576576,698880 2 0365
+:o 576576,728000 2 0366
+oe 896896,480480 0 0367
+/o 576576,582400,101920 3 0370
+`u 588224,698880 2 0371
+'u 588224,698880 2 0372
+^u 588224,698880 2 0373
+:u 588224,728000 2 0374
+'y 524160,698880,203840,16016 3 0375
+Tp 588224,755976,203840 3 0376
+ss 592592,755976 2 0377
diff --git a/contrib/groff/font/devdvi/HBI b/contrib/groff/font/devdvi/HBI
new file mode 100644
index 0000000..4e9efd0
--- /dev/null
+++ b/contrib/groff/font/devdvi/HBI
@@ -0,0 +1,296 @@
+name HBI
+internalname cmssbxo10
+spacewidth 384480
+slant 11.999911
+ligatures ff fi fl ffi ffl 0
+checksum 461961576
+designsize 10485760
+kernpairs
+ff cq 80101
+ff ' 80101
+ff ? 80101
+ff ! 80101
+ff ) 80101
+ff rB 80101
+ff ] 80101
+cq ? 128160
+' ? 128160
+cq ! 128160
+' ! 128160
+A t -32040
+A C -32040
+A O -32040
+A G -32040
+A U -32040
+A Q -32040
+A T -96120
+A Y -96120
+A V -128160
+A W -128160
+D X -32040
+D W -32040
+D A -32040
+D V -32040
+D Y -32040
+F o -32040
+F e -32040
+F u -32040
+F r -32040
+F a -32040
+F A -96120
+F O -32040
+F C -32040
+F G -32040
+F Q -32040
+I I 32040
+K O -32040
+K C -32040
+K G -32040
+K Q -32040
+L T -96120
+L Y -96120
+L V -128160
+L W -128160
+O X -32040
+O W -32040
+O A -32040
+O V -32040
+O Y -32040
+P A -96120
+P o -32040
+P e -32040
+P a -32040
+P . -96120
+P , -96120
+T y -96120
+T e -96120
+T o -96120
+T r -96120
+T a -96120
+T A -96120
+T u -96120
+V o -32040
+V e -32040
+V u -32040
+V r -32040
+V a -32040
+V A -96120
+V O -32040
+V C -32040
+V G -32040
+V Q -32040
+W o -32040
+W e -32040
+W u -32040
+W r -32040
+W a -32040
+W A -96120
+W O -32040
+W C -32040
+W G -32040
+W Q -32040
+X O -32040
+X C -32040
+X G -32040
+X Q -32040
+Y e -96120
+Y o -96120
+Y r -96120
+Y a -96120
+Y A -96120
+Y u -96120
+a r -32040
+a y -32040
+a w -32040
+b e 32040
+b o 32040
+b x -32040
+b d 32040
+b c 32040
+b q 32040
+b r -32040
+b y -32040
+b w -32040
+f cq 80101
+f ' 80101
+f ? 80101
+f ! 80101
+f ) 80101
+f rB 80101
+f ] 80101
+g j 32040
+k e -32040
+k a -32040
+k o -32040
+k c -32040
+o e 32040
+o o 32040
+o x -32040
+o d 32040
+o c 32040
+o q 32040
+o r -32040
+o y -32040
+o w -32040
+p e 32040
+p o 32040
+p x -32040
+p d 32040
+p c 32040
+p q 32040
+p r -32040
+p y -32040
+p w -32040
+t y -32040
+t w -32040
+u w -32040
+w e -32040
+w a -32040
+w o -32040
+w c -32040
+y o -32040
+y e -32040
+y a -32040
+y . -96120
+y , -96120
+charset
+*G 608760,728178,0,138757,0,-21443 2 0000
+*D 961200,728178 2 0001
+*H 897120,728178,0,76304,-78474,44264 2 0002
+*L 704880,728178 2 0003
+*C 768960,728178,0,132349,0,66174 2 0004
+*P 833040,728178,0,90698,0,45349 2 0005
+*S 833040,728178,0,122738,0,61370 2 0006
+*U 897120,728178,0,91782,-155862,-68418 2 0007
+*F 833040,728178,0,45349,-109429,45349 2 0010
+*Q 897120,728178,0,91782,-155862,-18190 2 0011
+*W 833040,728178,0,84043,0,42022 2 0012
+ff 672840,728178,0,234878 2 0013
+fi 614586,728178,0,121282 2 0014
+fl 614586,728178,0,124194 2 0015
+Fi 934986,728178,0,121282 2 0016
+Fl 934986,728178,0,124194 2 0017
+.i 267971,480597,0,71570 0 0020
+.j 300011,480597,203890,71570 1 0021
+ga 576720,728178 2 0022
+aa 576720,728178,0,90698 2 0023
+ah 576720,666283,0,60066 2 0024
+ab 576720,728178,0,96523 2 0025
+a- 576720,668757,0,94086 2 0026
+ao 839126,728178 2 0027
+ac 512640,0,178403 1 0030
+ss 592739,728178,0,90698 2 0031
+ae 833040,480597,0,78936 0 0032
+oe 897120,480597,0,78936 0 0033
+/o 576720,582542,101946,34810 3 0034
+AE 993240,728178,0,122738 2 0035
+OE 1121400,728178,0,122738 2 0036
+/O 897120,779150,50973,76304 3 0037
+--- 267971,480597 0 0040
+! 384480,728178,0,63027 2 0041
+rq 585458,728178,0,28947 2 0042
+sh 961200,728178,203888,58506 3 0043
+# "
+Do 576720,786432,58254,122738 3 0044
+$ "
+% 1079109,786432,58254,29870 3 0045
+& 870906,728178,0,32248 2 0046
+cq 320400,728178,0,95067 2 0047
+' "
+( 448560,786432,262144,135120 3 0050
+) 448560,786432,262144,23680 3 0051
+* 576720,786432,0,119099 2 0052
++ 897120,646624,122336,23680 3 0053
+, 320400,136898,110683 1 0054
+hy 384480,480597,0,19037 0 0055
+- "
+. 320400,136898 0 0056
+sl 576720,786432,262144,135120 3 0057
+/ "
+0 576720,728178,0,122738 2 0060
+1 576720,728178,0,122738 2 0061
+2 576720,728178,0,122738 2 0062
+3 576720,728178,0,122738 2 0063
+4 576720,728178,0,122738 2 0064
+5 576720,728178,0,122738 2 0065
+6 576720,728178,0,122738 2 0066
+7 576720,728178,0,122738 2 0067
+8 576720,728178,0,122738 2 0070
+9 576720,728178,0,122738 2 0071
+: 320400,480597,0,42443 0 0072
+; 320400,480597,110683,42443 1 0073
+r! 384480,524288,203890,19690 3 0074
+= 897120,425984,-98304,58506 0 0075
+r? 544680,524288,203890 3 0076
+? 544680,728178,0,123822 2 0077
+at 768960,728178,0,76304 2 0100
+@ "
+A 768960,728178 2 0101
+B 768960,728178,0,84043,0,42022 2 0102
+C 736920,728178,0,122738,-78474,61370 2 0103
+D 833040,728178,0,76304,0,44264 2 0104
+E 672840,728178,0,122738,0,61370 2 0105
+F 640800,728178,0,138757,0,-21443 2 0106
+G 768960,728178,0,122738,-78474,61370 2 0107
+H 833040,728178,0,90698,0,45349 2 0110
+I 346614,728178,0,138757,0,69379 2 0111
+J 544680,728178,0,90698,0,13309 2 0112
+K 801000,728178,0,122738,0,61370 2 0113
+L 608760,728178,0,0,0,64080 2 0114
+M 1025280,728178,0,90698,0,13309 2 0115
+N 833040,728178,0,90698,0,13309 2 0116
+O 833040,728178,0,76304,-78474,44264 2 0117
+P 736920,728178,0,84043,0,-76157 2 0120
+Q 833040,728178,110683,76304,-78474,76304 3 0121
+R 736920,728178,0,84043,0,63032 2 0122
+S 640800,728178,0,90698,0,45349 2 0123
+T 768960,728178,0,138757,-116083,-21443 2 0124
+U 801000,728178,0,90698,-78474,13309 2 0125
+V 768960,728178,0,170798,-106717,-85522 2 0126
+W 1089360,728178,0,170798,-106717,10598 2 0127
+X 768960,728178,0,138757,0,69379 2 0130
+Y 768960,728178,0,183613,-122738,-72707 2 0131
+Z 704880,728178,0,122738,0,61370 2 0132
+lB 359722,786432,262144,167160 3 0133
+[ "
+lq 585458,728178,0,148370 2 0134
+rB 359722,786432,262144,110362 3 0135
+] "
+ha 576720,728178,0,55680 2 0136
+^ "
+a^ "
+a. 320400,728178,0,103805 2 0137
+oq 320400,728178,0,95067 2 0140
+` "
+a 550506,480597,0,40613 0 0141
+b 588371,728178,0,35056 2 0142
+c 512640,480597,0,89338 0 0143
+d 588371,728178,0,124194 2 0144
+e 535942,480597,0,78936 0 0145
+f 352440,728178,0,234878 2 0146
+g 576720,480597,203890,118174 1 0147
+h 588371,728178,0,48352 2 0150
+i 267971,728178,0,130019 2 0151
+j 300011,728178,203890,124194 3 0152
+k 556331,728178,0,89338 2 0153
+l 267971,728178,0,124194 2 0154
+m 908771,480597,0,48352 0 0155
+n 588371,480597,0,48352 0 0156
+o 576720,480597,0,71507 0 0157
+p 588371,480597,203890,44669 1 0160
+q 588371,480597,203890,71570 1 0161
+r 390306,480597,0,118174 0 0162
+s 442152,480597,0,82930 0 0163
+t 423802,617914,0,76522 2 0164
+u 588371,480597,0,71570 0 0165
+v 524291,480597,0,118174 0 0166
+w 780611,480597,0,118174 0 0167
+x 524291,480597,0,98949 0 0170
+y 524291,480597,203890,118174 1 0171
+z 499533,480597,0,96037 0 0172
+en 576720,480597,0,95173 0 0173
+em 1153440,480597,0,95173 0 0174
+a" 576720,728178,0,90698 2 0175
+~ 576720,728178,0,90698 2 0176
+a~ "
+ad 576720,728178,0,87784 2 0177
diff --git a/contrib/groff/font/devdvi/HBIEC b/contrib/groff/font/devdvi/HBIEC
new file mode 100644
index 0000000..6e8f1ff
--- /dev/null
+++ b/contrib/groff/font/devdvi/HBIEC
@@ -0,0 +1,1579 @@
+name HBIEC
+internalname ecso1000
+spacewidth 384384
+slant 11.999911
+ligatures ff fi fl ffi ffl 0
+checksum -2073731298
+designsize 10485760
+kernpairs
+bq Bq 128128
+bq j 128128
+bq .j 128128
+bq g 64064
+bq y 64064
+bq :y 64064
+bq 'y 64064
+bq v -96096
+bq w -64064
+bq V -128128
+bq W -96096
+bq Y -96096
+bq :Y -96096
+bq 'Y -96096
+bq O -32032
+bq `O -32032
+bq 'O -32032
+bq ^O -32032
+bq ~O -32032
+bq :O -32032
+bq OE -32032
+bq /O -32032
+bq C -32032
+bq G -32032
+bq 'C -32032
+bq ,C -32032
+bq Q -32032
+lq oq 128128
+lq ` 128128
+lq lq 128128
+rq cq 128128
+rq ' 128128
+rq rq 128128
+Bq bq 128128
+Bq , 128128
+Bq Bq 128128
+Bq j 128128
+Bq .j 128128
+Bq g 64064
+Bq y 64064
+Bq :y 64064
+Bq 'y 64064
+Bq v -96096
+Bq w -64064
+Bq V -128128
+Bq W -96096
+Bq Y -96096
+Bq :Y -96096
+Bq 'Y -96096
+Bq O -32032
+Bq `O -32032
+Bq 'O -32032
+Bq ^O -32032
+Bq ~O -32032
+Bq :O -32032
+Bq OE -32032
+Bq /O -32032
+Bq C -32032
+Bq G -32032
+Bq 'C -32032
+Bq ,C -32032
+Bq Q -32032
+Fc . -96096
+Fc , -96096
+ff cq 80080
+ff ' 80080
+ff oq 80080
+ff ` 80080
+ff lq 80080
+ff rq 80080
+ff ? 80080
+ff ! 80080
+ff ) 80080
+ff rB 80080
+ff ] 80080
+cq rq 128128
+' rq 128128
+cq ? 128128
+' ? 128128
+cq ! 128128
+' ! 128128
+A y -32032
+A :y -32032
+A 'y -32032
+A v -32032
+A w -32032
+A c -32032
+A 'c -32032
+A ,c -32032
+A d -32032
+A Sd -32032
+A e -32032
+A `e -32032
+A 'e -32032
+A ^e -32032
+A :e -32032
+A o -32032
+A `o -32032
+A 'o -32032
+A ^o -32032
+A ~o -32032
+A :o -32032
+A oe -32032
+A /o -32032
+A q -32032
+A t -32032
+A C -32032
+A G -32032
+A 'C -32032
+A ,C -32032
+A Q -32032
+A O -32032
+A `O -32032
+A 'O -32032
+A ^O -32032
+A ~O -32032
+A :O -32032
+A OE -32032
+A /O -32032
+A U -32032
+A `U -32032
+A 'U -32032
+A ^U -32032
+A :U -32032
+A T -96096
+A Y -96096
+A :Y -96096
+A 'Y -96096
+A V -128128
+A W -128128
+D X -32032
+D W -32032
+D A -32032
+D `A -32032
+D 'A -32032
+D ^A -32032
+D ~A -32032
+D :A -32032
+D oA -32032
+D AE -32032
+D V -32032
+D Y -32032
+D :Y -32032
+D 'Y -32032
+F o -32032
+F a -32032
+F e -32032
+F y -32032
+F u -32032
+F r -32032
+F v -32032
+F s -32032
+F c -32032
+F d -32032
+F g -32032
+F m -32032
+F n -32032
+F p -32032
+F w -32032
+F z -32032
+F ae -32032
+F /o -32032
+F A -96096
+F `A -96096
+F 'A -96096
+F ^A -96096
+F ~A -96096
+F :A -96096
+F oA -96096
+F AE -96096
+F O -32032
+F `O -32032
+F 'O -32032
+F ^O -32032
+F ~O -32032
+F :O -32032
+F OE -32032
+F /O -32032
+F C -32032
+F G -32032
+F 'C -32032
+F ,C -32032
+F Q -32032
+I I 32032
+K v -32032
+K o -32032
+K `o -32032
+K 'o -32032
+K ^o -32032
+K ~o -32032
+K :o -32032
+K oe -32032
+K /o -32032
+K C -32032
+K G -32032
+K 'C -32032
+K ,C -32032
+K Q -32032
+L T -96096
+L Y -96096
+L :Y -96096
+L 'Y -96096
+L V -128128
+L W -128128
+O X -32032
+O W -32032
+O A -32032
+O `A -32032
+O 'A -32032
+O ^A -32032
+O ~A -32032
+O :A -32032
+O oA -32032
+O AE -32032
+O V -32032
+O Y -32032
+O :Y -32032
+O 'Y -32032
+P A -96096
+P `A -96096
+P 'A -96096
+P ^A -96096
+P ~A -96096
+P :A -96096
+P oA -96096
+P AE -96096
+P o -32032
+P `o -32032
+P 'o -32032
+P ^o -32032
+P ~o -32032
+P :o -32032
+P oe -32032
+P /o -32032
+P e -32032
+P `e -32032
+P 'e -32032
+P ^e -32032
+P :e -32032
+P a -32032
+P `a -32032
+P 'a -32032
+P ^a -32032
+P ^a -32032
+P ~a -32032
+P :a -32032
+P oa -32032
+P ae -32032
+P . -96096
+P , -96096
+T y -96096
+T e -96096
+T o -96096
+T r -96096
+T a -96096
+T u -96096
+T n -96096
+T .i -96096
+T c -96096
+T d -96096
+T g -96096
+T p -96096
+T s -96096
+T v -96096
+T w -96096
+T x -96096
+T z -96096
+T A -96096
+T `A -96096
+T 'A -96096
+T ^A -96096
+T ~A -96096
+T :A -96096
+T oA -96096
+T AE -96096
+V o -32032
+V a -32032
+V e -32032
+V y -32032
+V u -32032
+V r -32032
+V v -32032
+V s -32032
+V c -32032
+V d -32032
+V g -32032
+V m -32032
+V n -32032
+V p -32032
+V w -32032
+V z -32032
+V ae -32032
+V /o -32032
+V A -96096
+V `A -96096
+V 'A -96096
+V ^A -96096
+V ~A -96096
+V :A -96096
+V oA -96096
+V AE -96096
+V O -32032
+V `O -32032
+V 'O -32032
+V ^O -32032
+V ~O -32032
+V :O -32032
+V OE -32032
+V /O -32032
+V C -32032
+V G -32032
+V 'C -32032
+V ,C -32032
+V Q -32032
+W o -32032
+W a -32032
+W e -32032
+W y -32032
+W u -32032
+W r -32032
+W v -32032
+W s -32032
+W c -32032
+W d -32032
+W g -32032
+W m -32032
+W n -32032
+W p -32032
+W w -32032
+W z -32032
+W ae -32032
+W /o -32032
+W A -96096
+W `A -96096
+W 'A -96096
+W ^A -96096
+W ~A -96096
+W :A -96096
+W oA -96096
+W AE -96096
+W O -32032
+W `O -32032
+W 'O -32032
+W ^O -32032
+W ~O -32032
+W :O -32032
+W OE -32032
+W /O -32032
+W C -32032
+W G -32032
+W 'C -32032
+W ,C -32032
+W Q -32032
+X O -32032
+X `O -32032
+X 'O -32032
+X ^O -32032
+X ~O -32032
+X :O -32032
+X OE -32032
+X /O -32032
+X C -32032
+X G -32032
+X 'C -32032
+X ,C -32032
+X Q -32032
+Y e -96096
+Y o -96096
+Y r -96096
+Y a -96096
+Y u -96096
+Y n -96096
+Y .i -96096
+Y c -96096
+Y d -96096
+Y g -96096
+Y p -96096
+Y s -96096
+Y v -96096
+Y w -96096
+Y x -96096
+Y z -96096
+Y A -96096
+Y `A -96096
+Y 'A -96096
+Y ^A -96096
+Y ~A -96096
+Y :A -96096
+Y oA -96096
+Y AE -96096
+oq lq 128128
+` lq 128128
+oq ? 128128
+` ? 128128
+oq ! 128128
+` ! 128128
+a r -32032
+a y -32032
+a :y -32032
+a 'y -32032
+a w -32032
+b e 32032
+b `e 32032
+b 'e 32032
+b ^e 32032
+b :e 32032
+b o 32032
+b `o 32032
+b 'o 32032
+b ^o 32032
+b ~o 32032
+b :o 32032
+b oe 32032
+b /o 32032
+b x -32032
+b d 32032
+b c 32032
+b 'c 32032
+b ,c 32032
+b q 32032
+b r -32032
+b y -32032
+b :y -32032
+b 'y -32032
+b w -32032
+e V -96096
+f cq 80080
+f ' 80080
+f oq 80080
+f ` 80080
+f lq 80080
+f rq 80080
+f ? 80080
+f ! 80080
+f ) 80080
+f rB 80080
+f ] 80080
+g j 32032
+k W -96096
+k V -96096
+k e -32032
+k `e -32032
+k 'e -32032
+k ^e -32032
+k :e -32032
+k a -32032
+k `a -32032
+k 'a -32032
+k ^a -32032
+k ^a -32032
+k ~a -32032
+k :a -32032
+k oa -32032
+k ae -32032
+k o -32032
+k `o -32032
+k 'o -32032
+k ^o -32032
+k ~o -32032
+k :o -32032
+k oe -32032
+k /o -32032
+k c -32032
+k 'c -32032
+k ,c -32032
+o e 32032
+o `e 32032
+o 'e 32032
+o ^e 32032
+o :e 32032
+o o 32032
+o `o 32032
+o 'o 32032
+o ^o 32032
+o ~o 32032
+o :o 32032
+o oe 32032
+o /o 32032
+o x -32032
+o d 32032
+o c 32032
+o 'c 32032
+o ,c 32032
+o q 32032
+o r -32032
+o y -32032
+o :y -32032
+o 'y -32032
+o w -32032
+p e 32032
+p `e 32032
+p 'e 32032
+p ^e 32032
+p :e 32032
+p o 32032
+p `o 32032
+p 'o 32032
+p ^o 32032
+p ~o 32032
+p :o 32032
+p oe 32032
+p /o 32032
+p x -32032
+p d 32032
+p c 32032
+p 'c 32032
+p ,c 32032
+p q 32032
+p r -32032
+p y -32032
+p :y -32032
+p 'y -32032
+p w -32032
+t y -32032
+t :y -32032
+t 'y -32032
+t w -32032
+u w -32032
+w e -32032
+w `e -32032
+w 'e -32032
+w ^e -32032
+w :e -32032
+w a -32032
+w `a -32032
+w 'a -32032
+w ^a -32032
+w ^a -32032
+w ~a -32032
+w :a -32032
+w oa -32032
+w ae -32032
+w o -32032
+w `o -32032
+w 'o -32032
+w ^o -32032
+w ~o -32032
+w :o -32032
+w oe -32032
+w /o -32032
+w c -32032
+w 'c -32032
+w ,c -32032
+y o -32032
+y `o -32032
+y 'o -32032
+y ^o -32032
+y ~o -32032
+y :o -32032
+y oe -32032
+y /o -32032
+y e -32032
+y `e -32032
+y 'e -32032
+y ^e -32032
+y :e -32032
+y a -32032
+y `a -32032
+y 'a -32032
+y ^a -32032
+y ^a -32032
+y ~a -32032
+y :a -32032
+y oa -32032
+y ae -32032
+y . -96096
+y , -96096
+'C v -32032
+'C w -32032
+'C c -32032
+'C 'c -32032
+'C ,c -32032
+'C d -32032
+'C Sd -32032
+'C e -32032
+'C `e -32032
+'C 'e -32032
+'C ^e -32032
+'C :e -32032
+'C o -32032
+'C `o -32032
+'C 'o -32032
+'C ^o -32032
+'C ~o -32032
+'C :o -32032
+'C oe -32032
+'C /o -32032
+'C q -32032
+'C t -32032
+'C C -32032
+'C G -32032
+'C 'C -32032
+'C ,C -32032
+'C Q -32032
+'C O -32032
+'C `O -32032
+'C 'O -32032
+'C ^O -32032
+'C ~O -32032
+'C :O -32032
+'C OE -32032
+'C /O -32032
+'C U -32032
+'C `U -32032
+'C 'U -32032
+'C ^U -32032
+'C :U -32032
+'C T -96096
+'C Y -96096
+'C :Y -96096
+'C 'Y -96096
+'C V -128128
+'C W -128128
+/L T -96096
+/L Y -96096
+/L :Y -96096
+/L 'Y -96096
+/L V -128128
+/L W -128128
+:Y e -96096
+:Y o -96096
+:Y r -96096
+:Y a -96096
+:Y u -96096
+:Y n -96096
+:Y .i -96096
+:Y c -96096
+:Y d -96096
+:Y g -96096
+:Y p -96096
+:Y s -96096
+:Y v -96096
+:Y w -96096
+:Y x -96096
+:Y z -96096
+:Y A -96096
+:Y `A -96096
+:Y 'A -96096
+:Y ^A -96096
+:Y ~A -96096
+:Y :A -96096
+:Y oA -96096
+:Y AE -96096
+/l cq 32032
+/l ' 32032
+/l a -32032
+/l c -32032
+/l 'c -32032
+/l d -32032
+/l e -32032
+/l g -32032
+/l o -32032
+/l 'o -32032
+/l s -32032
+:y o -32032
+:y `o -32032
+:y 'o -32032
+:y ^o -32032
+:y ~o -32032
+:y :o -32032
+:y oe -32032
+:y /o -32032
+:y e -32032
+:y `e -32032
+:y 'e -32032
+:y ^e -32032
+:y :e -32032
+:y a -32032
+:y `a -32032
+:y 'a -32032
+:y ^a -32032
+:y ^a -32032
+:y ~a -32032
+:y :a -32032
+:y oa -32032
+:y ae -32032
+:y . -96096
+:y , -96096
+`A y -32032
+`A :y -32032
+`A 'y -32032
+`A v -32032
+`A w -32032
+`A c -32032
+`A 'c -32032
+`A ,c -32032
+`A d -32032
+`A Sd -32032
+`A e -32032
+`A `e -32032
+`A 'e -32032
+`A ^e -32032
+`A :e -32032
+`A o -32032
+`A `o -32032
+`A 'o -32032
+`A ^o -32032
+`A ~o -32032
+`A :o -32032
+`A oe -32032
+`A /o -32032
+`A q -32032
+`A t -32032
+`A C -32032
+`A G -32032
+`A 'C -32032
+`A ,C -32032
+`A Q -32032
+`A O -32032
+`A `O -32032
+`A 'O -32032
+`A ^O -32032
+`A ~O -32032
+`A :O -32032
+`A OE -32032
+`A /O -32032
+`A U -32032
+`A `U -32032
+`A 'U -32032
+`A ^U -32032
+`A :U -32032
+`A T -96096
+`A Y -96096
+`A :Y -96096
+`A 'Y -96096
+`A V -128128
+`A W -128128
+'A y -32032
+'A :y -32032
+'A 'y -32032
+'A v -32032
+'A w -32032
+'A c -32032
+'A 'c -32032
+'A ,c -32032
+'A d -32032
+'A Sd -32032
+'A e -32032
+'A `e -32032
+'A 'e -32032
+'A ^e -32032
+'A :e -32032
+'A o -32032
+'A `o -32032
+'A 'o -32032
+'A ^o -32032
+'A ~o -32032
+'A :o -32032
+'A oe -32032
+'A /o -32032
+'A q -32032
+'A t -32032
+'A C -32032
+'A G -32032
+'A 'C -32032
+'A ,C -32032
+'A Q -32032
+'A O -32032
+'A `O -32032
+'A 'O -32032
+'A ^O -32032
+'A ~O -32032
+'A :O -32032
+'A OE -32032
+'A /O -32032
+'A U -32032
+'A `U -32032
+'A 'U -32032
+'A ^U -32032
+'A :U -32032
+'A T -96096
+'A Y -96096
+'A :Y -96096
+'A 'Y -96096
+'A V -128128
+'A W -128128
+^A y -32032
+^A :y -32032
+^A 'y -32032
+^A v -32032
+^A w -32032
+^A c -32032
+^A 'c -32032
+^A ,c -32032
+^A d -32032
+^A Sd -32032
+^A e -32032
+^A `e -32032
+^A 'e -32032
+^A ^e -32032
+^A :e -32032
+^A o -32032
+^A `o -32032
+^A 'o -32032
+^A ^o -32032
+^A ~o -32032
+^A :o -32032
+^A oe -32032
+^A /o -32032
+^A q -32032
+^A t -32032
+^A C -32032
+^A G -32032
+^A 'C -32032
+^A ,C -32032
+^A Q -32032
+^A O -32032
+^A `O -32032
+^A 'O -32032
+^A ^O -32032
+^A ~O -32032
+^A :O -32032
+^A OE -32032
+^A /O -32032
+^A U -32032
+^A `U -32032
+^A 'U -32032
+^A ^U -32032
+^A :U -32032
+^A T -96096
+^A Y -96096
+^A :Y -96096
+^A 'Y -96096
+^A V -128128
+^A W -128128
+~A y -32032
+~A :y -32032
+~A 'y -32032
+~A v -32032
+~A w -32032
+~A c -32032
+~A 'c -32032
+~A ,c -32032
+~A d -32032
+~A Sd -32032
+~A e -32032
+~A `e -32032
+~A 'e -32032
+~A ^e -32032
+~A :e -32032
+~A o -32032
+~A `o -32032
+~A 'o -32032
+~A ^o -32032
+~A ~o -32032
+~A :o -32032
+~A oe -32032
+~A /o -32032
+~A q -32032
+~A t -32032
+~A C -32032
+~A G -32032
+~A 'C -32032
+~A ,C -32032
+~A Q -32032
+~A O -32032
+~A `O -32032
+~A 'O -32032
+~A ^O -32032
+~A ~O -32032
+~A :O -32032
+~A OE -32032
+~A /O -32032
+~A U -32032
+~A `U -32032
+~A 'U -32032
+~A ^U -32032
+~A :U -32032
+~A T -96096
+~A Y -96096
+~A :Y -96096
+~A 'Y -96096
+~A V -128128
+~A W -128128
+:A y -32032
+:A :y -32032
+:A 'y -32032
+:A v -32032
+:A w -32032
+:A c -32032
+:A 'c -32032
+:A ,c -32032
+:A d -32032
+:A Sd -32032
+:A e -32032
+:A `e -32032
+:A 'e -32032
+:A ^e -32032
+:A :e -32032
+:A o -32032
+:A `o -32032
+:A 'o -32032
+:A ^o -32032
+:A ~o -32032
+:A :o -32032
+:A oe -32032
+:A /o -32032
+:A q -32032
+:A t -32032
+:A C -32032
+:A G -32032
+:A 'C -32032
+:A ,C -32032
+:A Q -32032
+:A O -32032
+:A `O -32032
+:A 'O -32032
+:A ^O -32032
+:A ~O -32032
+:A :O -32032
+:A OE -32032
+:A /O -32032
+:A U -32032
+:A `U -32032
+:A 'U -32032
+:A ^U -32032
+:A :U -32032
+:A T -96096
+:A Y -96096
+:A :Y -96096
+:A 'Y -96096
+:A V -128128
+:A W -128128
+oA y -32032
+oA :y -32032
+oA 'y -32032
+oA v -32032
+oA w -32032
+oA c -32032
+oA 'c -32032
+oA ,c -32032
+oA d -32032
+oA Sd -32032
+oA e -32032
+oA `e -32032
+oA 'e -32032
+oA ^e -32032
+oA :e -32032
+oA o -32032
+oA `o -32032
+oA 'o -32032
+oA ^o -32032
+oA ~o -32032
+oA :o -32032
+oA oe -32032
+oA /o -32032
+oA q -32032
+oA t -32032
+oA C -32032
+oA G -32032
+oA 'C -32032
+oA ,C -32032
+oA Q -32032
+oA O -32032
+oA `O -32032
+oA 'O -32032
+oA ^O -32032
+oA ~O -32032
+oA :O -32032
+oA OE -32032
+oA /O -32032
+oA U -32032
+oA `U -32032
+oA 'U -32032
+oA ^U -32032
+oA :U -32032
+oA T -96096
+oA Y -96096
+oA :Y -96096
+oA 'Y -96096
+oA V -128128
+oA W -128128
+-D X -32032
+-D W -32032
+-D A -32032
+-D `A -32032
+-D 'A -32032
+-D ^A -32032
+-D ~A -32032
+-D :A -32032
+-D oA -32032
+-D AE -32032
+-D V -32032
+-D Y -32032
+-D :Y -32032
+-D 'Y -32032
+`O X -32032
+`O W -32032
+`O A -32032
+`O `A -32032
+`O 'A -32032
+`O ^A -32032
+`O ~A -32032
+`O :A -32032
+`O oA -32032
+`O AE -32032
+`O V -32032
+`O Y -32032
+`O :Y -32032
+`O 'Y -32032
+'O X -32032
+'O W -32032
+'O A -32032
+'O `A -32032
+'O 'A -32032
+'O ^A -32032
+'O ~A -32032
+'O :A -32032
+'O oA -32032
+'O AE -32032
+'O V -32032
+'O Y -32032
+'O :Y -32032
+'O 'Y -32032
+^O X -32032
+^O W -32032
+^O A -32032
+^O `A -32032
+^O 'A -32032
+^O ^A -32032
+^O ~A -32032
+^O :A -32032
+^O oA -32032
+^O AE -32032
+^O V -32032
+^O Y -32032
+^O :Y -32032
+^O 'Y -32032
+~O X -32032
+~O W -32032
+~O A -32032
+~O `A -32032
+~O 'A -32032
+~O ^A -32032
+~O ~A -32032
+~O :A -32032
+~O oA -32032
+~O AE -32032
+~O V -32032
+~O Y -32032
+~O :Y -32032
+~O 'Y -32032
+:O X -32032
+:O W -32032
+:O A -32032
+:O `A -32032
+:O 'A -32032
+:O ^A -32032
+:O ~A -32032
+:O :A -32032
+:O oA -32032
+:O AE -32032
+:O V -32032
+:O Y -32032
+:O :Y -32032
+:O 'Y -32032
+/O X -32032
+/O W -32032
+/O A -32032
+/O `A -32032
+/O 'A -32032
+/O ^A -32032
+/O ~A -32032
+/O :A -32032
+/O oA -32032
+/O AE -32032
+/O V -32032
+/O Y -32032
+/O :Y -32032
+/O 'Y -32032
+'Y e -96096
+'Y o -96096
+'Y r -96096
+'Y a -96096
+'Y u -96096
+'Y n -96096
+'Y .i -96096
+'Y c -96096
+'Y d -96096
+'Y g -96096
+'Y p -96096
+'Y s -96096
+'Y v -96096
+'Y w -96096
+'Y x -96096
+'Y z -96096
+'Y A -96096
+'Y `A -96096
+'Y 'A -96096
+'Y ^A -96096
+'Y ~A -96096
+'Y :A -96096
+'Y oA -96096
+'Y AE -96096
+`a r -32032
+`a y -32032
+`a :y -32032
+`a 'y -32032
+`a w -32032
+'a r -32032
+'a y -32032
+'a :y -32032
+'a 'y -32032
+'a w -32032
+^a r -32032
+^a y -32032
+^a :y -32032
+^a 'y -32032
+^a w -32032
+~a r -32032
+~a y -32032
+~a :y -32032
+~a 'y -32032
+~a w -32032
+:a r -32032
+:a y -32032
+:a :y -32032
+:a 'y -32032
+:a w -32032
+oa r -32032
+oa y -32032
+oa :y -32032
+oa 'y -32032
+oa w -32032
+`o e 32032
+`o `e 32032
+`o 'e 32032
+`o ^e 32032
+`o :e 32032
+`o o 32032
+`o `o 32032
+`o 'o 32032
+`o ^o 32032
+`o ~o 32032
+`o :o 32032
+`o oe 32032
+`o /o 32032
+`o x -32032
+`o d 32032
+`o c 32032
+`o 'c 32032
+`o ,c 32032
+`o q 32032
+`o r -32032
+`o y -32032
+`o :y -32032
+`o 'y -32032
+`o w -32032
+'o e 32032
+'o `e 32032
+'o 'e 32032
+'o ^e 32032
+'o :e 32032
+'o o 32032
+'o `o 32032
+'o 'o 32032
+'o ^o 32032
+'o ~o 32032
+'o :o 32032
+'o oe 32032
+'o /o 32032
+'o x -32032
+'o d 32032
+'o c 32032
+'o 'c 32032
+'o ,c 32032
+'o q 32032
+'o r -32032
+'o y -32032
+'o :y -32032
+'o 'y -32032
+'o w -32032
+^o e 32032
+^o `e 32032
+^o 'e 32032
+^o ^e 32032
+^o :e 32032
+^o o 32032
+^o `o 32032
+^o 'o 32032
+^o ^o 32032
+^o ~o 32032
+^o :o 32032
+^o oe 32032
+^o /o 32032
+^o x -32032
+^o d 32032
+^o c 32032
+^o 'c 32032
+^o ,c 32032
+^o q 32032
+^o r -32032
+^o y -32032
+^o :y -32032
+^o 'y -32032
+^o w -32032
+~o e 32032
+~o `e 32032
+~o 'e 32032
+~o ^e 32032
+~o :e 32032
+~o o 32032
+~o `o 32032
+~o 'o 32032
+~o ^o 32032
+~o ~o 32032
+~o :o 32032
+~o oe 32032
+~o /o 32032
+~o x -32032
+~o d 32032
+~o c 32032
+~o 'c 32032
+~o ,c 32032
+~o q 32032
+~o r -32032
+~o y -32032
+~o :y -32032
+~o 'y -32032
+~o w -32032
+:o e 32032
+:o `e 32032
+:o 'e 32032
+:o ^e 32032
+:o :e 32032
+:o o 32032
+:o `o 32032
+:o 'o 32032
+:o ^o 32032
+:o ~o 32032
+:o :o 32032
+:o oe 32032
+:o /o 32032
+:o x -32032
+:o d 32032
+:o c 32032
+:o 'c 32032
+:o ,c 32032
+:o q 32032
+:o r -32032
+:o y -32032
+:o :y -32032
+:o 'y -32032
+:o w -32032
+/o e 32032
+/o `e 32032
+/o 'e 32032
+/o ^e 32032
+/o :e 32032
+/o o 32032
+/o `o 32032
+/o 'o 32032
+/o ^o 32032
+/o ~o 32032
+/o :o 32032
+/o oe 32032
+/o /o 32032
+/o x -32032
+/o d 32032
+/o c 32032
+/o 'c 32032
+/o ,c 32032
+/o q 32032
+/o r -32032
+/o y -32032
+/o :y -32032
+/o 'y -32032
+/o w -32032
+`u w -32032
+'u w -32032
+^u w -32032
+:u w -32032
+'y o -32032
+'y `o -32032
+'y 'o -32032
+'y ^o -32032
+'y ~o -32032
+'y :o -32032
+'y oe -32032
+'y /o -32032
+'y e -32032
+'y `e -32032
+'y 'e -32032
+'y ^e -32032
+'y :e -32032
+'y a -32032
+'y `a -32032
+'y 'a -32032
+'y ^a -32032
+'y ^a -32032
+'y ~a -32032
+'y :a -32032
+'y oa -32032
+'y ae -32032
+'y . -96096
+'y , -96096
+charset
+ga 576576,698880 2 0000
+aa 576576,698880,0,84486 2 0001
+a^ 576576,698880 2 0002
+a~ 576576,698880,0,84486 2 0003
+ad 576576,728000,0,84851 2 0004
+a" 576576,698880,0,84486 2 0005
+ao 830664,698880 2 0006
+ah 576576,698880 2 0007
+ab 576576,698880,0,90310 2 0010
+a- 576576,728000,0,106691 2 0011
+a. 320320,755976,0,107058 2 0012
+ac 512512,0,178360 1 0013
+ho 320320,0,203840 1 0014
+bq 320320,136864,110656 1 0015
+fo 512512,524160,0,47349 2 0016
+fc 512512,524160,0,47349 2 0017
+lq 393120,755976,0,154523 2 0020
+rq 393120,755976,0,35090 2 0021
+Bq 393120,136864,110656,35090 1 0022
+Fo 768768,524160,0,27709 2 0023
+Fc 768768,524160,0,9419 2 0024
+en 576576,480480,0,95150 0 0025
+em 1153152,480480,0,95150 0 0026
+--- 0,480480 0 0027
+--- 512512,782600,29120,32339 3 0030
+.i 267904,480480,0,71520 0 0031
+.j 299936,480480,203840,71520 1 0032
+ff 672672,755976,0,241010 2 0033
+fi 614432,755976,0,127442 2 0034
+fl 614432,755976,0,130354 2 0035
+Fi 934752,755976,0,127442 2 0036
+Fl 934752,755976,0,130354 2 0037
+--- 576576,480480,101920,39690 1 0040
+! 384384,755976,0,69202 2 0041
+dq 576576,755976,0,72114 2 0042
+" "
+sh 960960,755976,232960,58491 3 0043
+# "
+Do 576576,782600,29120,122707 3 0044
+$ "
+% 1078840,782600,29120,32339 3 0045
+& 870688,755976,0,32240 2 0046
+cq 320320,755976,0,101234 2 0047
+' "
+( 448448,782600,262080,135086 3 0050
+) 448448,782600,262080,23674 3 0051
+* 576576,782600,0,119070 2 0052
+pl 896896,646464,122304,23674 3 0053
++ "
+, 320320,136864,110656 1 0054
+- 384384,480480,0,19032 0 0055
+. 320320,136864 0 0056
+sl 576576,782600,262080,135086 3 0057
+/ "
+0 576576,728000,0,122707 2 0060
+1 576576,728000,0,122707 2 0061
+2 576576,728000,0,122707 2 0062
+3 576576,728000,0,122707 2 0063
+4 576576,728000,0,122707 2 0064
+5 576576,728000,0,122707 2 0065
+6 576576,728000,0,122707 2 0066
+7 576576,728000,0,122707 2 0067
+8 576576,728000,0,122707 2 0070
+9 576576,728000,0,122707 2 0071
+: 320320,480480,0,42432 0 0072
+; 320320,480480,110656,42432 1 0073
+< 896896,636091,111931,71141 3 0074
+eq 896896,425880,-98280,58491 0 0075
+= "
+> 896896,636091,111931 3 0076
+? 544544,755976,0,128744 2 0077
+at 768768,755976,0,80618 2 0100
+@ "
+A 768768,728000 2 0101
+B 768768,728000,0,84022,0,42011 2 0102
+C 736736,728000,0,122707,-78454,61354 2 0103
+D 832832,728000,0,76286,0,44254 2 0104
+E 672672,728000,0,122707,0,61354 2 0105
+F 640640,728000,0,138723,0,-21437 2 0106
+G 768768,728000,0,122707,-78454,61354 2 0107
+H 832832,728000,0,90675,0,45338 2 0110
+I 340704,728000,0,138723,0,69362 2 0111
+J 544544,728000,0,90675,0,13306 2 0112
+K 800800,728000,0,122707,0,61354 2 0113
+L 608608,728000,0,0,0,64064 2 0114
+M 1025024,728000,0,90675,0,13306 2 0115
+N 832832,728000,0,90675,0,13306 2 0116
+O 832832,728000,0,76286,-78454,44254 2 0117
+P 736736,728000,0,84022,0,-76138 2 0120
+Q 832832,728000,110656,76286,-78454,76286 3 0121
+R 736736,728000,0,84022,0,63018 2 0122
+S 640640,728000,0,90675,0,45338 2 0123
+T 768768,728000,0,138723,-116054,-21437 2 0124
+U 800800,728000,0,90675,-78454,13306 2 0125
+V 768768,728000,0,170755,-106691,-85501 2 0126
+W 1089088,728000,0,170755,-106691,10595 2 0127
+X 768768,728000,0,138723,0,69362 2 0130
+Y 768768,728000,0,183568,-122707,-72688 2 0131
+Z 704704,728000,0,122707,0,61354 2 0132
+lB 359632,782600,262080,167118 3 0133
+[ "
+rs 576576,782600,262080 3 0134
+\ "
+rB 359632,782600,262080,110334 3 0135
+] "
+ha 704704,755976,0,59794 2 0136
+^ "
+_ 896896,0,352171 1 0137
+oq 320320,755976,0,101234 2 0140
+` "
+a 550368,480480,0,40605 0 0141
+b 588224,755976,0,35090 2 0142
+c 512512,480480,0,89315 0 0143
+d 588224,755976,0,130354 2 0144
+e 535808,480480,0,78917 0 0145
+f 352352,755976,0,241010 2 0146
+g 576576,480480,203840,118144 1 0147
+h 588224,755976,0,48341 2 0150
+i 267904,755976,0,133266 2 0151
+j 299936,755976,203840,130354 3 0152
+k 556192,755976,0,89315 2 0153
+l 267904,755976,0,130354 2 0154
+m 908544,480480,0,48341 0 0155
+n 588224,480480,0,48341 0 0156
+o 576576,480480,0,71520 0 0157
+p 588224,480480,203840,44658 1 0160
+q 588224,480480,203840,71520 1 0161
+r 390208,480480,0,118144 0 0162
+s 442042,480480,0,82909 0 0163
+t 423696,617763,0,76502 2 0164
+u 588224,480480,0,71520 0 0165
+v 524160,480480,0,118144 0 0166
+w 780416,480480,0,118144 0 0167
+x 524160,480480,0,98925 0 0170
+y 524160,480480,203840,118144 1 0171
+z 499408,480480,0,96013 0 0172
+lC 576576,782600,262080,140910 3 0173
+{ "
+ba 320320,782600,262080,82670 3 0174
+bv "
+or "
+| "
+rC 576576,782600,262080,29498 3 0175
+} "
+~ 704704,755976,0,96379 2 0176
+hy 192192,480480,0,19032 0 0177
+--- 768768,946400 2 0200
+--- 768768,728000,203840 3 0201
+'C 736736,905917,0,122707 2 0202
+--- 736736,946400,0,122707,-78454,61354 2 0203
+--- 832832,946400,0,76286,0,44254 2 0204
+--- 672672,946400,0,122707,0,61354 2 0205
+--- 672672,728000,203840,122707 3 0206
+--- 768768,946400,0,122707,-78454,61354 2 0207
+--- 608608,905917,0,0,0,64064 2 0210
+--- 608608,946400,0,0,0,64064 2 0211
+/L 704704,728000 2 0212
+--- 832832,905917,0,90675 2 0213
+--- 832832,946400,0,90675,0,13306 2 0214
+--- 864864,728000,0,154739,0,45338 2 0215
+--- 832832,905917,0,76286,-78454,44254 2 0216
+--- 736736,905917,0,84022,0,63018 2 0217
+--- 736736,946400,0,84022,0,63018 2 0220
+--- 640640,905917,0,90675 2 0221
+vS 640640,946400,0,90675,0,45338 2 0222
+--- 640640,728000,178360,90675,0,45338 3 0223
+--- 768768,946400,0,138723,-116054,-21437 2 0224
+--- 768768,728000,178360,138723,-116054,-21437 3 0225
+--- 800800,905917,0,90675,-78454,13306 2 0226
+--- 800800,946400,0,90675,-78454,13306 2 0227
+:Y 768768,946400,0,183568,-122707,-72688 2 0230
+--- 704704,905917,0,122707 2 0231
+vZ 704704,946400,0,122707,0,61354 2 0232
+--- 704704,905917,0,122707 2 0233
+IJ 853216,728000,0,90675,0,13306 2 0234
+--- 340704,905917,0,138723,0,69362 2 0235
+--- 588224,755976,0,130354 2 0236
+sc 559104,755976,203840 3 0237
+--- 550368,698880,0,40605 2 0240
+--- 550368,480480,203840,40605 1 0241
+'c 512512,698880,0,89315 2 0242
+--- 512512,698880,0,89315 2 0243
+--- 767312,755976,0,130354 2 0244
+--- 535808,698880,0,78917 2 0245
+--- 535808,480480,203840,78917 1 0246
+--- 576576,698880,203840,118144 3 0247
+--- 267904,905917,0,130354 2 0250
+--- 446992,755976,0,130354 2 0251
+/l 399818,755976,0,130354 2 0252
+--- 588224,698880,0,48341 2 0253
+--- 588224,698880,0,48341 2 0254
+--- 588224,480480,203840,48341 1 0255
+--- 576576,698880,0,71520 2 0256
+--- 390208,698880,0,118144 2 0257
+--- 390208,698880,0,118144 2 0260
+--- 442042,698880,0,82909 2 0261
+vs 442042,698880,0,82909 2 0262
+--- 442042,480480,178360,82909 1 0263
+--- 423696,755976,0,135304 2 0264
+--- 423696,617763,178360,76502 3 0265
+--- 588224,698880,0,71520 2 0266
+--- 588224,698880,0,71520 2 0267
+:y 524160,728000,203840,118144 3 0270
+--- 499408,698880,0,96013 2 0271
+vz 499408,698880,0,96013 2 0272
+--- 499408,755976,0,96013 2 0273
+ij 620256,755976,203840,133266 3 0274
+r! 384384,553280,203840,25874 3 0275
+r? 544544,553280,203840 3 0276
+Po 857434,755976 2 0277
+`A 768768,905917 2 0300
+'A 768768,905917,0,16302 2 0301
+^A 768768,946400 2 0302
+~A 768768,946400 2 0303
+:A 768768,946400 2 0304
+oA 768768,905917 2 0305
+AE 992992,728000,0,122707 2 0306
+,C 736736,728000,178360,122707,-78454,61354 3 0307
+`E 672672,905917,0,122707,0,61354 2 0310
+'E 672672,905917,0,122707,0,61354 2 0311
+^E 672672,946400,0,122707,0,61354 2 0312
+:E 672672,946400,0,122707 2 0313
+`I 340704,905917,0,138723,0,69362 2 0314
+'I 340704,905917,0,138723,0,69362 2 0315
+^I 340704,946400,0,138723,0,69362 2 0316
+:I 340704,946400,0,138723,0,69362 2 0317
+-D 832832,728000,0,76286,0,44254 2 0320
+~N 832832,946400,0,90675,0,13306 2 0321
+`O 832832,905917,0,76286,-78454,44254 2 0322
+'O 832832,905917,0,76286 2 0323
+^O 832832,946400,0,76286,-78454,44254 2 0324
+~O 832832,946400,0,76286,-78454,44254 2 0325
+:O 832832,946400,0,76286,-78454,44254 2 0326
+OE 1121120,728000,0,122707 2 0327
+/O 896896,782600,50960,76286 3 0330
+`U 800800,905917,0,90675,-78454,13306 2 0331
+'U 800800,905917,0,90675 2 0332
+^U 800800,946400,0,90675,-78454,13306 2 0333
+:U 800800,946400,0,90675,-78454,13306 2 0334
+'Y 768768,905917,0,183568,-122707,-72688 2 0335
+TP 672672,728000,0,84022,0,42011 2 0336
+--- 1281280,728000,0,90675,0,45338 2 0337
+`a 550368,698880,0,40605 2 0340
+'a 550368,698880,0,40605 2 0341
+^a 550368,698880,0,40605 2 0342
+~a 550368,698880,0,40605 2 0343
+:a 550368,728000,0,40605 2 0344
+oa 550368,698880,0,40605 2 0345
+ae 832832,480480,0,78917 0 0346
+,c 512512,480480,178360,89315 1 0347
+`e 535808,698880,0,78917 2 0350
+'e 535808,698880,0,78917 2 0351
+^e 535808,698880,0,78917 2 0352
+:e 535808,728000,0,78917 2 0353
+`i 267904,698880,0,117974 2 0354
+'i 267904,698880,0,117974 2 0355
+^i 267904,698880,0,117974 2 0356
+:i 331968,728000,0,117974 2 0357
+Sd 576576,755976,0,102128 2 0360
+~n 588224,698880,0,48341 2 0361
+`o 576576,698880,0,71520 2 0362
+'o 576576,698880,0,71520 2 0363
+^o 576576,698880,0,71520 2 0364
+~o 576576,698880,0,71520 2 0365
+:o 576576,728000,0,71520 2 0366
+oe 896896,480480,0,78917 0 0367
+/o 576576,582400,101920,34802 3 0370
+`u 588224,698880,0,71520 2 0371
+'u 588224,698880,0,71520 2 0372
+^u 588224,698880,0,71520 2 0373
+:u 588224,728000,0,71520 2 0374
+'y 524160,698880,203840,118144 3 0375
+Tp 588224,755976,203840,44658 3 0376
+ss 592592,755976,0,96866 2 0377
diff --git a/contrib/groff/font/devdvi/HBITC b/contrib/groff/font/devdvi/HBITC
new file mode 100644
index 0000000..26167ca
--- /dev/null
+++ b/contrib/groff/font/devdvi/HBITC
@@ -0,0 +1,139 @@
+name HBITC
+special
+internalname tcso1000
+spacewidth 384384
+slant 11.999911
+checksum 220072497
+designsize 10485760
+charset
+--- 576576,660915 2 0000
+--- 576576,660915,0,76549 2 0001
+--- 576576,698880,0,51541 2 0002
+--- 576576,698880,0,84486 2 0003
+--- 576576,698880 2 0004
+--- 576576,660915,0,76549 2 0005
+--- 800800,698880 2 0006
+--- 576576,698880 2 0007
+--- 576576,698880,0,90310 2 0010
+--- 576576,698880,0,100502 2 0011
+--- 320320,660915 2 0012
+--- 512512,0,178360 1 0013
+--- 320320,0,203840 1 0014
+--- 448448,137072,203840 1 0015
+--- 576576,137072,203840 1 0022
+--- 768768,483392,0,95150 2 0025
+--- 864864,483392,0,95150 2 0026
+--- 0,728000 2 0027
+<- 1153152,425880,-98280 0 0030
+-> 1153152,425880,-98280 0 0031
+--- 267904,757120,0,487894 2 0032
+--- 352352,1004640,0,543309 2 0033
+--- 524160,757120,0,487894 2 0034
+--- 524160,757120,0,543309 2 0035
+--- 0,757120 2 0037
+--- 588224,757120,0,35048 2 0040
+Do 576576,786240,29120,122707 3 0044
+$ "
+aq 320320,757120,0,104146 2 0047
+** 576576,502320,-21840 2 0052
+, 320320,137072,110656 1 0054
+--- 384384,425880,-98280,58491 0 0055
+. 320320,137072 0 0056
+f/ 576576,786240,262080,135086 3 0057
+0 576576,483392,0,58677 2 0060
+1 576576,483392 2 0061
+2 576576,483392,0,56077 2 0062
+3 576576,483392,203840,56077 3 0063
+4 576576,483392,203840,13312 3 0064
+5 576576,483392,203840,38064 3 0065
+6 576576,728000,0,90675 2 0066
+7 576576,483392,203840,102128 3 0067
+8 576576,728000,0,90675 2 0070
+9 576576,483392,203840,38064 3 0071
+la 448448,786240,262080 3 0074
+mi 896896,646464,122304,23674 3 0075
+\- "
+ra 448448,786240,262080 3 0076
+--- 832832,728000,0,132317,0,66158 2 0115
+ci 1281280,786240,262080 3 0117
+--- 832832,728000,0,84022,0,42011 2 0127
+--- 464464,786240,262080 3 0133
+--- 464464,786240,262080 3 0135
+ua 576576,757120,232960,96098 3 0136
+da 576576,757120,232960 3 0137
+--- 576576,757120 2 0140
+--- 576576,502320,-21840 2 0142
+--- 576576,502320,-21840 2 0143
+--- 576576,660915,27666 3 0144
+--- 1153152,757120 2 0154
+--- 576576,502320,-21840 2 0155
+--- 704704,757120 2 0156
+ti 704704,137072 0 0176
+~ "
+--- 192192,425880,-98280,58491 0 0177
+--- 704704,757120,0,102690 2 0200
+--- 704704,757120,0,79394 2 0201
+--- 576576,757120,0,96866 2 0202
+--- 576576,757120 2 0203
+dg 512512,757120,203840 3 0204
+dd 512512,757120,203840 3 0205
+--- 576576,786240,262080 3 0206
+%O 1463224,786240,29120,32339 3 0207
+bu 576576,483392,-37856 2 0210
+--- 992992,728000,0,122707,-78454,61354 2 0211
+--- 704704,786240,29120,122707 3 0212
+--- 576576,582400,101920,89315 3 0213
+Fn 352352,757120,0,241010 2 0214
+--- 736736,786240,29120,122707,-78454,61354 3 0215
+--- 1089088,728000,0,170755,-106691,10595 2 0216
+--- 864864,728000,0,90675,0,13306 2 0217
+--- 896896,786240,29120,122707,-78454,61354 3 0220
+--- 752752,728000,0,84022,0,-76138 2 0221
+--- 857434,757120 2 0222
+--- 736736,728000,0,84022,0,63018 2 0223
+--- 544544,757120,0,128744 2 0224
+--- 544544,553280,203840 3 0225
+--- 588224,786240,0,130354 2 0226
+tm 768768,786240,0,550366 2 0227
+--- 2088494,786240,29120,32339 3 0230
+--- 544544,757120,203840 3 0231
+--- 768768,786240,29120,84022,0,42011 3 0232
+--- 960960,728000,0,90675,0,13306 2 0233
+--- 576576,786240,0,135086 2 0234
+--- 794976,728000,0,117602 2 0235
+--- 576576,483392,-37856 2 0236
+--- 768768,786240,0,550366 2 0237
+--- 416416,786240,262080,29498 3 0240
+--- 416416,786240,262080,140910 3 0241
+ct 576576,582400,101920,89315 3 0242
+Po 857434,757120 2 0243
+Cs 826203,617763,0,102128 2 0244
+Ye 768768,728000,0,183568 2 0245
+bb 192192,786240,262080,103054 3 0246
+sc 559104,757120,203840 3 0247
+--- 576576,757120,0,91042 2 0250
+co 1281280,786240,262080 3 0251
+Of 512512,786240,0,116982 2 0252
+--- 1281280,786240,262080 3 0253
+no 768768,483392,0,70096 2 0254
+--- 1281280,786240,262080 3 0255
+rg 1281280,786240,262080 3 0256
+rn 896896,757120 2 0257
+de 384384,728000 2 0260
+t+- 896896,646464,122304,23674 3 0261
+S2 512512,786240,0,135086 2 0262
+S3 512512,786240,0,135086 2 0263
+--- 576576,757120,0,96866 2 0264
+mc 588224,483392,203840,71552 3 0265
+ps 704704,757120,203840 3 0266
+pc 235872,483392 2 0267
+--- 700819,572691,0,19032 2 0270
+S1 512512,786240,0,135086 2 0271
+Om 512512,786240,0,116982 2 0272
+--- 544544,786240,174720,167118 3 0273
+14 512512,786240,203840,135086 3 0274
+12 512512,786240,203840,135086 3 0275
+34 512512,786240,203840,135086 3 0276
+Eu 896896,728000,0,122707 2 0277
+tmu 896896,646464,122304,23674 3 0326
+tdi 896896,646464,122304,23674 3 0366
diff --git a/contrib/groff/font/devdvi/HBTC b/contrib/groff/font/devdvi/HBTC
new file mode 100644
index 0000000..9844258
--- /dev/null
+++ b/contrib/groff/font/devdvi/HBTC
@@ -0,0 +1,138 @@
+name HBTC
+special
+internalname tcsx1000
+spacewidth 384384
+checksum -1912309847
+designsize 10485760
+charset
+--- 576576,660915 2 0000
+--- 576576,660915 2 0001
+--- 576576,698880 2 0002
+--- 576576,698880 2 0003
+--- 576576,698880 2 0004
+--- 576576,660915,0,61907 2 0005
+--- 800800,698880 2 0006
+--- 576576,698880 2 0007
+--- 576576,698880 2 0010
+--- 576576,698880 2 0011
+--- 320320,660915 2 0012
+--- 512512,0,178360 1 0013
+--- 320320,0,203840 1 0014
+--- 448448,137072,203840 1 0015
+--- 576576,137072,203840 1 0022
+--- 768768,483392,0,32032 2 0025
+--- 864864,483392,0,32032 2 0026
+--- 0,728000 2 0027
+<- 1153152,425880,-98280 0 0030
+-> 1153152,425880,-98280 0 0031
+--- 267904,757120,0,359632 2 0032
+--- 352352,1004640,0,391664 2 0033
+--- 524160,757120,0,359632 2 0034
+--- 524160,757120,0,391664 2 0035
+--- 0,757120 2 0037
+--- 588224,757120 2 0040
+Do 576576,786240,29120 3 0044
+$ "
+aq 320320,757120 2 0047
+** 576576,502320,-21840 2 0052
+, 320320,137072,110656 1 0054
+--- 384384,425880,-98280 0 0055
+. 320320,137072 0 0056
+f/ 576576,786240,262080 3 0057
+0 576576,483392 2 0060
+1 576576,483392 2 0061
+2 576576,483392 2 0062
+3 576576,483392,203840 3 0063
+4 576576,483392,203840 3 0064
+5 576576,483392,203840 3 0065
+6 576576,728000 2 0066
+7 576576,483392,203840 3 0067
+8 576576,728000 2 0070
+9 576576,483392,203840 3 0071
+la 448448,786240,262080 3 0074
+mi 896896,646464,122304 3 0075
+\- "
+ra 448448,786240,262080 3 0076
+--- 832832,728000 2 0115
+ci 1281280,786240,262080 3 0117
+--- 832832,728000 2 0127
+--- 464464,786240,262080 3 0133
+--- 464464,786240,262080 3 0135
+ua 576576,757120,232960 3 0136
+da 576576,757120,232960 3 0137
+--- 576576,757120 2 0140
+--- 576576,502320,-21840 2 0142
+--- 576576,502320,-21840 2 0143
+--- 576576,660915,27666 3 0144
+--- 1153152,757120 2 0154
+--- 576576,502320,-21840 2 0155
+--- 704704,757120 2 0156
+ti 704704,137072 0 0176
+~ "
+--- 192192,425880,-98280 0 0177
+--- 704704,757120 2 0200
+--- 704704,757120 2 0201
+--- 576576,757120 2 0202
+--- 576576,757120 2 0203
+dg 512512,757120,203840 3 0204
+dd 512512,757120,203840 3 0205
+--- 576576,786240,262080 3 0206
+%O 1463224,786240,29120 3 0207
+bu 576576,483392,-37856 2 0210
+--- 992992,728000,0,0,-32032 2 0211
+--- 704704,786240,29120 3 0212
+--- 576576,582400,101920 3 0213
+Fn 352352,757120,0,80080 2 0214
+--- 736736,786240,29120,0,-32032 3 0215
+--- 1089088,728000,0,16016,48048,-144144 2 0216
+--- 864864,728000 2 0217
+--- 896896,786240,29120,0,-32032 3 0220
+--- 752752,728000,0,0,0,-160160 2 0221
+--- 736736,757120 2 0222
+--- 736736,728000 2 0223
+--- 544544,757120 2 0224
+--- 544544,553280,203840 3 0225
+--- 588224,786240 2 0226
+tm 768768,786240,0,550366 2 0227
+--- 2088494,786240,29120 3 0230
+--- 544544,757120,203840 3 0231
+--- 768768,786240,29120 3 0232
+--- 960960,728000 2 0233
+--- 576576,786240 2 0234
+--- 794976,728000 2 0235
+--- 576576,483392,-37856 2 0236
+--- 768768,786240,0,550366 2 0237
+--- 416416,786240,262080 3 0240
+--- 416416,786240,262080 3 0241
+ct 576576,582400,101920 3 0242
+Po 736736,757120 2 0243
+Cs 826203,617763 2 0244
+Ye 768768,728000,0,28829 2 0245
+bb 192192,786240,262080 3 0246
+sc 559104,757120,203840 3 0247
+--- 576576,757120 2 0250
+co 1281280,786240,262080 3 0251
+Of 512512,786240 2 0252
+--- 1281280,786240,262080 3 0253
+no 768768,483392 2 0254
+--- 1281280,786240,262080 3 0255
+rg 1281280,786240,262080 3 0256
+rn 896896,757120 2 0257
+de 384384,728000 2 0260
+t+- 896896,646464,122304 3 0261
+S2 512512,786240 2 0262
+S3 512512,786240 2 0263
+--- 576576,757120 2 0264
+mc 588224,483392,203840 3 0265
+ps 704704,757120,203840 3 0266
+pc 235872,483392 2 0267
+--- 700819,572691 2 0270
+S1 512512,786240 2 0271
+Om 512512,786240 2 0272
+--- 544544,786240,174720 3 0273
+14 512512,786240,203840 3 0274
+12 512512,786240,203840 3 0275
+34 512512,786240,203840 3 0276
+Eu 896896,728000 2 0277
+tmu 896896,646464,122304 3 0326
+tdi 896896,646464,122304 3 0366
diff --git a/contrib/groff/font/devdvi/HI b/contrib/groff/font/devdvi/HI
index 4f96bdb..f98081e 100644
--- a/contrib/groff/font/devdvi/HI
+++ b/contrib/groff/font/devdvi/HI
@@ -173,27 +173,19 @@ Fl 853427,728178,0,99435 2 0017
.i 250494,466034,0,43715 0 0020
.j 279622,466034,203890,43715 1 0021
ga 524290,728178 2 0022
-char180 524290,728178,0,96523 2 0023
-aa "
+aa 524290,728178,0,96523 2 0023
ah 524290,662642,0,88419 2 0024
ab 524290,728178,0,99435 2 0025
-char175 524290,638464,0,92018 2 0026
-a- "
+a- 524290,638464,0,92018 2 0026
ao 773347,728178 2 0027
-char184 466035,0,178403 1 0030
-ac "
-char223 503902,728178,0,96523 2 0031
-ss "
-char230 757307,466034,0,71070 0 0032
-ae "
+ac 466035,0,178403 1 0030
+ss 503902,728178,0,96523 2 0031
+ae 757307,466034,0,71070 0 0032
oe 815562,466034,0,71070 0 0033
-char248 524290,567979,101946,50821 3 0034
-/o "
-char198 902944,728178,0,125650 2 0035
-AE "
+/o 524290,567979,101946,50821 3 0034
+AE 902944,728178,0,125650 2 0035
OE 1019453,728178,0,125650 2 0036
-char216 815562,779150,50973,79216 3 0037
-/O "
+/O 815562,779150,50973,79216 3 0037
--- 250494,466034 0 0040
! 334963,728178,0,60114 2 0041
rq 524290,728178,0,3315 2 0042
@@ -210,8 +202,7 @@ cq 291272,728178,0,81960 2 0047
* 524290,786432,0,123469 2 0052
+ 815562,611670,87382,26592 3 0053
, 291272,87381,131072 1 0054
-char173 349526,466034,0,20402 0 0055
-hy "
+hy 349526,466034,0,20402 0 0055
- "
. 291272,87381 0 0056
sl 524290,786432,262144,138032 3 0057
@@ -228,11 +219,9 @@ sl 524290,786432,262144,138032 3 0057
9 524290,687400,0,116982 2 0071
: 291272,466034,0,26240 0 0072
; 291272,466034,131072,26240 1 0073
-char161 334963,524288,203890,16776 3 0074
-r! "
+r! 334963,524288,203890,16776 3 0074
= 815562,387973,-136315,53338 0 0075
-char191 495163,524288,203890 3 0076
-r? "
+r? 495163,524288,203890 3 0076
? 495163,728178,0,123822 2 0077
at 699053,728178,0,79216 2 0100
@ "
@@ -304,5 +293,4 @@ em 1048579,466034,0,90349 0 0174
a" 524290,728178,0,96523 2 0175
~ 524290,709454,0,92544 2 0176
a~ "
-char168 524290,712366,0,66949 2 0177
-ad "
+ad 524290,712366,0,66949 2 0177
diff --git a/contrib/groff/font/devdvi/HIEC b/contrib/groff/font/devdvi/HIEC
new file mode 100644
index 0000000..ef1a129
--- /dev/null
+++ b/contrib/groff/font/devdvi/HIEC
@@ -0,0 +1,1579 @@
+name HIEC
+internalname ecsi1000
+spacewidth 349440
+slant 11.999911
+ligatures ff fi fl ffi ffl 0
+checksum -132433781
+designsize 10485760
+kernpairs
+bq Bq 116480
+bq j 116480
+bq .j 116480
+bq g 58240
+bq y 58240
+bq :y 58240
+bq 'y 58240
+bq v -87360
+bq w -58240
+bq V -116480
+bq W -87360
+bq Y -87360
+bq :Y -87360
+bq 'Y -87360
+bq O -29120
+bq `O -29120
+bq 'O -29120
+bq ^O -29120
+bq ~O -29120
+bq :O -29120
+bq OE -29120
+bq /O -29120
+bq C -29120
+bq G -29120
+bq 'C -29120
+bq ,C -29120
+bq Q -29120
+lq oq 116480
+lq ` 116480
+lq lq 116480
+rq cq 116480
+rq ' 116480
+rq rq 116480
+Bq bq 116480
+Bq , 116480
+Bq Bq 116480
+Bq j 116480
+Bq .j 116480
+Bq g 58240
+Bq y 58240
+Bq :y 58240
+Bq 'y 58240
+Bq v -87360
+Bq w -58240
+Bq V -116480
+Bq W -87360
+Bq Y -87360
+Bq :Y -87360
+Bq 'Y -87360
+Bq O -29120
+Bq `O -29120
+Bq 'O -29120
+Bq ^O -29120
+Bq ~O -29120
+Bq :O -29120
+Bq OE -29120
+Bq /O -29120
+Bq C -29120
+Bq G -29120
+Bq 'C -29120
+Bq ,C -29120
+Bq Q -29120
+Fc . -87360
+Fc , -87360
+ff cq 72800
+ff ' 72800
+ff oq 72800
+ff ` 72800
+ff lq 72800
+ff rq 72800
+ff ? 72800
+ff ! 72800
+ff ) 72800
+ff rB 72800
+ff ] 72800
+cq rq 116480
+' rq 116480
+cq ? 116480
+' ? 116480
+cq ! 116480
+' ! 116480
+A y -29120
+A :y -29120
+A 'y -29120
+A v -29120
+A w -29120
+A c -29120
+A 'c -29120
+A ,c -29120
+A d -29120
+A Sd -29120
+A e -29120
+A `e -29120
+A 'e -29120
+A ^e -29120
+A :e -29120
+A o -29120
+A `o -29120
+A 'o -29120
+A ^o -29120
+A ~o -29120
+A :o -29120
+A oe -29120
+A /o -29120
+A q -29120
+A t -29120
+A C -29120
+A G -29120
+A 'C -29120
+A ,C -29120
+A Q -29120
+A O -29120
+A `O -29120
+A 'O -29120
+A ^O -29120
+A ~O -29120
+A :O -29120
+A OE -29120
+A /O -29120
+A U -29120
+A `U -29120
+A 'U -29120
+A ^U -29120
+A :U -29120
+A T -87360
+A Y -87360
+A :Y -87360
+A 'Y -87360
+A V -116480
+A W -116480
+D X -29120
+D W -29120
+D A -29120
+D `A -29120
+D 'A -29120
+D ^A -29120
+D ~A -29120
+D :A -29120
+D oA -29120
+D AE -29120
+D V -29120
+D Y -29120
+D :Y -29120
+D 'Y -29120
+F o -29120
+F a -29120
+F e -29120
+F y -29120
+F u -29120
+F r -29120
+F v -29120
+F s -29120
+F c -29120
+F d -29120
+F g -29120
+F m -29120
+F n -29120
+F p -29120
+F w -29120
+F z -29120
+F ae -29120
+F /o -29120
+F A -87360
+F `A -87360
+F 'A -87360
+F ^A -87360
+F ~A -87360
+F :A -87360
+F oA -87360
+F AE -87360
+F O -29120
+F `O -29120
+F 'O -29120
+F ^O -29120
+F ~O -29120
+F :O -29120
+F OE -29120
+F /O -29120
+F C -29120
+F G -29120
+F 'C -29120
+F ,C -29120
+F Q -29120
+I I 29120
+K v -29120
+K o -29120
+K `o -29120
+K 'o -29120
+K ^o -29120
+K ~o -29120
+K :o -29120
+K oe -29120
+K /o -29120
+K C -29120
+K G -29120
+K 'C -29120
+K ,C -29120
+K Q -29120
+L T -87360
+L Y -87360
+L :Y -87360
+L 'Y -87360
+L V -116480
+L W -116480
+O X -29120
+O W -29120
+O A -29120
+O `A -29120
+O 'A -29120
+O ^A -29120
+O ~A -29120
+O :A -29120
+O oA -29120
+O AE -29120
+O V -29120
+O Y -29120
+O :Y -29120
+O 'Y -29120
+P A -87360
+P `A -87360
+P 'A -87360
+P ^A -87360
+P ~A -87360
+P :A -87360
+P oA -87360
+P AE -87360
+P o -29120
+P `o -29120
+P 'o -29120
+P ^o -29120
+P ~o -29120
+P :o -29120
+P oe -29120
+P /o -29120
+P e -29120
+P `e -29120
+P 'e -29120
+P ^e -29120
+P :e -29120
+P a -29120
+P `a -29120
+P 'a -29120
+P ^a -29120
+P ^a -29120
+P ~a -29120
+P :a -29120
+P oa -29120
+P ae -29120
+P . -87360
+P , -87360
+T y -87360
+T e -87360
+T o -87360
+T r -87360
+T a -87360
+T u -87360
+T n -87360
+T .i -87360
+T c -87360
+T d -87360
+T g -87360
+T p -87360
+T s -87360
+T v -87360
+T w -87360
+T x -87360
+T z -87360
+T A -87360
+T `A -87360
+T 'A -87360
+T ^A -87360
+T ~A -87360
+T :A -87360
+T oA -87360
+T AE -87360
+V o -29120
+V a -29120
+V e -29120
+V y -29120
+V u -29120
+V r -29120
+V v -29120
+V s -29120
+V c -29120
+V d -29120
+V g -29120
+V m -29120
+V n -29120
+V p -29120
+V w -29120
+V z -29120
+V ae -29120
+V /o -29120
+V A -87360
+V `A -87360
+V 'A -87360
+V ^A -87360
+V ~A -87360
+V :A -87360
+V oA -87360
+V AE -87360
+V O -29120
+V `O -29120
+V 'O -29120
+V ^O -29120
+V ~O -29120
+V :O -29120
+V OE -29120
+V /O -29120
+V C -29120
+V G -29120
+V 'C -29120
+V ,C -29120
+V Q -29120
+W o -29120
+W a -29120
+W e -29120
+W y -29120
+W u -29120
+W r -29120
+W v -29120
+W s -29120
+W c -29120
+W d -29120
+W g -29120
+W m -29120
+W n -29120
+W p -29120
+W w -29120
+W z -29120
+W ae -29120
+W /o -29120
+W A -87360
+W `A -87360
+W 'A -87360
+W ^A -87360
+W ~A -87360
+W :A -87360
+W oA -87360
+W AE -87360
+W O -29120
+W `O -29120
+W 'O -29120
+W ^O -29120
+W ~O -29120
+W :O -29120
+W OE -29120
+W /O -29120
+W C -29120
+W G -29120
+W 'C -29120
+W ,C -29120
+W Q -29120
+X O -29120
+X `O -29120
+X 'O -29120
+X ^O -29120
+X ~O -29120
+X :O -29120
+X OE -29120
+X /O -29120
+X C -29120
+X G -29120
+X 'C -29120
+X ,C -29120
+X Q -29120
+Y e -87360
+Y o -87360
+Y r -87360
+Y a -87360
+Y u -87360
+Y n -87360
+Y .i -87360
+Y c -87360
+Y d -87360
+Y g -87360
+Y p -87360
+Y s -87360
+Y v -87360
+Y w -87360
+Y x -87360
+Y z -87360
+Y A -87360
+Y `A -87360
+Y 'A -87360
+Y ^A -87360
+Y ~A -87360
+Y :A -87360
+Y oA -87360
+Y AE -87360
+oq lq 116480
+` lq 116480
+oq ? 116480
+` ? 116480
+oq ! 116480
+` ! 116480
+a r -29120
+a y -29120
+a :y -29120
+a 'y -29120
+a w -29120
+b e 29120
+b `e 29120
+b 'e 29120
+b ^e 29120
+b :e 29120
+b o 29120
+b `o 29120
+b 'o 29120
+b ^o 29120
+b ~o 29120
+b :o 29120
+b oe 29120
+b /o 29120
+b x -29120
+b d 29120
+b c 29120
+b 'c 29120
+b ,c 29120
+b q 29120
+b r -29120
+b y -29120
+b :y -29120
+b 'y -29120
+b w -29120
+e V -87360
+f cq 72800
+f ' 72800
+f oq 72800
+f ` 72800
+f lq 72800
+f rq 72800
+f ? 72800
+f ! 72800
+f ) 72800
+f rB 72800
+f ] 72800
+g j 29120
+k W -87360
+k V -87360
+k e -29120
+k `e -29120
+k 'e -29120
+k ^e -29120
+k :e -29120
+k a -29120
+k `a -29120
+k 'a -29120
+k ^a -29120
+k ^a -29120
+k ~a -29120
+k :a -29120
+k oa -29120
+k ae -29120
+k o -29120
+k `o -29120
+k 'o -29120
+k ^o -29120
+k ~o -29120
+k :o -29120
+k oe -29120
+k /o -29120
+k c -29120
+k 'c -29120
+k ,c -29120
+o e 29120
+o `e 29120
+o 'e 29120
+o ^e 29120
+o :e 29120
+o o 29120
+o `o 29120
+o 'o 29120
+o ^o 29120
+o ~o 29120
+o :o 29120
+o oe 29120
+o /o 29120
+o x -29120
+o d 29120
+o c 29120
+o 'c 29120
+o ,c 29120
+o q 29120
+o r -29120
+o y -29120
+o :y -29120
+o 'y -29120
+o w -29120
+p e 29120
+p `e 29120
+p 'e 29120
+p ^e 29120
+p :e 29120
+p o 29120
+p `o 29120
+p 'o 29120
+p ^o 29120
+p ~o 29120
+p :o 29120
+p oe 29120
+p /o 29120
+p x -29120
+p d 29120
+p c 29120
+p 'c 29120
+p ,c 29120
+p q 29120
+p r -29120
+p y -29120
+p :y -29120
+p 'y -29120
+p w -29120
+t y -29120
+t :y -29120
+t 'y -29120
+t w -29120
+u w -29120
+w e -29120
+w `e -29120
+w 'e -29120
+w ^e -29120
+w :e -29120
+w a -29120
+w `a -29120
+w 'a -29120
+w ^a -29120
+w ^a -29120
+w ~a -29120
+w :a -29120
+w oa -29120
+w ae -29120
+w o -29120
+w `o -29120
+w 'o -29120
+w ^o -29120
+w ~o -29120
+w :o -29120
+w oe -29120
+w /o -29120
+w c -29120
+w 'c -29120
+w ,c -29120
+y o -29120
+y `o -29120
+y 'o -29120
+y ^o -29120
+y ~o -29120
+y :o -29120
+y oe -29120
+y /o -29120
+y e -29120
+y `e -29120
+y 'e -29120
+y ^e -29120
+y :e -29120
+y a -29120
+y `a -29120
+y 'a -29120
+y ^a -29120
+y ^a -29120
+y ~a -29120
+y :a -29120
+y oa -29120
+y ae -29120
+y . -87360
+y , -87360
+'C v -29120
+'C w -29120
+'C c -29120
+'C 'c -29120
+'C ,c -29120
+'C d -29120
+'C Sd -29120
+'C e -29120
+'C `e -29120
+'C 'e -29120
+'C ^e -29120
+'C :e -29120
+'C o -29120
+'C `o -29120
+'C 'o -29120
+'C ^o -29120
+'C ~o -29120
+'C :o -29120
+'C oe -29120
+'C /o -29120
+'C q -29120
+'C t -29120
+'C C -29120
+'C G -29120
+'C 'C -29120
+'C ,C -29120
+'C Q -29120
+'C O -29120
+'C `O -29120
+'C 'O -29120
+'C ^O -29120
+'C ~O -29120
+'C :O -29120
+'C OE -29120
+'C /O -29120
+'C U -29120
+'C `U -29120
+'C 'U -29120
+'C ^U -29120
+'C :U -29120
+'C T -87360
+'C Y -87360
+'C :Y -87360
+'C 'Y -87360
+'C V -116480
+'C W -116480
+/L T -87360
+/L Y -87360
+/L :Y -87360
+/L 'Y -87360
+/L V -116480
+/L W -116480
+:Y e -87360
+:Y o -87360
+:Y r -87360
+:Y a -87360
+:Y u -87360
+:Y n -87360
+:Y .i -87360
+:Y c -87360
+:Y d -87360
+:Y g -87360
+:Y p -87360
+:Y s -87360
+:Y v -87360
+:Y w -87360
+:Y x -87360
+:Y z -87360
+:Y A -87360
+:Y `A -87360
+:Y 'A -87360
+:Y ^A -87360
+:Y ~A -87360
+:Y :A -87360
+:Y oA -87360
+:Y AE -87360
+/l cq 29120
+/l ' 29120
+/l a -29120
+/l c -29120
+/l 'c -29120
+/l d -29120
+/l e -29120
+/l g -29120
+/l o -29120
+/l 'o -29120
+/l s -29120
+:y o -29120
+:y `o -29120
+:y 'o -29120
+:y ^o -29120
+:y ~o -29120
+:y :o -29120
+:y oe -29120
+:y /o -29120
+:y e -29120
+:y `e -29120
+:y 'e -29120
+:y ^e -29120
+:y :e -29120
+:y a -29120
+:y `a -29120
+:y 'a -29120
+:y ^a -29120
+:y ^a -29120
+:y ~a -29120
+:y :a -29120
+:y oa -29120
+:y ae -29120
+:y . -87360
+:y , -87360
+`A y -29120
+`A :y -29120
+`A 'y -29120
+`A v -29120
+`A w -29120
+`A c -29120
+`A 'c -29120
+`A ,c -29120
+`A d -29120
+`A Sd -29120
+`A e -29120
+`A `e -29120
+`A 'e -29120
+`A ^e -29120
+`A :e -29120
+`A o -29120
+`A `o -29120
+`A 'o -29120
+`A ^o -29120
+`A ~o -29120
+`A :o -29120
+`A oe -29120
+`A /o -29120
+`A q -29120
+`A t -29120
+`A C -29120
+`A G -29120
+`A 'C -29120
+`A ,C -29120
+`A Q -29120
+`A O -29120
+`A `O -29120
+`A 'O -29120
+`A ^O -29120
+`A ~O -29120
+`A :O -29120
+`A OE -29120
+`A /O -29120
+`A U -29120
+`A `U -29120
+`A 'U -29120
+`A ^U -29120
+`A :U -29120
+`A T -87360
+`A Y -87360
+`A :Y -87360
+`A 'Y -87360
+`A V -116480
+`A W -116480
+'A y -29120
+'A :y -29120
+'A 'y -29120
+'A v -29120
+'A w -29120
+'A c -29120
+'A 'c -29120
+'A ,c -29120
+'A d -29120
+'A Sd -29120
+'A e -29120
+'A `e -29120
+'A 'e -29120
+'A ^e -29120
+'A :e -29120
+'A o -29120
+'A `o -29120
+'A 'o -29120
+'A ^o -29120
+'A ~o -29120
+'A :o -29120
+'A oe -29120
+'A /o -29120
+'A q -29120
+'A t -29120
+'A C -29120
+'A G -29120
+'A 'C -29120
+'A ,C -29120
+'A Q -29120
+'A O -29120
+'A `O -29120
+'A 'O -29120
+'A ^O -29120
+'A ~O -29120
+'A :O -29120
+'A OE -29120
+'A /O -29120
+'A U -29120
+'A `U -29120
+'A 'U -29120
+'A ^U -29120
+'A :U -29120
+'A T -87360
+'A Y -87360
+'A :Y -87360
+'A 'Y -87360
+'A V -116480
+'A W -116480
+^A y -29120
+^A :y -29120
+^A 'y -29120
+^A v -29120
+^A w -29120
+^A c -29120
+^A 'c -29120
+^A ,c -29120
+^A d -29120
+^A Sd -29120
+^A e -29120
+^A `e -29120
+^A 'e -29120
+^A ^e -29120
+^A :e -29120
+^A o -29120
+^A `o -29120
+^A 'o -29120
+^A ^o -29120
+^A ~o -29120
+^A :o -29120
+^A oe -29120
+^A /o -29120
+^A q -29120
+^A t -29120
+^A C -29120
+^A G -29120
+^A 'C -29120
+^A ,C -29120
+^A Q -29120
+^A O -29120
+^A `O -29120
+^A 'O -29120
+^A ^O -29120
+^A ~O -29120
+^A :O -29120
+^A OE -29120
+^A /O -29120
+^A U -29120
+^A `U -29120
+^A 'U -29120
+^A ^U -29120
+^A :U -29120
+^A T -87360
+^A Y -87360
+^A :Y -87360
+^A 'Y -87360
+^A V -116480
+^A W -116480
+~A y -29120
+~A :y -29120
+~A 'y -29120
+~A v -29120
+~A w -29120
+~A c -29120
+~A 'c -29120
+~A ,c -29120
+~A d -29120
+~A Sd -29120
+~A e -29120
+~A `e -29120
+~A 'e -29120
+~A ^e -29120
+~A :e -29120
+~A o -29120
+~A `o -29120
+~A 'o -29120
+~A ^o -29120
+~A ~o -29120
+~A :o -29120
+~A oe -29120
+~A /o -29120
+~A q -29120
+~A t -29120
+~A C -29120
+~A G -29120
+~A 'C -29120
+~A ,C -29120
+~A Q -29120
+~A O -29120
+~A `O -29120
+~A 'O -29120
+~A ^O -29120
+~A ~O -29120
+~A :O -29120
+~A OE -29120
+~A /O -29120
+~A U -29120
+~A `U -29120
+~A 'U -29120
+~A ^U -29120
+~A :U -29120
+~A T -87360
+~A Y -87360
+~A :Y -87360
+~A 'Y -87360
+~A V -116480
+~A W -116480
+:A y -29120
+:A :y -29120
+:A 'y -29120
+:A v -29120
+:A w -29120
+:A c -29120
+:A 'c -29120
+:A ,c -29120
+:A d -29120
+:A Sd -29120
+:A e -29120
+:A `e -29120
+:A 'e -29120
+:A ^e -29120
+:A :e -29120
+:A o -29120
+:A `o -29120
+:A 'o -29120
+:A ^o -29120
+:A ~o -29120
+:A :o -29120
+:A oe -29120
+:A /o -29120
+:A q -29120
+:A t -29120
+:A C -29120
+:A G -29120
+:A 'C -29120
+:A ,C -29120
+:A Q -29120
+:A O -29120
+:A `O -29120
+:A 'O -29120
+:A ^O -29120
+:A ~O -29120
+:A :O -29120
+:A OE -29120
+:A /O -29120
+:A U -29120
+:A `U -29120
+:A 'U -29120
+:A ^U -29120
+:A :U -29120
+:A T -87360
+:A Y -87360
+:A :Y -87360
+:A 'Y -87360
+:A V -116480
+:A W -116480
+oA y -29120
+oA :y -29120
+oA 'y -29120
+oA v -29120
+oA w -29120
+oA c -29120
+oA 'c -29120
+oA ,c -29120
+oA d -29120
+oA Sd -29120
+oA e -29120
+oA `e -29120
+oA 'e -29120
+oA ^e -29120
+oA :e -29120
+oA o -29120
+oA `o -29120
+oA 'o -29120
+oA ^o -29120
+oA ~o -29120
+oA :o -29120
+oA oe -29120
+oA /o -29120
+oA q -29120
+oA t -29120
+oA C -29120
+oA G -29120
+oA 'C -29120
+oA ,C -29120
+oA Q -29120
+oA O -29120
+oA `O -29120
+oA 'O -29120
+oA ^O -29120
+oA ~O -29120
+oA :O -29120
+oA OE -29120
+oA /O -29120
+oA U -29120
+oA `U -29120
+oA 'U -29120
+oA ^U -29120
+oA :U -29120
+oA T -87360
+oA Y -87360
+oA :Y -87360
+oA 'Y -87360
+oA V -116480
+oA W -116480
+-D X -29120
+-D W -29120
+-D A -29120
+-D `A -29120
+-D 'A -29120
+-D ^A -29120
+-D ~A -29120
+-D :A -29120
+-D oA -29120
+-D AE -29120
+-D V -29120
+-D Y -29120
+-D :Y -29120
+-D 'Y -29120
+`O X -29120
+`O W -29120
+`O A -29120
+`O `A -29120
+`O 'A -29120
+`O ^A -29120
+`O ~A -29120
+`O :A -29120
+`O oA -29120
+`O AE -29120
+`O V -29120
+`O Y -29120
+`O :Y -29120
+`O 'Y -29120
+'O X -29120
+'O W -29120
+'O A -29120
+'O `A -29120
+'O 'A -29120
+'O ^A -29120
+'O ~A -29120
+'O :A -29120
+'O oA -29120
+'O AE -29120
+'O V -29120
+'O Y -29120
+'O :Y -29120
+'O 'Y -29120
+^O X -29120
+^O W -29120
+^O A -29120
+^O `A -29120
+^O 'A -29120
+^O ^A -29120
+^O ~A -29120
+^O :A -29120
+^O oA -29120
+^O AE -29120
+^O V -29120
+^O Y -29120
+^O :Y -29120
+^O 'Y -29120
+~O X -29120
+~O W -29120
+~O A -29120
+~O `A -29120
+~O 'A -29120
+~O ^A -29120
+~O ~A -29120
+~O :A -29120
+~O oA -29120
+~O AE -29120
+~O V -29120
+~O Y -29120
+~O :Y -29120
+~O 'Y -29120
+:O X -29120
+:O W -29120
+:O A -29120
+:O `A -29120
+:O 'A -29120
+:O ^A -29120
+:O ~A -29120
+:O :A -29120
+:O oA -29120
+:O AE -29120
+:O V -29120
+:O Y -29120
+:O :Y -29120
+:O 'Y -29120
+/O X -29120
+/O W -29120
+/O A -29120
+/O `A -29120
+/O 'A -29120
+/O ^A -29120
+/O ~A -29120
+/O :A -29120
+/O oA -29120
+/O AE -29120
+/O V -29120
+/O Y -29120
+/O :Y -29120
+/O 'Y -29120
+'Y e -87360
+'Y o -87360
+'Y r -87360
+'Y a -87360
+'Y u -87360
+'Y n -87360
+'Y .i -87360
+'Y c -87360
+'Y d -87360
+'Y g -87360
+'Y p -87360
+'Y s -87360
+'Y v -87360
+'Y w -87360
+'Y x -87360
+'Y z -87360
+'Y A -87360
+'Y `A -87360
+'Y 'A -87360
+'Y ^A -87360
+'Y ~A -87360
+'Y :A -87360
+'Y oA -87360
+'Y AE -87360
+`a r -29120
+`a y -29120
+`a :y -29120
+`a 'y -29120
+`a w -29120
+'a r -29120
+'a y -29120
+'a :y -29120
+'a 'y -29120
+'a w -29120
+^a r -29120
+^a y -29120
+^a :y -29120
+^a 'y -29120
+^a w -29120
+~a r -29120
+~a y -29120
+~a :y -29120
+~a 'y -29120
+~a w -29120
+:a r -29120
+:a y -29120
+:a :y -29120
+:a 'y -29120
+:a w -29120
+oa r -29120
+oa y -29120
+oa :y -29120
+oa 'y -29120
+oa w -29120
+`o e 29120
+`o `e 29120
+`o 'e 29120
+`o ^e 29120
+`o :e 29120
+`o o 29120
+`o `o 29120
+`o 'o 29120
+`o ^o 29120
+`o ~o 29120
+`o :o 29120
+`o oe 29120
+`o /o 29120
+`o x -29120
+`o d 29120
+`o c 29120
+`o 'c 29120
+`o ,c 29120
+`o q 29120
+`o r -29120
+`o y -29120
+`o :y -29120
+`o 'y -29120
+`o w -29120
+'o e 29120
+'o `e 29120
+'o 'e 29120
+'o ^e 29120
+'o :e 29120
+'o o 29120
+'o `o 29120
+'o 'o 29120
+'o ^o 29120
+'o ~o 29120
+'o :o 29120
+'o oe 29120
+'o /o 29120
+'o x -29120
+'o d 29120
+'o c 29120
+'o 'c 29120
+'o ,c 29120
+'o q 29120
+'o r -29120
+'o y -29120
+'o :y -29120
+'o 'y -29120
+'o w -29120
+^o e 29120
+^o `e 29120
+^o 'e 29120
+^o ^e 29120
+^o :e 29120
+^o o 29120
+^o `o 29120
+^o 'o 29120
+^o ^o 29120
+^o ~o 29120
+^o :o 29120
+^o oe 29120
+^o /o 29120
+^o x -29120
+^o d 29120
+^o c 29120
+^o 'c 29120
+^o ,c 29120
+^o q 29120
+^o r -29120
+^o y -29120
+^o :y -29120
+^o 'y -29120
+^o w -29120
+~o e 29120
+~o `e 29120
+~o 'e 29120
+~o ^e 29120
+~o :e 29120
+~o o 29120
+~o `o 29120
+~o 'o 29120
+~o ^o 29120
+~o ~o 29120
+~o :o 29120
+~o oe 29120
+~o /o 29120
+~o x -29120
+~o d 29120
+~o c 29120
+~o 'c 29120
+~o ,c 29120
+~o q 29120
+~o r -29120
+~o y -29120
+~o :y -29120
+~o 'y -29120
+~o w -29120
+:o e 29120
+:o `e 29120
+:o 'e 29120
+:o ^e 29120
+:o :e 29120
+:o o 29120
+:o `o 29120
+:o 'o 29120
+:o ^o 29120
+:o ~o 29120
+:o :o 29120
+:o oe 29120
+:o /o 29120
+:o x -29120
+:o d 29120
+:o c 29120
+:o 'c 29120
+:o ,c 29120
+:o q 29120
+:o r -29120
+:o y -29120
+:o :y -29120
+:o 'y -29120
+:o w -29120
+/o e 29120
+/o `e 29120
+/o 'e 29120
+/o ^e 29120
+/o :e 29120
+/o o 29120
+/o `o 29120
+/o 'o 29120
+/o ^o 29120
+/o ~o 29120
+/o :o 29120
+/o oe 29120
+/o /o 29120
+/o x -29120
+/o d 29120
+/o c 29120
+/o 'c 29120
+/o ,c 29120
+/o q 29120
+/o r -29120
+/o y -29120
+/o :y -29120
+/o 'y -29120
+/o w -29120
+`u w -29120
+'u w -29120
+^u w -29120
+:u w -29120
+'y o -29120
+'y `o -29120
+'y 'o -29120
+'y ^o -29120
+'y ~o -29120
+'y :o -29120
+'y oe -29120
+'y /o -29120
+'y e -29120
+'y `e -29120
+'y 'e -29120
+'y ^e -29120
+'y :e -29120
+'y a -29120
+'y `a -29120
+'y 'a -29120
+'y ^a -29120
+'y ^a -29120
+'y ~a -29120
+'y :a -29120
+'y oa -29120
+'y ae -29120
+'y . -87360
+'y , -87360
+charset
+ga 524160,669760 2 0000
+aa 524160,669760,0,84120 2 0001
+a^ 524160,669760 2 0002
+a~ 524160,669760,0,84120 2 0003
+ad 524160,689730,0,62688 2 0004
+a" 524160,669760,0,84120 2 0005
+ao 756650,669760 2 0006
+ah 524160,669760 2 0007
+ab 524160,669760,0,87032 2 0010
+a- 524160,689730,0,103456 2 0011
+a. 291200,710738,0,81526 2 0012
+ac 465920,0,178360 1 0013
+ho 291200,0,203840 1 0014
+bq 291200,87360,131040 1 0015
+fo 465920,463008,0,39555 0 0016
+fc 465920,463008,0,39555 0 0017
+lq 349440,757120,0,155106 2 0020
+rq 349440,757120,0,9506 2 0021
+Bq 349440,87360,131040,9506 1 0022
+Fo 698880,463008,0,22390 0 0023
+Fc 698880,463008 0 0024
+en 524160,463008,0,90325 0 0025
+em 1048320,463008,0,90325 0 0026
+--- 0,463008 0 0027
+--- 465920,782600,29120,35251 3 0030
+.i 250432,463008,0,43706 0 0031
+.j 279552,463008,203840,43706 1 0032
+ff 611520,757120,0,233730 2 0033
+fi 562016,757120,0,108514 2 0034
+fl 562016,757120,0,105602 2 0035
+Fi 853216,757120,0,108514 2 0036
+Fl 853216,757120,0,105602 2 0037
+--- 524160,463008,101920,34338 1 0040
+! 334880,757120,0,66290 2 0041
+dq 524160,757120,0,56098 2 0042
+" "
+sh 873600,757120,232960,53326 3 0043
+# "
+Do 524160,782600,29120,116955 3 0044
+$ "
+% 873600,782600,29120,35251 3 0045
+& 794976,757120,0,32051 2 0046
+cq 291200,757120,0,88130 2 0047
+' "
+( 407680,782600,262080,137998 3 0050
+) 407680,782600,262080,26586 3 0051
+* 524160,782600,0,123438 2 0052
+pl 815360,611520,87360,26586 3 0053
++ "
+, 291200,87360,131040 1 0054
+- 349440,463008,0,20397 0 0055
+. 291200,87360 0 0056
+sl 524160,782600,262080,137998 3 0057
+/ "
+0 524160,689730,0,116955 2 0060
+1 524160,689730,0,116955 2 0061
+2 524160,689730,0,116955 2 0062
+3 524160,689730,0,116955 2 0063
+4 524160,689730,0,116955 2 0064
+5 524160,689730,0,116955 2 0065
+6 524160,689730,0,116955 2 0066
+7 524160,689730,0,116955 2 0067
+8 524160,689730,0,116955 2 0070
+9 524160,689730,0,116955 2 0071
+: 291200,463008,0,26234 0 0072
+; 291200,463008,131040,26234 1 0073
+< 815360,571045,50091,63819 3 0074
+eq 815360,387883,-136277,53326 0 0075
+= "
+> 815360,571045,50091 3 0076
+? 495040,757120,0,128744 2 0077
+at 698880,757120,0,83530 2 0100
+@ "
+A 698880,728000 2 0101
+B 698880,728000,0,86934,0,43467 2 0102
+C 669760,728000,0,125619,-75542,62810 2 0103
+D 757120,728000,0,79198,0,50078 2 0104
+E 626080,728000,0,125619,0,62810 2 0105
+F 596960,728000,0,140179,0,-5421 2 0106
+G 698880,728000,0,125619,-75542,62810 2 0107
+H 742560,728000,0,84851,0,42426 2 0110
+I 291200,728000,0,140179,0,70090 2 0111
+J 495040,728000,0,84851,0,13306 2 0112
+K 728000,728000,0,125619,0,62810 2 0113
+L 567840,728000,0,0,0,58240 2 0114
+M 917280,728000,0,84851,0,13306 2 0115
+N 742560,728000,0,84851,0,13306 2 0116
+O 771680,728000,0,79198,-75542,50078 2 0117
+P 669760,728000,0,86934,0,-58666 2 0120
+Q 771680,728000,131040,79198,-75542,79198 3 0121
+R 677040,728000,0,86934,0,65202 2 0122
+S 582400,728000,0,96499,0,48250 2 0123
+T 713440,728000,0,140179,-116054,-5421 2 0124
+U 720720,728000,0,84851,-75542,13306 2 0125
+V 698880,728000,0,169299,-111059,-63661 2 0126
+W 990080,728000,0,169299,-111059,23699 2 0127
+X 698880,728000,0,140179,0,70090 2 0130
+Y 698880,728000,0,180947,-125619,-52013 2 0131
+Z 640640,728000,0,125619,0,62810 2 0132
+lB 302848,782600,262080,167118 3 0133
+[ "
+rs 524160,782600,262080 3 0134
+\ "
+rB 302848,782600,262080,91406 3 0135
+] "
+ha 640640,757120,0,87882 2 0136
+^ "
+_ 815360,0,259754 1 0137
+oq 291200,757120,0,88130 2 0140
+` "
+a 503776,463008,0,10282 0 0141
+b 541632,757120,0,32051 2 0142
+c 465920,463008,0,87386 0 0143
+d 541632,757120,0,105602 2 0144
+e 465920,463008,0,71054 0 0145
+f 320320,757120,0,233730 2 0146
+g 524160,463008,203840,113594 1 0147
+h 541632,757120,0,18638 2 0150
+i 250432,710738,0,101877 2 0151
+j 279552,710738,203840,96086 3 0152
+k 512512,757120,0,87386 2 0153
+l 250432,757120,0,105602 2 0154
+m 832832,463008,0,18638 0 0155
+n 541632,463008,0,18638 0 0156
+o 524160,463008,0,69323 0 0157
+p 541632,463008,203840,40781 1 0160
+q 541632,463008,203840,43706 1 0161
+r 358176,463008,0,113594 0 0162
+s 401856,463008,0,81526 0 0163
+t 378560,599043,0,75738 2 0164
+u 541632,463008,0,43706 0 0165
+v 483392,463008,0,113594 0 0166
+w 716352,463008,0,113594 0 0167
+x 483392,463008,0,96086 0 0170
+y 483392,463008,203840,113594 1 0171
+z 455728,463008,0,91754 0 0172
+lC 524160,782600,262080,140910 3 0173
+{ "
+ba 291200,782600,262080,71610 3 0174
+bv "
+or "
+| "
+rC 524160,782600,262080,29498 3 0175
+} "
+~ 640640,710738,0,92522 2 0176
+hy 174720,463008,0,20397 0 0177
+--- 698880,931840 2 0200
+--- 698880,728000,203840 3 0201
+'C 669760,892202,0,125619 2 0202
+--- 669760,931840,0,125619,-75542,62810 2 0203
+--- 757120,931840,0,79198,0,50078 2 0204
+--- 626080,931840,0,125619,0,62810 2 0205
+--- 626080,728000,203840,125619 3 0206
+--- 698880,931840,0,125619,-75542,62810 2 0207
+--- 567840,892202,0,0,0,58240 2 0210
+--- 567840,931840,0,0,0,58240 2 0211
+/L 655200,728000 2 0212
+--- 742560,892202,0,84851 2 0213
+--- 742560,931840,0,84851,0,13306 2 0214
+--- 786240,728000,0,154739,0,48250 2 0215
+--- 771680,892202,0,79198,-75542,50078 2 0216
+--- 677040,892202,0,86934,0,65202 2 0217
+--- 677040,931840,0,86934,0,65202 2 0220
+--- 582400,892202,0,96499 2 0221
+vS 582400,931840,0,96499,0,48250 2 0222
+--- 582400,728000,178360,96499,0,48250 3 0223
+--- 713440,931840,0,140179,-116054,-5421 2 0224
+--- 713440,728000,178360,140179,-116054,-5421 3 0225
+--- 720720,892202,0,84851,-75542,13306 2 0226
+--- 720720,931840,0,84851,-75542,13306 2 0227
+:Y 698880,931840,0,180947,-125619,-52013 2 0230
+--- 640640,892202,0,125619 2 0231
+vZ 640640,931840,0,125619,0,62810 2 0232
+--- 640640,892202,0,125619 2 0233
+IJ 757120,728000,0,84851,0,13306 2 0234
+--- 291200,892202,0,140179,0,70090 2 0235
+--- 541632,757120,0,105602 2 0236
+sc 465920,757120,203840 3 0237
+--- 503776,669760,0,10282 2 0240
+--- 503776,463008,203840,10282 1 0241
+'c 465920,669760,0,87386 2 0242
+--- 465920,669760,0,87386 2 0243
+--- 663936,757120,0,105602 2 0244
+--- 465920,669760,0,71054 2 0245
+--- 465920,463008,203840,71054 1 0246
+--- 524160,669760,203840,113594 3 0247
+--- 250432,892202,0,105602 2 0250
+--- 372736,757120,0,105602 2 0251
+/l 340122,757120,0,105602 2 0252
+--- 541632,669760,0,18638 2 0253
+--- 541632,669760,0,18638 2 0254
+--- 541632,463008,203840,18638 1 0255
+--- 524160,669760,0,69323 2 0256
+--- 358176,669760,0,113594 2 0257
+--- 358176,669760,0,113594 2 0260
+--- 401856,669760,0,81526 2 0261
+vs 401856,669760,0,81526 2 0262
+--- 401856,463008,178360,81526 1 0263
+--- 378560,757120,0,137634 2 0264
+--- 378560,599043,178360,75738 3 0265
+--- 541632,669760,0,43706 2 0266
+--- 541632,669760,0,43706 2 0267
+:y 483392,689730,203840,113594 3 0270
+--- 455728,669760,0,91754 2 0271
+vz 455728,669760,0,91754 2 0272
+--- 455728,710738,0,91754 2 0273
+ij 570752,710738,203840,101877 3 0274
+r! 334880,553280,203840,22962 3 0275
+r? 495040,553280,203840 3 0276
+Po 790458,757120 2 0277
+`A 698880,892202 2 0300
+'A 698880,892202,0,20814 2 0301
+^A 698880,931840 2 0302
+~A 698880,931840 2 0303
+:A 698880,931840 2 0304
+oA 698880,892202 2 0305
+AE 902720,728000,0,125619 2 0306
+,C 669760,728000,178360,125619,-75542,62810 3 0307
+`E 626080,892202,0,125619,0,62810 2 0310
+'E 626080,892202,0,125619,0,62810 2 0311
+^E 626080,931840,0,125619,0,62810 2 0312
+:E 626080,931840,0,125619 2 0313
+`I 291200,892202,0,140179,0,70090 2 0314
+'I 291200,892202,0,140179,0,70090 2 0315
+^I 291200,931840,0,140179,0,70090 2 0316
+:I 291200,931840,0,140179,0,70090 2 0317
+-D 757120,728000,0,79198,0,50078 2 0320
+~N 742560,931840,0,84851,0,13306 2 0321
+`O 771680,892202,0,79198,-75542,50078 2 0322
+'O 771680,892202,0,79198 2 0323
+^O 771680,931840,0,79198,-75542,50078 2 0324
+~O 771680,931840,0,79198,-75542,50078 2 0325
+:O 771680,931840,0,79198,-75542,50078 2 0326
+OE 1019200,728000,0,125619 2 0327
+/O 815360,782600,50960,79198 3 0330
+`U 720720,892202,0,84851,-75542,13306 2 0331
+'U 720720,892202,0,84851 2 0332
+^U 720720,931840,0,84851,-75542,13306 2 0333
+:U 720720,931840,0,84851,-75542,13306 2 0334
+'Y 698880,892202,0,180947,-125619,-52013 2 0335
+TP 611520,728000,0,86934,0,43467 2 0336
+--- 1164800,728000,0,96499,0,48250 2 0337
+`a 503776,669760,0,10282 2 0340
+'a 503776,669760,0,10282 2 0341
+^a 503776,669760,0,10282 2 0342
+~a 503776,669760,0,10282 2 0343
+:a 503776,689730,0,10282 2 0344
+oa 503776,669760,0,10282 2 0345
+ae 757120,463008,0,71054 0 0346
+,c 465920,463008,178360,87386 1 0347
+`e 465920,669760,0,71054 2 0350
+'e 465920,669760,0,71054 2 0351
+^e 465920,669760,0,71054 2 0352
+:e 465920,689730,0,71054 2 0353
+`i 250432,669760,0,87032 2 0354
+'i 250432,669760,0,87032 2 0355
+^i 250432,669760,0,87032 2 0356
+:i 308672,689730,0,87032 2 0357
+Sd 524160,757120,0,99034 2 0360
+~n 541632,669760,0,18638 2 0361
+`o 524160,669760,0,69323 2 0362
+'o 524160,669760,0,69323 2 0363
+^o 524160,669760,0,69323 2 0364
+~o 524160,669760,0,69323 2 0365
+:o 524160,689730,0,69323 2 0366
+oe 815360,463008,0,71054 0 0367
+/o 524160,571045,101920,50810 3 0370
+`u 541632,669760,0,43706 2 0371
+'u 541632,669760,0,43706 2 0372
+^u 541632,669760,0,43706 2 0373
+:u 541632,689730,0,43706 2 0374
+'y 483392,669760,203840,113594 3 0375
+Tp 541632,757120,203840,40781 3 0376
+ss 503776,757120,0,102690 2 0377
diff --git a/contrib/groff/font/devdvi/HITC b/contrib/groff/font/devdvi/HITC
new file mode 100644
index 0000000..64face8
--- /dev/null
+++ b/contrib/groff/font/devdvi/HITC
@@ -0,0 +1,139 @@
+name HITC
+special
+internalname tcsi1000
+spacewidth 349440
+slant 11.999911
+checksum -627212161
+designsize 10485760
+charset
+--- 524160,631051 2 0000
+--- 524160,631051,0,75893 2 0001
+--- 524160,662478,0,75502 2 0002
+--- 524160,662478,0,84120 2 0003
+--- 524160,662478 2 0004
+--- 524160,631051,0,75893 2 0005
+--- 720720,662478 2 0006
+--- 524160,662478 2 0007
+--- 524160,662478,0,87032 2 0010
+--- 524160,662478,0,98680 2 0011
+--- 291200,631051 2 0012
+--- 465920,0,178360 1 0013
+--- 291200,0,203840 1 0014
+--- 407680,87360,203840 1 0015
+--- 524160,87360,203840 1 0022
+--- 698880,465920,0,90325 0 0025
+--- 786240,465920,0,90325 0 0026
+--- 0,728000 2 0027
+<- 1048320,387883,-136277 0 0030
+-> 1048320,387883,-136277 0 0031
+--- 250432,757120,0,429390 2 0032
+--- 308672,1019200,0,483269 2 0033
+--- 483392,757120,0,429390 2 0034
+--- 483392,757120,0,483269 2 0035
+--- 0,757120 2 0037
+--- 541632,757120,0,32045 2 0040
+Do 524160,786240,29120,116955 3 0044
+$ "
+aq 291200,757120,0,85218 2 0047
+** 524160,495040,-29120 2 0052
+, 291200,87360,131040 1 0054
+--- 349440,387883,-136277,53326 0 0055
+. 291200,87360 0 0056
+f/ 524160,786240,262080,137998 3 0057
+0 524160,465920,0,54763 0 0060
+1 524160,465920 0 0061
+2 524160,465920,0,55931 0 0062
+3 524160,465920,203840,55931 1 0063
+4 524160,465920,203840 1 0064
+5 524160,465920,203840,40794 1 0065
+6 524160,687232,0,87835 2 0066
+7 524160,465920,203840,99034 1 0067
+8 524160,687232,0,87835 2 0070
+9 524160,465920,203840,40794 1 0071
+la 407680,786240,262080 3 0074
+mi 815360,605282,87360,26586 3 0075
+\- "
+ra 407680,786240,262080 3 0076
+--- 757120,728000,0,134355,0,67178 2 0115
+ci 1164800,786240,262080 3 0117
+--- 757120,728000,0,86934,0,43467 2 0127
+--- 422240,786240,262080 3 0133
+--- 422240,786240,262080 3 0135
+ua 524160,757120,232960,64066 3 0136
+da 524160,757120,232960 3 0137
+--- 524160,757120 2 0140
+--- 524160,495040,-29120 2 0142
+--- 524160,495040,-29120 2 0143
+--- 524160,662478,29122 3 0144
+--- 1048320,757120 2 0154
+--- 524160,495040,-29120 2 0155
+--- 640640,757120 2 0156
+ti 640640,133120 0 0176
+~ "
+--- 174720,387883,-136277,53326 0 0177
+--- 640640,757120,0,105602 2 0200
+--- 640640,757120,0,108514 2 0201
+--- 524160,757120,0,102690 2 0202
+--- 524160,757120 2 0203
+dg 465920,757120,203840 3 0204
+dd 465920,757120,203840 3 0205
+--- 524160,786240,262080 3 0206
+%O 1223040,786240,29120,35251 3 0207
+bu 524160,465920,-58240 0 0210
+--- 902720,728000,0,125619,-75542,62810 2 0211
+--- 640640,786240,29120,116955 3 0212
+--- 524160,560560,101920,87386 3 0213
+Fn 320320,757120,0,233730 2 0214
+--- 669760,786240,29120,125619,-75542,62810 3 0215
+--- 990080,728000,0,169299,-111059,23699 2 0216
+--- 771680,728000,0,84851,0,13306 2 0217
+--- 815360,786240,29120,125619,-75542,62810 3 0220
+--- 684320,728000,0,86934,0,-58666 2 0221
+--- 790458,757120 2 0222
+--- 677040,728000,0,86934,0,65202 2 0223
+--- 495040,757120,0,128744 2 0224
+--- 495040,560560,203840 3 0225
+--- 541632,786240,0,105602 2 0226
+tm 698880,786240,0,550366 2 0227
+--- 1612550,786240,29120,35251 3 0230
+--- 495040,757120,203840 3 0231
+--- 698880,786240,29120,86934,0,43467 3 0232
+--- 859040,728000,0,84851,0,13306 2 0233
+--- 524160,786240,0,137998 2 0234
+--- 701792,728000,0,114690 2 0235
+--- 524160,465920,-58240 0 0236
+--- 698880,786240,0,550366 2 0237
+--- 378560,786240,262080,29498 3 0240
+--- 378560,786240,262080,140910 3 0241
+ct 524160,560560,101920,87386 3 0242
+Po 790458,757120 2 0243
+Cs 793402,605282,0,99034 2 0244
+Ye 698880,728000,0,180947 2 0245
+bb 174720,786240,262080,108878 3 0246
+sc 465920,757120,203840 3 0247
+--- 524160,712194,0,66933 2 0250
+co 1164800,786240,262080 3 0251
+Of 465920,786240,0,116982 2 0252
+--- 1164800,786240,262080 3 0253
+no 698880,465920,0,69914 0 0254
+--- 1164800,786240,262080 3 0255
+rg 1164800,786240,262080 3 0256
+rn 815360,757120 2 0257
+de 349440,728000 2 0260
+t+- 815360,605282,87360,26586 3 0261
+S2 465920,786240,0,137998 2 0262
+S3 465920,786240,0,137998 2 0263
+--- 524160,757120,0,102690 2 0264
+mc 541632,465920,203840,43706 1 0265
+ps 640640,757120,203840 3 0266
+pc 247520,465920 0 0267
+--- 679466,560560,0,20397 2 0270
+S1 465920,786240,0,137998 2 0271
+Om 465920,786240,0,116982 2 0272
+--- 495040,786240,220138,167118 3 0273
+14 465920,786240,203840,137998 3 0274
+12 465920,786240,203840,137998 3 0275
+34 465920,786240,203840,137998 3 0276
+Eu 815360,728000,0,125619 2 0277
+tmu 815360,605282,87360,26586 3 0326
+tdi 815360,605282,87360,26586 3 0366
diff --git a/contrib/groff/font/devdvi/HR b/contrib/groff/font/devdvi/HR
new file mode 100644
index 0000000..93b8a2d
--- /dev/null
+++ b/contrib/groff/font/devdvi/HR
@@ -0,0 +1,295 @@
+name HR
+internalname cmss10
+spacewidth 349526
+ligatures ff fi fl ffi ffl 0
+checksum 1831058770
+designsize 10485760
+kernpairs
+ff cq 72818
+ff ' 72818
+ff ? 72818
+ff ! 72818
+ff ) 72818
+ff rB 72818
+ff ] 72818
+cq ? 116509
+' ? 116509
+cq ! 116509
+' ! 116509
+A t -29128
+A C -29128
+A O -29128
+A G -29128
+A U -29128
+A Q -29128
+A T -87382
+A Y -87382
+A V -116509
+A W -116509
+D X -29128
+D W -29128
+D A -29128
+D V -29128
+D Y -29128
+F o -29128
+F e -29128
+F u -29128
+F r -29128
+F a -29128
+F A -87382
+F O -29128
+F C -29128
+F G -29128
+F Q -29128
+I I 29128
+K O -29128
+K C -29128
+K G -29128
+K Q -29128
+L T -87382
+L Y -87382
+L V -116509
+L W -116509
+O X -29128
+O W -29128
+O A -29128
+O V -29128
+O Y -29128
+P A -87382
+P o -29128
+P e -29128
+P a -29128
+P . -87382
+P , -87382
+T y -87382
+T e -87382
+T o -87382
+T r -87382
+T a -87382
+T A -87382
+T u -87382
+V o -29128
+V e -29128
+V u -29128
+V r -29128
+V a -29128
+V A -87382
+V O -29128
+V C -29128
+V G -29128
+V Q -29128
+W o -29128
+W e -29128
+W u -29128
+W r -29128
+W a -29128
+W A -87382
+W O -29128
+W C -29128
+W G -29128
+W Q -29128
+X O -29128
+X C -29128
+X G -29128
+X Q -29128
+Y e -87382
+Y o -87382
+Y r -87382
+Y a -87382
+Y A -87382
+Y u -87382
+a r -29128
+a y -29128
+a w -29128
+b e 29128
+b o 29128
+b x -29128
+b d 29128
+b c 29128
+b q 29128
+b r -29128
+b y -29128
+b w -29128
+f cq 72818
+f ' 72818
+f ? 72818
+f ! 72818
+f ) 72818
+f rB 72818
+f ] 72818
+g j 29128
+k e -29128
+k a -29128
+k o -29128
+k c -29128
+o e 29128
+o o 29128
+o x -29128
+o d 29128
+o c 29128
+o q 29128
+o r -29128
+o y -29128
+o w -29128
+p e 29128
+p o 29128
+p x -29128
+p d 29128
+p c 29128
+p q 29128
+p r -29128
+p y -29128
+p w -29128
+t y -29128
+t w -29128
+u w -29128
+w e -29128
+w a -29128
+w o -29128
+w c -29128
+y o -29128
+y e -29128
+y a -29128
+y . -87382
+y , -87382
+charset
+*G 567981,728178,0,0,0,-145637 2 0000
+*D 873816,728178 2 0001
+*H 815562,728178,0,0,-29128,-29128 2 0002
+*L 640800,728178 2 0003
+*C 699053,728178 2 0004
+*P 742746,728178 2 0005
+*S 757307,728178 2 0006
+*U 815562,728178,0,0,-29128,-145637 2 0007
+*F 757307,728178,0,0,-29128 2 0010
+*Q 815562,728178,0,0,-29128,-72818 2 0011
+*W 757307,728178 2 0012
+ff 611672,728178,0,72818 2 0013
+fi 562155,728178 2 0014
+fl 562155,728178 2 0015
+Fi 853427,728178 2 0016
+Fl 853427,728178 2 0017
+.i 250494,466034 0 0020
+.j 279622,466034,203890 1 0021
+ga 524290,728178 2 0022
+aa 524290,728178 2 0023
+ah 524290,662642 2 0024
+ab 524290,728178 2 0025
+a- 524290,638464 2 0026
+ao 699054,728178 2 0027
+ac 466035,0,178403 1 0030
+ss 503902,728178 2 0031
+ae 757307,466034 0 0032
+oe 815562,466034 0 0033
+/o 524290,567979,101946 3 0034
+AE 902944,728178 2 0035
+OE 1019453,728178 2 0036
+/O 815562,779150,50973 3 0037
+--- 250494,466034 0 0040
+! 334963,728178 2 0041
+rq 524290,728178 2 0042
+sh 873816,728178,203888 3 0043
+# "
+Do 524290,786432,58254 3 0044
+$ "
+% 873816,786432,58254 3 0045
+& 795173,728178 2 0046
+cq 291272,728178 2 0047
+' "
+( 407781,786432,262144 3 0050
+) 407781,786432,262144 3 0051
+* 524290,786432 2 0052
++ 815562,611670,87382 3 0053
+, 291272,87381,131072 1 0054
+hy 349526,466034 0 0055
+- "
+. 291272,87381 0 0056
+sl 524290,786432,262144 3 0057
+/ "
+0 524290,687400 2 0060
+1 524290,687400 2 0061
+2 524290,687400 2 0062
+3 524290,687400 2 0063
+4 524290,687400 2 0064
+5 524290,687400 2 0065
+6 524290,687400 2 0066
+7 524290,687400 2 0067
+8 524290,687400 2 0070
+9 524290,687400 2 0071
+: 291272,466034 0 0072
+; 291272,466034,131072 1 0073
+r! 334963,524288,203890 3 0074
+= 815562,387973,-136315 0 0075
+r? 495163,524288,203890 3 0076
+? 495163,728178 2 0077
+at 699053,728178 2 0100
+@ "
+A 699054,728178 2 0101
+B 699054,728178 2 0102
+C 669926,728178,0,0,-29128 2 0103
+D 757309,728178,0,0,0,-29128 2 0104
+E 626235,728178 2 0105
+F 597109,728178,0,0,0,-145637 2 0106
+G 699053,728178,0,0,-29128 2 0107
+H 742746,728178 2 0110
+I 291274,728178 2 0111
+J 495163,728178,0,0,0,-29128 2 0112
+K 728182,728178 2 0113
+L 567981,728178,0,0,0,58254 2 0114
+M 917509,728178 2 0115
+N 742746,728178 2 0116
+O 771870,728178,0,0,-29128,-29128 2 0117
+P 669926,728178,0,0,0,-145637 2 0120
+Q 771870,728178,131072,0,-29128 3 0121
+R 677208,728178 2 0122
+S 582544,728178 2 0123
+T 713616,728178,0,0,0,-145637 2 0124
+U 720901,728178,0,0,29126 2 0125
+V 699054,728178,0,14563,43691,-218454 2 0126
+W 990326,728178,0,14563,43691,-131074 2 0127
+X 699054,728178 2 0130
+Y 699054,728178,0,26214,29128,-206803 2 0131
+Z 640798,728178 2 0132
+lB 302923,786432,262144 3 0133
+[ "
+lq 524290,728178 2 0134
+rB 302923,786432,262144 3 0135
+] "
+ha 524290,728178 2 0136
+^ "
+a^ "
+a. 291272,712366 2 0137
+oq 291272,728178 2 0140
+` "
+a 503901,466034 0 0141
+b 541766,728178 2 0142
+c 466035,466034 0 0143
+d 541766,728178 2 0144
+e 466035,466034 0 0145
+f 320400,728178,0,72818 2 0146
+g 524290,466034,203890,14563 1 0147
+h 541766,728178 2 0150
+i 250494,712366 2 0151
+j 279622,712366,203890 3 0152
+k 512640,728178 2 0153
+l 250494,728178 2 0154
+m 833038,466034 0 0155
+n 541766,466034 0 0156
+o 524290,466034 0 0157
+p 541766,466034,203890 1 0160
+q 541766,466034,203890 1 0161
+r 358266,466034,0,14563 0 0162
+s 401955,466034 0 0163
+t 378653,599189 2 0164
+u 541766,466034 0 0165
+v 483512,466034,0,14563 0 0166
+w 716530,466034,0,14563 0 0167
+x 483512,466034 0 0170
+y 483512,466034,203890,14563 1 0171
+z 455840,466034 0 0172
+en 524290,466034,0,29128 0 0173
+em 1048579,466034,0,29128 0 0174
+a" 524290,728178 2 0175
+~ 524290,709454 2 0176
+a~ "
+ad 524290,712366 2 0177
diff --git a/contrib/groff/font/devdvi/HREC b/contrib/groff/font/devdvi/HREC
new file mode 100644
index 0000000..bd35a20
--- /dev/null
+++ b/contrib/groff/font/devdvi/HREC
@@ -0,0 +1,1578 @@
+name HREC
+internalname ecss1000
+spacewidth 349440
+ligatures ff fi fl ffi ffl 0
+checksum -1936902655
+designsize 10485760
+kernpairs
+bq Bq 116480
+bq j 116480
+bq .j 116480
+bq g 58240
+bq y 58240
+bq :y 58240
+bq 'y 58240
+bq v -87360
+bq w -58240
+bq V -116480
+bq W -87360
+bq Y -87360
+bq :Y -87360
+bq 'Y -87360
+bq O -29120
+bq `O -29120
+bq 'O -29120
+bq ^O -29120
+bq ~O -29120
+bq :O -29120
+bq OE -29120
+bq /O -29120
+bq C -29120
+bq G -29120
+bq 'C -29120
+bq ,C -29120
+bq Q -29120
+lq oq 116480
+lq ` 116480
+lq lq 116480
+rq cq 116480
+rq ' 116480
+rq rq 116480
+Bq bq 116480
+Bq , 116480
+Bq Bq 116480
+Bq j 116480
+Bq .j 116480
+Bq g 58240
+Bq y 58240
+Bq :y 58240
+Bq 'y 58240
+Bq v -87360
+Bq w -58240
+Bq V -116480
+Bq W -87360
+Bq Y -87360
+Bq :Y -87360
+Bq 'Y -87360
+Bq O -29120
+Bq `O -29120
+Bq 'O -29120
+Bq ^O -29120
+Bq ~O -29120
+Bq :O -29120
+Bq OE -29120
+Bq /O -29120
+Bq C -29120
+Bq G -29120
+Bq 'C -29120
+Bq ,C -29120
+Bq Q -29120
+Fc . -87360
+Fc , -87360
+ff cq 72800
+ff ' 72800
+ff oq 72800
+ff ` 72800
+ff lq 72800
+ff rq 72800
+ff ? 72800
+ff ! 72800
+ff ) 72800
+ff rB 72800
+ff ] 72800
+cq rq 116480
+' rq 116480
+cq ? 116480
+' ? 116480
+cq ! 116480
+' ! 116480
+A y -29120
+A :y -29120
+A 'y -29120
+A v -29120
+A w -29120
+A c -29120
+A 'c -29120
+A ,c -29120
+A d -29120
+A Sd -29120
+A e -29120
+A `e -29120
+A 'e -29120
+A ^e -29120
+A :e -29120
+A o -29120
+A `o -29120
+A 'o -29120
+A ^o -29120
+A ~o -29120
+A :o -29120
+A oe -29120
+A /o -29120
+A q -29120
+A t -29120
+A C -29120
+A G -29120
+A 'C -29120
+A ,C -29120
+A Q -29120
+A O -29120
+A `O -29120
+A 'O -29120
+A ^O -29120
+A ~O -29120
+A :O -29120
+A OE -29120
+A /O -29120
+A U -29120
+A `U -29120
+A 'U -29120
+A ^U -29120
+A :U -29120
+A T -87360
+A Y -87360
+A :Y -87360
+A 'Y -87360
+A V -116480
+A W -116480
+D X -29120
+D W -29120
+D A -29120
+D `A -29120
+D 'A -29120
+D ^A -29120
+D ~A -29120
+D :A -29120
+D oA -29120
+D AE -29120
+D V -29120
+D Y -29120
+D :Y -29120
+D 'Y -29120
+F o -29120
+F a -29120
+F e -29120
+F y -29120
+F u -29120
+F r -29120
+F v -29120
+F s -29120
+F c -29120
+F d -29120
+F g -29120
+F m -29120
+F n -29120
+F p -29120
+F w -29120
+F z -29120
+F ae -29120
+F /o -29120
+F A -87360
+F `A -87360
+F 'A -87360
+F ^A -87360
+F ~A -87360
+F :A -87360
+F oA -87360
+F AE -87360
+F O -29120
+F `O -29120
+F 'O -29120
+F ^O -29120
+F ~O -29120
+F :O -29120
+F OE -29120
+F /O -29120
+F C -29120
+F G -29120
+F 'C -29120
+F ,C -29120
+F Q -29120
+I I 29120
+K v -29120
+K o -29120
+K `o -29120
+K 'o -29120
+K ^o -29120
+K ~o -29120
+K :o -29120
+K oe -29120
+K /o -29120
+K C -29120
+K G -29120
+K 'C -29120
+K ,C -29120
+K Q -29120
+L T -87360
+L Y -87360
+L :Y -87360
+L 'Y -87360
+L V -116480
+L W -116480
+O X -29120
+O W -29120
+O A -29120
+O `A -29120
+O 'A -29120
+O ^A -29120
+O ~A -29120
+O :A -29120
+O oA -29120
+O AE -29120
+O V -29120
+O Y -29120
+O :Y -29120
+O 'Y -29120
+P A -87360
+P `A -87360
+P 'A -87360
+P ^A -87360
+P ~A -87360
+P :A -87360
+P oA -87360
+P AE -87360
+P o -29120
+P `o -29120
+P 'o -29120
+P ^o -29120
+P ~o -29120
+P :o -29120
+P oe -29120
+P /o -29120
+P e -29120
+P `e -29120
+P 'e -29120
+P ^e -29120
+P :e -29120
+P a -29120
+P `a -29120
+P 'a -29120
+P ^a -29120
+P ^a -29120
+P ~a -29120
+P :a -29120
+P oa -29120
+P ae -29120
+P . -87360
+P , -87360
+T y -87360
+T e -87360
+T o -87360
+T r -87360
+T a -87360
+T u -87360
+T n -87360
+T .i -87360
+T c -87360
+T d -87360
+T g -87360
+T p -87360
+T s -87360
+T v -87360
+T w -87360
+T x -87360
+T z -87360
+T A -87360
+T `A -87360
+T 'A -87360
+T ^A -87360
+T ~A -87360
+T :A -87360
+T oA -87360
+T AE -87360
+V o -29120
+V a -29120
+V e -29120
+V y -29120
+V u -29120
+V r -29120
+V v -29120
+V s -29120
+V c -29120
+V d -29120
+V g -29120
+V m -29120
+V n -29120
+V p -29120
+V w -29120
+V z -29120
+V ae -29120
+V /o -29120
+V A -87360
+V `A -87360
+V 'A -87360
+V ^A -87360
+V ~A -87360
+V :A -87360
+V oA -87360
+V AE -87360
+V O -29120
+V `O -29120
+V 'O -29120
+V ^O -29120
+V ~O -29120
+V :O -29120
+V OE -29120
+V /O -29120
+V C -29120
+V G -29120
+V 'C -29120
+V ,C -29120
+V Q -29120
+W o -29120
+W a -29120
+W e -29120
+W y -29120
+W u -29120
+W r -29120
+W v -29120
+W s -29120
+W c -29120
+W d -29120
+W g -29120
+W m -29120
+W n -29120
+W p -29120
+W w -29120
+W z -29120
+W ae -29120
+W /o -29120
+W A -87360
+W `A -87360
+W 'A -87360
+W ^A -87360
+W ~A -87360
+W :A -87360
+W oA -87360
+W AE -87360
+W O -29120
+W `O -29120
+W 'O -29120
+W ^O -29120
+W ~O -29120
+W :O -29120
+W OE -29120
+W /O -29120
+W C -29120
+W G -29120
+W 'C -29120
+W ,C -29120
+W Q -29120
+X O -29120
+X `O -29120
+X 'O -29120
+X ^O -29120
+X ~O -29120
+X :O -29120
+X OE -29120
+X /O -29120
+X C -29120
+X G -29120
+X 'C -29120
+X ,C -29120
+X Q -29120
+Y e -87360
+Y o -87360
+Y r -87360
+Y a -87360
+Y u -87360
+Y n -87360
+Y .i -87360
+Y c -87360
+Y d -87360
+Y g -87360
+Y p -87360
+Y s -87360
+Y v -87360
+Y w -87360
+Y x -87360
+Y z -87360
+Y A -87360
+Y `A -87360
+Y 'A -87360
+Y ^A -87360
+Y ~A -87360
+Y :A -87360
+Y oA -87360
+Y AE -87360
+oq lq 116480
+` lq 116480
+oq ? 116480
+` ? 116480
+oq ! 116480
+` ! 116480
+a r -29120
+a y -29120
+a :y -29120
+a 'y -29120
+a w -29120
+b e 29120
+b `e 29120
+b 'e 29120
+b ^e 29120
+b :e 29120
+b o 29120
+b `o 29120
+b 'o 29120
+b ^o 29120
+b ~o 29120
+b :o 29120
+b oe 29120
+b /o 29120
+b x -29120
+b d 29120
+b c 29120
+b 'c 29120
+b ,c 29120
+b q 29120
+b r -29120
+b y -29120
+b :y -29120
+b 'y -29120
+b w -29120
+e V -87360
+f cq 72800
+f ' 72800
+f oq 72800
+f ` 72800
+f lq 72800
+f rq 72800
+f ? 72800
+f ! 72800
+f ) 72800
+f rB 72800
+f ] 72800
+g j 29120
+k W -87360
+k V -87360
+k e -29120
+k `e -29120
+k 'e -29120
+k ^e -29120
+k :e -29120
+k a -29120
+k `a -29120
+k 'a -29120
+k ^a -29120
+k ^a -29120
+k ~a -29120
+k :a -29120
+k oa -29120
+k ae -29120
+k o -29120
+k `o -29120
+k 'o -29120
+k ^o -29120
+k ~o -29120
+k :o -29120
+k oe -29120
+k /o -29120
+k c -29120
+k 'c -29120
+k ,c -29120
+o e 29120
+o `e 29120
+o 'e 29120
+o ^e 29120
+o :e 29120
+o o 29120
+o `o 29120
+o 'o 29120
+o ^o 29120
+o ~o 29120
+o :o 29120
+o oe 29120
+o /o 29120
+o x -29120
+o d 29120
+o c 29120
+o 'c 29120
+o ,c 29120
+o q 29120
+o r -29120
+o y -29120
+o :y -29120
+o 'y -29120
+o w -29120
+p e 29120
+p `e 29120
+p 'e 29120
+p ^e 29120
+p :e 29120
+p o 29120
+p `o 29120
+p 'o 29120
+p ^o 29120
+p ~o 29120
+p :o 29120
+p oe 29120
+p /o 29120
+p x -29120
+p d 29120
+p c 29120
+p 'c 29120
+p ,c 29120
+p q 29120
+p r -29120
+p y -29120
+p :y -29120
+p 'y -29120
+p w -29120
+t y -29120
+t :y -29120
+t 'y -29120
+t w -29120
+u w -29120
+w e -29120
+w `e -29120
+w 'e -29120
+w ^e -29120
+w :e -29120
+w a -29120
+w `a -29120
+w 'a -29120
+w ^a -29120
+w ^a -29120
+w ~a -29120
+w :a -29120
+w oa -29120
+w ae -29120
+w o -29120
+w `o -29120
+w 'o -29120
+w ^o -29120
+w ~o -29120
+w :o -29120
+w oe -29120
+w /o -29120
+w c -29120
+w 'c -29120
+w ,c -29120
+y o -29120
+y `o -29120
+y 'o -29120
+y ^o -29120
+y ~o -29120
+y :o -29120
+y oe -29120
+y /o -29120
+y e -29120
+y `e -29120
+y 'e -29120
+y ^e -29120
+y :e -29120
+y a -29120
+y `a -29120
+y 'a -29120
+y ^a -29120
+y ^a -29120
+y ~a -29120
+y :a -29120
+y oa -29120
+y ae -29120
+y . -87360
+y , -87360
+'C v -29120
+'C w -29120
+'C c -29120
+'C 'c -29120
+'C ,c -29120
+'C d -29120
+'C Sd -29120
+'C e -29120
+'C `e -29120
+'C 'e -29120
+'C ^e -29120
+'C :e -29120
+'C o -29120
+'C `o -29120
+'C 'o -29120
+'C ^o -29120
+'C ~o -29120
+'C :o -29120
+'C oe -29120
+'C /o -29120
+'C q -29120
+'C t -29120
+'C C -29120
+'C G -29120
+'C 'C -29120
+'C ,C -29120
+'C Q -29120
+'C O -29120
+'C `O -29120
+'C 'O -29120
+'C ^O -29120
+'C ~O -29120
+'C :O -29120
+'C OE -29120
+'C /O -29120
+'C U -29120
+'C `U -29120
+'C 'U -29120
+'C ^U -29120
+'C :U -29120
+'C T -87360
+'C Y -87360
+'C :Y -87360
+'C 'Y -87360
+'C V -116480
+'C W -116480
+/L T -87360
+/L Y -87360
+/L :Y -87360
+/L 'Y -87360
+/L V -116480
+/L W -116480
+:Y e -87360
+:Y o -87360
+:Y r -87360
+:Y a -87360
+:Y u -87360
+:Y n -87360
+:Y .i -87360
+:Y c -87360
+:Y d -87360
+:Y g -87360
+:Y p -87360
+:Y s -87360
+:Y v -87360
+:Y w -87360
+:Y x -87360
+:Y z -87360
+:Y A -87360
+:Y `A -87360
+:Y 'A -87360
+:Y ^A -87360
+:Y ~A -87360
+:Y :A -87360
+:Y oA -87360
+:Y AE -87360
+/l cq 29120
+/l ' 29120
+/l a -29120
+/l c -29120
+/l 'c -29120
+/l d -29120
+/l e -29120
+/l g -29120
+/l o -29120
+/l 'o -29120
+/l s -29120
+:y o -29120
+:y `o -29120
+:y 'o -29120
+:y ^o -29120
+:y ~o -29120
+:y :o -29120
+:y oe -29120
+:y /o -29120
+:y e -29120
+:y `e -29120
+:y 'e -29120
+:y ^e -29120
+:y :e -29120
+:y a -29120
+:y `a -29120
+:y 'a -29120
+:y ^a -29120
+:y ^a -29120
+:y ~a -29120
+:y :a -29120
+:y oa -29120
+:y ae -29120
+:y . -87360
+:y , -87360
+`A y -29120
+`A :y -29120
+`A 'y -29120
+`A v -29120
+`A w -29120
+`A c -29120
+`A 'c -29120
+`A ,c -29120
+`A d -29120
+`A Sd -29120
+`A e -29120
+`A `e -29120
+`A 'e -29120
+`A ^e -29120
+`A :e -29120
+`A o -29120
+`A `o -29120
+`A 'o -29120
+`A ^o -29120
+`A ~o -29120
+`A :o -29120
+`A oe -29120
+`A /o -29120
+`A q -29120
+`A t -29120
+`A C -29120
+`A G -29120
+`A 'C -29120
+`A ,C -29120
+`A Q -29120
+`A O -29120
+`A `O -29120
+`A 'O -29120
+`A ^O -29120
+`A ~O -29120
+`A :O -29120
+`A OE -29120
+`A /O -29120
+`A U -29120
+`A `U -29120
+`A 'U -29120
+`A ^U -29120
+`A :U -29120
+`A T -87360
+`A Y -87360
+`A :Y -87360
+`A 'Y -87360
+`A V -116480
+`A W -116480
+'A y -29120
+'A :y -29120
+'A 'y -29120
+'A v -29120
+'A w -29120
+'A c -29120
+'A 'c -29120
+'A ,c -29120
+'A d -29120
+'A Sd -29120
+'A e -29120
+'A `e -29120
+'A 'e -29120
+'A ^e -29120
+'A :e -29120
+'A o -29120
+'A `o -29120
+'A 'o -29120
+'A ^o -29120
+'A ~o -29120
+'A :o -29120
+'A oe -29120
+'A /o -29120
+'A q -29120
+'A t -29120
+'A C -29120
+'A G -29120
+'A 'C -29120
+'A ,C -29120
+'A Q -29120
+'A O -29120
+'A `O -29120
+'A 'O -29120
+'A ^O -29120
+'A ~O -29120
+'A :O -29120
+'A OE -29120
+'A /O -29120
+'A U -29120
+'A `U -29120
+'A 'U -29120
+'A ^U -29120
+'A :U -29120
+'A T -87360
+'A Y -87360
+'A :Y -87360
+'A 'Y -87360
+'A V -116480
+'A W -116480
+^A y -29120
+^A :y -29120
+^A 'y -29120
+^A v -29120
+^A w -29120
+^A c -29120
+^A 'c -29120
+^A ,c -29120
+^A d -29120
+^A Sd -29120
+^A e -29120
+^A `e -29120
+^A 'e -29120
+^A ^e -29120
+^A :e -29120
+^A o -29120
+^A `o -29120
+^A 'o -29120
+^A ^o -29120
+^A ~o -29120
+^A :o -29120
+^A oe -29120
+^A /o -29120
+^A q -29120
+^A t -29120
+^A C -29120
+^A G -29120
+^A 'C -29120
+^A ,C -29120
+^A Q -29120
+^A O -29120
+^A `O -29120
+^A 'O -29120
+^A ^O -29120
+^A ~O -29120
+^A :O -29120
+^A OE -29120
+^A /O -29120
+^A U -29120
+^A `U -29120
+^A 'U -29120
+^A ^U -29120
+^A :U -29120
+^A T -87360
+^A Y -87360
+^A :Y -87360
+^A 'Y -87360
+^A V -116480
+^A W -116480
+~A y -29120
+~A :y -29120
+~A 'y -29120
+~A v -29120
+~A w -29120
+~A c -29120
+~A 'c -29120
+~A ,c -29120
+~A d -29120
+~A Sd -29120
+~A e -29120
+~A `e -29120
+~A 'e -29120
+~A ^e -29120
+~A :e -29120
+~A o -29120
+~A `o -29120
+~A 'o -29120
+~A ^o -29120
+~A ~o -29120
+~A :o -29120
+~A oe -29120
+~A /o -29120
+~A q -29120
+~A t -29120
+~A C -29120
+~A G -29120
+~A 'C -29120
+~A ,C -29120
+~A Q -29120
+~A O -29120
+~A `O -29120
+~A 'O -29120
+~A ^O -29120
+~A ~O -29120
+~A :O -29120
+~A OE -29120
+~A /O -29120
+~A U -29120
+~A `U -29120
+~A 'U -29120
+~A ^U -29120
+~A :U -29120
+~A T -87360
+~A Y -87360
+~A :Y -87360
+~A 'Y -87360
+~A V -116480
+~A W -116480
+:A y -29120
+:A :y -29120
+:A 'y -29120
+:A v -29120
+:A w -29120
+:A c -29120
+:A 'c -29120
+:A ,c -29120
+:A d -29120
+:A Sd -29120
+:A e -29120
+:A `e -29120
+:A 'e -29120
+:A ^e -29120
+:A :e -29120
+:A o -29120
+:A `o -29120
+:A 'o -29120
+:A ^o -29120
+:A ~o -29120
+:A :o -29120
+:A oe -29120
+:A /o -29120
+:A q -29120
+:A t -29120
+:A C -29120
+:A G -29120
+:A 'C -29120
+:A ,C -29120
+:A Q -29120
+:A O -29120
+:A `O -29120
+:A 'O -29120
+:A ^O -29120
+:A ~O -29120
+:A :O -29120
+:A OE -29120
+:A /O -29120
+:A U -29120
+:A `U -29120
+:A 'U -29120
+:A ^U -29120
+:A :U -29120
+:A T -87360
+:A Y -87360
+:A :Y -87360
+:A 'Y -87360
+:A V -116480
+:A W -116480
+oA y -29120
+oA :y -29120
+oA 'y -29120
+oA v -29120
+oA w -29120
+oA c -29120
+oA 'c -29120
+oA ,c -29120
+oA d -29120
+oA Sd -29120
+oA e -29120
+oA `e -29120
+oA 'e -29120
+oA ^e -29120
+oA :e -29120
+oA o -29120
+oA `o -29120
+oA 'o -29120
+oA ^o -29120
+oA ~o -29120
+oA :o -29120
+oA oe -29120
+oA /o -29120
+oA q -29120
+oA t -29120
+oA C -29120
+oA G -29120
+oA 'C -29120
+oA ,C -29120
+oA Q -29120
+oA O -29120
+oA `O -29120
+oA 'O -29120
+oA ^O -29120
+oA ~O -29120
+oA :O -29120
+oA OE -29120
+oA /O -29120
+oA U -29120
+oA `U -29120
+oA 'U -29120
+oA ^U -29120
+oA :U -29120
+oA T -87360
+oA Y -87360
+oA :Y -87360
+oA 'Y -87360
+oA V -116480
+oA W -116480
+-D X -29120
+-D W -29120
+-D A -29120
+-D `A -29120
+-D 'A -29120
+-D ^A -29120
+-D ~A -29120
+-D :A -29120
+-D oA -29120
+-D AE -29120
+-D V -29120
+-D Y -29120
+-D :Y -29120
+-D 'Y -29120
+`O X -29120
+`O W -29120
+`O A -29120
+`O `A -29120
+`O 'A -29120
+`O ^A -29120
+`O ~A -29120
+`O :A -29120
+`O oA -29120
+`O AE -29120
+`O V -29120
+`O Y -29120
+`O :Y -29120
+`O 'Y -29120
+'O X -29120
+'O W -29120
+'O A -29120
+'O `A -29120
+'O 'A -29120
+'O ^A -29120
+'O ~A -29120
+'O :A -29120
+'O oA -29120
+'O AE -29120
+'O V -29120
+'O Y -29120
+'O :Y -29120
+'O 'Y -29120
+^O X -29120
+^O W -29120
+^O A -29120
+^O `A -29120
+^O 'A -29120
+^O ^A -29120
+^O ~A -29120
+^O :A -29120
+^O oA -29120
+^O AE -29120
+^O V -29120
+^O Y -29120
+^O :Y -29120
+^O 'Y -29120
+~O X -29120
+~O W -29120
+~O A -29120
+~O `A -29120
+~O 'A -29120
+~O ^A -29120
+~O ~A -29120
+~O :A -29120
+~O oA -29120
+~O AE -29120
+~O V -29120
+~O Y -29120
+~O :Y -29120
+~O 'Y -29120
+:O X -29120
+:O W -29120
+:O A -29120
+:O `A -29120
+:O 'A -29120
+:O ^A -29120
+:O ~A -29120
+:O :A -29120
+:O oA -29120
+:O AE -29120
+:O V -29120
+:O Y -29120
+:O :Y -29120
+:O 'Y -29120
+/O X -29120
+/O W -29120
+/O A -29120
+/O `A -29120
+/O 'A -29120
+/O ^A -29120
+/O ~A -29120
+/O :A -29120
+/O oA -29120
+/O AE -29120
+/O V -29120
+/O Y -29120
+/O :Y -29120
+/O 'Y -29120
+'Y e -87360
+'Y o -87360
+'Y r -87360
+'Y a -87360
+'Y u -87360
+'Y n -87360
+'Y .i -87360
+'Y c -87360
+'Y d -87360
+'Y g -87360
+'Y p -87360
+'Y s -87360
+'Y v -87360
+'Y w -87360
+'Y x -87360
+'Y z -87360
+'Y A -87360
+'Y `A -87360
+'Y 'A -87360
+'Y ^A -87360
+'Y ~A -87360
+'Y :A -87360
+'Y oA -87360
+'Y AE -87360
+`a r -29120
+`a y -29120
+`a :y -29120
+`a 'y -29120
+`a w -29120
+'a r -29120
+'a y -29120
+'a :y -29120
+'a 'y -29120
+'a w -29120
+^a r -29120
+^a y -29120
+^a :y -29120
+^a 'y -29120
+^a w -29120
+~a r -29120
+~a y -29120
+~a :y -29120
+~a 'y -29120
+~a w -29120
+:a r -29120
+:a y -29120
+:a :y -29120
+:a 'y -29120
+:a w -29120
+oa r -29120
+oa y -29120
+oa :y -29120
+oa 'y -29120
+oa w -29120
+`o e 29120
+`o `e 29120
+`o 'e 29120
+`o ^e 29120
+`o :e 29120
+`o o 29120
+`o `o 29120
+`o 'o 29120
+`o ^o 29120
+`o ~o 29120
+`o :o 29120
+`o oe 29120
+`o /o 29120
+`o x -29120
+`o d 29120
+`o c 29120
+`o 'c 29120
+`o ,c 29120
+`o q 29120
+`o r -29120
+`o y -29120
+`o :y -29120
+`o 'y -29120
+`o w -29120
+'o e 29120
+'o `e 29120
+'o 'e 29120
+'o ^e 29120
+'o :e 29120
+'o o 29120
+'o `o 29120
+'o 'o 29120
+'o ^o 29120
+'o ~o 29120
+'o :o 29120
+'o oe 29120
+'o /o 29120
+'o x -29120
+'o d 29120
+'o c 29120
+'o 'c 29120
+'o ,c 29120
+'o q 29120
+'o r -29120
+'o y -29120
+'o :y -29120
+'o 'y -29120
+'o w -29120
+^o e 29120
+^o `e 29120
+^o 'e 29120
+^o ^e 29120
+^o :e 29120
+^o o 29120
+^o `o 29120
+^o 'o 29120
+^o ^o 29120
+^o ~o 29120
+^o :o 29120
+^o oe 29120
+^o /o 29120
+^o x -29120
+^o d 29120
+^o c 29120
+^o 'c 29120
+^o ,c 29120
+^o q 29120
+^o r -29120
+^o y -29120
+^o :y -29120
+^o 'y -29120
+^o w -29120
+~o e 29120
+~o `e 29120
+~o 'e 29120
+~o ^e 29120
+~o :e 29120
+~o o 29120
+~o `o 29120
+~o 'o 29120
+~o ^o 29120
+~o ~o 29120
+~o :o 29120
+~o oe 29120
+~o /o 29120
+~o x -29120
+~o d 29120
+~o c 29120
+~o 'c 29120
+~o ,c 29120
+~o q 29120
+~o r -29120
+~o y -29120
+~o :y -29120
+~o 'y -29120
+~o w -29120
+:o e 29120
+:o `e 29120
+:o 'e 29120
+:o ^e 29120
+:o :e 29120
+:o o 29120
+:o `o 29120
+:o 'o 29120
+:o ^o 29120
+:o ~o 29120
+:o :o 29120
+:o oe 29120
+:o /o 29120
+:o x -29120
+:o d 29120
+:o c 29120
+:o 'c 29120
+:o ,c 29120
+:o q 29120
+:o r -29120
+:o y -29120
+:o :y -29120
+:o 'y -29120
+:o w -29120
+/o e 29120
+/o `e 29120
+/o 'e 29120
+/o ^e 29120
+/o :e 29120
+/o o 29120
+/o `o 29120
+/o 'o 29120
+/o ^o 29120
+/o ~o 29120
+/o :o 29120
+/o oe 29120
+/o /o 29120
+/o x -29120
+/o d 29120
+/o c 29120
+/o 'c 29120
+/o ,c 29120
+/o q 29120
+/o r -29120
+/o y -29120
+/o :y -29120
+/o 'y -29120
+/o w -29120
+`u w -29120
+'u w -29120
+^u w -29120
+:u w -29120
+'y o -29120
+'y `o -29120
+'y 'o -29120
+'y ^o -29120
+'y ~o -29120
+'y :o -29120
+'y oe -29120
+'y /o -29120
+'y e -29120
+'y `e -29120
+'y 'e -29120
+'y ^e -29120
+'y :e -29120
+'y a -29120
+'y `a -29120
+'y 'a -29120
+'y ^a -29120
+'y ^a -29120
+'y ~a -29120
+'y :a -29120
+'y oa -29120
+'y ae -29120
+'y . -87360
+'y , -87360
+charset
+ga 524160,669760 2 0000
+aa 524160,669760 2 0001
+a^ 524160,669760 2 0002
+a~ 524160,669760 2 0003
+ad 524160,689730 2 0004
+a" 524160,669760,0,14557 2 0005
+ao 698880,669760 2 0006
+ah 524160,669760 2 0007
+ab 524160,669760 2 0010
+a- 524160,689730 2 0011
+a. 291200,710738 2 0012
+ac 465920,0,178360 1 0013
+ho 291200,0,203840 1 0014
+bq 291200,87360,131040 1 0015
+fo 465920,463008 0 0016
+fc 465920,463008 0 0017
+lq 349440,757120 2 0020
+rq 349440,757120 2 0021
+Bq 349440,87360,131040 1 0022
+Fo 698880,463008 0 0023
+Fc 698880,463008 0 0024
+en 524160,463008,0,29120 0 0025
+em 1048320,463008,0,29120 0 0026
+--- 0,463008 0 0027
+--- 465920,782600,29120 3 0030
+.i 250432,463008 0 0031
+.j 279552,463008,203840 1 0032
+ff 611520,757120,0,72800 2 0033
+fi 562016,757120 2 0034
+fl 562016,757120 2 0035
+Fi 853216,757120 2 0036
+Fl 853216,757120 2 0037
+--- 524160,463008,101920 1 0040
+! 334880,757120 2 0041
+dq 524160,757120 2 0042
+" "
+sh 873600,757120,232960 3 0043
+# "
+Do 524160,782600,29120 3 0044
+$ "
+% 873600,782600,29120 3 0045
+& 794976,757120 2 0046
+cq 291200,757120 2 0047
+' "
+( 407680,782600,262080 3 0050
+) 407680,782600,262080 3 0051
+* 524160,782600 2 0052
+pl 815360,611520,87360 3 0053
++ "
+, 291200,87360,131040 1 0054
+- 349440,463008 0 0055
+. 291200,87360 0 0056
+sl 524160,782600,262080 3 0057
+/ "
+0 524160,689730 2 0060
+1 524160,689730 2 0061
+2 524160,689730 2 0062
+3 524160,689730 2 0063
+4 524160,689730 2 0064
+5 524160,689730 2 0065
+6 524160,689730 2 0066
+7 524160,689730 2 0067
+8 524160,689730 2 0070
+9 524160,689730 2 0071
+: 291200,463008 0 0072
+; 291200,463008,131040 1 0073
+< 815360,571045,50091 3 0074
+eq 815360,387883,-136277 0 0075
+= "
+> 815360,571045,50091 3 0076
+? 495040,757120 2 0077
+at 698880,757120 2 0100
+@ "
+A 698880,728000 2 0101
+B 698880,728000 2 0102
+C 669760,728000,0,0,-29120 2 0103
+D 757120,728000,0,0,0,-29120 2 0104
+E 626080,728000 2 0105
+F 596960,728000,0,0,0,-145600 2 0106
+G 698880,728000,0,0,-29120 2 0107
+H 742560,728000 2 0110
+I 291200,728000 2 0111
+J 495040,728000,0,0,0,-29120 2 0112
+K 728000,728000 2 0113
+L 567840,728000,0,0,0,58240 2 0114
+M 917280,728000 2 0115
+N 742560,728000 2 0116
+O 771680,728000,0,0,-29120,-29120 2 0117
+P 669760,728000,0,0,0,-145600 2 0120
+Q 771680,728000,131040,0,-29120 3 0121
+R 677040,728000 2 0122
+S 582400,728000 2 0123
+T 713440,728000,0,0,0,-145600 2 0124
+U 720720,728000,0,0,29120 2 0125
+V 698880,728000,0,14560,43680,-218400 2 0126
+W 990080,728000,0,14560,43680,-131040 2 0127
+X 698880,728000 2 0130
+Y 698880,728000,0,26208,29120,-206752 2 0131
+Z 640640,728000 2 0132
+lB 302848,782600,262080 3 0133
+[ "
+rs 524160,782600,262080 3 0134
+\ "
+rB 302848,782600,262080 3 0135
+] "
+ha 640640,757120 2 0136
+^ "
+_ 815360,0,259754 1 0137
+oq 291200,757120 2 0140
+` "
+a 503776,463008 0 0141
+b 541632,757120 2 0142
+c 465920,463008 0 0143
+d 541632,757120 2 0144
+e 465920,463008 0 0145
+f 320320,757120,0,72800 2 0146
+g 524160,463008,203840,14560 1 0147
+h 541632,757120 2 0150
+i 250432,710738 2 0151
+j 279552,710738,203840 3 0152
+k 512512,757120 2 0153
+l 250432,757120 2 0154
+m 832832,463008 0 0155
+n 541632,463008 0 0156
+o 524160,463008 0 0157
+p 541632,463008,203840 1 0160
+q 541632,463008,203840 1 0161
+r 358176,463008,0,14560 0 0162
+s 401856,463008 0 0163
+t 378560,599043 2 0164
+u 541632,463008 0 0165
+v 483392,463008,0,14560 0 0166
+w 716352,463008,0,14560 0 0167
+x 483392,463008 0 0170
+y 483392,463008,203840,14560 1 0171
+z 455728,463008 0 0172
+lC 524160,782600,262080 3 0173
+{ "
+ba 291200,782600,262080 3 0174
+bv "
+or "
+| "
+rC 524160,782600,262080 3 0175
+} "
+~ 640640,710738 2 0176
+hy 174720,463008 0 0177
+--- 698880,931840 2 0200
+--- 698880,728000,203840 3 0201
+'C 669760,892202 2 0202
+--- 669760,931840,0,0,-29120 2 0203
+--- 757120,931840,0,0,0,-29120 2 0204
+--- 626080,931840 2 0205
+--- 626080,728000,203840 3 0206
+--- 698880,931840,0,0,-29120 2 0207
+--- 567840,892202,0,0,0,58240 2 0210
+--- 567840,931840,0,0,0,58240 2 0211
+/L 655200,728000 2 0212
+--- 742560,892202 2 0213
+--- 742560,931840 2 0214
+--- 786240,728000,0,0,0,-29120 2 0215
+--- 771680,892202,0,0,-29120,-29120 2 0216
+--- 677040,892202 2 0217
+--- 677040,931840 2 0220
+--- 582400,892202 2 0221
+vS 582400,931840 2 0222
+--- 582400,728000,178360 3 0223
+--- 713440,931840,0,0,0,-145600 2 0224
+--- 713440,728000,178360,0,0,-145600 3 0225
+--- 720720,892202,0,0,29120 2 0226
+--- 720720,931840,0,0,29120 2 0227
+:Y 698880,931840,0,26208,29120,-206752 2 0230
+--- 640640,892202 2 0231
+vZ 640640,931840 2 0232
+--- 640640,892202 2 0233
+IJ 757120,728000,0,0,0,-29120 2 0234
+--- 291200,892202 2 0235
+--- 541632,757120 2 0236
+sc 465920,757120,203840 3 0237
+--- 503776,669760 2 0240
+--- 503776,463008,203840 1 0241
+'c 465920,669760 2 0242
+--- 465920,669760 2 0243
+--- 663936,757120 2 0244
+--- 465920,669760 2 0245
+--- 465920,463008,203840 1 0246
+--- 524160,669760,203840,14560 3 0247
+--- 250432,892202,0,96354 2 0250
+--- 372736,757120 2 0251
+/l 340122,757120,0,11645 2 0252
+--- 541632,669760 2 0253
+--- 541632,669760 2 0254
+--- 541632,463008,203840 1 0255
+--- 524160,669760,0,14557 2 0256
+--- 358176,669760,0,14560 2 0257
+--- 358176,669760,0,14560 2 0260
+--- 401856,669760 2 0261
+vs 401856,669760 2 0262
+--- 401856,463008,178360 1 0263
+--- 378560,757120 2 0264
+--- 378560,599043,178360 3 0265
+--- 541632,669760,0,5818 2 0266
+--- 541632,669760 2 0267
+:y 483392,689730,203840,14560 3 0270
+--- 455728,669760 2 0271
+vz 455728,669760 2 0272
+--- 455728,710738 2 0273
+ij 570752,710738,203840 3 0274
+r! 334880,553280,203840 3 0275
+r? 495040,553280,203840 3 0276
+Po 669760,757120 2 0277
+`A 698880,892202 2 0300
+'A 698880,892202 2 0301
+^A 698880,931840 2 0302
+~A 698880,931840 2 0303
+:A 698880,931840 2 0304
+oA 698880,892202 2 0305
+AE 902720,728000 2 0306
+,C 669760,728000,178360,0,-29120 3 0307
+`E 626080,892202 2 0310
+'E 626080,892202 2 0311
+^E 626080,931840 2 0312
+:E 626080,931840 2 0313
+`I 291200,892202 2 0314
+'I 291200,892202,0,78541,0,39270 2 0315
+^I 291200,931840 2 0316
+:I 291200,931840 2 0317
+-D 757120,728000,0,0,0,-29120 2 0320
+~N 742560,931840 2 0321
+`O 771680,892202,0,0,-29120,-29120 2 0322
+'O 771680,892202 2 0323
+^O 771680,931840,0,0,-29120,-29120 2 0324
+~O 771680,931840,0,0,-29120,-29120 2 0325
+:O 771680,931840,0,0,-29120,-29120 2 0326
+OE 1019200,728000 2 0327
+/O 815360,782600,50960 3 0330
+`U 720720,892202,0,0,29120 2 0331
+'U 720720,892202 2 0332
+^U 720720,931840,0,0,29120 2 0333
+:U 720720,931840,0,0,29120 2 0334
+'Y 698880,892202,0,26208,29120,-206752 2 0335
+TP 611520,728000 2 0336
+--- 1164800,728000 2 0337
+`a 503776,669760 2 0340
+'a 503776,669760 2 0341
+^a 503776,669760 2 0342
+~a 503776,669760 2 0343
+:a 503776,689730 2 0344
+oa 503776,669760 2 0345
+ae 757120,463008 0 0346
+,c 465920,463008,178360 1 0347
+`e 465920,669760 2 0350
+'e 465920,669760 2 0351
+^e 465920,669760 2 0352
+:e 465920,689730 2 0353
+`i 250432,669760 2 0354
+'i 250432,669760,0,34946 2 0355
+^i 250432,669760 2 0356
+:i 308672,689730 2 0357
+Sd 524160,757120 2 0360
+~n 541632,669760 2 0361
+`o 524160,669760 2 0362
+'o 524160,669760 2 0363
+^o 524160,669760 2 0364
+~o 524160,669760 2 0365
+:o 524160,689730 2 0366
+oe 815360,463008 0 0367
+/o 524160,571045,101920 3 0370
+`u 541632,669760 2 0371
+'u 541632,669760 2 0372
+^u 541632,669760 2 0373
+:u 541632,689730 2 0374
+'y 483392,669760,203840,14560 3 0375
+Tp 541632,757120,203840 3 0376
+ss 503776,757120 2 0377
diff --git a/contrib/groff/font/devdvi/HRTC b/contrib/groff/font/devdvi/HRTC
new file mode 100644
index 0000000..d312c4e
--- /dev/null
+++ b/contrib/groff/font/devdvi/HRTC
@@ -0,0 +1,138 @@
+name HRTC
+special
+internalname tcss1000
+spacewidth 349440
+checksum 1552149760
+designsize 10485760
+charset
+--- 524160,631051 2 0000
+--- 524160,631051 2 0001
+--- 524160,662478 2 0002
+--- 524160,662478 2 0003
+--- 524160,662478 2 0004
+--- 524160,631051,0,46502 2 0005
+--- 720720,662478 2 0006
+--- 524160,662478 2 0007
+--- 524160,662478 2 0010
+--- 524160,662478 2 0011
+--- 291200,631051 2 0012
+--- 465920,0,178360 1 0013
+--- 291200,0,203840 1 0014
+--- 407680,87360,203840 1 0015
+--- 524160,87360,203840 1 0022
+--- 698880,465920,0,29120 0 0025
+--- 786240,465920,0,29120 0 0026
+--- 0,728000 2 0027
+<- 1048320,387883,-136277 0 0030
+-> 1048320,387883,-136277 0 0031
+--- 250432,757120,0,302848 2 0032
+--- 308672,1019200,0,331968 2 0033
+--- 483392,757120,0,302848 2 0034
+--- 483392,757120,0,331968 2 0035
+--- 0,757120 2 0037
+--- 541632,757120 2 0040
+Do 524160,786240,29120 3 0044
+$ "
+aq 291200,757120 2 0047
+** 524160,495040,-29120 2 0052
+, 291200,87360,131040 1 0054
+--- 349440,387883,-136277 0 0055
+. 291200,87360 0 0056
+f/ 524160,786240,262080 3 0057
+0 524160,465920 0 0060
+1 524160,465920 0 0061
+2 524160,465920 0 0062
+3 524160,465920,203840 1 0063
+4 524160,465920,203840 1 0064
+5 524160,465920,203840 1 0065
+6 524160,687232 2 0066
+7 524160,465920,203840 1 0067
+8 524160,687232 2 0070
+9 524160,465920,203840 1 0071
+la 407680,786240,262080 3 0074
+mi 815360,605282,87360 3 0075
+\- "
+ra 407680,786240,262080 3 0076
+--- 757120,728000 2 0115
+ci 1164800,786240,262080 3 0117
+--- 757120,728000 2 0127
+--- 422240,786240,262080 3 0133
+--- 422240,786240,262080 3 0135
+ua 524160,757120,232960 3 0136
+da 524160,757120,232960 3 0137
+--- 524160,757120 2 0140
+--- 524160,495040,-29120 2 0142
+--- 524160,495040,-29120 2 0143
+--- 524160,662478,29122 3 0144
+--- 1048320,757120 2 0154
+--- 524160,495040,-29120 2 0155
+--- 640640,757120 2 0156
+ti 640640,133120 0 0176
+~ "
+--- 174720,387883,-136277 0 0177
+--- 640640,757120 2 0200
+--- 640640,757120 2 0201
+--- 524160,757120 2 0202
+--- 524160,757120 2 0203
+dg 465920,757120,203840 3 0204
+dd 465920,757120,203840 3 0205
+--- 524160,786240,262080 3 0206
+%O 1223040,786240,29120 3 0207
+bu 524160,465920,-58240 0 0210
+--- 902720,728000,0,0,-29120 2 0211
+--- 640640,786240,29120 3 0212
+--- 524160,560560,101920 3 0213
+Fn 320320,757120,0,72800 2 0214
+--- 669760,786240,29120,0,-29120 3 0215
+--- 990080,728000,0,14560,43680,-131040 2 0216
+--- 771680,728000 2 0217
+--- 815360,786240,29120,0,-29120 3 0220
+--- 684320,728000,0,0,0,-145600 2 0221
+--- 669760,757120 2 0222
+--- 677040,728000 2 0223
+--- 495040,757120 2 0224
+--- 495040,560560,203840 3 0225
+--- 541632,786240 2 0226
+tm 698880,786240,0,550366 2 0227
+--- 1612550,786240,29120 3 0230
+--- 495040,757120,203840 3 0231
+--- 698880,786240,29120 3 0232
+--- 859040,728000 2 0233
+--- 524160,786240 2 0234
+--- 701792,728000 2 0235
+--- 524160,465920,-58240 0 0236
+--- 698880,786240,0,550366 2 0237
+--- 378560,786240,262080 3 0240
+--- 378560,786240,262080 3 0241
+ct 524160,560560,101920 3 0242
+Po 669760,757120 2 0243
+Cs 793402,605282 2 0244
+Ye 698880,728000,0,26208 2 0245
+bb 174720,786240,262080 3 0246
+sc 465920,757120,203840 3 0247
+--- 524160,712194 2 0250
+co 1164800,786240,262080 3 0251
+Of 465920,786240 2 0252
+--- 1164800,786240,262080 3 0253
+no 698880,465920 0 0254
+--- 1164800,786240,262080 3 0255
+rg 1164800,786240,262080 3 0256
+rn 815360,757120 2 0257
+de 349440,728000 2 0260
+t+- 815360,605282,87360 3 0261
+S2 465920,786240 2 0262
+S3 465920,786240 2 0263
+--- 524160,757120 2 0264
+mc 541632,465920,203840 1 0265
+ps 640640,757120,203840 3 0266
+pc 247520,465920 0 0267
+--- 679466,560560 2 0270
+S1 465920,786240 2 0271
+Om 465920,786240 2 0272
+--- 495040,786240,220138 3 0273
+14 465920,786240,203840 3 0274
+12 465920,786240,203840 3 0275
+34 465920,786240,203840 3 0276
+Eu 815360,728000 2 0277
+tmu 815360,605282,87360 3 0326
+tdi 815360,605282,87360 3 0366
diff --git a/contrib/groff/font/devdvi/MI b/contrib/groff/font/devdvi/MI
index 2b2e349..d3b0fcf 100644
--- a/contrib/groff/font/devdvi/MI
+++ b/contrib/groff/font/devdvi/MI
@@ -27,8 +27,8 @@ charset
*i 371130,451470 0 0023
*k 604147,451470 0 0024
*l 611672,728178 2 0025
-char181 631819,451470,203890 1 0026
-*m "
+*m 631819,451470,203890 1 0026
+mc "
*n 517979,451470,0,66750 0 0027
*c 458754,728178,203890,48242 3 0030
*p 597717,451470,0,37622 0 0031
diff --git a/contrib/groff/font/devdvi/Makefile.sub b/contrib/groff/font/devdvi/Makefile.sub
index 5f30be2..098e602 100644
--- a/contrib/groff/font/devdvi/Makefile.sub
+++ b/contrib/groff/font/devdvi/Makefile.sub
@@ -1,8 +1,14 @@
DEV=dvi
-DEVFILES=DESC R I B BI CW CWI MI S EX H HI HB SA SB \
- generate/CompileFonts generate/Makefile generate/msam.map generate/msbm.map \
+DEVFILES=DESC \
+ TR TI TB TBI CW CWI HR HI HB HBI \
+ TREC TIEC TBEC TBIEC CWEC CWIEC HREC HIEC HBEC HBIEC \
+ TRTC TITC TBTC TBITC CWTC CWITC HRTC HITC HBTC HBITC \
+ MI S EX SA SB \
+ 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
+ generate/texr.map generate/texsy.map generate/textt.map \
+ generate/ec.map generate/tc.map
CLEANADD=DESC
diff --git a/contrib/groff/font/devdvi/S b/contrib/groff/font/devdvi/S
index 75abc6c..810c11e 100644
--- a/contrib/groff/font/devdvi/S
+++ b/contrib/groff/font/devdvi/S
@@ -7,15 +7,15 @@ designsize 10485760
charset
mi 815562,611670,87382 3 0000
\- "
-md 291272,466035,-58253 2 0001
-pc "
-char215 815562,611670,87382 3 0002
+pc 291272,466035,-58253 2 0001
+md "
+tmu 815562,611670,87382 3 0002
mu "
** 524290,487880,-36408 2 0003
-char247 815562,611670,87382 3 0004
+tdi 815562,611670,87382 3 0004
di "
--- 524290,466035,-58253 2 0005
-char177 815562,611670,87382 3 0006
+t+- 815562,611670,87382 3 0006
+- "
-+ 815562,611670,87382 3 0007
c+ 815562,611670,87382 3 0010
@@ -71,8 +71,7 @@ slashnot 0,728178,203888 3 0066
--- 0,384696,-139592 0 0067
fa 582544,728178 2 0070
te 582544,728178 2 0071
-char172 699053,451470 0 0072
-no "
+no 699053,451470 0 0072
es 524290,786432,58254 3 0073
Re 757307,728178 2 0074
Im 757307,728178 2 0075
@@ -141,12 +140,10 @@ gr 873816,716526 2 0162
--- 699053,582544 2 0165
--- 815562,666864,142576 3 0166
--- 815562,666864,142576 3 0167
-char167 466037,728178,203890 3 0170
-sc "
+sc 466037,728178,203890 3 0170
dg 466035,728178,203890 3 0171
dd 466035,728178,203890 3 0172
-char182 640798,728178,203890 3 0173
-ps "
+ps 640798,728178,203890 3 0173
CL 815562,728178,135926 3 0174
DI 815562,728178,135926 3 0175
HE 815562,728178,135926 3 0176
diff --git a/contrib/groff/font/devdvi/SA b/contrib/groff/font/devdvi/SA
index 91879fc..e78e601 100644
--- a/contrib/groff/font/devdvi/SA
+++ b/contrib/groff/font/devdvi/SA
@@ -92,8 +92,7 @@ lesseqgtr 815562,928714,404426 3 0121
gtreqless 815562,928714,404426 3 0122
lesseqqgtr 815562,1030294,506006 3 0123
gtreqqless 815562,1030294,506006 3 0124
-char165 786434,707789,0,26214 2 0125
-Ye "
+Ye 786434,707789,0,26214 2 0125
yen "
Rrightarrow 1048579,667592,143304 3 0126
Lleftarrow 1048579,667592,143304 3 0127
@@ -126,7 +125,6 @@ ggg 1398106,576570,36882 3 0157
ulcorner 524290,725867 2 0160
urcorner 524290,725867 2 0161
rg 992648,725867,163146 3 0162
-char174 "
circledR "
circledS 946045,725867,163146 3 0163
pitchfork 699053,725867 2 0164
diff --git a/contrib/groff/font/devdvi/TB b/contrib/groff/font/devdvi/TB
new file mode 100644
index 0000000..92b231a
--- /dev/null
+++ b/contrib/groff/font/devdvi/TB
@@ -0,0 +1,346 @@
+#
+# manually added kernings for `` and ''
+#
+name TB
+internalname cmbx10
+spacewidth 401952
+ligatures ff fi fl ffi ffl 0
+checksum 452076118
+designsize 10485760
+kernpairs
+ff ' 114323
+ff cq 114323
+ff ? 114323
+ff ! 114323
+ff ) 114323
+ff rB 114323
+ff ] 114323
+' ' -100488
+' cq -100488
+cq ' -100488
+cq cq -100488
+' ? 133984
+cq ? 133984
+' ! 133984
+cq ! 133984
+A t -33496
+A C -33496
+A O -33496
+A G -33496
+A U -33496
+A Q -33496
+A T -100488
+A Y -100488
+A V -133984
+A W -133984
+D X -33496
+D W -33496
+D A -33496
+D V -33496
+D Y -33496
+F o -100488
+F e -100488
+F u -100488
+F r -100488
+F a -100488
+F A -133984
+F O -33496
+F C -33496
+F G -33496
+F Q -33496
+I I 33496
+K O -33496
+K C -33496
+K G -33496
+K Q -33496
+L T -100488
+L Y -100488
+L V -133984
+L W -133984
+O X -33496
+O W -33496
+O A -33496
+O V -33496
+O Y -33496
+P A -100488
+P o -33496
+P e -33496
+P a -33496
+P . -100488
+P , -100488
+R t -33496
+R C -33496
+R O -33496
+R G -33496
+R U -33496
+R Q -33496
+R T -100488
+R Y -100488
+R V -133984
+R W -133984
+T y -33496
+T e -100488
+T o -100488
+T r -100488
+T a -100488
+T A -100488
+T u -100488
+V o -100488
+V e -100488
+V u -100488
+V r -100488
+V a -100488
+V A -133984
+V O -33496
+V C -33496
+V G -33496
+V Q -33496
+W o -100488
+W e -100488
+W u -100488
+W r -100488
+W a -100488
+W A -133984
+W O -33496
+W C -33496
+W G -33496
+W Q -33496
+X O -33496
+X C -33496
+X G -33496
+X Q -33496
+Y e -100488
+Y o -100488
+Y r -100488
+Y a -100488
+Y A -100488
+Y u -100488
+oq oq -100488
+oq ` -100488
+` oq -100488
+` ` -100488
+a v -33496
+a j 66992
+a y -33496
+a w -33496
+b e 33496
+b o 33496
+b x -33496
+b d 33496
+b c 33496
+b q 33496
+b v -33496
+b j 66992
+b y -33496
+b w -33496
+c h -33496
+c k -33496
+f ' 114323
+f cq 114323
+f ? 114323
+f ! 114323
+f ) 114323
+f rB 114323
+f ] 114323
+g j 33496
+h t -33496
+h u -33496
+h b -33496
+h y -33496
+h v -33496
+h w -33496
+k a -66992
+k e -33496
+k a -33496
+k o -33496
+k c -33496
+m t -33496
+m u -33496
+m b -33496
+m y -33496
+m v -33496
+m w -33496
+n t -33496
+n u -33496
+n b -33496
+n y -33496
+n v -33496
+n w -33496
+o e 33496
+o o 33496
+o x -33496
+o d 33496
+o c 33496
+o q 33496
+o v -33496
+o j 66992
+o y -33496
+o w -33496
+p e 33496
+p o 33496
+p x -33496
+p d 33496
+p c 33496
+p q 33496
+p v -33496
+p j 66992
+p y -33496
+p w -33496
+t y -33496
+t w -33496
+u w -33496
+v a -66992
+v e -33496
+v a -33496
+v o -33496
+v c -33496
+w e -33496
+w a -33496
+w o -33496
+w c -33496
+y o -33496
+y e -33496
+y a -33496
+y . -100488
+y , -100488
+charset
+*G 725261,719440,0,0,0,-167480 2 0000
+*D 1004880,719440 2 0001
+*H 937888,719440,0,0,-33496,-33496 2 0002
+*L 844682,719440 2 0003
+*C 803904,719440 2 0004
+*P 943714,719440 2 0005
+*S 870896,719440 2 0006
+*U 937888,719440,0,0,-33496,-167480 2 0007
+*F 870896,719440,0,0,-33496 2 0010
+*Q 937888,719440,0,0,-33496,-83741 2 0011
+*W 870896,719440 2 0012
+ff 703416,728178,0,114323 2 0013
+fi 669920,728178 2 0014
+fl 669920,728178 2 0015
+Fi 1004880,728178 2 0016
+Fl 1004880,728178 2 0017
+.i 334960,466034 0 0020
+.j 368456,466034,203890 1 0021
+ga 602928,728178 2 0022
+aa 602928,728178 2 0023
+ah 602928,662642 2 0024
+ab 602928,728178 2 0025
+a- 602928,625066 2 0026
+ao 911674,728178 2 0027
+ac 535936,0,178403 1 0030
+ss 626230,728178 2 0031
+ae 870896,466034 0 0032
+oe 937888,466034 0 0033
+/o 602928,567979,101946 3 0034
+AE 1092261,719440 2 0035
+OE 1226245,719440 2 0036
+/O 937888,770413,50973 3 0037
+--- 334960,466034 0 0040
+! 367000,728178 2 0041
+rq 632056,728178 2 0042
+sh 1004880,728178,203888 3 0043
+# "
+Do 602928,786432,58254 3 0044
+$ "
+% 1004880,786432,58254 3 0045
+& 937888,728178 2 0046
+cq 334960,728178 2 0047
+' "
+( 468944,786432,262144 3 0050
+) 468944,786432,262144 3 0051
+* 602928,786432 2 0052
++ 937888,664096,139808 3 0053
+, 334960,163112,203890 1 0054
+hy 401952,466034 0 0055
+- "
+. 334960,163112 0 0056
+sl 602928,786432,262144 3 0057
+/ "
+0 602928,675749 2 0060
+1 602928,675749 2 0061
+2 602928,675749 2 0062
+3 602928,675749 2 0063
+4 602928,675749 2 0064
+5 602928,675749 2 0065
+6 602928,675749 2 0066
+7 602928,675749 2 0067
+8 602928,675749 2 0070
+9 602928,675749 2 0071
+: 334960,466034 0 0072
+; 334960,466034,203890 1 0073
+r! 367000,524288,203890 3 0074
+= 937888,410110,-114178 0 0075
+r? 569432,524288,203890 3 0076
+? 569432,728178 2 0077
+at 937888,728178 2 0100
+@ "
+A 911674,719440 2 0101
+B 857789,719440 2 0102
+C 870896,719440,0,0,-33496 2 0103
+D 924781,719440,0,0,0,-33496 2 0104
+E 792253,719440 2 0105
+F 758757,719440,0,0,0,-167480 2 0106
+G 948083,719440,0,0,-33496 2 0107
+H 943714,719440 2 0110
+I 457294,719440 2 0111
+J 623317,719440,0,0,0,-33496 2 0112
+K 945170,719440 2 0113
+L 725261,719440,0,0,0,66992 2 0114
+M 1144690,719440 2 0115
+N 943714,719440 2 0116
+O 905848,719440,0,0,-33496,-33496 2 0117
+P 824293,719440,0,0,0,-167480 2 0120
+Q 905848,719440,203890,0,-33496 3 0121
+R 904392,719440 2 0122
+S 669920,719440 2 0123
+T 838856,719440,0,0,0,-167480 2 0124
+U 927694,719440,0,0,-20389 2 0125
+V 911674,719440,0,16749,50245,-251219 2 0126
+W 1246634,719440,0,16749,50245,-150731 2 0127
+X 911674,719440 2 0130
+Y 911674,719440,0,30146,33496,-237822 2 0131
+Z 736912,719440 2 0132
+lB 334960,786432,262144 3 0133
+[ "
+lq 632056,728178 2 0134
+rB 334960,786432,262144 3 0135
+] "
+ha 602928,728178 2 0136
+^ "
+a^ "
+a. 334960,728178 2 0137
+oq 334960,728178 2 0140
+` "
+a 586179,466034 0 0141
+b 669920,728178 2 0142
+c 535936,466034 0 0143
+d 669920,728178 2 0144
+e 552685,466034 0 0145
+f 368456,728178,0,114323 2 0146
+g 602928,466034,203890,16749 1 0147
+h 669920,728178 2 0150
+i 334960,728178 2 0151
+j 368456,728178,203890 3 0152
+k 636424,728178 2 0153
+l 334960,728178 2 0154
+m 1004880,466034 0 0155
+n 669920,466034 0 0156
+o 602928,466034 0 0157
+p 669920,466034,203890 1 0160
+q 636424,466034,203890 1 0161
+r 496616,466034 0 0162
+s 475643,466034 0 0163
+t 468944,665763 2 0164
+u 669920,466034 0 0165
+v 636424,466034,0,16749 0 0166
+w 870896,466034,0,16749 0 0167
+x 636424,466034 0 0170
+y 636424,466034,203890,16749 1 0171
+z 535936,466034 0 0172
+en 602928,466034,0,33496 0 0173
+em 1205856,466034,0,33496 0 0174
+a" 602928,728178 2 0175
+~ 602928,728178 2 0176
+a~ "
+ad 602928,728178 2 0177
diff --git a/contrib/groff/font/devdvi/TBEC b/contrib/groff/font/devdvi/TBEC
new file mode 100644
index 0000000..ad3cf55
--- /dev/null
+++ b/contrib/groff/font/devdvi/TBEC
@@ -0,0 +1,1706 @@
+name TBEC
+internalname ecbx1000
+spacewidth 401856
+ligatures ff fi fl ffi ffl 0
+checksum 39675532
+designsize 10485760
+kernpairs
+bq Bq 133952
+bq j 133952
+bq .j 133952
+bq g 66976
+bq y 66976
+bq :y 66976
+bq 'y 66976
+bq v -100464
+bq w -66976
+bq V -133952
+bq W -100464
+bq Y -100464
+bq :Y -100464
+bq 'Y -100464
+bq O -33488
+bq `O -33488
+bq 'O -33488
+bq ^O -33488
+bq ~O -33488
+bq :O -33488
+bq OE -33488
+bq /O -33488
+bq C -33488
+bq G -33488
+bq 'C -33488
+bq ,C -33488
+bq Q -33488
+lq oq 133952
+lq ` 133952
+lq lq 133952
+rq cq 133952
+rq ' 133952
+rq rq 133952
+Bq bq 133952
+Bq , 133952
+Bq Bq 133952
+Bq j 133952
+Bq .j 133952
+Bq g 66976
+Bq y 66976
+Bq :y 66976
+Bq 'y 66976
+Bq v -100464
+Bq w -66976
+Bq V -133952
+Bq W -100464
+Bq Y -100464
+Bq :Y -100464
+Bq 'Y -100464
+Bq O -33488
+Bq `O -33488
+Bq 'O -33488
+Bq ^O -33488
+Bq ~O -33488
+Bq :O -33488
+Bq OE -33488
+Bq /O -33488
+Bq C -33488
+Bq G -33488
+Bq 'C -33488
+Bq ,C -33488
+Bq Q -33488
+Fc . -100464
+Fc , -100464
+ff cq 114296
+ff ' 114296
+ff oq 114296
+ff ` 114296
+ff lq 114296
+ff rq 114296
+ff ? 114296
+ff ! 114296
+ff ) 114296
+ff rB 114296
+ff ] 114296
+cq rq 133952
+' rq 133952
+cq ? 133952
+' ? 133952
+cq ! 133952
+' ! 133952
+A y -100464
+A :y -100464
+A 'y -100464
+A v -133952
+A w -100464
+A c -33488
+A 'c -33488
+A ,c -33488
+A d -33488
+A Sd -33488
+A e -33488
+A `e -33488
+A 'e -33488
+A ^e -33488
+A :e -33488
+A o -33488
+A `o -33488
+A 'o -33488
+A ^o -33488
+A ~o -33488
+A :o -33488
+A oe -33488
+A /o -33488
+A q -33488
+A t -33488
+A C -33488
+A G -33488
+A 'C -33488
+A ,C -33488
+A Q -33488
+A O -33488
+A `O -33488
+A 'O -33488
+A ^O -33488
+A ~O -33488
+A :O -33488
+A OE -33488
+A /O -33488
+A U -33488
+A `U -33488
+A 'U -33488
+A ^U -33488
+A :U -33488
+A T -100464
+A Y -100464
+A :Y -100464
+A 'Y -100464
+A V -133952
+A W -133952
+D X -33488
+D W -33488
+D A -33488
+D `A -33488
+D 'A -33488
+D ^A -33488
+D ~A -33488
+D :A -33488
+D oA -33488
+D AE -33488
+D V -33488
+D Y -33488
+D :Y -33488
+D 'Y -33488
+F o -100464
+F a -100464
+F e -100464
+F y -100464
+F u -100464
+F r -100464
+F v -100464
+F s -100464
+F c -100464
+F d -100464
+F g -100464
+F m -100464
+F n -100464
+F p -100464
+F w -100464
+F z -100464
+F ae -100464
+F /o -100464
+F A -133952
+F `A -133952
+F 'A -133952
+F ^A -133952
+F ~A -133952
+F :A -133952
+F oA -133952
+F AE -133952
+F O -33488
+F `O -33488
+F 'O -33488
+F ^O -33488
+F ~O -33488
+F :O -33488
+F OE -33488
+F /O -33488
+F C -33488
+F G -33488
+F 'C -33488
+F ,C -33488
+F Q -33488
+I I 33488
+K v -100464
+K w -33488
+K o -33488
+K `o -33488
+K 'o -33488
+K ^o -33488
+K ~o -33488
+K :o -33488
+K oe -33488
+K /o -33488
+K C -33488
+K G -33488
+K 'C -33488
+K ,C -33488
+K Q -33488
+L T -100464
+L Y -100464
+L :Y -100464
+L 'Y -100464
+L V -133952
+L W -133952
+O X -33488
+O W -33488
+O A -33488
+O `A -33488
+O 'A -33488
+O ^A -33488
+O ~A -33488
+O :A -33488
+O oA -33488
+O AE -33488
+O V -33488
+O Y -33488
+O :Y -33488
+O 'Y -33488
+P A -100464
+P `A -100464
+P 'A -100464
+P ^A -100464
+P ~A -100464
+P :A -100464
+P oA -100464
+P AE -100464
+P o -33488
+P `o -33488
+P 'o -33488
+P ^o -33488
+P ~o -33488
+P :o -33488
+P oe -33488
+P /o -33488
+P e -33488
+P `e -33488
+P 'e -33488
+P ^e -33488
+P :e -33488
+P a -33488
+P `a -33488
+P 'a -33488
+P ^a -33488
+P ^a -33488
+P ~a -33488
+P :a -33488
+P oa -33488
+P ae -33488
+P . -100464
+P , -100464
+R t -33488
+R C -33488
+R G -33488
+R 'C -33488
+R ,C -33488
+R Q -33488
+R O -33488
+R `O -33488
+R 'O -33488
+R ^O -33488
+R ~O -33488
+R :O -33488
+R OE -33488
+R /O -33488
+R U -33488
+R `U -33488
+R 'U -33488
+R ^U -33488
+R :U -33488
+R T -100464
+R Y -100464
+R :Y -100464
+R 'Y -100464
+R V -133952
+R W -133952
+T y -33488
+T e -100464
+T o -100464
+T r -100464
+T a -100464
+T u -100464
+T n -100464
+T .i -100464
+T c -100464
+T d -100464
+T g -100464
+T p -100464
+T s -100464
+T v -100464
+T w -100464
+T x -100464
+T z -100464
+T A -100464
+T `A -100464
+T 'A -100464
+T ^A -100464
+T ~A -100464
+T :A -100464
+T oA -100464
+T AE -100464
+V o -100464
+V a -100464
+V e -100464
+V y -100464
+V u -100464
+V r -100464
+V v -100464
+V s -100464
+V c -100464
+V d -100464
+V g -100464
+V m -100464
+V n -100464
+V p -100464
+V w -100464
+V z -100464
+V ae -100464
+V /o -100464
+V A -133952
+V `A -133952
+V 'A -133952
+V ^A -133952
+V ~A -133952
+V :A -133952
+V oA -133952
+V AE -133952
+V O -33488
+V `O -33488
+V 'O -33488
+V ^O -33488
+V ~O -33488
+V :O -33488
+V OE -33488
+V /O -33488
+V C -33488
+V G -33488
+V 'C -33488
+V ,C -33488
+V Q -33488
+W o -100464
+W a -100464
+W e -100464
+W y -100464
+W u -100464
+W r -100464
+W v -100464
+W s -100464
+W c -100464
+W d -100464
+W g -100464
+W m -100464
+W n -100464
+W p -100464
+W w -100464
+W z -100464
+W ae -100464
+W /o -100464
+W A -133952
+W `A -133952
+W 'A -133952
+W ^A -133952
+W ~A -133952
+W :A -133952
+W oA -133952
+W AE -133952
+W O -33488
+W `O -33488
+W 'O -33488
+W ^O -33488
+W ~O -33488
+W :O -33488
+W OE -33488
+W /O -33488
+W C -33488
+W G -33488
+W 'C -33488
+W ,C -33488
+W Q -33488
+X O -33488
+X `O -33488
+X 'O -33488
+X ^O -33488
+X ~O -33488
+X :O -33488
+X OE -33488
+X /O -33488
+X C -33488
+X G -33488
+X 'C -33488
+X ,C -33488
+X Q -33488
+Y e -100464
+Y o -100464
+Y r -100464
+Y a -100464
+Y u -100464
+Y n -100464
+Y .i -100464
+Y c -100464
+Y d -100464
+Y g -100464
+Y p -100464
+Y s -100464
+Y v -100464
+Y w -100464
+Y x -100464
+Y z -100464
+Y A -100464
+Y `A -100464
+Y 'A -100464
+Y ^A -100464
+Y ~A -100464
+Y :A -100464
+Y oA -100464
+Y AE -100464
+oq lq 133952
+` lq 133952
+oq ? 133952
+` ? 133952
+oq ! 133952
+` ! 133952
+a v -33488
+a j 66976
+a y -33488
+a :y -33488
+a 'y -33488
+a w -33488
+b e 33488
+b `e 33488
+b 'e 33488
+b ^e 33488
+b :e 33488
+b o 33488
+b `o 33488
+b 'o 33488
+b ^o 33488
+b ~o 33488
+b :o 33488
+b oe 33488
+b /o 33488
+b x -33488
+b d 33488
+b c 33488
+b 'c 33488
+b ,c 33488
+b q 33488
+b v -33488
+b j 66976
+b y -33488
+b :y -33488
+b 'y -33488
+b w -33488
+c h -33488
+c k -33488
+e V -100464
+f cq 114296
+f ' 114296
+f oq 114296
+f ` 114296
+f lq 114296
+f rq 114296
+f ? 114296
+f ! 114296
+f ) 114296
+f rB 114296
+f ] 114296
+g j 33488
+h W -100464
+h V -100464
+h t -33488
+h u -33488
+h `u -33488
+h 'u -33488
+h ^u -33488
+h :u -33488
+h b -33488
+h y -33488
+h v -33488
+h w -33488
+k W -100464
+k V -100464
+k a -66976
+k `a -66976
+k 'a -66976
+k ^a -66976
+k ^a -66976
+k ~a -66976
+k :a -66976
+k oa -66976
+k ae -66976
+k e -33488
+k `e -33488
+k 'e -33488
+k ^e -33488
+k :e -33488
+k a -33488
+k `a -33488
+k 'a -33488
+k ^a -33488
+k ^a -33488
+k ~a -33488
+k :a -33488
+k oa -33488
+k ae -33488
+k o -33488
+k `o -33488
+k 'o -33488
+k ^o -33488
+k ~o -33488
+k :o -33488
+k oe -33488
+k /o -33488
+k c -33488
+k 'c -33488
+k ,c -33488
+m W -100464
+m V -100464
+m t -33488
+m u -33488
+m `u -33488
+m 'u -33488
+m ^u -33488
+m :u -33488
+m b -33488
+m y -33488
+m v -33488
+m w -33488
+n W -100464
+n V -100464
+n t -33488
+n u -33488
+n `u -33488
+n 'u -33488
+n ^u -33488
+n :u -33488
+n b -33488
+n y -33488
+n v -33488
+n w -33488
+o e 33488
+o `e 33488
+o 'e 33488
+o ^e 33488
+o :e 33488
+o o 33488
+o `o 33488
+o 'o 33488
+o ^o 33488
+o ~o 33488
+o :o 33488
+o oe 33488
+o /o 33488
+o x -33488
+o d 33488
+o c 33488
+o 'c 33488
+o ,c 33488
+o q 33488
+o v -33488
+o j 66976
+o y -33488
+o :y -33488
+o 'y -33488
+o w -33488
+p e 33488
+p `e 33488
+p 'e 33488
+p ^e 33488
+p :e 33488
+p o 33488
+p `o 33488
+p 'o 33488
+p ^o 33488
+p ~o 33488
+p :o 33488
+p oe 33488
+p /o 33488
+p x -33488
+p d 33488
+p c 33488
+p 'c 33488
+p ,c 33488
+p q 33488
+p v -33488
+p j 66976
+p y -33488
+p :y -33488
+p 'y -33488
+p w -33488
+t y -33488
+t :y -33488
+t 'y -33488
+t w -33488
+u w -33488
+v a -66976
+v `a -66976
+v 'a -66976
+v ^a -66976
+v ^a -66976
+v ~a -66976
+v :a -66976
+v oa -66976
+v ae -66976
+v e -33488
+v `e -33488
+v 'e -33488
+v ^e -33488
+v :e -33488
+v a -33488
+v `a -33488
+v 'a -33488
+v ^a -33488
+v ^a -33488
+v ~a -33488
+v :a -33488
+v oa -33488
+v ae -33488
+v o -33488
+v `o -33488
+v 'o -33488
+v ^o -33488
+v ~o -33488
+v :o -33488
+v oe -33488
+v /o -33488
+v c -33488
+v 'c -33488
+v ,c -33488
+w e -33488
+w `e -33488
+w 'e -33488
+w ^e -33488
+w :e -33488
+w a -33488
+w `a -33488
+w 'a -33488
+w ^a -33488
+w ^a -33488
+w ~a -33488
+w :a -33488
+w oa -33488
+w ae -33488
+w o -33488
+w `o -33488
+w 'o -33488
+w ^o -33488
+w ~o -33488
+w :o -33488
+w oe -33488
+w /o -33488
+w c -33488
+w 'c -33488
+w ,c -33488
+y o -33488
+y `o -33488
+y 'o -33488
+y ^o -33488
+y ~o -33488
+y :o -33488
+y oe -33488
+y /o -33488
+y e -33488
+y `e -33488
+y 'e -33488
+y ^e -33488
+y :e -33488
+y a -33488
+y `a -33488
+y 'a -33488
+y ^a -33488
+y ^a -33488
+y ~a -33488
+y :a -33488
+y oa -33488
+y ae -33488
+y . -100464
+y , -100464
+'C v -133952
+'C w -100464
+'C c -33488
+'C 'c -33488
+'C ,c -33488
+'C d -33488
+'C Sd -33488
+'C e -33488
+'C `e -33488
+'C 'e -33488
+'C ^e -33488
+'C :e -33488
+'C o -33488
+'C `o -33488
+'C 'o -33488
+'C ^o -33488
+'C ~o -33488
+'C :o -33488
+'C oe -33488
+'C /o -33488
+'C q -33488
+'C t -33488
+'C C -33488
+'C G -33488
+'C 'C -33488
+'C ,C -33488
+'C Q -33488
+'C O -33488
+'C `O -33488
+'C 'O -33488
+'C ^O -33488
+'C ~O -33488
+'C :O -33488
+'C OE -33488
+'C /O -33488
+'C U -33488
+'C `U -33488
+'C 'U -33488
+'C ^U -33488
+'C :U -33488
+'C T -100464
+'C Y -100464
+'C :Y -100464
+'C 'Y -100464
+'C V -133952
+'C W -133952
+/L T -100464
+/L Y -100464
+/L :Y -100464
+/L 'Y -100464
+/L V -133952
+/L W -133952
+:Y e -100464
+:Y o -100464
+:Y r -100464
+:Y a -100464
+:Y u -100464
+:Y n -100464
+:Y .i -100464
+:Y c -100464
+:Y d -100464
+:Y g -100464
+:Y p -100464
+:Y s -100464
+:Y v -100464
+:Y w -100464
+:Y x -100464
+:Y z -100464
+:Y A -100464
+:Y `A -100464
+:Y 'A -100464
+:Y ^A -100464
+:Y ~A -100464
+:Y :A -100464
+:Y oA -100464
+:Y AE -100464
+'c h -33488
+'c k -33488
+/l cq 33488
+/l ' 33488
+:y o -33488
+:y `o -33488
+:y 'o -33488
+:y ^o -33488
+:y ~o -33488
+:y :o -33488
+:y oe -33488
+:y /o -33488
+:y e -33488
+:y `e -33488
+:y 'e -33488
+:y ^e -33488
+:y :e -33488
+:y a -33488
+:y `a -33488
+:y 'a -33488
+:y ^a -33488
+:y ^a -33488
+:y ~a -33488
+:y :a -33488
+:y oa -33488
+:y ae -33488
+:y . -100464
+:y , -100464
+`A y -100464
+`A :y -100464
+`A 'y -100464
+`A v -133952
+`A w -100464
+`A c -33488
+`A 'c -33488
+`A ,c -33488
+`A d -33488
+`A Sd -33488
+`A e -33488
+`A `e -33488
+`A 'e -33488
+`A ^e -33488
+`A :e -33488
+`A o -33488
+`A `o -33488
+`A 'o -33488
+`A ^o -33488
+`A ~o -33488
+`A :o -33488
+`A oe -33488
+`A /o -33488
+`A q -33488
+`A t -33488
+`A C -33488
+`A G -33488
+`A 'C -33488
+`A ,C -33488
+`A Q -33488
+`A O -33488
+`A `O -33488
+`A 'O -33488
+`A ^O -33488
+`A ~O -33488
+`A :O -33488
+`A OE -33488
+`A /O -33488
+`A U -33488
+`A `U -33488
+`A 'U -33488
+`A ^U -33488
+`A :U -33488
+`A T -100464
+`A Y -100464
+`A :Y -100464
+`A 'Y -100464
+`A V -133952
+`A W -133952
+'A y -100464
+'A :y -100464
+'A 'y -100464
+'A v -133952
+'A w -100464
+'A c -33488
+'A 'c -33488
+'A ,c -33488
+'A d -33488
+'A Sd -33488
+'A e -33488
+'A `e -33488
+'A 'e -33488
+'A ^e -33488
+'A :e -33488
+'A o -33488
+'A `o -33488
+'A 'o -33488
+'A ^o -33488
+'A ~o -33488
+'A :o -33488
+'A oe -33488
+'A /o -33488
+'A q -33488
+'A t -33488
+'A C -33488
+'A G -33488
+'A 'C -33488
+'A ,C -33488
+'A Q -33488
+'A O -33488
+'A `O -33488
+'A 'O -33488
+'A ^O -33488
+'A ~O -33488
+'A :O -33488
+'A OE -33488
+'A /O -33488
+'A U -33488
+'A `U -33488
+'A 'U -33488
+'A ^U -33488
+'A :U -33488
+'A T -100464
+'A Y -100464
+'A :Y -100464
+'A 'Y -100464
+'A V -133952
+'A W -133952
+^A y -100464
+^A :y -100464
+^A 'y -100464
+^A v -133952
+^A w -100464
+^A c -33488
+^A 'c -33488
+^A ,c -33488
+^A d -33488
+^A Sd -33488
+^A e -33488
+^A `e -33488
+^A 'e -33488
+^A ^e -33488
+^A :e -33488
+^A o -33488
+^A `o -33488
+^A 'o -33488
+^A ^o -33488
+^A ~o -33488
+^A :o -33488
+^A oe -33488
+^A /o -33488
+^A q -33488
+^A t -33488
+^A C -33488
+^A G -33488
+^A 'C -33488
+^A ,C -33488
+^A Q -33488
+^A O -33488
+^A `O -33488
+^A 'O -33488
+^A ^O -33488
+^A ~O -33488
+^A :O -33488
+^A OE -33488
+^A /O -33488
+^A U -33488
+^A `U -33488
+^A 'U -33488
+^A ^U -33488
+^A :U -33488
+^A T -100464
+^A Y -100464
+^A :Y -100464
+^A 'Y -100464
+^A V -133952
+^A W -133952
+~A y -100464
+~A :y -100464
+~A 'y -100464
+~A v -133952
+~A w -100464
+~A c -33488
+~A 'c -33488
+~A ,c -33488
+~A d -33488
+~A Sd -33488
+~A e -33488
+~A `e -33488
+~A 'e -33488
+~A ^e -33488
+~A :e -33488
+~A o -33488
+~A `o -33488
+~A 'o -33488
+~A ^o -33488
+~A ~o -33488
+~A :o -33488
+~A oe -33488
+~A /o -33488
+~A q -33488
+~A t -33488
+~A C -33488
+~A G -33488
+~A 'C -33488
+~A ,C -33488
+~A Q -33488
+~A O -33488
+~A `O -33488
+~A 'O -33488
+~A ^O -33488
+~A ~O -33488
+~A :O -33488
+~A OE -33488
+~A /O -33488
+~A U -33488
+~A `U -33488
+~A 'U -33488
+~A ^U -33488
+~A :U -33488
+~A T -100464
+~A Y -100464
+~A :Y -100464
+~A 'Y -100464
+~A V -133952
+~A W -133952
+:A y -100464
+:A :y -100464
+:A 'y -100464
+:A v -133952
+:A w -100464
+:A c -33488
+:A 'c -33488
+:A ,c -33488
+:A d -33488
+:A Sd -33488
+:A e -33488
+:A `e -33488
+:A 'e -33488
+:A ^e -33488
+:A :e -33488
+:A o -33488
+:A `o -33488
+:A 'o -33488
+:A ^o -33488
+:A ~o -33488
+:A :o -33488
+:A oe -33488
+:A /o -33488
+:A q -33488
+:A t -33488
+:A C -33488
+:A G -33488
+:A 'C -33488
+:A ,C -33488
+:A Q -33488
+:A O -33488
+:A `O -33488
+:A 'O -33488
+:A ^O -33488
+:A ~O -33488
+:A :O -33488
+:A OE -33488
+:A /O -33488
+:A U -33488
+:A `U -33488
+:A 'U -33488
+:A ^U -33488
+:A :U -33488
+:A T -100464
+:A Y -100464
+:A :Y -100464
+:A 'Y -100464
+:A V -133952
+:A W -133952
+oA y -100464
+oA :y -100464
+oA 'y -100464
+oA v -133952
+oA w -100464
+oA c -33488
+oA 'c -33488
+oA ,c -33488
+oA d -33488
+oA Sd -33488
+oA e -33488
+oA `e -33488
+oA 'e -33488
+oA ^e -33488
+oA :e -33488
+oA o -33488
+oA `o -33488
+oA 'o -33488
+oA ^o -33488
+oA ~o -33488
+oA :o -33488
+oA oe -33488
+oA /o -33488
+oA q -33488
+oA t -33488
+oA C -33488
+oA G -33488
+oA 'C -33488
+oA ,C -33488
+oA Q -33488
+oA O -33488
+oA `O -33488
+oA 'O -33488
+oA ^O -33488
+oA ~O -33488
+oA :O -33488
+oA OE -33488
+oA /O -33488
+oA U -33488
+oA `U -33488
+oA 'U -33488
+oA ^U -33488
+oA :U -33488
+oA T -100464
+oA Y -100464
+oA :Y -100464
+oA 'Y -100464
+oA V -133952
+oA W -133952
+-D X -33488
+-D W -33488
+-D A -33488
+-D `A -33488
+-D 'A -33488
+-D ^A -33488
+-D ~A -33488
+-D :A -33488
+-D oA -33488
+-D AE -33488
+-D V -33488
+-D Y -33488
+-D :Y -33488
+-D 'Y -33488
+`O X -33488
+`O W -33488
+`O A -33488
+`O `A -33488
+`O 'A -33488
+`O ^A -33488
+`O ~A -33488
+`O :A -33488
+`O oA -33488
+`O AE -33488
+`O V -33488
+`O Y -33488
+`O :Y -33488
+`O 'Y -33488
+'O X -33488
+'O W -33488
+'O A -33488
+'O `A -33488
+'O 'A -33488
+'O ^A -33488
+'O ~A -33488
+'O :A -33488
+'O oA -33488
+'O AE -33488
+'O V -33488
+'O Y -33488
+'O :Y -33488
+'O 'Y -33488
+^O X -33488
+^O W -33488
+^O A -33488
+^O `A -33488
+^O 'A -33488
+^O ^A -33488
+^O ~A -33488
+^O :A -33488
+^O oA -33488
+^O AE -33488
+^O V -33488
+^O Y -33488
+^O :Y -33488
+^O 'Y -33488
+~O X -33488
+~O W -33488
+~O A -33488
+~O `A -33488
+~O 'A -33488
+~O ^A -33488
+~O ~A -33488
+~O :A -33488
+~O oA -33488
+~O AE -33488
+~O V -33488
+~O Y -33488
+~O :Y -33488
+~O 'Y -33488
+:O X -33488
+:O W -33488
+:O A -33488
+:O `A -33488
+:O 'A -33488
+:O ^A -33488
+:O ~A -33488
+:O :A -33488
+:O oA -33488
+:O AE -33488
+:O V -33488
+:O Y -33488
+:O :Y -33488
+:O 'Y -33488
+/O X -33488
+/O W -33488
+/O A -33488
+/O `A -33488
+/O 'A -33488
+/O ^A -33488
+/O ~A -33488
+/O :A -33488
+/O oA -33488
+/O AE -33488
+/O V -33488
+/O Y -33488
+/O :Y -33488
+/O 'Y -33488
+'Y e -100464
+'Y o -100464
+'Y r -100464
+'Y a -100464
+'Y u -100464
+'Y n -100464
+'Y .i -100464
+'Y c -100464
+'Y d -100464
+'Y g -100464
+'Y p -100464
+'Y s -100464
+'Y v -100464
+'Y w -100464
+'Y x -100464
+'Y z -100464
+'Y A -100464
+'Y `A -100464
+'Y 'A -100464
+'Y ^A -100464
+'Y ~A -100464
+'Y :A -100464
+'Y oA -100464
+'Y AE -100464
+`a v -33488
+`a j 66976
+`a y -33488
+`a :y -33488
+`a 'y -33488
+`a w -33488
+'a v -33488
+'a j 66976
+'a y -33488
+'a :y -33488
+'a 'y -33488
+'a w -33488
+^a v -33488
+^a j 66976
+^a y -33488
+^a :y -33488
+^a 'y -33488
+^a w -33488
+~a v -33488
+~a j 66976
+~a y -33488
+~a :y -33488
+~a 'y -33488
+~a w -33488
+:a v -33488
+:a j 66976
+:a y -33488
+:a :y -33488
+:a 'y -33488
+:a w -33488
+oa v -33488
+oa j 66976
+oa y -33488
+oa :y -33488
+oa 'y -33488
+oa w -33488
+,c h -33488
+,c k -33488
+~n t -33488
+~n u -33488
+~n `u -33488
+~n 'u -33488
+~n ^u -33488
+~n :u -33488
+~n b -33488
+~n y -33488
+~n v -33488
+~n w -33488
+`o e 33488
+`o `e 33488
+`o 'e 33488
+`o ^e 33488
+`o :e 33488
+`o o 33488
+`o `o 33488
+`o 'o 33488
+`o ^o 33488
+`o ~o 33488
+`o :o 33488
+`o oe 33488
+`o /o 33488
+`o x -33488
+`o d 33488
+`o c 33488
+`o 'c 33488
+`o ,c 33488
+`o q 33488
+`o v -33488
+`o j 66976
+`o y -33488
+`o :y -33488
+`o 'y -33488
+`o w -33488
+'o e 33488
+'o `e 33488
+'o 'e 33488
+'o ^e 33488
+'o :e 33488
+'o o 33488
+'o `o 33488
+'o 'o 33488
+'o ^o 33488
+'o ~o 33488
+'o :o 33488
+'o oe 33488
+'o /o 33488
+'o x -33488
+'o d 33488
+'o c 33488
+'o 'c 33488
+'o ,c 33488
+'o q 33488
+'o v -33488
+'o j 66976
+'o y -33488
+'o :y -33488
+'o 'y -33488
+'o w -33488
+^o e 33488
+^o `e 33488
+^o 'e 33488
+^o ^e 33488
+^o :e 33488
+^o o 33488
+^o `o 33488
+^o 'o 33488
+^o ^o 33488
+^o ~o 33488
+^o :o 33488
+^o oe 33488
+^o /o 33488
+^o x -33488
+^o d 33488
+^o c 33488
+^o 'c 33488
+^o ,c 33488
+^o q 33488
+^o v -33488
+^o j 66976
+^o y -33488
+^o :y -33488
+^o 'y -33488
+^o w -33488
+~o e 33488
+~o `e 33488
+~o 'e 33488
+~o ^e 33488
+~o :e 33488
+~o o 33488
+~o `o 33488
+~o 'o 33488
+~o ^o 33488
+~o ~o 33488
+~o :o 33488
+~o oe 33488
+~o /o 33488
+~o x -33488
+~o d 33488
+~o c 33488
+~o 'c 33488
+~o ,c 33488
+~o q 33488
+~o v -33488
+~o j 66976
+~o y -33488
+~o :y -33488
+~o 'y -33488
+~o w -33488
+:o e 33488
+:o `e 33488
+:o 'e 33488
+:o ^e 33488
+:o :e 33488
+:o o 33488
+:o `o 33488
+:o 'o 33488
+:o ^o 33488
+:o ~o 33488
+:o :o 33488
+:o oe 33488
+:o /o 33488
+:o x -33488
+:o d 33488
+:o c 33488
+:o 'c 33488
+:o ,c 33488
+:o q 33488
+:o v -33488
+:o j 66976
+:o y -33488
+:o :y -33488
+:o 'y -33488
+:o w -33488
+/o e 33488
+/o `e 33488
+/o 'e 33488
+/o ^e 33488
+/o :e 33488
+/o o 33488
+/o `o 33488
+/o 'o 33488
+/o ^o 33488
+/o ~o 33488
+/o :o 33488
+/o oe 33488
+/o /o 33488
+/o x -33488
+/o d 33488
+/o c 33488
+/o 'c 33488
+/o ,c 33488
+/o q 33488
+/o v -33488
+/o j 66976
+/o y -33488
+/o :y -33488
+/o 'y -33488
+/o w -33488
+`u w -33488
+'u w -33488
+^u w -33488
+:u w -33488
+'y o -33488
+'y `o -33488
+'y 'o -33488
+'y ^o -33488
+'y ~o -33488
+'y :o -33488
+'y oe -33488
+'y /o -33488
+'y e -33488
+'y `e -33488
+'y 'e -33488
+'y ^e -33488
+'y :e -33488
+'y a -33488
+'y `a -33488
+'y 'a -33488
+'y ^a -33488
+'y ^a -33488
+'y ~a -33488
+'y :a -33488
+'y oa -33488
+'y ae -33488
+'y . -100464
+'y , -100464
+charset
+ga 602784,679952 2 0000
+aa 602784,679952 2 0001
+a^ 602784,679952 2 0002
+a~ 602784,679952 2 0003
+ad 602784,723632 2 0004
+a" 602784,679952,0,15530 2 0005
+ao 911456,679952 2 0006
+ah 602784,679952 2 0007
+ab 602784,679952 2 0010
+a- 602784,723632 2 0011
+a. 334880,723632 2 0012
+ac 535808,0,178360 1 0013
+ho 334880,0,203840 1 0014
+bq 334880,163072,203840 1 0015
+fo 535808,495040 2 0016
+fc 535808,495040 2 0017
+lq 430976,723632 2 0020
+rq 430976,723632 2 0021
+Bq 430976,163072,203840 1 0022
+Fo 669760,495040 2 0023
+Fc 669760,495040 2 0024
+en 602784,465920,0,33488 0 0025
+em 1205568,465920,0,33488 0 0026
+--- 0,465920 0 0027
+--- 468832,786240,58240 3 0030
+.i 334880,465920 0 0031
+.j 368368,465920,203840 1 0032
+ff 703248,723632,0,114296 2 0033
+fi 669760,723632 2 0034
+fl 669760,723632 2 0035
+Fi 1004640,723632 2 0036
+Fl 1004640,723632 2 0037
+--- 602784,465920,101920 1 0040
+! 366912,723632 2 0041
+dq 602784,723632 2 0042
+" "
+sh 1004640,723632,203840 3 0043
+# "
+Do 602784,786240,58240 3 0044
+$ "
+% 1004640,786240,58240 3 0045
+& 937664,723632 2 0046
+cq 334880,723632 2 0047
+' "
+( 468832,786240,262080 3 0050
+) 468832,786240,262080 3 0051
+* 602784,786240 2 0052
+pl 937664,664768,139776 3 0053
++ "
+, 334880,163072,203840 1 0054
+- 401856,465920 0 0055
+. 334880,163072 0 0056
+sl 602784,786240,262080 3 0057
+/ "
+0 602784,679952 2 0060
+1 602784,679952 2 0061
+2 602784,679952 2 0062
+3 602784,679952 2 0063
+4 602784,679952 2 0064
+5 602784,679952 2 0065
+6 602784,679952 2 0066
+7 602784,679952 2 0067
+8 602784,679952 2 0070
+9 602784,679952 2 0071
+: 334880,465920 0 0072
+; 334880,465920,203840 1 0073
+< 937664,613858,89698 3 0074
+eq 937664,410018,-114142 0 0075
+= "
+> 937664,613858,89698 3 0076
+? 569296,723632 2 0077
+at 937664,723632 2 0100
+@ "
+A 911456,723632 2 0101
+B 857584,723632 2 0102
+C 870688,723632,0,0,-33488 2 0103
+D 924560,723632,0,0,0,-33488 2 0104
+E 792064,723632 2 0105
+F 758576,723632,0,0,0,-167440 2 0106
+G 947856,723632,0,0,-33488 2 0107
+H 943488,723632 2 0110
+I 457184,723632 2 0111
+J 623168,723632,0,0,0,-33488 2 0112
+K 944944,723632 2 0113
+L 725088,723632,0,0,0,66976 2 0114
+M 1144416,723632 2 0115
+N 943488,723632 2 0116
+O 905632,723632,0,0,-33488,-33488 2 0117
+P 824096,723632,0,0,0,-167440 2 0120
+Q 905632,723632,203840,0,-33488 3 0121
+R 904176,723632 2 0122
+S 669760,723632 2 0123
+T 838656,723632,0,0,0,-167440 2 0124
+U 927472,723632,0,0,-20384 2 0125
+V 911456,723632,0,16744,50232,-251160 2 0126
+W 1246336,723632,0,16744,50232,-150696 2 0127
+X 911456,723632 2 0130
+Y 911456,723632,0,30139,33488,-237765 2 0131
+Z 736736,723632 2 0132
+lB 334880,786240,262080 3 0133
+[ "
+rs 602784,786240,262080 3 0134
+\ "
+rB 334880,786240,262080 3 0135
+] "
+ha 736736,723632 2 0136
+^ "
+_ 937664,0,322658 1 0137
+oq 334880,723632 2 0140
+` "
+a 586040,465920 0 0141
+b 669760,723632 2 0142
+c 535808,465920 0 0143
+d 669760,723632 2 0144
+e 552552,465920 0 0145
+f 368368,723632,0,114296 2 0146
+g 602784,465920,203840,16744 1 0147
+h 669760,723632 2 0150
+i 334880,723632 2 0151
+j 368368,723632,203840 3 0152
+k 636272,723632 2 0153
+l 334880,723632 2 0154
+m 1004640,465920 0 0155
+n 669760,465920 0 0156
+o 602784,465920 0 0157
+p 669760,465920,203840 1 0160
+q 636272,465920,203840 1 0161
+r 496496,465920 0 0162
+s 475530,465920 0 0163
+t 468832,664768 2 0164
+u 669760,465920 0 0165
+v 636272,465920,0,16744 0 0166
+w 870688,465920,0,16744 0 0167
+x 636272,465920 0 0170
+y 636272,465920,203840,16744 1 0171
+z 535808,465920 0 0172
+lC 602784,786240,262080 3 0173
+{ "
+ba 334880,786240,262080 3 0174
+bv "
+or "
+| "
+rC 602784,786240,262080 3 0175
+} "
+~ 736736,723632 2 0176
+hy 200928,465920 0 0177
+--- 911456,937664 2 0200
+--- 911456,723632,203840 3 0201
+'C 870688,918813 2 0202
+--- 870688,937664,0,0,-33488 2 0203
+--- 924560,937664,0,0,0,-33488 2 0204
+--- 792064,937664 2 0205
+--- 792064,723632,203840 3 0206
+--- 947856,937664,0,0,-33488 2 0207
+--- 725088,918813,0,0,0,66976 2 0210
+--- 725088,937664,0,0,0,66976 2 0211
+/L 725088,723632 2 0212
+--- 943488,918813 2 0213
+--- 943488,937664 2 0214
+--- 958048,723632,0,0,0,-33488 2 0215
+--- 905632,918813,0,0,-33488,-33488 2 0216
+--- 904176,918813 2 0217
+--- 904176,937664 2 0220
+--- 669760,918813 2 0221
+vS 669760,937664 2 0222
+--- 669760,723632,178360 3 0223
+--- 838656,937664,0,0,0,-167440 2 0224
+--- 838656,723632,178360,0,0,-167440 3 0225
+--- 927472,918813,0,0,-20384 2 0226
+--- 927472,937664,0,0,-20384 2 0227
+:Y 911456,937664,0,30139,33488,-237765 2 0230
+--- 736736,918813 2 0231
+vZ 736736,937664 2 0232
+--- 736736,918813 2 0233
+IJ 1059968,723632,0,0,0,-33488 2 0234
+--- 457184,918813 2 0235
+--- 669760,723632 2 0236
+sc 554736,723632,203840 3 0237
+--- 586040,679952 2 0240
+--- 586040,465920,203840 1 0241
+'c 535808,679952 2 0242
+--- 535808,679952 2 0243
+--- 849576,723632 2 0244
+--- 552552,679952 2 0245
+--- 552552,465920,203840 1 0246
+--- 602784,679952,203840,16744 3 0247
+--- 334880,918813,0,56493 2 0250
+--- 526344,723632 2 0251
+/l 405205,723632 2 0252
+--- 669760,679952 2 0253
+--- 669760,679952 2 0254
+--- 669760,465920,203840 1 0255
+--- 602784,679952,0,15530 2 0256
+--- 496496,679952 2 0257
+--- 496496,679952 2 0260
+--- 475530,679952 2 0261
+vs 475530,679952 2 0262
+--- 475530,465920,178360 1 0263
+--- 468832,723632 2 0264
+--- 468832,664768,178360 3 0265
+--- 669760,679952 2 0266
+--- 669760,679952 2 0267
+:y 636272,723632,203840,16744 3 0270
+--- 535808,679952 2 0271
+vz 535808,679952 2 0272
+--- 535808,723632 2 0273
+ij 703248,723632,203840 3 0274
+r! 366912,524160,203840 3 0275
+r? 569296,524160,203840 3 0276
+Po 770224,723632 2 0277
+`A 911456,918813 2 0300
+'A 911456,918813 2 0301
+^A 911456,937664 2 0302
+~A 911456,937664 2 0303
+:A 911456,937664 2 0304
+oA 911456,893984 2 0305
+AE 1092000,723632 2 0306
+,C 870688,723632,178360,0,-33488 3 0307
+`E 792064,918813 2 0310
+'E 792064,918813 2 0311
+^E 792064,937664 2 0312
+:E 792064,937664 2 0313
+`I 457184,918813 2 0314
+'I 457184,918813 2 0315
+^I 457184,937664 2 0316
+:I 457184,937664 2 0317
+-D 924560,723632,0,0,0,-33488 2 0320
+~N 943488,937664 2 0321
+`O 905632,918813,0,0,-33488,-33488 2 0322
+'O 905632,918813 2 0323
+^O 905632,937664,0,0,-33488,-33488 2 0324
+~O 905632,937664,0,0,-33488,-33488 2 0325
+:O 905632,937664,0,0,-33488,-33488 2 0326
+OE 1225952,723632 2 0327
+/O 937664,770224,50960 3 0330
+`U 927472,918813,0,0,-20384 2 0331
+'U 927472,918813 2 0332
+^U 927472,937664,0,0,-20384 2 0333
+:U 927472,937664,0,0,-20384 2 0334
+'Y 911456,918813,0,30139,33488,-237765 2 0335
+TP 757120,723632 2 0336
+--- 1339520,723632 2 0337
+`a 586040,679952 2 0340
+'a 586040,679952 2 0341
+^a 586040,679952 2 0342
+~a 586040,679952 2 0343
+:a 586040,723632 2 0344
+oa 586040,679952 2 0345
+ae 870688,465920 0 0346
+,c 535808,465920,178360 1 0347
+`e 552552,679952 2 0350
+'e 552552,679952 2 0351
+^e 552552,679952 2 0352
+:e 552552,723632 2 0353
+`i 334880,679952 2 0354
+'i 334880,679952,0,28280 2 0355
+^i 334880,679952 2 0356
+:i 401856,723632 2 0357
+Sd 602784,723632 2 0360
+~n 669760,679952 2 0361
+`o 602784,679952 2 0362
+'o 602784,679952 2 0363
+^o 602784,679952 2 0364
+~o 602784,679952 2 0365
+:o 602784,723632 2 0366
+oe 937664,465920 0 0367
+/o 602784,567840,101920 3 0370
+`u 669760,679952 2 0371
+'u 669760,679952 2 0372
+^u 669760,679952 2 0373
+:u 669760,723632 2 0374
+'y 636272,679952,203840,16744 3 0375
+Tp 669760,723632,203840 3 0376
+ss 626080,723632 2 0377
diff --git a/contrib/groff/font/devdvi/TBI b/contrib/groff/font/devdvi/TBI
new file mode 100644
index 0000000..7020689
--- /dev/null
+++ b/contrib/groff/font/devdvi/TBI
@@ -0,0 +1,352 @@
+#
+# manually added kernings for `` and ''
+#
+name TBI
+internalname cmbxti10
+spacewidth 434573
+slant 14.036243
+ligatures ff fi fl ffi ffl 0
+checksum 1175274390
+designsize 10485760
+kernpairs
+ff cq 111848
+ff ' 111848
+ff ? 111848
+ff ! 111848
+ff ) 111848
+ff rB 111848
+ff ] 111848
+' ' -92624
+cq ' -92624
+' cq -92624
+cq cq -92624
+' ? 123498
+cq ? 123498
+' ! 123498
+cq ! 123498
+A n -30875
+A l -30875
+A r -30875
+A u -30875
+A m -30875
+A t -30875
+A i -30875
+A C -30875
+A O -30875
+A G -30875
+A h -30875
+A b -30875
+A U -30875
+A k -30875
+A v -30875
+A w -30875
+A Q -30875
+A T -92624
+A Y -92624
+A V -123498
+A W -123498
+A e -61749
+A a -61749
+A o -61749
+A d -61749
+A c -61749
+A g -61749
+A q -61749
+D X -30875
+D W -30875
+D A -30875
+D V -30875
+D Y -30875
+F o -92624
+F e -92624
+F u -92624
+F r -92624
+F a -92624
+F A -123498
+F O -30875
+F C -30875
+F G -30875
+F Q -30875
+K O -30875
+K C -30875
+K G -30875
+K Q -30875
+L T -92624
+L Y -92624
+L V -123498
+L W -123498
+L e -61749
+L a -61749
+L o -61749
+L d -61749
+L c -61749
+L g -61749
+L q -61749
+O X -30875
+O W -30875
+O A -30875
+O V -30875
+O Y -30875
+P A -92624
+R n -30875
+R l -30875
+R r -30875
+R u -30875
+R m -30875
+R t -30875
+R i -30875
+R C -30875
+R O -30875
+R G -30875
+R h -30875
+R b -30875
+R U -30875
+R k -30875
+R v -30875
+R w -30875
+R Q -30875
+R T -92624
+R Y -92624
+R V -123498
+R W -123498
+R e -61749
+R a -61749
+R o -61749
+R d -61749
+R c -61749
+R g -61749
+R q -61749
+T y -92624
+T e -92624
+T o -92624
+T r -92624
+T a -92624
+T u -92624
+T A -92624
+V o -92624
+V e -92624
+V u -92624
+V r -92624
+V a -92624
+V A -123498
+V O -30875
+V C -30875
+V G -30875
+V Q -30875
+W A -92624
+X O -30875
+X C -30875
+X G -30875
+X Q -30875
+Y e -92624
+Y o -92624
+Y r -92624
+Y a -92624
+Y u -92624
+Y A -92624
+oq oq -92624
+oq ` -92624
+` oq -92624
+` ` -92624
+b e -61749
+b a -61749
+b o -61749
+b d -61749
+b c -61749
+b g -61749
+b q -61749
+c e -61749
+c a -61749
+c o -61749
+c d -61749
+c c -61749
+c g -61749
+c q -61749
+d l 61749
+e e -61749
+e a -61749
+e o -61749
+e d -61749
+e c -61749
+e g -61749
+e q -61749
+Fn cq 111848
+Fn ' 111848
+f cq 111848
+f ' 111848
+Fn ? 111848
+f ? 111848
+Fn ! 111848
+f ! 111848
+Fn ) 111848
+f ) 111848
+Fn rB 111848
+Fn ] 111848
+f rB 111848
+f ] 111848
+l l 61749
+n ' -123498
+n cq -123498
+o e -61749
+o a -61749
+o o -61749
+o d -61749
+o c -61749
+o g -61749
+o q -61749
+p e -61749
+p a -61749
+p o -61749
+p d -61749
+p c -61749
+p g -61749
+p q -61749
+r e -61749
+r a -61749
+r o -61749
+r d -61749
+r c -61749
+r g -61749
+r q -61749
+w l 61749
+charset
+*G 731666,719440,0,135298,0,-19075 2 0000
+*D 990312,719440 2 0001
+*H 928563,719440,0,95027,-84834,64152 2 0002
+*L 845843,719440 2 0003
+*C 805066,719440,0,158248,0,79125 2 0004
+*P 939632,719440,0,180443,0,90222 2 0005
+*S 866814,719440,0,119859,0,59930 2 0006
+*U 928563,719440,0,113013,-174763,-41360 2 0007
+*F 866814,719440,0,59054,-120805,59054 2 0010
+*Q 928563,719440,0,113013,-174763,-5243 2 0011
+*W 866814,719440,0,104021,0,52011 2 0012
+ff 792256,728178,203890,228357 3 0013
+fi 707205,728178,203890,113890 3 0014
+fl 738078,728178,203890,113890 3 0015
+Fi 1095466,728178,203890,113890 3 0016
+Fl 1110902,728178,203890,113890 3 0017
+.i 372824,466034,0,98840 0 0020
+.j 403699,466034,203890,48354 1 0021
+ga 619819,728178 2 0022
+aa 619819,728178,0,89421 2 0023
+ah 619819,662642,0,86728 2 0024
+ab 619819,728178,0,108354 2 0025
+a- 619819,623318,0,109518 2 0026
+ao 994973,728178 2 0027
+ac 558070,0,178403 1 0030
+ss 697302,728178,203890,102090 3 0031
+ae 866814,466034,0,89131 0 0032
+oe 866814,466034,0,89131 0 0033
+/o 619819,567979,101946,99179 3 0034
+AE 1072450,719440,0,119859 2 0035
+OE 1195947,719440,0,119859 2 0036
+/O 928563,770413,50973,95027 3 0037
+--- 311075,466034 0 0040
+! 404864,728178,0,119714 2 0041
+rq 650696,728178,0,83248 2 0042
+sh 990312,728178,203888,71653 3 0043
+# "
+Po 910723,728178 2 0044
+% 990312,786432,58254,134859 3 0045
+& 928563,728178,0,89421 2 0046
+cq 372824,728178,0,135734 2 0047
+' "
+( 496322,786432,262144,165733 3 0050
+) 496322,786432,262144,34661 3 0051
+* 619819,786432,0,150296 2 0052
++ 928563,632637,108349,34661 3 0053
+, 372824,154374,203890 1 0054
+hy 434573,466034,0,27379 0 0055
+- "
+. 372824,154374 0 0056
+sl 619819,786432,262144,165733 3 0057
+/ "
+0 619819,675749,0,138062 2 0060
+1 619819,675749,0,138062 2 0061
+2 619819,675749,0,138062 2 0062
+3 619819,675749,0,138062 2 0063
+4 619819,675749,203890,138062 3 0064
+5 619819,675749,0,138062 2 0065
+6 619819,675749,0,138062 2 0066
+7 619819,675749,203890,138062 3 0067
+8 619819,675749,0,138062 2 0070
+9 619819,675749,0,138062 2 0071
+: 372824,466034,0,70198 0 0072
+; 372824,466034,203890,70198 1 0073
+r! 404864,524288,203890,68741 3 0074
+= 928563,410110,-114178,71653 0 0075
+r? 619819,524288,203890 3 0076
+? 619819,728178,0,120296 2 0077
+at 928563,728178,0,96555 2 0100
+@ "
+A 907592,719440 2 0101
+B 856330,719440,0,104021,0,52011 2 0102
+C 866814,719440,0,148986,-84834,74493 2 0103
+D 918078,719440,0,95027,0,64152 2 0104
+E 793414,719440,0,119859,0,59930 2 0105
+F 762541,719440,0,135298,0,-19075 2 0106
+G 938758,719440,0,77042,-84834,77042 2 0107
+H 939632,719440,0,180443,0,90222 2 0110
+I 494576,719440,0,164424,0,82213 2 0111
+J 640208,719440,0,152045,0,45147 2 0112
+K 938467,719440,0,148986,0,74493 2 0113
+L 731666,719440,0,0,0,61749 2 0114
+M 1124878,719440,0,180443,0,59347 2 0115
+N 939632,719440,0,180443,0,59347 2 0116
+O 896523,719440,0,95027,-84834,64152 2 0117
+P 825454,719440,0,104021,0,-50352 2 0120
+Q 896523,719440,203890,95027,-84834,95027 3 0121
+R 901186,719440,0,26835,0,20126 2 0122
+S 681568,719440,0,118112,0,59056 2 0123
+T 834774,719440,0,135298,-134896,-19075 2 0124
+U 923613,719440,0,180443,-136096,59347 2 0125
+V 907592,719440,0,195298,-133549,-51698 2 0126
+W 1216336,719440,0,195298,-133549,40925 2 0127
+X 907592,719440,0,164424,0,82213 2 0130
+Y 907592,719440,0,207648,-148986,-39347 2 0131
+Z 743317,719440,0,148986,0,74493 2 0132
+lB 373408,786432,262144,196608 3 0133
+[ "
+lq 650696,728178,0,175869 2 0134
+rB 373408,786432,262144,104568 3 0135
+] "
+ha 619819,728178,0,70344 2 0136
+^ "
+a^ "
+a. 372824,728178,0,135734 2 0137
+oq 372824,728178,0,135734 2 0140
+` "
+a 619819,466034,0,98840,-34078,98840 0 0141
+b 558070,728178,0,82430,-34078,82430 2 0142
+c 558070,466034,0,54760,-34078,54760 0 0143
+d 619819,728178,0,113890,-34078,113890 2 0144
+e 558070,466034,0,89131,-34078,89131 0 0145
+Fn 419432,728178,203890,228357,112722,116509 3 0146
+f "
+g 558070,466034,203890,110102,-35829,71266 1 0147
+h 619819,728178,0,98840,0,98840 2 0150
+i 372824,726931,0,119403,-17669,119403 2 0151
+j 372824,726931,203890,175326,50973,110102 3 0152
+k 558070,728178,0,116509,0,98840 2 0153
+l 311075,728178,0,113890,-30875,129714 2 0154
+m 990312,466034,0,98840,-17669,98840 0 0155
+n 681568,466034,0,98840,-17669,98840 0 0156
+o 619819,466034,0,82430,-34078,82430 0 0157
+p 619819,466034,203890,82430,-17182,82430 1 0160
+q 558070,466034,203890,110102,-34078,71266 1 0161
+r 526034,466034,0,116509,-17669,85634 0 0162
+s 510595,466034,0,85634,0,85634 0 0163
+t 403699,665763,0,101072,-39323,101072 2 0164
+u 650694,466034,0,98840,-17669,98840 0 0165
+v 558070,466034,0,116509,-17669,77672 0 0166
+w 805066,466034,0,116509,-17669,87382 0 0167
+x 587782,466034,0,131946,0,131946 0 0170
+y 588946,466034,203890,110102,-17669,71266 1 0171
+z 514382,466034,0,145637,0,98840 0 0172
+en 619819,466034,0,102880 0 0173
+em 1239638,466034,0,102880 0 0174
+a" 619819,728178,0,120296 2 0175
+~ 619819,728178,0,120296 2 0176
+a~ "
+ad 619819,728178,0,120298 2 0177
diff --git a/contrib/groff/font/devdvi/TBIEC b/contrib/groff/font/devdvi/TBIEC
new file mode 100644
index 0000000..561be02
--- /dev/null
+++ b/contrib/groff/font/devdvi/TBIEC
@@ -0,0 +1,1768 @@
+name TBIEC
+internalname ecbi1000
+spacewidth 434470
+slant 14.036243
+ligatures ff fi fl ffi ffl 0
+checksum 501947664
+designsize 10485760
+kernpairs
+bq Bq 123469
+bq v -92602
+bq w -92602
+bq T -92602
+bq V -123469
+bq W -123469
+bq Y -92602
+bq :Y -92602
+bq 'Y -92602
+bq O -30867
+bq `O -30867
+bq 'O -30867
+bq ^O -30867
+bq ~O -30867
+bq :O -30867
+bq OE -30867
+bq /O -30867
+bq C -30867
+bq G -30867
+bq 'C -30867
+bq ,C -30867
+bq Q -30867
+lq oq 123469
+lq ` 123469
+lq lq 123469
+rq cq 123469
+rq ' 123469
+rq rq 123469
+Bq bq 123469
+Bq , 123469
+Bq Bq 123469
+Bq v -92602
+Bq w -92602
+Bq T -92602
+Bq V -123469
+Bq W -123469
+Bq Y -92602
+Bq :Y -92602
+Bq 'Y -92602
+Bq O -30867
+Bq `O -30867
+Bq 'O -30867
+Bq ^O -30867
+Bq ~O -30867
+Bq :O -30867
+Bq OE -30867
+Bq /O -30867
+Bq C -30867
+Bq G -30867
+Bq 'C -30867
+Bq ,C -30867
+Bq Q -30867
+Fc . -92602
+Fc , -92602
+ff cq 111821
+ff ' 111821
+ff oq 111821
+ff ` 111821
+ff lq 111821
+ff rq 111821
+ff ? 111821
+ff ! 111821
+ff ) 111821
+ff rB 111821
+ff ] 111821
+cq rq 123469
+' rq 123469
+cq ? 123469
+' ? 123469
+cq ! 123469
+' ! 123469
+A y -30867
+A :y -30867
+A 'y -30867
+A n -30867
+A ~n -30867
+A l -30867
+A r -30867
+A u -30867
+A `u -30867
+A 'u -30867
+A ^u -30867
+A :u -30867
+A m -30867
+A t -30867
+A i -30867
+A 'i -30867
+A h -30867
+A b -30867
+A k -30867
+A v -30867
+A w -30867
+A C -30867
+A G -30867
+A 'C -30867
+A ,C -30867
+A Q -30867
+A O -30867
+A `O -30867
+A 'O -30867
+A ^O -30867
+A ~O -30867
+A :O -30867
+A OE -30867
+A /O -30867
+A U -30867
+A `U -30867
+A 'U -30867
+A ^U -30867
+A :U -30867
+A T -92602
+A Y -92602
+A :Y -92602
+A 'Y -92602
+A V -123469
+A W -123469
+A e -61734
+A `e -61734
+A 'e -61734
+A ^e -61734
+A :e -61734
+A a -61734
+A `a -61734
+A 'a -61734
+A ^a -61734
+A ^a -61734
+A ~a -61734
+A :a -61734
+A oa -61734
+A ae -61734
+A o -61734
+A `o -61734
+A 'o -61734
+A ^o -61734
+A ~o -61734
+A :o -61734
+A oe -61734
+A /o -61734
+A d -61734
+A c -61734
+A 'c -61734
+A ,c -61734
+A g -61734
+A q -61734
+D X -30867
+D W -30867
+D A -30867
+D `A -30867
+D 'A -30867
+D ^A -30867
+D ~A -30867
+D :A -30867
+D oA -30867
+D AE -30867
+D V -30867
+D Y -30867
+D :Y -30867
+D 'Y -30867
+F o -92602
+F e -92602
+F u -92602
+F r -92602
+F n -92602
+F v -92602
+F a -92602
+F A -123469
+F `A -123469
+F 'A -123469
+F ^A -123469
+F ~A -123469
+F :A -123469
+F oA -123469
+F AE -123469
+F O -30867
+F `O -30867
+F 'O -30867
+F ^O -30867
+F ~O -30867
+F :O -30867
+F OE -30867
+F /O -30867
+F C -30867
+F G -30867
+F 'C -30867
+F ,C -30867
+F Q -30867
+K v -30867
+K w -30867
+K O -30867
+K `O -30867
+K 'O -30867
+K ^O -30867
+K ~O -30867
+K :O -30867
+K OE -30867
+K /O -30867
+K C -30867
+K G -30867
+K 'C -30867
+K ,C -30867
+K Q -30867
+L T -92602
+L Y -92602
+L :Y -92602
+L 'Y -92602
+L V -123469
+L W -123469
+L e -61734
+L `e -61734
+L 'e -61734
+L ^e -61734
+L :e -61734
+L a -61734
+L `a -61734
+L 'a -61734
+L ^a -61734
+L ^a -61734
+L ~a -61734
+L :a -61734
+L oa -61734
+L ae -61734
+L o -61734
+L `o -61734
+L 'o -61734
+L ^o -61734
+L ~o -61734
+L :o -61734
+L oe -61734
+L /o -61734
+L d -61734
+L c -61734
+L 'c -61734
+L ,c -61734
+L g -61734
+L q -61734
+O X -30867
+O W -30867
+O A -30867
+O `A -30867
+O 'A -30867
+O ^A -30867
+O ~A -30867
+O :A -30867
+O oA -30867
+O AE -30867
+O V -30867
+O Y -30867
+O :Y -30867
+O 'Y -30867
+P A -92602
+P `A -92602
+P 'A -92602
+P ^A -92602
+P ~A -92602
+P :A -92602
+P oA -92602
+P AE -92602
+R n -30867
+R ~n -30867
+R l -30867
+R r -30867
+R u -30867
+R `u -30867
+R 'u -30867
+R ^u -30867
+R :u -30867
+R m -30867
+R t -30867
+R i -30867
+R 'i -30867
+R h -30867
+R b -30867
+R k -30867
+R v -30867
+R w -30867
+R C -30867
+R G -30867
+R 'C -30867
+R ,C -30867
+R Q -30867
+R O -30867
+R `O -30867
+R 'O -30867
+R ^O -30867
+R ~O -30867
+R :O -30867
+R OE -30867
+R /O -30867
+R U -30867
+R `U -30867
+R 'U -30867
+R ^U -30867
+R :U -30867
+R T -92602
+R Y -92602
+R :Y -92602
+R 'Y -92602
+R V -123469
+R W -123469
+R e -61734
+R `e -61734
+R 'e -61734
+R ^e -61734
+R :e -61734
+R a -61734
+R `a -61734
+R 'a -61734
+R ^a -61734
+R ^a -61734
+R ~a -61734
+R :a -61734
+R oa -61734
+R ae -61734
+R o -61734
+R `o -61734
+R 'o -61734
+R ^o -61734
+R ~o -61734
+R :o -61734
+R oe -61734
+R /o -61734
+R d -61734
+R c -61734
+R 'c -61734
+R ,c -61734
+R g -61734
+R q -61734
+T y -92602
+T e -92602
+T o -92602
+T r -92602
+T a -92602
+T u -92602
+T A -92602
+T `A -92602
+T 'A -92602
+T ^A -92602
+T ~A -92602
+T :A -92602
+T oA -92602
+T AE -92602
+V o -92602
+V e -92602
+V u -92602
+V r -92602
+V n -92602
+V v -92602
+V a -92602
+V A -123469
+V `A -123469
+V 'A -123469
+V ^A -123469
+V ~A -123469
+V :A -123469
+V oA -123469
+V AE -123469
+V O -30867
+V `O -30867
+V 'O -30867
+V ^O -30867
+V ~O -30867
+V :O -30867
+V OE -30867
+V /O -30867
+V C -30867
+V G -30867
+V 'C -30867
+V ,C -30867
+V Q -30867
+W o -92602
+W e -92602
+W u -92602
+W r -92602
+W n -92602
+W v -92602
+W a -92602
+W A -123469
+W `A -123469
+W 'A -123469
+W ^A -123469
+W ~A -123469
+W :A -123469
+W oA -123469
+W AE -123469
+W O -30867
+W `O -30867
+W 'O -30867
+W ^O -30867
+W ~O -30867
+W :O -30867
+W OE -30867
+W /O -30867
+W C -30867
+W G -30867
+W 'C -30867
+W ,C -30867
+W Q -30867
+X O -30867
+X `O -30867
+X 'O -30867
+X ^O -30867
+X ~O -30867
+X :O -30867
+X OE -30867
+X /O -30867
+X C -30867
+X G -30867
+X 'C -30867
+X ,C -30867
+X Q -30867
+Y e -92602
+Y o -92602
+Y r -92602
+Y a -92602
+Y u -92602
+Y A -92602
+Y `A -92602
+Y 'A -92602
+Y ^A -92602
+Y ~A -92602
+Y :A -92602
+Y oA -92602
+Y AE -92602
+oq lq 123469
+` lq 123469
+oq ? 123469
+` ? 123469
+oq ! 123469
+` ! 123469
+b e -61734
+b `e -61734
+b 'e -61734
+b ^e -61734
+b :e -61734
+b a -61734
+b `a -61734
+b 'a -61734
+b ^a -61734
+b ^a -61734
+b ~a -61734
+b :a -61734
+b oa -61734
+b ae -61734
+b o -61734
+b `o -61734
+b 'o -61734
+b ^o -61734
+b ~o -61734
+b :o -61734
+b oe -61734
+b /o -61734
+b d -61734
+b c -61734
+b 'c -61734
+b ,c -61734
+b g -61734
+b q -61734
+c e -61734
+c `e -61734
+c 'e -61734
+c ^e -61734
+c :e -61734
+c a -61734
+c `a -61734
+c 'a -61734
+c ^a -61734
+c ^a -61734
+c ~a -61734
+c :a -61734
+c oa -61734
+c ae -61734
+c o -61734
+c `o -61734
+c 'o -61734
+c ^o -61734
+c ~o -61734
+c :o -61734
+c oe -61734
+c /o -61734
+c d -61734
+c c -61734
+c 'c -61734
+c ,c -61734
+c g -61734
+c q -61734
+d l 61734
+e e -61734
+e `e -61734
+e 'e -61734
+e ^e -61734
+e :e -61734
+e a -61734
+e `a -61734
+e 'a -61734
+e ^a -61734
+e ^a -61734
+e ~a -61734
+e :a -61734
+e oa -61734
+e ae -61734
+e o -61734
+e `o -61734
+e 'o -61734
+e ^o -61734
+e ~o -61734
+e :o -61734
+e oe -61734
+e /o -61734
+e d -61734
+e c -61734
+e 'c -61734
+e ,c -61734
+e g -61734
+e q -61734
+f cq 111821
+f ' 111821
+f oq 111821
+f ` 111821
+f lq 111821
+f rq 111821
+f ? 111821
+f ! 111821
+f ) 111821
+f rB 111821
+f ] 111821
+l l 61734
+n cq -123469
+n ' -123469
+o e -61734
+o `e -61734
+o 'e -61734
+o ^e -61734
+o :e -61734
+o a -61734
+o `a -61734
+o 'a -61734
+o ^a -61734
+o ^a -61734
+o ~a -61734
+o :a -61734
+o oa -61734
+o ae -61734
+o o -61734
+o `o -61734
+o 'o -61734
+o ^o -61734
+o ~o -61734
+o :o -61734
+o oe -61734
+o /o -61734
+o d -61734
+o c -61734
+o 'c -61734
+o ,c -61734
+o g -61734
+o q -61734
+p e -61734
+p `e -61734
+p 'e -61734
+p ^e -61734
+p :e -61734
+p a -61734
+p `a -61734
+p 'a -61734
+p ^a -61734
+p ^a -61734
+p ~a -61734
+p :a -61734
+p oa -61734
+p ae -61734
+p o -61734
+p `o -61734
+p 'o -61734
+p ^o -61734
+p ~o -61734
+p :o -61734
+p oe -61734
+p /o -61734
+p d -61734
+p c -61734
+p 'c -61734
+p ,c -61734
+p g -61734
+p q -61734
+r e -61734
+r `e -61734
+r 'e -61734
+r ^e -61734
+r :e -61734
+r a -61734
+r `a -61734
+r 'a -61734
+r ^a -61734
+r ^a -61734
+r ~a -61734
+r :a -61734
+r oa -61734
+r ae -61734
+r o -61734
+r `o -61734
+r 'o -61734
+r ^o -61734
+r ~o -61734
+r :o -61734
+r oe -61734
+r /o -61734
+r d -61734
+r c -61734
+r 'c -61734
+r ,c -61734
+r g -61734
+r q -61734
+w l 61734
+:Y e -92602
+:Y o -92602
+:Y r -92602
+:Y a -92602
+:Y u -92602
+:Y A -92602
+:Y `A -92602
+:Y 'A -92602
+:Y ^A -92602
+:Y ~A -92602
+:Y :A -92602
+:Y oA -92602
+:Y AE -92602
+'c e -61734
+'c `e -61734
+'c 'e -61734
+'c ^e -61734
+'c :e -61734
+'c a -61734
+'c `a -61734
+'c 'a -61734
+'c ^a -61734
+'c ^a -61734
+'c ~a -61734
+'c :a -61734
+'c oa -61734
+'c ae -61734
+'c o -61734
+'c `o -61734
+'c 'o -61734
+'c ^o -61734
+'c ~o -61734
+'c :o -61734
+'c oe -61734
+'c /o -61734
+'c d -61734
+'c c -61734
+'c 'c -61734
+'c ,c -61734
+'c g -61734
+'c q -61734
+/l cq 30867
+/l ' 30867
+`A y -30867
+`A :y -30867
+`A 'y -30867
+`A n -30867
+`A ~n -30867
+`A l -30867
+`A r -30867
+`A u -30867
+`A `u -30867
+`A 'u -30867
+`A ^u -30867
+`A :u -30867
+`A m -30867
+`A t -30867
+`A i -30867
+`A 'i -30867
+`A h -30867
+`A b -30867
+`A k -30867
+`A v -30867
+`A w -30867
+`A C -30867
+`A G -30867
+`A 'C -30867
+`A ,C -30867
+`A Q -30867
+`A O -30867
+`A `O -30867
+`A 'O -30867
+`A ^O -30867
+`A ~O -30867
+`A :O -30867
+`A OE -30867
+`A /O -30867
+`A U -30867
+`A `U -30867
+`A 'U -30867
+`A ^U -30867
+`A :U -30867
+`A T -92602
+`A Y -92602
+`A :Y -92602
+`A 'Y -92602
+`A V -123469
+`A W -123469
+`A e -61734
+`A `e -61734
+`A 'e -61734
+`A ^e -61734
+`A :e -61734
+`A a -61734
+`A `a -61734
+`A 'a -61734
+`A ^a -61734
+`A ^a -61734
+`A ~a -61734
+`A :a -61734
+`A oa -61734
+`A ae -61734
+`A o -61734
+`A `o -61734
+`A 'o -61734
+`A ^o -61734
+`A ~o -61734
+`A :o -61734
+`A oe -61734
+`A /o -61734
+`A d -61734
+`A c -61734
+`A 'c -61734
+`A ,c -61734
+`A g -61734
+`A q -61734
+'A y -30867
+'A :y -30867
+'A 'y -30867
+'A n -30867
+'A ~n -30867
+'A l -30867
+'A r -30867
+'A u -30867
+'A `u -30867
+'A 'u -30867
+'A ^u -30867
+'A :u -30867
+'A m -30867
+'A t -30867
+'A i -30867
+'A 'i -30867
+'A h -30867
+'A b -30867
+'A k -30867
+'A v -30867
+'A w -30867
+'A C -30867
+'A G -30867
+'A 'C -30867
+'A ,C -30867
+'A Q -30867
+'A O -30867
+'A `O -30867
+'A 'O -30867
+'A ^O -30867
+'A ~O -30867
+'A :O -30867
+'A OE -30867
+'A /O -30867
+'A U -30867
+'A `U -30867
+'A 'U -30867
+'A ^U -30867
+'A :U -30867
+'A T -92602
+'A Y -92602
+'A :Y -92602
+'A 'Y -92602
+'A V -123469
+'A W -123469
+'A e -61734
+'A `e -61734
+'A 'e -61734
+'A ^e -61734
+'A :e -61734
+'A a -61734
+'A `a -61734
+'A 'a -61734
+'A ^a -61734
+'A ^a -61734
+'A ~a -61734
+'A :a -61734
+'A oa -61734
+'A ae -61734
+'A o -61734
+'A `o -61734
+'A 'o -61734
+'A ^o -61734
+'A ~o -61734
+'A :o -61734
+'A oe -61734
+'A /o -61734
+'A d -61734
+'A c -61734
+'A 'c -61734
+'A ,c -61734
+'A g -61734
+'A q -61734
+^A y -30867
+^A :y -30867
+^A 'y -30867
+^A n -30867
+^A ~n -30867
+^A l -30867
+^A r -30867
+^A u -30867
+^A `u -30867
+^A 'u -30867
+^A ^u -30867
+^A :u -30867
+^A m -30867
+^A t -30867
+^A i -30867
+^A 'i -30867
+^A h -30867
+^A b -30867
+^A k -30867
+^A v -30867
+^A w -30867
+^A C -30867
+^A G -30867
+^A 'C -30867
+^A ,C -30867
+^A Q -30867
+^A O -30867
+^A `O -30867
+^A 'O -30867
+^A ^O -30867
+^A ~O -30867
+^A :O -30867
+^A OE -30867
+^A /O -30867
+^A U -30867
+^A `U -30867
+^A 'U -30867
+^A ^U -30867
+^A :U -30867
+^A T -92602
+^A Y -92602
+^A :Y -92602
+^A 'Y -92602
+^A V -123469
+^A W -123469
+^A e -61734
+^A `e -61734
+^A 'e -61734
+^A ^e -61734
+^A :e -61734
+^A a -61734
+^A `a -61734
+^A 'a -61734
+^A ^a -61734
+^A ^a -61734
+^A ~a -61734
+^A :a -61734
+^A oa -61734
+^A ae -61734
+^A o -61734
+^A `o -61734
+^A 'o -61734
+^A ^o -61734
+^A ~o -61734
+^A :o -61734
+^A oe -61734
+^A /o -61734
+^A d -61734
+^A c -61734
+^A 'c -61734
+^A ,c -61734
+^A g -61734
+^A q -61734
+~A y -30867
+~A :y -30867
+~A 'y -30867
+~A n -30867
+~A ~n -30867
+~A l -30867
+~A r -30867
+~A u -30867
+~A `u -30867
+~A 'u -30867
+~A ^u -30867
+~A :u -30867
+~A m -30867
+~A t -30867
+~A i -30867
+~A 'i -30867
+~A h -30867
+~A b -30867
+~A k -30867
+~A v -30867
+~A w -30867
+~A C -30867
+~A G -30867
+~A 'C -30867
+~A ,C -30867
+~A Q -30867
+~A O -30867
+~A `O -30867
+~A 'O -30867
+~A ^O -30867
+~A ~O -30867
+~A :O -30867
+~A OE -30867
+~A /O -30867
+~A U -30867
+~A `U -30867
+~A 'U -30867
+~A ^U -30867
+~A :U -30867
+~A T -92602
+~A Y -92602
+~A :Y -92602
+~A 'Y -92602
+~A V -123469
+~A W -123469
+~A e -61734
+~A `e -61734
+~A 'e -61734
+~A ^e -61734
+~A :e -61734
+~A a -61734
+~A `a -61734
+~A 'a -61734
+~A ^a -61734
+~A ^a -61734
+~A ~a -61734
+~A :a -61734
+~A oa -61734
+~A ae -61734
+~A o -61734
+~A `o -61734
+~A 'o -61734
+~A ^o -61734
+~A ~o -61734
+~A :o -61734
+~A oe -61734
+~A /o -61734
+~A d -61734
+~A c -61734
+~A 'c -61734
+~A ,c -61734
+~A g -61734
+~A q -61734
+:A y -30867
+:A :y -30867
+:A 'y -30867
+:A n -30867
+:A ~n -30867
+:A l -30867
+:A r -30867
+:A u -30867
+:A `u -30867
+:A 'u -30867
+:A ^u -30867
+:A :u -30867
+:A m -30867
+:A t -30867
+:A i -30867
+:A 'i -30867
+:A h -30867
+:A b -30867
+:A k -30867
+:A v -30867
+:A w -30867
+:A C -30867
+:A G -30867
+:A 'C -30867
+:A ,C -30867
+:A Q -30867
+:A O -30867
+:A `O -30867
+:A 'O -30867
+:A ^O -30867
+:A ~O -30867
+:A :O -30867
+:A OE -30867
+:A /O -30867
+:A U -30867
+:A `U -30867
+:A 'U -30867
+:A ^U -30867
+:A :U -30867
+:A T -92602
+:A Y -92602
+:A :Y -92602
+:A 'Y -92602
+:A V -123469
+:A W -123469
+:A e -61734
+:A `e -61734
+:A 'e -61734
+:A ^e -61734
+:A :e -61734
+:A a -61734
+:A `a -61734
+:A 'a -61734
+:A ^a -61734
+:A ^a -61734
+:A ~a -61734
+:A :a -61734
+:A oa -61734
+:A ae -61734
+:A o -61734
+:A `o -61734
+:A 'o -61734
+:A ^o -61734
+:A ~o -61734
+:A :o -61734
+:A oe -61734
+:A /o -61734
+:A d -61734
+:A c -61734
+:A 'c -61734
+:A ,c -61734
+:A g -61734
+:A q -61734
+oA y -30867
+oA :y -30867
+oA 'y -30867
+oA n -30867
+oA ~n -30867
+oA l -30867
+oA r -30867
+oA u -30867
+oA `u -30867
+oA 'u -30867
+oA ^u -30867
+oA :u -30867
+oA m -30867
+oA t -30867
+oA i -30867
+oA 'i -30867
+oA h -30867
+oA b -30867
+oA k -30867
+oA v -30867
+oA w -30867
+oA C -30867
+oA G -30867
+oA 'C -30867
+oA ,C -30867
+oA Q -30867
+oA O -30867
+oA `O -30867
+oA 'O -30867
+oA ^O -30867
+oA ~O -30867
+oA :O -30867
+oA OE -30867
+oA /O -30867
+oA U -30867
+oA `U -30867
+oA 'U -30867
+oA ^U -30867
+oA :U -30867
+oA T -92602
+oA Y -92602
+oA :Y -92602
+oA 'Y -92602
+oA V -123469
+oA W -123469
+oA e -61734
+oA `e -61734
+oA 'e -61734
+oA ^e -61734
+oA :e -61734
+oA a -61734
+oA `a -61734
+oA 'a -61734
+oA ^a -61734
+oA ^a -61734
+oA ~a -61734
+oA :a -61734
+oA oa -61734
+oA ae -61734
+oA o -61734
+oA `o -61734
+oA 'o -61734
+oA ^o -61734
+oA ~o -61734
+oA :o -61734
+oA oe -61734
+oA /o -61734
+oA d -61734
+oA c -61734
+oA 'c -61734
+oA ,c -61734
+oA g -61734
+oA q -61734
+-D X -30867
+-D W -30867
+-D A -30867
+-D `A -30867
+-D 'A -30867
+-D ^A -30867
+-D ~A -30867
+-D :A -30867
+-D oA -30867
+-D AE -30867
+-D V -30867
+-D Y -30867
+-D :Y -30867
+-D 'Y -30867
+`O X -30867
+`O W -30867
+`O A -30867
+`O `A -30867
+`O 'A -30867
+`O ^A -30867
+`O ~A -30867
+`O :A -30867
+`O oA -30867
+`O AE -30867
+`O V -30867
+`O Y -30867
+`O :Y -30867
+`O 'Y -30867
+'O X -30867
+'O W -30867
+'O A -30867
+'O `A -30867
+'O 'A -30867
+'O ^A -30867
+'O ~A -30867
+'O :A -30867
+'O oA -30867
+'O AE -30867
+'O V -30867
+'O Y -30867
+'O :Y -30867
+'O 'Y -30867
+^O X -30867
+^O W -30867
+^O A -30867
+^O `A -30867
+^O 'A -30867
+^O ^A -30867
+^O ~A -30867
+^O :A -30867
+^O oA -30867
+^O AE -30867
+^O V -30867
+^O Y -30867
+^O :Y -30867
+^O 'Y -30867
+~O X -30867
+~O W -30867
+~O A -30867
+~O `A -30867
+~O 'A -30867
+~O ^A -30867
+~O ~A -30867
+~O :A -30867
+~O oA -30867
+~O AE -30867
+~O V -30867
+~O Y -30867
+~O :Y -30867
+~O 'Y -30867
+:O X -30867
+:O W -30867
+:O A -30867
+:O `A -30867
+:O 'A -30867
+:O ^A -30867
+:O ~A -30867
+:O :A -30867
+:O oA -30867
+:O AE -30867
+:O V -30867
+:O Y -30867
+:O :Y -30867
+:O 'Y -30867
+/O X -30867
+/O W -30867
+/O A -30867
+/O `A -30867
+/O 'A -30867
+/O ^A -30867
+/O ~A -30867
+/O :A -30867
+/O oA -30867
+/O AE -30867
+/O V -30867
+/O Y -30867
+/O :Y -30867
+/O 'Y -30867
+'Y e -92602
+'Y o -92602
+'Y r -92602
+'Y a -92602
+'Y u -92602
+'Y A -92602
+'Y `A -92602
+'Y 'A -92602
+'Y ^A -92602
+'Y ~A -92602
+'Y :A -92602
+'Y oA -92602
+'Y AE -92602
+`e e -61734
+`e `e -61734
+`e 'e -61734
+`e ^e -61734
+`e :e -61734
+`e a -61734
+`e `a -61734
+`e 'a -61734
+`e ^a -61734
+`e ^a -61734
+`e ~a -61734
+`e :a -61734
+`e oa -61734
+`e ae -61734
+`e o -61734
+`e `o -61734
+`e 'o -61734
+`e ^o -61734
+`e ~o -61734
+`e :o -61734
+`e oe -61734
+`e /o -61734
+`e d -61734
+`e c -61734
+`e 'c -61734
+`e ,c -61734
+`e g -61734
+`e q -61734
+'e e -61734
+'e `e -61734
+'e 'e -61734
+'e ^e -61734
+'e :e -61734
+'e a -61734
+'e `a -61734
+'e 'a -61734
+'e ^a -61734
+'e ^a -61734
+'e ~a -61734
+'e :a -61734
+'e oa -61734
+'e ae -61734
+'e o -61734
+'e `o -61734
+'e 'o -61734
+'e ^o -61734
+'e ~o -61734
+'e :o -61734
+'e oe -61734
+'e /o -61734
+'e d -61734
+'e c -61734
+'e 'c -61734
+'e ,c -61734
+'e g -61734
+'e q -61734
+^e e -61734
+^e `e -61734
+^e 'e -61734
+^e ^e -61734
+^e :e -61734
+^e a -61734
+^e `a -61734
+^e 'a -61734
+^e ^a -61734
+^e ^a -61734
+^e ~a -61734
+^e :a -61734
+^e oa -61734
+^e ae -61734
+^e o -61734
+^e `o -61734
+^e 'o -61734
+^e ^o -61734
+^e ~o -61734
+^e :o -61734
+^e oe -61734
+^e /o -61734
+^e d -61734
+^e c -61734
+^e 'c -61734
+^e ,c -61734
+^e g -61734
+^e q -61734
+:e e -61734
+:e `e -61734
+:e 'e -61734
+:e ^e -61734
+:e :e -61734
+:e a -61734
+:e `a -61734
+:e 'a -61734
+:e ^a -61734
+:e ^a -61734
+:e ~a -61734
+:e :a -61734
+:e oa -61734
+:e ae -61734
+:e o -61734
+:e `o -61734
+:e 'o -61734
+:e ^o -61734
+:e ~o -61734
+:e :o -61734
+:e oe -61734
+:e /o -61734
+:e d -61734
+:e c -61734
+:e 'c -61734
+:e ,c -61734
+:e g -61734
+:e q -61734
+`o e -61734
+`o `e -61734
+`o 'e -61734
+`o ^e -61734
+`o :e -61734
+`o a -61734
+`o `a -61734
+`o 'a -61734
+`o ^a -61734
+`o ^a -61734
+`o ~a -61734
+`o :a -61734
+`o oa -61734
+`o ae -61734
+`o o -61734
+`o `o -61734
+`o 'o -61734
+`o ^o -61734
+`o ~o -61734
+`o :o -61734
+`o oe -61734
+`o /o -61734
+`o d -61734
+`o c -61734
+`o 'c -61734
+`o ,c -61734
+`o g -61734
+`o q -61734
+'o e -61734
+'o `e -61734
+'o 'e -61734
+'o ^e -61734
+'o :e -61734
+'o a -61734
+'o `a -61734
+'o 'a -61734
+'o ^a -61734
+'o ^a -61734
+'o ~a -61734
+'o :a -61734
+'o oa -61734
+'o ae -61734
+'o o -61734
+'o `o -61734
+'o 'o -61734
+'o ^o -61734
+'o ~o -61734
+'o :o -61734
+'o oe -61734
+'o /o -61734
+'o d -61734
+'o c -61734
+'o 'c -61734
+'o ,c -61734
+'o g -61734
+'o q -61734
+^o e -61734
+^o `e -61734
+^o 'e -61734
+^o ^e -61734
+^o :e -61734
+^o a -61734
+^o `a -61734
+^o 'a -61734
+^o ^a -61734
+^o ^a -61734
+^o ~a -61734
+^o :a -61734
+^o oa -61734
+^o ae -61734
+^o o -61734
+^o `o -61734
+^o 'o -61734
+^o ^o -61734
+^o ~o -61734
+^o :o -61734
+^o oe -61734
+^o /o -61734
+^o d -61734
+^o c -61734
+^o 'c -61734
+^o ,c -61734
+^o g -61734
+^o q -61734
+~o e -61734
+~o `e -61734
+~o 'e -61734
+~o ^e -61734
+~o :e -61734
+~o a -61734
+~o `a -61734
+~o 'a -61734
+~o ^a -61734
+~o ^a -61734
+~o ~a -61734
+~o :a -61734
+~o oa -61734
+~o ae -61734
+~o o -61734
+~o `o -61734
+~o 'o -61734
+~o ^o -61734
+~o ~o -61734
+~o :o -61734
+~o oe -61734
+~o /o -61734
+~o d -61734
+~o c -61734
+~o 'c -61734
+~o ,c -61734
+~o g -61734
+~o q -61734
+:o e -61734
+:o `e -61734
+:o 'e -61734
+:o ^e -61734
+:o :e -61734
+:o a -61734
+:o `a -61734
+:o 'a -61734
+:o ^a -61734
+:o ^a -61734
+:o ~a -61734
+:o :a -61734
+:o oa -61734
+:o ae -61734
+:o o -61734
+:o `o -61734
+:o 'o -61734
+:o ^o -61734
+:o ~o -61734
+:o :o -61734
+:o oe -61734
+:o /o -61734
+:o d -61734
+:o c -61734
+:o 'c -61734
+:o ,c -61734
+:o g -61734
+:o q -61734
+Tp e -61734
+Tp `e -61734
+Tp 'e -61734
+Tp ^e -61734
+Tp :e -61734
+Tp a -61734
+Tp `a -61734
+Tp 'a -61734
+Tp ^a -61734
+Tp ^a -61734
+Tp ~a -61734
+Tp :a -61734
+Tp oa -61734
+Tp ae -61734
+Tp o -61734
+Tp `o -61734
+Tp 'o -61734
+Tp ^o -61734
+Tp ~o -61734
+Tp :o -61734
+Tp oe -61734
+Tp /o -61734
+Tp d -61734
+Tp c -61734
+Tp 'c -61734
+Tp ,c -61734
+Tp g -61734
+Tp q -61734
+charset
+ga 619674,684320 2 0000
+aa 619674,684320,0,78478 2 0001
+a^ 555610,684320 2 0002
+a~ 619674,684320,0,109346 2 0003
+ad 619674,723632,0,118082 2 0004
+a" 619674,684320,0,109346 2 0005
+ao 980179,684320 2 0006
+ah 555610,684320 2 0007
+ab 619674,684320,0,97406 2 0010
+a- 619674,723632,0,133515 2 0011
+a. 372736,723632,0,135699 2 0012
+ac 557939,0,178360 1 0013
+ho 372736,0,203840 1 0014
+bq 372736,154336,203840 1 0015
+fo 557939,495040,0,62026 2 0016
+fc 557939,495040,0,62026 2 0017
+lq 465338,723632,0,175826 2 0020
+rq 465338,723632,0,83224 2 0021
+Bq 465338,154336,203840,83224 1 0022
+Fo 681408,495040,0,57808 2 0023
+Fc 681408,495040 2 0024
+en 619674,465920,0,102854 0 0025
+em 1239347,465920,0,102854 0 0026
+--- 0,465920 0 0027
+--- 496205,778232,58240,134826 3 0030
+.i 372736,465920,0,98814 0 0031
+.j 403603,465920,203840,48339 1 0032
+ff 792064,723632,203840,228301 3 0033
+fi 707034,723632,203840,113859 3 0034
+fl 737901,723632,203840,113859 3 0035
+Fi 1095203,723632,203840,113859 3 0036
+Fl 1110637,723632,203840,113859 3 0037
+--- 619674,465920,101920,46446,0,23224 1 0040
+! 404768,723632,0,119755 2 0041
+dq 619674,723632,0,88816 2 0042
+" "
+sh 990080,723632,203840,71637 3 0043
+# "
+Do 619674,778232,58240,138029 3 0044
+$ "
+% 990080,778232,58240,134826 3 0045
+& 928346,723632,0,89398 2 0046
+cq 372736,723632,0,135699 2 0047
+' "
+( 496205,778232,262080,165693 3 0050
+) 496205,778232,262080,34653 3 0051
+* 619674,778232,0,150259 2 0052
+pl 928346,632486,108326,34653 3 0053
++ "
+, 372736,154336,203840 1 0054
+- 434470,465920,0,27373 0 0055
+. 372736,154336 0 0056
+sl 619674,778232,262080,165693 3 0057
+/ "
+0 619674,670592,0,138029 2 0060
+1 619674,670592,0,138029 2 0061
+2 619674,670592,0,138029 2 0062
+3 619674,670592,0,138029 2 0063
+4 619674,670592,203840,138029 3 0064
+5 619674,670592,0,138029 2 0065
+6 619674,670592,0,138029 2 0066
+7 619674,670592,0,138029 2 0067
+8 619674,670592,0,138029 2 0070
+9 619674,670592,0,138029 2 0071
+: 372736,465920,0,70251 0 0072
+; 372736,465920,203840,70251 1 0073
+< 928346,613858,89698,91730 3 0074
+eq 928346,410018,-114142,71637 0 0075
+= "
+> 928346,613858,89698,3786 3 0076
+? 619674,723632,0,120266 2 0077
+at 928346,723632,0,96533 2 0100
+@ "
+A 907379,723632 2 0101
+B 856128,723632,0,103995,0,51998 2 0102
+C 866611,723632,0,148949,-84813,74475 2 0103
+D 917862,723632,0,95003,0,64136 2 0104
+E 793229,723632,0,119755,0,59915 2 0105
+F 762362,723632,0,135262,0,-19074 2 0106
+G 938538,723632,0,77022,-84813,77022 2 0107
+H 939411,723632,0,180398,0,90200 2 0110
+I 494458,723632,0,164382,0,82192 2 0111
+J 640058,723632,0,152006,0,45136 2 0112
+K 938246,723632,0,148949,0,74475 2 0113
+L 731494,723632,0,0,0,61734 2 0114
+M 1124614,723632,0,180398,0,59333 2 0115
+N 939411,723632,0,180398,0,59333 2 0116
+O 896314,723632,0,95003,-84813,64136 2 0117
+P 825261,723632,0,103995,0,-50341 2 0120
+Q 896314,723632,203840,95003,-84813,95003 3 0121
+R 900973,723632,0,26827,0,20120 2 0122
+S 681408,723632,0,118082,0,59042 2 0123
+T 834579,723632,0,135262,-134862,-19074 2 0124
+U 923395,723632,0,180398,-136064,59333 2 0125
+V 907379,723632,0,195250,-133515,-51688 2 0126
+W 1216051,723632,0,195250,-133515,40914 2 0127
+X 907379,723632,0,164382,0,82192 2 0130
+Y 907379,723632,0,207597,-148949,-39341 2 0131
+Z 743142,723632,0,148949,0,74475 2 0132
+lB 373326,778232,262080,196560 3 0133
+[ "
+rs 619674,778232,262080 3 0134
+\ "
+rB 373326,778232,262080,104549 3 0135
+] "
+ha 743142,723632,0,70251 2 0136
+^ "
+_ 928346,0,322658 1 0137
+oq 372736,723632,0,135699 2 0140
+` "
+a 619674,465920,0,98814,-34070,98814 0 0141
+b 557939,723632,0,82410,-34070,82410 2 0142
+c 557939,465920,0,54746,-34070,54746 0 0143
+d 619674,723632,0,113859,-34070,113859 2 0144
+e 557939,465920,0,89107,-34070,89107 0 0145
+f 419328,723632,203840,228301,112694,116480 3 0146
+g 557939,465920,203840,110074,-35818,71246 1 0147
+h 619674,723632,0,98814,0,98814 2 0150
+i 372736,723632,0,119371,-17666,119371 2 0151
+j 372736,723632,203840,175282,50960,110074 3 0152
+k 557939,723632,0,116480,0,98814 2 0153
+l 311002,723632,0,113859,-30867,129682 2 0154
+m 990080,465920,0,98814,-17666,98814 0 0155
+n 681408,465920,0,98814,-17666,98814 0 0156
+o 619674,465920,0,82410,-34070,82410 0 0157
+p 619674,465920,203840,82410,-17181,82410 1 0160
+q 557939,465920,203840,110074,-34070,71246 1 0161
+r 525907,465920,0,116480,-17666,85613 0 0162
+s 510474,465920,0,85613,0,85613 0 0163
+t 403603,670592,0,101046,-39312,101046 2 0164
+u 650541,465920,0,98814,-17666,98814 0 0165
+v 557939,465920,0,116480,-17666,77653 0 0166
+w 804877,465920,0,116480,-17666,87360 0 0167
+x 587642,465920,0,131914,0,131914 0 0170
+y 588806,465920,203840,110074,-17666,71246 1 0171
+z 514259,465920,0,145600,0,98814 0 0172
+lC 619674,778232,262080,153754 3 0173
+{ "
+ba 372736,778232,262080,104549 3 0174
+bv "
+or "
+| "
+rC 619674,778232,262080,22714 3 0175
+} "
+~ 743142,723632,0,120266 2 0176
+hy 249267,465920,0,27373 0 0177
+--- 907379,937664 2 0200
+--- 907379,723632,203840 3 0201
+'C 866611,916128,0,148949 2 0202
+--- 866611,937664,0,148949,-84813,74475 2 0203
+--- 917862,937664,0,95003,0,64136 2 0204
+--- 793229,937664,0,119755,0,59915 2 0205
+--- 793229,723632,203840,119755 3 0206
+--- 938538,937664,0,77022,-84813,77022 2 0207
+--- 731494,916128,0,0,0,61734 2 0210
+--- 731494,937664,0,0,0,61734 2 0211
+/L 731494,723632 2 0212
+--- 939411,916128,0,180398 2 0213
+--- 939411,937664,0,180398,0,59333 2 0214
+--- 948730,723632,0,179816,0,59042 2 0215
+--- 896314,916128,0,95003,-84813,64136 2 0216
+--- 900973,916128,0,26827,0,20120 2 0217
+--- 900973,937664,0,26827,0,20120 2 0220
+--- 681408,916128,0,118082 2 0221
+vS 681408,937664,0,118082,0,59042 2 0222
+--- 681408,723632,178360,118082,0,59042 3 0223
+--- 834579,937664,0,135262,-134862,-19074 2 0224
+--- 834579,723632,178360,135262,-134862,-19074 3 0225
+--- 923395,916128,0,180398,-136064,59333 2 0226
+--- 923395,937664,0,180398,-136064,59333 2 0227
+:Y 907379,937664,0,207597,-148949,-39341 2 0230
+--- 743142,916128,0,148949 2 0231
+vZ 743142,937664,0,148949,0,74475 2 0232
+--- 743142,916128,0,148949 2 0233
+IJ 1050067,723632,0,152006,0,45136 2 0234
+--- 494458,916128,0,164382,0,82192 2 0235
+--- 619674,723632,0,113859,-34070,113859 2 0236
+sc 575994,723632,203840 3 0237
+--- 619674,684320,0,98814,-34070,98814 2 0240
+--- 619674,465920,203840,98814 1 0241
+'c 557939,684320,0,54746 2 0242
+--- 557939,684320,0,54746,-34070,54746 2 0243
+--- 619674,723632,0,113859,-34070,113859 2 0244
+--- 557939,684320,0,89107,-34070,89107 2 0245
+--- 557939,465920,203840,89107 1 0246
+--- 557939,684320,203840,110074,-35818,71246 3 0247
+--- 311002,916128,0,113859,-30867,129682 2 0250
+--- 311002,723632,0,113859,-30867,129682 2 0251
+/l 372736,723632,0,113859 2 0252
+--- 681408,684320,0,98814 2 0253
+--- 681408,684320,0,98814,-17666,98814 2 0254
+--- 681408,465920,203840,98814,-17666,98814 1 0255
+--- 619674,684320,0,82410,-34070,82410 2 0256
+--- 525907,684320,0,116480,-17666,85613 2 0257
+--- 525907,684320,0,116480,-17666,85613 2 0260
+--- 510474,684320,0,85613 2 0261
+vs 510474,684320,0,140213,0,140213 2 0262
+--- 510474,465920,178360,85613,0,85613 1 0263
+--- 403603,723632,0,101046,-39312,101046 2 0264
+--- 403603,670592,178360,101046,-39312,101046 3 0265
+--- 650541,684320,0,231067,-17666,231067 2 0266
+--- 650541,684320,0,98814,-17666,98814 2 0267
+:y 588806,684320,203840,110074,-17666,71246 3 0270
+--- 514259,684320,0,145600,0,98814 2 0271
+vz 514259,684320,0,145600,0,98814 2 0272
+--- 514259,723632,0,145600,0,98814 2 0273
+ij 681408,723632,203840,119371,50960,110074 3 0274
+r! 404768,524160,203840,68723 3 0275
+r? 619674,524160,203840 3 0276
+Po 910510,723632 2 0277
+`A 907379,916128 2 0300
+'A 907379,916128 2 0301
+^A 907379,937664 2 0302
+~A 907379,937664 2 0303
+:A 907379,937664 2 0304
+oA 907379,893984 2 0305
+AE 1072198,723632,0,119755 2 0306
+,C 866611,723632,178360,148949,-84813,74475 3 0307
+`E 793229,916128,0,119755,0,59915 2 0310
+'E 793229,916128,0,119755,0,59915 2 0311
+^E 793229,937664,0,119755,0,59915 2 0312
+:E 793229,937664,0,119755 2 0313
+`I 494458,916128,0,164382,0,82192 2 0314
+'I 494458,916128,0,164382,0,82192 2 0315
+^I 494458,937664,0,164382,0,82192 2 0316
+:I 494458,937664,0,164382,0,82192 2 0317
+-D 917862,723632,0,95003,0,64136 2 0320
+~N 939411,937664,0,180398,0,59333 2 0321
+`O 896314,916128,0,95003,-84813,64136 2 0322
+'O 896314,916128,0,95003 2 0323
+^O 896314,937664,0,95003,-84813,64136 2 0324
+~O 896314,937664,0,95003,-84813,64136 2 0325
+:O 896314,937664,0,95003,-84813,64136 2 0326
+OE 1195667,723632,0,119755 2 0327
+/O 928346,778232,50960,95003 3 0330
+`U 923395,916128,0,180398,-136064,59333 2 0331
+'U 923395,916128,0,180398 2 0332
+^U 923395,937664,0,180398,-136064,59333 2 0333
+:U 923395,937664,0,180398,-136064,59333 2 0334
+'Y 907379,916128,0,207597,-148949,-39341 2 0335
+TP 763526,723632,0,103995,0,51998 2 0336
+--- 1298752,723632,0,118082,0,59042 2 0337
+`a 619674,684320,0,98814,-34070,98814 2 0340
+'a 619674,684320,0,98814,-34070,98814 2 0341
+^a 619674,684320,0,98814,-34070,98814 2 0342
+~a 619674,684320,0,98814,-34070,98814 2 0343
+:a 619674,684320,0,98814,-34070,98814 2 0344
+oa 619674,684320,0,98814,-34070,98814 2 0345
+ae 866611,465920,0,89107 0 0346
+,c 557939,465920,178360,54746,-34070,54746 1 0347
+`e 557939,684320,0,89107,-34070,89107 2 0350
+'e 557939,684320,0,89107,-34070,89107 2 0351
+^e 557939,684320,0,89107,-34070,89107 2 0352
+:e 557939,684320,0,89107,-34070,89107 2 0353
+`i 372736,684320,0,98814 2 0354
+'i 372736,684320,0,98814 2 0355
+^i 372736,684320,0,98814 2 0356
+:i 372736,684320,0,98814 2 0357
+Sd 619674,723632,0,116480 2 0360
+~n 681408,684320,0,98814,-17666,98814 2 0361
+`o 619674,684320,0,82410,-34070,82410 2 0362
+'o 619674,684320,0,82410,-34070,82410 2 0363
+^o 619674,684320,0,82410,-34070,82410 2 0364
+~o 619674,684320,0,82410,-34070,82410 2 0365
+:o 619674,684320,0,82410,-34070,82410 2 0366
+oe 866611,465920,0,89107 0 0367
+/o 619674,567840,101920,99154 3 0370
+`u 650541,684320,0,98814,-17666,98814 2 0371
+'u 650541,684320,0,98814,-17666,98814 2 0372
+^u 650541,684320,0,98814,-17666,98814 2 0373
+:u 650541,684320,0,98814,-17666,98814 2 0374
+'y 588806,684320,203840,110074,-17666,71246 3 0375
+Tp 619674,723632,203840,82410 3 0376
+ss 697133,723632,203840,102064 3 0377
diff --git a/contrib/groff/font/devdvi/TBITC b/contrib/groff/font/devdvi/TBITC
new file mode 100644
index 0000000..e9aec28
--- /dev/null
+++ b/contrib/groff/font/devdvi/TBITC
@@ -0,0 +1,139 @@
+name TBITC
+special
+internalname tcbi1000
+spacewidth 434470
+slant 14.036243
+checksum 487057398
+designsize 10485760
+charset
+--- 619674,662664 2 0000
+--- 619674,662664,0,73064 2 0001
+--- 619674,679952,0,64866 2 0002
+--- 619674,679952,0,109346 2 0003
+--- 619674,679952 2 0004
+--- 619674,662664,0,103931 2 0005
+--- 923395,679952 2 0006
+--- 619674,679952 2 0007
+--- 619674,679952,0,97406 2 0010
+--- 619674,679952,0,124779 2 0011
+--- 372736,662664 2 0012
+--- 557939,0,178360 1 0013
+--- 372736,0,203840 1 0014
+--- 496205,154336,203840 1 0015
+--- 619674,154336,203840 1 0022
+--- 868941,472035,0,102854 2 0025
+--- 961542,472035,0,102854 2 0026
+--- 0,723632 2 0027
+<- 1175283,410018,-114142 0 0030
+-> 1175283,410018,-114142 0 0031
+--- 372736,723632,0,516589 2 0032
+--- 453690,981344,0,575605 2 0033
+--- 619674,723632,0,516589 2 0034
+--- 619674,723632,0,575605 2 0035
+--- 0,723632 2 0037
+--- 557939,723632,0,82410,-34070,82410 2 0040
+Do 619674,786240,58240,138029 3 0044
+$ "
+aq 372736,723632,0,119683 2 0047
+** 619674,495040,-29120 2 0052
+, 372736,154336,203840 1 0054
+--- 434470,410018,-114142,71637 0 0055
+. 372736,154336 0 0056
+f/ 619674,786240,262080,165693 3 0057
+0 619674,472035,0,69189 2 0060
+1 619674,472035 2 0061
+2 619674,472035,0,68491 2 0062
+3 619674,472035,203840,68491 3 0063
+4 619674,472035,203840,17472 3 0064
+5 619674,472035,203840,54746 3 0065
+6 619674,679952,0,107162 2 0066
+7 619674,472035,203840,116480 3 0067
+8 619674,679952,0,107162 2 0070
+9 619674,472035,203840,54746 3 0071
+la 496205,786240,262080 3 0074
+mi 928346,634378,108326,34653 3 0075
+\- "
+ra 496205,786240,262080 3 0076
+--- 866611,723632,0,158208,0,79104 2 0115
+ci 1298752,786240,262080 3 0117
+--- 866611,723632,0,103995,0,51998 2 0127
+--- 511638,786240,262080 3 0133
+--- 511638,786240,262080 3 0135
+ua 619674,723632,203840,95514 3 0136
+da 619674,723632,203840 3 0137
+--- 619674,723632 2 0140
+--- 619674,495040,-29120 2 0142
+--- 619674,495040,-29120 2 0143
+--- 619674,634378,26210 3 0144
+--- 1175283,723632 2 0154
+--- 619674,495040,-29120 2 0155
+--- 679078,723632 2 0156
+ti 743142,133120 0 0176
+~ "
+--- 249267,410018,-114142,71637 0 0177
+--- 743142,723632,0,108326 2 0200
+--- 743142,723632,0,103085 2 0201
+--- 619674,723632,0,120266 2 0202
+--- 619674,723632 2 0203
+dg 557939,723632,203840 3 0204
+dd 557939,723632,203840 3 0205
+--- 619674,786240,262080 3 0206
+%O 1360486,786240,58240,134826 3 0207
+bu 619674,472035,-46010 2 0210
+--- 1113549,723632,0,148949,-84813,74475 2 0211
+--- 743142,786240,58240,138029 3 0212
+--- 619674,567840,101920,104133 3 0213
+Fn 419328,723632,203840,228301,112694,116480 3 0214
+--- 866611,786240,58240,148949,-84813,74475 3 0215
+--- 1216051,723632,0,195250,-133515,40914 2 0216
+--- 970278,723632,0,180398,0,59333 2 0217
+--- 938538,786240,58240,77022,-84813,77022 3 0220
+--- 840694,723632,0,103995,0,-50341 2 0221
+--- 910510,723632 2 0222
+--- 900973,723632,0,26827,0,20120 2 0223
+--- 683738,723632,0,120266 2 0224
+--- 619674,524160,203840 3 0225
+--- 619674,786240,0,128419,-34070,128419 2 0226
+tm 804877,786240,0,550366 2 0227
+--- 1811264,786240,58240,134826 3 0230
+--- 588806,723632,203840 3 0231
+--- 856128,786240,58240,103995,0,51998 3 0232
+--- 1140048,723632,0,180398,0,59333 2 0233
+--- 619674,786240,0,165693 2 0234
+--- 834288,723632,0,136659 2 0235
+--- 619674,472035,-46010 2 0236
+--- 804877,786240,0,550366 2 0237
+--- 465338,786240,262080,22714 3 0240
+--- 465338,786240,262080,153754 3 0241
+ct 619674,567840,101920,104133 3 0242
+Po 910510,723632 2 0243
+Cs 864454,599043,0,116480 2 0244
+Ye 907379,723632,0,207597 2 0245
+bb 249267,786240,262080,134826 3 0246
+sc 575994,723632,203840 3 0247
+--- 619674,723632,0,120266 2 0250
+co 1298752,786240,262080 3 0251
+Of 557939,786240,0,137592 2 0252
+--- 1298752,786240,262080 3 0253
+no 804877,472035,0,85613 2 0254
+--- 1298752,786240,262080 3 0255
+rg 1298752,786240,262080 3 0256
+rn 928346,723632 2 0257
+de 434470,723632 2 0260
+t+- 928346,634378,108326,34653 3 0261
+S2 557939,786240,0,165693 2 0262
+S3 557939,786240,0,165693 2 0263
+--- 619674,723632,0,89398 2 0264
+mc 619674,472035,203840,98814,44554,98814 3 0265
+ps 743142,723632,203840 3 0266
+pc 321485,472035 2 0267
+--- 740811,553278,0,27373 2 0270
+S1 557939,786240,0,165693 2 0271
+Om 557939,786240,0,137592 2 0272
+--- 556774,786240,199165,196560 3 0273
+14 557939,786240,203840,165693 3 0274
+12 557939,786240,203840,165693 3 0275
+34 557939,786240,203840,165693 3 0276
+Eu 928346,723632,0,119829 2 0277
+tmu 928346,634378,108326,34653 3 0326
+tdi 928346,634378,108326,34653 3 0366
diff --git a/contrib/groff/font/devdvi/TBTC b/contrib/groff/font/devdvi/TBTC
new file mode 100644
index 0000000..9a623b3
--- /dev/null
+++ b/contrib/groff/font/devdvi/TBTC
@@ -0,0 +1,138 @@
+name TBTC
+special
+internalname tcbx1000
+spacewidth 401856
+checksum -1650382063
+designsize 10485760
+charset
+--- 602784,664624 2 0000
+--- 602784,664624 2 0001
+--- 602784,679952 2 0002
+--- 602784,679952 2 0003
+--- 602784,679952 2 0004
+--- 602784,664624,0,11531 2 0005
+--- 927472,679952 2 0006
+--- 602784,679952 2 0007
+--- 602784,679952 2 0010
+--- 602784,679952 2 0011
+--- 334880,664624 2 0012
+--- 535808,0,178360 1 0013
+--- 334880,0,203840 1 0014
+--- 468832,163072,203840 1 0015
+--- 602784,163072,203840 1 0022
+--- 803712,465920,0,33488 0 0025
+--- 904176,465920,0,33488 0 0026
+--- 0,723632 2 0027
+<- 1205568,410018,-114142 0 0030
+-> 1205568,410018,-114142 0 0031
+--- 334880,723632,0,326144 2 0032
+--- 416416,981344,0,359632 2 0033
+--- 602784,723632,0,326144 2 0034
+--- 602784,723632,0,359632 2 0035
+--- 0,723632 2 0037
+--- 669760,723632 2 0040
+Do 602784,786240,58240 3 0044
+$ "
+aq 334880,723632 2 0047
+** 602784,495768,-29120 2 0052
+, 334880,163072,203840 1 0054
+--- 401856,410018,-114142 0 0055
+. 334880,163072 0 0056
+f/ 602784,786240,262080 3 0057
+0 602784,465920 0 0060
+1 602784,465920 0 0061
+2 602784,465920 0 0062
+3 602784,465920,203840 1 0063
+4 602784,465920,203840 1 0064
+5 602784,465920,203840 1 0065
+6 602784,679952 2 0066
+7 602784,465920,203840 1 0067
+8 602784,679952 2 0070
+9 602784,465920,203840 1 0071
+la 468832,786240,262080 3 0074
+mi 937664,664624,139776 3 0075
+\- "
+ra 468832,786240,262080 3 0076
+--- 870688,723632 2 0115
+ci 1339520,786240,262080 3 0117
+--- 870688,723632 2 0127
+--- 485576,786240,262080 3 0133
+--- 485576,786240,262080 3 0135
+ua 602784,723632,203840 3 0136
+da 602784,723632,203840 3 0137
+--- 602784,723632 2 0140
+--- 602784,495768,-29120 2 0142
+--- 602784,495768,-29120 2 0143
+--- 602784,636270,26210 3 0144
+--- 1205568,723632 2 0154
+--- 602784,495768,-29120 2 0155
+--- 736736,723632 2 0156
+ti 736736,133120 0 0176
+~ "
+--- 200928,410018,-114142 0 0177
+--- 736736,723632 2 0200
+--- 736736,723632 2 0201
+--- 602784,723632 2 0202
+--- 602784,723632 2 0203
+dg 535808,723632,203840 3 0204
+dd 535808,723632,203840 3 0205
+--- 602784,786240,262080 3 0206
+%O 1406496,786240,58240 3 0207
+bu 602784,495768,-27664 2 0210
+--- 1138592,723632,0,0,-33488 2 0211
+--- 736736,786240,58240 3 0212
+--- 602784,567840,101920 3 0213
+Fn 368368,723632,0,114296 2 0214
+--- 870688,786240,58240,0,-33488 3 0215
+--- 1246336,723632,0,16744,50232,-150696 2 0216
+--- 976976,723632 2 0217
+--- 947856,786240,58240,0,-33488 3 0220
+--- 840840,723632,0,0,0,-167440 2 0221
+--- 770224,723632 2 0222
+--- 904176,723632 2 0223
+--- 569296,723632 2 0224
+--- 569296,524160,203840 3 0225
+--- 669760,786240 2 0226
+tm 803712,786240,0,550366 2 0227
+--- 1889888,786240,58240 3 0230
+--- 569296,723632,203840 3 0231
+--- 857584,786240,58240 3 0232
+--- 1157520,723632 2 0233
+--- 602784,786240 2 0234
+--- 833560,723632 2 0235
+--- 602784,495768,-27664 2 0236
+--- 803712,786240,0,550366 2 0237
+--- 435344,786240,262080 3 0240
+--- 435344,786240,262080 3 0241
+ct 602784,567840,101920 3 0242
+Po 770224,723632 2 0243
+Cs 810874,599043 2 0244
+Ye 911456,723632,0,30139 2 0245
+bb 200928,786240,262080 3 0246
+sc 554736,723632,203840 3 0247
+--- 602784,723632 2 0250
+co 1339520,786240,262080 3 0251
+Of 535808,786240 2 0252
+--- 1339520,786240,262080 3 0253
+no 803712,465920 0 0254
+--- 1339520,786240,262080 3 0255
+rg 1339520,786240,262080 3 0256
+rn 937664,723632 2 0257
+de 401856,723632 2 0260
+t+- 937664,664624,139776 3 0261
+S2 535808,786240 2 0262
+S3 535808,786240 2 0263
+--- 602784,723632 2 0264
+mc 669760,465920,203840 1 0265
+ps 736736,723632,203840 3 0266
+pc 288288,465920 0 0267
+--- 687230,553278 2 0270
+S1 535808,786240 2 0271
+Om 535808,786240 2 0272
+--- 569296,786240,199165 3 0273
+14 535808,786240,203840 3 0274
+12 535808,786240,203840 3 0275
+34 535808,786240,203840 3 0276
+Eu 937664,723632 2 0277
+tmu 937664,664624,139776 3 0326
+tdi 937664,664624,139776 3 0366
diff --git a/contrib/groff/font/devdvi/TI b/contrib/groff/font/devdvi/TI
new file mode 100644
index 0000000..f073937
--- /dev/null
+++ b/contrib/groff/font/devdvi/TI
@@ -0,0 +1,353 @@
+#
+# manually added kernings for `` and ''
+#
+name TI
+special
+internalname cmti10
+spacewidth 375155
+slant 14.036243
+ligatures ff fi fl ffi ffl 0
+checksum -50321606
+designsize 10485760
+kernpairs
+ff cq 109373
+ff ' 109373
+ff ? 109373
+ff ! 109373
+ff ) 109373
+ff rB 109373
+ff ] 109373
+' ' -80390
+cq ' -80390
+' cq -80390
+cq cq -80390
+cq ? 107187
+' ? 107187
+cq ! 107187
+' ! 107187
+A n -26797
+A l -26797
+A r -26797
+A u -26797
+A m -26797
+A t -26797
+A i -26797
+A C -26797
+A O -26797
+A G -26797
+A h -26797
+A b -26797
+A U -26797
+A k -26797
+A v -26797
+A w -26797
+A Q -26797
+A T -80390
+A Y -80390
+A V -107187
+A W -107187
+A e -53594
+A a -53594
+A o -53594
+A d -53594
+A c -53594
+A g -53594
+A q -53594
+D X -26797
+D W -26797
+D A -26797
+D V -26797
+D Y -26797
+F o -80390
+F e -80390
+F u -80390
+F r -80390
+F a -80390
+F A -107187
+F O -26797
+F C -26797
+F G -26797
+F Q -26797
+K O -26797
+K C -26797
+K G -26797
+K Q -26797
+L T -80390
+L Y -80390
+L V -107187
+L W -107187
+L e -53594
+L a -53594
+L o -53594
+L d -53594
+L c -53594
+L g -53594
+L q -53594
+O X -26797
+O W -26797
+O A -26797
+O V -26797
+O Y -26797
+P A -80390
+R n -26797
+R l -26797
+R r -26797
+R u -26797
+R m -26797
+R t -26797
+R i -26797
+R C -26797
+R O -26797
+R G -26797
+R h -26797
+R b -26797
+R U -26797
+R k -26797
+R v -26797
+R w -26797
+R Q -26797
+R T -80390
+R Y -80390
+R V -107187
+R W -107187
+R e -53594
+R a -53594
+R o -53594
+R d -53594
+R c -53594
+R g -53594
+R q -53594
+T y -80390
+T e -80390
+T o -80390
+T r -80390
+T a -80390
+T u -80390
+T A -80390
+V o -80390
+V e -80390
+V u -80390
+V r -80390
+V a -80390
+V A -107187
+V O -26797
+V C -26797
+V G -26797
+V Q -26797
+W A -80390
+X O -26797
+X C -26797
+X G -26797
+X Q -26797
+Y e -80390
+Y o -80390
+Y r -80390
+Y a -80390
+Y u -80390
+Y A -80390
+oq oq -80390
+oq ` -80390
+` oq -80390
+` ` -80390
+b e -53594
+b a -53594
+b o -53594
+b d -53594
+b c -53594
+b g -53594
+b q -53594
+c e -53594
+c a -53594
+c o -53594
+c d -53594
+c c -53594
+c g -53594
+c q -53594
+d l 53594
+e e -53594
+e a -53594
+e o -53594
+e d -53594
+e c -53594
+e g -53594
+e q -53594
+Fn cq 109373
+Fn ' 109373
+f cq 109373
+f ' 109373
+Fn ? 109373
+f ? 109373
+Fn ! 109373
+f ! 109373
+Fn ) 109373
+f ) 109373
+Fn rB 109373
+Fn ] 109373
+f rB 109373
+f ] 109373
+l l 53594
+n cq -107187
+n ' -107187
+o e -53594
+o a -53594
+o o -53594
+o d -53594
+o c -53594
+o g -53594
+o q -53594
+p e -53594
+p a -53594
+p o -53594
+p d -53594
+p c -53594
+p g -53594
+p q -53594
+r e -53594
+r a -53594
+r o -53594
+r d -53594
+r c -53594
+r g -53594
+r q -53594
+w l 53594
+charset
+*G 657686,716526,0,139518,0,5534 2 0000
+*D 857498,716526 2 0001
+*H 803904,716526,0,98595,-80538,71798 2 0002
+*L 725843,716526 2 0003
+*C 696717,716526,0,160373,0,80187 2 0004
+*P 779437,716526,0,171851,0,85926 2 0005
+*S 750310,716526,0,126120,0,63061 2 0006
+*U 803904,716526,0,116509,-170102,-17475 2 0007
+*F 750310,716526,0,62770,-116363,62770 2 0010
+*Q 803904,716526,0,116509,-170102,4659 2 0011
+*W 750310,716526,0,107552,0,53776 2 0012
+ff 643123,728178,203890,222240 3 0013
+fi 589530,728178,203890,108354 3 0014
+fl 616326,728178,203890,108354 3 0015
+Fi 924490,728178,203890,108354 3 0016
+Fl 937888,728178,203890,108354 3 0017
+.i 321562,451470,0,80440 0 0020
+.j 348358,451470,203890,39176 1 0021
+ga 535936,728178 2 0022
+aa 535936,728178,0,101654 2 0023
+ah 535936,659002,0,86982 2 0024
+ab 535936,728178,0,113306 2 0025
+a- 535936,588949,0,108354 2 0026
+ao 871672,728178 2 0027
+ac 482342,0,178403 1 0030
+ss 562733,728178,203890,110245 3 0031
+ae 750310,451470,0,78789 0 0032
+oe 750310,451470,0,78789 0 0033
+/o 535936,553416,101946,96411 3 0034
+AE 925654,716526,0,126120 2 0035
+OE 1032842,716526,0,126120 2 0036
+/O 803904,767499,50973,98595 3 0037
+--- 267968,451470 0 0040
+! 321562,728178,0,130200 2 0041
+rq 539432,728178,0,72994 2 0042
+sh 857498,728178,203888,69378 3 0043
+# "
+Po 806453,728178 2 0044
+% 857498,786432,58254,143014 3 0045
+& 803904,728178,0,101654 2 0046
+cq 321562,728178,0,130200 2 0047
+' "
+( 428749,786432,262144,169811 3 0050
+) 428749,786432,262144,38739 3 0051
+* 535936,786432,0,156413 2 0052
++ 803904,588949,59418,38739 3 0053
+, 321562,110683,203890 1 0054
+hy 375155,451470,0,29637 0 0055
+- "
+. 321562,110683 0 0056
+sl 535936,786432,262144,169811 3 0057
+/ "
+0 535936,675749,0,142141 2 0060
+1 535936,675749,0,142141 2 0061
+2 535936,675749,0,142141 2 0062
+3 535936,675749,0,142141 2 0063
+4 535936,675749,203890,142141 3 0064
+5 535936,675749,0,142141 2 0065
+6 535936,675749,0,142141 2 0066
+7 535936,675749,203890,142141 3 0067
+8 535936,675749,0,142141 2 0070
+9 535936,675749,0,142141 2 0071
+: 321562,451470,0,61022 0 0072
+; 321562,451470,203890,61022 1 0073
+r! 321562,524288,203890,79227 3 0074
+= 803904,384696,-139592,69378 0 0075
+r? 535936,524288,203890 3 0076
+? 535936,728178,0,128451 2 0077
+at 803904,728178,0,100634 2 0100
+@ "
+A 779437,716526 2 0101
+B 738077,716526,0,107552,0,53776 2 0102
+C 750310,716526,0,152334,-80538,76168 2 0103
+D 791670,716526,0,98595,0,71798 2 0104
+E 711280,716526,0,126120,0,63061 2 0105
+F 684483,716526,0,139518,0,5534 2 0106
+G 811186,716526,0,91459,-80538,91459 2 0107
+H 779437,716526,0,171851,0,85926 2 0110
+I 404282,716526,0,165733,0,82867 2 0111
+J 550499,716526,0,147093,0,46750 2 0112
+K 806234,716526,0,152334,0,76168 2 0113
+L 657686,716526,0,0,0,53594 2 0114
+M 940218,716526,0,171851,0,59130 2 0115
+N 779437,716526,0,171851,0,59130 2 0116
+O 803904,716526,0,98595,-80538,71798 2 0117
+P 711280,716526,0,107552,0,-26432 2 0120
+Q 803904,716526,203890,98595,-80538,98595 3 0121
+R 764874,716526,0,40560,0,30421 2 0122
+S 589530,716526,0,125538,0,62770 2 0123
+T 750310,716526,0,139518,-134349,5534 2 0124
+U 779437,716526,0,171851,-121898,59130 2 0125
+V 779437,716526,0,192530,-138936,-21845 2 0126
+W 1047405,716526,0,192530,-138936,58546 2 0127
+X 779437,716526,0,165733,0,82867 2 0130
+Y 779437,716526,0,203248,-152334,-11126 2 0131
+Z 643123,716526,0,152334,0,76168 2 0132
+lB 321562,786432,262144,196608 3 0133
+[ "
+lq 539432,728178,0,176685 2 0134
+rB 321562,786432,262144,110392 3 0135
+] "
+ha 535936,728178,0,69688 2 0136
+^ "
+a^ "
+a. 321562,700301,0,123230 2 0137
+oq 321562,728178,0,130200 2 0140
+` "
+a 535936,451470,0,80440,-46677,80440 0 0141
+b 482342,728178,0,66190,-46677,66190 2 0142
+c 482342,451470,0,59274,-46677,59274 0 0143
+d 535936,728178,0,108354,-46677,108354 2 0144
+e 482342,451470,0,78789,-46677,78789 0 0145
+Fn 321562,728178,203890,222240,104566,112867 3 0146
+f "
+g 482342,451470,203890,92770,-21045,55147 1 0147
+h 535936,728178,0,80440,0,80440 2 0150
+i 321562,687194,0,106846,-32427,106846 2 0151
+j 321562,687194,203890,151701,50973,92770 3 0152
+k 482342,728178,0,112867,0,80440 2 0153
+l 267968,728178,0,108354,-26797,107237 2 0154
+m 857498,451470,0,80440,-32427,80440 0 0155
+n 589530,451470,0,80440,-32427,80440 0 0156
+o 535936,451470,0,66190,-46677,66190 0 0157
+p 535936,451470,203890,66190,-22718,66190 1 0160
+q 482342,451470,203890,92770,-46677,55147 1 0161
+r 442147,451470,0,112867,-32427,86070 0 0162
+s 428749,451470,0,86070,0,86070 0 0163
+t 348358,644958,0,99469,-45875,99469 2 0164
+u 562733,451470,0,80440,-32427,80440 0 0165
+v 482342,451470,0,112867,-32427,75245 0 0166
+w 696717,451470,0,112867,-32427,84651 0 0167
+x 486421,451470,0,126266,0,126266 0 0170
+y 509139,451470,203890,92770,-32427,55147 1 0171
+z 428749,451470,0,128888,0,80440 0 0172
+en 535936,451470,0,96552 0 0173
+em 1071872,451470,0,96552 0 0174
+a" 535936,728178,0,128451 2 0175
+~ 535936,700301,0,121482 2 0176
+a~ "
+ad 535936,700301,0,109832 2 0177
diff --git a/contrib/groff/font/devdvi/TIEC b/contrib/groff/font/devdvi/TIEC
new file mode 100644
index 0000000..a21473c
--- /dev/null
+++ b/contrib/groff/font/devdvi/TIEC
@@ -0,0 +1,1768 @@
+name TIEC
+internalname ecti1000
+spacewidth 375066
+slant 14.036243
+ligatures ff fi fl ffi ffl 0
+checksum -1119301501
+designsize 10485760
+kernpairs
+bq Bq 107162
+bq v -80371
+bq w -80371
+bq T -80371
+bq V -107162
+bq W -107162
+bq Y -80371
+bq :Y -80371
+bq 'Y -80371
+bq O -26790
+bq `O -26790
+bq 'O -26790
+bq ^O -26790
+bq ~O -26790
+bq :O -26790
+bq OE -26790
+bq /O -26790
+bq C -26790
+bq G -26790
+bq 'C -26790
+bq ,C -26790
+bq Q -26790
+lq oq 107162
+lq ` 107162
+lq lq 107162
+rq cq 107162
+rq ' 107162
+rq rq 107162
+Bq bq 107162
+Bq , 107162
+Bq Bq 107162
+Bq v -80371
+Bq w -80371
+Bq T -80371
+Bq V -107162
+Bq W -107162
+Bq Y -80371
+Bq :Y -80371
+Bq 'Y -80371
+Bq O -26790
+Bq `O -26790
+Bq 'O -26790
+Bq ^O -26790
+Bq ~O -26790
+Bq :O -26790
+Bq OE -26790
+Bq /O -26790
+Bq C -26790
+Bq G -26790
+Bq 'C -26790
+Bq ,C -26790
+Bq Q -26790
+Fc . -80371
+Fc , -80371
+ff cq 109346
+ff ' 109346
+ff oq 109346
+ff ` 109346
+ff lq 109346
+ff rq 109346
+ff ? 109346
+ff ! 109346
+ff ) 109346
+ff rB 109346
+ff ] 109346
+cq rq 107162
+' rq 107162
+cq ? 107162
+' ? 107162
+cq ! 107162
+' ! 107162
+A y -26790
+A :y -26790
+A 'y -26790
+A n -26790
+A ~n -26790
+A l -26790
+A r -26790
+A u -26790
+A `u -26790
+A 'u -26790
+A ^u -26790
+A :u -26790
+A m -26790
+A t -26790
+A i -26790
+A 'i -26790
+A h -26790
+A b -26790
+A k -26790
+A v -26790
+A w -26790
+A C -26790
+A G -26790
+A 'C -26790
+A ,C -26790
+A Q -26790
+A O -26790
+A `O -26790
+A 'O -26790
+A ^O -26790
+A ~O -26790
+A :O -26790
+A OE -26790
+A /O -26790
+A U -26790
+A `U -26790
+A 'U -26790
+A ^U -26790
+A :U -26790
+A T -80371
+A Y -80371
+A :Y -80371
+A 'Y -80371
+A V -107162
+A W -107162
+A e -53581
+A `e -53581
+A 'e -53581
+A ^e -53581
+A :e -53581
+A a -53581
+A `a -53581
+A 'a -53581
+A ^a -53581
+A ^a -53581
+A ~a -53581
+A :a -53581
+A oa -53581
+A ae -53581
+A o -53581
+A `o -53581
+A 'o -53581
+A ^o -53581
+A ~o -53581
+A :o -53581
+A oe -53581
+A /o -53581
+A d -53581
+A c -53581
+A 'c -53581
+A ,c -53581
+A g -53581
+A q -53581
+D X -26790
+D W -26790
+D A -26790
+D `A -26790
+D 'A -26790
+D ^A -26790
+D ~A -26790
+D :A -26790
+D oA -26790
+D AE -26790
+D V -26790
+D Y -26790
+D :Y -26790
+D 'Y -26790
+F o -80371
+F e -80371
+F u -80371
+F r -80371
+F n -80371
+F v -80371
+F a -80371
+F A -107162
+F `A -107162
+F 'A -107162
+F ^A -107162
+F ~A -107162
+F :A -107162
+F oA -107162
+F AE -107162
+F O -26790
+F `O -26790
+F 'O -26790
+F ^O -26790
+F ~O -26790
+F :O -26790
+F OE -26790
+F /O -26790
+F C -26790
+F G -26790
+F 'C -26790
+F ,C -26790
+F Q -26790
+K v -26790
+K w -26790
+K O -26790
+K `O -26790
+K 'O -26790
+K ^O -26790
+K ~O -26790
+K :O -26790
+K OE -26790
+K /O -26790
+K C -26790
+K G -26790
+K 'C -26790
+K ,C -26790
+K Q -26790
+L T -80371
+L Y -80371
+L :Y -80371
+L 'Y -80371
+L V -107162
+L W -107162
+L e -53581
+L `e -53581
+L 'e -53581
+L ^e -53581
+L :e -53581
+L a -53581
+L `a -53581
+L 'a -53581
+L ^a -53581
+L ^a -53581
+L ~a -53581
+L :a -53581
+L oa -53581
+L ae -53581
+L o -53581
+L `o -53581
+L 'o -53581
+L ^o -53581
+L ~o -53581
+L :o -53581
+L oe -53581
+L /o -53581
+L d -53581
+L c -53581
+L 'c -53581
+L ,c -53581
+L g -53581
+L q -53581
+O X -26790
+O W -26790
+O A -26790
+O `A -26790
+O 'A -26790
+O ^A -26790
+O ~A -26790
+O :A -26790
+O oA -26790
+O AE -26790
+O V -26790
+O Y -26790
+O :Y -26790
+O 'Y -26790
+P A -80371
+P `A -80371
+P 'A -80371
+P ^A -80371
+P ~A -80371
+P :A -80371
+P oA -80371
+P AE -80371
+R n -26790
+R ~n -26790
+R l -26790
+R r -26790
+R u -26790
+R `u -26790
+R 'u -26790
+R ^u -26790
+R :u -26790
+R m -26790
+R t -26790
+R i -26790
+R 'i -26790
+R h -26790
+R b -26790
+R k -26790
+R v -26790
+R w -26790
+R C -26790
+R G -26790
+R 'C -26790
+R ,C -26790
+R Q -26790
+R O -26790
+R `O -26790
+R 'O -26790
+R ^O -26790
+R ~O -26790
+R :O -26790
+R OE -26790
+R /O -26790
+R U -26790
+R `U -26790
+R 'U -26790
+R ^U -26790
+R :U -26790
+R T -80371
+R Y -80371
+R :Y -80371
+R 'Y -80371
+R V -107162
+R W -107162
+R e -53581
+R `e -53581
+R 'e -53581
+R ^e -53581
+R :e -53581
+R a -53581
+R `a -53581
+R 'a -53581
+R ^a -53581
+R ^a -53581
+R ~a -53581
+R :a -53581
+R oa -53581
+R ae -53581
+R o -53581
+R `o -53581
+R 'o -53581
+R ^o -53581
+R ~o -53581
+R :o -53581
+R oe -53581
+R /o -53581
+R d -53581
+R c -53581
+R 'c -53581
+R ,c -53581
+R g -53581
+R q -53581
+T y -80371
+T e -80371
+T o -80371
+T r -80371
+T a -80371
+T u -80371
+T A -80371
+T `A -80371
+T 'A -80371
+T ^A -80371
+T ~A -80371
+T :A -80371
+T oA -80371
+T AE -80371
+V o -80371
+V e -80371
+V u -80371
+V r -80371
+V n -80371
+V v -80371
+V a -80371
+V A -107162
+V `A -107162
+V 'A -107162
+V ^A -107162
+V ~A -107162
+V :A -107162
+V oA -107162
+V AE -107162
+V O -26790
+V `O -26790
+V 'O -26790
+V ^O -26790
+V ~O -26790
+V :O -26790
+V OE -26790
+V /O -26790
+V C -26790
+V G -26790
+V 'C -26790
+V ,C -26790
+V Q -26790
+W o -80371
+W e -80371
+W u -80371
+W r -80371
+W n -80371
+W v -80371
+W a -80371
+W A -107162
+W `A -107162
+W 'A -107162
+W ^A -107162
+W ~A -107162
+W :A -107162
+W oA -107162
+W AE -107162
+W O -26790
+W `O -26790
+W 'O -26790
+W ^O -26790
+W ~O -26790
+W :O -26790
+W OE -26790
+W /O -26790
+W C -26790
+W G -26790
+W 'C -26790
+W ,C -26790
+W Q -26790
+X O -26790
+X `O -26790
+X 'O -26790
+X ^O -26790
+X ~O -26790
+X :O -26790
+X OE -26790
+X /O -26790
+X C -26790
+X G -26790
+X 'C -26790
+X ,C -26790
+X Q -26790
+Y e -80371
+Y o -80371
+Y r -80371
+Y a -80371
+Y u -80371
+Y A -80371
+Y `A -80371
+Y 'A -80371
+Y ^A -80371
+Y ~A -80371
+Y :A -80371
+Y oA -80371
+Y AE -80371
+oq lq 107162
+` lq 107162
+oq ? 107162
+` ? 107162
+oq ! 107162
+` ! 107162
+b e -53581
+b `e -53581
+b 'e -53581
+b ^e -53581
+b :e -53581
+b a -53581
+b `a -53581
+b 'a -53581
+b ^a -53581
+b ^a -53581
+b ~a -53581
+b :a -53581
+b oa -53581
+b ae -53581
+b o -53581
+b `o -53581
+b 'o -53581
+b ^o -53581
+b ~o -53581
+b :o -53581
+b oe -53581
+b /o -53581
+b d -53581
+b c -53581
+b 'c -53581
+b ,c -53581
+b g -53581
+b q -53581
+c e -53581
+c `e -53581
+c 'e -53581
+c ^e -53581
+c :e -53581
+c a -53581
+c `a -53581
+c 'a -53581
+c ^a -53581
+c ^a -53581
+c ~a -53581
+c :a -53581
+c oa -53581
+c ae -53581
+c o -53581
+c `o -53581
+c 'o -53581
+c ^o -53581
+c ~o -53581
+c :o -53581
+c oe -53581
+c /o -53581
+c d -53581
+c c -53581
+c 'c -53581
+c ,c -53581
+c g -53581
+c q -53581
+d l 53581
+e e -53581
+e `e -53581
+e 'e -53581
+e ^e -53581
+e :e -53581
+e a -53581
+e `a -53581
+e 'a -53581
+e ^a -53581
+e ^a -53581
+e ~a -53581
+e :a -53581
+e oa -53581
+e ae -53581
+e o -53581
+e `o -53581
+e 'o -53581
+e ^o -53581
+e ~o -53581
+e :o -53581
+e oe -53581
+e /o -53581
+e d -53581
+e c -53581
+e 'c -53581
+e ,c -53581
+e g -53581
+e q -53581
+f cq 109346
+f ' 109346
+f oq 109346
+f ` 109346
+f lq 109346
+f rq 109346
+f ? 109346
+f ! 109346
+f ) 109346
+f rB 109346
+f ] 109346
+l l 53581
+n cq -107162
+n ' -107162
+o e -53581
+o `e -53581
+o 'e -53581
+o ^e -53581
+o :e -53581
+o a -53581
+o `a -53581
+o 'a -53581
+o ^a -53581
+o ^a -53581
+o ~a -53581
+o :a -53581
+o oa -53581
+o ae -53581
+o o -53581
+o `o -53581
+o 'o -53581
+o ^o -53581
+o ~o -53581
+o :o -53581
+o oe -53581
+o /o -53581
+o d -53581
+o c -53581
+o 'c -53581
+o ,c -53581
+o g -53581
+o q -53581
+p e -53581
+p `e -53581
+p 'e -53581
+p ^e -53581
+p :e -53581
+p a -53581
+p `a -53581
+p 'a -53581
+p ^a -53581
+p ^a -53581
+p ~a -53581
+p :a -53581
+p oa -53581
+p ae -53581
+p o -53581
+p `o -53581
+p 'o -53581
+p ^o -53581
+p ~o -53581
+p :o -53581
+p oe -53581
+p /o -53581
+p d -53581
+p c -53581
+p 'c -53581
+p ,c -53581
+p g -53581
+p q -53581
+r e -53581
+r `e -53581
+r 'e -53581
+r ^e -53581
+r :e -53581
+r a -53581
+r `a -53581
+r 'a -53581
+r ^a -53581
+r ^a -53581
+r ~a -53581
+r :a -53581
+r oa -53581
+r ae -53581
+r o -53581
+r `o -53581
+r 'o -53581
+r ^o -53581
+r ~o -53581
+r :o -53581
+r oe -53581
+r /o -53581
+r d -53581
+r c -53581
+r 'c -53581
+r ,c -53581
+r g -53581
+r q -53581
+w l 53581
+:Y e -80371
+:Y o -80371
+:Y r -80371
+:Y a -80371
+:Y u -80371
+:Y A -80371
+:Y `A -80371
+:Y 'A -80371
+:Y ^A -80371
+:Y ~A -80371
+:Y :A -80371
+:Y oA -80371
+:Y AE -80371
+'c e -53581
+'c `e -53581
+'c 'e -53581
+'c ^e -53581
+'c :e -53581
+'c a -53581
+'c `a -53581
+'c 'a -53581
+'c ^a -53581
+'c ^a -53581
+'c ~a -53581
+'c :a -53581
+'c oa -53581
+'c ae -53581
+'c o -53581
+'c `o -53581
+'c 'o -53581
+'c ^o -53581
+'c ~o -53581
+'c :o -53581
+'c oe -53581
+'c /o -53581
+'c d -53581
+'c c -53581
+'c 'c -53581
+'c ,c -53581
+'c g -53581
+'c q -53581
+/l cq 26790
+/l ' 26790
+`A y -26790
+`A :y -26790
+`A 'y -26790
+`A n -26790
+`A ~n -26790
+`A l -26790
+`A r -26790
+`A u -26790
+`A `u -26790
+`A 'u -26790
+`A ^u -26790
+`A :u -26790
+`A m -26790
+`A t -26790
+`A i -26790
+`A 'i -26790
+`A h -26790
+`A b -26790
+`A k -26790
+`A v -26790
+`A w -26790
+`A C -26790
+`A G -26790
+`A 'C -26790
+`A ,C -26790
+`A Q -26790
+`A O -26790
+`A `O -26790
+`A 'O -26790
+`A ^O -26790
+`A ~O -26790
+`A :O -26790
+`A OE -26790
+`A /O -26790
+`A U -26790
+`A `U -26790
+`A 'U -26790
+`A ^U -26790
+`A :U -26790
+`A T -80371
+`A Y -80371
+`A :Y -80371
+`A 'Y -80371
+`A V -107162
+`A W -107162
+`A e -53581
+`A `e -53581
+`A 'e -53581
+`A ^e -53581
+`A :e -53581
+`A a -53581
+`A `a -53581
+`A 'a -53581
+`A ^a -53581
+`A ^a -53581
+`A ~a -53581
+`A :a -53581
+`A oa -53581
+`A ae -53581
+`A o -53581
+`A `o -53581
+`A 'o -53581
+`A ^o -53581
+`A ~o -53581
+`A :o -53581
+`A oe -53581
+`A /o -53581
+`A d -53581
+`A c -53581
+`A 'c -53581
+`A ,c -53581
+`A g -53581
+`A q -53581
+'A y -26790
+'A :y -26790
+'A 'y -26790
+'A n -26790
+'A ~n -26790
+'A l -26790
+'A r -26790
+'A u -26790
+'A `u -26790
+'A 'u -26790
+'A ^u -26790
+'A :u -26790
+'A m -26790
+'A t -26790
+'A i -26790
+'A 'i -26790
+'A h -26790
+'A b -26790
+'A k -26790
+'A v -26790
+'A w -26790
+'A C -26790
+'A G -26790
+'A 'C -26790
+'A ,C -26790
+'A Q -26790
+'A O -26790
+'A `O -26790
+'A 'O -26790
+'A ^O -26790
+'A ~O -26790
+'A :O -26790
+'A OE -26790
+'A /O -26790
+'A U -26790
+'A `U -26790
+'A 'U -26790
+'A ^U -26790
+'A :U -26790
+'A T -80371
+'A Y -80371
+'A :Y -80371
+'A 'Y -80371
+'A V -107162
+'A W -107162
+'A e -53581
+'A `e -53581
+'A 'e -53581
+'A ^e -53581
+'A :e -53581
+'A a -53581
+'A `a -53581
+'A 'a -53581
+'A ^a -53581
+'A ^a -53581
+'A ~a -53581
+'A :a -53581
+'A oa -53581
+'A ae -53581
+'A o -53581
+'A `o -53581
+'A 'o -53581
+'A ^o -53581
+'A ~o -53581
+'A :o -53581
+'A oe -53581
+'A /o -53581
+'A d -53581
+'A c -53581
+'A 'c -53581
+'A ,c -53581
+'A g -53581
+'A q -53581
+^A y -26790
+^A :y -26790
+^A 'y -26790
+^A n -26790
+^A ~n -26790
+^A l -26790
+^A r -26790
+^A u -26790
+^A `u -26790
+^A 'u -26790
+^A ^u -26790
+^A :u -26790
+^A m -26790
+^A t -26790
+^A i -26790
+^A 'i -26790
+^A h -26790
+^A b -26790
+^A k -26790
+^A v -26790
+^A w -26790
+^A C -26790
+^A G -26790
+^A 'C -26790
+^A ,C -26790
+^A Q -26790
+^A O -26790
+^A `O -26790
+^A 'O -26790
+^A ^O -26790
+^A ~O -26790
+^A :O -26790
+^A OE -26790
+^A /O -26790
+^A U -26790
+^A `U -26790
+^A 'U -26790
+^A ^U -26790
+^A :U -26790
+^A T -80371
+^A Y -80371
+^A :Y -80371
+^A 'Y -80371
+^A V -107162
+^A W -107162
+^A e -53581
+^A `e -53581
+^A 'e -53581
+^A ^e -53581
+^A :e -53581
+^A a -53581
+^A `a -53581
+^A 'a -53581
+^A ^a -53581
+^A ^a -53581
+^A ~a -53581
+^A :a -53581
+^A oa -53581
+^A ae -53581
+^A o -53581
+^A `o -53581
+^A 'o -53581
+^A ^o -53581
+^A ~o -53581
+^A :o -53581
+^A oe -53581
+^A /o -53581
+^A d -53581
+^A c -53581
+^A 'c -53581
+^A ,c -53581
+^A g -53581
+^A q -53581
+~A y -26790
+~A :y -26790
+~A 'y -26790
+~A n -26790
+~A ~n -26790
+~A l -26790
+~A r -26790
+~A u -26790
+~A `u -26790
+~A 'u -26790
+~A ^u -26790
+~A :u -26790
+~A m -26790
+~A t -26790
+~A i -26790
+~A 'i -26790
+~A h -26790
+~A b -26790
+~A k -26790
+~A v -26790
+~A w -26790
+~A C -26790
+~A G -26790
+~A 'C -26790
+~A ,C -26790
+~A Q -26790
+~A O -26790
+~A `O -26790
+~A 'O -26790
+~A ^O -26790
+~A ~O -26790
+~A :O -26790
+~A OE -26790
+~A /O -26790
+~A U -26790
+~A `U -26790
+~A 'U -26790
+~A ^U -26790
+~A :U -26790
+~A T -80371
+~A Y -80371
+~A :Y -80371
+~A 'Y -80371
+~A V -107162
+~A W -107162
+~A e -53581
+~A `e -53581
+~A 'e -53581
+~A ^e -53581
+~A :e -53581
+~A a -53581
+~A `a -53581
+~A 'a -53581
+~A ^a -53581
+~A ^a -53581
+~A ~a -53581
+~A :a -53581
+~A oa -53581
+~A ae -53581
+~A o -53581
+~A `o -53581
+~A 'o -53581
+~A ^o -53581
+~A ~o -53581
+~A :o -53581
+~A oe -53581
+~A /o -53581
+~A d -53581
+~A c -53581
+~A 'c -53581
+~A ,c -53581
+~A g -53581
+~A q -53581
+:A y -26790
+:A :y -26790
+:A 'y -26790
+:A n -26790
+:A ~n -26790
+:A l -26790
+:A r -26790
+:A u -26790
+:A `u -26790
+:A 'u -26790
+:A ^u -26790
+:A :u -26790
+:A m -26790
+:A t -26790
+:A i -26790
+:A 'i -26790
+:A h -26790
+:A b -26790
+:A k -26790
+:A v -26790
+:A w -26790
+:A C -26790
+:A G -26790
+:A 'C -26790
+:A ,C -26790
+:A Q -26790
+:A O -26790
+:A `O -26790
+:A 'O -26790
+:A ^O -26790
+:A ~O -26790
+:A :O -26790
+:A OE -26790
+:A /O -26790
+:A U -26790
+:A `U -26790
+:A 'U -26790
+:A ^U -26790
+:A :U -26790
+:A T -80371
+:A Y -80371
+:A :Y -80371
+:A 'Y -80371
+:A V -107162
+:A W -107162
+:A e -53581
+:A `e -53581
+:A 'e -53581
+:A ^e -53581
+:A :e -53581
+:A a -53581
+:A `a -53581
+:A 'a -53581
+:A ^a -53581
+:A ^a -53581
+:A ~a -53581
+:A :a -53581
+:A oa -53581
+:A ae -53581
+:A o -53581
+:A `o -53581
+:A 'o -53581
+:A ^o -53581
+:A ~o -53581
+:A :o -53581
+:A oe -53581
+:A /o -53581
+:A d -53581
+:A c -53581
+:A 'c -53581
+:A ,c -53581
+:A g -53581
+:A q -53581
+oA y -26790
+oA :y -26790
+oA 'y -26790
+oA n -26790
+oA ~n -26790
+oA l -26790
+oA r -26790
+oA u -26790
+oA `u -26790
+oA 'u -26790
+oA ^u -26790
+oA :u -26790
+oA m -26790
+oA t -26790
+oA i -26790
+oA 'i -26790
+oA h -26790
+oA b -26790
+oA k -26790
+oA v -26790
+oA w -26790
+oA C -26790
+oA G -26790
+oA 'C -26790
+oA ,C -26790
+oA Q -26790
+oA O -26790
+oA `O -26790
+oA 'O -26790
+oA ^O -26790
+oA ~O -26790
+oA :O -26790
+oA OE -26790
+oA /O -26790
+oA U -26790
+oA `U -26790
+oA 'U -26790
+oA ^U -26790
+oA :U -26790
+oA T -80371
+oA Y -80371
+oA :Y -80371
+oA 'Y -80371
+oA V -107162
+oA W -107162
+oA e -53581
+oA `e -53581
+oA 'e -53581
+oA ^e -53581
+oA :e -53581
+oA a -53581
+oA `a -53581
+oA 'a -53581
+oA ^a -53581
+oA ^a -53581
+oA ~a -53581
+oA :a -53581
+oA oa -53581
+oA ae -53581
+oA o -53581
+oA `o -53581
+oA 'o -53581
+oA ^o -53581
+oA ~o -53581
+oA :o -53581
+oA oe -53581
+oA /o -53581
+oA d -53581
+oA c -53581
+oA 'c -53581
+oA ,c -53581
+oA g -53581
+oA q -53581
+-D X -26790
+-D W -26790
+-D A -26790
+-D `A -26790
+-D 'A -26790
+-D ^A -26790
+-D ~A -26790
+-D :A -26790
+-D oA -26790
+-D AE -26790
+-D V -26790
+-D Y -26790
+-D :Y -26790
+-D 'Y -26790
+`O X -26790
+`O W -26790
+`O A -26790
+`O `A -26790
+`O 'A -26790
+`O ^A -26790
+`O ~A -26790
+`O :A -26790
+`O oA -26790
+`O AE -26790
+`O V -26790
+`O Y -26790
+`O :Y -26790
+`O 'Y -26790
+'O X -26790
+'O W -26790
+'O A -26790
+'O `A -26790
+'O 'A -26790
+'O ^A -26790
+'O ~A -26790
+'O :A -26790
+'O oA -26790
+'O AE -26790
+'O V -26790
+'O Y -26790
+'O :Y -26790
+'O 'Y -26790
+^O X -26790
+^O W -26790
+^O A -26790
+^O `A -26790
+^O 'A -26790
+^O ^A -26790
+^O ~A -26790
+^O :A -26790
+^O oA -26790
+^O AE -26790
+^O V -26790
+^O Y -26790
+^O :Y -26790
+^O 'Y -26790
+~O X -26790
+~O W -26790
+~O A -26790
+~O `A -26790
+~O 'A -26790
+~O ^A -26790
+~O ~A -26790
+~O :A -26790
+~O oA -26790
+~O AE -26790
+~O V -26790
+~O Y -26790
+~O :Y -26790
+~O 'Y -26790
+:O X -26790
+:O W -26790
+:O A -26790
+:O `A -26790
+:O 'A -26790
+:O ^A -26790
+:O ~A -26790
+:O :A -26790
+:O oA -26790
+:O AE -26790
+:O V -26790
+:O Y -26790
+:O :Y -26790
+:O 'Y -26790
+/O X -26790
+/O W -26790
+/O A -26790
+/O `A -26790
+/O 'A -26790
+/O ^A -26790
+/O ~A -26790
+/O :A -26790
+/O oA -26790
+/O AE -26790
+/O V -26790
+/O Y -26790
+/O :Y -26790
+/O 'Y -26790
+'Y e -80371
+'Y o -80371
+'Y r -80371
+'Y a -80371
+'Y u -80371
+'Y A -80371
+'Y `A -80371
+'Y 'A -80371
+'Y ^A -80371
+'Y ~A -80371
+'Y :A -80371
+'Y oA -80371
+'Y AE -80371
+`e e -53581
+`e `e -53581
+`e 'e -53581
+`e ^e -53581
+`e :e -53581
+`e a -53581
+`e `a -53581
+`e 'a -53581
+`e ^a -53581
+`e ^a -53581
+`e ~a -53581
+`e :a -53581
+`e oa -53581
+`e ae -53581
+`e o -53581
+`e `o -53581
+`e 'o -53581
+`e ^o -53581
+`e ~o -53581
+`e :o -53581
+`e oe -53581
+`e /o -53581
+`e d -53581
+`e c -53581
+`e 'c -53581
+`e ,c -53581
+`e g -53581
+`e q -53581
+'e e -53581
+'e `e -53581
+'e 'e -53581
+'e ^e -53581
+'e :e -53581
+'e a -53581
+'e `a -53581
+'e 'a -53581
+'e ^a -53581
+'e ^a -53581
+'e ~a -53581
+'e :a -53581
+'e oa -53581
+'e ae -53581
+'e o -53581
+'e `o -53581
+'e 'o -53581
+'e ^o -53581
+'e ~o -53581
+'e :o -53581
+'e oe -53581
+'e /o -53581
+'e d -53581
+'e c -53581
+'e 'c -53581
+'e ,c -53581
+'e g -53581
+'e q -53581
+^e e -53581
+^e `e -53581
+^e 'e -53581
+^e ^e -53581
+^e :e -53581
+^e a -53581
+^e `a -53581
+^e 'a -53581
+^e ^a -53581
+^e ^a -53581
+^e ~a -53581
+^e :a -53581
+^e oa -53581
+^e ae -53581
+^e o -53581
+^e `o -53581
+^e 'o -53581
+^e ^o -53581
+^e ~o -53581
+^e :o -53581
+^e oe -53581
+^e /o -53581
+^e d -53581
+^e c -53581
+^e 'c -53581
+^e ,c -53581
+^e g -53581
+^e q -53581
+:e e -53581
+:e `e -53581
+:e 'e -53581
+:e ^e -53581
+:e :e -53581
+:e a -53581
+:e `a -53581
+:e 'a -53581
+:e ^a -53581
+:e ^a -53581
+:e ~a -53581
+:e :a -53581
+:e oa -53581
+:e ae -53581
+:e o -53581
+:e `o -53581
+:e 'o -53581
+:e ^o -53581
+:e ~o -53581
+:e :o -53581
+:e oe -53581
+:e /o -53581
+:e d -53581
+:e c -53581
+:e 'c -53581
+:e ,c -53581
+:e g -53581
+:e q -53581
+`o e -53581
+`o `e -53581
+`o 'e -53581
+`o ^e -53581
+`o :e -53581
+`o a -53581
+`o `a -53581
+`o 'a -53581
+`o ^a -53581
+`o ^a -53581
+`o ~a -53581
+`o :a -53581
+`o oa -53581
+`o ae -53581
+`o o -53581
+`o `o -53581
+`o 'o -53581
+`o ^o -53581
+`o ~o -53581
+`o :o -53581
+`o oe -53581
+`o /o -53581
+`o d -53581
+`o c -53581
+`o 'c -53581
+`o ,c -53581
+`o g -53581
+`o q -53581
+'o e -53581
+'o `e -53581
+'o 'e -53581
+'o ^e -53581
+'o :e -53581
+'o a -53581
+'o `a -53581
+'o 'a -53581
+'o ^a -53581
+'o ^a -53581
+'o ~a -53581
+'o :a -53581
+'o oa -53581
+'o ae -53581
+'o o -53581
+'o `o -53581
+'o 'o -53581
+'o ^o -53581
+'o ~o -53581
+'o :o -53581
+'o oe -53581
+'o /o -53581
+'o d -53581
+'o c -53581
+'o 'c -53581
+'o ,c -53581
+'o g -53581
+'o q -53581
+^o e -53581
+^o `e -53581
+^o 'e -53581
+^o ^e -53581
+^o :e -53581
+^o a -53581
+^o `a -53581
+^o 'a -53581
+^o ^a -53581
+^o ^a -53581
+^o ~a -53581
+^o :a -53581
+^o oa -53581
+^o ae -53581
+^o o -53581
+^o `o -53581
+^o 'o -53581
+^o ^o -53581
+^o ~o -53581
+^o :o -53581
+^o oe -53581
+^o /o -53581
+^o d -53581
+^o c -53581
+^o 'c -53581
+^o ,c -53581
+^o g -53581
+^o q -53581
+~o e -53581
+~o `e -53581
+~o 'e -53581
+~o ^e -53581
+~o :e -53581
+~o a -53581
+~o `a -53581
+~o 'a -53581
+~o ^a -53581
+~o ^a -53581
+~o ~a -53581
+~o :a -53581
+~o oa -53581
+~o ae -53581
+~o o -53581
+~o `o -53581
+~o 'o -53581
+~o ^o -53581
+~o ~o -53581
+~o :o -53581
+~o oe -53581
+~o /o -53581
+~o d -53581
+~o c -53581
+~o 'c -53581
+~o ,c -53581
+~o g -53581
+~o q -53581
+:o e -53581
+:o `e -53581
+:o 'e -53581
+:o ^e -53581
+:o :e -53581
+:o a -53581
+:o `a -53581
+:o 'a -53581
+:o ^a -53581
+:o ^a -53581
+:o ~a -53581
+:o :a -53581
+:o oa -53581
+:o ae -53581
+:o o -53581
+:o `o -53581
+:o 'o -53581
+:o ^o -53581
+:o ~o -53581
+:o :o -53581
+:o oe -53581
+:o /o -53581
+:o d -53581
+:o c -53581
+:o 'c -53581
+:o ,c -53581
+:o g -53581
+:o q -53581
+Tp e -53581
+Tp `e -53581
+Tp 'e -53581
+Tp ^e -53581
+Tp :e -53581
+Tp a -53581
+Tp `a -53581
+Tp 'a -53581
+Tp ^a -53581
+Tp ^a -53581
+Tp ~a -53581
+Tp :a -53581
+Tp oa -53581
+Tp ae -53581
+Tp o -53581
+Tp `o -53581
+Tp 'o -53581
+Tp ^o -53581
+Tp ~o -53581
+Tp :o -53581
+Tp oe -53581
+Tp /o -53581
+Tp d -53581
+Tp c -53581
+Tp 'c -53581
+Tp ,c -53581
+Tp g -53581
+Tp q -53581
+charset
+ga 535808,672672 2 0000
+aa 535808,672672,0,87069 2 0001
+a^ 482227,672672 2 0002
+a~ 535808,672672,0,113859 2 0003
+ad 535808,693578,0,107522 2 0004
+a" 535808,672672,0,113859 2 0005
+ao 852051,672672 2 0006
+ah 482227,672672 2 0007
+ab 535808,672672,0,98717 2 0010
+a- 535808,693578,0,132560 2 0011
+a. 321485,693578,0,123198 2 0012
+ac 482227,0,178360 1 0013
+ho 321485,0,203840 1 0014
+bq 321485,110656,203840 1 0015
+fo 482227,506688,0,73032 2 0016
+fc 482227,506688,0,73032 2 0017
+lq 378560,722176,0,176642 2 0020
+rq 378560,722176,0,73032 2 0021
+Bq 378560,110656,203840,73032 1 0022
+Fo 589389,506688,0,73032 2 0023
+Fc 589389,506688 2 0024
+en 535808,451360,0,96458 0 0025
+em 1071616,451360,0,96458 0 0026
+--- 0,451360 0 0027
+--- 428646,786240,58240,142979 3 0030
+.i 321485,451360,0,80419 0 0031
+.j 348275,451360,203840,39166 1 0032
+ff 642970,722176,203840,222186 3 0033
+fi 589389,722176,203840,108326 3 0034
+fl 616179,722176,203840,108326 3 0035
+Fi 924269,722176,203840,108326 3 0036
+Fl 937664,722176,203840,108326 3 0037
+--- 535808,451360,101920,49941,0,24971 1 0040
+! 321485,722176,0,130166 2 0041
+dq 535808,722176,0,90272 2 0042
+" "
+sh 857293,722176,203840,69362 3 0043
+# "
+Do 535808,786240,58240,142106 3 0044
+$ "
+% 857293,786240,58240,142979 3 0045
+& 803712,722176,0,101629 2 0046
+cq 321485,722176,0,130166 2 0047
+' "
+( 428646,786240,262080,169770 3 0050
+) 428646,786240,262080,38730 3 0051
+* 535808,786240,0,156374 2 0052
+pl 803712,583565,59405,38730 3 0053
++ "
+, 321485,110656,203840 1 0054
+- 375066,451360,0,29630 0 0055
+. 321485,110656 0 0056
+sl 535808,786240,262080,169770 3 0057
+/ "
+0 535808,672672,0,142106 2 0060
+1 535808,672672,0,142106 2 0061
+2 535808,672672,0,142106 2 0062
+3 535808,672672,0,142106 2 0063
+4 535808,672672,203840,142106 3 0064
+5 535808,672672,0,142106 2 0065
+6 535808,672672,0,142106 2 0066
+7 535808,672672,0,142106 2 0067
+8 535808,672672,0,142106 2 0070
+9 535808,672672,0,142106 2 0071
+: 321485,451360,0,61006 0 0072
+; 321485,451360,203840,61006 1 0073
+< 803712,559216,40992,87707 3 0074
+eq 803712,384606,-139554,69362 0 0075
+= "
+> 803712,559216,40992,11939 3 0076
+? 535808,722176,0,128419 2 0077
+at 803712,722176,0,100610 2 0100
+@ "
+A 779251,722176 2 0101
+B 737901,722176,0,107522,0,53763 2 0102
+C 750131,722176,0,152298,-80517,76149 2 0103
+D 791482,722176,0,98571,0,71781 2 0104
+E 711110,722176,0,126090,0,63045 2 0105
+F 684320,722176,0,139485,0,5533 2 0106
+G 810992,722176,0,91437,-80517,91437 2 0107
+H 779251,722176,0,171808,0,85904 2 0110
+I 404186,722176,0,165693,0,82846 2 0111
+J 550368,722176,0,147056,0,46738 2 0112
+K 806042,722176,0,152298,0,76149 2 0113
+L 657530,722176,0,0,0,53581 2 0114
+M 939994,722176,0,171808,0,59114 2 0115
+N 779251,722176,0,171808,0,59114 2 0116
+O 803712,722176,0,98571,-80517,71781 2 0117
+P 711110,722176,0,107522,0,-26426 2 0120
+Q 803712,722176,203840,98571,-80517,98571 3 0121
+R 764691,722176,0,40550,0,30413 2 0122
+S 589389,722176,0,125507,0,62754 2 0123
+T 750131,722176,0,139485,-134317,5533 2 0124
+U 779251,722176,0,171808,-121867,59114 2 0125
+V 779251,722176,0,192483,-138902,-21840 2 0126
+W 1047155,722176,0,192483,-138902,58531 2 0127
+X 779251,722176,0,165693,0,82846 2 0130
+Y 779251,722176,0,203198,-152298,-11125 2 0131
+Z 642970,722176,0,152298,0,76149 2 0132
+lB 321485,786240,262080,196560 3 0133
+[ "
+rs 535808,786240,262080 3 0134
+\ "
+rB 321485,786240,262080,110370 3 0135
+] "
+ha 642970,722176,0,69670 2 0136
+^ "
+_ 803712,0,244102 1 0137
+oq 321485,722176,0,130166 2 0140
+` "
+a 535808,451360,0,80419,-46666,80419 0 0141
+b 482227,722176,0,66174,-46666,66174 2 0142
+c 482227,451360,0,59259,-46666,59259 0 0143
+d 535808,722176,0,108326,-46666,108326 2 0144
+e 482227,451360,0,78770,-46666,78770 0 0145
+f 321485,722176,203840,222186,104541,112840 3 0146
+g 482227,451360,203840,92747,-21040,55134 1 0147
+h 535808,722176,0,80419,0,80419 2 0150
+i 321485,693578,0,106819,-32421,106819 2 0151
+j 321485,693578,203840,151664,50960,92747 3 0152
+k 482227,722176,0,112840,0,80419 2 0153
+l 267904,722176,0,108326,-26790,107210 2 0154
+m 857293,451360,0,80419,-32421,80419 0 0155
+n 589389,451360,0,80419,-32421,80419 0 0156
+o 535808,451360,0,66174,-46666,66174 0 0157
+p 535808,451360,203840,66174,-22714,66174 1 0160
+q 482227,451360,203840,92747,-46666,55134 1 0161
+r 442042,451360,0,112840,-32421,86050 0 0162
+s 428646,451360,0,86050,0,86050 0 0163
+t 348275,644802,0,99445,-45864,99445 2 0164
+u 562598,451360,0,80419,-32421,80419 0 0165
+v 482227,451360,0,112840,-32421,75227 0 0166
+w 696550,451360,0,112840,-32421,84630 0 0167
+x 486304,451360,0,126235,0,126235 0 0170
+y 509018,451360,203840,92747,-32421,55134 1 0171
+z 428646,451360,0,128856,0,80419 0 0172
+lC 535808,786240,262080,154627 3 0173
+{ "
+ba 321485,786240,262080,110370 3 0174
+bv "
+or "
+| "
+rC 535808,786240,262080,23587 3 0175
+} "
+~ 642970,693578,0,121451 2 0176
+hy 214323,451360,0,29630 0 0177
+--- 779251,934752 2 0200
+--- 779251,722176,203840 3 0201
+'C 750131,896954,0,152298 2 0202
+--- 750131,934752,0,152298,-80517,76149 2 0203
+--- 791482,934752,0,98571,0,71781 2 0204
+--- 711110,934752,0,126090,0,63045 2 0205
+--- 711110,722176,203840,126090 3 0206
+--- 810992,934752,0,91437,-80517,91437 2 0207
+--- 657530,896954,0,0,0,53581 2 0210
+--- 657530,934752,0,0,0,53581 2 0211
+/L 657530,722176 2 0212
+--- 779251,896954,0,171808 2 0213
+--- 779251,934752,0,171808,0,59114 2 0214
+--- 818272,722176,0,179088,0,62754 2 0215
+--- 803712,896954,0,98571,-80517,71781 2 0216
+--- 764691,896954,0,40550,0,30413 2 0217
+--- 764691,934752,0,40550,0,30413 2 0220
+--- 589389,896954,0,125507 2 0221
+vS 589389,934752,0,125507,0,62754 2 0222
+--- 589389,722176,178360,125507,0,62754 3 0223
+--- 750131,934752,0,139485,-134317,5533 2 0224
+--- 750131,722176,178360,139485,-134317,5533 3 0225
+--- 779251,896954,0,171808,-121867,59114 2 0226
+--- 779251,934752,0,171808,-121867,59114 2 0227
+:Y 779251,934752,0,203198,-152298,-11125 2 0230
+--- 642970,896954,0,152298 2 0231
+vZ 642970,934752,0,152298,0,76149 2 0232
+--- 642970,896954,0,152298 2 0233
+IJ 886413,722176,0,147056,0,46738 2 0234
+--- 404186,896954,0,165693,0,82846 2 0235
+--- 535808,722176,0,108326,-46666,108326 2 0236
+sc 482227,722176,203840 3 0237
+--- 535808,672672,0,80419,-46666,80419 2 0240
+--- 535808,451360,203840,80419 1 0241
+'c 482227,672672,0,59259 2 0242
+--- 482227,672672,0,59259,-46666,59259 2 0243
+--- 535808,722176,0,108326,-46666,108326 2 0244
+--- 482227,672672,0,78770,-46666,78770 2 0245
+--- 482227,451360,203840,78770 1 0246
+--- 482227,672672,203840,92747,-21040,55134 3 0247
+--- 267904,896954,0,108326,-26790,107210 2 0250
+--- 267904,722176,0,108326,-26790,107210 2 0251
+/l 334880,722176,0,108326 2 0252
+--- 589389,672672,0,80419 2 0253
+--- 589389,672672,0,80419,-32421,80419 2 0254
+--- 589389,451360,203840,80419,-32421,80419 1 0255
+--- 535808,672672,0,66174,-46666,66174 2 0256
+--- 442042,672672,0,112840,-32421,86050 2 0257
+--- 442042,672672,0,112840,-32421,86050 2 0260
+--- 428646,672672,0,86050 2 0261
+vs 428646,672672,0,140650,0,140650 2 0262
+--- 428646,451360,178360,86050,0,86050 1 0263
+--- 348275,722176,0,99445,-45864,99445 2 0264
+--- 348275,644802,178360,99445,-45864,99445 3 0265
+--- 562598,672672,0,210246,-32421,210246 2 0266
+--- 562598,672672,0,80419,-32421,80419 2 0267
+:y 509018,672672,203840,92747,-32421,55134 3 0270
+--- 428646,672672,0,128856,0,80419 2 0271
+vz 428646,672672,0,128856,0,80419 2 0272
+--- 428646,693578,0,128856,0,80419 2 0273
+ij 589389,693578,203840,106819,50960,92747 3 0274
+r! 321485,524160,203840,79206 3 0275
+r? 535808,524160,203840 3 0276
+Po 806261,722176 2 0277
+`A 779251,896954 2 0300
+'A 779251,896954 2 0301
+^A 779251,934752 2 0302
+~A 779251,934752 2 0303
+:A 779251,934752 2 0304
+oA 779251,896954 2 0305
+AE 925434,722176,0,126090 2 0306
+,C 750131,722176,178360,152298,-80517,76149 3 0307
+`E 711110,896954,0,126090,0,63045 2 0310
+'E 711110,896954,0,126090,0,63045 2 0311
+^E 711110,934752,0,126090,0,63045 2 0312
+:E 711110,934752,0,126090 2 0313
+`I 404186,896954,0,165693,0,82846 2 0314
+'I 404186,896954,0,165693,0,82846 2 0315
+^I 404186,934752,0,165693,0,82846 2 0316
+:I 404186,934752,0,165693,0,82846 2 0317
+-D 791482,722176,0,98571,0,71781 2 0320
+~N 779251,934752,0,171808,0,59114 2 0321
+`O 803712,896954,0,98571,-80517,71781 2 0322
+'O 803712,896954,0,98571 2 0323
+^O 803712,934752,0,98571,-80517,71781 2 0324
+~O 803712,934752,0,98571,-80517,71781 2 0325
+:O 803712,934752,0,98571,-80517,71781 2 0326
+OE 1032595,722176,0,126090 2 0327
+/O 803712,767312,50960,98571 3 0330
+`U 779251,896954,0,171808,-121867,59114 2 0331
+'U 779251,896954,0,171808 2 0332
+^U 779251,934752,0,171808,-121867,59114 2 0333
+:U 779251,934752,0,171808,-121867,59114 2 0334
+'Y 779251,896954,0,203198,-152298,-11125 2 0335
+TP 657530,722176,0,107522,0,53763 2 0336
+--- 1125197,722176,0,125507,0,62754 2 0337
+`a 535808,672672,0,80419,-46666,80419 2 0340
+'a 535808,672672,0,80419,-46666,80419 2 0341
+^a 535808,672672,0,80419,-46666,80419 2 0342
+~a 535808,672672,0,80419,-46666,80419 2 0343
+:a 535808,672672,0,80419,-46666,80419 2 0344
+oa 535808,672672,0,80419,-46666,80419 2 0345
+ae 750131,451360,0,78770 0 0346
+,c 482227,451360,178360,59259,-46666,59259 1 0347
+`e 482227,672672,0,78770,-46666,78770 2 0350
+'e 482227,672672,0,78770,-46666,78770 2 0351
+^e 482227,672672,0,78770,-46666,78770 2 0352
+:e 482227,672672,0,78770,-46666,78770 2 0353
+`i 321485,672672,0,80419 2 0354
+'i 321485,672672,0,80419 2 0355
+^i 321485,672672,0,80419 2 0356
+:i 321485,672672,0,80419 2 0357
+Sd 535808,722176,0,112840 2 0360
+~n 589389,672672,0,80419,-32421,80419 2 0361
+`o 535808,672672,0,66174,-46666,66174 2 0362
+'o 535808,672672,0,66174,-46666,66174 2 0363
+^o 535808,672672,0,66174,-46666,66174 2 0364
+~o 535808,672672,0,66174,-46666,66174 2 0365
+:o 535808,672672,0,66174,-46666,66174 2 0366
+oe 750131,451360,0,78770 0 0367
+/o 535808,559216,101920,96458 3 0370
+`u 562598,672672,0,80419,-32421,80419 2 0371
+'u 562598,672672,0,80419,-32421,80419 2 0372
+^u 562598,672672,0,80419,-32421,80419 2 0373
+:u 562598,672672,0,80419,-32421,80419 2 0374
+'y 509018,672672,203840,92747,-32421,55134 3 0375
+Tp 535808,722176,203840,66174 3 0376
+ss 562598,722176,203840,110218 3 0377
diff --git a/contrib/groff/font/devdvi/TITC b/contrib/groff/font/devdvi/TITC
new file mode 100644
index 0000000..451985c
--- /dev/null
+++ b/contrib/groff/font/devdvi/TITC
@@ -0,0 +1,139 @@
+name TITC
+special
+internalname tcti1000
+spacewidth 375066
+slant 14.036243
+checksum 427649518
+designsize 10485760
+charset
+--- 535808,634477 2 0000
+--- 535808,634477,0,79074 2 0001
+--- 535808,672672,0,62390 2 0002
+--- 535808,672672,0,113859 2 0003
+--- 535808,672672 2 0004
+--- 535808,634477,0,105864 2 0005
+--- 779251,672672 2 0006
+--- 535808,672672 2 0007
+--- 535808,672672,0,98717 2 0010
+--- 535808,672672,0,127254 2 0011
+--- 321485,634477 2 0012
+--- 482227,0,178360 1 0013
+--- 321485,0,203840 1 0014
+--- 428646,110656,203840 1 0015
+--- 535808,110656,203840 1 0022
+--- 750131,450486,0,96528 0 0025
+--- 830502,450486,0,96528 0 0026
+--- 0,716352 2 0027
+<- 1018035,384606,-139554 0 0030
+-> 1018035,384606,-139554 0 0031
+--- 321485,728000,0,454288 2 0032
+--- 375066,992992,0,510522 2 0033
+--- 535808,728000,0,454288 2 0034
+--- 535808,728000,0,510522 2 0035
+--- 0,728000 2 0037
+--- 482227,728000,0,66174,-46666,66174 2 0040
+Do 535808,786240,58240,142106 3 0044
+$ "
+aq 321485,728000,0,117062 2 0047
+** 535808,487760,-36400 2 0052
+, 321485,110656,203840 1 0054
+--- 375066,384606,-139554,69362 0 0055
+. 321485,110656 0 0056
+f/ 535808,786240,262080,169770 3 0057
+0 535808,450486,0,68272 0 0060
+1 535808,450486 0 0061
+2 535808,450486,0,68840 0 0062
+3 535808,450486,203840,68840 1 0063
+4 535808,450486,203840,12376 1 0064
+5 535808,450486,203840,59259 1 0065
+6 535808,672672,0,115315 2 0066
+7 535808,450486,203840,112840 1 0067
+8 535808,672672,0,115315 2 0070
+9 535808,450486,203840,59259 1 0071
+la 428646,786240,262080 3 0074
+mi 803712,581944,59405,38730 3 0075
+\- "
+ra 428646,786240,262080 3 0076
+--- 750131,716352,0,160334,0,80168 2 0115
+ci 1125197,786240,262080 3 0117
+--- 750131,716352,0,107526,0,53763 2 0127
+--- 442042,786240,262080 3 0133
+--- 442042,786240,262080 3 0135
+ua 535808,728000,203840,96387 3 0136
+da 535808,728000,203840 3 0137
+--- 535808,728000 2 0140
+--- 535808,487760,-36400 2 0142
+--- 535808,487760,-36400 2 0143
+--- 535808,634477,27666 3 0144
+--- 1018035,728000 2 0154
+--- 535808,487760,-36400 2 0155
+--- 589389,728000 2 0156
+ti 642970,128960 0 0176
+~ "
+--- 214323,384606,-139554,69362 0 0177
+--- 642970,728000,0,113277 2 0200
+--- 642970,728000,0,104250 2 0201
+--- 535808,728000,0,128419 2 0202
+--- 535808,728000 2 0203
+dg 482227,728000,203840 3 0204
+dd 482227,728000,203840 3 0205
+--- 535808,786240,262080 3 0206
+%O 1178778,786240,58240,142979 3 0207
+bu 535808,450486,-74547 0 0210
+--- 964454,716352,0,152298,-80517,76149 2 0211
+--- 642970,786240,58240,142106 3 0212
+--- 535808,548426,101920,102125 3 0213
+Fn 321485,728000,203840,222186,104541,112840 3 0214
+--- 750131,786240,58240,152298,-80517,76149 3 0215
+--- 1047155,716352,0,192483,-138902,58531 2 0216
+--- 806042,716352,0,171808,0,59114 2 0217
+--- 810992,786240,58240,91437,-80517,91437 3 0220
+--- 724506,716352,0,107526,0,-26426 2 0221
+--- 806261,728000 2 0222
+--- 764691,716352,0,40550,0,30413 2 0223
+--- 589389,728000,0,128419 2 0224
+--- 535808,524160,203840 3 0225
+--- 535808,786240,0,122886,-46666,122886 2 0226
+tm 696550,786240,0,550366 2 0227
+--- 1515405,786240,58240,142979 3 0230
+--- 509018,728000,203840 3 0231
+--- 737901,786240,58240,107526,0,53763 3 0232
+--- 937373,716352,0,171808,0,59114 2 0233
+--- 535808,786240,0,169770 2 0234
+--- 705869,716352,0,136106 2 0235
+--- 535808,450486,-74547 0 0236
+--- 696550,786240,0,550366 2 0237
+--- 401856,786240,262080,23587 3 0240
+--- 401856,786240,262080,154627 3 0241
+ct 535808,548426,101920,102125 3 0242
+Po 806261,728000 2 0243
+Cs 816510,581944,0,112840 2 0244
+Ye 779251,716352,0,203198 2 0245
+bb 214323,786240,262080,142979 3 0246
+sc 482227,728000,203840 3 0247
+--- 535808,700130,0,109803 2 0250
+co 1125197,786240,262080 3 0251
+Of 482227,786240,0,137592 2 0252
+--- 1125197,786240,262080 3 0253
+no 696550,450486,0,86050 0 0254
+--- 1125197,786240,262080 3 0255
+rg 1125197,786240,262080 3 0256
+rn 803712,728000 2 0257
+de 375066,716352 2 0260
+t+- 803712,581944,59405,38730 3 0261
+S2 482227,786240,0,169770 2 0262
+S3 482227,786240,0,169770 2 0263
+--- 535808,728000,0,101629 2 0264
+mc 535808,450486,203840,80419,30867,80419 1 0265
+ps 642970,728000,203840 3 0266
+pc 321485,450486 0 0267
+--- 704314,548426,0,29630 2 0270
+S1 482227,786240,0,169770 2 0271
+Om 482227,786240,0,137592 2 0272
+--- 482227,786240,220138,196560 3 0273
+14 482227,786240,203840,169770 3 0274
+12 482227,786240,203840,169770 3 0275
+34 482227,786240,203840,169770 3 0276
+Eu 803712,716352,0,126090 2 0277
+tmu 803712,581944,59405,38730 3 0326
+tdi 803712,581944,59405,38730 3 0366
diff --git a/contrib/groff/font/devdvi/TR b/contrib/groff/font/devdvi/TR
new file mode 100644
index 0000000..4a42532
--- /dev/null
+++ b/contrib/groff/font/devdvi/TR
@@ -0,0 +1,429 @@
+#
+# manually added kernings for `` and ''
+#
+name TR
+special
+internalname cmr10
+spacewidth 349526
+ligatures ff fi fl ffi ffl 0
+checksum 1274110073
+designsize 10485760
+kernpairs
+ff cq 81557
+ff ' 81557
+ff ? 81557
+ff ! 81557
+ff ) 81557
+ff rB 81557
+ff ] 81557
+' ' -87382
+cq ' -87382
+' cq -87382
+cq cq -87382
+' ? 116509
+cq ? 116509
+' ! 116509
+cq ! 116509
+*A t -29128
+A t -29128
+*A C -29128
+A C -29128
+*A *O -29128
+*A O -29128
+A *O -29128
+A O -29128
+*A G -29128
+A G -29128
+*A U -29128
+A U -29128
+*A Q -29128
+A Q -29128
+*A *T -87382
+*A T -87382
+A *T -87382
+A T -87382
+*A Y -87382
+A Y -87382
+*A V -116509
+A V -116509
+*A W -116509
+A W -116509
+D *X -29128
+D X -29128
+D W -29128
+D *A -29128
+D A -29128
+D V -29128
+D Y -29128
+F o -87382
+F e -87382
+F u -87382
+F r -87382
+F a -87382
+F *A -116509
+F A -116509
+F *O -29128
+F O -29128
+F C -29128
+F G -29128
+F Q -29128
+*I *I 29128
+*I I 29128
+I *I 29128
+I I 29128
+*K *O -29128
+*K O -29128
+K *O -29128
+K O -29128
+*K C -29128
+K C -29128
+*K G -29128
+K G -29128
+*K Q -29128
+K Q -29128
+L *T -87382
+L T -87382
+L Y -87382
+L V -116509
+L W -116509
+*O *X -29128
+*O X -29128
+O *X -29128
+O X -29128
+*O W -29128
+O W -29128
+*O *A -29128
+*O A -29128
+O *A -29128
+O A -29128
+*O V -29128
+O V -29128
+*O Y -29128
+O Y -29128
+*R *A -87382
+*R A -87382
+P *A -87382
+P A -87382
+*R o -29128
+P o -29128
+*R e -29128
+P e -29128
+*R a -29128
+P a -29128
+*R . -87382
+P . -87382
+*R , -87382
+P , -87382
+R t -29128
+R C -29128
+R *O -29128
+R O -29128
+R G -29128
+R U -29128
+R Q -29128
+R *T -87382
+R T -87382
+R Y -87382
+R V -116509
+R W -116509
+*T y -29128
+T y -29128
+*T e -87382
+T e -87382
+*T o -87382
+T o -87382
+*T r -87382
+T r -87382
+*T a -87382
+T a -87382
+*T *A -87382
+*T A -87382
+T *A -87382
+T A -87382
+*T u -87382
+T u -87382
+V o -87382
+V e -87382
+V u -87382
+V r -87382
+V a -87382
+V *A -116509
+V A -116509
+V *O -29128
+V O -29128
+V C -29128
+V G -29128
+V Q -29128
+W o -87382
+W e -87382
+W u -87382
+W r -87382
+W a -87382
+W *A -116509
+W A -116509
+W *O -29128
+W O -29128
+W C -29128
+W G -29128
+W Q -29128
+*X *O -29128
+*X O -29128
+X *O -29128
+X O -29128
+*X C -29128
+X C -29128
+*X G -29128
+X G -29128
+*X Q -29128
+X Q -29128
+Y e -87382
+Y o -87382
+Y r -87382
+Y a -87382
+Y *A -87382
+Y A -87382
+Y u -87382
+oq oq -87382
+oq ` -87382
+` oq -87382
+` ` -87382
+a v -29128
+a j 58254
+a y -29128
+a w -29128
+b e 29128
+b o 29128
+b x -29128
+b d 29128
+b c 29128
+b q 29128
+b v -29128
+b j 58254
+b y -29128
+b w -29128
+c h -29128
+c k -29128
+f ' 81557
+f cq 81557
+f ? 81557
+f ! 81557
+f ) 81557
+f rB 81557
+f ] 81557
+g j 29128
+h t -29128
+h u -29128
+h b -29128
+h y -29128
+h v -29128
+h w -29128
+k a -58254
+k e -29128
+k a -29128
+k o -29128
+k c -29128
+m t -29128
+m u -29128
+m b -29128
+m y -29128
+m v -29128
+m w -29128
+n t -29128
+n u -29128
+n b -29128
+n y -29128
+n v -29128
+n w -29128
+o e 29128
+o o 29128
+o x -29128
+o d 29128
+o c 29128
+o q 29128
+o v -29128
+o j 58254
+o y -29128
+o w -29128
+p e 29128
+p o 29128
+p x -29128
+p d 29128
+p c 29128
+p q 29128
+p v -29128
+p j 58254
+p y -29128
+p w -29128
+t y -29128
+t w -29128
+u w -29128
+v a -58254
+v e -29128
+v a -29128
+v o -29128
+v c -29128
+w e -29128
+w a -29128
+w o -29128
+w c -29128
+y o -29128
+y e -29128
+y a -29128
+y . -87382
+y , -87382
+charset
+*G 655362,716526,0,0,0,-145637 2 0000
+*D 873816,716526 2 0001
+*H 815562,716526,0,0,-29128,-29128 2 0002
+*L 728179,716526 2 0003
+*C 699053,716526 2 0004
+*P 786434,716526 2 0005
+*S 757307,716526 2 0006
+*U 815562,716526,0,0,-29128,-145637 2 0007
+*F 757307,716526,0,0,-29128 2 0010
+*Q 815562,716526,0,0,-29128,-72818 2 0011
+*W 757307,716526 2 0012
+ff 611672,728178,0,81557 2 0013
+fi 582544,728178 2 0014
+fl 582544,728178 2 0015
+Fi 873816,728178 2 0016
+Fl 873816,728178 2 0017
+.i 291272,451470 0 0020
+.j 320400,451470,203890 1 0021
+ga 524290,728178 2 0022
+aa 524290,728178 2 0023
+ah 524290,659002 2 0024
+ab 524290,728178 2 0025
+a- 524290,595357 2 0026
+ao 786434,728178 2 0027
+ac 466035,0,178403 1 0030
+ss 524291,728178 2 0031
+ae 757307,451470 0 0032
+oe 815562,451470 0 0033
+/o 524290,553416,101946 3 0034
+AE 946634,716526 2 0035
+OE 1063142,716526 2 0036
+/O 815562,767499,50973 3 0037
+--- 291272,451470 0 0040
+! 291272,728178 2 0041
+rq 524290,728178 2 0042
+sh 873816,728178,203888 3 0043
+# "
+Do 524290,786432,58254 3 0044
+$ "
+% 873816,786432,58254 3 0045
+& 815562,728178 2 0046
+cq 291272,728178 2 0047
+' "
+( 407781,786432,262144 3 0050
+) 407781,786432,262144 3 0051
+* 524290,786432 2 0052
+pl 815562,611670,87382 3 0053
++ "
+, 291272,110683,203890 1 0054
+hy 349526,451470 0 0055
+- "
+. 291272,110683 0 0056
+sl 524290,786432,262144 3 0057
+/ "
+0 524290,675749 2 0060
+1 524290,675749 2 0061
+2 524290,675749 2 0062
+3 524290,675749 2 0063
+4 524290,675749 2 0064
+5 524290,675749 2 0065
+6 524290,675749 2 0066
+7 524290,675749 2 0067
+8 524290,675749 2 0070
+9 524290,675749 2 0071
+: 291272,451470 0 0072
+; 291272,451470,203890 1 0073
+r! 291272,524288,203890 3 0074
+eq 815562,384696,-139592 0 0075
+= "
+r? 495163,524288,203890 3 0076
+? 495163,728178 2 0077
+at 815562,728178 2 0100
+@ "
+*A 786434,716526 2 0101
+A "
+*B 742744,716526 2 0102
+B "
+C 757307,716526,0,0,-29128 2 0103
+D 800998,716526,0,0,0,-29128 2 0104
+*E 713616,716526 2 0105
+E "
+F 684490,716526,0,0,0,-145637 2 0106
+G 822843,716526,0,0,-29128 2 0107
+*Y 786434,716526 2 0110
+H "
+*I 378653,716526 2 0111
+I "
+J 538853,716526,0,0,0,-29128 2 0112
+*K 815562,716526 2 0113
+K "
+L 655362,716526,0,0,0,58254 2 0114
+*M 961197,716526 2 0115
+M "
+*N 786434,716526 2 0116
+N "
+*O 815562,716526,0,0,-29128,-29128 2 0117
+O "
+*R 713616,716526,0,0,0,-145637 2 0120
+P "
+Q 815562,716526,203890,0,-29128 3 0121
+R 771870,716526 2 0122
+S 582544,716526 2 0123
+*T 757307,716526,0,0,0,-145637 2 0124
+T "
+U 786434,716526,0,0,-14563 2 0125
+V 786434,716526,0,14563,43691,-218454 2 0126
+W 1077706,716526,0,14563,43691,-131074 2 0127
+*X 786434,716526 2 0130
+X "
+Y 786434,716526,0,26214,29128,-206803 2 0131
+*Z 640798,716526 2 0132
+Z "
+lB 291272,786432,262144 3 0133
+[ "
+lq 524290,728178 2 0134
+rB 291272,786432,262144 3 0135
+] "
+ha 524290,728178 2 0136
+^ "
+a^ "
+a. 291272,700301 2 0137
+oq 291272,728178 2 0140
+` "
+a 524290,451470 0 0141
+b 582544,728178 2 0142
+c 466035,451470 0 0143
+d 582544,728178 2 0144
+e 466035,451470 0 0145
+f 320400,728178,0,81557 2 0146
+g 524290,451470,203890,14563 1 0147
+h 582544,728178 2 0150
+i 291272,700301 2 0151
+j 320400,700301,203890 3 0152
+k 553418,728178 2 0153
+l 291272,728178 2 0154
+m 873816,451470 0 0155
+n 582544,451470 0 0156
+o 524290,451470 0 0157
+p 582544,451470,203890 1 0160
+q 553416,451470,203890 1 0161
+r 410694,451470 0 0162
+s 413606,451470 0 0163
+t 407781,644958 2 0164
+u 582544,451470 0 0165
+v 553418,451470,0,14563 0 0166
+w 757307,451470,0,14563 0 0167
+x 553418,451470 0 0170
+y 553418,451470,203890,14563 1 0171
+z 466035,451470 0 0172
+en 524290,451470,0,29128 0 0173
+em 1048579,451470,0,29128 0 0174
+a" 524290,728178 2 0175
+~ 524290,700301 2 0176
+a~ "
+ad 524290,700301 2 0177
diff --git a/contrib/groff/font/devdvi/TREC b/contrib/groff/font/devdvi/TREC
new file mode 100644
index 0000000..d0f404c
--- /dev/null
+++ b/contrib/groff/font/devdvi/TREC
@@ -0,0 +1,1706 @@
+name TREC
+internalname ecrm1000
+spacewidth 349440
+ligatures ff fi fl ffi ffl 0
+checksum 204597937
+designsize 10485760
+kernpairs
+bq Bq 116480
+bq j 116480
+bq .j 116480
+bq g 58240
+bq y 58240
+bq :y 58240
+bq 'y 58240
+bq v -87360
+bq w -58240
+bq V -116480
+bq W -87360
+bq Y -87360
+bq :Y -87360
+bq 'Y -87360
+bq O -29120
+bq `O -29120
+bq 'O -29120
+bq ^O -29120
+bq ~O -29120
+bq :O -29120
+bq OE -29120
+bq /O -29120
+bq C -29120
+bq G -29120
+bq 'C -29120
+bq ,C -29120
+bq Q -29120
+lq oq 116480
+lq ` 116480
+lq lq 116480
+rq cq 116480
+rq ' 116480
+rq rq 116480
+Bq bq 116480
+Bq , 116480
+Bq Bq 116480
+Bq j 116480
+Bq .j 116480
+Bq g 58240
+Bq y 58240
+Bq :y 58240
+Bq 'y 58240
+Bq v -87360
+Bq w -58240
+Bq V -116480
+Bq W -87360
+Bq Y -87360
+Bq :Y -87360
+Bq 'Y -87360
+Bq O -29120
+Bq `O -29120
+Bq 'O -29120
+Bq ^O -29120
+Bq ~O -29120
+Bq :O -29120
+Bq OE -29120
+Bq /O -29120
+Bq C -29120
+Bq G -29120
+Bq 'C -29120
+Bq ,C -29120
+Bq Q -29120
+Fc . -87360
+Fc , -87360
+ff cq 81536
+ff ' 81536
+ff oq 81536
+ff ` 81536
+ff lq 81536
+ff rq 81536
+ff ? 81536
+ff ! 81536
+ff ) 81536
+ff rB 81536
+ff ] 81536
+cq rq 116480
+' rq 116480
+cq ? 116480
+' ? 116480
+cq ! 116480
+' ! 116480
+A y -87360
+A :y -87360
+A 'y -87360
+A v -116480
+A w -87360
+A c -29120
+A 'c -29120
+A ,c -29120
+A d -29120
+A Sd -29120
+A e -29120
+A `e -29120
+A 'e -29120
+A ^e -29120
+A :e -29120
+A o -29120
+A `o -29120
+A 'o -29120
+A ^o -29120
+A ~o -29120
+A :o -29120
+A oe -29120
+A /o -29120
+A q -29120
+A t -29120
+A C -29120
+A G -29120
+A 'C -29120
+A ,C -29120
+A Q -29120
+A O -29120
+A `O -29120
+A 'O -29120
+A ^O -29120
+A ~O -29120
+A :O -29120
+A OE -29120
+A /O -29120
+A U -29120
+A `U -29120
+A 'U -29120
+A ^U -29120
+A :U -29120
+A T -87360
+A Y -87360
+A :Y -87360
+A 'Y -87360
+A V -116480
+A W -116480
+D X -29120
+D W -29120
+D A -29120
+D `A -29120
+D 'A -29120
+D ^A -29120
+D ~A -29120
+D :A -29120
+D oA -29120
+D AE -29120
+D V -29120
+D Y -29120
+D :Y -29120
+D 'Y -29120
+F o -87360
+F a -87360
+F e -87360
+F y -87360
+F u -87360
+F r -87360
+F v -87360
+F s -87360
+F c -87360
+F d -87360
+F g -87360
+F m -87360
+F n -87360
+F p -87360
+F w -87360
+F z -87360
+F ae -87360
+F /o -87360
+F A -116480
+F `A -116480
+F 'A -116480
+F ^A -116480
+F ~A -116480
+F :A -116480
+F oA -116480
+F AE -116480
+F O -29120
+F `O -29120
+F 'O -29120
+F ^O -29120
+F ~O -29120
+F :O -29120
+F OE -29120
+F /O -29120
+F C -29120
+F G -29120
+F 'C -29120
+F ,C -29120
+F Q -29120
+I I 29120
+K v -87360
+K w -29120
+K o -29120
+K `o -29120
+K 'o -29120
+K ^o -29120
+K ~o -29120
+K :o -29120
+K oe -29120
+K /o -29120
+K C -29120
+K G -29120
+K 'C -29120
+K ,C -29120
+K Q -29120
+L T -87360
+L Y -87360
+L :Y -87360
+L 'Y -87360
+L V -116480
+L W -116480
+O X -29120
+O W -29120
+O A -29120
+O `A -29120
+O 'A -29120
+O ^A -29120
+O ~A -29120
+O :A -29120
+O oA -29120
+O AE -29120
+O V -29120
+O Y -29120
+O :Y -29120
+O 'Y -29120
+P A -87360
+P `A -87360
+P 'A -87360
+P ^A -87360
+P ~A -87360
+P :A -87360
+P oA -87360
+P AE -87360
+P o -29120
+P `o -29120
+P 'o -29120
+P ^o -29120
+P ~o -29120
+P :o -29120
+P oe -29120
+P /o -29120
+P e -29120
+P `e -29120
+P 'e -29120
+P ^e -29120
+P :e -29120
+P a -29120
+P `a -29120
+P 'a -29120
+P ^a -29120
+P ^a -29120
+P ~a -29120
+P :a -29120
+P oa -29120
+P ae -29120
+P . -87360
+P , -87360
+R t -29120
+R C -29120
+R G -29120
+R 'C -29120
+R ,C -29120
+R Q -29120
+R O -29120
+R `O -29120
+R 'O -29120
+R ^O -29120
+R ~O -29120
+R :O -29120
+R OE -29120
+R /O -29120
+R U -29120
+R `U -29120
+R 'U -29120
+R ^U -29120
+R :U -29120
+R T -87360
+R Y -87360
+R :Y -87360
+R 'Y -87360
+R V -116480
+R W -116480
+T y -29120
+T e -87360
+T o -87360
+T r -87360
+T a -87360
+T u -87360
+T n -87360
+T .i -87360
+T c -87360
+T d -87360
+T g -87360
+T p -87360
+T s -87360
+T v -87360
+T w -87360
+T x -87360
+T z -87360
+T A -87360
+T `A -87360
+T 'A -87360
+T ^A -87360
+T ~A -87360
+T :A -87360
+T oA -87360
+T AE -87360
+V o -87360
+V a -87360
+V e -87360
+V y -87360
+V u -87360
+V r -87360
+V v -87360
+V s -87360
+V c -87360
+V d -87360
+V g -87360
+V m -87360
+V n -87360
+V p -87360
+V w -87360
+V z -87360
+V ae -87360
+V /o -87360
+V A -116480
+V `A -116480
+V 'A -116480
+V ^A -116480
+V ~A -116480
+V :A -116480
+V oA -116480
+V AE -116480
+V O -29120
+V `O -29120
+V 'O -29120
+V ^O -29120
+V ~O -29120
+V :O -29120
+V OE -29120
+V /O -29120
+V C -29120
+V G -29120
+V 'C -29120
+V ,C -29120
+V Q -29120
+W o -87360
+W a -87360
+W e -87360
+W y -87360
+W u -87360
+W r -87360
+W v -87360
+W s -87360
+W c -87360
+W d -87360
+W g -87360
+W m -87360
+W n -87360
+W p -87360
+W w -87360
+W z -87360
+W ae -87360
+W /o -87360
+W A -116480
+W `A -116480
+W 'A -116480
+W ^A -116480
+W ~A -116480
+W :A -116480
+W oA -116480
+W AE -116480
+W O -29120
+W `O -29120
+W 'O -29120
+W ^O -29120
+W ~O -29120
+W :O -29120
+W OE -29120
+W /O -29120
+W C -29120
+W G -29120
+W 'C -29120
+W ,C -29120
+W Q -29120
+X O -29120
+X `O -29120
+X 'O -29120
+X ^O -29120
+X ~O -29120
+X :O -29120
+X OE -29120
+X /O -29120
+X C -29120
+X G -29120
+X 'C -29120
+X ,C -29120
+X Q -29120
+Y e -87360
+Y o -87360
+Y r -87360
+Y a -87360
+Y u -87360
+Y n -87360
+Y .i -87360
+Y c -87360
+Y d -87360
+Y g -87360
+Y p -87360
+Y s -87360
+Y v -87360
+Y w -87360
+Y x -87360
+Y z -87360
+Y A -87360
+Y `A -87360
+Y 'A -87360
+Y ^A -87360
+Y ~A -87360
+Y :A -87360
+Y oA -87360
+Y AE -87360
+oq lq 116480
+` lq 116480
+oq ? 116480
+` ? 116480
+oq ! 116480
+` ! 116480
+a v -29120
+a j 58240
+a y -29120
+a :y -29120
+a 'y -29120
+a w -29120
+b e 29120
+b `e 29120
+b 'e 29120
+b ^e 29120
+b :e 29120
+b o 29120
+b `o 29120
+b 'o 29120
+b ^o 29120
+b ~o 29120
+b :o 29120
+b oe 29120
+b /o 29120
+b x -29120
+b d 29120
+b c 29120
+b 'c 29120
+b ,c 29120
+b q 29120
+b v -29120
+b j 58240
+b y -29120
+b :y -29120
+b 'y -29120
+b w -29120
+c h -29120
+c k -29120
+e V -87360
+f cq 81536
+f ' 81536
+f oq 81536
+f ` 81536
+f lq 81536
+f rq 81536
+f ? 81536
+f ! 81536
+f ) 81536
+f rB 81536
+f ] 81536
+g j 29120
+h W -87360
+h V -87360
+h t -29120
+h u -29120
+h `u -29120
+h 'u -29120
+h ^u -29120
+h :u -29120
+h b -29120
+h y -29120
+h v -29120
+h w -29120
+k W -87360
+k V -87360
+k a -58240
+k `a -58240
+k 'a -58240
+k ^a -58240
+k ^a -58240
+k ~a -58240
+k :a -58240
+k oa -58240
+k ae -58240
+k e -29120
+k `e -29120
+k 'e -29120
+k ^e -29120
+k :e -29120
+k a -29120
+k `a -29120
+k 'a -29120
+k ^a -29120
+k ^a -29120
+k ~a -29120
+k :a -29120
+k oa -29120
+k ae -29120
+k o -29120
+k `o -29120
+k 'o -29120
+k ^o -29120
+k ~o -29120
+k :o -29120
+k oe -29120
+k /o -29120
+k c -29120
+k 'c -29120
+k ,c -29120
+m W -87360
+m V -87360
+m t -29120
+m u -29120
+m `u -29120
+m 'u -29120
+m ^u -29120
+m :u -29120
+m b -29120
+m y -29120
+m v -29120
+m w -29120
+n W -87360
+n V -87360
+n t -29120
+n u -29120
+n `u -29120
+n 'u -29120
+n ^u -29120
+n :u -29120
+n b -29120
+n y -29120
+n v -29120
+n w -29120
+o e 29120
+o `e 29120
+o 'e 29120
+o ^e 29120
+o :e 29120
+o o 29120
+o `o 29120
+o 'o 29120
+o ^o 29120
+o ~o 29120
+o :o 29120
+o oe 29120
+o /o 29120
+o x -29120
+o d 29120
+o c 29120
+o 'c 29120
+o ,c 29120
+o q 29120
+o v -29120
+o j 58240
+o y -29120
+o :y -29120
+o 'y -29120
+o w -29120
+p e 29120
+p `e 29120
+p 'e 29120
+p ^e 29120
+p :e 29120
+p o 29120
+p `o 29120
+p 'o 29120
+p ^o 29120
+p ~o 29120
+p :o 29120
+p oe 29120
+p /o 29120
+p x -29120
+p d 29120
+p c 29120
+p 'c 29120
+p ,c 29120
+p q 29120
+p v -29120
+p j 58240
+p y -29120
+p :y -29120
+p 'y -29120
+p w -29120
+t y -29120
+t :y -29120
+t 'y -29120
+t w -29120
+u w -29120
+v a -58240
+v `a -58240
+v 'a -58240
+v ^a -58240
+v ^a -58240
+v ~a -58240
+v :a -58240
+v oa -58240
+v ae -58240
+v e -29120
+v `e -29120
+v 'e -29120
+v ^e -29120
+v :e -29120
+v a -29120
+v `a -29120
+v 'a -29120
+v ^a -29120
+v ^a -29120
+v ~a -29120
+v :a -29120
+v oa -29120
+v ae -29120
+v o -29120
+v `o -29120
+v 'o -29120
+v ^o -29120
+v ~o -29120
+v :o -29120
+v oe -29120
+v /o -29120
+v c -29120
+v 'c -29120
+v ,c -29120
+w e -29120
+w `e -29120
+w 'e -29120
+w ^e -29120
+w :e -29120
+w a -29120
+w `a -29120
+w 'a -29120
+w ^a -29120
+w ^a -29120
+w ~a -29120
+w :a -29120
+w oa -29120
+w ae -29120
+w o -29120
+w `o -29120
+w 'o -29120
+w ^o -29120
+w ~o -29120
+w :o -29120
+w oe -29120
+w /o -29120
+w c -29120
+w 'c -29120
+w ,c -29120
+y o -29120
+y `o -29120
+y 'o -29120
+y ^o -29120
+y ~o -29120
+y :o -29120
+y oe -29120
+y /o -29120
+y e -29120
+y `e -29120
+y 'e -29120
+y ^e -29120
+y :e -29120
+y a -29120
+y `a -29120
+y 'a -29120
+y ^a -29120
+y ^a -29120
+y ~a -29120
+y :a -29120
+y oa -29120
+y ae -29120
+y . -87360
+y , -87360
+'C v -116480
+'C w -87360
+'C c -29120
+'C 'c -29120
+'C ,c -29120
+'C d -29120
+'C Sd -29120
+'C e -29120
+'C `e -29120
+'C 'e -29120
+'C ^e -29120
+'C :e -29120
+'C o -29120
+'C `o -29120
+'C 'o -29120
+'C ^o -29120
+'C ~o -29120
+'C :o -29120
+'C oe -29120
+'C /o -29120
+'C q -29120
+'C t -29120
+'C C -29120
+'C G -29120
+'C 'C -29120
+'C ,C -29120
+'C Q -29120
+'C O -29120
+'C `O -29120
+'C 'O -29120
+'C ^O -29120
+'C ~O -29120
+'C :O -29120
+'C OE -29120
+'C /O -29120
+'C U -29120
+'C `U -29120
+'C 'U -29120
+'C ^U -29120
+'C :U -29120
+'C T -87360
+'C Y -87360
+'C :Y -87360
+'C 'Y -87360
+'C V -116480
+'C W -116480
+/L T -87360
+/L Y -87360
+/L :Y -87360
+/L 'Y -87360
+/L V -116480
+/L W -116480
+:Y e -87360
+:Y o -87360
+:Y r -87360
+:Y a -87360
+:Y u -87360
+:Y n -87360
+:Y .i -87360
+:Y c -87360
+:Y d -87360
+:Y g -87360
+:Y p -87360
+:Y s -87360
+:Y v -87360
+:Y w -87360
+:Y x -87360
+:Y z -87360
+:Y A -87360
+:Y `A -87360
+:Y 'A -87360
+:Y ^A -87360
+:Y ~A -87360
+:Y :A -87360
+:Y oA -87360
+:Y AE -87360
+'c h -29120
+'c k -29120
+/l cq 29120
+/l ' 29120
+:y o -29120
+:y `o -29120
+:y 'o -29120
+:y ^o -29120
+:y ~o -29120
+:y :o -29120
+:y oe -29120
+:y /o -29120
+:y e -29120
+:y `e -29120
+:y 'e -29120
+:y ^e -29120
+:y :e -29120
+:y a -29120
+:y `a -29120
+:y 'a -29120
+:y ^a -29120
+:y ^a -29120
+:y ~a -29120
+:y :a -29120
+:y oa -29120
+:y ae -29120
+:y . -87360
+:y , -87360
+`A y -87360
+`A :y -87360
+`A 'y -87360
+`A v -116480
+`A w -87360
+`A c -29120
+`A 'c -29120
+`A ,c -29120
+`A d -29120
+`A Sd -29120
+`A e -29120
+`A `e -29120
+`A 'e -29120
+`A ^e -29120
+`A :e -29120
+`A o -29120
+`A `o -29120
+`A 'o -29120
+`A ^o -29120
+`A ~o -29120
+`A :o -29120
+`A oe -29120
+`A /o -29120
+`A q -29120
+`A t -29120
+`A C -29120
+`A G -29120
+`A 'C -29120
+`A ,C -29120
+`A Q -29120
+`A O -29120
+`A `O -29120
+`A 'O -29120
+`A ^O -29120
+`A ~O -29120
+`A :O -29120
+`A OE -29120
+`A /O -29120
+`A U -29120
+`A `U -29120
+`A 'U -29120
+`A ^U -29120
+`A :U -29120
+`A T -87360
+`A Y -87360
+`A :Y -87360
+`A 'Y -87360
+`A V -116480
+`A W -116480
+'A y -87360
+'A :y -87360
+'A 'y -87360
+'A v -116480
+'A w -87360
+'A c -29120
+'A 'c -29120
+'A ,c -29120
+'A d -29120
+'A Sd -29120
+'A e -29120
+'A `e -29120
+'A 'e -29120
+'A ^e -29120
+'A :e -29120
+'A o -29120
+'A `o -29120
+'A 'o -29120
+'A ^o -29120
+'A ~o -29120
+'A :o -29120
+'A oe -29120
+'A /o -29120
+'A q -29120
+'A t -29120
+'A C -29120
+'A G -29120
+'A 'C -29120
+'A ,C -29120
+'A Q -29120
+'A O -29120
+'A `O -29120
+'A 'O -29120
+'A ^O -29120
+'A ~O -29120
+'A :O -29120
+'A OE -29120
+'A /O -29120
+'A U -29120
+'A `U -29120
+'A 'U -29120
+'A ^U -29120
+'A :U -29120
+'A T -87360
+'A Y -87360
+'A :Y -87360
+'A 'Y -87360
+'A V -116480
+'A W -116480
+^A y -87360
+^A :y -87360
+^A 'y -87360
+^A v -116480
+^A w -87360
+^A c -29120
+^A 'c -29120
+^A ,c -29120
+^A d -29120
+^A Sd -29120
+^A e -29120
+^A `e -29120
+^A 'e -29120
+^A ^e -29120
+^A :e -29120
+^A o -29120
+^A `o -29120
+^A 'o -29120
+^A ^o -29120
+^A ~o -29120
+^A :o -29120
+^A oe -29120
+^A /o -29120
+^A q -29120
+^A t -29120
+^A C -29120
+^A G -29120
+^A 'C -29120
+^A ,C -29120
+^A Q -29120
+^A O -29120
+^A `O -29120
+^A 'O -29120
+^A ^O -29120
+^A ~O -29120
+^A :O -29120
+^A OE -29120
+^A /O -29120
+^A U -29120
+^A `U -29120
+^A 'U -29120
+^A ^U -29120
+^A :U -29120
+^A T -87360
+^A Y -87360
+^A :Y -87360
+^A 'Y -87360
+^A V -116480
+^A W -116480
+~A y -87360
+~A :y -87360
+~A 'y -87360
+~A v -116480
+~A w -87360
+~A c -29120
+~A 'c -29120
+~A ,c -29120
+~A d -29120
+~A Sd -29120
+~A e -29120
+~A `e -29120
+~A 'e -29120
+~A ^e -29120
+~A :e -29120
+~A o -29120
+~A `o -29120
+~A 'o -29120
+~A ^o -29120
+~A ~o -29120
+~A :o -29120
+~A oe -29120
+~A /o -29120
+~A q -29120
+~A t -29120
+~A C -29120
+~A G -29120
+~A 'C -29120
+~A ,C -29120
+~A Q -29120
+~A O -29120
+~A `O -29120
+~A 'O -29120
+~A ^O -29120
+~A ~O -29120
+~A :O -29120
+~A OE -29120
+~A /O -29120
+~A U -29120
+~A `U -29120
+~A 'U -29120
+~A ^U -29120
+~A :U -29120
+~A T -87360
+~A Y -87360
+~A :Y -87360
+~A 'Y -87360
+~A V -116480
+~A W -116480
+:A y -87360
+:A :y -87360
+:A 'y -87360
+:A v -116480
+:A w -87360
+:A c -29120
+:A 'c -29120
+:A ,c -29120
+:A d -29120
+:A Sd -29120
+:A e -29120
+:A `e -29120
+:A 'e -29120
+:A ^e -29120
+:A :e -29120
+:A o -29120
+:A `o -29120
+:A 'o -29120
+:A ^o -29120
+:A ~o -29120
+:A :o -29120
+:A oe -29120
+:A /o -29120
+:A q -29120
+:A t -29120
+:A C -29120
+:A G -29120
+:A 'C -29120
+:A ,C -29120
+:A Q -29120
+:A O -29120
+:A `O -29120
+:A 'O -29120
+:A ^O -29120
+:A ~O -29120
+:A :O -29120
+:A OE -29120
+:A /O -29120
+:A U -29120
+:A `U -29120
+:A 'U -29120
+:A ^U -29120
+:A :U -29120
+:A T -87360
+:A Y -87360
+:A :Y -87360
+:A 'Y -87360
+:A V -116480
+:A W -116480
+oA y -87360
+oA :y -87360
+oA 'y -87360
+oA v -116480
+oA w -87360
+oA c -29120
+oA 'c -29120
+oA ,c -29120
+oA d -29120
+oA Sd -29120
+oA e -29120
+oA `e -29120
+oA 'e -29120
+oA ^e -29120
+oA :e -29120
+oA o -29120
+oA `o -29120
+oA 'o -29120
+oA ^o -29120
+oA ~o -29120
+oA :o -29120
+oA oe -29120
+oA /o -29120
+oA q -29120
+oA t -29120
+oA C -29120
+oA G -29120
+oA 'C -29120
+oA ,C -29120
+oA Q -29120
+oA O -29120
+oA `O -29120
+oA 'O -29120
+oA ^O -29120
+oA ~O -29120
+oA :O -29120
+oA OE -29120
+oA /O -29120
+oA U -29120
+oA `U -29120
+oA 'U -29120
+oA ^U -29120
+oA :U -29120
+oA T -87360
+oA Y -87360
+oA :Y -87360
+oA 'Y -87360
+oA V -116480
+oA W -116480
+-D X -29120
+-D W -29120
+-D A -29120
+-D `A -29120
+-D 'A -29120
+-D ^A -29120
+-D ~A -29120
+-D :A -29120
+-D oA -29120
+-D AE -29120
+-D V -29120
+-D Y -29120
+-D :Y -29120
+-D 'Y -29120
+`O X -29120
+`O W -29120
+`O A -29120
+`O `A -29120
+`O 'A -29120
+`O ^A -29120
+`O ~A -29120
+`O :A -29120
+`O oA -29120
+`O AE -29120
+`O V -29120
+`O Y -29120
+`O :Y -29120
+`O 'Y -29120
+'O X -29120
+'O W -29120
+'O A -29120
+'O `A -29120
+'O 'A -29120
+'O ^A -29120
+'O ~A -29120
+'O :A -29120
+'O oA -29120
+'O AE -29120
+'O V -29120
+'O Y -29120
+'O :Y -29120
+'O 'Y -29120
+^O X -29120
+^O W -29120
+^O A -29120
+^O `A -29120
+^O 'A -29120
+^O ^A -29120
+^O ~A -29120
+^O :A -29120
+^O oA -29120
+^O AE -29120
+^O V -29120
+^O Y -29120
+^O :Y -29120
+^O 'Y -29120
+~O X -29120
+~O W -29120
+~O A -29120
+~O `A -29120
+~O 'A -29120
+~O ^A -29120
+~O ~A -29120
+~O :A -29120
+~O oA -29120
+~O AE -29120
+~O V -29120
+~O Y -29120
+~O :Y -29120
+~O 'Y -29120
+:O X -29120
+:O W -29120
+:O A -29120
+:O `A -29120
+:O 'A -29120
+:O ^A -29120
+:O ~A -29120
+:O :A -29120
+:O oA -29120
+:O AE -29120
+:O V -29120
+:O Y -29120
+:O :Y -29120
+:O 'Y -29120
+/O X -29120
+/O W -29120
+/O A -29120
+/O `A -29120
+/O 'A -29120
+/O ^A -29120
+/O ~A -29120
+/O :A -29120
+/O oA -29120
+/O AE -29120
+/O V -29120
+/O Y -29120
+/O :Y -29120
+/O 'Y -29120
+'Y e -87360
+'Y o -87360
+'Y r -87360
+'Y a -87360
+'Y u -87360
+'Y n -87360
+'Y .i -87360
+'Y c -87360
+'Y d -87360
+'Y g -87360
+'Y p -87360
+'Y s -87360
+'Y v -87360
+'Y w -87360
+'Y x -87360
+'Y z -87360
+'Y A -87360
+'Y `A -87360
+'Y 'A -87360
+'Y ^A -87360
+'Y ~A -87360
+'Y :A -87360
+'Y oA -87360
+'Y AE -87360
+`a v -29120
+`a j 58240
+`a y -29120
+`a :y -29120
+`a 'y -29120
+`a w -29120
+'a v -29120
+'a j 58240
+'a y -29120
+'a :y -29120
+'a 'y -29120
+'a w -29120
+^a v -29120
+^a j 58240
+^a y -29120
+^a :y -29120
+^a 'y -29120
+^a w -29120
+~a v -29120
+~a j 58240
+~a y -29120
+~a :y -29120
+~a 'y -29120
+~a w -29120
+:a v -29120
+:a j 58240
+:a y -29120
+:a :y -29120
+:a 'y -29120
+:a w -29120
+oa v -29120
+oa j 58240
+oa y -29120
+oa :y -29120
+oa 'y -29120
+oa w -29120
+,c h -29120
+,c k -29120
+~n t -29120
+~n u -29120
+~n `u -29120
+~n 'u -29120
+~n ^u -29120
+~n :u -29120
+~n b -29120
+~n y -29120
+~n v -29120
+~n w -29120
+`o e 29120
+`o `e 29120
+`o 'e 29120
+`o ^e 29120
+`o :e 29120
+`o o 29120
+`o `o 29120
+`o 'o 29120
+`o ^o 29120
+`o ~o 29120
+`o :o 29120
+`o oe 29120
+`o /o 29120
+`o x -29120
+`o d 29120
+`o c 29120
+`o 'c 29120
+`o ,c 29120
+`o q 29120
+`o v -29120
+`o j 58240
+`o y -29120
+`o :y -29120
+`o 'y -29120
+`o w -29120
+'o e 29120
+'o `e 29120
+'o 'e 29120
+'o ^e 29120
+'o :e 29120
+'o o 29120
+'o `o 29120
+'o 'o 29120
+'o ^o 29120
+'o ~o 29120
+'o :o 29120
+'o oe 29120
+'o /o 29120
+'o x -29120
+'o d 29120
+'o c 29120
+'o 'c 29120
+'o ,c 29120
+'o q 29120
+'o v -29120
+'o j 58240
+'o y -29120
+'o :y -29120
+'o 'y -29120
+'o w -29120
+^o e 29120
+^o `e 29120
+^o 'e 29120
+^o ^e 29120
+^o :e 29120
+^o o 29120
+^o `o 29120
+^o 'o 29120
+^o ^o 29120
+^o ~o 29120
+^o :o 29120
+^o oe 29120
+^o /o 29120
+^o x -29120
+^o d 29120
+^o c 29120
+^o 'c 29120
+^o ,c 29120
+^o q 29120
+^o v -29120
+^o j 58240
+^o y -29120
+^o :y -29120
+^o 'y -29120
+^o w -29120
+~o e 29120
+~o `e 29120
+~o 'e 29120
+~o ^e 29120
+~o :e 29120
+~o o 29120
+~o `o 29120
+~o 'o 29120
+~o ^o 29120
+~o ~o 29120
+~o :o 29120
+~o oe 29120
+~o /o 29120
+~o x -29120
+~o d 29120
+~o c 29120
+~o 'c 29120
+~o ,c 29120
+~o q 29120
+~o v -29120
+~o j 58240
+~o y -29120
+~o :y -29120
+~o 'y -29120
+~o w -29120
+:o e 29120
+:o `e 29120
+:o 'e 29120
+:o ^e 29120
+:o :e 29120
+:o o 29120
+:o `o 29120
+:o 'o 29120
+:o ^o 29120
+:o ~o 29120
+:o :o 29120
+:o oe 29120
+:o /o 29120
+:o x -29120
+:o d 29120
+:o c 29120
+:o 'c 29120
+:o ,c 29120
+:o q 29120
+:o v -29120
+:o j 58240
+:o y -29120
+:o :y -29120
+:o 'y -29120
+:o w -29120
+/o e 29120
+/o `e 29120
+/o 'e 29120
+/o ^e 29120
+/o :e 29120
+/o o 29120
+/o `o 29120
+/o 'o 29120
+/o ^o 29120
+/o ~o 29120
+/o :o 29120
+/o oe 29120
+/o /o 29120
+/o x -29120
+/o d 29120
+/o c 29120
+/o 'c 29120
+/o ,c 29120
+/o q 29120
+/o v -29120
+/o j 58240
+/o y -29120
+/o :y -29120
+/o 'y -29120
+/o w -29120
+`u w -29120
+'u w -29120
+^u w -29120
+:u w -29120
+'y o -29120
+'y `o -29120
+'y 'o -29120
+'y ^o -29120
+'y ~o -29120
+'y :o -29120
+'y oe -29120
+'y /o -29120
+'y e -29120
+'y `e -29120
+'y 'e -29120
+'y ^e -29120
+'y :e -29120
+'y a -29120
+'y `a -29120
+'y 'a -29120
+'y ^a -29120
+'y ^a -29120
+'y ~a -29120
+'y :a -29120
+'y oa -29120
+'y ae -29120
+'y . -87360
+'y , -87360
+charset
+ga 524160,672672 2 0000
+aa 524160,672672 2 0001
+a^ 524160,672672 2 0002
+a~ 524160,672672 2 0003
+ad 524160,695554 2 0004
+a" 524160,672672,0,10267 2 0005
+ao 786240,672672 2 0006
+ah 524160,672672 2 0007
+ab 524160,672672 2 0010
+a- 524160,695554 2 0011
+a. 291200,695554 2 0012
+ac 465920,0,178360 1 0013
+ho 291200,0,203840 1 0014
+bq 291200,110656,203840 1 0015
+fo 465920,506688 2 0016
+fc 465920,506688 2 0017
+lq 349440,722176 2 0020
+rq 349440,722176 2 0021
+Bq 349440,110656,203840 1 0022
+Fo 582400,506688 2 0023
+Fc 582400,506688 2 0024
+en 524160,451360,0,29120 0 0025
+em 1048320,451360,0,29120 0 0026
+--- 0,451360 0 0027
+--- 407680,786240,58240 3 0030
+.i 291200,451360 0 0031
+.j 320320,451360,203840 1 0032
+ff 611520,722176,0,81536 2 0033
+fi 582400,722176 2 0034
+fl 582400,722176 2 0035
+Fi 873600,722176 2 0036
+Fl 873600,722176 2 0037
+--- 524160,451360,101920 1 0040
+! 291200,722176 2 0041
+dq 524160,722176 2 0042
+" "
+sh 873600,722176,203840 3 0043
+# "
+Do 524160,786240,58240 3 0044
+$ "
+% 873600,786240,58240 3 0045
+& 815360,722176 2 0046
+cq 291200,722176 2 0047
+' "
+( 407680,786240,262080 3 0050
+) 407680,786240,262080 3 0051
+* 524160,786240 2 0052
+pl 815360,611520,87360 3 0053
++ "
+, 291200,110656,203840 1 0054
+- 349440,451360 0 0055
+. 291200,110656 0 0056
+sl 524160,786240,262080 3 0057
+/ "
+0 524160,672672 2 0060
+1 524160,672672 2 0061
+2 524160,672672 2 0062
+3 524160,672672 2 0063
+4 524160,672672 2 0064
+5 524160,672672 2 0065
+6 524160,672672 2 0066
+7 524160,672672 2 0067
+8 524160,672672 2 0070
+9 524160,672672 2 0071
+: 291200,451360 0 0072
+; 291200,451360,203840 1 0073
+< 815360,559216,40992 3 0074
+eq 815360,384606,-139554 0 0075
+= "
+> 815360,559216,40992 3 0076
+? 495040,722176 2 0077
+at 815360,722176 2 0100
+@ "
+A 786240,722176 2 0101
+B 742560,722176 2 0102
+C 757120,722176,0,0,-29120 2 0103
+D 800800,722176,0,0,0,-29120 2 0104
+E 713440,722176 2 0105
+F 684320,722176,0,0,0,-145600 2 0106
+G 822640,722176,0,0,-29120 2 0107
+H 786240,722176 2 0110
+I 378560,722176 2 0111
+J 538720,722176,0,0,0,-29120 2 0112
+K 815360,722176 2 0113
+L 655200,722176,0,0,0,58240 2 0114
+M 960960,722176 2 0115
+N 786240,722176 2 0116
+O 815360,722176,0,0,-29120,-29120 2 0117
+P 713440,722176,0,0,0,-145600 2 0120
+Q 815360,722176,203840,0,-29120 3 0121
+R 771680,722176 2 0122
+S 582400,722176 2 0123
+T 757120,722176,0,0,0,-145600 2 0124
+U 786240,722176,0,0,-14560 2 0125
+V 786240,722176,0,14560,43680,-218400 2 0126
+W 1077440,722176,0,14560,43680,-131040 2 0127
+X 786240,722176 2 0130
+Y 786240,722176,0,26208,29120,-206752 2 0131
+Z 640640,722176 2 0132
+lB 291200,786240,262080 3 0133
+[ "
+rs 524160,786240,262080 3 0134
+\ "
+rB 291200,786240,262080 3 0135
+] "
+ha 640640,722176 2 0136
+^ "
+_ 815360,0,244102 1 0137
+oq 291200,722176 2 0140
+` "
+a 524160,451360 0 0141
+b 582400,722176 2 0142
+c 465920,451360 0 0143
+d 582400,722176 2 0144
+e 465920,451360 0 0145
+f 320320,722176,0,81536 2 0146
+g 524160,451360,203840,14560 1 0147
+h 582400,722176 2 0150
+i 291200,695554 2 0151
+j 320320,695554,203840 3 0152
+k 553280,722176 2 0153
+l 291200,722176 2 0154
+m 873600,451360 0 0155
+n 582400,451360 0 0156
+o 524160,451360 0 0157
+p 582400,451360,203840 1 0160
+q 553280,451360,203840 1 0161
+r 410592,451360 0 0162
+s 413504,451360 0 0163
+t 407680,644802 2 0164
+u 582400,451360 0 0165
+v 553280,451360,0,14560 0 0166
+w 757120,451360,0,14560 0 0167
+x 553280,451360 0 0170
+y 553280,451360,203840,14560 1 0171
+z 465920,451360 0 0172
+lC 524160,786240,262080 3 0173
+{ "
+ba 291200,786240,262080 3 0174
+bv "
+or "
+| "
+rC 524160,786240,262080 3 0175
+} "
+~ 640640,695554 2 0176
+hy 174720,451360 0 0177
+--- 786240,934752 2 0200
+--- 786240,722176,203840 3 0201
+'C 757120,897976 2 0202
+--- 757120,934752,0,0,-29120 2 0203
+--- 800800,934752,0,0,0,-29120 2 0204
+--- 713440,934752 2 0205
+--- 713440,722176,203840 3 0206
+--- 822640,934752,0,0,-29120 2 0207
+--- 655200,897976,0,0,0,58240 2 0210
+--- 655200,934752,0,0,0,58240 2 0211
+/L 655200,722176 2 0212
+--- 786240,897976 2 0213
+--- 786240,934752 2 0214
+--- 829920,722176,0,0,0,-29120 2 0215
+--- 815360,897976,0,0,-29120,-29120 2 0216
+--- 771680,897976 2 0217
+--- 771680,934752 2 0220
+--- 582400,897976 2 0221
+vS 582400,934752 2 0222
+--- 582400,722176,178360 3 0223
+--- 757120,934752,0,0,0,-145600 2 0224
+--- 757120,722176,178360,0,0,-145600 3 0225
+--- 786240,897976,0,0,-14560 2 0226
+--- 786240,934752,0,0,-14560 2 0227
+:Y 786240,934752,0,26208,29120,-206752 2 0230
+--- 640640,897976 2 0231
+vZ 640640,934752 2 0232
+--- 640640,897976 2 0233
+IJ 902720,722176,0,0,0,-29120 2 0234
+--- 378560,897976 2 0235
+--- 582400,722176 2 0236
+sc 465920,722176,203840 3 0237
+--- 524160,672672 2 0240
+--- 524160,451360,203840 1 0241
+'c 465920,672672 2 0242
+--- 465920,672672 2 0243
+--- 707616,722176 2 0244
+--- 465920,672672 2 0245
+--- 465920,451360,203840 1 0246
+--- 524160,672672,203840,14560 3 0247
+--- 291200,897976,0,52149 2 0250
+--- 422240,722176 2 0251
+/l 352352,722176 2 0252
+--- 582400,672672 2 0253
+--- 582400,672672 2 0254
+--- 582400,451360,203840 1 0255
+--- 524160,672672,0,10267 2 0256
+--- 410592,672672 2 0257
+--- 410592,672672 2 0260
+--- 413504,672672 2 0261
+vs 413504,672672 2 0262
+--- 413504,451360,178360 1 0263
+--- 407680,722176 2 0264
+--- 407680,644802,178360 3 0265
+--- 582400,672672 2 0266
+--- 582400,672672 2 0267
+:y 553280,695554,203840,14560 3 0270
+--- 465920,672672 2 0271
+vz 465920,672672 2 0272
+--- 465920,695554 2 0273
+ij 611520,695554,203840 3 0274
+r! 291200,524160,203840 3 0275
+r? 495040,524160,203840 3 0276
+Po 669760,722176 2 0277
+`A 786240,897976 2 0300
+'A 786240,897976 2 0301
+^A 786240,934752 2 0302
+~A 786240,934752 2 0303
+:A 786240,934752 2 0304
+oA 786240,897976 2 0305
+AE 946400,722176 2 0306
+,C 757120,722176,178360,0,-29120 3 0307
+`E 713440,897976 2 0310
+'E 713440,897976 2 0311
+^E 713440,934752 2 0312
+:E 713440,934752 2 0313
+`I 378560,897976 2 0314
+'I 378560,897976 2 0315
+^I 378560,934752 2 0316
+:I 378560,934752 2 0317
+-D 800800,722176,0,0,0,-29120 2 0320
+~N 786240,934752 2 0321
+`O 815360,897976,0,0,-29120,-29120 2 0322
+'O 815360,897976 2 0323
+^O 815360,934752,0,0,-29120,-29120 2 0324
+~O 815360,934752,0,0,-29120,-29120 2 0325
+:O 815360,934752,0,0,-29120,-29120 2 0326
+OE 1062880,722176 2 0327
+/O 815360,767312,50960 3 0330
+`U 786240,897976,0,0,-14560 2 0331
+'U 786240,897976 2 0332
+^U 786240,934752,0,0,-14560 2 0333
+:U 786240,934752,0,0,-14560 2 0334
+'Y 786240,897976,0,26208,29120,-206752 2 0335
+TP 655200,722176 2 0336
+--- 1164800,722176 2 0337
+`a 524160,672672 2 0340
+'a 524160,672672 2 0341
+^a 524160,672672 2 0342
+~a 524160,672672 2 0343
+:a 524160,695554 2 0344
+oa 524160,672672 2 0345
+ae 757120,451360 0 0346
+,c 465920,451360,178360 1 0347
+`e 465920,672672 2 0350
+'e 465920,672672 2 0351
+^e 465920,672672 2 0352
+:e 465920,695554 2 0353
+`i 291200,672672 2 0354
+'i 291200,672672,0,17094 2 0355
+^i 291200,672672 2 0356
+:i 349440,695554 2 0357
+Sd 524160,722176 2 0360
+~n 582400,672672 2 0361
+`o 524160,672672 2 0362
+'o 524160,672672 2 0363
+^o 524160,672672 2 0364
+~o 524160,672672 2 0365
+:o 524160,695554 2 0366
+oe 815360,451360 0 0367
+/o 524160,559216,101920 3 0370
+`u 582400,672672 2 0371
+'u 582400,672672 2 0372
+^u 582400,672672 2 0373
+:u 582400,695554 2 0374
+'y 553280,672672,203840,14560 3 0375
+Tp 582400,722176,203840 3 0376
+ss 524160,722176 2 0377
diff --git a/contrib/groff/font/devdvi/TRTC b/contrib/groff/font/devdvi/TRTC
new file mode 100644
index 0000000..37a054c
--- /dev/null
+++ b/contrib/groff/font/devdvi/TRTC
@@ -0,0 +1,138 @@
+name TRTC
+special
+internalname tcrm1000
+spacewidth 349440
+checksum -1137054567
+designsize 10485760
+charset
+--- 524160,635442 2 0000
+--- 524160,635442 2 0001
+--- 524160,672672 2 0002
+--- 524160,672672 2 0003
+--- 524160,672672 2 0004
+--- 524160,635442,0,15970 2 0005
+--- 786240,672672 2 0006
+--- 524160,672672 2 0007
+--- 524160,672672 2 0010
+--- 524160,672672 2 0011
+--- 291200,635442 2 0012
+--- 465920,0,178360 1 0013
+--- 291200,0,203840 1 0014
+--- 407680,110656,203840 1 0015
+--- 524160,110656,203840 1 0022
+--- 698880,458640,0,29120 2 0025
+--- 786240,458640,0,29120 2 0026
+--- 0,722176 2 0027
+<- 1048320,384606,-139554 0 0030
+-> 1048320,384606,-139554 0 0031
+--- 291200,722176,0,275184 2 0032
+--- 349440,992992,0,304304 2 0033
+--- 524160,722176,0,275184 2 0034
+--- 524160,722176,0,304304 2 0035
+--- 0,722176 2 0037
+--- 582400,722176 2 0040
+Do 524160,786240,58240 3 0044
+$ "
+aq 291200,722176 2 0047
+** 524160,487760,-36400 2 0052
+, 291200,110656,203840 1 0054
+--- 349440,384606,-139554 0 0055
+. 291200,110656 0 0056
+f/ 524160,786240,262080 3 0057
+0 524160,458640 2 0060
+1 524160,458640 2 0061
+2 524160,458640 2 0062
+3 524160,458640,203840 3 0063
+4 524160,458640,203840 3 0064
+5 524160,458640,203840 3 0065
+6 524160,672672 2 0066
+7 524160,458640,203840 3 0067
+8 524160,672672 2 0070
+9 524160,458640,203840 3 0071
+la 407680,786240,262080 3 0074
+mi 815360,611520,87360 3 0075
+\- "
+ra 407680,786240,262080 3 0076
+--- 757120,722176 2 0115
+ci 1164800,786240,262080 3 0117
+--- 757120,722176 2 0127
+--- 422240,786240,262080 3 0133
+--- 422240,786240,262080 3 0135
+ua 524160,722176,203840 3 0136
+da 524160,722176,203840 3 0137
+--- 524160,722176 2 0140
+--- 524160,487760,-36400 2 0142
+--- 524160,487760,-36400 2 0143
+--- 524160,635442,27666 3 0144
+--- 1048320,722176 2 0154
+--- 524160,487760,-36400 2 0155
+--- 640640,722176 2 0156
+ti 640640,128960 0 0176
+~ "
+--- 174720,384606,-139554 0 0177
+--- 640640,722176 2 0200
+--- 640640,722176 2 0201
+--- 524160,722176 2 0202
+--- 524160,722176 2 0203
+dg 465920,722176,203840 3 0204
+dd 465920,722176,203840 3 0205
+--- 524160,786240,262080 3 0206
+%O 1223040,786240,58240 3 0207
+bu 524160,458640,-58240 2 0210
+--- 990080,722176,0,0,-29120 2 0211
+--- 640640,786240,58240 3 0212
+--- 524160,548426,101920 3 0213
+Fn 320320,722176,0,81536 2 0214
+--- 757120,786240,58240,0,-29120 3 0215
+--- 1077440,722176,0,14560,43680,-131040 2 0216
+--- 815360,722176 2 0217
+--- 822640,786240,58240,0,-29120 3 0220
+--- 728000,722176,0,0,0,-145600 2 0221
+--- 669760,722176 2 0222
+--- 771680,722176 2 0223
+--- 495040,722176 2 0224
+--- 495040,524160,203840 3 0225
+--- 582400,786240 2 0226
+tm 698880,786240,0,550366 2 0227
+--- 1586070,786240,58240 3 0230
+--- 495040,722176,203840 3 0231
+--- 742560,786240,58240 3 0232
+--- 960960,722176 2 0233
+--- 524160,786240 2 0234
+--- 709072,722176 2 0235
+--- 524160,458640,-58240 2 0236
+--- 698880,786240,0,550366 2 0237
+--- 378560,786240,262080 3 0240
+--- 378560,786240,262080 3 0241
+ct 524160,548426,101920 3 0242
+Po 669760,722176 2 0243
+Cs 772248,580323 2 0244
+Ye 786240,722176,0,26208 2 0245
+bb 174720,786240,262080 3 0246
+sc 465920,722176,203840 3 0247
+--- 524160,700130 2 0250
+co 1164800,786240,262080 3 0251
+Of 465920,786240 2 0252
+--- 1164800,786240,262080 3 0253
+no 698880,458640 2 0254
+--- 1164800,786240,262080 3 0255
+rg 1164800,786240,262080 3 0256
+rn 815360,722176 2 0257
+de 349440,722176 2 0260
+t+- 815360,611520,87360 3 0261
+S2 465920,786240 2 0262
+S3 465920,786240 2 0263
+--- 524160,722176 2 0264
+mc 582400,458640,203840 3 0265
+ps 640640,722176,203840 3 0266
+pc 291200,458640 2 0267
+--- 660051,548426 2 0270
+S1 465920,786240 2 0271
+Om 465920,786240 2 0272
+--- 495040,786240,220138 3 0273
+14 465920,786240,203840 3 0274
+12 465920,786240,203840 3 0275
+34 465920,786240,203840 3 0276
+Eu 815360,722176 2 0277
+tmu 815360,611520,87360 3 0326
+tdi 815360,611520,87360 3 0366
diff --git a/contrib/groff/font/devdvi/generate/CompileFonts b/contrib/groff/font/devdvi/generate/CompileFonts
index 8859f8e..0d07529 100755
--- a/contrib/groff/font/devdvi/generate/CompileFonts
+++ b/contrib/groff/font/devdvi/generate/CompileFonts
@@ -1,6 +1,6 @@
#! /bin/sh
# Compile fonts in the sizes needed by groff.
-sizes="5 6 7 8 9 10 11 12 14 16 18 20 22 24 28 36"
+sizes="5 6 7 8 9 10 10.95 12 14 14.40 16 17.28 18 20 20.74 22 24 24.88 28 36"
fonts="cmr10 cmti10 cmbx10 cmbxti10 cmtt10 cmex10 cmmi10 cmsy10 cmss10 cmssbx10 cmssi10"
mode=cx
dpi=300
diff --git a/contrib/groff/font/devdvi/generate/Makefile b/contrib/groff/font/devdvi/generate/Makefile
index 8e3d144..37c8eb4 100644
--- a/contrib/groff/font/devdvi/generate/Makefile
+++ b/contrib/groff/font/devdvi/generate/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1989-2000 Free Software Foundation, Inc.
+# Copyright (C) 1989-2002 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
@@ -24,33 +24,39 @@
# Note that the following font files have manually added kerning values for
# `` and '': B, BI, I, R.
-srcdir=.
+srcdir=generate
tfmdir=/usr/local/lib/groff-tfm
gfdir=/usr/local/lib/groff-gf
TFMTODIT=tfmtodit
-FONTS=R I B BI CW CWI MI S EX H HI HB SA SB
+FONTS=TR TI TB TBI CW CWI HR HI HB HBI \
+ TREC TIEC TBEC TBIEC CWEC CWIEC HREC HIEC HBEC HBIEC \
+ TRTC TITC TBTC TBITC CWTC CWITC HRTC HITC HBTC HBITC \
+ MI S EX SA SB
SPECIALFLAG=-s
all: $(FONTS)
-# R is special because it contains \(pl \(eq
-R: $(srcdir)/texr.map
+#### CM fonts ####
+
+# TR is special because it contains \(pl \(eq
+
+TR: $(srcdir)/texr.map
$(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/cmr10.300gf \
$(tfmdir)/cmr10.tfm $(srcdir)/texr.map $@
-# I is special because it contains \(Po
+# TI is special because it contains \(Po
-I: $(srcdir)/texi.map
+TI: $(srcdir)/texi.map
$(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/cmti10.300gf \
$(tfmdir)/cmti10.tfm $(srcdir)/texi.map $@
-B: $(srcdir)/texb.map
+TB: $(srcdir)/texb.map
$(TFMTODIT) -g $(gfdir)/cmbx10.300gf \
$(tfmdir)/cmbx10.tfm $(srcdir)/texb.map $@
-BI: $(srcdir)/texi.map
+TBI: $(srcdir)/texi.map
$(TFMTODIT) -g $(gfdir)/cmbxti10.300gf \
$(tfmdir)/cmbxti10.tfm $(srcdir)/texi.map $@
@@ -76,7 +82,7 @@ EX: $(srcdir)/texex.map
$(TFMTODIT) $(SPECIALFLAG) \
$(tfmdir)/cmex10.tfm $(srcdir)/texex.map $@
-H: $(srcdir)/texb.map
+HR: $(srcdir)/texb.map
$(TFMTODIT) -g $(gfdir)/cmss10.300gf \
$(tfmdir)/cmss10.tfm $(srcdir)/texb.map $@
@@ -88,6 +94,10 @@ HI: $(srcdir)/texb.map
$(TFMTODIT) -g $(gfdir)/cmssi10.300gf \
$(tfmdir)/cmssi10.tfm $(srcdir)/texb.map $@
+HBI: $(srcdir)/texb.map
+ $(TFMTODIT) -g $(gfdir)/cmssbxo10.300gf \
+ $(tfmdir)/cmssbxo10.tfm $(srcdir)/texb.map $@
+
SA: $(srcdir)/msam.map
$(TFMTODIT) $(SPECIALFLAG) \
$(tfmdir)/msam10.tfm $(srcdir)/msam.map $@
@@ -96,6 +106,91 @@ SB: $(srcdir)/msbm.map
$(TFMTODIT) $(SPECIALFLAG) \
$(tfmdir)/msbm10.tfm $(srcdir)/msbm.map $@
+
+#### EC fonts ####
+
+TREC: $(srcdir)/ec.map
+ $(TFMTODIT) -g $(gfdir)/ecrm1000.300gf \
+ $(tfmdir)/ecrm1000.tfm $(srcdir)/ec.map $@
+
+TIEC: $(srcdir)/ec.map
+ $(TFMTODIT) -g $(gfdir)/ecti1000.300gf \
+ $(tfmdir)/ecti1000.tfm $(srcdir)/ec.map $@
+
+TBEC: $(srcdir)/ec.map
+ $(TFMTODIT) -g $(gfdir)/ecbx1000.300gf \
+ $(tfmdir)/ecbx1000.tfm $(srcdir)/ec.map $@
+
+TBIEC: $(srcdir)/ec.map
+ $(TFMTODIT) -g $(gfdir)/ecbi1000.300gf \
+ $(tfmdir)/ecbi1000.tfm $(srcdir)/ec.map $@
+
+CWEC: $(srcdir)/ec.map
+ $(TFMTODIT) $(tfmdir)/ectt1000.tfm $(srcdir)/ec.map $@
+
+CWIEC: $(srcdir)/ec.map
+ $(TFMTODIT) $(tfmdir)/ecit1000.tfm $(srcdir)/ec.map $@
+
+HREC: $(srcdir)/ec.map
+ $(TFMTODIT) -g $(gfdir)/ecss1000.300gf \
+ $(tfmdir)/ecss1000.tfm $(srcdir)/ec.map $@
+
+HBEC: $(srcdir)/ec.map
+ $(TFMTODIT) -g $(gfdir)/ecsx1000.300gf \
+ $(tfmdir)/ecsx1000.tfm $(srcdir)/ec.map $@
+
+HIEC: $(srcdir)/ec.map
+ $(TFMTODIT) -g $(gfdir)/ecsi1000.300gf \
+ $(tfmdir)/ecsi1000.tfm $(srcdir)/ec.map $@
+
+HBIEC: $(srcdir)/ec.map
+ $(TFMTODIT) -g $(gfdir)/ecso1000.300gf \
+ $(tfmdir)/ecso1000.tfm $(srcdir)/ec.map $@
+
+
+#### TC fonts ####
+
+TRTC: $(srcdir)/tc.map
+ $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcrm1000.300gf \
+ $(tfmdir)/tcrm1000.tfm $(srcdir)/tc.map $@
+
+TITC: $(srcdir)/tc.map
+ $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcti1000.300gf \
+ $(tfmdir)/tcti1000.tfm $(srcdir)/tc.map $@
+
+TBTC: $(srcdir)/tc.map
+ $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcbx1000.300gf \
+ $(tfmdir)/tcbx1000.tfm $(srcdir)/tc.map $@
+
+TBITC: $(srcdir)/tc.map
+ $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcbi1000.300gf \
+ $(tfmdir)/tcbi1000.tfm $(srcdir)/tc.map $@
+
+CWTC: $(srcdir)/tc.map
+ $(TFMTODIT) $(SPECIALFLAG) \
+ $(tfmdir)/tctt1000.tfm $(srcdir)/tc.map $@
+
+CWITC: $(srcdir)/tc.map
+ $(TFMTODIT) $(SPECIALFLAG) \
+ $(tfmdir)/tcit1000.tfm $(srcdir)/tc.map $@
+
+HRTC: $(srcdir)/tc.map
+ $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcss1000.300gf \
+ $(tfmdir)/tcss1000.tfm $(srcdir)/tc.map $@
+
+HBTC: $(srcdir)/tc.map
+ $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcsx1000.300gf \
+ $(tfmdir)/tcsx1000.tfm $(srcdir)/tc.map $@
+
+HITC: $(srcdir)/tc.map
+ $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcsi1000.300gf \
+ $(tfmdir)/tcsi1000.tfm $(srcdir)/tc.map $@
+
+HBITC: $(srcdir)/tc.map
+ $(TFMTODIT) $(SPECIALFLAG) -g $(gfdir)/tcso1000.300gf \
+ $(tfmdir)/tcso1000.tfm $(srcdir)/tc.map $@
+
+
clean:
realclean:
diff --git a/contrib/groff/font/devdvi/generate/ec.map b/contrib/groff/font/devdvi/generate/ec.map
new file mode 100644
index 0000000..53ba341
--- /dev/null
+++ b/contrib/groff/font/devdvi/generate/ec.map
@@ -0,0 +1,206 @@
+# Map for EC fonts with T1 encoding.
+# Contributed by Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+0 ga
+1 aa
+2 a^
+3 a~
+4 ad
+5 a"
+6 ao
+7 ah
+8 ab
+9 a-
+10 a.
+11 ac
+12 ho
+13 bq
+14 fo
+15 fc
+16 lq
+17 rq
+18 Bq
+19 Fo
+20 Fc
+21 en
+22 em
+25 .i
+26 .j
+27 ff
+28 fi
+29 fl
+30 Fi
+31 Fl
+33 !
+34 " dq
+35 # sh
+36 $ Do
+37 %
+38 &
+39 ' cq
+40 (
+41 )
+42 *
+43 + pl
+44 ,
+45 -
+46 .
+47 / sl
+48 0
+49 1
+50 2
+51 3
+52 4
+53 5
+54 6
+55 7
+56 8
+57 9
+58 :
+59 ;
+60 <
+61 = eq
+62 >
+63 ?
+64 @ at
+65 A
+66 B
+67 C
+68 D
+69 E
+70 F
+71 G
+72 H
+73 I
+74 J
+75 K
+76 L
+77 M
+78 N
+79 O
+80 P
+81 Q
+82 R
+83 S
+84 T
+85 U
+86 V
+87 W
+88 X
+89 Y
+90 Z
+91 [ lB
+92 \ rs
+93 ] rB
+94 ^ ha
+95 _
+96 ` oq
+97 a
+98 b
+99 c
+100 d
+101 e
+102 f
+103 g
+104 h
+105 i
+106 j
+107 k
+108 l
+109 m
+110 n
+111 o
+112 p
+113 q
+114 r
+115 s
+116 t
+117 u
+118 v
+119 w
+120 x
+121 y
+122 z
+123 { lC
+124 | or bv ba
+125 } rC
+126 ~
+127 hy
+130 'C
+138 /L
+146 vS
+152 :Y
+154 vZ
+156 IJ
+159 sc
+162 'c
+170 /l
+178 vs
+184 :y
+186 vz
+188 ij
+189 r!
+190 r?
+191 Po
+192 `A
+193 'A
+194 ^A
+195 ~A
+196 :A
+197 oA
+198 AE
+199 ,C
+200 `E
+201 'E
+202 ^E
+203 :E
+204 `I
+205 'I
+206 ^I
+207 :I
+208 -D
+209 ~N
+210 `O
+211 'O
+212 ^O
+213 ~O
+214 :O
+215 OE
+216 /O
+217 `U
+218 'U
+219 ^U
+220 :U
+221 'Y
+222 TP
+224 `a
+225 'a
+226 ^a
+227 ~a
+228 :a
+229 oa
+230 ae
+231 ,c
+232 `e
+233 'e
+234 ^e
+235 :e
+236 `i
+237 'i
+238 ^i
+239 :i
+240 Sd
+241 ~n
+242 `o
+243 'o
+244 ^o
+245 ~o
+246 :o
+247 oe
+248 /o
+249 `u
+250 'u
+251 ^u
+252 :u
+253 'y
+254 Tp
+255 ss
diff --git a/contrib/groff/font/devdvi/generate/msam.map b/contrib/groff/font/devdvi/generate/msam.map
index 90006c9..20a22e6 100644
--- a/contrib/groff/font/devdvi/generate/msam.map
+++ b/contrib/groff/font/devdvi/generate/msam.map
@@ -82,7 +82,7 @@
82 gtreqless
83 lesseqqgtr
84 gtreqqless
-85 yen Ye char165
+85 yen Ye
86 Rrightarrow
87 Lleftarrow
88 checkmark OK
@@ -111,7 +111,7 @@
111 ggg
112 ulcorner
113 urcorner
-114 circledR char174 rg
+114 circledR rg
115 circledS
116 pitchfork
117 dotplus
diff --git a/contrib/groff/font/devdvi/generate/tc.map b/contrib/groff/font/devdvi/generate/tc.map
new file mode 100644
index 0000000..6934ca4
--- /dev/null
+++ b/contrib/groff/font/devdvi/generate/tc.map
@@ -0,0 +1,58 @@
+# Map for TC fonts with TS1 encoding.
+24 <-
+25 ->
+36 $ Do
+39 aq
+42 **
+44 ,
+46 .
+47 f/
+48 0
+49 1
+50 2
+51 3
+52 4
+53 5
+54 6
+55 7
+56 8
+57 9
+60 la
+61 \- mi
+62 ra
+79 ci
+94 ua
+95 da
+126 ~ ti
+132 dg
+133 dd
+135 %O
+136 bu
+140 Fn
+151 tm
+162 ct
+163 Po
+164 Cs
+165 Ye
+166 bb
+167 sc
+169 co
+170 Of
+172 no
+174 rg
+175 rn
+176 de
+177 t+-
+178 S2
+179 S3
+181 mc
+182 ps
+183 pc
+185 S1
+186 Om
+188 14
+189 12
+190 34
+191 Eu
+214 tmu
+246 tdi
diff --git a/contrib/groff/font/devdvi/generate/texb.map b/contrib/groff/font/devdvi/generate/texb.map
index b2bcd15..6ea689f 100644
--- a/contrib/groff/font/devdvi/generate/texb.map
+++ b/contrib/groff/font/devdvi/generate/texb.map
@@ -17,19 +17,19 @@
16 .i
17 .j
18 ga
-19 aa char180
+19 aa
20 ah
21 ab
-22 a- char175
+22 a-
23 ao
-24 ac char184
-25 ss char223
-26 ae char230
+24 ac
+25 ss
+26 ae
27 oe
-28 /o char248
-29 AE char198
+28 /o
+29 AE
30 OE
-31 /O char216
+31 /O
33 !
34 rq
35 # sh
@@ -42,7 +42,7 @@
42 *
43 +
44 ,
-45 - hy char173
+45 - hy
46 .
47 / sl
48 0
@@ -57,9 +57,9 @@
57 9
58 :
59 ;
-60 r! char161
+60 r!
61 =
-62 r? char191
+62 r?
63 ?
64 @ at
65 A
@@ -124,4 +124,4 @@
124 em
125 a"
126 a~ ~
-127 ad char168
+127 ad
diff --git a/contrib/groff/font/devdvi/generate/texi.map b/contrib/groff/font/devdvi/generate/texi.map
index 4ca802a..82497eb 100644
--- a/contrib/groff/font/devdvi/generate/texi.map
+++ b/contrib/groff/font/devdvi/generate/texi.map
@@ -17,23 +17,23 @@
16 .i
17 .j
18 ga
-19 aa char180
+19 aa
20 ah
21 ab
-22 a- char175
+22 a-
23 ao
-24 ac char184
-25 ss char223
-26 ae char230
+24 ac
+25 ss
+26 ae
27 oe
-28 /o char248
-29 AE char198
+28 /o
+29 AE
30 OE
-31 /O char216
+31 /O
33 !
34 rq
35 # sh
-36 Po char163
+36 Po
37 %
38 &
39 ' cq
@@ -42,7 +42,7 @@
42 *
43 +
44 ,
-45 - hy char173
+45 - hy
46 .
47 / sl
48 0
@@ -57,9 +57,9 @@
57 9
58 :
59 ;
-60 r! char161
+60 r!
61 =
-62 r? char191
+62 r?
63 ?
64 @ at
65 A
@@ -124,4 +124,4 @@
124 em
125 a"
126 a~ ~
-127 ad char168
+127 ad
diff --git a/contrib/groff/font/devdvi/generate/texmi.map b/contrib/groff/font/devdvi/generate/texmi.map
index 6d01dc4..41b4742 100644
--- a/contrib/groff/font/devdvi/generate/texmi.map
+++ b/contrib/groff/font/devdvi/generate/texmi.map
@@ -9,7 +9,7 @@
19 *i
20 *k
21 *l
-22 *m char181
+22 *m mc
23 *n
24 *c
25 *p
diff --git a/contrib/groff/font/devdvi/generate/texr.map b/contrib/groff/font/devdvi/generate/texr.map
index 7db0e5f..73abe16 100644
--- a/contrib/groff/font/devdvi/generate/texr.map
+++ b/contrib/groff/font/devdvi/generate/texr.map
@@ -17,19 +17,19 @@
16 .i
17 .j
18 ga
-19 aa char180
+19 aa
20 ah
21 ab
-22 a- char175
+22 a-
23 ao
-24 ac char184
-25 ss char223
-26 ae char230
+24 ac
+25 ss
+26 ae
27 oe
-28 /o char248
-29 AE char198
+28 /o
+29 AE
30 OE
-31 /O char216
+31 /O
33 !
34 rq
35 # sh
@@ -42,7 +42,7 @@
42 *
43 + pl
44 ,
-45 - hy char173
+45 - hy
46 .
47 / sl
48 0
@@ -57,9 +57,9 @@
57 9
58 :
59 ;
-60 r! char161
+60 r!
61 = eq
-62 r? char191
+62 r?
63 ?
64 @ at
65 A *A
@@ -124,4 +124,4 @@
124 em
125 a"
126 a~ ~
-127 ad char168
+127 ad
diff --git a/contrib/groff/font/devdvi/generate/texsy.map b/contrib/groff/font/devdvi/generate/texsy.map
index fe98eb2..c22d044 100644
--- a/contrib/groff/font/devdvi/generate/texsy.map
+++ b/contrib/groff/font/devdvi/generate/texsy.map
@@ -1,9 +1,9 @@
0 \- mi
1 md pc
-2 mu char215
+2 mu tmu
3 **
-4 di char247
-6 +- char177
+4 di tdi
+6 +- t+-
7 -+
8 c+
10 c*
@@ -39,7 +39,7 @@
54 slashnot
56 fa
57 te
-58 no char172
+58 no
59 es
60 Re
61 Im
@@ -90,10 +90,10 @@
110 \ rs
112 sr
114 gr
-120 sc char167
+120 sc
121 dg
122 dd
-123 ps char182
+123 ps
124 CL
125 DI
126 HE
diff --git a/contrib/groff/font/devdvi/generate/textt.map b/contrib/groff/font/devdvi/generate/textt.map
index 80e8911..c980496 100644
--- a/contrib/groff/font/devdvi/generate/textt.map
+++ b/contrib/groff/font/devdvi/generate/textt.map
@@ -17,19 +17,19 @@
16 .i
17 .j
18 ga
-19 aa char180
+19 aa
20 ah
21 ab
-22 a- char175
+22 a-
23 ao
-24 ac char184
-25 ss char223
-26 ae char230
+24 ac
+25 ss
+26 ae
27 oe
-28 /o char248
-29 AE char198
+28 /o
+29 AE
30 OE
-31 /O char216
+31 /O
33 !
34 " dq
35 # sh
diff --git a/contrib/groff/font/devhtml/DESC.proto b/contrib/groff/font/devhtml/DESC.proto
index e245441..c3a53a2 100644
--- a/contrib/groff/font/devhtml/DESC.proto
+++ b/contrib/groff/font/devhtml/DESC.proto
@@ -3,7 +3,7 @@ hor 24
vert 40
unitwidth 10
sizes 6 8 10 12 14 16 18 0
-fonts 6 R I B BI C S
+fonts 9 R I B BI CR CI CB CBI S
tcommand
html
postpro post-grohtml
diff --git a/contrib/groff/font/devhtml/Makefile.sub b/contrib/groff/font/devhtml/Makefile.sub
index df56914..8afe037 100644
--- a/contrib/groff/font/devhtml/Makefile.sub
+++ b/contrib/groff/font/devhtml/Makefile.sub
@@ -1,5 +1,5 @@
DEV=html
-PROTOFONTS=R I B BI CR
+PROTOFONTS=R I B BI CR CI CB CBI
FONTS=$(PROTOFONTS) S
DEVFILES=$(FONTS) DESC
CLEANADD=$(FONTS) DESC
diff --git a/contrib/groff/font/devhtml/R.proto b/contrib/groff/font/devhtml/R.proto
index f2c9d24..3af836d 100644
--- a/contrib/groff/font/devhtml/R.proto
+++ b/contrib/groff/font/devhtml/R.proto
@@ -3,27 +3,23 @@ internalname 0
spacewidth 24
charset
! 24 0 0x0021
-" 24 0 0x0022 &quot;
+" 24 0 0x0022 &quot;
dq "
# 24 0 0x0023
sh "
$ 24 0 0x0024
Do "
% 24 0 0x0025
-& 24 0 0x0026 &amp;
+& 24 0 0x0026 &amp;
aq 24 0 0x0027
-' "
( 24 0 0x0028
) 24 0 0x0029
* 24 0 0x002A
+ 24 0 0x002B
pl "
, 24 0 0x002C
-\- 24 0 0x002D
-hy "
+hy 24 0 0x002D
- "
-mi "
-en "
. 24 0 0x002E
/ 24 0 0x002F
sl "
@@ -39,12 +35,10 @@ sl "
9 24 0 0x0039
: 24 0 0x003A
; 24 0 0x003B
-< 24 0 0x003C &lt;
-la "
+< 24 0 0x003C &lt;
= 24 0 0x003D
eq "
-> 24 0 0x003E &gt;
-ra "
+> 24 0 0x003E &gt;
? 24 0 0x003F
@ 24 0 0x0040
at "
@@ -86,7 +80,8 @@ ha "
_ 24 0 0x005F
ru "
ul "
-` 24 0 0x0060
+\` 24 0 0x0060
+ga "
a 24 0 0x0061
b 24 0 0x0062
c 24 0 0x0063
@@ -123,193 +118,274 @@ rC 24 0 0x007D
a~ 24 0 0x007E
~ "
ti "
-r! 24 0 0x00A1 &iexcl;
-char161 "
-ct 24 0 0x00A2 &cent;
-char162 "
-Po 24 0 0x00A3 &pound;
-char163 "
-Cs 24 0 0x00A4 &curren;
-char164 "
-Ye 24 0 0x00A5 &yen;
-char165 "
-bb 24 0 0x00A6 &brvbar;
-char166 "
-sc 24 0 0x00A7 &sect;
-char167 "
-ad 24 0 0x00A8 &uml;
-char168 "
-co 24 0 0x00A9 &copy;
-char169 "
-Of 24 0 0x00AA &ordf;
-char170 "
-Fo 24 0 0x00AB &laquo;
-char171 "
-no 24 0 0x00AC &not;
-char172 "
-rg 24 0 0x00AE &reg;
-char174 "
-a- 24 0 0x00AF &macr;
-char175 "
-de 24 0 0x00B0 &deg;
-char176 "
-+- 24 0 0x00B1 &plusmn;
-char177 "
-S2 24 0 0x00B2 &sup2;
-char178 "
-S3 24 0 0x00B3 &sup3;
-char179 "
-aa 24 0 0x00B4 &acute;
+r! 24 0 0x00A1 &iexcl;
+ct 24 0 0x00A2 &cent;
+Po 24 0 0x00A3 &pound;
+Cs 24 0 0x00A4 &curren;
+Ye 24 0 0x00A5 &yen;
+bb 24 0 0x00A6 &brvbar;
+sc 24 0 0x00A7 &sect;
+ad 24 0 0x00A8 &uml;
+co 24 0 0x00A9 &copy;
+Of 24 0 0x00AA &ordf;
+Fo 24 0 0x00AB &laquo;
+no 24 0 0x00AC &not;
+rg 24 0 0x00AE &reg;
+a- 24 0 0x00AF &macr;
+de 24 0 0x00B0 &deg;
++- 24 0 0x00B1 &plusmn;
+t+- "
+S2 24 0 0x00B2 &sup2;
+S3 24 0 0x00B3 &sup3;
+aa 24 0 0x00B4 &acute;
\' "
-char180 "
-char181 24 0 0x00B5 &micro;
-ps 24 0 0x00B6 &para;
-char182 "
-pc 24 0 0x00B7 &middot;
-char183 "
-ac 24 0 0x00B8 &cedil;
-char184 "
-S1 24 0 0x00B9 &sup1;
-char185 "
-Om 24 0 0x00BA &ordm;
-char186 "
-Fc 24 0 0x00BB &raquo;
-char187 "
-14 24 0 0x00BC &frac14;
-char188 "
-12 24 0 0x00BD &frac12;
-char189 "
-34 24 0 0x00BE &frac34;
-char190 "
-r? 24 0 0x00BF &iquest;
-char191 "
-`A 24 0 0x00C0 &Agrave;
-char192 "
-'A 24 0 0x00C1 &Aacute;
-char193 "
-^A 24 0 0x00C2 &Acirc;
-char194 "
-~A 24 0 0x00C3 &Atilde;
-char195 "
-:A 24 0 0x00C4 &Auml;
-char196 "
-oA 24 0 0x00C5 &Aring;
-char197 "
-AE 24 0 0x00C6 &AElig;
-char198 "
-,C 24 0 0x00C7 &Ccedil;
-char199 "
-`E 24 0 0x00C8 &Egrave;
-char200 "
-'E 24 0 0x00C9 &Eacute;
-char201 "
-^E 24 0 0x00CA &Ecirc;
-char202 "
-:E 24 0 0x00CB &Euml;
-char203 "
-`I 24 0 0x00CC &Igrave;
-char204 "
-'I 24 0 0x00CD &Iacute;
-char205 "
-^I 24 0 0x00CE &Icirc;
-char206 "
-:I 24 0 0x00CF &Iuml;
-char207 "
--D 24 0 0x00D0 &ETH;
-char208 "
-~N 24 0 0x00D1 &Ntilde;
-char209 "
-`O 24 0 0x00D2 &Ograve;
-char210 "
-'O 24 0 0x00D3 &Oacute;
-char211 "
-^O 24 0 0x00D4 &Ocirc;
-char212 "
-~O 24 0 0x00D5 &Otilde;
-char213 "
-:O 24 0 0x00D6 &Ouml;
-char214 "
-mu 24 0 0x00D7 &times;
-char215 "
-/O 24 0 0x00D8 &Oslash;
-char216 "
-`U 24 0 0x00D9 &Ugrave;
-char217 "
-'U 24 0 0x00DA &Uacute;
-char218 "
-^U 24 0 0x00DB &Ucirc;
-char219 "
-:U 24 0 0x00DC &Uuml;
-char220 "
-'Y 24 0 0x00DD &Yacute;
-char221 "
-TP 24 0 0x00DE &THORN;
-char222 "
-ss 24 0 0x00DF &szlig;
-char223 "
-`a 24 0 0x00E0 &agrave;
-char224 "
-'a 24 0 0x00E1 &aacute;
-char225 "
-^a 24 0 0x00E2 &acirc;
-char226 "
-~a 24 0 0x00E3 &atilde;
-char227 "
-:a 24 0 0x00E4 &auml;
-char228 "
-oa 24 0 0x00E5 &aring;
-char229 "
-ae 24 0 0x00E6 &aelig;
-char230 "
-,c 24 0 0x00E7 &ccedil;
-char231 "
-`e 24 0 0x00E8 &egrave;
-char232 "
-'e 24 0 0x00E9 &eacute;
-char233 "
-^e 24 0 0x00EA &ecirc;
-char234 "
-:e 24 0 0x00EB &euml;
-char235 "
-`i 24 0 0x00EC &igrave;
-char236 "
-'i 24 0 0x00ED &iacute;
-char237 "
-^i 24 0 0x00EE &icirc;
-char238 "
-:i 24 0 0x00EF &iuml;
-char239 "
-Sd 24 0 0x00F0 &eth;
-char240 "
-~n 24 0 0x00F1 &ntilde;
-char241 "
-`o 24 0 0x00F2 &ograve;
-char242 "
-'o 24 0 0x00F3 &oacute;
-char243 "
-^o 24 0 0x00F4 &ocirc;
-char244 "
-~o 24 0 0x00F5 &otilde;
-char245 "
-:o 24 0 0x00F6 &ouml;
-char246 "
-di 24 0 0x00F7 &divide;
-char247 "
-/o 24 0 0x00F8 &oslash;
-char248 "
-`u 24 0 0x00F9 &ugrave;
-char249 "
-'u 24 0 0x00FA &uacute;
-char250 "
-^u 24 0 0x00FB &ucirc;
-char251 "
-:u 24 0 0x00FC &uuml;
-char252 "
-'y 24 0 0x00FD &yacute;
-char253 "
-Tp 24 0 0x00FE &thorn;
-char254 "
-:y 24 0 0x00FF &yuml;
-char255 "
-\` 24 0 0x2018 &grave;
-ga "
+mc 24 0 0x00B5 &micro;
+ps 24 0 0x00B6 &para;
+pc 24 0 0x00B7 &middot;
+ac 24 0 0x00B8 &cedil;
+S1 24 0 0x00B9 &sup1;
+Om 24 0 0x00BA &ordm;
+Fc 24 0 0x00BB &raquo;
+14 24 0 0x00BC &frac14;
+12 24 0 0x00BD &frac12;
+34 24 0 0x00BE &frac34;
+r? 24 0 0x00BF &iquest;
+`A 24 0 0x00C0 &Agrave;
+'A 24 0 0x00C1 &Aacute;
+^A 24 0 0x00C2 &Acirc;
+~A 24 0 0x00C3 &Atilde;
+:A 24 0 0x00C4 &Auml;
+oA 24 0 0x00C5 &Aring;
+AE 24 0 0x00C6 &AElig;
+,C 24 0 0x00C7 &Ccedil;
+`E 24 0 0x00C8 &Egrave;
+'E 24 0 0x00C9 &Eacute;
+^E 24 0 0x00CA &Ecirc;
+:E 24 0 0x00CB &Euml;
+`I 24 0 0x00CC &Igrave;
+'I 24 0 0x00CD &Iacute;
+^I 24 0 0x00CE &Icirc;
+:I 24 0 0x00CF &Iuml;
+-D 24 0 0x00D0 &ETH;
+~N 24 0 0x00D1 &Ntilde;
+`O 24 0 0x00D2 &Ograve;
+'O 24 0 0x00D3 &Oacute;
+^O 24 0 0x00D4 &Ocirc;
+~O 24 0 0x00D5 &Otilde;
+:O 24 0 0x00D6 &Ouml;
+mu 24 0 0x00D7 &times;
+tmu "
+/O 24 0 0x00D8 &Oslash;
+`U 24 0 0x00D9 &Ugrave;
+'U 24 0 0x00DA &Uacute;
+^U 24 0 0x00DB &Ucirc;
+:U 24 0 0x00DC &Uuml;
+'Y 24 0 0x00DD &Yacute;
+TP 24 0 0x00DE &THORN;
+ss 24 0 0x00DF &szlig;
+`a 24 0 0x00E0 &agrave;
+'a 24 0 0x00E1 &aacute;
+^a 24 0 0x00E2 &acirc;
+~a 24 0 0x00E3 &atilde;
+:a 24 0 0x00E4 &auml;
+oa 24 0 0x00E5 &aring;
+ae 24 0 0x00E6 &aelig;
+,c 24 0 0x00E7 &ccedil;
+`e 24 0 0x00E8 &egrave;
+'e 24 0 0x00E9 &eacute;
+^e 24 0 0x00EA &ecirc;
+:e 24 0 0x00EB &euml;
+`i 24 0 0x00EC &igrave;
+'i 24 0 0x00ED &iacute;
+^i 24 0 0x00EE &icirc;
+:i 24 0 0x00EF &iuml;
+Sd 24 0 0x00F0 &eth;
+~n 24 0 0x00F1 &ntilde;
+`o 24 0 0x00F2 &ograve;
+'o 24 0 0x00F3 &oacute;
+^o 24 0 0x00F4 &ocirc;
+~o 24 0 0x00F5 &otilde;
+:o 24 0 0x00F6 &ouml;
+di 24 0 0x00F7 &divide;
+tdi "
+/o 24 0 0x00F8 &oslash;
+`u 24 0 0x00F9 &ugrave;
+'u 24 0 0x00FA &uacute;
+^u 24 0 0x00FB &ucirc;
+:u 24 0 0x00FC &uuml;
+'y 24 0 0x00FD &yacute;
+Tp 24 0 0x00FE &thorn;
+:y 24 0 0x00FF &yuml;
+.i 24 0 0x0131 &#305;
+/L 24 0 0x0141 &#321;
+/l 24 0 0x0142 &#322;
+OE 24 0 0x0152 &OElig;
+oe 24 0 0x0153 &oelig;
+vS 24 0 0x0160 &Scaron;
+vs 24 0 0x0161 &scaron;
+:Y 24 0 0x0178 &Yuml;
+vZ 24 0 0x017D &#381;
+vz 24 0 0x017E &#382;
+Fn 24 0 0x0192 &fnof;
+ah 24 0 0x02C7 &#711;
+ab 24 0 0x02D8 &#728;
+a. 24 0 0x02D9 &#729;
+ao 24 0 0x02DA &#730;
+ho 24 0 0x02DB &#731;
+a" 24 0 0x02DD &#733;
+*A 24 0 0x0391 &Alpha;
+*B 24 0 0x0392 &Beta;
+*G 24 0 0x0393 &Gamma;
+*D 24 0 0x0394 &Delta;
+*E 24 0 0x0395 &Epsilon;
+*Z 24 0 0x0396 &Zeta;
+*Y 24 0 0x0397 &Eta;
+*H 24 0 0x0398 &Theta;
+*I 24 0 0x0399 &Iota;
+*K 24 0 0x039A &Kappa;
+*L 24 0 0x039B &Lambda;
+*M 24 0 0x039C &Mu;
+*N 24 0 0x039D &Nu;
+*C 24 0 0x039E &Xi;
+*O 24 0 0x039F &Omicron;
+*P 24 0 0x03A0 &Pi;
+*R 24 0 0x03A1 &Rho;
+*S 24 0 0x03A3 &Sigma;
+*T 24 0 0x03A4 &Tau;
+*U 24 0 0x03A5 &Upsilon;
+*F 24 0 0x03A6 &Phi;
+*X 24 0 0x03A7 &Chi;
+*Q 24 0 0x03A8 &Psi;
+*W 24 0 0x03A9 &Omega;
+*a 24 0 0x03B1 &alpha;
+*b 24 0 0x03B2 &beta;
+*g 24 0 0x03B3 &gamma;
+*d 24 0 0x03B4 &delta;
+*e 24 0 0x03B5 &epsilon;
+*z 24 0 0x03B6 &zeta;
+*y 24 0 0x03B7 &eta;
+*h 24 0 0x03B8 &theta;
+*i 24 0 0x03B9 &iota;
+*k 24 0 0x03BA &kappa;
+*l 24 0 0x03BB &lambda;
+*m 24 0 0x03BC &mu;
+*n 24 0 0x03BD &nu;
+*c 24 0 0x03BE &xi;
+*o 24 0 0x03BF &omicron;
+*p 24 0 0x03C0 &pi;
+*r 24 0 0x03C1 &rho;
+ts 24 0 0x03C2 &sigmaf;
+*s 24 0 0x03C3 &sigma;
+*t 24 0 0x03C4 &tau;
+*u 24 0 0x03C5 &upsilon;
+*f 24 0 0x03C6 &phi;
+*x 24 0 0x03C7 &chi;
+*q 24 0 0x03C8 &psi;
+*w 24 0 0x03C9 &omega;
++h 24 0 0x03D1 &thetasym;
++f 24 0 0x03D5 &#981;
++p 24 0 0x03D6 &piv;
+en 24 0 0x2013 &ndash;
+em 24 0 0x2014 &mdash;
+` 24 0 0x2018 &lsquo;
+oq "
+' 24 0 0x2019 &rsquo;
+cq "
+bq 24 0 0x201A &sbquo;
+lq 24 0 0x201C &ldquo;
+rq 24 0 0x201D &rdquo;
+Bq 24 0 0x201E &bdquo;
+dg 24 0 0x2020 &dagger;
+dd 24 0 0x2021 &Dagger;
+bu 24 0 0x2022 &bull;
+%0 24 0 0x2030 &permil;
+fm 24 0 0x2032 &prime;
+sd 24 0 0x2033 &Prime;
+fo 24 0 0x2039 &lsaquo;
+fc 24 0 0x203A &rsaquo;
+rn 24 0 0x203E &oline;
+f/ 24 0 0x2044 &frasl;
+Eu 24 0 0x20AC &euro;
+eu "
+Im 24 0 0x2111 &image;
+wp 24 0 0x2118 &weierp;
+Re 24 0 0x211C &real;
+tm 24 0 0x2122 &trade;
+Ah 24 0 0x2135 &alefsym;
+<- 24 0 0x2190 &larr;
+ua 24 0 0x2191 &uarr;
+-> 24 0 0x2192 &rarr;
+da 24 0 0x2193 &darr;
+<> 24 0 0x2194 &harr;
+lA 24 0 0x21D0 &lArr;
+uA 24 0 0x21D1 &uArr;
+rA 24 0 0x21D2 &rArr;
+dA 24 0 0x21D3 &dArr;
+hA 24 0 0x21D4 &hArr;
+fa 24 0 0x2200 &forall;
+pd 24 0 0x2202 &part;
+te 24 0 0x2203 &exist;
+es 24 0 0x2205 &empty;
+gr 24 0 0x2207 &nabla;
+mo 24 0 0x2208 &isin;
+nm 24 0 0x2209 &notin;
+st 24 0 0x220B &ni;
+product 24 0 0x220F &prod;
+sum 24 0 0x2211 &sum;
+\- 24 0 0x2212 &minus;
+mi "
+** 24 0 0x2217 &lowast;
+sr 24 0 0x221A &radic;
+pt 24 0 0x221D &prop;
+if 24 0 0x221E &infin;
+/_ 24 0 0x2220 &ang;
+AN 24 0 0x2227 &and;
+OR 24 0 0x2228 &or;
+ca 24 0 0x2229 &cap;
+cu 24 0 0x222A &cup;
+is 24 0 0x222B &int;
+tf 24 0 0x2234 &there4;
+3d "
+ti 24 0 0x223C &sim;
+ap "
+=~ 24 0 0x2245 &cong;
+~~ 24 0 0x2248 &asymp;
+~= "
+!= 24 0 0x2260 &ne;
+== 24 0 0x2261 &equiv;
+<= 24 0 0x2264 &le;
+>= 24 0 0x2265 &ge;
+sb 24 0 0x2282 &sub;
+sp 24 0 0x2283 &sup;
+nb 24 0 0x2284 &nsub;
+ib 24 0 0x2286 &sube;
+ip 24 0 0x2287 &supe;
+c+ 24 0 0x2295 &oplus;
+c* 24 0 0x2297 &otimes;
+pp 24 0 0x22A5 &perp;
+md 24 0 0x22C5 &sdot;
+lc 24 0 0x2308 &lceil;
+rc 24 0 0x2309 &rceil;
+lf 24 0 0x230A &lfloor;
+rf 24 0 0x230B &rfloor;
+la 24 0 0x2329 &lang;
+ra 24 0 0x232A &rang;
+CR 24 0 0x240D &#9229;
+an 24 0 0x2500 &#9472;
+br 24 0 0x2502 &#9474;
+bv "
+rk 24 0 0x251D &#9501;
+lk 24 0 0x2525 &#9509;
+lt 24 0 0x256D &#9581;
+rt 24 0 0x256E &#9582;
+rb 24 0 0x256F &#9583;
+lb 24 0 0x2570 &#9584;
+sq 24 0 0x25A1 &#9633;
+lz 24 0 0x25CA &loz;
+ci 24 0 0x25EF &#9711;
+lh 24 0 0x261C &#9756;
+rh 24 0 0x261E &#9758;
+SP 24 0 0x2660 &spades;
+CL 24 0 0x2663 &clubs;
+HE 24 0 0x2665 &hearts;
+DI 24 0 0x2666 &diams;
diff --git a/contrib/groff/font/devlatin1/R.proto b/contrib/groff/font/devlatin1/R.proto
index a527a9f..db701ee 100644
--- a/contrib/groff/font/devlatin1/R.proto
+++ b/contrib/groff/font/devlatin1/R.proto
@@ -164,194 +164,103 @@ 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 "
+t+- "
S2 24 0 0262
-char178 "
S3 24 0 0263
-char179 "
aa 24 0 0264
-char180 "
*m 24 0 0265
-char181 "
+mc "
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 "
+tmu "
/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 "
+tdi "
/o 24 0 0370
-char248 "
`u 24 0 0371
-char249 "
'u 24 0 0372
-char250 "
^u 24 0 0373
-char251 "
:u 24 0 0374
-char252 "
'y 24 0 0375
-char253 "
Tp 24 0 0376
-char254 "
:y 24 0 0377
-char255 "
diff --git a/contrib/groff/font/devlbp/CB b/contrib/groff/font/devlbp/CB
index 5c34658..720f65a 100644
--- a/contrib/groff/font/devlbp/CB
+++ b/contrib/groff/font/devlbp/CB
@@ -1,4 +1,3 @@
-
name CB
lbpname NcourierB
spacewidth 2200
@@ -25,7 +24,6 @@ cq 2200 0 0x27 -- 0,39 # quoteright
- 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 # "
@@ -117,63 +115,6 @@ 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
@@ -270,3 +211,5 @@ DI 2200 0 0x4 -- 5,169 # diamond "diamond suit"
<< 2200 0 0xae -- 6,77 # "" "much less"
>> 2200 0 0xaf -- 6,78 # "" "much greater"
pc 2200 0 0xfa -- 6,32 # periodcentered
+mc 2200 0 0xe6 -- 8,25 # mu
+t+- 2200 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/CI b/contrib/groff/font/devlbp/CI
index 84b0ac4..1322440 100644
--- a/contrib/groff/font/devlbp/CI
+++ b/contrib/groff/font/devlbp/CI
@@ -1,4 +1,3 @@
-
name CI
lbpname NcourierI
spacewidth 2200
@@ -25,7 +24,6 @@ cq 2200 0 0x27 -- 0,39 # quoteright
- 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 # "
@@ -117,63 +115,6 @@ 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
@@ -270,3 +211,5 @@ DI 2200 0 0x4 -- 5,169 # diamond "diamond suit"
<< 2200 0 0xae -- 6,77 # "" "much less"
>> 2200 0 0xaf -- 6,78 # "" "much greater"
pc 2200 0 0xfa -- 6,32 # periodcentered
+mc 2200 0 0xe6 -- 8,25 # mu
+t+- 2200 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/CR b/contrib/groff/font/devlbp/CR
index ef4a56b..70b43a6 100644
--- a/contrib/groff/font/devlbp/CR
+++ b/contrib/groff/font/devlbp/CR
@@ -1,4 +1,3 @@
-
name CR
lbpname NcourierR
spacewidth 2200
@@ -25,7 +24,6 @@ cq 2200 0 0x27 -- 0,39 # quoteright
- 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 # "
@@ -117,63 +115,6 @@ 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
@@ -270,3 +211,5 @@ DI 2200 0 0x4 -- 5,169 # diamond "diamond suit"
<< 2200 0 0xae -- 6,77 # "" "much less"
>> 2200 0 0xaf -- 6,78 # "" "much greater"
pc 2200 0 0xfa -- 6,32 # periodcentered
+mc 2200 0 0xe6 -- 8,25 # mu
+t+- 2200 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/EB b/contrib/groff/font/devlbp/EB
index 50c6f71..3c02e90 100644
--- a/contrib/groff/font/devlbp/EB
+++ b/contrib/groff/font/devlbp/EB
@@ -1,4 +1,3 @@
-
name EB
lbpname NeliteB
spacewidth 1900
@@ -25,7 +24,6 @@ cq 1900 0 0x27 -- 0,39 # quoteright
- 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 # "
@@ -117,63 +115,6 @@ 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
@@ -270,3 +211,5 @@ DI 1900 0 0x4 -- 5,169 # diamond "diamond suit"
<< 1900 0 0xae -- 6,77 # "" "much less"
>> 1900 0 0xaf -- 6,78 # "" "much greater"
pc 1900 0 0xfa -- 6,32 # periodcentered
+mc 1900 0 0xe6 -- 8,25 # mu
+t+- 1900 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/EI b/contrib/groff/font/devlbp/EI
index 364cea6..95c85af 100644
--- a/contrib/groff/font/devlbp/EI
+++ b/contrib/groff/font/devlbp/EI
@@ -1,4 +1,3 @@
-
name EI
lbpname NeliteI
spacewidth 1900
@@ -25,7 +24,6 @@ cq 1900 0 0x27 -- 0,39 # quoteright
- 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 # "
@@ -117,63 +115,6 @@ 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
@@ -270,3 +211,5 @@ DI 1900 0 0x4 -- 5,169 # diamond "diamond suit"
<< 1900 0 0xae -- 6,77 # "" "much less"
>> 1900 0 0xaf -- 6,78 # "" "much greater"
pc 1900 0 0xfa -- 6,32 # periodcentered
+mc 1900 0 0xe6 -- 8,25 # mu
+t+- 1900 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/ER b/contrib/groff/font/devlbp/ER
index f2734cc..677ed5e 100644
--- a/contrib/groff/font/devlbp/ER
+++ b/contrib/groff/font/devlbp/ER
@@ -1,4 +1,3 @@
-
name ER
lbpname NeliteR
spacewidth 1900
@@ -25,7 +24,6 @@ cq 1900 0 0x27 -- 0,39 # quoteright
- 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 # "
@@ -117,63 +115,6 @@ 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
@@ -270,3 +211,5 @@ DI 1900 0 0x4 -- 5,169 # diamond "diamond suit"
<< 1900 0 0xae -- 6,77 # "" "much less"
>> 1900 0 0xaf -- 6,78 # "" "much greater"
pc 1900 0 0xfa -- 6,32 # periodcentered
+mc 1900 0 0xe6 -- 8,25 # mu
+t+- 1900 0 0xf1 -- 6,1 # plusminus
diff --git a/contrib/groff/font/devlbp/HB b/contrib/groff/font/devlbp/HB
index 1ad7b4e..5292e0e 100644
--- a/contrib/groff/font/devlbp/HB
+++ b/contrib/groff/font/devlbp/HB
@@ -33,7 +33,6 @@ cq 793 2 0x27 0,39 # quoteright
, 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 # "
@@ -125,101 +124,6 @@ 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"
@@ -489,3 +393,7 @@ wp 1853 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 1853 0 0x3e0 6,95 # lozenge
an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 927 0 0xfa 6,32 # periodcentered
+mc 2037 0 0xe6 8,25 # mu
+t+- 1947 0 0xf1 6,1 # plusminus
+tmu 2027 0 0x3b4 8,39 # multiply
+tdi 1947 0 0x3b8 6,8 # divide "division sign"
diff --git a/contrib/groff/font/devlbp/HBI b/contrib/groff/font/devlbp/HBI
index 30fa995..6094be2 100644
--- a/contrib/groff/font/devlbp/HBI
+++ b/contrib/groff/font/devlbp/HBI
@@ -34,7 +34,6 @@ cq 793 2 0x27 0,39 # quoteright
, 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 # "
@@ -126,101 +125,6 @@ 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"
@@ -490,3 +394,7 @@ wp 1853 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 1853 0 0x3e0 6,95 # lozenge
an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 927 0 0xfa 6,32 # periodcentered
+mc 2037 0 0xe6 8,25 # mu
+t+- 1947 0 0xf1 6,1 # plusminus
+tmu 2027 0 0x3b4 8,39 # multiply
+tdi 1947 0 0x3b8 6,8 # divide "division sign"
diff --git a/contrib/groff/font/devlbp/HI b/contrib/groff/font/devlbp/HI
index 59201e2..6d87cf5 100644
--- a/contrib/groff/font/devlbp/HI
+++ b/contrib/groff/font/devlbp/HI
@@ -34,7 +34,6 @@ cq 637 2 0x27 0,39 # quoteright
, 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 # "
@@ -126,101 +125,6 @@ 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"
@@ -490,3 +394,7 @@ wp 1853 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 1853 0 0x3e0 6,95 # lozenge
an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 927 0 0xfa 6,32 # periodcentered
+mc 1853 0 0xe6 8,25 # mu
+t+- 1947 0 0xf1 6,1 # plusminus
+tmu 1893 0 0x3b4 8,39 # multiply
+tdi 1947 0 0x3b8 6,8 # divide "division sign"
diff --git a/contrib/groff/font/devlbp/HNB b/contrib/groff/font/devlbp/HNB
index c5d8d33..28ae9a7 100644
--- a/contrib/groff/font/devlbp/HNB
+++ b/contrib/groff/font/devlbp/HNB
@@ -33,7 +33,6 @@ cq 195 2 0x27 0,39 # quoteright
, 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 # "
@@ -125,101 +124,6 @@ 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"
@@ -489,3 +393,7 @@ wp 456 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 456 0 0x3e0 6,95 # lozenge
an 820 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 240 0 0xfa 6,32 # periodcentered
+mc 501 0 0xe6 8,25 # mu
+t+- 479 0 0xf1 6,1 # plusminus
+tmu 499 0 0x3b4 8,39 # multiply
+tdi 479 0 0x3b8 6,8 # divide "division sign"
diff --git a/contrib/groff/font/devlbp/HNBI b/contrib/groff/font/devlbp/HNBI
index 14bd4e3..360b906 100644
--- a/contrib/groff/font/devlbp/HNBI
+++ b/contrib/groff/font/devlbp/HNBI
@@ -33,7 +33,6 @@ cq 195 2 0x27 0,39 # quoteright
, 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 # "
@@ -125,101 +124,6 @@ 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"
@@ -489,3 +393,7 @@ wp 456 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 456 0 0x3e0 6,95 # lozenge
an 820 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 240 0 0xfa 6,32 # periodcentered
+mc 501 0 0xe6 8,25 # mu
+t+- 479 0 0xf1 6,1 # plusminus
+tmu 499 0 0x3b4 8,39 # multiply
+tdi 479 0 0x3b8 6,8 # divide "division sign"
diff --git a/contrib/groff/font/devlbp/HNI b/contrib/groff/font/devlbp/HNI
index 578faf7..1cad306 100644
--- a/contrib/groff/font/devlbp/HNI
+++ b/contrib/groff/font/devlbp/HNI
@@ -33,7 +33,6 @@ cq 157 2 0x27 0,39 # quoteright
, 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 # "
@@ -125,101 +124,6 @@ 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"
@@ -489,3 +393,7 @@ wp 456 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 456 0 0x3e0 6,95 # lozenge
an 820 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 240 0 0xfa 6,32 # periodcentered
+mc 456 0 0xe6 8,25 # mu
+t+- 479 0 0xf1 6,1 # plusminus
+tmu 466 0 0x3b4 8,39 # multiply
+tdi 479 0 0x3b8 6,8 # divide "division sign"
diff --git a/contrib/groff/font/devlbp/HNR b/contrib/groff/font/devlbp/HNR
index d0e78af..d09bc19 100644
--- a/contrib/groff/font/devlbp/HNR
+++ b/contrib/groff/font/devlbp/HNR
@@ -33,7 +33,6 @@ cq 157 2 0x27 0,39 # quoteright
, 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 # "
@@ -125,101 +124,6 @@ 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"
@@ -489,3 +393,7 @@ wp 456 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 456 0 0x3e0 6,95 # lozenge
an 820 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 240 0 0xfa 6,32 # periodcentered
+mc 456 0 0xe6 8,25 # mu
+t+- 479 0 0xf1 6,1 # plusminus
+tmu 466 0 0x3b4 8,39 # multiply
+tdi 479 0 0x3b8 6,8 # divide "division sign"
diff --git a/contrib/groff/font/devlbp/HR b/contrib/groff/font/devlbp/HR
index 81cfa96..8bcdf3e 100644
--- a/contrib/groff/font/devlbp/HR
+++ b/contrib/groff/font/devlbp/HR
@@ -33,7 +33,6 @@ cq 637 2 0x27 0,39 # quoteright
, 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 # "
@@ -125,101 +124,6 @@ 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"
@@ -489,3 +393,7 @@ wp 1853 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 1853 0 0x3e0 6,95 # lozenge
an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 927 0 0xfa 6,32 # periodcentered
+mc 1853 0 0xe6 8,25 # mu
+t+- 1947 0 0xf1 6,1 # plusminus
+tmu 1893 0 0x3b4 8,39 # multiply
+tdi 1947 0 0x3b8 6,8 # divide "division sign"
diff --git a/contrib/groff/font/devlbp/Makefile.sub b/contrib/groff/font/devlbp/Makefile.sub
index 6959b25..16335d3 100644
--- a/contrib/groff/font/devlbp/Makefile.sub
+++ b/contrib/groff/font/devlbp/Makefile.sub
@@ -2,7 +2,10 @@ DEV=lbp
LBPPRINT=$(PSPRINT)
DEVFILES=DESC \
HB HBI HI HR \
- TB TBI TI TR
+ HNB HNBI HNI HNR \
+ TB TBI TI TR \
+ CR CB CI \
+ ER EB EI
CLEANADD=DESC
diff --git a/contrib/groff/font/devlbp/TB b/contrib/groff/font/devlbp/TB
index 70a09f2..5826899 100644
--- a/contrib/groff/font/devlbp/TB
+++ b/contrib/groff/font/devlbp/TB
@@ -34,7 +34,6 @@ cq 927 2 0x27 0,39 # quoteright
- 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 # "
@@ -127,101 +126,6 @@ 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"
@@ -491,6 +395,10 @@ wp 1667 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 1667 0 0x3e0 6,95 # lozenge
an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 833 0 0xfa 6,32 # periodcentered
+mc 1853 0 0xe6 8,25 # mu
+t+- 1900 0 0xf1 6,1 # plusminus
+tmu 1633 0 0x3b4 8,39 # multiply
+tdi 1900 0 0x3b8 6,8 # divide "division sign"
kernpairs
V A -120
W A -96
diff --git a/contrib/groff/font/devlbp/TBI b/contrib/groff/font/devlbp/TBI
index 1c2f8fe..d4fd3ca 100644
--- a/contrib/groff/font/devlbp/TBI
+++ b/contrib/groff/font/devlbp/TBI
@@ -34,7 +34,6 @@ cq 927 2 0x27 0,39 # quoteright
- 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 # "
@@ -127,101 +126,6 @@ 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"
@@ -491,3 +395,7 @@ wp 1667 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 1667 0 0x3e0 6,95 # lozenge
an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 833 0 0xfa 6,32 # periodcentered
+mc 1920 0 0xe6 8,25 # mu
+t+- 1900 0 0xf1 6,1 # plusminus
+tmu 1633 0 0x3b4 8,39 # multiply
+tdi 1900 0 0x3b8 6,8 # divide "division sign"
diff --git a/contrib/groff/font/devlbp/TI b/contrib/groff/font/devlbp/TI
index 7de08bc..e41fa35 100644
--- a/contrib/groff/font/devlbp/TI
+++ b/contrib/groff/font/devlbp/TI
@@ -34,7 +34,6 @@ cq 713 2 0x27 0,39 # quoteright
- 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 # "
@@ -127,101 +126,6 @@ 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"
@@ -491,6 +395,10 @@ wp 1667 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 1667 0 0x3e0 6,95 # lozenge
an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 833 0 0xfa 6,32 # periodcentered
+mc 1667 0 0xe6 8,25 # mu
+t+- 2250 0 0xf1 6,1 # plusminus
+tmu 1723 0 0x3b4 8,39 # multiply
+tdi 2250 0 0x3b8 6,8 # divide "division sign"
kernpairs
V A -168
W A -96
diff --git a/contrib/groff/font/devlbp/TR b/contrib/groff/font/devlbp/TR
index 9a641df..ceeb2dc 100644
--- a/contrib/groff/font/devlbp/TR
+++ b/contrib/groff/font/devlbp/TR
@@ -34,7 +34,6 @@ cq 600 2 0x27 0,39 # quoteright
- 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 # "
@@ -126,101 +125,6 @@ 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"
@@ -490,6 +394,10 @@ wp 1667 0 0x3c3 6,53 # weierstrass "Weierstrass p"
lz 1667 0 0x3e0 6,95 # lozenge
an 3333 0 0x3be 3,8 # arrowhorizex "horizontal arrow extension"
pc 833 0 0xfa 6,32 # periodcentered
+mc 1667 0 0xe6 8,25 # mu
+t+- 1880 0 0xf1 6,1 # plusminus
+tmu 1723 0 0x3b4 8,39 # multiply
+tdi 1880 0 0x3b8 6,8 # divide "division sign"
kernpairs
F A -48
P A -48
diff --git a/contrib/groff/font/devlj4/ALBB b/contrib/groff/font/devlj4/ALBB
index 9c0c71f..41f3ad1 100644
--- a/contrib/groff/font/devlj4/ALBB
+++ b/contrib/groff/font/devlj4/ALBB
@@ -349,19 +349,16 @@ K W -486
K U -486
L cq -975
L ' -975
-T char173 -3414
T hy -3414
T - -3414
T en -3414
T em -3414
A cq -1461
A ' -1461
-char173 T -3414
hy T -3414
- T -3414
en T -3414
em T -3414
-Y char173 -1950
Y hy -1950
Y - -1950
Y en -1950
@@ -374,7 +371,6 @@ b cq -486
b ' -486
a cq -486
a ' -486
-V char173 -1461
V hy -1461
V - -1461
V en -1461
@@ -385,45 +381,37 @@ m cq -486
m ' -486
R cq -975
R ' -975
-W char173 -975
W hy -975
W - -975
W en -975
W em -975
cq d -1950
' d -1950
-L char173 -486
L hy -486
L - -486
L en -486
L em -486
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -975
A hy -975
A - -975
A en -975
A em -975
-K char173 -975
K hy -975
K - -975
K en -975
K em -975
cq s -975
' s -975
-char173 X -1461
hy X -1461
- X -1461
-char173 A -975
hy A -975
- A -975
en X -1461
en A -975
em X -1461
-R char173 -975
R hy -975
R - -975
R en -975
@@ -434,12 +422,10 @@ k cq -486
k ' -486
O cq -486
O ' -486
-Z char173 -486
Z hy -486
Z - -486
Z en -486
Z em -486
-k char173 -486
k hy -486
k - -486
k en -486
@@ -461,8 +447,7 @@ cq 9759,20130 2 51751
* 17565,20130 2 3626
+ 25857,15465 0 3627
, 9759,5025,3885 0 3628
-char173 9759,10515 0 3629
-hy "
+hy 9759,10515 0 3629
- "
. 9759,5430,300 0 3630
sl 13173,20130 2 3631
@@ -554,198 +539,109 @@ ba 13173,19758,6588 3 3708
rC 13173,20130,6075 3 3709
} "
ti 26346,9435 0 51876
-char192 20490,25170 2 3776
-`A "
-char194 20490,25170 2 3778
-^A "
-char200 16101,25170 2 3784
-`E "
-char202 16101,25170 2 3786
-^E "
-char203 16101,26130 2 3787
-:E "
-char206 10245,25170 2 3790
-^I "
-char207 10245,26130 2 3791
-:I "
-char180 17565,20250 2 3764
-aa "
+`A 20490,25170 2 3776
+^A 20490,25170 2 3778
+`E 16101,25170 2 3784
+^E 16101,25170 2 3786
+:E 16101,26130 2 3787
+^I 10245,25170 2 3790
+:I 10245,26130 2 3791
+aa 17565,20250 2 3764
ga 17565,20250 2 3680
a^ 17565,20250 2 3678
^ "
-char168 17565,20190 2 3752
-ad "
+ad 17565,20190 2 3752
a~ 17565,19035 2 3710
~ "
-char217 21468,25170,300 2 3801
-`U "
-char219 21468,25170,300 2 3803
-^U "
-char221 17565,25170 2 3805
-'Y "
-char253 14637,20250,4365 3 3837
-'y "
-char176 14637,20430 2 3760
-de "
-char199 19029,20430,6270 3 3783
-,C "
-char231 12684,14310,6000 1 3815
-,c "
-char209 22443,25101 2 3793
-~N "
-char241 15612,19035 2 3825
-~n "
-char161 9759,14376,6054 1 3745
-r! "
-char191 12684,14526,6204 1 3775
-r? "
-char164 17565,15834 0 3748
-Cs "
-char163 17565,20430 2 3747
-Po "
-char165 17565,20130 2 3749
-Ye "
-char167 17565,20430,4365 3 3751
-sc "
+`U 21468,25170,300 2 3801
+^U 21468,25170,300 2 3803
+'Y 17565,25170 2 3805
+'y 14637,20250,4365 3 3837
+de 14637,20430 2 3760
+,C 19029,20430,6270 3 3783
+,c 12684,14310,6000 1 3815
+~N 22443,25101 2 3793
+~n 15612,19035 2 3825
+r! 9759,14376,6054 1 3745
+r? 12684,14526,6204 1 3775
+Cs 17565,15834 0 3748
+Po 17565,20430 2 3747
+Ye 17565,20130 2 3749
+sc 17565,20430,4365 3 3751
Fn 17565,20130 2 51871
-char162 17565,19911 2 3746
-ct "
-char226 13173,20250,300 2 3810
-^a "
-char234 13662,20250,300 2 3818
-^e "
-char244 16101,20250,300 2 3828
-^o "
-char251 15612,20250,300 2 3835
-^u "
-char225 13173,20250,300 2 3809
-'a "
-char233 13662,20250,300 2 3817
-'e "
-char243 16101,20250,300 2 3827
-'o "
-char250 15612,20250,300 2 3834
-'u "
-char224 13173,20250,300 2 3808
-`a "
-char232 13662,20250,300 2 3816
-`e "
-char242 16101,20250,300 2 3826
-`o "
-char249 15612,20250,300 2 3833
-`u "
-char228 13173,20190,300 2 3812
-:a "
-char235 13662,20190,300 2 3819
-:e "
-char246 16101,20190,300 2 3830
-:o "
-char252 15612,20190,300 2 3836
-:u "
-char197 20490,26508 2 3781
-oA "
-char238 7806,20250 2 3822
-^i "
-char216 23907,20601,366 2 3800
-/O "
-char198 26835,20130 2 3782
-AE "
-char229 13173,20655,300 2 3813
-oa "
-char237 7806,20250 2 3821
-'i "
-char248 16101,14373,330 0 3832
-/o "
-char230 20004,14310,300 0 3814
-ae "
-char196 20490,26130 2 3780
-:A "
-char236 7806,20250 2 3820
-`i "
-char214 23907,26130,300 2 3798
-:O "
-char220 21468,26130,300 2 3804
-:U "
-char201 16101,25170 2 3785
-'E "
-char239 7806,20190 2 3823
-:i "
-char223 17076,20130,300 2 3807
-ss "
-char212 23907,25170,300 2 3796
-^O "
-char193 20490,25170 2 3777
-'A "
-char195 20490,25101 2 3779
-~A "
-char227 13173,19035,300 2 3811
-~a "
-char208 21468,20130 2 3792
--D "
-char240 16101,20025,300 2 3824
-Sd "
-char205 10245,25170 2 3789
-'I "
-char204 10245,25170 2 3788
-`I "
-char211 23907,25170,300 2 3795
-'O "
-char210 23907,25170,300 2 3794
-`O "
-char213 23907,25101,300 2 3797
-~O "
-char245 16101,19035,300 2 3829
-~o "
+ct 17565,19911 2 3746
+^a 13173,20250,300 2 3810
+^e 13662,20250,300 2 3818
+^o 16101,20250,300 2 3828
+^u 15612,20250,300 2 3835
+'a 13173,20250,300 2 3809
+'e 13662,20250,300 2 3817
+'o 16101,20250,300 2 3827
+'u 15612,20250,300 2 3834
+`a 13173,20250,300 2 3808
+`e 13662,20250,300 2 3816
+`o 16101,20250,300 2 3826
+`u 15612,20250,300 2 3833
+:a 13173,20190,300 2 3812
+:e 13662,20190,300 2 3819
+:o 16101,20190,300 2 3830
+:u 15612,20190,300 2 3836
+oA 20490,26508 2 3781
+^i 7806,20250 2 3822
+/O 23907,20601,366 2 3800
+AE 26835,20130 2 3782
+oa 13173,20655,300 2 3813
+'i 7806,20250 2 3821
+/o 16101,14373,330 0 3832
+ae 20004,14310,300 0 3814
+:A 20490,26130 2 3780
+`i 7806,20250 2 3820
+:O 23907,26130,300 2 3798
+:U 21468,26130,300 2 3804
+'E 16101,25170 2 3785
+:i 7806,20190 2 3823
+ss 17076,20130,300 2 3807
+^O 23907,25170,300 2 3796
+'A 20490,25170 2 3777
+~A 20490,25101 2 3779
+~a 13173,19035,300 2 3811
+-D 21468,20130 2 3792
+Sd 16101,20025,300 2 3824
+'I 10245,25170 2 3789
+`I 10245,25170 2 3788
+'O 23907,25170,300 2 3795
+`O 23907,25170,300 2 3794
+~O 23907,25101,300 2 3797
+~o 16101,19035,300 2 3829
vS 14148,25170,300 2 51795
vs 11220,20250,300 2 51827
-char218 21468,25170,300 2 3802
-'U "
+'U 21468,25170,300 2 3802
:Y 17565,26130 2 51801
-char255 14637,20190,4365 3 3839
-:y "
-char222 17076,20130 2 3806
-TP "
-char254 15612,20025,4365 3 3838
-Tp "
-char181 15612,12630,4680 1 3765
-char182 17565,19635,4200 3 3766
-ps "
-char190 25857,20430,300 2 3774
-34 "
+:y 14637,20190,4365 3 3839
+TP 17076,20130 2 3806
+Tp 15612,20025,4365 3 3838
+mc 15612,12630,4680 1 3765
+ps 17565,19635,4200 3 3766
+34 25857,20430,300 2 3774
\- 25857,10380 0 51757
-char188 25857,20430,300 2 3772
-14 "
-char189 25857,20430,300 2 3773
-12 "
-char170 12198,20430 2 3754
-Of "
-char186 12198,20430 2 3770
-Om "
-char171 13662,12450 0 3755
-Fo "
-char187 13662,12450 0 3771
-Fc "
-char177 25857,15465,6855 1 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 25857,12210 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 12198,20340 2 3762
-S2 "
-char179 12198,20130 2 3763
-S3 "
-char184 17565,0,6000 1 3768
-ac "
-char185 12198,20340 2 3769
-S1 "
-char215 25857,15282 0 3799
-char247 25857,16380,885 0 3831
-char183 9759,13080 0 3767
-pc "
+14 25857,20430,300 2 3772
+12 25857,20430,300 2 3773
+Of 12198,20430 2 3754
+Om 12198,20430 2 3770
+Fo 13662,12450 0 3755
+Fc 13662,12450 0 3771
+t+- 25857,15465,6855 1 3761
+bb 13173,19083,5916 3 3750
+co 13173,19635 2 3753
+no 25857,12210 0 3756
+rg 13173,19635 2 3758
+S2 12198,20340 2 3762
+S3 12198,20130 2 3763
+ac 17565,0,6000 1 3768
+S1 12198,20340 2 3769
+tmu 25857,15282 0 3799
+tdi 25857,16380,885 0 3831
+pc 9759,13080 0 3767
fm 9759,20130 2 51873
sd 15612,20130 2 51874
dg 17565,20130,4365 3 51755
@@ -773,8 +669,7 @@ Fl 25371,20130 2 51885
ij 15612,20940,4365 3 51958
bq 9759,5025,3885 0 51756
%0 33663,20430,300 2 51901
-char175 17565,19020 2 3759
-a- "
+a- 17565,19020 2 3759
ab 17565,19260 2 51926
a. 17565,20190 2 51927
oe 23418,14310,300 0 51823
diff --git a/contrib/groff/font/devlj4/ALBR b/contrib/groff/font/devlj4/ALBR
index 684f29f..5931c0d6 100644
--- a/contrib/groff/font/devlj4/ALBR
+++ b/contrib/groff/font/devlj4/ALBR
@@ -363,19 +363,16 @@ K W -486
K U -486
L cq -2925
L ' -2925
-T char173 -3903
T hy -3903
T - -3903
T en -3903
T em -3903
A cq -2925
A ' -2925
-char173 T -3903
hy T -3903
- T -3903
en T -3903
em T -3903
-Y char173 -1950
Y hy -1950
Y - -1950
Y en -1950
@@ -388,7 +385,6 @@ b cq -1950
b ' -1950
a cq -1461
a ' -1461
-V char173 -1950
V hy -1950
V - -1950
V en -1950
@@ -401,43 +397,35 @@ m cq -1950
m ' -1950
R cq -975
R ' -975
-W char173 -1461
W hy -1461
W - -1461
W en -1461
W em -1461
cq d -1950
' d -1950
-L char173 -975
L hy -975
L - -975
L en -975
L em -975
-X char173 -975
X hy -975
X - -975
X en -975
X em -975
-A char173 -1950
A hy -1950
A - -1950
A en -1950
A em -1950
-K char173 -975
K hy -975
K - -975
K en -975
K em -975
-char173 X -975
hy X -975
- X -975
-char173 A -1950
hy A -1950
- A -1950
en X -975
en A -1950
em X -975
-R char173 -975
R hy -975
R - -975
R en -975
@@ -449,12 +437,10 @@ k cq -486
k ' -486
O cq -486
O ' -486
-Z char173 -486
Z hy -486
Z - -486
Z en -486
Z em -486
-k char173 -486
k hy -486
k - -486
k en -486
@@ -476,8 +462,7 @@ cq 8295,20130 2 51751
* 16587,20130 2 3626
+ 24882,15420,60 0 3627
, 8295,3945,5055 1 3628
-char173 8295,9795 0 3629
-hy "
+hy 8295,9795 0 3629
- "
. 8295,4080,300 0 3630
sl 11709,20130 2 3631
@@ -569,198 +554,109 @@ ba 13173,19758,6588 3 3708
rC 11709,20130,6075 3 3709
} "
ti 26346,8952 0 51876
-char192 20979,24960 2 3776
-`A "
-char194 20979,24960 2 3778
-^A "
-char200 14637,24960 2 3784
-`E "
-char202 14637,24960 2 3786
-^E "
-char203 14637,25020 2 3787
-:E "
-char206 8295,24960 2 3790
-^I "
-char207 8295,25020 2 3791
-:I "
-char180 16587,19785 2 3764
-aa "
+`A 20979,24960 2 3776
+^A 20979,24960 2 3778
+`E 14637,24960 2 3784
+^E 14637,24960 2 3786
+:E 14637,25020 2 3787
+^I 8295,24960 2 3790
+:I 8295,25020 2 3791
+aa 16587,19785 2 3764
ga 16587,19785 2 3680
a^ 16587,19785 2 3678
^ "
-char168 16587,19140 2 3752
-ad "
+ad 16587,19140 2 3752
a~ 16587,18507 2 3710
~ "
-char217 20979,24960,300 2 3801
-`U "
-char219 20979,24960,300 2 3803
-^U "
-char221 17076,24960 2 3805
-'Y "
-char253 13173,19785,4365 3 3837
-'y "
-char176 13662,20430 2 3760
-de "
-char199 18051,20430,6330 3 3783
-,C "
-char231 12198,14310,6006 1 3815
-,c "
-char209 21468,24783 2 3793
-~N "
-char241 14148,18507 2 3825
-~n "
-char161 8295,14346,6084 1 3745
-r! "
-char191 12198,14496,6234 1 3775
-r? "
-char164 16587,15684 0 3748
-Cs "
-char163 16587,20430 2 3747
-Po "
-char165 16587,20130 2 3749
-Ye "
-char167 16587,20430,4365 3 3751
-sc "
+`U 20979,24960,300 2 3801
+^U 20979,24960,300 2 3803
+'Y 17076,24960 2 3805
+'y 13173,19785,4365 3 3837
+de 13662,20430 2 3760
+,C 18051,20430,6330 3 3783
+,c 12198,14310,6006 1 3815
+~N 21468,24783 2 3793
+~n 14148,18507 2 3825
+r! 8295,14346,6084 1 3745
+r? 12198,14496,6234 1 3775
+Cs 16587,15684 0 3748
+Po 16587,20430 2 3747
+Ye 16587,20130 2 3749
+sc 16587,20430,4365 3 3751
Fn 16587,20130 2 51871
-char162 16587,19968 2 3746
-ct "
-char226 12198,19785,300 2 3810
-^a "
-char234 12684,19785,300 2 3818
-^e "
-char244 14637,19785,300 2 3828
-^o "
-char251 14148,19785,300 2 3835
-^u "
-char225 12198,19785,300 2 3809
-'a "
-char233 12684,19785,300 2 3817
-'e "
-char243 14637,19785,300 2 3827
-'o "
-char250 14148,19785,300 2 3834
-'u "
-char224 12198,19785,300 2 3808
-`a "
-char232 12684,19785,300 2 3816
-`e "
-char242 14637,19785,300 2 3826
-`o "
-char249 14148,19785,300 2 3833
-`u "
-char228 12198,19140,300 2 3812
-:a "
-char235 12684,19140,300 2 3819
-:e "
-char246 14637,19140,300 2 3830
-:o "
-char252 14148,19140,300 2 3836
-:u "
-char197 20979,26154 2 3781
-oA "
-char238 6342,19785 2 3822
-^i "
-char216 22932,20454,300 2 3800
-/O "
-char198 25857,20130 2 3782
-AE "
-char229 12198,20160,300 2 3813
-oa "
-char237 6342,19785 2 3821
-'i "
-char248 14637,14316,300 0 3832
-/o "
-char230 19515,14310,300 0 3814
-ae "
-char196 20979,25020 2 3780
-:A "
-char236 6342,19785 2 3820
-`i "
-char214 22932,25020,300 2 3798
-:O "
-char220 20979,25020,300 2 3804
-:U "
-char201 14637,24960 2 3785
-'E "
-char239 6342,19140 2 3823
-:i "
-char223 15612,20130,300 2 3807
-ss "
-char212 22932,24960,300 2 3796
-^O "
-char193 20979,24960 2 3777
-'A "
-char195 20979,24783 2 3779
-~A "
-char227 12198,18507,300 2 3811
-~a "
-char208 20004,20130 2 3792
--D "
-char240 14637,20025,300 2 3824
-Sd "
-char205 8295,24960 2 3789
-'I "
-char204 8295,24960 2 3788
-`I "
-char211 22932,24960,300 2 3795
-'O "
-char210 22932,24960,300 2 3794
-`O "
-char213 22932,24783,300 2 3797
-~O "
-char245 14637,18507,300 2 3829
-~o "
+ct 16587,19968 2 3746
+^a 12198,19785,300 2 3810
+^e 12684,19785,300 2 3818
+^o 14637,19785,300 2 3828
+^u 14148,19785,300 2 3835
+'a 12198,19785,300 2 3809
+'e 12684,19785,300 2 3817
+'o 14637,19785,300 2 3827
+'u 14148,19785,300 2 3834
+`a 12198,19785,300 2 3808
+`e 12684,19785,300 2 3816
+`o 14637,19785,300 2 3826
+`u 14148,19785,300 2 3833
+:a 12198,19140,300 2 3812
+:e 12684,19140,300 2 3819
+:o 14637,19140,300 2 3830
+:u 14148,19140,300 2 3836
+oA 20979,26154 2 3781
+^i 6342,19785 2 3822
+/O 22932,20454,300 2 3800
+AE 25857,20130 2 3782
+oa 12198,20160,300 2 3813
+'i 6342,19785 2 3821
+/o 14637,14316,300 0 3832
+ae 19515,14310,300 0 3814
+:A 20979,25020 2 3780
+`i 6342,19785 2 3820
+:O 22932,25020,300 2 3798
+:U 20979,25020,300 2 3804
+'E 14637,24960 2 3785
+:i 6342,19140 2 3823
+ss 15612,20130,300 2 3807
+^O 22932,24960,300 2 3796
+'A 20979,24960 2 3777
+~A 20979,24783 2 3779
+~a 12198,18507,300 2 3811
+-D 20004,20130 2 3792
+Sd 14637,20025,300 2 3824
+'I 8295,24960 2 3789
+`I 8295,24960 2 3788
+'O 22932,24960,300 2 3795
+`O 22932,24960,300 2 3794
+~O 22932,24783,300 2 3797
+~o 14637,18507,300 2 3829
vS 13662,24960,300 2 51795
vs 9270,19785,300 2 51827
-char218 20979,24960,300 2 3802
-'U "
+'U 20979,24960,300 2 3802
:Y 17076,25020 2 51801
-char255 13173,19140,4365 3 3839
-:y "
-char222 13662,20130 2 3806
-TP "
-char254 14637,20025,4365 3 3838
-Tp "
-char181 14637,12630,4350 1 3765
-char182 16587,19635,4200 3 3766
-ps "
-char190 24882,20430,300 2 3774
-34 "
+:y 13173,19140,4365 3 3839
+TP 13662,20130 2 3806
+Tp 14637,20025,4365 3 3838
+mc 14637,12630,4350 1 3765
+ps 16587,19635,4200 3 3766
+34 24882,20430,300 2 3774
\- 24882,9405 0 51757
-char188 24882,20430,300 2 3772
-14 "
-char189 24882,20430,300 2 3773
-12 "
-char170 10245,20430 2 3754
-Of "
-char186 10245,20430 2 3770
-Om "
-char171 12198,12450 0 3755
-Fo "
-char187 12198,12450 0 3771
-Fc "
-char177 24882,15420,5175 1 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 24882,12135 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 10245,20340 2 3762
-S2 "
-char179 10245,20130 2 3763
-S3 "
-char184 16587,309,6006 1 3768
-ac "
-char185 10245,20340 2 3769
-S1 "
-char215 24882,15990,279 0 3799
-char247 24882,15090 0 3831
-char183 8295,12330 0 3767
-pc "
+14 24882,20430,300 2 3772
+12 24882,20430,300 2 3773
+Of 10245,20430 2 3754
+Om 10245,20430 2 3770
+Fo 12198,12450 0 3755
+Fc 12198,12450 0 3771
+t+- 24882,15420,5175 1 3761
+bb 13173,19083,5916 3 3750
+co 13173,19635 2 3753
+no 24882,12135 0 3756
+rg 13173,19635 2 3758
+S2 10245,20340 2 3762
+S3 10245,20130 2 3763
+ac 16587,309,6006 1 3768
+S1 10245,20340 2 3769
+tmu 24882,15990,279 0 3799
+tdi 24882,15090 0 3831
+pc 8295,12330 0 3767
fm 8295,20130 2 51873
sd 14148,20130 2 51874
dg 16587,20130,4365 3 51755
@@ -788,8 +684,7 @@ Fl 21468,20130 2 51885
ij 12684,19815,4365 3 51958
bq 8295,3900,5100 1 51756
%0 33177,20430,300 2 51901
-char175 16587,18603 2 3759
-a- "
+a- 16587,18603 2 3759
ab 16587,19110 2 51926
a. 16587,19140 2 51927
oe 22443,14310,300 0 51823
diff --git a/contrib/groff/font/devlj4/AOB b/contrib/groff/font/devlj4/AOB
index 913ca39..d051485 100644
--- a/contrib/groff/font/devlj4/AOB
+++ b/contrib/groff/font/devlj4/AOB
@@ -363,40 +363,32 @@ G J -1461
A f -486
A cq -486
A ' -486
-Y char173 -975
Y hy -975
Y - -975
Y en -975
Y em -975
-V char173 -486
V hy -486
V - -486
V en -486
V em -486
-W char173 -486
W hy -486
W - -486
W en -486
W em -486
-X char173 -486
X hy -486
X - -486
X en -486
X em -486
-A char173 -486
A hy -486
A - -486
A en -486
A em -486
-K char173 -486
K hy -486
K - -486
K en -486
K em -486
-char173 X -486
hy X -486
- X -486
-char173 A -486
hy A -486
- A -486
en X -486
@@ -419,8 +411,7 @@ cq 6831,19755 2 51751
* 17565,20205 2 3626
+ 30249,15450,600 0 3627
, 8781,4080,4710 1 3628
-char173 8781,10965 0 3629
-hy "
+hy 8781,10965 0 3629
- "
. 8781,4170,450 0 3630
sl 10734,20820,450 2 3631
@@ -512,198 +503,109 @@ ba 13173,19758,6588 3 3708
rC 13173,20130,6075 3 3709
} "
ti 26346,9435 0 51876
-char192 20004,24930 2 3776
-`A "
-char194 20004,24930 2 3778
-^A "
-char200 16101,24930 2 3784
-`E "
-char202 16101,24930 2 3786
-^E "
-char203 16101,25050 2 3787
-:E "
-char206 8295,24930 2 3790
-^I "
-char207 8295,25050 2 3791
-:I "
-char180 17565,22125 2 3764
-aa "
+`A 20004,24930 2 3776
+^A 20004,24930 2 3778
+`E 16101,24930 2 3784
+^E 16101,24930 2 3786
+:E 16101,25050 2 3787
+^I 8295,24930 2 3790
+:I 8295,25050 2 3791
+aa 17565,22125 2 3764
ga 17565,22125 2 3680
a^ 17565,22125 2 3678
^ "
-char168 17565,22125 2 3752
-ad "
+ad 17565,22125 2 3752
a~ 17565,22521 2 3710
~ "
-char217 19029,24930,450 2 3801
-`U "
-char219 19029,24930,450 2 3803
-^U "
-char221 19029,24930 2 3805
-'Y "
-char253 17565,22125,3930 3 3837
-'y "
-char176 17565,20505 2 3760
-de "
-char199 17076,20205,5988 3 3783
-,C "
-char231 15612,17205,5988 1 3815
-,c "
-char209 20004,25161 2 3793
-~N "
-char241 19029,22521 2 3825
-~n "
-char161 9759,17115,3540 1 3745
-r! "
-char191 16101,17106,3549 1 3775
-r? "
-char164 17565,15834 0 3748
-Cs "
-char163 17565,20505 2 3747
-Po "
-char165 17565,20055 2 3749
-Ye "
-char167 17565,20205,3930 3 3751
-sc "
+`U 19029,24930,450 2 3801
+^U 19029,24930,450 2 3803
+'Y 19029,24930 2 3805
+'y 17565,22125,3930 3 3837
+de 17565,20505 2 3760
+,C 17076,20205,5988 3 3783
+,c 15612,17205,5988 1 3815
+~N 20004,25161 2 3793
+~n 19029,22521 2 3825
+r! 9759,17115,3540 1 3745
+r? 16101,17106,3549 1 3775
+Cs 17565,15834 0 3748
+Po 17565,20505 2 3747
+Ye 17565,20055 2 3749
+sc 17565,20205,3930 3 3751
Fn 17565,20820 2 51871
-char162 17565,21603,1890 2 3746
-ct "
-char226 17076,22125,450 2 3810
-^a "
-char234 17565,22125,450 2 3818
-^e "
-char244 18540,22125,450 2 3828
-^o "
-char251 18540,22125,450 2 3835
-^u "
-char225 17076,22125,450 2 3809
-'a "
-char233 17565,22125,450 2 3817
-'e "
-char243 18540,22125,450 2 3827
-'o "
-char250 18540,22125,450 2 3834
-'u "
-char224 17076,22125,450 2 3808
-`a "
-char232 17565,22125,450 2 3816
-`e "
-char242 18540,22125,450 2 3826
-`o "
-char249 18540,22125,450 2 3833
-`u "
-char228 17076,22125,450 2 3812
-:a "
-char235 17565,22125,450 2 3819
-:e "
-char246 18540,22125,450 2 3830
-:o "
-char252 18540,22125,450 2 3836
-:u "
-char197 20004,27354 2 3781
-oA "
-char238 8781,22125 2 3822
-^i "
-char216 20004,20205,450 2 3800
-/O "
-char198 30249,19755 2 3782
-AE "
-char229 17076,24825,450 2 3813
-oa "
-char237 8781,22125 2 3821
-'i "
-char248 18540,17205,450 0 3832
-/o "
-char230 27321,17205,450 0 3814
-ae "
-char196 20004,25050 2 3780
-:A "
-char236 8781,22125 2 3820
-`i "
-char214 20004,25050,450 2 3798
-:O "
-char220 19029,25050,450 2 3804
-:U "
-char201 16101,24930 2 3785
-'E "
-char239 8781,22125 2 3823
-:i "
-char223 18540,20820,450 2 3807
-ss "
-char212 20004,24930,450 2 3796
-^O "
-char193 20004,24930 2 3777
-'A "
-char195 20004,25161 2 3779
-~A "
-char227 17076,22521,450 2 3811
-~a "
-char208 19515,19755 2 3792
--D "
-char240 18540,21666,450 2 3824
-Sd "
-char205 8295,24930 2 3789
-'I "
-char204 8295,24930 2 3788
-`I "
-char211 20004,24930,450 2 3795
-'O "
-char210 20004,24930,450 2 3794
-`O "
-char213 20004,25161,450 2 3797
-~O "
-char245 18540,22521,450 2 3829
-~o "
+ct 17565,21603,1890 2 3746
+^a 17076,22125,450 2 3810
+^e 17565,22125,450 2 3818
+^o 18540,22125,450 2 3828
+^u 18540,22125,450 2 3835
+'a 17076,22125,450 2 3809
+'e 17565,22125,450 2 3817
+'o 18540,22125,450 2 3827
+'u 18540,22125,450 2 3834
+`a 17076,22125,450 2 3808
+`e 17565,22125,450 2 3816
+`o 18540,22125,450 2 3826
+`u 18540,22125,450 2 3833
+:a 17076,22125,450 2 3812
+:e 17565,22125,450 2 3819
+:o 18540,22125,450 2 3830
+:u 18540,22125,450 2 3836
+oA 20004,27354 2 3781
+^i 8781,22125 2 3822
+/O 20004,20205,450 2 3800
+AE 30249,19755 2 3782
+oa 17076,24825,450 2 3813
+'i 8781,22125 2 3821
+/o 18540,17205,450 0 3832
+ae 27321,17205,450 0 3814
+:A 20004,25050 2 3780
+`i 8781,22125 2 3820
+:O 20004,25050,450 2 3798
+:U 19029,25050,450 2 3804
+'E 16101,24930 2 3785
+:i 8781,22125 2 3823
+ss 18540,20820,450 2 3807
+^O 20004,24930,450 2 3796
+'A 20004,24930 2 3777
+~A 20004,25161 2 3779
+~a 17076,22521,450 2 3811
+-D 19515,19755 2 3792
+Sd 18540,21666,450 2 3824
+'I 8295,24930 2 3789
+`I 8295,24930 2 3788
+'O 20004,24930,450 2 3795
+`O 20004,24930,450 2 3794
+~O 20004,25161,450 2 3797
+~o 18540,22521,450 2 3829
vS 15612,24930,450 2 51795
vs 14637,22125,450 2 51827
-char218 19029,24930,450 2 3802
-'U "
+'U 19029,24930,450 2 3802
:Y 19029,25050 2 51801
-char255 17565,22125,3930 3 3839
-:y "
-char222 18540,19755 2 3806
-TP "
-char254 19029,20820,3930 3 3838
-Tp "
-char181 15612,12630,4680 1 3765
-char182 17565,19635,4200 1 3766
-ps "
-char190 30249,20610,555 2 3774
-34 "
+:y 17565,22125,3930 3 3839
+TP 18540,19755 2 3806
+Tp 19029,20820,3930 3 3838
+mc 15612,12630,4680 1 3765
+ps 17565,19635,4200 1 3766
+34 30249,20610,555 2 3774
\- 30249,9375 0 51757
-char188 30249,20610,555 2 3772
-14 "
-char189 30249,20610,555 2 3773
-12 "
-char170 14637,20505 2 3754
-Of "
-char186 14637,20505 2 3770
-Om "
-char171 15612,14025 0 3755
-Fo "
-char187 15612,14025 0 3771
-Fc "
-char177 30249,15450,5895 1 3761
-char166 13173,19083,5916 1 3750
-bb "
-char169 13173,19635 0 3753
-co "
-char172 30249,11274 0 3756
-no "
-char174 13173,19635 0 3758
-rg "
-char178 11709,20385 2 3762
-S2 "
-char179 11709,20055 2 3763
-S3 "
-char184 17565,507,5988 1 3768
-ac "
-char185 11709,20055 2 3769
-S1 "
-char215 30249,15225,585 0 3799
-char247 30249,15885,1035 0 3831
-char183 8781,12759 0 3767
-pc "
+14 30249,20610,555 2 3772
+12 30249,20610,555 2 3773
+Of 14637,20505 2 3754
+Om 14637,20505 2 3770
+Fo 15612,14025 0 3755
+Fc 15612,14025 0 3771
+t+- 30249,15450,5895 1 3761
+bb 13173,19083,5916 1 3750
+co 13173,19635 0 3753
+no 30249,11274 0 3756
+rg 13173,19635 0 3758
+S2 11709,20385 2 3762
+S3 11709,20055 2 3763
+ac 17565,507,5988 1 3768
+S1 11709,20055 2 3769
+tmu 30249,15225,585 0 3799
+tdi 30249,15885,1035 0 3831
+pc 8781,12759 0 3767
fm 8781,20055 2 51873
sd 17565,20055 2 51874
dg 17565,20205,4095 3 51755
@@ -731,8 +633,7 @@ Fl 33177,20820 2 51885
ij 17565,21855,3930 3 51958
bq 6831,4038,3672 1 51756
%0 34152,20505,450 2 51901
-char175 17565,21675 2 3759
-a- "
+a- 17565,21675 2 3759
ab 17565,22200 2 51926
a. 17565,22590 2 51927
oe 28785,17205,450 0 51823
diff --git a/contrib/groff/font/devlj4/AOI b/contrib/groff/font/devlj4/AOI
index f43a1af..2e6aee0 100644
--- a/contrib/groff/font/devlj4/AOI
+++ b/contrib/groff/font/devlj4/AOI
@@ -388,19 +388,16 @@ k s -486
G J -1461
L cq -3414
L ' -3414
-T char173 -1461
T hy -1461
T - -1461
T en -1461
T em -1461
A cq -1950
A ' -1950
-char173 T -1461
hy T -1461
- T -1461
en T -1461
em T -1461
-Y char173 -975
Y hy -975
Y - -975
Y en -975
@@ -415,7 +412,6 @@ b cq -1950
b ' -1950
a cq -1950
a ' -1950
-V char173 -975
V hy -975
V - -975
V en -975
@@ -426,7 +422,6 @@ n cq -1950
n ' -1950
m cq -1950
m ' -1950
-W char173 -486
W hy -486
W - -486
W en -486
@@ -435,32 +430,26 @@ cq d -1950
' d -1950
s cq -975
s ' -975
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -975
X hy -975
X - -975
X en -975
X em -975
-A char173 -975
A hy -975
A - -975
A en -975
A em -975
-K char173 -975
K hy -975
K - -975
K en -975
K em -975
cq s -975
' s -975
-char173 X -975
hy X -975
- X -975
-char173 A -975
hy A -975
- A -975
en X -975
@@ -484,8 +473,7 @@ cq 7806,19755,0,744,-1851,744 2 51751
* 15612,20160,0,0,-2880 2 3626
+ 26346,15255,585,0,-3894 0 3627
, 7806,2910,4320,0,2160 1 3628
-char173 7806,10230,0,654,468,654 0 3629
-hy "
+hy 7806,10230,0,654,468,654 0 3629
- "
. 7806,2925,405,0,684 0 3630
sl 7806,20820,405,4203,3111,880 2 3631
@@ -577,198 +565,109 @@ ba 13173,19758,6588,0,-4596 3 3708
rC 11709,20130,6075,0,3153 3 3709
} "
ti 26346,8952,0,0,-4029 0 51876
-char192 18051,25005,0,0,2478 2 3776
-`A "
-char194 18051,25005,0,0,2478 2 3778
-^A "
-char200 15612,25005,0,1971,858,880 2 3784
-`E "
-char202 15612,25005,0,1971,858,880 2 3786
-^E "
-char203 15612,24645,0,1971,858,880 2 3787
-:E "
-char206 6831,25005,0,4425,909,880 2 3790
-^I "
-char207 6831,24645,0,4878,909,880 2 3791
-:I "
-char180 15612,22080,0,2073,-6261,880 2 3764
-aa "
+`A 18051,25005,0,0,2478 2 3776
+^A 18051,25005,0,0,2478 2 3778
+`E 15612,25005,0,1971,858,880 2 3784
+^E 15612,25005,0,1971,858,880 2 3786
+:E 15612,24645,0,1971,858,880 2 3787
+^I 6831,25005,0,4425,909,880 2 3790
+:I 6831,24645,0,4878,909,880 2 3791
+aa 15612,22080,0,2073,-6261,880 2 3764
ga 15612,22080,0,0,-3054 2 3680
a^ 15612,22080,0,0,-4680 2 3678
^ "
-char168 15612,21795,0,0,-4674 2 3752
-ad "
+ad 15612,21795,0,0,-4674 2 3752
a~ 15612,21819,0,1443,-2550,880 2 3710
~ "
-char217 18540,25005,405,1449,-453,880 2 3801
-`U "
-char219 18540,25005,405,1449,-453,880 2 3803
-^U "
-char221 16587,25005,0,3216,-1296,880 2 3805
-'Y "
-char253 15612,22080,3930,2085,-378,880 3 3837
-'y "
-char176 15612,20460,0,0,-2748 2 3760
-de "
-char199 16101,20160,6285,1941,-36,880 3 3783
-,C "
-char231 15126,17160,6285,1257,114,880 1 3815
-,c "
-char209 19515,24744,0,1344,735,880 2 3793
-~N "
-char241 18051,21819,0,222,567,222 2 3825
-~n "
-char161 7806,17157,3408,714,1260,714 0 3745
-r! "
-char191 14148,17175,3390,0,1623 0 3775
-r? "
-char164 15612,15684,0,96,-528,96 0 3748
-Cs "
-char163 15612,20460,0,2118,1011,880 2 3747
-Po "
-char165 15612,20055,0,3255,-999,880 2 3749
-Ye "
-char167 15612,20160,4095,0,-1920 3 3751
-sc "
+`U 18540,25005,405,1449,-453,880 2 3801
+^U 18540,25005,405,1449,-453,880 2 3803
+'Y 16587,25005,0,3216,-1296,880 2 3805
+'y 15612,22080,3930,2085,-378,880 3 3837
+de 15612,20460,0,0,-2748 2 3760
+,C 16101,20160,6285,1941,-36,880 3 3783
+,c 15126,17160,6285,1257,114,880 1 3815
+~N 19515,24744,0,1344,735,880 2 3793
+~n 18051,21819,0,222,567,222 2 3825
+r! 7806,17157,3408,714,1260,714 0 3745
+r? 14148,17175,3390,0,1623 0 3775
+Cs 15612,15684,0,96,-528,96 0 3748
+Po 15612,20460,0,2118,1011,880 2 3747
+Ye 15612,20055,0,3255,-999,880 2 3749
+sc 15612,20160,4095,0,-1920 3 3751
Fn 15612,20820,0,1578,-2127,880 2 51871
-char162 15612,20547,498,1389,-540,880 2 3746
-ct "
-char226 16101,22080,405,0,621 2 3810
-^a "
-char234 16587,22080,405,546,-6,546 2 3818
-^e "
-char244 17565,22080,405,90,-30,90 2 3828
-^o "
-char251 18051,22080,405,603,-237,603 2 3835
-^u "
-char225 16101,22080,405,1827,621,880 2 3809
-'a "
-char233 16587,22080,405,1584,-6,880 2 3817
-'e "
-char243 17565,22080,405,1095,-30,880 2 3827
-'o "
-char250 18051,22080,405,852,-237,852 2 3834
-'u "
-char224 16101,22080,405,0,621 2 3808
-`a "
-char232 16587,22080,405,546,-6,546 2 3816
-`e "
-char242 17565,22080,405,90,-30,90 2 3826
-`o "
-char249 18051,22080,405,603,-237,603 2 3833
-`u "
-char228 16101,21795,405,0,621 2 3812
-:a "
-char235 16587,21795,405,546,-6,546 2 3819
-:e "
-char246 17565,21795,405,90,-30,90 2 3830
-:o "
-char252 18051,21795,405,603,-237,603 2 3836
-:u "
-char197 18051,26850,0,0,2478 2 3781
-oA "
-char238 6831,22080,0,3831,921,880 2 3822
-^i "
-char216 19029,20205,450,2472,1920,880 2 3800
-/O "
-char198 28299,19755,0,2715,2868,880 2 3782
-AE "
-char229 16101,24390,405,0,621 2 3813
-oa "
-char237 6831,22080,0,6462,921,880 2 3821
-'i "
-char248 17565,17232,474,1710,1614,880 0 3832
-/o "
-char230 25857,17160,405,591,780,591 0 3814
-ae "
-char196 18051,24645,0,0,2478 2 3780
-:A "
-char236 6831,22080,0,1335,1338,880 2 3820
-`i "
-char214 19029,24645,405,732,-39,732 2 3798
-:O "
-char220 18540,24645,405,1449,-453,880 2 3804
-:U "
-char201 15612,25005,0,2739,858,880 2 3785
-'E "
-char239 6831,21795,0,4275,921,880 2 3823
-:i "
-char223 16101,20820,405,57,780,57 2 3807
-ss "
-char212 19029,25005,405,732,-39,732 2 3796
-^O "
-char193 18051,25005,0,1518,2478,880 2 3777
-'A "
-char195 18051,24744,0,1263,2478,880 2 3779
-~A "
-char227 16101,21819,405,1197,621,880 2 3811
-~a "
-char208 19029,19755,0,516,690,516 2 3792
--D "
-char240 17565,21426,405,66,-36,66 2 3824
-Sd "
-char205 6831,25005,0,7128,909,880 2 3789
-'I "
-char204 6831,25005,0,2073,909,880 2 3788
-`I "
-char211 19029,25005,405,1029,-39,880 2 3795
-'O "
-char210 19029,25005,405,732,-39,732 2 3794
-`O "
-char213 19029,24744,405,774,-39,774 2 3797
-~O "
-char245 17565,21819,405,465,-30,465 2 3829
-~o "
+ct 15612,20547,498,1389,-540,880 2 3746
+^a 16101,22080,405,0,621 2 3810
+^e 16587,22080,405,546,-6,546 2 3818
+^o 17565,22080,405,90,-30,90 2 3828
+^u 18051,22080,405,603,-237,603 2 3835
+'a 16101,22080,405,1827,621,880 2 3809
+'e 16587,22080,405,1584,-6,880 2 3817
+'o 17565,22080,405,1095,-30,880 2 3827
+'u 18051,22080,405,852,-237,852 2 3834
+`a 16101,22080,405,0,621 2 3808
+`e 16587,22080,405,546,-6,546 2 3816
+`o 17565,22080,405,90,-30,90 2 3826
+`u 18051,22080,405,603,-237,603 2 3833
+:a 16101,21795,405,0,621 2 3812
+:e 16587,21795,405,546,-6,546 2 3819
+:o 17565,21795,405,90,-30,90 2 3830
+:u 18051,21795,405,603,-237,603 2 3836
+oA 18051,26850,0,0,2478 2 3781
+^i 6831,22080,0,3831,921,880 2 3822
+/O 19029,20205,450,2472,1920,880 2 3800
+AE 28299,19755,0,2715,2868,880 2 3782
+oa 16101,24390,405,0,621 2 3813
+'i 6831,22080,0,6462,921,880 2 3821
+/o 17565,17232,474,1710,1614,880 0 3832
+ae 25857,17160,405,591,780,591 0 3814
+:A 18051,24645,0,0,2478 2 3780
+`i 6831,22080,0,1335,1338,880 2 3820
+:O 19029,24645,405,732,-39,732 2 3798
+:U 18540,24645,405,1449,-453,880 2 3804
+'E 15612,25005,0,2739,858,880 2 3785
+:i 6831,21795,0,4275,921,880 2 3823
+ss 16101,20820,405,57,780,57 2 3807
+^O 19029,25005,405,732,-39,732 2 3796
+'A 18051,25005,0,1518,2478,880 2 3777
+~A 18051,24744,0,1263,2478,880 2 3779
+~a 16101,21819,405,1197,621,880 2 3811
+-D 19029,19755,0,516,690,516 2 3792
+Sd 17565,21426,405,66,-36,66 2 3824
+'I 6831,25005,0,7128,909,880 2 3789
+`I 6831,25005,0,2073,909,880 2 3788
+'O 19029,25005,405,1029,-39,880 2 3795
+`O 19029,25005,405,732,-39,732 2 3794
+~O 19029,24744,405,774,-39,774 2 3797
+~o 17565,21819,405,465,-30,465 2 3829
vS 14637,25005,405,1374,888,880 2 51795
vs 12684,22080,405,1596,1044,880 2 51827
-char218 18540,25005,405,1449,-453,880 2 3802
-'U "
+'U 18540,25005,405,1449,-453,880 2 3802
:Y 16587,24645,0,3216,-1296,880 2 51801
-char255 15612,21795,3930,2085,-378,880 3 3839
-:y "
-char222 16587,19755,0,675,753,675 2 3806
-TP "
-char254 18051,20820,3930,51,1440,51 3 3838
-Tp "
-char181 14637,12630,4350,1122,2931,880 1 3765
-char182 15612,19635,4200,0,-1344 3 3766
-ps "
-char190 26346,20610,555,0,-1806 2 3774
-34 "
+:y 15612,21795,3930,2085,-378,880 3 3839
+TP 16587,19755,0,675,753,675 2 3806
+Tp 18051,20820,3930,51,1440,51 3 3838
+mc 14637,12630,4350,1122,2931,880 1 3765
+ps 15612,19635,4200,0,-1344 3 3766
+34 26346,20610,555,0,-1806 2 3774
\- 26346,8295,0,0,-3891 0 51757
-char188 26346,20610,555,0,-1755 2 3772
-14 "
-char189 26346,20610,555,0,-1998 2 3773
-12 "
-char170 15612,20460,0,0,-2658 2 3754
-Of "
-char186 15612,20460,0,0,-2451 2 3770
-Om "
-char171 13662,14145,0,2082,-45,880 0 3755
-Fo "
-char187 13662,14145,0,267,1770,267 0 3771
-Fc "
-char177 26346,15255,3900,0,-3906 1 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,3903,-2112,880 2 3753
-co "
-char172 26346,11679,0,0,-3984 0 3756
-no "
-char174 13173,19635,0,3903,-2112,880 2 3758
-rg "
-char178 10245,20385,0,2097,-225,880 2 3762
-S2 "
-char179 10245,20055,0,2064,-186,880 2 3763
-S3 "
-char184 15612,375,6285,0,-2349 1 3768
-ac "
-char185 10245,20055,0,0,-495 2 3769
-S1 "
-char215 26346,15189,579,0,-3957 0 3799
-char247 26346,12780,0,0,-3894 0 3831
-char183 7806,11760,0,0,-1131 0 3767
-pc "
+14 26346,20610,555,0,-1755 2 3772
+12 26346,20610,555,0,-1998 2 3773
+Of 15612,20460,0,0,-2658 2 3754
+Om 15612,20460,0,0,-2451 2 3770
+Fo 13662,14145,0,2082,-45,880 0 3755
+Fc 13662,14145,0,267,1770,267 0 3771
+t+- 26346,15255,3900,0,-3906 1 3761
+bb 13173,19083,5916,0,-4596 3 3750
+co 13173,19635,0,3903,-2112,880 2 3753
+no 26346,11679,0,0,-3984 0 3756
+rg 13173,19635,0,3903,-2112,880 2 3758
+S2 10245,20385,0,2097,-225,880 2 3762
+S3 10245,20055,0,2064,-186,880 2 3763
+ac 15612,375,6285,0,-2349 1 3768
+S1 10245,20055,0,0,-495 2 3769
+tmu 26346,15189,579,0,-3957 0 3799
+tdi 26346,12780,0,0,-3894 0 3831
+pc 7806,11760,0,0,-1131 0 3767
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
@@ -796,8 +695,7 @@ Fl 26346,20820,0,1692,48,880 2 51885
ij 13173,21105,3930,1986,918,880 3 51958
bq 7806,2970,3315,0,1089 0 51756
%0 34152,20460,405,684,-159,684 2 51901
-char175 15612,21210,0,0,-5265 2 3759
-a- "
+a- 15612,21210,0,0,-5265 2 3759
ab 15612,22230,0,0,-5238 2 51926
a. 15612,21795,0,0,-7032 2 51927
oe 28299,17160,405,768,270,768 0 51823
diff --git a/contrib/groff/font/devlj4/AOR b/contrib/groff/font/devlj4/AOR
index b9a0485..faa554f 100644
--- a/contrib/groff/font/devlj4/AOR
+++ b/contrib/groff/font/devlj4/AOR
@@ -332,19 +332,16 @@ A f -486
U d -486
L cq -3903
L ' -3903
-T char173 -975
T hy -975
T - -975
T en -975
T em -975
A cq -2439
A ' -2439
-char173 T -975
hy T -975
- T -975
en T -975
em T -975
-Y char173 -975
Y hy -975
Y - -975
Y en -975
@@ -367,24 +364,20 @@ m cq -1461
m ' -1461
cq d -1950
' d -1950
-L char173 -1461
L hy -1461
L - -1461
L en -1461
L em -1461
-A char173 -975
A hy -975
A - -975
A en -975
A em -975
-K char173 -975
K hy -975
K - -975
K en -975
K em -975
cq s -975
' s -975
-char173 A -1461
hy A -1461
- A -1461
en A -1461
@@ -406,8 +399,7 @@ cq 6831,19755 2 51751
* 15612,20160 2 3626
+ 26835,15255,585 0 3627
, 7806,2910,4320 1 3628
-char173 7806,10200 0 3629
-hy "
+hy 7806,10200 0 3629
- "
. 7806,2925,405 0 3630
sl 8295,20820,405 2 3631
@@ -499,198 +491,109 @@ ba 13173,19758,6588 3 3708
rC 11709,20130,6075 3 3709
} "
ti 26346,8952 0 51876
-char192 18540,25005 2 3776
-`A "
-char194 18540,25005 2 3778
-^A "
-char200 15612,25005 2 3784
-`E "
-char202 15612,25005 2 3786
-^E "
-char203 15612,24690 2 3787
-:E "
-char206 7317,25005 2 3790
-^I "
-char207 7317,24690 2 3791
-:I "
-char180 15612,22080 2 3764
-aa "
+`A 18540,25005 2 3776
+^A 18540,25005 2 3778
+`E 15612,25005 2 3784
+^E 15612,25005 2 3786
+:E 15612,24690 2 3787
+^I 7317,25005 2 3790
+:I 7317,24690 2 3791
+aa 15612,22080 2 3764
ga 15612,22080 2 3680
a^ 15612,22080 2 3678
^ "
-char168 15612,21840 2 3752
-ad "
+ad 15612,21840 2 3752
a~ 15612,21873 2 3710
~ "
-char217 19029,25005,405 2 3801
-`U "
-char219 19029,25005,405 2 3803
-^U "
-char221 16587,25005 2 3805
-'Y "
-char253 15612,22080,3930 3 3837
-'y "
-char176 15612,20460 2 3760
-de "
-char199 16101,20160,4896 3 3783
-,C "
-char231 14637,17160,4896 1 3815
-,c "
-char209 19515,24915 2 3793
-~N "
-char241 18051,21873 2 3825
-~n "
-char161 8295,17124,3441 0 3745
-r! "
-char191 15126,17124,3441 0 3775
-r? "
-char164 15612,15684 0 3748
-Cs "
-char163 15612,20460 2 3747
-Po "
-char165 15612,20055 2 3749
-Ye "
-char167 15612,20160,4095 3 3751
-sc "
+`U 19029,25005,405 2 3801
+^U 19029,25005,405 2 3803
+'Y 16587,25005 2 3805
+'y 15612,22080,3930 3 3837
+de 15612,20460 2 3760
+,C 16101,20160,4896 3 3783
+,c 14637,17160,4896 1 3815
+~N 19515,24915 2 3793
+~n 18051,21873 2 3825
+r! 8295,17124,3441 0 3745
+r? 15126,17124,3441 0 3775
+Cs 15612,15684 0 3748
+Po 15612,20460 2 3747
+Ye 15612,20055 2 3749
+sc 15612,20160,4095 3 3751
Fn 15612,20820 2 51871
-char162 15612,20526,537 2 3746
-ct "
-char226 15126,22080,405 2 3810
-^a "
-char234 16587,22080,405 2 3818
-^e "
-char244 18051,22080,405 2 3828
-^o "
-char251 17565,22080,405 2 3835
-^u "
-char225 15126,22080,405 2 3809
-'a "
-char233 16587,22080,405 2 3817
-'e "
-char243 18051,22080,405 2 3827
-'o "
-char250 17565,22080,405 2 3834
-'u "
-char224 15126,22080,405 2 3808
-`a "
-char232 16587,22080,405 2 3816
-`e "
-char242 18051,22080,405 2 3826
-`o "
-char249 17565,22080,405 2 3833
-`u "
-char228 15126,21840,405 2 3812
-:a "
-char235 16587,21840,405 2 3819
-:e "
-char246 18051,21840,405 2 3830
-:o "
-char252 17565,21840,405 2 3836
-:u "
-char197 18540,26850 2 3781
-oA "
-char238 7806,22080 2 3822
-^i "
-char216 19029,20187,501 2 3800
-/O "
-char198 30738,19755 2 3782
-AE "
-char229 15126,24390,405 2 3813
-oa "
-char237 7806,22080 2 3821
-'i "
-char248 18051,17163,432 0 3832
-/o "
-char230 26346,17160,405 0 3814
-ae "
-char196 18540,24690 2 3780
-:A "
-char236 7806,22080 2 3820
-`i "
-char214 19029,24690,405 2 3798
-:O "
-char220 19029,24690,405 2 3804
-:U "
-char201 15612,25005 2 3785
-'E "
-char239 7806,21840 2 3823
-:i "
-char223 16587,20820,405 2 3807
-ss "
-char212 19029,25005,405 2 3796
-^O "
-char193 18540,25005 2 3777
-'A "
-char195 18540,24915 2 3779
-~A "
-char227 15126,21873,405 2 3811
-~a "
-char208 18540,19755 2 3792
--D "
-char240 18051,22695,405 2 3824
-Sd "
-char205 7317,25005 2 3789
-'I "
-char204 7317,25005 2 3788
-`I "
-char211 19029,25005,405 2 3795
-'O "
-char210 19029,25005,405 2 3794
-`O "
-char213 19029,24915,405 2 3797
-~O "
-char245 18051,21873,405 2 3829
-~o "
+ct 15612,20526,537 2 3746
+^a 15126,22080,405 2 3810
+^e 16587,22080,405 2 3818
+^o 18051,22080,405 2 3828
+^u 17565,22080,405 2 3835
+'a 15126,22080,405 2 3809
+'e 16587,22080,405 2 3817
+'o 18051,22080,405 2 3827
+'u 17565,22080,405 2 3834
+`a 15126,22080,405 2 3808
+`e 16587,22080,405 2 3816
+`o 18051,22080,405 2 3826
+`u 17565,22080,405 2 3833
+:a 15126,21840,405 2 3812
+:e 16587,21840,405 2 3819
+:o 18051,21840,405 2 3830
+:u 17565,21840,405 2 3836
+oA 18540,26850 2 3781
+^i 7806,22080 2 3822
+/O 19029,20187,501 2 3800
+AE 30738,19755 2 3782
+oa 15126,24390,405 2 3813
+'i 7806,22080 2 3821
+/o 18051,17163,432 0 3832
+ae 26346,17160,405 0 3814
+:A 18540,24690 2 3780
+`i 7806,22080 2 3820
+:O 19029,24690,405 2 3798
+:U 19029,24690,405 2 3804
+'E 15612,25005 2 3785
+:i 7806,21840 2 3823
+ss 16587,20820,405 2 3807
+^O 19029,25005,405 2 3796
+'A 18540,25005 2 3777
+~A 18540,24915 2 3779
+~a 15126,21873,405 2 3811
+-D 18540,19755 2 3792
+Sd 18051,22695,405 2 3824
+'I 7317,25005 2 3789
+`I 7317,25005 2 3788
+'O 19029,25005,405 2 3795
+`O 19029,25005,405 2 3794
+~O 19029,24915,405 2 3797
+~o 18051,21873,405 2 3829
vS 14148,25005,405 2 51795
vs 12198,22080,405 2 51827
-char218 19029,25005,405 2 3802
-'U "
+'U 19029,25005,405 2 3802
:Y 16587,24690 2 51801
-char255 15612,21840,3930 3 3839
-:y "
-char222 16587,19755 2 3806
-TP "
-char254 18540,20820,3930 3 3838
-Tp "
-char181 14637,12630,4350 1 3765
-char182 15612,19635,4200 3 3766
-ps "
-char190 26835,20610,555 2 3774
-34 "
+:y 15612,21840,3930 3 3839
+TP 16587,19755 2 3806
+Tp 18540,20820,3930 3 3838
+mc 14637,12630,4350 1 3765
+ps 15612,19635,4200 3 3766
+34 26835,20610,555 2 3774
\- 26835,8295 0 51757
-char188 26835,20610,555 2 3772
-14 "
-char189 26835,20610,555 2 3773
-12 "
-char170 15612,20460 2 3754
-Of "
-char186 15612,20460 2 3770
-Om "
-char171 14148,13950 0 3755
-Fo "
-char187 14148,13950 0 3771
-Fc "
-char177 26835,15255,3900 1 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 26835,11331 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 10245,20385 2 3762
-S2 "
-char179 10245,20055 2 3763
-S3 "
-char184 15612,324,4896 1 3768
-ac "
-char185 10245,20055 2 3769
-S1 "
-char215 26835,15189,579 0 3799
-char247 26835,12780 0 3831
-char183 7806,11781 0 3767
-pc "
+14 26835,20610,555 2 3772
+12 26835,20610,555 2 3773
+Of 15612,20460 2 3754
+Om 15612,20460 2 3770
+Fo 14148,13950 0 3755
+Fc 14148,13950 0 3771
+t+- 26835,15255,3900 1 3761
+bb 13173,19083,5916 3 3750
+co 13173,19635 2 3753
+no 26835,11331 0 3756
+rg 13173,19635 2 3758
+S2 10245,20385 2 3762
+S3 10245,20055 2 3763
+ac 15612,324,4896 1 3768
+S1 10245,20055 2 3769
+tmu 26835,15189,579 0 3799
+tdi 26835,12780 0 3831
+pc 7806,11781 0 3767
fm 7806,20055 2 51873
sd 15612,20055 2 51874
dg 15612,20160,4095 3 51755
@@ -718,8 +621,7 @@ Fl 27321,20820 2 51885
ij 15126,21105,3930 3 51958
bq 6831,2868,3417 0 51756
%0 34152,20460,405 2 51901
-char175 15612,21306 2 3759
-a- "
+a- 15612,21306 2 3759
ab 15612,22155 2 51926
a. 15612,21840 2 51927
oe 29274,17160,405 0 51823
diff --git a/contrib/groff/font/devlj4/CB b/contrib/groff/font/devlj4/CB
index 0da67ed..97b9ecc 100644
--- a/contrib/groff/font/devlj4/CB
+++ b/contrib/groff/font/devlj4/CB
@@ -21,8 +21,7 @@ cq 15873,15060 0 51751
* 15873,15060 0 3626
+ 15873,11535 0 3627
, 15873,4305,2655 0 3628
-char173 15873,7440 0 3629
-hy "
+hy 15873,7440 0 3629
- "
. 15873,4035,330 0 3630
sl 15873,18300,3525 2 3631
@@ -114,198 +113,109 @@ ba 15873,19758,6588 3 3708
rC 15873,20130,6075 3 3709
} "
ti 15873,8160 0 51876
-char192 15873,21375 2 3776
-`A "
-char194 15873,21375 2 3778
-^A "
-char200 15873,21375 2 3784
-`E "
-char202 15873,21375 2 3786
-^E "
-char203 15873,20790 2 3787
-:E "
-char206 15873,21375 2 3790
-^I "
-char207 15873,20790 2 3791
-:I "
-char180 15873,17880 2 3764
-aa "
+`A 15873,21375 2 3776
+^A 15873,21375 2 3778
+`E 15873,21375 2 3784
+^E 15873,21375 2 3786
+:E 15873,20790 2 3787
+^I 15873,21375 2 3790
+:I 15873,20790 2 3791
+aa 15873,17880 2 3764
ga 15873,17880 2 3680
a^ 15873,17880 2 3678
^ "
-char168 15873,16890 2 3752
-ad "
+ad 15873,16890 2 3752
a~ 15873,16959 2 3710
~ "
-char217 15873,21375,330 2 3801
-`U "
-char219 15873,21375,330 2 3803
-^U "
-char221 15873,21375 2 3805
-'Y "
-char253 15873,17880,4845 3 3837
-'y "
-char176 15873,16155 2 3760
-de "
-char199 15873,15390,5457 3 3783
-,C "
-char231 15873,11775,5469 1 3815
-,c "
-char209 15873,20490,330 2 3793
-~N "
-char241 15873,16959 2 3825
-~n "
-char161 15873,11784,3606 0 3745
-r! "
-char191 15873,11751,3969 0 3775
-r? "
-char164 15873,15834 2 3748
-Cs "
-char163 15873,16155,741 2 3747
-Po "
-char165 15873,15825 2 3749
-Ye "
-char167 15873,15390,1692 2 3751
-sc "
+`U 15873,21375,330 2 3801
+^U 15873,21375,330 2 3803
+'Y 15873,21375 2 3805
+'y 15873,17880,4845 3 3837
+de 15873,16155 2 3760
+,C 15873,15390,5457 3 3783
+,c 15873,11775,5469 1 3815
+~N 15873,20490,330 2 3793
+~n 15873,16959 2 3825
+r! 15873,11784,3606 0 3745
+r? 15873,11751,3969 0 3775
+Cs 15873,15834 2 3748
+Po 15873,16155,741 2 3747
+Ye 15873,15825 2 3749
+sc 15873,15390,1692 2 3751
Fn 15873,16350,3114 2 51871
-char162 15873,15966,1419 2 3746
-ct "
-char226 15873,17880,330 2 3810
-^a "
-char234 15873,17880,330 2 3818
-^e "
-char244 15873,17880,330 2 3828
-^o "
-char251 15873,17880,330 2 3835
-^u "
-char225 15873,17880,330 2 3809
-'a "
-char233 15873,17880,330 2 3817
-'e "
-char243 15873,17880,330 2 3827
-'o "
-char250 15873,17880,330 2 3834
-'u "
-char224 15873,17880,330 2 3808
-`a "
-char232 15873,17880,330 2 3816
-`e "
-char242 15873,17880,330 2 3826
-`o "
-char249 15873,17880,330 2 3833
-`u "
-char228 15873,16890,330 2 3812
-:a "
-char235 15873,16890,330 2 3819
-:e "
-char246 15873,16890,330 2 3830
-:o "
-char252 15873,16890,330 2 3836
-:u "
-char197 15873,21780 2 3781
-oA "
-char238 15873,17880 2 3822
-^i "
-char216 15873,15432,492 2 3800
-/O "
-char198 15873,15060 0 3782
-AE "
-char229 15873,18900,330 2 3813
-oa "
-char237 15873,17880 2 3821
-'i "
-char248 15873,11913,600 0 3832
-/o "
-char230 15873,11775,330 0 3814
-ae "
-char196 15873,20790 2 3780
-:A "
-char236 15873,17880 2 3820
-`i "
-char214 15873,20790,330 2 3798
-:O "
-char220 15873,20790,330 2 3804
-:U "
-char201 15873,21375 2 3785
-'E "
-char239 15873,16890 2 3823
-:i "
-char223 15873,16350,330 2 3807
-ss "
-char212 15873,21375,330 2 3796
-^O "
-char193 15873,21375 2 3777
-'A "
-char195 15873,20490 2 3779
-~A "
-char227 15873,16959,330 2 3811
-~a "
-char208 15873,15060 0 3792
--D "
-char240 15873,18249,330 2 3824
-Sd "
-char205 15873,21375 2 3789
-'I "
-char204 15873,21375 2 3788
-`I "
-char211 15873,21375,330 2 3795
-'O "
-char210 15873,21375,330 2 3794
-`O "
-char213 15873,20490,330 2 3797
-~O "
-char245 15873,16959,330 2 3829
-~o "
+ct 15873,15966,1419 2 3746
+^a 15873,17880,330 2 3810
+^e 15873,17880,330 2 3818
+^o 15873,17880,330 2 3828
+^u 15873,17880,330 2 3835
+'a 15873,17880,330 2 3809
+'e 15873,17880,330 2 3817
+'o 15873,17880,330 2 3827
+'u 15873,17880,330 2 3834
+`a 15873,17880,330 2 3808
+`e 15873,17880,330 2 3816
+`o 15873,17880,330 2 3826
+`u 15873,17880,330 2 3833
+:a 15873,16890,330 2 3812
+:e 15873,16890,330 2 3819
+:o 15873,16890,330 2 3830
+:u 15873,16890,330 2 3836
+oA 15873,21780 2 3781
+^i 15873,17880 2 3822
+/O 15873,15432,492 2 3800
+AE 15873,15060 0 3782
+oa 15873,18900,330 2 3813
+'i 15873,17880 2 3821
+/o 15873,11913,600 0 3832
+ae 15873,11775,330 0 3814
+:A 15873,20790 2 3780
+`i 15873,17880 2 3820
+:O 15873,20790,330 2 3798
+:U 15873,20790,330 2 3804
+'E 15873,21375 2 3785
+:i 15873,16890 2 3823
+ss 15873,16350,330 2 3807
+^O 15873,21375,330 2 3796
+'A 15873,21375 2 3777
+~A 15873,20490 2 3779
+~a 15873,16959,330 2 3811
+-D 15873,15060 0 3792
+Sd 15873,18249,330 2 3824
+'I 15873,21375 2 3789
+`I 15873,21375 2 3788
+'O 15873,21375,330 2 3795
+`O 15873,21375,330 2 3794
+~O 15873,20490,330 2 3797
+~o 15873,16959,330 2 3829
vS 15873,21375,330 2 51795
vs 15873,17880,330 2 51827
-char218 15873,21375,330 2 3802
-'U "
+'U 15873,21375,330 2 3802
:Y 15873,20790 2 51801
-char255 15873,16890,4845 3 3839
-:y "
-char222 15873,15060 0 3806
-TP "
-char254 15873,16350,4845 3 3838
-Tp "
-char181 15873,11445,5580 1 3765
-char182 15873,19635,4080 2 3766
-ps "
-char190 15873,16545,2415 2 3774
-34 "
+:y 15873,16890,4845 3 3839
+TP 15873,15060 0 3806
+Tp 15873,16350,4845 3 3838
+mc 15873,11445,5580 1 3765
+ps 15873,19635,4080 2 3766
+34 15873,16545,2415 2 3774
\- 15873,7020 0 51757
-char188 15873,16545,2415 2 3772
-14 "
-char189 15873,16545,2415 2 3773
-12 "
-char170 15873,16155 2 3754
-Of "
-char186 15873,16155 2 3770
-Om "
-char171 15873,11595 0 3755
-Fo "
-char187 15873,11595 0 3771
-Fc "
-char177 15873,11535,3360 0 3761
-char166 15873,19083,5916 3 3750
-bb "
-char169 15873,19635 2 3753
-co "
-char172 15873,9420 0 3756
-no "
-char174 15873,19635 2 3758
-rg "
-char178 15873,16035 2 3762
-S2 "
-char179 15873,16035 2 3763
-S3 "
-char184 15873,0,5469 1 3768
-ac "
-char185 15873,16035 2 3769
-S1 "
-char215 15873,11340 0 3799
-char247 15873,11190 0 3831
-char183 15873,10176 0 3767
-pc "
+14 15873,16545,2415 2 3772
+12 15873,16545,2415 2 3773
+Of 15873,16155 2 3754
+Om 15873,16155 2 3770
+Fo 15873,11595 0 3755
+Fc 15873,11595 0 3771
+t+- 15873,11535,3360 0 3761
+bb 15873,19083,5916 3 3750
+co 15873,19635 2 3753
+no 15873,9420 0 3756
+rg 15873,19635 2 3758
+S2 15873,16035 2 3762
+S3 15873,16035 2 3763
+ac 15873,0,5469 1 3768
+S1 15873,16035 2 3769
+tmu 15873,11340 0 3799
+tdi 15873,11190 0 3831
+pc 15873,10176 0 3767
fm 15873,15825 2 51873
sd 15873,15825 2 51874
dg 15873,15060,1185 0 51755
@@ -333,8 +243,7 @@ Fl 15873,16350 2 51885
ij 15873,16920,4845 3 51958
bq 15873,4605,2355 0 51756
%0 15873,16275,900 2 51901
-char175 15873,15567 2 3759
-a- "
+a- 15873,15567 2 3759
ab 15873,17310 2 51926
a. 15873,16890 2 51927
oe 15873,11775,330 0 51823
diff --git a/contrib/groff/font/devlj4/CBI b/contrib/groff/font/devlj4/CBI
index 10f468d..ffcd3b0 100644
--- a/contrib/groff/font/devlj4/CBI
+++ b/contrib/groff/font/devlj4/CBI
@@ -22,8 +22,7 @@ cq 15873,15060,0,0,-2745 0 51751
* 15873,15060,0,0,-1497 0 3626
+ 15873,11535,0,0,-891 0 3627
, 15873,4305,2655,0,-1506 0 3628
-char173 15873,8805,0,0,-2319 0 3629
-hy "
+hy 15873,8805,0,0,-2319 0 3629
- "
. 15873,3675,330,0,-2805 0 3630
sl 15873,18300,3525,1224,1512,614 2 3631
@@ -115,198 +114,109 @@ ba 15873,19758,6588,0,-5946 3 3708
rC 15873,20130,6075,0,996 3 3709
} "
ti 15873,8160,0,0,-792 0 51876
-char192 15873,21495,0,69,2868,69 2 3776
-`A "
-char194 15873,21495,0,69,2868,69 2 3778
-^A "
-char200 15873,21495,0,1254,1719,614 2 3784
-`E "
-char202 15873,21495,0,1254,1719,614 2 3786
-^E "
-char203 15873,20520,0,1254,1719,614 2 3787
-:E "
-char206 15873,21495,0,609,615,609 2 3790
-^I "
-char207 15873,20520,0,321,615,321 2 3791
-:I "
-char180 15873,18000,0,0,-3249 2 3764
-aa "
+`A 15873,21495,0,69,2868,69 2 3776
+^A 15873,21495,0,69,2868,69 2 3778
+`E 15873,21495,0,1254,1719,614 2 3784
+^E 15873,21495,0,1254,1719,614 2 3786
+:E 15873,20520,0,1254,1719,614 2 3787
+^I 15873,21495,0,609,615,609 2 3790
+:I 15873,20520,0,321,615,321 2 3791
+aa 15873,18000,0,0,-3249 2 3764
ga 15873,18000,0,0,-2835 2 3680
a^ 15873,18000,0,9,-2343,9 2 3678
^ "
-char168 15873,16890,0,0,-4020 2 3752
-ad "
+ad 15873,16890,0,0,-4020 2 3752
a~ 15873,16959,0,594,-2031,594 2 3710
~ "
-char217 15873,21495,330,2124,75,614 2 3801
-`U "
-char219 15873,21495,330,2124,75,614 2 3803
-^U "
-char221 15873,21495,0,2043,-168,614 2 3805
-'Y "
-char253 15873,18000,4845,1887,2409,614 3 3837
-'y "
-char176 15873,16155,0,0,-3120 2 3760
-de "
-char199 15873,15390,5721,903,228,614 3 3783
-,C "
-char231 15873,11775,5562,0,282 1 3815
-,c "
-char209 15873,20487,330,2625,2439,614 2 3793
-~N "
-char241 15873,16959,0,594,2292,594 2 3825
-~n "
-char161 15873,11904,3486,0,-3411 0 3745
-r! "
-char191 15873,11868,3852,0,-747 0 3775
-r? "
-char164 15873,15834,0,345,348,345 2 3748
-Cs "
-char163 15873,16155,603,192,-108,192 2 3747
-Po "
-char165 15873,15825,0,2160,-342,614 2 3749
-Ye "
-char167 15873,15390,1692,0,-1332 2 3751
-sc "
+`U 15873,21495,330,2124,75,614 2 3801
+^U 15873,21495,330,2124,75,614 2 3803
+'Y 15873,21495,0,2043,-168,614 2 3805
+'y 15873,18000,4845,1887,2409,614 3 3837
+de 15873,16155,0,0,-3120 2 3760
+,C 15873,15390,5721,903,228,614 3 3783
+,c 15873,11775,5562,0,282 1 3815
+~N 15873,20487,330,2625,2439,614 2 3793
+~n 15873,16959,0,594,2292,594 2 3825
+r! 15873,11904,3486,0,-3411 0 3745
+r? 15873,11868,3852,0,-747 0 3775
+Cs 15873,15834,0,345,348,345 2 3748
+Po 15873,16155,603,192,-108,192 2 3747
+Ye 15873,15825,0,2160,-342,614 2 3749
+sc 15873,15390,1692,0,-1332 2 3751
Fn 15873,16350,3135,12,1572,12 2 51871
-char162 15873,15978,1419,0,-1068 2 3746
-ct "
-char226 15873,18000,330,9,837,9 2 3810
-^a "
-char234 15873,18000,330,9,228,9 2 3818
-^e "
-char244 15873,18000,330,9,858,9 2 3828
-^o "
-char251 15873,18000,330,9,432,9 2 3835
-^u "
-char225 15873,18000,330,0,837 2 3809
-'a "
-char233 15873,18000,330,0,228 2 3817
-'e "
-char243 15873,18000,330,0,858 2 3827
-'o "
-char250 15873,18000,330,0,432 2 3834
-'u "
-char224 15873,18000,330,0,837 2 3808
-`a "
-char232 15873,18000,330,0,228 2 3816
-`e "
-char242 15873,18000,330,0,858 2 3826
-`o "
-char249 15873,18000,330,0,432 2 3833
-`u "
-char228 15873,16890,330,0,837 2 3812
-:a "
-char235 15873,16890,330,0,228 2 3819
-:e "
-char246 15873,16890,330,0,858 2 3830
-:o "
-char252 15873,16890,330,0,432 2 3836
-:u "
-char197 15873,21780,0,69,2868,69 2 3781
-oA "
-char238 15873,18000,0,9,606,9 2 3822
-^i "
-char216 15873,15501,528,1206,1434,614 2 3800
-/O "
-char198 15873,15060,0,2391,2655,614 0 3782
-AE "
-char229 15873,18381,330,0,837 2 3813
-oa "
-char237 15873,18000,0,0,606 2 3821
-'i "
-char248 15873,11901,591,486,1311,486 0 3832
-/o "
-char230 15873,11775,330,654,2010,614 0 3814
-ae "
-char196 15873,20520,0,69,2868,69 2 3780
-:A "
-char236 15873,18000,0,0,606 2 3820
-`i "
-char214 15873,20520,330,447,633,447 2 3798
-:O "
-char220 15873,20520,330,2124,75,614 2 3804
-:U "
-char201 15873,21495,0,1254,1719,614 2 3785
-'E "
-char239 15873,16890,0,0,606 2 3823
-:i "
-char223 15873,16350,330,0,2220 2 3807
-ss "
-char212 15873,21495,330,609,633,609 2 3796
-^O "
-char193 15873,21495,0,69,2868,69 2 3777
-'A "
-char195 15873,20487,0,174,2868,174 2 3779
-~A "
-char227 15873,16959,330,594,837,594 2 3811
-~a "
-char208 15873,15060,0,366,2280,366 0 3792
--D "
-char240 15873,18222,330,0,171 2 3824
-Sd "
-char205 15873,21495,0,321,615,321 2 3789
-'I "
-char204 15873,21495,0,321,615,321 2 3788
-`I "
-char211 15873,21495,330,591,633,591 2 3795
-'O "
-char210 15873,21495,330,447,633,447 2 3794
-`O "
-char213 15873,20487,330,1986,633,614 2 3797
-~O "
-char245 15873,16959,330,594,858,594 2 3829
-~o "
+ct 15873,15978,1419,0,-1068 2 3746
+^a 15873,18000,330,9,837,9 2 3810
+^e 15873,18000,330,9,228,9 2 3818
+^o 15873,18000,330,9,858,9 2 3828
+^u 15873,18000,330,9,432,9 2 3835
+'a 15873,18000,330,0,837 2 3809
+'e 15873,18000,330,0,228 2 3817
+'o 15873,18000,330,0,858 2 3827
+'u 15873,18000,330,0,432 2 3834
+`a 15873,18000,330,0,837 2 3808
+`e 15873,18000,330,0,228 2 3816
+`o 15873,18000,330,0,858 2 3826
+`u 15873,18000,330,0,432 2 3833
+:a 15873,16890,330,0,837 2 3812
+:e 15873,16890,330,0,228 2 3819
+:o 15873,16890,330,0,858 2 3830
+:u 15873,16890,330,0,432 2 3836
+oA 15873,21780,0,69,2868,69 2 3781
+^i 15873,18000,0,9,606,9 2 3822
+/O 15873,15501,528,1206,1434,614 2 3800
+AE 15873,15060,0,2391,2655,614 0 3782
+oa 15873,18381,330,0,837 2 3813
+'i 15873,18000,0,0,606 2 3821
+/o 15873,11901,591,486,1311,486 0 3832
+ae 15873,11775,330,654,2010,614 0 3814
+:A 15873,20520,0,69,2868,69 2 3780
+`i 15873,18000,0,0,606 2 3820
+:O 15873,20520,330,447,633,447 2 3798
+:U 15873,20520,330,2124,75,614 2 3804
+'E 15873,21495,0,1254,1719,614 2 3785
+:i 15873,16890,0,0,606 2 3823
+ss 15873,16350,330,0,2220 2 3807
+^O 15873,21495,330,609,633,609 2 3796
+'A 15873,21495,0,69,2868,69 2 3777
+~A 15873,20487,0,174,2868,174 2 3779
+~a 15873,16959,330,594,837,594 2 3811
+-D 15873,15060,0,366,2280,366 0 3792
+Sd 15873,18222,330,0,171 2 3824
+'I 15873,21495,0,321,615,321 2 3789
+`I 15873,21495,0,321,615,321 2 3788
+'O 15873,21495,330,591,633,591 2 3795
+`O 15873,21495,330,447,633,447 2 3794
+~O 15873,20487,330,1986,633,614 2 3797
+~o 15873,16959,330,594,858,594 2 3829
vS 15873,21495,330,984,1386,614 2 51795
vs 15873,18000,330,9,798,9 2 51827
-char218 15873,21495,330,2124,75,614 2 3802
-'U "
+'U 15873,21495,330,2124,75,614 2 3802
:Y 15873,20520,0,2043,-168,614 2 51801
-char255 15873,16890,4845,1887,2409,614 3 3839
-:y "
-char222 15873,15060,0,222,2166,222 0 3806
-TP "
-char254 15873,16350,4845,330,3075,330 3 3838
-Tp "
-char181 15873,11445,5580,114,-12,114 1 3765
-char182 15873,19635,4080,0,-1308 2 3766
-ps "
-char190 15873,16674,2286,4155,1086,614 2 3774
-34 "
+:y 15873,16890,4845,1887,2409,614 3 3839
+TP 15873,15060,0,222,2166,222 0 3806
+Tp 15873,16350,4845,330,3075,330 3 3838
+mc 15873,11445,5580,114,-12,114 1 3765
+ps 15873,19635,4080,0,-1308 2 3766
+34 15873,16674,2286,4155,1086,614 2 3774
\- 15873,7020,0,0,-951 0 51757
-char188 15873,16674,2286,4458,1638,614 2 3772
-14 "
-char189 15873,16674,2286,3384,1857,614 2 3773
-12 "
-char170 15873,16155,0,0,-3528 2 3754
-Of "
-char186 15873,16155,0,0,-3588 2 3770
-Om "
-char171 15873,11625,0,354,1047,354 0 3755
-Fo "
-char187 15873,11625,0,0,1605 0 3771
-Fc "
-char177 15873,11535,3360,0,-891 0 3761
-char166 15873,19083,5916,0,-5946 3 3750
-bb "
-char169 15873,19635,0,225,-1134,225 2 3753
-co "
-char172 15873,9420,0,0,-951 0 3756
-no "
-char174 15873,19635,0,225,-1134,225 2 3758
-rg "
-char178 15873,16170,0,0,-3063 2 3762
-S2 "
-char179 15873,16170,0,0,-3162 2 3763
-S3 "
-char184 15873,0,5562,0,-2265 1 3768
-ac "
-char185 15873,16170,0,0,-3066 2 3769
-S1 "
-char215 15873,11646,0,0,-798 0 3799
-char247 15873,11190,0,0,-1110 0 3831
-char183 15873,10128,0,0,-4290 0 3767
-pc "
+14 15873,16674,2286,4458,1638,614 2 3772
+12 15873,16674,2286,3384,1857,614 2 3773
+Of 15873,16155,0,0,-3528 2 3754
+Om 15873,16155,0,0,-3588 2 3770
+Fo 15873,11625,0,354,1047,354 0 3755
+Fc 15873,11625,0,0,1605 0 3771
+t+- 15873,11535,3360,0,-891 0 3761
+bb 15873,19083,5916,0,-5946 3 3750
+co 15873,19635,0,225,-1134,225 2 3753
+no 15873,9420,0,0,-951 0 3756
+rg 15873,19635,0,225,-1134,225 2 3758
+S2 15873,16170,0,0,-3063 2 3762
+S3 15873,16170,0,0,-3162 2 3763
+ac 15873,0,5562,0,-2265 1 3768
+S1 15873,16170,0,0,-3066 2 3769
+tmu 15873,11646,0,0,-798 0 3799
+tdi 15873,11190,0,0,-1110 0 3831
+pc 15873,10128,0,0,-4290 0 3767
fm 15873,15825,0,0,-5124 2 51873
sd 15873,15825,0,0,-2748 2 51874
dg 15873,15060,1185,0,-1776 0 51755
@@ -334,8 +244,7 @@ Fl 15873,16350,0,1425,2949,614 2 51885
ij 15873,16920,4845,738,1320,614 3 51958
bq 15873,4596,2364,0,-1647 0 51756
%0 15873,16275,900,3066,3417,614 2 51901
-char175 15873,16032,0,537,-2187,537 2 3759
-a- "
+a- 15873,16032,0,537,-2187,537 2 3759
ab 15873,17340,0,993,-2841,614 2 51926
a. 15873,16890,0,0,-6186 2 51927
oe 15873,11775,330,1284,1977,614 0 51823
diff --git a/contrib/groff/font/devlj4/CI b/contrib/groff/font/devlj4/CI
index 8a98a36..98969c2 100644
--- a/contrib/groff/font/devlj4/CI
+++ b/contrib/groff/font/devlj4/CI
@@ -22,8 +22,7 @@ cq 15873,15060,0,0,-5217 0 51751
* 15873,15060,0,174,-3273,174 0 3626
+ 15873,11385,0,252,-2151,252 0 3627
, 15873,3195,3420,0,-3000 0 3628
-char173 15873,6570,0,0,-3741 0 3629
-hy "
+hy 15873,6570,0,0,-3741 0 3629
- "
. 15873,3105,330,0,-5040 0 3630
sl 15873,18465,3765,2349,-699,610 2 3631
@@ -115,198 +114,109 @@ ba 15873,19758,6588,0,-5946 3 3708
rC 15873,20130,6075,0,-1059 3 3709
} "
ti 15873,7233,0,0,-1089 0 51876
-char192 15873,21255,0,1470,1092,610 2 3776
-`A "
-char194 15873,21255,0,1707,1092,610 2 3778
-^A "
-char200 15873,21255,0,2724,-153,610 2 3784
-`E "
-char202 15873,21255,0,2724,-153,610 2 3786
-^E "
-char203 15873,20670,0,2724,-153,610 2 3787
-:E "
-char206 15873,21255,0,2157,-1188,610 2 3790
-^I "
-char207 15873,20670,0,1764,-1188,610 2 3791
-:I "
-char180 15873,17640,0,1401,-6675,610 2 3764
-aa "
+`A 15873,21255,0,1470,1092,610 2 3776
+^A 15873,21255,0,1707,1092,610 2 3778
+`E 15873,21255,0,2724,-153,610 2 3784
+^E 15873,21255,0,2724,-153,610 2 3786
+:E 15873,20670,0,2724,-153,610 2 3787
+^I 15873,21255,0,2157,-1188,610 2 3790
+:I 15873,20670,0,1764,-1188,610 2 3791
+aa 15873,17640,0,1401,-6675,610 2 3764
ga 15873,17640,0,0,-4491 2 3680
a^ 15873,17640,0,1257,-4491,610 2 3678
^ "
-char168 15873,16905,0,0,-6489 2 3752
-ad "
+ad 15873,16905,0,0,-6489 2 3752
a~ 15873,16818,0,1788,-4146,610 2 3710
~ "
-char217 15873,21255,330,4095,-2097,610 2 3801
-`U "
-char219 15873,21255,330,4095,-2097,610 2 3803
-^U "
-char221 15873,21255,0,3672,-2262,610 2 3805
-'Y "
-char253 15873,17640,5145,3123,903,610 3 3837
-'y "
-char176 15873,15390,0,0,-4464 0 3760
-de "
-char199 15873,15390,4815,2835,-1689,610 1 3783
-,C "
-char231 15873,11775,4815,1542,-1617,610 1 3815
-,c "
-char209 15873,20580,0,4182,738,610 2 3793
-~N "
-char241 15873,16818,0,1788,585,610 2 3825
-~n "
-char161 15873,11946,3444,0,-5715 0 3745
-r! "
-char191 15873,11946,3774,0,-2577 0 3775
-r? "
-char164 15873,15684,0,1560,-2253,610 2 3748
-Cs "
-char163 15873,15390,474,1797,-2232,610 0 3747
-Po "
-char165 15873,15060,0,3741,-2178,610 0 3749
-Ye "
-char167 15873,15390,1905,0,-3360 0 3751
-sc "
+`U 15873,21255,330,4095,-2097,610 2 3801
+^U 15873,21255,330,4095,-2097,610 2 3803
+'Y 15873,21255,0,3672,-2262,610 2 3805
+'y 15873,17640,5145,3123,903,610 3 3837
+de 15873,15390,0,0,-4464 0 3760
+,C 15873,15390,4815,2835,-1689,610 1 3783
+,c 15873,11775,4815,1542,-1617,610 1 3815
+~N 15873,20580,0,4182,738,610 2 3793
+~n 15873,16818,0,1788,585,610 2 3825
+r! 15873,11946,3444,0,-5715 0 3745
+r? 15873,11946,3774,0,-2577 0 3775
+Cs 15873,15684,0,1560,-2253,610 2 3748
+Po 15873,15390,474,1797,-2232,610 0 3747
+Ye 15873,15060,0,3741,-2178,610 0 3749
+sc 15873,15390,1905,0,-3360 0 3751
Fn 15873,15090,4350,1704,-774,610 0 51871
-char162 15873,16083,1536,900,-3015,610 2 3746
-ct "
-char226 15873,17640,330,1257,-696,610 2 3810
-^a "
-char234 15873,17640,330,1269,-1611,610 2 3818
-^e "
-char244 15873,17640,330,1443,-1140,610 2 3828
-^o "
-char251 15873,17640,330,1257,-1404,610 2 3835
-^u "
-char225 15873,17640,330,1401,-696,610 2 3809
-'a "
-char233 15873,17640,330,1401,-1611,610 2 3817
-'e "
-char243 15873,17640,330,1443,-1140,610 2 3827
-'o "
-char250 15873,17640,330,1401,-1404,610 2 3834
-'u "
-char224 15873,17640,330,531,-696,531 2 3808
-`a "
-char232 15873,17640,330,1269,-1611,610 2 3816
-`e "
-char242 15873,17640,330,1443,-1140,610 2 3826
-`o "
-char249 15873,17640,330,726,-1404,610 2 3833
-`u "
-char228 15873,16905,330,531,-696,531 2 3812
-:a "
-char235 15873,16905,330,1269,-1611,610 2 3819
-:e "
-char246 15873,16905,330,1443,-1140,610 2 3830
-:o "
-char252 15873,16905,330,726,-1404,610 2 3836
-:u "
-char197 15873,21690,0,1470,1092,610 2 3781
-oA "
-char238 15873,17640,0,1257,-1260,610 2 3822
-^i "
-char216 15873,15390,453,2697,-333,610 0 3800
-/O "
-char198 15873,15060,0,2871,855,610 0 3782
-AE "
-char229 15873,17997,330,531,-696,531 2 3813
-oa "
-char237 15873,17640,0,1401,-1260,610 2 3821
-'i "
-char248 15873,11793,330,2241,-291,610 0 3832
-/o "
-char230 15873,11775,330,2148,-189,610 0 3814
-ae "
-char196 15873,20670,0,1470,1092,610 2 3780
-:A "
-char236 15873,17640,0,0,-1260 2 3820
-`i "
-char214 15873,20670,330,2058,-1137,610 2 3798
-:O "
-char220 15873,20670,330,4095,-2097,610 2 3804
-:U "
-char201 15873,21255,0,2724,-153,610 2 3785
-'E "
-char239 15873,16905,0,0,-1260 2 3823
-:i "
-char223 15873,16500,330,1746,-66,610 2 3807
-ss "
-char212 15873,21255,330,2157,-1137,610 2 3796
-^O "
-char193 15873,21255,0,2217,1092,610 2 3777
-'A "
-char195 15873,20580,0,2445,1092,610 2 3779
-~A "
-char227 15873,16818,330,1788,-696,610 2 3811
-~a "
-char208 15873,15060,0,2061,537,610 0 3792
--D "
-char240 15873,18297,330,1614,-1143,610 2 3824
-Sd "
-char205 15873,21255,0,2217,-1188,610 2 3789
-'I "
-char204 15873,21255,0,1764,-1188,610 2 3788
-`I "
-char211 15873,21255,330,2217,-1137,610 2 3795
-'O "
-char210 15873,21255,330,2058,-1137,610 2 3794
-`O "
-char213 15873,20580,330,2895,-1137,610 2 3797
-~O "
-char245 15873,16818,330,1788,-1140,610 2 3829
-~o "
+ct 15873,16083,1536,900,-3015,610 2 3746
+^a 15873,17640,330,1257,-696,610 2 3810
+^e 15873,17640,330,1269,-1611,610 2 3818
+^o 15873,17640,330,1443,-1140,610 2 3828
+^u 15873,17640,330,1257,-1404,610 2 3835
+'a 15873,17640,330,1401,-696,610 2 3809
+'e 15873,17640,330,1401,-1611,610 2 3817
+'o 15873,17640,330,1443,-1140,610 2 3827
+'u 15873,17640,330,1401,-1404,610 2 3834
+`a 15873,17640,330,531,-696,531 2 3808
+`e 15873,17640,330,1269,-1611,610 2 3816
+`o 15873,17640,330,1443,-1140,610 2 3826
+`u 15873,17640,330,726,-1404,610 2 3833
+:a 15873,16905,330,531,-696,531 2 3812
+:e 15873,16905,330,1269,-1611,610 2 3819
+:o 15873,16905,330,1443,-1140,610 2 3830
+:u 15873,16905,330,726,-1404,610 2 3836
+oA 15873,21690,0,1470,1092,610 2 3781
+^i 15873,17640,0,1257,-1260,610 2 3822
+/O 15873,15390,453,2697,-333,610 0 3800
+AE 15873,15060,0,2871,855,610 0 3782
+oa 15873,17997,330,531,-696,531 2 3813
+'i 15873,17640,0,1401,-1260,610 2 3821
+/o 15873,11793,330,2241,-291,610 0 3832
+ae 15873,11775,330,2148,-189,610 0 3814
+:A 15873,20670,0,1470,1092,610 2 3780
+`i 15873,17640,0,0,-1260 2 3820
+:O 15873,20670,330,2058,-1137,610 2 3798
+:U 15873,20670,330,4095,-2097,610 2 3804
+'E 15873,21255,0,2724,-153,610 2 3785
+:i 15873,16905,0,0,-1260 2 3823
+ss 15873,16500,330,1746,-66,610 2 3807
+^O 15873,21255,330,2157,-1137,610 2 3796
+'A 15873,21255,0,2217,1092,610 2 3777
+~A 15873,20580,0,2445,1092,610 2 3779
+~a 15873,16818,330,1788,-696,610 2 3811
+-D 15873,15060,0,2061,537,610 0 3792
+Sd 15873,18297,330,1614,-1143,610 2 3824
+'I 15873,21255,0,2217,-1188,610 2 3789
+`I 15873,21255,0,1764,-1188,610 2 3788
+'O 15873,21255,330,2217,-1137,610 2 3795
+`O 15873,21255,330,2058,-1137,610 2 3794
+~O 15873,20580,330,2895,-1137,610 2 3797
+~o 15873,16818,330,1788,-1140,610 2 3829
vS 15873,21255,330,2157,-804,610 2 51795
vs 15873,17640,330,1257,-1356,610 2 51827
-char218 15873,21255,330,4095,-2097,610 2 3802
-'U "
+'U 15873,21255,330,4095,-2097,610 2 3802
:Y 15873,20670,0,3672,-2262,610 2 51801
-char255 15873,16905,5145,3123,903,610 3 3839
-:y "
-char222 15873,15060,0,2421,-756,610 0 3806
-TP "
-char254 15873,16500,5145,1380,2037,610 3 3838
-Tp "
-char181 15873,11445,5595,0,-321 1 3765
-char182 15873,19635,4080,150,-2508,150 2 3766
-ps "
-char190 15873,15498,2655,4026,15,610 0 3774
-34 "
+:y 15873,16905,5145,3123,903,610 3 3839
+TP 15873,15060,0,2421,-756,610 0 3806
+Tp 15873,16500,5145,1380,2037,610 3 3838
+mc 15873,11445,5595,0,-321 1 3765
+ps 15873,19635,4080,150,-2508,150 2 3766
+34 15873,15498,2655,4026,15,610 0 3774
\- 15873,6435,0,252,-2151,252 0 51757
-char188 15873,15498,2655,4626,-30,610 0 3772
-14 "
-char189 15873,15498,2655,3426,615,610 0 3773
-12 "
-char170 15873,15390,0,0,-5310 0 3754
-Of "
-char186 15873,15390,0,0,-5274 0 3770
-Om "
-char171 15873,11010,0,1230,-2184,610 0 3755
-Fo "
-char187 15873,11010,0,330,-1284,330 0 3771
-Fc "
-char177 15873,11385,2835,252,-2151,252 0 3761
-char166 15873,19083,5916,0,-5946 3 3750
-bb "
-char169 15873,19635,0,2121,-3030,610 2 3753
-co "
-char172 15873,8865,0,252,-2151,252 0 3756
-no "
-char174 15873,19635,0,1839,-2748,610 2 3758
-rg "
-char178 15873,15240,0,0,-4467 0 3762
-S2 "
-char179 15873,15240,0,0,-4548 0 3763
-S3 "
-char184 15873,0,4815,0,-4626 1 3768
-ac "
-char185 15873,15060,0,0,-4830 0 3769
-S1 "
-char215 15873,11340,0,252,-2151,252 0 3799
-char247 15873,10530,0,306,-2205,306 0 3831
-char183 15873,9657,0,0,-6252 0 3767
-pc "
+14 15873,15498,2655,4626,-30,610 0 3772
+12 15873,15498,2655,3426,615,610 0 3773
+Of 15873,15390,0,0,-5310 0 3754
+Om 15873,15390,0,0,-5274 0 3770
+Fo 15873,11010,0,1230,-2184,610 0 3755
+Fc 15873,11010,0,330,-1284,330 0 3771
+t+- 15873,11385,2835,252,-2151,252 0 3761
+bb 15873,19083,5916,0,-5946 3 3750
+co 15873,19635,0,2121,-3030,610 2 3753
+no 15873,8865,0,252,-2151,252 0 3756
+rg 15873,19635,0,1839,-2748,610 2 3758
+S2 15873,15240,0,0,-4467 0 3762
+S3 15873,15240,0,0,-4548 0 3763
+ac 15873,0,4815,0,-4626 1 3768
+S1 15873,15060,0,0,-4830 0 3769
+tmu 15873,11340,0,252,-2151,252 0 3799
+tdi 15873,10530,0,306,-2205,306 0 3831
+pc 15873,9657,0,0,-6252 0 3767
fm 15873,15060,0,0,-7596 0 51873
sd 15873,15060,0,0,-5274 0 51874
dg 15873,15060,1290,0,-4491 0 51755
@@ -334,8 +244,7 @@ Fl 15873,16500,0,2208,852,610 2 51885
ij 15873,17235,5145,2958,1278,610 3 51958
bq 15873,3495,3120,0,-3498 0 51756
%0 15873,16380,330,2361,-471,610 2 51901
-char175 15873,15666,0,1914,-3453,610 2 3759
-a- "
+a- 15873,15666,0,1914,-3453,610 2 3759
ab 15873,16395,0,2325,-5001,610 2 51926
a. 15873,16905,0,0,-8292 2 51927
oe 15873,11775,330,2334,30,610 0 51823
diff --git a/contrib/groff/font/devlj4/CLARENDON b/contrib/groff/font/devlj4/CLARENDON
index 86f6c00..159cca1 100644
--- a/contrib/groff/font/devlj4/CLARENDON
+++ b/contrib/groff/font/devlj4/CLARENDON
@@ -22,8 +22,7 @@ cq 5856,18645 2 51751
* 11709,18645 2 3626
+ 17565,16545 0 3627
, 5856,3945,3375 0 3628
-char173 5856,8295 0 3629
-hy "
+hy 5856,8295 0 3629
- "
. 5856,3945 0 3630
sl 5856,18645,345 2 3631
@@ -115,198 +114,109 @@ ba 13173,19758,6588 3 3708
rC 13173,19935,6210 3 3709
} "
ti 26346,9435 0 51876
-char192 13662,23355 2 3776
-`A "
-char194 13662,22755 2 3778
-^A "
-char200 13662,23355 2 3784
-`E "
-char202 13662,22755 2 3786
-^E "
-char203 13662,23325 2 3787
-:E "
-char206 7806,22755 2 3790
-^I "
-char207 7806,23325 2 3791
-:I "
-char180 11709,19305 2 3764
-aa "
+`A 13662,23355 2 3776
+^A 13662,22755 2 3778
+`E 13662,23355 2 3784
+^E 13662,22755 2 3786
+:E 13662,23325 2 3787
+^I 7806,22755 2 3790
+:I 7806,23325 2 3791
+aa 11709,19305 2 3764
ga 11709,19305 2 3680
a^ 11709,18180 2 3678
^ "
-char168 11709,18750 2 3752
-ad "
+ad 11709,18750 2 3752
a~ 11709,18654 2 3710
~ "
-char217 13173,23355,345 2 3801
-`U "
-char219 13173,22755,345 2 3803
-^U "
-char221 13173,23355 2 3805
-'Y "
-char253 12198,19305,4605 3 3837
-'y "
-char176 11709,18645 2 3760
-de "
-char199 12684,18645,4725 3 3783
-,C "
-char231 11220,14250,4737 1 3815
-,c "
-char209 14637,23229 2 3793
-~N "
-char241 13173,18654 2 3825
-~n "
-char161 6342,13956,4344 1 3745
-r! "
-char191 11709,13956,4344 1 3775
-r? "
-char164 17565,15834 0 3748
-Cs "
-char163 11709,18645,345 2 3747
-Po "
-char165 11709,18300 2 3749
-Ye "
-char167 11709,19605,6420 3 3751
-sc "
+`U 13173,23355,345 2 3801
+^U 13173,22755,345 2 3803
+'Y 13173,23355 2 3805
+'y 12198,19305,4605 3 3837
+de 11709,18645 2 3760
+,C 12684,18645,4725 3 3783
+,c 11220,14250,4737 1 3815
+~N 14637,23229 2 3793
+~n 13173,18654 2 3825
+r! 6342,13956,4344 1 3745
+r? 11709,13956,4344 1 3775
+Cs 17565,15834 0 3748
+Po 11709,18645,345 2 3747
+Ye 11709,18300 2 3749
+sc 11709,19605,6420 3 3751
Fn 11709,18645 2 51871
-char162 11709,16917 2 3746
-ct "
-char226 13662,18180,345 2 3810
-^a "
-char234 11709,18180,345 2 3818
-^e "
-char244 12198,18180,345 2 3828
-^o "
-char251 13173,18180,345 2 3835
-^u "
-char225 13662,19305,345 2 3809
-'a "
-char233 11709,19305,345 2 3817
-'e "
-char243 12198,19305,345 2 3827
-'o "
-char250 13173,19305,345 2 3834
-'u "
-char224 13662,19305,345 2 3808
-`a "
-char232 11709,19305,345 2 3816
-`e "
-char242 12198,19305,345 2 3826
-`o "
-char249 13173,19305,345 2 3833
-`u "
-char228 13662,18750,345 2 3812
-:a "
-char235 11709,18750,345 2 3819
-:e "
-char246 12198,18750,345 2 3830
-:o "
-char252 13173,18750,345 2 3836
-:u "
-char197 13662,25200 2 3781
-oA "
-char238 6831,18180 2 3822
-^i "
-char216 13662,18645,345 2 3800
-/O "
-char198 22932,18285 2 3782
-AE "
-char229 13662,21195,345 2 3813
-oa "
-char237 6831,19305 2 3821
-'i "
-char248 12198,14250,345 0 3832
-/o "
-char230 18051,14250,345 0 3814
-ae "
-char196 13662,23325 2 3780
-:A "
-char236 6831,19305 2 3820
-`i "
-char214 13662,23325,345 2 3798
-:O "
-char220 13173,23325,345 2 3804
-:U "
-char201 13662,23355 2 3785
-'E "
-char239 6831,18750 2 3823
-:i "
-char223 13173,18645 2 3807
-ss "
-char212 13662,22755,345 2 3796
-^O "
-char193 13662,23355 2 3777
-'A "
-char195 13662,23229 2 3779
-~A "
-char227 13662,18654,345 2 3811
-~a "
-char208 13662,18300 2 3792
--D "
-char240 12198,19083,345 2 3824
-Sd "
-char205 7806,23355 2 3789
-'I "
-char204 7806,23355 2 3788
-`I "
-char211 13662,23355,345 2 3795
-'O "
-char210 13662,23355,345 2 3794
-`O "
-char213 13662,23229,345 2 3797
-~O "
-char245 12198,18654,345 2 3829
-~o "
+ct 11709,16917 2 3746
+^a 13662,18180,345 2 3810
+^e 11709,18180,345 2 3818
+^o 12198,18180,345 2 3828
+^u 13173,18180,345 2 3835
+'a 13662,19305,345 2 3809
+'e 11709,19305,345 2 3817
+'o 12198,19305,345 2 3827
+'u 13173,19305,345 2 3834
+`a 13662,19305,345 2 3808
+`e 11709,19305,345 2 3816
+`o 12198,19305,345 2 3826
+`u 13173,19305,345 2 3833
+:a 13662,18750,345 2 3812
+:e 11709,18750,345 2 3819
+:o 12198,18750,345 2 3830
+:u 13173,18750,345 2 3836
+oA 13662,25200 2 3781
+^i 6831,18180 2 3822
+/O 13662,18645,345 2 3800
+AE 22932,18285 2 3782
+oa 13662,21195,345 2 3813
+'i 6831,19305 2 3821
+/o 12198,14250,345 0 3832
+ae 18051,14250,345 0 3814
+:A 13662,23325 2 3780
+`i 6831,19305 2 3820
+:O 13662,23325,345 2 3798
+:U 13173,23325,345 2 3804
+'E 13662,23355 2 3785
+:i 6831,18750 2 3823
+ss 13173,18645 2 3807
+^O 13662,22755,345 2 3796
+'A 13662,23355 2 3777
+~A 13662,23229 2 3779
+~a 13662,18654,345 2 3811
+-D 13662,18300 2 3792
+Sd 12198,19083,345 2 3824
+'I 7806,23355 2 3789
+`I 7806,23355 2 3788
+'O 13662,23355,345 2 3795
+`O 13662,23355,345 2 3794
+~O 13662,23229,345 2 3797
+~o 12198,18654,345 2 3829
vS 12198,22755,345 2 51795
vs 11220,18180,345 2 51827
-char218 13173,23355,345 2 3802
-'U "
+'U 13173,23355,345 2 3802
:Y 13173,23325 2 51801
-char255 12198,18750,4605 3 3839
-:y "
-char222 13173,18300 2 3806
-TP "
-char254 12684,18300,4290 3 3838
-Tp "
-char181 14637,10800,5193 1 3765
-char182 12198,19635,4200 3 3766
-ps "
-char190 17565,18645,345 2 3774
-34 "
+:y 12198,18750,4605 3 3839
+TP 13173,18300 2 3806
+Tp 12684,18300,4290 3 3838
+mc 14637,10800,5193 1 3765
+ps 12198,19635,4200 3 3766
+34 17565,18645,345 2 3774
\- 17565,10200 0 51757
-char188 17565,18645,345 2 3772
-14 "
-char189 17565,18645,345 2 3773
-12 "
-char170 11709,18645 2 3754
-Of "
-char186 11709,18645 2 3770
-Om "
-char171 12198,12195 0 3755
-Fo "
-char187 12198,12195 0 3771
-Fc "
-char177 17565,16500 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19725 2 3753
-co "
-char172 17565,13479 0 3756
-no "
-char174 13173,19725 2 3758
-rg "
-char178 7806,18480 2 3762
-S2 "
-char179 7806,18480 2 3763
-S3 "
-char184 11709,108,4737 1 3768
-ac "
-char185 7806,18300 2 3769
-S1 "
-char215 17565,16782 0 3799
-char247 17565,15045 0 3831
-char183 5856,11745 0 3767
-pc "
+14 17565,18645,345 2 3772
+12 17565,18645,345 2 3773
+Of 11709,18645 2 3754
+Om 11709,18645 2 3770
+Fo 12198,12195 0 3755
+Fc 12198,12195 0 3771
+t+- 17565,16500 0 3761
+bb 13173,19083,5916 3 3750
+co 13173,19725 2 3753
+no 17565,13479 0 3756
+rg 13173,19725 2 3758
+S2 7806,18480 2 3762
+S3 7806,18480 2 3763
+ac 11709,108,4737 1 3768
+S1 7806,18300 2 3769
+tmu 17565,16782 0 3799
+tdi 17565,15045 0 3831
+pc 5856,11745 0 3767
fm 5856,18645 2 51873
sd 10245,18645 2 51874
dg 11709,18300,4575 3 51755
@@ -334,8 +244,7 @@ Fl 24396,18645 2 51885
ij 14637,18705,4605 3 51958
bq 5856,3615,3705 0 51756
%0 23418,18645,345 2 51901
-char175 11709,16920 2 3759
-a- "
+a- 11709,16920 2 3759
ab 11709,19080 2 51926
a. 11709,18750 2 51927
oe 18051,14250,345 0 51823
diff --git a/contrib/groff/font/devlj4/CORONET b/contrib/groff/font/devlj4/CORONET
index 9dcecce..cc26caa 100644
--- a/contrib/groff/font/devlj4/CORONET
+++ b/contrib/groff/font/devlj4/CORONET
@@ -22,8 +22,7 @@ cq 13227,19320 2 51751
* 13227,18990 2 3626
+ 13227,15075 0 3627
, 13227,1785,2250 0 3628
-char173 13227,7995 0 3629
-hy "
+hy 13227,7995 0 3629
- "
. 13227,2100,330 0 3630
sl 13227,19545,330 2 3631
@@ -115,198 +114,109 @@ ba 13227,19758,6588 3 3708
rC 13227,20130,6075 3 3709
} "
ti 13227,10485 0 51876
-char192 13227,24630 2 3776
-`A "
-char194 13227,24810 2 3778
-^A "
-char200 13227,24630 2 3784
-`E "
-char202 13227,24810 2 3786
-^E "
-char203 13227,23115 2 3787
-:E "
-char206 13227,24810 2 3790
-^I "
-char207 13227,23115 2 3791
-:I "
-char180 13227,19725 2 3764
-aa "
+`A 13227,24630 2 3776
+^A 13227,24810 2 3778
+`E 13227,24630 2 3784
+^E 13227,24810 2 3786
+:E 13227,23115 2 3787
+^I 13227,24810 2 3790
+:I 13227,23115 2 3791
+aa 13227,19725 2 3764
ga 13227,19725 2 3680
a^ 13227,19905 2 3678
^ "
-char168 13227,18195 2 3752
-ad "
+ad 13227,18195 2 3752
a~ 13227,18873 2 3710
~ "
-char217 13227,24630,330 2 3801
-`U "
-char219 13227,24810,330 2 3803
-^U "
-char221 13227,24630 2 3805
-'Y "
-char253 13227,19725,4350 2 3837
-'y "
-char176 13227,19320 2 3760
-de "
-char199 13227,19320,5325 3 3783
-,C "
-char231 13227,14355,5295 1 3815
-,c "
-char209 13227,23814 2 3793
-~N "
-char241 13227,18873 2 3825
-~n "
-char161 13227,14271,5049 1 3745
-r! "
-char191 13227,14214,5436 1 3775
-r? "
-char164 13227,15684 0 3748
-Cs "
-char163 13227,19320,330 2 3747
-Po "
-char165 13227,18990 2 3749
-Ye "
-char167 13227,19320,1344 2 3751
-sc "
+`U 13227,24630,330 2 3801
+^U 13227,24810,330 2 3803
+'Y 13227,24630 2 3805
+'y 13227,19725,4350 2 3837
+de 13227,19320 2 3760
+,C 13227,19320,5325 3 3783
+,c 13227,14355,5295 1 3815
+~N 13227,23814 2 3793
+~n 13227,18873 2 3825
+r! 13227,14271,5049 1 3745
+r? 13227,14214,5436 1 3775
+Cs 13227,15684 0 3748
+Po 13227,19320,330 2 3747
+Ye 13227,18990 2 3749
+sc 13227,19320,1344 2 3751
Fn 13227,19335,3540 2 51871
-char162 13227,19320,330 2 3746
-ct "
-char226 13227,19905,330 2 3810
-^a "
-char234 13227,19905,330 2 3818
-^e "
-char244 13227,19905,330 2 3828
-^o "
-char251 13227,19905,330 2 3835
-^u "
-char225 13227,19725,330 2 3809
-'a "
-char233 13227,19725,330 2 3817
-'e "
-char243 13227,19725,330 2 3827
-'o "
-char250 13227,19725,330 2 3834
-'u "
-char224 13227,19725,330 2 3808
-`a "
-char232 13227,19725,330 2 3816
-`e "
-char242 13227,19725,330 2 3826
-`o "
-char249 13227,19725,330 2 3833
-`u "
-char228 13227,18195,330 2 3812
-:a "
-char235 13227,18195,330 2 3819
-:e "
-char246 13227,18195,330 2 3830
-:o "
-char252 13227,18195,330 2 3836
-:u "
-char197 13227,24810 2 3781
-oA "
-char238 13227,19905 2 3822
-^i "
-char216 13227,19320,342 2 3800
-/O "
-char198 13227,18990 2 3782
-AE "
-char229 13227,19905,330 2 3813
-oa "
-char237 13227,19725 2 3821
-'i "
-char248 13227,14895,735 0 3832
-/o "
-char230 13227,14355,330 0 3814
-ae "
-char196 13227,23115 2 3780
-:A "
-char236 13227,19725 2 3820
-`i "
-char214 13227,23115,330 2 3798
-:O "
-char220 13227,23115,330 2 3804
-:U "
-char201 13227,24630 2 3785
-'E "
-char239 13227,18195 2 3823
-:i "
-char223 13227,19335,330 2 3807
-ss "
-char212 13227,24810,330 2 3796
-^O "
-char193 13227,24630 2 3777
-'A "
-char195 13227,23814 2 3779
-~A "
-char227 13227,18873,330 2 3811
-~a "
-char208 13227,18990 2 3792
--D "
-char240 13227,19545,330 2 3824
-Sd "
-char205 13227,24630 2 3789
-'I "
-char204 13227,24630 2 3788
-`I "
-char211 13227,24630,330 2 3795
-'O "
-char210 13227,24630,330 2 3794
-`O "
-char213 13227,23814,330 2 3797
-~O "
-char245 13227,18873,330 2 3829
-~o "
+ct 13227,19320,330 2 3746
+^a 13227,19905,330 2 3810
+^e 13227,19905,330 2 3818
+^o 13227,19905,330 2 3828
+^u 13227,19905,330 2 3835
+'a 13227,19725,330 2 3809
+'e 13227,19725,330 2 3817
+'o 13227,19725,330 2 3827
+'u 13227,19725,330 2 3834
+`a 13227,19725,330 2 3808
+`e 13227,19725,330 2 3816
+`o 13227,19725,330 2 3826
+`u 13227,19725,330 2 3833
+:a 13227,18195,330 2 3812
+:e 13227,18195,330 2 3819
+:o 13227,18195,330 2 3830
+:u 13227,18195,330 2 3836
+oA 13227,24810 2 3781
+^i 13227,19905 2 3822
+/O 13227,19320,342 2 3800
+AE 13227,18990 2 3782
+oa 13227,19905,330 2 3813
+'i 13227,19725 2 3821
+/o 13227,14895,735 0 3832
+ae 13227,14355,330 0 3814
+:A 13227,23115 2 3780
+`i 13227,19725 2 3820
+:O 13227,23115,330 2 3798
+:U 13227,23115,330 2 3804
+'E 13227,24630 2 3785
+:i 13227,18195 2 3823
+ss 13227,19335,330 2 3807
+^O 13227,24810,330 2 3796
+'A 13227,24630 2 3777
+~A 13227,23814 2 3779
+~a 13227,18873,330 2 3811
+-D 13227,18990 2 3792
+Sd 13227,19545,330 2 3824
+'I 13227,24630 2 3789
+`I 13227,24630 2 3788
+'O 13227,24630,330 2 3795
+`O 13227,24630,330 2 3794
+~O 13227,23814,330 2 3797
+~o 13227,18873,330 2 3829
vS 13227,24810,330 2 51795
vs 13227,19905,330 2 51827
-char218 13227,24630,330 2 3802
-'U "
+'U 13227,24630,330 2 3802
:Y 13227,23115 2 51801
-char255 13227,18195,4350 2 3839
-:y "
-char222 13227,18990 2 3806
-TP "
-char254 13227,19545,5475 3 3838
-Tp "
-char181 13227,14025,4350 0 3765
-char182 13227,19635,4200 2 3766
-ps "
-char190 13227,19110,3825 2 3774
-34 "
+:y 13227,18195,4350 2 3839
+TP 13227,18990 2 3806
+Tp 13227,19545,5475 3 3838
+mc 13227,14025,4350 0 3765
+ps 13227,19635,4200 2 3766
+34 13227,19110,3825 2 3774
\- 13227,9945 0 51757
-char188 13227,19110,3825 2 3772
-14 "
-char189 13227,19110,3825 2 3773
-12 "
-char170 13227,19320 2 3754
-Of "
-char186 13227,19320 2 3770
-Om "
-char171 13227,13710 0 3755
-Fo "
-char187 13227,13710 0 3771
-Fc "
-char177 13227,15075 0 3761
-char166 13227,19083,5916 3 3750
-bb "
-char169 13227,19635 2 3753
-co "
-char172 13227,12501 0 3756
-no "
-char174 13227,19635 2 3758
-rg "
-char178 13227,19110 2 3762
-S2 "
-char179 13227,19110 2 3763
-S3 "
-char184 13227,0,5295 1 3768
-ac "
-char185 13227,19110 2 3769
-S1 "
-char215 13227,14814 0 3799
-char247 13227,14655 0 3831
-char183 13227,11007 0 3767
-pc "
+14 13227,19110,3825 2 3772
+12 13227,19110,3825 2 3773
+Of 13227,19320 2 3754
+Om 13227,19320 2 3770
+Fo 13227,13710 0 3755
+Fc 13227,13710 0 3771
+t+- 13227,15075 0 3761
+bb 13227,19083,5916 3 3750
+co 13227,19635 2 3753
+no 13227,12501 0 3756
+rg 13227,19635 2 3758
+S2 13227,19110 2 3762
+S3 13227,19110 2 3763
+ac 13227,0,5295 1 3768
+S1 13227,19110 2 3769
+tmu 13227,14814 0 3799
+tdi 13227,14655 0 3831
+pc 13227,11007 0 3767
fm 13227,18990 2 51873
sd 13227,18990 2 51874
dg 13227,18990 2 51755
@@ -334,8 +244,7 @@ Fl 13227,19335 2 51885
ij 13227,18780,4350 2 51958
bq 13227,2214,2091 0 51756
%0 13227,19320,330 2 51901
-char175 13227,18051 2 3759
-a- "
+a- 13227,18051 2 3759
ab 13227,19350 2 51926
a. 13227,18195 2 51927
oe 13227,14355,330 0 51823
diff --git a/contrib/groff/font/devlj4/CR b/contrib/groff/font/devlj4/CR
index c6da8a6..6ca3ca8 100644
--- a/contrib/groff/font/devlj4/CR
+++ b/contrib/groff/font/devlj4/CR
@@ -21,8 +21,7 @@ cq 15873,15060 0 51751
* 15873,15060 0 3626
+ 15873,11385 0 3627
, 15873,3195,3420 0 3628
-char173 15873,7275 0 3629
-hy "
+hy 15873,7275 0 3629
- "
. 15873,2805,330 0 3630
sl 15873,18465,3765 2 3631
@@ -114,198 +113,109 @@ ba 15873,19758,6588 3 3708
rC 15873,20130,6075 3 3709
} "
ti 15873,7233 0 51876
-char192 15873,21180 2 3776
-`A "
-char194 15873,21180 2 3778
-^A "
-char200 15873,21180 2 3784
-`E "
-char202 15873,21180 2 3786
-^E "
-char203 15873,20670 2 3787
-:E "
-char206 15873,21180 2 3790
-^I "
-char207 15873,20670 2 3791
-:I "
-char180 15873,17565 2 3764
-aa "
+`A 15873,21180 2 3776
+^A 15873,21180 2 3778
+`E 15873,21180 2 3784
+^E 15873,21180 2 3786
+:E 15873,20670 2 3787
+^I 15873,21180 2 3790
+:I 15873,20670 2 3791
+aa 15873,17565 2 3764
ga 15873,17565 2 3680
a^ 15873,17565 2 3678
^ "
-char168 15873,16905 2 3752
-ad "
+ad 15873,16905 2 3752
a~ 15873,16830 2 3710
~ "
-char217 15873,21180,330 2 3801
-`U "
-char219 15873,21180,330 2 3803
-^U "
-char221 15873,21180 2 3805
-'Y "
-char253 15873,17565,5145 3 3837
-'y "
-char176 15873,15390 0 3760
-de "
-char199 15873,15390,5175 1 3783
-,C "
-char231 15873,11775,4815 1 3815
-,c "
-char209 15873,20571 2 3793
-~N "
-char241 15873,16830 2 3825
-~n "
-char161 15873,11880,3510 0 3745
-r! "
-char191 15873,11898,3822 0 3775
-r? "
-char164 15873,15684 2 3748
-Cs "
-char163 15873,15390,330 0 3747
-Po "
-char165 15873,15060 0 3749
-Ye "
-char167 15873,15390,1905 0 3751
-sc "
+`U 15873,21180,330 2 3801
+^U 15873,21180,330 2 3803
+'Y 15873,21180 2 3805
+'y 15873,17565,5145 3 3837
+de 15873,15390 0 3760
+,C 15873,15390,5175 1 3783
+,c 15873,11775,4815 1 3815
+~N 15873,20571 2 3793
+~n 15873,16830 2 3825
+r! 15873,11880,3510 0 3745
+r? 15873,11898,3822 0 3775
+Cs 15873,15684 2 3748
+Po 15873,15390,330 0 3747
+Ye 15873,15060 0 3749
+sc 15873,15390,1905 0 3751
Fn 15873,15090,4350 0 51871
-char162 15873,16179,1431 2 3746
-ct "
-char226 15873,17565,330 2 3810
-^a "
-char234 15873,17565,330 2 3818
-^e "
-char244 15873,17565,330 2 3828
-^o "
-char251 15873,17565,330 2 3835
-^u "
-char225 15873,17565,330 2 3809
-'a "
-char233 15873,17565,330 2 3817
-'e "
-char243 15873,17565,330 2 3827
-'o "
-char250 15873,17565,330 2 3834
-'u "
-char224 15873,17565,330 2 3808
-`a "
-char232 15873,17565,330 2 3816
-`e "
-char242 15873,17565,330 2 3826
-`o "
-char249 15873,17565,330 2 3833
-`u "
-char228 15873,16905,330 2 3812
-:a "
-char235 15873,16905,330 2 3819
-:e "
-char246 15873,16905,330 2 3830
-:o "
-char252 15873,16905,330 2 3836
-:u "
-char197 15873,21690 2 3781
-oA "
-char238 15873,17565 2 3822
-^i "
-char216 15873,15591,612 2 3800
-/O "
-char198 15873,15060 0 3782
-AE "
-char229 15873,17997,330 2 3813
-oa "
-char237 15873,17565 2 3821
-'i "
-char248 15873,11856,459 0 3832
-/o "
-char230 15873,11775,330 0 3814
-ae "
-char196 15873,20670 2 3780
-:A "
-char236 15873,17565 2 3820
-`i "
-char214 15873,20670,330 2 3798
-:O "
-char220 15873,20670,330 2 3804
-:U "
-char201 15873,21180 2 3785
-'E "
-char239 15873,16905 2 3823
-:i "
-char223 15873,16500,330 2 3807
-ss "
-char212 15873,21180,330 2 3796
-^O "
-char193 15873,21180 2 3777
-'A "
-char195 15873,20571 2 3779
-~A "
-char227 15873,16830,330 2 3811
-~a "
-char208 15873,15060 0 3792
--D "
-char240 15873,18015,330 2 3824
-Sd "
-char205 15873,21180 2 3789
-'I "
-char204 15873,21180 2 3788
-`I "
-char211 15873,21180,330 2 3795
-'O "
-char210 15873,21180,330 2 3794
-`O "
-char213 15873,20571,330 2 3797
-~O "
-char245 15873,16830,330 2 3829
-~o "
+ct 15873,16179,1431 2 3746
+^a 15873,17565,330 2 3810
+^e 15873,17565,330 2 3818
+^o 15873,17565,330 2 3828
+^u 15873,17565,330 2 3835
+'a 15873,17565,330 2 3809
+'e 15873,17565,330 2 3817
+'o 15873,17565,330 2 3827
+'u 15873,17565,330 2 3834
+`a 15873,17565,330 2 3808
+`e 15873,17565,330 2 3816
+`o 15873,17565,330 2 3826
+`u 15873,17565,330 2 3833
+:a 15873,16905,330 2 3812
+:e 15873,16905,330 2 3819
+:o 15873,16905,330 2 3830
+:u 15873,16905,330 2 3836
+oA 15873,21690 2 3781
+^i 15873,17565 2 3822
+/O 15873,15591,612 2 3800
+AE 15873,15060 0 3782
+oa 15873,17997,330 2 3813
+'i 15873,17565 2 3821
+/o 15873,11856,459 0 3832
+ae 15873,11775,330 0 3814
+:A 15873,20670 2 3780
+`i 15873,17565 2 3820
+:O 15873,20670,330 2 3798
+:U 15873,20670,330 2 3804
+'E 15873,21180 2 3785
+:i 15873,16905 2 3823
+ss 15873,16500,330 2 3807
+^O 15873,21180,330 2 3796
+'A 15873,21180 2 3777
+~A 15873,20571 2 3779
+~a 15873,16830,330 2 3811
+-D 15873,15060 0 3792
+Sd 15873,18015,330 2 3824
+'I 15873,21180 2 3789
+`I 15873,21180 2 3788
+'O 15873,21180,330 2 3795
+`O 15873,21180,330 2 3794
+~O 15873,20571,330 2 3797
+~o 15873,16830,330 2 3829
vS 15873,21180,330 2 51795
vs 15873,17565,330 2 51827
-char218 15873,21180,330 2 3802
-'U "
+'U 15873,21180,330 2 3802
:Y 15873,20670 2 51801
-char255 15873,16905,5145 3 3839
-:y "
-char222 15873,15060 0 3806
-TP "
-char254 15873,16500,5145 3 3838
-Tp "
-char181 15873,11445,5595 1 3765
-char182 15873,19635,4080 2 3766
-ps "
-char190 15873,15519,2673 2 3774
-34 "
+:y 15873,16905,5145 3 3839
+TP 15873,15060 0 3806
+Tp 15873,16500,5145 3 3838
+mc 15873,11445,5595 1 3765
+ps 15873,19635,4080 2 3766
+34 15873,15519,2673 2 3774
\- 15873,6435 0 51757
-char188 15873,15519,2673 2 3772
-14 "
-char189 15873,15519,2673 2 3773
-12 "
-char170 15873,15390 0 3754
-Of "
-char186 15873,15390 0 3770
-Om "
-char171 15873,11490 0 3755
-Fo "
-char187 15873,11490 0 3771
-Fc "
-char177 15873,11385,2835 0 3761
-char166 15873,19083,5916 3 3750
-bb "
-char169 15873,19635 2 3753
-co "
-char172 15873,8865 0 3756
-no "
-char174 15873,19635 2 3758
-rg "
-char178 15873,15240 0 3762
-S2 "
-char179 15873,15240 0 3763
-S3 "
-char184 15873,0,4815 1 3768
-ac "
-char185 15873,15060 0 3769
-S1 "
-char215 15873,11340 0 3799
-char247 15873,10530 0 3831
-char183 15873,8931 0 3767
-pc "
+14 15873,15519,2673 2 3772
+12 15873,15519,2673 2 3773
+Of 15873,15390 0 3754
+Om 15873,15390 0 3770
+Fo 15873,11490 0 3755
+Fc 15873,11490 0 3771
+t+- 15873,11385,2835 0 3761
+bb 15873,19083,5916 3 3750
+co 15873,19635 2 3753
+no 15873,8865 0 3756
+rg 15873,19635 2 3758
+S2 15873,15240 0 3762
+S3 15873,15240 0 3763
+ac 15873,0,4815 1 3768
+S1 15873,15060 0 3769
+tmu 15873,11340 0 3799
+tdi 15873,10530 0 3831
+pc 15873,8931 0 3767
fm 15873,15060 0 51873
sd 15873,15060 0 51874
dg 15873,15060,1290 0 51755
@@ -333,8 +243,7 @@ Fl 15873,16500 2 51885
ij 15873,17235,5145 3 51958
bq 15873,3495,3120 0 51756
%0 15873,16380,330 2 51901
-char175 15873,15726 2 3759
-a- "
+a- 15873,15726 2 3759
ab 15873,16725 2 51926
a. 15873,16905 2 51927
oe 15873,11775,330 0 51823
diff --git a/contrib/groff/font/devlj4/GB b/contrib/groff/font/devlj4/GB
index 5433de6..b5dd52d 100644
--- a/contrib/groff/font/devlj4/GB
+++ b/contrib/groff/font/devlj4/GB
@@ -323,19 +323,16 @@ U a -486
U q -486
L cq -2925
L ' -2925
-T char173 -3414
T hy -3414
T - -3414
T en -3414
T em -3414
A cq -2925
A ' -2925
-char173 T -3414
hy T -3414
- T -3414
en T -3414
em T -3414
-Y char173 -2439
Y hy -2439
Y - -2439
Y en -2439
@@ -348,7 +345,6 @@ b cq -975
b ' -975
a cq -975
a ' -975
-V char173 -1950
V hy -1950
V - -1950
V en -1950
@@ -361,40 +357,33 @@ m cq -975
m ' -975
R cq -1461
R ' -1461
-W char173 -1950
W hy -1950
W - -1950
W en -1950
W em -1950
cq d -1461
' d -1461
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -975
A hy -975
A - -975
A en -975
A em -975
-K char173 -975
K hy -975
K - -975
K en -975
K em -975
cq s -486
' s -486
-char173 X -1461
hy X -1461
- X -1461
-char173 A -975
hy A -975
- A -975
en X -1461
en A -975
em X -1461
-R char173 -1461
R hy -1461
R - -1461
R en -1461
@@ -420,8 +409,7 @@ cq 6831,18555 2 51751
* 13173,18555 2 3626
+ 21954,13467,87 0 3627
, 7317,3972,4152 0 3628
-char173 7317,7575 0 3629
-hy "
+hy 7317,7575 0 3629
- "
. 7317,3915,390 0 3630
sl 13173,20250,300 2 3631
@@ -513,198 +501,109 @@ ba 13173,19758,6588 3 3708
rC 13173,19935,6210 3 3709
} "
ti 26346,9435 0 51876
-char192 20004,24810,150 2 3776
-`A "
-char194 20004,24810,150 2 3778
-^A "
-char200 16587,24810,150 2 3784
-`E "
-char202 16587,24810,150 2 3786
-^E "
-char203 16587,23505,150 2 3787
-:E "
-char206 10245,24810,150 2 3790
-^I "
-char207 10245,23505,150 2 3791
-:I "
-char180 13173,20475 2 3764
-aa "
+`A 20004,24810,150 2 3776
+^A 20004,24810,150 2 3778
+`E 16587,24810,150 2 3784
+^E 16587,24810,150 2 3786
+:E 16587,23505,150 2 3787
+^I 10245,24810,150 2 3790
+:I 10245,23505,150 2 3791
+aa 13173,20475 2 3764
ga 13173,20475 2 3680
a^ 13173,20475 2 3678
^ "
-char168 13173,18090 0 3752
-ad "
+ad 13173,18090 0 3752
a~ 13173,18324 2 3710
~ "
-char217 21468,24810,390 2 3801
-`U "
-char219 21468,24810,390 2 3803
-^U "
-char221 18540,24810,150 2 3805
-'Y "
-char253 13662,20475,6705 3 3837
-'y "
-char176 13173,17415 0 3760
-de "
-char199 20004,18555,6405 3 3783
-,C "
-char231 11220,12420,5694 0 3815
-,c "
-char209 22443,23973,612 2 3793
-~N "
-char241 15612,18324,150 2 3825
-~n "
-char161 7317,12330,7008 1 3745
-r! "
-char191 10245,12330,7008 1 3775
-r? "
-char164 13173,15834 0 3748
-Cs "
-char163 13173,17805,390 0 3747
-Po "
-char165 13173,18315,150 2 3749
-Ye "
-char167 13173,18555,6705 3 3751
-sc "
+`U 21468,24810,390 2 3801
+^U 21468,24810,390 2 3803
+'Y 18540,24810,150 2 3805
+'y 13662,20475,6705 3 3837
+de 13173,17415 0 3760
+,C 20004,18555,6405 3 3783
+,c 11220,12420,5694 0 3815
+~N 22443,23973,612 2 3793
+~n 15612,18324,150 2 3825
+r! 7317,12330,7008 1 3745
+r? 10245,12330,7008 1 3775
+Cs 13173,15834 0 3748
+Po 13173,17805,390 0 3747
+Ye 13173,18315,150 2 3749
+sc 13173,18555,6705 3 3751
Fn 13173,20250,6705 3 51871
-char162 13173,18012,57 0 3746
-ct "
-char226 12198,20475,390 2 3810
-^a "
-char234 11709,20475,390 2 3818
-^e "
-char244 14148,20475,390 2 3828
-^o "
-char251 15612,20475,390 2 3835
-^u "
-char225 12198,20475,390 2 3809
-'a "
-char233 11709,20475,390 2 3817
-'e "
-char243 14148,20475,390 2 3827
-'o "
-char250 15612,20475,390 2 3834
-'u "
-char224 12198,20475,390 2 3808
-`a "
-char232 11709,20475,390 2 3816
-`e "
-char242 14148,20475,390 2 3826
-`o "
-char249 15612,20475,390 2 3833
-`u "
-char228 12198,18090,390 0 3812
-:a "
-char235 11709,18090,390 0 3819
-:e "
-char246 14148,18090,390 0 3830
-:o "
-char252 15612,18090,390 0 3836
-:u "
-char197 20004,25065,150 2 3781
-oA "
-char238 7806,20475,150 2 3822
-^i "
-char216 22932,18729,390 2 3800
-/O "
-char198 25857,18315,150 2 3782
-AE "
-char229 12198,19836,390 2 3813
-oa "
-char237 7806,20475,150 2 3821
-'i "
-char248 14148,12525,804 0 3832
-/o "
-char230 18051,12420,390 0 3814
-ae "
-char196 20004,23505,150 2 3780
-:A "
-char236 7806,20475,150 2 3820
-`i "
-char214 22932,23505,390 2 3798
-:O "
-char220 21468,23505,390 2 3804
-:U "
-char201 16587,24810,150 2 3785
-'E "
-char239 7806,18090,150 0 3823
-:i "
-char223 15612,20250,390 2 3807
-ss "
-char212 22932,24810,390 2 3796
-^O "
-char193 20004,24810,150 2 3777
-'A "
-char195 20004,23973,150 2 3779
-~A "
-char227 12198,18324,390 2 3811
-~a "
-char208 21954,18555,150 2 3792
--D "
-char240 14148,20250,390 2 3824
-Sd "
-char205 10245,24810,150 2 3789
-'I "
-char204 10245,24810,150 2 3788
-`I "
-char211 22932,24810,390 2 3795
-'O "
-char210 22932,24810,390 2 3794
-`O "
-char213 22932,23973,390 2 3797
-~O "
-char245 14148,18324,390 2 3829
-~o "
+ct 13173,18012,57 0 3746
+^a 12198,20475,390 2 3810
+^e 11709,20475,390 2 3818
+^o 14148,20475,390 2 3828
+^u 15612,20475,390 2 3835
+'a 12198,20475,390 2 3809
+'e 11709,20475,390 2 3817
+'o 14148,20475,390 2 3827
+'u 15612,20475,390 2 3834
+`a 12198,20475,390 2 3808
+`e 11709,20475,390 2 3816
+`o 14148,20475,390 2 3826
+`u 15612,20475,390 2 3833
+:a 12198,18090,390 0 3812
+:e 11709,18090,390 0 3819
+:o 14148,18090,390 0 3830
+:u 15612,18090,390 0 3836
+oA 20004,25065,150 2 3781
+^i 7806,20475,150 2 3822
+/O 22932,18729,390 2 3800
+AE 25857,18315,150 2 3782
+oa 12198,19836,390 2 3813
+'i 7806,20475,150 2 3821
+/o 14148,12525,804 0 3832
+ae 18051,12420,390 0 3814
+:A 20004,23505,150 2 3780
+`i 7806,20475,150 2 3820
+:O 22932,23505,390 2 3798
+:U 21468,23505,390 2 3804
+'E 16587,24810,150 2 3785
+:i 7806,18090,150 0 3823
+ss 15612,20250,390 2 3807
+^O 22932,24810,390 2 3796
+'A 20004,24810,150 2 3777
+~A 20004,23973,150 2 3779
+~a 12198,18324,390 2 3811
+-D 21954,18555,150 2 3792
+Sd 14148,20250,390 2 3824
+'I 10245,24810,150 2 3789
+`I 10245,24810,150 2 3788
+'O 22932,24810,390 2 3795
+`O 22932,24810,390 2 3794
+~O 22932,23973,390 2 3797
+~o 14148,18324,390 2 3829
vS 14148,24810,390 2 51795
vs 9759,20475,390 2 51827
-char218 21468,24810,390 2 3802
-'U "
+'U 21468,24810,390 2 3802
:Y 18540,23505,150 2 51801
-char255 13662,18090,6705 1 3839
-:y "
-char222 16587,18315,153 2 3806
-TP "
-char254 14637,20250,6855 3 3838
-Tp "
-char181 14637,10800,5193 0 3765
-char182 13173,19635,4200 2 3766
-ps "
-char190 21954,17805,390 0 3774
-34 "
+:y 13662,18090,6705 1 3839
+TP 16587,18315,153 2 3806
+Tp 14637,20250,6855 3 3838
+mc 14637,10800,5193 0 3765
+ps 13173,19635,4200 2 3766
+34 21954,17805,390 0 3774
\- 21954,7755 0 51757
-char188 21954,17805,390 0 3772
-14 "
-char189 21954,17805,390 0 3773
-12 "
-char170 12198,17805 0 3754
-Of "
-char186 12198,17805 0 3770
-Om "
-char171 12684,10605 0 3755
-Fo "
-char187 12684,10605 0 3771
-Fc "
-char177 21954,13467,3354 0 3761
-char166 13173,19083,5916 2 3750
-bb "
-char169 13173,19725 2 3753
-co "
-char172 21954,10560 0 3756
-no "
-char174 13173,19725 2 3758
-rg "
-char178 9270,17805 0 3762
-S2 "
-char179 9270,17805 0 3763
-S3 "
-char184 13173,57,5694 0 3768
-ac "
-char185 9270,17805 0 3769
-S1 "
-char215 21954,13470,144 0 3799
-char247 21954,13383,3 0 3831
-char183 7317,10722 0 3767
-pc "
+14 21954,17805,390 0 3772
+12 21954,17805,390 0 3773
+Of 12198,17805 0 3754
+Om 12198,17805 0 3770
+Fo 12684,10605 0 3755
+Fc 12684,10605 0 3771
+t+- 21954,13467,3354 0 3761
+bb 13173,19083,5916 2 3750
+co 13173,19725 2 3753
+no 21954,10560 0 3756
+rg 13173,19725 2 3758
+S2 9270,17805 0 3762
+S3 9270,17805 0 3763
+ac 13173,57,5694 0 3768
+S1 9270,17805 0 3769
+tmu 21954,13470,144 0 3799
+tdi 21954,13383,3 0 3831
+pc 7317,10722 0 3767
fm 13173,17805 0 51873
sd 13173,17805 0 51874
dg 13173,18555,6579 3 51755
@@ -732,8 +631,7 @@ Fl 23418,20250,150 2 51885
ij 15126,19329,6705 3 51958
bq 6831,3714,3519 0 51756
%0 30249,17805,180 0 51901
-char175 13173,17088 0 3759
-a- "
+a- 13173,17088 0 3759
ab 13173,17079 0 51926
a. 13173,18471 2 51927
oe 20979,12420,390 0 51823
diff --git a/contrib/groff/font/devlj4/GBI b/contrib/groff/font/devlj4/GBI
index 806237c..5ea7f10 100644
--- a/contrib/groff/font/devlj4/GBI
+++ b/contrib/groff/font/devlj4/GBI
@@ -313,19 +313,16 @@ B U -486
U o -486
L cq -4878
L ' -4878
-T char173 -3903
T hy -3903
T - -3903
T en -3903
T em -3903
A cq -2439
A ' -2439
-char173 T -3903
hy T -3903
- T -3903
en T -3903
em T -3903
-Y char173 -2925
Y hy -2925
Y - -2925
Y en -2925
@@ -334,7 +331,6 @@ p cq -486
p ' -486
b cq -975
b ' -975
-V char173 -1950
V hy -1950
V - -1950
V en -1950
@@ -347,43 +343,35 @@ m cq -486
m ' -486
R cq -975
R ' -975
-W char173 -1461
W hy -1461
W - -1461
W en -1461
W em -1461
cq d -975
' d -975
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1461
A hy -1461
A - -1461
A en -1461
A em -1461
-K char173 -975
K hy -975
K - -975
K en -975
K em -975
-char173 X -1461
hy X -1461
- X -1461
-char173 A -1461
hy A -1461
- A -1461
en X -1461
en A -1461
em X -1461
-R char173 -975
R hy -975
R - -975
R en -975
@@ -394,14 +382,12 @@ w cq -486
w ' -486
E cq -486
E ' -486
-Z char173 -1461
Z hy -1461
Z - -1461
Z en -1461
Z em -1461
B cq -486
B ' -486
-w char173 -486
w hy -486
w - -486
w en -486
@@ -423,8 +409,7 @@ cq 6831,18555,0,2763,-1368,962 2 51751
* 13173,18555,0,1908,-1731,962 2 3626
+ 21954,13467,87,0,-2871 0 3627
, 6831,3381,4077,0,687 0 3628
-char173 6831,7575,0,882,558,882 0 3629
-hy "
+hy 6831,7575,0,882,558,882 0 3629
- "
. 6831,3486,390,0,-270 0 3630
sl 13173,18594,390,4080,1101,962 2 3631
@@ -516,198 +501,109 @@ ba 13173,19758,6588,0,-4596 3 3708
rC 13173,19935,6210,63,2304,63 2 3709
} "
ti 26346,9435,0,0,-4029 0 51876
-char192 19515,24843,195,15,1764,15 2 3776
-`A "
-char194 19515,25182,195,15,1764,15 2 3778
-^A "
-char200 16587,24843,195,1848,1476,962 2 3784
-`E "
-char202 16587,25182,195,1848,1476,962 2 3786
-^E "
-char203 16587,23439,195,1848,1476,962 2 3787
-:E "
-char206 10245,25182,195,4377,1542,962 2 3790
-^I "
-char207 10245,23439,195,3792,1542,962 2 3791
-:I "
-char180 13173,19668,0,1317,-6054,962 2 3764
-aa "
+`A 19515,24843,195,15,1764,15 2 3776
+^A 19515,25182,195,15,1764,15 2 3778
+`E 16587,24843,195,1848,1476,962 2 3784
+^E 16587,25182,195,1848,1476,962 2 3786
+:E 16587,23439,195,1848,1476,962 2 3787
+^I 10245,25182,195,4377,1542,962 2 3790
+:I 10245,23439,195,3792,1542,962 2 3791
+aa 13173,19668,0,1317,-6054,962 2 3764
ga 13173,19668,0,0,-2961 2 3680
a^ 13173,20514,0,285,-3393,285 2 3678
^ "
-char168 13173,18057,0,1161,-3669,962 0 3752
-ad "
+ad 13173,18057,0,1161,-3669,962 0 3752
a~ 13173,18468,0,1074,-3600,962 2 3710
~ "
-char217 21468,24843,390,3498,-1761,962 2 3801
-`U "
-char219 21468,25182,390,3498,-1761,962 2 3803
-^U "
-char221 19515,24843,195,3228,-2169,962 2 3805
-'Y "
-char253 13173,19668,6705,1317,1767,962 3 3837
-'y "
-char176 13173,17415,0,600,-1974,600 0 3760
-de "
-char199 19515,18555,6060,2028,-837,962 2 3783
-,C "
-char231 11220,12420,4776,1695,438,962 0 3815
-,c "
-char209 20979,24255,195,3810,1401,962 2 3793
-~N "
-char241 14637,18468,390,486,57,486 2 3825
-~n "
-char161 6831,12411,6696,834,2370,834 1 3745
-r! "
-char191 10245,12405,6690,0,1686 1 3775
-r? "
-char164 13173,15834,0,2349,1044,962 0 3748
-Cs "
-char163 13173,17262,390,951,1173,951 0 3747
-Po "
-char165 13173,18090,150,3885,-1269,962 0 3749
-Ye "
-char167 13173,18555,6705,525,-69,525 3 3751
-sc "
+`U 21468,24843,390,3498,-1761,962 2 3801
+^U 21468,25182,390,3498,-1761,962 2 3803
+'Y 19515,24843,195,3228,-2169,962 2 3805
+'y 13173,19668,6705,1317,1767,962 3 3837
+de 13173,17415,0,600,-1974,600 0 3760
+,C 19515,18555,6060,2028,-837,962 2 3783
+,c 11220,12420,4776,1695,438,962 0 3815
+~N 20979,24255,195,3810,1401,962 2 3793
+~n 14637,18468,390,486,57,486 2 3825
+r! 6831,12411,6696,834,2370,834 1 3745
+r? 10245,12405,6690,0,1686 1 3775
+Cs 13173,15834,0,2349,1044,962 0 3748
+Po 13173,17262,390,951,1173,951 0 3747
+Ye 13173,18090,150,3885,-1269,962 0 3749
+sc 13173,18555,6705,525,-69,525 3 3751
Fn 13173,20250,6705,3279,1419,962 3 51871
-char162 13173,17613,417,1263,-1290,962 0 3746
-ct "
-char226 13662,20514,390,1143,663,962 2 3810
-^a "
-char234 11220,20514,390,1365,429,962 2 3818
-^e "
-char244 12684,20514,390,531,339,531 2 3828
-^o "
-char251 14148,20514,390,813,111,813 2 3835
-^u "
-char225 13662,19668,390,1143,663,962 2 3809
-'a "
-char233 11220,19668,390,2295,429,962 2 3817
-'e "
-char243 12684,19668,390,1563,339,962 2 3827
-'o "
-char250 14148,19668,390,831,111,831 2 3834
-'u "
-char224 13662,19668,390,1143,663,962 2 3808
-`a "
-char232 11220,19668,390,1365,429,962 2 3816
-`e "
-char242 12684,19668,390,459,339,459 2 3826
-`o "
-char249 14148,19668,390,813,111,813 2 3833
-`u "
-char228 13662,18057,390,1143,663,962 0 3812
-:a "
-char235 11220,18057,390,2139,429,962 0 3819
-:e "
-char246 12684,18057,390,1407,339,962 0 3830
-:o "
-char252 14148,18057,390,813,111,813 0 3836
-:u "
-char197 19515,24900,195,15,1764,15 2 3781
-oA "
-char238 8295,20514,390,2724,459,962 2 3822
-^i "
-char216 21954,18555,390,1125,-696,962 2 3800
-/O "
-char198 25857,18360,195,870,2910,870 2 3782
-AE "
-char229 13662,18861,390,1377,663,962 2 3813
-oa "
-char237 8295,19668,390,3756,459,962 2 3821
-'i "
-char248 12684,12420,390,552,444,552 0 3832
-/o "
-char230 18540,13047,390,1296,477,962 0 3814
-ae "
-char196 19515,23439,195,15,1764,15 2 3780
-:A "
-char236 8295,19668,390,663,459,663 2 3820
-`i "
-char214 21954,23439,390,1014,-807,962 2 3798
-:O "
-char220 21468,23439,390,3498,-1761,962 2 3804
-:U "
-char201 16587,24843,195,1848,1476,962 2 3785
-'E "
-char239 8295,18057,390,3600,459,962 0 3823
-:i "
-char223 14148,20250,6705,2916,4902,962 3 3807
-ss "
-char212 21954,25182,390,1014,-807,962 2 3796
-^O "
-char193 19515,24843,195,15,1764,15 2 3777
-'A "
-char195 19515,24255,195,648,1764,648 2 3779
-~A "
-char227 13662,18468,390,1143,663,962 2 3811
-~a "
-char208 20490,18555,342,1557,1314,962 2 3792
--D "
-char240 12684,20250,390,600,339,600 2 3824
-Sd "
-char205 10245,24843,195,3540,1542,962 2 3789
-'I "
-char204 10245,24843,195,3429,1542,962 2 3788
-`I "
-char211 21954,24843,390,1014,-807,962 2 3795
-'O "
-char210 21954,24843,390,1014,-807,962 2 3794
-`O "
-char213 21954,24255,390,1014,-807,962 2 3797
-~O "
-char245 12684,18468,390,1320,339,962 2 3829
-~o "
+ct 13173,17613,417,1263,-1290,962 0 3746
+^a 13662,20514,390,1143,663,962 2 3810
+^e 11220,20514,390,1365,429,962 2 3818
+^o 12684,20514,390,531,339,531 2 3828
+^u 14148,20514,390,813,111,813 2 3835
+'a 13662,19668,390,1143,663,962 2 3809
+'e 11220,19668,390,2295,429,962 2 3817
+'o 12684,19668,390,1563,339,962 2 3827
+'u 14148,19668,390,831,111,831 2 3834
+`a 13662,19668,390,1143,663,962 2 3808
+`e 11220,19668,390,1365,429,962 2 3816
+`o 12684,19668,390,459,339,459 2 3826
+`u 14148,19668,390,813,111,813 2 3833
+:a 13662,18057,390,1143,663,962 0 3812
+:e 11220,18057,390,2139,429,962 0 3819
+:o 12684,18057,390,1407,339,962 0 3830
+:u 14148,18057,390,813,111,813 0 3836
+oA 19515,24900,195,15,1764,15 2 3781
+^i 8295,20514,390,2724,459,962 2 3822
+/O 21954,18555,390,1125,-696,962 2 3800
+AE 25857,18360,195,870,2910,870 2 3782
+oa 13662,18861,390,1377,663,962 2 3813
+'i 8295,19668,390,3756,459,962 2 3821
+/o 12684,12420,390,552,444,552 0 3832
+ae 18540,13047,390,1296,477,962 0 3814
+:A 19515,23439,195,15,1764,15 2 3780
+`i 8295,19668,390,663,459,663 2 3820
+:O 21954,23439,390,1014,-807,962 2 3798
+:U 21468,23439,390,3498,-1761,962 2 3804
+'E 16587,24843,195,1848,1476,962 2 3785
+:i 8295,18057,390,3600,459,962 0 3823
+ss 14148,20250,6705,2916,4902,962 3 3807
+^O 21954,25182,390,1014,-807,962 2 3796
+'A 19515,24843,195,15,1764,15 2 3777
+~A 19515,24255,195,648,1764,648 2 3779
+~a 13662,18468,390,1143,663,962 2 3811
+-D 20490,18555,342,1557,1314,962 2 3792
+Sd 12684,20250,390,600,339,600 2 3824
+'I 10245,24843,195,3540,1542,962 2 3789
+`I 10245,24843,195,3429,1542,962 2 3788
+'O 21954,24843,390,1014,-807,962 2 3795
+`O 21954,24843,390,1014,-807,962 2 3794
+~O 21954,24255,390,1014,-807,962 2 3797
+~o 12684,18468,390,1320,339,962 2 3829
vS 13173,24657,390,3903,732,962 2 51795
vs 8781,20526,390,4242,903,962 2 51827
-char218 21468,24843,390,3498,-1761,962 2 3802
-'U "
+'U 21468,24843,390,3498,-1761,962 2 3802
:Y 19515,23439,195,3228,-2169,962 2 51801
-char255 13173,18057,6705,1161,1767,962 1 3839
-:y "
-char222 16587,18360,195,846,1221,846 2 3806
-TP "
-char254 14637,20250,6900,663,3342,663 3 3838
-Tp "
-char181 14637,10800,5193,582,756,582 0 3765
-char182 13173,19635,4200,1032,-690,962 2 3766
-ps "
-char190 21954,17805,180,0,-627 0 3774
-34 "
+:y 13173,18057,6705,1161,1767,962 1 3839
+TP 16587,18360,195,846,1221,846 2 3806
+Tp 14637,20250,6900,663,3342,663 3 3838
+mc 14637,10800,5193,582,756,582 0 3765
+ps 13173,19635,4200,1032,-690,962 2 3766
+34 21954,17805,180,0,-627 0 3774
\- 21954,7755,0,0,-2892 0 51757
-char188 21954,17625,180,0,-1242 0 3772
-14 "
-char189 21954,17625,180,0,-1317 0 3773
-12 "
-char170 11220,17805,0,1833,-1338,962 0 3754
-Of "
-char186 11220,17805,0,1218,-1776,962 0 3770
-Om "
-char171 11220,9906,0,837,609,837 0 3755
-Fo "
-char187 11220,9906,0,435,1011,435 0 3771
-Fc "
-char177 21954,13467,3354,0,-2865 0 3761
-char166 13173,19083,5916,0,-4596 2 3750
-bb "
-char169 13173,19725,0,5022,-3198,962 2 3753
-co "
-char172 21954,10560,0,0,-2565 0 3756
-no "
-char174 13173,19725,0,5022,-3198,962 2 3758
-rg "
-char178 8781,17805,0,2001,-606,962 0 3762
-S2 "
-char179 8781,17805,0,1881,-387,962 0 3763
-S3 "
-char184 13173,657,4776,0,-1791 0 3768
-ac "
-char185 8781,17625,0,1389,-1590,962 0 3769
-S1 "
-char215 21954,13530,192,0,-2934 0 3799
-char247 21954,13383,3,0,-2886 0 3831
-char183 6831,10533,0,336,-1116,336 0 3767
-pc "
+14 21954,17625,180,0,-1242 0 3772
+12 21954,17625,180,0,-1317 0 3773
+Of 11220,17805,0,1833,-1338,962 0 3754
+Om 11220,17805,0,1218,-1776,962 0 3770
+Fo 11220,9906,0,837,609,837 0 3755
+Fc 11220,9906,0,435,1011,435 0 3771
+t+- 21954,13467,3354,0,-2865 0 3761
+bb 13173,19083,5916,0,-4596 2 3750
+co 13173,19725,0,5022,-3198,962 2 3753
+no 21954,10560,0,0,-2565 0 3756
+rg 13173,19725,0,5022,-3198,962 2 3758
+S2 8781,17805,0,2001,-606,962 0 3762
+S3 8781,17805,0,1881,-387,962 0 3763
+ac 13173,657,4776,0,-1791 0 3768
+S1 8781,17625,0,1389,-1590,962 0 3769
+tmu 21954,13530,192,0,-2934 0 3799
+tdi 21954,13383,3,0,-2886 0 3831
+pc 6831,10533,0,336,-1116,336 0 3767
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
@@ -735,8 +631,7 @@ Fl 21468,20250,6705,2832,3765,962 3 51885
ij 14637,18765,6705,2169,498,962 3 51958
bq 6831,3456,4002,0,2925 0 51756
%0 30249,17805,450,0,-1386 0 51901
-char175 13173,16974,0,438,-4107,438 0 3759
-a- "
+a- 13173,16974,0,438,-4107,438 0 3759
ab 13173,17325,0,1386,-5277,962 0 51926
a. 13173,18057,0,0,-6510 0 51927
oe 19029,12420,390,1338,357,962 0 51823
diff --git a/contrib/groff/font/devlj4/GI b/contrib/groff/font/devlj4/GI
index 6ca1893..8d51371 100644
--- a/contrib/groff/font/devlj4/GI
+++ b/contrib/groff/font/devlj4/GI
@@ -250,19 +250,16 @@ B o -486
U o -486
L cq -4878
L ' -4878
-T char173 -4389
T hy -4389
T - -4389
T en -4389
T em -4389
A cq -2439
A ' -2439
-char173 T -3414
hy T -3414
- T -3414
en T -3414
em T -3414
-Y char173 -2439
Y hy -2439
Y - -2439
Y en -2439
@@ -271,7 +268,6 @@ p cq -486
p ' -486
b cq -975
b ' -975
-V char173 -1461
V hy -1461
V - -1461
V en -1461
@@ -284,43 +280,35 @@ m cq -486
m ' -486
R cq -1950
R ' -1950
-W char173 -1461
W hy -1461
W - -1461
W en -1461
W em -1461
cq d -975
' d -975
-F char173 -486
F hy -486
F - -486
F en -486
F em -486
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1950
A hy -1950
A - -1950
A en -1950
A em -1950
-K char173 -975
K hy -975
K - -975
K en -975
K em -975
-char173 X -1461
hy X -1461
- X -1461
-char173 A -1461
hy A -1461
- A -1461
en X -1461
en A -1461
em X -1461
-R char173 -1461
R hy -1461
R - -1461
R en -1461
@@ -333,7 +321,6 @@ E cq -486
E ' -486
Z cq -975
Z ' -975
-Z char173 -486
Z hy -486
Z - -486
Z en -486
@@ -357,8 +344,7 @@ cq 6342,18555,0,2622,-1662,910 2 51751
* 12684,18555,0,2358,-2589,910 2 3626
+ 20490,13191,261,0,-2496 0 3627
, 6342,3300,3891,0,1584 0 3628
-char173 6342,6960,0,438,183,438 0 3629
-hy "
+hy 6342,6960,0,438,183,438 0 3629
- "
. 6342,2985,390,0,861 0 3630
sl 13173,20250,225,4644,1500,910 2 3631
@@ -450,198 +436,109 @@ ba 13173,19758,6588,0,-4596 3 3708
rC 11709,19935,6210,0,2232 3 3709
} "
ti 26346,8952,0,0,-4029 0 51876
-char192 18540,24930,150,0,2757 2 3776
-`A "
-char194 18540,24915,150,438,2757,438 2 3778
-^A "
-char200 15612,24930,150,1824,1827,910 2 3784
-`E "
-char202 15612,24915,150,1824,1827,910 2 3786
-^E "
-char203 15612,22620,150,1824,1827,910 2 3787
-:E "
-char206 8781,24915,150,4425,1641,910 2 3790
-^I "
-char207 8781,22620,150,4899,1641,910 2 3791
-:I "
-char180 12684,19590,0,1218,-5838,910 2 3764
-aa "
+`A 18540,24930,150,0,2757 2 3776
+^A 18540,24915,150,438,2757,438 2 3778
+`E 15612,24930,150,1824,1827,910 2 3784
+^E 15612,24915,150,1824,1827,910 2 3786
+:E 15612,22620,150,1824,1827,910 2 3787
+^I 8781,24915,150,4425,1641,910 2 3790
+:I 8781,22620,150,4899,1641,910 2 3791
+aa 12684,19590,0,1218,-5838,910 2 3764
ga 12684,19590,0,0,-3147 2 3680
a^ 12684,19614,0,210,-3726,210 2 3678
^ "
-char168 12684,17394,0,153,-3873,153 0 3752
-ad "
+ad 12684,17394,0,153,-3873,153 0 3752
a~ 12684,17481,0,1239,-3270,910 0 3710
~ "
-char217 20004,24930,390,3312,-1641,910 2 3801
-`U "
-char219 20004,24915,390,3312,-1641,910 2 3803
-^U "
-char221 17565,24930,150,5103,-1386,910 2 3805
-'Y "
-char253 11709,19590,6705,2106,2037,910 3 3837
-'y "
-char176 12684,17805,0,828,-2298,828 0 3760
-de "
-char199 18540,18555,6018,2820,-795,910 2 3783
-,C "
-char231 9759,11670,4770,1668,516,910 0 3815
-,c "
-char209 19515,23727,150,3774,1101,910 2 3793
-~N "
-char241 14637,17481,390,513,309,513 0 3825
-~n "
-char161 6831,12000,7038,1113,2007,910 1 3745
-r! "
-char191 9270,12000,7038,0,2256 1 3775
-r? "
-char164 12684,15684,0,2205,291,910 0 3748
-Cs "
-char163 12684,17805,390,1413,1200,910 0 3747
-Po "
-char165 12684,18315,150,4137,-486,910 2 3749
-Ye "
-char167 12684,18555,5250,0,66 2 3751
-sc "
+`U 20004,24930,390,3312,-1641,910 2 3801
+^U 20004,24915,390,3312,-1641,910 2 3803
+'Y 17565,24930,150,5103,-1386,910 2 3805
+'y 11709,19590,6705,2106,2037,910 3 3837
+de 12684,17805,0,828,-2298,828 0 3760
+,C 18540,18555,6018,2820,-795,910 2 3783
+,c 9759,11670,4770,1668,516,910 0 3815
+~N 19515,23727,150,3774,1101,910 2 3793
+~n 14637,17481,390,513,309,513 0 3825
+r! 6831,12000,7038,1113,2007,910 1 3745
+r? 9270,12000,7038,0,2256 1 3775
+Cs 12684,15684,0,2205,291,910 0 3748
+Po 12684,17805,390,1413,1200,910 0 3747
+Ye 12684,18315,150,4137,-486,910 2 3749
+sc 12684,18555,5250,0,66 2 3751
Fn 12684,20250,6705,3483,3216,910 3 51871
-char162 12684,17568,186,795,-1197,795 0 3746
-ct "
-char226 12198,19614,390,687,1335,687 2 3810
-^a "
-char234 9759,19614,390,1671,687,910 2 3818
-^e "
-char244 12198,19614,390,453,288,453 2 3828
-^o "
-char251 13662,19614,390,576,381,576 2 3835
-^u "
-char225 12198,19590,390,1863,1335,910 2 3809
-'a "
-char233 9759,19590,390,3081,687,910 2 3817
-'e "
-char243 12198,19590,390,1863,288,910 2 3827
-'o "
-char250 13662,19590,390,1131,381,910 2 3834
-'u "
-char224 12198,19590,390,687,1335,687 2 3808
-`a "
-char232 9759,19590,390,1515,687,910 2 3816
-`e "
-char242 12198,19590,390,423,288,423 2 3826
-`o "
-char249 13662,19590,390,576,381,576 2 3833
-`u "
-char228 12198,17394,390,891,1335,891 0 3812
-:a "
-char235 9759,17394,390,2109,687,910 0 3819
-:e "
-char246 12198,17394,390,891,288,891 0 3830
-:o "
-char252 13662,17394,390,576,381,576 0 3836
-:u "
-char197 18540,24681,150,150,2757,150 2 3781
-oA "
-char238 7806,19614,390,2649,24,910 2 3822
-^i "
-char216 20979,18555,390,2475,1140,910 2 3800
-/O "
-char198 25371,18315,150,1821,2859,910 2 3782
-AE "
-char229 12198,19566,390,1257,1335,910 2 3813
-oa "
-char237 7806,19590,390,4059,24,910 2 3821
-'i "
-char248 12198,11670,390,2388,2475,910 0 3832
-/o "
-char230 16587,11670,390,1551,1377,910 0 3814
-ae "
-char196 18540,22620,150,1191,2757,910 2 3780
-:A "
-char236 7806,19590,390,966,24,910 2 3820
-`i "
-char214 20979,22620,390,1308,-624,910 2 3798
-:O "
-char220 20004,22620,390,3312,-1641,910 2 3804
-:U "
-char201 15612,24930,150,1824,1827,910 2 3785
-'E "
-char239 7806,17394,390,2562,24,910 0 3823
-:i "
-char223 13173,20250,6705,3594,6294,910 3 3807
-ss "
-char212 20979,24915,390,1308,-624,910 2 3796
-^O "
-char193 18540,24930,150,1083,2757,910 2 3777
-'A "
-char195 18540,23727,150,2175,2757,910 2 3779
-~A "
-char227 12198,17481,390,1482,1335,910 0 3811
-~a "
-char208 20004,18555,150,1380,1872,910 2 3792
--D "
-char240 12198,20199,327,540,288,540 2 3824
-Sd "
-char205 8781,24930,150,5073,1641,910 2 3789
-'I "
-char204 8781,24930,150,3582,1641,910 2 3788
-`I "
-char211 20979,24930,390,1308,-624,910 2 3795
-'O "
-char210 20979,24930,390,1308,-624,910 2 3794
-`O "
-char213 20979,23727,390,1308,-624,910 2 3797
-~O "
-char245 12198,17481,390,1482,288,910 0 3829
-~o "
+ct 12684,17568,186,795,-1197,795 0 3746
+^a 12198,19614,390,687,1335,687 2 3810
+^e 9759,19614,390,1671,687,910 2 3818
+^o 12198,19614,390,453,288,453 2 3828
+^u 13662,19614,390,576,381,576 2 3835
+'a 12198,19590,390,1863,1335,910 2 3809
+'e 9759,19590,390,3081,687,910 2 3817
+'o 12198,19590,390,1863,288,910 2 3827
+'u 13662,19590,390,1131,381,910 2 3834
+`a 12198,19590,390,687,1335,687 2 3808
+`e 9759,19590,390,1515,687,910 2 3816
+`o 12198,19590,390,423,288,423 2 3826
+`u 13662,19590,390,576,381,576 2 3833
+:a 12198,17394,390,891,1335,891 0 3812
+:e 9759,17394,390,2109,687,910 0 3819
+:o 12198,17394,390,891,288,891 0 3830
+:u 13662,17394,390,576,381,576 0 3836
+oA 18540,24681,150,150,2757,150 2 3781
+^i 7806,19614,390,2649,24,910 2 3822
+/O 20979,18555,390,2475,1140,910 2 3800
+AE 25371,18315,150,1821,2859,910 2 3782
+oa 12198,19566,390,1257,1335,910 2 3813
+'i 7806,19590,390,4059,24,910 2 3821
+/o 12198,11670,390,2388,2475,910 0 3832
+ae 16587,11670,390,1551,1377,910 0 3814
+:A 18540,22620,150,1191,2757,910 2 3780
+`i 7806,19590,390,966,24,910 2 3820
+:O 20979,22620,390,1308,-624,910 2 3798
+:U 20004,22620,390,3312,-1641,910 2 3804
+'E 15612,24930,150,1824,1827,910 2 3785
+:i 7806,17394,390,2562,24,910 0 3823
+ss 13173,20250,6705,3594,6294,910 3 3807
+^O 20979,24915,390,1308,-624,910 2 3796
+'A 18540,24930,150,1083,2757,910 2 3777
+~A 18540,23727,150,2175,2757,910 2 3779
+~a 12198,17481,390,1482,1335,910 0 3811
+-D 20004,18555,150,1380,1872,910 2 3792
+Sd 12198,20199,327,540,288,540 2 3824
+'I 8781,24930,150,5073,1641,910 2 3789
+`I 8781,24930,150,3582,1641,910 2 3788
+'O 20979,24930,390,1308,-624,910 2 3795
+`O 20979,24930,390,1308,-624,910 2 3794
+~O 20979,23727,390,1308,-624,910 2 3797
+~o 12198,17481,390,1482,288,910 0 3829
vS 12198,24969,390,2829,759,910 2 51795
vs 7806,19863,390,4191,1449,910 2 51827
-char218 20004,24930,390,3312,-1641,910 2 3802
-'U "
+'U 20004,24930,390,3312,-1641,910 2 3802
:Y 17565,22620,150,5103,-1386,910 2 51801
-char255 11709,17394,6705,1134,2037,910 1 3839
-:y "
-char222 14637,18315,150,1383,1722,910 2 3806
-TP "
-char254 12198,20250,6855,963,3561,910 3 3838
-Tp "
-char181 14637,10800,5595,612,585,612 0 3765
-char182 12684,19635,4200,1812,-981,910 2 3766
-ps "
-char190 20490,17805,390,0,-1074 0 3774
-34 "
+:y 11709,17394,6705,1134,2037,910 1 3839
+TP 14637,18315,150,1383,1722,910 2 3806
+Tp 12198,20250,6855,963,3561,910 3 3838
+mc 14637,10800,5595,612,585,612 0 3765
+ps 12684,19635,4200,1812,-981,910 2 3766
+34 20490,17805,390,0,-1074 0 3774
\- 20490,7305,0,0,-2532 0 51757
-char188 20490,17625,390,0,-1143 0 3772
-14 "
-char189 20490,17625,390,33,-204,33 0 3773
-12 "
-char170 11709,17805,0,1590,-1725,910 0 3754
-Of "
-char186 11709,17805,0,936,-1989,910 0 3770
-Om "
-char171 10734,9945,0,759,-9,759 0 3755
-Fo "
-char187 10734,9945,0,204,546,204 0 3771
-Fc "
-char177 20490,13191,3105,0,-2502 0 3761
-char166 13173,19083,5916,0,-4596 2 3750
-bb "
-char169 13173,19725,0,5526,-3702,910 2 3753
-co "
-char172 20490,10029,0,0,-2055 0 3756
-no "
-char174 13173,19725,0,5526,-3702,910 2 3758
-rg "
-char178 8781,17805,0,1725,-690,910 0 3762
-S2 "
-char179 8781,17805,0,1746,-273,910 0 3763
-S3 "
-char184 12684,0,4770,0,-948 0 3768
-ac "
-char185 8781,17625,0,1257,-1230,910 0 3769
-S1 "
-char215 20490,12969,189,0,-2793 0 3799
-char247 20490,12966,36,0,-2424 0 3831
-char183 6342,10350,0,534,-1212,534 0 3767
-pc "
+14 20490,17625,390,0,-1143 0 3772
+12 20490,17625,390,33,-204,33 0 3773
+Of 11709,17805,0,1590,-1725,910 0 3754
+Om 11709,17805,0,936,-1989,910 0 3770
+Fo 10734,9945,0,759,-9,759 0 3755
+Fc 10734,9945,0,204,546,204 0 3771
+t+- 20490,13191,3105,0,-2502 0 3761
+bb 13173,19083,5916,0,-4596 2 3750
+co 13173,19725,0,5526,-3702,910 2 3753
+no 20490,10029,0,0,-2055 0 3756
+rg 13173,19725,0,5526,-3702,910 2 3758
+S2 8781,17805,0,1725,-690,910 0 3762
+S3 8781,17805,0,1746,-273,910 0 3763
+ac 12684,0,4770,0,-948 0 3768
+S1 8781,17625,0,1257,-1230,910 0 3769
+tmu 20490,12969,189,0,-2793 0 3799
+tdi 20490,12966,36,0,-2424 0 3831
+pc 6342,10350,0,534,-1212,534 0 3767
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
@@ -669,8 +566,7 @@ Fl 19515,20601,6705,2037,5289,910 3 51885
ij 14148,18495,6705,2055,24,910 3 51958
bq 6342,2013,4437,0,1680 0 51756
%0 29760,17805,207,378,-1368,378 0 51901
-char175 12684,17328,0,609,-3933,609 0 3759
-a- "
+a- 12684,17328,0,609,-3933,609 0 3759
ab 12684,18054,0,918,-4341,910 0 51926
a. 12684,17034,0,0,-6228 0 51927
oe 18051,11670,390,1527,288,910 0 51823
diff --git a/contrib/groff/font/devlj4/GR b/contrib/groff/font/devlj4/GR
index 169cbd1..b5b805f 100644
--- a/contrib/groff/font/devlj4/GR
+++ b/contrib/groff/font/devlj4/GR
@@ -417,19 +417,16 @@ K W -486
K U -486
L cq -3414
L ' -3414
-T char173 -4389
T hy -4389
T - -4389
T en -4389
T em -4389
A cq -2925
A ' -2925
-char173 T -4389
hy T -4389
- T -4389
en T -4389
em T -4389
-Y char173 -3414
Y hy -3414
Y - -3414
Y en -3414
@@ -442,7 +439,6 @@ b cq -1461
b ' -1461
a cq -486
a ' -486
-V char173 -1950
V hy -1950
V - -1950
V en -1950
@@ -455,45 +451,37 @@ m cq -975
m ' -975
R cq -1950
R ' -1950
-W char173 -1950
W hy -1950
W - -1950
W en -1950
W em -1950
cq d -1461
' d -1461
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1461
A hy -1461
A - -1461
A en -1461
A em -1461
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -486
' s -486
-char173 X -1461
hy X -1461
- X -1461
-char173 A -1461
hy A -1461
- A -1461
en X -1461
en A -1461
em X -1461
-R char173 -1950
R hy -1950
R - -1950
R en -1950
@@ -504,24 +492,20 @@ G cq -486
G ' -486
E cq -486
E ' -486
-E char173 -486
E hy -486
E - -486
E en -486
E em -486
-Z char173 -975
Z hy -975
Z - -975
Z en -975
Z em -975
B cq -486
B ' -486
-J char173 -486
J hy -486
J - -486
J en -486
J em -486
-U char173 -486
U hy -486
U - -486
U en -486
@@ -543,8 +527,7 @@ cq 7317,18555 2 51751
* 12684,18555 2 3626
+ 21468,13191,261 0 3627
, 6831,3096,4449 0 3628
-char173 6831,6960 0 3629
-hy "
+hy 6831,6960 0 3629
- "
. 6831,2847,390 0 3630
sl 12684,20250,480 2 3631
@@ -636,198 +619,109 @@ ba 13173,19758,6588 3 3708
rC 11709,19935,6210 3 3709
} "
ti 26346,8952 0 51876
-char192 20004,24846,150 2 3776
-`A "
-char194 20004,24600,150 2 3778
-^A "
-char200 16587,24846,150 2 3784
-`E "
-char202 16587,24600,150 2 3786
-^E "
-char203 16587,23751,150 2 3787
-:E "
-char206 8781,24600,150 2 3790
-^I "
-char207 8781,23751,150 2 3791
-:I "
-char180 12684,20460 2 3764
-aa "
+`A 20004,24846,150 2 3776
+^A 20004,24600,150 2 3778
+`E 16587,24846,150 2 3784
+^E 16587,24600,150 2 3786
+:E 16587,23751,150 2 3787
+^I 8781,24600,150 2 3790
+:I 8781,23751,150 2 3791
+aa 12684,20460 2 3764
ga 12684,20460 2 3680
a^ 12684,20460 2 3678
^ "
-char168 12684,17244 0 3752
-ad "
+ad 12684,17244 0 3752
a~ 12684,18180 0 3710
~ "
-char217 21468,24846,390 2 3801
-`U "
-char219 21468,24600,390 2 3803
-^U "
-char221 19029,24846,150 2 3805
-'Y "
-char253 14148,20460,6705 3 3837
-'y "
-char176 12684,17805 0 3760
-de "
-char199 19515,18555,5964 2 3783
-,C "
-char231 11220,11670,5553 0 3815
-,c "
-char209 22443,24498,774 2 3793
-~N "
-char241 14637,18180,150 0 3825
-~n "
-char161 6831,12096,7131 1 3745
-r! "
-char191 9759,12096,7131 1 3775
-r? "
-char164 12684,15684 0 3748
-Cs "
-char163 12684,17805,5424 0 3747
-Po "
-char165 12684,18315,150 2 3749
-Ye "
-char167 12684,18555,5250 2 3751
-sc "
+`U 21468,24846,390 2 3801
+^U 21468,24600,390 2 3803
+'Y 19029,24846,150 2 3805
+'y 14148,20460,6705 3 3837
+de 12684,17805 0 3760
+,C 19515,18555,5964 2 3783
+,c 11220,11670,5553 0 3815
+~N 22443,24498,774 2 3793
+~n 14637,18180,150 0 3825
+r! 6831,12096,7131 1 3745
+r? 9759,12096,7131 1 3775
+Cs 12684,15684 0 3748
+Po 12684,17805,5424 0 3747
+Ye 12684,18315,150 2 3749
+sc 12684,18555,5250 2 3751
Fn 12684,20250,6705 3 51871
-char162 12684,17556,126 0 3746
-ct "
-char226 11220,20460,390 2 3810
-^a "
-char234 11220,20460,390 2 3818
-^e "
-char244 14148,20460,390 2 3828
-^o "
-char251 14148,20460,390 2 3835
-^u "
-char225 11220,20460,390 2 3809
-'a "
-char233 11220,20460,390 2 3817
-'e "
-char243 14148,20460,390 2 3827
-'o "
-char250 14148,20460,390 2 3834
-'u "
-char224 11220,20460,390 2 3808
-`a "
-char232 11220,20460,390 2 3816
-`e "
-char242 14148,20460,390 2 3826
-`o "
-char249 14148,20460,390 2 3833
-`u "
-char228 11220,17244,390 0 3812
-:a "
-char235 11220,17244,390 0 3819
-:e "
-char246 14148,17244,390 0 3830
-:o "
-char252 14148,17244,390 0 3836
-:u "
-char197 20004,24768,150 2 3781
-oA "
-char238 7317,20460,150 2 3822
-^i "
-char216 22443,18948,501 2 3800
-/O "
-char198 28299,18315,150 2 3782
-AE "
-char229 11220,19248,390 2 3813
-oa "
-char237 7317,20460,150 2 3821
-'i "
-char248 14148,11832,489 0 3832
-/o "
-char230 17076,11670,390 0 3814
-ae "
-char196 20004,23751,150 2 3780
-:A "
-char236 7317,20460,150 2 3820
-`i "
-char214 22443,23751,390 2 3798
-:O "
-char220 21468,23751,390 2 3804
-:U "
-char201 16587,24846,150 2 3785
-'E "
-char239 7317,17244,150 0 3823
-:i "
-char223 14637,20250,390 2 3807
-ss "
-char212 22443,24600,390 2 3796
-^O "
-char193 20004,24846,150 2 3777
-'A "
-char195 20004,24498,150 2 3779
-~A "
-char227 11220,18180,390 0 3811
-~a "
-char208 20979,18555,150 2 3792
--D "
-char240 14148,20250,390 2 3824
-Sd "
-char205 8781,24846,150 2 3789
-'I "
-char204 8781,24846,150 2 3788
-`I "
-char211 22443,24846,390 2 3795
-'O "
-char210 22443,24846,390 2 3794
-`O "
-char213 22443,24498,390 2 3797
-~O "
-char245 14148,18180,390 0 3829
-~o "
+ct 12684,17556,126 0 3746
+^a 11220,20460,390 2 3810
+^e 11220,20460,390 2 3818
+^o 14148,20460,390 2 3828
+^u 14148,20460,390 2 3835
+'a 11220,20460,390 2 3809
+'e 11220,20460,390 2 3817
+'o 14148,20460,390 2 3827
+'u 14148,20460,390 2 3834
+`a 11220,20460,390 2 3808
+`e 11220,20460,390 2 3816
+`o 14148,20460,390 2 3826
+`u 14148,20460,390 2 3833
+:a 11220,17244,390 0 3812
+:e 11220,17244,390 0 3819
+:o 14148,17244,390 0 3830
+:u 14148,17244,390 0 3836
+oA 20004,24768,150 2 3781
+^i 7317,20460,150 2 3822
+/O 22443,18948,501 2 3800
+AE 28299,18315,150 2 3782
+oa 11220,19248,390 2 3813
+'i 7317,20460,150 2 3821
+/o 14148,11832,489 0 3832
+ae 17076,11670,390 0 3814
+:A 20004,23751,150 2 3780
+`i 7317,20460,150 2 3820
+:O 22443,23751,390 2 3798
+:U 21468,23751,390 2 3804
+'E 16587,24846,150 2 3785
+:i 7317,17244,150 0 3823
+ss 14637,20250,390 2 3807
+^O 22443,24600,390 2 3796
+'A 20004,24846,150 2 3777
+~A 20004,24498,150 2 3779
+~a 11220,18180,390 0 3811
+-D 20979,18555,150 2 3792
+Sd 14148,20250,390 2 3824
+'I 8781,24846,150 2 3789
+`I 8781,24846,150 2 3788
+'O 22443,24846,390 2 3795
+`O 22443,24846,390 2 3794
+~O 22443,24498,390 2 3797
+~o 14148,18180,390 0 3829
vS 12684,24612,390 2 51795
vs 9270,20499,390 2 51827
-char218 21468,24846,390 2 3802
-'U "
+'U 21468,24846,390 2 3802
:Y 19029,23751,150 2 51801
-char255 14148,17244,6705 1 3839
-:y "
-char222 15612,18315,150 2 3806
-TP "
-char254 14148,20250,6855 3 3838
-Tp "
-char181 14637,10800,5595 0 3765
-char182 12684,19635,4200 2 3766
-ps "
-char190 21468,17805,288 0 3774
-34 "
+:y 14148,17244,6705 1 3839
+TP 15612,18315,150 2 3806
+Tp 14148,20250,6855 3 3838
+mc 14637,10800,5595 0 3765
+ps 12684,19635,4200 2 3766
+34 21468,17805,288 0 3774
\- 21468,7305 0 51757
-char188 21468,17805,288 0 3772
-14 "
-char189 21468,17805,288 0 3773
-12 "
-char170 12684,17805 0 3754
-Of "
-char186 12684,17805 0 3770
-Om "
-char171 11220,9945 0 3755
-Fo "
-char187 11220,9945 0 3771
-Fc "
-char177 21468,13191,3105 0 3761
-char166 13173,19083,5916 2 3750
-bb "
-char169 13173,19725 2 3753
-co "
-char172 21468,10029 0 3756
-no "
-char174 13173,19725 2 3758
-rg "
-char178 8781,17805 0 3762
-S2 "
-char179 8781,17805 0 3763
-S3 "
-char184 12684,255,5553 0 3768
-ac "
-char185 8781,17805 0 3769
-S1 "
-char215 21468,12969,189 0 3799
-char247 21468,12966,36 0 3831
-char183 6831,10326 0 3767
-pc "
+14 21468,17805,288 0 3772
+12 21468,17805,288 0 3773
+Of 12684,17805 0 3754
+Om 12684,17805 0 3770
+Fo 11220,9945 0 3755
+Fc 11220,9945 0 3771
+t+- 21468,13191,3105 0 3761
+bb 13173,19083,5916 2 3750
+co 13173,19725 2 3753
+no 21468,10029 0 3756
+rg 13173,19725 2 3758
+S2 8781,17805 0 3762
+S3 8781,17805 0 3763
+ac 12684,255,5553 0 3768
+S1 8781,17805 0 3769
+tmu 21468,12969,189 0 3799
+tdi 21468,12966,36 0 3831
+pc 6831,10326 0 3767
fm 12684,17805 0 51873
sd 12684,17805 0 51874
dg 12684,18555,5250 2 51755
@@ -855,8 +749,7 @@ Fl 21954,20250,150 2 51885
ij 14148,19356,6705 3 51958
bq 7317,2811,3939 0 51756
%0 30738,17805,180 0 51901
-char175 12684,17367 0 3759
-a- "
+a- 12684,17367 0 3759
ab 12684,17796 0 51926
a. 12684,17244 0 51927
oe 20004,11670,390 0 51823
diff --git a/contrib/groff/font/devlj4/LGB b/contrib/groff/font/devlj4/LGB
index 681116e..ca42d9a 100644
--- a/contrib/groff/font/devlj4/LGB
+++ b/contrib/groff/font/devlj4/LGB
@@ -21,8 +21,7 @@ cq 13227,19320 2 51751
* 13227,18990 2 3626
+ 13227,15645 0 3627
, 13227,2925,2640 0 3628
-char173 13227,8775 0 3629
-hy "
+hy 13227,8775 0 3629
- "
. 13227,3180,330 0 3630
sl 13227,19545,330 2 3631
@@ -114,198 +113,109 @@ ba 13227,19758,6588 3 3708
rC 13227,20130,6141 3 3709
} "
ti 13227,11181 0 51876
-char192 13227,25155 2 3776
-`A "
-char194 13227,25080 2 3778
-^A "
-char200 13227,25155 2 3784
-`E "
-char202 13227,25080 2 3786
-^E "
-char203 13227,24000 2 3787
-:E "
-char206 13227,25080 2 3790
-^I "
-char207 13227,24000 2 3791
-:I "
-char180 13227,20745 2 3764
-aa "
+`A 13227,25155 2 3776
+^A 13227,25080 2 3778
+`E 13227,25155 2 3784
+^E 13227,25080 2 3786
+:E 13227,24000 2 3787
+^I 13227,25080 2 3790
+:I 13227,24000 2 3791
+aa 13227,20745 2 3764
ga 13227,20745 2 3680
a^ 13227,21015 2 3678
^ "
-char168 13227,19125 2 3752
-ad "
+ad 13227,19125 2 3752
a~ 13227,19683 2 3710
~ "
-char217 13227,25155,330 2 3801
-`U "
-char219 13227,25080,330 2 3803
-^U "
-char221 13227,25155 2 3805
-'Y "
-char253 13227,20745,4350 2 3837
-'y "
-char176 13227,19320 2 3760
-de "
-char199 13227,19320,5787 3 3783
-,C "
-char231 13227,14355,6060 1 3815
-,c "
-char209 13227,24552 2 3793
-~N "
-char241 13227,19683 2 3825
-~n "
-char161 13227,14319,5001 1 3745
-r! "
-char191 13227,14265,5385 1 3775
-r? "
-char164 13227,15885 0 3748
-Cs "
-char163 13227,18990,330 2 3747
-Po "
-char165 13227,18990 2 3749
-Ye "
-char167 13227,19320,1218 2 3751
-sc "
+`U 13227,25155,330 2 3801
+^U 13227,25080,330 2 3803
+'Y 13227,25155 2 3805
+'y 13227,20745,4350 2 3837
+de 13227,19320 2 3760
+,C 13227,19320,5787 3 3783
+,c 13227,14355,6060 1 3815
+~N 13227,24552 2 3793
+~n 13227,19683 2 3825
+r! 13227,14319,5001 1 3745
+r? 13227,14265,5385 1 3775
+Cs 13227,15885 0 3748
+Po 13227,18990,330 2 3747
+Ye 13227,18990 2 3749
+sc 13227,19320,1218 2 3751
Fn 13227,19335,3558 2 51871
-char162 13227,19320,330 2 3746
-ct "
-char226 13227,21015,330 2 3810
-^a "
-char234 13227,21015,330 2 3818
-^e "
-char244 13227,21015,330 2 3828
-^o "
-char251 13227,21015,330 2 3835
-^u "
-char225 13227,20745,330 2 3809
-'a "
-char233 13227,20745,330 2 3817
-'e "
-char243 13227,20745,330 2 3827
-'o "
-char250 13227,20745,330 2 3834
-'u "
-char224 13227,20745,330 2 3808
-`a "
-char232 13227,20745,330 2 3816
-`e "
-char242 13227,20745,330 2 3826
-`o "
-char249 13227,20745,330 2 3833
-`u "
-char228 13227,19125,330 2 3812
-:a "
-char235 13227,19125,330 2 3819
-:e "
-char246 13227,19125,330 2 3830
-:o "
-char252 13227,19125,330 2 3836
-:u "
-char197 13227,24882 2 3781
-oA "
-char238 13227,21015 2 3822
-^i "
-char216 13227,19320,459 2 3800
-/O "
-char198 13227,18990 2 3782
-AE "
-char229 13227,20790,330 2 3813
-oa "
-char237 13227,20745 2 3821
-'i "
-char248 13227,14901,957 0 3832
-/o "
-char230 13227,14355,330 0 3814
-ae "
-char196 13227,24000 2 3780
-:A "
-char236 13227,20745 2 3820
-`i "
-char214 13227,24000,330 2 3798
-:O "
-char220 13227,24000,330 2 3804
-:U "
-char201 13227,25155 2 3785
-'E "
-char239 13227,19125 2 3823
-:i "
-char223 13227,19335,330 2 3807
-ss "
-char212 13227,25080,330 2 3796
-^O "
-char193 13227,25155 2 3777
-'A "
-char195 13227,24552 2 3779
-~A "
-char227 13227,19683,330 2 3811
-~a "
-char208 13227,18990 2 3792
--D "
-char240 13227,19656,330 2 3824
-Sd "
-char205 13227,25155 2 3789
-'I "
-char204 13227,25155 2 3788
-`I "
-char211 13227,25155,330 2 3795
-'O "
-char210 13227,25155,330 2 3794
-`O "
-char213 13227,24552,330 2 3797
-~O "
-char245 13227,19683,330 2 3829
-~o "
+ct 13227,19320,330 2 3746
+^a 13227,21015,330 2 3810
+^e 13227,21015,330 2 3818
+^o 13227,21015,330 2 3828
+^u 13227,21015,330 2 3835
+'a 13227,20745,330 2 3809
+'e 13227,20745,330 2 3817
+'o 13227,20745,330 2 3827
+'u 13227,20745,330 2 3834
+`a 13227,20745,330 2 3808
+`e 13227,20745,330 2 3816
+`o 13227,20745,330 2 3826
+`u 13227,20745,330 2 3833
+:a 13227,19125,330 2 3812
+:e 13227,19125,330 2 3819
+:o 13227,19125,330 2 3830
+:u 13227,19125,330 2 3836
+oA 13227,24882 2 3781
+^i 13227,21015 2 3822
+/O 13227,19320,459 2 3800
+AE 13227,18990 2 3782
+oa 13227,20790,330 2 3813
+'i 13227,20745 2 3821
+/o 13227,14901,957 0 3832
+ae 13227,14355,330 0 3814
+:A 13227,24000 2 3780
+`i 13227,20745 2 3820
+:O 13227,24000,330 2 3798
+:U 13227,24000,330 2 3804
+'E 13227,25155 2 3785
+:i 13227,19125 2 3823
+ss 13227,19335,330 2 3807
+^O 13227,25080,330 2 3796
+'A 13227,25155 2 3777
+~A 13227,24552 2 3779
+~a 13227,19683,330 2 3811
+-D 13227,18990 2 3792
+Sd 13227,19656,330 2 3824
+'I 13227,25155 2 3789
+`I 13227,25155 2 3788
+'O 13227,25155,330 2 3795
+`O 13227,25155,330 2 3794
+~O 13227,24552,330 2 3797
+~o 13227,19683,330 2 3829
vS 13227,25116,330 2 51795
vs 13227,21015,330 2 51827
-char218 13227,25155,330 2 3802
-'U "
+'U 13227,25155,330 2 3802
:Y 13227,24000 2 51801
-char255 13227,19125,4350 2 3839
-:y "
-char222 13227,18990 2 3806
-TP "
-char254 13227,19545,5475 3 3838
-Tp "
-char181 13227,14025,4350 0 3765
-char182 13227,19635,4200 2 3766
-ps "
-char190 13227,19110,3825 2 3774
-34 "
+:y 13227,19125,4350 2 3839
+TP 13227,18990 2 3806
+Tp 13227,19545,5475 3 3838
+mc 13227,14025,4350 0 3765
+ps 13227,19635,4200 2 3766
+34 13227,19110,3825 2 3774
\- 13227,10425 0 51757
-char188 13227,19110,3825 2 3772
-14 "
-char189 13227,19110,3825 2 3773
-12 "
-char170 13227,19320 2 3754
-Of "
-char186 13227,19320 2 3770
-Om "
-char171 13227,14115 0 3755
-Fo "
-char187 13227,14115 0 3771
-Fc "
-char177 13227,15645,30 0 3761
-char166 13227,19083,5916 3 3750
-bb "
-char169 13227,19635 2 3753
-co "
-char172 13227,13020 0 3756
-no "
-char174 13227,19635 2 3758
-rg "
-char178 13227,19110 2 3762
-S2 "
-char179 13227,19110 2 3763
-S3 "
-char184 13227,0,6060 1 3768
-ac "
-char185 13227,19110 2 3769
-S1 "
-char215 13227,15549 0 3799
-char247 13227,15510 0 3831
-char183 13227,11376 0 3767
-pc "
+14 13227,19110,3825 2 3772
+12 13227,19110,3825 2 3773
+Of 13227,19320 2 3754
+Om 13227,19320 2 3770
+Fo 13227,14115 0 3755
+Fc 13227,14115 0 3771
+t+- 13227,15645,30 0 3761
+bb 13227,19083,5916 3 3750
+co 13227,19635 2 3753
+no 13227,13020 0 3756
+rg 13227,19635 2 3758
+S2 13227,19110 2 3762
+S3 13227,19110 2 3763
+ac 13227,0,6060 1 3768
+S1 13227,19110 2 3769
+tmu 13227,15549 0 3799
+tdi 13227,15510 0 3831
+pc 13227,11376 0 3767
fm 13227,18990 2 51873
sd 13227,18990 2 51874
dg 13227,18990 2 51755
@@ -333,8 +243,7 @@ Fl 13227,19335 2 51885
ij 13227,19095,4350 2 51958
bq 13227,3486,2079 0 51756
%0 13227,19320,330 2 51901
-char175 13227,19119 2 3759
-a- "
+a- 13227,19119 2 3759
ab 13227,19830 2 51926
a. 13227,19125 2 51927
oe 13227,14355,330 0 51823
diff --git a/contrib/groff/font/devlj4/LGI b/contrib/groff/font/devlj4/LGI
index ef8fae2..a28b058 100644
--- a/contrib/groff/font/devlj4/LGI
+++ b/contrib/groff/font/devlj4/LGI
@@ -22,8 +22,7 @@ cq 13227,19320,0,0,-5469 2 51751
* 13227,18990,0,1995,-828,790 2 3626
+ 13227,15075,0,960,-93,790 0 3627
, 13227,1785,2250,0,-2769 0 3628
-char173 13227,7995,0,0,-2511 0 3629
-hy "
+hy 13227,7995,0,0,-2511 0 3629
- "
. 13227,2100,330,0,-3873 0 3630
sl 13227,19545,330,0,-1410 2 3631
@@ -115,198 +114,109 @@ ba 13227,19758,6588,0,-4623 3 3708
rC 13227,20130,6075,0,975 3 3709
} "
ti 13227,10485,0,825,822,790 0 51876
-char192 13227,24630,0,0,2541 2 3776
-`A "
-char194 13227,24810,0,2133,2541,790 2 3778
-^A "
-char200 13227,24630,0,1995,642,790 2 3784
-`E "
-char202 13227,24810,0,2133,642,790 2 3786
-^E "
-char203 13227,23115,0,1995,642,790 2 3787
-:E "
-char206 13227,24810,0,2133,-663,790 2 3790
-^I "
-char207 13227,23115,0,1143,-663,790 2 3791
-:I "
-char180 13227,19725,0,753,-5706,753 2 3764
-aa "
+`A 13227,24630,0,0,2541 2 3776
+^A 13227,24810,0,2133,2541,790 2 3778
+`E 13227,24630,0,1995,642,790 2 3784
+^E 13227,24810,0,2133,642,790 2 3786
+:E 13227,23115,0,1995,642,790 2 3787
+^I 13227,24810,0,2133,-663,790 2 3790
+:I 13227,23115,0,1143,-663,790 2 3791
+aa 13227,19725,0,753,-5706,753 2 3764
ga 13227,19725,0,0,-4728 2 3680
a^ 13227,19905,0,1089,-3117,790 2 3678
^ "
-char168 13227,18195,0,0,-4341 2 3752
-ad "
+ad 13227,18195,0,0,-4341 2 3752
a~ 13227,18873,0,1833,-2406,790 2 3710
~ "
-char217 13227,24630,330,2220,108,790 2 3801
-`U "
-char219 13227,24810,330,2220,108,790 2 3803
-^U "
-char221 13227,24630,0,2553,-2397,790 2 3805
-'Y "
-char253 13227,19725,4350,1986,3579,790 2 3837
-'y "
-char176 13227,19320,0,0,-2637 2 3760
-de "
-char199 13227,19320,5325,1524,-12,790 3 3783
-,C "
-char231 13227,14355,5295,810,261,790 1 3815
-,c "
-char209 13227,23814,0,3201,882,790 2 3793
-~N "
-char241 13227,18873,0,1833,774,790 2 3825
-~n "
-char161 13227,14271,5049,0,-1647 1 3745
-r! "
-char191 13227,14214,5436,0,-126 1 3775
-r? "
-char164 13227,15684,0,1425,528,790 0 3748
-Cs "
-char163 13227,19320,330,2433,234,790 2 3747
-Po "
-char165 13227,18990,0,2712,-1056,790 2 3749
-Ye "
-char167 13227,19320,1344,66,-891,66 2 3751
-sc "
+`U 13227,24630,330,2220,108,790 2 3801
+^U 13227,24810,330,2220,108,790 2 3803
+'Y 13227,24630,0,2553,-2397,790 2 3805
+'y 13227,19725,4350,1986,3579,790 2 3837
+de 13227,19320,0,0,-2637 2 3760
+,C 13227,19320,5325,1524,-12,790 3 3783
+,c 13227,14355,5295,810,261,790 1 3815
+~N 13227,23814,0,3201,882,790 2 3793
+~n 13227,18873,0,1833,774,790 2 3825
+r! 13227,14271,5049,0,-1647 1 3745
+r? 13227,14214,5436,0,-126 1 3775
+Cs 13227,15684,0,1425,528,790 0 3748
+Po 13227,19320,330,2433,234,790 2 3747
+Ye 13227,18990,0,2712,-1056,790 2 3749
+sc 13227,19320,1344,66,-891,66 2 3751
Fn 13227,19335,3540,231,-492,231 2 51871
-char162 13227,19320,330,891,-780,790 2 3746
-ct "
-char226 13227,19905,330,1089,105,790 2 3810
-^a "
-char234 13227,19905,330,1089,303,790 2 3818
-^e "
-char244 13227,19905,330,1089,252,790 2 3828
-^o "
-char251 13227,19905,330,1089,249,790 2 3835
-^u "
-char225 13227,19725,330,753,105,753 2 3809
-'a "
-char233 13227,19725,330,753,303,753 2 3817
-'e "
-char243 13227,19725,330,753,252,753 2 3827
-'o "
-char250 13227,19725,330,753,249,753 2 3834
-'u "
-char224 13227,19725,330,0,105 2 3808
-`a "
-char232 13227,19725,330,387,303,387 2 3816
-`e "
-char242 13227,19725,330,372,252,372 2 3826
-`o "
-char249 13227,19725,330,714,249,714 2 3833
-`u "
-char228 13227,18195,330,0,105 2 3812
-:a "
-char235 13227,18195,330,387,303,387 2 3819
-:e "
-char246 13227,18195,330,372,252,372 2 3830
-:o "
-char252 13227,18195,330,714,249,714 2 3836
-:u "
-char197 13227,24810,0,0,2541 2 3781
-oA "
-char238 13227,19905,0,0,-1917 2 3822
-^i "
-char216 13227,19320,342,2895,1743,790 2 3800
-/O "
-char198 13227,18990,0,4059,2670,790 2 3782
-AE "
-char229 13227,19905,330,0,105 2 3813
-oa "
-char237 13227,19725,0,3,-2319,3 2 3821
-'i "
-char248 13227,14895,735,1119,1086,790 0 3832
-/o "
-char230 13227,14355,330,1530,1950,790 0 3814
-ae "
-char196 13227,23115,0,1143,2541,790 2 3780
-:A "
-char236 13227,19725,0,0,-2319 2 3820
-`i "
-char214 13227,23115,330,1485,273,790 2 3798
-:O "
-char220 13227,23115,330,2220,108,790 2 3804
-:U "
-char201 13227,24630,0,1995,642,790 2 3785
-'E "
-char239 13227,18195,0,0,-2319 2 3823
-:i "
-char223 13227,19335,330,570,270,570 2 3807
-ss "
-char212 13227,24810,330,2133,273,790 2 3796
-^O "
-char193 13227,24630,0,1389,2541,790 2 3777
-'A "
-char195 13227,23814,0,3201,2541,790 2 3779
-~A "
-char227 13227,18873,330,1833,105,790 2 3811
-~a "
-char208 13227,18990,0,1389,963,790 2 3792
--D "
-char240 13227,19545,330,192,237,192 2 3824
-Sd "
-char205 13227,24630,0,1389,-663,790 2 3789
-'I "
-char204 13227,24630,0,558,-663,558 2 3788
-`I "
-char211 13227,24630,330,1485,273,790 2 3795
-'O "
-char210 13227,24630,330,1485,273,790 2 3794
-`O "
-char213 13227,23814,330,3201,273,790 2 3797
-~O "
-char245 13227,18873,330,1833,252,790 2 3829
-~o "
+ct 13227,19320,330,891,-780,790 2 3746
+^a 13227,19905,330,1089,105,790 2 3810
+^e 13227,19905,330,1089,303,790 2 3818
+^o 13227,19905,330,1089,252,790 2 3828
+^u 13227,19905,330,1089,249,790 2 3835
+'a 13227,19725,330,753,105,753 2 3809
+'e 13227,19725,330,753,303,753 2 3817
+'o 13227,19725,330,753,252,753 2 3827
+'u 13227,19725,330,753,249,753 2 3834
+`a 13227,19725,330,0,105 2 3808
+`e 13227,19725,330,387,303,387 2 3816
+`o 13227,19725,330,372,252,372 2 3826
+`u 13227,19725,330,714,249,714 2 3833
+:a 13227,18195,330,0,105 2 3812
+:e 13227,18195,330,387,303,387 2 3819
+:o 13227,18195,330,372,252,372 2 3830
+:u 13227,18195,330,714,249,714 2 3836
+oA 13227,24810,0,0,2541 2 3781
+^i 13227,19905,0,0,-1917 2 3822
+/O 13227,19320,342,2895,1743,790 2 3800
+AE 13227,18990,0,4059,2670,790 2 3782
+oa 13227,19905,330,0,105 2 3813
+'i 13227,19725,0,3,-2319,3 2 3821
+/o 13227,14895,735,1119,1086,790 0 3832
+ae 13227,14355,330,1530,1950,790 0 3814
+:A 13227,23115,0,1143,2541,790 2 3780
+`i 13227,19725,0,0,-2319 2 3820
+:O 13227,23115,330,1485,273,790 2 3798
+:U 13227,23115,330,2220,108,790 2 3804
+'E 13227,24630,0,1995,642,790 2 3785
+:i 13227,18195,0,0,-2319 2 3823
+ss 13227,19335,330,570,270,570 2 3807
+^O 13227,24810,330,2133,273,790 2 3796
+'A 13227,24630,0,1389,2541,790 2 3777
+~A 13227,23814,0,3201,2541,790 2 3779
+~a 13227,18873,330,1833,105,790 2 3811
+-D 13227,18990,0,1389,963,790 2 3792
+Sd 13227,19545,330,192,237,192 2 3824
+'I 13227,24630,0,1389,-663,790 2 3789
+`I 13227,24630,0,558,-663,558 2 3788
+'O 13227,24630,330,1485,273,790 2 3795
+`O 13227,24630,330,1485,273,790 2 3794
+~O 13227,23814,330,3201,273,790 2 3797
+~o 13227,18873,330,1833,252,790 2 3829
vS 13227,24810,330,2433,1134,790 2 51795
vs 13227,19905,330,1539,480,790 2 51827
-char218 13227,24630,330,2220,108,790 2 3802
-'U "
+'U 13227,24630,330,2220,108,790 2 3802
:Y 13227,23115,0,2553,-2397,790 2 51801
-char255 13227,18195,4350,1986,3579,790 2 3839
-:y "
-char222 13227,18990,0,378,771,378 2 3806
-TP "
-char254 13227,19545,5475,231,2223,231 3 3838
-Tp "
-char181 13227,14025,4350,765,1659,765 0 3765
-char182 13227,19635,4200,696,-408,696 2 3766
-ps "
-char190 13227,19110,3825,1413,627,790 2 3774
-34 "
+:y 13227,18195,4350,1986,3579,790 2 3839
+TP 13227,18990,0,378,771,378 2 3806
+Tp 13227,19545,5475,231,2223,231 3 3838
+mc 13227,14025,4350,765,1659,765 0 3765
+ps 13227,19635,4200,696,-408,696 2 3766
+34 13227,19110,3825,1413,627,790 2 3774
\- 13227,9945,0,1065,-288,790 0 51757
-char188 13227,19110,3825,918,873,790 2 3772
-14 "
-char189 13227,19110,3825,1269,1023,790 2 3773
-12 "
-char170 13227,19320,0,0,-3066 2 3754
-Of "
-char186 13227,19320,0,0,-3330 2 3770
-Om "
-char171 13227,13710,0,2418,1104,790 0 3755
-Fo "
-char187 13227,13710,0,1107,2415,790 0 3771
-Fc "
-char177 13227,15075,0,1110,-243,790 0 3761
-char166 13227,19083,5916,0,-4623 3 3750
-bb "
-char169 13227,19635,0,3927,-2190,790 2 3753
-co "
-char172 13227,12501,0,1065,-288,790 0 3756
-no "
-char174 13227,19635,0,3927,-2190,790 2 3758
-rg "
-char178 13227,19110,0,0,-2379 2 3762
-S2 "
-char179 13227,19110,0,0,-2073 2 3763
-S3 "
-char184 13227,0,5295,0,-1200 1 3768
-ac "
-char185 13227,19110,0,0,-2727 2 3769
-S1 "
-char215 13227,14814,0,897,-483,790 0 3799
-char247 13227,14655,0,1104,-252,790 0 3831
-char183 13227,11007,0,0,-4590 0 3767
-pc "
+14 13227,19110,3825,918,873,790 2 3772
+12 13227,19110,3825,1269,1023,790 2 3773
+Of 13227,19320,0,0,-3066 2 3754
+Om 13227,19320,0,0,-3330 2 3770
+Fo 13227,13710,0,2418,1104,790 0 3755
+Fc 13227,13710,0,1107,2415,790 0 3771
+t+- 13227,15075,0,1110,-243,790 0 3761
+bb 13227,19083,5916,0,-4623 3 3750
+co 13227,19635,0,3927,-2190,790 2 3753
+no 13227,12501,0,1065,-288,790 0 3756
+rg 13227,19635,0,3927,-2190,790 2 3758
+S2 13227,19110,0,0,-2379 2 3762
+S3 13227,19110,0,0,-2073 2 3763
+ac 13227,0,5295,0,-1200 1 3768
+S1 13227,19110,0,0,-2727 2 3769
+tmu 13227,14814,0,897,-483,790 0 3799
+tdi 13227,14655,0,1104,-252,790 0 3831
+pc 13227,11007,0,0,-4590 0 3767
fm 13227,18990,0,0,-3444 2 51873
sd 13227,18990,0,0,-3444 2 51874
dg 13227,18990,0,0,-2019 2 51755
@@ -334,8 +244,7 @@ Fl 13227,19335,0,2703,1155,790 2 51885
ij 13227,18780,4350,2355,645,790 2 51958
bq 13227,2214,2091,0,-2922 0 51756
%0 13227,19320,330,1920,4113,790 2 51901
-char175 13227,18051,0,1086,-3930,790 2 3759
-a- "
+a- 13227,18051,0,1086,-3930,790 2 3759
ab 13227,19350,0,1683,-3297,790 2 51926
a. 13227,18195,0,0,-6561 2 51927
oe 13227,14355,330,1629,1671,790 0 51823
diff --git a/contrib/groff/font/devlj4/LGR b/contrib/groff/font/devlj4/LGR
index 6e9c476..b9e8f0e 100644
--- a/contrib/groff/font/devlj4/LGR
+++ b/contrib/groff/font/devlj4/LGR
@@ -21,8 +21,7 @@ cq 13227,19320 2 51751
* 13227,18990 2 3626
+ 13227,15075 0 3627
, 13227,2055,2235 0 3628
-char173 13227,7815 0 3629
-hy "
+hy 13227,7815 0 3629
- "
. 13227,2055,330 0 3630
sl 13227,19545,330 2 3631
@@ -114,198 +113,109 @@ ba 13227,19758,6588 3 3708
rC 13227,20130,6075 3 3709
} "
ti 13227,10485 0 51876
-char192 13227,24630 2 3776
-`A "
-char194 13227,24810 2 3778
-^A "
-char200 13227,24630 2 3784
-`E "
-char202 13227,24810 2 3786
-^E "
-char203 13227,23115 2 3787
-:E "
-char206 13227,24810 2 3790
-^I "
-char207 13227,23115 2 3791
-:I "
-char180 13227,19725 2 3764
-aa "
+`A 13227,24630 2 3776
+^A 13227,24810 2 3778
+`E 13227,24630 2 3784
+^E 13227,24810 2 3786
+:E 13227,23115 2 3787
+^I 13227,24810 2 3790
+:I 13227,23115 2 3791
+aa 13227,19725 2 3764
ga 13227,19725 2 3680
a^ 13227,19905 2 3678
^ "
-char168 13227,18195 2 3752
-ad "
+ad 13227,18195 2 3752
a~ 13227,18867 2 3710
~ "
-char217 13227,24630,330 2 3801
-`U "
-char219 13227,24810,330 2 3803
-^U "
-char221 13227,24630 2 3805
-'Y "
-char253 13227,19725,4350 2 3837
-'y "
-char176 13227,19320 2 3760
-de "
-char199 13227,19320,5430 3 3783
-,C "
-char231 13227,14355,5430 1 3815
-,c "
-char209 13227,23787 2 3793
-~N "
-char241 13227,18867 2 3825
-~n "
-char161 13227,14259,5061 1 3745
-r! "
-char191 13227,14265,5385 1 3775
-r? "
-char164 13227,15684 0 3748
-Cs "
-char163 13227,19320,330 2 3747
-Po "
-char165 13227,18990 2 3749
-Ye "
-char167 13227,19320,1344 2 3751
-sc "
+`U 13227,24630,330 2 3801
+^U 13227,24810,330 2 3803
+'Y 13227,24630 2 3805
+'y 13227,19725,4350 2 3837
+de 13227,19320 2 3760
+,C 13227,19320,5430 3 3783
+,c 13227,14355,5430 1 3815
+~N 13227,23787 2 3793
+~n 13227,18867 2 3825
+r! 13227,14259,5061 1 3745
+r? 13227,14265,5385 1 3775
+Cs 13227,15684 0 3748
+Po 13227,19320,330 2 3747
+Ye 13227,18990 2 3749
+sc 13227,19320,1344 2 3751
Fn 13227,19335,3540 2 51871
-char162 13227,19320,330 2 3746
-ct "
-char226 13227,19905,330 2 3810
-^a "
-char234 13227,19905,330 2 3818
-^e "
-char244 13227,19905,330 2 3828
-^o "
-char251 13227,19905,330 2 3835
-^u "
-char225 13227,19725,330 2 3809
-'a "
-char233 13227,19725,330 2 3817
-'e "
-char243 13227,19725,330 2 3827
-'o "
-char250 13227,19725,330 2 3834
-'u "
-char224 13227,19725,330 2 3808
-`a "
-char232 13227,19725,330 2 3816
-`e "
-char242 13227,19725,330 2 3826
-`o "
-char249 13227,19725,330 2 3833
-`u "
-char228 13227,18195,330 2 3812
-:a "
-char235 13227,18195,330 2 3819
-:e "
-char246 13227,18195,330 2 3830
-:o "
-char252 13227,18195,330 2 3836
-:u "
-char197 13227,24735 2 3781
-oA "
-char238 13227,19905 2 3822
-^i "
-char216 13227,19320,444 2 3800
-/O "
-char198 13227,18990 2 3782
-AE "
-char229 13227,19830,330 2 3813
-oa "
-char237 13227,19725 2 3821
-'i "
-char248 13227,14805,747 0 3832
-/o "
-char230 13227,14355,330 0 3814
-ae "
-char196 13227,23115 2 3780
-:A "
-char236 13227,19725 2 3820
-`i "
-char214 13227,23115,330 2 3798
-:O "
-char220 13227,23115,330 2 3804
-:U "
-char201 13227,24630 2 3785
-'E "
-char239 13227,18195 2 3823
-:i "
-char223 13227,19335,330 2 3807
-ss "
-char212 13227,24810,330 2 3796
-^O "
-char193 13227,24630 2 3777
-'A "
-char195 13227,23787 2 3779
-~A "
-char227 13227,18867,330 2 3811
-~a "
-char208 13227,18990 2 3792
--D "
-char240 13227,19545,330 2 3824
-Sd "
-char205 13227,24630 2 3789
-'I "
-char204 13227,24630 2 3788
-`I "
-char211 13227,24630,330 2 3795
-'O "
-char210 13227,24630,330 2 3794
-`O "
-char213 13227,23787,330 2 3797
-~O "
-char245 13227,18867,330 2 3829
-~o "
+ct 13227,19320,330 2 3746
+^a 13227,19905,330 2 3810
+^e 13227,19905,330 2 3818
+^o 13227,19905,330 2 3828
+^u 13227,19905,330 2 3835
+'a 13227,19725,330 2 3809
+'e 13227,19725,330 2 3817
+'o 13227,19725,330 2 3827
+'u 13227,19725,330 2 3834
+`a 13227,19725,330 2 3808
+`e 13227,19725,330 2 3816
+`o 13227,19725,330 2 3826
+`u 13227,19725,330 2 3833
+:a 13227,18195,330 2 3812
+:e 13227,18195,330 2 3819
+:o 13227,18195,330 2 3830
+:u 13227,18195,330 2 3836
+oA 13227,24735 2 3781
+^i 13227,19905 2 3822
+/O 13227,19320,444 2 3800
+AE 13227,18990 2 3782
+oa 13227,19830,330 2 3813
+'i 13227,19725 2 3821
+/o 13227,14805,747 0 3832
+ae 13227,14355,330 0 3814
+:A 13227,23115 2 3780
+`i 13227,19725 2 3820
+:O 13227,23115,330 2 3798
+:U 13227,23115,330 2 3804
+'E 13227,24630 2 3785
+:i 13227,18195 2 3823
+ss 13227,19335,330 2 3807
+^O 13227,24810,330 2 3796
+'A 13227,24630 2 3777
+~A 13227,23787 2 3779
+~a 13227,18867,330 2 3811
+-D 13227,18990 2 3792
+Sd 13227,19545,330 2 3824
+'I 13227,24630 2 3789
+`I 13227,24630 2 3788
+'O 13227,24630,330 2 3795
+`O 13227,24630,330 2 3794
+~O 13227,23787,330 2 3797
+~o 13227,18867,330 2 3829
vS 13227,24810,330 2 51795
vs 13227,19905,330 2 51827
-char218 13227,24630,330 2 3802
-'U "
+'U 13227,24630,330 2 3802
:Y 13227,23115 2 51801
-char255 13227,18195,4350 2 3839
-:y "
-char222 13227,18990 2 3806
-TP "
-char254 13227,19545,5475 3 3838
-Tp "
-char181 13227,14025,4350 0 3765
-char182 13227,19635,4200 2 3766
-ps "
-char190 13227,19119,3825 2 3774
-34 "
+:y 13227,18195,4350 2 3839
+TP 13227,18990 2 3806
+Tp 13227,19545,5475 3 3838
+mc 13227,14025,4350 0 3765
+ps 13227,19635,4200 2 3766
+34 13227,19119,3825 2 3774
\- 13227,9945 0 51757
-char188 13227,19110,3825 2 3772
-14 "
-char189 13227,19110,3825 2 3773
-12 "
-char170 13227,19320 2 3754
-Of "
-char186 13227,19320 2 3770
-Om "
-char171 13227,13710 0 3755
-Fo "
-char187 13227,13710 0 3771
-Fc "
-char177 13227,15075 0 3761
-char166 13227,19083,5916 3 3750
-bb "
-char169 13227,19635 2 3753
-co "
-char172 13227,12501 0 3756
-no "
-char174 13227,19635 2 3758
-rg "
-char178 13227,19110 2 3762
-S2 "
-char179 13227,19119 2 3763
-S3 "
-char184 13227,0,5430 1 3768
-ac "
-char185 13227,19110 2 3769
-S1 "
-char215 13227,14814 0 3799
-char247 13227,14655 0 3831
-char183 13227,11025 0 3767
-pc "
+14 13227,19110,3825 2 3772
+12 13227,19110,3825 2 3773
+Of 13227,19320 2 3754
+Om 13227,19320 2 3770
+Fo 13227,13710 0 3755
+Fc 13227,13710 0 3771
+t+- 13227,15075 0 3761
+bb 13227,19083,5916 3 3750
+co 13227,19635 2 3753
+no 13227,12501 0 3756
+rg 13227,19635 2 3758
+S2 13227,19110 2 3762
+S3 13227,19119 2 3763
+ac 13227,0,5430 1 3768
+S1 13227,19110 2 3769
+tmu 13227,14814 0 3799
+tdi 13227,14655 0 3831
+pc 13227,11025 0 3767
fm 13227,18990 2 51873
sd 13227,18990 2 51874
dg 13227,18990 2 51755
@@ -333,8 +243,7 @@ Fl 13227,19335 2 51885
ij 13227,18780,4350 2 51958
bq 13227,2136,2154 0 51756
%0 13227,19320,330 2 51901
-char175 13227,18078 2 3759
-a- "
+a- 13227,18078 2 3759
ab 13227,19350 2 51926
a. 13227,18195 2 51927
oe 13227,14355,330 0 51823
diff --git a/contrib/groff/font/devlj4/MARIGOLD b/contrib/groff/font/devlj4/MARIGOLD
index cc0921b..142ae85 100644
--- a/contrib/groff/font/devlj4/MARIGOLD
+++ b/contrib/groff/font/devlj4/MARIGOLD
@@ -22,8 +22,7 @@ cq 3903,11790 0 51751
* 9759,11940 0 3626
+ 11709,8445,360 0 3627
, 5856,1650,4590 0 3628
-char173 6831,6345 0 3629
-hy "
+hy 6831,6345 0 3629
- "
. 5856,2535,330 0 3630
sl 8781,16770,3240 2 3631
@@ -115,198 +114,109 @@ ba 13173,19758,6588 2 3708
rC 8295,16380,2670 2 3709
} "
ti 26346,8952 0 51876
-char192 12198,17040,225 2 3776
-`A "
-char194 12198,17520,225 2 3778
-^A "
-char200 10245,17040,225 2 3784
-`E "
-char202 10245,17520,225 2 3786
-^E "
-char203 10245,16320,225 2 3787
-:E "
-char206 6342,17520,60 2 3790
-^I "
-char207 6342,16320,60 2 3791
-:I "
-char180 11709,15030 0 3764
-aa "
+`A 12198,17040,225 2 3776
+^A 12198,17520,225 2 3778
+`E 10245,17040,225 2 3784
+^E 10245,17520,225 2 3786
+:E 10245,16320,225 2 3787
+^I 6342,17520,60 2 3790
+:I 6342,16320,60 2 3791
+aa 11709,15030 0 3764
ga 11709,15030 0 3680
a^ 11709,15300 0 3678
^ "
-char168 11709,14580 0 3752
-ad "
+ad 11709,14580 0 3752
a~ 11709,13782 0 3710
~ "
-char217 12684,17040,330 2 3801
-`U "
-char219 12684,17520,330 2 3803
-^U "
-char221 10734,17040,60 2 3805
-'Y "
-char253 7317,15030,7950 1 3837
-'y "
-char176 7806,11940 0 3760
-de "
-char199 10734,12120,4140 0 3783
-,C "
-char231 6342,10350,4320 0 3815
-,c "
-char209 13173,15828,330 2 3793
-~N "
-char241 7806,13782,330 0 3825
-~n "
-char161 7806,8313,4587 0 3745
-r! "
-char191 8295,8202,4248 0 3775
-r? "
-char164 9759,10668 0 3748
-Cs "
-char163 9759,11940,225 0 3747
-Po "
-char165 9759,12165,60 0 3749
-Ye "
-char167 9759,12120,4596 0 3751
-sc "
+`U 12684,17040,330 2 3801
+^U 12684,17520,330 2 3803
+'Y 10734,17040,60 2 3805
+'y 7317,15030,7950 1 3837
+de 7806,11940 0 3760
+,C 10734,12120,4140 0 3783
+,c 6342,10350,4320 0 3815
+~N 13173,15828,330 2 3793
+~n 7806,13782,330 0 3825
+r! 7806,8313,4587 0 3745
+r? 8295,8202,4248 0 3775
+Cs 9759,10668 0 3748
+Po 9759,11940,225 0 3747
+Ye 9759,12165,60 0 3749
+sc 9759,12120,4596 0 3751
Fn 9759,17430,7950 3 51871
-char162 9759,12516,2580 0 3746
-ct "
-char226 8295,15300,330 0 3810
-^a "
-char234 6342,15300,330 0 3818
-^e "
-char244 6831,15300,330 0 3828
-^o "
-char251 7806,15300,330 0 3835
-^u "
-char225 8295,15030,330 0 3809
-'a "
-char233 6342,15030,330 0 3817
-'e "
-char243 6831,15030,330 0 3827
-'o "
-char250 7806,15030,330 0 3834
-'u "
-char224 8295,15030,330 0 3808
-`a "
-char232 6342,15030,330 0 3816
-`e "
-char242 6831,15030,330 0 3826
-`o "
-char249 7806,15030,330 0 3833
-`u "
-char228 8295,14580,330 0 3812
-:a "
-char235 6342,14580,330 0 3819
-:e "
-char246 6831,14580,330 0 3830
-:o "
-char252 7806,14580,330 0 3836
-:u "
-char197 12198,16815,225 2 3781
-oA "
-char238 4878,15300,330 0 3822
-^i "
-char216 11709,12849,984 0 3800
-/O "
-char198 17565,11910,225 0 3782
-AE "
-char229 8295,14685,330 0 3813
-oa "
-char237 4878,15030,330 0 3821
-'i "
-char248 6831,11724,1635 0 3832
-/o "
-char230 10734,10350,330 0 3814
-ae "
-char196 12198,16320,225 2 3780
-:A "
-char236 4878,15030,330 0 3820
-`i "
-char214 11709,16320,330 2 3798
-:O "
-char220 12684,16320,330 2 3804
-:U "
-char201 10245,17040,225 2 3785
-'E "
-char239 4878,14580,330 0 3823
-:i "
-char223 9270,18135,7350 3 3807
-ss "
-char212 11709,17520,330 2 3796
-^O "
-char193 12198,17040,225 2 3777
-'A "
-char195 12198,15828,225 2 3779
-~A "
-char227 8295,13782,330 0 3811
-~a "
-char208 12684,12015,225 0 3792
--D "
-char240 7317,17430,330 2 3824
-Sd "
-char205 6342,17040,60 2 3789
-'I "
-char204 6342,17040,60 2 3788
-`I "
-char211 11709,17040,330 2 3795
-'O "
-char210 11709,17040,330 2 3794
-`O "
-char213 11709,15828,330 2 3797
-~O "
-char245 6831,13782,330 0 3829
-~o "
+ct 9759,12516,2580 0 3746
+^a 8295,15300,330 0 3810
+^e 6342,15300,330 0 3818
+^o 6831,15300,330 0 3828
+^u 7806,15300,330 0 3835
+'a 8295,15030,330 0 3809
+'e 6342,15030,330 0 3817
+'o 6831,15030,330 0 3827
+'u 7806,15030,330 0 3834
+`a 8295,15030,330 0 3808
+`e 6342,15030,330 0 3816
+`o 6831,15030,330 0 3826
+`u 7806,15030,330 0 3833
+:a 8295,14580,330 0 3812
+:e 6342,14580,330 0 3819
+:o 6831,14580,330 0 3830
+:u 7806,14580,330 0 3836
+oA 12198,16815,225 2 3781
+^i 4878,15300,330 0 3822
+/O 11709,12849,984 0 3800
+AE 17565,11910,225 0 3782
+oa 8295,14685,330 0 3813
+'i 4878,15030,330 0 3821
+/o 6831,11724,1635 0 3832
+ae 10734,10350,330 0 3814
+:A 12198,16320,225 2 3780
+`i 4878,15030,330 0 3820
+:O 11709,16320,330 2 3798
+:U 12684,16320,330 2 3804
+'E 10245,17040,225 2 3785
+:i 4878,14580,330 0 3823
+ss 9270,18135,7350 3 3807
+^O 11709,17520,330 2 3796
+'A 12198,17040,225 2 3777
+~A 12198,15828,225 2 3779
+~a 8295,13782,330 0 3811
+-D 12684,12015,225 0 3792
+Sd 7317,17430,330 2 3824
+'I 6342,17040,60 2 3789
+`I 6342,17040,60 2 3788
+'O 11709,17040,330 2 3795
+`O 11709,17040,330 2 3794
+~O 11709,15828,330 2 3797
+~o 6831,13782,330 0 3829
vS 9759,17520,330 2 51795
vs 5367,15330,330 0 51827
-char218 12684,17040,330 2 3802
-'U "
+'U 12684,17040,330 2 3802
:Y 10734,16320,60 2 51801
-char255 7317,14580,7950 1 3839
-:y "
-char222 9759,11850,60 0 3806
-TP "
-char254 7806,17430,7950 3 3838
-Tp "
-char181 14637,10800,5595 0 3765
-char182 11709,12450,4455 0 3766
-ps "
-char190 17076,11940,840 0 3774
-34 "
+:y 7317,14580,7950 1 3839
+TP 9759,11850,60 0 3806
+Tp 7806,17430,7950 3 3838
+mc 14637,10800,5595 0 3765
+ps 11709,12450,4455 0 3766
+34 17076,11940,840 0 3774
\- 11709,4770 0 51757
-char188 17076,11940,840 0 3772
-14 "
-char189 17076,11940,330 0 3773
-12 "
-char170 6342,11940 0 3754
-Of "
-char186 6342,11940 0 3770
-Om "
-char171 9270,8535 0 3755
-Fo "
-char187 9270,8535 0 3771
-Fc "
-char177 11709,8445,2595 0 3761
-char166 13173,19083,5916 2 3750
-bb "
-char169 7806,15960 2 3753
-co "
-char172 11709,6780 0 3756
-no "
-char174 7806,15960 2 3758
-rg "
-char178 7317,11850 0 3762
-S2 "
-char179 7317,11850 0 3763
-S3 "
-char184 11709,0,4320 0 3768
-ac "
-char185 7317,11850 0 3769
-S1 "
-char215 11709,7815 0 3799
-char247 11709,8700,360 0 3831
-char183 5856,7662 0 3767
-pc "
+14 17076,11940,840 0 3772
+12 17076,11940,330 0 3773
+Of 6342,11940 0 3754
+Om 6342,11940 0 3770
+Fo 9270,8535 0 3755
+Fc 9270,8535 0 3771
+t+- 11709,8445,2595 0 3761
+bb 13173,19083,5916 2 3750
+co 7806,15960 2 3753
+no 11709,6780 0 3756
+rg 7806,15960 2 3758
+S2 7317,11850 0 3762
+S3 7317,11850 0 3763
+ac 11709,0,4320 0 3768
+S1 7317,11850 0 3769
+tmu 11709,7815 0 3799
+tdi 11709,8700,360 0 3831
+pc 5856,7662 0 3767
fm 4878,11610 0 51873
sd 7806,11610 0 51874
dg 9759,12315,3795 0 51755
@@ -334,8 +244,7 @@ Fl 11709,17430,7950 3 51885
ij 8781,13635,7950 1 51958
bq 3903,1650,2550 0 51756
%0 22932,11940,330 0 51901
-char175 11709,13674 0 3759
-a- "
+a- 11709,13674 0 3759
ab 11709,14700 0 51926
a. 11709,14580 0 51927
oe 10734,10350,330 0 51823
diff --git a/contrib/groff/font/devlj4/OB b/contrib/groff/font/devlj4/OB
index 8ea8f29..ad6bd17 100644
--- a/contrib/groff/font/devlj4/OB
+++ b/contrib/groff/font/devlj4/OB
@@ -373,19 +373,16 @@ K W -486
K U -486
L cq -2925
L ' -2925
-T char173 -2925
T hy -2925
T - -2925
T en -2925
T em -2925
A cq -3414
A ' -3414
-char173 T -2925
hy T -2925
- T -2925
en T -2925
em T -2925
-Y char173 -2439
Y hy -2439
Y - -2439
Y en -2439
@@ -400,7 +397,6 @@ b cq -1461
b ' -1461
a cq -975
a ' -975
-V char173 -1461
V hy -1461
V - -1461
V en -1461
@@ -411,7 +407,6 @@ n cq -975
n ' -975
m cq -975
m ' -975
-W char173 -975
W hy -975
W - -975
W en -975
@@ -420,32 +415,26 @@ cq d -1461
' d -1461
s cq -486
s ' -486
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1461
A hy -1461
A - -1461
A en -1461
A em -1461
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -975
' s -975
-char173 X -1461
hy X -1461
- X -1461
-char173 A -1461
hy A -1461
- A -1461
en X -1461
@@ -459,14 +448,12 @@ k cq -486
k ' -486
M cq -486
M ' -486
-Z char173 -486
Z hy -486
Z - -486
Z en -486
Z em -486
cq M -486
' M -486
-k char173 -486
k hy -486
k - -486
k en -486
@@ -488,8 +475,7 @@ cq 7317,18375 2 51751
* 14637,18150 2 3626
+ 23418,13164,534 0 3627
, 7317,4068,4902 0 3628
-char173 7317,8307 0 3629
-hy "
+hy 7317,8307 0 3629
- "
. 7317,3975,375 0 3630
sl 7317,19650,525 2 3631
@@ -581,198 +567,109 @@ ba 13173,19758,6588 3 3708
rC 13173,19935,6210 3 3709
} "
ti 26346,9435 0 51876
-char192 17565,24537,69 2 3776
-`A "
-char194 17565,24273,69 2 3778
-^A "
-char200 13173,24537,201 2 3784
-`E "
-char202 13173,24273,201 2 3786
-^E "
-char203 13173,23301,201 2 3787
-:E "
-char206 8781,24273,69 2 3790
-^I "
-char207 8781,23301,69 2 3791
-:I "
-char180 14637,18843 2 3764
-aa "
+`A 17565,24537,69 2 3776
+^A 17565,24273,69 2 3778
+`E 13173,24537,201 2 3784
+^E 13173,24273,201 2 3786
+:E 13173,23301,201 2 3787
+^I 8781,24273,69 2 3790
+:I 8781,23301,69 2 3791
+aa 14637,18843 2 3764
ga 14637,18843 2 3680
a^ 14637,18738 2 3678
^ "
-char168 14637,17694 0 3752
-ad "
+ad 14637,17694 0 3752
a~ 14637,17694 0 3710
~ "
-char217 20490,24537,375 2 3801
-`U "
-char219 20490,24273,375 2 3803
-^U "
-char221 16101,24537,69 2 3805
-'Y "
-char253 13173,18843,5439 3 3837
-'y "
-char176 14637,17700 0 3760
-de "
-char199 17565,18375,6663 3 3783
-,C "
-char231 13173,12840,5469 1 3815
-,c "
-char209 20490,23031,69 2 3793
-~N "
-char241 14637,17694,69 0 3825
-~n "
-char161 7317,12906,5469 1 3745
-r! "
-char191 11709,12906,5469 1 3775
-r? "
-char164 14637,15834 0 3748
-Cs "
-char163 14637,17700,201 0 3747
-Po "
-char165 14637,17769,69 2 3749
-Ye "
-char167 14637,18000,1383 2 3751
-sc "
+`U 20490,24537,375 2 3801
+^U 20490,24273,375 2 3803
+'Y 16101,24537,69 2 3805
+'y 13173,18843,5439 3 3837
+de 14637,17700 0 3760
+,C 17565,18375,6663 3 3783
+,c 13173,12840,5469 1 3815
+~N 20490,23031,69 2 3793
+~n 14637,17694,69 0 3825
+r! 7317,12906,5469 1 3745
+r? 11709,12906,5469 1 3775
+Cs 14637,15834 0 3748
+Po 14637,17700,201 0 3747
+Ye 14637,17769,69 2 3749
+sc 14637,18000,1383 2 3751
Fn 14637,19710,69 2 51871
-char162 14637,19788,135 2 3746
-ct "
-char226 13173,18738,375 2 3810
-^a "
-char234 13173,18738,375 2 3818
-^e "
-char244 14637,18738,375 2 3828
-^o "
-char251 14637,18738,375 2 3835
-^u "
-char225 13173,18843,375 2 3809
-'a "
-char233 13173,18843,375 2 3817
-'e "
-char243 14637,18843,375 2 3827
-'o "
-char250 14637,18843,375 2 3834
-'u "
-char224 13173,18843,375 2 3808
-`a "
-char232 13173,18843,375 2 3816
-`e "
-char242 14637,18843,375 2 3826
-`o "
-char249 14637,18843,375 2 3833
-`u "
-char228 13173,17694,375 0 3812
-:a "
-char235 13173,17694,375 0 3819
-:e "
-char246 14637,17694,375 0 3830
-:o "
-char252 14637,17694,375 0 3836
-:u "
-char197 17565,25002,69 2 3781
-oA "
-char238 7317,18738,69 2 3822
-^i "
-char216 21954,18375,375 2 3800
-/O "
-char198 22932,18201,201 2 3782
-AE "
-char229 13173,18684,375 2 3813
-oa "
-char237 7317,18843,69 2 3821
-'i "
-char248 14637,12849,402 0 3832
-/o "
-char230 20004,12840,375 0 3814
-ae "
-char196 17565,23301,69 2 3780
-:A "
-char236 7317,18843,69 2 3820
-`i "
-char214 21954,23301,375 2 3798
-:O "
-char220 20490,23301,375 2 3804
-:U "
-char201 13173,24537,201 2 3785
-'E "
-char239 7317,17694,69 0 3823
-:i "
-char223 14637,19710,375 2 3807
-ss "
-char212 21954,24273,375 2 3796
-^O "
-char193 17565,24537,69 2 3777
-'A "
-char195 17565,23031,69 2 3779
-~A "
-char227 13173,17694,375 0 3811
-~a "
-char208 20490,18201,201 2 3792
--D "
-char240 14637,19503,375 2 3824
-Sd "
-char205 8781,24537,69 2 3789
-'I "
-char204 8781,24537,69 2 3788
-`I "
-char211 21954,24537,375 2 3795
-'O "
-char210 21954,24537,375 2 3794
-`O "
-char213 21954,23031,375 2 3797
-~O "
-char245 14637,17694,375 0 3829
-~o "
+ct 14637,19788,135 2 3746
+^a 13173,18738,375 2 3810
+^e 13173,18738,375 2 3818
+^o 14637,18738,375 2 3828
+^u 14637,18738,375 2 3835
+'a 13173,18843,375 2 3809
+'e 13173,18843,375 2 3817
+'o 14637,18843,375 2 3827
+'u 14637,18843,375 2 3834
+`a 13173,18843,375 2 3808
+`e 13173,18843,375 2 3816
+`o 14637,18843,375 2 3826
+`u 14637,18843,375 2 3833
+:a 13173,17694,375 0 3812
+:e 13173,17694,375 0 3819
+:o 14637,17694,375 0 3830
+:u 14637,17694,375 0 3836
+oA 17565,25002,69 2 3781
+^i 7317,18738,69 2 3822
+/O 21954,18375,375 2 3800
+AE 22932,18201,201 2 3782
+oa 13173,18684,375 2 3813
+'i 7317,18843,69 2 3821
+/o 14637,12849,402 0 3832
+ae 20004,12840,375 0 3814
+:A 17565,23301,69 2 3780
+`i 7317,18843,69 2 3820
+:O 21954,23301,375 2 3798
+:U 20490,23301,375 2 3804
+'E 13173,24537,201 2 3785
+:i 7317,17694,69 0 3823
+ss 14637,19710,375 2 3807
+^O 21954,24273,375 2 3796
+'A 17565,24537,69 2 3777
+~A 17565,23031,69 2 3779
+~a 13173,17694,375 0 3811
+-D 20490,18201,201 2 3792
+Sd 14637,19503,375 2 3824
+'I 8781,24537,69 2 3789
+`I 8781,24537,69 2 3788
+'O 21954,24537,375 2 3795
+`O 21954,24537,375 2 3794
+~O 21954,23031,375 2 3797
+~o 14637,17694,375 0 3829
vS 13173,24273,375 2 51795
vs 10245,18738,375 2 51827
-char218 20490,24537,375 2 3802
-'U "
+'U 20490,24537,375 2 3802
:Y 16101,23301,69 2 51801
-char255 13173,17694,5439 1 3839
-:y "
-char222 15126,18069,69 2 3806
-TP "
-char254 14637,19569,5469 3 3838
-Tp "
-char181 15612,12630,4680 0 3765
-char182 14637,19635,4200 2 3766
-ps "
-char190 23418,17700,444 0 3774
-34 "
+:y 13173,17694,5439 1 3839
+TP 15126,18069,69 2 3806
+Tp 14637,19569,5469 3 3838
+mc 15612,12630,4680 0 3765
+ps 14637,19635,4200 2 3766
+34 23418,17700,444 0 3774
\- 23418,7455 0 51757
-char188 23418,18099,444 2 3772
-14 "
-char189 23418,18099,444 2 3773
-12 "
-char170 9759,17700 0 3754
-Of "
-char186 9759,17700 0 3770
-Om "
-char171 11709,11028 0 3755
-Fo "
-char187 11709,11028 0 3771
-Fc "
-char177 23418,13164,4314 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 23418,10770 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 9759,17700 0 3762
-S2 "
-char179 9759,17700 0 3763
-S3 "
-char184 14637,196476,5469 3 3768
-ac "
-char185 9759,18099 2 3769
-S1 "
-char215 23418,13107,567 0 3799
-char247 23418,13017,387 0 3831
-char183 7317,11274 0 3767
-pc "
+14 23418,18099,444 2 3772
+12 23418,18099,444 2 3773
+Of 9759,17700 0 3754
+Om 9759,17700 0 3770
+Fo 11709,11028 0 3755
+Fc 11709,11028 0 3771
+t+- 23418,13164,4314 0 3761
+bb 13173,19083,5916 3 3750
+co 13173,19635 2 3753
+no 23418,10770 0 3756
+rg 13173,19635 2 3758
+S2 9759,17700 0 3762
+S3 9759,17700 0 3763
+ac 14637,196476,5469 3 3768
+S1 9759,18099 2 3769
+tmu 23418,13107,567 0 3799
+tdi 23418,13017,387 0 3831
+pc 7317,11274 0 3767
fm 7317,18096 2 51873
sd 14637,18096 2 51874
dg 14637,18201,426 2 51755
@@ -800,8 +697,7 @@ Fl 22932,19710,69 2 51885
ij 14637,19332,5400 3 51958
bq 7317,4095,4371 0 51756
%0 33177,17769,444 2 51901
-char175 14637,16722 0 3759
-a- "
+a- 14637,16722 0 3759
ab 14637,18525 2 51926
a. 14637,18792 2 51927
oe 22443,12840,375 0 51823
diff --git a/contrib/groff/font/devlj4/OBI b/contrib/groff/font/devlj4/OBI
index e17fe3f..ca076aa 100644
--- a/contrib/groff/font/devlj4/OBI
+++ b/contrib/groff/font/devlj4/OBI
@@ -368,19 +368,16 @@ K W -486
K U -486
L cq -2439
L ' -2439
-T char173 -2439
T hy -2439
T - -2439
T en -2439
T em -2439
A cq -3414
A ' -3414
-char173 T -2925
hy T -2925
- T -2925
en T -2925
em T -2925
-Y char173 -2439
Y hy -2439
Y - -2439
Y en -2439
@@ -395,7 +392,6 @@ b cq -1950
b ' -1950
a cq -975
a ' -975
-V char173 -1461
V hy -1461
V - -1461
V en -1461
@@ -406,45 +402,37 @@ n cq -1461
n ' -1461
R cq -486
R ' -486
-W char173 -975
W hy -975
W - -975
W en -975
W em -975
cq d -1461
' d -1461
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1950
A hy -1950
A - -1950
A en -1950
A em -1950
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -975
' s -975
-char173 X -1461
hy X -1461
- X -1461
-char173 A -975
hy A -975
- A -975
en X -1461
en A -975
em X -1461
-R char173 -486
R hy -486
R - -486
R en -486
@@ -454,12 +442,10 @@ K ' -486
b f -486
k cq -486
k ' -486
-Z char173 -486
Z hy -486
Z - -486
Z en -486
Z em -486
-k char173 -486
k hy -486
k - -486
k en -486
@@ -481,8 +467,7 @@ cq 7317,18375,0,2511,-531,737 2 51751
* 14637,18150,0,63,-2364,63 2 3626
+ 23418,13164,534,0,-3528 0 3627
, 7317,3966,5040,0,3423 1 3628
-char173 7317,8715,0,1497,1071,737 0 3629
-hy "
+hy 7317,8715,0,1497,1071,737 0 3629
- "
. 7317,3849,375,0,627 0 3630
sl 7317,19575,450,4377,2736,737 2 3631
@@ -574,198 +559,109 @@ ba 13173,19758,6588,0,-4596 3 3708
rC 13173,19935,6210,63,2304,63 3 3709
} "
ti 26346,9435,0,0,-4029 0 51876
-char192 17565,24342,69,0,2586 2 3776
-`A "
-char194 17565,24321,69,0,2586 2 3778
-^A "
-char200 13173,24342,201,2835,738,737 2 3784
-`E "
-char202 13173,24321,201,2835,738,737 2 3786
-^E "
-char203 13173,23610,201,3084,738,737 2 3787
-:E "
-char206 8781,24321,69,4296,441,737 2 3790
-^I "
-char207 8781,23610,69,5280,441,737 2 3791
-:I "
-char180 14637,18801,0,297,-5763,297 2 3764
-aa "
+`A 17565,24342,69,0,2586 2 3776
+^A 17565,24321,69,0,2586 2 3778
+`E 13173,24342,201,2835,738,737 2 3784
+^E 13173,24321,201,2835,738,737 2 3786
+:E 13173,23610,201,3084,738,737 2 3787
+^I 8781,24321,69,4296,441,737 2 3790
+:I 8781,23610,69,5280,441,737 2 3791
+aa 14637,18801,0,297,-5763,297 2 3764
ga 14637,18801,0,0,-4419 2 3680
a^ 14637,18780,0,0,-3456 2 3678
^ "
-char168 14637,18090,0,429,-4023,429 2 3752
-ad "
+ad 14637,18090,0,429,-4023,429 2 3752
a~ 14637,17847,0,1308,-3438,737 2 3710
~ "
-char217 20490,24342,375,1671,-1071,737 2 3801
-`U "
-char219 20490,24321,375,1671,-1071,737 2 3803
-^U "
-char221 16101,24342,69,3747,-1419,737 2 3805
-'Y "
-char253 13173,18801,5469,2040,1176,737 3 3837
-'y "
-char176 14637,17700,0,0,-2586 0 3760
-de "
-char199 17565,18375,5988,2640,-600,737 3 3783
-,C "
-char231 12684,12840,5733,2118,171,737 1 3815
-,c "
-char209 20490,23382,69,1383,192,737 2 3793
-~N "
-char241 14637,17847,69,1308,1206,737 2 3825
-~n "
-char161 7317,12906,5469,861,1836,737 1 3745
-r! "
-char191 11709,12906,5469,0,90 1 3775
-r? "
-char164 14637,15834,0,1452,477,737 0 3748
-Cs "
-char163 14637,17700,201,1260,1419,737 0 3747
-Po "
-char165 14637,18069,69,4212,-132,737 2 3749
-Ye "
-char167 14637,18375,1383,0,-933 2 3751
-sc "
+`U 20490,24342,375,1671,-1071,737 2 3801
+^U 20490,24321,375,1671,-1071,737 2 3803
+'Y 16101,24342,69,3747,-1419,737 2 3805
+'y 13173,18801,5469,2040,1176,737 3 3837
+de 14637,17700,0,0,-2586 0 3760
+,C 17565,18375,5988,2640,-600,737 3 3783
+,c 12684,12840,5733,2118,171,737 1 3815
+~N 20490,23382,69,1383,192,737 2 3793
+~n 14637,17847,69,1308,1206,737 2 3825
+r! 7317,12906,5469,861,1836,737 1 3745
+r? 11709,12906,5469,0,90 1 3775
+Cs 14637,15834,0,1452,477,737 0 3748
+Po 14637,17700,201,1260,1419,737 0 3747
+Ye 14637,18069,69,4212,-132,737 2 3749
+sc 14637,18375,1383,0,-933 2 3751
Fn 14637,19710,69,366,-1863,366 2 51871
-char162 14637,19812,342,2082,-1152,737 2 3746
-ct "
-char226 13173,18780,375,711,954,711 2 3810
-^a "
-char234 13173,18780,375,750,480,737 2 3818
-^e "
-char244 14637,18780,375,708,618,708 2 3828
-^o "
-char251 14637,18780,375,1230,417,737 2 3835
-^u "
-char225 13173,18801,375,1029,954,737 2 3809
-'a "
-char233 13173,18801,375,1029,480,737 2 3817
-'e "
-char243 14637,18801,375,708,618,708 2 3827
-'o "
-char250 14637,18801,375,1230,417,737 2 3834
-'u "
-char224 13173,18801,375,189,954,189 2 3808
-`a "
-char232 13173,18801,375,750,480,737 2 3816
-`e "
-char242 14637,18801,375,708,618,708 2 3826
-`o "
-char249 14637,18801,375,1230,417,737 2 3833
-`u "
-char228 13173,18090,375,1161,954,737 2 3812
-:a "
-char235 13173,18090,375,1161,480,737 2 3819
-:e "
-char246 14637,18090,375,708,618,708 2 3830
-:o "
-char252 14637,18090,375,1230,417,737 2 3836
-:u "
-char197 17565,25035,69,0,2586 2 3781
-oA "
-char238 7317,18780,69,3639,1134,737 2 3822
-^i "
-char216 21954,18375,1017,1311,-312,737 2 3800
-/O "
-char198 22932,18201,201,2844,2589,737 2 3782
-AE "
-char229 13173,18678,375,189,954,189 2 3813
-oa "
-char237 7317,18801,69,3957,1134,737 2 3821
-'i "
-char248 14637,13446,843,1227,1224,737 0 3832
-/o "
-char230 20004,12840,375,744,945,737 0 3814
-ae "
-char196 17565,23610,69,888,2586,737 2 3780
-:A "
-char236 7317,18801,69,1116,1134,737 2 3820
-`i "
-char214 21954,23610,375,942,-447,737 2 3798
-:O "
-char220 20490,23610,375,1671,-1071,737 2 3804
-:U "
-char201 13173,24342,201,3348,738,737 2 3785
-'E "
-char239 7317,18090,69,4089,1134,737 2 3823
-:i "
-char223 14637,19500,375,396,1206,396 2 3807
-ss "
-char212 21954,24321,375,942,-447,737 2 3796
-^O "
-char193 17565,24342,69,1152,2586,737 2 3777
-'A "
-char195 17565,23382,69,1752,2586,737 2 3779
-~A "
-char227 13173,17847,375,2040,954,737 2 3811
-~a "
-char208 20490,18069,69,720,318,720 2 3792
--D "
-char240 14637,19674,375,831,618,737 2 3824
-Sd "
-char205 8781,24342,69,5544,441,737 2 3789
-'I "
-char204 8781,24342,69,1779,441,737 2 3788
-`I "
-char211 21954,24342,375,942,-447,737 2 3795
-'O "
-char210 21954,24342,375,942,-447,737 2 3794
-`O "
-char213 21954,23382,375,942,-447,737 2 3797
-~O "
-char245 14637,17847,375,1308,618,737 2 3829
-~o "
+ct 14637,19812,342,2082,-1152,737 2 3746
+^a 13173,18780,375,711,954,711 2 3810
+^e 13173,18780,375,750,480,737 2 3818
+^o 14637,18780,375,708,618,708 2 3828
+^u 14637,18780,375,1230,417,737 2 3835
+'a 13173,18801,375,1029,954,737 2 3809
+'e 13173,18801,375,1029,480,737 2 3817
+'o 14637,18801,375,708,618,708 2 3827
+'u 14637,18801,375,1230,417,737 2 3834
+`a 13173,18801,375,189,954,189 2 3808
+`e 13173,18801,375,750,480,737 2 3816
+`o 14637,18801,375,708,618,708 2 3826
+`u 14637,18801,375,1230,417,737 2 3833
+:a 13173,18090,375,1161,954,737 2 3812
+:e 13173,18090,375,1161,480,737 2 3819
+:o 14637,18090,375,708,618,708 2 3830
+:u 14637,18090,375,1230,417,737 2 3836
+oA 17565,25035,69,0,2586 2 3781
+^i 7317,18780,69,3639,1134,737 2 3822
+/O 21954,18375,1017,1311,-312,737 2 3800
+AE 22932,18201,201,2844,2589,737 2 3782
+oa 13173,18678,375,189,954,189 2 3813
+'i 7317,18801,69,3957,1134,737 2 3821
+/o 14637,13446,843,1227,1224,737 0 3832
+ae 20004,12840,375,744,945,737 0 3814
+:A 17565,23610,69,888,2586,737 2 3780
+`i 7317,18801,69,1116,1134,737 2 3820
+:O 21954,23610,375,942,-447,737 2 3798
+:U 20490,23610,375,1671,-1071,737 2 3804
+'E 13173,24342,201,3348,738,737 2 3785
+:i 7317,18090,69,4089,1134,737 2 3823
+ss 14637,19500,375,396,1206,396 2 3807
+^O 21954,24321,375,942,-447,737 2 3796
+'A 17565,24342,69,1152,2586,737 2 3777
+~A 17565,23382,69,1752,2586,737 2 3779
+~a 13173,17847,375,2040,954,737 2 3811
+-D 20490,18069,69,720,318,720 2 3792
+Sd 14637,19674,375,831,618,737 2 3824
+'I 8781,24342,69,5544,441,737 2 3789
+`I 8781,24342,69,1779,441,737 2 3788
+'O 21954,24342,375,942,-447,737 2 3795
+`O 21954,24342,375,942,-447,737 2 3794
+~O 21954,23382,375,942,-447,737 2 3797
+~o 14637,17847,375,1308,618,737 2 3829
vS 13173,24321,375,3120,879,737 2 51795
vs 10245,18780,375,3117,1230,737 2 51827
-char218 20490,24342,375,1671,-1071,737 2 3802
-'U "
+'U 20490,24342,375,1671,-1071,737 2 3802
:Y 16101,23610,69,3747,-1419,737 2 51801
-char255 13173,18090,5469,2040,1176,737 3 3839
-:y "
-char222 14637,18069,69,1347,384,737 2 3806
-TP "
-char254 14637,19779,5469,672,2361,672 3 3838
-Tp "
-char181 15612,12630,4680,1422,2907,737 0 3765
-char182 14637,19635,4200,18,-1140,18 2 3766
-ps "
-char190 23418,17769,444,0,-870 0 3774
-34 "
+:y 13173,18090,5469,2040,1176,737 3 3839
+TP 14637,18069,69,1347,384,737 2 3806
+Tp 14637,19779,5469,672,2361,672 3 3838
+mc 15612,12630,4680,1422,2907,737 0 3765
+ps 14637,19635,4200,18,-1140,18 2 3766
+34 23418,17769,444,0,-870 0 3774
\- 23418,7455,0,0,-3528 0 51757
-char188 23418,17865,444,0,-2133 2 3772
-14 "
-char189 23418,17865,444,0,-1794 2 3773
-12 "
-char170 9759,17700,0,765,-258,737 0 3754
-Of "
-char186 9759,17700,0,1815,-81,737 0 3770
-Om "
-char171 11220,10851,0,1272,132,737 0 3755
-Fo "
-char187 11220,10851,0,588,816,588 0 3771
-Fc "
-char177 23418,13080,4230,0,-3522 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,3885,-2094,737 2 3753
-co "
-char172 23418,10770,0,0,-3105 0 3756
-no "
-char174 13173,19635,0,3885,-2094,737 2 3758
-rg "
-char178 9270,17700,0,2130,-162,737 0 3762
-S2 "
-char179 9270,17700,0,1656,-123,737 0 3763
-S3 "
-char184 14637,393,5733,0,-1119 1 3768
-ac "
-char185 9270,17865,0,708,-1470,708 2 3769
-S1 "
-char215 23418,13107,567,0,-4626 0 3799
-char247 23418,12999,369,0,-3531 0 3831
-char183 7317,10899,0,282,-741,282 0 3767
-pc "
+14 23418,17865,444,0,-2133 2 3772
+12 23418,17865,444,0,-1794 2 3773
+Of 9759,17700,0,765,-258,737 0 3754
+Om 9759,17700,0,1815,-81,737 0 3770
+Fo 11220,10851,0,1272,132,737 0 3755
+Fc 11220,10851,0,588,816,588 0 3771
+t+- 23418,13080,4230,0,-3522 0 3761
+bb 13173,19083,5916,0,-4596 3 3750
+co 13173,19635,0,3885,-2094,737 2 3753
+no 23418,10770,0,0,-3105 0 3756
+rg 13173,19635,0,3885,-2094,737 2 3758
+S2 9270,17700,0,2130,-162,737 0 3762
+S3 9270,17700,0,1656,-123,737 0 3763
+ac 14637,393,5733,0,-1119 1 3768
+S1 9270,17865,0,708,-1470,708 2 3769
+tmu 23418,13107,567,0,-4626 0 3799
+tdi 23418,12999,369,0,-3531 0 3831
+pc 7317,10899,0,282,-741,282 0 3767
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
@@ -793,8 +689,7 @@ Fl 23418,19710,69,2499,666,737 2 51885
ij 14637,19308,5400,1794,1131,737 3 51958
bq 7317,3972,4527,0,2502 0 51756
%0 33663,17769,264,0,-2289 0 51901
-char175 14637,17490,0,843,-3735,737 0 3759
-a- "
+a- 14637,17490,0,843,-3735,737 0 3759
ab 14637,18528,0,396,-3984,396 2 51926
a. 14637,18786,0,0,-6408 2 51927
oe 22443,12840,375,720,618,720 0 51823
diff --git a/contrib/groff/font/devlj4/OI b/contrib/groff/font/devlj4/OI
index bbe9b44..ef931aa 100644
--- a/contrib/groff/font/devlj4/OI
+++ b/contrib/groff/font/devlj4/OI
@@ -468,19 +468,16 @@ K W -486
K U -975
L cq -2439
L ' -2439
-T char173 -3414
T hy -3414
T - -3414
T en -3414
T em -3414
A cq -3903
A ' -3903
-char173 T -3903
hy T -3903
- T -3903
en T -3903
em T -3903
-Y char173 -1461
Y hy -1461
Y - -1461
Y en -1461
@@ -495,7 +492,6 @@ b cq -1461
b ' -1461
a cq -1950
a ' -1950
-V char173 -1461
V hy -1461
V - -1461
V en -1461
@@ -506,50 +502,41 @@ n cq -1461
n ' -1461
R cq -975
R ' -975
-W char173 -975
W hy -975
W - -975
W en -975
W em -975
cq d -1461
' d -1461
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-F char173 -486
F hy -486
F - -486
F en -486
F em -486
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1950
A hy -1950
A - -1950
A en -1950
A em -1950
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -975
' s -975
-char173 X -1461
hy X -1461
- X -1461
-char173 A -1950
hy A -1950
- A -1950
en X -1461
en A -1950
em X -1461
-R char173 -975
R hy -975
R - -975
R en -975
@@ -560,19 +547,16 @@ t g -486
b f -486
k cq -486
k ' -486
-Z char173 -975
Z hy -975
Z - -975
Z en -975
Z em -975
U cq -486
U ' -486
-k char173 -486
k hy -486
k - -486
k en -486
k em -486
-U char173 -486
U hy -486
U - -486
U en -486
@@ -594,8 +578,7 @@ cq 7317,18375,0,1704,-1407,586 2 51751
* 14637,18150,0,0,-2148 2 3626
+ 23418,13260,393,0,-3789 0 3627
, 7317,2700,4611,0,1776 0 3628
-char173 7317,7170,0,1245,1176,586 0 3629
-hy "
+hy 7317,7170,0,1245,1176,586 0 3629
- "
. 7317,2622,330,0,-237 0 3630
sl 7317,19650,480,2448,1203,586 2 3631
@@ -687,198 +670,109 @@ ba 13173,19758,6588,0,-4596 3 3708
rC 11709,19935,6210,0,2682 3 3709
} "
ti 26346,8952,0,0,-4029 0 51876
-char192 17565,24042,69,0,1896 2 3776
-`A "
-char194 17565,23745,69,0,1896 2 3778
-^A "
-char200 13173,24042,201,1095,-102,586 2 3784
-`E "
-char202 13173,23745,201,1095,-102,586 2 3786
-^E "
-char203 13173,22896,201,1455,-102,586 2 3787
-:E "
-char206 7806,23745,69,3768,-249,586 2 3790
-^I "
-char207 7806,22896,69,4140,-249,586 2 3791
-:I "
-char180 14637,18375,0,0,-6180 2 3764
-aa "
+`A 17565,24042,69,0,1896 2 3776
+^A 17565,23745,69,0,1896 2 3778
+`E 13173,24042,201,1095,-102,586 2 3784
+^E 13173,23745,201,1095,-102,586 2 3786
+:E 13173,22896,201,1455,-102,586 2 3787
+^I 7806,23745,69,3768,-249,586 2 3790
+:I 7806,22896,69,4140,-249,586 2 3791
+aa 14637,18375,0,0,-6180 2 3764
ga 14637,18378,0,0,-4620 2 3680
a^ 14637,18225,0,0,-3891 2 3678
^ "
-char168 14637,17223,0,0,-3717 0 3752
-ad "
+ad 14637,17223,0,0,-3717 0 3752
a~ 14637,17166,0,0,-3717 0 3710
~ "
-char217 20490,24042,375,669,-1455,586 2 3801
-`U "
-char219 20490,23745,375,669,-1455,586 2 3803
-^U "
-char221 14637,24048,69,3225,-543,586 2 3805
-'Y "
-char253 13173,18375,5469,1659,-57,586 3 3837
-'y "
-char176 14637,17700,0,0,-2664 0 3760
-de "
-char199 17565,18375,5736,1455,-411,586 3 3783
-,C "
-char231 12684,12795,5193,1245,282,586 1 3815
-,c "
-char209 20490,22812,375,525,-246,525 2 3793
-~N "
-char241 14637,17166,69,0,282 0 3825
-~n "
-char161 7317,12696,5634,0,639 1 3745
-r! "
-char191 10245,12696,5634,0,795 1 3775
-r? "
-char164 14637,15684,0,660,-117,586 0 3748
-Cs "
-char163 14637,17700,201,1269,1179,586 0 3747
-Po "
-char165 14637,18069,69,2862,-180,586 2 3749
-Ye "
-char167 14637,17865,3633,0,-960 2 3751
-sc "
+`U 20490,24042,375,669,-1455,586 2 3801
+^U 20490,23745,375,669,-1455,586 2 3803
+'Y 14637,24048,69,3225,-543,586 2 3805
+'y 13173,18375,5469,1659,-57,586 3 3837
+de 14637,17700,0,0,-2664 0 3760
+,C 17565,18375,5736,1455,-411,586 3 3783
+,c 12684,12795,5193,1245,282,586 1 3815
+~N 20490,22812,375,525,-246,525 2 3793
+~n 14637,17166,69,0,282 0 3825
+r! 7317,12696,5634,0,639 1 3745
+r? 10245,12696,5634,0,795 1 3775
+Cs 14637,15684,0,660,-117,586 0 3748
+Po 14637,17700,201,1269,1179,586 0 3747
+Ye 14637,18069,69,2862,-180,586 2 3749
+sc 14637,17865,3633,0,-960 2 3751
Fn 14637,19710,69,0,-3318 2 51871
-char162 14637,19782,0,393,-999,393 2 3746
-ct "
-char226 13173,18225,330,168,582,168 2 3810
-^a "
-char234 13173,18225,330,588,327,586 2 3818
-^e "
-char244 14637,18225,330,453,351,453 2 3828
-^o "
-char251 14637,18225,330,372,-348,372 2 3835
-^u "
-char225 13173,18375,330,168,582,168 2 3809
-'a "
-char233 13173,18375,330,588,327,586 2 3817
-'e "
-char243 14637,18375,330,453,351,453 2 3827
-'o "
-char250 14637,18375,330,372,-348,372 2 3834
-'u "
-char224 13173,18378,330,168,582,168 2 3808
-`a "
-char232 13173,18378,330,588,327,586 2 3816
-`e "
-char242 14637,18378,330,453,351,453 2 3826
-`o "
-char249 14637,18378,330,372,-348,372 2 3833
-`u "
-char228 13173,17223,330,285,582,285 0 3812
-:a "
-char235 13173,17223,330,588,327,586 0 3819
-:e "
-char246 14637,17223,330,453,351,453 0 3830
-:o "
-char252 14637,17223,330,372,-348,372 0 3836
-:u "
-char197 17565,23979,69,0,1896 2 3781
-oA "
-char238 7317,18225,69,2628,-231,586 2 3822
-^i "
-char216 21954,18375,375,1341,588,586 2 3800
-/O "
-char198 20979,18201,201,1296,3312,586 2 3782
-AE "
-char229 13173,17973,330,168,582,168 2 3813
-oa "
-char237 7317,18375,69,2973,-279,586 2 3821
-'i "
-char248 14637,12795,399,1320,1203,586 0 3832
-/o "
-char230 20490,12795,330,906,678,586 0 3814
-ae "
-char196 17565,22896,69,0,1896 2 3780
-:A "
-char236 7317,18378,69,174,-279,174 2 3820
-`i "
-char214 21954,22896,375,555,-372,555 2 3798
-:O "
-char220 20490,22896,375,669,-1455,586 2 3804
-:U "
-char201 13173,24048,201,1239,-102,586 2 3785
-'E "
-char239 7317,17223,69,3213,-57,586 0 3823
-:i "
-char223 14148,19710,330,147,516,147 2 3807
-ss "
-char212 21954,23745,375,555,-372,555 2 3796
-^O "
-char193 17565,24048,69,0,1896 2 3777
-'A "
-char195 17565,22812,69,0,1896 2 3779
-~A "
-char227 13173,17166,330,168,582,168 0 3811
-~a "
-char208 20490,18069,69,288,936,288 2 3792
--D "
-char240 14637,19590,330,453,351,453 2 3824
-Sd "
-char205 7806,24048,69,3924,-249,586 2 3789
-'I "
-char204 7806,24042,69,909,-249,586 2 3788
-`I "
-char211 21954,24048,375,555,-372,555 2 3795
-'O "
-char210 21954,24042,375,555,-372,555 2 3794
-`O "
-char213 21954,22812,375,555,-372,555 2 3797
-~O "
-char245 14637,17166,330,453,351,453 0 3829
-~o "
+ct 14637,19782,0,393,-999,393 2 3746
+^a 13173,18225,330,168,582,168 2 3810
+^e 13173,18225,330,588,327,586 2 3818
+^o 14637,18225,330,453,351,453 2 3828
+^u 14637,18225,330,372,-348,372 2 3835
+'a 13173,18375,330,168,582,168 2 3809
+'e 13173,18375,330,588,327,586 2 3817
+'o 14637,18375,330,453,351,453 2 3827
+'u 14637,18375,330,372,-348,372 2 3834
+`a 13173,18378,330,168,582,168 2 3808
+`e 13173,18378,330,588,327,586 2 3816
+`o 14637,18378,330,453,351,453 2 3826
+`u 14637,18378,330,372,-348,372 2 3833
+:a 13173,17223,330,285,582,285 0 3812
+:e 13173,17223,330,588,327,586 0 3819
+:o 14637,17223,330,453,351,453 0 3830
+:u 14637,17223,330,372,-348,372 0 3836
+oA 17565,23979,69,0,1896 2 3781
+^i 7317,18225,69,2628,-231,586 2 3822
+/O 21954,18375,375,1341,588,586 2 3800
+AE 20979,18201,201,1296,3312,586 2 3782
+oa 13173,17973,330,168,582,168 2 3813
+'i 7317,18375,69,2973,-279,586 2 3821
+/o 14637,12795,399,1320,1203,586 0 3832
+ae 20490,12795,330,906,678,586 0 3814
+:A 17565,22896,69,0,1896 2 3780
+`i 7317,18378,69,174,-279,174 2 3820
+:O 21954,22896,375,555,-372,555 2 3798
+:U 20490,22896,375,669,-1455,586 2 3804
+'E 13173,24048,201,1239,-102,586 2 3785
+:i 7317,17223,69,3213,-57,586 0 3823
+ss 14148,19710,330,147,516,147 2 3807
+^O 21954,23745,375,555,-372,555 2 3796
+'A 17565,24048,69,0,1896 2 3777
+~A 17565,22812,69,0,1896 2 3779
+~a 13173,17166,330,168,582,168 0 3811
+-D 20490,18069,69,288,936,288 2 3792
+Sd 14637,19590,330,453,351,453 2 3824
+'I 7806,24048,69,3924,-249,586 2 3789
+`I 7806,24042,69,909,-249,586 2 3788
+'O 21954,24048,375,555,-372,555 2 3795
+`O 21954,24042,375,555,-372,555 2 3794
+~O 21954,22812,375,555,-372,555 2 3797
+~o 14637,17166,330,453,351,453 0 3829
vS 13173,23745,375,1725,855,586 2 51795
vs 10245,18225,330,1680,960,586 2 51827
-char218 20490,24048,375,669,-1455,586 2 3802
-'U "
+'U 20490,24048,375,669,-1455,586 2 3802
:Y 14637,22896,69,3225,-543,586 2 51801
-char255 13173,17223,5469,1659,-57,586 1 3839
-:y "
-char222 14637,18069,69,834,-351,586 2 3806
-TP "
-char254 14637,19779,5469,225,1752,225 3 3838
-Tp "
-char181 14637,12630,4350,1122,2931,586 0 3765
-char182 14637,19635,4200,135,-1257,135 2 3766
-ps "
-char190 23418,17850,525,0,-1326 2 3774
-34 "
+:y 13173,17223,5469,1659,-57,586 1 3839
+TP 14637,18069,69,834,-351,586 2 3806
+Tp 14637,19779,5469,225,1752,225 3 3838
+mc 14637,12630,4350,1122,2931,586 0 3765
+ps 14637,19635,4200,135,-1257,135 2 3766
+34 23418,17850,525,0,-1326 2 3774
\- 23418,7122,0,0,-3801 0 51757
-char188 23418,17850,525,0,-2268 2 3772
-14 "
-char189 23418,17850,525,0,-2139 2 3773
-12 "
-char170 12198,17700,0,18,-1692,18 0 3754
-Of "
-char186 12198,17700,0,1029,-1608,586 0 3770
-Om "
-char171 9759,10920,0,849,306,586 0 3755
-Fo "
-char187 9759,10920,0,120,1035,120 0 3771
-Fc "
-char177 23418,13260,3132,0,-3333 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,3384,-1593,586 2 3753
-co "
-char172 23418,10671,0,0,-3015 0 3756
-no "
-char174 13173,19635,0,3384,-1593,586 2 3758
-rg "
-char178 10245,17700,0,705,-774,586 0 3762
-S2 "
-char179 10245,17700,0,525,-807,525 0 3763
-S3 "
-char184 14637,300,5193,0,-1905 1 3768
-ac "
-char185 10245,17700,0,0,-2472 0 3769
-S1 "
-char215 23418,13137,585,0,-3780 0 3799
-char247 23418,11139,0,0,-3900 0 3831
-char183 7317,10905,0,0,-1392 0 3767
-pc "
+14 23418,17850,525,0,-2268 2 3772
+12 23418,17850,525,0,-2139 2 3773
+Of 12198,17700,0,18,-1692,18 0 3754
+Om 12198,17700,0,1029,-1608,586 0 3770
+Fo 9759,10920,0,849,306,586 0 3755
+Fc 9759,10920,0,120,1035,120 0 3771
+t+- 23418,13260,3132,0,-3333 0 3761
+bb 13173,19083,5916,0,-4596 3 3750
+co 13173,19635,0,3384,-1593,586 2 3753
+no 23418,10671,0,0,-3015 0 3756
+rg 13173,19635,0,3384,-1593,586 2 3758
+S2 10245,17700,0,705,-774,586 0 3762
+S3 10245,17700,0,525,-807,525 0 3763
+ac 14637,300,5193,0,-1905 1 3768
+S1 10245,17700,0,0,-2472 0 3769
+tmu 23418,13137,585,0,-3780 0 3799
+tdi 23418,11139,0,0,-3900 0 3831
+pc 7317,10905,0,0,-1392 0 3767
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
@@ -906,8 +800,7 @@ Fl 21954,19710,69,1137,120,586 2 51885
ij 14148,18336,5400,873,-288,586 3 51958
bq 7317,2535,4482,0,1593 0 51756
%0 32202,17769,444,0,-2811 0 51901
-char175 14637,16521,0,0,-3732 0 3759
-a- "
+a- 14637,16521,0,0,-3732 0 3759
ab 14637,18165,0,0,-3657 2 51926
a. 14637,17400,0,0,-6228 0 51927
oe 23418,12795,330,696,354,586 0 51823
diff --git a/contrib/groff/font/devlj4/OR b/contrib/groff/font/devlj4/OR
index edea52a..01fb2ae 100644
--- a/contrib/groff/font/devlj4/OR
+++ b/contrib/groff/font/devlj4/OR
@@ -436,19 +436,16 @@ U K -486
K U -486
L cq -3414
L ' -3414
-T char173 -3903
T hy -3903
T - -3903
T en -3903
T em -3903
A cq -3903
A ' -3903
-char173 T -3903
hy T -3903
- T -3903
en T -3903
em T -3903
-Y char173 -2439
Y hy -2439
Y - -2439
Y en -2439
@@ -463,7 +460,6 @@ b cq -1461
b ' -1461
a cq -1461
a ' -1461
-V char173 -2439
V hy -2439
V - -2439
V en -2439
@@ -476,7 +472,6 @@ m cq -1461
m ' -1461
R cq -975
R ' -975
-W char173 -1461
W hy -1461
W - -1461
W en -1461
@@ -485,38 +480,31 @@ cq d -1461
' d -1461
s cq -486
s ' -486
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1461
A hy -1461
A - -1461
A en -1461
A em -1461
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -975
' s -975
-char173 X -1461
hy X -1461
- X -1461
-char173 A -1461
hy A -1461
- A -1461
en X -1461
en A -1461
em X -1461
-R char173 -975
R hy -975
R - -975
R en -975
@@ -527,7 +515,6 @@ M cq -486
M ' -486
G cq -486
G ' -486
-Z char173 -975
Z hy -975
Z - -975
Z en -975
@@ -538,17 +525,14 @@ U cq -486
U ' -486
cq M -486
' M -486
-k char173 -486
k hy -486
k - -486
k en -486
k em -486
-B char173 -486
B hy -486
B - -486
B en -486
B em -486
-U char173 -486
U hy -486
U - -486
U en -486
@@ -570,8 +554,7 @@ cq 7317,18375 2 51751
* 14637,18066 2 3626
+ 23418,13260,393 0 3627
, 7317,2718,4923 1 3628
-char173 7317,7275 0 3629
-hy "
+hy 7317,7275 0 3629
- "
. 7317,2715,330 0 3630
sl 7317,19566,396 2 3631
@@ -663,198 +646,109 @@ ba 13173,19758,6588 3 3708
rC 11709,19935,6210 3 3709
} "
ti 26346,8952 0 51876
-char192 17565,23730,69 2 3776
-`A "
-char194 17565,23760,69 2 3778
-^A "
-char200 13173,23730,201 2 3784
-`E "
-char202 13173,23760,201 2 3786
-^E "
-char203 13173,22902,201 2 3787
-:E "
-char206 7317,23760,69 2 3790
-^I "
-char207 7317,22902,69 2 3791
-:I "
-char180 14637,18189 2 3764
-aa "
+`A 17565,23730,69 2 3776
+^A 17565,23760,69 2 3778
+`E 13173,23730,201 2 3784
+^E 13173,23760,201 2 3786
+:E 13173,22902,201 2 3787
+^I 7317,23760,69 2 3790
+:I 7317,22902,69 2 3791
+aa 14637,18189 2 3764
ga 14637,18189 2 3680
a^ 14637,18000 2 3678
^ "
-char168 14637,17223 0 3752
-ad "
+ad 14637,17223 0 3752
a~ 14637,16980 0 3710
~ "
-char217 20490,23730,375 2 3801
-`U "
-char219 20490,23760,375 2 3803
-^U "
-char221 16101,23730,69 2 3805
-'Y "
-char253 13173,18189,5469 3 3837
-'y "
-char176 14637,17700 0 3760
-de "
-char199 17565,18375,5988 3 3783
-,C "
-char231 12684,12795,5673 1 3815
-,c "
-char209 20490,22707,375 2 3793
-~N "
-char241 14637,16980,69 0 3825
-~n "
-char161 7317,12696,5634 1 3745
-r! "
-char191 10245,12696,5634 1 3775
-r? "
-char164 14637,15684 0 3748
-Cs "
-char163 14637,17700,201 0 3747
-Po "
-char165 14637,17769,69 2 3749
-Ye "
-char167 14637,18000,3633 2 3751
-sc "
+`U 20490,23730,375 2 3801
+^U 20490,23760,375 2 3803
+'Y 16101,23730,69 2 3805
+'y 13173,18189,5469 3 3837
+de 14637,17700 0 3760
+,C 17565,18375,5988 3 3783
+,c 12684,12795,5673 1 3815
+~N 20490,22707,375 2 3793
+~n 14637,16980,69 0 3825
+r! 7317,12696,5634 1 3745
+r? 10245,12696,5634 1 3775
+Cs 14637,15684 0 3748
+Po 14637,17700,201 0 3747
+Ye 14637,17769,69 2 3749
+sc 14637,18000,3633 2 3751
Fn 14637,19710,69 2 51871
-char162 14637,19155,93 2 3746
-ct "
-char226 12684,18000,330 2 3810
-^a "
-char234 13173,18000,330 2 3818
-^e "
-char244 14637,18000,330 2 3828
-^o "
-char251 14637,18000,330 2 3835
-^u "
-char225 12684,18189,330 2 3809
-'a "
-char233 13173,18189,330 2 3817
-'e "
-char243 14637,18189,330 2 3827
-'o "
-char250 14637,18189,330 2 3834
-'u "
-char224 12684,18189,330 2 3808
-`a "
-char232 13173,18189,330 2 3816
-`e "
-char242 14637,18189,330 2 3826
-`o "
-char249 14637,18189,330 2 3833
-`u "
-char228 12684,17223,330 0 3812
-:a "
-char235 13173,17223,330 0 3819
-:e "
-char246 14637,17223,330 0 3830
-:o "
-char252 14637,17223,330 0 3836
-:u "
-char197 17565,23964,69 2 3781
-oA "
-char238 7317,18000,69 2 3822
-^i "
-char216 21954,18375,375 2 3800
-/O "
-char198 21468,18201,201 2 3782
-AE "
-char229 12684,18045,330 2 3813
-oa "
-char237 7317,18189,69 2 3821
-'i "
-char248 14637,12876,330 0 3832
-/o "
-char230 20490,12795,330 0 3814
-ae "
-char196 17565,22902,69 2 3780
-:A "
-char236 7317,18189,69 2 3820
-`i "
-char214 21954,22902,375 2 3798
-:O "
-char220 20490,22902,375 2 3804
-:U "
-char201 13173,23730,201 2 3785
-'E "
-char239 7317,17223,69 0 3823
-:i "
-char223 14637,19710,330 2 3807
-ss "
-char212 21954,23760,375 2 3796
-^O "
-char193 17565,23730,69 2 3777
-'A "
-char195 17565,22707,69 2 3779
-~A "
-char227 12684,16980,330 0 3811
-~a "
-char208 20490,18069,69 2 3792
--D "
-char240 14637,19500,330 2 3824
-Sd "
-char205 7317,23730,69 2 3789
-'I "
-char204 7317,23730,69 2 3788
-`I "
-char211 21954,23730,375 2 3795
-'O "
-char210 21954,23730,375 2 3794
-`O "
-char213 21954,22707,375 2 3797
-~O "
-char245 14637,16980,330 0 3829
-~o "
+ct 14637,19155,93 2 3746
+^a 12684,18000,330 2 3810
+^e 13173,18000,330 2 3818
+^o 14637,18000,330 2 3828
+^u 14637,18000,330 2 3835
+'a 12684,18189,330 2 3809
+'e 13173,18189,330 2 3817
+'o 14637,18189,330 2 3827
+'u 14637,18189,330 2 3834
+`a 12684,18189,330 2 3808
+`e 13173,18189,330 2 3816
+`o 14637,18189,330 2 3826
+`u 14637,18189,330 2 3833
+:a 12684,17223,330 0 3812
+:e 13173,17223,330 0 3819
+:o 14637,17223,330 0 3830
+:u 14637,17223,330 0 3836
+oA 17565,23964,69 2 3781
+^i 7317,18000,69 2 3822
+/O 21954,18375,375 2 3800
+AE 21468,18201,201 2 3782
+oa 12684,18045,330 2 3813
+'i 7317,18189,69 2 3821
+/o 14637,12876,330 0 3832
+ae 20490,12795,330 0 3814
+:A 17565,22902,69 2 3780
+`i 7317,18189,69 2 3820
+:O 21954,22902,375 2 3798
+:U 20490,22902,375 2 3804
+'E 13173,23730,201 2 3785
+:i 7317,17223,69 0 3823
+ss 14637,19710,330 2 3807
+^O 21954,23760,375 2 3796
+'A 17565,23730,69 2 3777
+~A 17565,22707,69 2 3779
+~a 12684,16980,330 0 3811
+-D 20490,18069,69 2 3792
+Sd 14637,19500,330 2 3824
+'I 7317,23730,69 2 3789
+`I 7317,23730,69 2 3788
+'O 21954,23730,375 2 3795
+`O 21954,23730,375 2 3794
+~O 21954,22707,375 2 3797
+~o 14637,16980,330 0 3829
vS 13173,23760,375 2 51795
vs 10245,18183,330 2 51827
-char218 20490,23730,375 2 3802
-'U "
+'U 20490,23730,375 2 3802
:Y 16101,22902,69 2 51801
-char255 13173,17223,5469 1 3839
-:y "
-char222 14637,18069,69 2 3806
-TP "
-char254 14637,19569,5469 3 3838
-Tp "
-char181 14637,12630,4350 0 3765
-char182 14637,19635,4200 2 3766
-ps "
-char190 23418,17700,519 0 3774
-34 "
+:y 13173,17223,5469 1 3839
+TP 14637,18069,69 2 3806
+Tp 14637,19569,5469 3 3838
+mc 14637,12630,4350 0 3765
+ps 14637,19635,4200 2 3766
+34 23418,17700,519 0 3774
\- 23418,7122 0 51757
-char188 23418,17700,519 0 3772
-14 "
-char189 23418,17700,519 0 3773
-12 "
-char170 10734,17700 0 3754
-Of "
-char186 10734,17700 0 3770
-Om "
-char171 9759,10809 0 3755
-Fo "
-char187 9759,10809 0 3771
-Fc "
-char177 23418,13260,3132 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 23418,10671 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 9759,17700 0 3762
-S2 "
-char179 9759,17700 0 3763
-S3 "
-char184 14637,0,5673 1 3768
-ac "
-char185 9759,17700 0 3769
-S1 "
-char215 23418,13137,585 0 3799
-char247 23418,11139 0 3831
-char183 7317,10407 0 3767
-pc "
+14 23418,17700,519 0 3772
+12 23418,17700,519 0 3773
+Of 10734,17700 0 3754
+Om 10734,17700 0 3770
+Fo 9759,10809 0 3755
+Fc 9759,10809 0 3771
+t+- 23418,13260,3132 0 3761
+bb 13173,19083,5916 3 3750
+co 13173,19635 2 3753
+no 23418,10671 0 3756
+rg 13173,19635 2 3758
+S2 9759,17700 0 3762
+S3 9759,17700 0 3763
+ac 14637,0,5673 1 3768
+S1 9759,17700 0 3769
+tmu 23418,13137,585 0 3799
+tdi 23418,11139 0 3831
+pc 7317,10407 0 3767
fm 7317,17700 0 51873
sd 14637,17700 0 51874
dg 14637,18213,846 2 51755
@@ -882,8 +776,7 @@ Fl 21468,19779,69 2 51885
ij 14148,18399,5400 3 51958
bq 7317,2718,4509 0 51756
%0 32202,17769,444 2 51901
-char175 14637,16662 0 3759
-a- "
+a- 14637,16662 0 3759
ab 14637,18111 2 51926
a. 14637,17223 0 51927
oe 23418,12795,330 0 51823
diff --git a/contrib/groff/font/devlj4/TB b/contrib/groff/font/devlj4/TB
index 644425a..91e4646 100644
--- a/contrib/groff/font/devlj4/TB
+++ b/contrib/groff/font/devlj4/TB
@@ -522,19 +522,16 @@ K W -486
K U -486
L cq -3414
L ' -3414
-T char173 -1461
T hy -1461
T - -1461
T en -1461
T em -1461
A cq -3414
A ' -3414
-char173 T -1461
hy T -1461
- T -1461
en T -1461
em T -1461
-Y char173 -3414
Y hy -3414
Y - -3414
Y en -3414
@@ -547,7 +544,6 @@ b cq -486
b ' -486
a cq -1461
a ' -1461
-V char173 -2439
V hy -2439
V - -2439
V en -2439
@@ -560,7 +556,6 @@ m cq -975
m ' -975
R cq -975
R ' -975
-W char173 -1950
W hy -1950
W - -1950
W en -1950
@@ -569,43 +564,35 @@ cq d -1461
' d -1461
s cq -486
s ' -486
-L char173 -975
L hy -975
L - -975
L en -975
L em -975
-F char173 -486
F hy -486
F - -486
F en -486
F em -486
-X char173 -1950
X hy -1950
X - -1950
X en -1950
X em -1950
-A char173 -1950
A hy -1950
A - -1950
A en -1950
A em -1950
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -975
' s -975
-char173 X -1950
hy X -1950
- X -1950
-char173 A -1950
hy A -1950
- A -1950
en X -1950
en A -1950
em X -1950
-R char173 -975
R hy -975
R - -975
R en -975
@@ -620,27 +607,22 @@ C cq -486
C ' -486
E cq -486
E ' -486
-E char173 -486
E hy -486
E - -486
E en -486
E em -486
-Z char173 -486
Z hy -486
Z - -486
Z en -486
Z em -486
-k char173 -486
k hy -486
k - -486
k en -486
k em -486
-C char173 -486
C hy -486
C - -486
C en -486
C em -486
-U char173 -486
U hy -486
U - -486
U en -486
@@ -662,8 +644,7 @@ cq 8781,18450 2 51751
* 13173,18450 2 3626
+ 23418,15975 0 3627
, 8781,4380,4560 0 3628
-char173 8781,7740 0 3629
-hy "
+hy 8781,7740 0 3629
- "
. 8781,4125,405 0 3630
sl 8781,18450,405 2 3631
@@ -755,198 +736,109 @@ ba 13173,19758,6588 3 3708
rC 13173,19935,6210 3 3709
} "
ti 26346,9435 0 51876
-char192 19029,24795 2 3776
-`A "
-char194 19029,24795 2 3778
-^A "
-char200 17565,24795 2 3784
-`E "
-char202 17565,24795 2 3786
-^E "
-char203 17565,23955 2 3787
-:E "
-char206 10245,24795 2 3790
-^I "
-char207 10245,23955 2 3791
-:I "
-char180 13173,19065 2 3764
-aa "
+`A 19029,24795 2 3776
+^A 19029,24795 2 3778
+`E 17565,24795 2 3784
+^E 17565,24795 2 3786
+:E 17565,23955 2 3787
+^I 10245,24795 2 3790
+:I 10245,23955 2 3791
+aa 13173,19065 2 3764
ga 13173,19065 2 3680
a^ 13173,19065 2 3678
^ "
-char168 13173,17820 2 3752
-ad "
+ad 13173,17820 2 3752
a~ 13173,17772 2 3710
~ "
-char217 19029,24795,405 2 3801
-`U "
-char219 19029,24795,405 2 3803
-^U "
-char221 19029,24795 2 3805
-'Y "
-char253 13173,19065,5490 3 3837
-'y "
-char176 13173,18450 2 3760
-de "
-char199 19029,18450,5532 3 3783
-,C "
-char231 11709,12735,5661 1 3815
-,c "
-char209 19029,23892,405 2 3793
-~N "
-char241 14637,17772 2 3825
-~n "
-char161 8781,12672,5778 1 3745
-r! "
-char191 13173,12846,5604 1 3775
-r? "
-char164 13173,16089 0 3748
-Cs "
-char163 13173,18450,429 2 3747
-Po "
-char165 13173,18045 2 3749
-Ye "
-char167 13173,18450,3225 2 3751
-sc "
+`U 19029,24795,405 2 3801
+^U 19029,24795,405 2 3803
+'Y 19029,24795 2 3805
+'y 13173,19065,5490 3 3837
+de 13173,18450 2 3760
+,C 19029,18450,5532 3 3783
+,c 11709,12735,5661 1 3815
+~N 19029,23892,405 2 3793
+~n 14637,17772 2 3825
+r! 8781,12672,5778 1 3745
+r? 13173,12846,5604 1 3775
+Cs 13173,16089 0 3748
+Po 13173,18450,429 2 3747
+Ye 13173,18045 2 3749
+sc 13173,18450,3225 2 3751
Fn 13173,18540,5490 3 51871
-char162 13173,17682 2 3746
-ct "
-char226 13173,19065,405 2 3810
-^a "
-char234 11709,19065,405 2 3818
-^e "
-char244 13173,19065,405 2 3828
-^o "
-char251 14637,19065,405 2 3835
-^u "
-char225 13173,19065,405 2 3809
-'a "
-char233 11709,19065,405 2 3817
-'e "
-char243 13173,19065,405 2 3827
-'o "
-char250 14637,19065,405 2 3834
-'u "
-char224 13173,19065,405 2 3808
-`a "
-char232 11709,19065,405 2 3816
-`e "
-char242 13173,19065,405 2 3826
-`o "
-char249 14637,19065,405 2 3833
-`u "
-char228 13173,17820,405 2 3812
-:a "
-char235 11709,17820,405 2 3819
-:e "
-char246 13173,17820,405 2 3830
-:o "
-char252 14637,17820,405 2 3836
-:u "
-char197 19029,24750 2 3781
-oA "
-char238 7317,19065 2 3822
-^i "
-char216 20490,18450,405 2 3800
-/O "
-char198 27321,18045 2 3782
-AE "
-char229 13173,19020,405 2 3813
-oa "
-char237 7317,19065 2 3821
-'i "
-char248 13173,12750,405 0 3832
-/o "
-char230 19029,12735,405 0 3814
-ae "
-char196 19029,23955 2 3780
-:A "
-char236 7317,19065 2 3820
-`i "
-char214 20490,23955,405 2 3798
-:O "
-char220 19029,23955,405 2 3804
-:U "
-char201 17565,24795 2 3785
-'E "
-char239 7317,17820 2 3823
-:i "
-char223 14637,18492,405 2 3807
-ss "
-char212 20490,24795,405 2 3796
-^O "
-char193 19029,24795 2 3777
-'A "
-char195 19029,23892 2 3779
-~A "
-char227 13173,17772,405 2 3811
-~a "
-char208 19029,18045 2 3792
--D "
-char240 13173,18090,405 2 3824
-Sd "
-char205 10245,24795 2 3789
-'I "
-char204 10245,24795 2 3788
-`I "
-char211 20490,24795,405 2 3795
-'O "
-char210 20490,24795,405 2 3794
-`O "
-char213 20490,23892,405 2 3797
-~O "
-char245 13173,17772,405 2 3829
-~o "
+ct 13173,17682 2 3746
+^a 13173,19065,405 2 3810
+^e 11709,19065,405 2 3818
+^o 13173,19065,405 2 3828
+^u 14637,19065,405 2 3835
+'a 13173,19065,405 2 3809
+'e 11709,19065,405 2 3817
+'o 13173,19065,405 2 3827
+'u 14637,19065,405 2 3834
+`a 13173,19065,405 2 3808
+`e 11709,19065,405 2 3816
+`o 13173,19065,405 2 3826
+`u 14637,19065,405 2 3833
+:a 13173,17820,405 2 3812
+:e 11709,17820,405 2 3819
+:o 13173,17820,405 2 3830
+:u 14637,17820,405 2 3836
+oA 19029,24750 2 3781
+^i 7317,19065 2 3822
+/O 20490,18450,405 2 3800
+AE 27321,18045 2 3782
+oa 13173,19020,405 2 3813
+'i 7317,19065 2 3821
+/o 13173,12750,405 0 3832
+ae 19029,12735,405 0 3814
+:A 19029,23955 2 3780
+`i 7317,19065 2 3820
+:O 20490,23955,405 2 3798
+:U 19029,23955,405 2 3804
+'E 17565,24795 2 3785
+:i 7317,17820 2 3823
+ss 14637,18492,405 2 3807
+^O 20490,24795,405 2 3796
+'A 19029,24795 2 3777
+~A 19029,23892 2 3779
+~a 13173,17772,405 2 3811
+-D 19029,18045 2 3792
+Sd 13173,18090,405 2 3824
+'I 10245,24795 2 3789
+`I 10245,24795 2 3788
+'O 20490,24795,405 2 3795
+`O 20490,24795,405 2 3794
+~O 20490,23892,405 2 3797
+~o 13173,17772,405 2 3829
vS 14637,24795,462 2 51795
vs 10245,19065,411 2 51827
-char218 19029,24795,405 2 3802
-'U "
+'U 19029,24795,405 2 3802
:Y 19029,23955 2 51801
-char255 13173,17820,5490 3 3839
-:y "
-char222 16101,18045 2 3806
-TP "
-char254 14637,18090,5490 3 3838
-Tp "
-char181 14637,10800,5193 1 3765
-char182 13173,19635,4200 2 3766
-ps "
-char190 23418,18450,405 2 3774
-34 "
+:y 13173,17820,5490 3 3839
+TP 16101,18045 2 3806
+Tp 14637,18090,5490 3 3838
+mc 14637,10800,5193 1 3765
+ps 13173,19635,4200 2 3766
+34 23418,18450,405 2 3774
\- 23418,9000 0 51757
-char188 23418,18450,405 2 3772
-14 "
-char189 23418,18450,405 2 3773
-12 "
-char170 13173,18450 2 3754
-Of "
-char186 13173,18450 2 3770
-Om "
-char171 11220,9861 0 3755
-Fo "
-char187 11220,9861 0 3771
-Fc "
-char177 23418,15975,2880 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19725 2 3753
-co "
-char172 23418,12210 0 3756
-no "
-char174 13173,19725 2 3758
-rg "
-char178 9270,18285 2 3762
-S2 "
-char179 9270,18285 2 3763
-S3 "
-char184 13173,0,5661 1 3768
-ac "
-char185 9270,18285 2 3769
-S1 "
-char215 23418,15033 0 3799
-char247 23418,14505 0 3831
-char183 8781,11274 0 3767
-pc "
+14 23418,18450,405 2 3772
+12 23418,18450,405 2 3773
+Of 13173,18450 2 3754
+Om 13173,18450 2 3770
+Fo 11220,9861 0 3755
+Fc 11220,9861 0 3771
+t+- 23418,15975,2880 0 3761
+bb 13173,19083,5916 3 3750
+co 13173,19725 2 3753
+no 23418,12210 0 3756
+rg 13173,19725 2 3758
+S2 9270,18285 2 3762
+S3 9270,18285 2 3763
+ac 13173,0,5661 1 3768
+S1 9270,18285 2 3769
+tmu 23418,15033 0 3799
+tdi 23418,14505 0 3831
+pc 8781,11274 0 3767
fm 8781,18450 2 51873
sd 13173,18450 2 51874
dg 13173,18450,3075 2 51755
@@ -974,8 +866,7 @@ Fl 21954,19116 2 51885
ij 15075,18450,5490 3 51958
bq 8781,4134,4806 0 51756
%0 30738,18237,405 2 51901
-char175 13173,17259 2 3759
-a- "
+a- 13173,17259 2 3759
ab 13173,18285 2 51926
a. 13173,17820 2 51927
oe 19515,12735,405 0 51823
diff --git a/contrib/groff/font/devlj4/TBI b/contrib/groff/font/devlj4/TBI
index e1a30a8..14a0d2a 100644
--- a/contrib/groff/font/devlj4/TBI
+++ b/contrib/groff/font/devlj4/TBI
@@ -567,19 +567,16 @@ K W -486
K U -486
L cq -2925
L ' -2925
-T char173 -975
T hy -975
T - -975
T en -975
T em -975
A cq -3414
A ' -3414
-char173 T -1461
hy T -1461
- T -1461
en T -1461
em T -1461
-Y char173 -2439
Y hy -2439
Y - -2439
Y en -2439
@@ -592,7 +589,6 @@ e cq -1950
e ' -1950
b cq -1950
b ' -1950
-V char173 -1950
V hy -1950
V - -1950
V en -1950
@@ -605,40 +601,33 @@ m cq -975
m ' -975
R cq -486
R ' -486
-W char173 -1950
W hy -1950
W - -1950
W en -1950
W em -1950
cq d -975
' d -975
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1950
A hy -1950
A - -1950
A en -1950
A em -1950
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -486
' s -486
-char173 X -1461
hy X -1461
- X -1461
-char173 A -975
hy A -975
- A -975
en X -1461
en A -975
em X -1461
-R char173 -486
R hy -486
R - -486
R en -486
@@ -657,44 +646,36 @@ C cq -486
C ' -486
E cq -486
E ' -486
-E char173 -486
E hy -486
E - -486
E en -486
E em -486
-Z char173 -486
Z hy -486
Z - -486
Z en -486
Z em -486
J cq -975
J ' -975
-J char173 -975
J hy -975
J - -975
J en -975
J em -975
-v char173 -486
v hy -486
v - -486
v en -486
v em -486
-y char173 -486
y hy -486
y - -486
y en -486
y em -486
-w char173 -486
w hy -486
w - -486
w en -486
w em -486
-C char173 -486
C hy -486
C - -486
C en -486
C em -486
-char173 g -486
hy g -486
- g -486
en g -486
@@ -716,8 +697,7 @@ cq 8781,18450,0,2001,-2790,913 2 51751
* 13173,18450,0,1518,-1812,913 2 3626
+ 23418,15975,0,0,-3105 0 3627
, 8781,3612,4728,0,1515 0 3628
-char173 8781,7740,0,660,426,660 0 3629
-hy "
+hy 8781,7740,0,660,426,660 0 3629
- "
. 8781,3645,405,0,129 0 3630
sl 8781,18450,405,3012,1209,913 2 3631
@@ -809,198 +789,109 @@ ba 13173,19758,6588,0,-4596 3 3708
rC 13173,19935,6210,63,2304,63 3 3709
} "
ti 26346,9435,0,0,-4029 0 51876
-char192 17565,24795,0,546,2412,546 2 3776
-`A "
-char194 17565,24795,0,546,2412,546 2 3778
-^A "
-char200 17565,24795,0,1974,1428,913 2 3784
-`E "
-char202 17565,24795,0,1974,1428,913 2 3786
-^E "
-char203 17565,23955,0,1974,1428,913 2 3787
-:E "
-char206 10245,24795,0,3930,1338,913 2 3790
-^I "
-char207 10245,23955,0,4875,1338,913 2 3791
-:I "
-char180 13173,19065,0,786,-5055,786 2 3764
-aa "
+`A 17565,24795,0,546,2412,546 2 3776
+^A 17565,24795,0,546,2412,546 2 3778
+`E 17565,24795,0,1974,1428,913 2 3784
+^E 17565,24795,0,1974,1428,913 2 3786
+:E 17565,23955,0,1974,1428,913 2 3787
+^I 10245,24795,0,3930,1338,913 2 3790
+:I 10245,23955,0,4875,1338,913 2 3791
+aa 13173,19065,0,786,-5055,786 2 3764
ga 13173,19065,0,0,-3540 2 3680
a^ 13173,19065,0,417,-2931,417 2 3678
^ "
-char168 13173,17820,0,1179,-2964,913 2 3752
-ad "
+ad 13173,17820,0,1179,-2964,913 2 3752
a~ 13173,17703,0,1884,-3213,913 2 3710
~ "
-char217 19029,24795,405,3249,-1455,913 2 3801
-`U "
-char219 19029,24795,405,3249,-1455,913 2 3803
-^U "
-char221 16101,24795,0,3630,-1254,913 2 3805
-'Y "
-char253 11709,19065,5490,1518,3189,913 3 3837
-'y "
-char176 13173,18450,0,111,-2970,111 2 3760
-de "
-char199 17565,18594,5718,2331,-393,913 3 3783
-,C "
-char231 11709,12735,5655,900,1278,900 1 3815
-,c "
-char209 19029,23733,405,3270,1227,913 2 3793
-~N "
-char241 14637,17703,405,1152,954,913 2 3825
-~n "
-char161 10245,13050,5805,0,855 1 3745
-r! "
-char191 13173,13050,5805,0,1680 1 3775
-r? "
-char164 13173,15834,0,2598,795,913 0 3748
-Cs "
-char163 13173,18450,429,2508,1473,913 2 3747
-Po "
-char165 13173,18045,0,5067,834,913 2 3749
-Ye "
-char167 13173,18450,3225,0,-597 2 3751
-sc "
+`U 19029,24795,405,3249,-1455,913 2 3801
+^U 19029,24795,405,3249,-1455,913 2 3803
+'Y 16101,24795,0,3630,-1254,913 2 3805
+'y 11709,19065,5490,1518,3189,913 3 3837
+de 13173,18450,0,111,-2970,111 2 3760
+,C 17565,18594,5718,2331,-393,913 3 3783
+,c 11709,12735,5655,900,1278,900 1 3815
+~N 19029,23733,405,3270,1227,913 2 3793
+~n 14637,17703,405,1152,954,913 2 3825
+r! 10245,13050,5805,0,855 1 3745
+r? 13173,13050,5805,0,1680 1 3775
+Cs 13173,15834,0,2598,795,913 0 3748
+Po 13173,18450,429,2508,1473,913 2 3747
+Ye 13173,18045,0,5067,834,913 2 3749
+sc 13173,18450,3225,0,-597 2 3751
Fn 13173,18540,5490,2607,3165,913 3 51871
-char162 13173,16914,0,1431,-684,913 2 3746
-ct "
-char226 13173,19065,405,1059,1059,913 2 3810
-^a "
-char234 11709,19065,405,1149,390,913 2 3818
-^e "
-char244 13173,19065,405,675,714,675 2 3828
-^o "
-char251 14637,19065,405,426,279,426 2 3835
-^u "
-char225 13173,19065,405,1059,1059,913 2 3809
-'a "
-char233 11709,19065,405,1518,390,913 2 3817
-'e "
-char243 13173,19065,405,786,714,786 2 3827
-'o "
-char250 14637,19065,405,426,279,426 2 3834
-'u "
-char224 13173,19065,405,1059,1059,913 2 3808
-`a "
-char232 11709,19065,405,687,390,687 2 3816
-`e "
-char242 13173,19065,405,675,714,675 2 3826
-`o "
-char249 14637,19065,405,426,279,426 2 3833
-`u "
-char228 13173,17820,405,1179,1059,913 2 3812
-:a "
-char235 11709,17820,405,1911,390,913 2 3819
-:e "
-char246 13173,17820,405,1179,714,913 2 3830
-:o "
-char252 14637,17820,405,447,279,447 2 3836
-:u "
-char197 17565,24750,0,546,2412,546 2 3781
-oA "
-char238 7317,19065,405,3345,723,913 2 3822
-^i "
-char216 19029,18450,405,3702,2070,913 2 3800
-/O "
-char198 24396,18045,0,2730,2331,913 2 3782
-AE "
-char229 13173,19020,405,1059,1059,913 2 3813
-oa "
-char237 7317,19065,405,3714,723,913 2 3821
-'i "
-char248 13173,12735,405,2199,2256,913 0 3832
-/o "
-char230 18540,12735,405,876,1074,876 0 3814
-ae "
-char196 17565,23955,0,765,2412,765 2 3780
-:A "
-char236 7317,19065,405,1749,723,913 2 3820
-`i "
-char214 19029,23955,405,1503,-183,913 2 3798
-:O "
-char220 19029,23955,405,3249,-1455,913 2 3804
-:U "
-char201 17565,24795,0,1974,1428,913 2 3785
-'E "
-char239 7317,17820,405,4107,723,913 2 3823
-:i "
-char223 13173,18540,5490,1572,5862,913 3 3807
-ss "
-char212 19029,24795,405,1503,-183,913 2 3796
-^O "
-char193 17565,24795,0,567,2412,567 2 3777
-'A "
-char195 17565,23733,0,966,2412,913 2 3779
-~A "
-char227 13173,17703,405,1884,1059,913 2 3811
-~a "
-char208 19029,18045,0,1707,1611,913 2 3792
--D "
-char240 13173,18540,405,2235,708,913 2 3824
-Sd "
-char205 10245,24795,0,4227,1338,913 2 3789
-'I "
-char204 10245,24795,0,2997,1338,913 2 3788
-`I "
-char211 19029,24795,405,1503,-183,913 2 3795
-'O "
-char210 19029,24795,405,1503,-183,913 2 3794
-`O "
-char213 19029,23733,405,1503,-183,913 2 3797
-~O "
-char245 13173,17703,405,1884,714,913 2 3829
-~o "
+ct 13173,16914,0,1431,-684,913 2 3746
+^a 13173,19065,405,1059,1059,913 2 3810
+^e 11709,19065,405,1149,390,913 2 3818
+^o 13173,19065,405,675,714,675 2 3828
+^u 14637,19065,405,426,279,426 2 3835
+'a 13173,19065,405,1059,1059,913 2 3809
+'e 11709,19065,405,1518,390,913 2 3817
+'o 13173,19065,405,786,714,786 2 3827
+'u 14637,19065,405,426,279,426 2 3834
+`a 13173,19065,405,1059,1059,913 2 3808
+`e 11709,19065,405,687,390,687 2 3816
+`o 13173,19065,405,675,714,675 2 3826
+`u 14637,19065,405,426,279,426 2 3833
+:a 13173,17820,405,1179,1059,913 2 3812
+:e 11709,17820,405,1911,390,913 2 3819
+:o 13173,17820,405,1179,714,913 2 3830
+:u 14637,17820,405,447,279,447 2 3836
+oA 17565,24750,0,546,2412,546 2 3781
+^i 7317,19065,405,3345,723,913 2 3822
+/O 19029,18450,405,3702,2070,913 2 3800
+AE 24396,18045,0,2730,2331,913 2 3782
+oa 13173,19020,405,1059,1059,913 2 3813
+'i 7317,19065,405,3714,723,913 2 3821
+/o 13173,12735,405,2199,2256,913 0 3832
+ae 18540,12735,405,876,1074,876 0 3814
+:A 17565,23955,0,765,2412,765 2 3780
+`i 7317,19065,405,1749,723,913 2 3820
+:O 19029,23955,405,1503,-183,913 2 3798
+:U 19029,23955,405,3249,-1455,913 2 3804
+'E 17565,24795,0,1974,1428,913 2 3785
+:i 7317,17820,405,4107,723,913 2 3823
+ss 13173,18540,5490,1572,5862,913 3 3807
+^O 19029,24795,405,1503,-183,913 2 3796
+'A 17565,24795,0,567,2412,567 2 3777
+~A 17565,23733,0,966,2412,913 2 3779
+~a 13173,17703,405,1884,1059,913 2 3811
+-D 19029,18045,0,1707,1611,913 2 3792
+Sd 13173,18540,405,2235,708,913 2 3824
+'I 10245,24795,0,4227,1338,913 2 3789
+`I 10245,24795,0,2997,1338,913 2 3788
+'O 19029,24795,405,1503,-183,913 2 3795
+`O 19029,24795,405,1503,-183,913 2 3794
+~O 19029,23733,405,1503,-183,913 2 3797
+~o 13173,17703,405,1884,714,913 2 3829
vS 14637,24798,510,2061,543,913 2 51795
vs 10245,19065,405,2856,891,913 2 51827
-char218 19029,24795,405,3249,-1455,913 2 3802
-'U "
+'U 19029,24795,405,3249,-1455,913 2 3802
:Y 16101,23955,0,3630,-1254,913 2 51801
-char255 11709,17820,5490,1311,3189,913 3 3839
-:y "
-char222 16101,18045,0,1203,1227,913 2 3806
-TP "
-char254 13173,18540,5490,843,3888,843 3 3838
-Tp "
-char181 14637,10800,5193,582,756,582 1 3765
-char182 13173,19635,4200,1350,-1008,913 2 3766
-ps "
-char190 23418,18450,405,0,-1899 2 3774
-34 "
+:y 11709,17820,5490,1311,3189,913 3 3839
+TP 16101,18045,0,1203,1227,913 2 3806
+Tp 13173,18540,5490,843,3888,843 3 3838
+mc 14637,10800,5193,582,756,582 1 3765
+ps 13173,19635,4200,1350,-1008,913 2 3766
+34 23418,18450,405,0,-1899 2 3774
\- 23418,9000,0,0,-3315 0 51757
-char188 23418,18450,405,0,-1572 2 3772
-14 "
-char189 23418,18450,405,0,-1311 2 3773
-12 "
-char170 13173,18450,0,1368,-2397,913 2 3754
-Of "
-char186 13173,18450,0,744,-2295,744 2 3770
-Om "
-char171 11709,10200,0,1158,567,913 0 3755
-Fo "
-char187 11709,10200,0,615,1110,615 0 3771
-Fc "
-char177 23418,15975,2880,0,-2883 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19725,0,4398,-2574,913 2 3753
-co "
-char172 23418,12225,0,0,-4023 0 3756
-no "
-char174 13173,19725,0,4398,-2574,913 2 3758
-rg "
-char178 8781,18285,0,1911,-213,913 2 3762
-S2 "
-char179 8781,18285,0,1980,-552,913 2 3763
-S3 "
-char184 13173,0,5655,0,546 1 3768
-ac "
-char185 8781,18285,0,1173,-471,913 2 3769
-S1 "
-char215 23418,15033,0,0,-3690 0 3799
-char247 23418,14505,0,0,-3327 0 3831
-char183 8781,11121,0,0,-1899 0 3767
-pc "
+14 23418,18450,405,0,-1572 2 3772
+12 23418,18450,405,0,-1311 2 3773
+Of 13173,18450,0,1368,-2397,913 2 3754
+Om 13173,18450,0,744,-2295,744 2 3770
+Fo 11709,10200,0,1158,567,913 0 3755
+Fc 11709,10200,0,615,1110,615 0 3771
+t+- 23418,15975,2880,0,-2883 0 3761
+bb 13173,19083,5916,0,-4596 3 3750
+co 13173,19725,0,4398,-2574,913 2 3753
+no 23418,12225,0,0,-4023 0 3756
+rg 13173,19725,0,4398,-2574,913 2 3758
+S2 8781,18285,0,1911,-213,913 2 3762
+S3 8781,18285,0,1980,-552,913 2 3763
+ac 13173,0,5655,0,546 1 3768
+S1 8781,18285,0,1173,-471,913 2 3769
+tmu 23418,15033,0,0,-3690 0 3799
+tdi 23418,14505,0,0,-3327 0 3831
+pc 8781,11121,0,0,-1899 0 3767
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
@@ -1028,8 +919,7 @@ Fl 21954,18540,5490,1959,5583,913 3 51885
ij 14148,18585,5490,2271,783,913 3 51958
bq 8781,3651,4689,0,510 0 51756
%0 32202,18237,405,612,-1122,612 2 51901
-char175 13173,16860,0,1341,-2904,913 2 3759
-a- "
+a- 13173,16860,0,1341,-2904,913 2 3759
ab 13173,18570,0,1281,-3690,913 2 51926
a. 13173,17820,0,0,-5589 2 51927
oe 19515,12735,405,462,462,462 0 51823
diff --git a/contrib/groff/font/devlj4/TI b/contrib/groff/font/devlj4/TI
index 6b4a3ec..d4f0033 100644
--- a/contrib/groff/font/devlj4/TI
+++ b/contrib/groff/font/devlj4/TI
@@ -637,19 +637,16 @@ K W -486
K U -975
L cq -1950
L ' -1950
-T char173 -486
T hy -486
T - -486
T en -486
T em -486
A cq -2439
A ' -2439
-char173 T -486
hy T -486
- T -486
en T -486
em T -486
-Y char173 -1950
Y hy -1950
Y - -1950
Y en -1950
@@ -662,7 +659,6 @@ e cq -1950
e ' -1950
b cq -1950
b ' -1950
-V char173 -1950
V hy -1950
V - -1950
V en -1950
@@ -675,45 +671,37 @@ m cq -975
m ' -975
R cq -1461
R ' -1461
-W char173 -2439
W hy -2439
W - -2439
W en -2439
W em -2439
cq d -1461
' d -1461
-F char173 -1950
F hy -1950
F - -1950
F en -1950
F em -1950
-X char173 -1950
X hy -1950
X - -1950
X en -1950
X em -1950
-A char173 -1461
A hy -1461
A - -1461
A en -1461
A em -1461
-K char173 -1950
K hy -1950
K - -1950
K en -1950
K em -1950
cq s -486
' s -486
-char173 X -1461
hy X -1461
- X -1461
-char173 A -975
hy A -975
- A -975
en X -1461
en A -975
em X -1461
-R char173 -975
R hy -975
R - -975
R en -975
@@ -732,14 +720,12 @@ 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
@@ -748,39 +734,32 @@ B cq -486
B ' -486
J cq -486
J ' -486
-J char173 -486
J hy -486
J - -486
J en -486
J em -486
U cq -486
U ' -486
-v char173 -486
v hy -486
v - -486
v en -486
v em -486
-y char173 -486
y hy -486
y - -486
y en -486
y em -486
-w char173 -486
w hy -486
w - -486
w en -486
w em -486
-B char173 -486
B hy -486
B - -486
B en -486
B em -486
-U char173 -486
U hy -486
U - -486
U en -486
U em -486
-char173 g -486
hy g -486
- g -486
en g -486
@@ -802,8 +781,7 @@ cq 8781,18225,0,1434,-3582,899 2 51751
* 13173,18225,0,927,-1581,899 2 3626
+ 23418,15750,0,0,-2994 0 3627
, 8781,2835,3360,0,648 0 3628
-char173 8781,7155,0,468,153,468 0 3629
-hy "
+hy 8781,7155,0,468,153,468 0 3629
- "
. 8781,2685,330,0,-633 0 3630
sl 8781,18225,330,3183,801,899 2 3631
@@ -895,198 +873,109 @@ ba 13173,19758,6588,0,-4596 3 3708
rC 11709,19935,6210,0,2232 3 3709
} "
ti 26346,8952,0,0,-4029 0 51876
-char192 16101,23955,0,33,2700,33 2 3776
-`A "
-char194 16101,23955,0,1314,2700,899 2 3778
-^A "
-char200 16101,23955,0,2091,1800,899 2 3784
-`E "
-char202 16101,23955,0,2091,1800,899 2 3786
-^E "
-char203 16101,23085,0,2091,1800,899 2 3787
-:E "
-char206 8781,23955,0,3984,1716,899 2 3790
-^I "
-char207 8781,23085,0,4665,1716,899 2 3791
-:I "
-char180 13173,18399,0,141,-5400,141 2 3764
-aa "
+`A 16101,23955,0,33,2700,33 2 3776
+^A 16101,23955,0,1314,2700,899 2 3778
+`E 16101,23955,0,2091,1800,899 2 3784
+^E 16101,23955,0,2091,1800,899 2 3786
+:E 16101,23085,0,2091,1800,899 2 3787
+^I 8781,23955,0,3984,1716,899 2 3790
+:I 8781,23085,0,4665,1716,899 2 3791
+aa 13173,18399,0,141,-5400,141 2 3764
ga 13173,18399,0,0,-4314 2 3680
a^ 13173,18399,0,0,-3453 2 3678
^ "
-char168 13173,17124,0,624,-4002,624 2 3752
-ad "
+ad 13173,17124,0,624,-4002,624 2 3752
a~ 13173,17145,0,990,-3309,899 2 3710
~ "
-char217 19029,23955,330,3246,-1635,899 2 3801
-`U "
-char219 19029,23955,330,3246,-1635,899 2 3803
-^U "
-char221 14637,23955,0,4533,-1086,899 2 3805
-'Y "
-char253 11709,18399,5655,561,2538,561 3 3837
-'y "
-char176 13173,18225,0,543,-3522,543 2 3760
-de "
-char199 17565,18225,5019,2700,-873,899 2 3783
-,C "
-char231 11709,12669,4785,1275,636,899 0 3815
-,c "
-char209 17565,23079,330,3843,1578,899 2 3793
-~N "
-char241 13173,17145,330,990,1053,899 2 3825
-~n "
-char161 8781,12231,6324,33,444,33 1 3745
-r! "
-char191 13173,12312,6243,0,663 1 3775
-r? "
-char164 13173,15684,0,1779,228,899 0 3748
-Cs "
-char163 13173,17895,330,3153,1971,899 2 3747
-Po "
-char165 13173,17895,0,4170,-15,899 2 3749
-Ye "
-char167 13173,18225,4200,447,-1359,447 2 3751
-sc "
+`U 19029,23955,330,3246,-1635,899 2 3801
+^U 19029,23955,330,3246,-1635,899 2 3803
+'Y 14637,23955,0,4533,-1086,899 2 3805
+'y 11709,18399,5655,561,2538,561 3 3837
+de 13173,18225,0,543,-3522,543 2 3760
+,C 17565,18225,5019,2700,-873,899 2 3783
+,c 11709,12669,4785,1275,636,899 0 3815
+~N 17565,23079,330,3843,1578,899 2 3793
+~n 13173,17145,330,990,1053,899 2 3825
+r! 8781,12231,6324,33,444,33 1 3745
+r? 13173,12312,6243,0,663 1 3775
+Cs 13173,15684,0,1779,228,899 0 3748
+Po 13173,17895,330,3153,1971,899 2 3747
+Ye 13173,17895,0,4170,-15,899 2 3749
+sc 13173,18225,4200,447,-1359,447 2 3751
Fn 13173,18300,5655,2388,2691,899 3 51871
-char162 13173,17034,0,996,-777,899 2 3746
-ct "
-char226 13173,18399,330,759,1044,759 2 3810
-^a "
-char234 11709,18399,330,1761,444,899 2 3818
-^e "
-char244 13173,18399,330,771,732,771 2 3828
-^o "
-char251 13173,18399,330,747,468,747 2 3835
-^u "
-char225 13173,18399,330,759,1044,759 2 3809
-'a "
-char233 11709,18399,330,1011,444,899 2 3817
-'e "
-char243 13173,18399,330,771,732,771 2 3827
-'o "
-char250 13173,18399,330,747,468,747 2 3834
-'u "
-char224 13173,18399,330,759,1044,759 2 3808
-`a "
-char232 11709,18399,330,1011,444,899 2 3816
-`e "
-char242 13173,18399,330,771,732,771 2 3826
-`o "
-char249 13173,18399,330,747,468,747 2 3833
-`u "
-char228 13173,17124,330,759,1044,759 2 3812
-:a "
-char235 11709,17124,330,1356,444,899 2 3819
-:e "
-char246 13173,17124,330,1074,732,899 2 3830
-:o "
-char252 13173,17124,330,747,468,747 2 3836
-:u "
-char197 16101,23865,0,525,2700,525 2 3781
-oA "
-char238 7317,18399,330,2907,420,899 2 3822
-^i "
-char216 19029,18255,330,2082,234,899 2 3800
-/O "
-char198 23418,17895,0,2961,1959,899 2 3782
-AE "
-char229 13173,18309,330,759,1044,759 2 3813
-oa "
-char237 7317,18399,330,3069,420,899 2 3821
-'i "
-char248 13173,12738,336,1491,1443,899 0 3832
-/o "
-char230 17565,12669,330,933,771,899 0 3814
-ae "
-char196 16101,23085,0,2055,2700,899 2 3780
-:A "
-char236 7317,18399,330,1383,420,899 2 3820
-`i "
-char214 19029,23085,330,1356,-492,899 2 3798
-:O "
-char220 19029,23085,330,3246,-1635,899 2 3804
-:U "
-char201 16101,23955,0,2091,1800,899 2 3785
-'E "
-char239 7317,17124,330,3552,420,899 2 3823
-:i "
-char223 13173,18300,5655,1131,5829,899 3 3807
-ss "
-char212 19029,23955,330,1356,-492,899 2 3796
-^O "
-char193 16101,23955,0,1914,2700,899 2 3777
-'A "
-char195 16101,23079,0,2580,2700,899 2 3779
-~A "
-char227 13173,17145,330,990,1044,899 2 3811
-~a "
-char208 19029,17895,0,594,2298,594 2 3792
--D "
-char240 13173,18300,330,2040,732,899 2 3824
-Sd "
-char205 8781,23955,0,5124,1716,899 2 3789
-'I "
-char204 8781,23955,0,3165,1716,899 2 3788
-`I "
-char211 19029,23955,330,1356,-492,899 2 3795
-'O "
-char210 19029,23955,330,1356,-492,899 2 3794
-`O "
-char213 19029,23079,330,1356,-492,899 2 3797
-~O "
-char245 13173,17145,330,1665,732,899 2 3829
-~o "
+ct 13173,17034,0,996,-777,899 2 3746
+^a 13173,18399,330,759,1044,759 2 3810
+^e 11709,18399,330,1761,444,899 2 3818
+^o 13173,18399,330,771,732,771 2 3828
+^u 13173,18399,330,747,468,747 2 3835
+'a 13173,18399,330,759,1044,759 2 3809
+'e 11709,18399,330,1011,444,899 2 3817
+'o 13173,18399,330,771,732,771 2 3827
+'u 13173,18399,330,747,468,747 2 3834
+`a 13173,18399,330,759,1044,759 2 3808
+`e 11709,18399,330,1011,444,899 2 3816
+`o 13173,18399,330,771,732,771 2 3826
+`u 13173,18399,330,747,468,747 2 3833
+:a 13173,17124,330,759,1044,759 2 3812
+:e 11709,17124,330,1356,444,899 2 3819
+:o 13173,17124,330,1074,732,899 2 3830
+:u 13173,17124,330,747,468,747 2 3836
+oA 16101,23865,0,525,2700,525 2 3781
+^i 7317,18399,330,2907,420,899 2 3822
+/O 19029,18255,330,2082,234,899 2 3800
+AE 23418,17895,0,2961,1959,899 2 3782
+oa 13173,18309,330,759,1044,759 2 3813
+'i 7317,18399,330,3069,420,899 2 3821
+/o 13173,12738,336,1491,1443,899 0 3832
+ae 17565,12669,330,933,771,899 0 3814
+:A 16101,23085,0,2055,2700,899 2 3780
+`i 7317,18399,330,1383,420,899 2 3820
+:O 19029,23085,330,1356,-492,899 2 3798
+:U 19029,23085,330,3246,-1635,899 2 3804
+'E 16101,23955,0,2091,1800,899 2 3785
+:i 7317,17124,330,3552,420,899 2 3823
+ss 13173,18300,5655,1131,5829,899 3 3807
+^O 19029,23955,330,1356,-492,899 2 3796
+'A 16101,23955,0,1914,2700,899 2 3777
+~A 16101,23079,0,2580,2700,899 2 3779
+~a 13173,17145,330,990,1044,899 2 3811
+-D 19029,17895,0,594,2298,594 2 3792
+Sd 13173,18300,330,2040,732,899 2 3824
+'I 8781,23955,0,5124,1716,899 2 3789
+`I 8781,23955,0,3165,1716,899 2 3788
+'O 19029,23955,330,1356,-492,899 2 3795
+`O 19029,23955,330,1356,-492,899 2 3794
+~O 19029,23079,330,1356,-492,899 2 3797
+~o 13173,17145,330,1665,732,899 2 3829
vS 13173,23955,330,2268,609,899 2 51795
vs 10245,18399,330,2472,1116,899 2 51827
-char218 19029,23955,330,3246,-1635,899 2 3802
-'U "
+'U 19029,23955,330,3246,-1635,899 2 3802
:Y 14637,23085,0,4533,-1086,899 2 51801
-char255 11709,17124,5655,561,2538,561 3 3839
-:y "
-char222 16101,17895,0,813,1107,813 2 3806
-TP "
-char254 13173,18300,5655,471,3981,471 3 3838
-Tp "
-char181 14637,10800,5595,612,585,612 1 3765
-char182 13173,19635,4200,1650,-1308,899 2 3766
-ps "
-char190 23418,18225,330,0,-2985 2 3774
-34 "
+:y 11709,17124,5655,561,2538,561 3 3839
+TP 16101,17895,0,813,1107,813 2 3806
+Tp 13173,18300,5655,471,3981,471 3 3838
+mc 14637,10800,5595,612,585,612 1 3765
+ps 13173,19635,4200,1650,-1308,899 2 3766
+34 23418,18225,330,0,-2985 2 3774
\- 23418,8610,0,0,-3027 0 51757
-char188 23418,18225,330,0,-2472 2 3772
-14 "
-char189 23418,18225,330,0,-1632 2 3773
-12 "
-char170 13173,18225,0,1119,-1827,899 2 3754
-Of "
-char186 13173,18225,0,1503,-2640,899 2 3770
-Om "
-char171 12198,10095,0,501,330,501 0 3755
-Fo "
-char187 12198,10095,0,336,495,336 0 3771
-Fc "
-char177 23418,15750,2625,0,-2949 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19725,0,5355,-3531,899 2 3753
-co "
-char172 23418,12165,0,0,-3045 0 3756
-no "
-char174 13173,19725,0,5355,-3531,899 2 3758
-rg "
-char178 9270,18060,0,1602,-555,899 2 3762
-S2 "
-char179 9270,18060,0,1980,-771,899 2 3763
-S3 "
-char184 13173,0,4785,0,-96 0 3768
-ac "
-char185 9270,18060,0,1146,-1233,899 2 3769
-S1 "
-char215 23418,14658,0,0,-3630 0 3799
-char247 23418,14010,0,0,-2958 0 3831
-char183 8781,9945,0,0,-2400 0 3767
-pc "
+14 23418,18225,330,0,-2472 2 3772
+12 23418,18225,330,0,-1632 2 3773
+Of 13173,18225,0,1119,-1827,899 2 3754
+Om 13173,18225,0,1503,-2640,899 2 3770
+Fo 12198,10095,0,501,330,501 0 3755
+Fc 12198,10095,0,336,495,336 0 3771
+t+- 23418,15750,2625,0,-2949 0 3761
+bb 13173,19083,5916,0,-4596 3 3750
+co 13173,19725,0,5355,-3531,899 2 3753
+no 23418,12165,0,0,-3045 0 3756
+rg 13173,19725,0,5355,-3531,899 2 3758
+S2 9270,18060,0,1602,-555,899 2 3762
+S3 9270,18060,0,1980,-771,899 2 3763
+ac 13173,0,4785,0,-96 0 3768
+S1 9270,18060,0,1146,-1233,899 2 3769
+tmu 23418,14658,0,0,-3630 0 3799
+tdi 23418,14010,0,0,-2958 0 3831
+pc 8781,9945,0,0,-2400 0 3767
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
@@ -1114,8 +1003,7 @@ Fl 20004,18300,5655,1851,5418,899 3 51885
ij 13173,18369,5655,1212,435,899 3 51958
bq 8781,3039,3156,0,-582 0 51756
%0 32202,18894,1026,0,-3135 2 51901
-char175 13173,15819,0,867,-4257,867 0 3759
-a- "
+a- 13173,15819,0,867,-4257,867 0 3759
ab 13173,18339,0,1122,-4281,899 2 51926
a. 13173,17124,0,0,-6222 2 51927
oe 17565,12669,330,1107,711,899 0 51823
diff --git a/contrib/groff/font/devlj4/TR b/contrib/groff/font/devlj4/TR
index 64a1243..d103992 100644
--- a/contrib/groff/font/devlj4/TR
+++ b/contrib/groff/font/devlj4/TR
@@ -428,19 +428,16 @@ K W -486
K U -486
L cq -3903
L ' -3903
-T char173 -1950
T hy -1950
T - -1950
T en -1950
T em -1950
A cq -3903
A ' -3903
-char173 T -1950
hy T -1950
- T -1950
en T -1950
em T -1950
-Y char173 -3414
Y hy -3414
Y - -3414
Y en -3414
@@ -455,7 +452,6 @@ b cq -1461
b ' -1461
a cq -1461
a ' -1461
-V char173 -2925
V hy -2925
V - -2925
V en -2925
@@ -468,7 +464,6 @@ m cq -975
m ' -975
R cq -1461
R ' -1461
-W char173 -2439
W hy -2439
W - -2439
W en -2439
@@ -477,38 +472,31 @@ cq d -1461
' d -1461
s cq -975
s ' -975
-F char173 -486
F hy -486
F - -486
F en -486
F em -486
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1950
A hy -1950
A - -1950
A en -1950
A em -1950
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -975
' s -975
-char173 X -1461
hy X -1461
- X -1461
-char173 A -1950
hy A -1950
- A -1950
en X -1461
en A -1950
em X -1461
-R char173 -1461
R hy -1461
R - -1461
R en -1461
@@ -517,17 +505,14 @@ K cq -486
K ' -486
t g -486
b f -975
-Z char173 -486
Z hy -486
Z - -486
Z en -486
Z em -486
-J char173 -486
J hy -486
J - -486
J en -486
J em -486
-char173 g -486
hy g -486
- g -486
en g -486
@@ -549,8 +534,7 @@ cq 8781,18225 2 51751
* 13173,18225 2 3626
+ 23418,15750 0 3627
, 8781,2565,4005 0 3628
-char173 8781,7155 0 3629
-hy "
+hy 8781,7155 0 3629
- "
. 8781,2685,330 0 3630
sl 8781,18225,330 2 3631
@@ -642,198 +626,109 @@ ba 13173,19758,6588 3 3708
rC 11709,19935,6210 3 3709
} "
ti 26346,8952 0 51876
-char192 19029,23955 2 3776
-`A "
-char194 19029,23955 2 3778
-^A "
-char200 16587,23955 2 3784
-`E "
-char202 16587,23955 2 3786
-^E "
-char203 16587,23085 2 3787
-:E "
-char206 8781,23955 2 3790
-^I "
-char207 8781,23085 2 3791
-:I "
-char180 13173,18399 2 3764
-aa "
+`A 19029,23955 2 3776
+^A 19029,23955 2 3778
+`E 16587,23955 2 3784
+^E 16587,23955 2 3786
+:E 16587,23085 2 3787
+^I 8781,23955 2 3790
+:I 8781,23085 2 3791
+aa 13173,18399 2 3764
ga 13173,18399 2 3680
a^ 13173,18399 2 3678
^ "
-char168 13173,17124 2 3752
-ad "
+ad 13173,17124 2 3752
a~ 13173,17064 2 3710
~ "
-char217 19515,23955,330 2 3801
-`U "
-char219 19515,23955,330 2 3803
-^U "
-char221 19029,23955 2 3805
-'Y "
-char253 13173,18399,5655 3 3837
-'y "
-char176 13173,18225 2 3760
-de "
-char199 18051,18225,4908 2 3783
-,C "
-char231 11709,12669,4572 0 3815
-,c "
-char209 19515,23034,330 2 3793
-~N "
-char241 13173,17064 2 3825
-~n "
-char161 8781,12783,5772 1 3745
-r! "
-char191 11709,12783,5772 1 3775
-r? "
-char164 13173,15684 0 3748
-Cs "
-char163 13173,18225,330 2 3747
-Po "
-char165 13173,17895 2 3749
-Ye "
-char167 13173,18225,4230 2 3751
-sc "
+`U 19515,23955,330 2 3801
+^U 19515,23955,330 2 3803
+'Y 19029,23955 2 3805
+'y 13173,18399,5655 3 3837
+de 13173,18225 2 3760
+,C 18051,18225,4908 2 3783
+,c 11709,12669,4572 0 3815
+~N 19515,23034,330 2 3793
+~n 13173,17064 2 3825
+r! 8781,12783,5772 1 3745
+r? 11709,12783,5772 1 3775
+Cs 13173,15684 0 3748
+Po 13173,18225,330 2 3747
+Ye 13173,17895 2 3749
+sc 13173,18225,4230 2 3751
Fn 13173,18300,5655 3 51871
-char162 13173,16866 2 3746
-ct "
-char226 11709,18399,330 2 3810
-^a "
-char234 11709,18399,330 2 3818
-^e "
-char244 13173,18399,330 2 3828
-^o "
-char251 13173,18399,330 2 3835
-^u "
-char225 11709,18399,330 2 3809
-'a "
-char233 11709,18399,330 2 3817
-'e "
-char243 13173,18399,330 2 3827
-'o "
-char250 13173,18399,330 2 3834
-'u "
-char224 11709,18399,330 2 3808
-`a "
-char232 11709,18399,330 2 3816
-`e "
-char242 13173,18399,330 2 3826
-`o "
-char249 13173,18399,330 2 3833
-`u "
-char228 11709,17124,330 2 3812
-:a "
-char235 11709,17124,330 2 3819
-:e "
-char246 13173,17124,330 2 3830
-:o "
-char252 13173,17124,330 2 3836
-:u "
-char197 19029,23865 2 3781
-oA "
-char238 7317,18399 2 3822
-^i "
-char216 19029,18225,339 2 3800
-/O "
-char198 23418,17895 2 3782
-AE "
-char229 11709,18309,330 2 3813
-oa "
-char237 7317,18399 2 3821
-'i "
-char248 13173,12765,330 0 3832
-/o "
-char230 17565,12669,330 0 3814
-ae "
-char196 19029,23085 2 3780
-:A "
-char236 7317,18399 2 3820
-`i "
-char214 19029,23085,330 2 3798
-:O "
-char220 19515,23085,330 2 3804
-:U "
-char201 16587,23955 2 3785
-'E "
-char239 7317,17124 2 3823
-:i "
-char223 13173,18300,330 2 3807
-ss "
-char212 19029,23955,330 2 3796
-^O "
-char193 19029,23955 2 3777
-'A "
-char195 19029,23034 2 3779
-~A "
-char227 11709,17064,330 2 3811
-~a "
-char208 19515,17895 2 3792
--D "
-char240 13173,18456,330 2 3824
-Sd "
-char205 8781,23955 2 3789
-'I "
-char204 8781,23955 2 3788
-`I "
-char211 19029,23955,330 2 3795
-'O "
-char210 19029,23955,330 2 3794
-`O "
-char213 19029,23034,330 2 3797
-~O "
-char245 13173,17064,330 2 3829
-~o "
+ct 13173,16866 2 3746
+^a 11709,18399,330 2 3810
+^e 11709,18399,330 2 3818
+^o 13173,18399,330 2 3828
+^u 13173,18399,330 2 3835
+'a 11709,18399,330 2 3809
+'e 11709,18399,330 2 3817
+'o 13173,18399,330 2 3827
+'u 13173,18399,330 2 3834
+`a 11709,18399,330 2 3808
+`e 11709,18399,330 2 3816
+`o 13173,18399,330 2 3826
+`u 13173,18399,330 2 3833
+:a 11709,17124,330 2 3812
+:e 11709,17124,330 2 3819
+:o 13173,17124,330 2 3830
+:u 13173,17124,330 2 3836
+oA 19029,23865 2 3781
+^i 7317,18399 2 3822
+/O 19029,18225,339 2 3800
+AE 23418,17895 2 3782
+oa 11709,18309,330 2 3813
+'i 7317,18399 2 3821
+/o 13173,12765,330 0 3832
+ae 17565,12669,330 0 3814
+:A 19029,23085 2 3780
+`i 7317,18399 2 3820
+:O 19029,23085,330 2 3798
+:U 19515,23085,330 2 3804
+'E 16587,23955 2 3785
+:i 7317,17124 2 3823
+ss 13173,18300,330 2 3807
+^O 19029,23955,330 2 3796
+'A 19029,23955 2 3777
+~A 19029,23034 2 3779
+~a 11709,17064,330 2 3811
+-D 19515,17895 2 3792
+Sd 13173,18456,330 2 3824
+'I 8781,23955 2 3789
+`I 8781,23955 2 3788
+'O 19029,23955,330 2 3795
+`O 19029,23955,330 2 3794
+~O 19029,23034,330 2 3797
+~o 13173,17064,330 2 3829
vS 14148,23955,330 2 51795
vs 10245,18399,330 2 51827
-char218 19515,23955,330 2 3802
-'U "
+'U 19515,23955,330 2 3802
:Y 19029,23085 2 51801
-char255 13173,17124,5655 3 3839
-:y "
-char222 15126,17895 2 3806
-TP "
-char254 13173,18300,5655 3 3838
-Tp "
-char181 14637,10800,5595 1 3765
-char182 13173,19635,4200 2 3766
-ps "
-char190 23418,18225,330 2 3774
-34 "
+:y 13173,17124,5655 3 3839
+TP 15126,17895 2 3806
+Tp 13173,18300,5655 3 3838
+mc 14637,10800,5595 1 3765
+ps 13173,19635,4200 2 3766
+34 23418,18225,330 2 3774
\- 23418,8610 0 51757
-char188 23418,18225,330 2 3772
-14 "
-char189 23418,18225,330 2 3773
-12 "
-char170 13173,18225 2 3754
-Of "
-char186 13173,18225 2 3770
-Om "
-char171 10734,10095 0 3755
-Fo "
-char187 10734,10095 0 3771
-Fc "
-char177 23418,15750,2625 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19725 2 3753
-co "
-char172 23418,12165 0 3756
-no "
-char174 13173,19725 2 3758
-rg "
-char178 9270,18060 2 3762
-S2 "
-char179 9270,18060 2 3763
-S3 "
-char184 13173,258,4572 0 3768
-ac "
-char185 9270,18060 2 3769
-S1 "
-char215 23418,15117 0 3799
-char247 23418,14010 0 3831
-char183 8781,10407 0 3767
-pc "
+14 23418,18225,330 2 3772
+12 23418,18225,330 2 3773
+Of 13173,18225 2 3754
+Om 13173,18225 2 3770
+Fo 10734,10095 0 3755
+Fc 10734,10095 0 3771
+t+- 23418,15750,2625 0 3761
+bb 13173,19083,5916 3 3750
+co 13173,19725 2 3753
+no 23418,12165 0 3756
+rg 13173,19725 2 3758
+S2 9270,18060 2 3762
+S3 9270,18060 2 3763
+ac 13173,258,4572 0 3768
+S1 9270,18060 2 3769
+tmu 23418,15117 0 3799
+tdi 23418,14010 0 3831
+pc 8781,10407 0 3767
fm 8781,18225 2 51873
sd 13173,18225 2 51874
dg 13173,18225,4200 2 51755
@@ -861,8 +756,7 @@ Fl 21954,18300 2 51885
ij 14637,18534,5655 3 51958
bq 8781,3009,3561 0 51756
%0 31713,18894,1026 2 51901
-char175 13173,16539 0 3759
-a- "
+a- 13173,16539 0 3759
ab 13173,17769 2 51926
a. 13173,17124 2 51927
oe 19029,12669,330 0 51823
diff --git a/contrib/groff/font/devlj4/UB b/contrib/groff/font/devlj4/UB
index 5c1717f..884f932 100644
--- a/contrib/groff/font/devlj4/UB
+++ b/contrib/groff/font/devlj4/UB
@@ -391,19 +391,16 @@ G J -486
A f -486
L cq -6342
L ' -6342
-T char173 -4389
T hy -4389
T - -4389
T en -4389
T em -4389
A cq -2439
A ' -2439
-char173 T -4389
hy T -4389
- T -4389
en T -4389
em T -4389
-Y char173 -2439
Y hy -2439
Y - -2439
Y en -2439
@@ -418,7 +415,6 @@ b cq -1461
b ' -1461
a cq -975
a ' -975
-V char173 -1461
V hy -1461
V - -1461
V en -1461
@@ -429,7 +425,6 @@ n cq -975
n ' -975
m cq -975
m ' -975
-W char173 -975
W hy -975
W - -975
W en -975
@@ -438,39 +433,32 @@ cq d -2439
' d -2439
s cq -486
s ' -486
-L char173 -975
L hy -975
L - -975
L en -975
L em -975
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1461
A hy -1461
A - -1461
A en -1461
A em -1461
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -1950
' s -1950
-char173 X -1461
hy X -1461
- X -1461
-char173 A -1461
hy A -1461
- A -1461
en X -1461
en A -1461
em X -1461
b f -486
-Z char173 -975
Z hy -975
Z - -975
Z en -975
@@ -500,8 +488,7 @@ cq 8781,18135 2 51751
* 16587,18495 2 3626
+ 26346,14940 0 3627
, 8781,3390,2355 0 3628
-char173 8781,7875 0 3629
-hy "
+hy 8781,7875 0 3629
- "
. 8781,3390 0 3630
sl 8781,18495,885 2 3631
@@ -593,198 +580,109 @@ ba 13173,19758,6588 3 3708
rC 13173,20130,6075 3 3709
} "
ti 26346,9435 0 51876
-char192 19515,23130 2 3776
-`A "
-char194 19515,23130 2 3778
-^A "
-char200 15126,23130 2 3784
-`E "
-char202 15126,23130 2 3786
-^E "
-char203 15126,23040 2 3787
-:E "
-char206 7317,23130 2 3790
-^I "
-char207 7317,23040 2 3791
-:I "
-char180 16587,18090 2 3764
-aa "
+`A 19515,23130 2 3776
+^A 19515,23130 2 3778
+`E 15126,23130 2 3784
+^E 15126,23130 2 3786
+:E 15126,23040 2 3787
+^I 7317,23130 2 3790
+:I 7317,23040 2 3791
+aa 16587,18090 2 3764
ga 16587,18090 2 3680
a^ 16587,18090 2 3678
^ "
-char168 16587,17910 2 3752
-ad "
+ad 16587,17910 2 3752
a~ 16587,17946 2 3710
~ "
-char217 19029,23130,360 2 3801
-`U "
-char219 19029,23130,360 2 3803
-^U "
-char221 18051,23130 2 3805
-'Y "
-char253 14637,18090,4680 2 3837
-'y "
-char176 16587,18465 2 3760
-de "
-char199 18540,18495,5175 3 3783
-,C "
-char231 14148,12990,5160 1 3815
-,c "
-char209 19029,23130 2 3793
-~N "
-char241 15126,17946 2 3825
-~n "
-char161 8781,12645,5520 1 3745
-r! "
-char191 13662,12480,5835 1 3775
-r? "
-char164 16587,15834 0 3748
-Cs "
-char163 16587,18465 2 3747
-Po "
-char165 16587,18105 2 3749
-Ye "
-char167 16587,18495,360 2 3751
-sc "
+`U 19029,23130,360 2 3801
+^U 19029,23130,360 2 3803
+'Y 18051,23130 2 3805
+'y 14637,18090,4680 2 3837
+de 16587,18465 2 3760
+,C 18540,18495,5175 3 3783
+,c 14148,12990,5160 1 3815
+~N 19029,23130 2 3793
+~n 15126,17946 2 3825
+r! 8781,12645,5520 1 3745
+r? 13662,12480,5835 1 3775
+Cs 16587,15834 0 3748
+Po 16587,18465 2 3747
+Ye 16587,18105 2 3749
+sc 16587,18495,360 2 3751
Fn 16587,18315 2 51871
-char162 16587,18750,645 2 3746
-ct "
-char226 14148,18090,360 2 3810
-^a "
-char234 14148,18090,360 2 3818
-^e "
-char244 15126,18090,360 2 3828
-^o "
-char251 15126,18090,360 2 3835
-^u "
-char225 14148,18090,360 2 3809
-'a "
-char233 14148,18090,360 2 3817
-'e "
-char243 15126,18090,360 2 3827
-'o "
-char250 15126,18090,360 2 3834
-'u "
-char224 14148,18090,360 2 3808
-`a "
-char232 14148,18090,360 2 3816
-`e "
-char242 15126,18090,360 2 3826
-`o "
-char249 15126,18090,360 2 3833
-`u "
-char228 14148,17910,360 2 3812
-:a "
-char235 14148,17910,360 2 3819
-:e "
-char246 15126,17910,360 2 3830
-:o "
-char252 15126,17910,360 2 3836
-:u "
-char197 19515,25830 2 3781
-oA "
-char238 6342,18090 2 3822
-^i "
-char216 20004,18495,366 2 3800
-/O "
-char198 25857,18135 2 3782
-AE "
-char229 14148,20100,360 2 3813
-oa "
-char237 6342,18090 2 3821
-'i "
-char248 15126,13047,360 0 3832
-/o "
-char230 22443,12990,360 0 3814
-ae "
-char196 19515,23040 2 3780
-:A "
-char236 6342,18090 2 3820
-`i "
-char214 20004,23040,360 2 3798
-:O "
-char220 19029,23040,360 2 3804
-:U "
-char201 15126,23130 2 3785
-'E "
-char239 6342,17910 2 3823
-:i "
-char223 16101,17790,360 2 3807
-ss "
-char212 20004,23130,360 2 3796
-^O "
-char193 19515,23130 2 3777
-'A "
-char195 19515,23130 2 3779
-~A "
-char227 14148,17946,360 2 3811
-~a "
-char208 19029,18135 2 3792
--D "
-char240 15126,18747,360 2 3824
-Sd "
-char205 7317,23130 2 3789
-'I "
-char204 7317,23130 2 3788
-`I "
-char211 20004,23130,360 2 3795
-'O "
-char210 20004,23130,360 2 3794
-`O "
-char213 20004,23130,360 2 3797
-~O "
-char245 15126,17946,360 2 3829
-~o "
+ct 16587,18750,645 2 3746
+^a 14148,18090,360 2 3810
+^e 14148,18090,360 2 3818
+^o 15126,18090,360 2 3828
+^u 15126,18090,360 2 3835
+'a 14148,18090,360 2 3809
+'e 14148,18090,360 2 3817
+'o 15126,18090,360 2 3827
+'u 15126,18090,360 2 3834
+`a 14148,18090,360 2 3808
+`e 14148,18090,360 2 3816
+`o 15126,18090,360 2 3826
+`u 15126,18090,360 2 3833
+:a 14148,17910,360 2 3812
+:e 14148,17910,360 2 3819
+:o 15126,17910,360 2 3830
+:u 15126,17910,360 2 3836
+oA 19515,25830 2 3781
+^i 6342,18090 2 3822
+/O 20004,18495,366 2 3800
+AE 25857,18135 2 3782
+oa 14148,20100,360 2 3813
+'i 6342,18090 2 3821
+/o 15126,13047,360 0 3832
+ae 22443,12990,360 0 3814
+:A 19515,23040 2 3780
+`i 6342,18090 2 3820
+:O 20004,23040,360 2 3798
+:U 19029,23040,360 2 3804
+'E 15126,23130 2 3785
+:i 6342,17910 2 3823
+ss 16101,17790,360 2 3807
+^O 20004,23130,360 2 3796
+'A 19515,23130 2 3777
+~A 19515,23130 2 3779
+~a 14148,17946,360 2 3811
+-D 19029,18135 2 3792
+Sd 15126,18747,360 2 3824
+'I 7317,23130 2 3789
+`I 7317,23130 2 3788
+'O 20004,23130,360 2 3795
+`O 20004,23130,360 2 3794
+~O 20004,23130,360 2 3797
+~o 15126,17946,360 2 3829
vS 17076,23130,360 2 51795
vs 13173,18090,360 2 51827
-char218 19029,23130,360 2 3802
-'U "
+'U 19029,23130,360 2 3802
:Y 18051,23040 2 51801
-char255 14637,17910,4680 2 3839
-:y "
-char222 15612,18135 2 3806
-TP "
-char254 15126,18165,4680 2 3838
-Tp "
-char181 15612,12630,4680 0 3765
-char182 16590,19635,4200 2 3766
-ps "
-char190 26346,18465,900 2 3774
-34 "
+:y 14637,17910,4680 2 3839
+TP 15612,18135 2 3806
+Tp 15126,18165,4680 2 3838
+mc 15612,12630,4680 0 3765
+ps 16590,19635,4200 2 3766
+34 26346,18465,900 2 3774
\- 26346,8445 0 51757
-char188 26346,18465,900 2 3772
-14 "
-char189 26346,18465,900 2 3773
-12 "
-char170 10734,18465 2 3754
-Of "
-char186 10734,18465 2 3770
-Om "
-char171 14637,11250 0 3755
-Fo "
-char187 14637,11250 0 3771
-Fc "
-char177 26346,14670 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 26346,11787 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 10245,18465 2 3762
-S2 "
-char179 10245,18465 2 3763
-S3 "
-char184 16587,195033,5160 3 3768
-ac "
-char185 10245,18345 2 3769
-S1 "
-char215 26346,14154 0 3799
-char247 26346,12870 0 3831
-char183 8781,10740 0 3767
-pc "
+14 26346,18465,900 2 3772
+12 26346,18465,900 2 3773
+Of 10734,18465 2 3754
+Om 10734,18465 2 3770
+Fo 14637,11250 0 3755
+Fc 14637,11250 0 3771
+t+- 26346,14670 0 3761
+bb 13173,19083,5916 3 3750
+co 13173,19635 2 3753
+no 26346,11787 0 3756
+rg 13173,19635 2 3758
+S2 10245,18465 2 3762
+S3 10245,18465 2 3763
+ac 16587,195033,5160 3 3768
+S1 10245,18345 2 3769
+tmu 26346,14154 0 3799
+tdi 26346,12870 0 3831
+pc 8781,10740 0 3767
fm 8781,18054 2 51873
sd 16587,18054 2 51874
dg 16587,18135 2 51755
@@ -812,8 +710,7 @@ Fl 24396,18315 2 51885
ij 12684,18165,4995 3 51958
bq 8781,3348,2307 0 51756
%0 26346,18720,840 2 51901
-char175 16587,16950 2 3759
-a- "
+a- 16587,16950 2 3759
ab 16587,18147 2 51926
a. 16587,18405 2 51927
oe 23907,12990,360 0 51823
diff --git a/contrib/groff/font/devlj4/UBI b/contrib/groff/font/devlj4/UBI
index 00ffcfc..b7baac1 100644
--- a/contrib/groff/font/devlj4/UBI
+++ b/contrib/groff/font/devlj4/UBI
@@ -346,19 +346,16 @@ U y -486
U w -486
L cq -6342
L ' -6342
-T char173 -2925
T hy -2925
T - -2925
T en -2925
T em -2925
A cq -2439
A ' -2439
-char173 T -3414
hy T -3414
- T -3414
en T -3414
em T -3414
-Y char173 -2439
Y hy -2439
Y - -2439
Y en -2439
@@ -373,7 +370,6 @@ b cq -1461
b ' -1461
a cq -1461
a ' -1461
-V char173 -975
V hy -975
V - -975
V en -975
@@ -384,7 +380,6 @@ n cq -975
n ' -975
m cq -975
m ' -975
-W char173 -486
W hy -486
W - -486
W en -486
@@ -393,32 +388,26 @@ cq d -2439
' d -2439
s cq -486
s ' -486
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1950
A hy -1950
A - -1950
A en -1950
A em -1950
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -1461
' s -1461
-char173 X -1461
hy X -1461
- X -1461
-char173 A -975
hy A -975
- A -975
en X -1461
@@ -450,8 +439,7 @@ cq 8781,18135,0,3414,-2601,1012 2 51751
* 16587,18582,0,0,-3291 2 3626
+ 26346,14940,0,0,-4728 0 3627
, 8781,3255,2580,0,1794 0 3628
-char173 8781,7737,0,624,270,624 0 3629
-hy "
+hy 8781,7737,0,624,270,624 0 3629
- "
. 8781,3255,0,0,453 0 3630
sl 8781,18135,1470,4308,2982,1012 2 3631
@@ -543,198 +531,109 @@ ba 13173,19758,6588,0,-4596 3 3708
rC 13173,20130,6075,0,3360 3 3709
} "
ti 26346,9435,0,0,-4029 0 51876
-char192 19515,23220,0,0,2535 2 3776
-`A "
-char194 19515,23220,0,0,2535 2 3778
-^A "
-char200 15126,23220,0,3285,1188,1012 2 3784
-`E "
-char202 15126,23220,0,3285,1188,1012 2 3786
-^E "
-char203 15126,22830,0,3285,1188,1012 2 3787
-:E "
-char206 7317,23220,0,5631,1521,1012 2 3790
-^I "
-char207 7317,22830,0,6792,1521,1012 2 3791
-:I "
-char180 16587,18105,0,360,-7359,360 2 3764
-aa "
+`A 19515,23220,0,0,2535 2 3776
+^A 19515,23220,0,0,2535 2 3778
+`E 15126,23220,0,3285,1188,1012 2 3784
+^E 15126,23220,0,3285,1188,1012 2 3786
+:E 15126,22830,0,3285,1188,1012 2 3787
+^I 7317,23220,0,5631,1521,1012 2 3790
+:I 7317,22830,0,6792,1521,1012 2 3791
+aa 16587,18105,0,360,-7359,360 2 3764
ga 16587,18105,0,0,-6009 2 3680
a^ 16587,18105,0,0,-4518 2 3678
^ "
-char168 16587,18180,0,693,-5457,693 2 3752
-ad "
+ad 16587,18180,0,693,-5457,693 2 3752
a~ 16587,17994,0,771,-5169,771 2 3710
~ "
-char217 19029,23220,360,2898,-384,1012 2 3801
-`U "
-char219 19029,23220,360,2898,-384,1012 2 3803
-^U "
-char221 18051,23220,0,3942,-2616,1012 2 3805
-'Y "
-char253 14637,18105,4680,2472,-528,1012 3 3837
-'y "
-char176 16587,18465,0,0,-3642 2 3760
-de "
-char199 18540,18495,5409,1737,-633,1012 3 3783
-,C "
-char231 14148,12990,5046,903,411,903 1 3815
-,c "
-char209 19029,23124,0,2883,1248,1012 2 3793
-~N "
-char241 15126,17994,0,1503,1482,1012 2 3825
-~n "
-char161 8781,12651,5514,432,2244,432 1 3745
-r! "
-char191 13662,12486,5829,0,1398 1 3775
-r? "
-char164 16587,15834,0,753,-774,753 0 3748
-Cs "
-char163 16587,18465,0,2046,663,1012 2 3747
-Po "
-char165 16587,18105,0,4872,-30,1012 2 3749
-Ye "
-char167 16587,18495,360,0,-2661 2 3751
-sc "
+`U 19029,23220,360,2898,-384,1012 2 3801
+^U 19029,23220,360,2898,-384,1012 2 3803
+'Y 18051,23220,0,3942,-2616,1012 2 3805
+'y 14637,18105,4680,2472,-528,1012 3 3837
+de 16587,18465,0,0,-3642 2 3760
+,C 18540,18495,5409,1737,-633,1012 3 3783
+,c 14148,12990,5046,903,411,903 1 3815
+~N 19029,23124,0,2883,1248,1012 2 3793
+~n 15126,17994,0,1503,1482,1012 2 3825
+r! 8781,12651,5514,432,2244,432 1 3745
+r? 13662,12486,5829,0,1398 1 3775
+Cs 16587,15834,0,753,-774,753 0 3748
+Po 16587,18465,0,2046,663,1012 2 3747
+Ye 16587,18105,0,4872,-30,1012 2 3749
+sc 16587,18495,360,0,-2661 2 3751
Fn 16587,18315,0,1008,-3099,1008 2 51871
-char162 16587,18750,630,678,-1458,678 2 3746
-ct "
-char226 14148,18105,360,651,978,651 2 3810
-^a "
-char234 14148,18105,360,924,600,924 2 3818
-^e "
-char244 15126,18105,360,492,465,492 2 3828
-^o "
-char251 15126,18105,360,1557,666,1012 2 3835
-^u "
-char225 14148,18105,360,1581,978,1012 2 3809
-'a "
-char233 14148,18105,360,1581,600,1012 2 3817
-'e "
-char243 15126,18105,360,1092,465,1012 2 3827
-'o "
-char250 15126,18105,360,1557,666,1012 2 3834
-'u "
-char224 14148,18105,360,651,978,651 2 3808
-`a "
-char232 14148,18105,360,924,600,924 2 3816
-`e "
-char242 15126,18105,360,492,465,492 2 3826
-`o "
-char249 15126,18105,360,1557,666,1012 2 3833
-`u "
-char228 14148,18180,360,1914,978,1012 2 3812
-:a "
-char235 14148,18180,360,1914,600,1012 2 3819
-:e "
-char246 15126,18180,360,1425,465,1012 2 3830
-:o "
-char252 15126,18180,360,1557,666,1012 2 3836
-:u "
-char197 19515,25830,0,0,2535 2 3781
-oA "
-char238 6342,18105,0,4479,1860,1012 2 3822
-^i "
-char216 20004,18495,360,2802,1200,1012 2 3800
-/O "
-char198 25857,18135,0,3294,2781,1012 2 3782
-AE "
-char229 14148,20100,360,651,978,651 2 3813
-oa "
-char237 6342,18105,0,5484,1860,1012 2 3821
-'i "
-char248 15126,12990,360,1764,1686,1012 0 3832
-/o "
-char230 22443,12990,360,840,906,840 0 3814
-ae "
-char196 19515,22830,0,693,2535,693 2 3780
-:A "
-char236 6342,18105,0,2136,1860,1012 2 3820
-`i "
-char214 20004,22830,360,969,-705,969 2 3798
-:O "
-char220 19029,22830,360,2898,-384,1012 2 3804
-:U "
-char201 15126,23220,0,3285,1188,1012 2 3785
-'E "
-char239 6342,18180,0,5817,1860,1012 2 3823
-:i "
-char223 16101,18315,360,795,1515,795 2 3807
-ss "
-char212 20004,23220,360,969,-705,969 2 3796
-^O "
-char193 19515,23220,0,0,2535 2 3777
-'A "
-char195 19515,23124,0,1020,2535,1012 2 3779
-~A "
-char227 14148,17994,360,1992,978,1012 2 3811
-~a "
-char208 19029,18135,0,924,1227,924 2 3792
--D "
-char240 15126,18693,360,492,465,492 2 3824
-Sd "
-char205 7317,23220,0,5907,1521,1012 2 3789
-'I "
-char204 7317,23220,0,3219,1521,1012 2 3788
-`I "
-char211 20004,23220,360,969,-705,969 2 3795
-'O "
-char210 20004,23220,360,969,-705,969 2 3794
-`O "
-char213 20004,23124,360,969,-705,969 2 3797
-~O "
-char245 15126,17994,360,1503,465,1012 2 3829
-~o "
+ct 16587,18750,630,678,-1458,678 2 3746
+^a 14148,18105,360,651,978,651 2 3810
+^e 14148,18105,360,924,600,924 2 3818
+^o 15126,18105,360,492,465,492 2 3828
+^u 15126,18105,360,1557,666,1012 2 3835
+'a 14148,18105,360,1581,978,1012 2 3809
+'e 14148,18105,360,1581,600,1012 2 3817
+'o 15126,18105,360,1092,465,1012 2 3827
+'u 15126,18105,360,1557,666,1012 2 3834
+`a 14148,18105,360,651,978,651 2 3808
+`e 14148,18105,360,924,600,924 2 3816
+`o 15126,18105,360,492,465,492 2 3826
+`u 15126,18105,360,1557,666,1012 2 3833
+:a 14148,18180,360,1914,978,1012 2 3812
+:e 14148,18180,360,1914,600,1012 2 3819
+:o 15126,18180,360,1425,465,1012 2 3830
+:u 15126,18180,360,1557,666,1012 2 3836
+oA 19515,25830,0,0,2535 2 3781
+^i 6342,18105,0,4479,1860,1012 2 3822
+/O 20004,18495,360,2802,1200,1012 2 3800
+AE 25857,18135,0,3294,2781,1012 2 3782
+oa 14148,20100,360,651,978,651 2 3813
+'i 6342,18105,0,5484,1860,1012 2 3821
+/o 15126,12990,360,1764,1686,1012 0 3832
+ae 22443,12990,360,840,906,840 0 3814
+:A 19515,22830,0,693,2535,693 2 3780
+`i 6342,18105,0,2136,1860,1012 2 3820
+:O 20004,22830,360,969,-705,969 2 3798
+:U 19029,22830,360,2898,-384,1012 2 3804
+'E 15126,23220,0,3285,1188,1012 2 3785
+:i 6342,18180,0,5817,1860,1012 2 3823
+ss 16101,18315,360,795,1515,795 2 3807
+^O 20004,23220,360,969,-705,969 2 3796
+'A 19515,23220,0,0,2535 2 3777
+~A 19515,23124,0,1020,2535,1012 2 3779
+~a 14148,17994,360,1992,978,1012 2 3811
+-D 19029,18135,0,924,1227,924 2 3792
+Sd 15126,18693,360,492,465,492 2 3824
+'I 7317,23220,0,5907,1521,1012 2 3789
+`I 7317,23220,0,3219,1521,1012 2 3788
+'O 20004,23220,360,969,-705,969 2 3795
+`O 20004,23220,360,969,-705,969 2 3794
+~O 20004,23124,360,969,-705,969 2 3797
+~o 15126,17994,360,1503,465,1012 2 3829
vS 17076,23220,360,2220,117,1012 2 51795
vs 13173,18105,360,2985,1026,1012 2 51827
-char218 19029,23220,360,2898,-384,1012 2 3802
-'U "
+'U 19029,23220,360,2898,-384,1012 2 3802
:Y 18051,22830,0,3942,-2616,1012 2 51801
-char255 14637,18180,4680,2472,-528,1012 3 3839
-:y "
-char222 15612,18135,0,1857,1209,1012 2 3806
-TP "
-char254 15126,18165,4680,516,2856,516 3 3838
-Tp "
-char181 15612,12630,4680,1422,2907,1012 1 3765
-char182 16590,19635,4200,0,-2529 2 3766
-ps "
-char190 26346,18465,990,0,-2625 2 3774
-34 "
+:y 14637,18180,4680,2472,-528,1012 3 3839
+TP 15612,18135,0,1857,1209,1012 2 3806
+Tp 15126,18165,4680,516,2856,516 3 3838
+mc 15612,12630,4680,1422,2907,1012 1 3765
+ps 16590,19635,4200,0,-2529 2 3766
+34 26346,18465,990,0,-2625 2 3774
\- 26346,8445,0,0,-4746 0 51757
-char188 26346,18465,990,0,-2682 2 3772
-14 "
-char189 26346,18465,990,0,-3168 2 3773
-12 "
-char170 10734,18465,0,2211,-1464,1012 2 3754
-Of "
-char186 10734,18465,0,2520,-1473,1012 2 3770
-Om "
-char171 14637,11115,0,1530,180,1012 0 3755
-Fo "
-char187 14637,11115,0,243,1467,243 0 3771
-Fc "
-char177 26346,14670,0,0,-4695 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,4881,-3090,1012 2 3753
-co "
-char172 26346,11787,0,0,-4329 0 3756
-no "
-char174 13173,19635,0,4881,-3090,1012 2 3758
-rg "
-char178 10245,18465,0,2217,-933,1012 2 3762
-S2 "
-char179 10245,18465,0,2439,-957,1012 2 3763
-S3 "
-char184 16587,195102,5046,0,-1809 3 3768
-ac "
-char185 10245,18345,0,1083,-2880,1012 2 3769
-S1 "
-char215 26346,14154,0,0,-5958 0 3799
-char247 26346,12870,0,0,-4767 0 3831
-char183 8781,10692,0,276,-2055,276 0 3767
-pc "
+14 26346,18465,990,0,-2682 2 3772
+12 26346,18465,990,0,-3168 2 3773
+Of 10734,18465,0,2211,-1464,1012 2 3754
+Om 10734,18465,0,2520,-1473,1012 2 3770
+Fo 14637,11115,0,1530,180,1012 0 3755
+Fc 14637,11115,0,243,1467,243 0 3771
+t+- 26346,14670,0,0,-4695 0 3761
+bb 13173,19083,5916,0,-4596 3 3750
+co 13173,19635,0,4881,-3090,1012 2 3753
+no 26346,11787,0,0,-4329 0 3756
+rg 13173,19635,0,4881,-3090,1012 2 3758
+S2 10245,18465,0,2217,-933,1012 2 3762
+S3 10245,18465,0,2439,-957,1012 2 3763
+ac 16587,195102,5046,0,-1809 3 3768
+S1 10245,18345,0,1083,-2880,1012 2 3769
+tmu 26346,14154,0,0,-5958 0 3799
+tdi 26346,12870,0,0,-4767 0 3831
+pc 8781,10692,0,276,-2055,276 0 3767
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
@@ -762,8 +661,7 @@ Fl 24396,18315,0,3666,-42,1012 2 51885
ij 12684,18165,4995,3681,1872,1012 3 51958
bq 8781,3234,2241,0,1878 0 51756
%0 26346,18720,840,696,51,696 2 51901
-char175 16587,17778,0,102,-5931,102 2 3759
-a- "
+a- 16587,17778,0,102,-5931,102 2 3759
ab 16587,18147,0,771,-5874,771 2 51926
a. 16587,18222,0,0,-7887 2 51927
oe 23907,12990,360,525,258,525 0 51823
diff --git a/contrib/groff/font/devlj4/UCB b/contrib/groff/font/devlj4/UCB
index 2864278..311a42b 100644
--- a/contrib/groff/font/devlj4/UCB
+++ b/contrib/groff/font/devlj4/UCB
@@ -360,19 +360,16 @@ G J -486
A f -486
L cq -4389
L ' -4389
-T char173 -2925
T hy -2925
T - -2925
T en -2925
T em -2925
A cq -1461
A ' -1461
-char173 T -2925
hy T -2925
- T -2925
en T -2925
em T -2925
-Y char173 -1461
Y hy -1461
Y - -1461
Y en -1461
@@ -387,7 +384,6 @@ b cq -1461
b ' -1461
a cq -975
a ' -975
-V char173 -486
V hy -486
V - -486
V en -486
@@ -398,7 +394,6 @@ n cq -975
n ' -975
m cq -975
m ' -975
-W char173 -486
W hy -486
W - -486
W en -486
@@ -407,39 +402,32 @@ cq d -975
' d -975
s cq -975
s ' -975
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -975
A hy -975
A - -975
A en -975
A em -975
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -975
' s -975
-char173 X -1461
hy X -1461
- X -1461
-char173 A -975
hy A -975
- A -975
en X -1461
en A -975
em X -1461
b f -486
-Z char173 -486
Z hy -486
Z - -486
Z en -486
@@ -461,8 +449,7 @@ cq 5856,18135 2 51751
* 12684,18495 2 3626
+ 17565,12810 0 3627
, 5856,3465,2430 0 3628
-char173 5856,7710 0 3629
-hy "
+hy 5856,7710 0 3629
- "
. 5856,3330 0 3630
sl 5856,18165,2430 2 3631
@@ -554,198 +541,109 @@ ba 13173,19758,6588 3 3708
rC 13173,20130,6075 3 3709
} "
ti 26346,9435 0 51876
-char192 14637,23130 2 3776
-`A "
-char194 14637,23130 2 3778
-^A "
-char200 12198,23130 2 3784
-`E "
-char202 12198,23130 2 3786
-^E "
-char203 12198,22815 2 3787
-:E "
-char206 6831,23130 2 3790
-^I "
-char207 6831,22815 2 3791
-:I "
-char180 12684,18285 2 3764
-aa "
+`A 14637,23130 2 3776
+^A 14637,23130 2 3778
+`E 12198,23130 2 3784
+^E 12198,23130 2 3786
+:E 12198,22815 2 3787
+^I 6831,23130 2 3790
+:I 6831,22815 2 3791
+aa 12684,18285 2 3764
ga 12684,18285 2 3680
a^ 12684,18285 2 3678
^ "
-char168 12684,18225 2 3752
-ad "
+ad 12684,18225 2 3752
a~ 12684,17874 2 3710
~ "
-char217 14637,23130,255 2 3801
-`U "
-char219 14637,23130,255 2 3803
-^U "
-char221 13662,23130 2 3805
-'Y "
-char253 11709,18285,4680 3 3837
-'y "
-char176 12684,18360 2 3760
-de "
-char199 13662,18390,5580 3 3783
-,C "
-char231 10734,12885,5190 1 3815
-,c "
-char209 15126,23031 2 3793
-~N "
-char241 12198,17874 2 3825
-~n "
-char161 7806,12630,5505 1 3745
-r! "
-char191 11709,12576,5814 1 3775
-r? "
-char164 12684,15834 0 3748
-Cs "
-char163 12684,18360 2 3747
-Po "
-char165 12684,18105 2 3749
-Ye "
-char167 12684,18495,600 2 3751
-sc "
+`U 14637,23130,255 2 3801
+^U 14637,23130,255 2 3803
+'Y 13662,23130 2 3805
+'y 11709,18285,4680 3 3837
+de 12684,18360 2 3760
+,C 13662,18390,5580 3 3783
+,c 10734,12885,5190 1 3815
+~N 15126,23031 2 3793
+~n 12198,17874 2 3825
+r! 7806,12630,5505 1 3745
+r? 11709,12576,5814 1 3775
+Cs 12684,15834 0 3748
+Po 12684,18360 2 3747
+Ye 12684,18105 2 3749
+sc 12684,18495,600 2 3751
Fn 12684,18315 2 51871
-char162 12684,18705,765 2 3746
-ct "
-char226 11709,18285,255 2 3810
-^a "
-char234 11220,18285,255 2 3818
-^e "
-char244 11709,18285,255 2 3828
-^o "
-char251 12198,18285,255 2 3835
-^u "
-char225 11709,18285,255 2 3809
-'a "
-char233 11220,18285,255 2 3817
-'e "
-char243 11709,18285,255 2 3827
-'o "
-char250 12198,18285,255 2 3834
-'u "
-char224 11709,18285,255 2 3808
-`a "
-char232 11220,18285,255 2 3816
-`e "
-char242 11709,18285,255 2 3826
-`o "
-char249 12198,18285,255 2 3833
-`u "
-char228 11709,18225,255 2 3812
-:a "
-char235 11220,18225,255 2 3819
-:e "
-char246 11709,18225,255 2 3830
-:o "
-char252 12198,18225,255 2 3836
-:u "
-char197 14637,25080 2 3781
-oA "
-char238 6342,18285 2 3822
-^i "
-char216 14637,19890,2019 2 3800
-/O "
-char198 20490,18135 2 3782
-AE "
-char229 11709,19455,255 2 3813
-oa "
-char237 6342,18285 2 3821
-'i "
-char248 11709,14256,2172 0 3832
-/o "
-char230 17565,12885,255 0 3814
-ae "
-char196 14637,22815 2 3780
-:A "
-char236 6342,18285 2 3820
-`i "
-char214 14637,22815,255 2 3798
-:O "
-char220 14637,22815,255 2 3804
-:U "
-char201 12198,23130 2 3785
-'E "
-char239 6342,18225 2 3823
-:i "
-char223 13173,18315,255 2 3807
-ss "
-char212 14637,23130,255 2 3796
-^O "
-char193 14637,23130 2 3777
-'A "
-char195 14637,23031 2 3779
-~A "
-char227 11709,17874,255 2 3811
-~a "
-char208 14637,18135 2 3792
--D "
-char240 11709,18573,255 2 3824
-Sd "
-char205 6831,23130 2 3789
-'I "
-char204 6831,23130 2 3788
-`I "
-char211 14637,23130,255 2 3795
-'O "
-char210 14637,23130,255 2 3794
-`O "
-char213 14637,23031,255 2 3797
-~O "
-char245 11709,17874,255 2 3829
-~o "
+ct 12684,18705,765 2 3746
+^a 11709,18285,255 2 3810
+^e 11220,18285,255 2 3818
+^o 11709,18285,255 2 3828
+^u 12198,18285,255 2 3835
+'a 11709,18285,255 2 3809
+'e 11220,18285,255 2 3817
+'o 11709,18285,255 2 3827
+'u 12198,18285,255 2 3834
+`a 11709,18285,255 2 3808
+`e 11220,18285,255 2 3816
+`o 11709,18285,255 2 3826
+`u 12198,18285,255 2 3833
+:a 11709,18225,255 2 3812
+:e 11220,18225,255 2 3819
+:o 11709,18225,255 2 3830
+:u 12198,18225,255 2 3836
+oA 14637,25080 2 3781
+^i 6342,18285 2 3822
+/O 14637,19890,2019 2 3800
+AE 20490,18135 2 3782
+oa 11709,19455,255 2 3813
+'i 6342,18285 2 3821
+/o 11709,14256,2172 0 3832
+ae 17565,12885,255 0 3814
+:A 14637,22815 2 3780
+`i 6342,18285 2 3820
+:O 14637,22815,255 2 3798
+:U 14637,22815,255 2 3804
+'E 12198,23130 2 3785
+:i 6342,18225 2 3823
+ss 13173,18315,255 2 3807
+^O 14637,23130,255 2 3796
+'A 14637,23130 2 3777
+~A 14637,23031 2 3779
+~a 11709,17874,255 2 3811
+-D 14637,18135 2 3792
+Sd 11709,18573,255 2 3824
+'I 6831,23130 2 3789
+`I 6831,23130 2 3788
+'O 14637,23130,255 2 3795
+`O 14637,23130,255 2 3794
+~O 14637,23031,255 2 3797
+~o 11709,17874,255 2 3829
vS 14148,23130,255 2 51795
vs 10734,18285,255 2 51827
-char218 14637,23130,255 2 3802
-'U "
+'U 14637,23130,255 2 3802
:Y 13662,22815 2 51801
-char255 11709,18225,4680 3 3839
-:y "
-char222 13662,18135 2 3806
-TP "
-char254 11709,18165,4995 3 3838
-Tp "
-char181 15612,12630,4680 1 3765
-char182 12684,19635,4200 2 3766
-ps "
-char190 17565,18765,900 2 3774
-34 "
+:y 11709,18225,4680 3 3839
+TP 13662,18135 2 3806
+Tp 11709,18165,4995 3 3838
+mc 15612,12630,4680 1 3765
+ps 12684,19635,4200 2 3766
+34 17565,18765,900 2 3774
\- 17565,7740 0 51757
-char188 17565,18765,900 2 3772
-14 "
-char189 17565,18765,900 2 3773
-12 "
-char170 10734,18360 2 3754
-Of "
-char186 10734,18360 2 3770
-Om "
-char171 11709,11070 0 3755
-Fo "
-char187 11709,11070 0 3771
-Fc "
-char177 17565,12810,2520 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 17565,10320 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 8295,18465 2 3762
-S2 "
-char179 8295,18465 2 3763
-S3 "
-char184 12684,195258,5190 3 3768
-ac "
-char185 8295,18345 2 3769
-S1 "
-char215 17565,12345 0 3799
-char247 17565,12015 0 3831
-char183 5856,10251 0 3767
-pc "
+14 17565,18765,900 2 3772
+12 17565,18765,900 2 3773
+Of 10734,18360 2 3754
+Om 10734,18360 2 3770
+Fo 11709,11070 0 3755
+Fc 11709,11070 0 3771
+t+- 17565,12810,2520 0 3761
+bb 13173,19083,5916 3 3750
+co 13173,19635 2 3753
+no 17565,10320 0 3756
+rg 13173,19635 2 3758
+S2 8295,18465 2 3762
+S3 8295,18465 2 3763
+ac 12684,195258,5190 3 3768
+S1 8295,18345 2 3769
+tmu 17565,12345 0 3799
+tdi 17565,12015 0 3831
+pc 5856,10251 0 3767
fm 5856,18105 2 51873
sd 12684,18105 2 51874
dg 12684,18135 2 51755
@@ -773,8 +671,7 @@ Fl 20979,18315 2 51885
ij 12684,18165,4995 3 51958
bq 5856,3513,2382 0 51756
%0 26346,18765,900 2 51901
-char175 12684,17595 2 3759
-a- "
+a- 12684,17595 2 3759
ab 12684,18285 2 51926
a. 12684,18345 2 51927
oe 17565,12885,255 0 51823
diff --git a/contrib/groff/font/devlj4/UCBI b/contrib/groff/font/devlj4/UCBI
index d1876c1..5088b04 100644
--- a/contrib/groff/font/devlj4/UCBI
+++ b/contrib/groff/font/devlj4/UCBI
@@ -271,19 +271,16 @@ A s -486
K a -486
L cq -3903
L ' -3903
-T char173 -1950
T hy -1950
T - -1950
T en -1950
T em -1950
A cq -1461
A ' -1461
-char173 T -2439
hy T -2439
- T -2439
en T -2439
em T -2439
-Y char173 -975
Y hy -975
Y - -975
Y en -975
@@ -298,7 +295,6 @@ b cq -1461
b ' -1461
a cq -975
a ' -975
-V char173 -486
V hy -486
V - -486
V en -486
@@ -309,7 +305,6 @@ n cq -975
n ' -975
m cq -975
m ' -975
-W char173 -486
W hy -486
W - -486
W en -486
@@ -318,36 +313,29 @@ cq d -975
' d -975
s cq -486
s ' -486
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -975
X hy -975
X - -975
X en -975
X em -975
-A char173 -486
A hy -486
A - -486
A en -486
A em -486
-K char173 -975
K hy -975
K - -975
K en -975
K em -975
-char173 X -975
hy X -975
- X -975
-char173 A -486
hy A -486
- A -486
en X -975
en A -486
em X -975
-Z char173 -486
Z hy -486
Z - -486
Z en -486
@@ -369,8 +357,7 @@ cq 5856,18135,0,4215,-1392,994 2 51751
* 12684,18390,0,1635,-3465,994 2 3626
+ 17565,12810,0,0,-1431 0 3627
, 5856,3465,2370,0,3042 0 3628
-char173 5856,7785,0,726,585,726 0 3629
-hy "
+hy 5856,7785,0,726,585,726 0 3629
- "
. 5856,3465,0,0,1917 0 3630
sl 5856,18165,2430,4518,3396,994 2 3631
@@ -462,198 +449,109 @@ ba 13173,19758,6588,0,-4596 3 3708
rC 13173,20130,6075,0,3510 3 3709
} "
ti 26346,9435,0,0,-4029 0 51876
-char192 14637,23100,0,0,2460 2 3776
-`A "
-char194 14637,23100,0,1626,2460,994 2 3778
-^A "
-char200 12198,23100,0,3423,1440,994 2 3784
-`E "
-char202 12198,23100,0,3423,1440,994 2 3786
-^E "
-char203 12198,23265,0,3948,1440,994 2 3787
-:E "
-char206 6831,23100,0,5529,1641,994 2 3790
-^I "
-char207 6831,23265,0,6630,1641,994 2 3791
-:I "
-char180 12684,18225,0,1785,-5265,994 2 3764
-aa "
+`A 14637,23100,0,0,2460 2 3776
+^A 14637,23100,0,1626,2460,994 2 3778
+`E 12198,23100,0,3423,1440,994 2 3784
+^E 12198,23100,0,3423,1440,994 2 3786
+:E 12198,23265,0,3948,1440,994 2 3787
+^I 6831,23100,0,5529,1641,994 2 3790
+:I 6831,23265,0,6630,1641,994 2 3791
+aa 12684,18225,0,1785,-5265,994 2 3764
ga 12684,18225,0,0,-5271 2 3680
a^ 12684,18225,0,702,-3897,702 2 3678
^ "
-char168 12684,18120,0,2067,-3990,994 2 3752
-ad "
+ad 12684,18120,0,2067,-3990,994 2 3752
a~ 12684,17811,0,1560,-3786,994 2 3710
~ "
-char217 14637,23100,255,3147,72,994 2 3801
-`U "
-char219 14637,23100,255,3147,72,994 2 3803
-^U "
-char221 13662,23100,0,4230,-1767,994 2 3805
-'Y "
-char253 11709,18225,4680,2457,1983,994 3 3837
-'y "
-char176 12684,18360,0,1377,-3201,994 2 3760
-de "
-char199 13662,18390,5295,2247,375,994 3 3783
-,C "
-char231 10734,12885,5205,1290,1419,994 1 3815
-,c "
-char209 15126,22833,0,3003,1431,994 2 3793
-~N "
-char241 12198,17811,0,1803,1734,994 2 3825
-~n "
-char161 7806,12615,5520,936,2685,936 1 3745
-r! "
-char191 11709,12600,5790,0,2256 1 3775
-r? "
-char164 12684,15834,0,2757,1125,994 0 3748
-Cs "
-char163 12684,18360,0,2571,1257,994 2 3747
-Po "
-char165 12684,18105,0,4791,834,994 2 3749
-Ye "
-char167 12684,18390,255,174,-1545,174 2 3751
-sc "
+`U 14637,23100,255,3147,72,994 2 3801
+^U 14637,23100,255,3147,72,994 2 3803
+'Y 13662,23100,0,4230,-1767,994 2 3805
+'y 11709,18225,4680,2457,1983,994 3 3837
+de 12684,18360,0,1377,-3201,994 2 3760
+,C 13662,18390,5295,2247,375,994 3 3783
+,c 10734,12885,5205,1290,1419,994 1 3815
+~N 15126,22833,0,3003,1431,994 2 3793
+~n 12198,17811,0,1803,1734,994 2 3825
+r! 7806,12615,5520,936,2685,936 1 3745
+r? 11709,12600,5790,0,2256 1 3775
+Cs 12684,15834,0,2757,1125,994 0 3748
+Po 12684,18360,0,2571,1257,994 2 3747
+Ye 12684,18105,0,4791,834,994 2 3749
+sc 12684,18390,255,174,-1545,174 2 3751
Fn 12684,18315,0,2196,-1392,994 2 51871
-char162 12684,18840,570,1299,-636,994 2 3746
-ct "
-char226 11709,18225,255,1188,1161,994 2 3810
-^a "
-char234 11220,18225,255,1434,1023,994 2 3818
-^e "
-char244 11709,18225,255,1188,927,994 2 3828
-^o "
-char251 12198,18225,255,1764,849,994 2 3835
-^u "
-char225 11709,18225,255,2271,1161,994 2 3809
-'a "
-char233 11220,18225,255,2517,1023,994 2 3817
-'e "
-char243 11709,18225,255,2271,927,994 2 3827
-'o "
-char250 12198,18225,255,2028,849,994 2 3834
-'u "
-char224 11709,18225,255,999,1161,994 2 3808
-`a "
-char232 11220,18225,255,1140,1023,994 2 3816
-`e "
-char242 11709,18225,255,990,927,990 2 3826
-`o "
-char249 12198,18225,255,1764,849,994 2 3833
-`u "
-char228 11709,18120,255,2553,1161,994 2 3812
-:a "
-char235 11220,18120,255,2799,1023,994 2 3819
-:e "
-char246 11709,18120,255,2553,927,994 2 3830
-:o "
-char252 12198,18120,255,2310,849,994 2 3836
-:u "
-char197 14637,25164,0,1713,2460,994 2 3781
-oA "
-char238 6342,18225,0,3873,1713,994 2 3822
-^i "
-char216 14637,19854,1755,1872,204,994 2 3800
-/O "
-char198 20490,18135,0,2688,3147,994 2 3782
-AE "
-char229 11709,19089,255,1488,1161,994 2 3813
-oa "
-char237 6342,18225,0,5760,1713,994 2 3821
-'i "
-char248 11709,14208,1830,993,927,993 0 3832
-/o "
-char230 17565,12885,255,924,966,924 0 3814
-ae "
-char196 14637,23265,0,2727,2460,994 2 3780
-:A "
-char236 6342,18225,0,2367,1713,994 2 3820
-`i "
-char214 14637,23265,255,2727,204,994 2 3798
-:O "
-char220 14637,23265,255,3147,72,994 2 3804
-:U "
-char201 12198,23100,0,3660,1440,994 2 3785
-'E "
-char239 6342,18120,0,5238,1713,994 2 3823
-:i "
-char223 13173,18165,0,1956,1704,994 2 3807
-ss "
-char212 14637,23100,255,1872,204,994 2 3796
-^O "
-char193 14637,23100,0,2439,2460,994 2 3777
-'A "
-char195 14637,22833,0,2379,2460,994 2 3779
-~A "
-char227 11709,17811,255,2046,1161,994 2 3811
-~a "
-char208 14637,18135,0,1851,1398,994 2 3792
--D "
-char240 11709,18756,255,1419,936,994 2 3824
-Sd "
-char205 6831,23100,0,6342,1641,994 2 3789
-'I "
-char204 6831,23100,0,3732,1641,994 2 3788
-`I "
-char211 14637,23100,255,2439,204,994 2 3795
-'O "
-char210 14637,23100,255,1872,204,994 2 3794
-`O "
-char213 14637,22833,255,2379,204,994 2 3797
-~O "
-char245 11709,17811,255,2046,927,994 2 3829
-~o "
+ct 12684,18840,570,1299,-636,994 2 3746
+^a 11709,18225,255,1188,1161,994 2 3810
+^e 11220,18225,255,1434,1023,994 2 3818
+^o 11709,18225,255,1188,927,994 2 3828
+^u 12198,18225,255,1764,849,994 2 3835
+'a 11709,18225,255,2271,1161,994 2 3809
+'e 11220,18225,255,2517,1023,994 2 3817
+'o 11709,18225,255,2271,927,994 2 3827
+'u 12198,18225,255,2028,849,994 2 3834
+`a 11709,18225,255,999,1161,994 2 3808
+`e 11220,18225,255,1140,1023,994 2 3816
+`o 11709,18225,255,990,927,990 2 3826
+`u 12198,18225,255,1764,849,994 2 3833
+:a 11709,18120,255,2553,1161,994 2 3812
+:e 11220,18120,255,2799,1023,994 2 3819
+:o 11709,18120,255,2553,927,994 2 3830
+:u 12198,18120,255,2310,849,994 2 3836
+oA 14637,25164,0,1713,2460,994 2 3781
+^i 6342,18225,0,3873,1713,994 2 3822
+/O 14637,19854,1755,1872,204,994 2 3800
+AE 20490,18135,0,2688,3147,994 2 3782
+oa 11709,19089,255,1488,1161,994 2 3813
+'i 6342,18225,0,5760,1713,994 2 3821
+/o 11709,14208,1830,993,927,993 0 3832
+ae 17565,12885,255,924,966,924 0 3814
+:A 14637,23265,0,2727,2460,994 2 3780
+`i 6342,18225,0,2367,1713,994 2 3820
+:O 14637,23265,255,2727,204,994 2 3798
+:U 14637,23265,255,3147,72,994 2 3804
+'E 12198,23100,0,3660,1440,994 2 3785
+:i 6342,18120,0,5238,1713,994 2 3823
+ss 13173,18165,0,1956,1704,994 2 3807
+^O 14637,23100,255,1872,204,994 2 3796
+'A 14637,23100,0,2439,2460,994 2 3777
+~A 14637,22833,0,2379,2460,994 2 3779
+~a 11709,17811,255,2046,1161,994 2 3811
+-D 14637,18135,0,1851,1398,994 2 3792
+Sd 11709,18756,255,1419,936,994 2 3824
+'I 6831,23100,0,6342,1641,994 2 3789
+`I 6831,23100,0,3732,1641,994 2 3788
+'O 14637,23100,255,2439,204,994 2 3795
+`O 14637,23100,255,1872,204,994 2 3794
+~O 14637,22833,255,2379,204,994 2 3797
+~o 11709,17811,255,2046,927,994 2 3829
vS 14148,23100,255,2754,495,994 2 51795
vs 10734,18225,255,2754,1380,994 2 51827
-char218 14637,23100,255,3147,72,994 2 3802
-'U "
+'U 14637,23100,255,3147,72,994 2 3802
:Y 13662,23265,0,4230,-1767,994 2 51801
-char255 11709,18120,4680,2553,1983,994 3 3839
-:y "
-char222 13662,18135,0,1518,1470,994 2 3806
-TP "
-char254 11709,18165,4680,1098,3417,994 3 3838
-Tp "
-char181 15612,12630,4680,1422,2907,994 1 3765
-char182 12684,19635,4200,2046,-1215,994 2 3766
-ps "
-char190 17565,18465,1050,1788,-174,994 2 3774
-34 "
+:y 11709,18120,4680,2553,1983,994 3 3839
+TP 13662,18135,0,1518,1470,994 2 3806
+Tp 11709,18165,4680,1098,3417,994 3 3838
+mc 15612,12630,4680,1422,2907,994 1 3765
+ps 12684,19635,4200,2046,-1215,994 2 3766
+34 17565,18465,1050,1788,-174,994 2 3774
\- 17565,7740,0,0,-1455 0 51757
-char188 17565,18345,1050,639,975,639 2 3772
-14 "
-char189 17565,18345,1050,165,1449,165 2 3773
-12 "
-char170 10734,18360,0,1965,-2322,994 2 3754
-Of "
-char186 10734,18360,0,1956,-2496,994 2 3770
-Om "
-char171 11709,10965,0,1749,306,994 0 3755
-Fo "
-char187 11709,10965,0,219,1836,219 0 3771
-Fc "
-char177 17565,12810,2520,0,-1431 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,4629,-2838,994 2 3753
-co "
-char172 17565,10320,0,0,-1455 0 3756
-no "
-char174 13173,19635,0,4629,-2838,994 2 3758
-rg "
-char178 8295,18465,0,2814,-432,994 2 3762
-S2 "
-char179 8295,18465,0,2817,-1047,994 2 3763
-S3 "
-char184 12684,195183,5205,0,444 3 3768
-ac "
-char185 8295,18345,0,1920,-2586,994 2 3769
-S1 "
-char215 17565,12345,0,0,-2448 0 3799
-char247 17565,12015,0,0,-1446 0 3831
-char183 5856,10671,0,1371,-189,994 0 3767
-pc "
+14 17565,18345,1050,639,975,639 2 3772
+12 17565,18345,1050,165,1449,165 2 3773
+Of 10734,18360,0,1965,-2322,994 2 3754
+Om 10734,18360,0,1956,-2496,994 2 3770
+Fo 11709,10965,0,1749,306,994 0 3755
+Fc 11709,10965,0,219,1836,219 0 3771
+t+- 17565,12810,2520,0,-1431 0 3761
+bb 13173,19083,5916,0,-4596 3 3750
+co 13173,19635,0,4629,-2838,994 2 3753
+no 17565,10320,0,0,-1455 0 3756
+rg 13173,19635,0,4629,-2838,994 2 3758
+S2 8295,18465,0,2814,-432,994 2 3762
+S3 8295,18465,0,2817,-1047,994 2 3763
+ac 12684,195183,5205,0,444 3 3768
+S1 8295,18345,0,1920,-2586,994 2 3769
+tmu 17565,12345,0,0,-2448 0 3799
+tdi 17565,12015,0,0,-1446 0 3831
+pc 5856,10671,0,1371,-189,994 0 3767
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
@@ -681,8 +579,7 @@ Fl 20979,18315,0,3537,978,994 2 51885
ij 12684,18165,4995,3432,1722,994 3 51958
bq 5856,3459,2376,57,2766,57 0 51756
%0 26346,18465,1050,450,-201,450 2 51901
-char175 12684,16386,0,927,-4566,927 0 3759
-a- "
+a- 12684,16386,0,927,-4566,927 0 3759
ab 12684,18195,0,1674,-4344,994 2 51926
a. 12684,18120,0,0,-5505 2 51927
oe 17565,12885,255,903,948,903 0 51823
diff --git a/contrib/groff/font/devlj4/UCI b/contrib/groff/font/devlj4/UCI
index 4214f49..bab7fc6 100644
--- a/contrib/groff/font/devlj4/UCI
+++ b/contrib/groff/font/devlj4/UCI
@@ -397,19 +397,16 @@ E s -486
U s -486
L cq -3414
L ' -3414
-T char173 -3414
T hy -3414
T - -3414
T en -3414
T em -3414
A cq -1461
A ' -1461
-char173 T -3414
hy T -3414
- T -3414
en T -3414
em T -3414
-Y char173 -1461
Y hy -1461
Y - -1461
Y en -1461
@@ -424,7 +421,6 @@ b cq -1950
b ' -1950
a cq -1950
a ' -1950
-V char173 -486
V hy -486
V - -486
V en -486
@@ -435,7 +431,6 @@ n cq -1461
n ' -1461
m cq -1461
m ' -1461
-W char173 -486
W hy -486
W - -486
W en -486
@@ -444,32 +439,26 @@ cq d -486
' d -486
s cq -975
s ' -975
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -486
X hy -486
X - -486
X en -486
X em -486
-A char173 -486
A hy -486
A - -486
A en -486
A em -486
-K char173 -975
K hy -975
K - -975
K en -975
K em -975
cq s -486
' s -486
-char173 X -486
hy X -486
- X -486
-char173 A -486
hy A -486
- A -486
en X -486
@@ -479,17 +468,14 @@ v cq -486
v ' -486
C cq -486
C ' -486
-Z char173 -486
Z hy -486
Z - -486
Z en -486
Z em -486
-v char173 -486
v hy -486
v - -486
v en -486
v em -486
-C char173 -486
C hy -486
C - -486
C en -486
@@ -511,8 +497,7 @@ cq 5856,18135,0,3690,-1482,996 2 51751
* 12198,18390,0,1251,-3045,996 2 3626
+ 17565,12495,0,0,-2097 0 3627
, 5856,2970,2730,0,2856 0 3628
-char173 5856,7560,0,534,348,534 0 3629
-hy "
+hy 5856,7560,0,534,348,534 0 3629
- "
. 5856,2970,0,0,1347 0 3630
sl 5856,18165,1980,4254,3456,996 2 3631
@@ -604,198 +589,109 @@ ba 13173,19758,6588,0,-4596 3 3708
rC 11709,20130,6075,0,2577 3 3709
} "
ti 26346,8952,0,0,-4029 0 51876
-char192 13662,23640,0,0,2325 2 3776
-`A "
-char194 13662,23415,0,1611,2325,996 2 3778
-^A "
-char200 11220,23640,0,3267,1563,996 2 3784
-`E "
-char202 11220,23415,0,3267,1563,996 2 3786
-^E "
-char203 11220,22560,0,3693,1563,996 2 3787
-:E "
-char206 5856,23415,0,5514,1566,996 2 3790
-^I "
-char207 5856,22560,0,6375,1566,996 2 3791
-:I "
-char180 12198,18165,0,1326,-5685,996 2 3764
-aa "
+`A 13662,23640,0,0,2325 2 3776
+^A 13662,23415,0,1611,2325,996 2 3778
+`E 11220,23640,0,3267,1563,996 2 3784
+^E 11220,23415,0,3267,1563,996 2 3786
+:E 11220,22560,0,3693,1563,996 2 3787
+^I 5856,23415,0,5514,1566,996 2 3790
+:I 5856,22560,0,6375,1566,996 2 3791
+aa 12198,18165,0,1326,-5685,996 2 3764
ga 12198,18165,0,0,-4539 2 3680
a^ 12198,17940,0,795,-3729,795 2 3678
^ "
-char168 12198,17355,0,1464,-3699,996 2 3752
-ad "
+ad 12198,17355,0,1464,-3699,996 2 3752
a~ 12198,17652,0,1776,-3729,996 2 3710
~ "
-char217 13662,23640,255,2892,363,996 2 3801
-`U "
-char219 13662,23415,255,2892,363,996 2 3803
-^U "
-char221 12198,23640,0,4026,-1473,996 2 3805
-'Y "
-char253 10734,18165,4680,2364,1923,996 3 3837
-'y "
-char176 12198,18360,0,1284,-2982,996 2 3760
-de "
-char199 13173,18390,4995,1860,540,996 3 3783
-,C "
-char231 10245,12885,4995,1047,2838,996 1 3815
-,c "
-char209 14148,22743,0,3030,1638,996 2 3793
-~N "
-char241 10734,17652,0,2508,1824,996 2 3825
-~n "
-char161 7806,13041,5094,861,1971,861 1 3745
-r! "
-char191 11220,12591,5799,0,2016 1 3775
-r? "
-char164 12198,15684,0,2514,468,996 0 3748
-Cs "
-char163 12198,18360,0,2223,522,996 2 3747
-Po "
-char165 12198,18105,0,4137,1266,996 2 3749
-Ye "
-char167 12198,18390,255,96,-1509,96 2 3751
-sc "
+`U 13662,23640,255,2892,363,996 2 3801
+^U 13662,23415,255,2892,363,996 2 3803
+'Y 12198,23640,0,4026,-1473,996 2 3805
+'y 10734,18165,4680,2364,1923,996 3 3837
+de 12198,18360,0,1284,-2982,996 2 3760
+,C 13173,18390,4995,1860,540,996 3 3783
+,c 10245,12885,4995,1047,2838,996 1 3815
+~N 14148,22743,0,3030,1638,996 2 3793
+~n 10734,17652,0,2508,1824,996 2 3825
+r! 7806,13041,5094,861,1971,861 1 3745
+r? 11220,12591,5799,0,2016 1 3775
+Cs 12198,15684,0,2514,468,996 0 3748
+Po 12198,18360,0,2223,522,996 2 3747
+Ye 12198,18105,0,4137,1266,996 2 3749
+sc 12198,18390,255,96,-1509,96 2 3751
Fn 12198,18315,0,1662,-1329,996 2 51871
-char162 12198,18465,630,873,-1005,873 2 3746
-ct "
-char226 10734,17940,255,1527,1242,996 2 3810
-^a "
-char234 10245,17940,255,1770,1065,996 2 3818
-^e "
-char244 10734,17940,255,1527,825,996 2 3828
-^o "
-char251 10734,17940,255,1800,1011,996 2 3835
-^u "
-char225 10734,18165,255,2058,1242,996 2 3809
-'a "
-char233 10245,18165,255,2301,1065,996 2 3817
-'e "
-char243 10734,18165,255,2058,825,996 2 3827
-'o "
-char250 10734,18165,255,2058,1011,996 2 3834
-'u "
-char224 10734,18165,255,918,1242,918 2 3808
-`a "
-char232 10245,18165,255,1245,1065,996 2 3816
-`e "
-char242 10734,18165,255,1047,825,996 2 3826
-`o "
-char249 10734,18165,255,1800,1011,996 2 3833
-`u "
-char228 10734,17355,255,2478,1242,996 2 3812
-:a "
-char235 10245,17355,255,2721,1065,996 2 3819
-:e "
-char246 10734,17355,255,2478,825,996 2 3830
-:o "
-char252 10734,17355,255,2478,1011,996 2 3836
-:u "
-char197 13662,24480,0,1125,2325,996 2 3781
-oA "
-char238 5856,17940,0,3966,1425,996 2 3822
-^i "
-char216 13662,19944,1833,1989,555,996 2 3800
-/O "
-char198 18540,18135,0,2904,2310,996 2 3782
-AE "
-char229 10734,19005,255,918,1242,918 2 3813
-oa "
-char237 5856,18165,0,4779,1425,996 2 3821
-'i "
-char248 10734,14238,1866,1050,930,996 0 3832
-/o "
-char230 16587,12885,255,681,957,681 0 3814
-ae "
-char196 13662,22560,0,2472,2325,996 2 3780
-:A "
-char236 5856,18165,0,1461,1425,996 2 3820
-`i "
-char214 13662,22560,255,2472,447,996 2 3798
-:O "
-char220 13662,22560,255,2892,363,996 2 3804
-:U "
-char201 11220,23640,0,3267,1563,996 2 3785
-'E "
-char239 5856,17355,0,5118,1425,996 2 3823
-:i "
-char223 11709,18315,255,1839,1917,996 2 3807
-ss "
-char212 13662,23415,255,1875,447,996 2 3796
-^O "
-char193 13662,23640,0,1884,2325,996 2 3777
-'A "
-char195 13662,22743,0,2355,2325,996 2 3779
-~A "
-char227 10734,17652,255,2508,1242,996 2 3811
-~a "
-char208 13662,18135,0,1749,1557,996 2 3792
--D "
-char240 10734,18579,255,2247,927,996 2 3824
-Sd "
-char205 5856,23640,0,6393,1566,996 2 3789
-'I "
-char204 5856,23640,0,3258,1566,996 2 3788
-`I "
-char211 13662,23640,255,1884,447,996 2 3795
-'O "
-char210 13662,23640,255,1875,447,996 2 3794
-`O "
-char213 13662,22743,255,2355,447,996 2 3797
-~O "
-char245 10734,17652,255,2508,825,996 2 3829
-~o "
+ct 12198,18465,630,873,-1005,873 2 3746
+^a 10734,17940,255,1527,1242,996 2 3810
+^e 10245,17940,255,1770,1065,996 2 3818
+^o 10734,17940,255,1527,825,996 2 3828
+^u 10734,17940,255,1800,1011,996 2 3835
+'a 10734,18165,255,2058,1242,996 2 3809
+'e 10245,18165,255,2301,1065,996 2 3817
+'o 10734,18165,255,2058,825,996 2 3827
+'u 10734,18165,255,2058,1011,996 2 3834
+`a 10734,18165,255,918,1242,918 2 3808
+`e 10245,18165,255,1245,1065,996 2 3816
+`o 10734,18165,255,1047,825,996 2 3826
+`u 10734,18165,255,1800,1011,996 2 3833
+:a 10734,17355,255,2478,1242,996 2 3812
+:e 10245,17355,255,2721,1065,996 2 3819
+:o 10734,17355,255,2478,825,996 2 3830
+:u 10734,17355,255,2478,1011,996 2 3836
+oA 13662,24480,0,1125,2325,996 2 3781
+^i 5856,17940,0,3966,1425,996 2 3822
+/O 13662,19944,1833,1989,555,996 2 3800
+AE 18540,18135,0,2904,2310,996 2 3782
+oa 10734,19005,255,918,1242,918 2 3813
+'i 5856,18165,0,4779,1425,996 2 3821
+/o 10734,14238,1866,1050,930,996 0 3832
+ae 16587,12885,255,681,957,681 0 3814
+:A 13662,22560,0,2472,2325,996 2 3780
+`i 5856,18165,0,1461,1425,996 2 3820
+:O 13662,22560,255,2472,447,996 2 3798
+:U 13662,22560,255,2892,363,996 2 3804
+'E 11220,23640,0,3267,1563,996 2 3785
+:i 5856,17355,0,5118,1425,996 2 3823
+ss 11709,18315,255,1839,1917,996 2 3807
+^O 13662,23415,255,1875,447,996 2 3796
+'A 13662,23640,0,1884,2325,996 2 3777
+~A 13662,22743,0,2355,2325,996 2 3779
+~a 10734,17652,255,2508,1242,996 2 3811
+-D 13662,18135,0,1749,1557,996 2 3792
+Sd 10734,18579,255,2247,927,996 2 3824
+'I 5856,23640,0,6393,1566,996 2 3789
+`I 5856,23640,0,3258,1566,996 2 3788
+'O 13662,23640,255,1884,447,996 2 3795
+`O 13662,23640,255,1875,447,996 2 3794
+~O 13662,22743,255,2355,447,996 2 3797
+~o 10734,17652,255,2508,825,996 2 3829
vS 12684,23415,255,3015,978,996 2 51795
vs 9759,17940,255,2751,1314,996 2 51827
-char218 13662,23640,255,2892,363,996 2 3802
-'U "
+'U 13662,23640,255,2892,363,996 2 3802
:Y 12198,22560,0,4026,-1473,996 2 51801
-char255 10734,17355,4680,2364,1923,996 3 3839
-:y "
-char222 12198,18135,0,1260,1407,996 2 3806
-TP "
-char254 10734,18165,4680,969,3273,969 3 3838
-Tp "
-char181 14637,12630,4350,1122,2931,996 0 3765
-char182 12198,19635,4200,1923,-606,996 2 3766
-ps "
-char190 17565,18675,918,891,-987,891 2 3774
-34 "
+:y 10734,17355,4680,2364,1923,996 3 3839
+TP 12198,18135,0,1260,1407,996 2 3806
+Tp 10734,18165,4680,969,3273,969 3 3838
+mc 14637,12630,4350,1122,2931,996 0 3765
+ps 12198,19635,4200,1923,-606,996 2 3766
+34 17565,18675,918,891,-987,891 2 3774
\- 17565,8175,0,0,-2097 0 51757
-char188 17565,18675,918,183,-279,183 2 3772
-14 "
-char189 17565,18675,918,0,156 2 3773
-12 "
-char170 7806,18360,0,3285,-1188,996 2 3754
-Of "
-char186 7806,18360,0,3303,-1197,996 2 3770
-Om "
-char171 11709,11160,0,741,-426,741 0 3755
-Fo "
-char187 11709,11160,0,0,777 0 3771
-Fc "
-char177 17565,12210,213,0,-2133 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,4470,-2679,996 2 3753
-co "
-char172 17565,10185,0,0,-2097 0 3756
-no "
-char174 13173,19635,0,4470,-2679,996 2 3758
-rg "
-char178 7317,18465,0,3258,-300,996 2 3762
-S2 "
-char179 7317,18465,0,3042,-957,996 2 3763
-S3 "
-char184 12198,195108,4995,0,1860 3 3768
-ac "
-char185 7317,18345,0,2562,-2493,996 2 3769
-S1 "
-char215 17565,12216,0,0,-2850 0 3799
-char247 17565,11610,0,0,-2667 0 3831
-char183 5856,10578,0,1095,-723,996 0 3767
-pc "
+14 17565,18675,918,183,-279,183 2 3772
+12 17565,18675,918,0,156 2 3773
+Of 7806,18360,0,3285,-1188,996 2 3754
+Om 7806,18360,0,3303,-1197,996 2 3770
+Fo 11709,11160,0,741,-426,741 0 3755
+Fc 11709,11160,0,0,777 0 3771
+t+- 17565,12210,213,0,-2133 0 3761
+bb 13173,19083,5916,0,-4596 3 3750
+co 13173,19635,0,4470,-2679,996 2 3753
+no 17565,10185,0,0,-2097 0 3756
+rg 13173,19635,0,4470,-2679,996 2 3758
+S2 7317,18465,0,3258,-300,996 2 3762
+S3 7317,18465,0,3042,-957,996 2 3763
+ac 12198,195108,4995,0,1860 3 3768
+S1 7317,18345,0,2562,-2493,996 2 3769
+tmu 17565,12216,0,0,-2850 0 3799
+tdi 17565,11610,0,0,-2667 0 3831
+pc 5856,10578,0,1095,-723,996 0 3767
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
@@ -823,8 +719,7 @@ Fl 18540,18315,0,2928,849,996 2 51885
ij 9759,18165,4995,3777,1905,996 3 51958
bq 5856,2916,2784,0,3330 0 51756
%0 22443,18675,975,1293,267,996 2 51901
-char175 12198,16434,0,1257,-3453,996 0 3759
-a- "
+a- 12198,16434,0,1257,-3453,996 0 3759
ab 12198,17940,0,1890,-4329,996 2 51926
a. 12198,17355,0,0,-6069 2 51927
oe 16587,12885,255,912,783,912 0 51823
diff --git a/contrib/groff/font/devlj4/UCR b/contrib/groff/font/devlj4/UCR
index 3b50399..111a267 100644
--- a/contrib/groff/font/devlj4/UCR
+++ b/contrib/groff/font/devlj4/UCR
@@ -328,19 +328,16 @@ K W -486
K U -486
L cq -5364
L ' -5364
-T char173 -3414
T hy -3414
T - -3414
T en -3414
T em -3414
A cq -1461
A ' -1461
-char173 T -3414
hy T -3414
- T -3414
en T -3414
em T -3414
-Y char173 -975
Y hy -975
Y - -975
Y en -975
@@ -355,7 +352,6 @@ b cq -975
b ' -975
a cq -1461
a ' -1461
-V char173 -486
V hy -486
V - -486
V en -486
@@ -366,7 +362,6 @@ n cq -1461
n ' -1461
m cq -1461
m ' -1461
-W char173 -486
W hy -486
W - -486
W en -486
@@ -375,32 +370,26 @@ cq d -1950
' d -1950
s cq -486
s ' -486
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -486
X hy -486
X - -486
X en -486
X em -486
-A char173 -486
A hy -486
A - -486
A en -486
A em -486
-K char173 -975
K hy -975
K - -975
K en -975
K em -975
cq s -486
' s -486
-char173 X -486
hy X -486
- X -486
-char173 A -486
hy A -486
- A -486
en X -486
@@ -408,7 +397,6 @@ en A -486
em X -486
K cq -486
K ' -486
-Z char173 -486
Z hy -486
Z - -486
Z en -486
@@ -430,8 +418,7 @@ cq 5856,18135 2 51751
* 12198,18390 2 3626
+ 17565,12495 0 3627
, 5856,2970,2730 0 3628
-char173 5856,7560 0 3629
-hy "
+hy 5856,7560 0 3629
- "
. 5856,2760 0 3630
sl 5856,18165,1980 2 3631
@@ -523,198 +510,109 @@ ba 13173,19758,6588 3 3708
rC 11709,20130,6075 3 3709
} "
ti 26346,8952 0 51876
-char192 13662,23640 2 3776
-`A "
-char194 13662,23415 2 3778
-^A "
-char200 11220,23640 2 3784
-`E "
-char202 11220,23415 2 3786
-^E "
-char203 11220,22710 2 3787
-:E "
-char206 5856,23415 2 3790
-^I "
-char207 5856,22710 2 3791
-:I "
-char180 12198,18165 2 3764
-aa "
+`A 13662,23640 2 3776
+^A 13662,23415 2 3778
+`E 11220,23640 2 3784
+^E 11220,23415 2 3786
+:E 11220,22710 2 3787
+^I 5856,23415 2 3790
+:I 5856,22710 2 3791
+aa 12198,18165 2 3764
ga 12198,18165 2 3680
a^ 12198,17940 2 3678
^ "
-char168 12198,17355 2 3752
-ad "
+ad 12198,17355 2 3752
a~ 12198,17844 2 3710
~ "
-char217 13662,23640,255 2 3801
-`U "
-char219 13662,23415,255 2 3803
-^U "
-char221 12198,23640 2 3805
-'Y "
-char253 10734,18165,4680 3 3837
-'y "
-char176 12198,18360 2 3760
-de "
-char199 13173,18390,4755 3 3783
-,C "
-char231 10245,12885,4755 1 3815
-,c "
-char209 14148,23121 2 3793
-~N "
-char241 10734,17844 2 3825
-~n "
-char161 7806,12591,5544 1 3745
-r! "
-char191 11220,12480,5910 1 3775
-r? "
-char164 12198,15684 0 3748
-Cs "
-char163 12198,18360 2 3747
-Po "
-char165 12198,18105 2 3749
-Ye "
-char167 12198,18390,255 2 3751
-sc "
+`U 13662,23640,255 2 3801
+^U 13662,23415,255 2 3803
+'Y 12198,23640 2 3805
+'y 10734,18165,4680 3 3837
+de 12198,18360 2 3760
+,C 13173,18390,4755 3 3783
+,c 10245,12885,4755 1 3815
+~N 14148,23121 2 3793
+~n 10734,17844 2 3825
+r! 7806,12591,5544 1 3745
+r? 11220,12480,5910 1 3775
+Cs 12198,15684 0 3748
+Po 12198,18360 2 3747
+Ye 12198,18105 2 3749
+sc 12198,18390,255 2 3751
Fn 12198,18315 2 51871
-char162 12198,18360,630 2 3746
-ct "
-char226 10734,17940,255 2 3810
-^a "
-char234 10245,17940,255 2 3818
-^e "
-char244 10734,17940,255 2 3828
-^o "
-char251 10734,17940,255 2 3835
-^u "
-char225 10734,18165,255 2 3809
-'a "
-char233 10245,18165,255 2 3817
-'e "
-char243 10734,18165,255 2 3827
-'o "
-char250 10734,18165,255 2 3834
-'u "
-char224 10734,18165,255 2 3808
-`a "
-char232 10245,18165,255 2 3816
-`e "
-char242 10734,18165,255 2 3826
-`o "
-char249 10734,18165,255 2 3833
-`u "
-char228 10734,17355,255 2 3812
-:a "
-char235 10245,17355,255 2 3819
-:e "
-char246 10734,17355,255 2 3830
-:o "
-char252 10734,17355,255 2 3836
-:u "
-char197 13662,24480 2 3781
-oA "
-char238 5856,17940 2 3822
-^i "
-char216 13662,19767,1851 2 3800
-/O "
-char198 18540,18135 2 3782
-AE "
-char229 10734,19005,255 2 3813
-oa "
-char237 5856,18165 2 3821
-'i "
-char248 10734,14274,2115 0 3832
-/o "
-char230 16587,12885,255 0 3814
-ae "
-char196 13662,22710 2 3780
-:A "
-char236 5856,18165 2 3820
-`i "
-char214 13662,22710,255 2 3798
-:O "
-char220 13662,22710,255 2 3804
-:U "
-char201 11220,23640 2 3785
-'E "
-char239 5856,17355 2 3823
-:i "
-char223 11709,18315,255 2 3807
-ss "
-char212 13662,23415,255 2 3796
-^O "
-char193 13662,23640 2 3777
-'A "
-char195 13662,23121 2 3779
-~A "
-char227 10734,17844,255 2 3811
-~a "
-char208 13662,18135 2 3792
--D "
-char240 10734,18531,255 2 3824
-Sd "
-char205 5856,23640 2 3789
-'I "
-char204 5856,23640 2 3788
-`I "
-char211 13662,23640,255 2 3795
-'O "
-char210 13662,23640,255 2 3794
-`O "
-char213 13662,23121,255 2 3797
-~O "
-char245 10734,17844,255 2 3829
-~o "
+ct 12198,18360,630 2 3746
+^a 10734,17940,255 2 3810
+^e 10245,17940,255 2 3818
+^o 10734,17940,255 2 3828
+^u 10734,17940,255 2 3835
+'a 10734,18165,255 2 3809
+'e 10245,18165,255 2 3817
+'o 10734,18165,255 2 3827
+'u 10734,18165,255 2 3834
+`a 10734,18165,255 2 3808
+`e 10245,18165,255 2 3816
+`o 10734,18165,255 2 3826
+`u 10734,18165,255 2 3833
+:a 10734,17355,255 2 3812
+:e 10245,17355,255 2 3819
+:o 10734,17355,255 2 3830
+:u 10734,17355,255 2 3836
+oA 13662,24480 2 3781
+^i 5856,17940 2 3822
+/O 13662,19767,1851 2 3800
+AE 18540,18135 2 3782
+oa 10734,19005,255 2 3813
+'i 5856,18165 2 3821
+/o 10734,14274,2115 0 3832
+ae 16587,12885,255 0 3814
+:A 13662,22710 2 3780
+`i 5856,18165 2 3820
+:O 13662,22710,255 2 3798
+:U 13662,22710,255 2 3804
+'E 11220,23640 2 3785
+:i 5856,17355 2 3823
+ss 11709,18315,255 2 3807
+^O 13662,23415,255 2 3796
+'A 13662,23640 2 3777
+~A 13662,23121 2 3779
+~a 10734,17844,255 2 3811
+-D 13662,18135 2 3792
+Sd 10734,18531,255 2 3824
+'I 5856,23640 2 3789
+`I 5856,23640 2 3788
+'O 13662,23640,255 2 3795
+`O 13662,23640,255 2 3794
+~O 13662,23121,255 2 3797
+~o 10734,17844,255 2 3829
vS 12684,23415,255 2 51795
vs 9759,17940,255 2 51827
-char218 13662,23640,255 2 3802
-'U "
+'U 13662,23640,255 2 3802
:Y 12198,22710 2 51801
-char255 10734,17355,4680 3 3839
-:y "
-char222 12198,18135 2 3806
-TP "
-char254 10734,18165,4680 3 3838
-Tp "
-char181 14637,12630,4350 0 3765
-char182 12198,19635,4200 2 3766
-ps "
-char190 17565,18675,975 2 3774
-34 "
+:y 10734,17355,4680 3 3839
+TP 12198,18135 2 3806
+Tp 10734,18165,4680 3 3838
+mc 14637,12630,4350 0 3765
+ps 12198,19635,4200 2 3766
+34 17565,18675,975 2 3774
\- 17565,8175 0 51757
-char188 17565,18675,975 2 3772
-14 "
-char189 17565,18675,975 2 3773
-12 "
-char170 7317,18360 2 3754
-Of "
-char186 7317,18360 2 3770
-Om "
-char171 11709,11010 0 3755
-Fo "
-char187 11709,11010 0 3771
-Fc "
-char177 17565,12210,213 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 17565,10185 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 7317,18465 2 3762
-S2 "
-char179 7317,18465 2 3763
-S3 "
-char184 12198,195348,4755 3 3768
-ac "
-char185 7317,18345 2 3769
-S1 "
-char215 17565,12216 0 3799
-char247 17565,11610 0 3831
-char183 5856,10755 0 3767
-pc "
+14 17565,18675,975 2 3772
+12 17565,18675,975 2 3773
+Of 7317,18360 2 3754
+Om 7317,18360 2 3770
+Fo 11709,11010 0 3755
+Fc 11709,11010 0 3771
+t+- 17565,12210,213 0 3761
+bb 13173,19083,5916 3 3750
+co 13173,19635 2 3753
+no 17565,10185 0 3756
+rg 13173,19635 2 3758
+S2 7317,18465 2 3762
+S3 7317,18465 2 3763
+ac 12198,195348,4755 3 3768
+S1 7317,18345 2 3769
+tmu 17565,12216 0 3799
+tdi 17565,11610 0 3831
+pc 5856,10755 0 3767
fm 5856,18105 2 51873
sd 12198,18105 2 51874
dg 12198,18135 2 51755
@@ -742,8 +640,7 @@ Fl 17694,18315 2 51885
ij 9759,18165,4995 3 51958
bq 5856,3006,2694 0 51756
%0 22443,18675,975 2 51901
-char175 12198,16440 0 3759
-a- "
+a- 12198,16440 0 3759
ab 12198,17940 2 51926
a. 12198,17700 2 51927
oe 16587,12885,255 0 51823
diff --git a/contrib/groff/font/devlj4/UI b/contrib/groff/font/devlj4/UI
index 12bcc26..4933816 100644
--- a/contrib/groff/font/devlj4/UI
+++ b/contrib/groff/font/devlj4/UI
@@ -448,19 +448,16 @@ K W -486
K U -486
L cq -7317
L ' -7317
-T char173 -4389
T hy -4389
T - -4389
T en -4389
T em -4389
A cq -3903
A ' -3903
-char173 T -4389
hy T -4389
- T -4389
en T -4389
em T -4389
-Y char173 -2439
Y hy -2439
Y - -2439
Y en -2439
@@ -475,7 +472,6 @@ b cq -2925
b ' -2925
a cq -2925
a ' -2925
-V char173 -1461
V hy -1461
V - -1461
V en -1461
@@ -488,7 +484,6 @@ m cq -2439
m ' -2439
R cq -975
R ' -975
-W char173 -486
W hy -486
W - -486
W en -486
@@ -497,32 +492,26 @@ cq d -2925
' d -2925
s cq -1950
s ' -1950
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1461
A hy -1461
A - -1461
A en -1461
A em -1461
-K char173 -975
K hy -975
K - -975
K en -975
K em -975
cq s -1950
' s -1950
-char173 X -1461
hy X -1461
- X -1461
-char173 A -1461
hy A -1461
- A -1461
en X -1461
@@ -587,7 +576,6 @@ E cq -975
E ' -975
Z cq -975
Z ' -975
-Z char173 -975
Z hy -975
Z - -975
Z en -975
@@ -632,7 +620,6 @@ cq R -975
' R -975
cq D -975
' D -975
-x char173 -486
x hy -486
x - -486
x en -486
@@ -654,8 +641,7 @@ cq 8781,18135,0,3114,-2751,1000 2 51751
* 16587,18495,0,0,-4155 2 3626
+ 26346,14745,105,0,-4860 0 3627
, 8781,3000,3135,0,1794 0 3628
-char173 8781,7680,0,561,147,561 0 3629
-hy "
+hy 8781,7680,0,561,147,561 0 3629
- "
. 8781,2970,0,0,192 0 3630
sl 8781,18135,1500,4326,3072,1000 2 3631
@@ -747,198 +733,109 @@ ba 13173,19758,6588,0,-4596 3 3708
rC 11709,20130,6075,0,3183 3 3709
} "
ti 26346,8952,0,0,-4029 0 51876
-char192 19515,23100,0,0,2400 2 3776
-`A "
-char194 19515,23085,0,0,2400 2 3778
-^A "
-char200 15126,23100,0,3099,699,1000 2 3784
-`E "
-char202 15126,23085,0,3099,699,1000 2 3786
-^E "
-char203 15126,22638,0,3099,699,1000 2 3787
-:E "
-char206 7317,23085,0,5385,852,1000 2 3790
-^I "
-char207 7317,22638,0,6231,852,1000 2 3791
-:I "
-char180 16587,17970,0,0,-7479 2 3764
-aa "
+`A 19515,23100,0,0,2400 2 3776
+^A 19515,23085,0,0,2400 2 3778
+`E 15126,23100,0,3099,699,1000 2 3784
+^E 15126,23085,0,3099,699,1000 2 3786
+:E 15126,22638,0,3099,699,1000 2 3787
+^I 7317,23085,0,5385,852,1000 2 3790
+:I 7317,22638,0,6231,852,1000 2 3791
+aa 16587,17970,0,0,-7479 2 3764
ga 16587,17970,0,0,-6621 2 3680
a^ 16587,18105,0,0,-5334 2 3678
^ "
-char168 16587,17943,0,174,-6261,174 2 3752
-ad "
+ad 16587,17943,0,174,-6261,174 2 3752
a~ 16587,17724,0,312,-5604,312 2 3710
~ "
-char217 19029,23100,360,2250,-801,1000 2 3801
-`U "
-char219 19029,23085,360,2250,-801,1000 2 3803
-^U "
-char221 18051,23100,0,3720,-2763,1000 2 3805
-'Y "
-char253 14637,17970,4680,1992,-963,1000 3 3837
-'y "
-char176 16587,18465,0,0,-4104 2 3760
-de "
-char199 18540,18495,4875,1554,-990,1000 3 3783
-,C "
-char231 14148,12990,4875,534,114,534 1 3815
-,c "
-char209 19029,23019,0,2688,750,1000 2 3793
-~N "
-char241 15126,17724,0,1044,1182,1000 2 3825
-~n "
-char161 8781,12576,5589,54,1983,54 1 3745
-r! "
-char191 13662,12573,5742,0,921 1 3775
-r? "
-char164 16587,15684,0,126,-1533,126 0 3748
-Cs "
-char163 16587,18465,0,2265,291,1000 2 3747
-Po "
-char165 16587,18105,0,4818,-1089,1000 2 3749
-Ye "
-char167 16587,18495,360,0,-3750 2 3751
-sc "
+`U 19029,23100,360,2250,-801,1000 2 3801
+^U 19029,23085,360,2250,-801,1000 2 3803
+'Y 18051,23100,0,3720,-2763,1000 2 3805
+'y 14637,17970,4680,1992,-963,1000 3 3837
+de 16587,18465,0,0,-4104 2 3760
+,C 18540,18495,4875,1554,-990,1000 3 3783
+,c 14148,12990,4875,534,114,534 1 3815
+~N 19029,23019,0,2688,750,1000 2 3793
+~n 15126,17724,0,1044,1182,1000 2 3825
+r! 8781,12576,5589,54,1983,54 1 3745
+r? 13662,12573,5742,0,921 1 3775
+Cs 16587,15684,0,126,-1533,126 0 3748
+Po 16587,18465,0,2265,291,1000 2 3747
+Ye 16587,18105,0,4818,-1089,1000 2 3749
+sc 16587,18495,360,0,-3750 2 3751
Fn 16587,18315,0,330,-3528,330 2 51871
-char162 16587,18750,765,0,-2322 2 3746
-ct "
-char226 14148,18105,360,711,729,711 2 3810
-^a "
-char234 14148,18105,360,711,153,711 2 3818
-^e "
-char244 15126,18105,360,222,261,222 2 3828
-^o "
-char251 15126,18105,360,1023,261,1000 2 3835
-^u "
-char225 14148,17970,360,690,729,690 2 3809
-'a "
-char233 14148,17970,360,690,153,690 2 3817
-'e "
-char243 15126,17970,360,201,261,201 2 3827
-'o "
-char250 15126,17970,360,1023,261,1000 2 3834
-'u "
-char224 14148,17970,360,87,729,87 2 3808
-`a "
-char232 14148,17970,360,567,153,567 2 3816
-`e "
-char242 15126,17970,360,12,261,12 2 3826
-`o "
-char249 15126,17970,360,1023,261,1000 2 3833
-`u "
-char228 14148,17943,360,1395,729,1000 2 3812
-:a "
-char235 14148,17943,360,1395,153,1000 2 3819
-:e "
-char246 15126,17943,360,906,261,906 2 3830
-:o "
-char252 15126,17943,360,1023,261,1000 2 3836
-:u "
-char197 19515,25923,0,0,2400 2 3781
-oA "
-char238 6342,18105,0,4614,1155,1000 2 3822
-^i "
-char216 20004,18495,360,2847,1161,1000 2 3800
-/O "
-char198 25857,18135,0,3231,2919,1000 2 3782
-AE "
-char229 14148,20490,360,87,729,87 2 3813
-oa "
-char237 6342,17970,0,4593,1155,1000 2 3821
-'i "
-char248 15126,12990,360,1242,1386,1000 0 3832
-/o "
-char230 22443,12990,360,165,384,165 0 3814
-ae "
-char196 19515,22638,0,132,2400,132 2 3780
-:A "
-char236 6342,17970,0,1737,1155,1000 2 3820
-`i "
-char214 20004,22638,360,582,-948,582 2 3798
-:O "
-char220 19029,22638,360,2250,-801,1000 2 3804
-:U "
-char201 15126,23100,0,3099,699,1000 2 3785
-'E "
-char239 6342,17943,0,5298,1155,1000 2 3823
-:i "
-char223 16101,18315,360,1320,939,1000 2 3807
-ss "
-char212 20004,23085,360,582,-948,582 2 3796
-^O "
-char193 19515,23100,0,0,2400 2 3777
-'A "
-char195 19515,23019,0,936,2400,936 2 3779
-~A "
-char227 14148,17724,360,1533,729,1000 2 3811
-~a "
-char208 19029,18135,0,477,804,477 2 3792
--D "
-char240 15126,18315,360,357,108,357 2 3824
-Sd "
-char205 7317,23100,0,5619,852,1000 2 3789
-'I "
-char204 7317,23100,0,2787,852,1000 2 3788
-`I "
-char211 20004,23100,360,582,-948,582 2 3795
-'O "
-char210 20004,23100,360,582,-948,582 2 3794
-`O "
-char213 20004,23019,360,693,-948,693 2 3797
-~O "
-char245 15126,17724,360,1044,261,1000 2 3829
-~o "
+ct 16587,18750,765,0,-2322 2 3746
+^a 14148,18105,360,711,729,711 2 3810
+^e 14148,18105,360,711,153,711 2 3818
+^o 15126,18105,360,222,261,222 2 3828
+^u 15126,18105,360,1023,261,1000 2 3835
+'a 14148,17970,360,690,729,690 2 3809
+'e 14148,17970,360,690,153,690 2 3817
+'o 15126,17970,360,201,261,201 2 3827
+'u 15126,17970,360,1023,261,1000 2 3834
+`a 14148,17970,360,87,729,87 2 3808
+`e 14148,17970,360,567,153,567 2 3816
+`o 15126,17970,360,12,261,12 2 3826
+`u 15126,17970,360,1023,261,1000 2 3833
+:a 14148,17943,360,1395,729,1000 2 3812
+:e 14148,17943,360,1395,153,1000 2 3819
+:o 15126,17943,360,906,261,906 2 3830
+:u 15126,17943,360,1023,261,1000 2 3836
+oA 19515,25923,0,0,2400 2 3781
+^i 6342,18105,0,4614,1155,1000 2 3822
+/O 20004,18495,360,2847,1161,1000 2 3800
+AE 25857,18135,0,3231,2919,1000 2 3782
+oa 14148,20490,360,87,729,87 2 3813
+'i 6342,17970,0,4593,1155,1000 2 3821
+/o 15126,12990,360,1242,1386,1000 0 3832
+ae 22443,12990,360,165,384,165 0 3814
+:A 19515,22638,0,132,2400,132 2 3780
+`i 6342,17970,0,1737,1155,1000 2 3820
+:O 20004,22638,360,582,-948,582 2 3798
+:U 19029,22638,360,2250,-801,1000 2 3804
+'E 15126,23100,0,3099,699,1000 2 3785
+:i 6342,17943,0,5298,1155,1000 2 3823
+ss 16101,18315,360,1320,939,1000 2 3807
+^O 20004,23085,360,582,-948,582 2 3796
+'A 19515,23100,0,0,2400 2 3777
+~A 19515,23019,0,936,2400,936 2 3779
+~a 14148,17724,360,1533,729,1000 2 3811
+-D 19029,18135,0,477,804,477 2 3792
+Sd 15126,18315,360,357,108,357 2 3824
+'I 7317,23100,0,5619,852,1000 2 3789
+`I 7317,23100,0,2787,852,1000 2 3788
+'O 20004,23100,360,582,-948,582 2 3795
+`O 20004,23100,360,582,-948,582 2 3794
+~O 20004,23019,360,693,-948,693 2 3797
+~o 15126,17724,360,1044,261,1000 2 3829
vS 17076,23085,360,1629,-21,1000 2 51795
vs 13173,18234,360,2241,960,1000 2 51827
-char218 19029,23100,360,2250,-801,1000 2 3802
-'U "
+'U 19029,23100,360,2250,-801,1000 2 3802
:Y 18051,22638,0,3720,-2763,1000 2 51801
-char255 14637,17943,4680,1992,-963,1000 3 3839
-:y "
-char222 15612,18135,0,1692,717,1000 2 3806
-TP "
-char254 15126,18165,4680,9,2592,9 3 3838
-Tp "
-char181 14637,12630,4350,1122,2931,1000 0 3765
-char182 16590,19635,4200,0,-2379 2 3766
-ps "
-char190 26346,18465,945,0,-3291 2 3774
-34 "
+:y 14637,17943,4680,1992,-963,1000 3 3839
+TP 15612,18135,0,1692,717,1000 2 3806
+Tp 15126,18165,4680,9,2592,9 3 3838
+mc 14637,12630,4350,1122,2931,1000 0 3765
+ps 16590,19635,4200,0,-2379 2 3766
+34 26346,18465,945,0,-3291 2 3774
\- 26346,8070,0,0,-4869 0 51757
-char188 26346,18465,945,0,-3621 2 3772
-14 "
-char189 26346,18465,945,0,-3087 2 3773
-12 "
-char170 10734,18465,0,1791,-1671,1000 2 3754
-Of "
-char186 10734,18465,0,2232,-1599,1000 2 3770
-Om "
-char171 14637,11046,0,468,-876,468 0 3755
-Fo "
-char187 14637,11046,0,0,537 0 3771
-Fc "
-char177 26346,14910,0,0,-4770 0 3761
-char166 13173,19083,5916,0,-4596 3 3750
-bb "
-char169 13173,19635,0,4683,-2892,1000 2 3753
-co "
-char172 26346,11697,0,0,-4425 0 3756
-no "
-char174 13173,19635,0,4683,-2892,1000 2 3758
-rg "
-char178 10245,18465,0,1800,-1065,1000 2 3762
-S2 "
-char179 10245,18465,0,1941,-1134,1000 2 3763
-S3 "
-char184 16587,195048,4875,0,-1797 3 3768
-ac "
-char185 10245,18345,0,693,-3387,693 2 3769
-S1 "
-char215 26346,14010,0,0,-6081 0 3799
-char247 26346,12255,0,0,-4845 0 3831
-char183 8781,10935,0,0,-2136 0 3767
-pc "
+14 26346,18465,945,0,-3621 2 3772
+12 26346,18465,945,0,-3087 2 3773
+Of 10734,18465,0,1791,-1671,1000 2 3754
+Om 10734,18465,0,2232,-1599,1000 2 3770
+Fo 14637,11046,0,468,-876,468 0 3755
+Fc 14637,11046,0,0,537 0 3771
+t+- 26346,14910,0,0,-4770 0 3761
+bb 13173,19083,5916,0,-4596 3 3750
+co 13173,19635,0,4683,-2892,1000 2 3753
+no 26346,11697,0,0,-4425 0 3756
+rg 13173,19635,0,4683,-2892,1000 2 3758
+S2 10245,18465,0,1800,-1065,1000 2 3762
+S3 10245,18465,0,1941,-1134,1000 2 3763
+ac 16587,195048,4875,0,-1797 3 3768
+S1 10245,18345,0,693,-3387,693 2 3769
+tmu 26346,14010,0,0,-6081 0 3799
+tdi 26346,12255,0,0,-4845 0 3831
+pc 8781,10935,0,0,-2136 0 3767
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
@@ -966,8 +863,7 @@ Fl 24396,18315,0,2748,-168,1000 2 51885
ij 12684,18165,4995,2970,1143,1000 3 51958
bq 8781,2925,3150,0,2349 0 51756
%0 26346,18720,840,426,-315,426 2 51901
-char175 16587,17040,0,327,-5010,327 2 3759
-a- "
+a- 16587,17040,0,327,-5010,327 2 3759
ab 16587,17937,0,0,-5469 2 51926
a. 16587,17943,0,0,-8355 2 51927
oe 23907,12990,360,141,-243,141 0 51823
diff --git a/contrib/groff/font/devlj4/UR b/contrib/groff/font/devlj4/UR
index b7eba7c..f09539d 100644
--- a/contrib/groff/font/devlj4/UR
+++ b/contrib/groff/font/devlj4/UR
@@ -437,19 +437,16 @@ K W -486
K U -486
L cq -6342
L ' -6342
-T char173 -4878
T hy -4878
T - -4878
T en -4878
T em -4878
A cq -2925
A ' -2925
-char173 T -4878
hy T -4878
- T -4878
en T -4878
em T -4878
-Y char173 -2925
Y hy -2925
Y - -2925
Y en -2925
@@ -464,7 +461,6 @@ b cq -1950
b ' -1950
a cq -1461
a ' -1461
-V char173 -1461
V hy -1461
V - -1461
V en -1461
@@ -475,7 +471,6 @@ n cq -1461
n ' -1461
m cq -1461
m ' -1461
-W char173 -975
W hy -975
W - -975
W en -975
@@ -484,32 +479,26 @@ cq d -3414
' d -3414
s cq -486
s ' -486
-L char173 -1950
L hy -1950
L - -1950
L en -1950
L em -1950
-X char173 -1461
X hy -1461
X - -1461
X en -1461
X em -1461
-A char173 -1461
A hy -1461
A - -1461
A en -1461
A em -1461
-K char173 -1461
K hy -1461
K - -1461
K en -1461
K em -1461
cq s -1950
' s -1950
-char173 X -1461
hy X -1461
- X -1461
-char173 A -1461
hy A -1461
- A -1461
en X -1461
@@ -519,7 +508,6 @@ K cq -486
K ' -486
t g -486
b f -486
-Z char173 -486
Z hy -486
Z - -486
Z en -486
@@ -551,8 +539,7 @@ cq 8781,18135 2 51751
* 16587,18495 2 3626
+ 26346,14775,105 0 3627
, 8781,3030,3075 0 3628
-char173 8781,7755 0 3629
-hy "
+hy 8781,7755 0 3629
- "
. 8781,3030 0 3630
sl 8781,18135,1380 2 3631
@@ -644,198 +631,109 @@ ba 13173,19758,6588 3 3708
rC 11712,20130,6075 3 3709
} "
ti 26346,8952 0 51876
-char192 19515,23085 2 3776
-`A "
-char194 19515,23085 2 3778
-^A "
-char200 15126,23085 2 3784
-`E "
-char202 15126,23085 2 3786
-^E "
-char203 15126,22755 2 3787
-:E "
-char206 7317,23085 2 3790
-^I "
-char207 7317,22755 2 3791
-:I "
-char180 16587,18075 2 3764
-aa "
+`A 19515,23085 2 3776
+^A 19515,23085 2 3778
+`E 15126,23085 2 3784
+^E 15126,23085 2 3786
+:E 15126,22755 2 3787
+^I 7317,23085 2 3790
+:I 7317,22755 2 3791
+aa 16587,18075 2 3764
ga 16587,18075 2 3680
a^ 16587,17985 2 3678
^ "
-char168 16587,17775 2 3752
-ad "
+ad 16587,17775 2 3752
a~ 16587,18294 2 3710
~ "
-char217 19029,23085,360 2 3801
-`U "
-char219 19029,23085,360 2 3803
-^U "
-char221 18051,23085 2 3805
-'Y "
-char253 14637,18075,4680 3 3837
-'y "
-char176 16587,18465 2 3760
-de "
-char199 18540,18495,5025 3 3783
-,C "
-char231 14148,12990,5025 1 3815
-,c "
-char209 19029,22959 2 3793
-~N "
-char241 15126,18294 2 3825
-~n "
-char161 8781,12645,5520 1 3745
-r! "
-char191 13662,12516,5799 1 3775
-r? "
-char164 16587,15684 0 3748
-Cs "
-char163 16587,18465 2 3747
-Po "
-char165 16587,18105 2 3749
-Ye "
-char167 16587,18495,360 2 3751
-sc "
+`U 19029,23085,360 2 3801
+^U 19029,23085,360 2 3803
+'Y 18051,23085 2 3805
+'y 14637,18075,4680 3 3837
+de 16587,18465 2 3760
+,C 18540,18495,5025 3 3783
+,c 14148,12990,5025 1 3815
+~N 19029,22959 2 3793
+~n 15126,18294 2 3825
+r! 8781,12645,5520 1 3745
+r? 13662,12516,5799 1 3775
+Cs 16587,15684 0 3748
+Po 16587,18465 2 3747
+Ye 16587,18105 2 3749
+sc 16587,18495,360 2 3751
Fn 16587,18315 2 51871
-char162 16587,18825,720 2 3746
-ct "
-char226 14148,17985,360 2 3810
-^a "
-char234 14148,17985,360 2 3818
-^e "
-char244 15126,17985,360 2 3828
-^o "
-char251 15126,17985,360 2 3835
-^u "
-char225 14148,18075,360 2 3809
-'a "
-char233 14148,18075,360 2 3817
-'e "
-char243 15126,18075,360 2 3827
-'o "
-char250 15126,18075,360 2 3834
-'u "
-char224 14148,18075,360 2 3808
-`a "
-char232 14148,18075,360 2 3816
-`e "
-char242 15126,18075,360 2 3826
-`o "
-char249 15126,18075,360 2 3833
-`u "
-char228 14148,17775,360 2 3812
-:a "
-char235 14148,17775,360 2 3819
-:e "
-char246 15126,17775,360 2 3830
-:o "
-char252 15126,17775,360 2 3836
-:u "
-char197 19515,25923 2 3781
-oA "
-char238 6342,17985 2 3822
-^i "
-char216 20004,18495,375 2 3800
-/O "
-char198 25857,18165 2 3782
-AE "
-char229 14148,20412,360 2 3813
-oa "
-char237 6342,18075 2 3821
-'i "
-char248 15126,13008,408 0 3832
-/o "
-char230 22443,12990,360 0 3814
-ae "
-char196 19515,22755 2 3780
-:A "
-char236 6342,18075 2 3820
-`i "
-char214 20004,22755,360 2 3798
-:O "
-char220 19029,22755,360 2 3804
-:U "
-char201 15126,23085 2 3785
-'E "
-char239 6342,17775 2 3823
-:i "
-char223 16101,18165,360 2 3807
-ss "
-char212 20004,23085,360 2 3796
-^O "
-char193 19515,23085 2 3777
-'A "
-char195 19515,22959 2 3779
-~A "
-char227 14148,18294,360 2 3811
-~a "
-char208 19029,18135 2 3792
--D "
-char240 15126,18315,360 2 3824
-Sd "
-char205 7317,23085 2 3789
-'I "
-char204 7317,23085 2 3788
-`I "
-char211 20004,23085,360 2 3795
-'O "
-char210 20004,23085,360 2 3794
-`O "
-char213 20004,22959,360 2 3797
-~O "
-char245 15126,18294,360 2 3829
-~o "
+ct 16587,18825,720 2 3746
+^a 14148,17985,360 2 3810
+^e 14148,17985,360 2 3818
+^o 15126,17985,360 2 3828
+^u 15126,17985,360 2 3835
+'a 14148,18075,360 2 3809
+'e 14148,18075,360 2 3817
+'o 15126,18075,360 2 3827
+'u 15126,18075,360 2 3834
+`a 14148,18075,360 2 3808
+`e 14148,18075,360 2 3816
+`o 15126,18075,360 2 3826
+`u 15126,18075,360 2 3833
+:a 14148,17775,360 2 3812
+:e 14148,17775,360 2 3819
+:o 15126,17775,360 2 3830
+:u 15126,17775,360 2 3836
+oA 19515,25923 2 3781
+^i 6342,17985 2 3822
+/O 20004,18495,375 2 3800
+AE 25857,18165 2 3782
+oa 14148,20412,360 2 3813
+'i 6342,18075 2 3821
+/o 15126,13008,408 0 3832
+ae 22443,12990,360 0 3814
+:A 19515,22755 2 3780
+`i 6342,18075 2 3820
+:O 20004,22755,360 2 3798
+:U 19029,22755,360 2 3804
+'E 15126,23085 2 3785
+:i 6342,17775 2 3823
+ss 16101,18165,360 2 3807
+^O 20004,23085,360 2 3796
+'A 19515,23085 2 3777
+~A 19515,22959 2 3779
+~a 14148,18294,360 2 3811
+-D 19029,18135 2 3792
+Sd 15126,18315,360 2 3824
+'I 7317,23085 2 3789
+`I 7317,23085 2 3788
+'O 20004,23085,360 2 3795
+`O 20004,23085,360 2 3794
+~O 20004,22959,360 2 3797
+~o 15126,18294,360 2 3829
vS 17076,23085,360 2 51795
vs 13173,17985,360 2 51827
-char218 19029,23085,360 2 3802
-'U "
+'U 19029,23085,360 2 3802
:Y 18051,22755 2 51801
-char255 14637,17775,4680 3 3839
-:y "
-char222 15612,18135 2 3806
-TP "
-char254 15126,18165,4680 3 3838
-Tp "
-char181 14637,12630,4350 0 3765
-char182 16587,19635,4200 2 3766
-ps "
-char190 26346,18465,1020 2 3774
-34 "
+:y 14637,17775,4680 3 3839
+TP 15612,18135 2 3806
+Tp 15126,18165,4680 3 3838
+mc 14637,12630,4350 0 3765
+ps 16587,19635,4200 2 3766
+34 26346,18465,1020 2 3774
\- 26346,8100 0 51757
-char188 26346,18465,1020 2 3772
-14 "
-char189 26346,18465,1020 2 3773
-12 "
-char170 10734,18465 2 3754
-Of "
-char186 10734,18465 2 3770
-Om "
-char171 14637,11085 0 3755
-Fo "
-char187 14637,11085 0 3771
-Fc "
-char177 26346,14985 0 3761
-char166 13173,19083,5916 3 3750
-bb "
-char169 13173,19635 2 3753
-co "
-char172 26346,11607 0 3756
-no "
-char174 13173,19635 2 3758
-rg "
-char178 10245,18465 2 3762
-S2 "
-char179 10245,18465 2 3763
-S3 "
-char184 16587,194958,5025 3 3768
-ac "
-char185 10245,18345 2 3769
-S1 "
-char215 26346,14010 0 3799
-char247 26346,12315 0 3831
-char183 8781,10509 0 3767
-pc "
+14 26346,18465,1020 2 3772
+12 26346,18465,1020 2 3773
+Of 10734,18465 2 3754
+Om 10734,18465 2 3770
+Fo 14637,11085 0 3755
+Fc 14637,11085 0 3771
+t+- 26346,14985 0 3761
+bb 13173,19083,5916 3 3750
+co 13173,19635 2 3753
+no 26346,11607 0 3756
+rg 13173,19635 2 3758
+S2 10245,18465 2 3762
+S3 10245,18465 2 3763
+ac 16587,194958,5025 3 3768
+S1 10245,18345 2 3769
+tmu 26346,14010 0 3799
+tdi 26346,12315 0 3831
+pc 8781,10509 0 3767
fm 8781,18105 2 51873
sd 16587,18105 2 51874
dg 16587,18135 2 51755
@@ -863,8 +761,7 @@ Fl 24396,18315 2 51885
ij 12684,18165,4995 3 51958
bq 8781,3015,3060 0 51756
%0 26346,18720,840 2 51901
-char175 16587,16845 2 3759
-a- "
+a- 16587,16845 2 3759
ab 16587,17985 2 51926
a. 16587,17775 2 51927
oe 23907,12990,360 0 51823
diff --git a/contrib/groff/font/devlj4/generate/Makefile b/contrib/groff/font/devlj4/generate/Makefile
index c11dbee..2ce6f5f 100644
--- a/contrib/groff/font/devlj4/generate/Makefile
+++ b/contrib/groff/font/devlj4/generate/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1994 Free Software Foundation, Inc.
+# Copyright (C) 1994, 2002 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
@@ -20,7 +20,7 @@
# Directory containing Autofont TFM files.
# The TFM files I used are available for ftp as
#
-# ftp://ftp.hp.com/pub/faxes/software/tfmlj4.exe
+# ftp://ftp.hp.com/pub/faxes/software/tfmlj4p.exe
#
# This is a self-extracting MS-DOS archive (in ZIP format).
diff --git a/contrib/groff/font/devlj4/generate/text.map b/contrib/groff/font/devlj4/generate/text.map
index 0175cbe..f414964 100644
--- a/contrib/groff/font/devlj4/generate/text.map
+++ b/contrib/groff/font/devlj4/generate/text.map
@@ -17,7 +17,6 @@
13 ,
14 -
14 hy
-14 char173
15 .
16 /
16 sl
@@ -109,197 +108,108 @@
95 rC
96 ti
99 `A
-99 char192
100 ^A
-100 char194
101 `E
-101 char200
102 ^E
-102 char202
103 :E
-103 char203
104 ^I
-104 char206
105 :I
-105 char207
106 aa
-106 char180
107 ga
108 ^
108 a^
109 ad
-109 char168
110 ~
110 a~
111 `U
-111 char217
112 ^U
-112 char219
114 'Y
-114 char221
115 'y
-115 char253
116 de
-116 char176
117 ,C
-117 char199
118 ,c
-118 char231
119 ~N
-119 char209
120 ~n
-120 char241
121 r!
-121 char161
122 r?
-122 char191
123 Cs
-123 char164
124 Po
-124 char163
125 Ye
-125 char165
126 sc
-126 char167
127 Fn
128 ct
-128 char162
129 ^a
-129 char226
130 ^e
-130 char234
131 ^o
-131 char244
132 ^u
-132 char251
133 'a
-133 char225
134 'e
-134 char233
135 'o
-135 char243
136 'u
-136 char250
137 `a
-137 char224
138 `e
-138 char232
139 `o
-139 char242
140 `u
-140 char249
141 :a
-141 char228
142 :e
-142 char235
143 :o
-143 char246
144 :u
-144 char252
145 oA
-145 char197
146 ^i
-146 char238
147 /O
-147 char216
148 AE
-148 char198
149 oa
-149 char229
150 'i
-150 char237
151 /o
-151 char248
152 ae
-152 char230
153 :A
-153 char196
154 `i
-154 char236
155 :O
-155 char214
156 :U
-156 char220
157 'E
-157 char201
158 :i
-158 char239
159 ss
-159 char223
160 ^O
-160 char212
161 'A
-161 char193
162 ~A
-162 char195
163 ~a
-163 char227
164 -D
-164 char208
165 Sd
-165 char240
166 'I
-166 char205
167 `I
-167 char204
168 'O
-168 char211
169 `O
-169 char210
170 ~O
-170 char213
171 ~o
-171 char245
172 vS
173 vs
174 'U
-174 char218
175 :Y
176 :y
-176 char255
177 TP
-177 char222
178 Tp
-178 char254
-180 char181
+180 mc
181 ps
-181 char182
182 34
-182 char190
183 \-
184 14
-184 char188
185 12
-185 char189
186 Of
-186 char170
187 Om
-187 char186
188 Fo
-188 char171
190 Fc
-190 char187
-191 char177
+191 t+-
192 bb
-192 char166
193 co
-193 char169
194 no
-194 char172
196 rg
-196 char174
197 S2
-197 char178
198 S3
-198 char179
199 ac
-199 char184
200 S1
-200 char185
-201 char215
-202 char247
+201 tmu
+202 tdi
302 pc
-302 char183
310 fm
311 sd
312 dg
@@ -328,7 +238,6 @@
1067 bq
1068 %0
1084 a-
-1084 char175
1086 ab
1088 a.
1090 oe
diff --git a/contrib/groff/font/devps/AB b/contrib/groff/font/devps/AB
index f00cf9a..3a63212 100644
--- a/contrib/groff/font/devps/AB
+++ b/contrib/groff/font/devps/AB
@@ -81,7 +81,6 @@ T . -91
T o -49
T - -75
T hy -75
-T char173 -75
T e -49
T , -82
T : -15
@@ -98,7 +97,6 @@ V o -101
V i -15
V - -75
V hy -75
-V char173 -75
V e -101
V , -145
V : -18
@@ -114,7 +112,6 @@ W o -46
W i -10
W - -35
W hy -35
-W char173 -35
W e -47
W , -106
W : -15
@@ -127,7 +124,6 @@ Y . -145
Y o -89
Y - -100
Y hy -100
-Y char173 -100
Y e -89
Y , -145
Y : -10
@@ -212,7 +208,6 @@ r k 5
r i 20
r - -60
r hy -60
-r char173 -60
r g 1
r e -4
r d -6
@@ -238,337 +233,246 @@ 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,0,0,-73 2 0000 -- asciicircum
+ti 600,347,0,0,-67 0 0001 -- asciitilde
+vS 520,944,15,0,-12 2 0002 -- Scaron
+vZ 500,944,0,0,-19 2 0003 -- Zcaron
+vs 440,774,18,0,-19 2 0004 -- scaron
+vz 460,774,0,0,-20 2 0005 -- zcaron
+:Y 620,939,0,2,2 2 0006 -- Ydieresis
+tm 1000,740,0,0,-9 2 0007 -- trademark
+aq 220,740,0,0,-44 2 0010 -- quotesingle
space 280 0 0040
-! 280,740 2 0041 -- exclam
-" 360,740 2 0042 -- quotedbl
+! 280,740,0,0,-73 2 0041 -- exclam
+" 360,740,0,0,-19 2 0042 -- quotedbl
dq "
-# 560,700 0 0043 -- numbersign
+# 560,700,0,0,-29 0 0043 -- numbersign
sh "
-$ 560,857,86 2 0044 -- dollar
+$ 560,857,86,0,-58 2 0044 -- dollar
Do "
-% 860,755,15 2 0045 -- percent
-& 680,755,15 2 0046 -- ampersand
-' 280,740 2 0047 -- quoteright
+% 860,755,15,0,-36 2 0045 -- percent
+& 680,755,15,0,-34 2 0046 -- ampersand
+' 280,740,0,0,-72 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
+( 380,754,157,0,-74 2 0050 -- parenleft
+) 380,754,157,0,-37 2 0051 -- parenright
+* 440,755,0,0,-67 2 0052 -- asterisk
++ 600,506,0,0,-48 0 0053 -- plus
+, 280,133,141,0,-73 0 0054 -- comma
+- 420,348,0,0,-71 0 0055 -- hyphen
hy "
-char173 "
-. 280,133 0 0056 -- period
-/ 460,740,100 2 0057 -- slash
+. 280,133,0,0,-73 0 0056 -- period
+/ 460,740,100,0,-6 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,0,-32 2 0060 -- zero
+1 560,740,0,0,-137 2 0061 -- one
+2 560,755,0,0,-36 2 0062 -- two
+3 560,755,15,0,-28 2 0063 -- three
+4 560,740,0,0,-15 2 0064 -- four
+5 560,740,15,0,-25 2 0065 -- five
+6 560,739,15,0,-23 2 0066 -- six
+7 560,740,0,0,-62 2 0067 -- seven
+8 560,755,15,0,-33 2 0070 -- eight
+9 560,754,0,0,-24 2 0071 -- nine
+: 280,555,0,0,-73 0 0072 -- colon
+; 280,555,141,0,-73 0 0073 -- semicolon
+< 600,514,8,0,-46 0 0074 -- less
+= 600,425,0,0,-48 0 0075 -- equal
+> 600,514,8,0,-46 0 0076 -- greater
+? 560,755,0,0,-38 2 0077 -- question
+@ 740,712,12,10,-50 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,0,0,-7 2 0101 -- A
+B 580,740,0,0,-70 2 0102 -- B
+C 780,755,15,0,-34 2 0103 -- C
+D 700,740,0,0,-63 2 0104 -- D
+E 520,740,0,0,-61 2 0105 -- E
+F 480,740,0,0,-61 2 0106 -- F
+G 840,755,15,0,-27 2 0107 -- G
+H 680,740,0,0,-71 2 0110 -- H
+I 280,740,0,0,-72 2 0111 -- I
+J 480,740,15,0,-2 2 0112 -- J
+K 620,740,0,0,-89 2 0113 -- K
+L 440,740,0,0,-72 2 0114 -- L
+M 900,740,0,0,-63 2 0115 -- M
+N 740,740,0,0,-70 2 0116 -- N
+O 840,755,15,0,-33 2 0117 -- O
+P 560,740,0,0,-72 2 0120 -- P
+Q 840,755,15,0,-32 2 0121 -- Q
+R 580,740,0,0,-64 2 0122 -- R
+S 520,755,15,0,-12 2 0123 -- S
+T 420,740,0,0,-6 2 0124 -- T
+U 640,740,15,0,-55 2 0125 -- U
+V 700,740,0,0,-8 2 0126 -- V
+W 900,740,0,0,-7 2 0127 -- W
+X 680,740,0,0,-4 2 0130 -- X
+Y 620,740,0,2,2 2 0131 -- Y
+Z 500,740,0,0,-19 2 0132 -- Z
+[ 320,754,157,0,-66 2 0133 -- bracketleft
lB "
-\ 640,740,100 2 0134 -- backslash
+\ 640,740,100,0,-96 2 0134 -- backslash
rs "
-] 320,754,157 2 0135 -- bracketright
+] 320,754,157,0,-36 2 0135 -- bracketright
rB "
-a^ 540,774 2 0136 -- circumflex
+a^ 540,774,0,0,-71 2 0136 -- circumflex
^ "
_ 500,0,125 0 0137 -- underscore
-` 280,740 2 0140 -- quoteleft
+` 280,740,0,0,-72 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,-27 0 0141 -- a
+b 660,740,18,0,-47 2 0142 -- b
+c 640,574,18,0,-37 0 0143 -- c
+d 660,740,18,0,-34 2 0144 -- d
+e 640,577,18,0,-31 0 0145 -- e
+f 280,755,0,0,-15 2 0146 -- f
+g 660,574,226,0,-32 1 0147 -- g
+h 600,740,0,0,-54 2 0150 -- h
+i 240,740,0,0,-53 2 0151 -- i
+j 260,740,185,0,-16 3 0152 -- j
+k 580,740,0,0,-80 2 0153 -- k
+l 240,740,0,0,-54 2 0154 -- l
+m 940,574,0,0,-54 0 0155 -- m
+n 600,574,0,0,-54 0 0156 -- n
+o 640,574,18,0,-25 0 0157 -- o
+p 660,574,185,0,-47 1 0160 -- p
+q 660,574,185,0,-31 1 0161 -- q
+r 320,574,0,0,-63 0 0162 -- r
+s 440,574,18,0,-19 0 0163 -- s
+t 300,740,0,0,-21 2 0164 -- t
+u 600,555,18,0,-50 0 0165 -- u
+v 560,555,0,0,-3 0 0166 -- v
+w 800,555,0,0,-11 0 0167 -- w
+x 560,555,0,0,-3 0 0170 -- x
+y 580,555,185,0,-8 1 0171 -- y
+z 460,555,0,0,-20 0 0172 -- z
+lC 340,747,191,0,3 3 0173 -- braceleft
{ "
-ba 600,740,100 2 0174 -- bar
+ba 600,740,100,0,-233 2 0174 -- bar
| "
-rC 340,747,191 3 0175 -- braceright
+rC 340,747,191,3,-23 3 0175 -- braceright
} "
-a~ 480,767 2 0176 -- tilde
+a~ 480,767,0,0,-44 2 0176 -- tilde
~ "
-bq 280,133,141 0 0200 -- quotesinglbase
-Fo 460,469 0 0201 -- guillemotleft
-char171 "
-Fc 460,469 0 0202 -- guillemotright
-char187 "
-bu 600,532 0 0203 -- bullet
+bq 280,133,141,0,-72 0 0200 -- quotesinglbase
+Fo 460,469,0,0,-61 0 0201 -- guillemotleft
+Fc 460,469,0,0,-61 0 0202 -- guillemotright
+bu 600,532,0,0,-148 0 0203 -- bullet
Fn 560,824,151 2 0204 -- florin
-f/ 160,740 2 0205 -- fraction
-%0 1280,755,15 2 0206 -- perthousand
-dg 560,740,142 2 0207 -- dagger
-dd 560,740,142 2 0210 -- daggerdbl
-en 500,348 0 0211 -- endash
-em 1000,348 0 0212 -- emdash
-fi 520,755 2 0214 -- fi
-fl 520,755 2 0215 -- fl
-.i 240,555 0 0220 -- dotlessi
-ga 420,851 2 0222 -- grave
-a" 700,862 2 0223 -- hungarumlaut
-a. 280,769 2 0224 -- dotaccent
-ab 480,770 2 0225 -- breve
-ah 540,774 2 0226 -- caron
-ao 360,834 2 0227 -- ring
-ho 340,9,195 1 0230 -- ogonek
-lq 480,740 2 0231 -- quotedblleft
-rq 480,740 2 0232 -- quotedblright
-oe 1080,574,18 0 0233 -- oe
-/l 320,740 2 0234 -- lslash
-Bq 480,133,141 0 0235 -- quotedblbase
-OE 1060,755,15 2 0236 -- OE
-/L 480,740 2 0237 -- Lslash
-r! 280,555,185 1 0241 -- exclamdown
-char161 "
-ct 560,715 0 0242 -- cent
-char162 "
-Po 560,755 2 0243 -- sterling
-char163 "
-Cs 560,577 0 0244 -- currency
-char164 "
-Ye 560,740 2 0245 -- yen
-char165 "
-bb 600,740,100 2 0246 -- brokenbar
-char166 "
-sc 560,755,158 2 0247 -- section
-char167 "
-ad 500,769 2 0250 -- dieresis
-char168 "
-co 740,752,12 2 0251 -- copyright
-char169 "
-Of 360,755 2 0252 -- ordfeminine
-char170 "
-fo 240,469 0 0253 -- guilsinglleft
-no 600,425 0 0254 -- logicalnot
-char172 "
-\- 600,313 0 0255 -- minus
-rg 740,752,12 2 0256 -- registered
-char174 "
-a- 420,759 2 0257 -- macron
-char175 "
-de 400,712 0 0260 -- degree
-char176 "
-char177 600,556,62 0 0261 -- plusminus
-S2 336,749 2 0262 -- twosuperior
-char178 "
-S3 336,749 2 0263 -- threesuperior
-char179 "
-aa 420,849 2 0264 -- acute
-char180 "
-char181 576,555,187 1 0265 -- mu
-ps 600,740,103 2 0266 -- paragraph
-char182 "
-pc 280,320 0 0267 -- periodcentered
-char183 "
-ac 340,6,251 1 0270 -- cedilla
-char184 "
-S1 336,740 2 0271 -- onesuperior
-char185 "
-Om 360,755 2 0272 -- ordmasculine
-char186 "
-fc 240,469 0 0273 -- guilsinglright
-14 840,740 2 0274 -- onequarter
-char188 "
-12 840,740 2 0275 -- onehalf
-char189 "
-34 840,749 2 0276 -- threequarters
-char190 "
-r? 560,555,200 1 0277 -- questiondown
-char191 "
-`A 740,1021 2 0300 -- Agrave
-char192 "
-'A 740,1019 2 0301 -- Aacute
-char193 "
-^A 740,944 2 0302 -- Acircumflex
-char194 "
-~A 740,937 2 0303 -- Atilde
-char195 "
-:A 740,939 2 0304 -- Adieresis
-char196 "
-oA 740,969 2 0305 -- Aring
-char197 "
-AE 900,740 2 0306 -- AE
-char198 "
-,C 780,755,251 3 0307 -- Ccedilla
-char199 "
-`E 520,1021 2 0310 -- Egrave
-char200 "
-'E 520,1019 2 0311 -- Eacute
-char201 "
-^E 520,944 2 0312 -- Ecircumflex
-char202 "
-:E 520,939 2 0313 -- Edieresis
-char203 "
-`I 280,1021 2 0314 -- Igrave
-char204 "
-'I 280,1019 2 0315 -- Iacute
-char205 "
-^I 280,944 2 0316 -- Icircumflex
-char206 "
-:I 280,939 2 0317 -- Idieresis
-char207 "
--D 742,740 2 0320 -- Eth
-char208 "
-~N 740,937 2 0321 -- Ntilde
-char209 "
-`O 840,1021,15 2 0322 -- Ograve
-char210 "
-'O 840,1019,15 2 0323 -- Oacute
-char211 "
-^O 840,944,15 2 0324 -- Ocircumflex
-char212 "
-~O 840,937,15 2 0325 -- Otilde
-char213 "
-:O 840,939,15 2 0326 -- Odieresis
-char214 "
-char215 600,494 0 0327 -- multiply
-/O 840,814,71 2 0330 -- Oslash
-char216 "
-`U 640,1021,15 2 0331 -- Ugrave
-char217 "
-'U 640,1019,15 2 0332 -- Uacute
-char218 "
-^U 640,944,15 2 0333 -- Ucircumflex
-char219 "
-:U 640,939,15 2 0334 -- Udieresis
-char220 "
-'Y 620,1019 2 0335 -- Yacute
-char221 "
-TP 560,740 2 0336 -- Thorn
-char222 "
-ss 600,755,18 2 0337 -- germandbls
-char223 "
-`a 660,851,18 2 0340 -- agrave
-char224 "
-'a 660,849,18 2 0341 -- aacute
-char225 "
-^a 660,774,18 2 0342 -- acircumflex
-char226 "
-~a 660,767,18 2 0343 -- atilde
-char227 "
-:a 660,769,18 2 0344 -- adieresis
-char228 "
-oa 660,834,18 2 0345 -- aring
-char229 "
-ae 1080,574,18 0 0346 -- ae
-char230 "
-,c 640,574,251 1 0347 -- ccedilla
-char231 "
-`e 640,851,18 2 0350 -- egrave
-char232 "
-'e 640,849,18 2 0351 -- eacute
-char233 "
-^e 640,774,18 2 0352 -- ecircumflex
-char234 "
-:e 640,769,18 2 0353 -- edieresis
-char235 "
-`i 240,851 2 0354 -- igrave
-char236 "
-'i 240,849 2 0355 -- iacute
-char237 "
-^i 240,774 2 0356 -- icircumflex
-char238 "
-:i 240,769 2 0357 -- idieresis
-char239 "
-Sd 640,754,18 2 0360 -- eth
-char240 "
-~n 600,767 2 0361 -- ntilde
-char241 "
-`o 640,851,18 2 0362 -- ograve
-char242 "
-'o 640,849,18 2 0363 -- oacute
-char243 "
-^o 640,774,18 2 0364 -- ocircumflex
-char244 "
-~o 640,767,18 2 0365 -- otilde
-char245 "
-:o 640,769,18 2 0366 -- odieresis
-char246 "
-char247 600,526,20 0 0367 -- divide
-/o 660,608,50 0 0370 -- oslash
-char248 "
-`u 600,851,18 2 0371 -- ugrave
-char249 "
-'u 600,849,18 2 0372 -- uacute
-char250 "
-^u 600,774,18 2 0373 -- ucircumflex
-char251 "
-:u 600,769,18 2 0374 -- udieresis
-char252 "
-'y 580,849,185 3 0375 -- yacute
-char253 "
-Tp 660,740,185 3 0376 -- thorn
-char254 "
-:y 580,769,185 3 0377 -- ydieresis
-char255 "
+f/ 160,740,0,122,123 2 0205 -- fraction
+%0 1280,755,15,0,-36 2 0206 -- perthousand
+dg 560,740,142,0,-51 2 0207 -- dagger
+dd 560,740,142,0,-51 2 0210 -- daggerdbl
+en 500,348,0,0,-35 0 0211 -- endash
+em 1000,348,0,0,-35 0 0212 -- emdash
+fi 520,755,0,0,-25 2 0214 -- fi
+fl 520,755,0,0,-25 2 0215 -- fl
+.i 240,555,0,0,-53 0 0220 -- dotlessi
+ga 420,851,0,0,-50 2 0222 -- grave
+a" 700,862,0,0,-132 2 0223 -- hungarumlaut
+a. 280,769,0,0,-74 2 0224 -- dotaccent
+ab 480,770,0,0,-42 2 0225 -- breve
+ah 540,774,0,0,-71 2 0226 -- caron
+ao 360,834,0,0,-73 2 0227 -- ring
+ho 340,9,195,0,-79 1 0230 -- ogonek
+lq 480,740,0,0,-70 2 0231 -- quotedblleft
+rq 480,740,0,0,-70 2 0232 -- quotedblright
+oe 1080,574,18,0,-30 0 0233 -- oe
+/l 320,740,0,0,-34 2 0234 -- lslash
+Bq 480,133,141,0,-70 0 0235 -- quotedblbase
+OE 1060,755,15,0,-37 2 0236 -- OE
+/L 480,740,0,0,-26 2 0237 -- Lslash
+r! 280,555,185,0,-74 1 0241 -- exclamdown
+ct 560,715,0,0,-43 0 0242 -- cent
+Po 560,755,0,2,2 2 0243 -- sterling
+Cs 560,577,0,0,-27 0 0244 -- currency
+Ye 560,740,0,10,10 2 0245 -- yen
+bb 600,740,100,0,-233 2 0246 -- brokenbar
+sc 560,755,158,0,-28 2 0247 -- section
+ad 500,769,0,0,-78 2 0250 -- dieresis
+co 740,752,12,12,12 2 0251 -- copyright
+Of 360,755,0,0,-19 2 0252 -- ordfeminine
+fo 240,469,0,0,-50 0 0253 -- guilsinglleft
+no 600,425,0,0,-48 0 0254 -- logicalnot
+\- 600,313,0,0,-48 0 0255 -- minus
+rg 740,752,12,12,12 2 0256 -- registered
+a- 420,759,0,0,-72 2 0257 -- macron
+de 400,712,0,0,-57 0 0260 -- degree
+t+- 600,556,62,0,-48 0 0261 -- plusminus
+S2 336,749,0,0,-13 2 0262 -- twosuperior
+S3 336,749,0,0,-8 2 0263 -- threesuperior
+aa 420,849,0,0,-91 2 0264 -- acute
+mc 576,555,187,0,-38 1 0265 -- mu
+ps 600,740,103,7,7 2 0266 -- paragraph
+pc 280,320,0,0,-73 0 0267 -- periodcentered
+ac 340,6,251,0,-98 1 0270 -- cedilla
+S1 336,740,0,0,-72 2 0271 -- onesuperior
+Om 360,755,0,0,-23 2 0272 -- ordmasculine
+fc 240,469,0,0,-50 0 0273 -- guilsinglright
+14 840,740,0,0,-92 2 0274 -- onequarter
+12 840,740,0,0,-62 2 0275 -- onehalf
+34 840,749,0,0,-18 2 0276 -- threequarters
+r? 560,555,200,0,-68 1 0277 -- questiondown
+`A 740,1021,0,0,-7 2 0300 -- Agrave
+'A 740,1019,0,0,-7 2 0301 -- Aacute
+^A 740,944,0,0,-7 2 0302 -- Acircumflex
+~A 740,937,0,0,-7 2 0303 -- Atilde
+:A 740,939,0,0,-7 2 0304 -- Adieresis
+oA 740,969,0,0,-7 2 0305 -- Aring
+AE 900,740,0,0,5 2 0306 -- AE
+,C 780,755,251,0,-34 3 0307 -- Ccedilla
+`E 520,1021,0,0,-61 2 0310 -- Egrave
+'E 520,1019,0,0,-61 2 0311 -- Eacute
+^E 520,944,0,0,-61 2 0312 -- Ecircumflex
+:E 520,939,0,0,-61 2 0313 -- Edieresis
+`I 280,1021,0,0,45 2 0314 -- Igrave
+'I 280,1019,0,45,-46 2 0315 -- Iacute
+^I 280,944,0,60,59 2 0316 -- Icircumflex
+:I 280,939,0,32,32 2 0317 -- Idieresis
+-D 742,740,0,0,-25 2 0320 -- Eth
+~N 740,937,0,0,-70 2 0321 -- Ntilde
+`O 840,1021,15,0,-33 2 0322 -- Ograve
+'O 840,1019,15,0,-33 2 0323 -- Oacute
+^O 840,944,15,0,-33 2 0324 -- Ocircumflex
+~O 840,937,15,0,-33 2 0325 -- Otilde
+:O 840,939,15,0,-33 2 0326 -- Odieresis
+tmu 600,494,0,0,-59 0 0327 -- multiply
+/O 840,814,71,0,-33 2 0330 -- Oslash
+`U 640,1021,15,0,-55 2 0331 -- Ugrave
+'U 640,1019,15,0,-55 2 0332 -- Uacute
+^U 640,944,15,0,-55 2 0333 -- Ucircumflex
+:U 640,939,15,0,-55 2 0334 -- Udieresis
+'Y 620,1019,0,2,2 2 0335 -- Yacute
+TP 560,740,0,0,-72 2 0336 -- Thorn
+ss 600,755,18,0,-51 2 0337 -- germandbls
+`a 660,851,18,0,-27 2 0340 -- agrave
+'a 660,849,18,0,-27 2 0341 -- aacute
+^a 660,774,18,0,-27 2 0342 -- acircumflex
+~a 660,767,18,0,-27 2 0343 -- atilde
+:a 660,769,18,0,-27 2 0344 -- adieresis
+oa 660,834,18,0,-27 2 0345 -- aring
+ae 1080,574,18,0,-29 0 0346 -- ae
+,c 640,574,251,0,-37 1 0347 -- ccedilla
+`e 640,851,18,0,-31 2 0350 -- egrave
+'e 640,849,18,0,-31 2 0351 -- eacute
+^e 640,774,18,0,-31 2 0352 -- ecircumflex
+:e 640,769,18,0,-31 2 0353 -- edieresis
+`i 240,851,0,0,65 2 0354 -- igrave
+'i 240,849,0,65,-26 2 0355 -- iacute
+^i 240,774,0,80,79 2 0356 -- icircumflex
+:i 240,769,0,52,52 2 0357 -- idieresis
+Sd 640,754,18,0,-27 2 0360 -- eth
+~n 600,767,0,0,-54 2 0361 -- ntilde
+`o 640,851,18,0,-25 2 0362 -- ograve
+'o 640,849,18,0,-25 2 0363 -- oacute
+^o 640,774,18,0,-25 2 0364 -- ocircumflex
+~o 640,767,18,0,-25 2 0365 -- otilde
+:o 640,769,18,0,-25 2 0366 -- odieresis
+tdi 600,526,20,0,-48 0 0367 -- divide
+/o 660,608,50,0,-35 0 0370 -- oslash
+`u 600,851,18,0,-50 2 0371 -- ugrave
+'u 600,849,18,0,-50 2 0372 -- uacute
+^u 600,774,18,0,-50 2 0373 -- ucircumflex
+:u 600,769,18,0,-50 2 0374 -- udieresis
+'y 580,849,185,0,-8 3 0375 -- yacute
+Tp 660,740,185,0,-47 3 0376 -- thorn
+:y 580,769,185,0,-8 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/ABI b/contrib/groff/font/devps/ABI
index d236b63..57f8487 100644
--- a/contrib/groff/font/devps/ABI
+++ b/contrib/groff/font/devps/ABI
@@ -82,7 +82,6 @@ T . -91
T o -49
T - -75
T hy -75
-T char173 -75
T e -49
T , -82
T : -15
@@ -99,7 +98,6 @@ V o -101
V i -15
V - -75
V hy -75
-V char173 -75
V e -101
V , -145
V : -18
@@ -115,7 +113,6 @@ W o -46
W i -10
W - -35
W hy -35
-W char173 -35
W e -47
W , -106
W : -15
@@ -128,7 +125,6 @@ Y . -145
Y o -89
Y - -100
Y hy -100
-Y char173 -100
Y e -89
Y , -145
Y : -10
@@ -213,7 +209,6 @@ r k 5
r i 20
r - -60
r hy -60
-r char173 -60
r g 1
r e -4
r d -6
@@ -267,7 +262,6 @@ cq "
, 280,133,141,1,2,1 0 0054 -- comma
- 420,348,0,43,-64,43 0 0055 -- hyphen
hy "
-char173 "
. 280,133,0,1,-23,1 0 0056 -- period
/ 460,740,100,181,63,82 2 0057 -- slash
sl "
@@ -362,9 +356,7 @@ a~ 480,767,0,134,-128,82 2 0176 -- tilde
~ "
bq 280,133,141,0,3 0 0200 -- quotesinglbase
Fo 460,469,0,77,-55,77 0 0201 -- guillemotleft
-char171 "
Fc 460,469,0,53,-31,53 0 0202 -- guillemotright
-char187 "
bu 600,532,0,0,-165 0 0203 -- bullet
Fn 560,824,151,154,77,82 2 0204 -- florin
f/ 160,740,0,309,173,82 2 0205 -- fraction
@@ -391,185 +383,97 @@ Bq 480,133,141,5,5,5 0 0235 -- quotedblbase
OE 1060,755,15,134,-48,82 2 0236 -- OE
/L 480,740,0,54,-18,54 2 0237 -- Lslash
r! 280,555,185,80,10,80 1 0241 -- exclamdown
-char161 "
ct 560,715,0,89,-60,82 0 0242 -- cent
-char162 "
Po 560,755,0,105,12,82 2 0243 -- sterling
-char163 "
Cs 560,577,0,118,-3,82 0 0244 -- currency
-char164 "
Ye 560,740,0,197,-33,82 2 0245 -- yen
-char165 "
bb 600,740,100,0,-164 2 0246 -- brokenbar
-char166 "
sc 560,755,158,92,-15,82 2 0247 -- section
-char167 "
ad 500,769,0,115,-146,82 2 0250 -- dieresis
-char168 "
co 740,752,12,137,0,82 2 0251 -- copyright
-char169 "
Of 360,755,0,162,-77,82 2 0252 -- ordfeminine
-char170 "
fo 240,469,0,87,-44,82 0 0253 -- guilsinglleft
no 600,425,0,81,-55,81 0 0254 -- logicalnot
-char172 "
\- 600,313,0,60,-34,60 0 0255 -- minus
rg 740,752,12,137,0,82 2 0256 -- registered
-char174 "
a- 420,759,0,120,-142,82 2 0257 -- macron
-char175 "
de 400,712,0,101,-110,82 0 0260 -- degree
-char176 "
-char177 600,556,62,76,13,76 0 0261 -- plusminus
+t+- 600,556,62,76,13,76 0 0261 -- plusminus
S2 336,749,0,150,-23,82 2 0262 -- twosuperior
-char178 "
S3 336,749,0,127,-37,82 2 0263 -- threesuperior
-char179 "
aa 420,849,0,138,-174,82 2 0264 -- acute
-char180 "
-char181 576,555,187,116,47,82 1 0265 -- mu
+mc 576,555,187,116,47,82 1 0265 -- mu
ps 600,740,103,194,-40,82 2 0266 -- paragraph
-char182 "
pc 280,320,0,35,-58,35 0 0267 -- periodcentered
-char183 "
ac 340,6,251,0,-17 1 0270 -- cedilla
-char184 "
S1 336,740,0,74,-132,74 2 0271 -- onesuperior
-char185 "
Om 360,755,0,141,-81,82 2 0272 -- ordmasculine
-char186 "
fc 240,469,0,63,-20,63 0 0273 -- guilsinglright
14 840,740,0,0,-137 2 0274 -- onequarter
-char188 "
12 840,740,0,40,-107,40 2 0275 -- onehalf
-char189 "
34 840,749,0,46,-47,46 2 0276 -- threequarters
-char190 "
r? 560,555,200,17,-19,17 1 0277 -- questiondown
-char191 "
`A 740,1021,0,42,43,42 2 0300 -- Agrave
-char192 "
'A 740,1019,0,42,43,42 2 0301 -- Aacute
-char193 "
^A 740,944,0,42,43,42 2 0302 -- Acircumflex
-char194 "
~A 740,937,0,42,43,42 2 0303 -- Atilde
-char195 "
:A 740,939,0,42,43,42 2 0304 -- Adieresis
-char196 "
oA 740,969,0,42,43,42 2 0305 -- Aring
-char197 "
AE 900,740,0,111,55,82 2 0306 -- AE
-char198 "
,C 780,755,251,134,-47,82 3 0307 -- Ccedilla
-char199 "
`E 520,1021,0,126,-11,82 2 0310 -- Egrave
-char200 "
'E 520,1019,0,126,-11,82 2 0311 -- Eacute
-char201 "
^E 520,944,0,139,-11,82 2 0312 -- Ecircumflex
-char202 "
:E 520,939,0,136,-11,82 2 0313 -- Edieresis
-char203 "
`I 280,1021,0,168,-22,82 2 0314 -- Igrave
-char204 "
'I 280,1019,0,264,-22,82 2 0315 -- Iacute
-char205 "
^I 280,944,0,259,-22,82 2 0316 -- Icircumflex
-char206 "
:I 280,939,0,256,-22,82 2 0317 -- Idieresis
-char207 "
-D 742,740,0,74,-33,74 2 0320 -- Eth
-char208 "
~N 740,937,0,118,-20,82 2 0321 -- Ntilde
-char209 "
`O 840,1021,15,92,-45,82 2 0322 -- Ograve
-char210 "
'O 840,1019,15,92,-45,82 2 0323 -- Oacute
-char211 "
^O 840,944,15,92,-45,82 2 0324 -- Ocircumflex
-char212 "
~O 840,937,15,92,-45,82 2 0325 -- Otilde
-char213 "
:O 840,939,15,92,-45,82 2 0326 -- Odieresis
-char214 "
-char215 600,494,0,67,-26,67 0 0327 -- multiply
+tmu 600,494,0,67,-26,67 0 0327 -- multiply
/O 840,814,71,101,-44,82 2 0330 -- Oslash
-char216 "
`U 640,1021,15,132,-47,82 2 0331 -- Ugrave
-char217 "
'U 640,1019,15,132,-47,82 2 0332 -- Uacute
-char218 "
^U 640,944,15,132,-47,82 2 0333 -- Ucircumflex
-char219 "
:U 640,939,15,132,-47,82 2 0334 -- Udieresis
-char220 "
'Y 620,1019,0,189,-85,82 2 0335 -- Yacute
-char221 "
TP 560,740,0,109,-22,82 2 0336 -- Thorn
-char222 "
ss 600,755,18,79,-1,79 2 0337 -- germandbls
-char223 "
`a 660,851,18,106,-23,82 2 0340 -- agrave
-char224 "
'a 660,849,18,106,-23,82 2 0341 -- aacute
-char225 "
^a 660,774,18,106,-23,82 2 0342 -- acircumflex
-char226 "
~a 660,767,18,106,-23,82 2 0343 -- atilde
-char227 "
:a 660,769,18,106,-23,82 2 0344 -- adieresis
-char228 "
oa 660,834,18,106,-23,82 2 0345 -- aring
-char229 "
ae 1080,574,18,75,-25,75 0 0346 -- ae
-char230 "
,c 640,574,251,89,-33,82 1 0347 -- ccedilla
-char231 "
`e 640,851,18,77,-27,77 2 0350 -- egrave
-char232 "
'e 640,849,18,77,-27,77 2 0351 -- eacute
-char233 "
^e 640,774,18,77,-27,77 2 0352 -- ecircumflex
-char234 "
:e 640,769,18,77,-27,77 2 0353 -- edieresis
-char235 "
`i 240,851,0,157,-3,82 2 0354 -- igrave
-char236 "
'i 240,849,0,253,-3,82 2 0355 -- iacute
-char237 "
^i 240,774,0,248,11,82 2 0356 -- icircumflex
-char238 "
:i 240,769,0,245,-3,82 2 0357 -- idieresis
-char239 "
Sd 640,754,18,109,-23,82 2 0360 -- eth
-char240 "
~n 600,767,0,74,-4,74 2 0361 -- ntilde
-char241 "
`o 640,851,18,82,-21,82 2 0362 -- ograve
-char242 "
'o 640,849,18,82,-21,82 2 0363 -- oacute
-char243 "
^o 640,774,18,82,-21,82 2 0364 -- ocircumflex
-char244 "
~o 640,767,18,82,-21,82 2 0365 -- otilde
-char245 "
:o 640,769,18,82,-21,82 2 0366 -- odieresis
-char246 "
-char247 600,526,20,60,-34,60 0 0367 -- divide
+tdi 600,526,20,60,-34,60 0 0367 -- divide
/o 660,608,50,75,-31,75 0 0370 -- oslash
-char248 "
`u 600,851,18,97,-37,82 2 0371 -- ugrave
-char249 "
'u 600,849,18,97,-37,82 2 0372 -- uacute
-char250 "
^u 600,774,18,97,-37,82 2 0373 -- ucircumflex
-char251 "
:u 600,769,18,97,-37,82 2 0374 -- udieresis
-char252 "
'y 580,849,185,144,-25,82 3 0375 -- yacute
-char253 "
Tp 660,740,185,76,37,76 3 0376 -- thorn
-char254 "
:y 580,769,185,144,-25,82 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/AI b/contrib/groff/font/devps/AI
index be0e099..eb5c689 100644
--- a/contrib/groff/font/devps/AI
+++ b/contrib/groff/font/devps/AI
@@ -81,7 +81,6 @@ T o -70
T i 10
T - -75
T hy -75
-T char173 -75
T e -49
T , -82
T : -15
@@ -98,7 +97,6 @@ V o -101
V i -5
V - -75
V hy -75
-V char173 -75
V e -101
V , -145
V : -18
@@ -114,7 +112,6 @@ W o -46
W i 6
W - -35
W hy -35
-W char173 -35
W e -47
W , -106
W : -15
@@ -127,7 +124,6 @@ Y . -175
Y o -89
Y - -85
Y hy -85
-Y char173 -85
Y e -89
Y , -145
Y : -10
@@ -213,7 +209,6 @@ r k 20
r i 20
r - -60
r hy -60
-r char173 -60
r g -15
r e -4
r d -6
@@ -267,7 +262,6 @@ cq "
, 277,126,67,0,48 0 0054 -- comma
- 332,315,0,78,-26,78 0 0055 -- hyphen
hy "
-char173 "
. 277,126,0,0,-52 0 0056 -- period
/ 437,740,100,153,25,81 2 0057 -- slash
sl "
@@ -362,9 +356,7 @@ a~ 439,754,0,131,-129,81 2 0176 -- tilde
~ "
bq 354,126,68,0,-26 0 0200 -- quotesinglbase
Fo 425,481,0,94,-42,81 0 0201 -- guillemotleft
-char171 "
Fc 425,481,0,62,-10,62 0 0202 -- guillemotright
-char187 "
bu 606,532,0,0,-167 0 0203 -- bullet
Fn 554,818,153,165,89,81 2 0204 -- florin
f/ 166,740,0,301,163,81 2 0205 -- fraction
@@ -391,185 +383,97 @@ Bq 502,126,68,0,-26 0 0235 -- quotedblbase
OE 1194,753,13,135,-57,81 2 0236 -- OE
/L 517,740,0,62,-57,62 2 0237 -- Lslash
r! 295,548,192,41,-24,41 1 0241 -- exclamdown
-char161 "
ct 554,707,0,92,-65,81 0 0242 -- cent
-char162 "
Po 554,753,0,110,21,81 2 0243 -- sterling
-char163 "
Cs 554,580,0,141,26,81 0 0244 -- currency
-char164 "
Ye 554,740,0,183,-25,81 2 0245 -- yen
-char165 "
bb 672,740,100,0,-230 2 0246 -- brokenbar
-char166 "
sc 615,753,141,32,-68,32 2 0247 -- section
-char167 "
ad 369,765,0,118,-141,81 2 0250 -- dieresis
-char168 "
co 747,752,12,133,-3,81 2 0251 -- copyright
-char169 "
Of 369,753,0,175,-52,81 2 0252 -- ordfeminine
-char170 "
fo 251,481,0,94,-42,81 0 0253 -- guilsinglleft
no 606,388,0,71,-60,71 0 0254 -- logicalnot
-char172 "
\- 606,287,0,52,-42,52 0 0255 -- minus
rg 747,752,12,133,-3,81 2 0256 -- registered
-char174 "
a- 485,736,0,112,-147,81 0 0257 -- macron
-char175 "
de 400,709,0,101,-108,81 0 0260 -- degree
-char176 "
-char177 606,518,24,62,3,62 0 0261 -- plusminus
+t+- 606,518,24,62,3,62 0 0261 -- plusminus
S2 332,747,0,151,-24,81 2 0262 -- twosuperior
-char178 "
S3 332,747,0,126,-48,81 2 0263 -- threesuperior
-char179 "
aa 375,786,0,119,-153,81 2 0264 -- acute
-char180 "
-char181 608,547,184,70,4,70 0 0265 -- mu
+mc 608,547,184,70,4,70 0 0265 -- mu
ps 564,740,110,174,-69,81 2 0266 -- paragraph
-char182 "
pc 277,316,0,8,-87,8 0 0267 -- periodcentered
-char183 "
ac 324,0,222,0,-2 1 0270 -- cedilla
-char184 "
S1 332,740,0,53,-140,53 2 0271 -- onesuperior
-char185 "
Om 369,753,0,147,-66,81 2 0272 -- ordmasculine
-char186 "
fc 251,481,0,62,-10,62 0 0273 -- guilsinglright
14 831,740,0,0,-133 2 0274 -- onequarter
-char188 "
12 831,740,0,29,-114,29 2 0275 -- onehalf
-char189 "
34 831,747,0,44,-76,44 2 0276 -- threequarters
-char190 "
r? 591,548,205,0,-14 1 0277 -- questiondown
-char191 "
`A 740,949,0,39,38,39 2 0300 -- Agrave
-char192 "
'A 740,949,0,39,38,39 2 0301 -- Aacute
-char193 "
^A 740,927,0,39,38,39 2 0302 -- Acircumflex
-char194 "
~A 740,917,0,39,38,39 2 0303 -- Atilde
-char195 "
:A 740,928,0,39,38,39 2 0304 -- Adieresis
-char196 "
oA 740,955,0,39,38,39 2 0305 -- Aring
-char197 "
AE 992,740,0,102,70,81 2 0306 -- AE
-char198 "
,C 813,752,222,107,-55,81 3 0307 -- Ccedilla
-char199 "
`E 536,949,0,126,-20,81 2 0310 -- Egrave
-char200 "
'E 536,949,0,126,-20,81 2 0311 -- Eacute
-char201 "
^E 536,927,0,126,-20,81 2 0312 -- Ecircumflex
-char202 "
:E 536,928,0,126,-20,81 2 0313 -- Edieresis
-char203 "
`I 226,949,0,164,-26,81 2 0314 -- Igrave
-char204 "
'I 226,949,0,264,-26,81 2 0315 -- Iacute
-char205 "
^I 226,927,0,263,-26,81 2 0316 -- Icircumflex
-char206 "
:I 226,928,0,220,-26,81 2 0317 -- Idieresis
-char207 "
-D 790,740,0,73,-54,73 2 0320 -- Eth
-char208 "
~N 740,917,0,111,-25,81 2 0321 -- Ntilde
-char209 "
`O 869,949,13,82,-55,81 2 0322 -- Ograve
-char210 "
'O 869,949,13,82,-55,81 2 0323 -- Oacute
-char211 "
^O 869,927,13,82,-55,81 2 0324 -- Ocircumflex
-char212 "
~O 869,917,13,82,-55,81 2 0325 -- Otilde
-char213 "
:O 869,928,13,82,-55,81 2 0326 -- Odieresis
-char214 "
-char215 606,482,0,56,-37,56 0 0327 -- multiply
+tmu 606,482,0,56,-37,56 0 0327 -- multiply
/O 868,819,83,111,-26,81 2 0330 -- Oslash
-char216 "
`U 655,949,13,111,-68,81 2 0331 -- Ugrave
-char217 "
'U 655,949,13,111,-68,81 2 0332 -- Uacute
-char218 "
^U 655,927,13,111,-68,81 2 0333 -- Ucircumflex
-char219 "
:U 655,928,13,111,-68,81 2 0334 -- Udieresis
-char220 "
'Y 592,949,0,187,-88,81 2 0335 -- Yacute
-char221 "
TP 592,740,0,79,-10,79 2 0336 -- Thorn
-char222 "
ss 554,753,13,74,-11,74 2 0337 -- germandbls
-char223 "
`a 683,786,13,89,-38,81 2 0340 -- agrave
-char224 "
'a 683,786,13,89,-38,81 2 0341 -- aacute
-char225 "
^a 683,764,13,89,-38,81 2 0342 -- acircumflex
-char226 "
~a 683,754,13,89,-38,81 2 0343 -- atilde
-char227 "
:a 683,765,13,89,-38,81 2 0344 -- adieresis
-char228 "
oa 683,807,13,89,-38,81 2 0345 -- aring
-char229 "
ae 1157,561,13,62,-30,62 0 0346 -- ae
-char230 "
,c 647,561,222,81,-37,81 1 0347 -- ccedilla
-char231 "
`e 650,786,13,64,-34,64 2 0350 -- egrave
-char232 "
'e 650,786,13,64,-34,64 2 0351 -- eacute
-char233 "
^e 650,764,13,64,-34,64 2 0352 -- ecircumflex
-char234 "
:e 650,765,13,64,-34,64 2 0353 -- edieresis
-char235 "
`i 200,786,0,146,-15,81 2 0354 -- igrave
-char236 "
'i 200,786,0,247,-15,81 2 0355 -- iacute
-char237 "
^i 200,764,0,245,9,81 2 0356 -- icircumflex
-char238 "
:i 200,765,0,203,-15,81 2 0357 -- idieresis
-char239 "
Sd 655,753,12,70,-38,70 2 0360 -- eth
-char240 "
~n 610,754,0,49,-15,49 2 0361 -- ntilde
-char241 "
`o 655,786,13,64,-38,64 2 0362 -- ograve
-char242 "
'o 655,786,13,64,-38,64 2 0363 -- oacute
-char243 "
^o 655,764,13,64,-38,64 2 0364 -- ocircumflex
-char244 "
~o 655,754,13,64,-38,64 2 0365 -- otilde
-char245 "
:o 655,765,13,64,-38,64 2 0366 -- odieresis
-char246 "
-char247 606,519,13,52,-42,52 0 0367 -- divide
+tdi 606,519,13,52,-42,52 0 0367 -- divide
/o 653,614,64,100,-1,81 0 0370 -- oslash
-char248 "
`u 608,786,13,84,-50,81 2 0371 -- ugrave
-char249 "
'u 608,786,13,84,-50,81 2 0372 -- uacute
-char250 "
^u 608,764,13,84,-50,81 2 0373 -- ucircumflex
-char251 "
:u 608,765,13,84,-50,81 2 0374 -- udieresis
-char252 "
'y 536,786,192,138,-47,81 3 0375 -- yacute
-char253 "
Tp 682,740,192,67,22,67 3 0376 -- thorn
-char254 "
:y 536,765,192,138,-47,81 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/AR b/contrib/groff/font/devps/AR
index 9dff2dc..8d3129a 100644
--- a/contrib/groff/font/devps/AR
+++ b/contrib/groff/font/devps/AR
@@ -80,7 +80,6 @@ T o -70
T i 10
T - -75
T hy -75
-T char173 -75
T e -49
T , -82
T : -15
@@ -97,7 +96,6 @@ V o -101
V i -5
V - -75
V hy -75
-V char173 -75
V e -101
V , -145
V : -18
@@ -113,7 +111,6 @@ W o -46
W i 6
W - -35
W hy -35
-W char173 -35
W e -47
W , -106
W : -15
@@ -126,7 +123,6 @@ Y . -175
Y o -89
Y - -85
Y hy -85
-Y char173 -85
Y e -89
Y , -145
Y : -10
@@ -212,7 +208,6 @@ r k 20
r i 20
r - -60
r hy -60
-r char173 -60
r g -15
r e -4
r d -6
@@ -238,337 +233,246 @@ 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,0,0,-53 2 0000 -- asciicircum
+ti 606,319,0,0,-72 0 0001 -- asciitilde
+vS 498,927,13,0,-22 2 0002 -- Scaron
+vZ 480,927,0,0,-12 2 0003 -- Zcaron
+vs 388,764,13,0,-11 2 0004 -- scaron
+vz 425,764,0,0,-10 2 0005 -- zcaron
+:Y 592,928,0,0,-1 2 0006 -- Ydieresis
+tm 1000,740,0,0,-9 2 0007 -- trademark
+aq 198,740,0,0,-59 2 0010 -- quotesingle
space 277 0 0040
-! 295,740 2 0041 -- exclam
-" 309,740 2 0042 -- quotedbl
+! 295,740,0,0,-111 2 0041 -- exclam
+" 309,740,0,0,-36 2 0042 -- quotedbl
dq "
-# 554,740 2 0043 -- numbersign
+# 554,740,0,0,-33 2 0043 -- numbersign
sh "
-$ 554,811,70 2 0044 -- dollar
+$ 554,811,70,0,-70 2 0044 -- dollar
Do "
-% 775,751,13 2 0045 -- percent
-& 757,753,12 2 0046 -- ampersand
-' 351,740 2 0047 -- quoteright
+% 775,751,13,0,-21 2 0045 -- percent
+& 757,753,12,0,-56 2 0046 -- ampersand
+' 351,740,0,0,-94 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
+( 369,757,205,0,-47 3 0050 -- parenleft
+) 369,757,205,0,-14 3 0051 -- parenright
+* 425,740,0,0,-58 2 0052 -- asterisk
++ 606,506,0,0,-51 0 0053 -- plus
+, 277,126,67,0,-14 0 0054 -- comma
+- 332,315,0,0,-30 0 0055 -- hyphen
hy "
-char173 "
-. 277,126 0 0056 -- period
-/ 437,740,100 2 0057 -- slash
+. 277,126,0,0,-102 0 0056 -- period
+/ 437,740,100,0,-44 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,0,-29 2 0060 -- zero
+1 554,740,0,0,-135 2 0061 -- one
+2 554,753,0,0,-40 2 0062 -- two
+3 554,753,13,0,-34 2 0063 -- three
+4 554,740,0,0,-14 2 0064 -- four
+5 554,740,13,0,-26 2 0065 -- five
+6 554,739,13,0,-24 2 0066 -- six
+7 554,740,0,0,-63 2 0067 -- seven
+8 554,753,13,0,-41 2 0070 -- eight
+9 554,752,0,0,-24 2 0071 -- nine
+: 277,548,0,0,-102 0 0072 -- colon
+; 277,548,67,0,-14 0 0073 -- semicolon
+< 606,514,8,0,-46 0 0074 -- less
+= 606,388,0,0,-51 0 0075 -- equal
+> 606,514,8,0,-52 0 0076 -- greater
+? 591,752,0,0,-64 2 0077 -- question
+@ 867,753,13,0,-65 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,0,0,-12 2 0101 -- A
+B 574,740,0,0,-74 2 0102 -- B
+C 813,752,13,0,-43 2 0103 -- C
+D 744,740,0,0,-74 2 0104 -- D
+E 536,740,0,0,-70 2 0105 -- E
+F 485,740,0,0,-70 2 0106 -- F
+G 872,753,13,0,-40 2 0107 -- G
+H 683,740,0,0,-76 2 0110 -- H
+I 226,740,0,0,-76 2 0111 -- I
+J 482,740,13,0,-6 2 0112 -- J
+K 591,740,0,0,-81 2 0113 -- K
+L 462,740,0,0,-82 2 0114 -- L
+M 919,740,0,0,-76 2 0115 -- M
+N 740,740,0,0,-75 2 0116 -- N
+O 869,753,13,0,-43 2 0117 -- O
+P 592,740,0,0,-75 2 0120 -- P
+Q 871,753,13,0,-40 2 0121 -- Q
+R 607,740,0,0,-70 2 0122 -- R
+S 498,753,13,0,-22 2 0123 -- S
+T 426,740,0,0,-6 2 0124 -- T
+U 655,740,13,0,-75 2 0125 -- U
+V 702,740,0,0,-8 2 0126 -- V
+W 960,740,0,0,-11 2 0127 -- W
+X 609,740,0,0,-8 2 0130 -- X
+Y 592,740,0,0,-1 2 0131 -- Y
+Z 480,740,0,0,-12 2 0132 -- Z
+[ 351,753,179,0,-133 2 0133 -- bracketleft
lB "
-\ 605,740,100 2 0134 -- backslash
+\ 605,740,100,0,-118 2 0134 -- backslash
rs "
-] 351,753,179 2 0135 -- bracketright
+] 351,753,179,0,-14 2 0135 -- bracketright
rB "
-a^ 502,764 2 0136 -- circumflex
+a^ 502,764,0,0,-74 2 0136 -- circumflex
^ "
_ 500,0,125 0 0137 -- underscore
-` 351,740 2 0140 -- quoteleft
+` 351,740,0,0,-95 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,-42 0 0141 -- a
+b 682,740,13,0,-68 2 0142 -- b
+c 647,561,13,0,-41 0 0143 -- c
+d 685,740,13,0,-39 2 0144 -- d
+e 650,561,13,0,-38 0 0145 -- e
+f 314,753,0,0,-19 2 0146 -- f
+g 673,561,215,0,-37 1 0147 -- g
+h 610,740,0,0,-62 2 0150 -- h
+i 200,740,0,0,-65 2 0151 -- i
+j 203,740,192,0,44 3 0152 -- j
+k 502,740,0,0,-70 2 0153 -- k
+l 200,740,0,0,-65 2 0154 -- l
+m 938,561,0,0,-66 0 0155 -- m
+n 610,561,0,0,-65 0 0156 -- n
+o 655,561,13,0,-42 0 0157 -- o
+p 682,561,192,0,-64 1 0160 -- p
+q 682,561,192,0,-37 1 0161 -- q
+r 301,561,0,0,-65 0 0162 -- r
+s 388,561,13,0,-24 0 0163 -- s
+t 339,740,0,0,-14 2 0164 -- t
+u 608,547,13,0,-62 0 0165 -- u
+v 554,547,0,0,-7 0 0166 -- v
+w 831,547,0,0,-13 0 0167 -- w
+x 480,547,0,0,-12 0 0170 -- x
+y 536,547,192,0,-15 1 0171 -- y
+z 425,547,0,0,-10 0 0172 -- z
+lC 351,740,189,0,-70 2 0173 -- braceleft
{ "
-ba 672,740,100 2 0174 -- bar
+ba 672,740,100,0,-299 2 0174 -- bar
| "
-rC 351,740,189 2 0175 -- braceright
+rC 351,740,189,0,-20 2 0175 -- braceright
} "
-a~ 439,754 2 0176 -- tilde
+a~ 439,754,0,0,-47 2 0176 -- tilde
~ "
-bq 354,126,68 0 0200 -- quotesinglbase
-Fo 425,481 0 0201 -- guillemotleft
-char171 "
-Fc 425,481 0 0202 -- guillemotright
-char187 "
-bu 606,532 0 0203 -- bullet
-Fn 554,818,153 2 0204 -- florin
-f/ 166,740 2 0205 -- fraction
-%0 1174,751,13 2 0206 -- perthousand
-dg 553,740,133 2 0207 -- dagger
-dd 553,740,133 2 0210 -- daggerdbl
-en 500,315 0 0211 -- endash
-em 1000,315 0 0212 -- emdash
-fi 487,753 2 0214 -- fi
-fl 485,753 2 0215 -- fl
-.i 200,547 0 0220 -- dotlessi
-ga 378,786 2 0222 -- grave
-a" 552,800 2 0223 -- hungarumlaut
-a. 222,765 2 0224 -- dotaccent
-ab 453,754 2 0225 -- breve
-ah 502,764 2 0226 -- caron
-ao 332,807 2 0227 -- ring
-ho 302,0,191 1 0230 -- ogonek
-lq 502,740 2 0231 -- quotedblleft
-rq 484,740 2 0232 -- quotedblright
-oe 1137,561,13 0 0233 -- oe
-/l 300,740 2 0234 -- lslash
-Bq 502,126,68 0 0235 -- quotedblbase
-OE 1194,753,13 2 0236 -- OE
-/L 517,740 2 0237 -- Lslash
-r! 295,548,192 1 0241 -- exclamdown
-char161 "
-ct 554,707 0 0242 -- cent
-char162 "
-Po 554,753 2 0243 -- sterling
-char163 "
-Cs 554,580 0 0244 -- currency
-char164 "
-Ye 554,740 2 0245 -- yen
-char165 "
-bb 672,740,100 2 0246 -- brokenbar
-char166 "
-sc 615,753,141 2 0247 -- section
-char167 "
-ad 369,765 2 0250 -- dieresis
-char168 "
-co 747,752,12 2 0251 -- copyright
-char169 "
-Of 369,753 2 0252 -- ordfeminine
-char170 "
-fo 251,481 0 0253 -- guilsinglleft
-no 606,388 0 0254 -- logicalnot
-char172 "
-\- 606,287 0 0255 -- minus
-rg 747,752,12 2 0256 -- registered
-char174 "
-a- 485,736 0 0257 -- macron
-char175 "
-de 400,709 0 0260 -- degree
-char176 "
-char177 606,518,24 0 0261 -- plusminus
-S2 332,747 2 0262 -- twosuperior
-char178 "
-S3 332,747 2 0263 -- threesuperior
-char179 "
-aa 375,786 2 0264 -- acute
-char180 "
-char181 608,547,184 0 0265 -- mu
-ps 564,740,110 2 0266 -- paragraph
-char182 "
-pc 277,316 0 0267 -- periodcentered
-char183 "
-ac 324,0,222 1 0270 -- cedilla
-char184 "
-S1 332,740 2 0271 -- onesuperior
-char185 "
-Om 369,753 2 0272 -- ordmasculine
-char186 "
-fc 251,481 0 0273 -- guilsinglright
-14 831,740 2 0274 -- onequarter
-char188 "
-12 831,740 2 0275 -- onehalf
-char189 "
-34 831,747 2 0276 -- threequarters
-char190 "
-r? 591,548,205 1 0277 -- questiondown
-char191 "
-`A 740,949 2 0300 -- Agrave
-char192 "
-'A 740,949 2 0301 -- Aacute
-char193 "
-^A 740,927 2 0302 -- Acircumflex
-char194 "
-~A 740,917 2 0303 -- Atilde
-char195 "
-:A 740,928 2 0304 -- Adieresis
-char196 "
-oA 740,955 2 0305 -- Aring
-char197 "
-AE 992,740 2 0306 -- AE
-char198 "
-,C 813,752,222 3 0307 -- Ccedilla
-char199 "
-`E 536,949 2 0310 -- Egrave
-char200 "
-'E 536,949 2 0311 -- Eacute
-char201 "
-^E 536,927 2 0312 -- Ecircumflex
-char202 "
-:E 536,928 2 0313 -- Edieresis
-char203 "
-`I 226,949 2 0314 -- Igrave
-char204 "
-'I 226,949 2 0315 -- Iacute
-char205 "
-^I 226,927 2 0316 -- Icircumflex
-char206 "
-:I 226,928 2 0317 -- Idieresis
-char207 "
--D 790,740 2 0320 -- Eth
-char208 "
-~N 740,917 2 0321 -- Ntilde
-char209 "
-`O 869,949,13 2 0322 -- Ograve
-char210 "
-'O 869,949,13 2 0323 -- Oacute
-char211 "
-^O 869,927,13 2 0324 -- Ocircumflex
-char212 "
-~O 869,917,13 2 0325 -- Otilde
-char213 "
-:O 869,928,13 2 0326 -- Odieresis
-char214 "
-char215 606,482 0 0327 -- multiply
-/O 868,819,83 2 0330 -- Oslash
-char216 "
-`U 655,949,13 2 0331 -- Ugrave
-char217 "
-'U 655,949,13 2 0332 -- Uacute
-char218 "
-^U 655,927,13 2 0333 -- Ucircumflex
-char219 "
-:U 655,928,13 2 0334 -- Udieresis
-char220 "
-'Y 592,949 2 0335 -- Yacute
-char221 "
-TP 592,740 2 0336 -- Thorn
-char222 "
-ss 554,753,13 2 0337 -- germandbls
-char223 "
-`a 683,786,13 2 0340 -- agrave
-char224 "
-'a 683,786,13 2 0341 -- aacute
-char225 "
-^a 683,764,13 2 0342 -- acircumflex
-char226 "
-~a 683,754,13 2 0343 -- atilde
-char227 "
-:a 683,765,13 2 0344 -- adieresis
-char228 "
-oa 683,807,13 2 0345 -- aring
-char229 "
-ae 1157,561,13 0 0346 -- ae
-char230 "
-,c 647,561,222 1 0347 -- ccedilla
-char231 "
-`e 650,786,13 2 0350 -- egrave
-char232 "
-'e 650,786,13 2 0351 -- eacute
-char233 "
-^e 650,764,13 2 0352 -- ecircumflex
-char234 "
-:e 650,765,13 2 0353 -- edieresis
-char235 "
-`i 200,786 2 0354 -- igrave
-char236 "
-'i 200,786 2 0355 -- iacute
-char237 "
-^i 200,764 2 0356 -- icircumflex
-char238 "
-:i 200,765 2 0357 -- idieresis
-char239 "
-Sd 655,753,12 2 0360 -- eth
-char240 "
-~n 610,754 2 0361 -- ntilde
-char241 "
-`o 655,786,13 2 0362 -- ograve
-char242 "
-'o 655,786,13 2 0363 -- oacute
-char243 "
-^o 655,764,13 2 0364 -- ocircumflex
-char244 "
-~o 655,754,13 2 0365 -- otilde
-char245 "
-:o 655,765,13 2 0366 -- odieresis
-char246 "
-char247 606,519,13 0 0367 -- divide
-/o 653,614,64 0 0370 -- oslash
-char248 "
-`u 608,786,13 2 0371 -- ugrave
-char249 "
-'u 608,786,13 2 0372 -- uacute
-char250 "
-^u 608,764,13 2 0373 -- ucircumflex
-char251 "
-:u 608,765,13 2 0374 -- udieresis
-char252 "
-'y 536,786,192 3 0375 -- yacute
-char253 "
-Tp 682,740,192 3 0376 -- thorn
-char254 "
-:y 536,765,192 3 0377 -- ydieresis
-char255 "
+bq 354,126,68,0,-89 0 0200 -- quotesinglbase
+Fo 425,481,0,0,-40 0 0201 -- guillemotleft
+Fc 425,481,0,0,-39 0 0202 -- guillemotright
+bu 606,532,0,0,-150 0 0203 -- bullet
+Fn 554,818,153,0,12 2 0204 -- florin
+f/ 166,740,0,114,113 2 0205 -- fraction
+%0 1174,751,13,0,-25 2 0206 -- perthousand
+dg 553,740,133,0,-59 2 0207 -- dagger
+dd 553,740,133,0,-59 2 0210 -- daggerdbl
+en 500,315,0,0,-35 0 0211 -- endash
+em 1000,315,0,0,-35 0 0212 -- emdash
+fi 487,753,0,0,-19 2 0214 -- fi
+fl 485,753,0,0,-19 2 0215 -- fl
+.i 200,547,0,0,-65 0 0220 -- dotlessi
+ga 378,786,0,0,-69 2 0222 -- grave
+a" 552,800,0,0,-119 2 0223 -- hungarumlaut
+a. 222,765,0,0,-74 2 0224 -- dotaccent
+ab 453,754,0,0,-52 2 0225 -- breve
+ah 502,764,0,0,-68 2 0226 -- caron
+ao 332,807,0,0,-62 2 0227 -- ring
+ho 302,0,191,0,-73 1 0230 -- ogonek
+lq 502,740,0,0,-97 2 0231 -- quotedblleft
+rq 484,740,0,0,-96 2 0232 -- quotedblright
+oe 1137,561,13,0,-34 0 0233 -- oe
+/l 300,740,0,0,-43 2 0234 -- lslash
+Bq 502,126,68,0,-89 0 0235 -- quotedblbase
+OE 1194,753,13,0,-45 2 0236 -- OE
+/L 517,740,0,0,-59 2 0237 -- Lslash
+r! 295,548,192,0,-110 1 0241 -- exclamdown
+ct 554,707,0,0,-48 0 0242 -- cent
+Po 554,753,0,0,-4 2 0243 -- sterling
+Cs 554,580,0,0,-8 0 0244 -- currency
+Ye 554,740,0,0,-4 2 0245 -- yen
+bb 672,740,100,0,-299 2 0246 -- brokenbar
+sc 615,753,141,0,-85 2 0247 -- section
+ad 369,765,0,0,-73 2 0250 -- dieresis
+co 747,752,12,8,9 2 0251 -- copyright
+Of 369,753,0,0,3 2 0252 -- ordfeminine
+fo 251,481,0,0,-40 0 0253 -- guilsinglleft
+no 606,388,0,0,-51 0 0254 -- logicalnot
+\- 606,287,0,0,-51 0 0255 -- minus
+rg 747,752,12,8,9 2 0256 -- registered
+a- 485,736,0,0,-73 0 0257 -- macron
+de 400,709,0,0,-56 0 0260 -- degree
+t+- 606,518,24,0,-51 0 0261 -- plusminus
+S2 332,747,0,0,-19 2 0262 -- twosuperior
+S3 332,747,0,0,-18 2 0263 -- threesuperior
+aa 375,786,0,0,-78 2 0264 -- acute
+mc 608,547,184,0,-80 0 0265 -- mu
+ps 564,740,110,0,-22 2 0266 -- paragraph
+pc 277,316,0,0,-102 0 0267 -- periodcentered
+ac 324,0,222,0,-80 1 0270 -- cedilla
+S1 332,740,0,0,-63 2 0271 -- onesuperior
+Om 369,753,0,0,-12 2 0272 -- ordmasculine
+fc 251,481,0,0,-39 0 0273 -- guilsinglright
+14 831,740,0,0,-100 2 0274 -- onequarter
+12 831,740,0,0,-81 2 0275 -- onehalf
+34 831,747,0,0,-46 2 0276 -- threequarters
+r? 591,548,205,0,-65 1 0277 -- questiondown
+`A 740,949,0,0,-12 2 0300 -- Agrave
+'A 740,949,0,0,-12 2 0301 -- Aacute
+^A 740,927,0,0,-12 2 0302 -- Acircumflex
+~A 740,917,0,0,-12 2 0303 -- Atilde
+:A 740,928,0,0,-12 2 0304 -- Adieresis
+oA 740,955,0,0,-12 2 0305 -- Aring
+AE 992,740,0,0,20 2 0306 -- AE
+,C 813,752,222,0,-43 3 0307 -- Ccedilla
+`E 536,949,0,0,-70 2 0310 -- Egrave
+'E 536,949,0,0,-70 2 0311 -- Eacute
+^E 536,927,0,0,-70 2 0312 -- Ecircumflex
+:E 536,928,0,0,-70 2 0313 -- Edieresis
+`I 226,949,0,0,47 2 0314 -- Igrave
+'I 226,949,0,49,-44 2 0315 -- Iacute
+^I 226,927,0,64,64 2 0316 -- Icircumflex
+:I 226,928,0,0,-2 2 0317 -- Idieresis
+-D 790,740,0,0,-40 2 0320 -- Eth
+~N 740,917,0,0,-75 2 0321 -- Ntilde
+`O 869,949,13,0,-43 2 0322 -- Ograve
+'O 869,949,13,0,-43 2 0323 -- Oacute
+^O 869,927,13,0,-43 2 0324 -- Ocircumflex
+~O 869,917,13,0,-43 2 0325 -- Otilde
+:O 869,928,13,0,-43 2 0326 -- Odieresis
+tmu 606,482,0,0,-74 0 0327 -- multiply
+/O 868,819,83,0,-43 2 0330 -- Oslash
+`U 655,949,13,0,-75 2 0331 -- Ugrave
+'U 655,949,13,0,-75 2 0332 -- Uacute
+^U 655,927,13,0,-75 2 0333 -- Ucircumflex
+:U 655,928,13,0,-75 2 0334 -- Udieresis
+'Y 592,949,0,0,-1 2 0335 -- Yacute
+TP 592,740,0,0,-60 2 0336 -- Thorn
+ss 554,753,13,0,-61 2 0337 -- germandbls
+`a 683,786,13,0,-42 2 0340 -- agrave
+'a 683,786,13,0,-42 2 0341 -- aacute
+^a 683,764,13,0,-42 2 0342 -- acircumflex
+~a 683,754,13,0,-42 2 0343 -- atilde
+:a 683,765,13,0,-42 2 0344 -- adieresis
+oa 683,807,13,0,-42 2 0345 -- aring
+ae 1157,561,13,0,-34 0 0346 -- ae
+,c 647,561,222,0,-41 1 0347 -- ccedilla
+`e 650,786,13,0,-38 2 0350 -- egrave
+'e 650,786,13,0,-38 2 0351 -- eacute
+^e 650,764,13,0,-38 2 0352 -- ecircumflex
+:e 650,765,13,0,-38 2 0353 -- edieresis
+`i 200,786,0,0,60 2 0354 -- igrave
+'i 200,786,0,62,-31 2 0355 -- iacute
+^i 200,764,0,77,77 2 0356 -- icircumflex
+:i 200,765,0,11,11 2 0357 -- idieresis
+Sd 655,753,12,0,-42 2 0360 -- eth
+~n 610,754,0,0,-65 2 0361 -- ntilde
+`o 655,786,13,0,-42 2 0362 -- ograve
+'o 655,786,13,0,-42 2 0363 -- oacute
+^o 655,764,13,0,-42 2 0364 -- ocircumflex
+~o 655,754,13,0,-42 2 0365 -- otilde
+:o 655,765,13,0,-42 2 0366 -- odieresis
+tdi 606,519,13,0,-51 0 0367 -- divide
+/o 653,614,64,0,-41 0 0370 -- oslash
+`u 608,786,13,0,-62 2 0371 -- ugrave
+'u 608,786,13,0,-62 2 0372 -- uacute
+^u 608,764,13,0,-62 2 0373 -- ucircumflex
+:u 608,765,13,0,-62 2 0374 -- udieresis
+'y 536,786,192,0,-15 3 0375 -- yacute
+Tp 682,740,192,0,-64 3 0376 -- thorn
+:y 536,765,192,0,-15 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/BMB b/contrib/groff/font/devps/BMB
index 186ec7b..96a7258 100644
--- a/contrib/groff/font/devps/BMB
+++ b/contrib/groff/font/devps/BMB
@@ -35,7 +35,6 @@ T o -28
T i 27
T - -10
T hy -10
-T char173 -10
T e -29
T , -122
T : 7
@@ -51,7 +50,6 @@ V o -79
V i 15
V - -10
V hy -10
-V char173 -10
V e -80
V , -103
V : -37
@@ -66,7 +64,6 @@ W o -78
W i 15
W - -10
W hy -10
-W char173 -10
W e -79
W , -103
W : -37
@@ -82,7 +79,6 @@ Y o -66
Y i 2
Y - -10
Y hy -10
-Y char173 -10
Y e -67
Y , -103
Y : -32
@@ -96,7 +92,6 @@ r n 20
r m 20
r - -10
r hy -10
-r char173 -10
r h -23
r g -9
r f 20
@@ -105,337 +100,246 @@ 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,0,0,-52 2 0000 -- asciicircum
+ti 600,368,0,0,-51 0 0001 -- asciitilde
+vS 660,896,17,0,-21 2 0002 -- Scaron
+vZ 640,896,0,0,-6 2 0003 -- Zcaron
+vs 520,717,8,0,-22 2 0004 -- scaron
+vz 560,717,0,0,-22 2 0005 -- zcaron
+:Y 700,877,0,18,20 2 0006 -- Ydieresis
+tm 980,681,0,2,-42 2 0007 -- trademark
+aq 240,698,0,0,-42 2 0010 -- quotesingle
space 340 0 0040
-! 360,698,8 2 0041 -- exclam
-" 420,698 2 0042 -- quotedbl
+! 360,698,8,0,-82 2 0041 -- exclam
+" 420,698,0,0,-11 2 0042 -- quotedbl
dq "
-# 660,681 2 0043 -- numbersign
+# 660,681,0,0,-84 2 0043 -- numbersign
sh "
-$ 660,805,119 2 0044 -- dollar
+$ 660,805,119,0,-48 2 0044 -- dollar
Do "
-% 940,698,8 2 0045 -- percent
-& 800,698,17 2 0046 -- ampersand
-' 320,698 2 0047 -- quoteright
+% 940,698,8,0,-12 2 0045 -- percent
+& 800,698,17,0,-21 2 0046 -- ampersand
+' 320,698,0,0,-82 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
+( 320,749,150,0,-48 2 0050 -- parenleft
+) 320,749,150,0,-20 2 0051 -- parenright
+* 460,697,0,0,-62 2 0052 -- asterisk
++ 600,514,0,0,-51 0 0053 -- plus
+, 340,162,124,0,-78 0 0054 -- comma
+- 360,318,0,0,-20 0 0055 -- hyphen
hy "
-char173 "
-. 340,172,8 0 0056 -- period
-/ 600,725,149 2 0057 -- slash
+. 340,172,8,0,-76 0 0056 -- period
+/ 600,725,149,0,-50 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,0,-30 2 0060 -- zero
+1 660,681,0,0,-137 2 0061 -- one
+2 660,698,0,0,-41 2 0062 -- two
+3 660,698,17,0,-37 2 0063 -- three
+4 660,681,0,0,-19 2 0064 -- four
+5 660,723,17,0,-44 2 0065 -- five
+6 660,698,17,0,-34 2 0066 -- six
+7 660,681,0,0,-36 2 0067 -- seven
+8 660,698,17,0,-36 2 0070 -- eight
+9 660,698,17,0,-33 2 0071 -- nine
+: 340,515,8,0,-76 0 0072 -- colon
+; 340,515,124,0,-75 0 0073 -- semicolon
+< 600,542,9,0,-49 0 0074 -- less
+= 600,421,0,0,-51 0 0075 -- equal
+> 600,542,9,0,-48 0 0076 -- greater
+? 660,698,8,0,-61 2 0077 -- question
+@ 820,698,17,0,-60 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,0,43,34 2 0101 -- A
+B 720,681,0,0,-20 2 0102 -- B
+C 740,698,17,0,-35 2 0103 -- C
+D 780,681,0,0,-20 2 0104 -- D
+E 720,681,0,4,-20 2 0105 -- E
+F 680,681,0,6,-20 2 0106 -- F
+G 780,698,17,0,-35 2 0107 -- G
+H 820,681,0,0,-20 2 0110 -- H
+I 400,681,0,0,-20 2 0111 -- I
+J 640,681,17,0,12 2 0112 -- J
+K 800,681,0,0,-20 2 0113 -- K
+L 640,681,0,28,-20 2 0114 -- L
+M 940,681,0,0,-20 2 0115 -- M
+N 740,681,0,0,-20 2 0116 -- N
+O 800,698,17,0,-35 2 0117 -- O
+P 660,681,0,0,-20 2 0120 -- P
+Q 800,698,226,0,-35 3 0121 -- Q
+R 780,681,0,3,-20 2 0122 -- R
+S 660,698,17,0,-21 2 0123 -- S
+T 700,681,0,3,4 2 0124 -- T
+U 740,681,17,0,-15 2 0125 -- U
+V 720,681,0,10,20 2 0126 -- V
+W 940,681,0,23,20 2 0127 -- W
+X 780,681,0,0,-1 2 0130 -- X
+Y 700,681,0,18,20 2 0131 -- Y
+Z 640,681,0,0,-6 2 0132 -- Z
+[ 300,725,138,0,-75 2 0133 -- bracketleft
lB "
-\ 600,725 2 0134 -- backslash
+\ 600,725,0,0,-50 2 0134 -- backslash
rs "
-] 300,725,138 2 0135 -- bracketright
+] 300,725,138,0,-21 2 0135 -- bracketright
rB "
-a^ 500,731 2 0136 -- circumflex
+a^ 500,731,0,0,-68 2 0136 -- circumflex
^ "
_ 500,0,125 0 0137 -- underscore
-` 320,698 2 0140 -- quoteleft
+` 320,698,0,0,-82 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,8,-28 0 0141 -- a
+b 600,725,8,0,20 2 0142 -- b
+c 580,515,8,0,-31 0 0143 -- c
+d 640,725,8,0,-31 2 0144 -- d
+e 580,515,8,0,-31 0 0145 -- e
+f 380,741,0,81,-22 2 0146 -- f
+g 580,595,243,3,-9 1 0147 -- g
+h 680,725,0,0,-22 2 0150 -- h
+i 360,729,0,0,-22 2 0151 -- i
+j 340,729,221,0,94 3 0152 -- j
+k 660,725,0,0,-22 2 0153 -- k
+l 340,725,0,0,-9 2 0154 -- l
+m 1000,515,0,0,-22 0 0155 -- m
+n 680,515,0,0,-22 0 0156 -- n
+o 620,515,8,0,-31 0 0157 -- o
+p 640,515,212,0,-22 1 0160 -- p
+q 620,515,212,13,-31 1 0161 -- q
+r 460,502,0,2,-22 0 0162 -- r
+s 520,515,8,0,-22 0 0163 -- s
+t 460,660,8,0,-22 2 0164 -- t
+u 660,502,8,0,-22 0 0165 -- u
+v 600,502,0,0,6 0 0166 -- v
+w 800,502,0,10,6 0 0167 -- w
+x 600,502,0,0,-8 0 0170 -- x
+y 620,502,221,0,-6 1 0171 -- y
+z 560,502,0,0,-22 0 0172 -- z
+lC 320,726,139,0,-14 2 0173 -- braceleft
{ "
-ba 600,750,250 3 0174 -- bar
+ba 600,750,250,0,-243 3 0174 -- bar
| "
-rC 320,725,140 2 0175 -- braceright
+rC 320,725,140,0,-15 2 0175 -- braceright
} "
-a~ 480,691 2 0176 -- tilde
+a~ 480,691,0,0,-69 2 0176 -- tilde
~ "
-bq 320,144,114 0 0200 -- quotesinglbase
-Fo 400,457 0 0201 -- guillemotleft
-char171 "
-Fc 400,457 0 0202 -- guillemotright
-char187 "
-bu 460,511 0 0203 -- bullet
-Fn 660,749,209 2 0204 -- florin
-f/ 120,681 2 0205 -- fraction
-%0 1360,698,8 2 0206 -- perthousand
-dg 440,698,156 2 0207 -- dagger
-dd 380,698,156 2 0210 -- daggerdbl
-en 500,318 0 0211 -- endash
-em 1000,318 0 0212 -- emdash
-fi 740,741 2 0214 -- fi
-fl 740,741 2 0215 -- fl
-.i 360,502 0 0220 -- dotlessi
-ga 400,730 2 0222 -- grave
-a" 440,741 2 0223 -- hungarumlaut
-a. 320,730 2 0224 -- dotaccent
-ab 500,722 2 0225 -- breve
-ah 500,717 2 0226 -- caron
-ao 340,755 2 0227 -- ring
-ho 320,0,163 0 0230 -- ogonek
-lq 540,698 2 0231 -- quotedblleft
-rq 540,698 2 0232 -- quotedblright
-oe 940,515,8 0 0233 -- oe
-/l 340,725 2 0234 -- lslash
-Bq 540,144,114 0 0235 -- quotedblbase
-OE 1220,698,17 2 0236 -- OE
-/L 640,681 2 0237 -- Lslash
-r! 360,515,191 0 0241 -- exclamdown
-char161 "
-ct 660,674 2 0242 -- cent
-char162 "
-Po 660,698,17 2 0243 -- sterling
-char163 "
-Cs 660,593 0 0244 -- currency
-char164 "
-Ye 660,681 2 0245 -- yen
-char165 "
-bb 600,675,175 2 0246 -- brokenbar
-char166 "
-sc 600,698,153 2 0247 -- section
-char167 "
-ad 500,698 2 0250 -- dieresis
-char168 "
-co 740,698,17 2 0251 -- copyright
-char169 "
-Of 400,698 2 0252 -- ordfeminine
-char170 "
-fo 220,457 0 0253 -- guilsinglleft
-no 600,421 0 0254 -- logicalnot
-char172 "
-\- 600,323 0 0255 -- minus
-rg 740,698,17 2 0256 -- registered
-char174 "
-a- 460,663 2 0257 -- macron
-char175 "
-de 400,698 2 0260 -- degree
-char176 "
-char177 600,514 0 0261 -- plusminus
-S2 396,698 2 0262 -- twosuperior
-char178 "
-S3 396,698 2 0263 -- threesuperior
-char179 "
-aa 400,731 2 0264 -- acute
-char180 "
-char181 660,502,221 1 0265 -- mu
-ps 800,681 2 0266 -- paragraph
-char182 "
-pc 340,355 0 0267 -- periodcentered
-char183 "
-ac 360,0,213 1 0270 -- cedilla
-char184 "
-S1 396,687 2 0271 -- onesuperior
-char185 "
-Om 400,698 2 0272 -- ordmasculine
-char186 "
-fc 220,457 0 0273 -- guilsinglright
-14 990,681 2 0274 -- onequarter
-char188 "
-12 990,681 2 0275 -- onehalf
-char189 "
-34 990,692 2 0276 -- threequarters
-char190 "
-r? 660,515,191 0 0277 -- questiondown
-char191 "
-`A 720,909 2 0300 -- Agrave
-char192 "
-'A 720,910 2 0301 -- Aacute
-char193 "
-^A 720,910 2 0302 -- Acircumflex
-char194 "
-~A 720,870 2 0303 -- Atilde
-char195 "
-:A 720,877 2 0304 -- Adieresis
-char196 "
-oA 720,934 2 0305 -- Aring
-char197 "
-AE 1140,681 2 0306 -- AE
-char198 "
-,C 740,698,213 3 0307 -- Ccedilla
-char199 "
-`E 720,909 2 0310 -- Egrave
-char200 "
-'E 720,910 2 0311 -- Eacute
-char201 "
-^E 720,910 2 0312 -- Ecircumflex
-char202 "
-:E 720,877 2 0313 -- Edieresis
-char203 "
-`I 400,909 2 0314 -- Igrave
-char204 "
-'I 400,910 2 0315 -- Iacute
-char205 "
-^I 400,910 2 0316 -- Icircumflex
-char206 "
-:I 400,877 2 0317 -- Idieresis
-char207 "
--D 780,681 2 0320 -- Eth
-char208 "
-~N 740,870 2 0321 -- Ntilde
-char209 "
-`O 800,909,17 2 0322 -- Ograve
-char210 "
-'O 800,910,17 2 0323 -- Oacute
-char211 "
-^O 800,910,17 2 0324 -- Ocircumflex
-char212 "
-~O 800,870,17 2 0325 -- Otilde
-char213 "
-:O 800,877,17 2 0326 -- Odieresis
-char214 "
-char215 600,514 0 0327 -- multiply
-/O 800,781,110 2 0330 -- Oslash
-char216 "
-`U 740,909,17 2 0331 -- Ugrave
-char217 "
-'U 740,910,17 2 0332 -- Uacute
-char218 "
-^U 740,910,17 2 0333 -- Ucircumflex
-char219 "
-:U 740,877,17 2 0334 -- Udieresis
-char220 "
-'Y 700,910 2 0335 -- Yacute
-char221 "
-TP 660,681 2 0336 -- Thorn
-char222 "
-ss 660,699,91 2 0337 -- germandbls
-char223 "
-`a 580,730,8 2 0340 -- agrave
-char224 "
-'a 580,731,8 2 0341 -- aacute
-char225 "
-^a 580,731,8 2 0342 -- acircumflex
-char226 "
-~a 580,691,8 2 0343 -- atilde
-char227 "
-:a 580,698,8 2 0344 -- adieresis
-char228 "
-oa 580,755,8 2 0345 -- aring
-char229 "
-ae 880,515,8 0 0346 -- ae
-char230 "
-,c 580,515,213 1 0347 -- ccedilla
-char231 "
-`e 580,730,8 2 0350 -- egrave
-char232 "
-'e 580,731,8 2 0351 -- eacute
-char233 "
-^e 580,731,8 2 0352 -- ecircumflex
-char234 "
-:e 580,698,8 2 0353 -- edieresis
-char235 "
-`i 360,730 2 0354 -- igrave
-char236 "
-'i 360,731 2 0355 -- iacute
-char237 "
-^i 360,731 2 0356 -- icircumflex
-char238 "
-:i 360,698 2 0357 -- idieresis
-char239 "
-Sd 620,741,8 2 0360 -- eth
-char240 "
-~n 680,691 2 0361 -- ntilde
-char241 "
-`o 620,730,8 2 0362 -- ograve
-char242 "
-'o 620,731,8 2 0363 -- oacute
-char243 "
-^o 620,731,8 2 0364 -- ocircumflex
-char244 "
-~o 620,691,8 2 0365 -- otilde
-char245 "
-:o 620,698,8 2 0366 -- odieresis
-char246 "
-char247 600,521 0 0367 -- divide
-/o 620,551,40 0 0370 -- oslash
-char248 "
-`u 660,730,8 2 0371 -- ugrave
-char249 "
-'u 660,731,8 2 0372 -- uacute
-char250 "
-^u 660,731,8 2 0373 -- ucircumflex
-char251 "
-:u 660,698,8 2 0374 -- udieresis
-char252 "
-'y 620,731,221 3 0375 -- yacute
-char253 "
-Tp 640,725,212 3 0376 -- thorn
-char254 "
-:y 620,698,221 3 0377 -- ydieresis
-char255 "
+bq 320,144,114,0,-82 0 0200 -- quotesinglbase
+Fo 400,457,0,0,-34 0 0201 -- guillemotleft
+Fc 400,457,0,0,-34 0 0202 -- guillemotright
+bu 460,511,0,0,-60 0 0203 -- bullet
+Fn 660,749,209,14,46 2 0204 -- florin
+f/ 120,681,0,192,194 2 0205 -- fraction
+%0 1360,698,8,0,-12 2 0206 -- perthousand
+dg 440,698,156,0,-33 2 0207 -- dagger
+dd 380,698,156,0,-8 2 0210 -- daggerdbl
+en 500,318,0,25,25 0 0211 -- endash
+em 1000,318,0,25,25 0 0212 -- emdash
+fi 740,741,0,0,-22 2 0214 -- fi
+fl 740,741,0,0,-22 2 0215 -- fl
+.i 360,502,0,0,-22 0 0220 -- dotlessi
+ga 400,730,0,0,-68 2 0222 -- grave
+a" 440,741,0,0,-68 2 0223 -- hungarumlaut
+a. 320,730,0,0,-68 2 0224 -- dotaccent
+ab 500,722,0,0,-68 2 0225 -- breve
+ah 500,717,0,0,-68 2 0226 -- caron
+ao 340,755,0,0,-68 2 0227 -- ring
+ho 320,0,163,0,-68 0 0230 -- ogonek
+lq 540,698,0,0,-82 2 0231 -- quotedblleft
+rq 540,698,0,0,-82 2 0232 -- quotedblright
+oe 940,515,8,0,-31 0 0233 -- oe
+/l 340,725,0,0,-9 2 0234 -- lslash
+Bq 540,144,114,0,-82 0 0235 -- quotedblbase
+OE 1220,698,17,0,-35 2 0236 -- OE
+/L 640,681,0,28,-20 2 0237 -- Lslash
+r! 360,515,191,0,-84 0 0241 -- exclamdown
+ct 660,674,0,0,-133 2 0242 -- cent
+Po 660,698,17,0,-10 2 0243 -- sterling
+Cs 660,593,0,0,-77 0 0244 -- currency
+Ye 660,681,0,36,28 2 0245 -- yen
+bb 600,675,175,0,-243 2 0246 -- brokenbar
+sc 600,698,153,0,-36 2 0247 -- section
+ad 500,698,0,0,-68 2 0250 -- dieresis
+co 740,698,17,0,-23 2 0251 -- copyright
+Of 400,698,0,0,-27 2 0252 -- ordfeminine
+fo 220,457,0,0,-34 0 0253 -- guilsinglleft
+no 600,421,0,0,-51 0 0254 -- logicalnot
+\- 600,323,0,0,-51 0 0255 -- minus
+rg 740,698,17,0,-23 2 0256 -- registered
+a- 460,663,0,0,-68 2 0257 -- macron
+de 400,698,0,0,-50 2 0260 -- degree
+t+- 600,514,0,0,-51 0 0261 -- plusminus
+S2 396,698,0,0,-14 2 0262 -- twosuperior
+S3 396,698,0,0,-5 2 0263 -- threesuperior
+aa 400,731,0,0,-68 2 0264 -- acute
+mc 660,502,221,0,-22 1 0265 -- mu
+ps 800,681,0,0,-51 2 0266 -- paragraph
+pc 340,355,0,0,-76 0 0267 -- periodcentered
+ac 360,0,213,0,-68 1 0270 -- cedilla
+S1 396,687,0,0,-65 2 0271 -- onesuperior
+Om 400,698,0,0,-17 2 0272 -- ordmasculine
+fc 220,457,0,0,-34 0 0273 -- guilsinglright
+14 990,681,0,0,-65 2 0274 -- onequarter
+12 990,681,0,0,-65 2 0275 -- onehalf
+34 990,692,0,0,-15 2 0276 -- threequarters
+r? 660,515,191,0,-62 0 0277 -- questiondown
+`A 720,909,0,43,34 2 0300 -- Agrave
+'A 720,910,0,43,34 2 0301 -- Aacute
+^A 720,910,0,43,34 2 0302 -- Acircumflex
+~A 720,870,0,43,34 2 0303 -- Atilde
+:A 720,877,0,43,34 2 0304 -- Adieresis
+oA 720,934,0,43,34 2 0305 -- Aring
+AE 1140,681,0,9,34 2 0306 -- AE
+,C 740,698,213,0,-35 3 0307 -- Ccedilla
+`E 720,909,0,4,-20 2 0310 -- Egrave
+'E 720,910,0,4,-20 2 0311 -- Eacute
+^E 720,910,0,4,-20 2 0312 -- Ecircumflex
+:E 720,877,0,4,-20 2 0313 -- Edieresis
+`I 400,909,0,0,-20 2 0314 -- Igrave
+'I 400,910,0,0,-20 2 0315 -- Iacute
+^I 400,910,0,0,-18 2 0316 -- Icircumflex
+:I 400,877,0,0,-18 2 0317 -- Idieresis
+-D 780,681,0,0,-20 2 0320 -- Eth
+~N 740,870,0,0,-20 2 0321 -- Ntilde
+`O 800,909,17,0,-35 2 0322 -- Ograve
+'O 800,910,17,0,-35 2 0323 -- Oacute
+^O 800,910,17,0,-35 2 0324 -- Ocircumflex
+~O 800,870,17,0,-35 2 0325 -- Otilde
+:O 800,877,17,0,-35 2 0326 -- Odieresis
+tmu 600,514,0,0,-48 0 0327 -- multiply
+/O 800,781,110,0,-35 2 0330 -- Oslash
+`U 740,909,17,0,-15 2 0331 -- Ugrave
+'U 740,910,17,0,-15 2 0332 -- Uacute
+^U 740,910,17,0,-15 2 0333 -- Ucircumflex
+:U 740,877,17,0,-15 2 0334 -- Udieresis
+'Y 700,910,0,18,20 2 0335 -- Yacute
+TP 660,681,0,0,-20 2 0336 -- Thorn
+ss 660,699,91,0,61 2 0337 -- germandbls
+`a 580,730,8,8,-28 2 0340 -- agrave
+'a 580,731,8,8,-28 2 0341 -- aacute
+^a 580,731,8,8,-28 2 0342 -- acircumflex
+~a 580,691,8,8,-28 2 0343 -- atilde
+:a 580,698,8,8,-28 2 0344 -- adieresis
+oa 580,755,8,8,-28 2 0345 -- aring
+ae 880,515,8,0,-28 0 0346 -- ae
+,c 580,515,213,0,-31 1 0347 -- ccedilla
+`e 580,730,8,0,-31 2 0350 -- egrave
+'e 580,731,8,0,-31 2 0351 -- eacute
+^e 580,731,8,0,-31 2 0352 -- ecircumflex
+:e 580,698,8,0,-31 2 0353 -- edieresis
+`i 360,730,0,0,-22 2 0354 -- igrave
+'i 360,731,0,0,-22 2 0355 -- iacute
+^i 360,731,0,0,2 2 0356 -- icircumflex
+:i 360,698,0,11,2 2 0357 -- idieresis
+Sd 620,741,8,0,-31 2 0360 -- eth
+~n 680,691,0,0,-22 2 0361 -- ntilde
+`o 620,730,8,0,-31 2 0362 -- ograve
+'o 620,731,8,0,-31 2 0363 -- oacute
+^o 620,731,8,0,-31 2 0364 -- ocircumflex
+~o 620,691,8,0,-31 2 0365 -- otilde
+:o 620,698,8,0,-31 2 0366 -- odieresis
+tdi 600,521,0,0,-51 0 0367 -- divide
+/o 620,551,40,0,-31 0 0370 -- oslash
+`u 660,730,8,0,-22 2 0371 -- ugrave
+'u 660,731,8,0,-22 2 0372 -- uacute
+^u 660,731,8,0,-22 2 0373 -- ucircumflex
+:u 660,698,8,0,-22 2 0374 -- udieresis
+'y 620,731,221,0,-6 3 0375 -- yacute
+Tp 640,725,212,0,-22 3 0376 -- thorn
+:y 620,698,221,0,-6 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/BMBI b/contrib/groff/font/devps/BMBI
index 43d2bdd..32b1422 100644
--- a/contrib/groff/font/devps/BMBI
+++ b/contrib/groff/font/devps/BMBI
@@ -39,7 +39,6 @@ T o -5
T i 42
T - -20
T hy -20
-T char173 -20
T e -10
T , -100
T : 26
@@ -55,7 +54,6 @@ V o -50
V i 32
V - -20
V hy -20
-V char173 -20
V e -50
V , -137
V : -28
@@ -70,7 +68,6 @@ W o -100
W i -36
W - -22
W hy -22
-W char173 -22
W e -100
W , -201
W : -86
@@ -85,7 +82,6 @@ Y o -41
Y i 20
Y - -20
Y hy -20
-Y char173 -20
Y e -46
Y , -106
Y : -9
@@ -99,7 +95,6 @@ r n 39
r m 39
r - -20
r hy -20
-r char173 -20
r h -35
r g -23
r f 42
@@ -136,7 +131,6 @@ cq "
, 340,185,124,8,-50,8 0 0054 -- comma
- 280,313,0,89,-9,73 0 0055 -- hyphen
hy "
-char173 "
. 340,177,8,6,-56,6 0 0056 -- period
/ 360,742,106,192,41,73 2 0057 -- slash
sl "
@@ -231,9 +225,7 @@ a~ 480,709,0,103,-128,73 2 0176 -- tilde
~ "
bq 300,166,112,34,-56,34 0 0200 -- quotesinglbase
Fo 380,503,0,76,-12,73 0 0201 -- guillemotleft
-char171 "
Fc 380,503,0,76,-12,73 0 0202 -- guillemotright
-char187 "
bu 360,511,0,94,-10,73 0 0203 -- bullet
Fn 680,741,199,113,78,73 2 0204 -- florin
f/ 120,681,0,312,194,73 2 0205 -- fraction
@@ -260,185 +252,97 @@ Bq 520,166,112,25,-56,25 0 0235 -- quotedblbase
OE 1180,698,17,115,-44,73 2 0236 -- OE
/L 640,681,0,134,36,73 2 0237 -- Lslash
r! 320,515,191,74,-14,73 0 0241 -- exclamdown
-char161 "
ct 680,718,0,0,-111 2 0242 -- cent
-char162 "
Po 680,698,17,157,50,73 2 0243 -- sterling
-char163 "
Cs 680,571,0,7,-98,7 0 0244 -- currency
-char164 "
Ye 680,681,0,152,-42,73 2 0245 -- yen
-char165 "
bb 620,675,175,0,-253 2 0246 -- brokenbar
-char166 "
sc 620,698,137,68,4,68 2 0247 -- section
-char167 "
ad 520,734,0,99,-130,73 2 0250 -- dieresis
-char168 "
co 780,698,17,53,-33,53 2 0251 -- copyright
-char169 "
Of 440,685,0,105,-68,73 2 0252 -- ordfeminine
-char170 "
fo 220,503,0,79,-12,73 0 0253 -- guilsinglleft
no 620,421,0,15,-31,15 0 0254 -- logicalnot
-char172 "
\- 600,323,0,45,-41,45 0 0255 -- minus
rg 780,698,17,53,-33,53 2 0256 -- registered
-char174 "
a- 480,691,0,101,-127,73 2 0257 -- macron
-char175 "
de 400,698,0,80,-80,73 2 0260 -- degree
-char176 "
-char177 600,514,0,45,-41,45 0 0261 -- plusminus
+t+- 600,514,0,45,-41,45 0 0261 -- plusminus
S2 408,698,0,127,-41,73 2 0262 -- twosuperior
-char178 "
S3 408,698,0,125,-36,73 2 0263 -- threesuperior
-char179 "
aa 340,771,0,117,-126,73 2 0264 -- acute
-char180 "
-char181 680,507,213,90,-4,73 1 0265 -- mu
+mc 680,507,213,90,-4,73 1 0265 -- mu
ps 680,681,0,85,-87,73 2 0266 -- paragraph
-char182 "
pc 340,358,0,26,-76,26 0 0267 -- periodcentered
-char183 "
ac 360,0,220,0,-18 1 0270 -- cedilla
-char184 "
S1 408,688,0,48,-68,48 2 0271 -- onesuperior
-char185 "
Om 440,685,0,65,-77,65 2 0272 -- ordmasculine
-char186 "
fc 220,503,0,79,-12,73 0 0273 -- guilsinglright
14 1020,681,0,84,-68,73 2 0274 -- onequarter
-char188 "
12 1020,681,0,66,-68,66 2 0275 -- onehalf
-char189 "
34 1020,691,0,84,-36,73 2 0276 -- threequarters
-char190 "
r? 620,515,189,36,-33,36 0 0277 -- questiondown
-char191 "
`A 720,937,0,99,77,73 2 0300 -- Agrave
-char192 "
'A 720,937,0,99,77,73 2 0301 -- Aacute
-char193 "
^A 720,915,0,99,77,73 2 0302 -- Acircumflex
-char194 "
~A 720,875,0,99,77,73 2 0303 -- Atilde
-char195 "
:A 720,900,0,99,77,73 2 0304 -- Adieresis
-char196 "
oA 720,941,0,99,77,73 2 0305 -- Aring
-char197 "
AE 1140,681,0,117,77,73 2 0306 -- AE
-char198 "
,C 700,698,220,104,-28,73 3 0307 -- Ccedilla
-char199 "
`E 720,937,0,107,36,73 2 0310 -- Egrave
-char200 "
'E 720,937,0,107,36,73 2 0311 -- Eacute
-char201 "
^E 720,915,0,107,36,73 2 0312 -- Ecircumflex
-char202 "
:E 720,900,0,107,36,73 2 0313 -- Edieresis
-char203 "
`I 380,937,0,155,36,73 2 0314 -- Igrave
-char204 "
'I 380,937,0,155,36,73 2 0315 -- Iacute
-char205 "
^I 380,915,0,163,36,73 2 0316 -- Icircumflex
-char206 "
:I 380,900,0,169,36,73 2 0317 -- Idieresis
-char207 "
-D 760,681,0,95,36,73 2 0320 -- Eth
-char208 "
~N 740,875,0,155,36,73 2 0321 -- Ntilde
-char209 "
`O 760,937,17,96,-28,73 2 0322 -- Ograve
-char210 "
'O 760,937,17,96,-28,73 2 0323 -- Oacute
-char211 "
^O 760,915,17,96,-28,73 2 0324 -- Ocircumflex
-char212 "
~O 760,875,17,96,-28,73 2 0325 -- Otilde
-char213 "
:O 760,900,17,96,-28,73 2 0326 -- Odieresis
-char214 "
-char215 600,514,0,45,-41,45 0 0327 -- multiply
+tmu 600,514,0,45,-41,45 0 0327 -- multiply
/O 760,725,29,137,29,73 2 0330 -- Oslash
-char216 "
`U 740,937,17,165,-62,73 2 0331 -- Ugrave
-char217 "
'U 740,937,17,165,-62,73 2 0332 -- Uacute
-char218 "
^U 740,915,17,165,-62,73 2 0333 -- Ucircumflex
-char219 "
:U 740,900,17,165,-62,73 2 0334 -- Udieresis
-char220 "
'Y 660,937,0,207,-22,73 2 0335 -- Yacute
-char221 "
TP 640,681,0,111,56,73 2 0336 -- Thorn
-char222 "
ss 660,741,213,92,281,73 3 0337 -- germandbls
-char223 "
`a 680,771,8,105,-34,73 2 0340 -- agrave
-char224 "
'a 680,771,8,105,-34,73 2 0341 -- aacute
-char225 "
^a 680,749,8,105,-34,73 2 0342 -- acircumflex
-char226 "
~a 680,709,8,105,-34,73 2 0343 -- atilde
-char227 "
:a 680,734,8,105,-34,73 2 0344 -- adieresis
-char228 "
oa 680,775,8,105,-34,73 2 0345 -- aring
-char229 "
ae 880,515,8,83,11,73 0 0346 -- ae
-char230 "
,c 560,515,220,87,-8,73 1 0347 -- ccedilla
-char231 "
`e 560,771,8,86,-9,73 2 0350 -- egrave
-char232 "
'e 560,771,8,86,-9,73 2 0351 -- eacute
-char233 "
^e 560,749,8,86,-9,73 2 0352 -- ecircumflex
-char234 "
:e 560,734,8,86,-9,73 2 0353 -- edieresis
-char235 "
`i 380,771,8,94,-33,73 2 0354 -- igrave
-char236 "
'i 380,771,8,90,-33,73 2 0355 -- iacute
-char237 "
^i 380,749,8,103,-33,73 2 0356 -- icircumflex
-char238 "
:i 380,734,8,149,-33,73 2 0357 -- idieresis
-char239 "
Sd 600,741,8,112,-9,73 2 0360 -- eth
-char240 "
~n 680,709,8,85,-33,73 2 0361 -- ntilde
-char241 "
`o 600,771,8,77,-9,73 2 0362 -- ograve
-char242 "
'o 600,771,8,77,-9,73 2 0363 -- oacute
-char243 "
^o 600,749,8,77,-9,73 2 0364 -- ocircumflex
-char244 "
~o 600,709,8,77,-9,73 2 0365 -- otilde
-char245 "
:o 600,734,8,77,-9,73 2 0366 -- odieresis
-char246 "
-char247 600,521,0,45,-41,45 0 0367 -- divide
+tdi 600,521,0,45,-41,45 0 0367 -- divide
/o 600,571,54,111,33,73 0 0370 -- oslash
-char248 "
`u 680,771,8,90,-33,73 2 0371 -- ugrave
-char249 "
'u 680,771,8,90,-33,73 2 0372 -- uacute
-char250 "
^u 680,749,8,90,-33,73 2 0373 -- ucircumflex
-char251 "
:u 680,734,8,90,-33,73 2 0374 -- udieresis
-char252 "
'y 600,771,213,92,25,73 3 0375 -- yacute
-char253 "
Tp 660,732,213,72,74,72 3 0376 -- thorn
-char254 "
:y 600,734,213,92,25,73 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/BMI b/contrib/groff/font/devps/BMI
index 9b90a65..b75e1b4 100644
--- a/contrib/groff/font/devps/BMI
+++ b/contrib/groff/font/devps/BMI
@@ -31,7 +31,6 @@ T o 14
T i 71
T - 20
T hy 20
-T char173 20
T e 10
T , -79
T : 48
@@ -47,7 +46,6 @@ V o -70
V i 3
V - 20
V hy 20
-V char173 20
V e -70
V , -109
V : -35
@@ -62,7 +60,6 @@ W o -60
W i 3
W - 20
W hy 20
-W char173 20
W e -60
W , -109
W : -35
@@ -78,7 +75,6 @@ Y o -75
Y i -11
Y - 20
Y hy 20
-Y char173 20
Y e -78
Y , -109
Y : -35
@@ -92,7 +88,6 @@ r n 38
r m 37
r - 20
r hy 20
-r char173 20
r h -20
r g -3
r f -9
@@ -129,7 +124,6 @@ cq "
, 300,112,115,0,-38 0 0054 -- comma
- 320,325,0,66,-28,66 0 0055 -- hyphen
hy "
-char173 "
. 300,127,8,0,-46 0 0056 -- period
/ 600,717,149,12,-54,12 2 0057 -- slash
sl "
@@ -224,9 +218,7 @@ a~ 440,671,0,98,-130,70 2 0176 -- tilde
~ "
bq 320,113,114,0,-37 0 0200 -- quotesinglbase
Fo 300,434,0,63,-20,63 0 0201 -- guillemotleft
-char171 "
Fc 300,434,0,53,-10,53 0 0202 -- guillemotright
-char187 "
bu 460,511,0,34,-50,34 0 0203 -- bullet
Fn 620,725,218,122,76,70 3 0204 -- florin
f/ 20,681,0,353,278,70 2 0205 -- fraction
@@ -253,185 +245,97 @@ Bq 480,113,114,0,-37 0 0235 -- quotedblbase
OE 1180,698,17,107,-38,70 2 0236 -- OE
/L 580,681,0,126,29,70 2 0237 -- Lslash
r! 320,494,213,31,-23,31 1 0241 -- exclamdown
-char161 "
ct 620,715,29,26,-98,26 2 0242 -- cent
-char162 "
Po 620,698,17,132,46,70 2 0243 -- sterling
-char163 "
Cs 620,591,0,35,-50,35 0 0244 -- currency
-char164 "
Ye 620,681,0,165,-21,70 2 0245 -- yen
-char165 "
bb 600,675,175,0,-244 2 0246 -- brokenbar
-char166 "
sc 620,698,178,68,12,68 2 0247 -- section
-char167 "
ad 420,688,0,97,-135,70 2 0250 -- dieresis
-char168 "
co 740,698,17,94,-34,70 2 0251 -- copyright
-char169 "
Of 440,698,0,123,-80,70 2 0252 -- ordfeminine
-char170 "
fo 180,434,0,78,-25,70 0 0253 -- guilsinglleft
no 600,433,0,45,-41,45 0 0254 -- logicalnot
-char172 "
\- 600,335,0,45,-41,45 0 0255 -- minus
rg 740,698,17,94,-34,70 2 0256 -- registered
-char174 "
a- 440,658,0,94,-128,70 0 0257 -- macron
-char175 "
de 400,698,0,70,-70,70 2 0260 -- degree
-char176 "
-char177 600,548,0,45,-41,45 0 0261 -- plusminus
+t+- 600,548,0,45,-41,45 0 0261 -- plusminus
S2 372,698,0,117,-18,70 2 0262 -- twosuperior
-char178 "
S3 372,698,0,117,-20,70 2 0263 -- threesuperior
-char179 "
aa 320,706,0,103,-128,70 2 0264 -- acute
-char180 "
-char181 620,484,221,116,-3,70 1 0265 -- mu
+mc 620,484,221,116,-3,70 1 0265 -- mu
ps 620,681,0,148,-62,70 2 0266 -- paragraph
-char182 "
pc 300,364,0,22,-87,22 0 0267 -- periodcentered
-char183 "
ac 320,0,178,0,5 0 0270 -- cedilla
-char184 "
S1 372,688,0,17,-64,17 2 0271 -- onesuperior
-char185 "
Om 400,698,0,105,-89,70 2 0272 -- ordmasculine
-char186 "
fc 180,434,0,73,-20,70 0 0273 -- guilsinglright
14 930,681,0,33,-41,33 2 0274 -- onequarter
-char188 "
12 930,681,0,45,-41,45 2 0275 -- onehalf
-char189 "
34 930,691,0,33,-49,33 2 0276 -- threequarters
-char190 "
r? 540,494,212,18,32,18 1 0277 -- questiondown
-char191 "
`A 700,883,0,70,75,70 2 0300 -- Agrave
-char192 "
'A 700,883,0,70,75,70 2 0301 -- Aacute
-char193 "
^A 700,862,0,70,75,70 2 0302 -- Acircumflex
-char194 "
~A 700,848,0,70,75,70 2 0303 -- Atilde
-char195 "
:A 700,865,0,70,75,70 2 0304 -- Adieresis
-char196 "
oA 700,883,0,70,75,70 2 0305 -- Aring
-char197 "
AE 1220,681,0,99,95,70 2 0306 -- AE
-char198 "
,C 720,698,178,76,-38,70 2 0307 -- Ccedilla
-char199 "
`E 680,883,0,106,29,70 2 0310 -- Egrave
-char200 "
'E 680,883,0,106,29,70 2 0311 -- Eacute
-char201 "
^E 680,862,0,106,29,70 2 0312 -- Ecircumflex
-char202 "
:E 680,865,0,106,29,70 2 0313 -- Edieresis
-char203 "
`I 320,883,0,142,29,70 2 0314 -- Igrave
-char204 "
'I 320,883,0,142,29,70 2 0315 -- Iacute
-char205 "
^I 320,862,0,179,29,70 2 0316 -- Icircumflex
-char206 "
:I 320,865,0,177,29,70 2 0317 -- Idieresis
-char207 "
-D 740,681,0,92,29,70 2 0320 -- Eth
-char208 "
~N 720,848,0,153,32,70 2 0321 -- Ntilde
-char209 "
`O 760,883,17,89,-38,70 2 0322 -- Ograve
-char210 "
'O 760,883,17,89,-38,70 2 0323 -- Oacute
-char211 "
^O 760,862,17,89,-38,70 2 0324 -- Ocircumflex
-char212 "
~O 760,848,17,89,-38,70 2 0325 -- Otilde
-char213 "
:O 760,865,17,89,-38,70 2 0326 -- Odieresis
-char214 "
-char215 600,548,0,45,-41,45 0 0327 -- multiply
+tmu 600,548,0,45,-41,45 0 0327 -- multiply
/O 760,777,95,89,-38,70 2 0330 -- Oslash
-char216 "
`U 720,883,17,172,-68,70 2 0331 -- Ugrave
-char217 "
'U 720,883,17,172,-68,70 2 0332 -- Uacute
-char218 "
^U 720,862,17,172,-68,70 2 0333 -- Ucircumflex
-char219 "
:U 720,865,17,172,-68,70 2 0334 -- Udieresis
-char220 "
'Y 660,883,0,199,-37,70 2 0335 -- Yacute
-char221 "
TP 600,681,0,106,29,70 2 0336 -- Thorn
-char222 "
ss 620,698,111,83,171,70 2 0337 -- germandbls
-char223 "
`a 620,706,8,116,-21,70 2 0340 -- agrave
-char224 "
'a 620,706,8,116,-21,70 2 0341 -- aacute
-char225 "
^a 620,685,8,116,-21,70 2 0342 -- acircumflex
-char226 "
~a 620,671,8,116,-21,70 2 0343 -- atilde
-char227 "
:a 620,688,8,116,-21,70 2 0344 -- adieresis
-char228 "
oa 620,706,8,116,-21,70 2 0345 -- aring
-char229 "
ae 880,494,8,88,-21,70 0 0346 -- ae
-char230 "
,c 480,494,178,92,-15,70 0 0347 -- ccedilla
-char231 "
`e 540,706,8,85,-15,70 2 0350 -- egrave
-char232 "
'e 540,706,8,85,-15,70 2 0351 -- eacute
-char233 "
^e 540,685,8,85,-15,70 2 0352 -- ecircumflex
-char234 "
:e 540,688,8,85,-15,70 2 0353 -- edieresis
-char235 "
`i 280,706,8,121,-38,70 2 0354 -- igrave
-char236 "
'i 280,706,8,121,-38,70 2 0355 -- iacute
-char237 "
^i 280,685,8,149,-26,70 2 0356 -- icircumflex
-char238 "
:i 280,688,8,147,-38,70 2 0357 -- idieresis
-char239 "
Sd 540,725,8,152,-15,70 2 0360 -- eth
-char240 "
~n 620,671,8,103,-38,70 2 0361 -- ntilde
-char241 "
`o 540,706,8,82,-15,70 2 0362 -- ograve
-char242 "
'o 540,706,8,82,-15,70 2 0363 -- oacute
-char243 "
^o 540,685,8,82,-15,70 2 0364 -- ocircumflex
-char244 "
~o 540,671,8,82,-15,70 2 0365 -- otilde
-char245 "
:o 540,688,8,82,-15,70 2 0366 -- odieresis
-char246 "
-char247 600,548,0,45,-41,45 0 0367 -- divide
+tdi 600,548,0,45,-41,45 0 0367 -- divide
/o 540,532,49,81,-15,70 0 0370 -- oslash
-char248 "
`u 620,706,8,116,-38,70 2 0371 -- ugrave
-char249 "
'u 620,706,8,116,-38,70 2 0372 -- uacute
-char250 "
^u 620,685,8,116,-38,70 2 0373 -- ucircumflex
-char251 "
:u 620,688,8,116,-38,70 2 0374 -- udieresis
-char252 "
'y 600,706,221,59,-10,59 3 0375 -- yacute
-char253 "
Tp 600,717,212,70,74,70 3 0376 -- thorn
-char254 "
:y 600,688,221,59,-10,59 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/BMR b/contrib/groff/font/devps/BMR
index 615b7cc..1ce51e0 100644
--- a/contrib/groff/font/devps/BMR
+++ b/contrib/groff/font/devps/BMR
@@ -34,7 +34,6 @@ T o 15
T i 42
T - 90
T hy 90
-T char173 90
T e 13
T , -28
T c 14
@@ -48,7 +47,6 @@ V o -71
V i -20
V - 11
V hy 11
-V char173 11
V e -72
V , -34
V a -69
@@ -61,7 +59,6 @@ W o -68
W i -20
W - 11
W hy 11
-W char173 11
W e -69
W , -34
W a -66
@@ -75,7 +72,6 @@ Y o -57
Y i -37
Y - 11
Y hy 11
-Y char173 11
Y e -58
Y , -34
Y a -54
@@ -88,7 +84,6 @@ r n 31
r m 31
r - 70
r hy 70
-r char173 70
r h -21
r g -4
r f 33
@@ -97,337 +92,246 @@ r d 7
r , -58
r c 7
charset
-ha 600,681 2 0000 -- asciicircum
-ti 600,352 0 0001 -- asciitilde
-vS 660,849,17 2 0002 -- Scaron
-vZ 640,849 2 0003 -- Zcaron
-vs 520,672,8 2 0004 -- scaron
-vz 480,672 2 0005 -- zcaron
-:Y 640,851 2 0006 -- Ydieresis
-tm 980,681 2 0007 -- trademark
-aq 220,698 2 0010 -- quotesingle
+ha 600,681,0,0,-52 2 0000 -- asciicircum
+ti 600,352,0,0,-52 0 0001 -- asciitilde
+vS 660,849,17,0,-28 2 0002 -- Scaron
+vZ 640,849,0,16,-10 2 0003 -- Zcaron
+vs 520,672,8,0,-40 2 0004 -- scaron
+vz 480,672,0,0,-7 2 0005 -- zcaron
+:Y 640,851,0,26,30 2 0006 -- Ydieresis
+tm 980,681,0,0,-34 2 0007 -- trademark
+aq 220,698,0,0,-67 2 0010 -- quotesingle
space 320 0 0040
-! 300,698,8 2 0041 -- exclam
-" 380,698 2 0042 -- quotedbl
+! 300,698,8,0,-75 2 0041 -- exclam
+" 380,698,0,0,-56 2 0042 -- quotedbl
dq "
-# 620,681 2 0043 -- numbersign
+# 620,681,0,0,-65 2 0043 -- numbersign
sh "
-$ 620,791,109 2 0044 -- dollar
+$ 620,791,109,0,-34 2 0044 -- dollar
Do "
-% 900,698,8 2 0045 -- percent
-& 800,698,17 2 0046 -- ampersand
-' 220,698 2 0047 -- quoteright
+% 900,698,8,0,-22 2 0045 -- percent
+& 800,698,17,0,-45 2 0046 -- ampersand
+' 220,698,0,0,-46 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
+( 300,727,145,0,-76 2 0050 -- parenleft
+) 300,727,146,0,-17 2 0051 -- parenright
+* 440,698,0,0,-54 2 0052 -- asterisk
++ 600,513,0,0,-51 0 0053 -- plus
+, 320,114,114,0,-90 0 0054 -- comma
+- 400,292,0,0,-50 0 0055 -- hyphen
hy "
-char173 "
-. 320,123,8 0 0056 -- period
-/ 600,717,149 2 0057 -- slash
+. 320,123,8,0,-92 0 0056 -- period
+/ 600,717,149,0,-74 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,0,-40 2 0060 -- zero
+1 620,681,0,0,-160 2 0061 -- one
+2 620,698,0,0,-42 2 0062 -- two
+3 620,698,17,0,-40 2 0063 -- three
+4 620,681,0,0,-25 2 0064 -- four
+5 620,717,17,0,-60 2 0065 -- five
+6 620,698,17,0,-45 2 0066 -- six
+7 620,681,0,0,-60 2 0067 -- seven
+8 620,698,17,0,-44 2 0070 -- eight
+9 620,698,17,0,-37 2 0071 -- nine
+: 320,494,8,0,-92 0 0072 -- colon
+; 320,494,114,0,-90 0 0073 -- semicolon
+< 600,526,2,0,-49 0 0074 -- less
+= 600,398,0,0,-51 0 0075 -- equal
+> 600,526,2,0,-48 0 0076 -- greater
+? 540,698,8,0,-27 2 0077 -- question
+@ 820,698,17,0,-55 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,0,34,37 2 0101 -- A
+B 740,681,0,0,-31 2 0102 -- B
+C 740,698,17,0,-44 2 0103 -- C
+D 800,681,0,0,-31 2 0104 -- D
+E 720,681,0,0,-31 2 0105 -- E
+F 640,681,0,14,-31 2 0106 -- F
+G 800,698,17,0,-44 2 0107 -- G
+H 800,681,0,0,-31 2 0110 -- H
+I 340,681,0,0,-31 2 0111 -- I
+J 600,681,17,0,23 2 0112 -- J
+K 720,681,0,30,-31 2 0113 -- K
+L 600,681,0,29,-31 2 0114 -- L
+M 920,681,0,0,-26 2 0115 -- M
+N 740,681,0,0,-26 2 0116 -- N
+O 800,698,17,0,-44 2 0117 -- O
+P 620,681,0,0,-31 2 0120 -- P
+Q 820,698,189,0,-44 2 0121 -- Q
+R 720,681,0,37,-31 2 0122 -- R
+S 660,698,17,0,-28 2 0123 -- S
+T 620,681,0,36,37 2 0124 -- T
+U 780,681,17,0,-25 2 0125 -- U
+V 700,681,0,25,30 2 0126 -- V
+W 960,681,0,24,30 2 0127 -- W
+X 720,681,0,35,30 2 0130 -- X
+Y 640,681,0,26,30 2 0131 -- Y
+Z 640,681,0,16,-10 2 0132 -- Z
+[ 300,717,136,0,-92 2 0133 -- bracketleft
lB "
-\ 600,717 2 0134 -- backslash
+\ 600,717,0,0,-74 2 0134 -- backslash
rs "
-] 300,717,136 2 0135 -- bracketright
+] 300,717,136,0,-41 2 0135 -- bracketright
rB "
-a^ 420,685 2 0136 -- circumflex
+a^ 420,685,0,0,-68 2 0136 -- circumflex
^ "
_ 500,0,125 0 0137 -- underscore
-` 220,698 2 0140 -- quoteleft
+` 220,698,0,0,-46 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,7,-35 0 0141 -- a
+b 620,717,8,0,2 2 0142 -- b
+c 520,494,8,0,-37 0 0143 -- c
+d 620,717,8,0,-37 2 0144 -- d
+e 520,494,8,0,-37 0 0145 -- e
+f 320,734,0,94,-20 2 0146 -- f
+g 540,567,243,2,-17 1 0147 -- g
+h 660,717,0,0,-20 2 0150 -- h
+i 300,654,0,0,-20 0 0151 -- i
+j 300,654,251,0,109 1 0152 -- j
+k 620,717,0,8,-20 2 0153 -- k
+l 300,717,0,0,-20 2 0154 -- l
+m 940,494,0,0,-17 0 0155 -- m
+n 660,494,0,0,-20 0 0156 -- n
+o 560,494,8,0,-37 0 0157 -- o
+p 620,494,228,0,-20 1 0160 -- p
+q 580,494,228,9,-37 1 0161 -- q
+r 440,494,0,7,-20 0 0162 -- r
+s 520,494,8,0,-40 0 0163 -- s
+t 380,667,8,8,-20 2 0164 -- t
+u 680,484,8,0,-20 0 0165 -- u
+v 520,484,0,14,23 0 0166 -- v
+w 780,484,0,24,19 0 0167 -- w
+x 560,484,0,16,16 0 0170 -- x
+y 540,484,236,9,23 1 0171 -- y
+z 480,484,0,0,-7 0 0172 -- z
+lC 280,717,136,0,-21 2 0173 -- braceleft
{ "
-ba 600,750,250 3 0174 -- bar
+ba 600,750,250,0,-264 3 0174 -- bar
| "
-rC 280,717,136 2 0175 -- braceright
+rC 280,717,136,0,-21 2 0175 -- braceright
} "
-a~ 440,661 0 0176 -- tilde
+a~ 440,661,0,0,-68 0 0176 -- tilde
~ "
-bq 220,110,108 0 0200 -- quotesinglbase
-Fo 360,437 0 0201 -- guillemotleft
-char171 "
-Fc 360,437 0 0202 -- guillemotright
-char187 "
-bu 460,511 0 0203 -- bullet
-Fn 620,749,155 2 0204 -- florin
-f/ 140,681 2 0205 -- fraction
-%0 1280,698,8 2 0206 -- perthousand
-dg 540,698,156 2 0207 -- dagger
-dd 540,698,156 2 0210 -- daggerdbl
-en 500,292 0 0211 -- endash
-em 1000,292 0 0212 -- emdash
-fi 620,734 2 0214 -- fi
-fl 620,734 2 0215 -- fl
-.i 300,484 0 0220 -- dotlessi
-ga 340,689 2 0222 -- grave
-a" 380,698 2 0223 -- hungarumlaut
-a. 260,672 2 0224 -- dotaccent
-ab 460,687 2 0225 -- breve
-ah 420,672 2 0226 -- caron
-ao 320,731 2 0227 -- ring
-ho 320,0,145 0 0230 -- ogonek
-lq 400,698 2 0231 -- quotedblleft
-rq 400,698 2 0232 -- quotedblright
-oe 900,494,8 0 0233 -- oe
-/l 320,717 2 0234 -- lslash
-Bq 400,110,108 0 0235 -- quotedblbase
-OE 1240,698,17 2 0236 -- OE
-/L 600,681 2 0237 -- Lslash
-r! 300,494,214 0 0241 -- exclamdown
-char161 "
-ct 620,651 0 0242 -- cent
-char162 "
-Po 620,698,17 2 0243 -- sterling
-char163 "
-Cs 620,591 0 0244 -- currency
-char164 "
-Ye 620,681 2 0245 -- yen
-char165 "
-bb 600,675,175 2 0246 -- brokenbar
-char166 "
-sc 520,698,178 2 0247 -- section
-char167 "
-ad 420,674 2 0250 -- dieresis
-char168 "
-co 740,698,17 2 0251 -- copyright
-char169 "
-Of 420,698 2 0252 -- ordfeminine
-char170 "
-fo 240,437 0 0253 -- guilsinglleft
-no 600,398 0 0254 -- logicalnot
-char172 "
-\- 600,300 0 0255 -- minus
-rg 740,698,17 2 0256 -- registered
-char174 "
-a- 440,635 0 0257 -- macron
-char175 "
-de 400,698 2 0260 -- degree
-char176 "
-char177 600,513 0 0261 -- plusminus
-S2 372,698 2 0262 -- twosuperior
-char178 "
-S3 372,698 2 0263 -- threesuperior
-char179 "
-aa 340,689 2 0264 -- acute
-char180 "
-char181 680,484,251 1 0265 -- mu
-ps 600,681 2 0266 -- paragraph
-char182 "
-pc 320,327 0 0267 -- periodcentered
-char183 "
-ac 320,0,200 0 0270 -- cedilla
-char184 "
-S1 372,688 2 0271 -- onesuperior
-char185 "
-Om 420,698 2 0272 -- ordmasculine
-char186 "
-fc 240,437 0 0273 -- guilsinglright
-14 930,681 2 0274 -- onequarter
-char188 "
-12 930,681 2 0275 -- onehalf
-char189 "
-34 930,691 2 0276 -- threequarters
-char190 "
-r? 540,494,217 0 0277 -- questiondown
-char191 "
-`A 680,866 2 0300 -- Agrave
-char192 "
-'A 680,866 2 0301 -- Aacute
-char193 "
-^A 680,862 2 0302 -- Acircumflex
-char194 "
-~A 680,838 2 0303 -- Atilde
-char195 "
-:A 680,851 2 0304 -- Adieresis
-char196 "
-oA 680,908 2 0305 -- Aring
-char197 "
-AE 1260,681 2 0306 -- AE
-char198 "
-,C 740,698,200 2 0307 -- Ccedilla
-char199 "
-`E 720,866 2 0310 -- Egrave
-char200 "
-'E 720,866 2 0311 -- Eacute
-char201 "
-^E 720,862 2 0312 -- Ecircumflex
-char202 "
-:E 720,851 2 0313 -- Edieresis
-char203 "
-`I 340,866 2 0314 -- Igrave
-char204 "
-'I 340,866 2 0315 -- Iacute
-char205 "
-^I 340,862 2 0316 -- Icircumflex
-char206 "
-:I 340,851 2 0317 -- Idieresis
-char207 "
--D 800,681 2 0320 -- Eth
-char208 "
-~N 740,838 2 0321 -- Ntilde
-char209 "
-`O 800,866,17 2 0322 -- Ograve
-char210 "
-'O 800,866,17 2 0323 -- Oacute
-char211 "
-^O 800,862,17 2 0324 -- Ocircumflex
-char212 "
-~O 800,838,17 2 0325 -- Otilde
-char213 "
-:O 800,851,17 2 0326 -- Odieresis
-char214 "
-char215 600,513 0 0327 -- multiply
-/O 800,733,53 2 0330 -- Oslash
-char216 "
-`U 780,866,17 2 0331 -- Ugrave
-char217 "
-'U 780,866,17 2 0332 -- Uacute
-char218 "
-^U 780,862,17 2 0333 -- Ucircumflex
-char219 "
-:U 780,851,17 2 0334 -- Udieresis
-char220 "
-'Y 640,866 2 0335 -- Yacute
-char221 "
-TP 620,681 2 0336 -- Thorn
-char222 "
-ss 660,698,110 2 0337 -- germandbls
-char223 "
-`a 580,689,8 2 0340 -- agrave
-char224 "
-'a 580,689,8 2 0341 -- aacute
-char225 "
-^a 580,685,8 2 0342 -- acircumflex
-char226 "
-~a 580,661,8 0 0343 -- atilde
-char227 "
-:a 580,674,8 2 0344 -- adieresis
-char228 "
-oa 580,731,8 2 0345 -- aring
-char229 "
-ae 860,494,8 0 0346 -- ae
-char230 "
-,c 520,494,200 0 0347 -- ccedilla
-char231 "
-`e 520,689,8 2 0350 -- egrave
-char232 "
-'e 520,689,8 2 0351 -- eacute
-char233 "
-^e 520,685,8 2 0352 -- ecircumflex
-char234 "
-:e 520,674,8 2 0353 -- edieresis
-char235 "
-`i 300,689 2 0354 -- igrave
-char236 "
-'i 300,689 2 0355 -- iacute
-char237 "
-^i 300,685 2 0356 -- icircumflex
-char238 "
-:i 300,674 2 0357 -- idieresis
-char239 "
-Sd 560,734,8 2 0360 -- eth
-char240 "
-~n 660,661 0 0361 -- ntilde
-char241 "
-`o 560,689,8 2 0362 -- ograve
-char242 "
-'o 560,689,8 2 0363 -- oacute
-char243 "
-^o 560,685,8 2 0364 -- ocircumflex
-char244 "
-~o 560,661,8 0 0365 -- otilde
-char245 "
-:o 560,674,8 2 0366 -- odieresis
-char246 "
-char247 600,514 0 0367 -- divide
-/o 560,534,40 0 0370 -- oslash
-char248 "
-`u 680,689,8 2 0371 -- ugrave
-char249 "
-'u 680,689,8 2 0372 -- uacute
-char250 "
-^u 680,685,8 2 0373 -- ucircumflex
-char251 "
-:u 680,674,8 2 0374 -- udieresis
-char252 "
-'y 540,689,236 3 0375 -- yacute
-char253 "
-Tp 620,717,228 3 0376 -- thorn
-char254 "
-:y 540,674,236 3 0377 -- ydieresis
-char255 "
+bq 220,110,108,0,-46 0 0200 -- quotesinglbase
+Fo 360,437,0,0,-51 0 0201 -- guillemotleft
+Fc 360,437,0,0,-51 0 0202 -- guillemotright
+bu 460,511,0,0,-60 0 0203 -- bullet
+Fn 620,749,155,13,29 2 0204 -- florin
+f/ 140,681,0,195,188 2 0205 -- fraction
+%0 1280,698,8,0,-22 2 0206 -- perthousand
+dg 540,698,156,0,-79 2 0207 -- dagger
+dd 540,698,156,0,-79 2 0210 -- daggerdbl
+en 500,292,0,15,15 0 0211 -- endash
+em 1000,292,0,15,15 0 0212 -- emdash
+fi 620,734,0,0,-20 2 0214 -- fi
+fl 620,734,0,0,-20 2 0215 -- fl
+.i 300,484,0,0,-20 0 0220 -- dotlessi
+ga 340,689,0,0,-68 2 0222 -- grave
+a" 380,698,0,0,-68 2 0223 -- hungarumlaut
+a. 260,672,0,0,-68 2 0224 -- dotaccent
+ab 460,687,0,0,-68 2 0225 -- breve
+ah 420,672,0,0,-68 2 0226 -- caron
+ao 320,731,0,0,-68 2 0227 -- ring
+ho 320,0,145,0,-68 0 0230 -- ogonek
+lq 400,698,0,0,-46 2 0231 -- quotedblleft
+rq 400,698,0,0,-46 2 0232 -- quotedblright
+oe 900,494,8,0,-37 0 0233 -- oe
+/l 320,717,0,0,-20 2 0234 -- lslash
+Bq 400,110,108,0,-46 0 0235 -- quotedblbase
+OE 1240,698,17,0,-44 2 0236 -- OE
+/L 600,681,0,29,-31 2 0237 -- Lslash
+r! 300,494,214,0,-75 0 0241 -- exclamdown
+ct 620,651,0,0,-116 0 0242 -- cent
+Po 620,698,17,11,-8 2 0243 -- sterling
+Cs 620,591,0,0,-58 0 0244 -- currency
+Ye 620,681,0,27,22 2 0245 -- yen
+bb 600,675,175,0,-264 2 0246 -- brokenbar
+sc 520,698,178,0,-33 2 0247 -- section
+ad 420,674,0,0,-68 2 0250 -- dieresis
+co 740,698,17,0,-24 2 0251 -- copyright
+Of 420,698,0,0,-49 2 0252 -- ordfeminine
+fo 240,437,0,0,-51 0 0253 -- guilsinglleft
+no 600,398,0,0,-51 0 0254 -- logicalnot
+\- 600,300,0,0,-51 0 0255 -- minus
+rg 740,698,17,0,-23 2 0256 -- registered
+a- 440,635,0,0,-68 0 0257 -- macron
+de 400,698,0,0,-50 2 0260 -- degree
+t+- 600,513,0,0,-51 0 0261 -- plusminus
+S2 372,698,0,0,-20 2 0262 -- twosuperior
+S3 372,698,0,0,-12 2 0263 -- threesuperior
+aa 340,689,0,0,-68 2 0264 -- acute
+mc 680,484,251,0,-20 1 0265 -- mu
+ps 600,681,0,0,-14 2 0266 -- paragraph
+pc 320,327,0,0,-92 0 0267 -- periodcentered
+ac 320,0,200,0,-68 0 0270 -- cedilla
+S1 372,688,0,0,-80 2 0271 -- onesuperior
+Om 420,698,0,0,-56 2 0272 -- ordmasculine
+fc 240,437,0,0,-51 0 0273 -- guilsinglright
+14 930,681,0,0,-80 2 0274 -- onequarter
+12 930,681,0,0,-80 2 0275 -- onehalf
+34 930,691,0,0,-52 2 0276 -- threequarters
+r? 540,494,217,0,-23 0 0277 -- questiondown
+`A 680,866,0,34,37 2 0300 -- Agrave
+'A 680,866,0,34,37 2 0301 -- Aacute
+^A 680,862,0,34,37 2 0302 -- Acircumflex
+~A 680,838,0,34,37 2 0303 -- Atilde
+:A 680,851,0,34,37 2 0304 -- Adieresis
+oA 680,908,0,34,37 2 0305 -- Aring
+AE 1260,681,0,0,36 2 0306 -- AE
+,C 740,698,200,0,-44 2 0307 -- Ccedilla
+`E 720,866,0,0,-31 2 0310 -- Egrave
+'E 720,866,0,0,-31 2 0311 -- Eacute
+^E 720,862,0,0,-31 2 0312 -- Ecircumflex
+:E 720,851,0,0,-31 2 0313 -- Edieresis
+`I 340,866,0,0,-31 2 0314 -- Igrave
+'I 340,866,0,0,-31 2 0315 -- Iacute
+^I 340,862,0,0,-28 2 0316 -- Icircumflex
+:I 340,851,0,0,-28 2 0317 -- Idieresis
+-D 800,681,0,0,-31 2 0320 -- Eth
+~N 740,838,0,0,-26 2 0321 -- Ntilde
+`O 800,866,17,0,-44 2 0322 -- Ograve
+'O 800,866,17,0,-44 2 0323 -- Oacute
+^O 800,862,17,0,-44 2 0324 -- Ocircumflex
+~O 800,838,17,0,-44 2 0325 -- Otilde
+:O 800,851,17,0,-44 2 0326 -- Odieresis
+tmu 600,513,0,0,-51 0 0327 -- multiply
+/O 800,733,53,0,-44 2 0330 -- Oslash
+`U 780,866,17,0,-25 2 0331 -- Ugrave
+'U 780,866,17,0,-25 2 0332 -- Uacute
+^U 780,862,17,0,-25 2 0333 -- Ucircumflex
+:U 780,851,17,0,-25 2 0334 -- Udieresis
+'Y 640,866,0,26,30 2 0335 -- Yacute
+TP 620,681,0,0,-31 2 0336 -- Thorn
+ss 660,698,110,0,109 2 0337 -- germandbls
+`a 580,689,8,7,-35 2 0340 -- agrave
+'a 580,689,8,7,-35 2 0341 -- aacute
+^a 580,685,8,7,-35 2 0342 -- acircumflex
+~a 580,661,8,7,-35 0 0343 -- atilde
+:a 580,674,8,7,-35 2 0344 -- adieresis
+oa 580,731,8,7,-35 2 0345 -- aring
+ae 860,494,8,0,-35 0 0346 -- ae
+,c 520,494,200,0,-37 0 0347 -- ccedilla
+`e 520,689,8,0,-37 2 0350 -- egrave
+'e 520,689,8,0,-37 2 0351 -- eacute
+^e 520,685,8,0,-37 2 0352 -- ecircumflex
+:e 520,674,8,0,-37 2 0353 -- edieresis
+`i 300,689,0,0,-20 2 0354 -- igrave
+'i 300,689,0,0,-20 2 0355 -- iacute
+^i 300,685,0,0,-8 2 0356 -- icircumflex
+:i 300,674,0,0,-8 2 0357 -- idieresis
+Sd 560,734,8,0,-37 2 0360 -- eth
+~n 660,661,0,0,-20 0 0361 -- ntilde
+`o 560,689,8,0,-37 2 0362 -- ograve
+'o 560,689,8,0,-37 2 0363 -- oacute
+^o 560,685,8,0,-37 2 0364 -- ocircumflex
+~o 560,661,8,0,-37 0 0365 -- otilde
+:o 560,674,8,0,-37 2 0366 -- odieresis
+tdi 600,514,0,0,-51 0 0367 -- divide
+/o 560,534,40,0,-37 0 0370 -- oslash
+`u 680,689,8,0,-20 2 0371 -- ugrave
+'u 680,689,8,0,-20 2 0372 -- uacute
+^u 680,685,8,0,-20 2 0373 -- ucircumflex
+:u 680,674,8,0,-20 2 0374 -- udieresis
+'y 540,689,236,9,23 3 0375 -- yacute
+Tp 620,717,228,0,-20 3 0376 -- thorn
+:y 540,674,236,9,23 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/CB b/contrib/groff/font/devps/CB
index 6c01b8d..4bdd9c7 100644
--- a/contrib/groff/font/devps/CB
+++ b/contrib/groff/font/devps/CB
@@ -3,337 +3,246 @@ 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,0,0,-108 2 0000 -- asciicircum
+ti 600,356,0,0,-71 0 0001 -- asciitilde
+vS 600,790,22,0,-47 2 0002 -- Scaron
+vZ 600,790,0,0,-62 2 0003 -- Zcaron
+vs 600,667,17,0,-68 2 0004 -- scaron
+vz 600,667,0,0,-81 2 0005 -- zcaron
+:Y 600,748,0,0,-12 2 0006 -- Ydieresis
+tm 600,562,0,149,9 2 0007 -- trademark
+aq 600,562,0,0,-227 2 0010 -- quotesingle
space 600 0 0040
-! 600,572,15 2 0041 -- exclam
-" 600,562 2 0042 -- quotedbl
+! 600,572,15,0,-202 2 0041 -- exclam
+" 600,562,0,0,-135 2 0042 -- quotedbl
dq "
-# 600,651,45 2 0043 -- numbersign
+# 600,651,45,0,-56 2 0043 -- numbersign
sh "
-$ 600,666,126 2 0044 -- dollar
+$ 600,666,126,0,-82 2 0044 -- dollar
Do "
-% 600,616,15 2 0045 -- percent
-& 600,543,15 0 0046 -- ampersand
-' 600,562 2 0047 -- quoteright
+% 600,616,15,0,-5 2 0045 -- percent
+& 600,543,15,0,-36 0 0046 -- ampersand
+' 600,562,0,0,-171 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
+( 600,616,102,0,-219 2 0050 -- parenleft
+) 600,616,102,0,-139 2 0051 -- parenright
+* 600,601,0,0,-91 2 0052 -- asterisk
++ 600,478,0,0,-71 0 0053 -- plus
+, 600,174,111,0,-123 0 0054 -- comma
+- 600,313,0,0,-100 0 0055 -- hyphen
hy "
-char173 "
-. 600,171,15 0 0056 -- period
-/ 600,626,77 2 0057 -- slash
+. 600,171,15,0,-192 0 0056 -- period
+/ 600,626,77,0,-98 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,0,-87 2 0060 -- zero
+1 600,616,0,0,-81 2 0061 -- one
+2 600,616,0,0,-61 2 0062 -- two
+3 600,616,15,0,-63 2 0063 -- three
+4 600,616,0,0,-53 2 0064 -- four
+5 600,601,15,0,-70 2 0065 -- five
+6 600,616,15,0,-90 2 0066 -- six
+7 600,601,0,0,-55 2 0067 -- seven
+8 600,616,15,0,-83 2 0070 -- eight
+9 600,616,15,0,-79 2 0071 -- nine
+: 600,425,15,0,-191 0 0072 -- colon
+; 600,425,111,0,-123 0 0073 -- semicolon
+< 600,501,0,0,-66 0 0074 -- less
+= 600,398,0,0,-71 0 0075 -- equal
+> 600,501,0,0,-77 0 0076 -- greater
+? 600,580,14,0,-98 2 0077 -- question
+@ 600,616,15,0,-16 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,0,9,9 2 0101 -- A
+B 600,562,0,0,-30 2 0102 -- B
+C 600,580,18,0,-22 2 0103 -- C
+D 600,562,0,0,-30 2 0104 -- D
+E 600,562,0,0,-25 2 0105 -- E
+F 600,562,0,0,-39 2 0106 -- F
+G 600,580,18,0,-22 2 0107 -- G
+H 600,562,0,0,-20 2 0110 -- H
+I 600,562,0,0,-77 2 0111 -- I
+J 600,562,18,1,-37 2 0112 -- J
+K 600,562,0,0,-21 2 0113 -- K
+L 600,562,0,0,-39 2 0114 -- L
+M 600,562,0,2,2 2 0115 -- M
+N 600,562,12,10,-8 2 0116 -- N
+O 600,580,18,0,-22 2 0117 -- O
+P 600,562,0,0,-48 2 0120 -- P
+Q 600,580,138,0,-32 2 0121 -- Q
+R 600,562,0,0,-24 2 0122 -- R
+S 600,582,22,0,-47 2 0123 -- S
+T 600,562,0,0,-21 2 0124 -- T
+U 600,562,18,0,-4 2 0125 -- U
+V 600,562,0,13,13 2 0126 -- V
+W 600,562,0,18,18 2 0127 -- W
+X 600,562,0,0,-12 2 0130 -- X
+Y 600,562,0,0,-12 2 0131 -- Y
+Z 600,562,0,0,-62 2 0132 -- Z
+[ 600,616,102,0,-245 2 0133 -- bracketleft
lB "
-\ 600,626,77 2 0134 -- backslash
+\ 600,626,77,0,-99 2 0134 -- backslash
rs "
-] 600,616,102 2 0135 -- bracketright
+] 600,616,102,0,-125 2 0135 -- bracketright
rB "
-a^ 600,657 2 0136 -- circumflex
+a^ 600,657,0,0,-103 2 0136 -- circumflex
^ "
_ 600,0,125 0 0137 -- underscore
-` 600,562 2 0140 -- quoteleft
+` 600,562,0,0,-178 2 0140 -- quoteleft
oq "
-a 600,454,15 0 0141 -- a
+a 600,454,15,0,-35 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
+c 600,459,15,0,-40 0 0143 -- c
+d 600,626,15,0,-20 2 0144 -- d
+e 600,454,15,0,-40 0 0145 -- e
+f 600,626,0,0,-83 2 0146 -- f
+g 600,454,146,0,-30 1 0147 -- g
+h 600,626,0,0,-5 2 0150 -- h
+i 600,658,0,0,-77 2 0151 -- i
+j 600,658,146,0,-63 3 0152 -- j
+k 600,626,0,0,-20 2 0153 -- k
+l 600,626,0,0,-77 2 0154 -- l
+m 600,454,0,26,22 0 0155 -- m
+n 600,454,0,0,-18 0 0156 -- n
+o 600,454,15,0,-30 0 0157 -- o
+p 600,454,142,0,1 1 0160 -- p
+q 600,454,142,0,-20 1 0161 -- q
+r 600,454,0,0,-47 0 0162 -- r
+s 600,459,17,0,-68 0 0163 -- s
+t 600,562,15,0,-47 2 0164 -- t
+u 600,439,15,0,1 0 0165 -- u
+v 600,439,0,1,1 0 0166 -- v
+w 600,439,0,18,18 0 0167 -- w
+x 600,439,0,0,-6 0 0170 -- x
+y 600,439,142,1,4 1 0171 -- y
+z 600,439,0,0,-81 0 0172 -- z
+lC 600,616,102,0,-160 2 0173 -- braceleft
{ "
-ba 600,750,250 3 0174 -- bar
+ba 600,750,250,0,-255 3 0174 -- bar
| "
-rC 600,616,102 2 0175 -- braceright
+rC 600,616,102,0,-136 2 0175 -- braceright
} "
-a~ 600,636 2 0176 -- tilde
+a~ 600,636,0,0,-89 2 0176 -- tilde
~ "
-bq 600,143,142 1 0200 -- quotesinglbase
-Fo 600,446 0 0201 -- guillemotleft
-char171 "
-Fc 600,446 0 0202 -- guillemotright
-char187 "
-bu 600,430 0 0203 -- bullet
-Fn 600,616,131 2 0204 -- florin
-f/ 600,661,60 2 0205 -- fraction
-%0 600,616,15 2 0206 -- perthousand
-dg 600,580,70 2 0207 -- dagger
-dd 600,580,70 2 0210 -- daggerdbl
-en 600,313 0 0211 -- endash
-em 600,313 0 0212 -- emdash
-fi 600,626 2 0214 -- fi
-fl 600,626 2 0215 -- fl
-.i 600,439 0 0220 -- dotlessi
-ga 600,661 2 0222 -- grave
-a" 600,661 2 0223 -- hungarumlaut
-a. 600,625 2 0224 -- dotaccent
-ab 600,631 2 0225 -- breve
-ah 600,667 2 0226 -- caron
-ao 600,678 2 0227 -- ring
-ho 600,0,199 1 0230 -- ogonek
-lq 600,562 2 0231 -- quotedblleft
-rq 600,562 2 0232 -- quotedblright
-oe 600,454,15 0 0233 -- oe
-/l 600,626 2 0234 -- lslash
-Bq 600,143,142 1 0235 -- quotedblbase
-OE 600,562 2 0236 -- OE
-/L 600,562 2 0237 -- Lslash
-r! 600,449,146 1 0241 -- exclamdown
-char161 "
-ct 600,614,49 2 0242 -- cent
-char162 "
-Po 600,611,28 2 0243 -- sterling
-char163 "
-Cs 600,517 0 0244 -- currency
-char164 "
-Ye 600,562 2 0245 -- yen
-char165 "
-bb 600,675,175 3 0246 -- brokenbar
-char166 "
-sc 600,580,70 2 0247 -- section
-char167 "
-ad 600,625 2 0250 -- dieresis
-char168 "
+bq 600,143,142,0,-175 1 0200 -- quotesinglbase
+Fo 600,446,0,0,-8 0 0201 -- guillemotleft
+Fc 600,446,0,0,-47 0 0202 -- guillemotright
+bu 600,430,0,0,-140 0 0203 -- bullet
+Fn 600,616,131,0,30 2 0204 -- florin
+f/ 600,661,60,0,-25 2 0205 -- fraction
+%0 600,616,15,113,113 2 0206 -- perthousand
+dg 600,580,70,0,-106 2 0207 -- dagger
+dd 600,580,70,0,-106 2 0210 -- daggerdbl
+en 600,313,0,0,-65 0 0211 -- endash
+em 600,313,0,10,10 0 0212 -- emdash
+fi 600,626,0,0,-12 2 0214 -- fi
+fl 600,626,0,0,-12 2 0215 -- fl
+.i 600,439,0,0,-77 0 0220 -- dotlessi
+ga 600,661,0,0,-132 2 0222 -- grave
+a" 600,661,0,0,-68 2 0223 -- hungarumlaut
+a. 600,625,0,0,-230 2 0224 -- dotaccent
+ab 600,631,0,0,-83 2 0225 -- breve
+ah 600,667,0,0,-103 2 0226 -- caron
+ao 600,678,0,0,-198 2 0227 -- ring
+ho 600,0,199,0,-169 1 0230 -- ogonek
+lq 600,562,0,0,-71 2 0231 -- quotedblleft
+rq 600,562,0,0,-61 2 0232 -- quotedblright
+oe 600,454,15,11,18 0 0233 -- oe
+/l 600,626,0,0,-77 2 0234 -- lslash
+Bq 600,143,142,0,-65 1 0235 -- quotedblbase
+OE 600,562,0,0,25 2 0236 -- OE
+/L 600,562,0,0,-39 2 0237 -- Lslash
+r! 600,449,146,0,-202 1 0241 -- exclamdown
+ct 600,614,49,0,-66 2 0242 -- cent
+Po 600,611,28,0,-72 2 0243 -- sterling
+Cs 600,517,0,0,-54 0 0244 -- currency
+Ye 600,562,0,0,-10 2 0245 -- yen
+bb 600,675,175,0,-255 3 0246 -- brokenbar
+sc 600,580,70,0,-83 2 0247 -- section
+ad 600,625,0,0,-128 2 0250 -- dieresis
co 600,580,18 2 0251 -- copyright
-char169 "
-Of 600,580 2 0252 -- ordfeminine
-char170 "
-fo 600,446 0 0253 -- guilsinglleft
-no 600,413 0 0254 -- logicalnot
-char172 "
-\- 600,313 0 0255 -- minus
+Of 600,580,0,0,-147 2 0252 -- ordfeminine
+fo 600,446,0,0,-141 0 0253 -- guilsinglleft
+no 600,413,0,0,-71 0 0254 -- logicalnot
+\- 600,313,0,0,-71 0 0255 -- minus
rg 600,580,18 2 0256 -- registered
-char174 "
-a- 600,585 2 0257 -- macron
-char175 "
-de 600,616 2 0260 -- degree
-char176 "
-char177 600,515 0 0261 -- plusminus
-S2 600,616 2 0262 -- twosuperior
-char178 "
-S3 600,616 2 0263 -- threesuperior
-char179 "
-aa 600,661 2 0264 -- acute
-char180 "
-char181 600,439,142 1 0265 -- mu
-ps 600,580,70 2 0266 -- paragraph
-char182 "
-pc 600,351 0 0267 -- periodcentered
-char183 "
-ac 600,0,206 1 0270 -- cedilla
-char184 "
-S1 600,616 2 0271 -- onesuperior
-char185 "
-Om 600,580 2 0272 -- ordmasculine
-char186 "
-fc 600,446 0 0273 -- guilsinglright
-14 600,661,60 2 0274 -- onequarter
-char188 "
-12 600,661,60 2 0275 -- onehalf
-char189 "
-34 600,661,60 2 0276 -- threequarters
-char190 "
-r? 600,449,146 1 0277 -- questiondown
-char191 "
-`A 600,784 2 0300 -- Agrave
-char192 "
-'A 600,784 2 0301 -- Aacute
-char193 "
-^A 600,780 2 0302 -- Acircumflex
-char194 "
-~A 600,759 2 0303 -- Atilde
-char195 "
-:A 600,748 2 0304 -- Adieresis
-char196 "
-oA 600,801 2 0305 -- Aring
-char197 "
-AE 600,562 2 0306 -- AE
-char198 "
-,C 600,580,206 3 0307 -- Ccedilla
-char199 "
-`E 600,784 2 0310 -- Egrave
-char200 "
-'E 600,784 2 0311 -- Eacute
-char201 "
-^E 600,780 2 0312 -- Ecircumflex
-char202 "
-:E 600,748 2 0313 -- Edieresis
-char203 "
-`I 600,784 2 0314 -- Igrave
-char204 "
-'I 600,784 2 0315 -- Iacute
-char205 "
-^I 600,780 2 0316 -- Icircumflex
-char206 "
-:I 600,748 2 0317 -- Idieresis
-char207 "
--D 600,562 2 0320 -- Eth
-char208 "
-~N 600,759,12 2 0321 -- Ntilde
-char209 "
-`O 600,784,18 2 0322 -- Ograve
-char210 "
-'O 600,784,18 2 0323 -- Oacute
-char211 "
-^O 600,780,18 2 0324 -- Ocircumflex
-char212 "
-~O 600,759,18 2 0325 -- Otilde
-char213 "
-:O 600,748,18 2 0326 -- Odieresis
-char214 "
-char215 600,478 0 0327 -- multiply
-/O 600,584,22 2 0330 -- Oslash
-char216 "
-`U 600,784,18 2 0331 -- Ugrave
-char217 "
-'U 600,784,18 2 0332 -- Uacute
-char218 "
-^U 600,780,18 2 0333 -- Ucircumflex
-char219 "
-:U 600,748,18 2 0334 -- Udieresis
-char220 "
-'Y 600,784 2 0335 -- Yacute
-char221 "
-TP 600,562 2 0336 -- Thorn
-char222 "
-ss 600,626,15 2 0337 -- germandbls
-char223 "
-`a 600,661,15 2 0340 -- agrave
-char224 "
-'a 600,661,15 2 0341 -- aacute
-char225 "
-^a 600,657,15 2 0342 -- acircumflex
-char226 "
-~a 600,636,15 2 0343 -- atilde
-char227 "
-:a 600,625,15 2 0344 -- adieresis
-char228 "
-oa 600,678,15 2 0345 -- aring
-char229 "
-ae 600,454,15 0 0346 -- ae
-char230 "
-,c 600,459,206 1 0347 -- ccedilla
-char231 "
-`e 600,661,15 2 0350 -- egrave
-char232 "
-'e 600,661,15 2 0351 -- eacute
-char233 "
-^e 600,657,15 2 0352 -- ecircumflex
-char234 "
-:e 600,625,15 2 0353 -- edieresis
-char235 "
-`i 600,661 2 0354 -- igrave
-char236 "
-'i 600,661 2 0355 -- iacute
-char237 "
-^i 600,657 2 0356 -- icircumflex
-char238 "
-:i 600,625 2 0357 -- idieresis
-char239 "
-Sd 600,626,27 2 0360 -- eth
-char240 "
-~n 600,636 2 0361 -- ntilde
-char241 "
-`o 600,661,15 2 0362 -- ograve
-char242 "
-'o 600,661,15 2 0363 -- oacute
-char243 "
-^o 600,657,15 2 0364 -- ocircumflex
-char244 "
-~o 600,636,15 2 0365 -- otilde
-char245 "
-:o 600,625,15 2 0366 -- odieresis
-char246 "
-char247 600,500 0 0367 -- divide
-/o 600,463,24 0 0370 -- oslash
-char248 "
-`u 600,661,15 2 0371 -- ugrave
-char249 "
-'u 600,661,15 2 0372 -- uacute
-char250 "
-^u 600,657,15 2 0373 -- ucircumflex
-char251 "
-:u 600,625,15 2 0374 -- udieresis
-char252 "
-'y 600,661,142 3 0375 -- yacute
-char253 "
-Tp 600,626,142 3 0376 -- thorn
-char254 "
-:y 600,625,142 3 0377 -- ydieresis
-char255 "
+a- 600,585,0,0,-88 2 0257 -- macron
+de 600,616,0,0,-86 2 0260 -- degree
+t+- 600,515,0,0,-71 0 0261 -- plusminus
+S2 600,616,0,0,-143 2 0262 -- twosuperior
+S3 600,616,0,0,-138 2 0263 -- threesuperior
+aa 600,661,0,0,-205 2 0264 -- acute
+mc 600,439,142,0,1 1 0265 -- mu
+ps 600,580,70,0,-6 2 0266 -- paragraph
+pc 600,351,0,0,-196 0 0267 -- periodcentered
+ac 600,0,206,0,-205 1 0270 -- cedilla
+S1 600,616,0,0,-153 2 0271 -- onesuperior
+Om 600,580,0,0,-147 2 0272 -- ordmasculine
+fc 600,446,0,0,-141 0 0273 -- guilsinglright
+14 600,661,60,56,56 2 0274 -- onequarter
+12 600,661,60,48,47 2 0275 -- onehalf
+34 600,661,60,48,47 2 0276 -- threequarters
+r? 600,449,146,0,-99 1 0277 -- questiondown
+`A 600,784,0,9,9 2 0300 -- Agrave
+'A 600,784,0,9,9 2 0301 -- Aacute
+^A 600,780,0,9,9 2 0302 -- Acircumflex
+~A 600,759,0,9,9 2 0303 -- Atilde
+:A 600,748,0,9,9 2 0304 -- Adieresis
+oA 600,801,0,9,9 2 0305 -- Aring
+AE 600,562,0,2,29 2 0306 -- AE
+,C 600,580,206,0,-22 3 0307 -- Ccedilla
+`E 600,784,0,0,-25 2 0310 -- Egrave
+'E 600,784,0,0,-25 2 0311 -- Eacute
+^E 600,780,0,0,-25 2 0312 -- Ecircumflex
+:E 600,748,0,0,-25 2 0313 -- Edieresis
+`I 600,784,0,0,-77 2 0314 -- Igrave
+'I 600,784,0,0,-77 2 0315 -- Iacute
+^I 600,780,0,0,-77 2 0316 -- Icircumflex
+:I 600,748,0,0,-77 2 0317 -- Idieresis
+-D 600,562,0,0,-30 2 0320 -- Eth
+~N 600,759,12,10,-8 2 0321 -- Ntilde
+`O 600,784,18,0,-22 2 0322 -- Ograve
+'O 600,784,18,0,-22 2 0323 -- Oacute
+^O 600,780,18,0,-22 2 0324 -- Ocircumflex
+~O 600,759,18,0,-22 2 0325 -- Otilde
+:O 600,748,18,0,-22 2 0326 -- Odieresis
+tmu 600,478,0,0,-81 0 0327 -- multiply
+/O 600,584,22,0,-22 2 0330 -- Oslash
+`U 600,784,18,0,-4 2 0331 -- Ugrave
+'U 600,784,18,0,-4 2 0332 -- Uacute
+^U 600,780,18,0,-4 2 0333 -- Ucircumflex
+:U 600,748,18,0,-4 2 0334 -- Udieresis
+'Y 600,784,0,0,-12 2 0335 -- Yacute
+TP 600,562,0,0,-48 2 0336 -- Thorn
+ss 600,626,15,0,-22 2 0337 -- germandbls
+`a 600,661,15,0,-35 2 0340 -- agrave
+'a 600,661,15,0,-35 2 0341 -- aacute
+^a 600,657,15,0,-35 2 0342 -- acircumflex
+~a 600,636,15,0,-35 2 0343 -- atilde
+:a 600,625,15,0,-35 2 0344 -- adieresis
+oa 600,678,15,0,-35 2 0345 -- aring
+ae 600,454,15,1,4 0 0346 -- ae
+,c 600,459,206,0,-40 1 0347 -- ccedilla
+`e 600,661,15,0,-40 2 0350 -- egrave
+'e 600,661,15,0,-40 2 0351 -- eacute
+^e 600,657,15,0,-40 2 0352 -- ecircumflex
+:e 600,625,15,0,-40 2 0353 -- edieresis
+`i 600,661,0,0,-77 2 0354 -- igrave
+'i 600,661,0,0,-77 2 0355 -- iacute
+^i 600,657,0,0,-63 2 0356 -- icircumflex
+:i 600,625,0,0,-77 2 0357 -- idieresis
+Sd 600,626,27,0,-58 2 0360 -- eth
+~n 600,636,0,0,-18 2 0361 -- ntilde
+`o 600,661,15,0,-30 2 0362 -- ograve
+'o 600,661,15,0,-30 2 0363 -- oacute
+^o 600,657,15,0,-30 2 0364 -- ocircumflex
+~o 600,636,15,0,-30 2 0365 -- otilde
+:o 600,625,15,0,-30 2 0366 -- odieresis
+tdi 600,500,0,0,-71 0 0367 -- divide
+/o 600,463,24,0,-30 0 0370 -- oslash
+`u 600,661,15,0,1 2 0371 -- ugrave
+'u 600,661,15,0,1 2 0372 -- uacute
+^u 600,657,15,0,1 2 0373 -- ucircumflex
+:u 600,625,15,0,1 2 0374 -- udieresis
+'y 600,661,142,1,4 3 0375 -- yacute
+Tp 600,626,142,0,14 3 0376 -- thorn
+:y 600,625,142,1,4 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/CBI b/contrib/groff/font/devps/CBI
index 72b5561..b927db2 100644
--- a/contrib/groff/font/devps/CBI
+++ b/contrib/groff/font/devps/CBI
@@ -32,7 +32,6 @@ cq "
, 600,174,111,0,-49 0 0054 -- comma
- 600,313,0,17,-93,17 0 0055 -- hyphen
hy "
-char173 "
. 600,171,15,0,-157 0 0056 -- period
/ 600,626,77,76,-41,75 2 0057 -- slash
sl "
@@ -127,9 +126,7 @@ a~ 600,636,0,92,-150,75 2 0176 -- tilde
~ "
bq 600,143,142,0,-95 1 0200 -- quotesinglbase
Fo 600,446,0,88,-13,75 0 0201 -- guillemotleft
-char171 "
Fc 600,446,0,97,-22,75 0 0202 -- guillemotright
-char187 "
bu 600,430,0,0,-147 0 0203 -- bullet
Fn 600,616,131,151,106,75 2 0204 -- florin
f/ 600,661,60,157,28,75 2 0205 -- fraction
@@ -156,185 +153,97 @@ Bq 600,143,142,9,15,9 1 0235 -- quotedblbase
OE 600,562,0,150,24,75 2 0236 -- OE
/L 600,562,0,85,11,75 2 0237 -- Lslash
r! 600,449,146,0,-147 1 0241 -- exclamdown
-char161 "
ct 600,614,49,54,-71,54 2 0242 -- cent
-char162 "
Po 600,611,28,100,-57,75 2 0243 -- sterling
-char163 "
Cs 600,517,0,93,-27,75 0 0244 -- currency
-char164 "
Ye 600,562,0,159,-48,75 2 0245 -- yen
-char165 "
bb 600,675,175,0,-168 3 0246 -- brokenbar
-char166 "
sc 600,580,70,69,-24,69 2 0247 -- section
-char167 "
ad 600,625,0,42,-194,42 2 0250 -- dieresis
-char168 "
co 600,580,18,117,-3,75 2 0251 -- copyright
-char169 "
Of 600,580,0,0,-139 2 0252 -- ordfeminine
-char170 "
fo 600,446,0,0,-146 0 0253 -- guilsinglleft
no 600,413,0,67,-85,67 0 0254 -- logicalnot
-char172 "
\- 600,313,0,46,-64,46 0 0255 -- minus
rg 600,580,18,117,-3,75 2 0256 -- registered
-char174 "
a- 600,585,0,86,-145,75 2 0257 -- macron
-char175 "
de 600,616,0,19,-123,19 2 0260 -- degree
-char176 "
-char177 600,515,0,64,-26,64 0 0261 -- plusminus
+t+- 600,515,0,64,-26,64 0 0261 -- plusminus
S2 600,616,0,0,-142 2 0262 -- twosuperior
-char178 "
S3 600,616,0,0,-143 2 0263 -- threesuperior
-char179 "
aa 600,661,0,58,-263,58 2 0264 -- acute
-char180 "
-char181 600,439,142,41,0,41 1 0265 -- mu
+mc 600,439,142,41,0,41 1 0265 -- mu
ps 600,580,70,149,-11,75 2 0266 -- paragraph
-char182 "
pc 600,351,0,0,-199 0 0267 -- periodcentered
-char183 "
ac 600,0,206,0,-119 1 0270 -- cedilla
-char184 "
S1 600,616,0,0,-163 2 0271 -- onesuperior
-char185 "
Om 600,580,0,0,-139 2 0272 -- ordmasculine
-char186 "
fc 600,446,0,0,-116 0 0273 -- guilsinglright
14 600,661,60,156,36,75 2 0274 -- onequarter
-char188 "
12 600,661,60,165,27,75 2 0275 -- onehalf
-char189 "
34 600,661,60,148,42,75 2 0276 -- threequarters
-char190 "
r? 600,449,146,0,-51 1 0277 -- questiondown
-char191 "
`A 600,784,0,81,59,75 2 0300 -- Agrave
-char192 "
'A 600,784,0,115,59,75 2 0301 -- Aacute
-char193 "
^A 600,780,0,81,59,75 2 0302 -- Acircumflex
-char194 "
~A 600,759,0,88,59,75 2 0303 -- Atilde
-char195 "
:A 600,748,0,81,59,75 2 0304 -- Adieresis
-char196 "
oA 600,801,0,81,59,75 2 0305 -- Aring
-char197 "
AE 600,562,0,157,79,75 2 0306 -- AE
-char198 "
,C 600,580,206,124,-24,75 3 0307 -- Ccedilla
-char199 "
`E 600,784,0,119,25,75 2 0310 -- Egrave
-char200 "
'E 600,784,0,119,25,75 2 0311 -- Eacute
-char201 "
^E 600,780,0,119,25,75 2 0312 -- Ecircumflex
-char202 "
:E 600,748,0,119,25,75 2 0313 -- Edieresis
-char203 "
`I 600,784,0,92,-27,75 2 0314 -- Igrave
-char204 "
'I 600,784,0,92,-27,75 2 0315 -- Iacute
-char205 "
^I 600,780,0,92,-27,75 2 0316 -- Icircumflex
-char206 "
:I 600,748,0,92,-27,75 2 0317 -- Idieresis
-char207 "
-D 600,562,0,114,20,75 2 0320 -- Eth
-char208 "
~N 600,759,12,179,42,75 2 0321 -- Ntilde
-char209 "
`O 600,784,18,95,-24,75 2 0322 -- Ograve
-char210 "
'O 600,784,18,95,-24,75 2 0323 -- Oacute
-char211 "
^O 600,780,18,95,-24,75 2 0324 -- Ocircumflex
-char212 "
~O 600,759,18,118,-24,75 2 0325 -- Otilde
-char213 "
:O 600,748,18,95,-24,75 2 0326 -- Odieresis
-char214 "
-char215 600,478,0,56,-55,56 0 0327 -- multiply
+tmu 600,478,0,56,-55,56 0 0327 -- multiply
/O 600,584,22,122,2,75 2 0330 -- Oslash
-char216 "
`U 600,784,18,165,-51,75 2 0331 -- Ugrave
-char217 "
'U 600,784,18,165,-51,75 2 0332 -- Uacute
-char218 "
^U 600,780,18,165,-51,75 2 0333 -- Ucircumflex
-char219 "
:U 600,748,18,165,-51,75 2 0334 -- Udieresis
-char220 "
'Y 600,784,0,158,-59,75 2 0335 -- Yacute
-char221 "
TP 600,562,0,69,2,69 2 0336 -- Thorn
-char222 "
ss 600,626,15,78,28,75 2 0337 -- germandbls
-char223 "
`a 600,661,15,42,-12,42 2 0340 -- agrave
-char224 "
'a 600,661,15,58,-12,58 2 0341 -- aacute
-char225 "
^a 600,657,15,42,-12,42 2 0342 -- acircumflex
-char226 "
~a 600,636,15,92,-12,75 2 0343 -- atilde
-char227 "
:a 600,625,15,42,-12,42 2 0344 -- adieresis
-char228 "
oa 600,678,15,42,-12,42 2 0345 -- aring
-char229 "
ae 600,454,15,101,29,75 0 0346 -- ae
-char230 "
,c 600,459,206,81,-31,75 1 0347 -- ccedilla
-char231 "
`e 600,661,15,54,-31,54 2 0350 -- egrave
-char232 "
'e 600,661,15,58,-31,58 2 0351 -- eacute
-char233 "
^e 600,657,15,56,-31,56 2 0352 -- ecircumflex
-char234 "
:e 600,625,15,54,-31,54 2 0353 -- edieresis
-char235 "
`i 600,661,0,0,-27 2 0354 -- igrave
-char236 "
'i 600,661,0,58,-27,58 2 0355 -- iacute
-char237 "
^i 600,657,0,16,-27,16 2 0356 -- icircumflex
-char238 "
:i 600,625,0,2,-27,2 2 0357 -- idieresis
-char239 "
Sd 600,626,27,111,-43,75 2 0360 -- eth
-char240 "
~n 600,636,0,92,32,75 2 0361 -- ntilde
-char241 "
`o 600,661,15,72,-21,72 2 0362 -- ograve
-char242 "
'o 600,661,15,72,-21,72 2 0363 -- oacute
-char243 "
^o 600,657,15,72,-21,72 2 0364 -- ocircumflex
-char244 "
~o 600,636,15,92,-21,75 2 0365 -- otilde
-char245 "
:o 600,625,15,72,-21,72 2 0366 -- odieresis
-char246 "
-char247 600,500,0,46,-64,46 0 0367 -- divide
+tdi 600,500,0,46,-64,46 0 0367 -- divide
/o 600,463,24,87,-5,75 0 0370 -- oslash
-char248 "
`u 600,661,15,41,-20,41 2 0371 -- ugrave
-char249 "
'u 600,661,15,58,-20,58 2 0372 -- uacute
-char250 "
^u 600,657,15,41,-20,41 2 0373 -- ucircumflex
-char251 "
:u 600,625,15,41,-20,41 2 0374 -- udieresis
-char252 "
'y 600,661,142,144,70,75 3 0375 -- yacute
-char253 "
Tp 600,626,142,72,81,72 3 0376 -- thorn
-char254 "
:y 600,625,142,144,70,75 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/CI b/contrib/groff/font/devps/CI
index 63ea748..32d7bef 100644
--- a/contrib/groff/font/devps/CI
+++ b/contrib/groff/font/devps/CI
@@ -32,7 +32,6 @@ cq "
, 600,122,112,0,-107 0 0054 -- comma
- 600,285,0,8,-102,8 0 0055 -- hyphen
hy "
-char173 "
. 600,109,15,0,-188 0 0056 -- period
/ 600,629,80,54,-62,54 2 0057 -- slash
sl "
@@ -127,9 +126,7 @@ a~ 600,606,0,79,-162,72 2 0176 -- tilde
~ "
bq 600,100,134,0,-135 0 0200 -- quotesinglbase
Fo 600,446,0,102,-42,72 0 0201 -- guillemotleft
-char171 "
Fc 600,446,0,68,-8,68 0 0202 -- guillemotright
-char187 "
bu 600,383,0,0,-174 0 0203 -- bullet
Fn 600,622,143,121,76,72 2 0204 -- florin
f/ 600,665,57,96,-34,72 2 0205 -- fraction
@@ -156,185 +153,97 @@ Bq 600,100,134,0,-65 0 0235 -- quotedblbase
OE 600,562,0,122,-9,72 2 0236 -- OE
/L 600,562,0,57,3,57 2 0237 -- Lslash
r! 600,430,157,0,-175 1 0241 -- exclamdown
-char161 "
ct 600,614,49,38,-101,38 2 0242 -- cent
-char162 "
Po 600,611,21,71,-74,71 2 0243 -- sterling
-char163 "
Cs 600,506,0,78,-44,72 0 0244 -- currency
-char164 "
Ye 600,562,0,143,-70,72 2 0245 -- yen
-char165 "
bb 600,675,175,0,-188 3 0246 -- brokenbar
-char166 "
sc 600,580,78,40,-54,40 2 0247 -- section
-char167 "
ad 600,595,0,20,-212,20 2 0250 -- dieresis
-char168 "
co 600,580,18,117,-3,72 2 0251 -- copyright
-char169 "
Of 600,580,0,0,-159 2 0252 -- ordfeminine
-char170 "
fo 600,446,0,0,-154 0 0253 -- guilsinglleft
no 600,369,0,41,-105,41 0 0254 -- logicalnot
-char172 "
\- 600,283,0,30,-79,30 0 0255 -- minus
rg 600,580,18,117,-3,72 2 0256 -- registered
-char174 "
a- 600,565,0,50,-182,50 2 0257 -- macron
-char175 "
de 600,622,0,26,-164,26 2 0260 -- degree
-char176 "
-char177 600,558,0,44,-46,44 0 0261 -- plusminus
+t+- 600,558,0,44,-46,44 0 0261 -- plusminus
S2 600,622,0,0,-180 2 0262 -- twosuperior
-char178 "
S3 600,622,0,0,-163 2 0263 -- threesuperior
-char179 "
aa 600,672,0,62,-298,62 2 0264 -- acute
-char180 "
-char181 600,426,157,22,-22,22 1 0265 -- mu
+mc 600,426,157,22,-22,22 1 0265 -- mu
ps 600,562,78,80,-50,72 2 0266 -- paragraph
-char182 "
pc 600,327,0,0,-225 0 0267 -- periodcentered
-char183 "
ac 600,10,151,0,-147 0 0270 -- cedilla
-char184 "
S1 600,622,0,0,-181 2 0271 -- onesuperior
-char185 "
Om 600,580,0,0,-160 2 0272 -- ordmasculine
-char186 "
fc 600,446,0,0,-120 0 0273 -- guilsinglright
14 600,665,57,124,-15,72 2 0274 -- onequarter
-char188 "
12 600,665,57,119,-15,72 2 0275 -- onehalf
-char189 "
34 600,666,56,109,-23,72 2 0276 -- threequarters
-char190 "
r? 600,430,157,0,-55 1 0277 -- questiondown
-char191 "
`A 600,793,0,57,47,57 2 0300 -- Agrave
-char192 "
'A 600,793,0,108,47,72 2 0301 -- Aacute
-char193 "
^A 600,775,0,57,47,57 2 0302 -- Acircumflex
-char194 "
~A 600,732,0,106,47,72 2 0303 -- Atilde
-char195 "
:A 600,731,0,57,47,57 2 0304 -- Adieresis
-char196 "
oA 600,753,0,57,47,57 2 0305 -- Aring
-char197 "
AE 600,562,0,105,47,72 2 0306 -- AE
-char198 "
,C 600,580,151,108,-43,72 2 0307 -- Ccedilla
-char199 "
`E 600,793,0,110,-3,72 2 0310 -- Egrave
-char200 "
'E 600,793,0,118,-3,72 2 0311 -- Eacute
-char201 "
^E 600,775,0,110,-3,72 2 0312 -- Ecircumflex
-char202 "
:E 600,731,0,110,-3,72 2 0313 -- Edieresis
-char203 "
`I 600,793,0,73,-46,72 2 0314 -- Igrave
-char204 "
'I 600,793,0,88,-46,72 2 0315 -- Iacute
-char205 "
^I 600,775,0,73,-46,72 2 0316 -- Icircumflex
-char206 "
:I 600,731,0,73,-46,72 2 0317 -- Idieresis
-char207 "
-D 600,562,0,95,7,72 2 0320 -- Eth
-char208 "
~N 600,732,13,162,43,72 2 0321 -- Ntilde
-char209 "
`O 600,793,18,75,-44,72 2 0322 -- Ograve
-char210 "
'O 600,793,18,88,-44,72 2 0323 -- Oacute
-char211 "
^O 600,775,18,75,-44,72 2 0324 -- Ocircumflex
-char212 "
~O 600,732,18,106,-44,72 2 0325 -- Otilde
-char213 "
:O 600,731,18,75,-44,72 2 0326 -- Odieresis
-char214 "
-char215 600,470,0,57,-53,57 0 0327 -- multiply
+tmu 600,470,0,57,-53,57 0 0327 -- multiply
/O 600,629,80,75,-44,72 2 0330 -- Oslash
-char216 "
`U 600,793,18,152,-75,72 2 0331 -- Ugrave
-char217 "
'U 600,793,18,152,-75,72 2 0332 -- Uacute
-char218 "
^U 600,775,18,152,-75,72 2 0333 -- Ucircumflex
-char219 "
:U 600,731,18,152,-75,72 2 0334 -- Udieresis
-char220 "
'Y 600,793,0,145,-83,72 2 0335 -- Yacute
-char221 "
TP 600,562,0,56,-29,56 2 0336 -- Thorn
-char222 "
ss 600,629,15,67,2,67 2 0337 -- germandbls
-char223 "
`a 600,672,15,19,-26,19 2 0340 -- agrave
-char224 "
'a 600,672,15,62,-26,62 2 0341 -- aacute
-char225 "
^a 600,654,15,31,-26,31 2 0342 -- acircumflex
-char226 "
~a 600,606,15,79,-26,72 2 0343 -- atilde
-char227 "
:a 600,595,15,20,-26,20 2 0344 -- adieresis
-char228 "
oa 600,627,15,19,-26,19 2 0345 -- aring
-char229 "
ae 600,441,15,76,9,72 0 0346 -- ae
-char230 "
,c 600,441,151,64,-56,64 0 0347 -- ccedilla
-char231 "
`e 600,672,15,48,-56,48 2 0350 -- egrave
-char232 "
'e 600,672,15,62,-56,62 2 0351 -- eacute
-char233 "
^e 600,654,15,48,-56,48 2 0352 -- ecircumflex
-char234 "
:e 600,595,15,48,-56,48 2 0353 -- edieresis
-char235 "
`i 600,672,0,0,-45 2 0354 -- igrave
-char236 "
'i 600,672,0,62,-45,62 2 0355 -- iacute
-char237 "
^i 600,654,0,1,-45,1 2 0356 -- icircumflex
-char238 "
:i 600,595,0,0,-45 2 0357 -- idieresis
-char239 "
Sd 600,629,15,89,-52,72 2 0360 -- eth
-char240 "
~n 600,606,0,79,24,72 2 0361 -- ntilde
-char241 "
`o 600,672,15,38,-52,38 2 0362 -- ograve
-char242 "
'o 600,672,15,62,-52,62 2 0363 -- oacute
-char243 "
^o 600,654,15,38,-52,38 2 0364 -- ocircumflex
-char244 "
~o 600,606,15,79,-52,72 2 0365 -- otilde
-char245 "
:o 600,595,15,38,-52,38 2 0366 -- odieresis
-char246 "
-char247 600,467,0,23,-86,23 0 0367 -- divide
+tdi 600,467,0,23,-86,23 0 0367 -- divide
/o 600,506,80,38,-52,38 0 0370 -- oslash
-char248 "
`u 600,672,15,22,-51,22 2 0371 -- ugrave
-char249 "
'u 600,672,15,52,-51,52 2 0372 -- uacute
-char250 "
^u 600,654,15,22,-51,22 2 0373 -- ucircumflex
-char251 "
:u 600,595,15,22,-51,22 2 0374 -- udieresis
-char252 "
'y 600,672,157,133,54,72 3 0375 -- yacute
-char253 "
Tp 600,629,157,55,74,55 3 0376 -- thorn
-char254 "
:y 600,595,157,133,54,72 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/CR b/contrib/groff/font/devps/CR
index fc3c91e..7c4248c 100644
--- a/contrib/groff/font/devps/CR
+++ b/contrib/groff/font/devps/CR
@@ -3,337 +3,246 @@ 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,0,0,-94 2 0000 -- asciicircum
+ti 600,320,0,0,-63 0 0001 -- asciitilde
+vS 600,805,20,0,-72 2 0002 -- Scaron
+vZ 600,805,0,0,-86 2 0003 -- Zcaron
+vs 600,669,15,0,-80 2 0004 -- scaron
+vz 600,669,0,0,-99 2 0005 -- zcaron
+:Y 600,731,0,0,-24 2 0006 -- Ydieresis
+tm 600,562,0,23,23 2 0007 -- trademark
+aq 600,562,0,0,-259 2 0010 -- quotesingle
space 600 0 0040
-! 600,572,15 2 0041 -- exclam
-" 600,562 2 0042 -- quotedbl
+! 600,572,15,0,-236 2 0041 -- exclam
+" 600,562,0,0,-187 2 0042 -- quotedbl
dq "
-# 600,639,32 2 0043 -- numbersign
+# 600,639,32,0,-93 2 0043 -- numbersign
sh "
-$ 600,662,126 2 0044 -- dollar
+$ 600,662,126,0,-105 2 0044 -- dollar
Do "
-% 600,622,15 2 0045 -- percent
-& 600,543,15 0 0046 -- ampersand
-' 600,562 2 0047 -- quoteright
+% 600,622,15,0,-81 2 0045 -- percent
+& 600,543,15,0,-63 0 0046 -- ampersand
+' 600,562,0,0,-213 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
+( 600,622,108,0,-269 2 0050 -- parenleft
+) 600,622,108,0,-160 2 0051 -- parenright
+* 600,607,0,0,-116 2 0052 -- asterisk
++ 600,470,0,0,-80 0 0053 -- plus
+, 600,122,112,0,-181 0 0054 -- comma
+- 600,285,0,0,-103 0 0055 -- hyphen
hy "
-char173 "
-. 600,109,15 0 0056 -- period
-/ 600,629,80 2 0057 -- slash
+. 600,109,15,0,-229 0 0056 -- period
+/ 600,629,80,0,-125 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,0,-106 2 0060 -- zero
+1 600,622,0,0,-96 2 0061 -- one
+2 600,622,0,0,-70 2 0062 -- two
+3 600,622,15,0,-75 2 0063 -- three
+4 600,622,0,0,-78 2 0064 -- four
+5 600,607,15,0,-92 2 0065 -- five
+6 600,622,15,0,-111 2 0066 -- six
+7 600,607,0,0,-82 2 0067 -- seven
+8 600,622,15,0,-102 2 0070 -- eight
+9 600,622,15,0,-96 2 0071 -- nine
+: 600,385,15,0,-229 0 0072 -- colon
+; 600,385,112,0,-181 0 0073 -- semicolon
+< 600,472,0,0,-41 0 0074 -- less
+= 600,376,0,0,-80 0 0075 -- equal
+> 600,472,0,0,-66 0 0076 -- greater
+? 600,572,15,0,-129 2 0077 -- question
+@ 600,622,15,0,-77 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,0,0,-3 2 0101 -- A
+B 600,562,0,0,-43 2 0102 -- B
+C 600,580,18,0,-41 2 0103 -- C
+D 600,562,0,0,-43 2 0104 -- D
+E 600,562,0,0,-53 2 0105 -- E
+F 600,562,0,0,-53 2 0106 -- F
+G 600,580,18,0,-31 2 0107 -- G
+H 600,562,0,0,-32 2 0110 -- H
+I 600,562,0,0,-96 2 0111 -- I
+J 600,562,18,0,-34 2 0112 -- J
+K 600,562,0,0,-38 2 0113 -- K
+L 600,562,0,0,-47 2 0114 -- L
+M 600,562,0,0,-4 2 0115 -- M
+N 600,562,13,0,-7 2 0116 -- N
+O 600,580,18,0,-43 2 0117 -- O
+P 600,562,0,0,-79 2 0120 -- P
+Q 600,580,138,0,-43 2 0121 -- Q
+R 600,562,0,0,-38 2 0122 -- R
+S 600,580,20,0,-72 2 0123 -- S
+T 600,562,0,0,-38 2 0124 -- T
+U 600,562,18,0,-17 2 0125 -- U
+V 600,562,13,4,4 2 0126 -- V
+W 600,562,13,3,3 2 0127 -- W
+X 600,562,0,0,-23 2 0130 -- X
+Y 600,562,0,0,-24 2 0131 -- Y
+Z 600,562,0,0,-86 2 0132 -- Z
+[ 600,622,108,0,-269 2 0133 -- bracketleft
lB "
-\ 600,629,80 2 0134 -- backslash
+\ 600,629,80,0,-118 2 0134 -- backslash
rs "
-] 600,622,108 2 0135 -- bracketright
+] 600,622,108,0,-158 2 0135 -- bracketright
rB "
-a^ 600,654 2 0136 -- circumflex
+a^ 600,654,0,0,-124 2 0136 -- circumflex
^ "
_ 600,0,125 0 0137 -- underscore
-` 600,562 2 0140 -- quoteleft
+` 600,562,0,0,-224 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,-53 0 0141 -- a
+b 600,629,15,0,-14 2 0142 -- b
+c 600,441,15,0,-66 0 0143 -- c
+d 600,629,15,0,-45 2 0144 -- d
+e 600,441,15,0,-66 0 0145 -- e
+f 600,629,0,0,-114 2 0146 -- f
+g 600,441,157,0,-45 1 0147 -- g
+h 600,629,0,0,-18 2 0150 -- h
+i 600,657,0,0,-95 2 0151 -- i
+j 600,657,157,0,-82 3 0152 -- j
+k 600,629,0,0,-43 2 0153 -- k
+l 600,629,0,0,-95 2 0154 -- l
+m 600,441,0,5,5 0 0155 -- m
+n 600,441,0,0,-26 0 0156 -- n
+o 600,441,15,0,-62 0 0157 -- o
+p 600,441,157,0,-9 1 0160 -- p
+q 600,441,157,0,-45 1 0161 -- q
+r 600,441,0,0,-60 0 0162 -- r
+s 600,441,15,0,-80 0 0163 -- s
+t 600,561,15,0,-87 2 0164 -- t
+u 600,426,15,0,-21 0 0165 -- u
+v 600,426,10,0,-10 0 0166 -- v
+w 600,426,10,4,4 0 0167 -- w
+x 600,426,0,0,-20 0 0170 -- x
+y 600,426,157,0,-7 1 0171 -- y
+z 600,426,0,0,-99 0 0172 -- z
+lC 600,622,108,0,-182 2 0173 -- braceleft
{ "
-ba 600,750,250 3 0174 -- bar
+ba 600,750,250,0,-275 3 0174 -- bar
| "
-rC 600,622,108 2 0175 -- braceright
+rC 600,622,108,0,-163 2 0175 -- braceright
} "
-a~ 600,606 2 0176 -- tilde
+a~ 600,606,0,0,-105 2 0176 -- tilde
~ "
-bq 600,100,134 0 0200 -- quotesinglbase
-Fo 600,446 0 0201 -- guillemotleft
-char171 "
-Fc 600,446 0 0202 -- guillemotright
-char187 "
-bu 600,383 0 0203 -- bullet
-Fn 600,622,143 2 0204 -- florin
-f/ 600,665,57 2 0205 -- fraction
-%0 600,622,15 2 0206 -- perthousand
-dg 600,580,78 2 0207 -- dagger
-dd 600,580,78 2 0210 -- daggerdbl
-en 600,285 0 0211 -- endash
+bq 600,100,134,0,-213 0 0200 -- quotesinglbase
+Fo 600,446,0,0,-37 0 0201 -- guillemotleft
+Fc 600,446,0,0,-37 0 0202 -- guillemotright
+bu 600,383,0,0,-172 0 0203 -- bullet
+Fn 600,622,143,0,-4 2 0204 -- florin
+f/ 600,665,57,0,-92 2 0205 -- fraction
+%0 600,622,15,0,-3 2 0206 -- perthousand
+dg 600,580,78,0,-141 2 0207 -- dagger
+dd 600,580,78,0,-141 2 0210 -- daggerdbl
+en 600,285,0,0,-75 0 0211 -- endash
em 600,285 0 0212 -- emdash
-fi 600,629 2 0214 -- fi
-fl 600,629 2 0215 -- fl
-.i 600,426 0 0220 -- dotlessi
-ga 600,672 2 0222 -- grave
-a" 600,672 2 0223 -- hungarumlaut
-a. 600,580 2 0224 -- dotaccent
-ab 600,609 2 0225 -- breve
-ah 600,669 2 0226 -- caron
-ao 600,627 2 0227 -- ring
-ho 600,0,151 0 0230 -- ogonek
-lq 600,562 2 0231 -- quotedblleft
-rq 600,562 2 0232 -- quotedblright
-oe 600,441,15 0 0233 -- oe
-/l 600,629 2 0234 -- lslash
-Bq 600,100,134 0 0235 -- quotedblbase
-OE 600,562 2 0236 -- OE
-/L 600,562 2 0237 -- Lslash
-r! 600,430,157 1 0241 -- exclamdown
-char161 "
-ct 600,614,49 2 0242 -- cent
-char162 "
-Po 600,611,21 2 0243 -- sterling
-char163 "
-Cs 600,506 0 0244 -- currency
-char164 "
-Ye 600,562 2 0245 -- yen
-char165 "
-bb 600,675,175 3 0246 -- brokenbar
-char166 "
-sc 600,580,78 2 0247 -- section
-char167 "
-ad 600,595 2 0250 -- dieresis
-char168 "
+fi 600,629,0,0,-3 2 0214 -- fi
+fl 600,629,0,0,-3 2 0215 -- fl
+.i 600,426,0,0,-95 0 0220 -- dotlessi
+ga 600,672,0,0,-151 2 0222 -- grave
+a" 600,672,0,0,-133 2 0223 -- hungarumlaut
+a. 600,580,0,0,-249 2 0224 -- dotaccent
+ab 600,609,0,0,-153 2 0225 -- breve
+ah 600,669,0,0,-124 2 0226 -- caron
+ao 600,627,0,0,-218 2 0227 -- ring
+ho 600,0,151,0,-227 0 0230 -- ogonek
+lq 600,562,0,0,-143 2 0231 -- quotedblleft
+rq 600,562,0,0,-143 2 0232 -- quotedblright
+oe 600,441,15,0,-19 0 0233 -- oe
+/l 600,629,0,0,-95 2 0234 -- lslash
+Bq 600,100,134,0,-143 0 0235 -- quotedblbase
+OE 600,562,0,0,-7 2 0236 -- OE
+/L 600,562,0,0,-47 2 0237 -- Lslash
+r! 600,430,157,0,-236 1 0241 -- exclamdown
+ct 600,614,49,0,-96 2 0242 -- cent
+Po 600,611,21,0,-84 2 0243 -- sterling
+Cs 600,506,0,0,-73 0 0244 -- currency
+Ye 600,562,0,0,-26 2 0245 -- yen
+bb 600,675,175,0,-275 3 0246 -- brokenbar
+sc 600,580,78,0,-113 2 0247 -- section
+ad 600,595,0,0,-148 2 0250 -- dieresis
co 600,580,18 2 0251 -- copyright
-char169 "
-Of 600,580 2 0252 -- ordfeminine
-char170 "
-fo 600,446 0 0253 -- guilsinglleft
-no 600,369 0 0254 -- logicalnot
-char172 "
-\- 600,283 0 0255 -- minus
+Of 600,580,0,0,-156 2 0252 -- ordfeminine
+fo 600,446,0,0,-149 0 0253 -- guilsinglleft
+no 600,369,0,0,-87 0 0254 -- logicalnot
+\- 600,283,0,0,-80 0 0255 -- minus
rg 600,580,18 2 0256 -- registered
-char174 "
-a- 600,565 2 0257 -- macron
-char175 "
-de 600,622 2 0260 -- degree
-char176 "
-char177 600,558 0 0261 -- plusminus
-S2 600,622 2 0262 -- twosuperior
-char178 "
-S3 600,622 2 0263 -- threesuperior
-char179 "
-aa 600,672 2 0264 -- acute
-char180 "
-char181 600,426,157 1 0265 -- mu
-ps 600,562,78 2 0266 -- paragraph
-char182 "
-pc 600,327 0 0267 -- periodcentered
-char183 "
-ac 600,10,151 0 0270 -- cedilla
-char184 "
-S1 600,622 2 0271 -- onesuperior
-char185 "
-Om 600,580 2 0272 -- ordmasculine
-char186 "
-fc 600,446 0 0273 -- guilsinglright
+a- 600,565,0,0,-120 2 0257 -- macron
+de 600,622,0,0,-123 2 0260 -- degree
+t+- 600,558,0,0,-87 0 0261 -- plusminus
+S2 600,622,0,0,-177 2 0262 -- twosuperior
+S3 600,622,0,0,-155 2 0263 -- threesuperior
+aa 600,672,0,0,-242 2 0264 -- acute
+mc 600,426,157,0,-21 1 0265 -- mu
+ps 600,562,78,0,-50 2 0266 -- paragraph
+pc 600,327,0,0,-222 0 0267 -- periodcentered
+ac 600,10,151,0,-224 0 0270 -- cedilla
+S1 600,622,0,0,-172 2 0271 -- onesuperior
+Om 600,580,0,0,-157 2 0272 -- ordmasculine
+fc 600,446,0,0,-149 0 0273 -- guilsinglright
14 600,665,57 2 0274 -- onequarter
-char188 "
-12 600,665,57 2 0275 -- onehalf
-char189 "
-34 600,666,56 2 0276 -- threequarters
-char190 "
-r? 600,430,157 1 0277 -- questiondown
-char191 "
-`A 600,793 2 0300 -- Agrave
-char192 "
-'A 600,793 2 0301 -- Aacute
-char193 "
-^A 600,775 2 0302 -- Acircumflex
-char194 "
-~A 600,732 2 0303 -- Atilde
-char195 "
-:A 600,731 2 0304 -- Adieresis
-char196 "
-oA 600,753 2 0305 -- Aring
-char197 "
-AE 600,562 2 0306 -- AE
-char198 "
-,C 600,580,151 2 0307 -- Ccedilla
-char199 "
-`E 600,793 2 0310 -- Egrave
-char200 "
-'E 600,793 2 0311 -- Eacute
-char201 "
-^E 600,775 2 0312 -- Ecircumflex
-char202 "
-:E 600,731 2 0313 -- Edieresis
-char203 "
-`I 600,793 2 0314 -- Igrave
-char204 "
-'I 600,793 2 0315 -- Iacute
-char205 "
-^I 600,775 2 0316 -- Icircumflex
-char206 "
-:I 600,731 2 0317 -- Idieresis
-char207 "
--D 600,562 2 0320 -- Eth
-char208 "
-~N 600,732,13 2 0321 -- Ntilde
-char209 "
-`O 600,793,18 2 0322 -- Ograve
-char210 "
-'O 600,793,18 2 0323 -- Oacute
-char211 "
-^O 600,775,18 2 0324 -- Ocircumflex
-char212 "
-~O 600,732,18 2 0325 -- Otilde
-char213 "
-:O 600,731,18 2 0326 -- Odieresis
-char214 "
-char215 600,470 0 0327 -- multiply
-/O 600,629,80 2 0330 -- Oslash
-char216 "
-`U 600,793,18 2 0331 -- Ugrave
-char217 "
-'U 600,793,18 2 0332 -- Uacute
-char218 "
-^U 600,775,18 2 0333 -- Ucircumflex
-char219 "
-:U 600,731,18 2 0334 -- Udieresis
-char220 "
-'Y 600,793 2 0335 -- Yacute
-char221 "
-TP 600,562 2 0336 -- Thorn
-char222 "
-ss 600,629,15 2 0337 -- germandbls
-char223 "
-`a 600,672,15 2 0340 -- agrave
-char224 "
-'a 600,672,15 2 0341 -- aacute
-char225 "
-^a 600,654,15 2 0342 -- acircumflex
-char226 "
-~a 600,606,15 2 0343 -- atilde
-char227 "
-:a 600,595,15 2 0344 -- adieresis
-char228 "
-oa 600,627,15 2 0345 -- aring
-char229 "
-ae 600,441,15 0 0346 -- ae
-char230 "
-,c 600,441,151 0 0347 -- ccedilla
-char231 "
-`e 600,672,15 2 0350 -- egrave
-char232 "
-'e 600,672,15 2 0351 -- eacute
-char233 "
-^e 600,654,15 2 0352 -- ecircumflex
-char234 "
-:e 600,595,15 2 0353 -- edieresis
-char235 "
-`i 600,672 2 0354 -- igrave
-char236 "
-'i 600,672 2 0355 -- iacute
-char237 "
-^i 600,654 2 0356 -- icircumflex
-char238 "
-:i 600,595 2 0357 -- idieresis
-char239 "
-Sd 600,629,15 2 0360 -- eth
-char240 "
-~n 600,606 2 0361 -- ntilde
-char241 "
-`o 600,672,15 2 0362 -- ograve
-char242 "
-'o 600,672,15 2 0363 -- oacute
-char243 "
-^o 600,654,15 2 0364 -- ocircumflex
-char244 "
-~o 600,606,15 2 0365 -- otilde
-char245 "
-:o 600,595,15 2 0366 -- odieresis
-char246 "
-char247 600,467 0 0367 -- divide
-/o 600,506,80 0 0370 -- oslash
-char248 "
-`u 600,672,15 2 0371 -- ugrave
-char249 "
-'u 600,672,15 2 0372 -- uacute
-char250 "
-^u 600,654,15 2 0373 -- ucircumflex
-char251 "
-:u 600,595,15 2 0374 -- udieresis
-char252 "
-'y 600,672,157 3 0375 -- yacute
-char253 "
-Tp 600,629,157 3 0376 -- thorn
-char254 "
-:y 600,595,157 3 0377 -- ydieresis
-char255 "
+12 600,665,57,11 2 0275 -- onehalf
+34 600,666,56,0,-8 2 0276 -- threequarters
+r? 600,430,157,0,-108 1 0277 -- questiondown
+`A 600,793,0,0,-3 2 0300 -- Agrave
+'A 600,793,0,0,-3 2 0301 -- Aacute
+^A 600,775,0,0,-3 2 0302 -- Acircumflex
+~A 600,732,0,0,-3 2 0303 -- Atilde
+:A 600,731,0,0,-3 2 0304 -- Adieresis
+oA 600,753,0,0,-3 2 0305 -- Aring
+AE 600,562,0,0,-3 2 0306 -- AE
+,C 600,580,151,0,-41 2 0307 -- Ccedilla
+`E 600,793,0,0,-53 2 0310 -- Egrave
+'E 600,793,0,0,-53 2 0311 -- Eacute
+^E 600,775,0,0,-53 2 0312 -- Ecircumflex
+:E 600,731,0,0,-53 2 0313 -- Edieresis
+`I 600,793,0,0,-96 2 0314 -- Igrave
+'I 600,793,0,0,-96 2 0315 -- Iacute
+^I 600,775,0,0,-96 2 0316 -- Icircumflex
+:I 600,731,0,0,-96 2 0317 -- Idieresis
+-D 600,562,0,0,-30 2 0320 -- Eth
+~N 600,732,13,0,-7 2 0321 -- Ntilde
+`O 600,793,18,0,-43 2 0322 -- Ograve
+'O 600,793,18,0,-43 2 0323 -- Oacute
+^O 600,775,18,0,-43 2 0324 -- Ocircumflex
+~O 600,732,18,0,-43 2 0325 -- Otilde
+:O 600,731,18,0,-43 2 0326 -- Odieresis
+tmu 600,470,0,0,-87 0 0327 -- multiply
+/O 600,629,80,0,-43 2 0330 -- Oslash
+`U 600,793,18,0,-17 2 0331 -- Ugrave
+'U 600,793,18,0,-17 2 0332 -- Uacute
+^U 600,775,18,0,-17 2 0333 -- Ucircumflex
+:U 600,731,18,0,-17 2 0334 -- Udieresis
+'Y 600,793,0,0,-24 2 0335 -- Yacute
+TP 600,562,0,0,-79 2 0336 -- Thorn
+ss 600,629,15,0,-48 2 0337 -- germandbls
+`a 600,672,15,0,-53 2 0340 -- agrave
+'a 600,672,15,0,-53 2 0341 -- aacute
+^a 600,654,15,0,-53 2 0342 -- acircumflex
+~a 600,606,15,0,-53 2 0343 -- atilde
+:a 600,595,15,0,-53 2 0344 -- adieresis
+oa 600,627,15,0,-53 2 0345 -- aring
+ae 600,441,15,0,-19 0 0346 -- ae
+,c 600,441,151,0,-66 0 0347 -- ccedilla
+`e 600,672,15,0,-66 2 0350 -- egrave
+'e 600,672,15,0,-66 2 0351 -- eacute
+^e 600,654,15,0,-66 2 0352 -- ecircumflex
+:e 600,595,15,0,-66 2 0353 -- edieresis
+`i 600,672,0,0,-95 2 0354 -- igrave
+'i 600,672,0,0,-95 2 0355 -- iacute
+^i 600,654,0,0,-94 2 0356 -- icircumflex
+:i 600,595,0,0,-95 2 0357 -- idieresis
+Sd 600,629,15,0,-62 2 0360 -- eth
+~n 600,606,0,0,-26 2 0361 -- ntilde
+`o 600,672,15,0,-62 2 0362 -- ograve
+'o 600,672,15,0,-62 2 0363 -- oacute
+^o 600,654,15,0,-62 2 0364 -- ocircumflex
+~o 600,606,15,0,-62 2 0365 -- otilde
+:o 600,595,15,0,-62 2 0366 -- odieresis
+tdi 600,467,0,0,-87 0 0367 -- divide
+/o 600,506,80,0,-62 0 0370 -- oslash
+`u 600,672,15,0,-21 2 0371 -- ugrave
+'u 600,672,15,0,-21 2 0372 -- uacute
+^u 600,654,15,0,-21 2 0373 -- ucircumflex
+:u 600,595,15,0,-21 2 0374 -- udieresis
+'y 600,672,157,0,-7 3 0375 -- yacute
+Tp 600,629,157,0,6 3 0376 -- thorn
+:y 600,595,157,0,-7 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/HB b/contrib/groff/font/devps/HB
index 96e022e..6aec8f7 100644
--- a/contrib/groff/font/devps/HB
+++ b/contrib/groff/font/devps/HB
@@ -78,7 +78,6 @@ T . -80
T o -80
T - -120
T hy -120
-T char173 -120
T e -60
T , -80
T : -40
@@ -94,7 +93,6 @@ V . -120
V o -90
V - -80
V hy -80
-V char173 -80
V e -50
V , -120
V : -40
@@ -109,7 +107,6 @@ W . -80
W o -60
W - -40
W hy -40
-W char173 -40
W e -35
W , -80
W : -10
@@ -204,7 +201,6 @@ r . -60
r o -20
r - -20
r hy -20
-r char173 -20
r g -15
r d -20
r , -60
@@ -225,337 +221,246 @@ 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,0,0,-62 2 0000 -- asciicircum
+ti 584,343,0,0,-61 0 0001 -- asciitilde
+vS 667,936,19,0,-39 2 0002 -- Scaron
+vZ 611,936,0,0,-25 2 0003 -- Zcaron
+vs 556,750,14,0,-30 2 0004 -- scaron
+vz 500,750,0,0,-20 2 0005 -- zcaron
+:Y 667,915,0,0,-15 2 0006 -- Ydieresis
+tm 1000,718,0,0,-44 2 0007 -- trademark
+aq 238,718,0,0,-70 2 0010 -- quotesingle
space 278 0 0040
-! 333,718 2 0041 -- exclam
-" 474,718 2 0042 -- quotedbl
+! 333,718,0,0,-90 2 0041 -- exclam
+" 474,718,0,0,-98 2 0042 -- quotedbl
dq "
-# 556,698 2 0043 -- numbersign
+# 556,698,0,0,-18 2 0043 -- numbersign
sh "
-$ 556,775,115 2 0044 -- dollar
+$ 556,775,115,0,-30 2 0044 -- dollar
Do "
-% 889,710,19 2 0045 -- percent
-& 722,718,19 2 0046 -- ampersand
-' 278,718 2 0047 -- quoteright
+% 889,710,19,0,-28 2 0045 -- percent
+& 722,718,19,0,-54 2 0046 -- ampersand
+' 278,718,0,0,-69 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
+( 333,734,208,0,-35 3 0050 -- parenleft
+) 333,734,208,0,-19 3 0051 -- parenright
+* 389,718,0,0,-27 2 0052 -- asterisk
++ 584,506,0,0,-40 0 0053 -- plus
+, 278,146,168,0,-64 0 0054 -- comma
+- 333,345,0,0,-27 0 0055 -- hyphen
hy "
-char173 "
-. 278,146 0 0056 -- period
-/ 278,737,19 2 0057 -- slash
+. 278,146,0,0,-64 0 0056 -- period
+/ 278,737,19,33,33 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,0,-32 2 0060 -- zero
+1 556,710,0,0,-69 2 0061 -- one
+2 556,710,0,0,-26 2 0062 -- two
+3 556,710,19,0,-27 2 0063 -- three
+4 556,710,0,0,-27 2 0064 -- four
+5 556,698,19,0,-27 2 0065 -- five
+6 556,710,19,0,-31 2 0066 -- six
+7 556,698,0,0,-25 2 0067 -- seven
+8 556,710,19,0,-32 2 0070 -- eight
+9 556,710,19,0,-30 2 0071 -- nine
+: 333,512,0,0,-92 0 0072 -- colon
+; 333,512,168,0,-92 0 0073 -- semicolon
+< 584,514,8,0,-38 0 0074 -- less
+= 584,419,0,0,-40 0 0075 -- equal
+> 584,514,8,0,-38 0 0076 -- greater
+? 611,727,0,0,-60 2 0077 -- question
+@ 975,737,19,0,-118 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,0,0,-20 2 0101 -- A
+B 722,718,0,0,-76 2 0102 -- B
+C 722,737,19,0,-44 2 0103 -- C
+D 722,718,0,0,-76 2 0104 -- D
+E 667,718,0,0,-76 2 0105 -- E
+F 611,718,0,0,-76 2 0106 -- F
+G 778,737,19,0,-44 2 0107 -- G
+H 722,718,0,0,-71 2 0110 -- H
+I 278,718,0,0,-64 2 0111 -- I
+J 556,718,18,0,-22 2 0112 -- J
+K 722,718,0,0,-87 2 0113 -- K
+L 611,718,0,0,-76 2 0114 -- L
+M 833,718,0,0,-69 2 0115 -- M
+N 722,718,0,0,-69 2 0116 -- N
+O 778,737,19,0,-44 2 0117 -- O
+P 667,718,0,0,-76 2 0120 -- P
+Q 778,737,52,0,-44 2 0121 -- Q
+R 722,718,0,0,-76 2 0122 -- R
+S 667,737,19,0,-39 2 0123 -- S
+T 611,718,0,0,-14 2 0124 -- T
+U 722,718,19,0,-72 2 0125 -- U
+V 667,718,0,0,-19 2 0126 -- V
+W 944,718,0,0,-16 2 0127 -- W
+X 667,718,0,0,-14 2 0130 -- X
+Y 667,718,0,0,-15 2 0131 -- Y
+Z 611,718,0,0,-25 2 0132 -- Z
+[ 333,722,196,0,-63 2 0133 -- bracketleft
lB "
-\ 278,737,19 2 0134 -- backslash
+\ 278,737,19,33,33 2 0134 -- backslash
rs "
-] 333,722,196 2 0135 -- bracketright
+] 333,722,196,0,-24 2 0135 -- bracketright
rB "
-a^ 333,750 2 0136 -- circumflex
+a^ 333,750,0,10,10 2 0136 -- circumflex
^ "
_ 556,0,125 0 0137 -- underscore
-` 278,727 2 0140 -- quoteleft
+` 278,727,0,0,-69 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,-29 0 0141 -- a
+b 611,718,14,0,-61 2 0142 -- b
+c 556,546,14,0,-34 0 0143 -- c
+d 611,718,14,0,-34 2 0144 -- d
+e 556,546,14,0,-23 0 0145 -- e
+f 333,727,0,0,-10 2 0146 -- f
+g 611,546,217,0,-40 1 0147 -- g
+h 611,718,0,0,-65 2 0150 -- h
+i 278,725,0,0,-69 2 0151 -- i
+j 278,725,214,0,-3 3 0152 -- j
+k 556,718,0,6,-69 2 0153 -- k
+l 278,718,0,0,-69 2 0154 -- l
+m 889,546,0,0,-64 0 0155 -- m
+n 611,546,0,0,-65 0 0156 -- n
+o 611,546,14,0,-34 0 0157 -- o
+p 611,546,207,0,-62 1 0160 -- p
+q 611,546,207,0,-34 1 0161 -- q
+r 389,546,0,0,-64 0 0162 -- r
+s 556,546,14,0,-30 0 0163 -- s
+t 333,676,6,0,-10 2 0164 -- t
+u 611,532,14,0,-66 0 0165 -- u
+v 556,532,0,0,-13 0 0166 -- v
+w 778,532,0,0,-10 0 0167 -- w
+x 556,532,0,0,-15 0 0170 -- x
+y 556,532,214,0,-10 1 0171 -- y
+z 500,532,0,0,-20 0 0172 -- z
+lC 389,722,196,0,-48 2 0173 -- braceleft
{ "
-ba 280,737,19 2 0174 -- bar
+ba 280,737,19,0,-84 2 0174 -- bar
| "
-rC 389,722,196 2 0175 -- braceright
+rC 389,722,196,0,-24 2 0175 -- braceright
} "
-a~ 333,737 2 0176 -- tilde
+a~ 333,737,0,17,17 2 0176 -- tilde
~ "
-bq 278,127,146 0 0200 -- quotesinglbase
-Fo 556,484 0 0201 -- guillemotleft
-char171 "
-Fc 556,484 0 0202 -- guillemotright
-char187 "
-bu 350,524 0 0203 -- bullet
-Fn 556,737,210 3 0204 -- florin
-f/ 167,710,19 2 0205 -- fraction
-%0 1000,710,19 2 0206 -- perthousand
-dg 556,718,171 2 0207 -- dagger
-dd 556,718,171 2 0210 -- daggerdbl
+bq 278,127,146,0,-69 0 0200 -- quotesinglbase
+Fo 556,484,0,0,-88 0 0201 -- guillemotleft
+Fc 556,484,0,0,-88 0 0202 -- guillemotright
+bu 350,524,0,0,-10 0 0203 -- bullet
+Fn 556,737,210,0,10 3 0204 -- florin
+f/ 167,710,19,169,170 2 0205 -- fraction
+%0 1000,710,19,3,3 2 0206 -- perthousand
+dg 556,718,171,0,-36 2 0207 -- dagger
+dd 556,718,171,0,-36 2 0210 -- daggerdbl
en 556,333 0 0211 -- endash
em 1000,333 0 0212 -- emdash
-fi 611,727 2 0214 -- fi
-fl 611,727 2 0215 -- fl
-.i 278,532 0 0220 -- dotlessi
-ga 333,750 2 0222 -- grave
-a" 333,750 2 0223 -- hungarumlaut
-a. 333,729 2 0224 -- dotaccent
-ab 333,750 2 0225 -- breve
-ah 333,750 2 0226 -- caron
-ao 333,776 2 0227 -- ring
-ho 333,0,228 1 0230 -- ogonek
-lq 500,727 2 0231 -- quotedblleft
-rq 500,718 2 0232 -- quotedblright
-oe 944,546,14 0 0233 -- oe
-/l 278,718 2 0234 -- lslash
-Bq 500,127,146 0 0235 -- quotedblbase
-OE 1000,737,19 2 0236 -- OE
-/L 611,718 2 0237 -- Lslash
-r! 333,532,186 0 0241 -- exclamdown
-char161 "
-ct 556,628,118 0 0242 -- cent
-char162 "
-Po 556,718,16 2 0243 -- sterling
-char163 "
-Cs 556,636 0 0244 -- currency
-char164 "
-Ye 556,698 2 0245 -- yen
-char165 "
-bb 280,737,19 2 0246 -- brokenbar
-char166 "
-sc 556,727,184 2 0247 -- section
-char167 "
-ad 333,729 2 0250 -- dieresis
-char168 "
-co 737,737,19 2 0251 -- copyright
-char169 "
-Of 370,737 2 0252 -- ordfeminine
-char170 "
-fo 333,484 0 0253 -- guilsinglleft
-no 584,419 0 0254 -- logicalnot
-char172 "
-\- 584,309 0 0255 -- minus
-rg 737,737,19 2 0256 -- registered
-char174 "
-a- 333,678 2 0257 -- macron
-char175 "
-de 400,712 2 0260 -- degree
-char176 "
-char177 584,506 0 0261 -- plusminus
-S2 333,710 2 0262 -- twosuperior
-char178 "
-S3 333,710 2 0263 -- threesuperior
-char179 "
-aa 333,750 2 0264 -- acute
-char180 "
-char181 611,532,207 1 0265 -- mu
-ps 556,700,191 2 0266 -- paragraph
-char182 "
-pc 278,334 0 0267 -- periodcentered
-char183 "
-ac 333,0,228 1 0270 -- cedilla
-char184 "
-S1 333,710 2 0271 -- onesuperior
-char185 "
-Om 365,737 2 0272 -- ordmasculine
-char186 "
-fc 333,484 0 0273 -- guilsinglright
-14 834,710,19 2 0274 -- onequarter
-char188 "
-12 834,710,19 2 0275 -- onehalf
-char189 "
-34 834,710,19 2 0276 -- threequarters
-char190 "
-r? 611,532,195 0 0277 -- questiondown
-char191 "
-`A 722,936 2 0300 -- Agrave
-char192 "
-'A 722,936 2 0301 -- Aacute
-char193 "
-^A 722,936 2 0302 -- Acircumflex
-char194 "
-~A 722,923 2 0303 -- Atilde
-char195 "
-:A 722,915 2 0304 -- Adieresis
-char196 "
-oA 722,962 2 0305 -- Aring
-char197 "
-AE 1000,718 2 0306 -- AE
-char198 "
-,C 722,737,228 3 0307 -- Ccedilla
-char199 "
-`E 667,936 2 0310 -- Egrave
-char200 "
-'E 667,936 2 0311 -- Eacute
-char201 "
-^E 667,936 2 0312 -- Ecircumflex
-char202 "
-:E 667,915 2 0313 -- Edieresis
-char203 "
-`I 278,936 2 0314 -- Igrave
-char204 "
-'I 278,936 2 0315 -- Iacute
-char205 "
-^I 278,936 2 0316 -- Icircumflex
-char206 "
-:I 278,915 2 0317 -- Idieresis
-char207 "
--D 722,718 2 0320 -- Eth
-char208 "
-~N 722,923 2 0321 -- Ntilde
-char209 "
-`O 778,936,19 2 0322 -- Ograve
-char210 "
-'O 778,936,19 2 0323 -- Oacute
-char211 "
-^O 778,936,19 2 0324 -- Ocircumflex
-char212 "
-~O 778,923,19 2 0325 -- Otilde
-char213 "
-:O 778,915,19 2 0326 -- Odieresis
-char214 "
-char215 584,505 0 0327 -- multiply
-/O 778,745,27 2 0330 -- Oslash
-char216 "
-`U 722,936,19 2 0331 -- Ugrave
-char217 "
-'U 722,936,19 2 0332 -- Uacute
-char218 "
-^U 722,936,19 2 0333 -- Ucircumflex
-char219 "
-:U 722,915,19 2 0334 -- Udieresis
-char220 "
-'Y 667,936 2 0335 -- Yacute
-char221 "
-TP 667,718 2 0336 -- Thorn
-char222 "
-ss 611,731,14 2 0337 -- germandbls
-char223 "
-`a 556,750,14 2 0340 -- agrave
-char224 "
-'a 556,750,14 2 0341 -- aacute
-char225 "
-^a 556,750,14 2 0342 -- acircumflex
-char226 "
-~a 556,737,14 2 0343 -- atilde
-char227 "
-:a 556,729,14 2 0344 -- adieresis
-char228 "
-oa 556,776,14 2 0345 -- aring
-char229 "
-ae 889,546,14 0 0346 -- ae
-char230 "
-,c 556,546,228 1 0347 -- ccedilla
-char231 "
-`e 556,750,14 2 0350 -- egrave
-char232 "
-'e 556,750,14 2 0351 -- eacute
-char233 "
-^e 556,750,14 2 0352 -- ecircumflex
-char234 "
-:e 556,729,14 2 0353 -- edieresis
-char235 "
-`i 278,750 2 0354 -- igrave
-char236 "
-'i 278,750 2 0355 -- iacute
-char237 "
-^i 278,750 2 0356 -- icircumflex
-char238 "
-:i 278,729 2 0357 -- idieresis
-char239 "
-Sd 611,737,14 2 0360 -- eth
-char240 "
-~n 611,737 2 0361 -- ntilde
-char241 "
-`o 611,750,14 2 0362 -- ograve
-char242 "
-'o 611,750,14 2 0363 -- oacute
-char243 "
-^o 611,750,14 2 0364 -- ocircumflex
-char244 "
-~o 611,737,14 2 0365 -- otilde
-char245 "
-:o 611,729,14 2 0366 -- odieresis
-char246 "
-char247 584,548,42 0 0367 -- divide
-/o 611,560,29 0 0370 -- oslash
-char248 "
-`u 611,750,14 2 0371 -- ugrave
-char249 "
-'u 611,750,14 2 0372 -- uacute
-char250 "
-^u 611,750,14 2 0373 -- ucircumflex
-char251 "
-:u 611,729,14 2 0374 -- udieresis
-char252 "
-'y 556,750,214 3 0375 -- yacute
-char253 "
-Tp 611,718,208 3 0376 -- thorn
-char254 "
-:y 556,729,214 3 0377 -- ydieresis
-char255 "
+fi 611,727,0,0,-10 2 0214 -- fi
+fl 611,727,0,0,-10 2 0215 -- fl
+.i 278,532,0,0,-69 0 0220 -- dotlessi
+ga 333,750,0,0,23 2 0222 -- grave
+a" 333,750,0,153,-9 2 0223 -- hungarumlaut
+a. 333,729,0,0,-104 2 0224 -- dotaccent
+ab 333,750,0,2,2 2 0225 -- breve
+ah 333,750,0,10,10 2 0226 -- caron
+ao 333,776,0,0,-59 2 0227 -- ring
+ho 333,0,228,0,-71 1 0230 -- ogonek
+lq 500,727,0,0,-64 2 0231 -- quotedblleft
+rq 500,718,0,0,-64 2 0232 -- quotedblright
+oe 944,546,14,0,-34 0 0233 -- oe
+/l 278,718,0,18,18 2 0234 -- lslash
+Bq 500,127,146,0,-64 0 0235 -- quotedblbase
+OE 1000,737,19,0,-37 2 0236 -- OE
+/L 611,718,0,0,20 2 0237 -- Lslash
+r! 333,532,186,0,-90 0 0241 -- exclamdown
+ct 556,628,118,0,-34 0 0242 -- cent
+Po 556,718,16,0,-28 2 0243 -- sterling
+Cs 556,636,0,3,3 0 0244 -- currency
+Ye 556,698,0,9,9 2 0245 -- yen
+bb 280,737,19,0,-84 2 0246 -- brokenbar
+sc 556,727,184,0,-34 2 0247 -- section
+ad 333,729,0,0,-6 2 0250 -- dieresis
+co 737,737,19,12,11 2 0251 -- copyright
+Of 370,737,0,0,-22 2 0252 -- ordfeminine
+fo 333,484,0,0,-83 0 0253 -- guilsinglleft
+no 584,419,0,0,-40 0 0254 -- logicalnot
+\- 584,309,0,0,-40 0 0255 -- minus
+rg 737,737,19,11,11 2 0256 -- registered
+a- 333,678,0,6,6 2 0257 -- macron
+de 400,712,0,0,-57 2 0260 -- degree
+t+- 584,506,0,0,-40 0 0261 -- plusminus
+S2 333,710,0,0,-9 2 0262 -- twosuperior
+S3 333,710,0,0,-8 2 0263 -- threesuperior
+aa 333,750,0,23,-108 2 0264 -- acute
+mc 611,532,207,0,-66 1 0265 -- mu
+ps 556,700,191,0,8 2 0266 -- paragraph
+pc 278,334,0,0,-58 0 0267 -- periodcentered
+ac 333,0,228,0,-6 1 0270 -- cedilla
+S1 333,710,0,0,-26 2 0271 -- onesuperior
+Om 365,737,0,0,-6 2 0272 -- ordmasculine
+fc 333,484,0,0,-83 0 0273 -- guilsinglright
+14 834,710,19,0,-26 2 0274 -- onequarter
+12 834,710,19,0,-26 2 0275 -- onehalf
+34 834,710,19,0,-16 2 0276 -- threequarters
+r? 611,532,195,0,-55 0 0277 -- questiondown
+`A 722,936,0,0,-20 2 0300 -- Agrave
+'A 722,936,0,0,-20 2 0301 -- Aacute
+^A 722,936,0,0,-20 2 0302 -- Acircumflex
+~A 722,923,0,0,-20 2 0303 -- Atilde
+:A 722,915,0,0,-20 2 0304 -- Adieresis
+oA 722,962,0,0,-20 2 0305 -- Aring
+AE 1000,718,0,0,-5 2 0306 -- AE
+,C 722,737,228,0,-44 3 0307 -- Ccedilla
+`E 667,936,0,0,-76 2 0310 -- Egrave
+'E 667,936,0,0,-76 2 0311 -- Eacute
+^E 667,936,0,0,-76 2 0312 -- Ecircumflex
+:E 667,915,0,0,-76 2 0313 -- Edieresis
+`I 278,936,0,0,50 2 0314 -- Igrave
+'I 278,936,0,51,-64 2 0315 -- Iacute
+^I 278,936,0,38,37 2 0316 -- Icircumflex
+:I 278,915,0,22,21 2 0317 -- Idieresis
+-D 722,718,0,0,5 2 0320 -- Eth
+~N 722,923,0,0,-69 2 0321 -- Ntilde
+`O 778,936,19,0,-44 2 0322 -- Ograve
+'O 778,936,19,0,-44 2 0323 -- Oacute
+^O 778,936,19,0,-44 2 0324 -- Ocircumflex
+~O 778,923,19,0,-44 2 0325 -- Otilde
+:O 778,915,19,0,-44 2 0326 -- Odieresis
+tmu 584,505,0,0,-40 0 0327 -- multiply
+/O 778,745,27,0,-33 2 0330 -- Oslash
+`U 722,936,19,0,-72 2 0331 -- Ugrave
+'U 722,936,19,0,-72 2 0332 -- Uacute
+^U 722,936,19,0,-72 2 0333 -- Ucircumflex
+:U 722,915,19,0,-72 2 0334 -- Udieresis
+'Y 667,936,0,0,-15 2 0335 -- Yacute
+TP 667,718,0,0,-76 2 0336 -- Thorn
+ss 611,731,14,0,-69 2 0337 -- germandbls
+`a 556,750,14,0,-29 2 0340 -- agrave
+'a 556,750,14,0,-29 2 0341 -- aacute
+^a 556,750,14,0,-29 2 0342 -- acircumflex
+~a 556,737,14,0,-29 2 0343 -- atilde
+:a 556,729,14,0,-29 2 0344 -- adieresis
+oa 556,776,14,0,-29 2 0345 -- aring
+ae 889,546,14,0,-29 0 0346 -- ae
+,c 556,546,228,0,-34 1 0347 -- ccedilla
+`e 556,750,14,0,-23 2 0350 -- egrave
+'e 556,750,14,0,-23 2 0351 -- eacute
+^e 556,750,14,0,-23 2 0352 -- ecircumflex
+:e 556,729,14,0,-23 2 0353 -- edieresis
+`i 278,750,0,0,50 2 0354 -- igrave
+'i 278,750,0,51,-69 2 0355 -- iacute
+^i 278,750,0,38,37 2 0356 -- icircumflex
+:i 278,729,0,22,21 2 0357 -- idieresis
+Sd 611,737,14,0,-34 2 0360 -- eth
+~n 611,737,0,0,-65 2 0361 -- ntilde
+`o 611,750,14,0,-34 2 0362 -- ograve
+'o 611,750,14,0,-34 2 0363 -- oacute
+^o 611,750,14,0,-34 2 0364 -- ocircumflex
+~o 611,737,14,0,-34 2 0365 -- otilde
+:o 611,729,14,0,-34 2 0366 -- odieresis
+tdi 584,548,42,0,-40 0 0367 -- divide
+/o 611,560,29,0,-22 0 0370 -- oslash
+`u 611,750,14,0,-66 2 0371 -- ugrave
+'u 611,750,14,0,-66 2 0372 -- uacute
+^u 611,750,14,0,-66 2 0373 -- ucircumflex
+:u 611,729,14,0,-66 2 0374 -- udieresis
+'y 556,750,214,0,-10 3 0375 -- yacute
+Tp 611,718,208,0,-62 3 0376 -- thorn
+:y 556,729,214,0,-10 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/HBI b/contrib/groff/font/devps/HBI
index a12e389..6a7d853 100644
--- a/contrib/groff/font/devps/HBI
+++ b/contrib/groff/font/devps/HBI
@@ -79,7 +79,6 @@ T . -80
T o -80
T - -120
T hy -120
-T char173 -120
T e -60
T , -80
T : -40
@@ -95,7 +94,6 @@ V . -120
V o -90
V - -80
V hy -80
-V char173 -80
V e -50
V , -120
V : -40
@@ -110,7 +108,6 @@ W . -80
W o -60
W - -40
W hy -40
-W char173 -40
W e -35
W , -80
W : -10
@@ -205,7 +202,6 @@ r . -60
r o -20
r - -20
r hy -20
-r char173 -20
r g -15
r d -20
r , -60
@@ -254,7 +250,6 @@ cq "
, 278,146,168,17,22,17 0 0054 -- comma
- 333,345,0,96,-23,90 0 0055 -- hyphen
hy "
-char173 "
. 278,146,0,17,-14,17 0 0056 -- period
/ 278,737,19,240,87,90 2 0057 -- slash
sl "
@@ -349,9 +344,7 @@ a~ 333,737,0,224,-63,90 2 0176 -- tilde
~ "
bq 278,127,146,8,9,8 0 0200 -- quotesinglbase
Fo 556,484,0,65,-85,65 0 0201 -- guillemotleft
-char171 "
Fc 556,484,0,34,-54,34 0 0202 -- guillemotright
-char187 "
bu 350,524,0,120,-33,90 0 0203 -- bullet
Fn 556,737,210,163,100,90 3 0204 -- florin
f/ 167,710,19,370,224,90 2 0205 -- fraction
@@ -378,185 +371,97 @@ Bq 500,127,146,13,14,13 0 0235 -- quotedblbase
OE 1000,737,19,164,-49,90 2 0236 -- OE
/L 611,718,0,50,16,50 2 0237 -- Lslash
r! 333,532,186,70,0,70 0 0241 -- exclamdown
-char161 "
ct 556,628,118,93,-29,90 0 0242 -- cent
-char162 "
Po 556,718,16,129,0,90 2 0243 -- sterling
-char163 "
Cs 556,636,0,174,23,90 0 0244 -- currency
-char164 "
Ye 556,698,0,207,-10,90 2 0245 -- yen
-char165 "
bb 280,737,19,123,-30,90 2 0246 -- brokenbar
-char166 "
sc 556,727,184,92,-11,90 2 0247 -- section
-char167 "
ad 333,729,0,199,-87,90 2 0250 -- dieresis
-char168 "
co 737,737,19,148,-6,90 2 0251 -- copyright
-char169 "
Of 370,737,0,145,-42,90 2 0252 -- ordfeminine
-char170 "
fo 333,484,0,70,-80,70 0 0253 -- guilsinglleft
no 584,419,0,99,-55,90 0 0254 -- logicalnot
-char172 "
\- 584,309,0,76,-32,76 0 0255 -- minus
rg 737,737,19,147,-5,90 2 0256 -- registered
-char174 "
a- 333,678,0,200,-72,90 2 0257 -- macron
-char175 "
de 400,712,0,117,-125,90 2 0260 -- degree
-char176 "
-char177 584,506,0,91,10,90 0 0261 -- plusminus
+t+- 584,506,0,91,10,90 0 0261 -- plusminus
S2 333,710,0,166,-19,90 2 0262 -- twosuperior
-char178 "
S3 333,710,0,158,-41,90 2 0263 -- threesuperior
-char179 "
aa 333,750,0,232,-186,90 2 0264 -- acute
-char180 "
-char181 611,532,207,97,28,90 1 0265 -- mu
+mc 611,532,207,97,28,90 1 0265 -- mu
ps 556,700,191,182,-48,90 2 0266 -- paragraph
-char182 "
pc 278,334,0,48,-60,48 0 0267 -- periodcentered
-char183 "
ac 333,0,228,0,87 1 0270 -- cedilla
-char184 "
S1 333,710,0,105,-98,90 2 0271 -- onesuperior
-char185 "
Om 365,737,0,170,-42,90 2 0272 -- ordmasculine
-char186 "
fc 333,484,0,39,-49,39 0 0273 -- guilsinglright
14 834,710,19,22,-82,22 2 0274 -- onequarter
-char188 "
12 834,710,19,74,-82,74 2 0275 -- onehalf
-char189 "
34 834,710,19,55,-49,55 2 0276 -- threequarters
-char190 "
r? 611,532,195,0,-3 0 0277 -- questiondown
-char191 "
`A 722,936,0,30,30,30 2 0300 -- Agrave
-char192 "
'A 722,936,0,78,30,78 2 0301 -- Aacute
-char193 "
^A 722,936,0,34,30,34 2 0302 -- Acircumflex
-char194 "
~A 722,923,0,69,30,69 2 0303 -- Atilde
-char195 "
:A 722,915,0,44,30,44 2 0304 -- Adieresis
-char196 "
oA 722,962,0,30,30,30 2 0305 -- Aring
-char197 "
AE 1000,718,0,150,45,90 2 0306 -- AE
-char198 "
,C 722,737,228,117,-57,90 3 0307 -- Ccedilla
-char199 "
`E 667,936,0,140,-26,90 2 0310 -- Egrave
-char200 "
'E 667,936,0,140,-26,90 2 0311 -- Eacute
-char201 "
^E 667,936,0,140,-26,90 2 0312 -- Ecircumflex
-char202 "
:E 667,915,0,140,-26,90 2 0313 -- Edieresis
-char203 "
`I 278,936,0,139,-14,90 2 0314 -- Igrave
-char204 "
'I 278,936,0,300,-14,90 2 0315 -- Iacute
-char205 "
^I 278,936,0,256,-14,90 2 0316 -- Icircumflex
-char206 "
:I 278,915,0,266,-14,90 2 0317 -- Idieresis
-char207 "
-D 722,718,0,105,-12,90 2 0320 -- Eth
-char208 "
~N 722,923,0,135,-19,90 2 0321 -- Ntilde
-char209 "
`O 778,936,19,95,-57,90 2 0322 -- Ograve
-char210 "
'O 778,936,19,95,-57,90 2 0323 -- Oacute
-char211 "
^O 778,936,19,95,-57,90 2 0324 -- Ocircumflex
-char212 "
~O 778,923,19,95,-57,90 2 0325 -- Otilde
-char213 "
:O 778,915,19,95,-57,90 2 0326 -- Odieresis
-char214 "
-char215 584,505,0,101,-7,90 0 0327 -- multiply
+tmu 584,505,0,101,-7,90 0 0327 -- multiply
/O 778,745,27,166,15,90 2 0330 -- Oslash
-char216 "
`U 722,936,19,132,-66,90 2 0331 -- Ugrave
-char217 "
'U 722,936,19,132,-66,90 2 0332 -- Uacute
-char218 "
^U 722,936,19,132,-66,90 2 0333 -- Ucircumflex
-char219 "
:U 722,915,19,132,-66,90 2 0334 -- Udieresis
-char220 "
'Y 667,936,0,189,-118,90 2 0335 -- Yacute
-char221 "
TP 667,718,0,99,-26,90 2 0336 -- Thorn
-char222 "
ss 611,731,14,96,-19,90 2 0337 -- germandbls
-char223 "
`a 556,750,14,77,-5,77 2 0340 -- agrave
-char224 "
'a 556,750,14,121,-5,90 2 0341 -- aacute
-char225 "
^a 556,750,14,77,-5,77 2 0342 -- acircumflex
-char226 "
~a 556,737,14,113,-5,90 2 0343 -- atilde
-char227 "
:a 556,729,14,88,-5,88 2 0344 -- adieresis
-char228 "
oa 556,776,14,77,-5,77 2 0345 -- aring
-char229 "
ae 889,546,14,84,-6,84 0 0346 -- ae
-char230 "
,c 556,546,228,93,-29,90 1 0347 -- ccedilla
-char231 "
`e 556,750,14,87,-20,87 2 0350 -- egrave
-char232 "
'e 556,750,14,121,-20,90 2 0351 -- eacute
-char233 "
^e 556,750,14,87,-20,87 2 0352 -- ecircumflex
-char234 "
:e 556,729,14,88,-20,88 2 0353 -- edieresis
-char235 "
`i 278,750,0,98,-19,90 2 0354 -- igrave
-char236 "
'i 278,750,0,260,-19,90 2 0355 -- iacute
-char237 "
^i 278,750,0,216,-19,90 2 0356 -- icircumflex
-char238 "
:i 278,729,0,227,-19,90 2 0357 -- idieresis
-char239 "
Sd 611,737,14,109,-32,90 2 0360 -- eth
-char240 "
~n 611,737,0,85,-15,85 2 0361 -- ntilde
-char241 "
`o 611,750,14,82,-32,82 2 0362 -- ograve
-char242 "
'o 611,750,14,93,-32,90 2 0363 -- oacute
-char243 "
^o 611,750,14,82,-32,82 2 0364 -- ocircumflex
-char244 "
~o 611,737,14,85,-32,85 2 0365 -- otilde
-char245 "
:o 611,729,14,82,-32,82 2 0366 -- odieresis
-char246 "
-char247 584,548,42,76,-32,76 0 0367 -- divide
+tdi 584,548,42,76,-32,76 0 0367 -- divide
/o 611,560,29,140,28,90 0 0370 -- oslash
-char248 "
`u 611,750,14,97,-48,90 2 0371 -- ugrave
-char249 "
'u 611,750,14,97,-48,90 2 0372 -- uacute
-char250 "
^u 611,750,14,97,-48,90 2 0373 -- ucircumflex
-char251 "
:u 611,729,14,97,-48,90 2 0374 -- udieresis
-char252 "
'y 556,750,214,146,8,90 3 0375 -- yacute
-char253 "
Tp 611,718,208,84,32,84 3 0376 -- thorn
-char254 "
:y 556,729,214,146,8,90 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/HI b/contrib/groff/font/devps/HI
index 1846122..d1bd197 100644
--- a/contrib/groff/font/devps/HI
+++ b/contrib/groff/font/devps/HI
@@ -86,7 +86,6 @@ T . -120
T o -120
T - -140
T hy -140
-T char173 -140
T e -120
T , -120
T : -20
@@ -102,7 +101,6 @@ V . -125
V o -80
V - -80
V hy -80
-V char173 -80
V e -80
V , -125
V : -40
@@ -116,7 +114,6 @@ W . -80
W o -30
W - -40
W hy -40
-W char173 -40
W e -30
W , -80
W a -40
@@ -129,7 +126,6 @@ Y o -140
Y i -20
Y - -140
Y hy -140
-Y char173 -140
Y e -140
Y , -140
Y : -60
@@ -182,61 +178,33 @@ o v -15
o . -40
o , -40
/o z -55
-char248 z -55
/o y -70
-char248 y -70
/o x -85
-char248 x -85
/o w -70
-char248 w -70
/o v -70
-char248 v -70
/o u -55
-char248 u -55
/o t -55
-char248 t -55
/o s -55
-char248 s -55
/o r -55
-char248 r -55
/o q -55
-char248 q -55
/o . -95
-char248 . -95
/o p -55
-char248 p -55
/o o -55
-char248 o -55
/o n -55
-char248 n -55
/o m -55
-char248 m -55
/o l -55
-char248 l -55
/o k -55
-char248 k -55
/o j -55
-char248 j -55
/o i -55
-char248 i -55
/o h -55
-char248 h -55
/o g -55
-char248 g -55
/o f -55
-char248 f -55
/o e -55
-char248 e -55
/o d -55
-char248 d -55
/o , -95
-char248 , -95
/o c -55
-char248 c -55
/o b -55
-char248 b -55
/o a -55
-char248 a -55
p y -30
p . -35
p , -35
@@ -322,7 +290,6 @@ cq "
, 278,106,147,0,-6 0 0054 -- comma
- 333,322,0,74,-43,74 0 0055 -- hyphen
hy "
-char173 "
. 278,106,0,0,-37 0 0056 -- period
/ 278,737,19,224,71,89 2 0057 -- slash
sl "
@@ -417,9 +384,7 @@ a~ 333,722,0,207,-75,89 2 0176 -- tilde
~ "
bq 222,106,149,8,29,8 0 0200 -- quotesinglbase
Fo 556,446,0,48,-96,48 0 0201 -- guillemotleft
-char171 "
Fc 556,446,0,22,-70,22 0 0202 -- guillemotright
-char187 "
bu 350,517,0,113,-41,89 0 0203 -- bullet
Fn 556,737,207,148,102,89 3 0204 -- florin
f/ 167,703,19,365,220,89 2 0205 -- fraction
@@ -446,185 +411,97 @@ Bq 333,106,149,35,56,35 0 0235 -- quotedblbase
OE 1000,737,19,166,-48,89 2 0236 -- OE
/L 556,718,0,49,9,49 2 0237 -- Lslash
r! 333,523,195,43,-27,43 0 0241 -- exclamdown
-char161 "
ct 556,623,115,78,-45,78 0 0242 -- cent
-char162 "
Po 556,718,16,128,1,89 2 0243 -- sterling
-char163 "
Cs 556,603,0,140,-10,89 0 0244 -- currency
-char164 "
Ye 556,688,0,193,-31,89 2 0245 -- yen
-char165 "
bb 260,737,19,114,-40,89 2 0246 -- brokenbar
-char166 "
sc 556,737,191,78,-26,78 2 0247 -- section
-char167 "
ad 333,706,0,160,-118,89 2 0250 -- dieresis
-char168 "
co 737,737,19,150,-4,89 2 0251 -- copyright
-char169 "
Of 370,737,0,129,-50,89 2 0252 -- ordfeminine
-char170 "
fo 333,446,0,57,-87,57 0 0253 -- guilsinglleft
no 584,390,0,94,-56,89 0 0254 -- logicalnot
-char172 "
\- 584,289,0,72,-35,72 0 0255 -- minus
rg 737,737,19,150,-4,89 2 0256 -- registered
-char174 "
a- 333,684,0,185,-93,89 2 0257 -- macron
-char175 "
de 400,703,0,118,-119,89 2 0260 -- degree
-char176 "
-char177 584,506,0,84,11,84 0 0261 -- plusminus
+t+- 584,506,0,84,11,84 0 0261 -- plusminus
S2 333,703,0,166,-14,89 2 0262 -- twosuperior
-char178 "
S3 333,703,0,153,-40,89 2 0263 -- threesuperior
-char179 "
aa 333,734,0,192,-198,89 2 0264 -- acute
-char180 "
-char181 556,523,207,94,26,89 1 0265 -- mu
+mc 556,523,207,94,26,89 1 0265 -- mu
ps 537,718,173,163,-76,89 2 0266 -- paragraph
-char182 "
pc 278,315,0,29,-79,29 0 0267 -- periodcentered
-char183 "
ac 333,0,225,0,48 1 0270 -- cedilla
-char184 "
S1 333,703,0,88,-116,88 2 0271 -- onesuperior
-char185 "
Om 365,737,0,153,-50,89 2 0272 -- ordmasculine
-char186 "
fc 333,446,0,31,-61,31 0 0273 -- guilsinglright
14 834,703,19,18,-100,18 2 0274 -- onequarter
-char188 "
12 834,703,19,55,-64,55 2 0275 -- onehalf
-char189 "
34 834,703,19,77,-80,77 2 0276 -- threequarters
-char190 "
r? 611,525,201,0,-35 0 0277 -- questiondown
-char191 "
`A 667,929,0,37,36,37 2 0300 -- Agrave
-char192 "
'A 667,929,0,66,36,66 2 0301 -- Aacute
-char193 "
^A 667,929,0,37,36,37 2 0302 -- Acircumflex
-char194 "
~A 667,917,0,82,36,82 2 0303 -- Atilde
-char195 "
:A 667,901,0,37,36,37 2 0304 -- Adieresis
-char196 "
oA 667,931,0,37,36,37 2 0305 -- Aring
-char197 "
AE 1000,718,0,147,42,89 2 0306 -- AE
-char198 "
,C 722,737,225,110,-58,89 3 0307 -- Ccedilla
-char199 "
`E 667,929,0,145,-36,89 2 0310 -- Egrave
-char200 "
'E 667,929,0,145,-36,89 2 0311 -- Eacute
-char201 "
^E 667,929,0,145,-36,89 2 0312 -- Ecircumflex
-char202 "
:E 667,901,0,145,-36,89 2 0313 -- Edieresis
-char203 "
`I 278,929,0,123,-41,89 2 0314 -- Igrave
-char204 "
'I 278,929,0,261,-41,89 2 0315 -- Iacute
-char205 "
^I 278,929,0,224,-41,89 2 0316 -- Icircumflex
-char206 "
:I 278,901,0,230,-41,89 2 0317 -- Idieresis
-char207 "
-D 722,718,0,92,-19,89 2 0320 -- Eth
-char208 "
~N 722,917,0,127,-26,89 2 0321 -- Ntilde
-char209 "
`O 778,929,19,98,-55,89 2 0322 -- Ograve
-char210 "
'O 778,929,19,98,-55,89 2 0323 -- Oacute
-char211 "
^O 778,929,19,98,-55,89 2 0324 -- Ocircumflex
-char212 "
~O 778,917,19,98,-55,89 2 0325 -- Otilde
-char213 "
:O 778,901,19,98,-55,89 2 0326 -- Odieresis
-char214 "
-char215 584,506,0,108,0,89 0 0327 -- multiply
+tmu 584,506,0,108,0,89 0 0327 -- multiply
/O 778,737,19,162,7,89 2 0330 -- Oslash
-char216 "
`U 722,929,19,125,-73,89 2 0331 -- Ugrave
-char217 "
'U 722,929,19,125,-73,89 2 0332 -- Uacute
-char218 "
^U 722,929,19,125,-73,89 2 0333 -- Ucircumflex
-char219 "
:U 722,901,19,125,-73,89 2 0334 -- Udieresis
-char220 "
'Y 667,929,0,189,-117,89 2 0335 -- Yacute
-char221 "
TP 667,718,0,95,-36,89 2 0336 -- Thorn
-char222 "
ss 611,728,15,97,-17,89 2 0337 -- germandbls
-char223 "
`a 556,734,15,53,-11,53 2 0340 -- agrave
-char224 "
'a 556,734,15,81,-11,81 2 0341 -- aacute
-char225 "
^a 556,734,15,53,-11,53 2 0342 -- acircumflex
-char226 "
~a 556,722,15,86,-11,86 2 0343 -- atilde
-char227 "
:a 556,706,15,53,-11,53 2 0344 -- adieresis
-char228 "
oa 556,756,15,53,-11,53 2 0345 -- aring
-char229 "
ae 889,538,15,70,-11,70 0 0346 -- ae
-char230 "
,c 500,538,225,103,-24,89 1 0347 -- ccedilla
-char231 "
`e 556,734,15,72,-34,72 2 0350 -- egrave
-char232 "
'e 556,734,15,81,-34,81 2 0351 -- eacute
-char233 "
^e 556,734,15,72,-34,72 2 0352 -- ecircumflex
-char234 "
:e 556,706,15,72,-34,72 2 0353 -- edieresis
-char235 "
`i 278,734,0,82,-45,82 2 0354 -- igrave
-char236 "
'i 278,734,0,220,-45,89 2 0355 -- iacute
-char237 "
^i 278,734,0,183,-45,89 2 0356 -- icircumflex
-char238 "
:i 278,706,0,188,-45,89 2 0357 -- idieresis
-char239 "
Sd 556,737,15,111,-31,89 2 0360 -- eth
-char240 "
~n 556,722,0,86,-15,86 2 0361 -- ntilde
-char241 "
`o 556,734,14,79,-33,79 2 0362 -- ograve
-char242 "
'o 556,734,14,81,-33,81 2 0363 -- oacute
-char243 "
^o 556,734,14,79,-33,79 2 0364 -- ocircumflex
-char244 "
~o 556,722,14,96,-33,89 2 0365 -- otilde
-char245 "
:o 556,706,14,79,-33,79 2 0366 -- odieresis
-char246 "
-char247 584,524,19,72,-35,72 0 0367 -- divide
+tdi 584,524,19,72,-35,72 0 0367 -- divide
/o 611,545,22,86,21,86 0 0370 -- oslash
-char248 "
`u 556,734,15,94,-44,89 2 0371 -- ugrave
-char249 "
'u 556,734,15,94,-44,89 2 0372 -- uacute
-char250 "
^u 556,734,15,94,-44,89 2 0373 -- ucircumflex
-char251 "
:u 556,706,15,94,-44,89 2 0374 -- udieresis
-char252 "
'y 500,734,214,150,35,89 3 0375 -- yacute
-char253 "
Tp 556,718,207,78,36,78 3 0376 -- thorn
-char254 "
:y 500,706,214,150,35,89 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/HNB b/contrib/groff/font/devps/HNB
index ded4815..2a117f4 100644
--- a/contrib/groff/font/devps/HNB
+++ b/contrib/groff/font/devps/HNB
@@ -78,7 +78,6 @@ T . -65
T o -65
T - -97
T hy -97
-T char173 -97
T e -48
T , -65
T : -32
@@ -94,7 +93,6 @@ V . -97
V o -73
V - -65
V hy -65
-V char173 -65
V e -40
V , -97
V : -32
@@ -109,7 +107,6 @@ W . -65
W o -48
W - -32
W hy -32
-W char173 -32
W e -28
W , -65
W : -7
@@ -204,7 +201,6 @@ r . -48
r o -15
r - -15
r hy -15
-r char173 -15
r g -11
r d -15
r , -48
@@ -225,337 +221,246 @@ 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,0,0,-51 2 0000 -- asciicircum
+ti 479,343,0,0,-50 0 0001 -- asciitilde
+vS 547,936,19,0,-32 2 0002 -- Scaron
+vZ 501,936,0,0,-20 2 0003 -- Zcaron
+vs 456,750,14,0,-25 2 0004 -- scaron
+vz 410,750,0,0,-16 2 0005 -- zcaron
+:Y 547,915,0,0,-12 2 0006 -- Ydieresis
+tm 820,718,0,0,-36 2 0007 -- trademark
+aq 195,718,0,0,-57 2 0010 -- quotesingle
space 228 0 0040
-! 273,718 2 0041 -- exclam
-" 389,718 2 0042 -- quotedbl
+! 273,718,0,0,-74 2 0041 -- exclam
+" 389,718,0,0,-80 2 0042 -- quotedbl
dq "
-# 456,698 2 0043 -- numbersign
+# 456,698,0,0,-15 2 0043 -- numbersign
sh "
-$ 456,775,115 2 0044 -- dollar
+$ 456,775,115,0,-25 2 0044 -- dollar
Do "
-% 729,710,19 2 0045 -- percent
-& 592,718,19 2 0046 -- ampersand
-' 228,718 2 0047 -- quoteright
+% 729,710,19,0,-23 2 0045 -- percent
+& 592,718,19,0,-44 2 0046 -- ampersand
+' 228,718,0,0,-57 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
+( 273,734,208,0,-29 3 0050 -- parenleft
+) 273,734,208,0,-16 3 0051 -- parenright
+* 319,718,0,0,-22 2 0052 -- asterisk
++ 479,506,0,0,-33 0 0053 -- plus
+, 228,146,168,0,-52 0 0054 -- comma
+- 273,345,0,0,-22 0 0055 -- hyphen
hy "
-char173 "
-. 228,146 0 0056 -- period
-/ 228,737,19 2 0057 -- slash
+. 228,146,0,0,-52 0 0056 -- period
+/ 228,737,19,27,27 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,0,-26 2 0060 -- zero
+1 456,710,0,0,-57 2 0061 -- one
+2 456,710,0,0,-21 2 0062 -- two
+3 456,710,19,0,-22 2 0063 -- three
+4 456,710,0,0,-22 2 0064 -- four
+5 456,698,19,0,-22 2 0065 -- five
+6 456,710,19,0,-25 2 0066 -- six
+7 456,698,0,0,-20 2 0067 -- seven
+8 456,710,19,0,-26 2 0070 -- eight
+9 456,710,19,0,-25 2 0071 -- nine
+: 273,512,0,0,-75 0 0072 -- colon
+; 273,512,168,0,-75 0 0073 -- semicolon
+< 479,514,8,0,-31 0 0074 -- less
+= 479,419,0,0,-33 0 0075 -- equal
+> 479,514,8,0,-31 0 0076 -- greater
+? 501,727,0,0,-49 2 0077 -- question
+@ 800,737,19,0,-97 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,0,0,-16 2 0101 -- A
+B 592,718,0,0,-62 2 0102 -- B
+C 592,737,19,0,-36 2 0103 -- C
+D 592,718,0,0,-62 2 0104 -- D
+E 547,718,0,0,-62 2 0105 -- E
+F 501,718,0,0,-62 2 0106 -- F
+G 638,737,19,0,-36 2 0107 -- G
+H 592,718,0,0,-58 2 0110 -- H
+I 228,718,0,0,-52 2 0111 -- I
+J 456,718,18,0,-18 2 0112 -- J
+K 592,718,0,0,-71 2 0113 -- K
+L 501,718,0,0,-62 2 0114 -- L
+M 683,718,0,0,-57 2 0115 -- M
+N 592,718,0,0,-57 2 0116 -- N
+O 638,737,19,0,-36 2 0117 -- O
+P 547,718,0,0,-62 2 0120 -- P
+Q 638,737,52,0,-36 2 0121 -- Q
+R 592,718,0,0,-62 2 0122 -- R
+S 547,737,19,0,-32 2 0123 -- S
+T 501,718,0,0,-11 2 0124 -- T
+U 592,718,19,0,-59 2 0125 -- U
+V 547,718,0,0,-16 2 0126 -- V
+W 774,718,0,0,-13 2 0127 -- W
+X 547,718,0,0,-11 2 0130 -- X
+Y 547,718,0,0,-12 2 0131 -- Y
+Z 501,718,0,0,-20 2 0132 -- Z
+[ 273,722,196,0,-52 2 0133 -- bracketleft
lB "
-\ 228,737,19 2 0134 -- backslash
+\ 228,737,19,27,27 2 0134 -- backslash
rs "
-] 273,722,196 2 0135 -- bracketright
+] 273,722,196,0,-20 2 0135 -- bracketright
rB "
-a^ 273,750 2 0136 -- circumflex
+a^ 273,750,0,8,8 2 0136 -- circumflex
^ "
_ 456,0,125 0 0137 -- underscore
-` 228,727 2 0140 -- quoteleft
+` 228,727,0,0,-57 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,-24 0 0141 -- a
+b 501,718,14,0,-50 2 0142 -- b
+c 456,546,14,0,-28 0 0143 -- c
+d 501,718,14,0,-28 2 0144 -- d
+e 456,546,14,0,-19 0 0145 -- e
+f 273,727,0,0,-8 2 0146 -- f
+g 501,546,217,0,-33 1 0147 -- g
+h 501,718,0,0,-53 2 0150 -- h
+i 228,725,0,0,-57 2 0151 -- i
+j 228,725,214,0,-2 3 0152 -- j
+k 456,718,0,5,-57 2 0153 -- k
+l 228,718,0,0,-57 2 0154 -- l
+m 729,546,0,0,-52 0 0155 -- m
+n 501,546,0,0,-53 0 0156 -- n
+o 501,546,14,0,-28 0 0157 -- o
+p 501,546,207,0,-51 1 0160 -- p
+q 501,546,207,0,-28 1 0161 -- q
+r 319,546,0,0,-52 0 0162 -- r
+s 456,546,14,0,-25 0 0163 -- s
+t 273,676,6,0,-8 2 0164 -- t
+u 501,532,14,0,-54 0 0165 -- u
+v 456,532,0,0,-11 0 0166 -- v
+w 638,532,0,0,-8 0 0167 -- w
+x 456,532,0,0,-12 0 0170 -- x
+y 456,532,214,0,-8 1 0171 -- y
+z 410,532,0,0,-16 0 0172 -- z
+lC 319,722,196,0,-39 2 0173 -- braceleft
{ "
-ba 230,737,19 2 0174 -- bar
+ba 230,737,19,0,-69 2 0174 -- bar
| "
-rC 319,722,196 2 0175 -- braceright
+rC 319,722,196,0,-20 2 0175 -- braceright
} "
-a~ 273,737 2 0176 -- tilde
+a~ 273,737,0,14,14 2 0176 -- tilde
~ "
-bq 228,127,146 0 0200 -- quotesinglbase
-Fo 456,484 0 0201 -- guillemotleft
-char171 "
-Fc 456,484 0 0202 -- guillemotright
-char187 "
-bu 287,524 0 0203 -- bullet
-Fn 456,737,210 3 0204 -- florin
-f/ 137,710,19 2 0205 -- fraction
-%0 820,710,19 2 0206 -- perthousand
-dg 456,718,171 2 0207 -- dagger
-dd 456,718,171 2 0210 -- daggerdbl
+bq 228,127,146,0,-57 0 0200 -- quotesinglbase
+Fo 456,484,0,0,-72 0 0201 -- guillemotleft
+Fc 456,484,0,0,-72 0 0202 -- guillemotright
+bu 287,524,0,0,-8 0 0203 -- bullet
+Fn 456,737,210,0,8 3 0204 -- florin
+f/ 137,710,19,139,139 2 0205 -- fraction
+%0 820,710,19,2,2 2 0206 -- perthousand
+dg 456,718,171,0,-30 2 0207 -- dagger
+dd 456,718,171,0,-30 2 0210 -- daggerdbl
en 456,333 0 0211 -- endash
em 820,333 0 0212 -- emdash
-fi 501,727 2 0214 -- fi
-fl 501,727 2 0215 -- fl
-.i 228,532 0 0220 -- dotlessi
-ga 273,750 2 0222 -- grave
-a" 273,750 2 0223 -- hungarumlaut
-a. 273,729 2 0224 -- dotaccent
-ab 273,750 2 0225 -- breve
-ah 273,750 2 0226 -- caron
-ao 273,776 2 0227 -- ring
-ho 273,0,228 1 0230 -- ogonek
-lq 410,727 2 0231 -- quotedblleft
-rq 410,718 2 0232 -- quotedblright
-oe 774,546,14 0 0233 -- oe
-/l 228,718 2 0234 -- lslash
-Bq 410,127,146 0 0235 -- quotedblbase
-OE 820,737,19 2 0236 -- OE
-/L 501,718 2 0237 -- Lslash
-r! 273,532,186 0 0241 -- exclamdown
-char161 "
-ct 456,628,118 0 0242 -- cent
-char162 "
-Po 456,718,16 2 0243 -- sterling
-char163 "
-Cs 456,636 0 0244 -- currency
-char164 "
-Ye 456,698 2 0245 -- yen
-char165 "
-bb 230,737,19 2 0246 -- brokenbar
-char166 "
-sc 456,727,184 2 0247 -- section
-char167 "
-ad 273,729 2 0250 -- dieresis
-char168 "
-co 604,737,19 2 0251 -- copyright
-char169 "
-Of 303,737 2 0252 -- ordfeminine
-char170 "
-fo 273,484 0 0253 -- guilsinglleft
-no 479,419 0 0254 -- logicalnot
-char172 "
-\- 479,309 0 0255 -- minus
-rg 604,737,19 2 0256 -- registered
-char174 "
-a- 273,678 2 0257 -- macron
-char175 "
-de 328,712 2 0260 -- degree
-char176 "
-char177 479,506 0 0261 -- plusminus
-S2 273,710 2 0262 -- twosuperior
-char178 "
-S3 273,710 2 0263 -- threesuperior
-char179 "
-aa 273,750 2 0264 -- acute
-char180 "
-char181 501,532,207 1 0265 -- mu
-ps 456,700,191 2 0266 -- paragraph
-char182 "
-pc 228,334 0 0267 -- periodcentered
-char183 "
-ac 273,0,228 1 0270 -- cedilla
-char184 "
-S1 273,710 2 0271 -- onesuperior
-char185 "
-Om 299,737 2 0272 -- ordmasculine
-char186 "
-fc 273,484 0 0273 -- guilsinglright
-14 684,710,19 2 0274 -- onequarter
-char188 "
-12 684,710,19 2 0275 -- onehalf
-char189 "
-34 684,710,19 2 0276 -- threequarters
-char190 "
-r? 501,532,195 0 0277 -- questiondown
-char191 "
-`A 592,936 2 0300 -- Agrave
-char192 "
-'A 592,936 2 0301 -- Aacute
-char193 "
-^A 592,936 2 0302 -- Acircumflex
-char194 "
-~A 592,923 2 0303 -- Atilde
-char195 "
-:A 592,915 2 0304 -- Adieresis
-char196 "
-oA 592,962 2 0305 -- Aring
-char197 "
-AE 820,718 2 0306 -- AE
-char198 "
-,C 592,737,228 3 0307 -- Ccedilla
-char199 "
-`E 547,936 2 0310 -- Egrave
-char200 "
-'E 547,936 2 0311 -- Eacute
-char201 "
-^E 547,936 2 0312 -- Ecircumflex
-char202 "
-:E 547,915 2 0313 -- Edieresis
-char203 "
-`I 228,936 2 0314 -- Igrave
-char204 "
-'I 228,936 2 0315 -- Iacute
-char205 "
-^I 228,936 2 0316 -- Icircumflex
-char206 "
-:I 228,915 2 0317 -- Idieresis
-char207 "
--D 592,718 2 0320 -- Eth
-char208 "
-~N 592,923 2 0321 -- Ntilde
-char209 "
-`O 638,936,19 2 0322 -- Ograve
-char210 "
-'O 638,936,19 2 0323 -- Oacute
-char211 "
-^O 638,936,19 2 0324 -- Ocircumflex
-char212 "
-~O 638,923,19 2 0325 -- Otilde
-char213 "
-:O 638,915,19 2 0326 -- Odieresis
-char214 "
-char215 479,505 0 0327 -- multiply
-/O 638,745,27 2 0330 -- Oslash
-char216 "
-`U 592,936,19 2 0331 -- Ugrave
-char217 "
-'U 592,936,19 2 0332 -- Uacute
-char218 "
-^U 592,936,19 2 0333 -- Ucircumflex
-char219 "
-:U 592,915,19 2 0334 -- Udieresis
-char220 "
-'Y 547,936 2 0335 -- Yacute
-char221 "
-TP 547,718 2 0336 -- Thorn
-char222 "
-ss 501,731,14 2 0337 -- germandbls
-char223 "
-`a 456,750,14 2 0340 -- agrave
-char224 "
-'a 456,750,14 2 0341 -- aacute
-char225 "
-^a 456,750,14 2 0342 -- acircumflex
-char226 "
-~a 456,737,14 2 0343 -- atilde
-char227 "
-:a 456,729,14 2 0344 -- adieresis
-char228 "
-oa 456,776,14 2 0345 -- aring
-char229 "
-ae 729,546,14 0 0346 -- ae
-char230 "
-,c 456,546,228 1 0347 -- ccedilla
-char231 "
-`e 456,750,14 2 0350 -- egrave
-char232 "
-'e 456,750,14 2 0351 -- eacute
-char233 "
-^e 456,750,14 2 0352 -- ecircumflex
-char234 "
-:e 456,729,14 2 0353 -- edieresis
-char235 "
-`i 228,750 2 0354 -- igrave
-char236 "
-'i 228,750 2 0355 -- iacute
-char237 "
-^i 228,750 2 0356 -- icircumflex
-char238 "
-:i 228,729 2 0357 -- idieresis
-char239 "
-Sd 501,737,14 2 0360 -- eth
-char240 "
-~n 501,737 2 0361 -- ntilde
-char241 "
-`o 501,750,14 2 0362 -- ograve
-char242 "
-'o 501,750,14 2 0363 -- oacute
-char243 "
-^o 501,750,14 2 0364 -- ocircumflex
-char244 "
-~o 501,737,14 2 0365 -- otilde
-char245 "
-:o 501,729,14 2 0366 -- odieresis
-char246 "
-char247 479,548,42 0 0367 -- divide
-/o 501,560,29 0 0370 -- oslash
-char248 "
-`u 501,750,14 2 0371 -- ugrave
-char249 "
-'u 501,750,14 2 0372 -- uacute
-char250 "
-^u 501,750,14 2 0373 -- ucircumflex
-char251 "
-:u 501,729,14 2 0374 -- udieresis
-char252 "
-'y 456,750,214 3 0375 -- yacute
-char253 "
-Tp 501,718,208 3 0376 -- thorn
-char254 "
-:y 456,729,214 3 0377 -- ydieresis
-char255 "
+fi 501,727,0,0,-8 2 0214 -- fi
+fl 501,727,0,0,-8 2 0215 -- fl
+.i 228,532,0,0,-57 0 0220 -- dotlessi
+ga 273,750,0,0,19 2 0222 -- grave
+a" 273,750,0,126,-7 2 0223 -- hungarumlaut
+a. 273,729,0,0,-85 2 0224 -- dotaccent
+ab 273,750,0,2,2 2 0225 -- breve
+ah 273,750,0,8,8 2 0226 -- caron
+ao 273,776,0,0,-48 2 0227 -- ring
+ho 273,0,228,0,-58 1 0230 -- ogonek
+lq 410,727,0,0,-52 2 0231 -- quotedblleft
+rq 410,718,0,0,-52 2 0232 -- quotedblright
+oe 774,546,14,0,-28 0 0233 -- oe
+/l 228,718,0,15,15 2 0234 -- lslash
+Bq 410,127,146,0,-52 0 0235 -- quotedblbase
+OE 820,737,19,0,-30 2 0236 -- OE
+/L 501,718,0,0,16 2 0237 -- Lslash
+r! 273,532,186,0,-74 0 0241 -- exclamdown
+ct 456,628,118,0,-28 0 0242 -- cent
+Po 456,718,16,0,-23 2 0243 -- sterling
+Cs 456,636,0,2,2 0 0244 -- currency
+Ye 456,698,0,7,7 2 0245 -- yen
+bb 230,737,19,0,-69 2 0246 -- brokenbar
+sc 456,727,184,0,-28 2 0247 -- section
+ad 273,729,0,0,-5 2 0250 -- dieresis
+co 604,737,19,10,9 2 0251 -- copyright
+Of 303,737,0,0,-18 2 0252 -- ordfeminine
+fo 273,484,0,0,-68 0 0253 -- guilsinglleft
+no 479,419,0,0,-33 0 0254 -- logicalnot
+\- 479,309,0,0,-33 0 0255 -- minus
+rg 604,737,19,9,9 2 0256 -- registered
+a- 273,678,0,5,5 2 0257 -- macron
+de 328,712,0,0,-47 2 0260 -- degree
+t+- 479,506,0,0,-33 0 0261 -- plusminus
+S2 273,710,0,0,-7 2 0262 -- twosuperior
+S3 273,710,0,0,-7 2 0263 -- threesuperior
+aa 273,750,0,19,-89 2 0264 -- acute
+mc 501,532,207,0,-54 1 0265 -- mu
+ps 456,700,191,0,7 2 0266 -- paragraph
+pc 228,334,0,0,-48 0 0267 -- periodcentered
+ac 273,0,228,0,-5 1 0270 -- cedilla
+S1 273,710,0,0,-21 2 0271 -- onesuperior
+Om 299,737,0,0,-5 2 0272 -- ordmasculine
+fc 273,484,0,0,-68 0 0273 -- guilsinglright
+14 684,710,19,0,-21 2 0274 -- onequarter
+12 684,710,19,0,-21 2 0275 -- onehalf
+34 684,710,19,0,-13 2 0276 -- threequarters
+r? 501,532,195,0,-45 0 0277 -- questiondown
+`A 592,936,0,0,-16 2 0300 -- Agrave
+'A 592,936,0,0,-16 2 0301 -- Aacute
+^A 592,936,0,0,-16 2 0302 -- Acircumflex
+~A 592,923,0,0,-16 2 0303 -- Atilde
+:A 592,915,0,0,-16 2 0304 -- Adieresis
+oA 592,962,0,0,-16 2 0305 -- Aring
+AE 820,718,0,0,-4 2 0306 -- AE
+,C 592,737,228,0,-36 3 0307 -- Ccedilla
+`E 547,936,0,0,-62 2 0310 -- Egrave
+'E 547,936,0,0,-62 2 0311 -- Eacute
+^E 547,936,0,0,-62 2 0312 -- Ecircumflex
+:E 547,915,0,0,-62 2 0313 -- Edieresis
+`I 228,936,0,0,41 2 0314 -- Igrave
+'I 228,936,0,42,-52 2 0315 -- Iacute
+^I 228,936,0,31,30 2 0316 -- Icircumflex
+:I 228,915,0,18,17 2 0317 -- Idieresis
+-D 592,718,0,0,4 2 0320 -- Eth
+~N 592,923,0,0,-57 2 0321 -- Ntilde
+`O 638,936,19,0,-36 2 0322 -- Ograve
+'O 638,936,19,0,-36 2 0323 -- Oacute
+^O 638,936,19,0,-36 2 0324 -- Ocircumflex
+~O 638,923,19,0,-36 2 0325 -- Otilde
+:O 638,915,19,0,-36 2 0326 -- Odieresis
+tmu 479,505,0,0,-33 0 0327 -- multiply
+/O 638,745,27,0,-27 2 0330 -- Oslash
+`U 592,936,19,0,-59 2 0331 -- Ugrave
+'U 592,936,19,0,-59 2 0332 -- Uacute
+^U 592,936,19,0,-59 2 0333 -- Ucircumflex
+:U 592,915,19,0,-59 2 0334 -- Udieresis
+'Y 547,936,0,0,-12 2 0335 -- Yacute
+TP 547,718,0,0,-62 2 0336 -- Thorn
+ss 501,731,14,0,-57 2 0337 -- germandbls
+`a 456,750,14,0,-24 2 0340 -- agrave
+'a 456,750,14,0,-24 2 0341 -- aacute
+^a 456,750,14,0,-24 2 0342 -- acircumflex
+~a 456,737,14,0,-24 2 0343 -- atilde
+:a 456,729,14,0,-24 2 0344 -- adieresis
+oa 456,776,14,0,-24 2 0345 -- aring
+ae 729,546,14,0,-24 0 0346 -- ae
+,c 456,546,228,0,-28 1 0347 -- ccedilla
+`e 456,750,14,0,-19 2 0350 -- egrave
+'e 456,750,14,0,-19 2 0351 -- eacute
+^e 456,750,14,0,-19 2 0352 -- ecircumflex
+:e 456,729,14,0,-19 2 0353 -- edieresis
+`i 228,750,0,0,41 2 0354 -- igrave
+'i 228,750,0,42,-57 2 0355 -- iacute
+^i 228,750,0,31,30 2 0356 -- icircumflex
+:i 228,729,0,18,17 2 0357 -- idieresis
+Sd 501,737,14,0,-28 2 0360 -- eth
+~n 501,737,0,0,-53 2 0361 -- ntilde
+`o 501,750,14,0,-28 2 0362 -- ograve
+'o 501,750,14,0,-28 2 0363 -- oacute
+^o 501,750,14,0,-28 2 0364 -- ocircumflex
+~o 501,737,14,0,-28 2 0365 -- otilde
+:o 501,729,14,0,-28 2 0366 -- odieresis
+tdi 479,548,42,0,-33 0 0367 -- divide
+/o 501,560,29,0,-18 0 0370 -- oslash
+`u 501,750,14,0,-54 2 0371 -- ugrave
+'u 501,750,14,0,-54 2 0372 -- uacute
+^u 501,750,14,0,-54 2 0373 -- ucircumflex
+:u 501,729,14,0,-54 2 0374 -- udieresis
+'y 456,750,214,0,-8 3 0375 -- yacute
+Tp 501,718,208,0,-51 3 0376 -- thorn
+:y 456,729,214,0,-8 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/HNBI b/contrib/groff/font/devps/HNBI
index a5809e1..e7e8349 100644
--- a/contrib/groff/font/devps/HNBI
+++ b/contrib/groff/font/devps/HNBI
@@ -79,7 +79,6 @@ T . -80
T o -80
T - -120
T hy -120
-T char173 -120
T e -60
T , -80
T : -40
@@ -95,7 +94,6 @@ V . -120
V o -90
V - -80
V hy -80
-V char173 -80
V e -50
V , -120
V : -40
@@ -110,7 +108,6 @@ W . -80
W o -60
W - -40
W hy -40
-W char173 -40
W e -35
W , -80
W : -10
@@ -205,7 +202,6 @@ r . -60
r o -20
r - -20
r hy -20
-r char173 -20
r g -15
r d -20
r , -60
@@ -254,7 +250,6 @@ cq "
, 228,146,168,23,27,23 0 0054 -- comma
- 273,345,0,88,-10,88 0 0055 -- hyphen
hy "
-char173 "
. 228,146,0,23,-2,23 0 0056 -- period
/ 228,737,19,205,80,90 2 0057 -- slash
sl "
@@ -349,9 +344,7 @@ a~ 273,737,0,192,-42,90 2 0176 -- tilde
~ "
bq 228,127,146,16,16,16 0 0200 -- quotesinglbase
Fo 456,484,0,62,-61,62 0 0201 -- guillemotleft
-char171 "
Fc 456,484,0,37,-35,37 0 0202 -- guillemotright
-char187 "
bu 287,524,0,108,-18,90 0 0203 -- bullet
Fn 456,737,210,142,91,90 3 0204 -- florin
f/ 137,710,19,312,193,90 2 0205 -- fraction
@@ -378,185 +371,97 @@ Bq 410,127,146,20,21,20 0 0235 -- quotedblbase
OE 820,737,19,143,-31,90 2 0236 -- OE
/L 501,718,0,50,22,50 2 0237 -- Lslash
r! 273,532,186,67,9,67 0 0241 -- exclamdown
-char161 "
ct 456,628,118,85,-15,85 0 0242 -- cent
-char162 "
Po 456,718,16,114,9,90 2 0243 -- sterling
-char163 "
Cs 456,636,0,152,28,90 0 0244 -- currency
-char164 "
Ye 456,698,0,179,1,90 2 0245 -- yen
-char165 "
bb 230,737,19,109,-16,90 2 0246 -- brokenbar
-char166 "
sc 456,727,184,85,0,85 2 0247 -- section
-char167 "
ad 273,729,0,172,-62,90 2 0250 -- dieresis
-char168 "
co 604,737,19,131,4,90 2 0251 -- copyright
-char169 "
Of 303,737,0,128,-25,90 2 0252 -- ordfeminine
-char170 "
fo 273,484,0,66,-56,66 0 0253 -- guilsinglleft
no 479,419,0,90,-36,90 0 0254 -- logicalnot
-char172 "
\- 479,309,0,71,-17,71 0 0255 -- minus
rg 604,737,19,130,5,90 2 0256 -- registered
-char174 "
a- 273,678,0,173,-50,90 2 0257 -- macron
-char175 "
de 328,712,0,105,-93,90 2 0260 -- degree
-char176 "
-char177 479,506,0,83,17,83 0 0261 -- plusminus
+t+- 479,506,0,83,17,83 0 0261 -- plusminus
S2 273,710,0,145,-7,90 2 0262 -- twosuperior
-char178 "
S3 273,710,0,138,-25,90 2 0263 -- threesuperior
-char179 "
aa 273,750,0,200,-144,90 2 0264 -- acute
-char180 "
-char181 501,532,207,89,32,89 1 0265 -- mu
+mc 501,532,207,89,32,89 1 0265 -- mu
ps 456,700,191,158,-30,90 2 0266 -- paragraph
-char182 "
pc 228,334,0,48,-40,48 0 0267 -- periodcentered
-char183 "
ac 273,0,228,0,80 1 0270 -- cedilla
-char184 "
S1 273,710,0,95,-71,90 2 0271 -- onesuperior
-char185 "
Om 299,737,0,149,-25,90 2 0272 -- ordmasculine
-char186 "
fc 273,484,0,41,-31,41 0 0273 -- guilsinglright
14 684,710,19,27,-58,27 2 0274 -- onequarter
-char188 "
12 684,710,19,70,-58,70 2 0275 -- onehalf
-char189 "
34 684,710,19,54,-32,54 2 0276 -- threequarters
-char190 "
r? 501,532,195,8,6,8 0 0277 -- questiondown
-char191 "
`A 592,936,0,34,34,34 2 0300 -- Agrave
-char192 "
'A 592,936,0,73,34,73 2 0301 -- Aacute
-char193 "
^A 592,936,0,37,34,37 2 0302 -- Acircumflex
-char194 "
~A 592,923,0,66,34,66 2 0303 -- Atilde
-char195 "
:A 592,915,0,46,34,46 2 0304 -- Adieresis
-char196 "
oA 592,962,0,34,34,34 2 0305 -- Aring
-char197 "
AE 820,718,0,132,46,90 2 0306 -- AE
-char198 "
,C 592,737,228,105,-38,90 3 0307 -- Ccedilla
-char199 "
`E 547,936,0,123,-12,90 2 0310 -- Egrave
-char200 "
'E 547,936,0,123,-12,90 2 0311 -- Eacute
-char201 "
^E 547,936,0,123,-12,90 2 0312 -- Ecircumflex
-char202 "
:E 547,915,0,123,-12,90 2 0313 -- Edieresis
-char203 "
`I 228,936,0,123,-2,90 2 0314 -- Igrave
-char204 "
'I 228,936,0,255,-2,90 2 0315 -- Iacute
-char205 "
^I 228,936,0,219,-2,90 2 0316 -- Icircumflex
-char206 "
:I 228,915,0,227,-2,90 2 0317 -- Idieresis
-char207 "
-D 592,718,0,95,-1,90 2 0320 -- Eth
-char208 "
~N 592,923,0,119,-7,90 2 0321 -- Ntilde
-char209 "
`O 638,936,19,87,-38,87 2 0322 -- Ograve
-char210 "
'O 638,936,19,87,-38,87 2 0323 -- Oacute
-char211 "
^O 638,936,19,87,-38,87 2 0324 -- Ocircumflex
-char212 "
~O 638,923,19,87,-38,87 2 0325 -- Otilde
-char213 "
:O 638,915,19,87,-38,87 2 0326 -- Odieresis
-char214 "
-char215 479,505,0,91,3,90 0 0327 -- multiply
+tmu 479,505,0,91,3,90 0 0327 -- multiply
/O 638,745,27,145,21,90 2 0330 -- Oslash
-char216 "
`U 592,936,19,117,-46,90 2 0331 -- Ugrave
-char217 "
'U 592,936,19,117,-46,90 2 0332 -- Uacute
-char218 "
^U 592,936,19,117,-46,90 2 0333 -- Ucircumflex
-char219 "
:U 592,915,19,117,-46,90 2 0334 -- Udieresis
-char220 "
'Y 547,936,0,164,-87,90 2 0335 -- Yacute
-char221 "
TP 547,718,0,91,-12,90 2 0336 -- Thorn
-char222 "
ss 501,731,14,88,-7,88 2 0337 -- germandbls
-char223 "
`a 456,750,14,72,5,72 2 0340 -- agrave
-char224 "
'a 456,750,14,108,5,90 2 0341 -- aacute
-char225 "
^a 456,750,14,72,5,72 2 0342 -- acircumflex
-char226 "
~a 456,737,14,101,5,90 2 0343 -- atilde
-char227 "
:a 456,729,14,81,5,81 2 0344 -- adieresis
-char228 "
oa 456,776,14,72,5,72 2 0345 -- aring
-char229 "
ae 729,546,14,78,4,78 0 0346 -- ae
-char230 "
,c 456,546,228,85,-15,85 1 0347 -- ccedilla
-char231 "
`e 456,750,14,80,-8,80 2 0350 -- egrave
-char232 "
'e 456,750,14,108,-8,90 2 0351 -- eacute
-char233 "
^e 456,750,14,80,-8,80 2 0352 -- ecircumflex
-char234 "
:e 456,729,14,81,-8,81 2 0353 -- edieresis
-char235 "
`i 228,750,0,90,-7,90 2 0354 -- igrave
-char236 "
'i 228,750,0,222,-7,90 2 0355 -- iacute
-char237 "
^i 228,750,0,186,-7,90 2 0356 -- icircumflex
-char238 "
:i 228,729,0,195,-7,90 2 0357 -- idieresis
-char239 "
Sd 501,737,14,98,-17,90 2 0360 -- eth
-char240 "
~n 501,737,0,78,-3,78 2 0361 -- ntilde
-char241 "
`o 501,750,14,76,-17,76 2 0362 -- ograve
-char242 "
'o 501,750,14,86,-17,86 2 0363 -- oacute
-char243 "
^o 501,750,14,76,-17,76 2 0364 -- ocircumflex
-char244 "
~o 501,737,14,78,-17,78 2 0365 -- otilde
-char245 "
:o 501,729,14,76,-17,76 2 0366 -- odieresis
-char246 "
-char247 479,548,42,71,-17,71 0 0367 -- divide
+tdi 479,548,42,71,-17,71 0 0367 -- divide
/o 501,560,29,124,32,90 0 0370 -- oslash
-char248 "
`u 501,750,14,89,-30,89 2 0371 -- ugrave
-char249 "
'u 501,750,14,89,-30,89 2 0372 -- uacute
-char250 "
^u 501,750,14,89,-30,89 2 0373 -- ucircumflex
-char251 "
:u 501,729,14,89,-30,89 2 0374 -- udieresis
-char252 "
'y 456,750,214,129,16,90 3 0375 -- yacute
-char253 "
Tp 501,718,208,78,35,78 3 0376 -- thorn
-char254 "
:y 456,729,214,129,16,90 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/HNI b/contrib/groff/font/devps/HNI
index c9ab4ec..64a5376 100644
--- a/contrib/groff/font/devps/HNI
+++ b/contrib/groff/font/devps/HNI
@@ -86,7 +86,6 @@ T . -120
T o -120
T - -140
T hy -140
-T char173 -140
T e -120
T , -120
T : -20
@@ -102,7 +101,6 @@ V . -125
V o -80
V - -80
V hy -80
-V char173 -80
V e -80
V , -125
V : -40
@@ -116,7 +114,6 @@ W . -80
W o -30
W - -40
W hy -40
-W char173 -40
W e -30
W , -80
W a -40
@@ -129,7 +126,6 @@ Y o -140
Y i -20
Y - -140
Y hy -140
-Y char173 -140
Y e -140
Y , -140
Y : -60
@@ -182,61 +178,33 @@ o v -15
o . -40
o , -40
/o z -55
-char248 z -55
/o y -70
-char248 y -70
/o x -85
-char248 x -85
/o w -70
-char248 w -70
/o v -70
-char248 v -70
/o u -55
-char248 u -55
/o t -55
-char248 t -55
/o s -55
-char248 s -55
/o r -55
-char248 r -55
/o q -55
-char248 q -55
/o . -95
-char248 . -95
/o p -55
-char248 p -55
/o o -55
-char248 o -55
/o n -55
-char248 n -55
/o m -55
-char248 m -55
/o l -55
-char248 l -55
/o k -55
-char248 k -55
/o j -55
-char248 j -55
/o i -55
-char248 i -55
/o h -55
-char248 h -55
/o g -55
-char248 g -55
/o f -55
-char248 f -55
/o e -55
-char248 e -55
/o d -55
-char248 d -55
/o , -95
-char248 , -95
/o c -55
-char248 c -55
/o b -55
-char248 b -55
/o a -55
-char248 a -55
p y -30
p . -35
p , -35
@@ -322,7 +290,6 @@ cq "
, 228,106,147,0,4 0 0054 -- comma
- 273,322,0,70,-27,70 0 0055 -- hyphen
hy "
-char173 "
. 228,106,0,0,-21 0 0056 -- period
/ 228,737,19,192,67,89 2 0057 -- slash
sl "
@@ -417,9 +384,7 @@ a~ 273,722,0,179,-52,89 2 0176 -- tilde
~ "
bq 182,106,149,15,33,15 0 0200 -- quotesinglbase
Fo 456,446,0,48,-70,48 0 0201 -- guillemotleft
-char171 "
Fc 456,446,0,27,-48,27 0 0202 -- guillemotright
-char187 "
bu 287,517,0,102,-24,89 0 0203 -- bullet
Fn 456,737,207,131,93,89 3 0204 -- florin
f/ 137,703,19,309,189,89 2 0205 -- fraction
@@ -446,185 +411,97 @@ Bq 273,106,149,37,55,37 0 0235 -- quotedblbase
OE 820,737,19,145,-30,89 2 0236 -- OE
/L 456,718,0,49,16,49 2 0237 -- Lslash
r! 273,523,195,44,-13,44 0 0241 -- exclamdown
-char161 "
ct 456,623,115,73,-28,73 0 0242 -- cent
-char162 "
Po 456,718,16,114,10,89 2 0243 -- sterling
-char163 "
Cs 456,603,0,124,1,89 0 0244 -- currency
-char164 "
Ye 456,688,0,167,-17,89 2 0245 -- yen
-char165 "
bb 213,737,19,102,-24,89 2 0246 -- brokenbar
-char166 "
sc 456,737,191,73,-13,73 2 0247 -- section
-char167 "
ad 273,706,0,140,-88,89 2 0250 -- dieresis
-char168 "
co 604,737,19,133,6,89 2 0251 -- copyright
-char169 "
Of 303,737,0,115,-32,89 2 0252 -- ordfeminine
-char170 "
fo 273,446,0,56,-62,56 0 0253 -- guilsinglleft
no 479,390,0,86,-37,86 0 0254 -- logicalnot
-char172 "
\- 479,289,0,68,-20,68 0 0255 -- minus
rg 604,737,19,133,6,89 2 0256 -- registered
-char174 "
a- 273,684,0,161,-67,89 2 0257 -- macron
-char175 "
de 328,703,0,106,-88,89 2 0260 -- degree
-char176 "
-char177 479,506,0,78,18,78 0 0261 -- plusminus
+t+- 479,506,0,78,18,78 0 0261 -- plusminus
S2 273,703,0,145,-2,89 2 0262 -- twosuperior
-char178 "
S3 273,703,0,135,-24,89 2 0263 -- threesuperior
-char179 "
aa 273,734,0,167,-153,89 2 0264 -- acute
-char180 "
-char181 456,523,207,86,30,86 1 0265 -- mu
+mc 456,523,207,86,30,86 1 0265 -- mu
ps 440,718,173,143,-53,89 2 0266 -- paragraph
-char182 "
pc 228,315,0,33,-56,33 0 0267 -- periodcentered
-char183 "
ac 273,0,225,0,48 1 0270 -- cedilla
-char184 "
S1 273,703,0,82,-86,82 2 0271 -- onesuperior
-char185 "
Om 299,737,0,135,-32,89 2 0272 -- ordmasculine
-char186 "
fc 273,446,0,34,-41,34 0 0273 -- guilsinglright
14 684,703,19,24,-73,24 2 0274 -- onequarter
-char188 "
12 684,703,19,54,-43,54 2 0275 -- onehalf
-char189 "
34 684,703,19,72,-56,72 2 0276 -- threequarters
-char190 "
r? 501,525,201,0,-20 0 0277 -- questiondown
-char191 "
`A 547,929,0,39,39,39 2 0300 -- Agrave
-char192 "
'A 547,929,0,63,39,63 2 0301 -- Aacute
-char193 "
^A 547,929,0,39,39,39 2 0302 -- Acircumflex
-char194 "
~A 547,917,0,76,39,76 2 0303 -- Atilde
-char195 "
:A 547,901,0,39,39,39 2 0304 -- Adieresis
-char196 "
oA 547,931,0,39,39,39 2 0305 -- Aring
-char197 "
AE 820,718,0,129,43,89 2 0306 -- AE
-char198 "
,C 592,737,225,98,-38,89 3 0307 -- Ccedilla
-char199 "
`E 547,929,0,128,-21,89 2 0310 -- Egrave
-char200 "
'E 547,929,0,128,-21,89 2 0311 -- Eacute
-char201 "
^E 547,929,0,128,-21,89 2 0312 -- Ecircumflex
-char202 "
:E 547,901,0,128,-21,89 2 0313 -- Edieresis
-char203 "
`I 228,929,0,110,-25,89 2 0314 -- Igrave
-char204 "
'I 228,929,0,223,-25,89 2 0315 -- Iacute
-char205 "
^I 228,929,0,193,-25,89 2 0316 -- Icircumflex
-char206 "
:I 228,901,0,197,-25,89 2 0317 -- Idieresis
-char207 "
-D 592,718,0,84,-7,84 2 0320 -- Eth
-char208 "
~N 592,917,0,113,-12,89 2 0321 -- Ntilde
-char209 "
`O 638,929,19,89,-36,89 2 0322 -- Ograve
-char210 "
'O 638,929,19,89,-36,89 2 0323 -- Oacute
-char211 "
^O 638,929,19,89,-36,89 2 0324 -- Ocircumflex
-char212 "
~O 638,917,19,89,-36,89 2 0325 -- Otilde
-char213 "
:O 638,901,19,89,-36,89 2 0326 -- Odieresis
-char214 "
-char215 479,506,0,97,9,89 0 0327 -- multiply
+tmu 479,506,0,97,9,89 0 0327 -- multiply
/O 638,737,19,142,15,89 2 0330 -- Oslash
-char216 "
`U 592,929,19,111,-51,89 2 0331 -- Ugrave
-char217 "
'U 592,929,19,111,-51,89 2 0332 -- Uacute
-char218 "
^U 592,929,19,111,-51,89 2 0333 -- Ucircumflex
-char219 "
:U 592,901,19,111,-51,89 2 0334 -- Udieresis
-char220 "
'Y 547,929,0,164,-87,89 2 0335 -- Yacute
-char221 "
TP 547,718,0,87,-21,87 2 0336 -- Thorn
-char222 "
ss 501,728,15,88,-5,88 2 0337 -- germandbls
-char223 "
`a 456,734,15,52,0,52 2 0340 -- agrave
-char224 "
'a 456,734,15,75,0,75 2 0341 -- aacute
-char225 "
^a 456,734,15,52,0,52 2 0342 -- acircumflex
-char226 "
~a 456,722,15,80,0,80 2 0343 -- atilde
-char227 "
:a 456,706,15,52,0,52 2 0344 -- adieresis
-char228 "
oa 456,756,15,52,0,52 2 0345 -- aring
-char229 "
ae 729,538,15,67,0,67 0 0346 -- ae
-char230 "
,c 410,538,225,94,-11,89 1 0347 -- ccedilla
-char231 "
`e 456,734,15,68,-19,68 2 0350 -- egrave
-char232 "
'e 456,734,15,75,-19,75 2 0351 -- eacute
-char233 "
^e 456,734,15,68,-19,68 2 0352 -- ecircumflex
-char234 "
:e 456,706,15,68,-19,68 2 0353 -- edieresis
-char235 "
`i 228,734,0,76,-28,76 2 0354 -- igrave
-char236 "
'i 228,734,0,189,-28,89 2 0355 -- iacute
-char237 "
^i 228,734,0,159,-28,89 2 0356 -- icircumflex
-char238 "
:i 228,706,0,163,-28,89 2 0357 -- idieresis
-char239 "
Sd 456,737,15,100,-17,89 2 0360 -- eth
-char240 "
~n 456,722,0,80,-3,80 2 0361 -- ntilde
-char241 "
`o 456,734,14,73,-18,73 2 0362 -- ograve
-char242 "
'o 456,734,14,75,-18,75 2 0363 -- oacute
-char243 "
^o 456,734,14,73,-18,73 2 0364 -- ocircumflex
-char244 "
~o 456,722,14,88,-18,88 2 0365 -- otilde
-char245 "
:o 456,706,14,73,-18,73 2 0366 -- odieresis
-char246 "
-char247 479,524,19,68,-20,68 0 0367 -- divide
+tdi 479,524,19,68,-20,68 0 0367 -- divide
/o 501,545,22,80,26,80 0 0370 -- oslash
-char248 "
`u 456,734,15,86,-27,86 2 0371 -- ugrave
-char249 "
'u 456,734,15,86,-27,86 2 0372 -- uacute
-char250 "
^u 456,734,15,86,-27,86 2 0373 -- ucircumflex
-char251 "
:u 456,706,15,86,-27,86 2 0374 -- udieresis
-char252 "
'y 410,734,214,132,38,89 3 0375 -- yacute
-char253 "
Tp 456,718,207,73,39,73 3 0376 -- thorn
-char254 "
:y 410,706,214,132,38,89 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/HNR b/contrib/groff/font/devps/HNR
index e4f30ee..15737bc 100644
--- a/contrib/groff/font/devps/HNR
+++ b/contrib/groff/font/devps/HNR
@@ -85,7 +85,6 @@ T . -97
T o -97
T - -114
T hy -114
-T char173 -114
T e -97
T , -97
T : -15
@@ -101,7 +100,6 @@ V . -102
V o -65
V - -65
V hy -65
-V char173 -65
V e -65
V , -102
V : -32
@@ -115,7 +113,6 @@ W . -65
W o -24
W - -32
W hy -32
-W char173 -32
W e -24
W , -65
W a -32
@@ -128,7 +125,6 @@ Y o -114
Y i -15
Y - -114
Y hy -114
-Y char173 -114
Y e -114
Y , -114
Y : -48
@@ -181,61 +177,33 @@ o v -11
o . -32
o , -32
/o z -44
-char248 z -44
/o y -56
-char248 y -56
/o x -69
-char248 x -69
/o w -56
-char248 w -56
/o v -56
-char248 v -56
/o u -44
-char248 u -44
/o t -44
-char248 t -44
/o s -44
-char248 s -44
/o r -44
-char248 r -44
/o q -44
-char248 q -44
/o . -77
-char248 . -77
/o p -44
-char248 p -44
/o o -44
-char248 o -44
/o n -44
-char248 n -44
/o m -44
-char248 m -44
/o l -44
-char248 l -44
/o k -44
-char248 k -44
/o j -44
-char248 j -44
/o i -44
-char248 i -44
/o h -44
-char248 h -44
/o g -44
-char248 g -44
/o f -44
-char248 f -44
/o e -44
-char248 e -44
/o d -44
-char248 d -44
/o , -77
-char248 , -77
/o c -44
-char248 c -44
/o b -44
-char248 b -44
/o a -44
-char248 a -44
p y -24
p . -28
p , -28
@@ -293,337 +261,246 @@ 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,0,11,11 2 0000 -- asciicircum
+ti 479,326,0,0,-50 0 0001 -- asciitilde
+vS 547,929,19,0,-40 2 0002 -- Scaron
+vZ 501,929,0,0,-19 2 0003 -- Zcaron
+vs 410,734,15,0,-26 2 0004 -- scaron
+vz 410,734,0,0,-25 2 0005 -- zcaron
+:Y 547,901,0,0,-11 2 0006 -- Ydieresis
+tm 820,718,0,0,-38 2 0007 -- trademark
+aq 157,718,0,0,-48 2 0010 -- quotesingle
space 228 0 0040
-! 228,718 2 0041 -- exclam
-" 291,718 2 0042 -- quotedbl
+! 228,718,0,0,-74 2 0041 -- exclam
+" 291,718,0,0,-57 2 0042 -- quotedbl
dq "
-# 456,688 2 0043 -- numbersign
+# 456,688,0,0,-23 2 0043 -- numbersign
sh "
-$ 456,775,115 2 0044 -- dollar
+$ 456,775,115,0,-26 2 0044 -- dollar
Do "
-% 729,703,19 2 0045 -- percent
-& 547,718,15 2 0046 -- ampersand
-' 182,718 2 0047 -- quoteright
+% 729,703,19,0,-32 2 0045 -- percent
+& 547,718,15,0,-36 2 0046 -- ampersand
+' 182,718,0,0,-43 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
+( 273,733,207,0,-56 3 0050 -- parenleft
+) 273,733,207,0,-28 3 0051 -- parenright
+* 319,718,0,0,-32 2 0052 -- asterisk
++ 479,505,0,0,-32 0 0053 -- plus
+, 228,106,147,0,-71 0 0054 -- comma
+- 273,322,0,0,-36 0 0055 -- hyphen
hy "
-char173 "
-. 228,106 0 0056 -- period
-/ 228,737,19 2 0057 -- slash
+. 228,106,0,0,-71 0 0056 -- period
+/ 228,737,19,14,14 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,0,-30 2 0060 -- zero
+1 456,703,0,0,-83 2 0061 -- one
+2 456,703,0,0,-21 2 0062 -- two
+3 456,703,19,0,-28 2 0063 -- three
+4 456,703,0,0,-20 2 0064 -- four
+5 456,688,19,0,-26 2 0065 -- five
+6 456,703,19,0,-31 2 0066 -- six
+7 456,688,0,0,-30 2 0067 -- seven
+8 456,703,19,0,-31 2 0070 -- eight
+9 456,703,19,0,-34 2 0071 -- nine
+: 228,516,0,0,-71 0 0072 -- colon
+; 228,516,147,0,-71 0 0073 -- semicolon
+< 479,495,0,0,-39 0 0074 -- less
+= 479,390,0,0,-32 0 0075 -- equal
+> 479,495,0,0,-39 0 0076 -- greater
+? 456,727,0,0,-46 2 0077 -- question
+@ 832,737,19,0,-121 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,0,0,-11 2 0101 -- A
+B 547,718,0,0,-61 2 0102 -- B
+C 592,737,19,0,-36 2 0103 -- C
+D 592,718,0,0,-66 2 0104 -- D
+E 547,718,0,0,-71 2 0105 -- E
+F 501,718,0,0,-71 2 0106 -- F
+G 638,737,19,0,-39 2 0107 -- G
+H 592,718,0,0,-63 2 0110 -- H
+I 228,718,0,0,-75 2 0111 -- I
+J 410,718,19,0,-14 2 0112 -- J
+K 547,718,0,0,-62 2 0113 -- K
+L 456,718,0,0,-62 2 0114 -- L
+M 683,718,0,0,-60 2 0115 -- M
+N 592,718,0,0,-62 2 0116 -- N
+O 638,737,19,0,-32 2 0117 -- O
+P 547,718,0,0,-71 2 0120 -- P
+Q 638,737,56,0,-32 2 0121 -- Q
+R 592,718,0,0,-72 2 0122 -- R
+S 547,737,19,0,-40 2 0123 -- S
+T 501,718,0,0,-11 2 0124 -- T
+U 592,718,19,0,-65 2 0125 -- U
+V 547,718,0,0,-16 2 0126 -- V
+W 774,718,0,0,-13 2 0127 -- W
+X 547,718,0,0,-16 2 0130 -- X
+Y 547,718,0,0,-11 2 0131 -- Y
+Z 501,718,0,0,-19 2 0132 -- Z
+[ 228,722,196,0,-52 2 0133 -- bracketleft
lB "
-\ 228,737,19 2 0134 -- backslash
+\ 228,737,19,14,14 2 0134 -- backslash
rs "
-] 228,722,196 2 0135 -- bracketright
+] 228,722,196,0,-23 2 0135 -- bracketright
rB "
-a^ 273,734 2 0136 -- circumflex
+a^ 273,734,0,0,-17 2 0136 -- circumflex
^ "
_ 456,0,125 0 0137 -- underscore
-` 182,725 2 0140 -- quoteleft
+` 182,725,0,0,-53 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,-30 0 0141 -- a
+b 456,718,15,0,-48 2 0142 -- b
+c 410,538,15,0,-25 0 0143 -- c
+d 456,718,15,0,-29 2 0144 -- d
+e 456,538,15,0,-33 0 0145 -- e
+f 228,728,0,0,-11 2 0146 -- f
+g 456,538,220,0,-33 1 0147 -- g
+h 456,718,0,0,-53 2 0150 -- h
+i 182,718,0,0,-55 2 0151 -- i
+j 182,718,210,0,13 3 0152 -- j
+k 410,718,0,1,-55 2 0153 -- k
+l 182,718,0,0,-55 2 0154 -- l
+m 683,538,0,0,-53 0 0155 -- m
+n 456,538,0,0,-53 0 0156 -- n
+o 456,538,14,0,-29 0 0157 -- o
+p 456,538,207,0,-48 1 0160 -- p
+q 456,538,207,0,-29 1 0161 -- q
+r 273,538,0,0,-63 0 0162 -- r
+s 410,538,15,0,-26 0 0163 -- s
+t 228,669,7,0,-11 2 0164 -- t
+u 456,523,15,0,-56 0 0165 -- u
+v 410,523,0,0,-7 0 0166 -- v
+w 592,523,0,0,-11 0 0167 -- w
+x 410,523,0,0,-9 0 0170 -- x
+y 410,523,214,0,-9 1 0171 -- y
+z 410,523,0,0,-25 0 0172 -- z
+lC 274,722,196,0,-34 2 0173 -- braceleft
{ "
-ba 213,737,19 2 0174 -- bar
+ba 213,737,19,0,-77 2 0174 -- bar
| "
-rC 274,722,196 2 0175 -- braceright
+rC 274,722,196,0,-34 2 0175 -- braceright
} "
-a~ 273,722 2 0176 -- tilde
+a~ 273,722,0,3,3 2 0176 -- tilde
~ "
-bq 182,106,149 0 0200 -- quotesinglbase
-Fo 456,446 0 0201 -- guillemotleft
-char171 "
-Fc 456,446 0 0202 -- guillemotright
-char187 "
-bu 287,517 0 0203 -- bullet
-Fn 456,737,207 3 0204 -- florin
-f/ 137,703,19 2 0205 -- fraction
-%0 820,703,19 2 0206 -- perthousand
-dg 456,718,159 2 0207 -- dagger
-dd 456,718,159 2 0210 -- daggerdbl
+bq 182,106,149,0,-43 0 0200 -- quotesinglbase
+Fo 456,446,0,0,-80 0 0201 -- guillemotleft
+Fc 456,446,0,0,-80 0 0202 -- guillemotright
+bu 287,517,0,0,-15 0 0203 -- bullet
+Fn 456,737,207,0,9 3 0204 -- florin
+f/ 137,703,19,136,136 2 0205 -- fraction
+%0 820,703,19,0,-6 2 0206 -- perthousand
+dg 456,718,159,0,-35 2 0207 -- dagger
+dd 456,718,159,0,-35 2 0210 -- daggerdbl
en 456,313 0 0211 -- endash
em 820,313 0 0212 -- emdash
-fi 410,728 2 0214 -- fi
-fl 410,728 2 0215 -- fl
-.i 228,523 0 0220 -- dotlessi
-ga 273,734 2 0222 -- grave
-a" 273,734 2 0223 -- hungarumlaut
-a. 273,706 2 0224 -- dotaccent
-ab 273,731 2 0225 -- breve
-ah 273,734 2 0226 -- caron
-ao 273,756 2 0227 -- ring
-ho 273,0,225 1 0230 -- ogonek
-lq 273,725 2 0231 -- quotedblleft
-rq 273,718 2 0232 -- quotedblright
-oe 774,538,15 0 0233 -- oe
-/l 182,718 2 0234 -- lslash
-Bq 273,106,149 0 0235 -- quotedblbase
-OE 820,737,19 2 0236 -- OE
-/L 456,718 2 0237 -- Lslash
-r! 273,523,195 0 0241 -- exclamdown
-char161 "
-ct 456,623,115 0 0242 -- cent
-char162 "
-Po 456,718,16 2 0243 -- sterling
-char163 "
-Cs 456,603 0 0244 -- currency
-char164 "
-Ye 456,688 2 0245 -- yen
-char165 "
-bb 213,737,19 2 0246 -- brokenbar
-char166 "
-sc 456,737,191 2 0247 -- section
-char167 "
-ad 273,706 2 0250 -- dieresis
-char168 "
-co 604,737,19 2 0251 -- copyright
-char169 "
-Of 303,737 2 0252 -- ordfeminine
-char170 "
-fo 273,446 0 0253 -- guilsinglleft
-no 479,390 0 0254 -- logicalnot
-char172 "
-\- 479,289 0 0255 -- minus
-rg 604,737,19 2 0256 -- registered
-char174 "
-a- 273,684 2 0257 -- macron
-char175 "
-de 328,703 2 0260 -- degree
-char176 "
-char177 479,506 0 0261 -- plusminus
-S2 273,703 2 0262 -- twosuperior
-char178 "
-S3 273,703 2 0263 -- threesuperior
-char179 "
-aa 273,734 2 0264 -- acute
-char180 "
-char181 456,523,207 1 0265 -- mu
-ps 440,718,173 2 0266 -- paragraph
-char182 "
-pc 228,315 0 0267 -- periodcentered
-char183 "
-ac 273,0,225 1 0270 -- cedilla
-char184 "
-S1 273,703 2 0271 -- onesuperior
-char185 "
-Om 299,737 2 0272 -- ordmasculine
-char186 "
-fc 273,446 0 0273 -- guilsinglright
-14 684,703,19 2 0274 -- onequarter
-char188 "
-12 684,703,19 2 0275 -- onehalf
-char189 "
-34 684,703,19 2 0276 -- threequarters
-char190 "
-r? 501,525,201 0 0277 -- questiondown
-char191 "
-`A 547,929 2 0300 -- Agrave
-char192 "
-'A 547,929 2 0301 -- Aacute
-char193 "
-^A 547,929 2 0302 -- Acircumflex
-char194 "
-~A 547,917 2 0303 -- Atilde
-char195 "
-:A 547,901 2 0304 -- Adieresis
-char196 "
-oA 547,931 2 0305 -- Aring
-char197 "
-AE 820,718 2 0306 -- AE
-char198 "
-,C 592,737,225 3 0307 -- Ccedilla
-char199 "
-`E 547,929 2 0310 -- Egrave
-char200 "
-'E 547,929 2 0311 -- Eacute
-char201 "
-^E 547,929 2 0312 -- Ecircumflex
-char202 "
-:E 547,901 2 0313 -- Edieresis
-char203 "
-`I 228,929 2 0314 -- Igrave
-char204 "
-'I 228,929 2 0315 -- Iacute
-char205 "
-^I 228,929 2 0316 -- Icircumflex
-char206 "
-:I 228,901 2 0317 -- Idieresis
-char207 "
+fi 410,728,0,0,-11 2 0214 -- fi
+fl 410,728,0,0,-11 2 0215 -- fl
+.i 228,523,0,0,-78 0 0220 -- dotlessi
+ga 273,734,0,0,-11 2 0222 -- grave
+a" 273,734,0,62,-25 2 0223 -- hungarumlaut
+a. 273,706,0,0,-99 2 0224 -- dotaccent
+ab 273,731,0,0,-11 2 0225 -- breve
+ah 273,734,0,0,-17 2 0226 -- caron
+ao 273,756,0,0,-61 2 0227 -- ring
+ho 273,0,225,0,-60 1 0230 -- ogonek
+lq 273,725,0,0,-31 2 0231 -- quotedblleft
+rq 273,718,0,0,-21 2 0232 -- quotedblright
+oe 774,538,15,0,-29 0 0233 -- oe
+/l 182,718,0,16,16 2 0234 -- lslash
+Bq 273,106,149,0,-21 0 0235 -- quotedblbase
+OE 820,737,19,0,-30 2 0236 -- OE
+/L 456,718,0,0,16 2 0237 -- Lslash
+r! 273,523,195,0,-97 0 0241 -- exclamdown
+ct 456,623,115,0,-42 0 0242 -- cent
+Po 456,718,16,0,-27 2 0243 -- sterling
+Cs 456,603,0,0,-23 0 0244 -- currency
+Ye 456,688,0,0,-2 2 0245 -- yen
+bb 213,737,19,0,-77 2 0246 -- brokenbar
+sc 456,737,191,0,-35 2 0247 -- section
+ad 273,706,0,0,-33 2 0250 -- dieresis
+co 604,737,19,13,11 2 0251 -- copyright
+Of 303,737,0,0,-20 2 0252 -- ordfeminine
+fo 273,446,0,0,-72 0 0253 -- guilsinglleft
+no 479,390,0,0,-32 0 0254 -- logicalnot
+\- 479,289,0,0,-32 0 0255 -- minus
+rg 604,737,19,13,11 2 0256 -- registered
+a- 273,684,0,0,-8 2 0257 -- macron
+de 328,703,0,0,-44 2 0260 -- degree
+t+- 479,506,0,0,-32 0 0261 -- plusminus
+S2 273,703,0,0,-3 2 0262 -- twosuperior
+S3 273,703,0,0,-4 2 0263 -- threesuperior
+aa 273,734,0,0,-100 2 0264 -- acute
+mc 456,523,207,0,-56 1 0265 -- mu
+ps 440,718,173,0,-15 2 0266 -- paragraph
+pc 228,315,0,0,-63 0 0267 -- periodcentered
+ac 273,0,225,0,-37 1 0270 -- cedilla
+S1 273,703,0,0,-35 2 0271 -- onesuperior
+Om 299,737,0,0,-20 2 0272 -- ordmasculine
+fc 273,446,0,0,-72 0 0273 -- guilsinglright
+14 684,703,19,0,-60 2 0274 -- onequarter
+12 684,703,19,0,-35 2 0275 -- onehalf
+34 684,703,19,0,-37 2 0276 -- threequarters
+r? 501,525,201,0,-75 0 0277 -- questiondown
+`A 547,929,0,0,-11 2 0300 -- Agrave
+'A 547,929,0,0,-11 2 0301 -- Aacute
+^A 547,929,0,0,-11 2 0302 -- Acircumflex
+~A 547,917,0,0,-11 2 0303 -- Atilde
+:A 547,901,0,0,-11 2 0304 -- Adieresis
+oA 547,931,0,0,-11 2 0305 -- Aring
+AE 820,718,0,0,-7 2 0306 -- AE
+,C 592,737,225,0,-36 3 0307 -- Ccedilla
+`E 547,929,0,0,-71 2 0310 -- Egrave
+'E 547,929,0,0,-71 2 0311 -- Eacute
+^E 547,929,0,0,-71 2 0312 -- Ecircumflex
+:E 547,901,0,0,-71 2 0313 -- Edieresis
+`I 228,929,0,0,11 2 0314 -- Igrave
+'I 228,929,0,11,-75 2 0315 -- Iacute
+^I 228,929,0,6,5 2 0316 -- Icircumflex
+:I 228,901,0,0,-11 2 0317 -- Idieresis
-D 592,718 2 0320 -- Eth
-char208 "
-~N 592,917 2 0321 -- Ntilde
-char209 "
-`O 638,929,19 2 0322 -- Ograve
-char210 "
-'O 638,929,19 2 0323 -- Oacute
-char211 "
-^O 638,929,19 2 0324 -- Ocircumflex
-char212 "
-~O 638,917,19 2 0325 -- Otilde
-char213 "
-:O 638,901,19 2 0326 -- Odieresis
-char214 "
-char215 479,506 0 0327 -- multiply
-/O 638,737,19 2 0330 -- Oslash
-char216 "
-`U 592,929,19 2 0331 -- Ugrave
-char217 "
-'U 592,929,19 2 0332 -- Uacute
-char218 "
-^U 592,929,19 2 0333 -- Ucircumflex
-char219 "
-:U 592,901,19 2 0334 -- Udieresis
-char220 "
-'Y 547,929 2 0335 -- Yacute
-char221 "
-TP 547,718 2 0336 -- Thorn
-char222 "
-ss 501,728,15 2 0337 -- germandbls
-char223 "
-`a 456,734,15 2 0340 -- agrave
-char224 "
-'a 456,734,15 2 0341 -- aacute
-char225 "
-^a 456,734,15 2 0342 -- acircumflex
-char226 "
-~a 456,722,15 2 0343 -- atilde
-char227 "
-:a 456,706,15 2 0344 -- adieresis
-char228 "
-oa 456,756,15 2 0345 -- aring
-char229 "
-ae 729,538,15 0 0346 -- ae
-char230 "
-,c 410,538,225 1 0347 -- ccedilla
-char231 "
-`e 456,734,15 2 0350 -- egrave
-char232 "
-'e 456,734,15 2 0351 -- eacute
-char233 "
-^e 456,734,15 2 0352 -- ecircumflex
-char234 "
-:e 456,706,15 2 0353 -- edieresis
-char235 "
-`i 228,734 2 0354 -- igrave
-char236 "
-'i 228,734 2 0355 -- iacute
-char237 "
-^i 228,734 2 0356 -- icircumflex
-char238 "
-:i 228,706 2 0357 -- idieresis
-char239 "
-Sd 456,737,15 2 0360 -- eth
-char240 "
-~n 456,722 2 0361 -- ntilde
-char241 "
-`o 456,734,14 2 0362 -- ograve
-char242 "
-'o 456,734,14 2 0363 -- oacute
-char243 "
-^o 456,734,14 2 0364 -- ocircumflex
-char244 "
-~o 456,722,14 2 0365 -- otilde
-char245 "
-:o 456,706,14 2 0366 -- odieresis
-char246 "
-char247 479,524,19 0 0367 -- divide
-/o 501,545,22 0 0370 -- oslash
-char248 "
-`u 456,734,15 2 0371 -- ugrave
-char249 "
-'u 456,734,15 2 0372 -- uacute
-char250 "
-^u 456,734,15 2 0373 -- ucircumflex
-char251 "
-:u 456,706,15 2 0374 -- udieresis
-char252 "
-'y 410,734,214 3 0375 -- yacute
-char253 "
-Tp 456,718,207 3 0376 -- thorn
-char254 "
-:y 410,706,214 3 0377 -- ydieresis
-char255 "
+~N 592,917,0,0,-62 2 0321 -- Ntilde
+`O 638,929,19,0,-32 2 0322 -- Ograve
+'O 638,929,19,0,-32 2 0323 -- Oacute
+^O 638,929,19,0,-32 2 0324 -- Ocircumflex
+~O 638,917,19,0,-32 2 0325 -- Otilde
+:O 638,901,19,0,-32 2 0326 -- Odieresis
+tmu 479,506,0,0,-32 0 0327 -- multiply
+/O 638,737,19,0,-32 2 0330 -- Oslash
+`U 592,929,19,0,-65 2 0331 -- Ugrave
+'U 592,929,19,0,-65 2 0332 -- Uacute
+^U 592,929,19,0,-65 2 0333 -- Ucircumflex
+:U 592,901,19,0,-65 2 0334 -- Udieresis
+'Y 547,929,0,0,-11 2 0335 -- Yacute
+TP 547,718,0,0,-71 2 0336 -- Thorn
+ss 501,728,15,0,-55 2 0337 -- germandbls
+`a 456,734,15,0,-30 2 0340 -- agrave
+'a 456,734,15,0,-30 2 0341 -- aacute
+^a 456,734,15,0,-30 2 0342 -- acircumflex
+~a 456,722,15,0,-30 2 0343 -- atilde
+:a 456,706,15,0,-30 2 0344 -- adieresis
+oa 456,756,15,0,-30 2 0345 -- aring
+ae 729,538,15,0,-30 0 0346 -- ae
+,c 410,538,225,0,-25 1 0347 -- ccedilla
+`e 456,734,15,0,-33 2 0350 -- egrave
+'e 456,734,15,0,-33 2 0351 -- eacute
+^e 456,734,15,0,-33 2 0352 -- ecircumflex
+:e 456,706,15,0,-33 2 0353 -- edieresis
+`i 228,734,0,0,11 2 0354 -- igrave
+'i 228,734,0,11,-78 2 0355 -- iacute
+^i 228,734,0,6,5 2 0356 -- icircumflex
+:i 228,706,0,0,-11 2 0357 -- idieresis
+Sd 456,737,15,0,-29 2 0360 -- eth
+~n 456,722,0,0,-53 2 0361 -- ntilde
+`o 456,734,14,0,-29 2 0362 -- ograve
+'o 456,734,14,0,-29 2 0363 -- oacute
+^o 456,734,14,0,-29 2 0364 -- ocircumflex
+~o 456,722,14,0,-29 2 0365 -- otilde
+:o 456,706,14,0,-29 2 0366 -- odieresis
+tdi 479,524,19,0,-32 0 0367 -- divide
+/o 501,545,22,0,-23 0 0370 -- oslash
+`u 456,734,15,0,-56 2 0371 -- ugrave
+'u 456,734,15,0,-56 2 0372 -- uacute
+^u 456,734,15,0,-56 2 0373 -- ucircumflex
+:u 456,706,15,0,-56 2 0374 -- udieresis
+'y 410,734,214,0,-9 3 0375 -- yacute
+Tp 456,718,207,0,-48 3 0376 -- thorn
+:y 410,706,214,0,-9 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/HR b/contrib/groff/font/devps/HR
index 3f89e25..45f2c0e 100644
--- a/contrib/groff/font/devps/HR
+++ b/contrib/groff/font/devps/HR
@@ -85,7 +85,6 @@ T . -120
T o -120
T - -140
T hy -140
-T char173 -140
T e -120
T , -120
T : -20
@@ -101,7 +100,6 @@ V . -125
V o -80
V - -80
V hy -80
-V char173 -80
V e -80
V , -125
V : -40
@@ -115,7 +113,6 @@ W . -80
W o -30
W - -40
W hy -40
-W char173 -40
W e -30
W , -80
W a -40
@@ -128,7 +125,6 @@ Y o -140
Y i -20
Y - -140
Y hy -140
-Y char173 -140
Y e -140
Y , -140
Y : -60
@@ -181,61 +177,33 @@ o v -15
o . -40
o , -40
/o z -55
-char248 z -55
/o y -70
-char248 y -70
/o x -85
-char248 x -85
/o w -70
-char248 w -70
/o v -70
-char248 v -70
/o u -55
-char248 u -55
/o t -55
-char248 t -55
/o s -55
-char248 s -55
/o r -55
-char248 r -55
/o q -55
-char248 q -55
/o . -95
-char248 . -95
/o p -55
-char248 p -55
/o o -55
-char248 o -55
/o n -55
-char248 n -55
/o m -55
-char248 m -55
/o l -55
-char248 l -55
/o k -55
-char248 k -55
/o j -55
-char248 j -55
/o i -55
-char248 i -55
/o h -55
-char248 h -55
/o g -55
-char248 g -55
/o f -55
-char248 f -55
/o e -55
-char248 e -55
/o d -55
-char248 d -55
/o , -95
-char248 , -95
/o c -55
-char248 c -55
/o b -55
-char248 b -55
/o a -55
-char248 a -55
p y -30
p . -35
p , -35
@@ -293,337 +261,246 @@ 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,0,14,14 2 0000 -- asciicircum
+ti 584,326,0,0,-61 0 0001 -- asciitilde
+vS 667,929,19,0,-49 2 0002 -- Scaron
+vZ 611,929,0,0,-23 2 0003 -- Zcaron
+vs 500,734,15,0,-32 2 0004 -- scaron
+vz 500,734,0,0,-31 2 0005 -- zcaron
+:Y 667,901,0,0,-14 2 0006 -- Ydieresis
+tm 1000,718,0,0,-46 2 0007 -- trademark
+aq 191,718,0,0,-59 2 0010 -- quotesingle
space 278 0 0040
-! 278,718 2 0041 -- exclam
-" 355,718 2 0042 -- quotedbl
+! 278,718,0,0,-90 2 0041 -- exclam
+" 355,718,0,0,-70 2 0042 -- quotedbl
dq "
-# 556,688 2 0043 -- numbersign
+# 556,688,0,0,-28 2 0043 -- numbersign
sh "
-$ 556,775,115 2 0044 -- dollar
+$ 556,775,115,0,-32 2 0044 -- dollar
Do "
-% 889,703,19 2 0045 -- percent
-& 667,718,15 2 0046 -- ampersand
-' 222,718 2 0047 -- quoteright
+% 889,703,19,0,-39 2 0045 -- percent
+& 667,718,15,0,-44 2 0046 -- ampersand
+' 222,718,0,0,-53 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
+( 333,733,207,0,-68 3 0050 -- parenleft
+) 333,733,207,0,-34 3 0051 -- parenright
+* 389,718,0,0,-39 2 0052 -- asterisk
++ 584,505,0,0,-39 0 0053 -- plus
+, 278,106,147,0,-87 0 0054 -- comma
+- 333,322,0,0,-44 0 0055 -- hyphen
hy "
-char173 "
-. 278,106 0 0056 -- period
-/ 278,737,19 2 0057 -- slash
+. 278,106,0,0,-87 0 0056 -- period
+/ 278,737,19,17,17 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,0,-37 2 0060 -- zero
+1 556,703,0,0,-101 2 0061 -- one
+2 556,703,0,0,-26 2 0062 -- two
+3 556,703,19,0,-34 2 0063 -- three
+4 556,703,0,0,-25 2 0064 -- four
+5 556,688,19,0,-32 2 0065 -- five
+6 556,703,19,0,-38 2 0066 -- six
+7 556,688,0,0,-37 2 0067 -- seven
+8 556,703,19,0,-38 2 0070 -- eight
+9 556,703,19,0,-42 2 0071 -- nine
+: 278,516,0,0,-87 0 0072 -- colon
+; 278,516,147,0,-87 0 0073 -- semicolon
+< 584,495,0,0,-48 0 0074 -- less
+= 584,390,0,0,-39 0 0075 -- equal
+> 584,495,0,0,-48 0 0076 -- greater
+? 556,727,0,0,-56 2 0077 -- question
+@ 1015,737,19,0,-147 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,0,0,-14 2 0101 -- A
+B 667,718,0,0,-74 2 0102 -- B
+C 722,737,19,0,-44 2 0103 -- C
+D 722,718,0,0,-81 2 0104 -- D
+E 667,718,0,0,-86 2 0105 -- E
+F 611,718,0,0,-86 2 0106 -- F
+G 778,737,19,0,-48 2 0107 -- G
+H 722,718,0,0,-77 2 0110 -- H
+I 278,718,0,0,-91 2 0111 -- I
+J 500,718,19,0,-17 2 0112 -- J
+K 667,718,0,0,-76 2 0113 -- K
+L 556,718,0,0,-76 2 0114 -- L
+M 833,718,0,0,-73 2 0115 -- M
+N 722,718,0,0,-76 2 0116 -- N
+O 778,737,19,0,-39 2 0117 -- O
+P 667,718,0,0,-86 2 0120 -- P
+Q 778,737,56,0,-39 2 0121 -- Q
+R 722,718,0,0,-88 2 0122 -- R
+S 667,737,19,0,-49 2 0123 -- S
+T 611,718,0,0,-14 2 0124 -- T
+U 722,718,19,0,-79 2 0125 -- U
+V 667,718,0,0,-20 2 0126 -- V
+W 944,718,0,0,-16 2 0127 -- W
+X 667,718,0,0,-19 2 0130 -- X
+Y 667,718,0,0,-14 2 0131 -- Y
+Z 611,718,0,0,-23 2 0132 -- Z
+[ 278,722,196,0,-63 2 0133 -- bracketleft
lB "
-\ 278,737,19 2 0134 -- backslash
+\ 278,737,19,17,17 2 0134 -- backslash
rs "
-] 278,722,196 2 0135 -- bracketright
+] 278,722,196,0,-28 2 0135 -- bracketright
rB "
-a^ 333,734 2 0136 -- circumflex
+a^ 333,734,0,0,-21 2 0136 -- circumflex
^ "
_ 556,0,125 0 0137 -- underscore
-` 222,725 2 0140 -- quoteleft
+` 222,725,0,0,-65 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,-36 0 0141 -- a
+b 556,718,15,0,-58 2 0142 -- b
+c 500,538,15,0,-30 0 0143 -- c
+d 556,718,15,0,-35 2 0144 -- d
+e 556,538,15,0,-40 0 0145 -- e
+f 278,728,0,0,-14 2 0146 -- f
+g 556,538,220,0,-40 1 0147 -- g
+h 556,718,0,0,-65 2 0150 -- h
+i 222,718,0,0,-67 2 0151 -- i
+j 222,718,210,0,16 3 0152 -- j
+k 500,718,0,1,-67 2 0153 -- k
+l 222,718,0,0,-67 2 0154 -- l
+m 833,538,0,0,-65 0 0155 -- m
+n 556,538,0,0,-65 0 0156 -- n
+o 556,538,14,0,-35 0 0157 -- o
+p 556,538,207,0,-58 1 0160 -- p
+q 556,538,207,0,-35 1 0161 -- q
+r 333,538,0,0,-77 0 0162 -- r
+s 500,538,15,0,-32 0 0163 -- s
+t 278,669,7,0,-14 2 0164 -- t
+u 556,523,15,0,-68 0 0165 -- u
+v 500,523,0,0,-8 0 0166 -- v
+w 722,523,0,0,-14 0 0167 -- w
+x 500,523,0,0,-11 0 0170 -- x
+y 500,523,214,0,-11 1 0171 -- y
+z 500,523,0,0,-31 0 0172 -- z
+lC 334,722,196,0,-42 2 0173 -- braceleft
{ "
-ba 260,737,19 2 0174 -- bar
+ba 260,737,19,0,-94 2 0174 -- bar
| "
-rC 334,722,196 2 0175 -- braceright
+rC 334,722,196,0,-42 2 0175 -- braceright
} "
-a~ 333,722 2 0176 -- tilde
+a~ 333,722,0,4,4 2 0176 -- tilde
~ "
-bq 222,106,149 0 0200 -- quotesinglbase
-Fo 556,446 0 0201 -- guillemotleft
-char171 "
-Fc 556,446 0 0202 -- guillemotright
-char187 "
-bu 350,517 0 0203 -- bullet
-Fn 556,737,207 3 0204 -- florin
-f/ 167,703,19 2 0205 -- fraction
-%0 1000,703,19 2 0206 -- perthousand
-dg 556,718,159 2 0207 -- dagger
-dd 556,718,159 2 0210 -- daggerdbl
+bq 222,106,149,0,-53 0 0200 -- quotesinglbase
+Fo 556,446,0,0,-97 0 0201 -- guillemotleft
+Fc 556,446,0,0,-97 0 0202 -- guillemotright
+bu 350,517,0,0,-18 0 0203 -- bullet
+Fn 556,737,207,0,11 3 0204 -- florin
+f/ 167,703,19,166,166 2 0205 -- fraction
+%0 1000,703,19,0,-7 2 0206 -- perthousand
+dg 556,718,159,0,-43 2 0207 -- dagger
+dd 556,718,159,0,-43 2 0210 -- daggerdbl
en 556,313 0 0211 -- endash
em 1000,313 0 0212 -- emdash
-fi 500,728 2 0214 -- fi
-fl 500,728 2 0215 -- fl
-.i 278,523 0 0220 -- dotlessi
-ga 333,734 2 0222 -- grave
-a" 333,734 2 0223 -- hungarumlaut
-a. 333,706 2 0224 -- dotaccent
-ab 333,731 2 0225 -- breve
-ah 333,734 2 0226 -- caron
-ao 333,756 2 0227 -- ring
-ho 333,0,225 1 0230 -- ogonek
-lq 333,725 2 0231 -- quotedblleft
-rq 333,718 2 0232 -- quotedblright
-oe 944,538,15 0 0233 -- oe
-/l 222,718 2 0234 -- lslash
-Bq 333,106,149 0 0235 -- quotedblbase
-OE 1000,737,19 2 0236 -- OE
-/L 556,718 2 0237 -- Lslash
-r! 333,523,195 0 0241 -- exclamdown
-char161 "
-ct 556,623,115 0 0242 -- cent
-char162 "
-Po 556,718,16 2 0243 -- sterling
-char163 "
-Cs 556,603 0 0244 -- currency
-char164 "
-Ye 556,688 2 0245 -- yen
-char165 "
-bb 260,737,19 2 0246 -- brokenbar
-char166 "
-sc 556,737,191 2 0247 -- section
-char167 "
-ad 333,706 2 0250 -- dieresis
-char168 "
-co 737,737,19 2 0251 -- copyright
-char169 "
-Of 370,737 2 0252 -- ordfeminine
-char170 "
-fo 333,446 0 0253 -- guilsinglleft
-no 584,390 0 0254 -- logicalnot
-char172 "
-\- 584,289 0 0255 -- minus
-rg 737,737,19 2 0256 -- registered
-char174 "
-a- 333,684 2 0257 -- macron
-char175 "
-de 400,703 2 0260 -- degree
-char176 "
-char177 584,506 0 0261 -- plusminus
-S2 333,703 2 0262 -- twosuperior
-char178 "
-S3 333,703 2 0263 -- threesuperior
-char179 "
-aa 333,734 2 0264 -- acute
-char180 "
-char181 556,523,207 1 0265 -- mu
-ps 537,718,173 2 0266 -- paragraph
-char182 "
-pc 278,315 0 0267 -- periodcentered
-char183 "
-ac 333,0,225 1 0270 -- cedilla
-char184 "
-S1 333,703 2 0271 -- onesuperior
-char185 "
-Om 365,737 2 0272 -- ordmasculine
-char186 "
-fc 333,446 0 0273 -- guilsinglright
-14 834,703,19 2 0274 -- onequarter
-char188 "
-12 834,703,19 2 0275 -- onehalf
-char189 "
-34 834,703,19 2 0276 -- threequarters
-char190 "
-r? 611,525,201 0 0277 -- questiondown
-char191 "
-`A 667,929 2 0300 -- Agrave
-char192 "
-'A 667,929 2 0301 -- Aacute
-char193 "
-^A 667,929 2 0302 -- Acircumflex
-char194 "
-~A 667,917 2 0303 -- Atilde
-char195 "
-:A 667,901 2 0304 -- Adieresis
-char196 "
-oA 667,931 2 0305 -- Aring
-char197 "
-AE 1000,718 2 0306 -- AE
-char198 "
-,C 722,737,225 3 0307 -- Ccedilla
-char199 "
-`E 667,929 2 0310 -- Egrave
-char200 "
-'E 667,929 2 0311 -- Eacute
-char201 "
-^E 667,929 2 0312 -- Ecircumflex
-char202 "
-:E 667,901 2 0313 -- Edieresis
-char203 "
-`I 278,929 2 0314 -- Igrave
-char204 "
-'I 278,929 2 0315 -- Iacute
-char205 "
-^I 278,929 2 0316 -- Icircumflex
-char206 "
-:I 278,901 2 0317 -- Idieresis
-char207 "
+fi 500,728,0,0,-14 2 0214 -- fi
+fl 500,728,0,0,-14 2 0215 -- fl
+.i 278,523,0,0,-95 0 0220 -- dotlessi
+ga 333,734,0,0,-14 2 0222 -- grave
+a" 333,734,0,76,-31 2 0223 -- hungarumlaut
+a. 333,706,0,0,-121 2 0224 -- dotaccent
+ab 333,731,0,0,-13 2 0225 -- breve
+ah 333,734,0,0,-21 2 0226 -- caron
+ao 333,756,0,0,-75 2 0227 -- ring
+ho 333,0,225,0,-73 1 0230 -- ogonek
+lq 333,725,0,0,-38 2 0231 -- quotedblleft
+rq 333,718,0,0,-26 2 0232 -- quotedblright
+oe 944,538,15,0,-35 0 0233 -- oe
+/l 222,718,0,20,20 2 0234 -- lslash
+Bq 333,106,149,0,-26 0 0235 -- quotedblbase
+OE 1000,737,19,0,-36 2 0236 -- OE
+/L 556,718,0,0,20 2 0237 -- Lslash
+r! 333,523,195,0,-118 0 0241 -- exclamdown
+ct 556,623,115,0,-51 0 0242 -- cent
+Po 556,718,16,0,-33 2 0243 -- sterling
+Cs 556,603,0,0,-28 0 0244 -- currency
+Ye 556,688,0,0,-3 2 0245 -- yen
+bb 260,737,19,0,-94 2 0246 -- brokenbar
+sc 556,737,191,0,-43 2 0247 -- section
+ad 333,706,0,0,-40 2 0250 -- dieresis
+co 737,737,19,15,14 2 0251 -- copyright
+Of 370,737,0,0,-24 2 0252 -- ordfeminine
+fo 333,446,0,0,-88 0 0253 -- guilsinglleft
+no 584,390,0,0,-39 0 0254 -- logicalnot
+\- 584,289,0,0,-39 0 0255 -- minus
+rg 737,737,19,15,14 2 0256 -- registered
+a- 333,684,0,0,-10 2 0257 -- macron
+de 400,703,0,0,-54 2 0260 -- degree
+t+- 584,506,0,0,-39 0 0261 -- plusminus
+S2 333,703,0,0,-4 2 0262 -- twosuperior
+S3 333,703,0,0,-5 2 0263 -- threesuperior
+aa 333,734,0,0,-122 2 0264 -- acute
+mc 556,523,207,0,-68 1 0265 -- mu
+ps 537,718,173,0,-18 2 0266 -- paragraph
+pc 278,315,0,0,-77 0 0267 -- periodcentered
+ac 333,0,225,0,-45 1 0270 -- cedilla
+S1 333,703,0,0,-43 2 0271 -- onesuperior
+Om 365,737,0,0,-25 2 0272 -- ordmasculine
+fc 333,446,0,0,-88 0 0273 -- guilsinglright
+14 834,703,19,0,-73 2 0274 -- onequarter
+12 834,703,19,0,-43 2 0275 -- onehalf
+34 834,703,19,0,-45 2 0276 -- threequarters
+r? 611,525,201,0,-91 0 0277 -- questiondown
+`A 667,929,0,0,-14 2 0300 -- Agrave
+'A 667,929,0,0,-14 2 0301 -- Aacute
+^A 667,929,0,0,-14 2 0302 -- Acircumflex
+~A 667,917,0,0,-14 2 0303 -- Atilde
+:A 667,901,0,0,-14 2 0304 -- Adieresis
+oA 667,931,0,0,-14 2 0305 -- Aring
+AE 1000,718,0,0,-8 2 0306 -- AE
+,C 722,737,225,0,-44 3 0307 -- Ccedilla
+`E 667,929,0,0,-86 2 0310 -- Egrave
+'E 667,929,0,0,-86 2 0311 -- Eacute
+^E 667,929,0,0,-86 2 0312 -- Ecircumflex
+:E 667,901,0,0,-86 2 0313 -- Edieresis
+`I 278,929,0,0,13 2 0314 -- Igrave
+'I 278,929,0,14,-91 2 0315 -- Iacute
+^I 278,929,0,7,6 2 0316 -- Icircumflex
+:I 278,901,0,0,-13 2 0317 -- Idieresis
-D 722,718 2 0320 -- Eth
-char208 "
-~N 722,917 2 0321 -- Ntilde
-char209 "
-`O 778,929,19 2 0322 -- Ograve
-char210 "
-'O 778,929,19 2 0323 -- Oacute
-char211 "
-^O 778,929,19 2 0324 -- Ocircumflex
-char212 "
-~O 778,917,19 2 0325 -- Otilde
-char213 "
-:O 778,901,19 2 0326 -- Odieresis
-char214 "
-char215 584,506 0 0327 -- multiply
-/O 778,737,19 2 0330 -- Oslash
-char216 "
-`U 722,929,19 2 0331 -- Ugrave
-char217 "
-'U 722,929,19 2 0332 -- Uacute
-char218 "
-^U 722,929,19 2 0333 -- Ucircumflex
-char219 "
-:U 722,901,19 2 0334 -- Udieresis
-char220 "
-'Y 667,929 2 0335 -- Yacute
-char221 "
-TP 667,718 2 0336 -- Thorn
-char222 "
-ss 611,728,15 2 0337 -- germandbls
-char223 "
-`a 556,734,15 2 0340 -- agrave
-char224 "
-'a 556,734,15 2 0341 -- aacute
-char225 "
-^a 556,734,15 2 0342 -- acircumflex
-char226 "
-~a 556,722,15 2 0343 -- atilde
-char227 "
-:a 556,706,15 2 0344 -- adieresis
-char228 "
-oa 556,756,15 2 0345 -- aring
-char229 "
-ae 889,538,15 0 0346 -- ae
-char230 "
-,c 500,538,225 1 0347 -- ccedilla
-char231 "
-`e 556,734,15 2 0350 -- egrave
-char232 "
-'e 556,734,15 2 0351 -- eacute
-char233 "
-^e 556,734,15 2 0352 -- ecircumflex
-char234 "
-:e 556,706,15 2 0353 -- edieresis
-char235 "
-`i 278,734 2 0354 -- igrave
-char236 "
-'i 278,734 2 0355 -- iacute
-char237 "
-^i 278,734 2 0356 -- icircumflex
-char238 "
-:i 278,706 2 0357 -- idieresis
-char239 "
-Sd 556,737,15 2 0360 -- eth
-char240 "
-~n 556,722 2 0361 -- ntilde
-char241 "
-`o 556,734,14 2 0362 -- ograve
-char242 "
-'o 556,734,14 2 0363 -- oacute
-char243 "
-^o 556,734,14 2 0364 -- ocircumflex
-char244 "
-~o 556,722,14 2 0365 -- otilde
-char245 "
-:o 556,706,14 2 0366 -- odieresis
-char246 "
-char247 584,524,19 0 0367 -- divide
-/o 611,545,22 0 0370 -- oslash
-char248 "
-`u 556,734,15 2 0371 -- ugrave
-char249 "
-'u 556,734,15 2 0372 -- uacute
-char250 "
-^u 556,734,15 2 0373 -- ucircumflex
-char251 "
-:u 556,706,15 2 0374 -- udieresis
-char252 "
-'y 500,734,214 3 0375 -- yacute
-char253 "
-Tp 556,718,207 3 0376 -- thorn
-char254 "
-:y 500,706,214 3 0377 -- ydieresis
-char255 "
+~N 722,917,0,0,-76 2 0321 -- Ntilde
+`O 778,929,19,0,-39 2 0322 -- Ograve
+'O 778,929,19,0,-39 2 0323 -- Oacute
+^O 778,929,19,0,-39 2 0324 -- Ocircumflex
+~O 778,917,19,0,-39 2 0325 -- Otilde
+:O 778,901,19,0,-39 2 0326 -- Odieresis
+tmu 584,506,0,0,-39 0 0327 -- multiply
+/O 778,737,19,0,-39 2 0330 -- Oslash
+`U 722,929,19,0,-79 2 0331 -- Ugrave
+'U 722,929,19,0,-79 2 0332 -- Uacute
+^U 722,929,19,0,-79 2 0333 -- Ucircumflex
+:U 722,901,19,0,-79 2 0334 -- Udieresis
+'Y 667,929,0,0,-14 2 0335 -- Yacute
+TP 667,718,0,0,-86 2 0336 -- Thorn
+ss 611,728,15,0,-67 2 0337 -- germandbls
+`a 556,734,15,0,-36 2 0340 -- agrave
+'a 556,734,15,0,-36 2 0341 -- aacute
+^a 556,734,15,0,-36 2 0342 -- acircumflex
+~a 556,722,15,0,-36 2 0343 -- atilde
+:a 556,706,15,0,-36 2 0344 -- adieresis
+oa 556,756,15,0,-36 2 0345 -- aring
+ae 889,538,15,0,-36 0 0346 -- ae
+,c 500,538,225,0,-30 1 0347 -- ccedilla
+`e 556,734,15,0,-40 2 0350 -- egrave
+'e 556,734,15,0,-40 2 0351 -- eacute
+^e 556,734,15,0,-40 2 0352 -- ecircumflex
+:e 556,706,15,0,-40 2 0353 -- edieresis
+`i 278,734,0,0,13 2 0354 -- igrave
+'i 278,734,0,14,-95 2 0355 -- iacute
+^i 278,734,0,7,6 2 0356 -- icircumflex
+:i 278,706,0,0,-13 2 0357 -- idieresis
+Sd 556,737,15,0,-35 2 0360 -- eth
+~n 556,722,0,0,-65 2 0361 -- ntilde
+`o 556,734,14,0,-35 2 0362 -- ograve
+'o 556,734,14,0,-35 2 0363 -- oacute
+^o 556,734,14,0,-35 2 0364 -- ocircumflex
+~o 556,722,14,0,-35 2 0365 -- otilde
+:o 556,706,14,0,-35 2 0366 -- odieresis
+tdi 584,524,19,0,-39 0 0367 -- divide
+/o 611,545,22,0,-28 0 0370 -- oslash
+`u 556,734,15,0,-68 2 0371 -- ugrave
+'u 556,734,15,0,-68 2 0372 -- uacute
+^u 556,734,15,0,-68 2 0373 -- ucircumflex
+:u 556,706,15,0,-68 2 0374 -- udieresis
+'y 500,734,214,0,-11 3 0375 -- yacute
+Tp 556,718,207,0,-58 3 0376 -- thorn
+:y 500,706,214,0,-11 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/Makefile.sub b/contrib/groff/font/devps/Makefile.sub
index 08b61e2..434a0ac 100644
--- a/contrib/groff/font/devps/Makefile.sub
+++ b/contrib/groff/font/devps/Makefile.sub
@@ -16,9 +16,9 @@ DESC: DESC.in
cat $(srcdir)/DESC.in >DESC
echo broken $(BROKEN_SPOOLER_FLAGS) >>DESC
if test "$(PAGE)" = A4; then \
- echo "paperlength 841890" >>DESC; \
+ echo "papersize a4" >>DESC; \
else \
- echo "paperlength 792000" >>DESC; \
+ echo "papersize letter" >>DESC; \
fi
test -z '$(PSPRINT)' || echo print '$(PSPRINT)' >>DESC
diff --git a/contrib/groff/font/devps/NB b/contrib/groff/font/devps/NB
index 1a926cb..10313f0 100644
--- a/contrib/groff/font/devps/NB
+++ b/contrib/groff/font/devps/NB
@@ -63,7 +63,6 @@ T o -74
T i -18
T - -125
T hy -125
-T char173 -125
T e -74
T , -100
T a -74
@@ -79,7 +78,6 @@ V o -74
V i -18
V - -100
V hy -100
-V char173 -100
V e -74
V , -125
V : -37
@@ -93,7 +91,6 @@ W o -74
W i -18
W - -100
W hy -100
-W char173 -100
W e -74
W , -100
W : -55
@@ -106,7 +103,6 @@ Y o -100
Y i -18
Y - -125
Y hy -125
-Y char173 -125
Y e -100
Y , -100
Y : -25
@@ -137,337 +133,246 @@ w , -100
y . -100
y , -100
charset
-ha 606,690 2 0000 -- asciicircum
-ti 606,346 0 0001 -- asciitilde
-vS 667,952,15 2 0002 -- Scaron
-vZ 667,952 2 0003 -- Zcaron
-vs 500,725,15 2 0004 -- scaron
-vz 537,725 2 0005 -- zcaron
-:Y 722,921 2 0006 -- Ydieresis
-tm 1000,722 2 0007 -- trademark
-aq 241,737 2 0010 -- quotesingle
+ha 606,690,0,0,-66 2 0000 -- asciicircum
+ti 606,346,0,0,-72 0 0001 -- asciitilde
+vS 667,952,15,0,-51 2 0002 -- Scaron
+vZ 667,952,0,0,-28 2 0003 -- Zcaron
+vs 500,725,15,0,-48 2 0004 -- scaron
+vz 537,725,0,0,-38 2 0005 -- zcaron
+:Y 722,921,0,12,12 2 0006 -- Ydieresis
+tm 1000,722,0,0,-6 2 0007 -- trademark
+aq 241,737,0,0,-53 2 0010 -- quotesingle
space 287 0 0040
-! 296,737,15 2 0041 -- exclam
+! 296,737,15,0,-53 2 0041 -- exclam
" 333,737 2 0042 -- quotedbl
dq "
-# 574,690 2 0043 -- numbersign
+# 574,690,0,0,-36 2 0043 -- numbersign
sh "
-$ 574,810,141 2 0044 -- dollar
+$ 574,810,141,0,-25 2 0044 -- dollar
Do "
-% 833,705,15 2 0045 -- percent
-& 852,737,15 2 0046 -- ampersand
-' 241,737 2 0047 -- quoteright
+% 833,705,15,0,-14 2 0045 -- percent
+& 852,737,15,0,-34 2 0046 -- ampersand
+' 241,737,0,0,-22 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
+( 389,745,117,0,-77 2 0050 -- parenleft
+) 389,745,117,0,-44 2 0051 -- parenright
+* 500,737,0,0,-54 2 0052 -- asterisk
++ 606,506,0,0,-50 0 0053 -- plus
+, 278,175,184,0,-40 0 0054 -- comma
+- 333,302,0,0,-42 0 0055 -- hyphen
hy "
-char173 "
-. 278,175,15 0 0056 -- period
-/ 278,737,15 2 0057 -- slash
+. 278,175,15,0,-44 0 0056 -- period
+/ 278,737,15,42,42 2 0057 -- slash
sl "
-0 574,705,15 2 0060 -- zero
-1 574,705 2 0061 -- one
-2 574,705 2 0062 -- two
-3 574,705,15 2 0063 -- three
-4 574,705 2 0064 -- four
-5 574,705,15 2 0065 -- five
-6 574,705,15 2 0066 -- six
-7 574,705,15 2 0067 -- seven
-8 574,705,15 2 0070 -- eight
-9 574,705,15 2 0071 -- nine
-: 278,485,15 0 0072 -- colon
-; 278,485,184 0 0073 -- semicolon
-< 606,515,9 0 0074 -- less
-= 606,403 0 0075 -- equal
-> 606,515,9 0 0076 -- greater
-? 500,737,15 2 0077 -- question
-@ 747,737,15 2 0100 -- at
+0 574,705,15,0,-27 2 0060 -- zero
+1 574,705,0,0,-83 2 0061 -- one
+2 574,705,0,0,-19 2 0062 -- two
+3 574,705,15,0,-23 2 0063 -- three
+4 574,705,0,0,-19 2 0064 -- four
+5 574,705,15,0,-32 2 0065 -- five
+6 574,705,15,0,-27 2 0066 -- six
+7 574,705,15,0,-45 2 0067 -- seven
+8 574,705,15,0,-27 2 0070 -- eight
+9 574,705,15,0,-27 2 0071 -- nine
+: 278,485,15,0,-44 0 0072 -- colon
+; 278,485,184,0,-40 0 0073 -- semicolon
+< 606,515,9,0,-50 0 0074 -- less
+= 606,403,0,0,-50 0 0075 -- equal
+> 606,515,9,0,-50 0 0076 -- greater
+? 500,737,15,0,-23 2 0077 -- question
+@ 747,737,15,3,2 2 0100 -- at
at "
-A 759,737 2 0101 -- A
-B 778,722 2 0102 -- B
-C 778,737,15 2 0103 -- C
-D 833,722 2 0104 -- D
-E 759,722 2 0105 -- E
-F 722,722 2 0106 -- F
-G 833,737,15 2 0107 -- G
-H 870,722 2 0110 -- H
-I 444,722 2 0111 -- I
-J 648,722,15 2 0112 -- J
-K 815,722 2 0113 -- K
-L 722,722 2 0114 -- L
-M 981,722 2 0115 -- M
-N 833,722,10 2 0116 -- N
-O 833,737,15 2 0117 -- O
-P 759,722 2 0120 -- P
-Q 833,737,189 2 0121 -- Q
-R 815,722,15 2 0122 -- R
-S 667,737,15 2 0123 -- S
-T 722,722 2 0124 -- T
-U 833,722,15 2 0125 -- U
-V 759,722,10 2 0126 -- V
-W 981,722,10 2 0127 -- W
-X 722,722 2 0130 -- X
-Y 722,722 2 0131 -- Y
-Z 667,722 2 0132 -- Z
-[ 389,737,109 2 0133 -- bracketleft
+A 759,737,0,19,19 2 0101 -- A
+B 778,722,0,0,-19 2 0102 -- B
+C 778,737,15,0,-39 2 0103 -- C
+D 833,722,0,0,-19 2 0104 -- D
+E 759,722,0,0,-19 2 0105 -- E
+F 722,722,0,0,-19 2 0106 -- F
+G 833,737,15,0,-39 2 0107 -- G
+H 870,722,0,0,-19 2 0110 -- H
+I 444,722,0,0,-29 2 0111 -- I
+J 648,722,15,0,-6 2 0112 -- J
+K 815,722,0,7,-19 2 0113 -- K
+L 722,722,0,0,-19 2 0114 -- L
+M 981,722,0,0,-10 2 0115 -- M
+N 833,722,10,0,-5 2 0116 -- N
+O 833,737,15,0,-39 2 0117 -- O
+P 759,722,0,0,-24 2 0120 -- P
+Q 833,737,189,0,-39 2 0121 -- Q
+R 815,722,15,0,-19 2 0122 -- R
+S 667,737,15,0,-51 2 0123 -- S
+T 722,722,0,0,-16 2 0124 -- T
+U 833,722,15,0,-14 2 0125 -- U
+V 759,722,10,19,19 2 0126 -- V
+W 981,722,10,0,-7 2 0127 -- W
+X 722,722,0,12,12 2 0130 -- X
+Y 722,722,0,12,12 2 0131 -- Y
+Z 667,722,0,0,-28 2 0132 -- Z
+[ 389,737,109,0,-84 2 0133 -- bracketleft
lB "
-\ 606,737,15 2 0134 -- backslash
+\ 606,737,15,0,-122 2 0134 -- backslash
rs "
-] 389,737,109 2 0135 -- bracketright
+] 389,737,109,0,-50 2 0135 -- bracketright
rB "
-a^ 333,725 2 0136 -- circumflex
+a^ 333,725,0,11,10 2 0136 -- circumflex
^ "
_ 500,0,125 0 0137 -- underscore
-` 241,737 2 0140 -- quoteleft
+` 241,737,0,0,-22 2 0140 -- quoteleft
oq "
-a 611,485,15 0 0141 -- a
-b 648,737,15 2 0142 -- b
-c 556,485,15 0 0143 -- c
-d 667,737,15 2 0144 -- d
-e 574,485,15 0 0145 -- e
-f 389,737 2 0146 -- f
-g 611,535,205 1 0147 -- g
-h 685,737 2 0150 -- h
-i 370,737 2 0151 -- i
-j 352,737,205 3 0152 -- j
-k 667,737 2 0153 -- k
-l 352,737 2 0154 -- l
-m 963,485 0 0155 -- m
-n 685,485 0 0156 -- n
-o 611,485,15 0 0157 -- o
-p 667,485,205 1 0160 -- p
-q 648,485,205 1 0161 -- q
-r 519,485 0 0162 -- r
-s 500,485,15 0 0163 -- s
-t 426,675,15 2 0164 -- t
-u 685,475,15 0 0165 -- u
-v 611,475,10 0 0166 -- v
-w 889,475,10 0 0167 -- w
-x 611,475 0 0170 -- x
-y 611,475,205 1 0171 -- y
-z 537,475 0 0172 -- z
-lC 389,737,109 2 0173 -- braceleft
+a 611,485,15,0,-40 0 0141 -- a
+b 648,737,15,0,-4 2 0142 -- b
+c 556,485,15,0,-32 0 0143 -- c
+d 667,737,15,0,-32 2 0144 -- d
+e 574,485,15,0,-32 0 0145 -- e
+f 389,737,0,72,-11 2 0146 -- f
+g 611,535,205,12,-30 1 0147 -- g
+h 685,737,0,0,-17 2 0150 -- h
+i 370,737,0,0,-26 2 0151 -- i
+j 352,737,205,0,86 3 0152 -- j
+k 667,737,0,0,-17 2 0153 -- k
+l 352,737,0,0,-17 2 0154 -- l
+m 963,485,0,0,-17 0 0155 -- m
+n 685,485,0,0,-17 0 0156 -- n
+o 611,485,15,0,-32 0 0157 -- o
+p 667,485,205,0,-17 1 0160 -- p
+q 648,485,205,0,-32 1 0161 -- q
+r 519,485,0,0,-17 0 0162 -- r
+s 500,485,15,0,-48 0 0163 -- s
+t 426,675,15,0,-21 2 0164 -- t
+u 685,475,15,0,-17 0 0165 -- u
+v 611,475,10,0,-12 0 0166 -- v
+w 889,475,10,0,-16 0 0167 -- w
+x 611,475,0,0,-12 0 0170 -- x
+y 611,475,205,0,-12 1 0171 -- y
+z 537,475,0,0,-38 0 0172 -- z
+lC 389,737,109,0,-36 2 0173 -- braceleft
{ "
-ba 606,750,250 3 0174 -- bar
+ba 606,750,250,0,-249 3 0174 -- bar
| "
-rC 389,737,109 2 0175 -- braceright
+rC 389,737,109,0,-76 2 0175 -- braceright
} "
-a~ 333,705 2 0176 -- tilde
+a~ 333,705,0,24,24 2 0176 -- tilde
~ "
-bq 241,175,184 0 0200 -- quotesinglbase
-Fo 500,397 0 0201 -- guillemotleft
-char171 "
-Fc 500,397 0 0202 -- guillemotright
-char187 "
-bu 606,542 0 0203 -- bullet
-Fn 574,737,205 3 0204 -- florin
-f/ 167,705,15 2 0205 -- fraction
-%0 1000,705,15 2 0206 -- perthousand
-dg 500,737,101 2 0207 -- dagger
-dd 500,737,89 2 0210 -- daggerdbl
+bq 241,175,184,0,-22 0 0200 -- quotesinglbase
+Fo 500,397,0,0,-46 0 0201 -- guillemotleft
+Fc 500,397,0,0,-46 0 0202 -- guillemotright
+bu 606,542,0,0,-122 0 0203 -- bullet
+Fn 574,737,205,0,-14 3 0204 -- florin
+f/ 167,705,15,165,165 2 0205 -- fraction
+%0 1000,705,15,0,-7 2 0206 -- perthousand
+dg 500,737,101,0,-39 2 0207 -- dagger
+dd 500,737,89,0,-39 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
+fi 685,737,0,0,-11 2 0214 -- fi
+fl 685,737,0,0,-11 2 0215 -- fl
+.i 370,475,0,0,-26 0 0220 -- dotlessi
+ga 333,737,0,0,-2 2 0222 -- grave
+a" 333,737,0,98,16 2 0223 -- hungarumlaut
+a. 333,694,0,0,-95 2 0224 -- dotaccent
+ab 333,714,0,0,-9 2 0225 -- breve
+ah 333,725,0,11,10 2 0226 -- caron
+ao 333,761,0,0,-58 2 0227 -- ring
+ho 333,3,163,13,-168 0 0230 -- ogonek
+lq 481,737,0,0,-22 2 0231 -- quotedblleft
+rq 481,737,0,0,-22 2 0232 -- quotedblright
+oe 907,485,15,0,-32 0 0233 -- oe
+/l 352,737,0,0,-17 2 0234 -- lslash
+Bq 481,175,184,0,-22 0 0235 -- quotedblbase
OE 1000,722 2 0236 -- OE
-/L 722,722 2 0237 -- Lslash
-r! 296,547,205 1 0241 -- exclamdown
-char161 "
-ct 574,572,102 0 0242 -- cent
-char162 "
-Po 574,705,15 2 0243 -- sterling
-char163 "
-Cs 574,605 0 0244 -- currency
-char164 "
-Ye 574,690 2 0245 -- yen
-char165 "
-bb 606,675,175 2 0246 -- brokenbar
-char166 "
-sc 500,737,86 2 0247 -- section
-char167 "
-ad 333,694 2 0250 -- dieresis
-char168 "
-co 747,737,15 2 0251 -- copyright
-char169 "
-Of 367,705 2 0252 -- ordfeminine
-char170 "
-fo 333,397 0 0253 -- guilsinglleft
-no 606,403 0 0254 -- logicalnot
-char172 "
-\- 606,307 0 0255 -- minus
-rg 747,737,15 2 0256 -- registered
-char174 "
-a- 333,664 0 0257 -- macron
-char175 "
-de 400,705 2 0260 -- degree
-char176 "
-char177 606,506 0 0261 -- plusminus
-S2 344,705 2 0262 -- twosuperior
-char178 "
-S3 344,705 2 0263 -- threesuperior
-char179 "
-aa 333,737 2 0264 -- acute
-char180 "
-char181 685,475,205 1 0265 -- mu
-ps 747,722,71 2 0266 -- paragraph
-char182 "
-pc 278,372 0 0267 -- periodcentered
-char183 "
-ac 333,0,224 1 0270 -- cedilla
-char184 "
-S1 344,705 2 0271 -- onesuperior
-char185 "
-Om 367,705 2 0272 -- ordmasculine
-char186 "
-fc 333,397 0 0273 -- guilsinglright
-14 861,705,15 2 0274 -- onequarter
-char188 "
-12 861,705,15 2 0275 -- onehalf
-char189 "
-34 861,705,15 2 0276 -- threequarters
-char190 "
-r? 500,547,205 1 0277 -- questiondown
-char191 "
-`A 759,964 2 0300 -- Agrave
-char192 "
-'A 759,964 2 0301 -- Aacute
-char193 "
-^A 759,952 2 0302 -- Acircumflex
-char194 "
-~A 759,932 2 0303 -- Atilde
-char195 "
-:A 759,921 2 0304 -- Adieresis
-char196 "
-oA 759,988 2 0305 -- Aring
-char197 "
-AE 981,722 2 0306 -- AE
-char198 "
-,C 778,737,224 3 0307 -- Ccedilla
-char199 "
-`E 759,964 2 0310 -- Egrave
-char200 "
-'E 759,964 2 0311 -- Eacute
-char201 "
-^E 759,952 2 0312 -- Ecircumflex
-char202 "
-:E 759,921 2 0313 -- Edieresis
-char203 "
-`I 444,964 2 0314 -- Igrave
-char204 "
-'I 444,964 2 0315 -- Iacute
-char205 "
-^I 444,952 2 0316 -- Icircumflex
-char206 "
-:I 444,921 2 0317 -- Idieresis
-char207 "
--D 833,722 2 0320 -- Eth
-char208 "
-~N 833,932,10 2 0321 -- Ntilde
-char209 "
-`O 833,964,15 2 0322 -- Ograve
-char210 "
-'O 833,964,15 2 0323 -- Oacute
-char211 "
-^O 833,952,15 2 0324 -- Ocircumflex
-char212 "
-~O 833,932,15 2 0325 -- Otilde
-char213 "
-:O 833,921,15 2 0326 -- Odieresis
-char214 "
-char215 606,491 0 0327 -- multiply
-/O 833,775,53 2 0330 -- Oslash
-char216 "
-`U 833,964,15 2 0331 -- Ugrave
-char217 "
-'U 833,964,15 2 0332 -- Uacute
-char218 "
-^U 833,952,15 2 0333 -- Ucircumflex
-char219 "
-:U 833,921,15 2 0334 -- Udieresis
-char220 "
-'Y 722,964 2 0335 -- Yacute
-char221 "
-TP 759,722 2 0336 -- Thorn
-char222 "
-ss 611,737,15 2 0337 -- germandbls
-char223 "
-`a 611,737,15 2 0340 -- agrave
-char224 "
-'a 611,737,15 2 0341 -- aacute
-char225 "
-^a 611,725,15 2 0342 -- acircumflex
-char226 "
-~a 611,705,15 2 0343 -- atilde
-char227 "
-:a 611,694,15 2 0344 -- adieresis
-char228 "
-oa 611,761,15 2 0345 -- aring
-char229 "
-ae 870,485,15 0 0346 -- ae
-char230 "
-,c 556,485,224 1 0347 -- ccedilla
-char231 "
-`e 574,737,15 2 0350 -- egrave
-char232 "
-'e 574,737,15 2 0351 -- eacute
-char233 "
-^e 574,725,15 2 0352 -- ecircumflex
-char234 "
-:e 574,694,15 2 0353 -- edieresis
-char235 "
-`i 370,737 2 0354 -- igrave
-char236 "
-'i 370,737 2 0355 -- iacute
-char237 "
-^i 370,725 2 0356 -- icircumflex
-char238 "
-:i 370,694 2 0357 -- idieresis
-char239 "
-Sd 611,737,15 2 0360 -- eth
-char240 "
-~n 685,705 2 0361 -- ntilde
-char241 "
-`o 611,737,15 2 0362 -- ograve
-char242 "
-'o 611,737,15 2 0363 -- oacute
-char243 "
-^o 611,725,15 2 0364 -- ocircumflex
-char244 "
-~o 611,705,15 2 0365 -- otilde
-char245 "
-:o 611,694,15 2 0366 -- odieresis
-char246 "
-char247 606,546,40 0 0367 -- divide
-/o 611,573,103 0 0370 -- oslash
-char248 "
-`u 685,737,15 2 0371 -- ugrave
-char249 "
-'u 685,737,15 2 0372 -- uacute
-char250 "
-^u 685,725,15 2 0373 -- ucircumflex
-char251 "
-:u 685,694,15 2 0374 -- udieresis
-char252 "
-'y 611,737,205 3 0375 -- yacute
-char253 "
-Tp 667,737,205 3 0376 -- thorn
-char254 "
-:y 611,694,205 3 0377 -- ydieresis
-char255 "
+/L 722,722,0,0,-19 2 0237 -- Lslash
+r! 296,547,205,0,-53 1 0241 -- exclamdown
+ct 574,572,102,0,-32 0 0242 -- cent
+Po 574,705,15,0,-16 2 0243 -- sterling
+Cs 574,605,0,0,-27 0 0244 -- currency
+Ye 574,690,0,10,10 2 0245 -- yen
+bb 606,675,175,0,-249 2 0246 -- brokenbar
+sc 500,737,86,0,-62 2 0247 -- section
+ad 333,694,0,12,12 2 0250 -- dieresis
+co 747,737,15,3,2 2 0251 -- copyright
+Of 367,705,0,26,-1 2 0252 -- ordfeminine
+fo 333,397,0,0,-62 0 0253 -- guilsinglleft
+no 606,403,0,0,-50 0 0254 -- logicalnot
+\- 606,307,0,0,-50 0 0255 -- minus
+rg 747,737,15,3,2 2 0256 -- registered
+a- 333,664,0,6,6 0 0257 -- macron
+de 400,705,0,0,-57 2 0260 -- degree
+t+- 606,506,0,0,-50 0 0261 -- plusminus
+S2 344,705,0,6,3 2 0262 -- twosuperior
+S3 344,705,0,11,3 2 0263 -- threesuperior
+aa 333,737,0,0,-84 2 0264 -- acute
+mc 685,475,205,0,-17 1 0265 -- mu
+ps 747,722,71,0,-96 2 0266 -- paragraph
+pc 278,372,0,0,-53 0 0267 -- periodcentered
+ac 333,0,224,0,-17 1 0270 -- cedilla
+S1 344,705,0,0,-31 2 0271 -- onesuperior
+Om 367,705,0,0,-1 2 0272 -- ordmasculine
+fc 333,397,0,0,-62 0 0273 -- guilsinglright
+14 861,705,15,0,-31 2 0274 -- onequarter
+12 861,705,15,0,-31 2 0275 -- onehalf
+34 861,705,15,0,-15 2 0276 -- threequarters
+r? 500,547,205,0,-23 1 0277 -- questiondown
+`A 759,964,0,19,19 2 0300 -- Agrave
+'A 759,964,0,19,19 2 0301 -- Aacute
+^A 759,952,0,19,19 2 0302 -- Acircumflex
+~A 759,932,0,19,19 2 0303 -- Atilde
+:A 759,921,0,19,19 2 0304 -- Adieresis
+oA 759,988,0,19,19 2 0305 -- Aring
+AE 981,722,0,0,29 2 0306 -- AE
+,C 778,737,224,0,-39 3 0307 -- Ccedilla
+`E 759,964,0,0,-19 2 0310 -- Egrave
+'E 759,964,0,0,-19 2 0311 -- Eacute
+^E 759,952,0,0,-19 2 0312 -- Ecircumflex
+:E 759,921,0,0,-19 2 0313 -- Edieresis
+`I 444,964,0,0,-29 2 0314 -- Igrave
+'I 444,964,0,0,-29 2 0315 -- Iacute
+^I 444,952,0,0,-29 2 0316 -- Icircumflex
+:I 444,921,0,0,-29 2 0317 -- Idieresis
+-D 833,722,0,0,-19 2 0320 -- Eth
+~N 833,932,10,0,-5 2 0321 -- Ntilde
+`O 833,964,15,0,-39 2 0322 -- Ograve
+'O 833,964,15,0,-39 2 0323 -- Oacute
+^O 833,952,15,0,-39 2 0324 -- Ocircumflex
+~O 833,932,15,0,-39 2 0325 -- Otilde
+:O 833,921,15,0,-39 2 0326 -- Odieresis
+tmu 606,491,0,0,-65 0 0327 -- multiply
+/O 833,775,53,0,-39 2 0330 -- Oslash
+`U 833,964,15,0,-14 2 0331 -- Ugrave
+'U 833,964,15,0,-14 2 0332 -- Uacute
+^U 833,952,15,0,-14 2 0333 -- Ucircumflex
+:U 833,921,15,0,-14 2 0334 -- Udieresis
+'Y 722,964,0,12,12 2 0335 -- Yacute
+TP 759,722,0,0,-24 2 0336 -- Thorn
+ss 611,737,15,0,2 2 0337 -- germandbls
+`a 611,737,15,0,-40 2 0340 -- agrave
+'a 611,737,15,0,-40 2 0341 -- aacute
+^a 611,725,15,0,-40 2 0342 -- acircumflex
+~a 611,705,15,0,-40 2 0343 -- atilde
+:a 611,694,15,0,-40 2 0344 -- adieresis
+oa 611,761,15,0,-40 2 0345 -- aring
+ae 870,485,15,0,-32 0 0346 -- ae
+,c 556,485,224,0,-32 1 0347 -- ccedilla
+`e 574,737,15,0,-32 2 0350 -- egrave
+'e 574,737,15,0,-32 2 0351 -- eacute
+^e 574,725,15,0,-32 2 0352 -- ecircumflex
+:e 574,694,15,0,-32 2 0353 -- edieresis
+`i 370,737,0,0,-21 2 0354 -- igrave
+'i 370,737,0,0,-26 2 0355 -- iacute
+^i 370,725,0,0,-9 2 0356 -- icircumflex
+:i 370,694,0,0,-7 2 0357 -- idieresis
+Sd 611,737,15,0,-32 2 0360 -- eth
+~n 685,705,0,0,-17 2 0361 -- ntilde
+`o 611,737,15,0,-32 2 0362 -- ograve
+'o 611,737,15,0,-32 2 0363 -- oacute
+^o 611,725,15,0,-32 2 0364 -- ocircumflex
+~o 611,705,15,0,-32 2 0365 -- otilde
+:o 611,694,15,0,-32 2 0366 -- odieresis
+tdi 606,546,40,0,-50 0 0367 -- divide
+/o 611,573,103,0,-32 0 0370 -- oslash
+`u 685,737,15,0,-17 2 0371 -- ugrave
+'u 685,737,15,0,-17 2 0372 -- uacute
+^u 685,725,15,0,-17 2 0373 -- ucircumflex
+:u 685,694,15,0,-17 2 0374 -- udieresis
+'y 611,737,205,0,-12 3 0375 -- yacute
+Tp 667,737,205,0,-17 3 0376 -- thorn
+:y 611,694,205,0,-12 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/NBI b/contrib/groff/font/devps/NBI
index 97e4f46..d6ecc03 100644
--- a/contrib/groff/font/devps/NBI
+++ b/contrib/groff/font/devps/NBI
@@ -85,7 +85,6 @@ T o -40
T i -22
T - -75
T hy -75
-T char173 -75
T h -9
T e -33
T , -55
@@ -102,7 +101,6 @@ V o -71
V i -35
V - -94
V hy -94
-V char173 -94
V e -66
V , -94
V : -49
@@ -118,7 +116,6 @@ W o -33
W i -27
W - -61
W hy -61
-W char173 -61
W h 5
W e -39
W , -86
@@ -133,7 +130,6 @@ Y o -77
Y i -22
Y - -91
Y hy -91
-Y char173 -91
Y e -71
Y , -91
Y : -55
@@ -232,7 +228,6 @@ r k 9
r i -14
r - -16
r hy -16
-r char173 -16
r g -11
r e -7
r d -7
@@ -286,7 +281,6 @@ cq "
, 287,157,192,0,107 0 0054 -- comma
- 333,299,0,0,48 0 0055 -- hyphen
hy "
-char173 "
. 287,157,15,0,70 0 0056 -- period
/ 278,737,15,92,91,92 2 0057 -- slash
sl "
@@ -381,9 +375,7 @@ a~ 333,690,0,115,22,109 2 0176 -- tilde
~ "
bq 259,157,192,0,107 0 0200 -- quotesinglbase
Fo 481,407,0,18,85,18 0 0201 -- guillemotleft
-char171 "
Fc 481,407,0,22,81,22 0 0202 -- guillemotright
-char187 "
bu 606,542,0,0,-72 0 0203 -- bullet
Fn 574,737,205,51,93,51 3 0204 -- florin
f/ 167,705,15,216,216,109 2 0205 -- fraction
@@ -410,185 +402,97 @@ Bq 481,157,192,0,107 0 0235 -- quotedblbase
OE 963,722,0,76,21,76 2 0236 -- OE
/L 704,722,0,16,91,16 2 0237 -- Lslash
r! 333,547,205,6,94,6 1 0241 -- exclamdown
-char161 "
ct 574,578,144,0,20 0 0242 -- cent
-char162 "
Po 574,705,15,42,68,42 2 0243 -- sterling
-char163 "
Cs 574,605,0,23,23,23 0 0244 -- currency
-char164 "
Ye 574,690,0,105,33,105 2 0245 -- yen
-char165 "
bb 606,675,175,0,-199 2 0246 -- brokenbar
-char166 "
sc 500,737,146,65,80,65 2 0247 -- section
-char167 "
ad 333,690,0,110,17,109 2 0250 -- dieresis
-char168 "
co 747,737,15,53,52,53 2 0251 -- copyright
-char169 "
Of 412,705,0,98,3,98 2 0252 -- ordfeminine
-char170 "
fo 278,407,0,16,75,16 0 0253 -- guilsinglleft
no 606,403 0 0254 -- logicalnot
-char172 "
\- 606,307 0 0255 -- minus
rg 747,737,15,53,52,53 2 0256 -- registered
-char174 "
a- 333,649,0,121,3,109 2 0257 -- macron
-char175 "
de 400,705,0,22,-36,22 2 0260 -- degree
-char176 "
-char177 606,506 0 0261 -- plusminus
+t+- 606,506 0 0261 -- plusminus
S2 344,705,0,68,67,68 2 0262 -- twosuperior
-char178 "
S3 344,705,0,67,47,67 2 0263 -- threesuperior
-char179 "
aa 333,722,0,89,-73,89 2 0264 -- acute
-char180 "
-char181 685,477,205,0,139 1 0265 -- mu
+mc 685,477,205,0,139 1 0265 -- mu
ps 650,722,131,81,25,81 2 0266 -- paragraph
-char182 "
pc 287,372,0,0,-7 0 0267 -- periodcentered
-char183 "
ac 333,3,220,0,71 1 0270 -- cedilla
-char184 "
S1 344,705,0,32,31,32 2 0271 -- onesuperior
-char185 "
Om 356,705,0,88,8,88 2 0272 -- ordmasculine
-char186 "
fc 278,407,0,15,76,15 0 0273 -- guilsinglright
14 861,705,15,0,33 2 0274 -- onequarter
-char188 "
12 861,705,15,0,33 2 0275 -- onehalf
-char189 "
34 861,705,15,0,15 2 0276 -- threequarters
-char190 "
r? 481,547,205,0,50 1 0277 -- questiondown
-char191 "
`A 741,947,0,25,125,25 2 0300 -- Agrave
-char192 "
'A 741,947,0,25,125,25 2 0301 -- Aacute
-char193 "
^A 741,930,0,25,125,25 2 0302 -- Acircumflex
-char194 "
~A 741,915,0,25,125,25 2 0303 -- Atilde
-char195 "
:A 741,915,0,25,125,25 2 0304 -- Adieresis
-char196 "
oA 741,991,0,25,125,25 2 0305 -- Aring
-char197 "
AE 889,722,0,76,136,76 2 0306 -- AE
-char198 "
,C 759,737,220,50,13,50 3 0307 -- Ccedilla
-char199 "
`E 741,947,0,39,91,39 2 0310 -- Egrave
-char200 "
'E 741,947,0,39,91,39 2 0311 -- Eacute
-char201 "
^E 741,930,0,39,91,39 2 0312 -- Ecircumflex
-char202 "
:E 741,915,0,39,91,39 2 0313 -- Edieresis
-char203 "
`I 444,947,0,91,91,91 2 0314 -- Igrave
-char204 "
'I 444,947,0,94,91,94 2 0315 -- Iacute
-char205 "
^I 444,930,0,91,91,91 2 0316 -- Icircumflex
-char206 "
:I 444,915,0,115,91,109 2 0317 -- Idieresis
-char207 "
-D 833,722,0,13,97,13 2 0320 -- Eth
-char208 "
~N 852,915,10,111,111,109 2 0321 -- Ntilde
-char209 "
`O 833,947,15,13,13,13 2 0322 -- Ograve
-char210 "
'O 833,947,15,13,13,13 2 0323 -- Oacute
-char211 "
^O 833,930,15,13,13,13 2 0324 -- Ocircumflex
-char212 "
~O 833,915,15,13,13,13 2 0325 -- Otilde
-char213 "
:O 833,915,15,13,13,13 2 0326 -- Odieresis
-char214 "
-char215 606,491,0,0,-15 0 0327 -- multiply
+tmu 606,491,0,0,-15 0 0327 -- multiply
/O 833,790,68,15,15,15 2 0330 -- Oslash
-char216 "
`U 833,947,15,117,-38,109 2 0331 -- Ugrave
-char217 "
'U 833,947,15,117,-38,109 2 0332 -- Uacute
-char218 "
^U 833,930,15,117,-38,109 2 0333 -- Ucircumflex
-char219 "
:U 833,915,15,117,-38,109 2 0334 -- Udieresis
-char220 "
'Y 704,947,0,121,37,109 2 0335 -- Yacute
-char221 "
TP 741,722,0,0,91 2 0336 -- Thorn
-char222 "
ss 574,737,205,16,141,16 3 0337 -- germandbls
-char223 "
`a 667,722,15,19,44,19 2 0340 -- agrave
-char224 "
'a 667,722,15,19,44,19 2 0341 -- aacute
-char225 "
^a 667,705,15,19,44,19 2 0342 -- acircumflex
-char226 "
~a 667,690,15,19,44,19 2 0343 -- atilde
-char227 "
:a 667,690,15,19,44,19 2 0344 -- adieresis
-char228 "
oa 667,746,15,19,44,19 2 0345 -- aring
-char229 "
ae 815,477,15,10,68,10 0 0346 -- ae
-char230 "
,c 537,477,220,0,50 1 0347 -- ccedilla
-char231 "
`e 519,722,15,10,50,10 2 0350 -- egrave
-char232 "
'e 519,722,15,10,50,10 2 0351 -- eacute
-char233 "
^e 519,705,15,10,50,10 2 0352 -- ecircumflex
-char234 "
:e 519,690,15,17,50,17 2 0353 -- edieresis
-char235 "
`i 389,715,15,6,18,6 2 0354 -- igrave
-char236 "
'i 389,715,15,31,18,31 2 0355 -- iacute
-char237 "
^i 389,698,15,24,29,24 2 0356 -- icircumflex
-char238 "
:i 389,683,15,52,19,52 2 0357 -- idieresis
-char239 "
Sd 574,752,15,6,50,6 2 0360 -- eth
-char240 "
~n 685,690,15,4,50,4 2 0361 -- ntilde
-char241 "
`o 574,722,15,6,50,6 2 0362 -- ograve
-char242 "
'o 574,722,15,6,50,6 2 0363 -- oacute
-char243 "
^o 574,705,15,6,50,6 2 0364 -- ocircumflex
-char244 "
~o 574,690,15,6,50,6 2 0365 -- otilde
-char245 "
:o 574,690,15,6,50,6 2 0366 -- odieresis
-char246 "
-char247 606,546,40 0 0367 -- divide
+tdi 606,546,40 0 0367 -- divide
/o 574,583,121,6,50,6 0 0370 -- oslash
-char248 "
`u 685,722,15,0,20 2 0371 -- ugrave
-char249 "
'u 685,722,15,0,20 2 0372 -- uacute
-char250 "
^u 685,705,15,0,20 2 0373 -- ucircumflex
-char251 "
:u 685,690,15,0,20 2 0374 -- udieresis
-char252 "
'y 519,722,205,24,116,24 3 0375 -- yacute
-char253 "
Tp 648,737,205,0,169 3 0376 -- thorn
-char254 "
:y 519,690,205,24,116,24 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/NI b/contrib/groff/font/devps/NI
index af7c79f..09aa5a4 100644
--- a/contrib/groff/font/devps/NI
+++ b/contrib/groff/font/devps/NI
@@ -87,7 +87,6 @@ T o -74
T i -18
T - -100
T hy -100
-T char173 -100
T h -25
T e -74
T , -100
@@ -104,7 +103,6 @@ V o -75
V i -50
V - -100
V hy -100
-V char173 -100
V e -75
V , -100
V : -75
@@ -118,7 +116,6 @@ W o -55
W i -20
W - -75
W hy -75
-W char173 -75
W h -20
W e -55
W , -100
@@ -132,7 +129,6 @@ Y o -100
Y i -25
Y - -100
Y hy -100
-Y char173 -100
Y e -100
Y , -100
Y : -75
@@ -187,7 +183,6 @@ r . -125
r k -18
r - -75
r hy -75
-r char173 -75
r , -125
r : -25
s . -50
@@ -227,7 +222,6 @@ cq "
, 278,109,165,0,89 0 0054 -- comma
- 333,274,0,0,18 0 0055 -- hyphen
hy "
-char173 "
. 278,109,15,0,33 0 0056 -- period
/ 606,737,15,0,-82 2 0057 -- slash
sl "
@@ -322,9 +316,7 @@ a~ 333,649,0,100,-2,100 2 0176 -- tilde
~ "
bq 204,109,165,0,128 0 0200 -- quotesinglbase
Fo 426,402,0,26,65,26 0 0201 -- guillemotleft
-char171 "
Fc 426,402,0,26,65,26 0 0202 -- guillemotright
-char187 "
bu 606,542,0,0,-72 0 0203 -- bullet
Fn 556,737,205,63,108,63 3 0204 -- florin
f/ 167,705,15,184,184,107 2 0205 -- fraction
@@ -351,185 +343,97 @@ Bq 389,109,165,0,128 0 0235 -- quotedblbase
OE 981,722,0,44,10,44 2 0236 -- OE
/L 667,722,0,10,83,10 2 0237 -- Lslash
r! 333,547,205,0,72 1 0241 -- exclamdown
-char161 "
ct 556,580,144,0,-12 0 0242 -- cent
-char162 "
Po 556,705,15,38,63,38 2 0243 -- sterling
-char163 "
Cs 556,597,0,24,24,24 0 0244 -- currency
-char164 "
Ye 556,690,0,118,10,107 2 0245 -- yen
-char165 "
bb 606,675,175,0,-217 2 0246 -- brokenbar
-char166 "
sc 500,737,147,30,60,30 2 0247 -- section
-char167 "
ad 333,646,0,76,-9,76 2 0250 -- dieresis
-char168 "
co 747,737,15,53,52,53 2 0251 -- copyright
-char169 "
Of 422,705,0,48,-22,48 2 0252 -- ordfeminine
-char170 "
fo 333,402,0,0,10 0 0253 -- guilsinglleft
no 606,389 0 0254 -- logicalnot
-char172 "
\- 606,289 0 0255 -- minus
rg 747,737,15,53,52,53 2 0256 -- registered
-char174 "
a- 333,610,0,80,-2,80 0 0257 -- macron
-char175 "
de 400,705,0,22,-36,22 2 0260 -- degree
-char176 "
-char177 606,506 0 0261 -- plusminus
+t+- 606,506 0 0261 -- plusminus
S2 333,705,0,76,50,76 2 0262 -- twosuperior
-char178 "
S3 333,705,0,76,28,76 2 0263 -- threesuperior
-char179 "
aa 333,690,0,72,-82,72 2 0264 -- acute
-char180 "
-char181 611,466,205,0,110 1 0265 -- mu
+mc 611,466,205,0,110 1 0265 -- mu
ps 650,722,132,65,2,65 2 0266 -- paragraph
-char182 "
pc 278,374,0,0,-21 0 0267 -- periodcentered
-char183 "
ac 333,0,215,0,47 1 0270 -- cedilla
-char184 "
S1 333,705,0,28,16,28 2 0271 -- onesuperior
-char185 "
Om 372,705,0,48,-16,48 2 0272 -- ordmasculine
-char186 "
fc 333,402,0,0,10 0 0273 -- guilsinglright
14 834,705,15,0,16 2 0274 -- onequarter
-char188 "
12 834,705,15,0,16 2 0275 -- onehalf
-char189 "
34 834,705,15,0,28 2 0276 -- threequarters
-char190 "
r? 444,547,205,0,53 1 0277 -- questiondown
-char191 "
`A 704,946,0,14,137,14 2 0300 -- Agrave
-char192 "
'A 704,946,0,14,137,14 2 0301 -- Aacute
-char193 "
^A 704,946,0,14,137,14 2 0302 -- Acircumflex
-char194 "
~A 704,905,0,14,137,14 2 0303 -- Atilde
-char195 "
:A 704,902,0,14,137,14 2 0304 -- Adieresis
-char196 "
oA 704,958,0,14,137,14 2 0305 -- Aring
-char197 "
AE 870,722,0,68,137,68 2 0306 -- AE
-char198 "
,C 722,737,215,40,10,40 3 0307 -- Ccedilla
-char199 "
`E 722,946,0,28,83,28 2 0310 -- Egrave
-char200 "
'E 722,946,0,28,83,28 2 0311 -- Eacute
-char201 "
^E 722,946,0,28,83,28 2 0312 -- Ecircumflex
-char202 "
:E 722,902,0,28,83,28 2 0313 -- Edieresis
-char203 "
`I 407,946,0,78,83,78 2 0314 -- Igrave
-char204 "
'I 407,946,0,95,83,95 2 0315 -- Iacute
-char205 "
^I 407,946,0,78,83,78 2 0316 -- Icircumflex
-char206 "
:I 407,902,0,99,83,99 2 0317 -- Idieresis
-char207 "
-D 778,722,0,10,83,10 2 0320 -- Eth
-char208 "
~N 815,905,15,101,101,101 2 0321 -- Ntilde
-char209 "
`O 778,946,15,10,10,10 2 0322 -- Ograve
-char210 "
'O 778,946,15,10,10,10 2 0323 -- Oacute
-char211 "
^O 778,946,15,10,10,10 2 0324 -- Ocircumflex
-char212 "
~O 778,905,15,10,10,10 2 0325 -- Otilde
-char213 "
:O 778,902,15,10,10,10 2 0326 -- Odieresis
-char214 "
-char215 606,482,0,0,-24 0 0327 -- multiply
+tmu 606,482,0,0,-24 0 0327 -- multiply
/O 778,780,68,20,34,20 2 0330 -- Oslash
-char216 "
`U 815,946,15,102,-43,102 2 0331 -- Ugrave
-char217 "
'U 815,946,15,102,-43,102 2 0332 -- Uacute
-char218 "
^U 815,946,15,102,-43,102 2 0333 -- Ucircumflex
-char219 "
:U 815,902,15,102,-43,102 2 0334 -- Udieresis
-char220 "
'Y 685,946,0,125,19,107 2 0335 -- Yacute
-char221 "
TP 667,722,0,10,83,10 2 0336 -- Thorn
-char222 "
ss 556,737,205,19,126,19 3 0337 -- germandbls
-char223 "
`a 574,690,15,0,48 2 0340 -- agrave
-char224 "
'a 574,690,15,0,48 2 0341 -- aacute
-char225 "
^a 574,690,15,0,48 2 0342 -- acircumflex
-char226 "
~a 574,649,15,0,48 2 0343 -- atilde
-char227 "
:a 574,646,15,0,48 2 0344 -- adieresis
-char228 "
oa 574,712,15,0,48 2 0345 -- aring
-char229 "
ae 722,466,15,0,68 0 0346 -- ae
-char230 "
,c 444,466,215,0,48 1 0347 -- ccedilla
-char231 "
`e 444,690,15,0,56 2 0350 -- egrave
-char232 "
'e 444,690,15,17,56,17 2 0351 -- eacute
-char233 "
^e 444,690,15,0,56 2 0352 -- ecircumflex
-char234 "
:e 444,646,15,21,56,21 2 0353 -- edieresis
-char235 "
`i 333,690,15,0,21 2 0354 -- igrave
-char236 "
'i 333,690,15,72,21,72 2 0355 -- iacute
-char237 "
^i 333,690,15,48,21,48 2 0356 -- icircumflex
-char238 "
:i 333,646,15,76,21,76 2 0357 -- idieresis
-char239 "
Sd 500,737,15,0,48 2 0360 -- eth
-char240 "
~n 611,649,15,1,36,1 2 0361 -- ntilde
-char241 "
`o 500,690,15,0,48 2 0362 -- ograve
-char242 "
'o 500,690,15,0,48 2 0363 -- oacute
-char243 "
^o 500,690,15,0,48 2 0364 -- ocircumflex
-char244 "
~o 500,649,15,17,48,17 2 0365 -- otilde
-char245 "
:o 500,646,15,0,48 2 0366 -- odieresis
-char246 "
-char247 606,528,22 0 0367 -- divide
+tdi 606,528,22 0 0367 -- divide
/o 500,549,121,0,48 0 0370 -- oslash
-char248 "
`u 611,690,15,0,6 2 0371 -- ugrave
-char249 "
'u 611,690,15,0,6 2 0372 -- uacute
-char250 "
^u 611,690,15,0,6 2 0373 -- ucircumflex
-char251 "
:u 611,646,15,0,6 2 0374 -- udieresis
-char252 "
'y 500,690,205,0,133 3 0375 -- yacute
-char253 "
Tp 574,737,205,0,151 3 0376 -- thorn
-char254 "
:y 500,646,205,0,133 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/NR b/contrib/groff/font/devps/NR
index b111f5d..7e148c8 100644
--- a/contrib/groff/font/devps/NR
+++ b/contrib/groff/font/devps/NR
@@ -75,7 +75,6 @@ T . -125
T o -55
T - -100
T hy -100
-T char173 -100
T e -55
T , -125
T : -37
@@ -92,7 +91,6 @@ V o -75
V i -18
V - -100
V hy -100
-V char173 -100
V e -75
V , -125
V : -75
@@ -107,7 +105,6 @@ W o -60
W i -18
W - -100
W hy -100
-W char173 -100
W e -60
W , -125
W : -100
@@ -120,7 +117,6 @@ Y o -100
Y i -18
Y - -125
Y hy -125
-Y char173 -125
Y e -100
Y , -100
Y : -75
@@ -174,7 +170,6 @@ cq d -37
r . -100
r - -37
r hy -37
-r char173 -37
r , -100
s . -25
s , -25
@@ -186,337 +181,246 @@ w a -18
y . -125
y , -125
charset
-ha 606,690 2 0000 -- asciicircum
-ti 606,322 0 0001 -- asciitilde
-vS 630,933,15 2 0002 -- Scaron
-vZ 611,933 2 0003 -- Zcaron
-vs 463,695,15 2 0004 -- scaron
-vz 481,695 2 0005 -- zcaron
-:Y 704,883 2 0006 -- Ydieresis
-tm 1000,722 2 0007 -- trademark
-aq 204,737 2 0010 -- quotesingle
+ha 606,690,0,0,-89 2 0000 -- asciicircum
+ti 606,322,0,0,-72 0 0001 -- asciitilde
+vS 630,933,15,0,-47 2 0002 -- Scaron
+vZ 611,933,0,0,-24 2 0003 -- Zcaron
+vs 463,695,15,0,-46 2 0004 -- scaron
+vz 481,695,0,0,-42 2 0005 -- zcaron
+:Y 704,883,0,11,11 2 0006 -- Ydieresis
+tm 1000,722,0,0,-32 2 0007 -- trademark
+aq 204,737,0,0,-59 2 0010 -- quotesingle
space 278 0 0040
-! 296,737,15 2 0041 -- exclam
-" 389,737 2 0042 -- quotedbl
+! 296,737,15,0,-86 2 0041 -- exclam
+" 389,737,0,0,-61 2 0042 -- quotedbl
dq "
-# 556,690 2 0043 -- numbersign
+# 556,690,0,0,-28 2 0043 -- numbersign
sh "
-$ 556,813,138 2 0044 -- dollar
+$ 556,813,138,0,-45 2 0044 -- dollar
Do "
-% 833,705,15 2 0045 -- percent
-& 815,737,15 2 0046 -- ampersand
-' 204,737 2 0047 -- quoteright
+% 833,705,15,0,-43 2 0045 -- percent
+& 815,737,15,0,-51 2 0046 -- ampersand
+' 204,737,0,0,-25 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
+( 333,745,117,0,-40 2 0050 -- parenleft
+) 333,745,117,0,-54 2 0051 -- parenright
+* 500,737,0,0,-57 2 0052 -- asterisk
++ 606,506,0,0,-50 0 0053 -- plus
+, 278,109,185,0,-62 0 0054 -- comma
+- 333,277,0,0,-42 0 0055 -- hyphen
hy "
-char173 "
-. 278,109,15 0 0056 -- period
-/ 278,737,15 2 0057 -- slash
+. 278,109,15,0,-77 0 0056 -- period
+/ 278,737,15,32,32 2 0057 -- slash
sl "
-0 556,705,15 2 0060 -- zero
-1 556,705 2 0061 -- one
-2 556,705 2 0062 -- two
-3 556,705,15 2 0063 -- three
-4 556,705 2 0064 -- four
-5 556,705,15 2 0065 -- five
-6 556,705,15 2 0066 -- six
-7 556,705,15 2 0067 -- seven
-8 556,705,15 2 0070 -- eight
-9 556,705,15 2 0071 -- nine
-: 278,474,15 0 0072 -- colon
-; 278,474,185 0 0073 -- semicolon
-< 606,514,8 0 0074 -- less
-= 606,389 0 0075 -- equal
-> 606,514,8 0 0076 -- greater
-? 444,737,15 2 0077 -- question
-@ 737,737,15 2 0100 -- at
+0 556,705,15,0,-42 2 0060 -- zero
+1 556,705,0,0,-100 2 0061 -- one
+2 556,705,0,0,-35 2 0062 -- two
+3 556,705,15,0,-42 2 0063 -- three
+4 556,705,0,0,-28 2 0064 -- four
+5 556,705,15,0,-46 2 0065 -- five
+6 556,705,15,0,-41 2 0066 -- six
+7 556,705,15,0,-59 2 0067 -- seven
+8 556,705,15,0,-42 2 0070 -- eight
+9 556,705,15,0,-41 2 0071 -- nine
+: 278,474,15,0,-77 0 0072 -- colon
+; 278,474,185,0,-62 0 0073 -- semicolon
+< 606,514,8,0,-50 0 0074 -- less
+= 606,389,0,0,-50 0 0075 -- equal
+> 606,514,8,0,-50 0 0076 -- greater
+? 444,737,15,0,-29 2 0077 -- question
+@ 737,737,15,7,8 2 0100 -- at
at "
-A 722,737 2 0101 -- A
-B 722,722 2 0102 -- B
-C 722,737,15 2 0103 -- C
-D 778,722 2 0104 -- D
-E 722,722 2 0105 -- E
-F 667,722 2 0106 -- F
-G 778,737,15 2 0107 -- G
-H 833,722 2 0110 -- H
-I 407,722 2 0111 -- I
-J 556,722,15 2 0112 -- J
-K 778,722 2 0113 -- K
-L 667,722 2 0114 -- L
-M 944,722 2 0115 -- M
-N 815,722,15 2 0116 -- N
-O 778,737,15 2 0117 -- O
-P 667,722 2 0120 -- P
-Q 778,737,190 2 0121 -- Q
-R 722,722,15 2 0122 -- R
-S 630,737,15 2 0123 -- S
-T 667,722 2 0124 -- T
-U 815,722,15 2 0125 -- U
-V 722,722,10 2 0126 -- V
-W 981,722,10 2 0127 -- W
-X 704,722 2 0130 -- X
-Y 704,722 2 0131 -- Y
-Z 611,722 2 0132 -- Z
-[ 333,737,109 2 0133 -- bracketleft
+A 722,737,0,8,8 2 0101 -- A
+B 722,722,0,0,-29 2 0102 -- B
+C 722,737,15,0,-45 2 0103 -- C
+D 778,722,0,0,-29 2 0104 -- D
+E 722,722,0,0,-29 2 0105 -- E
+F 667,722,0,0,-29 2 0106 -- F
+G 778,737,15,0,-45 2 0107 -- G
+H 833,722,0,0,-29 2 0110 -- H
+I 407,722,0,0,-38 2 0111 -- I
+J 556,722,15,0,-5 2 0112 -- J
+K 778,722,0,25,-29 2 0113 -- K
+L 667,722,0,0,-29 2 0114 -- L
+M 944,722,0,0,-29 2 0115 -- M
+N 815,722,15,0,-24 2 0116 -- N
+O 778,737,15,0,-45 2 0117 -- O
+P 667,722,0,0,-29 2 0120 -- P
+Q 778,737,190,0,-45 2 0121 -- Q
+R 722,722,15,0,-29 2 0122 -- R
+S 630,737,15,0,-47 2 0123 -- S
+T 667,722,0,0,-19 2 0124 -- T
+U 815,722,15,0,-16 2 0125 -- U
+V 722,722,10,8,8 2 0126 -- V
+W 981,722,10,0,-5 2 0127 -- W
+X 704,722,0,8,8 2 0130 -- X
+Y 704,722,0,11,11 2 0131 -- Y
+Z 611,722,0,0,-24 2 0132 -- Z
+[ 333,737,109,0,-126 2 0133 -- bracketleft
lB "
-\ 606,737,15 2 0134 -- backslash
+\ 606,737,15,0,-132 2 0134 -- backslash
rs "
-] 333,737,109 2 0135 -- bracketright
+] 333,737,109,0,-18 2 0135 -- bracketright
rB "
-a^ 333,695 2 0136 -- circumflex
+a^ 333,695,0,0,-10 2 0136 -- circumflex
^ "
_ 500,0,125 0 0137 -- underscore
-` 204,737 2 0140 -- quoteleft
+` 204,737,0,0,-25 2 0140 -- quoteleft
oq "
-a 556,479,15 0 0141 -- a
-b 556,737,15 2 0142 -- b
-c 444,479,15 0 0143 -- c
-d 574,737,15 2 0144 -- d
-e 500,479,15 0 0145 -- e
-f 333,737 2 0146 -- f
-g 537,494,205 1 0147 -- g
-h 611,737 2 0150 -- h
-i 315,722 2 0151 -- i
-j 296,722,205 3 0152 -- j
-k 593,737 2 0153 -- k
-l 315,737 2 0154 -- l
-m 889,479 0 0155 -- m
-n 611,479 0 0156 -- n
-o 500,479,15 0 0157 -- o
-p 574,479,205 1 0160 -- p
-q 556,479,205 1 0161 -- q
-r 444,479 0 0162 -- r
-s 463,479,15 0 0163 -- s
-t 389,666,15 2 0164 -- t
-u 611,464,15 0 0165 -- u
-v 537,464,10 0 0166 -- v
-w 778,464,10 0 0167 -- w
-x 537,464 0 0170 -- x
-y 537,464,205 1 0171 -- y
-z 481,464 0 0172 -- z
-lC 333,737,109 2 0173 -- braceleft
+a 556,479,15,0,-44 0 0141 -- a
+b 556,737,15,0,-10 2 0142 -- b
+c 444,479,15,0,-34 0 0143 -- c
+d 574,737,15,0,-34 2 0144 -- d
+e 500,479,15,0,-34 0 0145 -- e
+f 333,737,0,104,-18 2 0146 -- f
+g 537,494,205,5,-23 1 0147 -- g
+h 611,737,0,0,-7 2 0150 -- h
+i 315,722,0,0,-18 2 0151 -- i
+j 296,722,205,0,86 3 0152 -- j
+k 593,737,0,0,-10 2 0153 -- k
+l 315,737,0,0,-18 2 0154 -- l
+m 889,479,0,0,-26 0 0155 -- m
+n 611,479,0,0,-22 0 0156 -- n
+o 500,479,15,0,-34 0 0157 -- o
+p 574,479,205,0,-22 1 0160 -- p
+q 556,479,205,0,-34 1 0161 -- q
+r 444,479,0,0,-18 0 0162 -- r
+s 463,479,15,0,-46 0 0163 -- s
+t 389,666,15,0,-18 2 0164 -- t
+u 611,464,15,0,-22 0 0165 -- u
+v 537,464,10,0,6 0 0166 -- v
+w 778,464,10,0,-1 0 0167 -- w
+x 537,464,0,0,-8 0 0170 -- x
+y 537,464,205,0,-4 1 0171 -- y
+z 481,464,0,0,-42 0 0172 -- z
+lC 333,737,109,0,-54 2 0173 -- braceleft
{ "
-ba 606,750,250 3 0174 -- bar
+ba 606,750,250,0,-267 3 0174 -- bar
| "
-rC 333,737,109 2 0175 -- braceright
+rC 333,737,109,0,-54 2 0175 -- braceright
} "
-a~ 333,655 0 0176 -- tilde
+a~ 333,655,0,0,-1 0 0176 -- tilde
~ "
-bq 204,109,185 0 0200 -- quotesinglbase
-Fo 426,398 0 0201 -- guillemotleft
-char171 "
-Fc 426,398 0 0202 -- guillemotright
-char187 "
-bu 606,542 0 0203 -- bullet
+bq 204,109,185,0,-25 0 0200 -- quotesinglbase
+Fo 426,398,0,0,-39 0 0201 -- guillemotleft
+Fc 426,398,0,0,-39 0 0202 -- guillemotright
+bu 606,542,0,0,-122 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
+f/ 167,705,15,195,195 2 0205 -- fraction
+%0 1000,705,15,0,-6 2 0206 -- perthousand
+dg 500,737,147,0,-42 2 0207 -- dagger
+dd 500,737,149,0,-42 2 0210 -- daggerdbl
en 556,268 0 0211 -- endash
em 1000,268 0 0212 -- emdash
-fi 611,737 2 0214 -- fi
-fl 611,737 2 0215 -- fl
-.i 315,464 0 0220 -- dotlessi
-ga 333,699 2 0222 -- grave
-a" 333,699 2 0223 -- hungarumlaut
-a. 333,645 0 0224 -- dotaccent
-ab 333,685 2 0225 -- breve
-ah 333,695 2 0226 -- caron
-ao 333,722 2 0227 -- ring
-ho 333,0,215 1 0230 -- ogonek
-lq 389,737 2 0231 -- quotedblleft
-rq 389,737 2 0232 -- quotedblright
-oe 833,479,15 0 0233 -- oe
-/l 315,737 2 0234 -- lslash
-Bq 389,109,185 0 0235 -- quotedblbase
-OE 1000,722 2 0236 -- OE
-/L 667,722 2 0237 -- Lslash
-r! 296,547,205 1 0241 -- exclamdown
-char161 "
-ct 556,584,141 0 0242 -- cent
-char162 "
-Po 556,705,15 2 0243 -- sterling
-char163 "
-Cs 556,597 0 0244 -- currency
-char164 "
-Ye 556,690 2 0245 -- yen
-char165 "
-bb 606,675,175 2 0246 -- brokenbar
-char166 "
-sc 500,737,147 2 0247 -- section
-char167 "
-ad 333,645 0 0250 -- dieresis
-char168 "
-co 737,737,15 2 0251 -- copyright
-char169 "
-Of 334,705 2 0252 -- ordfeminine
-char170 "
-fo 259,398 0 0253 -- guilsinglleft
-no 606,389 0 0254 -- logicalnot
-char172 "
-\- 606,289 0 0255 -- minus
-rg 737,737,15 2 0256 -- registered
-char174 "
-a- 333,623 0 0257 -- macron
-char175 "
-de 400,705 2 0260 -- degree
-char176 "
-char177 606,506 0 0261 -- plusminus
-S2 333,705 2 0262 -- twosuperior
-char178 "
-S3 333,705 2 0263 -- threesuperior
-char179 "
-aa 333,699 2 0264 -- acute
-char180 "
-char181 611,464,205 1 0265 -- mu
-ps 606,722,132 2 0266 -- paragraph
-char182 "
-pc 278,374 0 0267 -- periodcentered
-char183 "
-ac 333,0,215 1 0270 -- cedilla
-char184 "
-S1 333,705 2 0271 -- onesuperior
-char185 "
-Om 300,705 2 0272 -- ordmasculine
-char186 "
-fc 259,398 0 0273 -- guilsinglright
-14 834,705,15 2 0274 -- onequarter
-char188 "
-12 834,705,15 2 0275 -- onehalf
-char189 "
-34 834,705,15 2 0276 -- threequarters
-char190 "
-r? 444,547,205 1 0277 -- questiondown
-char191 "
-`A 722,937 2 0300 -- Agrave
-char192 "
-'A 722,937 2 0301 -- Aacute
-char193 "
-^A 722,933 2 0302 -- Acircumflex
-char194 "
-~A 722,893 2 0303 -- Atilde
-char195 "
-:A 722,883 2 0304 -- Adieresis
-char196 "
-oA 722,965 2 0305 -- Aring
-char197 "
+fi 611,737,0,0,-18 2 0214 -- fi
+fl 611,737,0,0,-18 2 0215 -- fl
+.i 315,464,0,0,-18 0 0220 -- dotlessi
+ga 333,699,0,0,-17 2 0222 -- grave
+a" 333,699,0,83,9 2 0223 -- hungarumlaut
+a. 333,645,0,0,-116 0 0224 -- dotaccent
+ab 333,685,0,0,-25 2 0225 -- breve
+ah 333,695,0,0,-10 2 0226 -- caron
+ao 333,722,0,0,-66 2 0227 -- ring
+ho 333,0,215,0,-68 1 0230 -- ogonek
+lq 389,737,0,0,-25 2 0231 -- quotedblleft
+rq 389,737,0,0,-25 2 0232 -- quotedblright
+oe 833,479,15,0,-34 0 0233 -- oe
+/l 315,737,0,0,-18 2 0234 -- lslash
+Bq 389,109,185,0,-25 0 0235 -- quotedblbase
+OE 1000,722,0,0,-21 2 0236 -- OE
+/L 667,722,0,0,-29 2 0237 -- Lslash
+r! 296,547,205,0,-86 1 0241 -- exclamdown
+ct 556,584,141,0,-74 0 0242 -- cent
+Po 556,705,15,0,-18 2 0243 -- sterling
+Cs 556,597,0,0,-26 0 0244 -- currency
+Ye 556,690,0,1,1 2 0245 -- yen
+bb 606,675,175,0,-267 2 0246 -- brokenbar
+sc 500,737,147,0,-55 2 0247 -- section
+ad 333,645,0,0,-16 0 0250 -- dieresis
+co 737,737,15,7,8 2 0251 -- copyright
+Of 334,705,0,4,4 2 0252 -- ordfeminine
+fo 259,398,0,0,-39 0 0253 -- guilsinglleft
+no 606,389,0,0,-50 0 0254 -- logicalnot
+\- 606,289,0,0,-50 0 0255 -- minus
+rg 737,737,15,7,8 2 0256 -- registered
+a- 333,623,0,0,-10 0 0257 -- macron
+de 400,705,0,0,-57 2 0260 -- degree
+t+- 606,506,0,0,-50 0 0261 -- plusminus
+S2 333,705,0,0,-14 2 0262 -- twosuperior
+S3 333,705,0,0,-18 2 0263 -- threesuperior
+aa 333,699,0,0,-91 2 0264 -- acute
+mc 611,464,205,0,-22 1 0265 -- mu
+ps 606,722,132,0,-60 2 0266 -- paragraph
+pc 278,374,0,0,-71 0 0267 -- periodcentered
+ac 333,0,215,0,-29 1 0270 -- cedilla
+S1 333,705,0,0,-39 2 0271 -- onesuperior
+Om 300,705,0,0,-4 2 0272 -- ordmasculine
+fc 259,398,0,0,-39 0 0273 -- guilsinglright
+14 834,705,15,0,-39 2 0274 -- onequarter
+12 834,705,15,0,-39 2 0275 -- onehalf
+34 834,705,15,0,-28 2 0276 -- threequarters
+r? 444,547,205,0,-29 1 0277 -- questiondown
+`A 722,937,0,8,8 2 0300 -- Agrave
+'A 722,937,0,8,8 2 0301 -- Aacute
+^A 722,933,0,8,8 2 0302 -- Acircumflex
+~A 722,893,0,8,8 2 0303 -- Atilde
+:A 722,883,0,8,8 2 0304 -- Adieresis
+oA 722,965,0,8,8 2 0305 -- Aring
AE 1000,722 2 0306 -- AE
-char198 "
-,C 722,737,215 3 0307 -- Ccedilla
-char199 "
-`E 722,937 2 0310 -- Egrave
-char200 "
-'E 722,937 2 0311 -- Eacute
-char201 "
-^E 722,933 2 0312 -- Ecircumflex
-char202 "
-:E 722,883 2 0313 -- Edieresis
-char203 "
-`I 407,937 2 0314 -- Igrave
-char204 "
-'I 407,937 2 0315 -- Iacute
-char205 "
-^I 407,933 2 0316 -- Icircumflex
-char206 "
-:I 407,883 2 0317 -- Idieresis
-char207 "
--D 778,722 2 0320 -- Eth
-char208 "
-~N 815,893,15 2 0321 -- Ntilde
-char209 "
-`O 778,937,15 2 0322 -- Ograve
-char210 "
-'O 778,937,15 2 0323 -- Oacute
-char211 "
-^O 778,933,15 2 0324 -- Ocircumflex
-char212 "
-~O 778,893,15 2 0325 -- Otilde
-char213 "
-:O 778,883,15 2 0326 -- Odieresis
-char214 "
-char215 606,482 0 0327 -- multiply
-/O 778,778,56 2 0330 -- Oslash
-char216 "
-`U 815,937,15 2 0331 -- Ugrave
-char217 "
-'U 815,937,15 2 0332 -- Uacute
-char218 "
-^U 815,933,15 2 0333 -- Ucircumflex
-char219 "
-:U 815,883,15 2 0334 -- Udieresis
-char220 "
-'Y 704,937 2 0335 -- Yacute
-char221 "
-TP 667,722 2 0336 -- Thorn
-char222 "
-ss 574,737,15 2 0337 -- germandbls
-char223 "
-`a 556,699,15 2 0340 -- agrave
-char224 "
-'a 556,699,15 2 0341 -- aacute
-char225 "
-^a 556,695,15 2 0342 -- acircumflex
-char226 "
-~a 556,655,15 0 0343 -- atilde
-char227 "
-:a 556,645,15 0 0344 -- adieresis
-char228 "
-oa 556,732,15 2 0345 -- aring
-char229 "
-ae 796,479,15 0 0346 -- ae
-char230 "
-,c 444,479,215 1 0347 -- ccedilla
-char231 "
-`e 500,699,15 2 0350 -- egrave
-char232 "
-'e 500,699,15 2 0351 -- eacute
-char233 "
-^e 500,695,15 2 0352 -- ecircumflex
-char234 "
-:e 500,645,15 0 0353 -- edieresis
-char235 "
-`i 315,699 2 0354 -- igrave
-char236 "
-'i 315,699 2 0355 -- iacute
-char237 "
-^i 315,695 2 0356 -- icircumflex
-char238 "
-:i 315,645 0 0357 -- idieresis
-char239 "
-Sd 500,752,15 2 0360 -- eth
-char240 "
-~n 611,655 0 0361 -- ntilde
-char241 "
-`o 500,699,15 2 0362 -- ograve
-char242 "
-'o 500,699,15 2 0363 -- oacute
-char243 "
-^o 500,695,15 2 0364 -- ocircumflex
-char244 "
-~o 500,655,15 0 0365 -- otilde
-char245 "
-:o 500,645,15 0 0366 -- odieresis
-char246 "
-char247 606,528,22 0 0367 -- divide
-/o 500,561,97 0 0370 -- oslash
-char248 "
-`u 611,699,15 2 0371 -- ugrave
-char249 "
-'u 611,699,15 2 0372 -- uacute
-char250 "
-^u 611,695,15 2 0373 -- ucircumflex
-char251 "
-:u 611,645,15 0 0374 -- udieresis
-char252 "
-'y 537,699,205 3 0375 -- yacute
-char253 "
-Tp 574,737,205 3 0376 -- thorn
-char254 "
-:y 537,645,205 1 0377 -- ydieresis
-char255 "
+,C 722,737,215,0,-45 3 0307 -- Ccedilla
+`E 722,937,0,0,-29 2 0310 -- Egrave
+'E 722,937,0,0,-29 2 0311 -- Eacute
+^E 722,933,0,0,-29 2 0312 -- Ecircumflex
+:E 722,883,0,0,-29 2 0313 -- Edieresis
+`I 407,937,0,0,-38 2 0314 -- Igrave
+'I 407,937,0,0,-38 2 0315 -- Iacute
+^I 407,933,0,0,-38 2 0316 -- Icircumflex
+:I 407,883,0,0,-38 2 0317 -- Idieresis
+-D 778,722,0,0,-29 2 0320 -- Eth
+~N 815,893,15,0,-24 2 0321 -- Ntilde
+`O 778,937,15,0,-45 2 0322 -- Ograve
+'O 778,937,15,0,-45 2 0323 -- Oacute
+^O 778,933,15,0,-45 2 0324 -- Ocircumflex
+~O 778,893,15,0,-45 2 0325 -- Otilde
+:O 778,883,15,0,-45 2 0326 -- Odieresis
+tmu 606,482,0,0,-74 0 0327 -- multiply
+/O 778,778,56,0,-45 2 0330 -- Oslash
+`U 815,937,15,0,-16 2 0331 -- Ugrave
+'U 815,937,15,0,-16 2 0332 -- Uacute
+^U 815,933,15,0,-16 2 0333 -- Ucircumflex
+:U 815,883,15,0,-16 2 0334 -- Udieresis
+'Y 704,937,0,11,11 2 0335 -- Yacute
+TP 667,722,0,0,-29 2 0336 -- Thorn
+ss 574,737,15,0,-30 2 0337 -- germandbls
+`a 556,699,15,0,-44 2 0340 -- agrave
+'a 556,699,15,0,-44 2 0341 -- aacute
+^a 556,695,15,0,-44 2 0342 -- acircumflex
+~a 556,655,15,0,-44 0 0343 -- atilde
+:a 556,645,15,0,-44 0 0344 -- adieresis
+oa 556,732,15,0,-44 2 0345 -- aring
+ae 796,479,15,0,-34 0 0346 -- ae
+,c 444,479,215,0,-34 1 0347 -- ccedilla
+`e 500,699,15,0,-34 2 0350 -- egrave
+'e 500,699,15,0,-34 2 0351 -- eacute
+^e 500,695,15,0,-34 2 0352 -- ecircumflex
+:e 500,645,15,0,-34 0 0353 -- edieresis
+`i 315,699,0,0,-8 2 0354 -- igrave
+'i 315,699,0,0,-18 2 0355 -- iacute
+^i 315,695,0,0,-1 2 0356 -- icircumflex
+:i 315,645,0,0,-7 0 0357 -- idieresis
+Sd 500,752,15,0,-34 2 0360 -- eth
+~n 611,655,0,0,-22 0 0361 -- ntilde
+`o 500,699,15,0,-34 2 0362 -- ograve
+'o 500,699,15,0,-34 2 0363 -- oacute
+^o 500,695,15,0,-34 2 0364 -- ocircumflex
+~o 500,655,15,0,-34 0 0365 -- otilde
+:o 500,645,15,0,-34 0 0366 -- odieresis
+tdi 606,528,22,0,-50 0 0367 -- divide
+/o 500,561,97,0,-34 0 0370 -- oslash
+`u 611,699,15,0,-22 2 0371 -- ugrave
+'u 611,699,15,0,-22 2 0372 -- uacute
+^u 611,695,15,0,-22 2 0373 -- ucircumflex
+:u 611,645,15,0,-22 0 0374 -- udieresis
+'y 537,699,205,0,-4 3 0375 -- yacute
+Tp 574,737,205,0,-22 3 0376 -- thorn
+:y 537,645,205,0,-4 1 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/PB b/contrib/groff/font/devps/PB
index 0f327d3..cd1a5c1 100644
--- a/contrib/groff/font/devps/PB
+++ b/contrib/groff/font/devps/PB
@@ -42,7 +42,6 @@ T o -111
T i -55
T - -92
T hy -92
-T char173 -92
T e -111
T , -92
T : -74
@@ -58,7 +57,6 @@ V o -111
V i -55
V - -92
V hy -92
-V char173 -92
V e -111
V , -129
V : -74
@@ -73,7 +71,6 @@ W o -74
W i -37
W - -37
W hy -37
-W char173 -37
W e -74
W , -92
W : -37
@@ -89,7 +86,6 @@ Y o -74
Y i -55
Y - -74
Y hy -74
-Y char173 -74
Y e -74
Y , -74
Y : -55
@@ -116,7 +112,6 @@ r cq 55
r . -55
r - -18
r hy -18
-r char173 -18
r , -55
v . -111
v , -111
@@ -125,337 +120,246 @@ 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,0,0,-52 2 0000 -- asciicircum
+ti 606,342,0,0,-51 0 0001 -- asciitilde
+vS 611,909,17,0,-57 2 0002 -- Scaron
+vZ 667,909,3,0,-24 2 0003 -- Zcaron
+vs 444,693,17,0,-39 2 0004 -- scaron
+vz 500,693,3,0,-16 2 0005 -- zcaron
+:Y 667,895,3,0,-15 2 0006 -- Ydieresis
+tm 998,678,0,0,-38 2 0007 -- trademark
+aq 227,695,0,0,-45 2 0010 -- quotesingle
space 250 0 0040
-! 278,688,12 2 0041 -- exclam
-" 402,695 2 0042 -- quotedbl
+! 278,688,12,0,-63 2 0041 -- exclam
+" 402,695,0,0,-22 2 0042 -- quotedbl
dq "
-# 500,673 2 0043 -- numbersign
+# 500,673,0,0,-4 2 0043 -- numbersign
sh "
-$ 500,721,114 2 0044 -- dollar
+$ 500,721,114,0,-28 2 0044 -- dollar
Do "
-% 889,714,9 2 0045 -- percent
-& 833,684,17 2 0046 -- ampersand
-' 278,695 2 0047 -- quoteright
+% 889,714,9,0,-61 2 0045 -- percent
+& 833,684,17,0,-52 2 0046 -- ampersand
+' 278,695,0,0,-29 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
+( 333,723,104,0,-65 2 0050 -- parenleft
+) 333,723,104,0,-28 2 0051 -- parenright
+* 444,695,0,0,-44 2 0052 -- asterisk
++ 606,505,0,0,-51 0 0053 -- plus
+, 250,141,166,0,6 0 0054 -- comma
+- 333,305,0,0,-16 0 0055 -- hyphen
hy "
-char173 "
-. 250,144,12 0 0056 -- period
-/ 296,720,17 2 0057 -- slash
+. 250,144,12,0,-47 0 0056 -- period
+/ 296,720,17,9,9 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,0,-33 2 0060 -- zero
+1 500,670,3,0,-35 2 0061 -- one
+2 500,660,3,0,-25 2 0062 -- two
+3 500,660,17,0,-22 2 0063 -- three
+4 500,672,3,0,-12 2 0064 -- four
+5 500,656,17,0,-42 2 0065 -- five
+6 500,660,17,0,-37 2 0066 -- six
+7 500,656,3,0,-46 2 0067 -- seven
+8 500,660,17,0,-34 2 0070 -- eight
+9 500,660,17,0,-31 2 0071 -- nine
+: 250,454,12,0,-47 0 0072 -- colon
+; 250,454,166,0,6 0 0073 -- semicolon
+< 606,519,15,0,-49 0 0074 -- less
+= 606,396,0,0,-51 0 0075 -- equal
+> 606,519,15,0,-49 0 0076 -- greater
+? 444,687,12,0,-43 2 0077 -- question
+@ 747,681,12,0,-42 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,0,-24 2 0101 -- A
+B 667,681,3,0,-39 2 0102 -- B
+C 722,695,17,0,-44 2 0103 -- C
+D 833,681,3,0,-35 2 0104 -- D
+E 611,681,4,0,-39 2 0105 -- E
+F 556,681,3,0,-28 2 0106 -- F
+G 833,695,17,0,-47 2 0107 -- G
+H 833,681,3,0,-36 2 0110 -- H
+I 389,681,3,0,-39 2 0111 -- I
+J 389,681,213,0,11 2 0112 -- J
+K 778,681,3,0,-39 2 0113 -- K
+L 611,681,4,0,-39 2 0114 -- L
+M 1000,681,10,0,-32 2 0115 -- M
+N 833,681,16,0,-35 2 0116 -- N
+O 833,695,17,0,-47 2 0117 -- O
+P 611,681,3,0,-39 2 0120 -- P
+Q 833,695,184,0,-47 2 0121 -- Q
+R 722,681,3,0,-39 2 0122 -- R
+S 611,695,17,0,-57 2 0123 -- S
+T 667,681,3,0,-17 2 0124 -- T
+U 778,681,17,0,-26 2 0125 -- U
+V 778,681,3,0,-20 2 0126 -- V
+W 1000,686,3,0,-17 2 0127 -- W
+X 667,695,3,0,-17 2 0130 -- X
+Y 667,695,3,0,-15 2 0131 -- Y
+Z 667,681,3,0,-24 2 0132 -- Z
+[ 333,720,104,0,-73 2 0133 -- bracketleft
lB "
-\ 606,720 2 0134 -- backslash
+\ 606,720,0,0,-72 2 0134 -- backslash
rs "
-] 333,720,104 2 0135 -- bracketright
+] 333,720,104,0,-42 2 0135 -- bracketright
rB "
-a^ 333,681 2 0136 -- circumflex
+a^ 333,681,0,2,2 2 0136 -- circumflex
^ "
_ 500,0,125 0 0137 -- underscore
-` 278,695 2 0140 -- quoteleft
+` 278,695,0,0,-29 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,-40 0 0141 -- a
+b 611,720,17,0,-10 2 0142 -- b
+c 444,471,17,0,-37 0 0143 -- c
+d 611,720,17,0,-42 2 0144 -- d
+e 500,471,17,0,-42 0 0145 -- e
+f 389,720,3,0,-34 2 0146 -- f
+g 556,471,266,0,-26 1 0147 -- g
+h 611,720,3,0,-24 2 0150 -- h
+i 333,706,3,0,-34 2 0151 -- i
+j 333,706,266,0,-3 3 0152 -- j
+k 611,720,3,0,-21 2 0153 -- k
+l 333,720,3,0,-24 2 0154 -- l
+m 889,471,3,0,-24 0 0155 -- m
+n 611,471,3,0,-24 0 0156 -- n
+o 556,471,17,0,-40 0 0157 -- o
+p 611,471,258,0,-29 1 0160 -- p
+q 611,471,258,0,-52 1 0161 -- q
+r 389,471,3,0,-30 0 0162 -- r
+s 444,471,17,0,-39 0 0163 -- s
+t 333,632,17,0,-22 2 0164 -- t
+u 611,471,17,0,-25 0 0165 -- u
+v 556,459,3,0,-11 0 0166 -- v
+w 833,471,3,0,-13 0 0167 -- w
+x 500,471,3,0,-20 0 0170 -- x
+y 556,459,266,0,-10 1 0171 -- y
+z 500,459,3,0,-16 0 0172 -- z
+lC 310,725,117,0,-5 2 0173 -- braceleft
{ "
-ba 606,720 2 0174 -- bar
+ba 606,720,0,0,-260 2 0174 -- bar
| "
-rC 310,725,117 2 0175 -- braceright
+rC 310,725,117,0,-22 2 0175 -- braceright
} "
-a~ 333,661 2 0176 -- tilde
+a~ 333,661,0,16,16 2 0176 -- tilde
~ "
-bq 333,130,160 0 0200 -- quotesinglbase
-Fo 500,438 0 0201 -- guillemotleft
-char171 "
-Fc 500,438 0 0202 -- guillemotright
-char187 "
-bu 606,516 0 0203 -- bullet
-Fn 500,703,242 2 0204 -- florin
-f/ 167,660 2 0205 -- fraction
-%0 1000,724,9 2 0206 -- perthousand
-dg 500,682,6 2 0207 -- dagger
-dd 500,682,245 2 0210 -- daggerdbl
+bq 333,130,160,0,-56 0 0200 -- quotesinglbase
+Fo 500,438,0,0,-36 0 0201 -- guillemotleft
+Fc 500,438,0,0,-37 0 0202 -- guillemotright
+bu 606,516,0,0,-131 0 0203 -- bullet
+Fn 500,703,242,0,-11 2 0204 -- florin
+f/ 167,660,0,153,152 2 0205 -- fraction
+%0 1000,724,9,0,-33 2 0206 -- perthousand
+dg 500,682,6,0,-29 2 0207 -- dagger
+dd 500,682,245,0,-32 2 0210 -- daggerdbl
en 500,291 0 0211 -- endash
em 1000,291 0 0212 -- emdash
-fi 611,720,3 2 0214 -- fi
-fl 611,720,3 2 0215 -- fl
-.i 333,471,3 0 0220 -- dotlessi
-ga 333,691 2 0222 -- grave
-a" 333,691 2 0223 -- hungarumlaut
-a. 333,671 2 0224 -- dotaccent
-ab 333,669 2 0225 -- breve
-ah 333,685 2 0226 -- caron
-ao 333,700 2 0227 -- ring
-ho 333,0,246 0 0230 -- ogonek
-lq 500,695 2 0231 -- quotedblleft
-rq 500,695 2 0232 -- quotedblright
-oe 833,471,17 0 0233 -- oe
-/l 333,720,3 2 0234 -- lslash
-Bq 500,130,160 0 0235 -- quotedblbase
-OE 1000,695,17 2 0236 -- OE
-/L 611,681,4 2 0237 -- Lslash
-r! 278,471,227 0 0241 -- exclamdown
-char161 "
-ct 500,554,106 0 0242 -- cent
-char162 "
-Po 500,676,19 2 0243 -- sterling
-char163 "
-Cs 500,533 0 0244 -- currency
-char164 "
-Ye 500,695,3 2 0245 -- yen
-char165 "
-bb 606,720 2 0246 -- brokenbar
-char166 "
-sc 500,695,217 2 0247 -- section
-char167 "
-ad 333,671 2 0250 -- dieresis
-char168 "
-co 747,695,17 2 0251 -- copyright
-char169 "
-Of 438,660 2 0252 -- ordfeminine
-char170 "
-fo 389,438 0 0253 -- guilsinglleft
-no 606,396 0 0254 -- logicalnot
-char172 "
-\- 606,298 0 0255 -- minus
-rg 747,695,17 2 0256 -- registered
-char174 "
-a- 333,609 0 0257 -- macron
-char175 "
-de 400,660 2 0260 -- degree
-char176 "
-char177 606,505 0 0261 -- plusminus
-S2 300,660 2 0262 -- twosuperior
-char178 "
-S3 300,667 2 0263 -- threesuperior
-char179 "
-aa 333,691 2 0264 -- acute
-char180 "
-char181 611,471,225 0 0265 -- mu
-ps 641,683,161 2 0266 -- paragraph
-char182 "
-pc 250,335 0 0267 -- periodcentered
-char183 "
-ac 333,0,225 0 0270 -- cedilla
-char184 "
-S1 300,665 2 0271 -- onesuperior
-char185 "
-Om 488,660 2 0272 -- ordmasculine
-char186 "
-fc 389,438 0 0273 -- guilsinglright
-14 750,665,2 2 0274 -- onequarter
-char188 "
-12 750,665,2 2 0275 -- onehalf
-char189 "
-34 750,667,2 2 0276 -- threequarters
-char190 "
-r? 444,471,231 0 0277 -- questiondown
-char191 "
-`A 778,915,3 2 0300 -- Agrave
-char192 "
-'A 778,915,3 2 0301 -- Aacute
-char193 "
-^A 778,905,3 2 0302 -- Acircumflex
-char194 "
-~A 778,885,3 2 0303 -- Atilde
-char195 "
-:A 778,895,3 2 0304 -- Adieresis
-char196 "
-oA 778,924,3 2 0305 -- Aring
-char197 "
-AE 1000,681,4 2 0306 -- AE
-char198 "
-,C 722,695,225 2 0307 -- Ccedilla
-char199 "
-`E 611,915,4 2 0310 -- Egrave
-char200 "
-'E 611,915,4 2 0311 -- Eacute
-char201 "
-^E 611,905,4 2 0312 -- Ecircumflex
-char202 "
-:E 611,895,4 2 0313 -- Edieresis
-char203 "
-`I 389,915,3 2 0314 -- Igrave
-char204 "
-'I 389,915,3 2 0315 -- Iacute
-char205 "
-^I 389,905,3 2 0316 -- Icircumflex
-char206 "
-:I 389,895,3 2 0317 -- Idieresis
-char207 "
--D 833,681,3 2 0320 -- Eth
-char208 "
-~N 833,885,16 2 0321 -- Ntilde
-char209 "
-`O 833,915,17 2 0322 -- Ograve
-char210 "
-'O 833,915,17 2 0323 -- Oacute
-char211 "
-^O 833,905,17 2 0324 -- Ocircumflex
-char212 "
-~O 833,885,17 2 0325 -- Otilde
-char213 "
-:O 833,895,17 2 0326 -- Odieresis
-char214 "
-char215 606,483 0 0327 -- multiply
-/O 833,698,20 2 0330 -- Oslash
-char216 "
-`U 778,915,17 2 0331 -- Ugrave
-char217 "
-'U 778,915,17 2 0332 -- Uacute
-char218 "
-^U 778,905,17 2 0333 -- Ucircumflex
-char219 "
-:U 778,895,17 2 0334 -- Udieresis
-char220 "
-'Y 667,915,3 2 0335 -- Yacute
-char221 "
-TP 611,681,3 2 0336 -- Thorn
-char222 "
-ss 611,720,17 2 0337 -- germandbls
-char223 "
-`a 500,711,17 2 0340 -- agrave
-char224 "
-'a 500,711,17 2 0341 -- aacute
-char225 "
-^a 500,701,17 2 0342 -- acircumflex
-char226 "
-~a 500,673,17 2 0343 -- atilde
-char227 "
-:a 500,691,17 2 0344 -- adieresis
-char228 "
-oa 500,700,17 2 0345 -- aring
-char229 "
-ae 778,471,17 0 0346 -- ae
-char230 "
-,c 444,471,225 0 0347 -- ccedilla
-char231 "
-`e 500,711,17 2 0350 -- egrave
-char232 "
-'e 500,711,17 2 0351 -- eacute
-char233 "
-^e 500,701,17 2 0352 -- ecircumflex
-char234 "
-:e 500,691,17 2 0353 -- edieresis
-char235 "
-`i 333,711,3 2 0354 -- igrave
-char236 "
-'i 333,711,3 2 0355 -- iacute
-char237 "
-^i 333,701,3 2 0356 -- icircumflex
-char238 "
-:i 333,691,3 2 0357 -- idieresis
-char239 "
-Sd 556,720,17 2 0360 -- eth
-char240 "
-~n 611,673,3 2 0361 -- ntilde
-char241 "
-`o 556,711,17 2 0362 -- ograve
-char242 "
-'o 556,711,17 2 0363 -- oacute
-char243 "
-^o 556,701,17 2 0364 -- ocircumflex
-char244 "
-~o 556,673,17 2 0365 -- otilde
-char245 "
-:o 556,691,17 2 0366 -- odieresis
-char246 "
-char247 606,510 0 0367 -- divide
-/o 556,471,18 0 0370 -- oslash
-char248 "
-`u 611,711,17 2 0371 -- ugrave
-char249 "
-'u 611,711,17 2 0372 -- uacute
-char250 "
-^u 611,701,17 2 0373 -- ucircumflex
-char251 "
-:u 611,691,17 2 0374 -- udieresis
-char252 "
-'y 556,711,266 3 0375 -- yacute
-char253 "
-Tp 611,720,258 3 0376 -- thorn
-char254 "
-:y 556,691,266 3 0377 -- ydieresis
-char255 "
+fi 611,720,3,0,-10 2 0214 -- fi
+fl 611,720,3,0,-17 2 0215 -- fl
+.i 333,471,3,0,-34 0 0220 -- dotlessi
+ga 333,691,0,0,-18 2 0222 -- grave
+a" 333,691,0,57,56 2 0223 -- hungarumlaut
+a. 333,671,0,0,-100 2 0224 -- dotaccent
+ab 333,669,0,0,-15 2 0225 -- breve
+ah 333,685,0,2,2 2 0226 -- caron
+ao 333,700,0,0,-67 2 0227 -- ring
+ho 333,0,246,0,-60 0 0230 -- ogonek
+lq 500,695,0,0,-34 2 0231 -- quotedblleft
+rq 500,695,0,0,-34 2 0232 -- quotedblright
+oe 833,471,17,0,-48 0 0233 -- oe
+/l 333,720,3,1,4 2 0234 -- lslash
+Bq 500,130,160,0,-34 0 0235 -- quotedblbase
+OE 1000,695,17,0,-43 2 0236 -- OE
+/L 611,681,4,0,-16 2 0237 -- Lslash
+r! 278,471,227,0,-59 0 0241 -- exclamdown
+ct 500,554,106,0,-73 0 0242 -- cent
+Po 500,676,19,1,2 2 0243 -- sterling
+Cs 500,533,0,0,-32 0 0244 -- currency
+Ye 500,695,3,0,-17 2 0245 -- yen
+bb 606,720,0,0,-260 2 0246 -- brokenbar
+sc 500,695,217,0,-30 2 0247 -- section
+ad 333,671,0,8,8 2 0250 -- dieresis
+co 747,695,17,0,-26 2 0251 -- copyright
+Of 438,660,0,0,-77 2 0252 -- ordfeminine
+fo 389,438,0,0,-82 0 0253 -- guilsinglleft
+no 606,396,0,0,-51 0 0254 -- logicalnot
+\- 606,298,0,0,-51 0 0255 -- minus
+rg 747,695,17,0,-26 2 0256 -- registered
+a- 333,609,0,0,-1 0 0257 -- macron
+de 400,660,0,0,-50 2 0260 -- degree
+t+- 606,505,0,0,-51 0 0261 -- plusminus
+S2 300,660,0,0,-5 2 0262 -- twosuperior
+S3 300,667,0,0,-9 2 0263 -- threesuperior
+aa 333,691,0,0,-78 2 0264 -- acute
+mc 611,471,225,0,-25 0 0265 -- mu
+ps 641,683,161,0,-19 2 0266 -- paragraph
+pc 250,335,0,0,-47 0 0267 -- periodcentered
+ac 333,0,225,0,-73 0 0270 -- cedilla
+S1 300,665,0,0,-14 2 0271 -- onesuperior
+Om 488,660,0,0,-89 2 0272 -- ordmasculine
+fc 389,438,0,0,-82 0 0273 -- guilsinglright
+14 750,665,2,0,-19 2 0274 -- onequarter
+12 750,665,2,0,-9 2 0275 -- onehalf
+34 750,667,2,0,-15 2 0276 -- threequarters
+r? 444,471,231,0,-33 0 0277 -- questiondown
+`A 778,915,3,0,-24 2 0300 -- Agrave
+'A 778,915,3,0,-24 2 0301 -- Aacute
+^A 778,905,3,0,-24 2 0302 -- Acircumflex
+~A 778,885,3,0,-24 2 0303 -- Atilde
+:A 778,895,3,0,-24 2 0304 -- Adieresis
+oA 778,924,3,0,-24 2 0305 -- Aring
+AE 1000,681,4,0,-12 2 0306 -- AE
+,C 722,695,225,0,-44 2 0307 -- Ccedilla
+`E 611,915,4,0,-39 2 0310 -- Egrave
+'E 611,915,4,0,-39 2 0311 -- Eacute
+^E 611,905,4,0,-39 2 0312 -- Ecircumflex
+:E 611,895,4,0,-39 2 0313 -- Edieresis
+`I 389,915,3,0,-39 2 0314 -- Igrave
+'I 389,915,3,0,-39 2 0315 -- Iacute
+^I 389,905,3,0,-26 2 0316 -- Icircumflex
+:I 389,895,3,0,-20 2 0317 -- Idieresis
+-D 833,681,3,0,-10 2 0320 -- Eth
+~N 833,885,16,0,-35 2 0321 -- Ntilde
+`O 833,915,17,0,-47 2 0322 -- Ograve
+'O 833,915,17,0,-47 2 0323 -- Oacute
+^O 833,905,17,0,-47 2 0324 -- Ocircumflex
+~O 833,885,17,0,-47 2 0325 -- Otilde
+:O 833,895,17,0,-47 2 0326 -- Odieresis
+tmu 606,483,0,0,-72 0 0327 -- multiply
+/O 833,698,20,0,-32 2 0330 -- Oslash
+`U 778,915,17,0,-26 2 0331 -- Ugrave
+'U 778,915,17,0,-26 2 0332 -- Uacute
+^U 778,905,17,0,-26 2 0333 -- Ucircumflex
+:U 778,895,17,0,-26 2 0334 -- Udieresis
+'Y 667,915,3,0,-15 2 0335 -- Yacute
+TP 611,681,3,0,-39 2 0336 -- Thorn
+ss 611,720,17,0,-30 2 0337 -- germandbls
+`a 500,711,17,0,-40 2 0340 -- agrave
+'a 500,711,17,0,-40 2 0341 -- aacute
+^a 500,701,17,0,-40 2 0342 -- acircumflex
+~a 500,673,17,0,-40 2 0343 -- atilde
+:a 500,691,17,0,-40 2 0344 -- adieresis
+oa 500,700,17,0,-40 2 0345 -- aring
+ae 778,471,17,0,-46 0 0346 -- ae
+,c 444,471,225,0,-37 0 0347 -- ccedilla
+`e 500,711,17,0,-42 2 0350 -- egrave
+'e 500,711,17,0,-42 2 0351 -- eacute
+^e 500,701,17,0,-42 2 0352 -- ecircumflex
+:e 500,691,17,0,-42 2 0353 -- edieresis
+`i 333,711,3,0,-18 2 0354 -- igrave
+'i 333,711,3,0,-34 2 0355 -- iacute
+^i 333,701,3,2,2 2 0356 -- icircumflex
+:i 333,691,3,8,8 2 0357 -- idieresis
+Sd 556,720,17,0,-40 2 0360 -- eth
+~n 611,673,3,0,-24 2 0361 -- ntilde
+`o 556,711,17,0,-40 2 0362 -- ograve
+'o 556,711,17,0,-40 2 0363 -- oacute
+^o 556,701,17,0,-40 2 0364 -- ocircumflex
+~o 556,673,17,0,-40 2 0365 -- otilde
+:o 556,691,17,0,-40 2 0366 -- odieresis
+tdi 606,510,0,0,-51 0 0367 -- divide
+/o 556,471,18,0,-23 0 0370 -- oslash
+`u 611,711,17,0,-25 2 0371 -- ugrave
+'u 611,711,17,0,-25 2 0372 -- uacute
+^u 611,701,17,0,-25 2 0373 -- ucircumflex
+:u 611,691,17,0,-25 2 0374 -- udieresis
+'y 556,711,266,0,-10 3 0375 -- yacute
+Tp 611,720,258,0,-17 3 0376 -- thorn
+:y 556,691,266,0,-10 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/PBI b/contrib/groff/font/devps/PBI
index 7ec5ff3..55784ba 100644
--- a/contrib/groff/font/devps/PBI
+++ b/contrib/groff/font/devps/PBI
@@ -43,7 +43,6 @@ T o -111
T i -74
T - -92
T hy -92
-T char173 -92
T e -111
T , -55
T : -55
@@ -60,7 +59,6 @@ V o -74
V i -50
V - -37
V hy -37
-V char173 -37
V e -74
V , -111
V : -37
@@ -88,7 +86,6 @@ Y o -111
Y i -54
Y - -55
Y hy -55
-Y char173 -55
Y e -92
Y , -55
Y : -55
@@ -155,7 +152,6 @@ cq "
, 250,147,164,8,83,8 0 0054 -- comma
- 389,300,0,23,13,23 0 0055 -- hyphen
hy "
-char173 "
. 250,135,17,0,2 0 0056 -- period
/ 315,720,17,50,49,50 2 0057 -- slash
sl "
@@ -250,9 +246,7 @@ a~ 333,654,0,158,-32,66 2 0176 -- tilde
~ "
bq 250,145,144,20,53,20 0 0200 -- quotesinglbase
Fo 500,446,0,8,15,8 0 0201 -- guillemotleft
-char171 "
Fc 500,443,0,8,15,8 0 0202 -- guillemotright
-char187 "
bu 606,516,0,0,-81 0 0203 -- bullet
Fn 500,690,242,29,42,29 2 0204 -- florin
f/ 167,683,0,221,220,66 2 0205 -- fraction
@@ -279,185 +273,97 @@ Bq 500,145,144,0,68 0 0235 -- quotedblbase
OE 944,695,17,67,11,66 2 0236 -- OE
/L 611,681,3,17,44,17 2 0237 -- Lslash
r! 333,479,225,0,48 0 0241 -- exclamdown
-char161 "
ct 500,547,105,6,-2,6 0 0242 -- cent
-char162 "
Po 500,683,5,51,29,51 2 0243 -- sterling
-char163 "
Cs 500,533,0,18,18,18 0 0244 -- currency
-char164 "
Ye 500,695,3,88,39,66 2 0245 -- yen
-char165 "
bb 606,720,0,0,-209 2 0246 -- brokenbar
-char166 "
sc 556,695,151,0,3 2 0247 -- section
-char167 "
ad 333,668,0,143,-40,66 2 0250 -- dieresis
-char168 "
co 747,695,17,23,24,23 2 0251 -- copyright
-char169 "
Of 333,684,0,72,3,66 2 0252 -- ordfeminine
-char170 "
fo 333,446,0,9,-10,9 0 0253 -- guilsinglleft
no 606,390,0,0,-1 0 0254 -- logicalnot
-char172 "
\- 606,292,0,0,-1 0 0255 -- minus
rg 747,695,17,23,24,23 2 0256 -- registered
-char174 "
a- 333,608,0,135,-26,66 0 0257 -- macron
-char175 "
de 400,683 2 0260 -- degree
-char176 "
-char177 606,501 0 0261 -- plusminus
+t+- 606,501 0 0261 -- plusminus
S2 300,683,0,71,24,66 2 0262 -- twosuperior
-char178 "
S3 300,683,0,60,27,60 2 0263 -- threesuperior
-char179 "
aa 333,699,0,109,-103,66 2 0264 -- acute
-char180 "
-char181 556,469,232,15,65,15 0 0265 -- mu
+mc 556,469,232,15,65,15 0 0265 -- mu
ps 556,681,204,123,36,66 2 0266 -- paragraph
-char182 "
pc 250,324,0,6,-17,6 0 0267 -- periodcentered
-char183 "
ac 333,5,218,0,38 0 0270 -- cedilla
-char184 "
S1 300,680,0,48,9,48 2 0271 -- onesuperior
-char185 "
Om 333,683,0,63,-1,63 2 0272 -- ordmasculine
-char186 "
fc 333,443,0,0,15 0 0273 -- guilsinglright
14 750,683,2,32,32,32 2 0274 -- onequarter
-char188 "
12 750,683,2,36,36,36 2 0275 -- onehalf
-char189 "
34 750,683,2,32,32,32 2 0276 -- threequarters
-char190 "
r? 444,479,226,0,62 0 0277 -- questiondown
-char191 "
`A 722,911,3,13,85,13 2 0300 -- Agrave
-char192 "
'A 722,911,3,13,85,13 2 0301 -- Aacute
-char193 "
^A 722,896,3,13,85,13 2 0302 -- Acircumflex
-char194 "
~A 722,866,3,13,85,13 2 0303 -- Atilde
-char195 "
:A 722,880,3,13,85,13 2 0304 -- Adieresis
-char196 "
oA 722,926,3,13,85,13 2 0305 -- Aring
-char197 "
AE 944,681,3,33,79,33 2 0306 -- AE
-char198 "
,C 685,695,218,60,-19,60 2 0307 -- Ccedilla
-char199 "
`E 611,911,3,45,39,45 2 0310 -- Egrave
-char200 "
'E 611,911,3,45,39,45 2 0311 -- Eacute
-char201 "
^E 611,896,3,45,39,45 2 0312 -- Ecircumflex
-char202 "
:E 611,880,3,45,39,45 2 0313 -- Edieresis
-char203 "
`I 389,911,3,73,51,66 2 0314 -- Igrave
-char204 "
'I 389,911,3,81,51,66 2 0315 -- Iacute
-char205 "
^I 389,896,3,104,51,66 2 0316 -- Icircumflex
-char206 "
:I 389,880,3,115,51,66 2 0317 -- Idieresis
-char207 "
-D 778,682,3,19,50,19 2 0320 -- Eth
-char208 "
~N 778,866,3,101,52,66 2 0321 -- Ntilde
-char209 "
`O 833,911,17,11,-26,11 2 0322 -- Ograve
-char210 "
'O 833,911,17,11,-26,11 2 0323 -- Oacute
-char211 "
^O 833,896,17,11,-26,11 2 0324 -- Ocircumflex
-char212 "
~O 833,866,17,11,-26,11 2 0325 -- Otilde
-char213 "
:O 833,880,17,11,-26,11 2 0326 -- Odieresis
-char214 "
-char215 606,479,0,0,-22 0 0327 -- multiply
+tmu 606,479,0,0,-22 0 0327 -- multiply
/O 833,730,54,14,-7,14 2 0330 -- Oslash
-char216 "
`U 778,911,17,97,-33,66 2 0331 -- Ugrave
-char217 "
'U 778,911,17,97,-33,66 2 0332 -- Uacute
-char218 "
^U 778,896,17,97,-33,66 2 0333 -- Ucircumflex
-char219 "
:U 778,880,17,97,-33,66 2 0334 -- Udieresis
-char220 "
'Y 611,911,3,114,-4,66 2 0335 -- Yacute
-char221 "
TP 667,681,3,27,39,27 2 0336 -- Thorn
-char222 "
ss 556,726,271,43,181,43 3 0337 -- germandbls
-char223 "
`a 556,719,17,13,6,13 2 0340 -- agrave
-char224 "
'a 556,719,17,13,6,13 2 0341 -- aacute
-char225 "
^a 556,704,17,21,6,21 2 0342 -- acircumflex
-char226 "
~a 556,666,17,47,6,47 2 0343 -- atilde
-char227 "
:a 556,688,17,32,6,32 2 0344 -- adieresis
-char228 "
oa 556,714,17,13,6,13 2 0345 -- aring
-char229 "
ae 738,469,17,23,6,23 0 0346 -- ae
-char230 "
,c 444,469,218,42,18,42 0 0347 -- ccedilla
-char231 "
`e 444,719,17,24,22,24 2 0350 -- egrave
-char232 "
'e 444,719,17,54,22,54 2 0351 -- eacute
-char233 "
^e 444,704,17,77,22,66 2 0352 -- ecircumflex
-char234 "
:e 444,688,17,88,22,66 2 0353 -- edieresis
-char235 "
`i 333,719,17,39,24,39 2 0354 -- igrave
-char236 "
'i 333,719,17,109,24,66 2 0355 -- iacute
-char237 "
^i 333,704,17,120,24,66 2 0356 -- icircumflex
-char238 "
:i 333,688,17,143,24,66 2 0357 -- idieresis
-char239 "
Sd 556,726,17,40,2,40 2 0360 -- eth
-char240 "
~n 556,666,17,47,33,47 2 0361 -- ntilde
-char241 "
`o 556,719,17,0,2 2 0362 -- ograve
-char242 "
'o 556,719,17,0,2 2 0363 -- oacute
-char243 "
^o 556,704,17,9,2,9 2 0364 -- ocircumflex
-char244 "
~o 556,666,17,47,2,47 2 0365 -- otilde
-char245 "
:o 556,688,17,32,2,32 2 0366 -- odieresis
-char246 "
-char247 606,501,5 0 0367 -- divide
+tdi 606,501,5 0 0367 -- divide
/o 556,506,50,16,36,16 0 0370 -- oslash
-char248 "
`u 556,719,17,15,28,15 2 0371 -- ugrave
-char249 "
'u 556,719,17,15,28,15 2 0372 -- uacute
-char250 "
^u 556,704,17,15,28,15 2 0373 -- ucircumflex
-char251 "
:u 556,688,17,32,28,32 2 0374 -- udieresis
-char252 "
'y 556,719,271,35,37,35 3 0375 -- yacute
-char253 "
Tp 556,726,271,10,71,10 3 0376 -- thorn
-char254 "
:y 556,688,271,35,37,35 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/PI b/contrib/groff/font/devps/PI
index d35c7f8..602f47a 100644
--- a/contrib/groff/font/devps/PI
+++ b/contrib/groff/font/devps/PI
@@ -43,7 +43,6 @@ T o -111
T i -55
T - -55
T hy -55
-T char173 -55
T e -111
T , -74
T : -74
@@ -60,7 +59,6 @@ V o -74
V i -74
V - -55
V hy -55
-V char173 -55
V e -92
V , -129
V : -37
@@ -75,7 +73,6 @@ W o -20
W i -20
W - -18
W hy -18
-W char173 -18
W e -20
W , -55
W : -18
@@ -91,7 +88,6 @@ Y o -111
Y i -55
Y - -74
Y hy -74
-Y char173 -74
Y e -111
Y , -92
Y : -74
@@ -157,7 +153,6 @@ cq "
, 250,123,143,3,42,3 0 0054 -- comma
- 333,281,0,21,31,21 0 0055 -- hyphen
hy "
-char173 "
. 250,112,5,0,-3 0 0056 -- period
/ 296,733,119,146,90,68 2 0057 -- slash
sl "
@@ -252,9 +247,7 @@ a~ 333,638,0,107,-13,68 0 0176 -- tilde
~ "
bq 278,120,122,0,23 0 0200 -- quotesinglbase
Fo 500,440,0,0,-7 0 0201 -- guillemotleft
-char171 "
Fc 500,440,0,0,-13 0 0202 -- guillemotright
-char187 "
bu 500,526,0,0,-36 0 0203 -- bullet
Fn 500,708,276,20,45,20 3 0204 -- florin
f/ 167,699,0,220,220,68 2 0205 -- fraction
@@ -281,185 +274,97 @@ Bq 500,120,122,0,7 0 0235 -- quotedblbase
OE 1028,706,18,11,-6,11 2 0236 -- OE
/L 556,692,3,17,66,17 2 0237 -- Lslash
r! 333,467,276,0,35 1 0241 -- exclamdown
-char161 "
ct 500,551,96,0,-6 0 0242 -- cent
-char162 "
Po 500,708,18,29,48,29 2 0243 -- sterling
-char163 "
Cs 500,577,0,36,36,36 0 0244 -- currency
-char164 "
Ye 500,699,3,62,15,62 2 0245 -- yen
-char165 "
bb 606,733,0,0,-225 2 0246 -- brokenbar
-char166 "
sc 500,706,220,13,36,13 2 0247 -- section
-char167 "
ad 333,637,0,95,-28,68 0 0250 -- dieresis
-char168 "
co 747,706,18,39,39,39 2 0251 -- copyright
-char169 "
Of 333,699,0,38,-10,38 2 0252 -- ordfeminine
-char170 "
fo 333,440,0,0,-7 0 0253 -- guilsinglleft
no 606,378,0,0,-1 0 0254 -- logicalnot
-char172 "
\- 606,280,0,0,-1 0 0255 -- minus
rg 747,706,18,39,39,39 2 0256 -- registered
-char174 "
a- 333,589,0,103,-24,68 0 0257 -- macron
-char175 "
de 400,689,0,40,-40,40 2 0260 -- degree
-char176 "
-char177 606,504,0,0,-1 0 0261 -- plusminus
+t+- 606,504,0,0,-1 0 0261 -- plusminus
S2 300,699,0,40,37,40 2 0262 -- twosuperior
-char178 "
S3 300,699,0,54,22,54 2 0263 -- threesuperior
-char179 "
aa 333,687,0,63,-72,63 2 0264 -- acute
-char180 "
-char181 556,482,226,6,35,6 0 0265 -- mu
+mc 556,482,226,6,35,6 0 0265 -- mu
ps 500,692,224,161,17,68 2 0266 -- paragraph
-char182 "
pc 250,312,0,0,-3 0 0267 -- periodcentered
-char183 "
ac 333,0,216,0,59 0 0270 -- cedilla
-char184 "
S1 300,699,0,35,-11,35 2 0271 -- onesuperior
-char185 "
Om 333,699,0,39,-16,39 2 0272 -- ordmasculine
-char186 "
fc 333,440,0,0,-13 0 0273 -- guilsinglright
14 750,699,2,15,19,15 2 0274 -- onequarter
-char188 "
12 750,699,2,21,19,21 2 0275 -- onehalf
-char189 "
34 750,699,2,15,15,15 2 0276 -- threequarters
-char190 "
r? 500,467,246,0,-7 0 0277 -- questiondown
-char191 "
`A 722,897,3,5,69,5 2 0300 -- Agrave
-char192 "
'A 722,897,3,5,69,5 2 0301 -- Aacute
-char193 "
^A 722,889,3,5,69,5 2 0302 -- Acircumflex
-char194 "
~A 722,866,3,5,69,5 2 0303 -- Atilde
-char195 "
:A 722,847,3,5,69,5 2 0304 -- Adieresis
-char196 "
oA 722,918,3,5,69,5 2 0305 -- Aring
-char197 "
AE 941,692,3,11,54,11 2 0306 -- AE
-char198 "
,C 667,706,216,34,5,34 2 0307 -- Ccedilla
-char199 "
`E 611,897,3,9,20,9 2 0310 -- Egrave
-char200 "
'E 611,897,3,9,20,9 2 0311 -- Eacute
-char201 "
^E 611,889,3,9,20,9 2 0312 -- Ecircumflex
-char202 "
:E 611,847,3,9,20,9 2 0313 -- Edieresis
-char203 "
`I 333,897,3,71,43,68 2 0314 -- Igrave
-char204 "
'I 333,897,3,123,43,68 2 0315 -- Iacute
-char205 "
^I 333,889,3,107,43,68 2 0316 -- Icircumflex
-char206 "
:I 333,847,3,135,43,68 2 0317 -- Idieresis
-char207 "
-D 778,692,3,13,31,13 2 0320 -- Eth
-char208 "
~N 778,866,11,76,48,68 2 0321 -- Ntilde
-char209 "
`O 778,897,18,20,-3,20 2 0322 -- Ograve
-char210 "
'O 778,897,18,20,-3,20 2 0323 -- Oacute
-char211 "
^O 778,889,18,20,-3,20 2 0324 -- Ocircumflex
-char212 "
~O 778,866,18,20,-3,20 2 0325 -- Otilde
-char213 "
:O 778,847,18,20,-3,20 2 0326 -- Odieresis
-char214 "
-char215 606,474,0,0,-33 0 0327 -- multiply
+tmu 606,474,0,0,-33 0 0327 -- multiply
/O 778,721,39,34,18,34 2 0330 -- Oslash
-char216 "
`U 778,897,18,70,-38,68 2 0331 -- Ugrave
-char217 "
'U 778,897,18,70,-38,68 2 0332 -- Uacute
-char218 "
^U 778,889,18,70,-38,68 2 0333 -- Ucircumflex
-char219 "
:U 778,847,18,70,-38,68 2 0334 -- Udieresis
-char220 "
'Y 667,897,3,58,-2,58 2 0335 -- Yacute
-char221 "
TP 611,692,3,9,41,9 2 0336 -- Thorn
-char222 "
ss 500,733,276,38,210,38 3 0337 -- germandbls
-char223 "
`a 444,707,11,12,46,12 2 0340 -- agrave
-char224 "
'a 444,707,11,20,46,20 2 0341 -- aacute
-char225 "
^a 444,699,11,12,46,12 2 0342 -- acircumflex
-char226 "
~a 444,650,11,52,46,52 2 0343 -- atilde
-char227 "
:a 444,657,11,40,46,40 2 0344 -- adieresis
-char228 "
oa 444,728,11,12,46,12 2 0345 -- aring
-char229 "
ae 638,482,11,35,49,35 0 0346 -- ae
-char230 "
,c 407,482,216,32,25,32 0 0347 -- ccedilla
-char231 "
`e 389,707,11,35,35,35 2 0350 -- egrave
-char232 "
'e 389,707,11,55,35,55 2 0351 -- eacute
-char233 "
^e 389,699,11,59,35,59 2 0352 -- ecircumflex
-char234 "
:e 389,657,11,67,35,67 2 0353 -- edieresis
-char235 "
`i 278,707,9,43,16,43 2 0354 -- igrave
-char236 "
'i 278,707,9,103,16,68 2 0355 -- iacute
-char237 "
^i 278,699,9,95,21,68 2 0356 -- icircumflex
-char238 "
:i 278,657,9,123,16,68 2 0357 -- idieresis
-char239 "
Sd 444,733,11,84,33,68 2 0360 -- eth
-char240 "
~n 556,650,9,8,26,8 2 0361 -- ntilde
-char241 "
`o 444,707,11,17,33,17 2 0362 -- ograve
-char242 "
'o 444,707,11,20,33,20 2 0363 -- oacute
-char243 "
^o 444,699,11,17,33,17 2 0364 -- ocircumflex
-char244 "
~o 444,650,11,52,33,52 2 0365 -- otilde
-char245 "
:o 444,657,11,40,33,40 2 0366 -- odieresis
-char246 "
-char247 606,504,0,0,-1 0 0367 -- divide
+tdi 606,504,0,0,-1 0 0367 -- divide
/o 444,510,24,66,68,66 0 0370 -- oslash
-char248 "
`u 556,707,11,6,18,6 2 0371 -- ugrave
-char249 "
'u 556,707,11,6,18,6 2 0372 -- uacute
-char250 "
^u 556,699,11,6,18,6 2 0373 -- ucircumflex
-char251 "
:u 556,657,11,6,18,6 2 0374 -- udieresis
-char252 "
'y 500,707,276,40,58,40 3 0375 -- yacute
-char253 "
Tp 500,733,276,0,89 3 0376 -- thorn
-char254 "
:y 500,657,276,40,58,40 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/PR b/contrib/groff/font/devps/PR
index 2eccf3c..5ba7578 100644
--- a/contrib/groff/font/devps/PR
+++ b/contrib/groff/font/devps/PR
@@ -42,7 +42,6 @@ T o -92
T i -55
T - -55
T hy -55
-T char173 -55
T e -92
T , -74
T : -55
@@ -59,7 +58,6 @@ V o -111
V i -55
V - -74
V hy -74
-V char173 -74
V e -111
V , -129
V : -55
@@ -74,7 +72,6 @@ W o -92
W i -55
W - -55
W hy -55
-W char173 -55
W e -92
W , -92
W : -18
@@ -90,7 +87,6 @@ Y o -92
Y i -55
Y - -92
Y hy -92
-Y char173 -92
Y e -92
Y , -111
Y : -74
@@ -116,7 +112,6 @@ r . -74
r o -18
r - -18
r hy -18
-r char173 -18
r h -18
r g -18
r e -18
@@ -130,337 +125,246 @@ 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,0,0,-51 2 0000 -- asciicircum
+ti 606,347,0,0,-51 0 0001 -- asciitilde
+vS 525,908,20,0,-24 2 0002 -- Scaron
+vZ 667,908,3,0,-15 2 0003 -- Zcaron
+vs 424,685,20,0,-30 2 0004 -- scaron
+vz 500,685,3,0,-16 2 0005 -- zcaron
+:Y 667,868,3,0,-9 2 0006 -- Ydieresis
+tm 979,689,0,0,-40 2 0007 -- trademark
+aq 208,709,0,0,-61 2 0010 -- quotesingle
space 250 0 0040
-! 278,694,5 2 0041 -- exclam
-" 371,709 2 0042 -- quotedbl
+! 278,694,5,0,-81 2 0041 -- exclam
+" 371,709,0,0,-52 2 0042 -- quotedbl
dq "
-# 500,684 2 0043 -- numbersign
+# 500,684,0,0,-4 2 0043 -- numbersign
sh "
-$ 500,731,116 2 0044 -- dollar
+$ 500,731,116,0,-30 2 0044 -- dollar
Do "
-% 840,709,20 2 0045 -- percent
-& 778,689,20 2 0046 -- ampersand
-' 278,709 2 0047 -- quoteright
+% 840,709,20,0,-39 2 0045 -- percent
+& 778,689,20,0,-43 2 0046 -- ampersand
+' 278,709,0,0,-45 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
+( 333,726,215,0,-60 2 0050 -- parenleft
+) 333,726,215,0,-32 2 0051 -- parenright
+* 389,689,0,0,-32 2 0052 -- asterisk
++ 606,512,0,0,-51 0 0053 -- plus
+, 250,123,155,0,-16 0 0054 -- comma
+- 333,287,0,0,-17 0 0055 -- hyphen
hy "
-char173 "
-. 250,111,5 0 0056 -- period
-/ 606,726,119 2 0057 -- slash
+. 250,111,5,0,-67 0 0056 -- period
+/ 606,726,119,0,-87 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,0,-29 2 0060 -- zero
+1 500,694,3,0,-60 2 0061 -- one
+2 500,689,3,0,-16 2 0062 -- two
+3 500,689,20,0,-15 2 0063 -- three
+4 500,694,3,0,-2 2 0064 -- four
+5 500,689,20,0,-13 2 0065 -- five
+6 500,689,20,0,-32 2 0066 -- six
+7 500,689,3,0,-44 2 0067 -- seven
+8 500,689,20,0,-30 2 0070 -- eight
+9 500,689,20,0,-20 2 0071 -- nine
+: 250,456,5,0,-66 0 0072 -- colon
+; 250,456,153,0,-16 0 0073 -- semicolon
+< 606,522,0,0,-57 0 0074 -- less
+= 606,386,0,0,-51 0 0075 -- equal
+> 606,522,0,0,-48 0 0076 -- greater
+? 444,694,5,0,-43 2 0077 -- question
+@ 747,694,20,0,-24 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,0,-15 2 0101 -- A
+B 611,692,3,0,-26 2 0102 -- B
+C 709,709,20,0,-22 2 0103 -- C
+D 774,692,3,0,-22 2 0104 -- D
+E 611,692,3,0,-22 2 0105 -- E
+F 556,692,3,0,-22 2 0106 -- F
+G 763,709,20,0,-22 2 0107 -- G
+H 832,692,3,0,-22 2 0110 -- H
+I 337,692,3,0,-22 2 0111 -- I
+J 333,692,194,0,15 2 0112 -- J
+K 726,692,3,0,-22 2 0113 -- K
+L 611,692,3,0,-22 2 0114 -- L
+M 946,692,13,0,-16 2 0115 -- M
+N 831,692,20,0,-17 2 0116 -- N
+O 786,709,20,0,-22 2 0117 -- O
+P 604,692,3,0,-22 2 0120 -- P
+Q 786,709,176,0,-22 2 0121 -- Q
+R 668,692,3,1,-22 2 0122 -- R
+S 525,709,20,0,-24 2 0123 -- S
+T 613,692,3,0,-18 2 0124 -- T
+U 778,692,20,0,-12 2 0125 -- U
+V 722,692,9,0,-8 2 0126 -- V
+W 1000,700,9,0,-8 2 0127 -- W
+X 667,700,3,0,-14 2 0130 -- X
+Y 667,704,3,0,-9 2 0131 -- Y
+Z 667,692,3,0,-15 2 0132 -- Z
+[ 333,726,184,0,-79 2 0133 -- bracketleft
lB "
-\ 606,726 2 0134 -- backslash
+\ 606,726,0,0,-81 2 0134 -- backslash
rs "
-] 333,726,184 2 0135 -- bracketright
+] 333,726,184,0,-45 2 0135 -- bracketright
rB "
-a^ 333,677 2 0136 -- circumflex
+a^ 333,677,0,0,-11 2 0136 -- circumflex
^ "
_ 500,0,125 0 0137 -- underscore
-` 278,709 2 0140 -- quoteleft
+` 278,709,0,0,-45 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,-32 0 0141 -- a
+b 553,726,12,0,15 2 0142 -- b
+c 444,469,20,0,-26 0 0143 -- c
+d 611,726,12,0,-35 2 0144 -- d
+e 479,469,20,0,-26 0 0145 -- e
+f 333,728,3,8,-23 2 0146 -- f
+g 556,469,283,0,-32 1 0147 -- g
+h 582,726,3,0,-6 2 0150 -- h
+i 291,687,3,0,-21 2 0151 -- i
+j 234,688,283,0,40 3 0152 -- j
+k 556,726,12,0,-21 2 0153 -- k
+l 291,726,3,0,-21 2 0154 -- l
+m 883,469,3,0,-16 0 0155 -- m
+n 582,469,3,0,-6 0 0156 -- n
+o 546,469,20,0,-32 0 0157 -- o
+p 601,469,281,0,-8 1 0160 -- p
+q 560,469,281,0,-35 1 0161 -- q
+r 395,469,3,0,-21 0 0162 -- r
+s 424,469,20,0,-30 0 0163 -- s
+t 326,621,12,0,-22 2 0164 -- t
+u 603,469,12,0,-18 0 0165 -- u
+v 565,459,7,0,-6 0 0166 -- v
+w 834,469,7,0,-6 0 0167 -- w
+x 516,469,3,0,-20 0 0170 -- x
+y 556,459,283,0,-12 1 0171 -- y
+z 500,462,3,0,-16 0 0172 -- z
+lC 333,726,175,0,-58 2 0173 -- braceleft
{ "
-ba 606,726 2 0174 -- bar
+ba 606,726,0,0,-275 2 0174 -- bar
| "
-rC 333,726,175 2 0175 -- braceright
+rC 333,726,175,0,-44 2 0175 -- braceright
} "
-a~ 333,640 2 0176 -- tilde
+a~ 333,640,0,0,-2 2 0176 -- tilde
~ "
-bq 278,110,153 0 0200 -- quotesinglbase
-Fo 500,428 0 0201 -- guillemotleft
-char171 "
-Fc 500,428 0 0202 -- guillemotright
-char187 "
-bu 606,516 0 0203 -- bullet
+bq 278,110,153,0,-22 0 0200 -- quotesinglbase
+Fo 500,428,0,0,-50 0 0201 -- guillemotleft
+Fc 500,428,0,0,-50 0 0202 -- guillemotright
+bu 606,516,0,0,-131 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
+f/ 167,689,0,170,166 2 0205 -- fraction
+%0 1144,709,20,0,-123 2 0206 -- perthousand
+dg 500,694,5,0,-34 2 0207 -- dagger
+dd 500,694,249,0,-34 2 0210 -- daggerdbl
en 500,277 0 0211 -- endash
em 1000,277 0 0212 -- emdash
-fi 605,728,3 2 0214 -- fi
-fl 608,728,3 2 0215 -- fl
-.i 287,469,3 0 0220 -- dotlessi
-ga 333,677 2 0222 -- grave
-a" 380,687 2 0223 -- hungarumlaut
-a. 250,637 2 0224 -- dotaccent
-ab 333,664 2 0225 -- breve
-ah 333,677 2 0226 -- caron
-ao 333,696 2 0227 -- ring
-ho 313,0,165 0 0230 -- ogonek
-lq 500,709 2 0231 -- quotedblleft
-rq 500,709 2 0232 -- quotedblright
-oe 827,469,20 0 0233 -- oe
-/l 291,726,3 2 0234 -- lslash
-Bq 500,110,153 0 0235 -- quotedblbase
-OE 998,709,20 2 0236 -- OE
-/L 611,692,3 2 0237 -- Lslash
-r! 278,469,225 0 0241 -- exclamdown
-char161 "
-ct 500,562,101 0 0242 -- cent
-char162 "
-Po 500,694,13 2 0243 -- sterling
-char163 "
-Cs 500,531 0 0244 -- currency
-char164 "
-Ye 500,701,3 2 0245 -- yen
-char165 "
-bb 606,726 2 0246 -- brokenbar
-char166 "
-sc 500,709,219 2 0247 -- section
-char167 "
-ad 333,637 2 0250 -- dieresis
-char168 "
-co 747,706,18 2 0251 -- copyright
-char169 "
-Of 333,709 2 0252 -- ordfeminine
-char170 "
-fo 331,428 0 0253 -- guilsinglleft
-no 606,386 0 0254 -- logicalnot
-char172 "
-\- 606,289 0 0255 -- minus
-rg 747,706,18 2 0256 -- registered
-char174 "
-a- 333,591 0 0257 -- macron
-char175 "
-de 400,689 2 0260 -- degree
-char176 "
-char177 606,512 0 0261 -- plusminus
-S2 300,689 2 0262 -- twosuperior
-char178 "
-S3 300,689 2 0263 -- threesuperior
-char179 "
-aa 333,677 2 0264 -- acute
-char180 "
-char181 603,469,236 0 0265 -- mu
-ps 628,694,150 2 0266 -- paragraph
-char182 "
-pc 250,319 0 0267 -- periodcentered
-char183 "
-ac 333,0,225 0 0270 -- cedilla
-char184 "
-S1 300,692 2 0271 -- onesuperior
-char185 "
-Om 333,709 2 0272 -- ordmasculine
-char186 "
-fc 331,428 0 0273 -- guilsinglright
-14 750,692,3 2 0274 -- onequarter
-char188 "
-12 750,692,3 2 0275 -- onehalf
-char189 "
-34 750,689,3 2 0276 -- threequarters
-char190 "
-r? 444,469,231 0 0277 -- questiondown
-char191 "
-`A 778,908,3 2 0300 -- Agrave
-char192 "
-'A 778,908,3 2 0301 -- Aacute
-char193 "
-^A 778,908,3 2 0302 -- Acircumflex
-char194 "
-~A 778,871,3 2 0303 -- Atilde
-char195 "
-:A 778,868,3 2 0304 -- Adieresis
-char196 "
-oA 778,927,3 2 0305 -- Aring
-char197 "
-AE 944,692,3 2 0306 -- AE
-char198 "
-,C 709,709,225 2 0307 -- Ccedilla
-char199 "
-`E 611,908,3 2 0310 -- Egrave
-char200 "
-'E 611,908,3 2 0311 -- Eacute
-char201 "
-^E 611,908,3 2 0312 -- Ecircumflex
-char202 "
-:E 611,868,3 2 0313 -- Edieresis
-char203 "
-`I 337,908,3 2 0314 -- Igrave
-char204 "
-'I 337,908,3 2 0315 -- Iacute
-char205 "
-^I 337,908,3 2 0316 -- Icircumflex
-char206 "
-:I 337,868,3 2 0317 -- Idieresis
-char207 "
--D 774,692,3 2 0320 -- Eth
-char208 "
-~N 831,871,20 2 0321 -- Ntilde
-char209 "
-`O 786,908,20 2 0322 -- Ograve
-char210 "
-'O 786,908,20 2 0323 -- Oacute
-char211 "
-^O 786,908,20 2 0324 -- Ocircumflex
-char212 "
-~O 786,883,20 2 0325 -- Otilde
-char213 "
-:O 786,868,20 2 0326 -- Odieresis
-char214 "
-char215 606,474 0 0327 -- multiply
-/O 833,709,20 2 0330 -- Oslash
-char216 "
-`U 778,908,20 2 0331 -- Ugrave
-char217 "
-'U 778,908,20 2 0332 -- Uacute
-char218 "
-^U 778,908,20 2 0333 -- Ucircumflex
-char219 "
-:U 778,868,20 2 0334 -- Udieresis
-char220 "
-'Y 667,908,3 2 0335 -- Yacute
-char221 "
-TP 604,692,3 2 0336 -- Thorn
-char222 "
-ss 556,731,9 2 0337 -- germandbls
-char223 "
-`a 500,697,12 2 0340 -- agrave
-char224 "
-'a 500,697,12 2 0341 -- aacute
-char225 "
-^a 500,697,12 2 0342 -- acircumflex
-char226 "
-~a 500,652,12 2 0343 -- atilde
-char227 "
-:a 500,657,12 2 0344 -- adieresis
-char228 "
-oa 500,716,12 2 0345 -- aring
-char229 "
-ae 758,469,20 0 0346 -- ae
-char230 "
-,c 444,469,225 0 0347 -- ccedilla
-char231 "
-`e 479,697,20 2 0350 -- egrave
-char232 "
-'e 479,697,20 2 0351 -- eacute
-char233 "
-^e 479,697,20 2 0352 -- ecircumflex
-char234 "
-:e 479,657,20 2 0353 -- edieresis
-char235 "
-`i 287,697,3 2 0354 -- igrave
-char236 "
-'i 287,697,3 2 0355 -- iacute
-char237 "
-^i 287,697,3 2 0356 -- icircumflex
-char238 "
-:i 287,657,3 2 0357 -- idieresis
-char239 "
-Sd 546,728,20 2 0360 -- eth
-char240 "
-~n 582,652,3 2 0361 -- ntilde
-char241 "
-`o 546,697,20 2 0362 -- ograve
-char242 "
-'o 546,697,20 2 0363 -- oacute
-char243 "
-^o 546,697,20 2 0364 -- ocircumflex
-char244 "
-~o 546,652,20 2 0365 -- otilde
-char245 "
-:o 546,657,20 2 0366 -- odieresis
-char246 "
-char247 606,512 0 0367 -- divide
-/o 556,474,23 0 0370 -- oslash
-char248 "
-`u 603,697,12 2 0371 -- ugrave
-char249 "
-'u 603,697,12 2 0372 -- uacute
-char250 "
-^u 603,697,12 2 0373 -- ucircumflex
-char251 "
-:u 603,657,12 2 0374 -- udieresis
-char252 "
-'y 556,697,283 3 0375 -- yacute
-char253 "
-Tp 601,726,281 3 0376 -- thorn
-char254 "
-:y 556,657,283 3 0377 -- ydieresis
-char255 "
+fi 605,728,3,0,-23 2 0214 -- fi
+fl 608,728,3,0,-23 2 0215 -- fl
+.i 287,469,3,0,-21 0 0220 -- dotlessi
+ga 333,677,0,0,-31 2 0222 -- grave
+a" 380,687,0,0,-3 2 0223 -- hungarumlaut
+a. 250,637,0,0,-75 2 0224 -- dotaccent
+ab 333,664,0,0,-26 2 0225 -- breve
+ah 333,677,0,0,-11 2 0226 -- caron
+ao 333,696,0,0,-67 2 0227 -- ring
+ho 313,0,165,0,-68 0 0230 -- ogonek
+lq 500,709,0,0,-51 2 0231 -- quotedblleft
+rq 500,709,0,0,-51 2 0232 -- quotedblright
+oe 827,469,20,0,-32 0 0233 -- oe
+/l 291,726,3,15,14 2 0234 -- lslash
+Bq 500,110,153,0,-51 0 0235 -- quotedblbase
+OE 998,709,20,0,-22 2 0236 -- OE
+/L 611,692,3,0,-6 2 0237 -- Lslash
+r! 278,469,225,0,-81 0 0241 -- exclamdown
+ct 500,562,101,0,-61 0 0242 -- cent
+Po 500,694,13,0,-12 2 0243 -- sterling
+Cs 500,531,0,0,-30 0 0244 -- currency
+Ye 500,701,3,0,-5 2 0245 -- yen
+bb 606,726,0,0,-275 2 0246 -- brokenbar
+sc 500,709,219,0,-26 2 0247 -- section
+ad 333,637,0,0,-17 2 0250 -- dieresis
+co 747,706,18,0,-11 2 0251 -- copyright
+Of 333,709,0,0,-24 2 0252 -- ordfeminine
+fo 331,428,0,0,-66 0 0253 -- guilsinglleft
+no 606,386,0,0,-51 0 0254 -- logicalnot
+\- 606,289,0,0,-51 0 0255 -- minus
+rg 747,706,18,0,-11 2 0256 -- registered
+a- 333,591,0,0,-11 0 0257 -- macron
+de 400,689,0,0,-50 2 0260 -- degree
+t+- 606,512,0,0,-51 0 0261 -- plusminus
+S2 300,689,0,1 2 0262 -- twosuperior
+S3 300,689,0,0,-1 2 0263 -- threesuperior
+aa 333,677,0,0,-78 2 0264 -- acute
+mc 603,469,236,0,-18 0 0265 -- mu
+ps 628,694,150,0,-39 2 0266 -- paragraph
+pc 250,319,0,0,-67 0 0267 -- periodcentered
+ac 333,0,225,0,-96 0 0270 -- cedilla
+S1 300,692,0,0,-31 2 0271 -- onesuperior
+Om 333,709,0,0,-10 2 0272 -- ordmasculine
+fc 331,428,0,0,-66 0 0273 -- guilsinglright
+14 750,692,3,0,-30 2 0274 -- onequarter
+12 750,692,3,0,-15 2 0275 -- onehalf
+34 750,689,3,0,-15 2 0276 -- threequarters
+r? 444,469,231,0,-43 0 0277 -- questiondown
+`A 778,908,3,0,-15 2 0300 -- Agrave
+'A 778,908,3,0,-15 2 0301 -- Aacute
+^A 778,908,3,0,-15 2 0302 -- Acircumflex
+~A 778,871,3,0,-15 2 0303 -- Atilde
+:A 778,868,3,0,-15 2 0304 -- Adieresis
+oA 778,927,3,0,-15 2 0305 -- Aring
+AE 944,692,3,0,10 2 0306 -- AE
+,C 709,709,225,0,-22 2 0307 -- Ccedilla
+`E 611,908,3,0,-22 2 0310 -- Egrave
+'E 611,908,3,0,-22 2 0311 -- Eacute
+^E 611,908,3,0,-22 2 0312 -- Ecircumflex
+:E 611,868,3,0,-22 2 0313 -- Edieresis
+`I 337,908,3,0,-22 2 0314 -- Igrave
+'I 337,908,3,0,-22 2 0315 -- Iacute
+^I 337,908,3,0,-13 2 0316 -- Icircumflex
+:I 337,868,3,0,-19 2 0317 -- Idieresis
+-D 774,692,3,0,-14 2 0320 -- Eth
+~N 831,871,20,0,-17 2 0321 -- Ntilde
+`O 786,908,20,0,-22 2 0322 -- Ograve
+'O 786,908,20,0,-22 2 0323 -- Oacute
+^O 786,908,20,0,-22 2 0324 -- Ocircumflex
+~O 786,883,20,0,-22 2 0325 -- Otilde
+:O 786,868,20,0,-22 2 0326 -- Odieresis
+tmu 606,474,0,0,-83 0 0327 -- multiply
+/O 833,709,20,0,-30 2 0330 -- Oslash
+`U 778,908,20,0,-12 2 0331 -- Ugrave
+'U 778,908,20,0,-12 2 0332 -- Uacute
+^U 778,908,20,0,-12 2 0333 -- Ucircumflex
+:U 778,868,20,0,-12 2 0334 -- Udieresis
+'Y 667,908,3,0,-9 2 0335 -- Yacute
+TP 604,692,3,0,-32 2 0336 -- Thorn
+ss 556,731,9,0,-23 2 0337 -- germandbls
+`a 500,697,12,0,-32 2 0340 -- agrave
+'a 500,697,12,0,-32 2 0341 -- aacute
+^a 500,697,12,0,-32 2 0342 -- acircumflex
+~a 500,652,12,0,-32 2 0343 -- atilde
+:a 500,657,12,0,-32 2 0344 -- adieresis
+oa 500,716,12,0,-32 2 0345 -- aring
+ae 758,469,20,0,-30 0 0346 -- ae
+,c 444,469,225,0,-26 0 0347 -- ccedilla
+`e 479,697,20,0,-26 2 0350 -- egrave
+'e 479,697,20,0,-26 2 0351 -- eacute
+^e 479,697,20,0,-26 2 0352 -- ecircumflex
+:e 479,657,20,0,-26 2 0353 -- edieresis
+`i 287,697,3,0,-8 2 0354 -- igrave
+'i 287,697,3,0,-21 2 0355 -- iacute
+^i 287,697,3,13,12 2 0356 -- icircumflex
+:i 287,657,3,6,6 2 0357 -- idieresis
+Sd 546,728,20,0,-32 2 0360 -- eth
+~n 582,652,3,0,-6 2 0361 -- ntilde
+`o 546,697,20,0,-32 2 0362 -- ograve
+'o 546,697,20,0,-32 2 0363 -- oacute
+^o 546,697,20,0,-32 2 0364 -- ocircumflex
+~o 546,652,20,0,-32 2 0365 -- otilde
+:o 546,657,20,0,-32 2 0366 -- odieresis
+tdi 606,512,0,0,-51 0 0367 -- divide
+/o 556,474,23,0,-16 0 0370 -- oslash
+`u 603,697,12,0,-18 2 0371 -- ugrave
+'u 603,697,12,0,-18 2 0372 -- uacute
+^u 603,697,12,0,-18 2 0373 -- ucircumflex
+:u 603,657,12,0,-18 2 0374 -- udieresis
+'y 556,697,283,0,-12 3 0375 -- yacute
+Tp 601,726,281,0,2 3 0376 -- thorn
+:y 556,657,283,0,-12 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/S b/contrib/groff/font/devps/S
index 3cf77d9..52d7fd6 100644
--- a/contrib/groff/font/devps/S
+++ b/contrib/groff/font/devps/S
@@ -4,224 +4,222 @@ 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,0,-128 3 0041 -- exclam
+fa 713,705,0,0,-31 3 0042 -- universal
+# 500,673,16,0,-20 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,0,0,-25 3 0044 -- existential
+% 833,655,36,0,-63 3 0045 -- percent
+& 778,661,18,0,-41 3 0046 -- ampersand
+st 439,500,17,0,-48 3 0047 -- suchthat
+( 333,673,191,0,-53 3 0050 -- parenleft
+) 333,673,191,0,-30 3 0051 -- parenright
+** 500,551,0,0,-65 3 0052 -- asteriskmath
++ 549,533,0,0,-10 3 0053 -- plus
pl "
-, 250,104,152 3 0054 -- comma
-\- 549,288 3 0055 -- minus
+, 250,104,152,0,-56 3 0054 -- comma
+\- 549,288,0,0,-11 3 0055 -- minus
mi "
-. 250,95,17 3 0056 -- period
+. 250,95,17,0,-69 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,0,-23 3 0060 -- zero
+1 500,673,0,0,-117 3 0061 -- one
+2 500,686,0,0,-25 3 0062 -- two
+3 500,685,17,0,-39 3 0063 -- three
+4 500,685,0,0,-16 3 0064 -- four
+5 500,685,17,0,-29 3 0065 -- five
+6 500,685,17,0,-36 3 0066 -- six
+7 500,673,16,0,-24 3 0067 -- seven
+8 500,685,18,0,-54 3 0070 -- eight
+9 500,685,18,0,-31 3 0071 -- nine
+: 278,460,17,0,-81 3 0072 -- colon
+; 278,460,152,0,-83 3 0073 -- semicolon
+< 549,522,0,0,-26 3 0074 -- less
+= 549,390,0,0,-11 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,0,0,-26 3 0076 -- greater
+? 444,686,17,0,-70 3 0077 -- question
+=~ 549,475,0,0,-11 3 0100 -- congruent
+*A 722,673,0,0,-4 3 0101 -- Alpha
+*B 667,673,0,0,-29 3 0102 -- Beta
+*X 722,673,0,0,9 3 0103 -- Chi
+*D 612,688,0,0,-6 3 0104 -- Delta
+*E 611,673,0,6,-32 3 0105 -- Epsilon
+*F 763,673,0,0,-26 3 0106 -- Phi
+*G 603,673,0,6,-24 3 0107 -- Gamma
+*Y 722,673,0,7,-39 3 0110 -- Eta
+*I 333,673,0,0,-32 3 0111 -- Iota
++h 631,689,18,0,-18 3 0112 -- theta1
+*K 722,673,0,0,-35 3 0113 -- Kappa
+*L 686,688,0,0,-6 3 0114 -- Lambda
+*M 889,673,0,0,-28 3 0115 -- Mu
+*N 722,673,8,0,-29 3 0116 -- Nu
+*O 722,685,17,0,-41 3 0117 -- Omicron
+*P 768,673,0,0,-25 3 0120 -- Pi
+*H 741,685,17,0,-41 3 0121 -- Theta
+*R 556,673,0,7,-28 3 0122 -- Rho
+*S 592,673,0,0,-5 3 0123 -- Sigma
+*T 611,673,0,0,-33 3 0124 -- Tau
+--- 690,673,0,4,8 3 0125 -- Upsilon
+ts 439,500,233,0,-40 3 0126 -- sigma1
+*W 768,688,0,0,-34 3 0127 -- Omega
+*C 645,673,0,0,-40 3 0130 -- Xi
+*Q 795,684,0,0,-15 3 0131 -- Psi
+*Z 611,673,0,25,-44 3 0132 -- Zeta
+[ 333,674,155,0,-86 3 0133 -- bracketleft
lB "
-3d 863,478 3 0134 -- therefore
+3d 863,478,0,0,-163 3 0134 -- therefore
tf "
-] 333,674,155 3 0135 -- bracketright
+] 333,674,155,0,-33 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
+pp 658,674,0,0,-15 3 0136 -- perpendicular
+_ 500,0,252,2,2 3 0137 -- underscore
+radicalex 500,917,0,590,-480 3 0140 -- radicalex
+*a 631,500,18,0,-41 3 0141 -- alpha
+*b 549,741,223,0,-61 3 0142 -- beta
+*x 549,499,231,0,-12 3 0143 -- chi
+*d 494,740,19,0,-40 3 0144 -- delta
+*e 439,502,19,0,-22 3 0145 -- epsilon
+*f 521,671,224,0,-27 3 0146 -- phi
+*g 411,499,225,73,-5 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
++f 603,499,224,0,-36 3 0152 -- phi1
+*k 549,501,0,9,-33 3 0153 -- kappa
+*l 549,739,17,0,-24 3 0154 -- lambda
+mc 576,500,223,0,-33 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,0,9 3 0156 -- nu
+*o 549,499,19,0,-35 3 0157 -- omicron
+*p 549,487,19,0,-10 3 0160 -- pi
+*h 521,690,17,0,-43 3 0161 -- theta
+*r 549,499,230,0,-50 3 0162 -- rho
+*s 603,500,21,0,-30 3 0163 -- sigma
+*t 439,500,19,0,-10 3 0164 -- tau
+*u 576,507,18,0,-7 3 0165 -- upsilon
++p 713,583,18,0,-12 3 0166 -- omega1
+*w 686,500,17,0,-42 3 0167 -- omega
+*c 493,766,224,0,-27 3 0170 -- xi
+*q 686,500,228,15,-12 3 0171 -- psi
+*z 494,756,225,0,-60 3 0172 -- zeta
+lC 480,673,183,0,-58 3 0173 -- braceleft
{ "
-ba 200,673,177 3 0174 -- bar
+ba 200,673,177,0,-65 3 0174 -- bar
| "
-rC 480,673,183 3 0175 -- braceright
+rC 480,673,183,0,-79 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,0,0,-17 3 0176 -- similar
+*U 620,685,0,0,2 3 0241 -- Upsilon1
+fm 247,735,0,0,-27 3 0242 -- minute
+<= 549,639,0,0,-29 3 0243 -- lessequal
+f/ 167,677,12,173,180 3 0244 -- fraction
+if 713,404,0,0,-26 3 0245 -- infinity
+Fn 500,686,193,0,-2 3 0246 -- florin
+CL 753,533,26,0,-86 3 0247 -- club
+DI 753,550,36,0,-142 3 0250 -- diamond
+HE 753,532,33,0,-117 3 0251 -- heart
+SP 753,548,36,0,-113 3 0252 -- spade
+<> 1042,511,15,0,-24 3 0253 -- arrowboth
+<- 987,511,15,0,-32 3 0254 -- arrowleft
+ua 603,910,0,0,-45 3 0255 -- arrowup
arrowverttp "
--> 987,511,15 3 0256 -- arrowright
-da 603,888,22 3 0257 -- arrowdown
+-> 987,511,15,0,-49 3 0256 -- arrowright
+da 603,888,22,0,-45 3 0257 -- arrowdown
arrowvertbt "
-de 400,685 3 0260 -- degree
-char176 "
-char177 549,645 3 0261 -- plusminus
+de 400,685,0,0,-50 3 0260 -- degree
+t+- 549,645,0,0,-10 3 0261 -- plusminus
+- "
-sd 411,737 3 0262 -- second
->= 549,639 3 0263 -- greaterequal
-char215 549,524 3 0264 -- multiply
+sd 411,737,0,2,-20 3 0262 -- second
+>= 549,639,0,0,-29 3 0263 -- greaterequal
+tmu 549,524,0,0,-17 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,0,0,-27 3 0265 -- proportional
+pd 494,746,20,0,-26 3 0266 -- partialdiff
+bu 460,473,0,0,-50 3 0267 -- bullet
+tdi 549,456,0,0,-10 3 0270 -- divide
di "
-!= 549,549,25 3 0271 -- notequal
-== 549,443 3 0272 -- equivalence
-~~ 549,394 3 0273 -- approxequal
+!= 549,549,25,0,-15 3 0271 -- notequal
+== 549,443,0,0,-14 3 0272 -- equivalence
+~~ 549,394,0,0,-14 3 0273 -- approxequal
~= "
---- 1000,95,17 3 0274 -- ellipsis
-arrowvertex 603,1010,120 3 0275 -- arrowvertex
-an 1000,276 3 0276 -- arrowhorizex
-CR 658,629,16 3 0277 -- carriagereturn
-Ah 823,658,18 3 0300 -- aleph
-Im 686,740,53 3 0301 -- Ifraktur
-Re 795,734,15 3 0302 -- Rfraktur
-wp 987,573,211 3 0303 -- weierstrass
-c* 768,673,17 3 0304 -- circlemultiply
-c+ 768,675,15 3 0305 -- circleplus
-es 823,719,24 3 0306 -- emptyset
-ca 768,509 3 0307 -- intersection
-cu 768,492,17 3 0310 -- union
-sp 713,470 3 0311 -- propersuperset
-ip 713,470,125 3 0312 -- reflexsuperset
-nb 713,540,70 3 0313 -- notsubset
-sb 713,470 3 0314 -- propersubset
-ib 713,470,125 3 0315 -- reflexsubset
-mo 713,468 3 0316 -- element
-nm 713,555,58 3 0317 -- notelement
-/_ 768,673 3 0320 -- angle
-gr 713,718,19 3 0321 -- gradient
---- 790,673,17 3 0322 -- registerserif
---- 790,675,15 3 0323 -- copyrightserif
---- 890,673 3 0324 -- trademarkserif
-product 823,751,101 3 0325 -- product
-sr 549,917,38 3 0326 -- radical
-md 250,310 3 0327 -- dotmath
-no 713,288 3 0330 -- logicalnot
-char172 "
-AN 603,454 3 0331 -- logicaland
-OR 603,477 3 0332 -- logicalor
-hA 1042,510,20 3 0333 -- arrowdblboth
-lA 987,513,15 3 0334 -- arrowdblleft
-uA 603,911 3 0335 -- arrowdblup
-rA 987,508,20 3 0336 -- arrowdblright
-dA 603,890,19 3 0337 -- arrowdbldown
-lz 494,745 3 0340 -- lozenge
-la 329,746,198 3 0341 -- angleleft
---- 790,670,20 3 0342 -- registersans
---- 790,675,15 3 0343 -- copyrightsans
---- 786,673 3 0344 -- trademarksans
-sum 713,752,108 3 0345 -- summation
-parenlefttp 384,926,293 3 0346 -- parenlefttp
-parenleftex 384,920,80 3 0347 -- parenleftex
-parenleftbt 384,920,293 3 0350 -- parenleftbt
+--- 1000,95,17,0,-111 3 0274 -- ellipsis
+arrowvertex 603,1010,120,0,-280 3 0275 -- arrowvertex
+an 1000,276,0,50,60 3 0276 -- arrowhorizex
+CR 658,629,16,0,-15 3 0277 -- carriagereturn
+Ah 823,658,18,0,-175 3 0300 -- aleph
+Im 686,740,53,0,-10 3 0301 -- Ifraktur
+Re 795,734,15,0,-26 3 0302 -- Rfraktur
+wp 987,573,211,0,-159 3 0303 -- weierstrass
+c* 768,673,17,0,-43 3 0304 -- circlemultiply
+c+ 768,675,15,0,-43 3 0305 -- circleplus
+es 823,719,24,0,-39 3 0306 -- emptyset
+ca 768,509,0,0,-40 3 0307 -- intersection
+cu 768,492,17,0,-40 3 0310 -- union
+sp 713,470,0,0,-20 3 0311 -- propersuperset
+ip 713,470,125,0,-20 3 0312 -- reflexsuperset
+nb 713,540,70,0,-36 3 0313 -- notsubset
+sb 713,470,0,0,-37 3 0314 -- propersubset
+ib 713,470,125,0,-37 3 0315 -- reflexsubset
+mo 713,468,0,0,-45 3 0316 -- element
+nm 713,555,58,0,-45 3 0317 -- notelement
+/_ 768,673,0,0,-26 3 0320 -- angle
+gr 713,718,19,0,-36 3 0321 -- gradient
+--- 790,673,17,0,-50 3 0322 -- registerserif
+--- 790,675,15,0,-51 3 0323 -- copyrightserif
+--- 890,673,0,0,-18 3 0324 -- trademarkserif
+product 823,751,101,0,-25 3 0325 -- product
+sr 549,917,38,0,-10 3 0326 -- radical
+md 250,310,0,0,-69 3 0327 -- dotmath
+no 713,288,0,0,-15 3 0330 -- logicalnot
+AN 603,454,0,0,-23 3 0331 -- logicaland
+OR 603,477,0,0,-30 3 0332 -- logicalor
+hA 1042,510,20,0,-27 3 0333 -- arrowdblboth
+lA 987,513,15,0,-30 3 0334 -- arrowdblleft
+uA 603,911,0,0,-39 3 0335 -- arrowdblup
+rA 987,508,20,0,-45 3 0336 -- arrowdblright
+dA 603,890,19,0,-44 3 0337 -- arrowdbldown
+lz 494,745,0,0,-18 3 0340 -- lozenge
+la 329,746,198,0,-25 3 0341 -- angleleft
+--- 790,670,20,0,-50 3 0342 -- registersans
+--- 790,675,15,0,-49 3 0343 -- copyrightsans
+--- 786,673,0,0,-5 3 0344 -- trademarksans
+sum 713,752,108,0,-14 3 0345 -- summation
+parenlefttp 384,926,293,52,-40 3 0346 -- parenlefttp
+parenleftex 384,920,80,0,-40 3 0347 -- parenleftex
+parenleftbt 384,920,293,52,-40 3 0350 -- parenleftbt
bracketlefttp 384,925,75 3 0351 -- bracketlefttp
lc "
bracketleftex 384,925,75 3 0352 -- bracketleftex
bracketleftbt 384,925,75 3 0353 -- bracketleftbt
lf "
-bracelefttp 494,925,75 3 0354 -- bracelefttp
+bracelefttp 494,925,75,0,-201 3 0354 -- bracelefttp
lt "
-braceleftmid 494,925,75 3 0355 -- braceleftmid
+braceleftmid 494,925,75,0,-14 3 0355 -- braceleftmid
lk "
-braceleftbt 494,925,75 3 0356 -- braceleftbt
+braceleftbt 494,925,75,0,-201 3 0356 -- braceleftbt
lb "
-braceex 494,925,75 3 0357 -- braceex
+braceex 494,925,75,0,-201 3 0357 -- braceex
bracerightex "
braceleftex "
barex "
bv "
-ra 329,746,198 3 0361 -- angleright
+ra 329,746,198,0,-21 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
+--- 686,921,83,29,-332 3 0363 -- integraltp
+--- 686,975,88,0,-332 3 0364 -- integralex
+--- 686,921,81,0,-39 3 0365 -- integralbt
+parenrighttp 384,926,293,66,-54 3 0366 -- parenrighttp
+parenrightex 384,920,80,66,-398 3 0367 -- parenrightex
+parenrightbt 384,920,293,66,-54 3 0370 -- parenrightbt
+bracketrighttp 384,925,75,0,-22 3 0371 -- bracketrighttp
rc "
-bracketrightex 384,925,75 3 0372 -- bracketrightex
-bracketrightbt 384,925,75 3 0373 -- bracketrightbt
+bracketrightex 384,925,75,0,-305 3 0372 -- bracketrightex
+bracketrightbt 384,925,75,0,-20 3 0373 -- bracketrightbt
rf "
-bracerighttp 494,925,75 3 0374 -- bracerighttp
+bracerighttp 494,925,75,0,-17 3 0374 -- bracerighttp
rt "
-bracerightmid 494,925,75 3 0375 -- bracerightmid
+bracerightmid 494,925,75,0,-201 3 0375 -- bracerightmid
rk "
-bracerightbt 494,925,75 3 0376 -- bracerightbt
+bracerightbt 494,925,75,0,-17 3 0376 -- bracerightbt
rb "
diff --git a/contrib/groff/font/devps/TB b/contrib/groff/font/devps/TB
index 4d1fc8c..69d2d52 100644
--- a/contrib/groff/font/devps/TB
+++ b/contrib/groff/font/devps/TB
@@ -83,7 +83,6 @@ T o -92
T i -18
T - -92
T hy -92
-T char173 -92
T e -92
T , -74
T : -74
@@ -100,7 +99,6 @@ V o -100
V i -37
V - -74
V hy -74
-V char173 -74
V e -100
V , -129
V : -92
@@ -116,7 +114,6 @@ W o -75
W i -18
W - -37
W hy -37
-W char173 -37
W e -65
W , -92
W : -55
@@ -130,7 +127,6 @@ Y o -111
Y i -37
Y - -92
Y hy -92
-Y char173 -92
Y e -111
Y , -92
Y : -92
@@ -194,7 +190,6 @@ r o -18
r n -15
r - -37
r hy -37
-r char173 -37
r g -10
r e -18
r , -92
@@ -212,337 +207,246 @@ 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,0,0,-73 2 0000 -- asciicircum
+ti 520,333,0,0,-29 0 0001 -- asciitilde
+vS 556,914,19,0,-35 2 0002 -- Scaron
+vZ 667,914,0,0,-28 2 0003 -- Zcaron
+vs 389,704,14,0,-25 2 0004 -- scaron
+vz 444,704,0,0,-21 2 0005 -- zcaron
+:Y 722,877,0,0,-15 2 0006 -- Ydieresis
+tm 1000,676,0,0,-24 2 0007 -- trademark
+aq 278,691,0,0,-75 2 0010 -- quotesingle
space 250 0 0040
-! 333,691,13 2 0041 -- exclam
-" 555,691 2 0042 -- quotedbl
+! 333,691,13,0,-81 2 0041 -- exclam
+" 555,691,0,0,-83 2 0042 -- quotedbl
dq "
-# 500,700 2 0043 -- numbersign
+# 500,700,0,0,-4 2 0043 -- numbersign
sh "
-$ 500,750,99 2 0044 -- dollar
+$ 500,750,99,0,-29 2 0044 -- dollar
Do "
-% 1000,692,14 2 0045 -- percent
-& 833,691,16 2 0046 -- ampersand
-' 333,691 2 0047 -- quoteright
+% 1000,692,14,0,-124 2 0045 -- percent
+& 833,691,16,0,-62 2 0046 -- ampersand
+' 333,691,0,0,-79 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
+( 333,694,168,0,-46 2 0050 -- parenleft
+) 333,694,168,0,-27 2 0051 -- parenright
+* 500,691,0,0,-56 2 0052 -- asterisk
++ 570,506,0,0,-33 0 0053 -- plus
+, 250,155,180,0,-39 0 0054 -- comma
+- 333,287,0,0,-44 0 0055 -- hyphen
hy "
-char173 "
-. 250,156,13 0 0056 -- period
-/ 278,691,19 2 0057 -- slash
+. 250,156,13,0,-41 0 0056 -- period
+/ 278,691,19,24,24 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,0,-24 2 0060 -- zero
+1 500,688,0,0,-65 2 0061 -- one
+2 500,688,0,0,-17 2 0062 -- two
+3 500,688,14,0,-16 2 0063 -- three
+4 500,688,0,0,-19 2 0064 -- four
+5 500,676,8,0,-22 2 0065 -- five
+6 500,688,13,0,-28 2 0066 -- six
+7 500,676,0,0,-17 2 0067 -- seven
+8 500,688,13,0,-28 2 0070 -- eight
+9 500,688,13,0,-26 2 0071 -- nine
+: 333,472,13,0,-82 0 0072 -- colon
+; 333,472,180,0,-82 0 0073 -- semicolon
+< 570,514,8,0,-31 0 0074 -- less
+= 570,399,0,0,-33 0 0075 -- equal
+> 570,514,8,0,-31 0 0076 -- greater
+? 500,689,13,0,-57 2 0077 -- question
+@ 930,691,19,0,-108 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,0,0,-9 2 0101 -- A
+B 667,676,0,0,-16 2 0102 -- B
+C 722,691,19,0,-49 2 0103 -- C
+D 722,676,0,0,-14 2 0104 -- D
+E 667,676,0,0,-16 2 0105 -- E
+F 611,676,0,0,-16 2 0106 -- F
+G 778,691,19,0,-37 2 0107 -- G
+H 778,676,0,0,-21 2 0110 -- H
+I 389,676,0,0,-20 2 0111 -- I
+J 500,676,96,0,-3 2 0112 -- J
+K 778,676,0,0,-30 2 0113 -- K
+L 667,676,0,0,-19 2 0114 -- L
+M 944,676,0,0,-14 2 0115 -- M
+N 722,676,18,0,-16 2 0116 -- N
+O 778,691,19,0,-35 2 0117 -- O
+P 611,676,0,0,-16 2 0120 -- P
+Q 778,691,176,0,-35 2 0121 -- Q
+R 722,676,0,0,-26 2 0122 -- R
+S 556,692,19,0,-35 2 0123 -- S
+T 667,676,0,0,-31 2 0124 -- T
+U 722,676,19,0,-16 2 0125 -- U
+V 722,676,18,0,-16 2 0126 -- V
+W 1000,676,15,0,-19 2 0127 -- W
+X 722,676,0,0,-16 2 0130 -- X
+Y 722,676,0,0,-15 2 0131 -- Y
+Z 667,676,0,0,-28 2 0132 -- Z
+[ 333,678,149,0,-67 2 0133 -- bracketleft
lB "
-\ 278,691,19 2 0134 -- backslash
+\ 278,691,19,25,25 2 0134 -- backslash
rs "
-] 333,678,149 2 0135 -- bracketright
+] 333,678,149,0,-32 2 0135 -- bracketright
rB "
-a^ 333,704 2 0136 -- circumflex
+a^ 333,704,0,2,2 2 0136 -- circumflex
^ "
_ 500,0,125 0 0137 -- underscore
-` 333,691 2 0140 -- quoteleft
+` 333,691,0,0,-70 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,-25 0 0141 -- a
+b 556,676,14,0,-17 2 0142 -- b
+c 444,473,14,0,-25 0 0143 -- c
+d 556,676,14,0,-25 2 0144 -- d
+e 444,473,14,0,-25 0 0145 -- e
+f 333,691,0,56,-14 2 0146 -- f
+g 500,473,206,0,-28 1 0147 -- g
+h 556,676,0,0,-16 2 0150 -- h
+i 278,691,0,0,-16 2 0151 -- i
+j 333,691,203,0,57 3 0152 -- j
+k 556,676,0,0,-22 2 0153 -- k
+l 278,676,0,0,-16 2 0154 -- l
+m 833,473,0,0,-16 0 0155 -- m
+n 556,473,0,0,-21 0 0156 -- n
+o 500,473,14,0,-25 0 0157 -- o
+p 556,473,205,0,-19 1 0160 -- p
+q 556,473,205,0,-34 1 0161 -- q
+r 444,473,0,0,-29 0 0162 -- r
+s 389,473,14,0,-25 0 0163 -- s
+t 333,630,12,0,-20 2 0164 -- t
+u 556,461,14,0,-16 0 0165 -- u
+v 500,461,14,0,-21 0 0166 -- v
+w 722,461,14,0,-23 0 0167 -- w
+x 500,461,0,0,-12 0 0170 -- x
+y 500,461,205,0,-16 1 0171 -- y
+z 444,461,0,0,-21 0 0172 -- z
+lC 394,698,175,0,-22 2 0173 -- braceleft
{ "
-ba 220,691,19 2 0174 -- bar
+ba 220,691,19,0,-66 2 0174 -- bar
| "
-rC 394,698,175 2 0175 -- braceright
+rC 394,698,175,0,-54 2 0175 -- braceright
} "
-a~ 333,674 2 0176 -- tilde
+a~ 333,674,0,16,16 2 0176 -- tilde
~ "
-bq 333,155,180 0 0200 -- quotesinglbase
-Fo 500,415 0 0201 -- guillemotleft
-char171 "
-Fc 500,415 0 0202 -- guillemotright
-char187 "
-bu 350,478 0 0203 -- bullet
+bq 333,155,180,0,-79 0 0200 -- quotesinglbase
+Fo 500,415,0,0,-23 0 0201 -- guillemotleft
+Fc 500,415,0,0,-27 0 0202 -- guillemotright
+bu 350,478,0,0,-35 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
+f/ 167,688,12,162,168 2 0205 -- fraction
+%0 1000,706,29,0,-7 2 0206 -- perthousand
+dg 500,691,134,0,-47 2 0207 -- dagger
+dd 500,691,132,0,-45 2 0210 -- daggerdbl
en 500,271 0 0211 -- endash
em 1000,271 0 0212 -- emdash
-fi 556,691 2 0214 -- fi
-fl 556,691 2 0215 -- fl
-.i 278,461 0 0220 -- dotlessi
-ga 333,713 2 0222 -- grave
-a" 333,713 2 0223 -- hungarumlaut
-a. 333,667 2 0224 -- dotaccent
-ab 333,691 2 0225 -- breve
-ah 333,704 2 0226 -- caron
-ao 333,740 2 0227 -- ring
-ho 333,44,173 0 0230 -- ogonek
-lq 500,691 2 0231 -- quotedblleft
-rq 500,691 2 0232 -- quotedblright
-oe 722,473,14 0 0233 -- oe
-/l 278,676 2 0234 -- lslash
-Bq 500,155,180 0 0235 -- quotedblbase
-OE 1000,684,5 2 0236 -- OE
-/L 667,676 2 0237 -- Lslash
-r! 333,501,203 1 0241 -- exclamdown
-char161 "
-ct 500,588,140 0 0242 -- cent
-char162 "
-Po 500,684,14 2 0243 -- sterling
-char163 "
-Cs 500,613 0 0244 -- currency
-char164 "
-Ye 500,676 2 0245 -- yen
-char165 "
-bb 220,691,19 2 0246 -- brokenbar
-char166 "
-sc 500,691,132 2 0247 -- section
-char167 "
-ad 333,667 2 0250 -- dieresis
-char168 "
-co 747,691,19 2 0251 -- copyright
-char169 "
-Of 300,688 2 0252 -- ordfeminine
-char170 "
-fo 333,415 0 0253 -- guilsinglleft
-no 570,399 0 0254 -- logicalnot
-char172 "
-\- 570,297 0 0255 -- minus
-rg 747,691,19 2 0256 -- registered
-char174 "
-a- 333,637 2 0257 -- macron
-char175 "
-de 400,688 2 0260 -- degree
-char176 "
-char177 570,506 0 0261 -- plusminus
+fi 556,691,0,0,-14 2 0214 -- fi
+fl 556,691,0,0,-14 2 0215 -- fl
+.i 278,461,0,0,-16 0 0220 -- dotlessi
+ga 333,713,0,0,-8 2 0222 -- grave
+a" 333,713,0,92,13 2 0223 -- hungarumlaut
+a. 333,667,0,0,-103 2 0224 -- dotaccent
+ab 333,691,0,0,-15 2 0225 -- breve
+ah 333,704,0,2,2 2 0226 -- caron
+ao 333,740,0,0,-60 2 0227 -- ring
+ho 333,44,173,0,-90 0 0230 -- ogonek
+lq 500,691,0,0,-32 2 0231 -- quotedblleft
+rq 500,691,0,0,-14 2 0232 -- quotedblright
+oe 722,473,14,0,-22 0 0233 -- oe
+/l 278,676,0,25,22 2 0234 -- lslash
+Bq 500,155,180,0,-14 0 0235 -- quotedblbase
+OE 1000,684,5,0,-22 2 0236 -- OE
+/L 667,676,0,0,-19 2 0237 -- Lslash
+r! 333,501,203,0,-82 1 0241 -- exclamdown
+ct 500,588,140,0,-53 0 0242 -- cent
+Po 500,684,14,0,-21 2 0243 -- sterling
+Cs 500,613,0,26,26 0 0244 -- currency
+Ye 500,676,0,47,64 2 0245 -- yen
+bb 220,691,19,0,-66 2 0246 -- brokenbar
+sc 500,691,132,0,-57 2 0247 -- section
+ad 333,667,0,2,2 2 0250 -- dieresis
+co 747,691,19,0,-26 2 0251 -- copyright
+Of 300,688,0,1,1 2 0252 -- ordfeminine
+fo 333,415,0,0,-51 0 0253 -- guilsinglleft
+no 570,399,0,0,-33 0 0254 -- logicalnot
+\- 570,297,0,0,-33 0 0255 -- minus
+rg 747,691,19,0,-26 2 0256 -- registered
+a- 333,637,0,0,-1 2 0257 -- macron
+de 400,688,0,0,-57 2 0260 -- degree
+t+- 570,506,0,0,-33 0 0261 -- plusminus
S2 300,688 2 0262 -- twosuperior
-char178 "
-S3 300,688 2 0263 -- threesuperior
-char179 "
-aa 333,713 2 0264 -- acute
-char180 "
-char181 556,461,206 1 0265 -- mu
+S3 300,688,0,0,-3 2 0263 -- threesuperior
+aa 333,713,0,0,-86 2 0264 -- acute
+mc 556,461,206,0,-33 1 0265 -- mu
ps 540,676,186 2 0266 -- paragraph
-char182 "
-pc 250,417 0 0267 -- periodcentered
-char183 "
-ac 333,0,218 1 0270 -- cedilla
-char184 "
-S1 300,688 2 0271 -- onesuperior
-char185 "
-Om 330,688 2 0272 -- ordmasculine
-char186 "
-fc 333,415 0 0273 -- guilsinglright
-14 750,688,12 2 0274 -- onequarter
-char188 "
-12 750,688,12 2 0275 -- onehalf
-char189 "
-34 750,688,12 2 0276 -- threequarters
-char190 "
-r? 500,501,201 0 0277 -- questiondown
-char191 "
-`A 722,923 2 0300 -- Agrave
-char192 "
-'A 722,923 2 0301 -- Aacute
-char193 "
-^A 722,914 2 0302 -- Acircumflex
-char194 "
-~A 722,884 2 0303 -- Atilde
-char195 "
-:A 722,877 2 0304 -- Adieresis
-char196 "
-oA 722,935 2 0305 -- Aring
-char197 "
-AE 1000,676 2 0306 -- AE
-char198 "
-,C 722,691,218 3 0307 -- Ccedilla
-char199 "
-`E 667,923 2 0310 -- Egrave
-char200 "
-'E 667,923 2 0311 -- Eacute
-char201 "
-^E 667,914 2 0312 -- Ecircumflex
-char202 "
-:E 667,877 2 0313 -- Edieresis
-char203 "
-`I 389,923 2 0314 -- Igrave
-char204 "
-'I 389,923 2 0315 -- Iacute
-char205 "
-^I 389,914 2 0316 -- Icircumflex
-char206 "
-:I 389,877 2 0317 -- Idieresis
-char207 "
--D 722,676 2 0320 -- Eth
-char208 "
-~N 722,884,18 2 0321 -- Ntilde
-char209 "
-`O 778,923,19 2 0322 -- Ograve
-char210 "
-'O 778,923,19 2 0323 -- Oacute
-char211 "
-^O 778,914,19 2 0324 -- Ocircumflex
-char212 "
-~O 778,884,19 2 0325 -- Otilde
-char213 "
-:O 778,877,19 2 0326 -- Odieresis
-char214 "
-char215 570,490 0 0327 -- multiply
-/O 778,737,74 2 0330 -- Oslash
-char216 "
-`U 722,923,19 2 0331 -- Ugrave
-char217 "
-'U 722,923,19 2 0332 -- Uacute
-char218 "
-^U 722,914,19 2 0333 -- Ucircumflex
-char219 "
-:U 722,877,19 2 0334 -- Udieresis
-char220 "
-'Y 722,928 2 0335 -- Yacute
-char221 "
-TP 611,676 2 0336 -- Thorn
-char222 "
-ss 556,691,12 2 0337 -- germandbls
-char223 "
-`a 500,713,14 2 0340 -- agrave
-char224 "
-'a 500,713,14 2 0341 -- aacute
-char225 "
-^a 500,704,14 2 0342 -- acircumflex
-char226 "
-~a 500,674,14 2 0343 -- atilde
-char227 "
-:a 500,667,14 2 0344 -- adieresis
-char228 "
-oa 500,740,14 2 0345 -- aring
-char229 "
-ae 722,473,14 0 0346 -- ae
-char230 "
-,c 444,473,218 1 0347 -- ccedilla
-char231 "
-`e 444,713,14 2 0350 -- egrave
-char232 "
-'e 444,713,14 2 0351 -- eacute
-char233 "
-^e 444,704,14 2 0352 -- ecircumflex
-char234 "
-:e 444,667,14 2 0353 -- edieresis
-char235 "
-`i 278,713 2 0354 -- igrave
-char236 "
-'i 278,713 2 0355 -- iacute
-char237 "
-^i 278,704 2 0356 -- icircumflex
-char238 "
-:i 278,667 2 0357 -- idieresis
-char239 "
-Sd 500,691,14 2 0360 -- eth
-char240 "
-~n 556,674 2 0361 -- ntilde
-char241 "
-`o 500,713,14 2 0362 -- ograve
-char242 "
-'o 500,713,14 2 0363 -- oacute
-char243 "
-^o 500,704,14 2 0364 -- ocircumflex
-char244 "
-~o 500,674,14 2 0365 -- otilde
-char245 "
-:o 500,667,14 2 0366 -- odieresis
-char246 "
-char247 570,537,31 0 0367 -- divide
-/o 500,549,92 0 0370 -- oslash
-char248 "
-`u 556,713,14 2 0371 -- ugrave
-char249 "
-'u 556,713,14 2 0372 -- uacute
-char250 "
-^u 556,704,14 2 0373 -- ucircumflex
-char251 "
-:u 556,667,14 2 0374 -- udieresis
-char252 "
-'y 500,713,205 3 0375 -- yacute
-char253 "
-Tp 556,676,205 3 0376 -- thorn
-char254 "
-:y 500,667,205 3 0377 -- ydieresis
-char255 "
+pc 250,417,0,0,-41 0 0267 -- periodcentered
+ac 333,0,218,0,-68 1 0270 -- cedilla
+S1 300,688,0,0,-28 2 0271 -- onesuperior
+Om 330,688,0,0,-18 2 0272 -- ordmasculine
+fc 333,415,0,0,-28 0 0273 -- guilsinglright
+14 750,688,12,0,-28 2 0274 -- onequarter
+12 750,688,12,25,7 2 0275 -- onehalf
+34 750,688,12,0,-23 2 0276 -- threequarters
+r? 500,501,201,0,-55 0 0277 -- questiondown
+`A 722,923,0,0,-9 2 0300 -- Agrave
+'A 722,923,0,0,-9 2 0301 -- Aacute
+^A 722,914,0,0,-9 2 0302 -- Acircumflex
+~A 722,884,0,0,-9 2 0303 -- Atilde
+:A 722,877,0,0,-9 2 0304 -- Adieresis
+oA 722,935,0,0,-9 2 0305 -- Aring
+AE 1000,676,0,0,-4 2 0306 -- AE
+,C 722,691,218,0,-49 3 0307 -- Ccedilla
+`E 667,923,0,0,-16 2 0310 -- Egrave
+'E 667,923,0,0,-16 2 0311 -- Eacute
+^E 667,914,0,0,-16 2 0312 -- Ecircumflex
+:E 667,877,0,0,-16 2 0313 -- Edieresis
+`I 389,923,0,0,-20 2 0314 -- Igrave
+'I 389,923,0,0,-20 2 0315 -- Iacute
+^I 389,914,0,0,-20 2 0316 -- Icircumflex
+:I 389,877,0,0,-20 2 0317 -- Idieresis
+-D 722,676,0,0,-6 2 0320 -- Eth
+~N 722,884,18,0,-16 2 0321 -- Ntilde
+`O 778,923,19,0,-35 2 0322 -- Ograve
+'O 778,923,19,0,-35 2 0323 -- Oacute
+^O 778,914,19,0,-35 2 0324 -- Ocircumflex
+~O 778,884,19,0,-35 2 0325 -- Otilde
+:O 778,877,19,0,-35 2 0326 -- Odieresis
+tmu 570,490,0,0,-48 0 0327 -- multiply
+/O 778,737,74,0,-35 2 0330 -- Oslash
+`U 722,923,19,0,-16 2 0331 -- Ugrave
+'U 722,923,19,0,-16 2 0332 -- Uacute
+^U 722,914,19,0,-16 2 0333 -- Ucircumflex
+:U 722,877,19,0,-16 2 0334 -- Udieresis
+'Y 722,928,0,0,-15 2 0335 -- Yacute
+TP 611,676,0,0,-16 2 0336 -- Thorn
+ss 556,691,12,0,-19 2 0337 -- germandbls
+`a 500,713,14,0,-25 2 0340 -- agrave
+'a 500,713,14,0,-25 2 0341 -- aacute
+^a 500,704,14,0,-25 2 0342 -- acircumflex
+~a 500,674,14,0,-25 2 0343 -- atilde
+:a 500,667,14,0,-25 2 0344 -- adieresis
+oa 500,740,14,0,-25 2 0345 -- aring
+ae 722,473,14,0,-33 0 0346 -- ae
+,c 444,473,218,0,-25 1 0347 -- ccedilla
+`e 444,713,14,0,-25 2 0350 -- egrave
+'e 444,713,14,0,-25 2 0351 -- eacute
+^e 444,704,14,0,-25 2 0352 -- ecircumflex
+:e 444,667,14,0,-25 2 0353 -- edieresis
+`i 278,713,0,0,26 2 0354 -- igrave
+'i 278,713,0,12,-16 2 0355 -- iacute
+^i 278,704,0,23,36 2 0356 -- icircumflex
+:i 278,667,0,23,36 2 0357 -- idieresis
+Sd 500,691,14,0,-25 2 0360 -- eth
+~n 556,674,0,0,-21 2 0361 -- ntilde
+`o 500,713,14,0,-25 2 0362 -- ograve
+'o 500,713,14,0,-25 2 0363 -- oacute
+^o 500,704,14,0,-25 2 0364 -- ocircumflex
+~o 500,674,14,0,-25 2 0365 -- otilde
+:o 500,667,14,0,-25 2 0366 -- odieresis
+tdi 570,537,31,0,-33 0 0367 -- divide
+/o 500,549,92,0,-25 0 0370 -- oslash
+`u 556,713,14,0,-16 2 0371 -- ugrave
+'u 556,713,14,0,-16 2 0372 -- uacute
+^u 556,704,14,0,-16 2 0373 -- ucircumflex
+:u 556,667,14,0,-16 2 0374 -- udieresis
+'y 500,713,205,0,-16 3 0375 -- yacute
+Tp 556,676,205,0,-19 3 0376 -- thorn
+:y 500,667,205,0,-16 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/TBI b/contrib/groff/font/devps/TBI
index a79efb7..1b07ee3 100644
--- a/contrib/groff/font/devps/TBI
+++ b/contrib/groff/font/devps/TBI
@@ -83,7 +83,6 @@ T o -95
T i -37
T - -92
T hy -92
-T char173 -92
T e -92
T , -92
T : -74
@@ -98,7 +97,6 @@ V o -111
V i -55
V - -70
V hy -70
-V char173 -70
V e -111
V , -129
V : -74
@@ -114,7 +112,6 @@ W o -80
W i -37
W - -50
W hy -50
-W char173 -50
W e -90
W , -74
W : -55
@@ -128,7 +125,6 @@ Y o -111
Y i -55
Y - -92
Y hy -92
-Y char173 -92
Y e -111
Y , -92
Y : -92
@@ -223,7 +219,6 @@ cq "
, 250,134,182,0,110 0 0054 -- comma
- 333,282,0,0,48 0 0055 -- hyphen
hy "
-char173 "
. 250,135,13,0,59 0 0056 -- period
/ 278,685,18,114,114,99 2 0057 -- slash
sl "
@@ -318,9 +313,7 @@ a~ 333,655,0,124,2,99 2 0176 -- tilde
~ "
bq 333,134,182,0,55 0 0200 -- quotesinglbase
Fo 500,415,0,18,38,18 0 0201 -- guillemotleft
-char171 "
Fc 500,415,0,18,38,18 0 0202 -- guillemotright
-char187 "
bu 350,525,0,50,50,50 0 0203 -- bullet
Fn 500,707,156,87,137,87 2 0204 -- florin
f/ 167,683,14,207,219,99 2 0205 -- fraction
@@ -347,185 +340,97 @@ Bq 500,134,182,0,107 0 0235 -- quotedblbase
OE 944,677,8,52,27,52 2 0236 -- OE
/L 611,669,0,29,72,29 2 0237 -- Lslash
r! 389,492,205,0,31 1 0241 -- exclamdown
-char161 "
ct 500,576,143,0,8 0 0242 -- cent
-char162 "
Po 500,683,12,60,82,60 2 0243 -- sterling
-char163 "
Cs 500,586,0,76,76,76 0 0244 -- currency
-char164 "
Ye 500,669,0,178,17,99 2 0245 -- yen
-char165 "
bb 220,685,18,0,-16 2 0246 -- brokenbar
-char166 "
sc 500,685,143,9,14,9 2 0247 -- section
-char167 "
ad 333,655,0,114,-5,99 2 0250 -- dieresis
-char168 "
co 747,685,18,21,20,21 2 0251 -- copyright
-char169 "
Of 266,685,0,114,34,99 2 0252 -- ordfeminine
-char170 "
fo 333,415,0,20,18,20 0 0253 -- guilsinglleft
no 606,399,0,0,-1 0 0254 -- logicalnot
-char172 "
\- 606,297,0,0,-1 0 0255 -- minus
rg 747,685,18,21,20,21 2 0256 -- registered
-char174 "
a- 333,623,0,110,-1,99 2 0257 -- macron
-char175 "
de 400,683,0,19,-33,19 2 0260 -- degree
-char176 "
-char177 570,506,0,17,17,17 0 0261 -- plusminus
+t+- 570,506,0,17,17,17 0 0261 -- plusminus
S2 300,683,0,63,48,63 2 0262 -- twosuperior
-char178 "
S3 300,683,0,71,33,71 2 0263 -- threesuperior
-char179 "
aa 333,697,0,96,-89,96 2 0264 -- acute
-char180 "
-char181 576,449,207,0,110 1 0265 -- mu
+mc 576,449,207,0,110 1 0265 -- mu
ps 500,669,193,112,107,99 2 0266 -- paragraph
-char182 "
pc 250,405,0,0,-1 0 0267 -- periodcentered
-char183 "
ac 333,5,218,0,130 1 0270 -- cedilla
-char184 "
S1 300,683,0,51,20,51 2 0271 -- onesuperior
-char185 "
Om 300,685,0,97,-6,97 2 0272 -- ordmasculine
-char186 "
fc 333,415,0,0,40 0 0273 -- guilsinglright
14 750,683,14,21,43,21 2 0274 -- onequarter
-char188 "
12 750,683,14,23,59,23 2 0275 -- onehalf
-char189 "
34 750,683,14,26,43,26 2 0276 -- threequarters
-char190 "
r? 500,492,205,0,20 1 0277 -- questiondown
-char191 "
`A 667,904,0,0,117 2 0300 -- Agrave
-char192 "
'A 667,904,0,0,117 2 0301 -- Aacute
-char193 "
^A 667,897,0,0,117 2 0302 -- Acircumflex
-char194 "
~A 667,862,0,0,117 2 0303 -- Atilde
-char195 "
:A 667,862,0,0,117 2 0304 -- Adieresis
-char196 "
oA 667,921,0,0,117 2 0305 -- Aring
-char197 "
AE 944,669,0,24,114,24 2 0306 -- AE
-char198 "
,C 667,685,218,60,18,60 3 0307 -- Ccedilla
-char199 "
`E 667,904,0,36,77,36 2 0310 -- Egrave
-char200 "
'E 667,904,0,36,77,36 2 0311 -- Eacute
-char201 "
^E 667,897,0,36,77,36 2 0312 -- Ecircumflex
-char202 "
:E 667,862,0,36,77,36 2 0313 -- Edieresis
-char203 "
`I 389,904,0,67,82,67 2 0314 -- Igrave
-char204 "
'I 389,904,0,73,82,73 2 0315 -- Iacute
-char205 "
^I 389,897,0,81,82,81 2 0316 -- Icircumflex
-char206 "
:I 389,862,0,106,82,99 2 0317 -- Idieresis
-char207 "
-D 722,669,0,28,81,28 2 0320 -- Eth
-char208 "
~N 722,862,15,76,77,76 2 0321 -- Ntilde
-char209 "
`O 722,904,18,19,23,19 2 0322 -- Ograve
-char210 "
'O 722,904,18,19,23,19 2 0323 -- Oacute
-char211 "
^O 722,897,18,19,23,19 2 0324 -- Ocircumflex
-char212 "
~O 722,862,18,19,23,19 2 0325 -- Otilde
-char213 "
:O 722,862,18,19,23,19 2 0326 -- Odieresis
-char214 "
-char215 570,490,0,2,2,2 0 0327 -- multiply
+tmu 570,490,0,2,2,2 0 0327 -- multiply
/O 722,764,125,19,23,19 2 0330 -- Oslash
-char216 "
`U 722,904,18,72,-17,72 2 0331 -- Ugrave
-char217 "
'U 722,904,18,72,-17,72 2 0332 -- Uacute
-char218 "
^U 722,897,18,72,-17,72 2 0333 -- Ucircumflex
-char219 "
:U 722,862,18,72,-17,72 2 0334 -- Udieresis
-char220 "
'Y 611,904,0,98,-23,98 2 0335 -- Yacute
-char221 "
TP 611,669,0,12,77,12 2 0336 -- Thorn
-char222 "
ss 500,705,200,23,250,23 2 0337 -- germandbls
-char223 "
`a 500,697,14,5,71,5 2 0340 -- agrave
-char224 "
'a 500,697,14,13,71,13 2 0341 -- aacute
-char225 "
^a 500,690,14,5,71,5 2 0342 -- acircumflex
-char226 "
~a 500,655,14,41,71,41 2 0343 -- atilde
-char227 "
:a 500,655,14,21,71,21 2 0344 -- adieresis
-char228 "
oa 500,729,14,5,71,5 2 0345 -- aring
-char229 "
ae 722,462,13,1,55,1 0 0346 -- ae
-char230 "
,c 444,462,218,0,74 1 0347 -- ccedilla
-char231 "
`e 444,697,13,4,45,4 2 0350 -- egrave
-char232 "
'e 444,697,13,41,45,41 2 0351 -- eacute
-char233 "
^e 444,690,13,29,45,29 2 0352 -- ecircumflex
-char234 "
:e 444,655,13,49,45,49 2 0353 -- edieresis
-char235 "
`i 278,697,9,32,48,32 2 0354 -- igrave
-char236 "
'i 278,697,9,124,48,99 2 0355 -- iacute
-char237 "
^i 278,690,9,97,52,97 2 0356 -- icircumflex
-char238 "
:i 278,655,9,132,48,99 2 0357 -- idieresis
-char239 "
Sd 500,699,13,4,53,4 2 0360 -- eth
-char240 "
~n 556,655,9,0,56 2 0361 -- ntilde
-char241 "
`o 500,697,13,0,53 2 0362 -- ograve
-char242 "
'o 500,697,13,13,53,13 2 0363 -- oacute
-char243 "
^o 500,690,13,1,53,1 2 0364 -- ocircumflex
-char244 "
~o 500,655,13,41,53,41 2 0365 -- otilde
-char245 "
:o 500,655,13,16,53,16 2 0366 -- odieresis
-char246 "
-char247 570,535,29,17,17,17 0 0367 -- divide
+tdi 570,535,29,17,17,17 0 0367 -- divide
/o 500,560,119,0,53 0 0370 -- oslash
-char248 "
`u 556,697,9,0,35 2 0371 -- ugrave
-char249 "
'u 556,697,9,0,35 2 0372 -- uacute
-char250 "
^u 556,690,9,0,35 2 0373 -- ucircumflex
-char251 "
:u 556,655,9,0,35 2 0374 -- udieresis
-char252 "
'y 444,697,205,41,144,41 3 0375 -- yacute
-char253 "
Tp 500,699,205,0,170 3 0376 -- thorn
-char254 "
:y 444,655,205,44,144,44 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/TI b/contrib/groff/font/devps/TI
index 992089d..5e2bebb 100644
--- a/contrib/groff/font/devps/TI
+++ b/contrib/groff/font/devps/TI
@@ -82,7 +82,6 @@ T o -92
T i -55
T - -74
T hy -74
-T char173 -74
T e -92
T , -74
T : -55
@@ -99,7 +98,6 @@ V o -111
V i -74
V - -55
V hy -55
-V char173 -55
V e -111
V , -129
V : -65
@@ -114,7 +112,6 @@ W o -92
W i -55
W - -37
W hy -37
-W char173 -37
W e -92
W , -92
W : -65
@@ -128,7 +125,6 @@ Y o -92
Y i -74
Y - -74
Y hy -74
-Y char173 -74
Y e -92
Y , -92
Y : -65
@@ -194,7 +190,6 @@ r . -111
r o -45
r - -20
r hy -20
-r char173 -20
r g -37
r e -37
r d -37
@@ -236,7 +231,6 @@ cq "
, 250,101,129,0,54 0 0054 -- comma
- 333,255,0,0,1 0 0055 -- hyphen
hy "
-char173 "
. 250,100,11,0,23 0 0056 -- period
/ 278,666,18,158,115,43 2 0057 -- slash
sl "
@@ -331,9 +325,7 @@ a~ 333,624,0,144,-50,43 2 0176 -- tilde
~ "
bq 333,101,129,0,6 0 0200 -- quotesinglbase
Fo 500,403,0,0,-3 0 0201 -- guillemotleft
-char171 "
Fc 500,403,0,0,-5 0 0202 -- guillemotright
-char187 "
bu 350,461,0,10,10,10 0 0203 -- bullet
Fn 500,682,182,57,25,43 2 0204 -- florin
f/ 167,676,10,220,219,43 2 0205 -- fraction
@@ -360,185 +352,97 @@ Bq 556,101,129,0,-7 0 0235 -- quotedblbase
OE 944,666,8,70,1,43 2 0236 -- OE
/L 556,653,0,53,58,43 2 0237 -- Lslash
r! 389,473,205,0,-9 1 0241 -- exclamdown
-char161 "
ct 500,560,143,22,-27,22 2 0242 -- cent
-char162 "
Po 500,670,6,67,40,43 2 0243 -- sterling
-char163 "
Cs 500,597,0,72,72,43 2 0244 -- currency
-char164 "
Ye 500,653,0,153,23,43 2 0245 -- yen
-char165 "
bb 275,666,18,0,-55 2 0246 -- brokenbar
-char166 "
sc 500,666,162,11,-3,11 2 0247 -- section
-char167 "
ad 333,606,0,122,-57,43 2 0250 -- dieresis
-char168 "
co 760,666,18,9,9,9 2 0251 -- copyright
-char169 "
Of 276,676,0,126,8,43 2 0252 -- ordfeminine
-char170 "
fo 333,403,0,0,-1 0 0253 -- guilsinglleft
no 675,386,0,0,-36 0 0254 -- logicalnot
-char172 "
\- 675,286,0,0,-36 0 0255 -- minus
rg 760,666,18,9,9,9 2 0256 -- registered
-char174 "
a- 333,583,0,128,-49,43 2 0257 -- macron
-char175 "
de 400,676,0,37,-51,37 2 0260 -- degree
-char176 "
-char177 675,506,0,0,-36 0 0261 -- plusminus
+t+- 675,506,0,0,-36 0 0261 -- plusminus
S2 300,676,0,74,17,43 2 0262 -- twosuperior
-char178 "
S3 300,676,0,89,7,43 2 0263 -- threesuperior
-char179 "
aa 333,664,0,120,-130,43 2 0264 -- acute
-char180 "
-char181 500,428,209,47,80,43 1 0265 -- mu
+mc 500,428,209,47,80,43 1 0265 -- mu
ps 523,653,123,143,-5,43 2 0266 -- paragraph
-char182 "
pc 250,310,0,0,-20 0 0267 -- periodcentered
-char183 "
ac 333,0,217,0,80 1 0270 -- cedilla
-char184 "
S1 300,676,0,34,7,34 2 0271 -- onesuperior
-char185 "
Om 310,676,0,102,-17,43 2 0272 -- ordmasculine
-char186 "
fc 333,403,0,0,-2 0 0273 -- guilsinglright
14 750,676,10,36,17,36 2 0274 -- onequarter
-char188 "
12 750,676,10,49,16,43 2 0275 -- onehalf
-char189 "
34 750,676,10,36,27,36 2 0276 -- threequarters
-char190 "
r? 500,471,205,0,22 1 0277 -- questiondown
-char191 "
`A 611,876,0,3,101,3 2 0300 -- Agrave
-char192 "
'A 611,876,0,3,101,3 2 0301 -- Aacute
-char193 "
^A 611,873,0,3,101,3 2 0302 -- Acircumflex
-char194 "
~A 611,836,0,5,101,5 2 0303 -- Atilde
-char195 "
:A 611,818,0,3,101,3 2 0304 -- Adieresis
-char196 "
oA 611,883,0,3,101,3 2 0305 -- Aring
-char197 "
AE 889,653,0,72,77,43 2 0306 -- AE
-char198 "
,C 667,666,217,72,-16,43 3 0307 -- Ccedilla
-char199 "
`E 611,876,0,73,51,43 2 0310 -- Egrave
-char200 "
'E 611,876,0,73,51,43 2 0311 -- Eacute
-char201 "
^E 611,873,0,73,51,43 2 0312 -- Ecircumflex
-char202 "
:E 611,818,0,73,51,43 2 0313 -- Edieresis
-char203 "
`I 333,876,0,101,58,43 2 0314 -- Igrave
-char204 "
'I 333,876,0,130,58,43 2 0315 -- Iacute
-char205 "
^I 333,873,0,142,58,43 2 0316 -- Icircumflex
-char206 "
:I 333,818,0,152,58,43 2 0317 -- Idieresis
-char207 "
-D 722,653,0,28,58,28 2 0320 -- Eth
-char208 "
~N 667,836,15,110,70,43 2 0321 -- Ntilde
-char209 "
`O 722,876,18,27,-10,27 2 0322 -- Ograve
-char210 "
'O 722,876,18,27,-10,27 2 0323 -- Oacute
-char211 "
^O 722,873,18,27,-10,27 2 0324 -- Ocircumflex
-char212 "
~O 722,836,18,27,-10,27 2 0325 -- Otilde
-char213 "
:O 722,818,18,27,-10,27 2 0326 -- Odieresis
-char214 "
-char215 675,497,0,0,-43 0 0327 -- multiply
+tmu 675,497,0,0,-43 0 0327 -- multiply
/O 722,722,105,27,-10,27 2 0330 -- Oslash
-char216 "
`U 722,876,18,93,-52,43 2 0331 -- Ugrave
-char217 "
'U 722,876,18,93,-52,43 2 0332 -- Uacute
-char218 "
^U 722,873,18,93,-52,43 2 0333 -- Ucircumflex
-char219 "
:U 722,818,18,93,-52,43 2 0334 -- Udieresis
-char220 "
'Y 556,876,0,127,-28,43 2 0335 -- Yacute
-char221 "
TP 611,653,0,8,50,8 2 0336 -- Thorn
-char222 "
ss 500,679,207,43,218,43 3 0337 -- germandbls
-char223 "
`a 500,664,11,26,33,26 2 0340 -- agrave
-char224 "
'a 500,664,11,37,33,37 2 0341 -- aacute
-char225 "
^a 500,661,11,26,33,26 2 0342 -- acircumflex
-char226 "
~a 500,624,11,61,33,43 2 0343 -- atilde
-char227 "
:a 500,606,11,39,33,39 2 0344 -- adieresis
-char228 "
oa 500,691,11,26,33,26 2 0345 -- aring
-char229 "
ae 667,441,11,23,27,23 0 0346 -- ae
-char230 "
,c 444,441,217,31,24,31 1 0347 -- ccedilla
-char231 "
`e 444,664,11,18,19,18 2 0350 -- egrave
-char232 "
'e 444,664,11,65,19,43 2 0351 -- eacute
-char233 "
^e 444,661,11,47,19,43 2 0352 -- ecircumflex
-char234 "
:e 444,606,11,57,19,43 2 0353 -- edieresis
-char235 "
`i 278,664,11,56,1,43 2 0354 -- igrave
-char236 "
'i 278,664,11,128,1,43 2 0355 -- iacute
-char237 "
^i 278,661,11,100,16,43 2 0356 -- icircumflex
-char238 "
:i 278,606,11,125,1,43 2 0357 -- idieresis
-char239 "
Sd 500,683,11,32,23,32 2 0360 -- eth
-char240 "
~n 500,624,9,26,36,26 2 0361 -- ntilde
-char241 "
`o 500,664,11,18,23,18 2 0362 -- ograve
-char242 "
'o 500,664,11,37,23,37 2 0363 -- oacute
-char243 "
^o 500,661,11,18,23,18 2 0364 -- ocircumflex
-char244 "
~o 500,624,11,46,23,43 2 0365 -- otilde
-char245 "
:o 500,606,11,39,23,39 2 0366 -- odieresis
-char246 "
-char247 675,517,11,0,-36 0 0367 -- divide
+tdi 675,517,11,0,-36 0 0367 -- divide
/o 500,554,135,19,22,19 2 0370 -- oslash
-char248 "
`u 500,664,11,25,8,25 2 0371 -- ugrave
-char249 "
'u 500,664,11,27,8,27 2 0372 -- uacute
-char250 "
^u 500,661,11,25,8,25 2 0373 -- ucircumflex
-char251 "
:u 500,606,11,29,8,29 2 0374 -- udieresis
-char252 "
'y 444,664,206,65,74,43 3 0375 -- yacute
-char253 "
Tp 500,683,205,19,125,19 3 0376 -- thorn
-char254 "
:y 444,606,206,47,74,43 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/TR b/contrib/groff/font/devps/TR
index 6b98075..913e8d4 100644
--- a/contrib/groff/font/devps/TR
+++ b/contrib/groff/font/devps/TR
@@ -70,7 +70,6 @@ T o -80
T i -35
T - -92
T hy -92
-T char173 -92
T e -70
T , -74
T : -50
@@ -85,7 +84,6 @@ V o -129
V i -60
V - -100
V hy -100
-V char173 -100
V e -111
V , -129
V : -74
@@ -101,7 +99,6 @@ W o -80
W i -40
W - -65
W hy -65
-W char173 -65
W e -80
W , -92
W : -37
@@ -115,7 +112,6 @@ Y o -110
Y i -55
Y - -111
Y hy -111
-Y char173 -111
Y e -100
Y , -129
Y : -92
@@ -184,7 +180,6 @@ cq d -50
r . -55
r - -20
r hy -20
-r char173 -20
r g -18
r , -40
v . -65
@@ -200,337 +195,246 @@ 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,0,0,-24 2 0000 -- asciicircum
+ti 541,323,0,0,-40 0 0001 -- asciitilde
+vS 556,886,14,0,-42 2 0002 -- Scaron
+vZ 611,886,0,0,-9 2 0003 -- Zcaron
+vs 389,674,10,0,-39 2 0004 -- scaron
+vz 444,674,0,0,-27 2 0005 -- zcaron
+:Y 722,835,0,0,-22 2 0006 -- Ydieresis
+tm 980,662,0,0,-30 2 0007 -- trademark
+aq 180,676,0,0,-48 2 0010 -- quotesingle
space 250 0 0040
-! 333,676,9 2 0041 -- exclam
-" 408,676 2 0042 -- quotedbl
+! 333,676,9,0,-130 2 0041 -- exclam
+" 408,676,0,0,-77 2 0042 -- quotedbl
dq "
-# 500,662 2 0043 -- numbersign
+# 500,662,0,0,-5 2 0043 -- numbersign
sh "
-$ 500,727,87 2 0044 -- dollar
+$ 500,727,87,0,-44 2 0044 -- dollar
Do "
-% 833,676,13 2 0045 -- percent
-& 778,676,13 2 0046 -- ampersand
-' 333,676 2 0047 -- quoteright
+% 833,676,13,0,-61 2 0045 -- percent
+& 778,676,13,0,-42 2 0046 -- ampersand
+' 333,676,0,0,-79 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
+( 333,676,177,0,-48 2 0050 -- parenleft
+) 333,676,177,0,-29 2 0051 -- parenright
+* 500,676,0,0,-69 2 0052 -- asterisk
++ 564,506,0,0,-30 0 0053 -- plus
+, 250,102,141,0,-56 0 0054 -- comma
+- 333,257,0,0,-39 0 0055 -- hyphen
hy "
-char173 "
-. 250,100,11 0 0056 -- period
-/ 278,676,14 2 0057 -- slash
+. 250,100,11,0,-70 0 0056 -- period
+/ 278,676,14,9,9 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,0,-24 2 0060 -- zero
+1 500,676,0,0,-111 2 0061 -- one
+2 500,676,0,0,-30 2 0062 -- two
+3 500,676,14,0,-43 2 0063 -- three
+4 500,676,0,0,-12 2 0064 -- four
+5 500,688,14,0,-32 2 0065 -- five
+6 500,684,14,0,-34 2 0066 -- six
+7 500,662,8,0,-20 2 0067 -- seven
+8 500,676,14,0,-56 2 0070 -- eight
+9 500,676,22,0,-30 2 0071 -- nine
+: 278,459,11,0,-81 0 0072 -- colon
+; 278,459,141,0,-80 0 0073 -- semicolon
+< 564,514,8,0,-28 0 0074 -- less
+= 564,386,0,0,-30 0 0075 -- equal
+> 564,514,8,0,-28 0 0076 -- greater
+? 444,676,8,0,-68 2 0077 -- question
+@ 921,676,14,0,-116 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,0,0,-15 2 0101 -- A
+B 667,662,0,0,-17 2 0102 -- B
+C 667,676,14,0,-28 2 0103 -- C
+D 722,662,0,0,-16 2 0104 -- D
+E 611,662,0,0,-12 2 0105 -- E
+F 556,662,0,0,-12 2 0106 -- F
+G 722,676,14,0,-32 2 0107 -- G
+H 722,662,0,0,-19 2 0110 -- H
+I 333,662,0,0,-18 2 0111 -- I
+J 389,662,14,0,-10 2 0112 -- J
+K 722,662,0,1,-34 2 0113 -- K
+L 611,662,0,0,-12 2 0114 -- L
+M 889,662,0,0,-12 2 0115 -- M
+N 722,662,11,0,-12 2 0116 -- N
+O 722,676,14,0,-34 2 0117 -- O
+P 556,662,0,0,-16 2 0120 -- P
+Q 722,676,178,0,-34 2 0121 -- Q
+R 667,662,0,0,-17 2 0122 -- R
+S 556,676,14,0,-42 2 0123 -- S
+T 611,662,0,0,-17 2 0124 -- T
+U 722,662,14,0,-14 2 0125 -- U
+V 722,662,11,0,-16 2 0126 -- V
+W 944,662,11,0,-5 2 0127 -- W
+X 722,662,0,0,-10 2 0130 -- X
+Y 722,662,0,0,-22 2 0131 -- Y
+Z 611,662,0,0,-9 2 0132 -- Z
+[ 333,662,156,0,-88 2 0133 -- bracketleft
lB "
-\ 278,676,14 2 0134 -- backslash
+\ 278,676,14,9,9 2 0134 -- backslash
rs "
-] 333,662,156 2 0135 -- bracketright
+] 333,662,156,0,-34 2 0135 -- bracketright
rB "
-a^ 333,674 2 0136 -- circumflex
+a^ 333,674,0,0,-11 2 0136 -- circumflex
^ "
_ 500,0,125 0 0137 -- underscore
-` 333,676 2 0140 -- quoteleft
+` 333,676,0,0,-115 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,-37 0 0141 -- a
+b 500,683,10,0,-3 2 0142 -- b
+c 444,460,10,0,-25 0 0143 -- c
+d 500,683,10,0,-27 2 0144 -- d
+e 444,460,10,0,-25 0 0145 -- e
+f 333,683,0,50,-20 2 0146 -- f
+g 500,460,218,0,-28 1 0147 -- g
+h 500,683,0,0,-9 2 0150 -- h
+i 278,683,0,0,-16 2 0151 -- i
+j 278,683,218,0,70 3 0152 -- j
+k 500,683,0,5,-7 2 0153 -- k
+l 278,683,0,0,-19 2 0154 -- l
+m 778,460,0,0,-16 0 0155 -- m
+n 500,460,0,0,-16 0 0156 -- n
+o 500,460,10,0,-29 0 0157 -- o
+p 500,460,217,0,-5 1 0160 -- p
+q 500,460,217,0,-24 1 0161 -- q
+r 333,460,0,2,-5 0 0162 -- r
+s 389,460,10,0,-51 0 0163 -- s
+t 278,579,10,1,-13 2 0164 -- t
+u 500,450,10,0,-9 0 0165 -- u
+v 500,450,14,0,-19 0 0166 -- v
+w 722,450,14,0,-21 0 0167 -- w
+x 500,450,0,0,-17 0 0170 -- x
+y 500,450,218,0,-14 1 0171 -- y
+z 444,450,0,0,-27 0 0172 -- z
+lC 480,680,181,0,-100 2 0173 -- braceleft
{ "
-ba 200,676,14 2 0174 -- bar
+ba 200,676,14,0,-67 2 0174 -- bar
| "
-rC 480,680,181 2 0175 -- braceright
+rC 480,680,181,0,-130 2 0175 -- braceright
} "
-a~ 333,638 2 0176 -- tilde
+a~ 333,638,0,0,-1 2 0176 -- tilde
~ "
-bq 333,102,141 0 0200 -- quotesinglbase
-Fo 500,416 0 0201 -- guillemotleft
-char171 "
-Fc 500,416 0 0202 -- guillemotright
-char187 "
-bu 350,466 0 0203 -- bullet
-Fn 500,676,189 2 0204 -- florin
-f/ 167,676,14 2 0205 -- fraction
-%0 1000,706,19 2 0206 -- perthousand
-dg 500,676,149 2 0207 -- dagger
-dd 500,676,153 2 0210 -- daggerdbl
+bq 333,102,141,0,-79 0 0200 -- quotesinglbase
+Fo 500,416,0,0,-42 0 0201 -- guillemotleft
+Fc 500,416,0,0,-44 0 0202 -- guillemotright
+bu 350,466,0,0,-40 0 0203 -- bullet
+Fn 500,676,189,0,-7 2 0204 -- florin
+f/ 167,676,14,164,168 2 0205 -- fraction
+%0 1000,706,19,0,-7 2 0206 -- perthousand
+dg 500,676,149,0,-59 2 0207 -- dagger
+dd 500,676,153,0,-58 2 0210 -- daggerdbl
en 500,250 0 0211 -- endash
em 1000,250 0 0212 -- emdash
-fi 556,683 2 0214 -- fi
-fl 556,683 2 0215 -- fl
-.i 278,460 0 0220 -- dotlessi
-ga 333,678 2 0222 -- grave
-a" 333,678 2 0223 -- hungarumlaut
-a. 333,623 2 0224 -- dotaccent
-ab 333,664 2 0225 -- breve
-ah 333,674 2 0226 -- caron
-ao 333,711 2 0227 -- ring
-ho 333,0,165 0 0230 -- ogonek
-lq 444,676 2 0231 -- quotedblleft
-rq 444,676 2 0232 -- quotedblright
-oe 722,460,10 0 0233 -- oe
-/l 278,683 2 0234 -- lslash
-Bq 444,102,141 0 0235 -- quotedblbase
-OE 889,668,6 2 0236 -- OE
-/L 611,662 2 0237 -- Lslash
-r! 333,467,218 1 0241 -- exclamdown
-char161 "
-ct 500,579,138 2 0242 -- cent
-char162 "
-Po 500,676,8 2 0243 -- sterling
-char163 "
-Cs 500,602 2 0244 -- currency
-char164 "
-Ye 500,662 2 0245 -- yen
-char165 "
-bb 200,676,14 2 0246 -- brokenbar
-char166 "
-sc 500,676,148 2 0247 -- section
-char167 "
-ad 333,623 2 0250 -- dieresis
-char168 "
-co 760,676,14 2 0251 -- copyright
-char169 "
-Of 276,676 2 0252 -- ordfeminine
-char170 "
-fo 333,416 0 0253 -- guilsinglleft
-no 564,386 0 0254 -- logicalnot
-char172 "
-\- 564,286 0 0255 -- minus
-rg 760,676,14 2 0256 -- registered
-char174 "
-a- 333,601 2 0257 -- macron
-char175 "
-de 400,676 2 0260 -- degree
-char176 "
-char177 564,506 0 0261 -- plusminus
-S2 300,676 2 0262 -- twosuperior
-char178 "
-S3 300,676 2 0263 -- threesuperior
-char179 "
-aa 333,678 2 0264 -- acute
-char180 "
-char181 500,450,218 1 0265 -- mu
-ps 453,662,154 2 0266 -- paragraph
-char182 "
-pc 250,310 0 0267 -- periodcentered
-char183 "
-ac 333,0,215 0 0270 -- cedilla
-char184 "
-S1 300,676 2 0271 -- onesuperior
-char185 "
-Om 310,676 2 0272 -- ordmasculine
-char186 "
-fc 333,416 0 0273 -- guilsinglright
-14 750,676,14 2 0274 -- onequarter
-char188 "
-12 750,676,14 2 0275 -- onehalf
-char189 "
-34 750,676,14 2 0276 -- threequarters
-char190 "
-r? 444,466,218 1 0277 -- questiondown
-char191 "
-`A 722,890 2 0300 -- Agrave
-char192 "
-'A 722,890 2 0301 -- Aacute
-char193 "
-^A 722,886 2 0302 -- Acircumflex
-char194 "
-~A 722,850 2 0303 -- Atilde
-char195 "
-:A 722,835 2 0304 -- Adieresis
-char196 "
-oA 722,898 2 0305 -- Aring
-char197 "
+fi 556,683,0,0,-31 2 0214 -- fi
+fl 556,683,0,0,-32 2 0215 -- fl
+.i 278,460,0,0,-16 0 0220 -- dotlessi
+ga 333,678,0,0,-19 2 0222 -- grave
+a" 333,678,0,44,3 2 0223 -- hungarumlaut
+a. 333,623,0,0,-118 2 0224 -- dotaccent
+ab 333,664,0,0,-26 2 0225 -- breve
+ah 333,674,0,0,-11 2 0226 -- caron
+ao 333,711,0,0,-67 2 0227 -- ring
+ho 333,0,165,0,-64 0 0230 -- ogonek
+lq 444,676,0,0,-43 2 0231 -- quotedblleft
+rq 444,676,0,0,-30 2 0232 -- quotedblright
+oe 722,460,10,0,-30 0 0233 -- oe
+/l 278,683,0,0,-19 2 0234 -- lslash
+Bq 444,102,141,0,-45 0 0235 -- quotedblbase
+OE 889,668,6,0,-30 2 0236 -- OE
+/L 611,662,0,0,-12 2 0237 -- Lslash
+r! 333,467,218,0,-97 1 0241 -- exclamdown
+ct 500,579,138,0,-53 2 0242 -- cent
+Po 500,676,8,0,-12 2 0243 -- sterling
+Cs 500,602,0,22,22 2 0244 -- currency
+Ye 500,662,0,12,53 2 0245 -- yen
+bb 200,676,14,0,-67 2 0246 -- brokenbar
+sc 500,676,148,0,-70 2 0247 -- section
+ad 333,623,0,0,-18 2 0250 -- dieresis
+co 760,676,14,0,-38 2 0251 -- copyright
+Of 276,676,0,0,-4 2 0252 -- ordfeminine
+fo 333,416,0,0,-63 0 0253 -- guilsinglleft
+no 564,386,0,0,-30 0 0254 -- logicalnot
+\- 564,286,0,0,-30 0 0255 -- minus
+rg 760,676,14,0,-38 2 0256 -- registered
+a- 333,601,0,0,-11 2 0257 -- macron
+de 400,676,0,0,-57 2 0260 -- degree
+t+- 564,506,0,0,-30 0 0261 -- plusminus
+S2 300,676,0,0,-1 2 0262 -- twosuperior
+S3 300,676,0,0,-15 2 0263 -- threesuperior
+aa 333,678,0,0,-93 2 0264 -- acute
+mc 500,450,218,12,-36 1 0265 -- mu
+ps 453,662,154,0,22 2 0266 -- paragraph
+pc 250,310,0,0,-70 0 0267 -- periodcentered
+ac 333,0,215,0,-52 0 0270 -- cedilla
+S1 300,676,0,0,-57 2 0271 -- onesuperior
+Om 310,676,0,0,-6 2 0272 -- ordmasculine
+fc 333,416,0,0,-48 0 0273 -- guilsinglright
+14 750,676,14,0,-37 2 0274 -- onequarter
+12 750,676,14,0,-31 2 0275 -- onehalf
+34 750,676,14,0,-15 2 0276 -- threequarters
+r? 444,466,218,0,-30 1 0277 -- questiondown
+`A 722,890,0,0,-15 2 0300 -- Agrave
+'A 722,890,0,0,-15 2 0301 -- Aacute
+^A 722,886,0,0,-15 2 0302 -- Acircumflex
+~A 722,850,0,0,-15 2 0303 -- Atilde
+:A 722,835,0,0,-15 2 0304 -- Adieresis
+oA 722,898,0,0,-15 2 0305 -- Aring
AE 889,662 2 0306 -- AE
-char198 "
-,C 667,676,215 2 0307 -- Ccedilla
-char199 "
-`E 611,890 2 0310 -- Egrave
-char200 "
-'E 611,890 2 0311 -- Eacute
-char201 "
-^E 611,886 2 0312 -- Ecircumflex
-char202 "
-:E 611,835 2 0313 -- Edieresis
-char203 "
-`I 333,890 2 0314 -- Igrave
-char204 "
-'I 333,890 2 0315 -- Iacute
-char205 "
-^I 333,886 2 0316 -- Icircumflex
-char206 "
-:I 333,835 2 0317 -- Idieresis
-char207 "
--D 722,662 2 0320 -- Eth
-char208 "
-~N 722,850,11 2 0321 -- Ntilde
-char209 "
-`O 722,890,14 2 0322 -- Ograve
-char210 "
-'O 722,890,14 2 0323 -- Oacute
-char211 "
-^O 722,886,14 2 0324 -- Ocircumflex
-char212 "
-~O 722,850,14 2 0325 -- Otilde
-char213 "
-:O 722,835,14 2 0326 -- Odieresis
-char214 "
-char215 564,497 0 0327 -- multiply
-/O 722,734,80 2 0330 -- Oslash
-char216 "
-`U 722,890,14 2 0331 -- Ugrave
-char217 "
-'U 722,890,14 2 0332 -- Uacute
-char218 "
-^U 722,886,14 2 0333 -- Ucircumflex
-char219 "
-:U 722,835,14 2 0334 -- Udieresis
-char220 "
-'Y 722,890 2 0335 -- Yacute
-char221 "
-TP 556,662 2 0336 -- Thorn
-char222 "
-ss 500,683,9 2 0337 -- germandbls
-char223 "
-`a 444,678,10 2 0340 -- agrave
-char224 "
-'a 444,678,10 2 0341 -- aacute
-char225 "
-^a 444,674,10 2 0342 -- acircumflex
-char226 "
-~a 444,638,10 2 0343 -- atilde
-char227 "
-:a 444,623,10 2 0344 -- adieresis
-char228 "
-oa 444,711,10 2 0345 -- aring
-char229 "
-ae 667,460,10 0 0346 -- ae
-char230 "
-,c 444,460,215 0 0347 -- ccedilla
-char231 "
-`e 444,678,10 2 0350 -- egrave
-char232 "
-'e 444,678,10 2 0351 -- eacute
-char233 "
-^e 444,674,10 2 0352 -- ecircumflex
-char234 "
-:e 444,623,10 2 0353 -- edieresis
-char235 "
-`i 278,678 2 0354 -- igrave
-char236 "
-'i 278,678 2 0355 -- iacute
-char237 "
-^i 278,674 2 0356 -- icircumflex
-char238 "
-:i 278,623 2 0357 -- idieresis
-char239 "
-Sd 500,686,10 2 0360 -- eth
-char240 "
-~n 500,638 2 0361 -- ntilde
-char241 "
-`o 500,678,10 2 0362 -- ograve
-char242 "
-'o 500,678,10 2 0363 -- oacute
-char243 "
-^o 500,674,10 2 0364 -- ocircumflex
-char244 "
-~o 500,638,10 2 0365 -- otilde
-char245 "
-:o 500,623,10 2 0366 -- odieresis
-char246 "
-char247 564,516,10 0 0367 -- divide
-/o 500,551,112 0 0370 -- oslash
-char248 "
-`u 500,678,10 2 0371 -- ugrave
-char249 "
-'u 500,678,10 2 0372 -- uacute
-char250 "
-^u 500,674,10 2 0373 -- ucircumflex
-char251 "
-:u 500,623,10 2 0374 -- udieresis
-char252 "
-'y 500,678,218 3 0375 -- yacute
-char253 "
-Tp 500,683,217 3 0376 -- thorn
-char254 "
-:y 500,623,218 3 0377 -- ydieresis
-char255 "
+,C 667,676,215,0,-28 2 0307 -- Ccedilla
+`E 611,890,0,0,-12 2 0310 -- Egrave
+'E 611,890,0,0,-12 2 0311 -- Eacute
+^E 611,886,0,0,-12 2 0312 -- Ecircumflex
+:E 611,835,0,0,-12 2 0313 -- Edieresis
+`I 333,890,0,0,-18 2 0314 -- Igrave
+'I 333,890,0,0,-18 2 0315 -- Iacute
+^I 333,886,0,0,-11 2 0316 -- Icircumflex
+:I 333,835,0,0,-18 2 0317 -- Idieresis
+-D 722,662,0,0,-16 2 0320 -- Eth
+~N 722,850,11,0,-12 2 0321 -- Ntilde
+`O 722,890,14,0,-34 2 0322 -- Ograve
+'O 722,890,14,0,-34 2 0323 -- Oacute
+^O 722,886,14,0,-34 2 0324 -- Ocircumflex
+~O 722,850,14,0,-34 2 0325 -- Otilde
+:O 722,835,14,0,-34 2 0326 -- Odieresis
+tmu 564,497,0,0,-38 0 0327 -- multiply
+/O 722,734,80,0,-34 2 0330 -- Oslash
+`U 722,890,14,0,-14 2 0331 -- Ugrave
+'U 722,890,14,0,-14 2 0332 -- Uacute
+^U 722,886,14,0,-14 2 0333 -- Ucircumflex
+:U 722,835,14,0,-14 2 0334 -- Udieresis
+'Y 722,890,0,0,-22 2 0335 -- Yacute
+TP 556,662,0,0,-16 2 0336 -- Thorn
+ss 500,683,9,0,-12 2 0337 -- germandbls
+`a 444,678,10,0,-37 2 0340 -- agrave
+'a 444,678,10,0,-37 2 0341 -- aacute
+^a 444,674,10,0,-37 2 0342 -- acircumflex
+~a 444,638,10,0,-37 2 0343 -- atilde
+:a 444,623,10,0,-37 2 0344 -- adieresis
+oa 444,711,10,0,-37 2 0345 -- aring
+ae 667,460,10,0,-38 0 0346 -- ae
+,c 444,460,215,0,-25 0 0347 -- ccedilla
+`e 444,678,10,0,-25 2 0350 -- egrave
+'e 444,678,10,0,-25 2 0351 -- eacute
+^e 444,674,10,0,-25 2 0352 -- ecircumflex
+:e 444,623,10,0,-25 2 0353 -- edieresis
+`i 278,678,0,0,8 2 0354 -- igrave
+'i 278,678,0,12,-16 2 0355 -- iacute
+^i 278,674,0,17,16 2 0356 -- icircumflex
+:i 278,623,0,10,9 2 0357 -- idieresis
+Sd 500,686,10,0,-29 2 0360 -- eth
+~n 500,638,0,0,-16 2 0361 -- ntilde
+`o 500,678,10,0,-29 2 0362 -- ograve
+'o 500,678,10,0,-29 2 0363 -- oacute
+^o 500,674,10,0,-29 2 0364 -- ocircumflex
+~o 500,638,10,0,-29 2 0365 -- otilde
+:o 500,623,10,0,-29 2 0366 -- odieresis
+tdi 564,516,10,0,-30 0 0367 -- divide
+/o 500,551,112,0,-29 0 0370 -- oslash
+`u 500,678,10,0,-9 2 0371 -- ugrave
+'u 500,678,10,0,-9 2 0372 -- uacute
+^u 500,674,10,0,-9 2 0373 -- ucircumflex
+:u 500,623,10,0,-9 2 0374 -- udieresis
+'y 500,678,218,0,-14 3 0375 -- yacute
+Tp 500,683,217,0,-5 3 0376 -- thorn
+:y 500,623,218,0,-14 3 0377 -- ydieresis
diff --git a/contrib/groff/font/devps/ZCMI b/contrib/groff/font/devps/ZCMI
index e25c2a6..1d574ad 100644
--- a/contrib/groff/font/devps/ZCMI
+++ b/contrib/groff/font/devps/ZCMI
@@ -53,7 +53,6 @@ T o -20
T i 20
T - -20
T hy -20
-T char173 -20
T h 20
T e -20
T a -20
@@ -186,7 +185,6 @@ cq "
, 220,148,140,43,25,43 0 0054 -- comma
- 280,248,0,104,-19,87 0 0055 -- hyphen
hy "
-char173 "
. 220,128,14,58,-52,58 0 0056 -- period
/ 340,610,16,168,-24,87 2 0057 -- slash
sl "
@@ -281,9 +279,7 @@ a~ 440,619,0,132,-193,87 2 0176 -- tilde
~ "
bq 180,146,121,61,29,61 0 0200 -- quotesinglbase
Fo 340,414,0,66,-48,66 0 0201 -- guillemotleft
-char171 "
Fc 380,414,0,45,-67,45 0 0202 -- guillemotright
-char187 "
bu 600,445,0,0,-178 0 0203 -- bullet
Fn 440,610,314,192,114,87 3 0204 -- florin
f/ 60,610,16,310,231,87 2 0205 -- fraction
@@ -310,185 +306,97 @@ Bq 280,146,121,51,64,51 0 0235 -- quotedblbase
OE 820,610,16,139,-13,87 2 0236 -- OE
/L 580,610,16,127,1,87 2 0237 -- Lslash
r! 280,438,186,76,-22,76 0 0241 -- exclamdown
-char161 "
ct 440,543,134,86,-72,86 2 0242 -- cent
-char162 "
Po 440,610,52,116,66,87 2 0243 -- sterling
-char163 "
Cs 440,509,0,84,0,84 0 0244 -- currency
-char164 "
Ye 440,647,168,223,51,87 2 0245 -- yen
-char165 "
bb 520,714,16,0,-270 2 0246 -- brokenbar
-char166 "
sc 420,610,215,144,-3,87 2 0247 -- section
-char167 "
ad 360,610,0,159,-193,87 2 0250 -- dieresis
-char168 "
co 740,610,16,73,-87,73 2 0251 -- copyright
-char169 "
Of 260,610,0,176,-61,87 2 0252 -- ordfeminine
-char170 "
fo 240,414,0,68,-48,68 0 0253 -- guilsinglleft
no 520,340,0,73,-67,73 0 0254 -- logicalnot
-char172 "
\- 520,242,0,73,-67,73 0 0255 -- minus
rg 740,610,16,73,-87,73 2 0256 -- registered
-char174 "
a- 440,578,0,75,-172,75 2 0257 -- macron
-char175 "
de 400,610,0,107,-121,87 2 0260 -- degree
-char176 "
-char177 520,436,0,73,-67,73 0 0261 -- plusminus
+t+- 520,436,0,73,-67,73 0 0261 -- plusminus
S2 264,610,0,140,-22,87 2 0262 -- twosuperior
-char178 "
S3 264,610,0,134,-9,87 2 0263 -- threesuperior
-char179 "
aa 300,659,0,172,-215,87 2 0264 -- acute
-char180 "
-char181 460,438,314,113,43,87 1 0265 -- mu
+mc 460,438,314,113,43,87 1 0265 -- mu
ps 500,594,199,188,-55,87 2 0266 -- paragraph
-char182 "
pc 220,310,0,71,-89,71 0 0267 -- periodcentered
-char183 "
ac 300,6,191,0,38 0 0270 -- cedilla
-char184 "
S1 264,610,0,97,-33,87 2 0271 -- onesuperior
-char185 "
Om 260,610,0,163,-78,87 2 0272 -- ordmasculine
-char186 "
fc 260,414,0,56,-56,56 0 0273 -- guilsinglright
14 660,610,16,92,-6,87 2 0274 -- onequarter
-char188 "
12 660,610,16,92,-6,87 2 0275 -- onehalf
-char189 "
34 660,610,16,96,11,87 2 0276 -- threequarters
-char190 "
r? 400,438,186,37,-32,37 0 0277 -- questiondown
-char191 "
`A 620,821,16,127,37,87 2 0300 -- Agrave
-char192 "
'A 620,821,16,132,37,87 2 0301 -- Aacute
-char193 "
^A 620,821,16,127,37,87 2 0302 -- Acircumflex
-char194 "
~A 620,771,16,132,37,87 2 0303 -- Atilde
-char195 "
:A 620,762,16,139,37,87 2 0304 -- Adieresis
-char196 "
oA 620,831,16,127,37,87 2 0305 -- Aring
-char197 "
AE 740,594,16,109,71,87 2 0306 -- AE
-char198 "
,C 520,610,191,161,-43,87 2 0307 -- Ccedilla
-char199 "
`E 620,821,12,139,-41,87 2 0310 -- Egrave
-char200 "
'E 620,821,12,139,-41,87 2 0311 -- Eacute
-char201 "
^E 620,821,12,139,-41,87 2 0312 -- Ecircumflex
-char202 "
:E 620,762,12,139,-41,87 2 0313 -- Edieresis
-char203 "
`I 380,821,0,174,-49,87 2 0314 -- Igrave
-char204 "
'I 380,821,0,202,-49,87 2 0315 -- Iacute
-char205 "
^I 380,821,0,174,-49,87 2 0316 -- Icircumflex
-char206 "
:I 380,762,0,189,-49,87 2 0317 -- Idieresis
-char207 "
-D 700,640,6,118,-36,87 2 0320 -- Eth
-char208 "
~N 700,761,168,265,-35,87 2 0321 -- Ntilde
-char209 "
`O 600,821,16,110,-44,87 2 0322 -- Ograve
-char210 "
'O 600,821,16,110,-44,87 2 0323 -- Oacute
-char211 "
^O 600,821,16,110,-44,87 2 0324 -- Ocircumflex
-char212 "
~O 600,761,16,110,-44,87 2 0325 -- Otilde
-char213 "
:O 600,762,16,110,-44,87 2 0326 -- Odieresis
-char214 "
-char215 520,410,0,57,-83,57 0 0327 -- multiply
+tmu 520,410,0,57,-83,57 0 0327 -- multiply
/O 660,672,78,141,-33,87 2 0330 -- Oslash
-char216 "
`U 740,821,16,102,-76,87 2 0331 -- Ugrave
-char217 "
'U 740,821,16,102,-76,87 2 0332 -- Uacute
-char218 "
^U 740,821,16,102,-76,87 2 0333 -- Ucircumflex
-char219 "
:U 740,762,16,102,-76,87 2 0334 -- Udieresis
-char220 "
'Y 560,821,168,264,9,87 2 0335 -- Yacute
-char221 "
TP 540,623,0,157,-2,87 2 0336 -- Thorn
-char222 "
ss 420,714,314,172,177,87 3 0337 -- germandbls
-char223 "
`a 420,659,15,115,-42,87 2 0340 -- agrave
-char224 "
'a 420,659,15,122,-42,87 2 0341 -- aacute
-char225 "
^a 420,649,15,115,-42,87 2 0342 -- acircumflex
-char226 "
~a 420,619,15,152,-42,87 2 0343 -- atilde
-char227 "
:a 420,610,15,115,-42,87 2 0344 -- adieresis
-char228 "
oa 420,659,15,115,-42,87 2 0345 -- aring
-char229 "
ae 540,468,14,134,-17,87 0 0346 -- ae
-char230 "
,c 340,438,191,116,-12,87 0 0347 -- ccedilla
-char231 "
`e 340,659,14,113,-37,87 2 0350 -- egrave
-char232 "
'e 340,659,14,172,-37,87 2 0351 -- eacute
-char233 "
^e 340,649,14,143,-37,87 2 0352 -- ecircumflex
-char234 "
:e 340,610,14,159,-37,87 2 0353 -- edieresis
-char235 "
`i 240,659,14,116,-50,87 2 0354 -- igrave
-char236 "
'i 240,659,14,202,-50,87 2 0355 -- iacute
-char237 "
^i 240,649,14,173,-50,87 2 0356 -- icircumflex
-char238 "
:i 240,610,14,179,-50,87 2 0357 -- idieresis
-char239 "
Sd 400,714,14,172,-37,87 2 0360 -- eth
-char240 "
~n 460,619,14,134,-51,87 2 0361 -- ntilde
-char241 "
`o 400,659,14,99,-37,87 2 0362 -- ograve
-char242 "
'o 400,659,14,132,-37,87 2 0363 -- oacute
-char243 "
^o 400,649,14,103,-37,87 2 0364 -- ocircumflex
-char244 "
~o 400,619,14,152,-37,87 2 0365 -- otilde
-char245 "
:o 400,610,14,129,-37,87 2 0366 -- odieresis
-char246 "
-char247 520,440,14,73,-67,73 0 0367 -- divide
+tdi 520,440,14,73,-67,73 0 0367 -- divide
/o 440,488,64,150,4,87 0 0370 -- oslash
-char248 "
`u 460,659,14,118,-52,87 2 0371 -- ugrave
-char249 "
'u 460,659,14,118,-52,87 2 0372 -- uacute
-char250 "
^u 460,649,14,118,-52,87 2 0373 -- ucircumflex
-char251 "
:u 460,610,14,118,-52,87 2 0374 -- udieresis
-char252 "
'y 400,659,314,133,74,87 3 0375 -- yacute
-char253 "
Tp 440,714,314,115,88,87 3 0376 -- thorn
-char254 "
:y 400,610,314,133,74,87 3 0377 -- ydieresis
-char255 "
diff --git a/contrib/groff/font/devps/ZD b/contrib/groff/font/devps/ZD
index 3066c39..b1d6152 100644
--- a/contrib/groff/font/devps/ZD
+++ b/contrib/groff/font/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
+--- 974,621,0,0,-35 3 0041 -- a1
+--- 961,611,0,0,-35 3 0042 -- a2
+--- 974,621,0,0,-35 3 0043 -- a202
+--- 980,692,0,0,-35 3 0044 -- a3
+--- 719,566,0,0,-34 3 0045 -- a4
+--- 789,705,14,0,-35 3 0046 -- a5
+--- 790,705,14,0,-35 3 0047 -- a119
+--- 791,705,13,0,-35 3 0050 -- a118
+--- 690,553,0,0,-35 3 0051 -- a117
+--- 960,568,0,0,-35 3 0052 -- a11
+rh 939,559,0,0,-35 3 0053 -- a12
+--- 549,705,11,0,-29 3 0054 -- a13
+--- 855,632,0,0,-34 3 0055 -- a14
+--- 911,642,0,0,-35 3 0056 -- a15
+--- 933,550,0,0,-35 3 0057 -- a16
+--- 911,642,0,0,-35 3 0060 -- a105
+--- 945,553,0,0,-35 3 0061 -- a17
+--- 974,587,0,0,-35 3 0062 -- a18
+OK 755,705,13,0,-34 3 0063 -- a19
+--- 846,705,14,0,-36 3 0064 -- a20
+--- 762,692,0,0,-35 3 0065 -- a21
+--- 761,692,0,0,-35 3 0066 -- a22
+--- 571,661,68,0,1 3 0067 -- a23
+--- 677,705,13,0,-36 3 0070 -- a24
+--- 763,692,0,0,-35 3 0071 -- a25
+--- 760,692,0,0,-35 3 0072 -- a26
+--- 759,692,0,0,-35 3 0073 -- a27
+--- 754,692,0,0,-35 3 0074 -- a28
+--- 494,692,0,0,-35 3 0075 -- a6
+--- 552,692,0,0,-35 3 0076 -- a7
+--- 537,692,0,0,-35 3 0077 -- a8
+--- 577,596,0,0,-35 3 0100 -- a9
+--- 692,705,14,0,-35 3 0101 -- a10
+--- 786,705,14,0,-35 3 0102 -- a29
+--- 788,705,14,0,-35 3 0103 -- a30
+--- 788,705,14,0,-35 3 0104 -- a31
+--- 790,705,14,0,-35 3 0105 -- a32
+--- 793,705,13,0,-35 3 0106 -- a33
+--- 794,705,13,0,-35 3 0107 -- a34
+--- 816,705,14,0,-35 3 0110 -- a35
+--- 823,705,14,0,-35 3 0111 -- a36
+--- 789,705,14,0,-35 3 0112 -- a37
+--- 841,705,14,0,-35 3 0113 -- a38
+--- 823,705,14,0,-35 3 0114 -- a39
+--- 833,705,14,0,-35 3 0115 -- a40
+--- 816,705,13,0,-35 3 0116 -- a41
+--- 831,705,14,0,-35 3 0117 -- a42
+--- 923,705,14,0,-35 3 0120 -- a43
+--- 744,692,0,0,-35 3 0121 -- a44
+--- 723,692,0,0,-35 3 0122 -- a45
+--- 749,692,0,0,-35 3 0123 -- a46
+--- 790,705,14,0,-34 3 0124 -- a47
+--- 792,705,14,0,-35 3 0125 -- a48
+--- 695,706,14,0,-35 3 0126 -- a49
+--- 776,699,6,0,-35 3 0127 -- a50
+--- 768,699,7,0,-35 3 0130 -- a51
+--- 792,705,14,0,-35 3 0131 -- a52
+--- 759,692,0,0,-35 3 0132 -- a53
+--- 707,704,13,0,-35 3 0133 -- a54
+--- 708,705,14,0,-35 3 0134 -- a55
+--- 682,705,14,0,-35 3 0135 -- a56
+--- 701,705,14,0,-35 3 0136 -- a57
+--- 826,705,14,0,-35 3 0137 -- a58
+--- 815,705,14,0,-35 3 0140 -- a59
+--- 789,705,14,0,-35 3 0141 -- a60
+--- 789,705,14,0,-35 3 0142 -- a61
+--- 707,705,14,0,-34 3 0143 -- a62
+--- 687,692,0,0,-36 3 0144 -- a63
+--- 696,691,0,0,-35 3 0145 -- a64
+--- 689,692,0,0,-35 3 0146 -- a65
+--- 786,705,14,0,-34 3 0147 -- a66
+--- 787,705,14,0,-35 3 0150 -- a67
+--- 713,705,14,0,-35 3 0151 -- a68
+--- 791,705,14,0,-35 3 0152 -- a69
+--- 785,705,14,0,-36 3 0153 -- a70
+--- 791,705,14,0,-35 3 0154 -- a71
+--- 873,705,14,0,-35 3 0155 -- a72
+--- 761,692,0,0,-35 3 0156 -- a73
+--- 762,692,0,0,-35 3 0157 -- a74
+--- 762,692,0,0,-35 3 0160 -- a203
+--- 759,692,0,0,-35 3 0161 -- a75
+--- 759,692,0,0,-35 3 0162 -- a204
+--- 892,705,0,0,-35 3 0163 -- a76
+--- 892,692,14,0,-35 3 0164 -- a77
+--- 788,705,14,0,-35 3 0165 -- a78
+--- 784,705,14,0,-35 3 0166 -- a79
+--- 438,705,14,0,-35 3 0167 -- a81
+--- 138,692,0,0,-35 3 0170 -- a82
+--- 277,692,0,0,-35 3 0171 -- a83
+--- 415,692,0,0,-35 3 0172 -- a84
+--- 392,705,0,0,-35 3 0173 -- a97
+--- 392,705,0,0,-34 3 0174 -- a98
+--- 668,705,0,0,-35 3 0175 -- a99
+--- 668,705,0,0,-36 3 0176 -- a100
+--- 732,806,143,0,-35 3 0241 -- a101
+--- 544,706,14,0,-56 3 0242 -- a102
+--- 544,705,14,0,-34 3 0243 -- a103
+--- 910,651,0,0,-35 3 0244 -- a104
+--- 667,705,14,0,-35 3 0245 -- a106
+--- 760,705,14,0,-35 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
+--- 776,705,0,0,-35 3 0250 -- a112
+--- 595,705,14,0,-34 3 0251 -- a111
+--- 694,705,14,0,-35 3 0252 -- a110
+--- 626,705,0,0,-34 3 0253 -- a109
+--- 788,705,14,0,-35 3 0254 -- a120
+--- 788,705,14,0,-35 3 0255 -- a121
+--- 788,705,14,0,-35 3 0256 -- a122
+--- 788,705,14,0,-35 3 0257 -- a123
+--- 788,705,14,0,-35 3 0260 -- a124
+--- 788,705,14,0,-35 3 0261 -- a125
+--- 788,705,14,0,-35 3 0262 -- a126
+--- 788,705,14,0,-35 3 0263 -- a127
+--- 788,705,14,0,-35 3 0264 -- a128
+--- 788,705,14,0,-35 3 0265 -- a129
+--- 788,705,14,0,-35 3 0266 -- a130
+--- 788,705,14,0,-35 3 0267 -- a131
+--- 788,705,14,0,-35 3 0270 -- a132
+--- 788,705,14,0,-35 3 0271 -- a133
+--- 788,705,14,0,-35 3 0272 -- a134
+--- 788,705,14,0,-35 3 0273 -- a135
+--- 788,705,14,0,-35 3 0274 -- a136
+--- 788,705,14,0,-35 3 0275 -- a137
+--- 788,705,14,0,-35 3 0276 -- a138
+--- 788,705,14,0,-35 3 0277 -- a139
+--- 788,705,14,0,-35 3 0300 -- a140
+--- 788,705,14,0,-35 3 0301 -- a141
+--- 788,705,14,0,-35 3 0302 -- a142
+--- 788,705,14,0,-35 3 0303 -- a143
+--- 788,705,14,0,-35 3 0304 -- a144
+--- 788,705,14,0,-35 3 0305 -- a145
+--- 788,705,14,0,-35 3 0306 -- a146
+--- 788,705,14,0,-35 3 0307 -- a147
+--- 788,705,14,0,-35 3 0310 -- a148
+--- 788,705,14,0,-35 3 0311 -- a149
+--- 788,705,14,0,-35 3 0312 -- a150
+--- 788,705,14,0,-35 3 0313 -- a151
+--- 788,705,14,0,-35 3 0314 -- a152
+--- 788,705,14,0,-35 3 0315 -- a153
+--- 788,705,14,0,-35 3 0316 -- a154
+--- 788,705,14,0,-35 3 0317 -- a155
+--- 788,705,14,0,-35 3 0320 -- a156
+--- 788,705,14,0,-35 3 0321 -- a157
+--- 788,705,14,0,-35 3 0322 -- a158
+--- 788,705,14,0,-35 3 0323 -- a159
+--- 894,634,0,0,-35 3 0324 -- a160
+--- 838,540,0,0,-35 3 0325 -- a161
+--- 1016,540,0,0,-34 3 0326 -- a163
+--- 458,820,127,0,-35 3 0327 -- a164
+--- 748,597,0,0,-35 3 0330 -- a196
+--- 924,552,0,0,-35 3 0331 -- a165
+--- 748,597,0,0,-35 3 0332 -- a192
+--- 918,526,0,0,-35 3 0333 -- a166
+--- 927,660,0,0,-35 3 0334 -- a167
+--- 928,562,0,0,-35 3 0335 -- a168
+--- 928,563,0,0,-35 3 0336 -- a169
+--- 834,537,0,0,-35 3 0337 -- a170
+--- 873,599,0,0,-35 3 0340 -- a171
+--- 828,588,0,0,-35 3 0341 -- a172
+--- 924,594,0,0,-35 3 0342 -- a173
+--- 924,594,0,0,-35 3 0343 -- a162
+--- 917,692,0,0,-35 3 0344 -- a174
+--- 930,608,0,0,-35 3 0345 -- a175
+--- 931,608,0,0,-35 3 0346 -- a176
+--- 463,791,99,0,-35 3 0347 -- a177
+--- 883,623,0,0,-35 3 0350 -- a178
+--- 836,648,0,0,-35 3 0351 -- a179
+--- 836,648,0,0,-35 3 0352 -- a193
+--- 867,591,0,0,-35 3 0353 -- a180
+--- 867,591,0,0,-35 3 0354 -- a199
+--- 696,648,0,0,-35 3 0355 -- a181
+--- 696,648,0,0,-35 3 0356 -- a200
+--- 874,619,0,0,-35 3 0357 -- a182
+--- 874,615,0,0,-35 3 0361 -- a201
+--- 760,692,0,0,-35 3 0362 -- a183
+--- 946,533,0,0,-35 3 0363 -- a184
+--- 771,655,0,0,-34 3 0364 -- a197
+--- 865,481,0,0,-35 3 0365 -- a185
+--- 771,655,0,0,-34 3 0366 -- a194
+--- 888,712,19,0,-34 3 0367 -- a198
+--- 967,568,0,0,-35 3 0370 -- a186
+--- 888,712,19,0,-34 3 0371 -- a195
+--- 831,579,0,0,-35 3 0372 -- a187
+--- 873,578,0,0,-36 3 0373 -- a188
+--- 927,542,0,0,-35 3 0374 -- a189
+--- 970,616,0,0,-35 3 0375 -- a190
+--- 918,593,0,0,-34 3 0376 -- a191
diff --git a/contrib/groff/font/devps/ZDR b/contrib/groff/font/devps/ZDR
index ab5b54f..a6ca5fe 100644
--- a/contrib/groff/font/devps/ZDR
+++ b/contrib/groff/font/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
+--- 974,621,0,0,-35 3 0041 -- a1
+--- 961,611,0,0,-35 3 0042 -- a2
+--- 974,621,0,0,-35 3 0043 -- a202
+--- 980,692,0,0,-35 3 0044 -- a3
+--- 719,566,0,0,-34 3 0045 -- a4
+--- 789,705,14,0,-35 3 0046 -- a5
+--- 790,705,14,0,-35 3 0047 -- a119
+--- 791,705,13,0,-35 3 0050 -- a118
+--- 690,553,0,0,-35 3 0051 -- a117
+--- 960,568,0,0,-35 3 0052 -- a11
+lh 939,559,0,0,-35 3 0053 -- a12
+--- 549,705,11,0,-29 3 0054 -- a13
+--- 855,632,0,0,-34 3 0055 -- a14
+--- 911,642,0,0,-35 3 0056 -- a15
+--- 933,550,0,0,-35 3 0057 -- a16
+--- 911,642,0,0,-35 3 0060 -- a105
+--- 945,553,0,0,-35 3 0061 -- a17
+--- 974,587,0,0,-35 3 0062 -- a18
+--- 755,705,13,0,-34 3 0063 -- a19
+--- 846,705,14,0,-36 3 0064 -- a20
+--- 762,692,0,0,-35 3 0065 -- a21
+--- 761,692,0,0,-35 3 0066 -- a22
+--- 571,661,68,0,1 3 0067 -- a23
+--- 677,705,13,0,-36 3 0070 -- a24
+--- 763,692,0,0,-35 3 0071 -- a25
+--- 760,692,0,0,-35 3 0072 -- a26
+--- 759,692,0,0,-35 3 0073 -- a27
+--- 754,692,0,0,-35 3 0074 -- a28
+--- 494,692,0,0,-35 3 0075 -- a6
+--- 552,692,0,0,-35 3 0076 -- a7
+--- 537,692,0,0,-35 3 0077 -- a8
+--- 577,596,0,0,-35 3 0100 -- a9
+--- 692,705,14,0,-35 3 0101 -- a10
+--- 786,705,14,0,-35 3 0102 -- a29
+--- 788,705,14,0,-35 3 0103 -- a30
+--- 788,705,14,0,-35 3 0104 -- a31
+--- 790,705,14,0,-35 3 0105 -- a32
+--- 793,705,13,0,-35 3 0106 -- a33
+--- 794,705,13,0,-35 3 0107 -- a34
+--- 816,705,14,0,-35 3 0110 -- a35
+--- 823,705,14,0,-35 3 0111 -- a36
+--- 789,705,14,0,-35 3 0112 -- a37
+--- 841,705,14,0,-35 3 0113 -- a38
+--- 823,705,14,0,-35 3 0114 -- a39
+--- 833,705,14,0,-35 3 0115 -- a40
+--- 816,705,13,0,-35 3 0116 -- a41
+--- 831,705,14,0,-35 3 0117 -- a42
+--- 923,705,14,0,-35 3 0120 -- a43
+--- 744,692,0,0,-35 3 0121 -- a44
+--- 723,692,0,0,-35 3 0122 -- a45
+--- 749,692,0,0,-35 3 0123 -- a46
+--- 790,705,14,0,-34 3 0124 -- a47
+--- 792,705,14,0,-35 3 0125 -- a48
+--- 695,706,14,0,-35 3 0126 -- a49
+--- 776,699,6,0,-35 3 0127 -- a50
+--- 768,699,7,0,-35 3 0130 -- a51
+--- 792,705,14,0,-35 3 0131 -- a52
+--- 759,692,0,0,-35 3 0132 -- a53
+--- 707,704,13,0,-35 3 0133 -- a54
+--- 708,705,14,0,-35 3 0134 -- a55
+--- 682,705,14,0,-35 3 0135 -- a56
+--- 701,705,14,0,-35 3 0136 -- a57
+--- 826,705,14,0,-35 3 0137 -- a58
+--- 815,705,14,0,-35 3 0140 -- a59
+--- 789,705,14,0,-35 3 0141 -- a60
+--- 789,705,14,0,-35 3 0142 -- a61
+--- 707,705,14,0,-34 3 0143 -- a62
+--- 687,692,0,0,-36 3 0144 -- a63
+--- 696,691,0,0,-35 3 0145 -- a64
+--- 689,692,0,0,-35 3 0146 -- a65
+--- 786,705,14,0,-34 3 0147 -- a66
+--- 787,705,14,0,-35 3 0150 -- a67
+--- 713,705,14,0,-35 3 0151 -- a68
+--- 791,705,14,0,-35 3 0152 -- a69
+--- 785,705,14,0,-36 3 0153 -- a70
+--- 791,705,14,0,-35 3 0154 -- a71
+--- 873,705,14,0,-35 3 0155 -- a72
+--- 761,692,0,0,-35 3 0156 -- a73
+--- 762,692,0,0,-35 3 0157 -- a74
+--- 762,692,0,0,-35 3 0160 -- a203
+--- 759,692,0,0,-35 3 0161 -- a75
+--- 759,692,0,0,-35 3 0162 -- a204
+--- 892,705,0,0,-35 3 0163 -- a76
+--- 892,692,14,0,-35 3 0164 -- a77
+--- 788,705,14,0,-35 3 0165 -- a78
+--- 784,705,14,0,-35 3 0166 -- a79
+--- 438,705,14,0,-35 3 0167 -- a81
+--- 138,692,0,0,-35 3 0170 -- a82
+--- 277,692,0,0,-35 3 0171 -- a83
+--- 415,692,0,0,-35 3 0172 -- a84
+--- 392,705,0,0,-35 3 0173 -- a97
+--- 392,705,0,0,-34 3 0174 -- a98
+--- 668,705,0,0,-35 3 0175 -- a99
+--- 668,705,0,0,-36 3 0176 -- a100
+--- 732,806,143,0,-35 3 0241 -- a101
+--- 544,706,14,0,-56 3 0242 -- a102
+--- 544,705,14,0,-34 3 0243 -- a103
+--- 910,651,0,0,-35 3 0244 -- a104
+--- 667,705,14,0,-35 3 0245 -- a106
+--- 760,705,14,0,-35 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
+--- 776,705,0,0,-35 3 0250 -- a112
+--- 595,705,14,0,-34 3 0251 -- a111
+--- 694,705,14,0,-35 3 0252 -- a110
+--- 626,705,0,0,-34 3 0253 -- a109
+--- 788,705,14,0,-35 3 0254 -- a120
+--- 788,705,14,0,-35 3 0255 -- a121
+--- 788,705,14,0,-35 3 0256 -- a122
+--- 788,705,14,0,-35 3 0257 -- a123
+--- 788,705,14,0,-35 3 0260 -- a124
+--- 788,705,14,0,-35 3 0261 -- a125
+--- 788,705,14,0,-35 3 0262 -- a126
+--- 788,705,14,0,-35 3 0263 -- a127
+--- 788,705,14,0,-35 3 0264 -- a128
+--- 788,705,14,0,-35 3 0265 -- a129
+--- 788,705,14,0,-35 3 0266 -- a130
+--- 788,705,14,0,-35 3 0267 -- a131
+--- 788,705,14,0,-35 3 0270 -- a132
+--- 788,705,14,0,-35 3 0271 -- a133
+--- 788,705,14,0,-35 3 0272 -- a134
+--- 788,705,14,0,-35 3 0273 -- a135
+--- 788,705,14,0,-35 3 0274 -- a136
+--- 788,705,14,0,-35 3 0275 -- a137
+--- 788,705,14,0,-35 3 0276 -- a138
+--- 788,705,14,0,-35 3 0277 -- a139
+--- 788,705,14,0,-35 3 0300 -- a140
+--- 788,705,14,0,-35 3 0301 -- a141
+--- 788,705,14,0,-35 3 0302 -- a142
+--- 788,705,14,0,-35 3 0303 -- a143
+--- 788,705,14,0,-35 3 0304 -- a144
+--- 788,705,14,0,-35 3 0305 -- a145
+--- 788,705,14,0,-35 3 0306 -- a146
+--- 788,705,14,0,-35 3 0307 -- a147
+--- 788,705,14,0,-35 3 0310 -- a148
+--- 788,705,14,0,-35 3 0311 -- a149
+--- 788,705,14,0,-35 3 0312 -- a150
+--- 788,705,14,0,-35 3 0313 -- a151
+--- 788,705,14,0,-35 3 0314 -- a152
+--- 788,705,14,0,-35 3 0315 -- a153
+--- 788,705,14,0,-35 3 0316 -- a154
+--- 788,705,14,0,-35 3 0317 -- a155
+--- 788,705,14,0,-35 3 0320 -- a156
+--- 788,705,14,0,-35 3 0321 -- a157
+--- 788,705,14,0,-35 3 0322 -- a158
+--- 788,705,14,0,-35 3 0323 -- a159
+--- 894,634,0,0,-35 3 0324 -- a160
+--- 838,540,0,0,-35 3 0325 -- a161
+--- 1016,540,0,0,-34 3 0326 -- a163
+--- 458,820,127,0,-35 3 0327 -- a164
+--- 748,597,0,0,-35 3 0330 -- a196
+--- 924,552,0,0,-35 3 0331 -- a165
+--- 748,597,0,0,-35 3 0332 -- a192
+--- 918,526,0,0,-35 3 0333 -- a166
+--- 927,660,0,0,-35 3 0334 -- a167
+--- 928,562,0,0,-35 3 0335 -- a168
+--- 928,563,0,0,-35 3 0336 -- a169
+--- 834,537,0,0,-35 3 0337 -- a170
+--- 873,599,0,0,-35 3 0340 -- a171
+--- 828,588,0,0,-35 3 0341 -- a172
+--- 924,594,0,0,-35 3 0342 -- a173
+--- 924,594,0,0,-35 3 0343 -- a162
+--- 917,692,0,0,-35 3 0344 -- a174
+--- 930,608,0,0,-35 3 0345 -- a175
+--- 931,608,0,0,-35 3 0346 -- a176
+--- 463,791,99,0,-35 3 0347 -- a177
+--- 883,623,0,0,-35 3 0350 -- a178
+--- 836,648,0,0,-35 3 0351 -- a179
+--- 836,648,0,0,-35 3 0352 -- a193
+--- 867,591,0,0,-35 3 0353 -- a180
+--- 867,591,0,0,-35 3 0354 -- a199
+--- 696,648,0,0,-35 3 0355 -- a181
+--- 696,648,0,0,-35 3 0356 -- a200
+--- 874,619,0,0,-35 3 0357 -- a182
+--- 874,615,0,0,-35 3 0361 -- a201
+--- 760,692,0,0,-35 3 0362 -- a183
+--- 946,533,0,0,-35 3 0363 -- a184
+--- 771,655,0,0,-34 3 0364 -- a197
+--- 865,481,0,0,-35 3 0365 -- a185
+--- 771,655,0,0,-34 3 0366 -- a194
+--- 888,712,19,0,-34 3 0367 -- a198
+--- 967,568,0,0,-35 3 0370 -- a186
+--- 888,712,19,0,-34 3 0371 -- a195
+--- 831,579,0,0,-35 3 0372 -- a187
+--- 873,578,0,0,-36 3 0373 -- a188
+--- 927,542,0,0,-35 3 0374 -- a189
+--- 970,616,0,0,-35 3 0375 -- a190
+--- 918,593,0,0,-34 3 0376 -- a191
diff --git a/contrib/groff/font/devps/generate/Makefile b/contrib/groff/font/devps/generate/Makefile
index 897385f..5916e6a 100644
--- a/contrib/groff/font/devps/generate/Makefile
+++ b/contrib/groff/font/devps/generate/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1989-2000 Free Software Foundation, Inc.
+# Copyright (C) 1989-2000, 2002 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
@@ -42,6 +42,7 @@ FONTS=$(TEXTFONTS) $(SPECIALFONTS) $(GREEKFONTS) $(DINGBATSFONTS)
DESC=$(srcdir)/../DESC
AFMTODIT=afmtodit -d$(DESC)
IFLAG=-i 50
+RFLAG=-i 0
NOLIGFLAG=-n
TEXTENC=$(srcdir)/../text.enc
EFLAG=-e $(TEXTENC)
@@ -51,11 +52,11 @@ AFMNAME=$(srcdir)/afmname
all: $(FONTS)
TR:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Times-Roman.afm` $(TEXTMAP) $@
TB:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Times-Bold.afm` $(TEXTMAP) $@
TI:
@@ -67,11 +68,11 @@ TBI:
`$(AFMNAME) $(afmdir)/Times-BoldItalic.afm` $(TEXTMAP) $@
HR:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Helvetica.afm` $(TEXTMAP) $@
HB:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Helvetica-Bold.afm` $(TEXTMAP) $@
HI:
@@ -83,11 +84,11 @@ HBI:
`$(AFMNAME) $(afmdir)/Helvetica-BoldOblique.afm` $(TEXTMAP) $@
CR:
- $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) \
+ $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Courier.afm` $(TEXTMAP) $@
CB:
- $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) \
+ $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Courier-Bold.afm` $(TEXTMAP) $@
CI:
@@ -99,11 +100,11 @@ CBI:
`$(AFMNAME) $(afmdir)/Courier-BoldOblique.afm` $(TEXTMAP) $@
PR:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Palatino-Roman.afm` $(TEXTMAP) $@
PB:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Palatino-Bold.afm` $(TEXTMAP) $@
PI:
@@ -115,11 +116,11 @@ PBI:
`$(AFMNAME) $(afmdir)/Palatino-BoldItalic.afm` $(TEXTMAP) $@
NR:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/NewCenturySchlbk-Roman.afm` $(TEXTMAP) $@
NB:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/NewCenturySchlbk-Bold.afm` $(TEXTMAP) $@
NI:
@@ -131,11 +132,11 @@ NBI:
`$(AFMNAME) $(afmdir)/NewCenturySchlbk-BoldItalic.afm` $(TEXTMAP) $@
BMR:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Bookman-Light.afm` $(TEXTMAP) $@
BMB:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Bookman-Demi.afm` $(TEXTMAP) $@
BMI:
@@ -147,11 +148,11 @@ BMBI:
`$(AFMNAME) $(afmdir)/Bookman-DemiItalic.afm` $(TEXTMAP) $@
AR:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/AvantGarde-Book.afm` $(TEXTMAP) $@
AB:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/AvantGarde-Demi.afm` $(TEXTMAP) $@
AI:
@@ -163,11 +164,11 @@ ABI:
`$(AFMNAME) $(afmdir)/AvantGarde-DemiOblique.afm` $(TEXTMAP) $@
HNR:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Helvetica-Narrow.afm` $(TEXTMAP) $@
HNB:
- $(AFMTODIT) $(EFLAG) \
+ $(AFMTODIT) $(EFLAG) $(RFLAG) \
`$(AFMNAME) $(afmdir)/Helvetica-Narrow-Bold.afm` $(TEXTMAP) $@
HNI:
@@ -183,17 +184,17 @@ ZCMI:
`$(AFMNAME) $(afmdir)/ZapfChancery-MediumItalic.afm` $(TEXTMAP) $@
ZD:
- $(AFMTODIT) -s \
+ $(AFMTODIT) -s $(RFLAG) \
`$(AFMNAME) $(afmdir)/ZapfDingbats.afm` $(srcdir)/dingbats.map $@
SS: $(srcdir)/symbolsl.afm
$(AFMTODIT) -s $(IFLAG) $(srcdir)/symbolsl.afm $(srcdir)/lgreekmap $@
S: symbol.afm
- $(AFMTODIT) -s symbol.afm symbolmap $@
+ $(AFMTODIT) -s $(RFLAG) symbol.afm symbolmap $@
ZDR: zapfdr.afm
- $(AFMTODIT) -s zapfdr.afm $(srcdir)/dingbats.rmap $@
+ $(AFMTODIT) -s $(RFLAG) zapfdr.afm $(srcdir)/dingbats.rmap $@
symbol.afm: $(srcdir)/symbol.sed
-rm -f $@
@@ -212,7 +213,10 @@ $(GREEKFONTS): $(srcdir)/lgreekmap
$(FONTS): $(DESC)
symbolmap: $(TEXTMAP) $(srcdir)/symbolchars
- cat $(TEXTMAP) $(srcdir)/symbolchars >$@
+ echo '#' >$@
+ echo '# This is a list of all predefined groff symbols.' >>$@
+ echo '#' >>$@
+ cat $(TEXTMAP) $(srcdir)/symbolchars >>$@
clean:
-rm -f symbolmap symbol.afm zapfdr.afm
diff --git a/contrib/groff/font/devps/generate/dingbats.map b/contrib/groff/font/devps/generate/dingbats.map
index 3a97fa9..c5459ce 100644
--- a/contrib/groff/font/devps/generate/dingbats.map
+++ b/contrib/groff/font/devps/generate/dingbats.map
@@ -1,2 +1,5 @@
+#
+# Predefined groff symbols for the dingbats font.
+#
a19 OK
a12 rh
diff --git a/contrib/groff/font/devps/generate/dingbats.rmap b/contrib/groff/font/devps/generate/dingbats.rmap
index ccc14cb..2c69968 100644
--- a/contrib/groff/font/devps/generate/dingbats.rmap
+++ b/contrib/groff/font/devps/generate/dingbats.rmap
@@ -1 +1,4 @@
+#
+# Predefined groff symbols for the reversed dingbats font.
+#
a12 lh
diff --git a/contrib/groff/font/devps/generate/lgreekmap b/contrib/groff/font/devps/generate/lgreekmap
index 0b0c197..f8eda6a 100644
--- a/contrib/groff/font/devps/generate/lgreekmap
+++ b/contrib/groff/font/devps/generate/lgreekmap
@@ -1,3 +1,6 @@
+#
+# This is the list of greek symbols for the SS special font.
+#
alpha *a
beta *b
chi *x
diff --git a/contrib/groff/font/devps/generate/symbolchars b/contrib/groff/font/devps/generate/symbolchars
index 41ec3e4..418cced 100644
--- a/contrib/groff/font/devps/generate/symbolchars
+++ b/contrib/groff/font/devps/generate/symbolchars
@@ -1,3 +1,6 @@
+#
+# Additional predefined groff symbols for special fonts.
+#
plus pl
minus mi
plusminus +-
diff --git a/contrib/groff/font/devps/generate/textmap b/contrib/groff/font/devps/generate/textmap
index 5b5e0ea..4fdd08b 100644
--- a/contrib/groff/font/devps/generate/textmap
+++ b/contrib/groff/font/devps/generate/textmap
@@ -1,3 +1,6 @@
+#
+# Predefined groff symbols for textual fonts.
+#
a a
b b
c c
@@ -64,6 +67,7 @@ Ecircumflex ^E
Edieresis :E
Egrave `E
Eth -D
+Euro Eu
IJ IJ
Iacute 'I
Icircumflex ^I
@@ -112,6 +116,7 @@ arrowdown da
arrowleft <-
arrowright ->
arrowup ua
+arrowupdn va
asciicircum ha
asciitilde ti
asterisk *
@@ -219,6 +224,7 @@ macron a-
minus \-
minusplus -+
minute fm
+mu mc
nine 9
notelement nm
notequal !=
@@ -309,101 +315,6 @@ ydieresis :y
yen Ye
zcaron vz
zero 0
-exclamdown char161
-cent char162
-sterling char163
-currency char164
-yen char165
-brokenbar char166
-section char167
-dieresis char168
-copyright char169
-ordfeminine char170
-guillemotleft char171
-logicalnot char172
-hyphen char173
-registered char174
-macron char175
-degree char176
-plusminus char177
-twosuperior char178
-threesuperior char179
-acute char180
-mu char181
-paragraph char182
-periodcentered char183
-cedilla char184
-onesuperior char185
-ordmasculine char186
-guillemotright char187
-onequarter char188
-onehalf char189
-threequarters char190
-questiondown char191
-Agrave char192
-Aacute char193
-Acircumflex char194
-Atilde char195
-Adieresis char196
-Aring char197
-AE char198
-Ccedilla char199
-Egrave char200
-Eacute char201
-Ecircumflex char202
-Edieresis char203
-Igrave char204
-Iacute char205
-Icircumflex char206
-Idieresis char207
-Eth char208
-Ntilde char209
-Ograve char210
-Oacute char211
-Ocircumflex char212
-Otilde char213
-Odieresis char214
-multiply char215
-Oslash char216
-Ugrave char217
-Uacute char218
-Ucircumflex char219
-Udieresis char220
-Yacute char221
-Thorn char222
-germandbls char223
-agrave char224
-aacute char225
-acircumflex char226
-atilde char227
-adieresis char228
-aring char229
-ae char230
-ccedilla char231
-egrave char232
-eacute char233
-ecircumflex char234
-edieresis char235
-igrave char236
-iacute char237
-icircumflex char238
-idieresis char239
-eth char240
-ntilde char241
-ograve char242
-oacute char243
-ocircumflex char244
-otilde char245
-odieresis char246
-divide char247
-oslash char248
-ugrave char249
-uacute char250
-ucircumflex char251
-udieresis char252
-yacute char253
-thorn char254
-ydieresis char255
fraction f/
club CL
diamond DI
@@ -451,3 +362,6 @@ summation sum
product product
arrowvertex arrowvertex
arrowhorizex an
+multiply tmu
+divide tdi
+plusminus t+-
diff --git a/contrib/groff/font/devps/prologue.ps b/contrib/groff/font/devps/prologue.ps
index b7bad1c..41adab2 100644
--- a/contrib/groff/font/devps/prologue.ps
+++ b/contrib/groff/font/devps/prologue.ps
@@ -148,17 +148,34 @@
% fill the last path
-% amount FL -
+% r g b Fr -
-/FL {
- currentgray exch setgray fill setgray
+/Fr {
+ setrgbcolor fill
+} bind def
+
+% c m y k Fk -
+
+/Fk {
+ setcmykcolor fill
+} bind def
+
+% g Fg -
+
+/Fg {
+ setgray fill
} bind def
% fill with the ``current color''
-/BL /fill load def
+/FL /fill load def
/LW /setlinewidth load def
+
+/Cr /setrgbcolor load def
+/Ck /setcmykcolor load def
+/Cg /setgray load def
+
% new_font_name encoding_vector old_font_name RE -
/RE {
diff --git a/contrib/groff/font/devps/symbolmap b/contrib/groff/font/devps/symbolmap
index 03d6e70..6988c72 100644
--- a/contrib/groff/font/devps/symbolmap
+++ b/contrib/groff/font/devps/symbolmap
@@ -1,3 +1,9 @@
+#
+# This is a list of all predefined groff symbols.
+#
+#
+# Predefined groff symbols for textual fonts.
+#
a a
b b
c c
@@ -64,6 +70,7 @@ Ecircumflex ^E
Edieresis :E
Egrave `E
Eth -D
+Euro Eu
IJ IJ
Iacute 'I
Icircumflex ^I
@@ -112,6 +119,7 @@ arrowdown da
arrowleft <-
arrowright ->
arrowup ua
+arrowupdn va
asciicircum ha
asciitilde ti
asterisk *
@@ -219,6 +227,7 @@ macron a-
minus \-
minusplus -+
minute fm
+mu mc
nine 9
notelement nm
notequal !=
@@ -309,101 +318,6 @@ ydieresis :y
yen Ye
zcaron vz
zero 0
-exclamdown char161
-cent char162
-sterling char163
-currency char164
-yen char165
-brokenbar char166
-section char167
-dieresis char168
-copyright char169
-ordfeminine char170
-guillemotleft char171
-logicalnot char172
-hyphen char173
-registered char174
-macron char175
-degree char176
-plusminus char177
-twosuperior char178
-threesuperior char179
-acute char180
-mu char181
-paragraph char182
-periodcentered char183
-cedilla char184
-onesuperior char185
-ordmasculine char186
-guillemotright char187
-onequarter char188
-onehalf char189
-threequarters char190
-questiondown char191
-Agrave char192
-Aacute char193
-Acircumflex char194
-Atilde char195
-Adieresis char196
-Aring char197
-AE char198
-Ccedilla char199
-Egrave char200
-Eacute char201
-Ecircumflex char202
-Edieresis char203
-Igrave char204
-Iacute char205
-Icircumflex char206
-Idieresis char207
-Eth char208
-Ntilde char209
-Ograve char210
-Oacute char211
-Ocircumflex char212
-Otilde char213
-Odieresis char214
-multiply char215
-Oslash char216
-Ugrave char217
-Uacute char218
-Ucircumflex char219
-Udieresis char220
-Yacute char221
-Thorn char222
-germandbls char223
-agrave char224
-aacute char225
-acircumflex char226
-atilde char227
-adieresis char228
-aring char229
-ae char230
-ccedilla char231
-egrave char232
-eacute char233
-ecircumflex char234
-edieresis char235
-igrave char236
-iacute char237
-icircumflex char238
-idieresis char239
-eth char240
-ntilde char241
-ograve char242
-oacute char243
-ocircumflex char244
-otilde char245
-odieresis char246
-divide char247
-oslash char248
-ugrave char249
-uacute char250
-ucircumflex char251
-udieresis char252
-yacute char253
-thorn char254
-ydieresis char255
fraction f/
club CL
diamond DI
@@ -451,6 +365,12 @@ summation sum
product product
arrowvertex arrowvertex
arrowhorizex an
+multiply tmu
+divide tdi
+plusminus t+-
+#
+# Additional predefined groff symbols for special fonts.
+#
plus pl
minus mi
plusminus +-
diff --git a/contrib/groff/font/devps/text.enc b/contrib/groff/font/devps/text.enc
index dde5bb7..b915736 100644
--- a/contrib/groff/font/devps/text.enc
+++ b/contrib/groff/font/devps/text.enc
@@ -1,3 +1,7 @@
+#
+# This is the font encoding used by grops to encode the standard PS text
+# fonts (excluding special fonts).
+#
asciicircum 0
asciitilde 1
Scaron 2
@@ -7,6 +11,7 @@ zcaron 5
Ydieresis 6
trademark 7
quotesingle 8
+Euro 9
space 32
exclam 33
quotedbl 34
@@ -146,8 +151,8 @@ copyright 169
ordfeminine 170
guilsinglleft 171
logicalnot 172
-registered 174
minus 173
+registered 174
macron 175
degree 176
plusminus 177
diff --git a/contrib/groff/font/devutf8/NOTES b/contrib/groff/font/devutf8/NOTES
index ba597af..af64ff4 100644
--- a/contrib/groff/font/devutf8/NOTES
+++ b/contrib/groff/font/devutf8/NOTES
@@ -1,64 +1,56 @@
+Note that all `charXXX' entity names have been removed from the font files.
+They don't make sense for Unicode.
+
The following from the original troff manual (by Ossanna and Kernighan) is
unmapped:
- \(bs shaded solid ball (Bell System logo, AT&T logo)
+ \(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
+ \(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".
+The following line could be added; "space" is known to "devps" but are not
+documented and not known to "devdvi" (actually, there is no space glyph
+within the TeX system).
+
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.
+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.
+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
+"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 *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 *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.
-"devps" maps CR to carriagereturn, which is equivalent to 0x21B5. We map it
-to 0x240D instead.
-Using unnamed characters:
+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:
diff --git a/contrib/groff/font/devutf8/R.proto b/contrib/groff/font/devutf8/R.proto
index 7715ed4..423bc6a 100644
--- a/contrib/groff/font/devutf8/R.proto
+++ b/contrib/groff/font/devutf8/R.proto
@@ -118,199 +118,114 @@ 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 "
shc 24 0 0x00AD
-char173 "
rg 24 0 0x00AE
-char174 "
a- 24 0 0x00AF
-char175 "
de 24 0 0x00B0
-char176 "
+- 24 0 0x00B1
-char177 "
+t+- "
S2 24 0 0x00B2
-char178 "
S3 24 0 0x00B3
-char179 "
aa 24 0 0x00B4
-char180 "
-char181 24 0 0x00B5
+\' "
+mc 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 "
+tmu "
/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 "
+tdi "
/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
+vS 24 0 0x0160
+vs 24 0 0x0161
+:Y 24 0 0x0178
+vZ 24 0 0x017D
+vz 24 0 0x017E
Fn 24 0 0x0192
ah 24 0 0x02C7
ab 24 0 0x02D8
@@ -392,6 +307,8 @@ fo 24 0 0x2039
fc 24 0 0x203A
rn 24 0 0x203E
f/ 24 0 0x2044
+eu 24 0 0x20AC
+Eu "
Im 24 0 0x2111
wp 24 0 0x2118
Re 24 0 0x211C
@@ -415,6 +332,8 @@ gr 24 0 0x2207
mo 24 0 0x2208
nm 24 0 0x2209
st 24 0 0x220B
+product 24 0 0x220F
+sum 24 0 0x2211
\- 24 0 0x2212
mi "
** 24 0 0x2217
@@ -428,6 +347,7 @@ ca 24 0 0x2229
cu 24 0 0x222A
is 24 0 0x222B
tf 24 0 0x2234
+3d "
ti 24 0 0x223C
ap "
=~ 24 0 0x2245
@@ -439,12 +359,13 @@ ap "
>= 24 0 0x2265
sb 24 0 0x2282
sp 24 0 0x2283
+nb 24 0 0x2284
ib 24 0 0x2286
ip 24 0 0x2287
c+ 24 0 0x2295
c* 24 0 0x2297
pp 24 0 0x22A5
-pc 24 0 0x22C5
+md 24 0 0x22C5
lc 24 0 0x2308
rc 24 0 0x2309
lf 24 0 0x230A
@@ -466,6 +387,10 @@ lz 24 0 0x25CA
ci 24 0 0x25EF
lh 24 0 0x261C
rh 24 0 0x261E
+SP 24 0 0x2660
+CL 24 0 0x2663
+HE 24 0 0x2665
+DI 24 0 0x2666
ff 24 0 0xFB00
fi 24 0 0xFB01
fl 24 0 0xFB02
diff --git a/contrib/groff/man/Makefile.sub b/contrib/groff/man/Makefile.sub
index 020d20f..86c4aea 100644
--- a/contrib/groff/man/Makefile.sub
+++ b/contrib/groff/man/Makefile.sub
@@ -1,7 +1,10 @@
MAN5=\
groff_font.n \
- groff_out.n
+ groff_out.n \
+ groff_tmac.n
MAN7=\
+ ditroff.n \
groff_char.n \
+ groff_diff.n \
groff.n \
roff.n
diff --git a/contrib/groff/man/ditroff.man b/contrib/groff/man/ditroff.man
new file mode 100644
index 0000000..0867f3d0
--- /dev/null
+++ b/contrib/groff/man/ditroff.man
@@ -0,0 +1,199 @@
+.ig
+ditroff.man
+
+Last update: 4 Jan 2002
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+written by Bernd Warken <bwarken@mayn.de>
+maintained by Werner Lemberg <wl@gnu.org>
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHORS, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.mso www.tmac
+.
+.if n \{\
+. mso tty-char.tmac
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.if '\*[.T]'dvi' \
+. ftr CB CW
+.
+.
+.\" --------------------------------------------------------------------
+.\" Title
+.\" --------------------------------------------------------------------
+.
+.TH DITROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+ditroff \- classical device independent roff
+.
+.
+.\" --------------------------------------------------------------------
+.SH DESCRIPTION
+.\" --------------------------------------------------------------------
+.
+The name
+.I ditroff
+once marked a development level of the
+.I troff
+text processing system.
+.
+In actual
+.BR roff (@MAN7EXT@)
+systems, the name
+.I troff
+is used as a synonym for
+.IR ditroff .
+.
+.P
+The first roff system was written by Joe Osanna around 1973.
+.
+It supported only two output devices, the
+.B nroff
+program produced text oriented tty output, while the
+.B troff
+program generated graphical output for exactly one output device, the Wang
+.I Graphic Systems CAT
+typesetter.
+.
+.P
+In 1979, Brian Kernighan rewrote troff to support more devices by
+creating an intermediate output format for troff that can be fed into
+postprocessor programs which actually do the printout on the device.
+.
+Kernighan's version marks what is known as
+.I classical troff
+today.
+.
+In order to distinguish it from Osanna's original mono-device version,
+it was called
+.I ditroff
+.RI ( d\/ evice\~ i\/ ndependent\~ troff\/ )
+on some systems, though this naming isn't mentioned in the classical
+documentation.
+.
+.P
+Today, any existing roff system is based on Kernighan's multi-device
+troff.
+.
+The distinction between
+.I troff
+and
+.I ditroff
+isn't necessary any longer, for each modern
+.I troff
+provides already the complete functionality of
+.IR ditroff .
+.
+On most systems, the name
+.I troff
+is used to denote
+.IR ditroff .
+.
+.P
+The easiest way to use ditroff is the GNU roff system,
+.IR groff .
+The
+.BR groff (@MAN1EXT@)
+program is a wrapper around
+.I (di)troff
+that automatically handles postprocessing.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+.
+.TP
+.I [CSTR\~#54]
+The 1992 revision of the
+.I Nroff/Troff User's Manual
+by
+.I J. F. Osanna
+and
+.IR "Brian Kernighan" ,
+see
+.br
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz \
+ "Bell Labs CSTR\~#54" .
+.
+.TP
+.I [CSTR\~#97]
+.I A Typesetter-independent TROFF
+by
+.I Brian Kernighan
+is the original documentation of the first multi-device troff
+.RI ( ditroff\/ ),
+see
+.br
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz \
+ "Bell Labs CSTR\~#97" .
+.
+.TP
+.BR roff (@MAN7EXT@)
+This document gives details on the history and concepts of roff.
+.
+.TP
+.BR @g@troff (@MAN1EXT@)
+The actual implementation of
+.IR ditroff .
+.
+.TP
+.BR groff (@MAN1EXT@)
+The GNU roff program and pointers to all documentation around groff.
+.
+.TP
+.BR groff_out (@MAN5EXT@)
+The groff version of the intermediate output language, the basis for
+multi-devicing.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "AUTHORS"
+.\" --------------------------------------------------------------------
+.
+Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+.
+.P
+This document is distributed under the terms of the FDL (GNU Free
+Documentation License) version 1.1 or later.
+.
+You should have received a copy of the FDL on your system, it is also
+available on-line at the
+.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
+.
+.P
+This document is part of
+.IR groff ,
+the GNU roff distribution.
+.
+It was written by
+.MTO bwarken@mayn.de "Bernd Warken"
+and is maintained by
+.MTO wl@gnu.org "Werner Lemberg" .
+.
+.
+.\" --------------------------------------------------------------------
+.\" Emacs settings
+.\" --------------------------------------------------------------------
+.\"
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff --git a/contrib/groff/man/groff.man b/contrib/groff/man/groff.man
index c20cf07..1e9128d 100644
--- a/contrib/groff/man/groff.man
+++ b/contrib/groff/man/groff.man
@@ -1,16 +1,19 @@
'\" t
.ig
-groff.7
+groff.man
+
+Last update: 29 June 2002
This file is part of groff, the GNU roff type-setting system.
-Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
written by Bernd Warken <bwarken@mayn.de>
+maintained by Werner Lemberg <wl@gnu.org>
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHOR, with no
+Invariant Sections being this .ig-section and AUTHORS, with no
Front-Cover Texts, and with no Back-Cover Texts.
A copy of the Free Documentation License is included as a file called
@@ -21,6 +24,8 @@ FDL in the main directory of the groff source package.
.\" Setup
.\" --------------------------------------------------------------------
.
+.mso www.tmac
+.
.if n \{\
. mso tty-char.tmac
. ftr CR R
@@ -32,243 +37,281 @@ FDL in the main directory of the groff source package.
. ftr CB CW
.\}
.
-.\" a comment macro which does nothing
-.de c
-..
-.
-.\" a tab string
-.ds t "\t
.
+.\" --------------------------------------------------------------------
+.\" start of macro definitions
.eo
.
-.c text lines in macro definitions or bracketed sections \{...\}
-.de text
-. if 1 \&\$*\&
+.de c
..
.
-.de option
-. ds @tmp@ \f(CB\$1\fP
-. shift 1
-. text \*[@tmp@]\$*
-. rm @tmp@
+.de TPx
+. TP 10n
+..
+.c ---------------------------------------------------------------------
+.c .Text anything ...
+.c
+.c All arguments are printed as text.
+.c
+.de Text
+. nop \)\$*
+..
+.c ---------------------------------------------------------------------
+.c .ExecFF macro font1 font2 text1 text2 text1 text2 ...
+.c
+.c Concat text arguments using alternating fonts and feed into macro.
+.c For a trailing punctuation, terminate the call with \c.
+.c
+.de ExecFF
+. if (\n[.$] < 4) \
+. return
+. ds @a\"
+. ds @m \$1\"
+. ds @f1 \$2\"
+. ds @f2 \$3\"
+. shift 3
+. ds @s\"
+. while 1 \{\
+. if (\n[.$] = 0) \
+. break
+. ds @a \$1\"
+. as @s \f[\*[@f1]]\*[@a]\f[]\"
+. shift
+. if (\n[.$] = 0) \
+. break
+. ds @a \$1\"
+. as @s \f[\*[@f2]]\*[@a]\f[]\"
+. shift
+. \}
+. \*[@m] "\*[@s]\f[R]"
+. ft P \" to make \c happy
+. rm @m
+. rm @s
+. rm @a
+. rm @f1
+. rm @f2
..
.
-.als shellcommand option
+.c --------- command line option ---------
+.
+.de option
+. Text \f[CB]\$*
+. ft P
+..
.
.c --------- characters ---------
.
.de character
-. ds @tmp@ \f(CB\$1\fP
-. shift
-. text \*[@tmp@]\$*
-. rm @tmp@
+. ExecFF Text CB R \$*
..
-.
-.de 'char
-. ds @tmp@ \(oq\f(CB\$1\fP\(cq
+.de squoted_char
+. ds @1 \$1\"
. shift
-. text \*[@tmp@]\$*
-. rm @tmp@
+. ExecFF Text R CB \[oq] \*[@1] "\[cq]\$*"
+. rm @1
..
-.
-.de ''char
-. ds @tmp@ \(lq\f(CB\$1\fP\(rq
+.de dquoted_char
+. ds @1 \$1\"
. shift
-. text \*[@tmp@]\$*
-. rm @tmp@
+. ExecFF Text R CB \[lq] \*[@1] "\[rq]\$*"
+. rm @1
..
-.
.c --------- requests ---------
.
-.c request synopsis
+.c synopsis of a request
.de REQ
-. ds @tmp@ \&\$1
+. if (\n[.$] = 0) \
+. return
+. ds @1 \$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
+. ie (\n[.$] = 0) \{\
+. TP 10n
+. Text \f[CB]\*[@1]\f[]
. \}
-. if \n[.$] .as @tmp@ \/\f(CR\$1\fP
-. text \*[@tmp@]
-. rm @tmp@
+. el \{\
+. TP 10n
+. Text \f[CB]\*[@1]\~\f[]\f[I]\$*\f[]
+. \}
+. rm @1
..
-.
-.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 reference of a request
+.de request
+. BR \$*
..
.
.c --------- numerical elements ---------
.
-.de number
-. ds @tmp@ \f(CR\$1\fP
-. shift 1
-. text \*[@tmp@]\$*
-. rm @tmp@
+.c number with a trailing unit
+.de scalednumber
+. Text \$1\^\f[CB]\$2\f[]\$3\f[R]
+. ft P
..
.
-.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@
+.c representation of units within the text
+.de scaleindicator
+. Text \f[CB]\$1\f[]\$2\f[R]
+. ft P
..
.
+.c representation of mathematical operators within the text
.de operator
-. ds @tmp@ \(oq\f(CB\$1\fP\(cq
-. shift
-. text \*[@tmp@]\$*
-. rm @tmp@
+. squoted_char \$@
..
.
-.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@
-..
+.c --------- escape sequences ---------
.
-.de esc(arg
-. ds @tmp@ \f(CB\(rs\$1(\fP\f(CI\$2\fP
-. shift 2
-. text \*[@tmp@]\$*
-. rm @tmp@
+.c ---------------------------------------------------------------------
+.c .ESC name [arg]
+.c
+.c Synopsis of an escape sequence, optionally with argument
+.c Args : 1 or 2; `name' obligatory, `arg' optional
+.c name : suitable name for an escape sequence (c, (xy, [long])
+.c arg : arbitrary word
+.c Result : prints \namearg, where `name' is in CB, `arg' in I
+.c
+.de ESC
+. if (\n[.$] < 1)
+. ab .ESC needs 1 or 2 arguments.
+. ExecFF IP CB I "\[rs]\$1" "\,\$2\/"
..
-.
-.de escarg
-. ds @tmp@ \f(CB\(rs\$1\fP\f(CI\$2\fP
-. shift 2
-. text \*[@tmp@]\$*
-. rm @tmp@
+.c ---------------------------------------------------------------------
+.c .ESC[] name arg
+.c
+.c Synopsis for escape sequence with a bracketed long argument
+.c Args : 2 obligatory
+.c name : suitable name for an escape sequence (c, (xy, [long])
+.c arg : arbitrary text
+.c Result : prints \name[arg], where `name' is in CB, `arg' in I
+.c
+.de ESC[]
+. if !(\n[.$] = 2) \
+. ab .ESC[] needs exactly 2 arguments.
+. ExecFF IP CB I "\[rs]\$1\[lB]" "\h'-0.2m'\$2\h'-0.15m'" \[rB]
..
-.
-.de esc[]
-. ds @tmp@ \f(CB\(rs[\fP\f(CI\$1\fP\f(CB]\fP
-. shift
-. text \*[@tmp@]\$*
-. rm @tmp@
+.c ---------------------------------------------------------------------
+.c .ESCq name arg
+.c
+.c Synopsis for escape sequence with a bracketed long argument
+.c Args : 2 obligatory
+.c name : suitable name for an escape sequence (c, (xy, [long])
+.c arg : arbitrary text
+.c Result : prints \name'arg', where `name' is in CB, `arg' in I
+.c
+.de ESCq
+. if !(\n[.$] = 2) \
+. ab .ESCq needs exactly 2 argument.
+. ExecFF IP CB I "\[rs]\$1\[cq]" "\h'-0.3m'\$2" \[cq]
..
-.
-.de esc(
-. ds @tmp@ \f(CB\(rs(\fP\f(CI\$1\fP
-. shift
-. text \*[@tmp@]\$*
-. rm @tmp@
+.c ---------------------------------------------------------------------
+.c .ESC? arg
+.c
+.c Synopsis for escape sequence with a bracketed long argument
+.c Args : 1 obligatory
+.c arg : arbitrary text
+.c Result : prints `\?arg?', where the `?' are in CB, `arg' in I
+.c
+.de ESC?
+. if !(\n[.$] = 1) \
+. ab .ESC? needs exactly 1 arguments.
+. ExecFF IP CB I \[rs]? "\$1" ?
..
-.
+.c ---------------------------------------------------------------------
+.c .esc name [punct]
+.c
+.c Reference of an escape sequence (no args), possibly punctuation
+.c Args : 1 obligatory
+.c name : suitable name for an escape sequence (c, (xy, [long])
+.c punct : arbitrary
+.c Result : prints \name, where `name' is in B, `punct' in R
+.c
.de esc
-. ds @tmp@ \f(CB\(rs\$1\fP
-. shift
-. text \*[@tmp@]\$*
-. rm @tmp@
+. if (\n[.$] < 1) \
+. ab .esc needs 1 or 2 arguments.
+. BR "\[rs]\$1" \$2
..
-.
-.de (esc
-. ds @tmp@ \f(CB\(rs(\$1\fP
-. shift
-. text \*[@tmp@]\$*
-. rm @tmp@
+.c ---------------------------------------------------------------------
+.c .escarg name arg [punct]
+.c
+.c Reference of an escape sequence (no args)
+.c Args : 1 obligatory, 1 optional
+.c name : suitable name for an escape sequence (c, (xy, [long])
+.c arg : arbitrary word
+.c Result : prints \namearg, where
+.c `name' is in B, `arg' in I
+.c
+.de escarg
+. if (\n[.$] < 2) \
+. ab .esc needs 2 or 3 arguments.
+. Text \f[B]\[rs]\$1\f[]\f[I]\$2\f[]\$3
..
-.
-.de [esc]
-. ds @tmp@ \f(CB\(rs[\$1]\fP
-. shift
-. text \*[@tmp@]\$*
-. rm @tmp@
+.c ---------------------------------------------------------------------
+.c .esc[] name arg [punct]
+.c
+.c Reference for escape sequence with a bracketed long argument
+.c Args : 2 obligatory
+.c name : suitable name for an escape sequence (c, (xy, [long])
+.c arg : arbitrary text
+.c Result : prints \name[arg], where `name' is in CB, `arg' in CI
+.c
+.de esc[]
+. if (\n[.$] < 2) \
+. ab .esc[] needs 2 or 3 arguments.
+. Text \f[B]\[rs]\$1\[lB]\f[]\f[I]\$2\f[]\f[B]\[rB]\f[]\$3
..
.
-.c escape sequence synopsis
-.de ESC
-. ds @tmp@ \&\$1
-. shift 1
-. IP "\f(CB\(rs\&\*[@tmp@]\fP\f(CI\&\$*\fP"
-. rm @tmp@
+.c ---------------------------------------------------------------------
+.c .escq name arg
+.c
+.c Reference for escape sequence with a bracketed long argument
+.c Args : 2 obligatory
+.c name : suitable name for an escape sequence (c, (xy, [long])
+.c arg : arbitrary text
+.c Result : prints \name'arg', where `name' is in CB, `arg' in CI
+.c
+.de escq
+. if (\n[.$] < 2) \
+. ab .escq needs 2 arguments.
+. Text \f[B]\[rs]\$1\[cq]\f[]\f[I]\$2\f[]\f[B]\[cq]\f[]\$3
..
.
-.c 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 --------- strings ---------
.
-.c synopsis escape sequence with quoted argument
-. de ESCq
-. ds @tmp@ \&\$1
+.c synopsis for string, with \*[]
+.de STRING
+. ds @1 \$1\"
. shift 1
-. IP "\f(CB\(rs\&\*[@tmp@]\(cq\fP\f(CI\h'-0.2m'\$*\/\fP\f(CB\(cq\fP"
-. rm @tmp@
+. TP 10n
+. ExecFF Text R CB \[rs]*[ \*[@1]\f[]\f[R]] \$*
+. rm @1
..
-.
-.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 synopsis for a long string
+.de string
+. if (\n[.$] = 0) \
+. return
+. Text \f[CB]\[rs]*\[lB]\$1\[rB]\f[]\$2
..
.
+.
.c --------- registers ---------
.
-.c synopsis for registers
+.c synopsis for registers, with \n[]
.de REG
-. TP 10n
-. text \&\f(CR\(rsn[\fP\f(CB\$1\fP\f(CR]\fP
+. ds @1 \$1\"
. shift 1
-.if \n[.$] \&\$*
+. TP 10n
+. ExecFF Text R CB \[rs]n[ \*[@1]\f[]\f[R]] \$*
+. rm @1
..
-.
-.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
+.c reference of a register, without decoration
+.de register
+. Text register
+. BR \$*
..
.
.ec
+.\" end of macro definitions
+.
.
.\" --------------------------------------------------------------------
.\" Title
@@ -278,33 +321,43 @@ FDL in the main directory of the groff source package.
.SH NAME
groff \- a short reference for the GNU roff language
.
+.
.\" --------------------------------------------------------------------
.SH DESCRIPTION
.\" --------------------------------------------------------------------
+.
+The name
.I groff
stands for
.I GNU roff
and is the free implementation of the roff type-setting system.
+.
See
.BR roff (@MAN7EXT@)
for a survey and the background of the groff system.
-.LP
+.
+.P
This document gives only short descriptions of the predefined roff
language elements as used in groff.
+.
Both the classical features and the groff extensions are provided.
-.LP
+.
+.P
Historically, the
.I roff language
was called
.IR troff .
.I groff
-is compatible with the classical system and provides proper extensions.
+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
@@ -312,255 +365,329 @@ slightly tends to refer more to the classical aspects, whereas
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
+.
+.P
+This file is only a short version of the complete documentation that
+is found in the
.I groff
.BR info (1)
file, which contains more detailed, actual, and concise information.
-.LP
+.
+.P
The general syntax for writing groff documents is relatively easy, but
writing extensions to the roff language can be a bit harder.
-.LP
+.
+.P
The roff language is line-oriented.
+.
There are only two kinds of lines, control lines and text lines.
+.
The control lines start with a control character, by default a period
-.''char .
+.dquoted_char .
or a single quote
-.''char ' ;
+.dquoted_char ' ;
all other lines are text lines.
-.LP
+.
+.P
.B Control lines
represent commands, optionally with arguments.
+.
They have the following syntax.
+.
The leading control character can be followed by a command name;
arguments, if any, are separated by blanks from the command name and
among themselves, for example,
.RS
-.LP
-\&\.command_name arg1 arg2
+.
+.P
+.Text .command_name arg1 arg2
.RE
-.LP
+.
+.P
For indentation, any number of space or tab characters can be inserted
-between the leading control character and the command name, but the control
-character must be on the first position of the line.
-.LP
+between the leading control character and the command name, but the
+control character must be on the first position of the line.
+.
+.P
.B Text lines
represent the parts that will be printed.
They can be modified by escape sequences, which are recognized by a
leading backslash
-.'char \(rs .
+.squoted_char \[rs] .
These are in-line or even in-word formatting elements or functions.
+.
Some of these take arguments separated by single quotes
-.''char ' ,
+.dquoted_char ' ,
others are regulated by a length encoding introduced by an open
parenthesis
-.'char (
+.squoted_char (
or enclosed in brackets
-.'char [
+.squoted_char [
and
-.'char ] .
-.LP
+.squoted_char ] .
+.
+.P
The roff language provides flexible instruments for writing language
extension, such as macros.
+.
When interpreting macro definitions, the roff system enters a special
operating mode, called the
.BR "copy mode" .
-.LP
+.
+.P
The copy mode behavior can be quite tricky, but there are some rules
that ensure a safe usage.
+.
.IP 1.
Printable backslashes must be denoted as
.esc e .
To be more precise,
.esc e
represents the current escape character.
+.
To get a backslash glyph, use
-.esc (rs .
+.esc (rs
+or
+.esc [rs] .
.IP 2.
Double all backslashes.
.IP 3.
Begin all text lines with the special non-spacing character
.esc & .
-.LP
+.
+.P
This does not produce the most efficient code, but it should work as a
first measure.
+.
For better strategies, see the groff info file and
.BR groff_tmac (@MAN5EXT@).
-.LP
+.
+.P
Reading roff source files is easier, just reduce all double backslashes
to a single one in all macro definitions.
.
+.
.\" --------------------------------------------------------------------
.SH "GROFF ELEMENTS"
.\" --------------------------------------------------------------------
+.
The roff language elements add formatting information to a text file.
-The fundamental elements are predefined commands and variables that make
-roff a full-blown programming language.
-.LP
+.
+The fundamental elements are predefined commands and variables that
+make roff a full-blown programming language.
+.
+.P
There are two kinds of roff commands, possibly with arguments.
.B Requests
are written on a line of their own starting with a dot
-.'char .
+.squoted_char .
or a
-.''char ' ,
+.dquoted_char ' ,
whereas
.B Escape sequences
are in-line functions and in-word formatting elements starting with a
backslash
-.'char \(rs .
-.LP
+.squoted_char \[rs] .
+.
+.P
The user can define her own formatting commands using the
-.request .de
-request. These commands are called
+.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.
+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
+.
+.P
The groff language provides several kinds of variables with
different interfaces.
+.
There are pre-defined variables, but the user can define her own
variables as well.
-.LP
+.
+.P
.B String
variables store character sequences.
+.
They are set with the
-.request .ds
+.request ds
request and retrieved by the
.esc *
escape sequences.
-.LP
+.
+Strings can have variables.
+.
+.P
.B Register
variables can store numerical values, numbers with a scale unit, and
occasionally string-like objects.
+.
They are set with the
-.request .nr
+.request nr
request and retrieved by the
.esc n
escape sequences.
-.LP
+.
+.P
.B Environments
allow the user to temporarily store global formatting parameters like
-line length, font size, etc. for later reuse.
+line length, font size, etc.\& for later reuse.
+.
This is done by the
-.request .ev
+.request ev
request.
-.LP
+.
+.P
.B Fonts
are identified either by a name or by an internal number.
+.
The current font is chosen by the
-.request .ft
+.request ft
request or by the
.esc f
escape sequences.
-Each device has special fonts, but the following fonts are available for
-all devices.
+.
+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
+and is available everywhere, but on text devices it is displayed as an
underlined Roman font.
-For the graphical output devices, there exist constant-width pendants of
-these font,
+.
+For the graphical output devices, there exist constant-width pendants
+of these fonts,
.BR CR ,
.BR CI ,
and
.BR CB .
On text devices, all characters have a constant width anyway.
-.LP
+.
+.P
Moreover, there are some advanced roff elements.
+.
A
.B diversion
stores information into a macro for later usage.
+.
A
.B trap
is a positional condition like a certain number of lines from page top
or in a diversion or in the input.
-Some action can be prescribed to be run automatically when the condition
-is met.
-.LP
-More detailed information can be found in the groff info file.
+.
+Some action can be prescribed to be run automatically when the
+condition is met.
+.
+.P
+More detailed information and examples can be found in the groff info
+file.
+.
.
.\" --------------------------------------------------------------------
.SH "CONTROL CHARACTERS"
.\" --------------------------------------------------------------------
-There is a small set of characters that have a special controlling task
-in certain conditions.
+.
+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 ,
+.request if ,
+.request ie ,
+.request el ,
and
-.request .while .
+.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 cc
request, the control character can be set to a different character,
making the dot
-.'char .
+.squoted_char .
a non-special character.
.IP ""
In all other positions, it just means a dot character.
-In text paragraphs, it is advantageous to start each sentence at a line
-of its own.
+.
+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.
+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 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. In
-the
-.request .ds
+.character \[dq]
+The double quote is used to enclose arguments in requests, macros, and
+strings.
+.
+In the
+.request ds
and
-.request .as
+.request as
requests, a leading double quote in the argument will be stripped off,
-making everything else afterwards the string to be defined (enabling leading
-whitespace).
+making everything else afterwards the string to be defined (enabling
+leading whitespace).
+.
The escaped double quote
-.esc \(dq
+.esc \[dq]
introduces a comment.
+.
Otherwise, it is not special.
+.
Groff provides a printable representation with the
.esc (dq
escape sequence.
+.
.TP
-.character \(rs
+.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
@@ -570,261 +697,435 @@ escape; a backslash glyph can be obtained by
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.
+.
+In groff, this behavior can be replaced by the \f[CB][]\f[] construct.
.TP
.character [
-The opening bracket is only special in groff escape sequences; there it
-is used to introduce a long escape name or long escape argument.
-Otherwise, it is non-special, e.g. in macro calls.
+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.
+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.
+\f[CI]space\f[]
+Space characters are only functional characters.
+.
+They separate the arguments in requests, macros, and strings, and the words
+in text lines.
+.
They are subject to groff's horizontal spacing calculations.
+.
To get a defined space width, escape sequences like
-.'char "\(rs\ "
+.squoted_char "\[rs]\ "
(this is the escape character followed by a space),
.esc | ,
.esc ^ ,
or
.esc h
should be used.
-.IP \f(CInewline\fP
+.
+.IP \f[CI]newline\f[]
In text paragraphs, newlines mostly behave like space characters.
+.
Continuation lines can be specified by an escaped newline, i.e., by
specifying a backslash
-.'char \(rs
+.squoted_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.
+.IP \f[CI]tab\f[]
+If a tab character occurs during text the interpreter makes a
+horizontal jump to the next pre-defined tab position.
+.
There is a sophisticated interface for handling tab positions.
.
+.
.\" --------------------------------------------------------------------
.SH "NUMERICAL EXPRESSIONS"
.\" --------------------------------------------------------------------
+.
A
.B numerical value
is a signed or unsigned integer or float with or without an appended
-scale indicator.
+scaling indicator.
+.
A
-.B scale indicator
+.B scaling 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
+.
+A number followed by a scaling indicator signifies a size value.
+.
+By default, numerical values do not have a scaling indicator, i.e., they
+are normal numbers.
+.
+.P
+The
+.I roff
+language defines the following scaling indicators.
+.
+.
+.P
+.PD 0
+.RS
+.
+.TPx
+.B c
+Centimeter
+.
+.TPx
+.B i
+Inch
+.
+.TPx
+.B P
+Pica\ \[eq]\ 1/6\ inch
+.
+.TPx
+.B p
+Point\ \[eq]\ 1/72\ inch
+.
+.TPx
+.B m
+Em\ \[eq]\ \f[R]the font size in points (width of letter `\f[CR]m\f[R]')
+.
+.TPx
+.B M
+100\^th \f[R]of an \f[CR]Em
+.
+.TPx
+.B n
+En\ \[eq]\ Em/2
+.
+.TPx
+.B u
+Basic unit for actual output device
+.
+.TPx
+.B v
+Vertical line space in basic units
+scaled point\ \[eq]\ 1/\f[CI]sizescale\f[R] of a point (defined in
+font \f[I]DESC\f[] file)
+.
+.TPx
+.B f
+Scale by 65536.
+.RE
+.PD
+.
+.P
.B Numerical expressions
-are combinations of the numerical values defined above with
-the 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
+are combinations of the numerical values defined above with the
+following arithmetical operators already defined in classical troff.
+.
+.P
+.PD 0
+.RS
+.
+.TPx
+.B +
+Addition
+.
+.TPx
+.B \-
+Subtraction
+.
+.TPx
+.B *
+Multiplication
+.
+.TPx
+.B /
+Division
+.
+.TPx
+.B %
+Modulo
+.
+.TPx
+.B =
+Equals
+.
+.TPx
+.B ==
+Equals
+.
+.TPx
+.B <
+Less than
+.
+.TPx
+.B >
+Greater than
+.
+.TPx
+.B <=
+Less or equal
+.
+.TPx
+.B >=
+Greater or equal
+.
+.TPx
+.B &
+Logical and
+.
+.TPx
+.B :
+Logical or
+.
+.TPx
+.B !
+Logical not
+.
+.TPx
+.B (
+Grouping of expressions
+.
+.TPx
+.B )
+Close current grouping
+.
+.RE
+.PD
+.
+.P
Moreover,
.I groff
added the following operators for numerical expressions:
-.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
+.
+.P
+.PD 0
+.RS
+.
+.TPx
+.ExecFF Text I CB e1 >? e2
+The maximum of
+.I e1
+and
+.IR e2 .
+.
+.TPx
+.ExecFF Text I CB e1 <? e2
+The minimum of
+.I e1
+and
+.IR e2 .
+.
+.TPx
+.ExecFF Text CB I ( c ; e )
+Evaluate
+.I e
+using
+.I c
+as the default scaling indicator.
+.
+.RE
+.PD
+.
+.P
For details see the groff info file.
.
+.
.\" --------------------------------------------------------------------
.SH CONDITIONS
.\" --------------------------------------------------------------------
+.
.B Conditions
occur in tests raised by the
-.request .if ,
-.request .ie ,
+.request if ,
+.request ie ,
and the
-.request .while
+.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
+.
+.P
+.PD 0
+.RS
+.
+.TPx
+.I N
+A numerical expression
+.I N
+yields true if its value is greater than\~0.
+.
+.TPx
+.BI ! N
+True if the value of
+.I I
+is\~0.
+.
+.TPx
+.BI ' s1 ' s2 '
+True if string\~\c
+.I s1
+is identical to string\~\c
+.IR s2 .
+.
+.TPx
+.BI !' s1 ' s2 '
+True if string\~\c
+.I s1
+is not identical to string\~\c
+.IR s2 .
+.
+.TPx
+.BI c ch
+True if there is a character\~\c
+.I ch
+available.
+.
+.TPx
+.BI d name
+True if there is a string, macro, diversion, or request called
+.IR name .
+.
+.TPx
+.B e
+Current page number is even.
+.
+.TPx
+.B o
+Current page number is odd.
+.
+.TPx
+.BI m name
+True if there is a color called
+.IR name .
+.
+.TPx
+.B n
+Formatter is
+.BR nroff .
+.
+.TPx
+.BI r reg
+True if there is a register named
+.IR reg .
+.
+.TPx
+.B t
+Formatter is
+.BR troff .
+.
+.RE
+.PD
+.
.
.\" --------------------------------------------------------------------
.SH REQUESTS
.\" --------------------------------------------------------------------
+.
This section provides a short reference for the predefined requests.
+.
In groff, request and macro names can be arbitrarily long.
+.
No bracketing or marking of long names is needed.
-.LP
+.
+.P
Most requests take one or more arguments.
-The arguments are separated by space characters (no tabs!); there is no
-inherent limit for their length or number.
-An argument can be enclosed by a pair of double quotes: This is very handy
-if an argument contains space characters, e.g.,
-.argument "\(dqarg\ with\ space\(dq"
+.
+The arguments are separated by space characters (no tabs!); there is
+no inherent limit for their length or number.
+.
+An argument can be enclosed by a pair of double quotes.
+.
+This is very handy if an argument contains space characters, e.g.,
+.RI \[dq] "arg with space" \[dq]
denotes a single argument.
-.LP
+.
+.P
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.
+.
+Refer to the groff info file and
+.BR groff_diff (@MAN7EXT@)
+for all details.
+.
+.P
+In the following request specifications, most argument names were
+chosen to be descriptive.
+.
Only the following denotations need clarification.
-.LP
-.na
-.nh
-.TS
-center, tab(@);
-LfCI Lw(4i).
-c@denotes a single character.
-font@T{
+.
+.P
+.PD 0
+.RS
+.
+.TPx
+.I c
+denotes a single character.
+.
+.TPx
+.I font
a font either specified as a font name or a font number.
-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{
+.
+.TPx
+.I anything
+all characters up to the end of the line or within
+.esc {
+and
+.esc } .
+.
+.TPx
+.I n
is a numerical expression that evaluates to an integer value.
-T}
-N@T{
+.
+.TPx
+.I N
is an arbitrary numerical expression, signed or unsigned.
-T}
-\(+-N@T{
+.
+.TPx
+.I \[+-]N
has three meanings depending on its sign, described below.
-T}
-.TE
-.LP
-.ad
-.hy
+.
+.RE
+.PD
+.
+.P
If an expression defined as
-.argument \(+-N
+.I \[+-]N
starts with a
-.operator +
+.squoted_char +
sign the resulting value of the expression will be added to an already
-existing value inherent to the related request, e.g. adding to a number
+existing value inherent to the related request, e.g.\& adding to a number
register.
+.
If the expression starts with a
-.operator -
+.squoted_char -
the value of the expression will be subtracted from the request value.
-.LP
+.
+.P
Without a sign,
-.argument N
+.I N
replaces the existing value directly.
-To assign a negative number either prepend\ \c
-.number 0
-or enclose the negative number in parentheses.
+.
+To assign a negative number either prepend\~0 or enclose the negative
+number in parentheses.
+.
.
.\" --------------------------------------------------------------------
-.SS "REQUEST SHORT REFERENCE"
+.SS "Request Short Reference"
.\" --------------------------------------------------------------------
+.
.PD 0
.
.REQ .
-Empty line, ignored. Useful for structuring documents.
+Empty line, ignored.
.
-.REQ .\(rs\(dq anything
+Useful for structuring documents.
+.
+.REQ .\[rs]\[dq] anything
Complete line is a comment.
.
.REQ .ab string
Print
-.argument string
+.I string
on standard error, exit program.
.
.REQ .ad
@@ -832,38 +1133,53 @@ 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).
+.I c
+(\f[CI]c\f[]\f[CR]\|\^\[eq]\|l,r,b,n\f[]).
.
.REQ .af register c
Assign format
-.argument c
+.I c
to
-.argument register
-(\f(CIc\fP\f(CR\|\^\(eq\|l,i,I,a,A\fP).
+.I register
+(\f[CI]c\f[]\f[CR]\|\^\[eq]\|l,i,I,a,A\f[]).
.
.REQ .aln alias register
Create alias name for
-.argument register .
+.IR register .
.
.REQ .als alias object
Create alias name for request, string, macro, or diversion
-.argument object .
+.IR object .
.
.REQ .am macro
Append to
-.argument macro
+.I macro
until
-.request ..
-is called.
+.B ..\&
+is encountered.
.
.REQ .am macro end
Append to
-.argument macro
+.I macro
until
.request .end
is called.
.
+.REQ .ami macro
+Append to a macro whose name is contained in the string register
+.I macro
+until
+.B ..\&
+is encountered.
+.
+.REQ .ami macro end
+Append to a macro indirectly.
+.I macro
+and
+.I end
+are string registers whose contents are interpolated for the macro name
+and the end macro, respectively.
+.
.REQ .am1 macro
Same as
.request .am
@@ -876,43 +1192,48 @@ but with compatibility mode switched off during macro expansion.
.
.REQ .as stringvar anything
Append
-.argument anything
+.I anything
to
-.argument stringvar .
+.IR stringvar .
.
.REQ .asciify diversion
Unformat ASCII characters, spaces, and some escape sequences in
-.argument diversion .
+.IR diversion .
+.
+.REQ .as1 stringvar anything
+Same as
+.request .as
+but with compatibility mode switched off during string expansion.
.
.REQ .backtrace
Print a backtrace of the input on stderr.
.
.REQ .bd font N
Embolden
-.argument font
+.I font
by
-.argterm N -1
+.IR N -1
units.
.
.REQ .bd S font N
Embolden Special Font
-.argument S
+.I S
when current font is
-.argument font .
+.IR font .
.
.REQ .blm
Unset the blank line macro.
.
.REQ .blm macro
Set the blank line macro to
-.argument macro .
+.IR macro .
.
.REQ .box
End current diversion.
.
.REQ .box macro
Divert to
-.argument macro ,
+.IR macro ,
omitting a partially filled line.
.
.REQ .boxa
@@ -920,15 +1241,15 @@ End current diversion.
.
.REQ .boxa macro
Divert and append to
-.argument macro ,
+.IR macro ,
omitting a partially filled line.
.
.REQ .bp
Eject current page and begin new page.
.
-.REQ .bp \(+-N
+.REQ .bp \[+-]N
Eject current page; next page number
-.argument \(+-N .
+.IR \[+-]N .
.
.REQ .br
Line break.
@@ -943,62 +1264,70 @@ Break out of a while loop.
.
.REQ .c2
Reset no-break control character to
-.''char ' .
+.dquoted_char ' .
.
.REQ .c2 c
Set no-break control character to
-.argument c .
+.IR c .
.
.REQ .cc
Reset control character to
-.'char . .
+.squoted_char . .
.
.REQ .cc c
Set control character to
-.argument c .
+.IR c .
.
.REQ .ce
Center the next input line.
.
.REQ .ce N
Center following
-.argument N
+.I N
input lines.
.
.REQ .cf filename
Copy contents of file
-.argument filename
+.I filename
unprocessed to stdout or to the diversion.
.
-.REQ .cflags mode c1 c2 ...
+.REQ .cflags mode c1 c2 .\|.\|.\&
Treat characters
-.argument c1 ,
-.argument c2 ,
-.argument ...
+.IR c1 ,
+.IR c2 ,
+.I .\|.\|.\&
according to
-.argument mode
+.I mode
number.
.
.REQ .ch trap N
Change
-.argument trap
+.I trap
location
to
-.argument N .
+.I N .
.
.REQ .char c anything
Define character
-.argument c
-to string
-.argument anything .
+.I c
+as string
+.IR anything .
.
.REQ .chop object
Chop the last character off macro, string, or diversion
-.argument object .
+.IR object .
.
.REQ .close stream
Close the
-.argument stream .
+.IR stream .
+.
+.REQ .color
+Enable colors.
+.
+.REQ .color N
+If
+.I N
+is zero disable colors, otherwise enable them.
.
.REQ .continue
Finish the current iteration of a while loop.
@@ -1013,11 +1342,11 @@ is zero disable compatibility mode, otherwise enable it.
.
.REQ .cs font N M
Set constant character width mode for
-.argument font
+.I font
to
-.argterm N /36
+.IR N /36
ems with em
-.argument M .
+.IR M .
.
.REQ .cu N
Continuous underline in nroff, like
@@ -1029,18 +1358,18 @@ End current diversion.
.
.REQ .da macro
Divert and append to
-.argument macro .
+.IR macro .
.
.REQ .de macro
Define or redefine
-.argument macro
+.I macro
until
-.request ..
-is called.
+.B ..\&
+is encountered.
.
.REQ .de macro end
Define or redefine
-.argument macro
+.I macro
until
.request .end
is called.
@@ -1055,18 +1384,41 @@ Same as
.request .de
but with compatibility mode switched off during macro expansion.
.
+.REQ .defcolor color scheme component
+Define or redefine a color with name
+.IR color .
+.I scheme
+can be
+.BR rgb ,
+.BR cym ,
+.BR cymk ,
+.BR gray ,
+or
+.BR grey .
+.I component
+can be single components specified as fractions in the range 0 to 1
+(default scaling indicator\~\c
+.scaleindicator f ),
+as a string of two-digit hexadecimal color components with a leading
+.BR # ,
+or as a string of four-digit hexadecimal components with two leading
+.BR # .
+The color
+.B default
+can't be redefined.
+.
.REQ .dei macro
Define or redefine a macro whose name is contained in the string register
-.argument macro
+.I macro
until
-.request ..
-is called.
+.B ..\&
+is encountered.
.
.REQ .dei macro end
Define or redefine a macro indirectly.
-.argument macro
+.I macro
and
-.argument end
+.I end
are string registers whose contents are interpolated for the macro name
and the end macro, respectively.
.
@@ -1075,7 +1427,7 @@ End current diversion.
.
.REQ .di macro
Divert to
-.argument macro .
+.I macro .
.
.REQ .do name
Interpret
@@ -1084,23 +1436,28 @@ with compatibility mode disabled.
.
.REQ .ds stringvar anything
Set
-.argument stringvar
+.I stringvar
to
-.argument anything .
+.IR anything .
+.
+.REQ .ds1 stringvar anything
+Same as
+.request .ds
+but with compatibility mode switched off during string expansion.
.
.REQ .dt N trap
Set diversion trap to position
-.argument N
-(default scale indicator\ \c
+.I N
+(default scaling indicator\~\c
.scaleindicator v ).
.
.REQ .ec
Reset escape character to
-.'char \(rs .
+.squoted_char \[rs] .
.
.REQ .ec c
Set escape character to
-.argument c .
+.IR c .
.
.REQ .ecr
Restore escape character saved with
@@ -1111,12 +1468,12 @@ Save current escape character.
.
.REQ .el anything
Else part for if-else (\c
-.argument .ie )
+.request ie )
request.
.
.REQ .em macro
The
-.argument macro
+.I macro
will be run after the end of input.
.
.REQ .eo
@@ -1127,12 +1484,12 @@ Switch to previous environment.
.
.REQ .ev env
Push down environment number or name
-.argument env
+.I env
and switch to it.
.
.REQ .evc env
Copy the contents of environment
-.argument env
+.I env
to the current environment.
No pushing or popping.
.
@@ -1144,20 +1501,27 @@ Return to previous font family.
.
.REQ .fam name
Set the current font family to
-.argument name .
+.IR name .
.
.REQ .fc
Disable field mechanism.
.
.REQ .fc a
Set field delimiter to
-.argument a
+.I a
and pad character to space.
+.
.REQ .fc a b
Set field delimiter to
-.argument a
+.I a
and pad character to
-.argument b .
+.IR b .
+.
+.REQ .fchar c anything
+Define fallback character
+.I c
+as string
+.IR anything .
.
.REQ .fi
Fill output lines.
@@ -1167,112 +1531,123 @@ Flush output buffer.
.
.REQ .fp n font
Mount
-.argument font
+.I font
on position
-.argument n .
+.IR n .
.
.REQ .fp n internal external
Mount font with long
-.argument external
+.I external
name to short
-.argument internal
+.I internal
name on position
-.argument n .
+.IR n .
.
-.REQ .fspecial font s1 s2...
+.REQ .fspecial font s1 s2 .\|.\|.\&
When the current font is
-.argument font ,
+.IR font ,
then the fonts
-.argument s1 ,
-.argument s2 ,
-.argument ...
+.IR s1 ,
+.IR s2 ,
+.I .\|.\|.\&
will be special.
.
.REQ .ft
Return to previous font.
Same as
-.request \(rsfP .
+.request \[rs]f[]
+or
+.request \[rs]fP .
+.
.REQ .ft font
Change to font name or number
-.argument font ;
+.IR font ;
same as
-.esc[arg] f font
+.esc[] f font
escape sequence.
.
.REQ .ftr font1 font2
Translate
-.argument font1
+.I font1
to
-.argument font2 .
+.IR font2 .
.
.REQ .hc
Remove additional hyphenation indicator character.
.
.REQ .hc c
-Set up additional hyphenation indicator character\ \c
-.argument c .
+Set up additional hyphenation indicator character\~\c
+.IR c .
.
-.REQ .hcode c1 code1 c2 code2 ...
+.REQ .hcode c1 code1 c2 code2 .\|.\|.\&
Set the hyphenation code of character
-.argument c1
+.I c1
to
-.argument code1 ,
+.IR code1 ,
that of
-.argument c2
+.I c2
to
-.argument code2 ,
+.IR code2 ,
etc.
.
.REQ .hla lang
Set the current hyphenation language to
-.argument lang .
+.IR lang .
.
.REQ .hlm n
Set the maximum number of consecutive hyphenated lines to
-.argument n .
+.IR n .
.
.REQ .hpf file
Read hyphenation patterns from
-.argument file .
+.IR file .
+.
+.REQ .hpfa file
+Append hyphenation patterns from
+.IR file .
+.
+.REQ .hpfcode file
+Set input mapping for
+.request .hpf .
.
.REQ .hw words
List of
-.argument words
+.I words
with exceptional hyphenation.
.
.REQ .hy N
Switch to hyphenation mode
-.argument N .
+.IR N .
.
.REQ .hym n
Set the hyphenation margin to
-.argument n
-(default scale indicator\ \c
+.I n
+(default scaling indicator\~\c
.scaleindicator m ).
.
.REQ .hys n
Set the hyphenation space to
-.argument n .
+.IR n .
.
.REQ .ie cond anything
If
-.argument cond
+.I cond
then
-.argument anything
+.I anything
else goto
.request .el .
.
.REQ .if cond anything
If
-.argument cond
+.I cond
then
-.argument anything ;
+.IR anything ;
otherwise do nothing.
.
.REQ .ig
Ignore text until
-.request ..
-is called.
+.B ..\&
+is encountered.
.
.REQ .ig end
Ignore text until
@@ -1281,36 +1656,44 @@ Ignore text until
.REQ .in
Change to previous indent value.
.
-.REQ .in \(+-N
+.REQ .in \[+-]N
Change indent according to
-.argument \(+-N
-(default scale indicator\ \c
+.I \[+-]N
+(default scaling indicator\~\c
.scaleindicator m ).
.
.REQ .it N trap
-Set an input-line count trap at position
-.argument N .
+Set an input-line count trap for the next
+.I N
+lines.
+.
+.REQ .itc N trap
+Same as
+.request .it
+but count lines interrupted with
+.esc c
+as one line.
.
.REQ .kern
Enable pairwise kerning.
.
.REQ .kern n
If
-.argument n
+.I n
is zero, disable pairwise kerning, otherwise enable it.
.
.REQ .lc
Remove leader repetition character.
.
.REQ .lc c
-Set leader repetition character to\ \c
-.argument c .
+Set leader repetition character to\~\c
+.IR c .
.
.REQ .length register anything
Write the length of the string
-.argument anything
+.I anything
in
-.argument register .
+.IR register .
.
.REQ .linetabs
Enable line-tabs mode (i.e., calculate tab positions relative to output
@@ -1318,28 +1701,28 @@ line).
.
.REQ .linetabs n
If
-.argument n
+.I n
is zero, disable line-tabs mode, otherwise enable it.
.
.REQ .lf N file
Set input line number to
-.argument N
+.I N
and filename to
-.argument file .
+.IR file .
.
.REQ .lg N
Ligature mode on if
-.argterm N >0 .
+.IR N >0.
.
.REQ .ll
Change to previous line length.
.
-.REQ .ll \(+-N
+.REQ .ll \[+-]N
Set line length according to
-.argument \(+-N
+.I \[+-]N
(default size
.scalednumber 6.5 i ,
-default scale indicator\ \c
+default scaling indicator\~\c
.scaleindicator m ).
.
.REQ .ls
@@ -1347,13 +1730,13 @@ Change to the previous value of additional intra-line skip.
.
.REQ .ls N
Set additional intra-line skip value to
-.argument N ,
+.IR N ,
i.e.,
-.argterm N -1
+.IR N -1
blank lines are inserted after each text output line.
.
-.REQ .lt \(+-N
-Length of title (default scale indicator\ \c
+.REQ .lt \[+-]N
+Length of title (default scaling indicator\~\c
.scaleindicator m ).
.
.REQ .mc
@@ -1361,20 +1744,20 @@ Margin character off.
.
.REQ .mc c
Print character
-.argument c
+.I c
after each text line at actual distance from right margin.
.
.REQ .mc c N
Set margin character to
-.argument c
+.I c
and distance to
-.argument N
-from right margin (default scale indicator\ \c
+.I N
+from right margin (default scaling indicator\~\c
.scaleindicator m ).
.
.REQ .mk register
Mark current vertical position in
-.argument register .
+.IR register .
.
.REQ .mso file
The same as the .so request except that
@@ -1389,8 +1772,8 @@ Need a one-line vertical space.
.
.REQ .ne N
Need
-.argument N
-vertical space (default scale indicator\ \c
+.I N
+vertical space (default scaling indicator\~\c
.scaleindicator v ).
.
.REQ .nf
@@ -1402,7 +1785,7 @@ No hyphenation.
.REQ .nm
Number mode off.
.
-.REQ .nm \(+-N M S I
+.REQ .nm \[+-]N \fR[\fPM \fR[\fPS \fR[\fPI\fR]]]\fP
In line number mode, set number, multiple, spacing, and indent.
.
.REQ .nn
@@ -1410,20 +1793,20 @@ Do not number next line.
.
.REQ .nn N
Do not number next
-.argument N
+.I N
lines.
.
.REQ .nop anything
Always execute
-.argument anything .
+.IR anything .
.
-.REQ .nr register \(+-N M
+.REQ .nr register \[+-]N M
Define or modify
-.argument register
+.I register
using
-.argument \(+-N
+.I \[+-]N
with auto-increment
-.argument M .
+.IR M .
.
.REQ .nroff
Make the built-in condition
@@ -1435,6 +1818,9 @@ false.
.REQ .ns
Turn no-space mode on.
.
+.REQ .nx
+Immediately jump to end of current file.
+.
.REQ .nx filename
Next file.
.
@@ -1452,19 +1838,28 @@ but append to it.
.
.REQ .os
Output vertical distance that was saved by the
-.request .sv
+.request sv
request.
.
+.REQ .output string
+Emit
+.I string
+directly to intermediate output, allowing leading whitespace if
+.I string
+starts with
+.character \[dq]
+(which will be stripped off).
+.
.REQ .pc
-Reset page number character to\ \c
-.'char % .
+Reset page number character to\~\c
+.squoted_char % .
.
.REQ .pc c
Page number character.
.
.REQ .pi program
Pipe output to
-.argument program
+.I program
(nroff only).
.
.REQ .pl
@@ -1473,10 +1868,10 @@ Set page length to default
The current page length is stored in
.register .p .
.
-.REQ .pl \(+-N
+.REQ .pl \[+-]N
Change page length to
-.argument \(+-N
-(default scale indicator\ \c
+.I \[+-]N
+(default scaling indicator\~\c
.scaleindicator v ).
.
.REQ .pm
@@ -1485,47 +1880,58 @@ 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
+.REQ .pn \[+-]N
Next page number
-.argument N .
+.IR N .
.
.REQ .pnr
Print the names and contents of all currently defined number registers
on stderr.
.
.REQ .po
-Change to previous page offset. The current page offset is available in
+Change to previous page offset.
+.
+The current page offset is available in
.register .o .
.
-.REQ .po \(+-N
+.REQ .po \[+-]N
Page offset
-.argument N .
+.IR N .
.
.REQ .ps
Return to previous point-size.
-.REQ .ps \(+-N
+.REQ .ps \[+-]N
Point size; same as
-.esc[arg] s \(+-N .
+.esc[] s \[+-]N .
.
.REQ .psbb filename
Get the bounding box of a PostScript image
-.argument filename .
+.IR filename .
.
.REQ .pso command
This behaves like the
-.request .so
+.request so
request except that input comes from the standard output of
-.argument command .
+.IR 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...
+.REQ .pvs
+Change to previous post-vertical line spacing.
+.
+.REQ .pvs \[+-]N
+Change post-vertical line spacing according to
+.I \[+-]N
+(default scaling indicator\~\c
+.scaleindicator p ).
+.
+.REQ .rchar c1 c2 .\|.\|.\&
Remove the definitions of characters
-.argument c1 ,
-.argument c2 ,
-.argument ...
+.IR c1 ,
+.IR c2 ,
+.I .\|.\|.\&
.
.REQ .rd prompt
Read insertion.
@@ -1535,36 +1941,36 @@ Return from a macro.
.
.REQ .rj n
Right justify the next
-.argument n
+.I n
input lines.
.
.REQ .rm name
Remove request, macro, or string
-.argument name .
+.IR name .
.
.REQ .rn old new
Rename request, macro, or string
-.argument old
+.I old
to
-.argument new .
+.IR new .
.
.REQ .rnn reg1 reg2
Rename register
-.argument reg1
+.I reg1
to
-.argument reg2 .
+.IR reg2 .
.
.REQ .rr register
Remove
-.argument register .
+.IR register .
.
.REQ .rs
Restore spacing; turn no-space mode off.
.
-.REQ .rt \(+-N
+.REQ .rt \[+-]N
Return
.I (upward only)
-to marked vertical place (default scale indicator\ \c
+to marked vertical place (default scaling indicator\~\c
.scaleindicator v ).
.
.REQ .shc
@@ -1573,13 +1979,20 @@ Reset soft hyphen character to
.
.REQ .shc c
Set the soft hyphen character to
-.argument c .
+.IR c .
.
.REQ .shift n
In a macro, shift the arguments by
-.argument n \ \c
+.IR n \~\c
positions.
.
+.REQ .sizes s1 s2 .\|.\|.\& sn \fB[0]\fP
+Set available font sizes similar to the
+.B sizes
+command in a
+.B DESC
+file.
+.
.REQ .so filename
Include source file.
.
@@ -1588,43 +2001,53 @@ Skip one line vertically.
.
.REQ .sp N
Space vertical distance
-.argument N
+.I N
up or down according to sign of
-.argument N
-(default scaling indicator\ \c
+.I N
+(default scaling indicator\~\c
.scaleindicator v ).
.
-.REQ .special s1 s2 ...
+.REQ .special s1 s2 .\|.\|.\&
Fonts
-.argument s1 ,
-.argument s2 ,
-etc. are special and will be searched for characters not in the current font.
+.IR s1 ,
+.IR s2 ,
+etc.\& are special and will be searched for characters not in the
+current font.
+.
+.REQ .spreadwarn
+Toggle the spread warning on and off without changing its value.
+.
+.REQ .spreadwarn limit
+Emit a warning if each space in an output line is widened by
+.I limit
+or more (default scaling indicator\~\c
+.scaleindicator m ).
.
.REQ .ss N
Space-character size set to
-.argument N /12
+.IR N /12
of the spacewidth in the current font.
.
.REQ .ss N M
Space-character size set to
-.argterm N /12
+.IR N /12
and sentence space size set to
-.argterm M /12
-of the spacewidth in the current font (\f(CR\(eq1/3 em\fP).
+.IR M /12
+of the spacewidth in the current font (\f[CR]\[eq]1/3 em\f[]).
.
.REQ .sty n style
Associate
-.argument style
+.I style
with font position
-.argument n .
+.IR n .
.
-.REQ .substring register n1 n2
-Replace the string in
-.argument register
+.REQ .substring xx n1 n2
+Replace the string named
+.I xx
with the substring defined by the indices
-.argument n1
+.I n1
and
-.argument n2 .
+.IR n2 .
.
.REQ .sv
Save
@@ -1633,36 +2056,36 @@ of vertical space.
.
.REQ .sv N
Save the vertical distance
-.argument N
+.I N
for later output with
-.request .os
+.request os
request.
.
.REQ .sy command-line
Execute program
-.argument command-line .
+.IR command-line .
.
.REQ ".ta T" N
Set tabs after every position that is a multiple of
-.argument N
-(default scaling indicator\ \c
+.I N
+(default scaling indicator\~\c
.scaleindicator m ).
-.REQ .ta n1 n2 ... nn \f(CBT\fP r1 r2 ... rn
+.REQ .ta n1 n2 .\|.\|.\& nn \f[CB]T\f[] r1 r2 .\|.\|.\& rn
Set tabs at positions
-.argument n1 ,
-.argument n2 ,
-\&...,
-.argument nn ,
+.IR n1 ,
+.IR n2 ,
+.Text .\|.\|.,
+.IR nn ,
then set tabs at
-.argument nn + r1 ,
-.argument nn + r2 ,
-\&...,
-.argument nn + rn ,
+.IR nn + r1 ,
+.IR nn + r2 ,
+.Text .\|.\|.,
+.IR nn + rn ,
then at
-.argument nn + rn + r1 ,
-.argument nn + rn + r2 ,
-\&...,
-.argument nn + rn + rn ,
+.IR nn + rn + r1 ,
+.IR nn + rn + r2 ,
+.Text .\|.\|.,
+.IR nn + rn + rn ,
and so on.
.
.\".REQ .tar
@@ -1674,32 +2097,33 @@ and so on.
.REQ .tc
Remove tab repition character.
.REQ .tc c
-Set tab repetition character to\ \c
-.argument c .
+Set tab repetition character to\~\c
+.IR c .
.
-.REQ .ti \(+-N
-Temporary indent next line (default scaling indicator\ \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 .
+.IR font .
.
-.REQ .tl \f(CB\(cq\fPleft\f(CB\(cq\fPcenter\f(CB\(cq\fPright\f(CB\(cq\fP
+.REQ .tl \f[CB]\[cq]\f[]left\f[CB]\[cq]\f[]center\f[CB]\[cq]\f[]right\f[CB]\[cq]\f[]
Three-part title.
.
.REQ .tm anything
Print
-.argument anything
+.I anything
on terminal (UNIX standard message output).
.
.REQ .tm1 anything
Print
-.argument anything
-on terminal (UNIX standard message output), allowing leading whitespace if
-.argument anything
+.I anything
+on terminal (UNIX standard message output), allowing leading
+whitespace if
+.I anything
starts with
-.character \(dq
+.character \[dq]
(which will be stripped off).
.
.REQ .tmc anything
@@ -1707,23 +2131,31 @@ Similar to
.request .tm1
without emitting a final newline.
.
-.REQ .tr abcd....
+.REQ .tr abcd.\|.\|.\&
Translate
-.argument a
+.I a
to
-.argument b ,
-.argument c
+.IR b ,
+.I c
to
-.argument d ,
-etc. on output.
+.IR d ,
+etc.\& on output.
.
.REQ .trf filename
Transparently output the contents of file
-.argument filename .
+.IR filename .
+.
+.REQ .trin abcd.\|.\|.\&
+This is the same as the
+.request tr
+request except that the
+.B asciify
+request will use the character code (if any) before the character
+translation.
.
-.REQ .trnt abcd....
+.REQ .trnt abcd.\|.\|.\&
This is the same as the
-.request .tr
+.request tr
request except that the translations do not apply to text that is
transparently throughput into a diversion with
.esc ! .
@@ -1737,63 +2169,88 @@ false.
.
.REQ .uf font
Underline font set to
-.argument font
+.I font
(to be switched to by
.request .ul ).
.
.REQ .ul N
Underline (italicize in troff)
-.argument N
+.I N
input lines.
.
.REQ .unformat diversion
Unformat space characters and tabs, preserving font information in
-.argument diversion .
+.IR diversion .
.REQ .vpt n
Enable vertical position traps if
-.argument n
+.I n
is non-zero, disable them otherwise.
.
.REQ .vs
Change to previous vertical base line spacing.
.
-.REQ .vs N
-Set vertical base line spacing to
-.argument N .
+.REQ .vs \[+-]N
+Set vertical base line spacing according to
+.I \[+-]N
+(default scaling indicator\~\c
+.scaleindicator p ).
Default value is
.scalednumber 12 p .
.
.REQ .warn n
Set warnings code to
-.argument n .
+.IR n .
+.
+.REQ .warnscale si
+Set scaling indicator used in warnings to
+.IR si .
+.
+.REQ .wh N
+Remove (first) trap at position
+.IR N .
.
.REQ .wh N trap
Set location trap; negative means from page bottom.
.
.REQ .while cond anything
While condition
-.argument cond
+.I cond
is true, accept
-.argument anything
+.I anything
as input.
.
.REQ .write stream anything
Write
-.argument anything
+.I anything
+to the stream named
+.IR stream .
+.
+.REQ .writec stream anything
+Similar to
+.request .write
+without emitting a final newline.
+.
+.REQ .writem stream xx
+Write contents of macro or string
+.I xx
to the stream named
-.argument stream .
+.IR stream .
.
.PD
-.LP
+.
+.P
Besides these standard groff requests, there might be further macro
calls.
They can originate from a macro package (see
.BR roff (@MAN7EXT@)
for an overview) or from a preprocessor.
-.LP
-Preprocessor macros are easy to be recognized. They enclose their code
-into a pair of characteristic macros.
-.LP
+.
+.P
+Preprocessor macros are easy to be recognized.
+.
+They enclose their code into a pair of characteristic macros.
+.
+.P
.TS
box, center, tab (@);
c | c | c
@@ -1805,138 +2262,163 @@ grap@.G1@.G2
grn@.GS@.GE
pic@.PS@.PE
refer@.R1@.R2
-soelim@\fInone@\fInone
+soelim@\f[I]none@\f[I]none
tbl@.TS@.TE
.TE
-.LP
+.P
+.
.
.\" --------------------------------------------------------------------
.SH "ESCAPE SEQUENCES"
.\" --------------------------------------------------------------------
.
-Escape sequences are in-line language elements usually introduced by
-a backslash
-.'char \(rs
+Escape sequences are in-line language elements usually introduced by a
+backslash
+.squoted_char \[rs]
and followed by an escape name and sometimes by a required argument.
+.
Input processing is continued directly after the escaped character or
-the argument resp. without an intervening separation character.
-So there must be a way to determine the end of the escape name and the end
-of the argument.
-.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
+the argument resp.\& without an intervening separation character.
+.
+So there must be a way to determine the end of the escape name and the
+end of the argument.
+.
+.P
+This is done by enclosing names (escape name and arguments consisting
+of a variable name) by a pair of brackets
+.BI \[lB] name \[rB]
+and constant arguments (number expressions and characters) by
+apostrophes (ASCII 0x27) like
+.BI \[cq] constant \[cq] \f[R].
+.
+.P
There are abbreviations for short names.
-Two character escape names can be specified by an opening parenthesis like
-.esc( xy
+.
+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 [
+.squoted_char [
and
-.'char (
+.squoted_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( ""
+.esc c .
+.
+.P
+Constant arguments of length\~1 can omit the marker apostrophes, too,
+but there is no two-character analogue.
+.
+.P
+While 1-character escape sequences are mainly used for in-line
+functions and system related tasks, the 2-letter names following the
+.esc (
construct are used for special characters predefined by the roff system.
-Names with more than two characters
-.esc[] name
-mostly denote user defined named characters (see the
-.request .char
+.
+Escapes sequences with names of more than two characters
+.esc[] "" name
+denote user defined named characters (see the
+.request char
request).
.
+.
.\" --------------------------------------------------------------------
-.SS "SINGLE CHARACTER ESCAPES"
+.SS "Single Character Escapes"
.\" --------------------------------------------------------------------
.
.PD 0
.
.\" --------- comments ---------
.
-.ESC \(dq
+.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.
+.esc \[dq]
+except that the terminating newline is ignored as well.
.
.\" --------- strings ---------
.
-.ESC * s
+.ESC *\f[I]s\f[]
The string stored in the string variable with 1-character name
-.argument s .
+.IR s .
.
-.ESC *( st
+.ESC *(\f[I]st\f[]
The string stored in the string variable with 2-character name
-.argument st .
+.IR st .
.
-.ESC[] * stringvar
+.ESC[] * "stringvar arg1 arg2 .\|.\|."
The string stored in the string variable with arbitrary length name
-.argument stringvar .
+.IR stringvar ,
+taking
+.IR arg1 ,
+.IR arg2 ,
+.I .\|.\|.\&
+as arguments.
.
.\" --------- macro arguments ---------
.
.ESC $0
-The name by which the current macro was invoked. The
-.request .als
+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 ,
+Macro or string argument with 1-place number
+.IR x ,
where
-.argument x
+.I x
is a digit between 1 and 9.
.
.ESC $( xy
-Macro argument with 2-digit number
-.argument xy .
+Macro or string argument with 2-digit number
+.IR xy .
.
.ESC[] $ nexp
-Macro argument with number
-.argument nexp ,
+Macro or string argument with number
+.IR nexp ,
where
-.argument nexp
-is a numerical expression evaluating to an integer \(>=1.
+.I nexp
+is a numerical expression evaluating to an integer \[>=]1.
.
.ESC $*
-In a macro, the concatenation of all the arguments separated by spaces.
+In a macro or string, 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.
+In a macro or string, the concatenation of all the arguments with each
+surrounded by double quotes, and separated by spaces.
.
.\" --------- escaped characters ---------
.
-.ESC \(rs
+.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 e ,
+or even better
+.esc [rs] ,
+to be independent from the current escape character.
.
-.ESC \(cq
-The acute accent \(aa; same as
-.esc( aa .
+.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 .
+The grave accent \[ga]; same as
+.esc (ga .
Unescaped: left quote, backquote (ASCII 0x60).
.
.ESC \-
@@ -1951,12 +2433,13 @@ Default optional hyphenation character.
.ESC !
Transparent line indicator.
.
-.ESC ? anything\fB?\fP
+.ESC? anything
In a diversion, this will transparently embed
-.argument anything
+.I anything
in the diversion.
-.argument anything
+.I anything
is read in copy mode.
+.
See also the escape sequences
.esc !
and
@@ -2006,7 +2489,7 @@ Inserts a zero-width break point (similar to
.esc %
but without a soft hyphen character).
.
-.ESC \& newline
+.ESC "" newline
Ignored newline, for continuation lines.
.
.\" --------- structuring ---------
@@ -2019,15 +2502,15 @@ End conditional input.
.
.\" --------- longer escape names ---------
.
-.ESC ( st
+.ESC ( sc
The special character with 2-character name
-.argument st ,
+.IR sc ,
see section
-.BR "SPECIAL CHARACTERS" .
+.BR "Special Characters" .
.
-.ESC[] \& name
+.ESC[] "" name
The named character with arbitrary length name
-.argument name .
+.IR name .
.
.\" --------- alphabetical escapes ---------
.
@@ -2036,34 +2519,27 @@ Non-interpreted leader character.
.
.ESCq A anything
If
-.argument anything
+.I anything
is acceptable as a name of a string, macro, diversion, register,
-environment or font it expands to
-.number 1 ,
-and
-.number 0
-otherwise.
+environment or font it expands to\~1, and to\~0 otherwise.
.
-.ESCq b abc...
+.ESCq b abc.\|.\|.\&
Bracket building function.
.
.ESCq B anything
If
-.argument anything
-is acceptable as a valid numeric expression it expands to
-.number 1 ,
-and
-.number 0
-otherwise.
+.I anything
+is acceptable as a valid numeric expression it expands to\~1, and
+to\~0 otherwise.
.
.ESC c
Interrupt text processing.
.
.ESCq C char
The character called
-.argument char ;
+.IR char ;
same as
-.esc[] char ,
+.esc[] "" char ,
but compatible to other roff versions.
.
.ESC d
@@ -2071,7 +2547,7 @@ 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 ;
+.IR charseq ;
see groff info file for details.
.
.ESC e
@@ -2082,114 +2558,174 @@ 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 .
+.IR F .
+.
+.ESC fP
+Switch back to previous font.
.
.ESC f( fo
-Change to font with 2-characer name or 2-digit number
-.argument fo .
+Change to font with 2-character name or 2-digit number
+.IR fo .
.
.ESC[] f font
Change to font with arbitrary length name or number expression
-.argument font .
+.IR font .
+.
+.ESC[] f ""
+Switch back to previous font.
+.
+.ESC F f
+Change to font family with 1-character name
+.IR f .
+.
+.ESC F( fm
+Change to font family with 2-character name
+.IR fm .
+.
+.ESC[] F fam
+Change to font family with arbitrary length name
+.IR fam .
+.
+.ESC[] F ""
+Switch back to previous font family.
.
.ESC[] g reg
Return format of register with name
-.argument reg
+.I reg
suitable for
.request .af .
+.
Alternative forms
-.esc(arg g xy
+.escarg g( xy
and
.escarg g x .
.
.ESCq h N
Local horizontal motion; move right
-.argument N
+.I N
(left if negative).
.
.ESCq H N
Set height of current font to
-.argument N .
+.IR N .
.
.ESC[] k reg
Mark horizontal input place in register with arbitrary length name
-.argument reg .
+.IR reg .
Alternative forms
-.esc(arg k xy
+.escarg k( xy
and
.escarg k x .
.
.ESCq l Nc
Horizontal line drawing function (optionally using character
-.argument c ).
+.IR c ).
.
.ESCq L Nc
Vertical line drawing function (optionally using character
-.argument c ).
+.IR c ).
+.
+.ESC[] m color
+Change to color
+.IR color .
+.
+Alternative forms
+.escarg m( co
+and
+.escarg m c .
+.
+.ESC[] m ""
+Switch back to previous color.
+.
+.ESC[] M color
+Change filling color for closed drawn objects to color
+.IR color .
+.
+Alternative forms
+.escarg M( co
+and
+.escarg M c .
+.
+.ESC[] M ""
+Switch to previous fill color.
.
.ESC n r
-The numerical value stored in the register variable with the 1-character
-name
-.argument r .
+The numerical value stored in the register variable with the
+1-character name
+.IR r .
.
.ESC n( re
-The numerical value stored in the register variable with the 2-character
-name
-.argument re .
+The numerical value stored in the register variable with the
+2-character name
+.IR re .
.
.ESC[] n reg
The numerical value stored in the register variable with arbitrary
-lenght name
-.argument reg .
+length name
+.IR 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
+.I n
+in the current font, no special fonts are searched.
+.
+Useful for adding characters to a font using the
+.request char
request.
.
-.ESCq o abc...
+.ESCq o abc.\|.\|.\&
Overstrike characters
-.argument a ,
-.argument b ,
-.argument c ,
+.IR a ,
+.IR b ,
+.IR c ,
etc.
.
+.ESC O 0
+Disable glyph output.
+.
+Mainly for internal use.
+.
+.ESC O 1
+Enable glyph output.
+.
+Mainly for internal use.
+.
.ESC p
Break and spread output line.
.
.ESC r
Reverse 1\ em vertical motion (reverse line in nroff).
.
-.ESCq R name \(+-n
+.ESCq R "name\~\[+-]n"
The same as
.request .nr
-.argument name
-.argument \(+-n .
+.I name
+.IR \[+-]n .
.
-.ESC[] s \(+-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
+scaled points.
+.
+Note the alternative forms
+.BI \[rs]s \[+-] [ N ]\c
,
-.escarg s \(+-x .
+.BI \[rs]s' \[+-]N '\c
+.Text ,
+.BI \[rs]s \[+-] ' N '\c
+.Text ,
+.escarg s( \[+-]xy\c
+.Text ,
+.BI \[rs]s \[+-] ( xy\c
+.Text ,
+.escarg s \[+-]x .
Same as
-.request .ps
+.request ps
request.
.
.ESCq S N
Slant output
-.argument N
+.I N
degrees.
.
.ESC t
@@ -2200,55 +2736,58 @@ Reverse (up) 1/2 em vertical motion (1/2 line in nroff).
.
.ESCq v N
Local vertical motion; move down
-.argument N
+.I N
(up if negative).
.
.ESC[] V env
The contents of the environment variable
-.argument env .
+.IR env .
+.
Alternative forms
-.esc(arg V xy
+.escarg V( xy
and
.escarg V x .
.
.ESCq w string
The width of the character sequence
-.argument string .
+.IR string .
.
.ESCq x N
Extra line-space function (negative before, positive after).
.
.ESCq X string
Output
-.argument string
+.I string
as device control function.
.
.ESC[] Y name
Output string variable or macro
-.argument name
+.I name
uninterpreted as device control function.
+.
Alternative forms
-.esc(arg Y xy
+.escarg Y( xy
and
.escarg Y x .
.
.ESC z c
Print
-.argument c
+.I c
with zero width (without spacing).
.
.ESCq Z anything
Print
-.argument anything
+.I anything
and then restore the horizontal and vertical position;
-.argument anything
+.I anything
may not contain tabs or leaders.
+.
.PD
-.LP
+.P
The escape sequences
.esc e ,
.esc . ,
-.esc \(dq ,
+.esc \[dq] ,
.esc $ ,
.esc * ,
.esc a ,
@@ -2258,669 +2797,643 @@ The escape sequences
and
.escarg \& newline
are interpreted in copy mode.
-.LP
+.
+.P
Escape sequences starting with
.esc (
or
.esc [
do not represent single character escape sequences, but introduce escape
names with two or more characters.
-.LP
+.
+.P
If a backslash is followed by a character that does not constitute a
defined escape sequence the backslash is silently ignored and the
character maps to itself.
.
+.
.\" --------------------------------------------------------------------
-.SS "SPECIAL CHARACTERS"
+.SS "Special Characters"
.\" --------------------------------------------------------------------
-Common special characters are predefined by escape sequences of the form
-.(esc \fP\f(CIxy
+.
+Common special characters are predefined by escape sequences of the
+form
+.BI \[rs]( xy
with characters
-.argument x
+.I x
and
-.argument y .
+.IR y .
+.
Some of these exist in the usual font while most of them are only
-available in the special font. Below you'll find a selection of the most
-important glyphs; a complete list can be found in
+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
+.P
.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
+.ESC (bu
+Bullet sign
+.ESC (co
+Copyright
+.ESC (ct
+Cent
+.ESC (dd
+Double dagger
+.ESC (de
+Degree
+.ESC (dg
+Dagger
+.ESC (rs
+Printable double quote
+.ESC (em
+Em-dash
+.ESC (hy
+Hyphen
+.ESC (rg
+Registered sign
+.ESC (rs
+Printable backslash character
+.ESC (sc
+Section sign
+.ESC (ul
+Underline character
+.ESC (==
+Identical
+.ESC (>=
+Larger or equal
+.ESC (<=
+Less or equal
+.ESC (!=
+Not equal
+.ESC (->
+Right arrow
+.ESC (<-
+Left arrow
+.ESC (+-
+Plus-minus sign
.PD
.RE
.
+.
+.\" --------------------------------------------------------------------
+.SS "Strings"
+.\" --------------------------------------------------------------------
+.
+Strings are defined by the
+.request ds
+request and can be retrieved by the
+.esc *
+escape sequence.
+.
+.P
+Strings share their name space with macros.
+.
+So strings and macros without arguments are roughly equivalent; it is
+possible to call a string like a macro and vice-versa, but this often
+leads to unpredictable results.
+.
+The following strings are predefined in groff.
+.
+.STRING .T
+The name of the current output device as specified by the
+.option -T
+command line option.
+.
+.
.\" --------------------------------------------------------------------
.SH REGISTERS
.\" --------------------------------------------------------------------
+.
Registers are variables that store a value.
In groff, most registers store numerical values (see section
.B NUMERICAL EXPRESSIONS
above), but some can also hold a string value.
-.LP
+.
+.P
Each register is given a name.
Arbitrary registers can be defined and set with the request
-.request .nr
-.argument register .
-.LP
+.request nr
+.IR register .
+.
+.P
The value stored in a register can be retrieved by the escape sequences
introduced by
.esc n .
-.LP
+.
+.P
Most useful are predefined registers.
+.
In the following the notation
-.argument name
+.I name
is used to refer to a register called
.register name
to make clear that we speak about registers.
+.
Please keep in mind that the
-.esc en[]
+.esc[] n ""
decoration is not part of the register name.
.
+.
.\" --------------------------------------------------------------------
-.SS "READ-ONLY REGISTERS"
+.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
+modified by the user (usually, registers starting with a dot a
+read-only).
+.
+Mostly, they provide information on the current settings or store
+results from request calls.
+.
+.P
.PD 0
-.REG .$ Number of arguments in the current macro.
+.
+.REG .$
+Number of arguments in the current macro or string.
+.
.REG .a
Post-line extra line-space most recently utilized using
-.escarg x 'N' .
+.escq x N .
+.
.REG .A
-Set to
-.number 1
-in
+Set to\~1 in
.B troff
if option
.B \-A
-is used; always
-.number 1
-in
+is used; always\~1 in
.BR nroff .
-.REG .c Current input line number.
-.REG .C 1 if compatibility mode is in effect, 0 otherwise.
+.
+.REG .c
+Current input line number.
+.
+.REG .C
+1\~if compatibility mode is in effect, 0\~otherwise.
+.
.REG .cdp
The depth of the last character added to the current environment.
It is positive if the character extends below the baseline.
+.
.REG .ce
The number of lines remaining to be centered, as set by the
-.request .ce
+.request ce
request.
+.
.REG .cht
The height of the last character added to the current environment.
It is positive if the character extends above the baseline.
+.
+.REG .color
+1\~if colors are enabled, 0\~otherwise.
+.
.REG .csk
The skew of the last character added to the current environment.
The skew of a character is how far to the right of the center of a character
the center of an accent over that character should be placed.
+.
.REG .d
Current vertical place in current diversion; equal to register
.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 .ev
+The name or number of the current environment (string-valued).
+.
+.REG .f
+Current font number.
+.
+.REG .fam
+The current font family (string-valued).
+.
+.REG .fn
+The current (internal) real font name (string-valued).
+.
+.REG .fp
+The number of the next free font position.
+.
.REG .g
Always 1 in GNU troff.
+.
Macros should use it to test if running under groff.
-.REG .h Text base-line high-water mark on current page or diversion.
-.REG .H Available horizontal resolution in basic units.
+.
+.REG .h
+Text base-line high-water mark on current page or diversion.
+.
+.REG .H
+Available horizontal resolution in basic units.
+.
.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 hlm
request.
+.
.REG .hy
The current hyphenation flags (as set by the
-.request .hy
+.request hy
request).
+.
.REG .hym
The current hyphenation margin (as set by the
-.request .hym
+.request hym
request).
+.
.REG .hys
The current hyphenation space (as set by the
-.request .hys
+.request hys
request).
-.REG .i Current ident.
-.REG .in The indent that applies to the current output line.
+.
+.REG .i
+Current ident.
+.
+.REG .in
+The indent that applies to the current output line.
+.
.REG .int
Positive if last output line contains
.esc c .
+.
.REG .kern
-.number 1
-if pairwise kerning is enabled,
-.number 0
-otherwise.
-.REG .l Current line length.
+1\~if pairwise kerning is enabled, 0\~otherwise.
+.
+.REG .l
+Current line length.
+.
.REG .lg
The current ligature mode (as set by the
-.request .lg
+.request lg
request).
+.
.REG .linetabs
The current line-tabs mode (as set by the
-.request .linetabs
+.request linetabs
request).
-.REG .ll The line length that applies to the current output line.
+.
+.REG .ll
+The line length that applies to the current output line.
+.
.REG .lt
The title length (as set by the
-.request .lt
+.request lt
request).
-.REG .n Length of text portion on previous output line.
+.
+.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 ne
request that caused a trap to be sprung.
+.
Useful in conjunction with
.register .trunc .
+.
.REG .ns
-.number 1
-if in no-space mode,
-.number 0
-otherwise.
-.REG .o Current page offset.
-.REG .p Current page length.
+1\~if in no-space mode, 0\~otherwise.
+.
+.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 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 .ps
+The current pointsize in scaled points.
+.
+.REG .psr
+The last-requested pointsize in scaled points.
+.
+.REG .pvs
+The current post-vertical line spacing.
+.
.REG .rj
The number of lines to be right-justified as set by the rj request.
-.REG .s Current point size as a decimal fraction.
+.
+.REG .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 .t
+Distance to the next trap.
+.
.REG .T
-Set to
-.number 1
+Set to\~1
if option
.B \-T
is used.
+.
.REG .tabs
-A string representation of the current tab settings suitable for use as
-an argument to the
-.request .ta
+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 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.
+.
+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 ss
request.
+.
.REG .sss
The value of the parameters set by the second argument of the
-.request .ss
+.request ss
request.
-.REG .u Equal to 1 bin fill mode and 0 in nofill mode.
-.REG .v Current vertical line spacing.
-.REG .V Available vertical resolution in basic units.
+.
+.REG .u
+Equal to 1 bin fill mode and 0 in nofill mode.
+.
+.REG .v
+Current vertical line spacing.
+.
+.REG .V
+Available vertical resolution in basic units.
+.
.REG .vpt
-.number 1
-if vertical position traps are enabled,
-.number 0
-otherwise.
-.REG .w Width of previous character.
+1\~ if vertical position traps are enabled, 0\~otherwise.
+.
+.REG .w
+Width of previous character.
+.
.REG .warn
The sum of the number codes of the currently enabled warnings.
-.REG .x The major version number.
-.REG .y The minor version number.
-.REG .Y The revision number of groff.
-.REG .z Name of current diversion.
+.
+.REG .x
+The major version number.
+.
+.REG .y
+The minor version number.
+.
+.REG .Y
+The revision number of groff.
+.
+.REG .z
+Name of current diversion.
.PD
.
+.
.\" --------------------------------------------------------------------
-.SS "WRITABLE REGISTERS"
+.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
+.
+.P
.PD 0
-.REG % Current page number.
-.REG c. Current input line number.
-.REG ct Character type (set by width function
+.REG %
+Current page number.
+.
+.REG c.
+Current input line number.
+.
+.REG ct
+Character type (set by width function
.esc w ).
-.REG dl Maximal width of last completed diversion.
-.REG dn Height of last completed diversion.
-.REG dw Current day of week (1-7).
-.REG dy Current day of month (1-31).
-.REG hp Current horizontal position at input line.
+.
+.REG dl
+Maximal width of last completed diversion.
+.
+.REG dn
+Height of last completed diversion.
+.
+.REG dw
+Current day of week (1-7).
+.
+.REG dy
+Current day of month (1-31).
+.
+.REG hours
+The number of hours past midnight.
+.
+Initialized at start-up.
+.
+.REG hp
+Current horizontal position at input line.
+.
.REG llx
Lower left x-coordinate (in PostScript units) of a given PostScript
image (set by
.request .psbb ).
+.
.REG lly
Lower left y-coordinate (in PostScript units) of a given PostScript
image (set by
.request .psbb ).
-.REG ln Output line number.
-.REG mo Current month (1-12).
-.REG nl Vertical position of last printed text base-line.
-.REG rsb Like
+.
+.REG ln
+Output line number.
+.
+.REG minutes
+The number of minutes after the hour.
+.
+Initialized at start-up.
+.
+.REG mo
+Current month (1-12).
+.
+.REG nl
+Vertical position of last printed text base-line.
+.
+.REG rsb
+Like
.register sb ,
but takes account of the heights and depths of characters.
+.
.REG rst
Like
.register st ,
but takes account of the heights and depths of characters.
+.
.REG sb
Depth of string below base line (generated by width function
.esc w ).
+.
+.REG seconds
+The number of seconds after the minute.
+.
+Initialized at start-up.
+.
.REG skw
Right skip width from the center of the last character in the
.esc w
argument.
+.
.REG slimit
If greater than 0, the maximum number of objects on the input stack.
-If \(<=0 there is no limit, i.e., recursion can continue until virtual
+.
+If \[<=]0 there is no limit, i.e., recursion can continue until virtual
memory is exhausted.
+.
.REG ssc
-The amount of horizontal space (possibly negative) that should be added
-to the last character before a subscript (generated by width function
+The amount of horizontal space (possibly negative) that should be
+added to the last character before a subscript (generated by width
+function
.esc w ).
+.
.REG st
Height of string above base line (generated by width function
.esc w ).
+.
.REG systat
The return value of the
.I system()
function executed by the last
-.request .sy
+.request sy
request.
+.
.REG urx
Upper right x-coordinate (in PostScript units) of a given PostScript
image (set by
.request .psbb ).
+.
.REG ury
Upper right y-coordinate (in PostScript units) of a given PostScript
image (set by
.request .psbb ).
-.REG year The current year (year 2000 compliant).
+.
+.REG year
+The current year (year 2000 compliant).
+.
.REG yr
-Current year minus 1900. For Y2K compliance use register
+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.
+.
+The differences of the groff language in comparison to classical troff
+as defined by
+.I [CSTR\~#54]
+are documented in
+.BR groff_diff (@MAN7EXT@).
+.
+.P
+The groff system provides a compatibility mode, see
+.BR groff (@MAN1EXT@)
+on how to invoke this.
+.
.
.\" --------------------------------------------------------------------
.SH BUGS
.\" --------------------------------------------------------------------
-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@).
+.
+Report bugs to the
+.MTO bug-groff@gnu.org "groff bug mailing list" .
+Include a complete, self-contained example that will allow the bug to
+be reproduced, and say which version of groff you are using.
+.
.
.\" --------------------------------------------------------------------
-.SH AUTHOR
+.SH AUTHORS
.\" --------------------------------------------------------------------
-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.
+.
+Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+.
+.P
+This document is distributed under the terms of the FDL (GNU Free
+Documentation License) version 1.1 or later.
+.
+You should have received a copy of the FDL on your system, it is also
+available on-line at the
+.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
+.
+.P
+This document is part of
+.IR groff ,
+the GNU roff distribution.
+.
+It was written by
+.MTO bwarken@mayn.de "Bernd Warken" ;
+it is maintained by
+.MTO wl@gnu.org "Werner Lemberg" .
+.
.
.\" --------------------------------------------------------------------
.SH "SEE ALSO"
.\" --------------------------------------------------------------------
+.
+.P
The main source of information for the groff language is the
.B groff
.BR info (1)
file.
-.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
+.
+Besides the gory details, it contains many examples.
+.
+.TP
.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/ .
+the usage of the groff program and pointers to the documentation and
+availability of the groff system.
+.
+.TP
+.BR groff_diff (@MAN7EXT@)
+the differences of the groff language as compared to classical roff.
+.
+This is the authoritative document for the predefined language
+elements that are specific to groff.
+.
+.TP
+.BR groff_char (@MAN7EXT@)
+the predefined groff characters (glyphs).
+.
+.TP
+.BR groff_font (@MAN5EXT@)
+the specification of fonts and the DESC file.
+.
+.TP
+.BR roff (@MAN7EXT@)
+the history of roff, the common parts shared by all roff systems, and
+pointers to further documentation.
+.
+.TP
+.I [CSTR\~#54]
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:54.ps \
+ "Nroff/\:Troff User's Manual by Osanna & Kernighan"
+\[em] the bible for classical troff.
+.
+.
+.\" --------------------------------------------------------------------
+.\" Emacs Setup
+.\" --------------------------------------------------------------------
.
.\" Local Variables:
.\" mode: nroff
diff --git a/contrib/groff/man/groff_char.man b/contrib/groff/man/groff_char.man
index 74f442d..be73941 100644
--- a/contrib/groff/man/groff_char.man
+++ b/contrib/groff/man/groff_char.man
@@ -1,150 +1,385 @@
+.TH GROFF_CHAR @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+groff_char \- groff character names
+.SH DESCRIPTION
+.\" The lines above were designed to satisfy `apropos'.
+.
+.\" For best results, format this document with `groff' (GNU roff).
+.
+.
+.\" --------------------------------------------------------------------
+.\" Legalize
+.\" --------------------------------------------------------------------
+.
.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+groff_char(7)
+
+This file is part of groff (GNU roff).
-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.
+File position: <groff_src_top>/man/groff_char.man
+Last update: 20 July 2002
-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.
+Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
+written by Werner Lemberg <wl@gnu.org>
+with additions by Bernd Warken <bwarken@mayn.de>
-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.
+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.
..
-.\" For best results, print this with groff.
+.
+.\" --------------------------------------------------------------------
+.\" Setup Part 1
+.\" --------------------------------------------------------------------
+.
+.\" groff only
+.if \n(.g .mso www.tmac
+.\".if \n(.g .ne 2v
+.\".if \n(.g .sv 2v
+.
.ds aq \(aq
-.ie !\n(.g .if '\(aq'' .ds aq \'
-.el \{\
-. tr \(aq\(aq
-. if !c\(aq .ds aq \'
-.\}
+.
+.\" non-groff
+.if !\n(.g .if '\(aq'' .ds aq \'
+.
+.\" groff
+.if !\n(.g .ig
+. tr \[aq]\[aq]
+. if !c\[aq] \
+. ds aq \'
+. \" This is very special. The standard devdvi fonts don't have a
+. \" real `aq' glyph; it is defined with .char to be ' instead.
+. \" The .tr request below in the definition of the C macro maps
+. \" the apostrophe ' onto the `aq' glyph which would cause a
+. \" recursive loop. gtroff prevents this within the .char
+. \" request, trying to access glyph `aq' directly from the font.
+. \" Consequently, we get a warning, and nothing is printed.
+. \"
+. \" The following line prevents this.
+. if '\*[.T]'dvi' \
+. if !r ECFONTS \
+. ds aq \'
+. \" The same is true for X
+. ds dev \*[.T]
+. substring dev 0 0
+. if '\*[dev]'X' .ds aq \'
+. ig
+..
+.\" --------------------------------------------------------------------
+.\" .Ac accented-char accent char (groff)
.if !\n(.g .ig
-.\" .Ac accented-char accent char
.de Ac
-.char \\$1 \\$3\
-\k[acc]\
-\h'(u;-\w'\\$2'-\w'\\$3'/2+\\\\n[skw]+(\w'x'*0)-\\\\n[skw])'\
-\v'(u;\w'x'*0+\\\\n[rst]+(\w'\\$3'*0)-\\\\n[rst])'\
-\\$2\
-\v'(u;\w'x'*0-\\\\n[rst]+(\w'\\$3'*0)+\\\\n[rst])'\
-\h'|\\\\n[acc]u'
-.hcode \\$1\\$3
+. char \\$1 \\$3\
+\k[acc]\h'(u;-\w'\\$2'-\w'\\$3'/2+\\\\n[skw]+(\w'x'*0)-\\\\n[skw])'\
+\v'(u;\w'x'*0+\\\\n[rst]+(\w'\\$3'*0)-\\\\n[rst])'\\$2\
+\v'(u;\w'x'*0-\\\\n[rst]+(\w'\\$3'*0)+\\\\n[rst])'\h'|\\\\n[acc]u'
+. hcode \\$1 \\$3
..
.Ac \(vc \(ah c
.Ac \(vC \(ah C
-.TH GROFF_CHAR @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_char \- groff character names
-.SH DESCRIPTION
-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 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
-input with a single character, and gives the ISO Latin-1 code
-of that input character.
-The
-.I "PostScript name\"
-column gives the usual PostScript name of the output character.
-.LP
-The ISO Latin-1 no-break space (code 0240 octal) is equivalent to
-.BR \e (space).
-All other ISO Latin-1 characters print as themselves with the following
-exceptions:
-.B \`
-prints as `,
-.B \*(aq
-prints as ';
-the corresponding ISO Latin-1 characters can be obtained with
-.B \e`
-and
-.BR \e(aq .
-The ISO Latin-1 `Hyphen, Minus Sign' (code 45) prints as a hyphen;
-a minus sign can be obtained with
-.BR \e- .
-The ISO Latin-1 `Tilde' (code 126) prints as ~;
-the larger glyph can be obtained with
-.BR \e(ti .
-The ISO Latin-1 `Circumflex Accent' (code 94) prints as ^;
-a larger glyph can be obtained with
-.BR \e(ha .
-.sp
-'nf
+.
+.
+.\" --------------------------------------------------------------------
+.\" Setup Part 2
+.\" --------------------------------------------------------------------
+.
.nr Sp 3n
-.ta \w'\fIOutput'u+\n(Spu +\w'\fIInput'u+\n(Spu +\w'\fIInput'u+\n(Spu \
-+\w'periodcentered'u+\n(Spu
+.ta \w'\fIOutput'u+\n(Spu \
+ +\w'\fIInput'u+\n(Spu \
+ +\w'\fIInput'u+\n(Spu \
+ +\w'periodcentered'u+\n(Spu
+.
+.\" --------------------------------------------------------------------
.de C0
-.C \\$1 "" \\$1 \\$2 "\\$3"
+. C \\$1 "" \\$1 \\$2 "\\$3"
..
+.
+.\" --------------------------------------------------------------------
.de C1
-.C \e\\$1 "" \\\\\\$1 \\$2 "\\$3"
+. C \e\\$1 "" \\\\\\$1 \\$2 "\\$3"
..
+.
+.\" --------------------------------------------------------------------
+.\" .C2/.CN (groff)
+.if !\n(.g .ig
+.de CN
+. C \e[\\$1] "" \[\\$1] \\$2 "\\$3"
+..
+.if \n(.g .als C2 CN
+.
+.\" --------------------------------------------------------------------
+.\" .C2 (non-groff)
+.if \n(.g .ig
.de C2
-.C \e(\\$1 "" \\(\\$1 \\$2 "\\$3"
+. C \e(\\$1 "" \\(\\$1 \\$2 "\\$3"
..
+.
+.\" --------------------------------------------------------------------
+.\" .CD (groff)
.if !\n(.g .ig
.de CD
-.C \[char\\$1] \\$1 \[char\\$1] \\$2 "\\$3"
+. C \[char\\$1] \\$1 \[char\\$1] \\$2 "\\$3"
..
-.do fspecial CR R
+.
+.\" --------------------------------------------------------------------
+.do if !r ECFONTS .do fspecial CR R
+.
+.\" --------------------------------------------------------------------
.\" input-name decimal-code output-name ps-name description
+.\" .C (groff)
.if !\n(.g .ig
.de C
-.if c\\$3 \{\
-.ft CR
-.tr `\`'\*(aq
-.in 0
-.di CH
-\&\\$1
-.br
-.di
-.in
-.ft
-.ds CH \\*(CH\
-.tr ``''
-\&\\$3\t\\*(CH\t\\$2\t\\$4\t\\$5
-.\}
+. if c\\$3 \{\
+. ft CR
+. tr `\`'\*[aq]
+. in 0
+. di CH
+. nop \&\\$1
+. br
+. di
+. in
+. ft
+. ds CH \\*[CH]\
+. tr ``''
+. nop \&\\$3\t\\*[CH]\t\\$2\t\\$4\t\\$5
+. \}
..
+.
+.\" --------------------------------------------------------------------
+.\" .C (non-groff)
.if \n(.g .ig
.de C
-.if !'\\$3'' \{\
-.ft B
-.tr `\`'\*(aq
-.in 0
-.di CH
+. if !'\\$3'' \{\
+. ft B
+. tr `\`'\*(aq
+. in 0
+. di CH
\&\\$1
-.br
-.di
-.in
-.ft
-.ds CH \\*(CH\
-.tr ``''
+. br
+. di
+. in
+. ft
+. ds CH \\*(CH\
+. tr ``''
\&\\$3\t\\*(CH\t\\$2\t\\$4\t\\$5
-.\}
+. \}
..
-.if !\n[cR] .wh \n(nlu+\n(.tu-\n(.Vu Fo
+.
+.\" --------------------------------------------------------------------
.de Fo
'bp
.He
..
+.
+.\" --------------------------------------------------------------------
.de He
+.P
+'nf
.ft I
Output Input Input PostScript Notes
name code name
.ft
-.LP
-'nf
+.P
..
+.
+.\" --------------------------------------------------------------------
+.\" .SH DESCRIPTION
+.\" --------------------------------------------------------------------
+.
+This manual page lists the standard
+.B groff
+input characters.
+.
+The output characters in this document will look different depending
+on which output device was chosen (with option
+.B \-T
+for the
+.BR man (1)
+program or the roff formatter).
+.
+Only the characters that are available for the device that
+is being used to print or view this manual page will be
+.ie \n(.g displayed (the device currently used is `\*(.T').
+.el displayed.
+.
+.
+.P
+In the actual version,
+.B groff
+provides only 8-bit characters for direct input and named characters
+for further glyphs.
+.
+On ASCII platforms, character codes in the range 0 to 127 (decimal)
+represent the usual 7-bit ASCII characters, while codes between 127
+and 255 are interpreted as the corresponding characters in the
+.I Latin-1
+.RI ( ISO-8859-1 )
+code set.
+.
+On EBCDIC platforms, only the code page
+.B cp1047
+is supported (which contains the same characters as Latin-1).
+.
+It is rather straightforward (for the experienced user) to set up other
+8bit encodings like
+.IR Latin-2 ;
+since
+.B groff
+will use Unicode in the next major version, no additional encodings
+are provided.
+.
+.
+.P
+All roff systems provide the concept of named characters.
+.
+In traditional roff systems, only names of length\ 2 were used, while
+groff also provides support for longer names.
+.
+It is strongly suggested that only named characters are used for all
+characters outside of the 7-bit ASCII range.
+.
+.
+.P
+Some of the predefined groff escape sequences (with names of length\ 1)
+also produce single characters; these exist for historical reasons or
+are printable versions of syntactical characters.
+.
+They include
+.BR \e\e ,
+.BR \e' ,
+.BR \e` ,
+.BR \e- ,
+.BR \e. ,
+and
+.BR \ee ;
+see
+.BR groff (@MAN7EXT@).
+.
+.
+.P
+In groff, all of these different types of characters can be tested
+positively with the
+.B .if\ c
+conditional.
+.
+.
+.\" --------------------------------------------------------------------
+.SH REFERENCE
+.\" --------------------------------------------------------------------
+.
+In this section, the characters in groff are specified in tabular
+form.
+.
+The meaning of the columns is as follows.
+.
+.
+.TP
+.I "Output"
+shows how the character is printed for the current device; although
+this can have quite a different shape on other devices, it always
+represents the same glyph.
+.
+.
+.TP
+.I "Input name"
+specifies how the character is input either directly by a key on the
+keyboard, or by a groff escape sequence.
+.
+.
+.TP
+.I "Input code"
+applies to characters which can be input with a single character, and
+gives the ISO Latin-1 decimal code of that input character.
+.
+Note that this code is equivalent to the lowest 256 Unicode characters;
+(including 7-bit ASCII in the range 0 to\ 127).
+.
+.
+.TP
+.I "PostScript name"
+gives the usual PostScript name of the output character.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "ASCII Characters"
+.\" --------------------------------------------------------------------
+.
+These are the basic characters having 7-bit ASCII code values.
+.
+These are identical to the first 127 characters of the character
+standards ISO-8859-1 (Latin-1) and Unicode (range
+.IR "C0 Controls and Basic Latin" ).
+.
+To save space, not every code has an entry in the following because
+the following code ranges are well known.
+.
+.TP
+0\-32
+Control characters (print as themselves).
+.
+.TP
+48\-57
+Decimal digits 0 to 9 (print as themselves).
+.
+.TP
+65\-90
+Upper case letters A\-Z (print as themselves).
+.
+.TP
+97\-122
+Lower case letters a\-z (print as themselves).
+.
+.TP
+127
+Control character (prints as itself).
+.
+.P
+The remaining ranges constitute the printable, non-alphanumeric ASCII
+characters; only these are listed below.
+.
+As can be seen in the table below, most of these characters print as
+themselves; the only exceptions are the following characters:
+.
+.TP
+.B \`
+the ISO Latin-1 `Grave Accent' (code\ 96) prints as `, a left single
+quotation mark,
+.
+.TP
+.B \*(aq
+the ISO Latin-1 `Apostrophe' (code\ 39) prints as ', a right single
+quotation mark; the corresponding ISO Latin-1 characters can be obtained
+with
+.B \e`
+and
+.BR \e(aq .
+.
+.TP
+.B -
+the ISO Latin-1 `Hyphen, Minus Sign' (code\ 45) prints as a hyphen; a
+minus sign can be obtained with
+.BR \e- .
+.
+.TP
+.B ~
+the ISO Latin-1 `Tilde' (code\ 126); a larger glyph can be obtained
+with
+.BR \e(ti .
+.
+.TP
+.B ^
+the ISO Latin-1 `Circumflex Accent' (code\ 94); a larger glyph can be
+obtained with
+.BR \e(ha .
+.
+.
+.P
+.if !\n[cR] .wh \n(nlu+\n(.tu-\n(.Vu Fo
.He
.CD 33 exclam
.CD 34 quotedbl
@@ -178,7 +413,60 @@ Output Input Input PostScript Notes
.CD 124 bar
.CD 125 braceright
.CD 126 tilde "tilde accent"
-.CD 161 exclamdown
+.ch Fo
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Latin-1 Special Characters"
+.\" --------------------------------------------------------------------
+.
+These characters have character codes between 128 and\ 255.
+.
+They are interpreted as characters according to the
+.I Latin-1
+.RI ( iso-8859-1 )
+code set, being identical to the Unicode range
+.IR "C1 Controls and Latin-1 Supplement" .
+.
+.TP
+128\-159
+.
+the C1 Controls; they print as themselves, but the effect is mostly
+undefined.
+.
+.TP
+160
+.
+the ISO Latin-1
+.I no-break space
+is mapped to
+.BR `\e\ ' ,
+the escaped space character.
+.
+.TP
+173
+.
+the soft hyphen control character (prints as itself).
+.
+groff never use this character for output (thus it is omitted in the table
+below); the input character\ 173 is mapped onto
+.BR \e% .
+.
+.
+.P
+The remaining ranges (161\-172, 174\-255), called the
+.I Latin-1 Supplement
+in Unicode, are printable characters that print as themselves.
+.
+Although they can be specified directly with the keyboard on systems
+with a Latin-1 code page, it is better to use their named character
+equivalent; see next section.
+.
+.
+.P
+.if !\n[cR] .wh \n(nlu+\n(.tu-\n(.Vu Fo
+.He
+.CD 161 exclamdown "inverted exclamation mark"
.CD 162 cent
.CD 163 sterling
.CD 164 currency
@@ -190,7 +478,6 @@ Output Input Input PostScript Notes
.CD 170 ordfeminine
.CD 171 guillemotleft
.CD 172 logicalnot
-.CD 173 hyphen
.CD 174 registered
.CD 175 macron
.CD 176 degree
@@ -198,7 +485,7 @@ Output Input Input PostScript Notes
.CD 178 twosuperior
.CD 179 threesuperior
.CD 180 acute "acute accent"
-.CD 181 mu
+.CD 181 mu "micro sign"
.CD 182 paragraph
.CD 183 periodcentered
.CD 184 cedilla
@@ -273,17 +560,103 @@ Output Input Input PostScript Notes
.CD 253 yacute
.CD 254 thorn
.CD 255 ydieresis
+.ch Fo
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Named Characters"
+.\" --------------------------------------------------------------------
+.
+The named character idiom is the standard way to specify special
+characters in roff systems.
+.
+They can be embedded into the document text by using escape sequences.
+.
+.BR groff (@MAN7EXT@)
+describes how these escape sequences look.
+.
+The character names can consist of quite arbitrary characters from the
+ASCII or Latin-1 code set, not only alphanumeric characters.
+.
+Here some examples:
+.
+.TP
+.BI \e c
+named character having the name
+.IR c ,
+which consists of a single character (length\ 1).
+.
+.TP
+.BI \e( ch
+named character having the 2-character name
+.IR ch .
+.
+.TP
+.BI \e[ char_name ]
+named character having the name
+.I char_name
+(having length 1, 2, 3, .\|.\|.).
+.
+.
+.P
+In groff, each 8bit input character can also referred to by the construct
+.BI \en[char n ]
+where
+.I n
+is the decimal code of the character, a number between 0 and\ 255
+without leading zeros.
+.
+They are mapped onto glyph entities using the
+.B .trin
+request.
+.
+Moreover, new character names can be created by the
+.B .char
+request; see
+.BR groff (@MAN7EXT@).
+.
+.
+.P
+.\" we don't use the third column
+.ta \w'\fIOutput'u+\n(Spu \
+ +\w'\fIInput'u+\n(Spu-1n \
+ +1n \
+ +\w'periodcentered'u+\n(Spu
+.if !\n[cR] .wh \n(nlu+\n(.tu-\n(.Vu Fo
+.de He
+.P
+'nf
+.ft I
+Output Input PostScript Notes
+ name name
+.ft
+.P
+..
+.He
.C2 -D Eth "Icelandic uppercase eth"
.C2 Sd eth "Icelandic lowercase eth"
.C2 TP Thorn "Icelandic uppercase thorn"
.C2 Tp thorn "Icelandic lowercase thorn"
+.C2 ss germandbls "German sharp s"
+.
+.P
+.I Ligatures
+.C2 ff ff "ff ligature"
+.C2 fi fi "fi ligature"
+.C2 fl fl "fl ligature"
+.C2 Fi ffi "ffi ligature"
+.C2 Fl ffl "ffl ligature"
.C2 AE AE
.C2 ae ae
.C2 OE OE
.C2 oe oe
.C2 IJ IJ "Dutch IJ ligature"
.C2 ij ij "Dutch ij ligature"
-.C2 ss germandbls
+.C2 .i dotlessi "i without a dot (Turkish)"
+.C2 .j dotlessj "j without a dot"
+.
+.P
+.I Accented Characters
.C2 'A Aacute
.C2 'C Cacute
.C2 'E Eacute
@@ -298,7 +671,7 @@ Output Input Input PostScript Notes
.C2 'o oacute
.C2 'u uacute
.C2 'y yacute
-.C2 :A Adieresis
+.C2 :A Adieresis "A with umlaut"
.C2 :E Edieresis
.C2 :I Idieresis
.C2 :O Odieresis
@@ -344,11 +717,14 @@ Output Input Input PostScript Notes
.C2 ,c ccedilla
.C2 /L Lslash "Polish L with a slash"
.C2 /l lslash "Polish l with a slash"
-.C2 /O Oslash
-.C2 /o oslash
+.C2 /O Oslash "Scandinavic slashed O"
+.C2 /o oslash "Scandinavic slashed o"
.C2 oA Aring
.C2 oa aring
-.C2 a" hungarumlaut "Hungarian umlaut"
+.
+.P
+.I Accents
+.C2 a" hungarumlaut "Hungarian umlaut"\""
.C2 a- macron "macron or bar accent"
.C2 a. dotaccent "dot accent"
.C2 a^ circumflex "circumflex accent"
@@ -361,98 +737,195 @@ Output Input Input PostScript Notes
.C2 ao ring "ring or circle accent"
.C2 a~ tilde "tilde accent"
.C2 ho ogonek "hook or ogonek accent"
-.C2 .i dotlessi "i without a dot"
-.C2 .j dotlessj "j without a dot"
-.C2 Cs currency "Scandinavian currency sign"
-.C2 Do dollar
-.C2 Po sterling
-.C2 Ye yen
-.C2 Fn florin
-.C2 ct cent
+.C2 ha asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
+.C2 ti asciitilde "\s-2ASCII\s0 tilde, large tilde"
+.
+.P
+.I Quotes
+.C2 Bq quotedblbase "low double comma quote"
+.C2 bq quotesinglbase "low single comma quote"
+.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 Fo guillemotleft
.C2 Fc guillemotright
.C2 fo guilsinglleft
.C2 fc guilsinglright
+.
+.P
+.I Punctuation
.C2 r! exclamdown
.C2 r? questiondown
-.C2 ff ff "ff ligature"
-.C2 fi fi "fi ligature"
-.C2 fl fl "fl ligature"
-.C2 Fi ffi "ffi ligature"
-.C2 Fl ffl "ffl ligature"
-.C2 OK \& "check mark, tick"
-.C2 Of ordfeminine
-.C2 Om ordmasculine
-.C2 pc periodcentered
-.C2 S1 onesuperior
-.C2 S2 twosuperior
-.C2 S3 threesuperior
+.C2 em emdash "em dash"
+.C2 en endash "en dash"
+.C2 hy hyphen
+.
+.P
+.I Brackets
+.C2 lB bracketleft
+.C2 rB bracketright
+.C2 lC braceleft
+.C2 rC braceright
+.C2 la angleleft "left angle bracket"
+.C2 ra angleright "right angle bracket"
+.
+.P
+.I Arrows
.C2 <- arrowleft
.C2 -> arrowright
.C2 <> arrowboth "horizontal double-headed arrow"
.C2 da arrowdown
.C2 ua arrowup
-.C2 va \& "vertical double-headed arrow"
+.C2 va arrowupdn "vertical double-headed arrow"
.C2 lA arrowdblleft
.C2 rA arrowdblright
.C2 hA arrowdblboth "horizontal double-headed double arrow"
.C2 dA arrowdbldown
.C2 uA arrowdblup
.C2 vA \& "vertical double-headed double arrow"
+.C2 an arrowhorizex "horizontal arrow extension"
+.
+.P
+.I Lines
+.C2 -h hbar
+.C2 or bar
.C2 ba bar
-.C2 bb brokenbar
.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 "bar vertical"
-.C2 bs bell
+.C2 bb brokenbar
+.C2 sl slash
+.C2 rs backslash
+.
+.P
+.I Text markers
.C2 ci circle
.C2 bu bullet
-.C2 co copyright
-.C2 rg registered
-.C2 tm trademark
.C2 dd daggerdbl "double dagger sign"
.C2 dg dagger
+.C2 lz lozenge
+.C2 sq square
.C2 ps paragraph
.C2 sc section
-.C2 de degree
-.C2 em emdash "em dash"
-.C2 en endash "en dash"
-.C2 %0 perthousand "per thousand, per mille sign"
-.C2 12 onehalf
-.C2 14 onequarter
-.C2 34 threequarters
-.C2 f/ fraction "bar for fractions"
-.C2 fm minute "footmark, prime"
-.C2 sd second
-.C2 ha asciicircum "\s-2ASCII\s+2 circumflex, hat, caret"
-.C2 ti asciitilde "\s-2ASCII\s0 tilde, large tilde"
-.C2 hy hyphen
-.C2 lB bracketleft
-.C2 rB bracketright
-.C2 lC braceleft
-.C2 rC braceright
-.C2 la angleleft "left angle bracket"
-.C2 ra angleright "right angle bracket"
.C2 lh handleft
.C2 rh handright
-.C2 Bq quotedblbase "low double comma quote"
-.C2 bq quotesinglbase "low single comma quote"
-.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"
.C2 sh numbersign
-.C2 sl slash
-.C2 rs backslash
-.C2 sq square
+.C2 CR carriagereturn "carriage return symbol"
+.C2 OK a19 "check mark, tick"
+.
+.P
+.I Legalize
+.C2 co copyright
+.C2 rg registered
+.C2 tm trademark
+.C2 bs bell "AT&T Bell Labs logo (not used in groff)"
+.
+.P
+.I Currency symbols
+.C2 Do dollar
+.C2 ct cent
+.C2 eu \& "official Euro symbol"
+.C2 Eu Euro "font-specific Euro glyph variant"
+.C2 Ye yen
+.C2 Po sterling "British currency sign"
+.C2 Cs currency "Scandinavian currency sign"
+.C2 Fn florin "Dutch currency sign"
+.
+.P
+.I Units
+.C2 de degree
+.C2 %0 perthousand "per thousand, per mille sign"
+.C2 fm minute "footmark, prime"
+.C2 sd second
+.C2 mc mu "micro sign"
+.C2 Of ordfeminine
+.C2 Om ordmasculine
+.
+.P
+.I Logical Symbols
+.C2 AN logicaland
+.C2 OR logicalor
+.C2 no logicalnot
+.C2 te existential "there exists, existential quantifier"
+.C2 fa universal "for all, universal quantifier"
+.C2 st suchthat
.C2 3d therefore
.C2 tf therefore
+.
+.P
+.I Mathematical Symbols
+.C2 12 onehalf
+.C2 14 onequarter
+.C2 34 threequarters
+.C2 S1 onesuperior
+.C2 S2 twosuperior
+.C2 S3 threesuperior
+.
+.C2 pl plusmath "plus sign in special font"
+.C1 - minus "minus sign from current font"
+.C2 -+ minusplus
+.C2 +- plusminus
+.CN t+- plusminus "text variant of `+-'"
+.C2 pc periodcentered "multiplication dot"
+.C2 md dotmath
+.C2 mu multiply
+.CN tmu multiply "text variant of `mu'"
+.C2 c* circlemultiply "multiply sign in a circle"
+.C2 c+ circleplus "plus sign in a circle"
+.C2 di divide "division sign"
+.CN tdi divide "text variant of `di'"
+.C2 f/ fraction "bar for fractions"
+.C2 ** asteriskmath
+.
+.C2 <= lessequal
+.C2 >= greaterequal
+.C2 << \& "much less"
+.C2 >> \& "much greater"
+.C2 != notequal
+.C2 eq equalmath "equals sign in special font"
+.C2 == equivalence
+.C2 =~ congruent
+.C2 ap similar
+.C2 ~~ approxequal
+.C2 ~= approxequal
+.C2 pt proportional
+.
+.C2 es emptyset
+.C2 mo element
+.C2 nm notelement
+.C2 nb notsubset
+.C2 nc notpropersuperset
+.C2 ne notequivalence
+.C2 sb propersubset
+.C2 sp propersuperset
+.C2 ib reflexsubset
+.C2 ip reflexsuperset
+.C2 ca intersection "intersection, cap"
+.C2 cu union "union, cup"
+.
+.C2 /_ angle
+.C2 pp perpendicular
+.C2 is integral
+.CN sum sum
+.CN product product
+.C2 gr gradient
+.C2 sr radical "square root"
+.C2 rn \& overline "continuation of square root"
+.
+.C2 if infinity
+.C2 Ah aleph
+.C2 Im Ifraktur "Gothic I, imaginary"
+.C2 Re Rfraktur "Gothic R, real"
+.C2 wp weierstrass "Weierstrass p"
+.C2 pd partialdiff "partial differentiation sign"
+.
+.P
+.I Greek characters
.C2 *A Alpha
.C2 *B Beta
.C2 *C Xi
@@ -505,73 +978,77 @@ Output Input Input PostScript Notes
.C2 *y eta
.C2 *z zeta
.C2 ts sigma1 "terminal sigma"
-.C2 ~~ approxequal
-.C2 ~= approxequal
-.C2 != notequal
-.C2 ** asteriskmath
-.C2 -+ minusplus
-.C2 +- plusminus
-.C2 <= lessequal
-.C2 == equivalence
-.C2 =~ congruent
-.C2 >= greaterequal
-.C2 AN logicaland
-.C2 OR logicalor
-.C2 no logicalnot
-.C2 te existential "there exists, existential quantifier"
-.C2 fa universal "for all, universal quantifier"
-.C2 Ah aleph
-.C2 Im Ifraktur "Fraktur I, imaginary"
-.C2 Re Rfraktur "Fraktur R, real"
-.C2 if infinity
-.C2 md dotmath
-.C2 mo element
-.C2 mu multiply
-.C2 nb notsubset
-.C2 nc notpropersuperset
-.C2 ne notequivalence
-.C2 nm notelement
-.C2 pl plusmath "plus sign in special font"
-.C2 eq equalmath "equals sign in special font"
-.C2 pt proportional
-.C2 pp perpendicular
-.C2 sb propersubset
-.C2 sp propersuperset
-.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"
-.C2 ca intersection "intersection, cap"
-.C2 cu union "union, cup"
-.C2 di divide "division sign"
-.C2 -h hbar
-.C2 gr gradient
-.C2 es emptyset
+.
+.P
+.I Card symbols
.C2 CL club "club suit"
.C2 SP spade "spade suit"
.C2 HE heart "heart suit"
.C2 DI diamond "diamond suit"
-.C2 CR carriagereturn "carriage return symbol"
-.C2 st suchthat
-.C2 /_ angle
-.C2 << \& "much less"
-.C2 >> \& "much greater"
-.C2 wp weierstrass "Weierstrass p"
-.C2 lz lozenge
-.C2 an arrowhorizex "horizontal arrow extension"
.ch Fo
+.
+.
+.\" --------------------------------------------------------------------
+.SH "AUTHOR"
+.\" --------------------------------------------------------------------
+.
+Copyright \(co 1989-2000, 2001, 2002 Free Software Foundation, Inc.
+.
+.P
+This document is distributed under the terms of the FDL (GNU Free
+Documentation License) version 1.1 or later.
+.
+You should have received a copy of the FDL on your system, it is also
+available on-line at the
+.ie \n(.g \
+. URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
+.el GNU copyleft site <http://www.gnu.org/copyleft/fdl.html>.
+.
+.P
+This document is part of
+.IR groff ,
+the GNU roff distribution.
+.
+It was written by
+.ie \n(.g \
+. MTO jjc@jclark.com "James Clark"
+.el James Clark <jjc@jclark.com>
+with additions by
+.ie \n(.g \
+. MTO wl@gnu.org "Werner Lemberg"
+.el Werner Lemberg <wl@gnu.org>
+and
+.ie \n(.g \
+. MTO bwarken@mayn.de "Bernd Warken" .
+.el Bernd Warken <bwarken@mayn.de>.
+.
+.
+.\" --------------------------------------------------------------------
.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+.
+.TP
.BR groff (@MAN1EXT@)
-.br
+the GNU roff formatter.
+.
+.TP
+.BR groff (@MAN7EXT@)
+a short reference of the groff formatting language.
+.
+.
+.P
.IR "An extension to the troff character set for Europe" ,
-E.G. Keizer, K.J. Simonsen, J. Akkerhuis,
-EUUG Newsletter, Volume 9, No. 2, Summer 1989
+E.G. Keizer, K.J. Simonsen, J. Akkerhuis; EUUG Newsletter, Volume 9,
+No. 2, Summer 1989
+.
+.
+.P
+.ie \n(.g .URL http://\:www.unicode.org "The Unicode Standard"
+.el The Unicode Standard <http://www.unicode.org>
.
+.\" --------------------------------------------------------------------
+.\" Emacs settings
+.\" --------------------------------------------------------------------
.\" Local Variables:
.\" mode: nroff
.\" End:
diff --git a/contrib/groff/man/groff_diff.man b/contrib/groff/man/groff_diff.man
new file mode 100644
index 0000000..c6c1c23
--- /dev/null
+++ b/contrib/groff/man/groff_diff.man
@@ -0,0 +1,3650 @@
+'\" e
+.\" The above line should force the use of eqn as a preprocessor
+.ig
+groff_diff.man
+
+Last update : 05 July 2002
+
+This file is part of groff, the GNU roff type-setting system.
+It is the source of the man-page groff_diff(7).
+
+Copyright (C) 1989, 2001, 2002 Free Software Foundation, Inc.
+written by James Clark
+
+modified by Werner Lemberg <wl@gnu.org>
+ Bernd Warken <bwarken@mayn.de>
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHORS, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.mso www.tmac
+.
+.if n \{\
+. mso tty-char.tmac
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.if '\*[.T]'dvi' \
+. ftr CB CW
+.
+.\" define a string tx for the TeX logo
+.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+.el .ds tx TeX
+.
+.
+.\" --------------------------------------------------------------------
+.\" start of macro definitions
+.
+.eo
+.
+.de c
+..
+.
+.de TQ
+. br
+. ns
+. TP \$1
+..
+.de Text
+. RI "\$*"
+..
+.de Topic
+. TP 2m
+. Text \[bu]
+..
+.de squoted
+. ds @arg1 \$1
+. shift
+.\" Text \[oq]\f[CB]\*[@arg1]\f[]\[cq]\$*
+. Text \[oq]\f[B]\*[@arg1]\f[]\[cq]\$*
+. rm @arg1
+..
+.c A shell command line
+.de ShellCommand
+. br
+. IR "shell#" "\h'1m'\f[CB]\$*\f[]\/"
+..
+.c reference of a request or macro
+.de request
+. ds @arg1 \$1
+. shift 1
+.\" Text \f[CB]\*[@arg1]\f[]\$*
+. Text \f[B]\*[@arg1]\f[]\$*
+. rm @arg1
+..
+.als option request
+.
+.c representation of an escape sequence
+.de esc
+. ds @arg1 \$1
+. shift
+.\" Text \f[CB]\[rs]\*[@arg1]\f[]\$*
+. Text \f[B]\[rs]\*[@arg1]\&\f[]\$*
+. rm @arg1
+..
+.ec
+.\" end of macro definitions
+.
+.\" from old groff_out.man
+.ie \n(.g \
+. ds ic \/
+.el \
+. ds ic \^
+.
+.
+.\" --------------------------------------------------------------------
+.\" Title
+.\" --------------------------------------------------------------------
+.
+.TH GROFF_DIFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+groff_diff \- differences between GNU troff and classical troff
+.
+.
+.\" --------------------------------------------------------------------
+.SH DESCRIPTION
+.\" --------------------------------------------------------------------
+.
+This manual page describes the language differences between
+.IR groff ,
+the GNU
+.I roff
+text processing system and the classical
+.I roff
+formatter of the freely available Unix\~7 of the 1970s, documented in
+the
+.I Troff User's Manual
+by
+.I Osanna
+and
+.IR Kernighan .
+This inludes the roff language as well as the intermediate output
+format (troff output).
+.
+.P
+The section
+.I SEE ALSO
+gives pointers to both the classical
+.I roff
+and the modern
+.I groff
+documentation.
+.
+.P
+At the moment, this document is the place of the most actual
+documentation within the
+.I groff
+system.
+.
+This might change in the future.
+.
+Actually, all novelties of the groff language are first described here
+and will pervade into the other documents only at a later stage.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "GROFF LANGUAGE"
+.\" --------------------------------------------------------------------
+.
+In this section, all additional features of
+.I groff
+compared to the classical Unix\~7
+.I troff
+are described in detail.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Long names"
+.\" --------------------------------------------------------------------
+.
+The names of number registers, fonts, strings/\:macros/\:diversions,
+special characters, and colors can be of any length.
+.
+In escape sequences, additionally to the classical
+.BI ( xx
+construction for a two character name, you can use
+.BI [ xxx ]
+for a name of arbitrary length, for example in
+.
+.TP \w'\[rs]f[xxx]'u+3n
+.BI \[rs][ xxx ]
+Print the special character called
+.IR xxx .
+.
+.TP
+.BI \[rs]f[ xxx ]
+Set font
+.IR xxx .
+.
+Additionally,
+.B \[rs]f[]
+is a new syntax equal to
+.BR \[rs]fP ,
+i.e., to return to the previous font.
+.
+.TP
+.BI \[rs]*[ "xxx arg1 arg2 .\|.\|." ]
+Interpolate string
+.IR xxx ,
+taking
+.IR arg1 ,
+.IR arg2 ,
+.I .\|.\|.\&
+as arguments.
+.
+.TP
+.BI \[rs]n[ xxx ]
+Interpolate number register
+.IR xxx .
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Fractional pointsizes"
+.\" --------------------------------------------------------------------
+.
+A
+.I scaled point
+is equal to
+.B 1/sizescale
+points, where
+.B sizescale
+is specified in the
+.B DESC
+file (1 by default).
+.
+There is a new scale indicator
+.B z
+that has the effect of multiplying by sizescale.
+.
+Requests and escape sequences in troff interpret arguments that
+represent a pointsize as being in units of scaled points, but they
+evaluate each such argument using a default scale indicator of
+.BR z .
+Arguments treated in this way are the argument to the
+.B ps
+request, the third argument to the
+.B cs
+request, the second and fourth arguments to the
+.B tkf
+request, the argument to the
+.B \[rs]H
+escape sequence, and those variants of the
+.B \[rs]s
+escape sequence that take a numeric expression as their argument.
+.
+.P
+For example, suppose sizescale is 1000; then a scaled point will be
+equivalent to a millipoint; the call
+.B .ps\ 10.25
+is equivalent to
+.B .ps\ 10.25z
+and so sets the pointsize to 10250 scaled points, which is equal to
+10.25 points.
+.
+.P
+The number register
+.B \[rs]n[.s]
+returns the pointsize in points as decimal fraction.
+.
+There is also a new number register
+.B \[rs]n[.ps]
+that returns the pointsize in scaled points.
+.
+.P
+It would make no sense to use the
+.B z
+scale indicator in a numeric expression whose default scale indicator
+was neither
+.B u
+nor
+.BR z ,
+and so
+.B troff
+disallows this.
+.
+Similarly it would make no sense to use a scaling indicator other than
+.B z
+or
+.B u
+in a numeric expression whose default scale indicator was
+.BR z ,
+and so
+.B troff
+disallows this as well.
+.
+.P
+There is also new scale indicator\~\c
+.B s
+which multiplies by the number of units in a scaled point.
+.
+So, for example,
+.B \[rs]n[.ps]s
+is equal to
+.BR 1m .
+Be sure not to confuse the
+.B s
+and
+.B z
+scale indicators.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Numeric expressions"
+.\" --------------------------------------------------------------------
+.
+Spaces are permitted in a number expression within parentheses.
+.
+.P
+.B M
+indicates a scale of 100ths of an em.
+.B f
+indicates a scale of 65536 units, providing fractions for color
+definitions with the
+.B defcolor
+request.
+.
+For example, 0.5f = 32768u.
+.
+.TP
+.IB e1 >? e2
+The maximum of
+.I e1
+and
+.IR e2 .
+.
+.TP
+.IB e1 <? e2
+The minimum of
+.I e1
+and
+.IR e2 .
+.
+.TP
+.BI ( c ; e )
+Evaluate
+.I e
+using
+.I c
+as the default scaling indicator.
+.
+If
+.I c
+is missing, ignore scaling indicators in the evaluation of
+.IR e .
+.
+.
+.\" --------------------------------------------------------------------
+.SS "New escape sequences"
+.\" --------------------------------------------------------------------
+.
+.TP
+.BI \[rs]A' anything '
+This expands to
+.B 1
+or
+.B 0
+resp., depending on whether
+.I anything
+is or is not acceptable as the name of a string, macro, diversion, number
+register, environment, font, or color.
+It will return\~\c
+.B 0
+if
+.I anything
+is empty.
+.
+This is useful if you want to lookup user input in some sort of
+associative table.
+.
+.TP
+.BI \[rs]B' anything '
+This expands to
+.B 1
+or
+.B 0
+resp., depending on whether
+.I anything
+is or is not a valid numeric expression.
+.
+It will return\~\c
+.B 0
+if
+.I anything
+is empty.
+.
+.TP
+.BI \[rs]C' xxx '
+Typeset character named
+.IR xxx .
+Normally it is more convenient to use
+.BI \[rs][ xxx ]\f[R].
+But
+.B \[rs]C
+has the advantage that it is compatible with recent versions of
+.SM UNIX
+and is available in compatibility mode.
+.
+.TP
+.B \[rs]E
+This is equivalent to an escape character, but it is not interpreted in
+copy-mode.
+.
+For example, strings to start and end superscripting could be defined
+like this
+.
+.RS
+.IP
+.ft CB
+.Text .ds { \[rs]v'\-.3m'\[rs]s'\[rs]En[.s]*6u/10u'
+.br
+.Text .ds } \[rs]s0\[rs]v'.3m'
+.ft
+.
+.P
+The use of
+.B \[rs]E
+ensures that these definitions will work even if
+.B \[rs]*{
+gets interpreted in copy-mode (for example, by being used in a macro
+argument).
+.RE
+.
+.TP
+.BI \[rs]F f
+.TQ
+.BI \[rs]F( fm
+.TQ
+.BI \[rs]F[ fam ]
+Change font family.
+.
+This is the same as the
+.B fam
+request.
+.
+.B \[rs]F[]
+switches back to the previous color (note that
+.B \[rs]FP
+won't work; it selects font family `P' instead).
+.
+.TP
+.BI \[rs]m x
+.TQ
+.BI \[rs]m( xx
+.TQ
+.BI \[rs]m[ xxx ]
+Set drawing color.
+.B \[rs]m[]
+switches back to the previous color.
+.
+.TP
+.BI \[rs]M x
+.TQ
+.BI \[rs]M( xx
+.TQ
+.BI \[rs]M[ xxx ]
+Set background color for filled objects drawn with the
+.BI \[rs]D' .\|.\|. '
+commands.
+.B \[rs]M[]
+switches back to the previous color.
+.
+.TP
+.BI \[rs]N' n '
+Typeset the character with code
+.I n
+in the current font.
+.I 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
+.I not
+be searched.
+.
+The
+.B \[rs]N
+escape sequence can be conveniently used in conjunction with the
+.B char
+request, for example
+.
+.RS
+.ft CB
+.IP
+.Text .char \[rs][phone] \[rs]f(ZD\[rs]N'37'
+.ft
+.RE
+.
+.IP
+The code of each character is given in the fourth column in the font
+description file after the
+.B charset
+command.
+.
+It is possible to include unnamed characters in the font description
+file by using a name of
+.BR \-\-\- ;
+the
+.B \[rs]N
+escape sequence is the only way to use these.
+.
+.TP
+.BI \[rs]O n
+.TQ
+.BI \[rs]O[ n ]
+Suppressing troff output.
+.
+The escapes
+.BR \[rs]02 ,
+.BR \[rs]O3 ,
+.BR \[rs]O4 ,
+and
+.B \[rs]O5
+are intended for internal use by
+.BR \%grohtml .
+.
+.RS
+.TP
+.B \[rs]O0
+Disable any ditroff glyphs from being emitted to the device driver,
+provided that the escape occurs at the outer level (see
+.B \[rs]O3
+and
+.BR \[rs]O4 ).
+.
+.TP
+.B \[rs]O1
+Enable output of glyphs, provided that the escape occurs at the outer
+level.
+.IP
+.B \[rs]O0
+and
+.B \[rs]O1
+also reset the registers
+.BR \[rs]n[opminx] ,
+.BR \[rs]n[opminy] ,
+.BR \[rs]n[opmaxx] ,
+and
+.B \[rs]n[opmaxy]
+to\~-1.
+.
+These four registers mark the top left and bottom right hand corners
+of a box which encompasses all written glyphs.
+.
+.TP
+.B \[rs]O2
+Provided that the escape occurs at the outer level, enable output of
+glyphs and also write out to stderr the page number and four registers
+encompassing the glyphs previously written since the last call to
+.BR \[rs]O .
+.
+.TP
+.B \[rs]O3
+Begin a nesting level.
+.
+At start-up,
+.B troff
+is at outer level.
+.
+This is really an internal mechanism for
+.B \%grohtml
+while producing images.
+.
+They are generated by running the troff source through
+.B troff
+to the postscript device and
+.B ghostscript
+to produce images in PNG format.
+.
+The
+.B \[rs]O3
+escape will start a new page if the device is not html (to reduce the
+possibility of images crossing a page boundary).
+.
+.TP
+.B \[rs]O4
+End a nesting level.
+.
+.TP
+.BI \[rs]O5[ Pfilename ]
+This escape is
+.B \%grohtml
+specific.
+.
+Provided that this escape occurs at the outer nesting level, write
+.I filename
+to stderr.
+.
+The position of the image,
+.IR P ,
+must be specified and must be one of l, r, c, or i (left, right,
+centered, inline).
+.
+.I filename
+will be associated with the production of the next inline image.
+.RE
+.
+.TP
+.BI \[rs]R' name\ \[+-]n '
+This has the same effect as
+.
+.RS
+.IP
+.BI .nr\ name\ \[+-]n
+.RE
+.
+.TP
+.BI \[rs]s( nn
+.TQ
+.BI \[rs]s\[+-]( nn
+Set the point size to
+.I nn
+points;
+.I nn
+must be exactly two digits.
+.
+.TP
+.BI \[rs]s[\[+-] n ]
+.TQ
+.BI \[rs]s\[+-][ n ]
+.TQ
+.BI \[rs]s'\[+-] n '
+.TQ
+.BI \[rs]s\[+-]' n '
+Set the point size to
+.I n
+scaled points;
+.I n
+is a numeric expression with a default scale indicator of\~\c
+.BR z .
+.
+.TP
+.BI \[rs]V x
+.TQ
+.BI \[rs]V( xx
+.TQ
+.BI \[rs]V[ xxx ]
+Interpolate the contents of the environment variable
+.IR xxx ,
+as returned by
+.BR getenv (3).
+.B \[rs]V
+is interpreted in copy-mode.
+.
+.TP
+.BI \[rs]Y x
+.TQ
+.BI \[rs]Y( xx
+.TQ
+.BI \[rs]Y[ xxx ]
+This is approximately equivalent to
+.BI \[rs]X'\[rs]*[ xxx ]'\f[R].
+However the contents of the string or macro
+.I xxx
+are not interpreted; also it is permitted for
+.I xxx
+to have been defined as a macro and thus contain newlines (it is not
+permitted for the argument to
+.B \[rs]X
+to contain newlines).
+.
+The inclusion of newlines requires an extension to the UNIX troff
+output format, and will confuse drivers that do not know about this
+extension.
+.
+.TP
+.BI \[rs]Z' anything '
+Print anything and then restore the horizontal and vertical position;
+.I anything
+may not contain tabs or leaders.
+.
+.TP
+.B \[rs]$0
+The name by which the current macro was invoked.
+.
+The
+.B als
+request can make a macro have more than one name.
+.
+.TP
+.B \[rs]$*
+In a macro or string, the concatenation of all the arguments separated
+by spaces.
+.
+.TP
+.B \[rs]$@
+In a macro or string, the concatenation of all the arguments with each
+surrounded by double quotes, and separated by spaces.
+.
+.TP
+.BI \[rs]$( nn
+.TQ
+.BI \[rs]$[ nnn ]
+In a macro or string, this gives the
+.IR nn -th
+or
+.IR nnn -th
+argument.
+.
+Macros and strings can have an unlimited number of arguments.
+.
+.TP
+.BI \[rs]? anything \[rs]?
+When used in a diversion, this will transparently embed
+.I anything
+in the diversion.
+.I anything
+is read in copy mode.
+.
+When the diversion is reread,
+.I anything
+will be interpreted.
+.I anything
+may not contain newlines; use
+.B \[rs]!\&
+if you want to embed newlines in a diversion.
+.
+The escape sequence
+.B \[rs]?\&
+is also recognised in copy mode and turned into a single internal
+code; it is this code that terminates
+.IR anything .
+Thus
+.
+.RS
+.IP
+.ne 14v+\n(.Vu
+.ft CB
+.nf
+.Text .nr x 1
+.Text .nf
+.Text .di d
+.Text \[rs]?\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\c
+.Text \[rs]nx\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]?\[rs]?
+.Text .di
+.Text .nr x 2
+.Text .di e
+.Text .d
+.Text .di
+.Text .nr x 3
+.Text .di f
+.Text .e
+.Text .di
+.Text .nr x 4
+.Text .f
+.fi
+.ft
+.RE
+.
+.IP
+will print\~\c
+.BR 4 .
+.
+.TP
+.B \[rs]/
+This increases the width of the preceding character so that the
+spacing between that character and the following character will be
+correct if the following character is a roman character.
+.
+.if t \{\
+. nop For example, if an italic f is immediately followed by a roman
+. nop right parenthesis, then in many fonts the top right portion of
+. nop the f will overlap the top left of the right parenthesis
+. nop producing \f[I]f\f[R])\f[R], which is ugly.
+. nop Inserting
+. B \[rs]/
+. nop produces
+. ie \n(.g \f[I]f\/\f[R])\f[R]
+. el \f[I]f\|\f[R])\f[R]
+. nop and avoids this problem.
+.\}
+It is a good idea to use this escape sequence whenever an italic
+character is immediately followed by a roman character without any
+intervening space.
+.
+.TP
+.B \[rs],
+This 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.
+.
+.if t \{\
+. nop For example, inserting
+. B \[rs],
+. nop between the parenthesis and the f changes
+. nop \f[R](\f[I]f\f[R] to
+. ie \n(.g \f[R](\,\f[I]f\f[R].
+. el \f[R](\^\f[I]f\f[R].
+.\}
+It is a good idea to use this escape sequence whenever a roman
+character is immediately followed by an italic character without any
+intervening space.
+.
+.TP
+.B \[rs])
+Like
+.B \[rs]&
+except that it behaves like a character declared with the
+.B cflags
+request to be transparent for the purposes of end-of-sentence
+recognition.
+.
+.TP
+.B \[rs]~
+This produces an unbreakable space that stretches like a normal
+inter-word space when a line is adjusted.
+.
+.TP
+.B \[rs]:
+This causes the insertion of a zero-width break point.
+.
+It is equal to
+.B \[rs]%
+within a word but without insertion of a soft hyphen character.
+.
+.TP
+.B \[rs]#
+Everything up to and including the next newline is ignored.
+.
+This is interpreted in copy mode.
+.
+It is like
+.B \[rs]"
+except that
+.B \[rs]"
+does not ignore the terminating newline.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "New requests"
+.\" --------------------------------------------------------------------
+.
+.TP
+.BI .aln\ xx\ yy
+Create an alias
+.I xx
+for number register object named
+.IR yy .
+The new name and the old name will be exactly equivalent.
+.
+If
+.I yy
+is undefined, a warning of type
+.B reg
+will be generated, and the request will be ignored.
+.
+.TP
+.BI .als\ xx\ yy
+Create an alias
+.I xx
+for request, string, macro, or diversion object named
+.IR yy .
+.
+The new name and the old name will be exactly equivalent (it is
+similar to a hard rather than a soft link).
+.
+If
+.I yy
+is undefined, a warning of type
+.B mac
+will be generated, and the request will be ignored.
+.
+The
+.BR de ,
+.BR am ,
+.BR di ,
+.BR da ,
+.BR ds ,
+and
+.B as
+requests only create a new object if the name of the macro, diversion
+or string diversion is currently undefined or if it is defined to be a
+request; normally they modify the value of an existing object.
+.
+.TP
+.BI .ami\ xx\ yy
+Append to macro indirectly.
+.
+See the
+.B dei
+request below for more information.
+.
+.TP
+.BI .am1\ xx\ yy
+Similar to
+.BR .am ,
+but compatibility mode is switched off during execution.
+.
+To be more precise, a `compatibility save' token is inserted at the
+beginning of the macro addition, and a `compatibility restore' token at
+the end.
+.
+As a consequence, the requests
+.BR am ,
+.BR am1 ,
+.BR de ,
+and
+.B de1
+can be intermixed freely since the compatibility save/\:restore tokens
+only affect the macro parts defined by
+.B .am1
+and
+.BR .ds1 .
+.
+.TP
+.BI .asciify\ xx
+This request `unformats' the diversion
+.I xx
+in such a way that
+.SM ASCII
+and space characters (and some escape sequences) that were formatted
+and diverted into
+.I xx
+will be treated like ordinary input characters when
+.I xx
+is reread.
+Useful for diversions in conjunction with the
+.B .writem
+request.
+.
+It can be also used for gross hacks; for example, this
+.
+.RS
+.IP
+.ne 7v+\n(.Vu
+.ft CB
+.nf
+.Text .tr @.
+.Text .di x
+.Text @nr n 1
+.Text .br
+.Text .di
+.Text .tr @@
+.Text .asciify x
+.Text .x
+.fi
+.ft
+.RE
+.
+.IP
+will set register\~\c
+.B n
+to\~1.
+.
+Note that glyph information (font, font size, etc.) is not preserved;
+use
+.B .unformat
+instead.
+.
+.TP
+.BI .as1\ xx\ yy
+Similar to
+.BR .as ,
+but compatibility mode is switched off during expansion.
+.
+To be more precise, a `compatibility save' token is inserted at the
+beginning of the string, and a `compatibility restore' token at the end.
+.
+As a consequence, the requests
+.BR as ,
+.BR as1 ,
+.BR ds ,
+and
+.B ds1
+can be intermixed freely since the compatibility save/\:restore tokens
+only affect the (sub)strings defined by
+.B as1
+and
+.BR ds1 .
+.
+.TP
+.B .backtrace
+Print a backtrace of the input stack on stderr.
+.
+.TP
+.BI .blm\ xx
+Set the blank line macro to
+.IR xx .
+If there is a blank line macro, it will be invoked when a blank line
+is encountered instead of the usual troff behaviour.
+.
+.TP
+.BI .box\ xx
+.TQ
+.BI .boxa\ xx
+These requests are similar to the
+.B di
+and
+.B da
+requests with the exception that a partially filled line will not
+become part of the diversion (i.e., the diversion always starts with a
+new line) but restored after ending the diversion, discarding the
+partially filled line which possibly comes from the diversion.
+.
+.TP
+.B .break
+Break out of a while loop.
+.
+See also the
+.B while
+and
+.B continue
+requests.
+.
+Be sure not to confuse this with the
+.B br
+request.
+.
+.TP
+.B .brp
+This is the same as
+.BR \[rs]p .
+.
+.TP
+.BI .cflags\ n\ c1\ c2\|.\|.\|.\&
+Characters
+.IR c1 ,
+.IR c2 ,\|.\|.\|.\&
+have properties determined by
+.IR n ,
+which is ORed from the following:
+.
+.RS
+.IP 1
+The character ends sentences (initially characters
+.B .?!\&
+have this property).
+.
+.IP 2
+Lines can be broken before the character (initially no characters have
+this property); a line will not be broken at a character with this
+property unless the characters on each side both have non-zero
+hyphenation codes.
+.
+.IP 4
+Lines can be broken after the character (initially characters
+.B \-\[rs](hy\[rs](em
+have this property); a line will not be broken at a character with
+this property unless the characters on each side both have non-zero
+hyphenation codes.
+.
+.IP 8
+The character overlaps horizontally (initially characters
+.B \[rs](ul\[rs](rn\[rs](ru
+have this property).
+.
+.IP 16
+The character overlaps vertically (initially character
+.B \[rs](br
+has this property).
+.
+.IP 32
+An end-of-sentence character followed by any number of characters with
+this property will be treated as the end of a sentence if followed by
+a newline or two spaces; in other words the character is transparent
+for the purposes of end-of-sentence recognition; this is the same as
+having a zero space factor in \*[tx] (initially characters
+.B \[dq]')]*\[rs](dg\[rs](rq
+have this property).
+.RE
+.
+.TP
+.BI .char\ c\ string
+Define character
+.I c
+to be
+.IR string .
+Every time character
+.I c
+needs to be printed,
+.I string
+will be processed in a temporary environment and the result will be
+wrapped up into a single object.
+.
+Compatibility mode will be turned off and the escape character will be
+set to
+.B \[rs]
+while
+.I string
+is being processed.
+.
+Any emboldening, constant spacing or track kerning will be applied to
+this object rather than to individual characters in
+.IR string .
+.
+.IP
+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
+.B tr
+request; it can be made the leader character by the
+.B lc
+request; repeated patterns can be drawn with the character using the
+.B \[rs]l
+and
+.B \[rs]L
+escape sequences; words containing the character can be hyphenated
+correctly, if the
+.B hcode
+request is used to give the character a hyphenation code.
+.
+.IP
+There is a special anti-recursion feature: use of character within the
+character's definition will be handled like normal characters not
+defined with
+.BR char .
+.IP
+A character definition can be removed with the
+.B rchar
+request.
+.
+.TP
+.BI .chop\ xx
+Chop the last character off macro, string, or diversion
+.IR xx .
+This is useful for removing the newline from the end of diversions
+that are to be interpolated as strings.
+.
+.TP
+.BI .close\ stream
+Close the stream named
+.IR stream ;
+.I stream
+will no longer be an acceptable argument to the
+.B write
+request.
+.
+See the
+.B open
+request.
+.
+.TP
+.B .continue
+Finish the current iteration of a while loop.
+.
+See also the
+.B while
+and
+.B break
+requests.
+.
+.TP
+.BI .color\ n
+If
+.I n
+is non-zero or missing, enable colors (this is the default), otherwise
+disable them.
+.
+.TP
+.BI .cp\ n
+If
+.I n
+is non-zero or missing, enable compatibility mode, otherwise disable
+it.
+.
+In compatibility mode, long names are not recognised, and the
+incompatibilities caused by long names do not arise.
+.
+.TP
+.BI .defcolor\ xxx\ scheme\ color_components
+Define color.
+.I scheme
+can be one of the following values:
+.B rgb
+(three components),
+.B cym
+(three components),
+.B cmyk
+(four components), and
+.B gray
+or
+.B grey
+(one component).
+.
+Color components can be given either as a hexadecimal string or as
+positive decimal integers in the range 0-65535.
+.
+A hexadecimal string contains all color components concatenated; it
+must start with either
+.B #
+or
+.BR ## .
+The former specifies hex values in the range 0-255 (which are
+internally multiplied by\~257), the latter in the range 0-65535.
+.
+Examples: #FFC0CB (pink), ##ffff0000ffff (magenta).
+.
+A new scaling indicator\~\c
+.B f
+has been introduced which multiplies its value by\~65536; this makes
+it convenient to specify color components as fractions in the range 0
+to\~1.
+.
+Example:
+.
+.RS
+.IP
+.ft CB
+.Text .defcolor darkgreen rgb 0.1f 0.5f 0.2f
+.br
+.ft
+.RE
+.
+.IP
+Note that
+.B f
+is the default scaling indicator for the
+.B defcolor
+request, thus the above statement is equivalent to
+.
+.RS
+.IP
+.ft CB
+.Text .defcolor darkgreen rgb 0.1 0.5 0.2
+.br
+.ft
+.RE
+.
+.IP
+The color named
+.B default
+(which is device-specific) can't be redefined.
+.
+It is possible that the default color for
+.esc M
+and
+.esc m
+is not the same.
+.
+.TP
+.BI .dei\ xx\ yy
+Define macro indirectly.
+.
+The following example
+.
+.RS
+.IP
+.ne 2v+\n(.Vu
+.ft CB
+.nf
+.Text .ds xx aa
+.Text .ds yy bb
+.Text .dei xx yy
+.fi
+.ft
+.RE
+.
+.IP
+is equivalent to
+.
+.RS
+.IP
+.ft CB
+.Text .de aa bb
+.br
+.ft
+.RE
+.
+.TP
+.BI .de1\ xx\ yy
+Similar to
+.BR .de ,
+but compatibility mode is switched off during execution.
+.
+On entry, the current compatibility mode is saved and restored at exit.
+.
+.TP
+.BI .do\ xxx
+Interpret
+.I .xxx
+with compatibility mode disabled.
+.
+For example,
+.
+.RS
+.
+.IP
+.ft CB
+.Text .do fam T
+.br
+.ft
+.
+.P
+would have the same effect as
+.
+.IP
+.ft CB
+.Text .fam T
+.br
+.ft
+.
+.P
+except that it would work even if compatibility mode had been enabled.
+.
+Note that the previous compatibility mode is restored before any files
+sourced by
+.I xxx
+are interpreted.
+.
+.RE
+.
+.TP
+.BI .ds1\ xx\ yy
+Similar to
+.BR .ds ,
+but compatibility mode is switched off during expansion.
+.
+To be more precise, a `compatibility save' token is inserted at the
+beginning of the string, and a `compatibility restore' token at the end.
+.
+.TP
+.B .ecs
+Save current escape character.
+.
+.TP
+.B .ecr
+Restore escape character saved with
+.BR ecs .
+Without a previous call to
+.BR ecs ,
+.RB ` \[rs] '
+will be the new escape character.
+.
+.TP
+.BI .evc\ xx
+Copy the contents of environment
+.I xx
+to the current environment.
+.
+No pushing or popping of environments will be done.
+.
+.TP
+.BI .fam\ xx
+Set the current font family to
+.IR xx .
+The current font family is part of the current environment.
+If
+.I xx
+is missing, switch back to previous font family.
+.
+The value at start-up is `T'.
+.
+See the description of the
+.B sty
+request for more information on font families.
+.
+.TP
+.BI .fchar\ c\ string
+Define fallback character
+.I c
+to be
+.IR string .
+The syntax of this request is the same as the
+.B char
+request; the only difference is that a character defined with
+.B char
+hides the glyph with the same name in the current font, whereas a
+character defined with
+.B fchar
+is checked only if the particular glyph isn't found in the current font.
+.
+This test happens before checking special fonts.
+.
+.TP
+.BI .fspecial\ f\ s1\ s2\|.\|.\|.\&
+When the current font is
+.IR f ,
+fonts
+.IR s1 ,
+.IR s2 ,\|.\|.\|.\&
+will be special, that is, they will searched for characters not in
+the current font.
+.
+Any fonts specified in the
+.B special
+request will be searched after fonts specified in the
+.B fspecial
+request.
+.
+.TP
+.BI .ftr\ f\ g
+Translate font
+.I f
+to
+.IR g .
+Whenever a font named
+.I f
+is referred to in an
+.B \[rs]f
+escape sequence, or in the
+.BR ft ,
+.BR ul ,
+.BR bd ,
+.BR cs ,
+.BR tkf ,
+.BR special ,
+.BR fspecial ,
+.BR fp ,
+or
+.BR sty
+requests, font
+.I g
+will be used.
+If
+.I g
+is missing, or equal to
+.I f
+then font
+.I f
+will not be translated.
+.
+.TP
+.BI .hcode \ c1\ code1\ c2\ code2\|.\|.\|.\&
+Set the hyphenation code of character
+.I c1
+to
+.I code1
+and that of
+.I c2
+to
+.IR code2 .
+A hyphenation code must be a single input character (not a special
+character) other than a digit or a space.
+.
+Initially each lower-case letter \%a-z has a hyphenation code, which is
+itself, and each upper-case letter \%A-Z has a hyphenation code which is
+the lower-case version of itself.
+.
+See also the
+.B hpf
+request.
+.
+.TP
+.BI .hla\ lang
+Set the current hyphenation language to
+.IR lang .
+Hyphenation exceptions specified with the
+.B hw
+request and hyphenation patterns specified with the
+.B hpf
+request are both associated with the current hyphenation language.
+.
+The
+.B hla
+request is usually invoked by the
+.B troffrc
+file.
+.
+.TP
+.BI .hlm\ n
+Set the maximum number of consecutive hyphenated lines to\~\c
+.IR n .
+If
+.I n
+is negative, there is no maximum.
+.
+The default value is\~\-1.
+.
+This value is associated with the current environment.
+.
+Only lines output from an environment count towards the maximum
+associated with that environment.
+.
+Hyphens resulting from
+.B \[rs]%
+are counted; explicit hyphens are not.
+.
+.TP
+.BI .hpf\ file
+Read hyphenation patterns from
+.IR file ;
+this will be searched for in the same way that
+.IB name .tmac
+is searched for when the
+.BI \-m name
+option is specified.
+.
+It should have the same format as (simple) \*[tx] patterns files.
+.
+More specifically, the following scanning rules are implemented.
+.
+.RS
+.IP \[bu]
+A percent sign starts a comment (up to the end of the line) even if
+preceded by a backslash.
+.
+.IP \[bu]
+No support for `digraphs' like
+.BR \[rs]$ .
+.
+.IP \[bu]
+.BI ^^ xx
+.RI ( x
+is 0-9 or a-f) and
+.BI ^^ x
+(character code of\~\c
+.I x
+in the range 0-127) are recognized; other use of
+.B ^
+causes an error.
+.
+.IP \[bu]
+No macro expansion.
+.
+.IP \[bu]
+.B hpf
+checks for the expression
+.B \[rs]patterns{.\|.\|.}
+(possibly with whitespace before and after the braces).
+.
+Everything between the braces is taken as hyphenation patterns.
+.
+Consequently,
+.B {
+and
+.B }
+are not allowed in patterns.
+.
+.IP \[bu]
+Similarly,
+.B \[rs]hyphenation{.\|.\|.}
+gives a list of hyphenation exceptions.
+.
+.IP \[bu]
+.B \[rs]endinput
+is recognized also.
+.
+.IP \[bu]
+For backwards compatibility, if
+.B \[rs]patterns
+is missing, the whole file is treated as a list of hyphenation patterns
+(only recognizing the
+.BR % \~\c
+character as the start of a comment).
+.RE
+.
+.IP
+Use the
+.B hpfcode
+request to map the encoding used in hyphenation patterns files to
+.BR groff 's
+input encoding.
+.IP
+The set of hyphenation patterns is associated with the current language
+set by the
+.B hla
+request.
+.
+The
+.B hpf
+request is usually invoked by the
+.B troffrc
+file; a second call replaces the old patterns with the new ones.
+.
+.TP
+.BI .hpfa\ file
+The same as
+.B hpf
+except that the hyphenation patterns from
+.I file
+are appended to the patterns already loaded in the current language.
+.
+.TP
+.BI .hpfcode\ a\ b\ c\ d\ .\|.\|.
+After reading a hyphenation patterns file with the
+.B hpf
+or
+.B hpfa
+request, convert all characters with character code\~\c
+.I a
+in the recently read patterns to character code\~\c
+.IR b ,
+character code\~\c
+.I c
+to\~\c
+.IR d ,
+etc.
+.
+Initially, all character codes map to themselves.
+.
+The arguments of
+.B hpfcode
+must be integers in the range 0 to\~255.
+.
+Note that it is even possible to use character codes which are invalid in
+.B groff
+otherwise.
+.
+.TP
+.BI .hym\ n
+Set the
+.I hyphenation margin
+to\~\c
+.IR n :
+when the current adjustment mode is not\~\c
+.BR b ,
+the line will not be hyphenated if the line is no more than
+.I n
+short.
+.
+The default hyphenation margin is\~0.
+.
+The default scaling indicator for this request is\~\c
+.IR m .
+The hyphenation margin is associated with the current environment.
+.
+The current hyphenation margin is available in the
+.B \[rs]n[.hym]
+register.
+.
+.TP
+.BI .hys\ n
+Set the
+.I hyphenation space
+to\~\c
+.IR n :
+when the current adjustment mode is\~\c
+.B b
+don't hyphenate the line if the line can be justified by adding no
+more than
+.I n
+extra space to each word space.
+.
+The default hyphenation space is\~0.
+.
+The default scaling indicator for this request is\~\c
+.BR m .
+The hyphenation space is associated with the current environment.
+.
+The current hyphenation space is available in the
+.B \[rs]n[.hys]
+register.
+.
+.TP
+.BI .itc\ n\ macro
+Variant of
+.B .it
+for which a line interrupted with
+.B \[rs]c
+counts as one input line.
+.
+.TP
+.BI .kern\ n
+If
+.I n
+is non-zero or missing, enable pairwise kerning, otherwise disable it.
+.
+.TP
+.BI .length\ xx\ string
+Compute the length of
+.I string
+and return it in the number register
+.I xx
+(which is not necessarily defined before).
+.
+.TP
+.BI .linetabs\ n
+If
+.I n
+is non-zero or missing, enable line-tabs mode, otherwise disable it
+(which is the default).
+.
+In line-tabs mode, tab distances are computed relative to the
+(current) output line.
+.
+Otherwise they are taken relative to the input line.
+.
+For example, the following
+.
+.RS
+.IP
+.ne 6v+\n(.Vu
+.ft CB
+.nf
+.Text .ds x a\[rs]t\[rs]c
+.Text .ds y b\[rs]t\[rs]c
+.Text .ds z c
+.Text .ta 1i 3i
+.Text \[rs]*x
+.Text \[rs]*y
+.Text \[rs]*z
+.fi
+.ft
+.RE
+.
+.IP
+yields
+.
+.RS
+.IP
+a b c
+.RE
+.
+.IP
+In line-tabs mode, the same code gives
+.
+.RS
+.IP
+a b c
+.RE
+.
+.IP
+Line-tabs mode is associated with the current environment; the
+read-only number register
+.B \\[rs]n[.linetabs]
+is set to\~1 if in line-tabs mode, and 0 otherwise.
+.
+.TP
+.BI .mso\ file
+The same as the
+.B so
+request except that
+.I file
+is searched for in the same directories as macro files for the the
+.B \-m
+command line option.
+.
+If the file name to be included has the form
+.IB name .tmac
+and it isn't found,
+.B mso
+tries to include
+.BI tmac. name
+instead and vice versa.
+.
+.TP
+.BI .nop \ anything
+Execute
+.IR anything .
+This is similar to `.if\ 1'.
+.
+.TP
+.B .nroff
+Make the
+.B n
+built-in condition true and the
+.B t
+built-in condition false.
+.
+This can be reversed using the
+.B troff
+request.
+.
+.TP
+.BI .open\ stream\ filename
+Open
+.I filename
+for writing and associate the stream named
+.I stream
+with it.
+.
+See also the
+.B close
+and
+.B write
+requests.
+.
+.TP
+.BI .opena\ stream\ filename
+Like
+.BR open ,
+but if
+.I filename
+exists, append to it instead of truncating it.
+.
+.TP
+.BI .output\ string
+Emit
+.I string
+directly to the intermediate output (subject to copy-mode interpretation);
+this is similar to
+.B \[rs]!
+used at the top level.
+.
+An initial double quote in
+.I string
+is stripped off to allow initial blanks.
+.
+.TP
+.B .pnr
+Print the names and contents of all currently defined number registers
+on stderr.
+.
+.TP
+.BI .psbb \ filename
+Get the bounding box of a PostScript image
+.IR filename .
+This file must conform to Adobe's Document Structuring Conventions;
+the command looks for a
+.B \%%%BoundingBox
+comment to extract the bounding box values.
+.
+After a successful call, the coordinates (in PostScript units) of the
+lower left and upper right corner can be found in the registers
+.BR \[rs]n[llx] ,
+.BR \[rs]n[lly] ,
+.BR \[rs]n[urx] ,
+and
+.BR \[rs]n[ury] ,
+respectively.
+.
+If some error has occurred, the four registers are set to zero.
+.
+.TP
+.BI .pso \ command
+This behaves like the
+.B so
+request except that input comes from the standard output of
+.IR command .
+.
+.TP
+.B .ptr
+Print the names and positions of all traps (not including input line
+traps and diversion traps) on stderr.
+.
+Empty slots in the page trap list are printed as well, because they
+can affect the priority of subsequently planted traps.
+.
+.TP
+.BI .pvs \ \[+-]n
+Set the post-vertical line space to
+.IR n ;
+default scale indicator is\~\c
+.BR p .
+.
+This value will be added to each line after it has been output.
+.
+With no argument, the post-vertical line space is set to its previous
+value.
+.
+.IP
+The total vertical line spacing consists of four components:
+.B .vs
+and
+.B \[rs]x
+with a negative value which are applied before the line is output, and
+.B .pvs
+and
+.B \[rs]x
+with a positive value which are applied after the line is output.
+.
+.TP
+.BI .rchar\ c1\ c2\|.\|.\|.\&
+Remove the definitions of characters
+.IR c1 ,
+.IR c2 ,\|.\|.\|.
+This undoes the effect of a
+.B char
+request.
+.
+.TP
+.B .return
+Within a macro, return immediately.
+.
+No effect otherwise.
+.
+.TP
+.B .rj
+.TQ
+.BI .rj \~n
+Right justify the next
+.IR n \~\c
+input lines.
+.
+Without an argument right justify the next input line.
+.
+The number of lines to be right justified is available in the
+.B \[rs]n[.rj]
+register.
+.
+This implicitly does
+.BR .ce \~0 .
+The
+.B ce
+request implicitly does
+.BR .rj \~0 .
+.
+.TP
+.BI .rnn \ xx\ yy
+Rename number register
+.I xx
+to
+.IR yy .
+.
+.TP
+.BI .shc\ c
+Set the soft hyphen character to
+.IR c .
+If
+.I c
+is omitted, the soft hyphen character will be set to the default
+.BR \[rs](hy .
+The soft hyphen character is the 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
+.B char
+request) nor translations (specified with the
+.B tr
+request) are considered when finding the soft hyphen character.
+.
+.TP
+.BI .shift\ n
+In a macro, shift the arguments by
+.I n
+positions: argument\~\c
+.I i
+becomes argument
+.IR i \- n ;
+arguments 1 to\~\c
+.I n
+will no longer be available.
+.
+If
+.I n
+is missing, arguments will be shifted by\~1.
+.
+Shifting by negative amounts is currently undefined.
+.
+.TP
+.BI .sizes\ s1\ s2\|.\|.\|.\|sn\ [0]
+This command is similar to the
+.B sizes
+command of a
+.B DESC
+file.
+.
+It sets the available font sizes for the current font to
+.IR s1 ,
+.IR s2 ,\|.\|.\|.\|,\~ sn
+scaled points.
+.
+The list of sizes can be terminated by an optional\~\c
+.BR 0 .
+.
+Each
+.I si
+can also be a range of sizes
+.IR m - n .
+.
+Contrary to the font file command, the list can't extend over more
+than a single line.
+.
+.TP
+.BI .special\ s1\ s2\|.\|.\|.\&
+Fonts
+.IR s1 ,
+.IR s2 ,
+are special and will be searched for characters not in the current
+font.
+.
+.TP
+.BI .spreadwarn\ limit
+Make
+.B troff
+emit a warning if the additional space inserted for each space between
+words in an output line is larger or equal to
+.IR limit .
+.
+A negative value is changed to zero; no argument toggles the warning on
+and off without changing
+.IR limit .
+.
+The default scaling indicator is\~\c
+.BR m .
+.
+At startup,
+.B spreadwarn
+is deactivated, and
+.I limit
+is set to 3m.
+.
+For example,
+.B .spreadwarn\ 0.2m
+will cause a warning if
+.B troff
+must add 0.2m or more for each interword space in a line.
+.
+This request is active only if text is justified to both margins (using
+.BR .ad\ b ).
+.
+.TP
+.BI .sty\ n\ f
+Associate style\~\c
+.I f
+with font position\~\c
+.IR n .
+A font position can be associated either with a font or with a style.
+.
+The current font is the index of a font position and so is also either
+a font or a style.
+.
+When it is a style, the font that is actually used is the font the
+name of which is the concatenation of the name of the current family
+and the name of the current style.
+.
+For example, if the current font is\~1 and font position\~1 is
+associated with style\~\c
+.B R
+and the current font family is\~\c
+.BR T ,
+then font
+.BR TR
+will be used.
+.
+If the current font is not a style, then the current family is ignored.
+.
+When the requests
+.BR cs ,
+.BR bd ,
+.BR tkf ,
+.BR uf ,
+or
+.B fspecial
+are applied to a style, then they will instead be applied to the
+member of the current family corresponding to that style.
+.
+The default family can be set with the
+.B \-f
+option.
+.
+The
+.B styles
+command in the
+.SM DESC
+file controls which font positions (if any) are initially associated
+with styles rather than fonts.
+.
+.TP
+.BI .substring\ xx\ n1\ [ n2 ]
+Replace the string named
+.I xx
+with the substring defined by the indices
+.I n1
+and
+.IR n2 .
+The first character in the string has index\~0.
+.
+If
+.I n2
+is omitted, it is taken to be equal to the string's length.
+.
+If the index value
+.I n1
+or
+.I n2
+is negative, it will be counted from the end of the string,
+going backwards:
+.
+The last character has index\~-1, the character before the last
+character has index\~-2, etc.
+.
+.TP
+.BI .tkf\ f\ s1\ n1\ s2\ n2
+Enable track kerning for font
+.IR f .
+When the current font is
+.I f
+the width of every character will be increased by an amount between
+.I n1
+and
+.IR n2 ;
+when the current point size is less than or equal to
+.I s1
+the width will be increased by
+.IR n1 ;
+when it is greater than or equal to
+.I s2
+the width will be increased by
+.IR n2 ;
+when the point size is greater than or equal to
+.I s1
+and less than or equal to
+.I s2
+the increase in width is a linear function of the point size.
+.
+.TP
+.BI .tm1\ string
+Similar to the
+.B tm
+request,
+.I string
+is read in copy mode and written on the standard error, but an initial
+double quote in
+.I string
+is stripped off to allow initial blanks.
+.
+.TP
+.BI .tmc\ string
+Similar to
+.B tm1
+but without writing a final newline.
+.
+.TP
+.BI .trf\ filename
+Transparently output the contents of file
+.IR filename .
+Each line is output as if preceded by
+.BR \[rs]! ;
+however, the lines are not subject to copy-mode interpretation.
+.
+If the file does not end with a newline, then a newline will be added.
+.
+For example, you can define a macro\~\c
+.I x
+containing the contents of file\~\c
+.IR f ,
+using
+.
+.RS
+.IP
+.ne 2v+\n(.Vu
+.ft CB
+.nf
+.Text .di x
+.Text .trf f
+.Text .di
+.fi
+.ft
+.RE
+.
+.IP
+Unlike with the
+.B cf
+request, the file cannot contain characters such as
+.SM NUL
+that are not legal troff input characters.
+.
+.TP
+.BI .trin\ abcd
+This is the same as the
+.B tr
+request except that the
+.B asciify
+request will use the character code (if any) before the character
+translation.
+.
+Example:
+.
+.RS
+.IP
+.nf
+.ft CB
+.Text .trin ax
+.Text .di xxx
+.Text a
+.Text .br
+.Text .di
+.Text .xxx
+.Text .trin aa
+.Text .asciify xxx
+.Text .xxx
+.fi
+.ft
+.RE
+.
+.IP
+The result is
+.BR x\ a .
+.
+Using
+.BR tr ,
+the result would be
+.BR x\ x .
+.
+.TP
+.BI .trnt\ abcd
+This is the same as the
+.B tr
+request except that the translations do not apply to text that is
+transparently throughput into a diversion with
+.BR \[rs]! .
+For example,
+.
+.RS
+.IP
+.nf
+.ft CB
+.Text .tr ab
+.Text .di x
+.Text \[rs]!.tm a
+.Text .di
+.Text .x
+.fi
+.ft
+.RE
+.
+.IP
+will print\~\c
+.BR b ;
+if
+.B trnt
+is used instead of
+.B tr
+it will print\~\c
+.BR a .
+.RE
+.
+.TP
+.B .troff
+Make the
+.B n
+built-in condition false, and the
+.B t
+built-in condition true.
+.
+This undoes the effect of the
+.B nroff
+request.
+.
+.TP
+.BI .unformat\ xx
+This request `unformats' the diversion
+.IR xx .
+Contrary to the
+.B .asciify
+request, which tries to convert formatted elements of the diversion
+back to input tokens as much as possible,
+.B .unformat
+will only handle tabs and spaces between words (usually caused by
+spaces or newlines in the input) specially.
+.
+The former are treated as if they were input tokens, and the latter
+are stretchable again.
+.
+Note that the vertical size of lines is not preserved.
+.
+Glyph information (font, font size, space width, etc.) is retained.
+.
+Useful in conjunction with the
+.B .box
+and
+.B .boxa
+requests.
+.
+.TP
+.BI .vpt\ n
+Enable vertical position traps if
+.I n
+is non-zero, disable them otherwise.
+.
+Vertical position traps are traps set by the
+.B wh
+or
+.B dt
+requests.
+.
+Traps set by the
+.B it
+request are not vertical position traps.
+.
+The parameter that controls whether vertical position traps are
+enabled is global.
+.
+Initially vertical position traps are enabled.
+.
+.TP
+.BI .warn\ n
+Control warnings.
+.I n
+is the sum of the numbers associated with each warning that is to be
+enabled; all other warnings will be disabled.
+.
+The number associated with each warning is listed in
+.BR @g@troff (@MAN1EXT@).
+.
+For example,
+.B .warn\~0
+will disable all warnings, and
+.B .warn\~1
+will disable all warnings except that about missing characters.
+.
+If
+.I n
+is not given, all warnings will be enabled.
+.
+.TP
+.BI .warnscale\ si
+Set the scaling indicator used in warnings to
+.IR si .
+.
+Valid values for
+.I si
+are
+.BR u ,
+.BR i ,
+.BR c ,
+.BR p ,
+and
+.BR P .
+.
+At startup, it is set to\~\c
+.BR i .
+.
+.TP
+.BI .while \ c\ anything
+While condition\~\c
+.I c
+is true, accept
+.I anything
+as input;
+.IR c \~\c
+can be any condition acceptable to an
+.B if
+request;
+.I anything
+can comprise multiple lines if the first line starts with
+.B \[rs]{
+and the last line ends with
+.BR \[rs]} .
+See also the
+.B break
+and
+.B continue
+requests.
+.
+.TP
+.BI .write\ stream\ anything
+Write
+.I anything
+to the stream named
+.IR stream .
+.I stream
+must previously have been the subject of an
+.B open
+request.
+.I anything
+is read in copy mode;
+a leading\~\c
+.B \[dq]
+will be stripped.
+.
+.TP
+.BI .writec\ stream\ anything
+Similar to
+.B write
+but without writing a final newline.
+.
+.TP
+.BI .writem\ stream\ xx
+Write the contents of the macro or string
+.I xx
+to the stream named
+.IR stream .
+.I stream
+must previously have been the subject of an
+.B open
+request.
+.I xx
+is read in copy mode.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Extended requests"
+.\" --------------------------------------------------------------------
+.
+.TP
+.BI .cf\ filename
+When used in a diversion, this will embed in the diversion an object
+which, when reread, will cause the contents of
+.I filename
+to be transparently copied through to the output.
+.
+In UNIX troff, the contents of
+.I filename
+is immediately copied through to the output regardless of whether
+there is a current diversion; this behaviour is so anomalous that it
+must be considered a bug.
+.
+.TP
+.BI .ev\ xx
+If
+.I xx
+is not a number, this will switch to a named environment called
+.IR xx .
+The environment should be popped with a matching
+.B ev
+request without any arguments, just as for numbered environments.
+.
+There is no limit on the number of named environments; they will be
+created the first time that they are referenced.
+.
+.TP
+.BI .ss\ m\ n
+When two arguments are given to the
+.B ss
+request, the second argument gives the
+.IR "sentence space size" .
+If the second argument is not given, the sentence space size
+will be the same as the word space size.
+.
+Like the word space size, the sentence space is in units of
+one twelfth of the spacewidth parameter for the current font.
+.
+Initially both the word space size and the sentence
+space size are\~12.
+.
+Contrary to UNIX troff, GNU troff handles this request in nroff mode
+also; a given value is then rounded down to the nearest multiple
+of\~12.
+.
+The sentence space size is used in two circumstances.
+.
+If the end of a sentence occurs at the end of a line in fill mode,
+then both an inter-word space and a sentence space will be added; if
+two spaces follow the end of a sentence in the middle of a line, then
+the second space will be a sentence space.
+.
+Note that the behaviour of UNIX troff will be exactly that exhibited
+by GNU troff if a second argument is never given to the
+.B ss
+request.
+.
+In GNU troff, as in UNIX troff, you should always follow a sentence
+with either a newline or two spaces.
+.
+.TP
+.BI .ta\ n1\ n2\|.\|.\|.nn \ T\ r1\ r2\|.\|.\|.\|rn
+Set tabs at positions
+.IR n1 ,
+.IR n2 ,\|.\|.\|.\|,
+.I nn
+and then set tabs at
+.IR nn + r1 ,
+.IR nn + r2 ,\|.\|.\|.\|,
+.IR nn + rn
+and then at
+.IR nn + rn + r1 ,
+.IR nn + rn + r2 ,\|.\|.\|.\|,
+.IR nn + rn + rn ,
+and so on.
+For example,
+.
+.RS
+.IP
+.ft CB
+.Text .ta T .5i
+.br
+.ft
+.
+.P
+will set tabs every half an inch.
+.RE
+.
+.
+.\" --------------------------------------------------------------------
+.SS "New number registers"
+.\" --------------------------------------------------------------------
+.
+The following read-only registers are available:
+.
+.TP
+.B \[rs]n[.C]
+1\~if compatibility mode is in effect, 0\~otherwise.
+.
+.TP
+.B \[rs]n[.cdp]
+The depth of the last character added to the current environment.
+.
+It is positive if the character extends below the baseline.
+.
+.TP
+.B \[rs]n[.ce]
+The number of lines remaining to be centered, as set by the
+.B ce
+request.
+.
+.TP
+.B \[rs]n[.cht]
+The height of the last character added to the current environment.
+.
+It is positive if the character extends above the baseline.
+.
+.TP
+.B \[rs]n[.color]
+1\~if colors are enabled, 0\~otherwise.
+.
+.TP
+.B \[rs]n[.csk]
+The skew of the last character added to the current environment.
+.
+The
+.I 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.
+.
+.TP
+.B \[rs]n[.ev]
+The name or number of the current environment.
+.
+This is a string-valued register.
+.
+.TP
+.B \[rs]n[.fam]
+The current font family.
+.
+This is a string-valued register.
+.
+.TP
+.B \[rs]n[.fn]
+The current (internal) real font name.
+.
+This is a string-valued register.
+.
+If the current font is a style, the value of
+.B \[rs]n[.fn]
+is the proper concatenation of family and style name.
+.
+.TP
+.B \[rs]n[.fp]
+The number of the next free font position.
+.
+.TP
+.B \[rs]n[.g]
+Always\~1.
+.
+Macros should use this to determine whether they are running under GNU
+troff.
+.
+.TP
+.B \[rs]n[.hla]
+The current hyphenation language as set by the
+.B hla
+request.
+.
+.TP
+.B \[rs]n[.hlc]
+The number of immediately preceding consecutive hyphenated lines.
+.
+.TP
+.B \[rs]n[.hlm]
+The maximum allowed number of consecutive hyphenated lines, as set by
+the
+.B hlm
+request.
+.
+.TP
+.B \[rs]n[.hy]
+The current hyphenation flags (as set by the
+.B hy
+request).
+.
+.TP
+.B \[rs]n[.hym]
+The current hyphenation margin (as set by the
+.B hym
+request).
+.
+.TP
+.B \[rs]n[.hys]
+The current hyphenation space (as set by the
+.B hys
+request).
+.
+.TP
+.B \[rs]n[.in]
+The indent that applies to the current output line.
+.
+.TP
+.B \[rs]n[.int]
+Set to a positive value if last output line is interrupted (i.e., if
+it contains
+.IR \[rs]c ).
+.
+.TP
+.B \[rs]n[.kern]
+1\~if pairwise kerning is enabled, 0\~otherwise.
+.
+.TP
+.B \[rs]n[.lg]
+The current ligature mode (as set by the
+.B lg
+request).
+.
+.TP
+.B \[rs]n[.linetabs]
+The current line-tabs mode (as set by the
+.B linetabs
+request).
+.
+.TP
+.B \[rs]n[.ll]
+The line length that applies to the current output line.
+.
+.TP
+.B \[rs]n[.lt]
+The title length as set by the
+.B lt
+request.
+.
+.TP
+.B \[rs]n[.ne]
+The amount of space that was needed in the last
+.B ne
+request that caused a trap to be sprung.
+.
+Useful in conjunction with the
+.B \[rs]n[.trunc]
+register.
+.
+.TP
+.B \[rs]n[.ns]
+1\~if no-space mode is active, 0\~otherwise.
+.
+.TP
+.B \[rs]n[.pn]
+The number of the next page, either the value set by a
+.B pn
+request, or the number of the current page plus\~1.
+.
+.TP
+.B \[rs]n[.ps]
+The current pointsize in scaled points.
+.
+.TP
+.B \[rs]n[.psr]
+The last-requested pointsize in scaled points.
+.
+.TP
+.B \[rs]n[.pvs]
+The current post-vertical line space as set with the
+.B pvs
+request.
+.
+.TP
+.B \[rs]n[.rj]
+The number of lines to be right-justified as set by the
+.B rj
+request.
+.
+.TP
+.B \[rs]n[.sr]
+The last requested pointsize in points as a decimal fraction.
+.
+This is a string-valued register.
+.
+.TP
+.B \[rs]n[.ss]
+.TQ
+.B \[rs]n[.sss]
+These give the values of the parameters set by the first and second
+arguments of the
+.B ss
+request.
+.
+.TP
+.B \[rs]n[.tabs]
+A string representation of the current tab settings suitable for use
+as an argument to the
+.B ta
+request.
+.
+.TP
+.B \[rs]n[.trunc]
+The amount of vertical space truncated by the most recently sprung
+vertical position trap, or, if the trap was sprung by a
+.B ne
+request, minus the amount of vertical motion produced by the
+.B ne
+request.
+.
+In other words, at the point a trap is sprung, it represents the
+difference of what the vertical position would have been but for the
+trap, and what the vertical position actually is.
+.
+Useful in conjunction with the
+.B \[rs]n[.ne]
+register.
+.
+.TP
+.B \[rs]n[.vpt]
+1\~if vertical position traps are enabled, 0\~otherwise.
+.
+.TP
+.B \[rs]n[.warn]
+The sum of the numbers associated with each of the currently enabled
+warnings.
+.
+The number associated with each warning is listed in
+.BR @g@troff (@MAN1EXT@).
+.
+.TP
+.B \[rs]n[.x]
+The major version number.
+.
+For example, if the version number is 1.03, then
+.B \[rs]n[.x]
+will contain\~1.
+.
+.TP
+.B \[rs]n[.y]
+The minor version number.
+.
+For example, if the version number is 1.03, then
+.B \[rs]n[.y]
+will contain\~03.
+.
+.TP
+.B \[rs]n[.Y]
+The revision number of groff.
+.
+.TP
+.B \[rs]n[llx]
+.TQ
+.B \[rs]n[lly]
+.TQ
+.B \[rs]n[urx]
+.TQ
+.B \[rs]n[ury]
+These four registers are set by the
+.B .psbb
+request and contain the bounding box values (in PostScript units) of a
+given PostScript image.
+.
+.P
+The following read/write registers are set by the
+.B \[rs]w
+escape sequence:
+.
+.TP
+.B \[rs]n[rst]
+.TQ
+.B \[rs]n[rsb]
+Like the
+.B st
+and
+.B sb
+registers, but take account of the heights and depths of characters.
+.
+.TP
+.B \[rs]n[ssc]
+The amount of horizontal space (possibly negative) that should be
+added to the last character before a subscript.
+.
+.TP
+.B \[rs]n[skw]
+How far to right of the center of the last character in the
+.B \[rs]w
+argument, the center of an accent from a roman font should be placed
+over that character.
+.
+.P
+Other available read/write number registers are:
+.
+.TP
+.B \[rs]n[c.]
+The current input line number.
+.B \[rs]n[.c]
+is a read-only alias to this register.
+.
+.TP
+.B \[rs]n[hours]
+The number of hours past midnight.
+.
+Initialized at start-up.
+.
+.TP
+.B \[rs]n[hp]
+The current horizontal position at input line.
+.
+.TP
+.B \[rs]n[minutes]
+The number of minutes after the hour.
+.
+Initialized at start-up.
+.
+.TP
+.B \[rs]n[seconds]
+The number of seconds after the minute.
+.
+Initialized at start-up.
+.
+.TP
+.B \[rs]n[systat]
+The return value of the system() function executed by the last
+.B sy
+request.
+.
+.TP
+.B \[rs]n[slimit]
+If greater than\~0, the maximum number of objects on the input stack.
+.
+If less than or equal to\~0, there is no limit on the number of
+objects on the input stack.
+.
+With no limit, recursion can continue until virtual memory is
+exhausted.
+.
+.TP
+.B \[rs]n[year]
+The current year.
+.
+Note that the traditional
+.B troff
+number register
+.B \[rs]n[yr]
+is the current year minus 1900.
+.
+.
+.\" --------------------------------------------------------------------
+.SS Miscellaneous
+.\" --------------------------------------------------------------------
+.
+.B @g@troff
+predefines a single (read/write) string-based register,
+.BR \[rs]*(.T ,
+which contains the argument given to the
+.B -T
+command line option, namely the current output device (for example,
+.I latin1
+or
+.IR ascii ).
+Note that this is not the same as the (read-only) number register
+.B \[rs]n[.T]
+which is defined to be\~1 if
+.B troff
+is called with the
+.B -T
+command line option, and zero otherwise.
+.
+This behaviour is different to UNIX troff.
+.
+.P
+Fonts not listed in the
+.SM DESC
+file are automatically mounted on the next available font position
+when they are referenced.
+.
+If a font is to be mounted explicitly with the
+.B fp
+request on an unused font position, it should be mounted on the first
+unused font position, which can be found in the
+.B \[rs]n[.fp]
+register; although
+.B troff
+does not enforce this strictly, it will not allow a font to be mounted
+at a position whose number is much greater than that of any currently
+used position.
+.
+.P
+Interpolating a string does not hide existing macro arguments.
+.
+Thus in a macro, a more efficient way of doing
+.
+.IP
+.BI . xx\ \[rs]\[rs]$@
+.P
+is
+.
+.IP
+.BI \[rs]\[rs]*[ xx ]\[rs]\[rs]
+.
+.P
+If the font description file contains pairwise kerning information,
+characters from that font will be kerned.
+.
+Kerning between two characters can be inhibited by placing a
+.B \[rs]&
+between them.
+.
+.P
+In a string comparison in a condition, characters that appear at
+different input levels to the first delimiter character will not be
+recognised as the second or third delimiters.
+.
+This applies also to the
+.B tl
+request.
+.
+In a
+.B \[rs]w
+escape sequence, a character that appears at a different input level
+to the starting delimiter character will not be recognised as the
+closing delimiter character.
+.
+The same is true for
+.BR \[rs]A ,
+.BR \[rs]b ,
+.BR \[rs]B ,
+.BR \[rs]C ,
+.BR \[rs]l ,
+.BR \[rs]L ,
+.BR \[rs]o ,
+.BR \[rs]X ,
+and
+.BR \[rs]Z .
+.
+When decoding a macro or string argument that is delimited by double
+quotes, a character that appears at a different input level to the starting
+delimiter character will not be recognised as the closing delimiter
+character.
+.
+The implementation of
+.B \[rs]$@
+ensures that the double quotes surrounding an argument will appear the
+same input level, which will be different to the input level of the
+argument itself.
+.
+In a long escape name
+.B ]
+will not be recognized as a closing delimiter except when it occurs at
+the same input level as the opening
+.BR ] .
+.
+In compatibility mode, no attention is paid to the input-level.
+.
+.P
+There are some new types of condition:
+.
+.TP
+.BI .if\ r xxx
+True if there is a number register named
+.IR xxx .
+.
+.TP
+.BI .if\ d xxx
+True if there is a string, macro, diversion, or request named
+.IR xxx .
+.
+.TP
+.BI .if\ m xxx
+True if there is a color named
+.IR xxx .
+.
+.TP
+.BI .if\ c ch
+True if there is a character
+.IR ch
+available;
+.I ch
+is either an
+.SM ASCII
+character or a special character
+.BI \[rs]( xx
+or
+.BI \[rs][ xxx ]\f[R];
+the condition will also be true if
+.I ch
+has been defined by the
+.B char
+request.
+.
+.P
+The
+.B tr
+request can now map characters onto
+.BR \[rs]~ .
+.
+.P
+It is now possible to have whitespace between the first and second dot
+(or the name of the ending macro) to end a macro definition.
+.
+Example:
+.
+.IP
+.ne 6v+\n(.Vu
+.ft CB
+.nf
+.Text .de foo
+.Text . nop Hello, I'm `foo'.
+.Text . nop I will now define `bar'.
+.Text . de bar
+.Text . nop Hello, I'm `bar'.
+.Text . .
+.Text . nop Done.
+.Text ..
+.Text .foo
+.Text .bar
+.fi
+.
+.
+.\" --------------------------------------------------------------------
+.SH "INTERMEDIATE OUTPUT FORMAT"
+.\" --------------------------------------------------------------------
+.
+This section describes the format output by GNU troff.
+.
+The output format used by GNU troff is very similar to that used
+by Unix device-independent troff.
+.
+Only the differences are documented here.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Units"
+.\" --------------------------------------------------------------------
+.
+The argument to the
+.B s
+command is in scaled points (units of
+.RI points/ n ,
+where
+.I n
+is the argument to the
+.B sizescale
+command in the DESC file).
+.
+The argument to the
+.B x\ Height
+command is also in scaled points.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Text Commands"
+.\" --------------------------------------------------------------------
+.
+.TP
+.BI N n
+Print character with index\~\c
+.I n
+(a non-negative integer) of the current font.
+.
+.P
+If the
+.B tcommand
+line is present in the DESC file, troff will use the following two
+commands.
+.
+.TP
+.BI t xxx
+.I xxx
+is any sequence of characters terminated by a space or a newline; the
+first character should be printed at the current position, the current
+horizontal position should be increased by the width of the first
+character, and so on for each character.
+.
+The width of the 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.
+.
+.TP
+.BI u n\ xxx
+This is same as the
+.B t
+command except that after printing each character, the current
+horizontal position is increased by the sum of the width of that
+character and
+.IR n .
+.
+.P
+Note that single characters can have the eighth bit set, as can the
+names of fonts and special characters.
+.
+.P
+The names of characters and fonts can be of arbitrary length; drivers
+should not assume that they will be only two characters long.
+.
+.P
+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.
+.
+.P
+For color support, some new commands have been added:
+.
+.TP
+.Text \f[B]mc \f[I]cyan magenta yellow\f[R]
+.TQ
+.Text \f[B]md\f[R]
+.TQ
+.Text \f[B]mg \f[I]gray\f[R]
+.TQ
+.Text \f[B]mk \f[I]cyan magenta yellow black\f[R]
+.TQ
+.Text \f[B]mr \f[I]red green blue\f[R]
+Set the color components of the current drawing color, using various
+color schemes.
+.
+.B md
+resets the drawing color to the default value.
+.
+The arguments are integers in the range 0 to 65536.
+.
+.P
+The
+.B x
+device control command has been extended.
+.
+.TP
+.Text \f[B]x u \f[I]n\f[R]
+If
+.I n
+is\~1, start underlining of spaces.
+.
+If
+.I n
+is\~0, stop underlining of spaces.
+.
+This is needed for the
+.B cu
+request in nroff mode and is ignored otherwise.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Drawing Commands"
+.\" --------------------------------------------------------------------
+.
+The
+.B D
+drawing command has been extended.
+.
+These extensions will not be used by GNU pic if the
+.B \-n
+option is given.
+.
+.TP
+.Text \f[B]Df \f[I]n\f[R]\*[ic]\[rs]n
+Set the shade of gray to be used for filling solid objects to
+.IR n ;
+.I n
+must be an integer between 0 and 1000, where 0 corresponds solid white
+and 1000 to solid black, and values in between correspond to
+intermediate shades of gray.
+.
+This applies only to solid circles, solid ellipses and solid
+polygons.
+.
+By default, a level of 1000 will be used.
+.
+Whatever color a solid object has, it should completely obscure
+everything beneath it.
+.
+A value greater than 1000 or less than 0 can also be used: this means
+fill with the shade of gray that is currently being used for lines and
+text.
+.
+Normally this will be black, but some drivers may provide a way of
+changing this.
+.
+.TP
+.Text \f[B]DC \f[I]d\f[R]\*[ic]\[rs]n
+Draw a solid circle with a diameter of
+.I d
+with the leftmost point at the current position.
+.
+.TP
+.Text \f[B]DE \f[I]dx dy\f[R]\*[ic]\[rs]n
+Draw a solid ellipse with a horizontal diameter of
+.I dx
+and a vertical diameter of
+.I dy
+with the leftmost point at the current position.
+.EQ
+delim $$
+.EN
+.
+.TP
+.Text \f[B]Dp\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n
+Draw a polygon with, for $i = 1 ,..., n+1$, the
+.IR i -th
+vertex at the current position
+.
+$+ sum from j=1 to i-1 ( dx sub j , dy sub j )$.
+.
+At the moment, GNU pic only uses this command to generate triangles
+and rectangles.
+.
+.TP
+.Text \f[B]DP\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n
+.
+Like
+.B Dp
+but draw a solid rather than outlined polygon.
+.
+.TP
+.Text \f[B]Dt \f[I]n\f[R]\*[ic]\[rs]n
+Set the current line thickness to
+.I n
+machine units.
+.
+Traditionally Unix troff drivers use a line thickness proportional to
+the current point size; drivers should continue to do this if no
+.B Dt
+command has been given, or if a
+.B Dt
+command has been given with a negative value of
+.IR n .
+A zero value of
+.I n
+selects the smallest available line thickness.
+.
+.P
+A difficulty arises in how the current position should be changed after
+the execution of these commands.
+.
+This is not of great importance since the code generated by GNU pic
+does not depend on this.
+.
+Given a drawing command of the form
+.IP
+\f[B]\[rs]D\[fm]\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\[fm]
+.
+.P
+where
+.I c
+is not one of
+.BR c ,
+.BR e ,
+.BR l ,
+.BR a ,
+or
+.BR ~ ,
+Unix troff will treat each of the $x sub i$ as a horizontal quantity,
+and each of the $y sub i$ as a vertical quantity and will assume that
+the width of the drawn object is $sum from i=1 to n x sub i$,
+and that the height is $sum from i=1 to n y sub i$.
+.
+(The assumption about the height can be seen by examining the
+.B st
+and
+.B sb
+registers after using such a
+.B D
+command in a \[rs]w escape sequence).
+.
+This rule also holds for all the original drawing commands with the
+exception of
+.BR De .
+For the sake of compatibility GNU troff also follows this rule, even
+though it produces an ugly result in the case of the
+.BR Dt ,
+and, to a lesser extent,
+.B DE
+commands.
+.
+Thus after executing a
+.B D
+command of the form
+.IP
+\f[B]D\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ \c
+$x sub n$ $y sub n$\[rs]n
+.
+.P
+the current position should be increased by
+.
+$( sum from i=1 to n x sub i , sum from i=1 to n y sub i )$.
+.
+.P
+Another set of extensions is
+.
+.TP
+.Text \f[B]DFc \f[I]cyan magenta yellow\f[R]\*[ic]\[rs]n
+.TQ
+.Text \f[B]DFd\f[R]\*[ic]\[rs]n
+.TQ
+.Text \f[B]DFg \f[I]gray\f[R]\*[ic]\[rs]n
+.TQ
+.Text \f[B]DFk \f[I]cyan magenta yellow black\f[R]\*[ic]\[rs]n
+.TQ
+.Text \f[B]DFr \f[I]red green blue\f[R]\*[ic]\[rs]n
+Set the color components of the filling color similar to the
+.B m
+commands above.
+.
+.P
+Note that
+.B Df
+is now mapped onto
+.BR DFg .
+The current position isn't changed by those colour commands.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Device Control Commands"
+.\" --------------------------------------------------------------------
+.
+There is a continuation convention which permits the argument to the
+.B x\ X
+command to contain newlines: when outputting the argument to the
+.B x\ X
+command, GNU troff will follow each newline in the argument with a
+.B +
+character (as usual, it will terminate the entire argument with a
+newline); thus if the line after the line containing the
+.B x\ X
+command starts with
+.BR + ,
+then the newline ending the line containing the
+.B x\ X
+command should be treated as part of the argument to the
+.B x\ X
+command, the
+.B +
+should be ignored, and the part of the line following the
+.B +
+should be treated like the part of the line following the
+.B x\ X
+command.
+.
+.P
+The first three output commands are guaranteed to be:
+.IP
+.BI x\ T\ device
+.br
+.BI x\ res\ n\ h\ v
+.br
+.B x init
+.
+.
+.\" --------------------------------------------------------------------
+.SH INCOMPATIBILITIES
+.\" --------------------------------------------------------------------
+.
+In spite of the many extensions, groff has retained compatibility to
+classical troff to a large degree.
+.
+For the cases where the extensions lead to collisions, a special
+compatibility mode with the restricted, old functionality was created
+for groff.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Groff Language"
+.\" --------------------------------------------------------------------
+.
+.I groff
+provides a
+.B compatibility mode
+that allows to process roff code written for classical
+.troff
+or for other implementations of roff in a consistent way.
+.
+.P
+Compatibility mode can be turned on with the
+.option \-C
+command line option, and turned on or off with the
+.request .cp
+request.
+.
+The number register
+.esc n(.C
+is\~1 if compatibility mode is on, 0\~otherwise.
+.
+.P
+This became necessary because the GNU concept for long names causes
+some incompatibilities.
+.I Classical troff
+interprets
+.IP
+.request .dsabcd
+.
+.P
+as defining a string
+.B ab
+with contents
+.BR cd .
+In
+.IR groff
+mode, this will be considered as a call of a macro named
+.request dsabcd .
+.
+.P
+Also
+.I classical troff
+interprets
+.esc *[
+or
+.esc n[
+as references to a string or number register called
+.request [
+while
+.I groff
+takes this as the start of a long name.
+.
+.P
+In
+.IR "compatibility mode" ,
+groff interprets these things in the traditional way; so long
+names are not recognized.
+.
+.P
+On the other hand, groff in
+.I GNU native mode
+does not allow to use the single-character escapes
+.esc \[rs]
+(backslash),
+.esc |
+(vertical bar),
+.esc ^
+(caret),
+.esc &
+(ampersand),
+.esc {
+(opening brace),
+.esc }
+(closing brace),
+.squoted "\[rs]\ "
+(space),
+.esc '
+(single quote),
+.esc `
+(backquote),
+.esc \-
+(minus),
+.esc _
+(underline),
+.esc !
+(bang),
+.esc %
+(percent),
+and
+.esc c
+(character c) in names of strings, macros, diversions, number
+registers, fonts or environments, whereas
+.I classical troff
+does.
+.
+.P
+The
+.esc A
+escape sequence can be helpful in avoiding these escape sequences in
+names.
+.
+.P
+Fractional pointsizes cause one noteworthy incompatibility.
+.
+In
+.I classical
+.IR troff ,
+the
+.request ps
+request ignores scale indicators and so
+.RS
+.P
+.B .ps\~10u
+.RE
+.
+.P
+will set the pointsize to 10\~points, whereas in groff native mode the
+pointsize will be set to 10\~scaled points.
+.
+.P
+In
+.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.
+.
+.P
+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.
+.
+.P
+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.
+.
+.P
+.RS
+.nf
+.ft CB
+.Text .di x
+.Text \[rs]\[rs]\[rs]\[rs]
+.Text .br
+.Text .di
+.Text .x
+.ft
+.fi
+.RE
+.
+.P
+In
+.I GNU mode
+this will be printed as
+.esc \[rs] .
+So each pair of input backslashes
+.squoted \[rs]\[rs]
+is turned into a single output backslash
+.squoted \[rs]
+and the resulting output backslashes are not interpreted as escape
+characters when they are reread.
+.
+.P
+.I Classical troff
+would interpret them as escape characters when they were reread and
+would end up printing a single backslash
+.squoted \[rs] .
+.
+.P
+In GNU, the correct way to get a printable version of the backslash
+character
+.squoted \[rs]
+is the
+.esc (rs
+escape sequence, but classical troff does not provide a clean feature
+for getting a non-syntactical backslash.
+.
+A close method is the printable version of the current escape
+character using the
+.esc e
+escape sequence; this works if the current escape character is not
+redefined.
+.
+It works in both GNU mode and compatibility mode, while dirty tricks
+like specifying a sequence of multiple backslashes do not work
+reliably; for the different handling in diversions, macro definitions,
+or text mode quickly leads to a confusion about the necessary number of
+backslashes.
+.
+.P
+To store an escape sequence in a diversion that will be interpreted
+when the diversion is reread, either the traditional
+.esc !
+transparent output facility or the
+new
+.esc ?
+escape sequence can be used.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Intermediate Output"
+.\" --------------------------------------------------------------------
+.
+The groff intermediate output format is in a state of evolution.
+.
+So far it has some incompatibilities, but it is intended to establish
+a full compatibility to the classical troff output format.
+.
+Actually the following incompatibilities exist:
+.
+.Topic
+The positioning after the drawing of the polygons conflicts with the
+classical definition.
+.
+.Topic
+The intermediate output cannot be rescaled to other devices as
+classical "device-independent" troff did.
+.
+.
+.\" --------------------------------------------------------------------
+.SH AUTHORS
+.\" --------------------------------------------------------------------
+.
+Copyright (C) 1989, 2001, 2002 Free Software Foundation, Inc.
+.
+.P
+This document is distributed under the terms of the FDL (GNU Free
+Documentation License) version 1.1 or later.
+.
+You should have received a copy of the FDL on your system, it is also
+available on-line at the
+.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
+.
+This document was written by James Clark, with modifications by
+.MTO wl@gnu.org "Werner Lemberg"
+and
+.MTO bwarken@mayn.de "Bernd Warken" .
+.
+.P
+This document is part of
+.IR groff ,
+the GNU roff distribution.
+.
+Formerly, the contents of this document was kept in the manual
+page
+.BR @g@troff (@MAN1EXT@).
+Only the parts dealing with the language aspects of the different
+.I roff
+systems were carried over into this document.
+.
+The
+.I troff
+command line options and warnings are still documented in
+.BR @g@troff (@MAN1EXT@).
+.
+.\" --------------------------------------------------------------------
+.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+.
+The
+.I groff info
+.IR file ,
+cf.\&
+.BR info (1)
+presents all groff documentation within a single document.
+.
+.TP
+.BR groff (@MAN1EXT@)
+A list of all documentation around
+.IR groff .
+.
+.TP
+.BR groff (@MAN7EXT@)
+A description of the
+.I groff
+language, including a short, but complete reference of all predefined
+requests, registers, and escapes of plain
+.IR groff .
+From the command line, this is called using
+.
+.IP
+.ShellCommand man\~7\~groff
+.
+.TP
+.BR roff (@MAN7EXT@)
+A survey of
+.I roff
+systems, including pointers to further historical documentation.
+.
+.TP
+.RI [ CSTR\~#54\/ ]
+The
+.I Nroff/\:Troff User's Manual
+by
+.I J.\& F.\& Osanna
+of 1976 in the revision of
+.I Brian Kernighan
+of 1992, being the
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz \
+ "classical troff documentation" .
+.
+.
+.\" --------------------------------------------------------------------
+.\" Emacs variables
+.\" --------------------------------------------------------------------
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff --git a/contrib/groff/man/groff_font.man b/contrib/groff/man/groff_font.man
index 17821b8..07fe520 100644
--- a/contrib/groff/man/groff_font.man
+++ b/contrib/groff/man/groff_font.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1989-1995, 2001 Free Software Foundation, Inc.
+Copyright (C) 1989-1995, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -16,29 +16,37 @@ 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 GROFF_FONT @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
+.
+.
.SH NAME
groff_font \- format of groff device and font description files
+.
+.
.SH DESCRIPTION
The groff font format is roughly a superset of the ditroff
font format.
-Unlike the ditroff font format, there is no associated binary
-format.
+.
The font files for device
.I name
are stored in a directory
.BI dev name.
+.
There are two types of file: a
device description file called
.B DESC
@@ -46,131 +54,243 @@ and for each font
.I F
a font file called
.IR F .
+.
These are text files;
+unlike the ditroff font format,
there is no associated binary format.
+.
+.
.SS DESC file format
-The DESC file can contain the following types of line:
+.
+The DESC file can contain the following types of line as shown below.
+.
+Later entries in the file override previous values.
+.
.TP
-.BI res\ n
-There are
-.I n
-machine units per inch.
+.B charset
+This line and everything following in the file are ignored.
+.
+It is allowed for the sake of backwards compatibility.
+.
+.TP
+.BI family\ fam
+The default font family is
+.IR fam .
+.
+.TP
+.BI fonts\ n\ F1\ F2\ F3\|.\|.\|.\|Fn
+Fonts
+.I F1\|.\|.\|.\|Fn
+will be mounted in the font positions
+.IR m +1,\|.\|.\|., m + n
+where
+.I m
+is the number of styles.
+.
+This command may extend over more than one line.
+.
+A font name of
+.B 0
+will cause no font to be mounted on the corresponding font position.
+.
.TP
.BI hor\ n
The horizontal resolution is
.I n
machine units.
+.
.TP
-.BI vert\ n
-The vertical resolution is
-.I n
-machine units.
+.BI paperheight\ n
+The physical vertical dimension of the output medium in machine units.
+.
+This isn't used by
+.B troff
+itself; currently, only
+.B grops
+uses it.
+.
.TP
-.BI sizescale\ n
-The scale factor for pointsizes.
-By default this has a value of 1.
-One
-.I
-scaled point
-is equal to
-one
-.RI point/ n .
-The arguments to the
-.B unitwidth
+.BI paperwidth\ n
+The physical horizontal dimension of the output medium in machine units.
+.
+This isn't used by
+.BR troff .
+.
+Currently, only the
+.B grolbp
+output device uses it.
+.
+.TP
+.BI papersize\ string
+Select a paper size.
+.
+Valid values for
+.I string
+are the ISO paper types A0-A7, B0-B7, C0-C7, D0-D7, DL, and the US paper
+types letter, legal, tabloid, ledger, statement, executive, com10, and
+monarch.
+.
+Case is not significant for
+.IR string
+if it holds predefined paper types.
+.
+Alternatively,
+.I string
+can be a file name (e.g.\& `/etc/papersize'); if the file can be opened,
+.B groff
+reads the first line and tests for the above paper sizes.
+.
+Finally,
+.I string
+can be a custom paper size in the format
+.IB length , width
+(no spaces before and after the comma).
+.
+Both
+.I length
and
-.B sizes
-commands are given in scaled points.
+.I width
+must have a unit appended; valid values are `i' for inches, `c' for
+centimeters, `p' for points, and `P' for picas.
+.
+Example:
+.BR 12c,235p .
+.
+An argument which starts with a digit is always treated as a custom paper
+format.
+.
+.B papersize
+sets both the vertical and horizontal dimension of the output medium.
+.
+.IP
+More than one argument can be specified;
+.B groff
+scans from left to right and uses the first valid paper specification.
+.
+.
.TP
-.BI unitwidth\ n
-Quantities in the font files are given in machine units
-for fonts whose point size is
-.I n
-scaled points.
+.B pass_filenames
+Make troff tell the driver the source file name being processed.
+.
+This is achieved by another tcommand:
+.B F
+.IR filename .
+.
+.TP
+.BI postpro\ program
+Use
+.I program
+as the postprocessor.
+.
.TP
.BI prepro\ program
Call
.I program
as a preprocessor.
+.
.TP
-.BI postpro\ program
+.BI print\ program
Use
.I program
-as the postprocessor.
-.TP
-.B tcommand
-This means that the postprocessor can handle the
-.B t
+as the spooler program for printing.
+.
+If omitted, the
+.B \-l
and
-.B u
-output commands.
+.B \-L
+options of
+.B groff
+are ignored.
+.
+.TP
+.BI res\ n
+There are
+.I n
+machine units per inch.
+.
.TP
.BI sizes\ s1\ s2\|.\|.\|.\|sn\ 0
This means that the device has fonts at
.IR s1 ,
.IR s2 ,\|.\|.\|.\| sn
scaled points.
+.
The list of sizes must be terminated by a
.BR 0 .
+.
Each
-.BI s i
+.I si
can also be a range of sizes
.IR m \- n .
+.
The list can extend over more than one line.
+.
+.TP
+.BI sizescale\ n
+The scale factor for pointsizes.
+.
+By default this has a value of 1.
+.
+One
+.I
+scaled point
+is equal to
+one
+.RI point/ n .
+.
+The arguments to the
+.B unitwidth
+and
+.B sizes
+commands are given in scaled points.
+.
.TP
.BI styles\ S1\ S2\|.\|.\|.\|Sm
The first
.I m
font positions will be associated with styles
.IR S1\|.\|.\|.\|Sm .
+.
.TP
-.BI fonts\ n\ F1\ F2\ F3\|.\|.\|.\|Fn
-Fonts
-.I F1\|.\|.\|.\|Fn
-will be mounted in the font positions
-.IR m +1,\|.\|.\|., m + n
-where
-.I m
-is the number of styles.
-This command may extend over more than one line.
-A font name of
-.B 0
-will cause no font to be mounted on the corresponding font position.
+.B tcommand
+This means that the postprocessor can handle the
+.B t
+and
+.B u
+output commands.
+.
.TP
-.BI family\ fam
-The default font family is
-.IR fam .
+.BI unitwidth\ n
+Quantities in the font files are given in machine units
+for fonts whose point size is
+.I n
+scaled points.
+.
.TP
.B 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.
-.TP
-.BI print\ program
-Use
-.I program
-as the spooler program for printing.
-If omitted, the
-.B \-l
-and
-.B \-L
-options of
-.B groff
-are ignored.
+.BI vert\ n
+The vertical resolution is
+.I n
+machine units.
+.
.LP
-The res, unitwidth, fonts and sizes lines are compulsory.
+The
+.BR res ,
+.BR unitwidth ,
+.BR fonts ,
+and
+.B sizes
+lines are compulsory.
+.
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
@@ -178,29 +298,21 @@ 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
+.
+A font file has two sections.
+The first section is a sequence
of lines each containing a sequence of blank delimited
words; the first word in the line is a key, and subsequent
words give a value for that key.
-.TP
-.BI name\ F
-The name of the font is
-.IR F .
-.TP
-.BI spacewidth\ n
-The normal width of a space is
-.IR n .
-.TP
-.BI slant\ n
-The characters of the font have a slant of
-.I n
-degrees. (Positive means forward.)
+.
.TP
.BI ligatures\ lig1\ lig2\|.\|.\|.\|lign\ \fR[ 0 \fR]
Characters
.IR lig1 ,
-.IR lig2 ,\|.\|.\|., lign
+.IR lig2 ,\ \|.\|.\|.,\ lign
are ligatures; possible ligatures are
.BR ff ,
.BR fi ,
@@ -208,10 +320,31 @@ are ligatures; possible ligatures are
.B ffi
and
.BR ffl .
+.
For backwards compatibility, the list of ligatures may be terminated
with a
.BR 0.
+.
The list of ligatures may not extend over more than one line.
+.
+.TP
+.BI name\ F
+The name of the font is
+.IR F .
+.
+.TP
+.BI slant\ n
+The characters of the font have a slant of
+.I n
+degrees.
+.
+(Positive means forward.)
+.
+.TP
+.BI spacewidth\ n
+The normal width of a space is
+.IR n .
+.
.TP
.B special
The font is
@@ -219,40 +352,54 @@ The font is
this means that when a character is requested that is not present in
the current font, it will be searched for in any special fonts that
are mounted.
+.
.LP
Other commands are ignored by
.B troff
but may be used by postprocessors to store arbitrary information
about the font in the font file.
+.
.LP
The first section can contain comments which start with the
.B #
character and extend to the end of a line.
+.
.LP
The second section contains one or two subsections.
+.
It must contain a
.I charset
subsection
and it may also contain a
.I kernpairs
subsection.
+.
These subsections can appear in any order.
+.
Each subsection starts with a word on a line by itself.
+.
.LP
The word
.B charset
starts the charset subsection.
+.
The
.B charset
line is followed by a sequence of lines.
+.
Each line gives information for one character.
+.
A line comprises a number of fields separated
-by blanks or tabs. The format is
+by blanks or tabs.
+.
+The format is
+.
.IP
.I name metrics type code
.RI [ entity_name ]
.RB [ --
.IR comment ]
+.
.LP
.I name
identifies the character:
@@ -263,55 +410,73 @@ is a single character
then it corresponds to the groff input character
.IR c ;
if it is of the form
-.BI \e c
+.BI \[rs] c
where c is a single character, then it
-corresponds to the groff input character
-.BI \e c\fR;
+corresponds to the special character
+.BI \[rs][ c ]\fR;
otherwise it corresponds to the groff input character
-.BI \e[ name ]
-(if it is exactly two characters
+.BI \[rs][ name ]\fR.
+.
+If it is exactly two characters
.I xx
it can be entered as
-.BI \e( xx\fR).
-Groff supports eight bit characters; however some utilities
-has difficulties with eight bit characters.
+.BI \[rs]( xx\fR.
+.
+Note that single-letter special characters can't be accessed as
+.BI \[rs] c\fR;
+the only exception is `\[rs]-' which is identical to `\[rs][-]'.
+.
+The name
+.B \-\-\-
+is special and indicates that the character is unnamed;
+such characters can only be used by means of the
+.B \[rs]N
+escape sequence in
+.BR troff .
+.
+.LP
+Groff supports eight-bit characters; however some utilities
+have difficulties with eight-bit characters.
+.
For this reason, there is a convention that the name
.BI char n
is equivalent to the single character whose code is
-.I n .
+.IR n .
+.
For example,
.B char163
would be equivalent to the character with code 163
which is the pounds sterling sign in ISO Latin-1.
-The name
-.B \-\-\-
-is special and indicates that the character is unnamed;
-such characters can only be used by means of the
-.B \eN
-escape sequence in
-.BR troff .
+.
.LP
The
.I type
field gives the character type:
+.
.TP
1
-means the character has an descender, for example, p;
+means the character has a descender, for example, p;
+.
.TP
2
means the character has an ascender, for example, b;
+.
.TP
3
means the character has both an ascender and a descender, for example,
(.
+.
.LP
The
.I code
field gives the code which the postprocessor uses to print the character.
+.
The character can also be input to groff using this code by means of the
-.B \eN
+.B \[rs]N
escape sequence.
+.
The code can be any integer.
+.
If it starts with a
.B 0
it will be interpreted as octal;
@@ -320,40 +485,60 @@ if it starts with
or
.B 0X
it will be intepreted as hexadecimal.
+.
+Note, however, that the
+.B \[rs]N
+escape sequence only accepts a decimal integer.
+.
.LP
The
.I entity_name
field gives an ascii string identifying the glyph which the postprocessor
uses to print the character.
+.
This field is optional and has been introduced so that the html device driver
can encode its character set.
-For example, the character `\e[Po]' is represented as `&pound;' in html 4.0.
+.
+For example, the character `\[rs][Po]' is represented as `&pound;' in
+html\~4.0.
+.
.LP
Anything on the line after the encoding field resp. after `-\&-' will
be ignored.
+.
.LP
The
.I metrics
-field has the form:
+field has the form (in one line; it is broken here for the sake of
+readability):
+.
.IP
-.IR width [\fB, height [\fB, depth [\fB, italic_correction [\fB, \
-left_italic_correction [\fB, subscript_correction ]]]]]
+.IR width [\fB, height [\fB, depth [\fB, italic-correction
+.br
+.RI [\fB, left-italic-correction [\fB, subscript-correction ]]]]]
+.
.LP
There must not be any spaces between these subfields.
+.
Missing subfields are assumed to be 0.
+.
The subfields are all decimal integers.
+.
Since there is no associated binary format, these
values are not required to fit into a variable of type
.B char
as they are in ditroff.
+.
The
.I width
subfields gives the width of the character.
+.
The
.I height
subfield gives the height of the character (upwards is positive);
if a character does not extend above the baseline, it should be
given a zero height, rather than a negative height.
+.
The
.I depth
subfield gives the depth of the character, that is, the distance
@@ -361,39 +546,49 @@ below the lowest point below the baseline to which the
character extends (downwards is positive);
if a character does not extend below above the baseline, it should be
given a zero depth, rather than a negative depth.
+.
The
-.I italic_correction
+.I italic-correction
subfield gives the amount of space that should be added after the
character when it is immediately to be followed by a character
from a roman font.
+.
The
-.I left_italic_correction
+.I left-italic-correction
subfield gives the amount of space that should be added before the
character when it is immediately to be preceded by a character
from a roman font.
+.
The
-.I subscript_correction
+.I subscript-correction
gives the amount of space that should be added after a character
before adding a subscript.
+.
This should be less than the italic correction.
+.
.LP
A line in the charset section can also have the format
+.
.IP
.I
name \fB"
+.
.LP
This indicates that
.I name
is just another name for the character mentioned in the
preceding line.
+.
.LP
The word
.B kernpairs
starts the kernpairs section.
+.
This contains a sequence of lines of the form:
+.
.IP
-.I
-c1 c2 n
+.I c1 c2 n
+.
.LP
This means that when character
.I c1
@@ -401,20 +596,28 @@ appears next to character
.I c2
the space between them should be increased by
.IR n .
+.
Most entries in kernpairs section will have a negative value for
.IR n .
+.
+.
.SH FILES
+.
.Tp \w'@FONTDIR@/devname/DESC'u+3n
.BI @FONTDIR@/dev name /DESC
Device description file for device
.IR name .
+.
.TP
.BI @FONTDIR@/dev name / F
Font file for font
.I F
of device
.IR name .
+.
+.
.SH "SEE ALSO"
+.
.BR groff_out (@MAN5EXT@),
.BR @g@troff (@MAN1EXT@).
.
diff --git a/contrib/groff/man/groff_out.man b/contrib/groff/man/groff_out.man
index ae30f8d..5fe7dcc 100644
--- a/contrib/groff/man/groff_out.man
+++ b/contrib/groff/man/groff_out.man
@@ -1,251 +1,1887 @@
'\" e
.\" The above line should force the use of eqn as a preprocessor
.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+groff_out.5
-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.
+Last update: 12 Sep 2002
-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.
+This file is part of groff, the GNU roff type-setting system.
-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.
-..
-.\" This man page must be preprocessed with eqn.
-.ie \n(.g .ds ic \/
-.el .ds ic \^
+Copyright (C) 1989, 2001, 2002 Free Software Foundation, Inc.
+rewritten from scrach 2001 by Bernd Warken <bwarken@mayn.de>
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHORS, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.mso www.tmac
+.
+.if n \{\
+. mso tty-char.tmac
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.if '\*[.T]'dvi' \
+. ftr CB CW
+.
+.if t \{\
+.EQ
+delim $$
+.EN
+.\}
+.
+.\" ----------------- Document configuration
+.
+.\" Number register to decide whether the commands `{' and `}' are used
+.\" 0: disable (actual default); 1: enable
+.nr @USE_ENV_STACK 0
+.
+.ig
+Unfortunately, old versions of groff used an illogical position change
+after some D\~commands (Dp, DP, Dt). If the number register
+@STUPID_DRAWING_POSITIONING is 1 (actual default) then change position
+after these commands, otherwise the position is not changed.
+..
+.nr @STUPID_DRAWING_POSITIONING 1
+.
+.\" ----------------- Syntactical definitions
+.
+.\" comments when escapes are switched off
+.de c
+..
+.\" Begin of macro definitions
+.eo
+.
+.de Text
+. nop \)\$*
+..
+.c follow-up line for a .TP header
+.de TP+
+. br
+. ns
+. TP \$1
+..
+.c a bulleted paragraph
+.de Topic
+. TP 2m
+. nop \[bu]
+..
+.de ShellCommand
+. br
+. IR "shell>" "\h'1m'\f[CB]\$*\f[]\/"
+..
+.ec
+.\" End of macro definitions
+.
+.c ----------------- Semantical definitions
+.
+.nr @maxcolor 65536
+.ds @backslash \[rs]\"
+.ds @linebreak \f[R]\[la]line_break\[ra]\f[]\"
+.
+.\" Begin of macro definitions
+.eo
+.
+.c format: .unit <letter> <punctuation>
+.de unit
+. BR \$@
+..
+.c argument in italic with punctuation
+.de argument
+. if (\n[.$] == 0) \
+. return
+. IR \$@
+..
+.c comma separated list of indexed variables
+.de list1..n
+. ds @arg1 \$1\"
+. nop \c
+. ie t \
+. nop $\*[@arg1] sub 1$, $\*[@arg1] sub 2$, .\|.\|., $\*[@arg1] sub n$ \c
+. el \{\
+. IR \*[@arg1]1 ,
+. IR \*[@arg1]2 ,
+. nop \&...,
+. I \*[@arg1]n
+. \}
+. rm @arg1
+..
+.de offset
+. if (\n[.$] < 2) \
+. ab `.offset' needs at least 2 arguments
+. ds @arg1 \$1\"
+. ds @arg2 \$2\"
+. shift 2
+. nop (\f[I]\,\*[@arg1]\/\f[],\ \f[I]\,\*[@arg2]\/\f[])\$*
+. rm @arg1
+. rm @arg2
+..
+.de indexed_offset
+. if (\n[.$] < 4) \
+. ab `.indexed_offset' needs at least 4 arguments
+. ds @arg1 \$1\"
+. ds @index1 \$2\"
+. ds @arg2 \$3\"
+. ds @index2 \$4\"
+. shift 4
+. ie t \{\
+. ie \B'\*[@index1]' \{\
+. nop ($\*[@arg1] sub roman \*[@index1]$,\ \c
+. \}
+. el \{\
+. nop ($\*[@arg1] sub \*[@index1]$,\ \c
+. \}
+. ie \B'\*[@index2]' \{\
+. nop $\*[@arg2] sub roman \*[@index2]$)\$* \c
+. \}
+. el \{\
+. nop $\*[@arg2] sub \*[@index2]$)\$* \c
+. \}
+. \}
+. el \{\
+. nop (\f[I]\*[@arg1]\*[@index1]\f[],\ \c
+. nop \f[I]\*[@arg2]\*[@index2]\f[])\$* \c
+. \}
+. rm @arg1
+. rm @arg2
+. rm @index1
+. rm @index2
+..
+.c format: .command <name> "<arguments>" <punctuation>
+.de command
+. ds @arg1 \$1\"
+. ds @arg2 \$2\"
+. shift 2
+. IP "\f[B]\*[@arg1]\f[]\ \f[I]\,\*[@arg2]\/\f[]\$*"
+. rm @arg1
+. rm @arg2
+..
+.c format: .command+ <name> "<arguments>" <punctuation>
+.c continue previous .command heading
+.de command+
+. ds @arg1 \$1\"
+. ds @arg2 \$2\"
+. shift 2
+. TP+
+. Text "\f[B]\*[@arg1]\f[]\ \f[I]\,\*[@arg2]\/\f[]\$*"
+. rm @arg1
+. rm @arg2
+..
+.c format: .D-command <subcommand> "<arguments>"
+.de D-command
+. ds @sub \$1\"
+. shift 1
+. IP "\f[B]D\*[@sub]\f[]\ \f[I]\,\$*\/\f[]\|\*[@linebreak]"
+. rm @sub
+..
+.c format: .D-command+ <subcommand> "<arguments>"
+.c continue previous .D-command heading
+.de D-command+
+. ds @sub \$1\"
+. shift 1
+. TP+
+. Text "\f[B]D\*[@sub]\f[]\ \f[I]\,\$*\/\f[]\*[@linebreak]"
+. rm @sub
+..
+.de Da-command
+. shift 1
+. ie t \
+. ds @args $h sub 1$\~$v sub 1$ $h sub 2$\~$v sub 2$\"
+. el \
+. ds @args \f[I]h1\~v1 h2\~v2\f[]\"
+. IP "\f[B]Da\f[]\ \*[@args]\|\*[@linebreak]"
+. rm @args
+..
+.c graphics command .D with a variable number of arguments
+.c format: .D-multiarg <subcommand>
+.de D-multiarg
+. ds @sub \$1\"
+. shift 1
+. ie t \{\
+. ds @args "$h sub 1$\~$v sub 1$ $h sub 2$\~$v sub 2$ .\|.\|. \"
+. as @args "$h sub n$\~$v sub n$\"
+. \}
+. el \
+. ds @args \f[I]h1\~v1 h2\~v2\f[] ... \f[I]\,hn\~vn\f[]\"
+. IP "\f[B]D\*[@sub]\f[]\ \*[@args]\|\*[@linebreak]"
+. rm @args
+. rm @sub
+..
+.c format: .x-command <subname> "<arguments>"
+.de x-command
+. ds @sub \$1\"
+. shift 1
+. ds @args
+. if (\n[.$] > 0) \
+. ds @args \ \f[I]\,\$*\/\f[]\"
+. IP "\f[B]x\*[@sub]\f[]\*[@args]\f[]\|\*[@linebreak]"
+. rm @sub
+. rm @args
+..
+.de xsub
+. RI "(" "\$1" " control command)"
+. br
+..
+.ec
+.\" End of macro definitions
+.
+.
+.\" --------------------------------------------------------------------
+.\" Title
+.\" --------------------------------------------------------------------
+.
.TH GROFF_OUT @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
+.
.SH NAME
groff_out \- groff intermediate output format
+.
+.
+.\" --------------------------------------------------------------------
.SH DESCRIPTION
-This manual page describes the format output by GNU troff.
-The output format used by GNU troff is very similar to that used
-by Unix device-independent troff. Only the differences are documented
-here.
-.LP
-The argument to the
-.B s
-command is in scaled points (units of
-.IR points/ n ,
-where
-.I n
-is the argument to the
-.B sizescale
-command in the DESC file.)
-The argument to the
-.B x\ Height
-command is also in scaled points.
-.LP
-The first three output commands are guaranteed to be:
-.IP
-.BI x\ T\ device
+.\" --------------------------------------------------------------------
+.
+This manual page describes the intermediate output format of the GNU
+.BR roff (@MAN7EXT@)
+text processing system.
+.
+This output is produced by a run of the GNU
+.BR troff (@MAN1EXT@)
+program before it is fed into a device postprocessor program.
+.
+.P
+As the GNU roff processor
+.BR groff (@MAN1EXT@)
+is a wrapper program around troff that automatically calls a
+postprocessor, this output does not show up normally.
+.
+This is why it is called
+.I intermediate
+within the
+.I groff
+.IR system .
+.
+The
+.B groff
+program provides the option
+.B -Z
+to inhibit postprocessing, such that the produced intermediate output
+is sent to standard output just like calling
+.B troff
+manually.
+.
+.P
+In this document, the term
+.I troff output
+describes what is output by the GNU troff program, while
+.I intermediate output
+refers to the language that is accepted by the parser that prepares
+this output for the postprocessors.
+.
+This parser is smarter on whitespace and implements obsolete elements
+for compatibility, otherwise both formats are the same.
+.
+The pre-groff roff versions are denoted as
+.I classical
+.IR troff .
+.
+.P
+The main purpose of the intermediate output concept is to facilitate
+the development of postprocessors by providing a common programming
+interface for all devices.
+.
+It has a language of its own that is completely different from the
+.BR groff (@MAN7EXT@)
+language.
+.
+While the
+.I groff
+language is a high-level programming language for text processing, the
+intermediate output language is a kind of low-level assembler language
+by specifying all positions on the page for writing and drawing.
+.
+.P
+The intermediate output produced by
+.I groff
+is fairly readable, while
+.I classical troff
+output was hard to understand because of strange habits that are
+still supported, but not used any longer by
+.I GNU
+.IR troff .
+.
+.
+.\" --------------------------------------------------------------------
+.SH "LANGUAGE CONCEPTS"
+.\" --------------------------------------------------------------------
+.
+During the run of
+.BR troff ,
+the roff input is cracked down to the information on what has to be
+printed at what position on the intended device.
+.
+So the language of the intermediate output format can be quite small.
+.
+Its only elements are commands with or without arguments.
+.
+In this document, the term "command" always refers to the intermediate
+output language, never to the roff language used for document
+formatting.
+.
+There are commands for positioning and text writing, for drawing, and
+for device controlling.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Separation"
+.\" --------------------------------------------------------------------
+.
+.I Classical troff output
+had strange requirements on whitespace.
+.
+The
+.I groff
+output parser, however, is smart about whitespace by making it
+maximally optional.
+.
+The whitespace characters, i.e.\& the
+.IR tab ,
+.IR space ,
+and
+.I newline
+characters, always have a syntactical meaning.
+.
+They are never printable because spacing within the output is always
+done by positioning commands.
+.
+.P
+Any sequence of
+.I space
+or
+.I tab
+characters is treated as a single
+.B syntactical
+.BR space .
+.
+It separates commands and arguments, but is only required when there
+would occur a clashing between the command code and the arguments
+without the space.
+.
+Most often, this happens when variable length command names,
+arguments, argument lists, or command clusters meet.
+.
+Commands and arguments with a known, fixed length need not be
+separated by syntactical space.
+.
+.P
+A line break is a syntactical element, too.
+.
+Every command argument can be followed by whitespace, a comment, or a
+newline character.
+.
+Thus a
+.B syntactical line break
+is defined to consist of optional syntactical space that is optionally
+followed by a comment, and a newline character.
+.
+.P
+The normal commands, those for positioning and text, consist of a
+single letter taking a fixed number of arguments.
+.
+For historical reasons, the parser allows to stack such commands on
+the same line, but fortunately, in groff intermediate output, every
+command with at least one argument is followed by a line break, thus
+providing excellent readability.
+.
+.P
+The other commands \[em] those for drawing and device controlling \[em]
+have a more complicated structure; some recognize long command names,
+and some take a variable number of arguments.
+.
+So all
+.B D
+and
+.B x
+commands were designed to request a
+.I syntactical line break
+after their last argument.
+.
+Only one command,
+.RB ` x\ X '
+has an argument that can stretch over several lines, all other
+commands must have all of their arguments on the same line as the
+command, i.e.\& the arguments may not be splitted by a line break.
+.
+.P
+Empty lines, i.e.\& lines containing only space and/or a comment, can
+occur everywhere.
+.
+They are just ignored.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Argument Units"
+.\" --------------------------------------------------------------------
+.
+Some commands take integer arguments that are assumed to represent
+values in a measurement unit, but the letter for the corresponding
+.I scale indicator
+is not written with the output command arguments; see
+.BR groff (@MAN7EXT@)
+and the groff info file for more on this topic.
+.
+Most commands assume the scale indicator\~\c
+.unit u ,
+the basic unit of the device, some use\~\c
+.unit z ,
+the
+.I scaled point unit
+of the device, while others, such as the color commands expect plain
+integers.
+.
+Note that these scale indicators are relative to the chosen device.
+.
+They are defined by the parameters specified in the device's
+.I DESC
+file; see
+.BR groff_font (@MAN5EXT@).
+.
+.P
+Note that single characters can have the eighth bit set, as can the
+names of fonts and special characters.
+.
+The names of characters and fonts can be of arbitrary length.
+.
+A character that is to be printed will always be in the current font.
+.
+.P
+A string argument is always terminated by the next whitespace
+character (space, tab, or newline); an embedded
+.B #
+character is regarded as part of the argument, not as the beginning of
+a comment command.
+.
+An integer argument is already terminated by the next non-digit
+character, which then is regarded as the first character of the next
+argument or command.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Document Parts"
+.\" --------------------------------------------------------------------
+A correct intermediate output document consists of two parts, the
+prologue and the body.
+.
+.P
+The task of the
+.I prologue
+is to set the general device parameters using three exactly specified
+commands.
+.
+The
+.I groff prologue
+is guaranteed to consist of the following three lines (in that order):
+.RS
+.P
+.B x\ T
+.I device
.br
-.BI x\ res\ n\ h\ v
+.B x\ res
+.I n\ h\ v
.br
.B x init
-.LP
-If the
-.B tcommand
-line is present in the DESC file, troff will use the following
-two commands
-.TP
-.BI t xxx
-.I xxx
-is any sequence of characters terminated by a space or a newline;
-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.
+.RE
+.P
+with the arguments set as outlined in the section
+.BR "Device Control Commands" .
+.
+But the parser for the intermediate output format is able to swallow
+additional whitespace and comments as well.
+.
+.P
+The
+.I body
+is the main section for processing the document data.
+.
+Syntactically, it is a sequence of any commands different from the
+ones used in the prologue.
+.
+Processing is terminated as soon as the first
+.B x\ stop
+command is encountered; the last line of any groff intermediate output
+always contains such a command.
+.
+.P
+Semantically, the body is page oriented.
+.
+A new page is started by a
+.BR p \~command.
+.
+Positioning, writing, and drawing commands are always done within the
+current page, so they cannot occur before the first
+.BR p \~command.
+.
+Absolute positioning (by the
+.B H
+and
+.BR V \~commands)
+is done relative to the current page, all other positioning
+is done relative to the current location within this page.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "COMMAND REFERENCE"
+.\" --------------------------------------------------------------------
+.
+This section describes all intermediate output commands, the classical
+commands as well as the
+.I groff
+extensions.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Comment Command"
+.\" --------------------------------------------------------------------
+.
.TP
-.BI u n\ xxx
-This is same as the
+.BI # anything \[la]end_of_line\[ra]
+A comment.
+.
+Ignore any characters from the
+.BR # \~\c
+character up to the next newline character.
+.
+.P
+This command is the only possibility for commenting in the intermediate
+output.
+.
+Each comment can be preceded by arbitrary
+.I syntactical
+.IR space ;
+every command can be terminated by a comment.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Simple Commands"
+.\" --------------------------------------------------------------------
+.
+The commands in this subsection have a command code consisting of a
+single character, taking a fixed number of arguments.
+.
+Most of them are commands for positioning and text writing.
+.
+These commands are smart about whitespace.
+.
+Optionally,
+.I syntactical space
+can be inserted before, after, and between the command letter and its
+arguments.
+.
+All of these commands are stackable, i.e., they can be preceded by
+other simple commands or followed by arbitrary other commands on the
+same line.
+.
+A separating syntactical space is only necessary when two integer
+arguments would clash or if the preceding argument ends with a string
+argument.
+.
+.
+.if (\n[@USE_ENV_STACK] == 1) \{\
+.command {
+Open a new environment by copying the actual device configuration data
+to the environment stack.
+.
+The current environment is setup by the device specification and
+manipulated by the setting commands.
+.
+.
+.command }
+Close the actual environment (opened by a preceding
+.BR { \~command)
+and restore the previous environment from the environment
+stack as the actual device configuration data.
+.
+\} \" endif @USE_ENV_STACK
+.
+.
+.command C xxx \[la]white_space\[ra]
+Print a special groff character named
+.argument xxx .
+.
+The trailing syntactical space or line break is necessary to allow
+character names of arbitrary length.
+.
+The character is printed at the current print position;
+the character's size is read from the font file.
+.
+The print position is not changed.
+.
+.
+.command c c
+Print character\~\c
+.argument c
+at the current print position;
+the character's size is read from the font file.
+.
+The print position is not changed.
+.
+.
+.command f n
+Set font to font number\~\c
+.argument n
+(a non-negative integer).
+.
+.
+.command H n
+Move right to the absolute vertical position\~\c
+.argument n
+(a non-negative integer in basic units\~\c
+.unit u )
+relative to left edge of current page.
+.
+.
+.command h n
+Move
+.argument n
+(a non-negative integer) basic units\~\c
+.unit u
+horizontally to the right.
+.
+.I [54]
+allows negative values for
+.I n
+also, but
+.I groff
+doesn't use this.
+.
+.
+.command m "color_scheme \f[R][\f[]component .\|.\|.\f[R]]\f[]"
+Set the color for text (glyphs), line drawing, and the outline of
+graphic objects using different color schemes; the analoguous command
+for the filling color of graphic objects is
+.BR DF .
+.
+The color components are specified as integer arguments between 0 and
+\n[@maxcolor].
+.
+The number of color components and their meaning vary for the
+different color schemes.
+.
+These commands are generated by the groff escape sequence
+.BR \*[@backslash]m .
+.
+No position changing.
+.
+These commands are a groff extension.
+.
+.
+.RS
+.
+.command mc "cyan magenta yellow"
+Set color using the CMY color scheme, having the 3\~color components
+cyan, magenta, and yellow.
+.
+.
+.command md
+Set color to the default color value
+(black in most cases).
+.
+No component arguments.
+.
+.
+.command mg "gray"
+Set color to the shade of gray given by the argument, an integer
+between 0 (black) and \n[@maxcolor] (white).
+.
+.
+.command mk "cyan magenta yellow black"
+Set color using the CMYK color scheme, having the 4\~color components
+cyan, magenta, yellow, and black.
+.
+.command mr "red green blue"
+Set color using the RGB color scheme, having the 3\~color components
+red, green, and blue.
+.
+.RE
+.
+.
+.command N n
+Print character with index\~\c
+.argument n
+(a non-negative integer) of the current font.
+.
+The print position is not changed.
+.
+This command is a groff extension.
+.
+.
+.command n b\ a
+Inform the device about a line break, but no positioning is done by
+this command.
+.
+In classical troff, the integer arguments
+.argument b
+and\~\c
+.argument a
+informed about the space before and after the current line to
+make the intermediate output more human readable without performing
+any action.
+.
+In groff, they are just ignored, but they must be provided for
+compatibility reasons.
+.
+.
+.command p n
+Begin a new page in the outprint.
+.
+The page number is set to\~\c
+.argument n .
+.
+This page is completely independent of pages formerly processed even
+if those have the same page number.
+.
+The vertical position on the outprint is automatically set to\~0.
+.
+All positioning, writing, and drawing is always done relative to a
+page, so a
+.BR p \~command
+must be issued before any of these commands.
+.
+.
+.command s n
+Set point size to
+.argument n
+scaled points
+(this is unit\~\c
+.unit z
+in GNU
+.BR troff ).
+.
+Classical troff used the unit
+.I points
+(\c
+.unit p )
+instead; see section
+.BR COMPATIBILITY .
+.
+.
+.command t xxx \[la]white_space\[ra]
+.command+ t "xxx dummy_arg" \[la]white_space\[ra]
+Print a word, i.e.\& a sequence of characters
+.argument xxx
+terminated by a space character or a line break; an optional second
+integer argument is ignored (this allows the formatter to generate
+an even number of arguments).
+.
+The first character should be printed at the current position, the
+current horizontal position should then be increased by the width of
+the first character, and so on for each character.
+.
+The widths of the characters are read from the font file, scaled for the
+current point size, and rounded to a multiple of the horizontal
+resolution.
+.
+Special characters cannot be printed using this command (use the
+.B C
+command for named characters).
+.
+This command is a groff extension; it is only used for devices whose
+.I DESC
+file contains the
+.B tcommand
+keyword; see
+.BR groff_font (@MAN5EXT@).
+.
+.
+.command u "n xxx" \[la]white_space\[ra]
+Print word with track kerning.
+.
+This is the same as the
.B t
-command except that after printing each character, the current horizontal
-position is increased by the sum of the width of that character
+command except that after printing each character, the current
+horizontal position is increased by the sum of the width of that
+character and\~\c
+.argument n
+(an integer in
+basic units\~\c
+.unit u ).
+This command is a groff extension; it is only used for devices whose
+.I DESC
+file contains the
+.B tcommand
+keyword; see
+.BR groff_font (@MAN5EXT@).
+.
+.
+.command V n
+Move down to the absolute vertical position\~\c
+.argument n
+(a non-negative integer in basic units\~\c
+.unit u )
+relative to upper edge of current page.
+.
+.
+.command v n
+Move
+.argument n
+basic units\~\c
+.unit u
+down
+.RI ( n
+is a non-negative integer).
+.
+.I [54]
+allows negative values for
+.I n
+also, but
+.I groff
+doesn't use this.
+.
+.
+.command w
+Informs about a paddable whitespace to increase readability.
+.
+The spacing itself must be performed explicitly by a move command.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Graphics Commands"
+.\" --------------------------------------------------------------------
+.
+Each graphics or drawing command in the intermediate output starts
+with the letter\~\c
+.B D
+followed by one or two characters that specify a subcommand; this
+is followed by a fixed or variable number of integer arguments that
+are separated by a single space character.
+.
+A
+.BR D \ command
+may not be followed by another command on the same line
+(apart from a comment), so each
+.BR D \ command
+is terminated by a syntactical line break.
+.
+.P
+.I troff
+output follows the classical spacing rules (no space between command
+and subcommand, all arguments are preceded by a single space
+character), but the parser allows optional space between the command
+letters and makes the space before the first argument optional.
+.
+As usual, each space can be any sequence of tab and space characters.
+.
+.P
+Some graphics commands can take a variable number of arguments.
+.
+In this case, they are integers representing a size measured in basic
+units\~\c
+.unit u .
+.
+The arguments called
+.list1..n h
+stand for horizontal distances where positive means right, negative
+left.
+.
+The arguments called
+.list1..n v
+stand for vertical distances where positive means down, negative up.
+.
+All these distances are offsets relative to the current location.
+.
+.P
+Unless indicated otherwise, each graphics command directly corresponds
+to a similar
+.I groff
+.B \*[@backslash]D
+escape sequence; see
+.BR groff (@MAN7EXT@).
+.
+.P
+Unknown D\~commands are assumed to be device-specific.
+.
+Its arguments are parsed as strings; the whole information is then
+sent to the postprocessor.
+.
+.P
+In the following command reference, the syntax element
+.I \[la]line_break\[ra]
+means a
+.I syntactical line break
+as defined in section
+.BR Separation .
+.
+.
+.D-multiarg ~
+Draw B-spline from current position to offset
+.indexed_offset h 1 v 1 ,
+then to offset
+.indexed_offset h 2 v 2
+if given, etc.\& up to
+.indexed_offset h n v n .
+This command takes a variable number of argument pairs;
+the current position is moved to the terminal point of the drawn curve.
+.
+.
+.Da-command
+Draw arc from current position to
+.indexed_offset h 1 v 1 \|+\|\c
+.indexed_offset h 2 v 2
+with center at
+.indexed_offset h 1 v 1 ;
+then move the current position to the final point of the arc.
+.
+.
+.D-command C d
+.D-command+ C d dummy_arg
+Draw a solid circle using the current fill color with diameter\~\c
+.argument d
+(integer in basic units\~\c
+.unit u )
+with leftmost point at the current position; then move the current
+position to the rightmost point of the circle.
+.
+An optional second integer argument is ignored (this allows to the
+formatter to generate an even number of arguments).
+.
+This command is a groff extension.
+.
+.
+.D-command c d
+Draw circle line with diameter\~\c
+.argument d
+(integer in basic units\~\c
+.unit u )
+with leftmost point at the current position; then move the current
+position to the rightmost point of the circle.
+.
+.
+.D-command E "h v"
+Draw a solid ellipse in the current fill color with a horizontal
+diameter of\~\c
+.argument h
+and a vertical diameter of\~\c
+.argument v
+(both integers in basic units\~\c
+.unit u )
+with the leftmost point at the current position; then move to the
+rightmost point of the ellipse.
+.
+This command is a groff extension.
+.
+.
+.D-command e "h v"
+Draw an outlined ellipse with a horizontal diameter of\~\c
+.argument h
+and a vertical diameter of\~\c
+.argument v
+(both integers in basic units\~\c
+.unit u )
+with the leftmost point at current position; then move to the
+rightmost point of the ellipse.
+.
+.
+.D-command F "color_scheme \f[R][\f[]component .\|.\|.\f[R]]\f[]"
+Set fill color for solid drawing objects using different color
+schemes; the analoguous command for setting the color of text, line
+graphics, and the outline of graphic objects is
+.BR m .
+.
+The color components are specified as integer arguments between 0 and
+\n[@maxcolor].
+.
+The number of color components and their meaning vary for the
+different color schemes.
+.
+These commands are generated by the groff escape sequences
+.B \*[@backslash]D'F\ .\|.\|.'
and
-.IR n .
-.LP
-Note that single characters can have the eighth bit set, as can the
-names of fonts and special characters.
-.LP
-The names of characters and fonts can be of arbitrary length; drivers
-should not assume that they will be only two characters long.
-.LP
-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.
-.LP
-The
-.B x
-device control command has been extended.
+.B \*[@backslash]M
+(with no other corresponding graphics commands).
+.
+No position changing.
+.
+This command is a groff extension.
+.
+.
+.RS
+.
+.D-command Fc "cyan magenta yellow"
+Set fill color for solid drawing objects using the CMY color scheme,
+having the 3\~color components cyan, magenta, and yellow.
+.
+.
+.D-command Fd
+Set fill color for solid drawing objects to the default fill color value
+(black in most cases).
+.
+No component arguments.
+.
+.
+.D-command Fg "gray"
+Set fill color for solid drawing objects to the shade of gray given by
+the argument, an integer between 0 (black) and \n[@maxcolor] (white).
+.
+.
+.D-command Fk "cyan magenta yellow black"
+Set fill color for solid drawing objects using the CMYK color scheme,
+having the 4\~color components cyan, magenta, yellow, and black.
+.
+.D-command Fr "red green blue"
+Set fill color for solid drawing objects using the RGB color scheme,
+having the 3\~color components red, green, and blue.
+.
+.RE
+.
+.
+.D-command f n
+The argument
+.argument n
+must be an integer in the range -32767 to 32767.
+.
+.RS
.TP
-\fBx u \fIn\fR
-If
-.I n
-is\~1, start underlining of spaces.
+.RI "0 \[<=] " n " \[<=] 1000"
+Set the color for filling solid drawing objects to a shade of gray,
+where 0 corresponds to solid white, 1000 (the default) to solid black,
+and values in between to intermediate shades of gray; this is
+obsoleted by command
+.BR DFg .
+.
+.TP
+.IR n " < 0 or " n " > 1000"
+Set the filling color to the color that is currently being used for
+the text and the outline, see command
+.BR m .
+For example, the command sequence
+.
+.nf
+.ft CB
+.RS
+.RS
+mg 0 0 \n[@maxcolor]
+Df -1
+.RE
+.ft
+.fi
+.
+sets all colors to blue.
+.RE
+.
+.P
+No position changing.
+.
+This command is a groff extension.
+.
+.RE
+.
+.
+.D-command l "h v"
+Draw line from current position to offset
+.offset h v
+(integers in basic units\~\c
+.unit u );
+then set current position to the end of the drawn line.
+.
+.
+.D-multiarg p
+Draw a polygon line from current position to offset
+.offset h1 v1 ,
+from there to offset
+.offset h2 v2 ,
+etc.\& up to offset
+.offset hn vn ,
+and from there back to the starting position.
+.
+.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
+For historical reasons, the position is changed by adding the sum of
+all arguments with odd index to the actual horizontal position and the
+even ones to the vertical position.
+.
+Although this doesn't make sense it is kept for compatibility.
+.
+\}
+.el \{\
+As the polygon is closed, the end of drawing is the starting point, so
+the position doesn't change.
+\}
+.
+This command is a groff extension.
+.
+.
+.D-multiarg P
+The same macro as the corresponding
+.B Dp
+command with the same arguments, but draws a solid polygon in the
+current fill color rather than an outlined polygon.
+.
+.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
+The position is changed in the same way as with
+.BR Dp .
+\}
+.el \
+No position changing.
+.
+This command is a groff extension.
+.
+.
+.D-command t n
+Set the current line thickness to\~\c
+.argument n
+(an integer in basic units\~\c
+.unit u )
+if
+.argument n >0;
+if
+.argument n =0
+select the smallest available line thickness; if
+.argument n <0
+set the line thickness proportional to the point size (this is the
+default before the first
+.B Dt
+command was specified).
+.
+.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
+For historical reasons, the horizontal position is changed by adding
+the argument to the actual horizontal position, while the vertical
+position is not changed.
+.
+Although this doesn't make sense it is kept for compatibility.
+.
+\}
+.el \
+No position changing.
+.
+This command is a groff extension.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Device Control Commands"
+.\" --------------------------------------------------------------------
+.
+Each device control command starts with the letter
+.B x
+followed by a space character (optional or arbitrary space/\:tab in
+groff) and a subcommand letter or word; each argument (if any) must be
+preceded by a syntactical space.
+.
+All
+.B x
+commands are terminated by a
+.IR "syntactical line break" ;
+no device control command can be followed by another command on the same
+line (except a comment).
+.
+.P
+The subcommand is basically a single letter, but to increase
+readability, it can be written as a word, i.e.\& an arbitrary sequence
+of characters terminated by the next tab, space, or newline character.
+.
+All characters of the subcommand word but the first are simply ignored.
+.
+For example,
+.I troff
+outputs the initialization command
+.B x\ i
+as
+.B x\ init
+and the resolution command
+.B x\ r
+as
+.BR "x\ res" .
+.
+But writings like
+.B x\ i_like_groff
+and
+.B x\ roff_is_groff
+resp.\& are accepted as well to mean the same commands.
+.
+.P
+In the following, the syntax element
+.I \[la]line_break\[ra]
+means a
+.I syntactical line break
+as defined in section
+.BR Separation .
+.
+.x-command F name
+.xsub Filename
+Use
+.argument name
+as the intended name for the current file in error reports.
+.
+This is useful for remembering the original file name when groff uses
+an internal piping mechanism.
+.
+The input file is not changed by this command.
+.
+This command is a groff extension.
+.
+.
+.x-command f "n\ s"
+.xsub font
+Mount font position\~\c
+.argument n
+(a non-negative integer) with font named\~\c
+.argument s
+(a text word),
+cf.
+.BR groff_font (@MAN5EXT@).
+.
+.
+.x-command H n
+.xsub Height
+Set character height to\~\c
+.argument n
+(a positive integer in scaled points\~\c
+.unit z ).
+.
+Classical troff used the unit
+points (\c
+.unit p )
+instead; see section
+.BR COMPATIBILITY .
+.
+.
+.x-command i
+.xsub init
+Initialize device.
+.
+This is the third command of the prologue.
+.
+.
+.x-command p
+.xsub pause
+Parsed but ignored.
+.
+The classical documentation reads
+.I pause device, can be
+.IR restarted .
+.
+.
+.x-command r "n\ h\ v"
+.xsub resolution
+Resolution is\~\c
+.argument n ,
+while
+.argument h
+is the minimal horizontal motion, and
+.argument v
+the minimal vertical motion possible with this device; all arguments
+are positive integers in basic units\~\c
+.unit u
+per inch.
+.
+This is the second command of the prologue.
+.
+.
+.x-command S n
+.xsub Slant
+Set slant to\~\c
+.argument n
+(an integer in basic units\~\c
+.unit u ).
+.
+.
+.x-command s
+.xsub stop
+Terminates the processing of the current file; issued as the last
+command of any intermediate troff output.
+.
+.
+.x-command t
+.xsub trailer
+Generate trailer information, if any.
+.
+In
+.IR groff ,
+this is actually just ignored.
+.
+.
+.x-command T xxx
+.xsub Typesetter
+Set name of device to word
+.argument xxx ,
+a sequence of characters ended by the next whitespace character.
+.
+The possible device names coincide with those from the groff
+.B -T
+option.
+.
+This is the first command of the prologue.
+.
+.
+.x-command u n
+.xsub underline
+Configure underlining of spaces.
+.
If
-.I n
+.argument n
+is\~1, start underlining of spaces;
+if
+.argument n
is\~0, stop underlining of spaces.
+.
This is needed for the
.B cu
-request in nroff mode and is ignored otherwise.
-.LP
+request in
+.I nroff
+mode and is ignored otherwise.
+.
+This command is a groff extension.
+.
+.
+.x-command X anything
+.xsub X-escape
+Send string
+.argument anything
+uninterpreted to the device.
+.
+If the line following this command starts with a
+.B +
+character this line is interpreted as a continuation line in the
+following sense.
+.
+The
+.B +
+is ignored, but a newline character is sent instead to the device, the
+rest of the line is sent uninterpreted.
+.
+The same applies to all following lines until the first character of a
+line is not a
+.B +
+character.
+.
+This command is generated by the
+.I groff
+escape sequence
+.BR \*[@backslash]X .
+.
+The line-continuing feature is a groff extension.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Obsolete Command"
+.\" --------------------------------------------------------------------
+.
+In
+.I classical troff
+output, the writing of a single character was mostly done by a very
+strange command that combined a horizontal move and the printing of a
+character.
+.
+It didn't have a command code, but is represented by a 3-character
+argument consisting of exactly 2\~digits and a character.
+.
+.TP
+.argument ddc
+Move right
+.argument dd
+(exactly two decimal digits) basic units\~\c
+.unit u ,
+then print character\~\c
+.argument c .
+.
+.RS
+.P
+In groff, arbitrary syntactical space around and within this command
+is allowed to be added.
+.
+Only when a preceding command on the same line ends with an argument
+of variable length a separating space is obligatory.
+.
+In
+.I classical
+.IR troff ,
+large clusters of these and other commands were used, mostly without
+spaces; this made such output almost unreadable.
+.
+.RE
+.
+.P
+For modern high-resolution devices, this command does not make sense
+because the width of the characters can become much larger than two
+decimal digits.
+.
+In groff, this is only used for the devices
+.BR X75 ,
+.BR X75-12 ,
+.BR X100 ,
+and
+.BR X100-12 .
+.
+For other devices,
+the commands
+.B t
+and\~\c
+.B u
+provide a better functionality.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "POSTPROCESSING"
+.\" --------------------------------------------------------------------
+.
+The
+.I roff
+postprocessors are programs that have the task to translate the
+intermediate output into actions that are sent to a device.
+.
+A device can be some piece of hardware such as a printer, or a software
+file format suitable for graphical or text processing.
+.
+The
+.I groff
+system provides powerful means that make the programming of such
+postprocessors an easy task.
+.P
+There is a library function that parses the intermediate output and
+sends the information obtained to the device via methods of a class
+with a common interface for each device.
+.
+So a
+.I groff
+postprocessor must only redefine the methods of this class.
+.
+For details, see the reference in section
+.BR FILES .
+.
+.
+.\" --------------------------------------------------------------------
+.SH "EXAMPLES"
+.\" --------------------------------------------------------------------
+.
+This section presents the intermediate output generated from the same
+input for three different devices.
+.
+The input is the sentence
+.I hell world
+fed into groff on the command line.
+.
+.Topic
+High-resolution device
+.I ps
+.
+.RS
+.
+.P
+.ShellCommand echo "hell world" | groff -Z -T ps
+.
+.P
+.nf
+.ft CB
+x T ps
+x res 72000 1 1
+x init
+p1
+x font 5 TR
+f5
+s10000
+V12000
+H72000
+thell
+wh2500
+tw
+H96620
+torld
+n12000 0
+x trailer
+V792000
+x stop
+.ft P
+.fi
+.RE
+.
+.P
+This output can be fed into the postprocessor
+.BR grops (@MAN1EXT@)
+to get its representation as a PostScript file.
+.
+.
+.Topic
+Low-resolution device
+.I latin1
+.
+.RS
+.
+.P
+This is similar to the high-resolution device except that the
+positioning is done at a minor scale.
+.
+Some comments (lines starting with
+.IR # )
+were added for clarification; they were not generated by the
+formatter.
+.
+.P
+.ShellCommand echo "hell world" | groff -Z -T latin1
+.
+.P
+.nf
+.I # prologue
+.ft CB
+x T latin1
+x res 240 24 40
+x init
+.I # begin a new page
+.ft CB
+p1
+.I # font setup
+.ft CB
+x font 1 R
+f1
+s10
+.I # initial positioning on the page
+.ft CB
+V40
+H0
+.I # write text `hell'
+.ft CB
+thell
+.I # inform about a space, and do it by a horizontal jump
+.ft CB
+wh24
+.I # write text `world'
+.ft CB
+tworld
+.I # announce line break, but do nothing because ...
+.ft CB
+n40 0
+.I # ... the end of the document has been reached
+.ft CB
+x trailer
+V2640
+x stop
+.ft P
+.fi
+.RE
+.
+.P
+This output can be fed into the postprocessor
+.BR grotty (@MAN1EXT@)
+to get a formatted text document.
+.
+.
+.Topic
+Classical style output
+.
+.RS
+.
+.P
+As a computer monitor has a very low resolution compared to modern
+printers the intermediate output for the X\~devices can use the
+jump-and-write command with its 2-digit displacements.
+.
+.P
+.ShellCommand echo "hell world" | groff -Z -T X100
+.
+.P
+.nf
+.ft CB
+x T X100
+x res 100 1 1
+x init
+p1
+x font 5 TR
+f5
+s10
+V16
+H100
+.I # write text with old-style jump-and-write command
+.ft CB
+ch07e07l03lw06w11o07r05l03dh7
+n16 0
+x trailer
+V1100
+x stop
+.ft P
+.fi
+.RE
+.
+.P
+This output can be fed into the postprocessor
+.BR xditview (1x)
+or
+.BR gxditview (@MAN1EXT@)
+for displaying in\~X.
+.
+.P
+Due to the obsolete jump-and-write command, the text clusters in the
+classical output are almost unreadable.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "COMPATIBILITY"
+.\" --------------------------------------------------------------------
+.
+The intermediate output language of the
+.I classical troff
+was first documented in
+.IR [97] .
+.
The
+.I groff
+intermediate output format is compatible with this specification
+except for the following features.
+.Topic
+The classical quasi device independence is not yet implemented.
+.
+.Topic
+The old hardware was very different from what we use today.
+.
+So the groff devices are also fundamentally different from the ones in
+classical troff.
+.
+For example, the classical PostScript device was called
+.I post
+and had a resolution of 720 units per inch,
+while groff's
+.I ps
+device has a resolution of 72000 units per inch.
+.
+Maybe, by implementing some rescaling mechanism similar to the
+classical quasi device independence, these could be integrated into
+modern groff.
+.
+.Topic
+The B-spline command
+.B D~
+is correctly handled by the intermediate output parser, but the
+drawing routines aren't implemented in some of the postprocessor
+programs.
+.Topic
+The argument of the commands
+.B s
+and
+.B x H
+has the implicit unit scaled point\~\c
+.unit z
+in groff, while classical troff had point (\c
+.unit p ).
+.
+This isn't an incompatibility, but a compatible extension,
+for both units coincide for all devices without a
+.I sizescale
+parameter, including all classical and the groff text devices.
+.
+The few groff devices with a sizescale parameter either did
+not exist, had a different name, or seem to have had a different
+resolution.
+.
+So conflicts with classical devices are very unlikely.
+.
+.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\
+.Topic
+The position changing after the commands
+.BR Dp ,
+.BR DP ,
+and
+.B Dt
+is illogical, but as old versions of groff used this feature it is
+kept for compatibility reasons.
+.\} \" @STUPID_DRAWING_POSITIONING
+.el \{\
+.Topic
+Temporarily, there existed some confusion on the positioning after the
.B D
-drawing command has been extended.
-These extensions will not be used by GNU pic if the
-.B \-n
-option is given.
+commands that are groff extensions.
+.
+This has been clarified by establishing the classical rule for all
+groff drawing commands:
+.
+.RS
+.P
+.I The position after a graphic object has been drawn is at its end;
+.I for circles and ellipses, the "end" is at the right side.
+.RE
+.
+.P
+From this, the positionings specified for the drawing commands above
+follow quite naturally.
+.\} \" @STUPID_DRAWING_POSITIONING
+.
+.P
+The differences between groff and classical troff are documented in
+.BR groff_diff (@MAN7EXT@).
+.
+.
+.\" --------------------------------------------------------------------
+.SH "FILES"
+.\" --------------------------------------------------------------------
+.
.TP
-\fBDf \fIn\fR\*(ic\en
-Set the shade of gray to be used for filling solid objects to
-.IR n ;
-.I n
-must be an integer between 0 and 1000, where 0 corresponds solid white
-and 1000 to solid black, and values in between correspond to
-intermediate shades of gray.
-This applies only to solid circles, solid ellipses and solid
-polygons.
-By default, a level of 1000 will be used.
-Whatever color a solid object has, it should completely obscure
-everything beneath it.
-A value greater than 1000 or less than 0 can also be used:
-this means fill with the shade of gray that is currently being used
-for lines and text.
-Normally this will be black, but some drivers may provide
-a way of changing this.
+.BI @FONTDIR@/dev name /DESC
+Device description file for device
+.IR name .
+.
.TP
-\fBDC \fId\fR\*(ic\en
-Draw a solid circle with a diameter of
-.I d
-with the leftmost point at the current position.
+.IB \[la]groff_source_dir\[ra] /src/libs/libdriver/input.cc
+Defines the parser and postprocessor for the intermediate output.
+.
+It is located relative to the top directory of the
+.I groff
+source tree, e.g.
+.IR @GROFFSRCDIR@ .
+.
+This parser is the definitive specification of the
+.I groff
+intermediate output format.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+.
+A reference like
+.BR groff (@MAN7EXT@)
+refers to a manual page; here
+.I groff
+in section\~\c
+.I @MAN7EXT@
+of the man-page documentation system.
+.
+To read the example, look up section\~@MAN7EXT@ in your desktop help
+system or call from the shell prompt
+.
+.RS
+.P
+.ShellCommand man @MAN7EXT@ groff
+.RE
+.
+.P
+For more details, see
+.BR man (1).
+.
.TP
-\fBDE \fIdx dy\fR\*(ic\en
-Draw a solid ellipse with a horizontal diameter of
-.I dx
-and a vertical diameter of
-.I dy
-with the leftmost point at the current position.
-.EQ
-delim $$
-.EN
+.BR groff (@MAN1EXT@)
+option
+.B -Z
+and further readings on groff.
+.
.TP
-\fBDp\fR $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\en
-Draw a polygon with,
-for $i = 1 ,..., n+1$, the
-.IR i -th
-vertex at the current position
-$+ sum from j=1 to i-1 ( dx sub j , dy sub j )$.
-At the moment,
-GNU pic only uses this command to generate triangles and rectangles.
+.BR groff (@MAN7EXT@)
+for details of the
+.I groff
+language such as numerical units and escape sequences.
+.
.TP
-\fBDP\fR $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\en
-Like
-.B Dp
-but draw a solid rather than outlined polygon.
+.BR groff_font (@MAN5EXT@)
+for details on the device scaling parameters of the
+.B DESC
+file.
+.
.TP
-\fBDt \fIn\fR\*(ic\en
-Set the current line thickness to
-.I n
-machine units.
-Traditionally Unix troff drivers use a line thickness proportional to the current
-point size; drivers should continue to do this if no
-.B Dt
-command has been given, or if a
-.B Dt
-command has been given with a negative value of
-.IR n .
-A zero value of
-.I n
-selects the smallest available line thickness.
-.LP
-A difficulty arises in how the current position should be changed after
-the execution of these commands.
-This is not of great importance since the code generated by GNU pic
-does not depend on this.
-Given a drawing command of the form
-.IP
-\fB\eD\(fm\fIc\fR $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\(fm
-.LP
-where
-.I c
-is not one of
-.BR c ,
-.BR e ,
-.BR l ,
-.B a
-or
-.BR ~ ,
-Unix troff will treat each of the $x sub i$ as a horizontal quantity,
-and each of the $y sub i$ as a vertical quantity and will assume that
-the width of the drawn object is $sum from i=1 to n x sub i$,
-and that the height is $sum from i=1 to n y sub i$.
-(The assumption about the height can be seen by examining the
-.B st
+.BR troff (@MAN1EXT@)
+generates the device-independent intermediate output.
+.
+.TP
+.BR roff (@MAN7EXT@)
+for historical aspects and the general structure of roff systems.
+.
+.TP
+.BR groff_diff (@MAN7EXT@)
+The differences between the intermediate output in groff and classical
+troff.
+.
+.P
+.BR \%grodvi (@MAN1EXT@),
+.BR \%grohtml (@MAN1EXT@),
+.BR \%grolbp (@MAN1EXT@),
+.BR \%grolj4 (@MAN1EXT@),
+.BR \%grops (@MAN1EXT@),
+.BR \%grotty (@MAN1EXT@)
+.br
+.RS
+the groff postprocessor programs.
+.RE
+.
+.P
+For a treatment of all aspects of the groff system within a single
+document, see the
+.I groff info
+.IR file .
+.
+It can be read within the integrated help systems, within
+.BR emacs (1)
+or from the shell prompt by
+.
+.RS
+.ShellCommand info groff
+.RE
+.
+.P
+The
+.I classical troff output language
+is described in two AT&T Bell Labs CSTR documents available on-line at
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html \
+ "Bell Labs CSTR site" .
+.
+.TP
+.I [CSTR #97]
+.I A Typesetter-independent TROFF
+by
+.I Brian Kernighan
+is the original and most concise documentation on the output language;
+see
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz CSTR\~#97 .
+.
+.TP
+.I [CSTR\~#54]
+The 1992 revision of the
+.I Nroff/\:Troff User's Manual
+by
+.I J.\& F.\& Osanna
and
-.B sb
-registers after using such a
-.B D
-command in a \ew escape sequence.)
-This rule also holds for all the original drawing commands
-with the exception of
-.BR De .
-For the sake of compatibility GNU troff also follows this rule,
-even though it produces an ugly result in the case of the
-.BR Df ,
-.BR Dt ,
-and, to a lesser extent,
-.B DE
-commands.
-Thus after executing a
-.B D
-command of the form
-.IP
-\fBD\fIc\fR $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\en
-.LP
-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 )$.
-.LP
-There is a continuation convention which permits the argument to the
-.B x\ X
-command to contain newlines:
-when outputting the argument to the
-.B x\ X
-command, GNU troff
-will follow each newline in the argument with a
-.B +
-character
-(as usual, it will terminate the entire argument with a newline);
-thus if the line after the line containing the
-.B x\ X
-command starts with
-.BR + ,
-then the newline ending the line containing the
-.B x\ X
-command should be treated as part of the argument to the
-.B x\ X
-command,
-the
-.B +
-should be ignored,
-and the part of the line following the
-.B +
-should be treated like the part of the line following the
-.B x\ X
-command.
-.SH "SEE ALSO"
-.BR groff_font (@MAN5EXT@)
+.I Brian Kernighan
+isn't as concise as
+.I [CSTR\~#97]
+regarding the output language;
+see
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz CSTR\~#54 .
+.
+.
+.\" --------------------------------------------------------------------
+.SH "AUTHORS"
+.\" --------------------------------------------------------------------
+.
+Copyright (C) 1989, 2001, 2002 Free Software Foundation, Inc.
+.P
+This document is distributed under the terms of the FDL (GNU Free
+Documentation License) version 1.1 or later.
+.
+You should have received a copy of the FDL with this package; it is also
+available on-line at the
+.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
+.
+.P
+This document is part of
+.IR groff ,
+the GNU roff distribution.
+.
+It is based on a former version \- published under the GPL \- that
+described only parts of the
+.I groff
+extensions of the output language.
+.
+It has been rewritten 2002 by
+.MTO bwarken@mayn.de "Bernd Warken"
+and is maintained by
+.MTO wl@gnu.org "Werner Lemberg" .
+.
+.\" --------------------------------------------------------------------
+.\" Emacs settings
+.\" --------------------------------------------------------------------
.\"
.\" Local Variables:
.\" mode: nroff
diff --git a/contrib/groff/man/groff_tmac.man b/contrib/groff/man/groff_tmac.man
new file mode 100644
index 0000000..c0d3421
--- /dev/null
+++ b/contrib/groff/man/groff_tmac.man
@@ -0,0 +1,1124 @@
+.
+.TH GROFF_TMAC @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+groff_tmac \- macro files in the roff typesetting system
+.SH DESCRIPTION
+.\" The .SH was moved to this place to make `apropos' happy.
+.
+.
+.\" --------------------------------------------------------------------
+.\" Legalize
+.\" --------------------------------------------------------------------
+.
+.ig
+groff_tmac.5
+
+File position: <groff-source>/man/groff_tmac.man
+
+Last update: 21 Aug 2002
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+written by Bernd Warken <bwarken@mayn.de> and Werner Lemberg
+<wl@gnu.org>
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHOR, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.mso www.tmac
+.
+.if n \{\
+. mso tty-char.tmac
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.ds Ellipsis \&.\|.\|.\&\"
+.
+.\" Global static variables for inter-macro communication
+.rr @+Example_font
+.
+.\" --------------------------------------------------------------------
+.\" setup for the macro definitions below
+.\"
+.\" naming: namespace:cathegory_macro.variable_name (experimental)
+.
+.\" --------------------------------------------------------------------
+.\" configuration of prompt for `.Shell_cmd'* macros
+.ds groffer:Shell_cmd.prompt_text sh#\" prompt for shell commands
+.ds groffer:Shell_cmd+.prompt_text >\" prompt on continuation lines
+.ds groffer:Shell_cmd_base.prompt_font I\" font for prompts
+.
+.\" automatically determine setup from the configuration above
+.als @f groffer:Shell_cmd_base.prompt_font\"
+.als @t groffer:Shell_cmd.prompt_text\"
+.als @t+ groffer:Shell_cmd+.prompt_text\"
+.ds groffer:Shell_cmd.prompt \f[\*[@f]]\*[@t]\f[]\" needed
+.ds groffer:Shell_cmd+.prompt \f[\*[@f]]\*[@t+]\f[]\" needed
+.nr @w \w'\*[groffer:Shell_cmd.prompt]'\"
+.nr @w+ \w'\*[groffer:Shell_cmd+.prompt]'\"
+.ft \*[@f]
+.\" Full prompt width is maximum of texts plus 1m
+.nr groffer:Shell_cmd_base.prompt_width (\n[@w]>?\n[@w+]+1m)\" needed
+.ft
+.rm @f
+.rm @f+
+.rm @t
+.rm @t+
+.rr @w
+.rr @w+
+.
+.\"--------------------------------------------------------------------
+.\" Ignore all arguments like a comment, even after a .eo call.
+.de c
+..
+.c --------------------------------------------------------------------
+.de BIR
+. ie (\\n[.$] < 3) \
+. BI \\$@
+. el \{\
+. ds @tmp@ \fB\\$1\f[]\fI\\$2\f[]
+. shift 2
+. Text \\*[@tmp@]\fR\\$*\f[]
+. rm @tmp@
+. \}
+..
+.c --------------------------------------------------------------------
+.c .Env_var (<env_var_name> [<punct>])
+.c
+.c Display an environment variable, with optional punctuation.
+.c
+.de Env_var
+. nh
+. SM
+. Text \f[CB]\\$1\f[]\\$2
+. hy
+..
+.c --------------------------------------------------------------------
+.c .Error (<text>...)
+.c
+.c Print error message to terminal and abort.
+.c
+.de Error
+. tm \\$*
+. ab
+..
+.c --------------------------------------------------------------------
+.de Example
+. if r@+Example_font \
+. Error previous .Example was not terminated by a ./Example
+. nr @+Example_font \\n[.f]
+. nh
+. nf
+. RS
+. ft CR
+..
+.c --------------------------------------------------------------------
+.de /Example
+. if !r@+Example_font \
+. Error no previous call to .Example
+. ft \\n[@+Example_font]
+. RE
+. fi
+. hy
+. rr @+Example_font
+..
+.
+.c --------------------------------------------------------------------
+.c .Shell_cmd (<CR> [<CI>] ...)
+.c
+.c A shell command line; display args alternating in fonts CR and CI.
+.c
+.c Examples:
+.c .Shell_cmd "groffer --dpi 100 file"
+.c result: `sh# groffer --dpi 100 file'
+.c with 'sh#' in font I, the rest in CR
+.c
+.c .Shell_cmd groffer\~--dpi\~100\~file
+.c result: the same as above
+.c
+.c .Shell_cmd "groffer --dpi=" value " file"
+.c result: sh# groffer --dpi=value file
+.c with `groffer --dpi=' and `file' in CR; `value' in CI
+.c
+.c .Shell_cmd groffer\~--dpi= value \~file
+.c result: the same as the previous example
+.c
+.de Shell_cmd
+. groffer:Shell_cmd_base "\*[groffer:Shell_cmd.prompt]" \\$@
+..
+.c --------------------------------------------------------------------
+.c .Shell_cmd+ (<CR> [<CI>] ...)
+.c
+.c A continuation line for .Shell_cmd.
+.c
+.de Shell_cmd+
+. groffer:Shell_cmd_base "\*[groffer:Shell_cmd+.prompt]" \\$@
+..
+.c --------------------------------------------------------------------
+.c .Shell_cmd_base (<prompt> [<CR> [<CI>] ...])
+.c
+.c A shell command line; display args alternating in fonts CR and CI.
+.c Internal, do not use directly.
+.c
+.c Globals: read-only register @.Shell_cmd_width
+.c
+.de groffer:Shell_cmd_base
+. if (\\n[.$] <= 0) \
+. return
+. nr @+font \\n[.f]\"
+. ds @prompt \\$1\"
+. ft CR
+. c gap between prompt and command
+. nr @+gap \\n[groffer:Shell_cmd_base.prompt_width]-\\w'\\*[@prompt]'\"
+. ds @res \\*[@prompt]\h'\\n[@+gap]u'\"
+. shift
+. ds @cf CR\"
+. while (\\n[.$] > 0) \{\
+. as @res \\f[\\*[@cf]]\\$1\"
+. shift
+. ie '\\*[@cf]'CR' \
+. ds @cf I\"
+. el \
+. ds @cf CR\"
+. \}
+. br
+. ad l
+. nh
+. nf
+. Text \\*[@res]\"
+. fi
+. hy
+. ad
+. br
+. ft \\n[@+font]
+. rr @+font
+. rr @+gap
+. rm @cf
+. rm @res
+..
+.c --------------------------------------------------------------------
+.c .Text (<text>...)
+.c
+.c Treat the arguments as text, no matter how they look.
+.c
+.de Text
+. if (\\n[.$] == 0) \
+. return
+. nop \)\\$*\)
+..
+.c --------------------------------------------------------------------
+.c .Topic ([<indent>])
+.c
+.c A bulleted paragraph
+.c
+.de Topic
+. ie (\\n[.$] = 0) \
+. ds @indent 2m\"
+. el \
+. ds @indent \\$1\"
+. TP \\*[@indent]
+. Text \[bu]
+. rm @indent
+..
+.c --------------------------------------------------------------------
+.c .TP+ ()
+.c
+.c Continuation line for .TP header.
+.c
+.de TP+
+. br
+. ns
+. TP \\$1
+..
+.c --------------------------------------------------------------------
+.de 'char
+. ds @tmp@ `\f(CR\\$1\f[]'
+. shift
+. Text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.c --------------------------------------------------------------------
+.de option
+. ds @tmp@ \f(CB\\$1\f[]
+. shift 1
+. Text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.c --------------------------------------------------------------------
+.de argument
+. ds @tmp@ \f(CI\\$1\f[]
+. shift 1
+. Text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.c --------------------------------------------------------------------
+.de request
+. ds @tmp@ \f(CB\\$1\f[]
+. shift 1
+. Text .\\*[@tmp@]\\$*
+. rm @tmp@
+..
+.c --------------------------------------------------------------------
+.de escape
+. ds @tmp@ \f[CB]\\$1\f[]
+. shift 1
+. Text \[rs]\\*[@tmp@]\\$*
+. rm @tmp@
+..
+.\" --------------------------------------------------------------------
+.\" SH DESCRIPTION
+.\" --------------------------------------------------------------------
+.
+The
+.BR roff (@MAN7EXT@)
+type-setting system provides a set of macro packages suitable for
+special kinds of documents.
+.
+Each macro package stores its macros and definitions in a file called
+the package's
+.BR "tmac file" .
+The name is deduced from
+.RB ` T\c
+.IB roff MAC\c
+.IR ros '.
+.
+.P
+The tmac files are normal roff source documents, except that they
+usually contain only definitions and setup commands, but no text.
+.
+All tmac files are kept in a single or a small number of directories,
+the
+.B tmac
+directories.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "GROFF MACRO PACKAGES"
+.\" --------------------------------------------------------------------
+.
+.I groff
+provides all classical macro packages, some more full packages, and
+some secondary packages for special purposes.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Man\~Pages"
+.\" --------------------------------------------------------------------
+.
+.TP
+.B man
+This is the classical macro package for UNIX manual pages
+(man\~pages); it is quite handy and easy to use; see
+.BR groff_man (@MAN7EXT@).
+.
+.TP
+.B doc
+.TP+
+.B mdoc
+An alternative macro package for man\~pages mainly used in BSD
+systems; it provides many new features, but it is not the standard for
+man\~pages; see
+.BR groff_mdoc (@MAN7EXT@).
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Full Packages"
+.\" --------------------------------------------------------------------
+.
+The packages in this section provide a complete set of macros for
+writing documents of any kind, up to whole books.
+.
+They are similar in functionality; it is a matter of taste which one
+to use.
+.
+.
+.TP
+.B me
+The classical
+.I me
+macro package; see
+.BR groff_me (@MAN7EXT@).
+.
+.
+.TP
+.B mm
+The semi-classical
+.I mm
+macro package; see
+.BR groff_mm (@MAN7EXT@).
+.
+.
+.TP
+.B mom
+The new
+.I mom
+macro package, only available in groff.
+.
+As this is not based on other packages, it can be freely designed.
+.
+So it is expected to become quite a nice, modern macro package.
+.
+See
+.BR groff_mom (@MAN7EXT@).
+.
+.
+.TP
+.B ms
+The classical
+.I ms
+macro package; see
+.BR groff_ms (@MAN7EXT@).
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Special Packages"
+.\" --------------------------------------------------------------------
+.
+The macro packages in this section are not intended for stand-alone
+usage, but can be used to add special functionality to any other
+macro package or to plain groff.
+.
+.
+.TP
+.B tty-char
+Overrides the definition of standard troff characters and some groff
+characters for tty devices.
+.
+The optical appearance is intentionally inferior compared to that of
+normal tty formatting to allow processing with critical equipment.
+.
+.
+.TP
+.B www
+Additions of elements known from the html format, as being used in the
+internet (World Wide Web) pages; this includes URL links and mail
+addresses; see
+.BR groff_www (@MAN7EXT@).
+.
+.
+.\" --------------------------------------------------------------------
+.SH NAMING
+.\" --------------------------------------------------------------------
+.
+In classical roff systems, there was a funny naming scheme for macro
+packages, due to a simplistic design in option parsing.
+.
+Macro packages were always included by option
+.option -m;
+when this option was directly followed by its argument without an
+intervening space, this looked like a long option preceded by a single
+minus \[em] a sensation in the computer stone age.
+.
+To make this optically working for macro package names, all classical
+macro packages choose a name that started with the letter
+.'char m ,
+which was omitted in the naming of the macro file.
+.
+.
+.P
+For example, the macro package for the man pages was called
+.IR man ,
+while its macro file
+.IR tmac.an .
+So it could be activated by the argument
+.I an
+to option
+.option -m ,
+or
+.option -man
+for short.
+.
+.
+.P
+For similar reasons, macro packages that did not start with an
+.'char m
+had a leading
+.'char m
+added in the documentation and in talking; for example, the package
+corresponding to
+.I tmac.doc
+was called
+.I mdoc
+in the documentation, although a more suitable name would be
+.IR doc .
+For, when omitting the space between the option and its argument, the
+command line option for activating this package reads
+.option "-mdoc" .
+.
+.
+.P
+To cope with all situations, actual versions of
+.BR groff (@MAN1EXT@)
+are smart about both naming schemes by providing two macro files
+for the inflicted macro packages; one with a leading
+.'char m ,
+the other one without it.
+.
+So in
+.IR groff ,
+the
+.I man
+macro package may be specified as on of the following four methods:
+.
+.IP
+.Shell_cmd "groff\~\-m\~man"
+.Shell_cmd "groff\~\-man"
+.Shell_cmd "groff\~\-mman"
+.Shell_cmd "groff\~\-m\~an"
+.
+.
+.P
+Recent packages that do not start with
+.'char m
+do not use an additional
+.'char m
+in the documentation.
+.
+For example, the
+.I www
+macro package may be specified only as one of the two methods:
+.
+.IP
+.Shell_cmd "groff\~\-m\~www"
+.Shell_cmd "groff\~\-mwww"
+.
+.
+.P
+Obviously, variants like
+.I -mmwww
+would not make much sense.
+.
+.
+.P
+A second strange feature of classical troff was to name macro files
+according to
+.BIR tmac. name .
+In modern operating systems, the type of a file is specified as
+postfix, the file name extension.
+.
+Again, groff copes with this situation by searching both
+.IB anything .tmac
+and
+.BI tmac. anything
+if only
+.I anything
+is specified.
+.
+.
+.P
+The easiest way to find out which macro packages are available on a
+system is to check the man\~page
+.BR groff (@MAN1EXT@),
+or the contents of the
+.I tmac
+directories.
+.
+.
+.P
+In
+.IR groff ,
+most macro packages are described in\~man pages called
+.BR groff_\f[I]name\f[] (@MAN7EXT@),
+with a leading
+.'char m
+for the classical packages.
+.
+.
+.\" --------------------------------------------------------------------
+.SH INCLUSION
+.\" --------------------------------------------------------------------
+.
+There are several ways to use a macro package in a document.
+.
+The classical way is to specify the troff/groff option
+.option \-m
+.argument name
+at run-time; this makes the contents of the macro package
+.I name
+available.
+.
+In groff, the file
+.IB name .tmac
+is searched within the tmac path; if not found,
+.BI tmac. name
+will be searched for instead.
+.
+.
+.P
+Alternatively, it is also possible to include a macro file by adding
+the request
+.request so
+.I filename
+into the document; the argument must be the full file name of an
+existing file, possibly with the directory where it is kept.
+.
+In groff, this was improved by the similar request
+.request mso
+.IR package ,
+which added searching in the tmac path, just like option
+.option -m
+does.
+.
+.
+.P
+Note that in order to resolve the
+.request so
+and
+.request mso
+requests, the roff preprocessor
+.BR soelim (@MAN1EXT@)
+must be called if the files to be included need preprocessing.
+.
+This can be done either directly by a pipeline on the command line or
+by using the troff/groff option
+.option \-s .
+.
+.I man
+calls soelim automatically.
+.
+.
+.P
+For example, suppose a macro file is stored as
+.I @MACRODIR@/macros.tmac
+and is used in some document called
+.IR docu.roff .
+.
+.
+.P
+At run-time, the formatter call for this is
+.
+.IP
+.Shell_cmd "groff\~\-m\~" "macrofile\~document.roff"
+.
+.
+.P
+To include the macro file directly in the document either
+.
+.IP
+.Example
+. Text .mso macrofile.tmac
+./Example
+.
+.P
+is used or
+.
+.IP
+.Example
+. Text .so @MACRODIR@/macros.tmac
+./Example
+.
+.
+.P
+In both cases, the formatter is called with
+.IP
+.Shell_cmd "troff\~\-s\~" docu.roff
+.
+.
+.P
+If you want to write your own groff macro file, call it
+.IB whatever .tmac
+and put it in some directory of the tmac path, see section
+.BR FILES .
+Then documents can include it with the
+.request mso
+request or the option
+.option -m .
+.
+.
+.ig
+.\" --------------------------------------------------------------------
+.SH CONVENTION
+.\" --------------------------------------------------------------------
+.
+.\" This section does not fit into the framework of this document.
+.
+There is a convention that is supported by many modern roff
+type-setters and
+.BR man (1)
+programs, the
+.I preprocessor word
+described in the following.
+.
+.P
+If the first line in a document is a comment, the first word (after the
+comment characters and a blank) constitutes the
+.B preprocessor
+.BR word .
+That means that the letters of this word are interpreted as
+abbreviations for those preprocessor commands that should be run
+when formatting the document.
+.
+Mostly, only the letters corresponding to the options for the
+preprocessors are recognized,
+.'char e
+(for
+.BR eqn ),
+.\" 'char G ,
+.\" 'char g ,
+.'char p ,
+(for
+.BR pic ),
+.'char R
+(for
+.BR refer ),
+.'char s
+(for
+.BR soelim ),
+and
+.'char t
+(for
+.BR tbl ).
+(see
+.BR roff (@MAN7EXT@)).
+.
+.
+.P
+Besides being a good reminder for the user, some formatters (like the
+.BR man (1)
+program) are even able to automatically start the preprocessors
+specified in the preprocessor word, but do not bet on this.
+.
+.
+.P
+The
+.I man
+program handles some preprocessors automatically, such that in
+man\~pages only the following characters should be used:
+.'char e ,
+.'char p ,
+and
+.'char t .
+.
+.
+..
+.\" --------------------------------------------------------------------
+.SH "WRITING MACROS"
+.\" --------------------------------------------------------------------
+.
+A
+.BR roff (@MAN7EXT@)
+document is a text file that is enriched by predefined formatting
+constructs, such as requests, escape sequences, strings, numeric
+registers, and macros from a macro package.
+.
+These elements are described in
+.BR roff (@MAN7EXT@).
+.
+.
+.P
+To give a document a personal style, it is most useful to extend the
+existing elements by defining some macros for repeating tasks; the best
+place for this is near the beginning of the document or in a separate
+file.
+.
+.
+.P
+Macros without arguments are just like strings.
+.
+But the full power of macros reveals when arguments are passed with a
+macro call.
+.
+Within the macro definition, the arguments are available as the escape
+sequences
+.BR $1 ,
+\*[Ellipsis],
+.BR $9 ,
+.BR $[ \*[Ellipsis] ] ,
+.BR $* ,
+and
+.BR $@ ,
+the name under which the macro was called is in
+.BR $0 ,
+and the number of arguments is in register
+.BR \n[.$] ;
+see
+.BR groff (@MAN7EXT@).
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Copy-in Mode"
+.\" --------------------------------------------------------------------
+.
+The phase when groff reads a macro is called
+.I "copy-in mode"
+in roff-talk.
+.
+This is comparable to the C\~preprocessing phase during the development
+of a program written in the C\~language.
+.
+.
+.P
+In this phase, groff interprets all backslashes; that means that all
+escape sequences in the macro body are interpreted and replaced by
+their value.
+.
+For constant expression, this is wanted, but strings and registers
+that might change between calls of the macro must be protected from
+being evaluated.
+.
+This is most easily done by doubling the backslash that introduces the
+escape sequence.
+.
+This doubling is most important for the positional parameters.
+.
+For example, to print information on the arguments that were passed to
+the macro to the terminal, define a macro named `.print_args',
+say.
+.
+.
+.P
+.ds @1 \[rs]f[I]\[rs]\[rs]$0\[rs]f[]\"
+.ds @2 arguments:\"
+.Example
+. Text .ds midpart was called with
+. Text .de print_args
+. Text .\~\~tm\~\*[@1]\~\[rs]\[rs]*[midpart]\~\[rs]\[rs]n[.$]\~\*[@2]
+. Text .\~\~tm\~\[rs]\[rs]$*
+. Text ..
+./Example
+.rm @1
+.rm @2
+.
+.
+.P
+When calling this macro by
+.P
+.Example
+. Text .print_args arg1 arg2
+./Example
+.P
+the following text is printed to the terminal:
+.Example
+. Text \f[CI]print_args\f[] was called with the following 2 arguments:
+arg1 arg2
+./Example
+.
+.
+.P
+Let's analyze each backslash in the macro definition.
+.
+As the positional parameters and the number of arguments will change
+with each call of the macro their leading backslash must be doubled,
+which results in
+.I \[rs]\[rs]$*
+and
+.IR \[rs]\[rs][.$] .
+The same applies to the macro name because it could be called with an
+alias name, so
+.IR \[rs]\[rs]$0 .
+.
+.
+.P
+On the other hand,
+.I midpart
+is a constant string, it will not change, so no doubling for
+.IR \[rs]*[midpart] .
+The
+.I \[rs]f
+escape sequences are predefined groff elements for setting the font
+within the text.
+.
+Of course, this behavior will not change, so no doubling with
+.I \[rs]f[I]
+and
+.IR \[rs]f[] .
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Draft Mode"
+.\" --------------------------------------------------------------------
+.
+Writing groff macros is easy when the escaping mechanism is temporarily
+disabled.
+.
+In groff, this is done by enclosing the macro definition(s) into a
+pair of
+.B .eo
+and
+.B .ec
+requests.
+.
+Then the body in the macro definition is just like a normal part of
+the document \[em] text enhanced by calls of requests, macros,
+strings, registers, etc.
+.
+For example, the code above can be written in a simpler way by
+.
+.
+.P
+.ds @1 \[rs]f[I]\[rs]$0\[rs]f[]\"
+.ds @2 arguments:\"
+.Example
+. Text .eo
+. Text .ds midpart was called with
+. Text .de print_args
+. Text .\~\~tm\~\*[@1]\~\[rs]*[midpart]\~\[rs]n[.$]\~\*[@2]
+. Text .\~\~tm\~\[rs]$*
+. Text ..
+. Text .ec
+./Example
+.rm @1
+.rm @2
+.
+.
+.P
+Unfortunately, draft mode cannot be used universally.
+.
+Although it is good enough for defining normal macros, draft mode
+will fail with advanced applications, such as indirectly defined
+strings, registers, etc.
+.
+An optimal way is to define and test all macros in draft mode and then
+do the backslash doubling as a final step; do not forget to remove the
+.I .eo
+request.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Tips for Macro Definitions"
+.\" --------------------------------------------------------------------
+.
+.Topic
+Start every line with a dot, for example, by using the groff request
+.B .nop
+for text lines, or write your own macro that handles also text lines
+with a leading dot.
+.
+.IP
+.Example
+. Text .de Text
+. Text .\~\~if (\[rs]\[rs]n[.$] == 0)\~\[rs]
+. Text .\~\~\~\~return
+. Text .\~nop\~\[rs])\[rs]\[rs]$*[rs]\)
+. Text ..
+./Example
+.
+.Topic
+Write a comment macro that works both for copy-in and draft mode; for
+as escaping is off in draft mode, trouble might occur when normal
+comments are used.
+.
+For example, the following macro just ignores its arguments, so it
+acts like a comment line:
+.
+.IP
+.Example
+. Text .de\~c
+. Text ..
+. Text .c\~This\~is\~like\~a\~comment\~line.
+./Example
+.
+.Topic
+In long macro definitions, make ample use of comment lines or empty
+lines for a better structuring.
+.
+.Topic
+To increase readability, use groff's indentation facility for requests
+and macro calls (arbitrary whitespace after the leading dot).
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Diversions"
+.\" --------------------------------------------------------------------
+.
+Diversions can be used to realize quite advanced programming
+constructs.
+.
+They are comparable to pointers to large data structures in the
+C\~programming language, but their usage is quite different.
+.
+.
+.P
+In their simplest form, diversions are multi-line strings, but
+they get their power when diversions are used dynamically within macros.
+.
+The information stored in a diversion can be retrieved by calling the
+diversion just like a macro.
+.
+.
+.P
+Most of the problems arising with diversions can be avoided if you are
+conscious about the fact that diversions always deal with complete
+lines.
+.
+If diversions are used when the line buffer has not been flashed,
+strange results are produced; not knowing this, many people get
+desperate about diversions.
+.
+To ensure that a diversion works, line breaks should be added at the
+right places.
+.
+To be on the secure side, enclose everything that has to do with
+diversions into a pair of line breaks; for example, by amply using
+.B .br
+requests.
+.
+This rule should be applied to diversion definition, both inside and
+outside, and to all calls of diversions.
+.
+This is a bit of overkill, but it works nicely.
+.
+.
+.P
+[If you really need diversions which should ignore the current partial
+line, use environments to save the current partial line and/\:or use the
+.B .box
+request.]
+.
+.
+.P
+The most powerful feature using diversions is to start a diversion
+within a macro definition and end it within another macro.
+.
+Then everything between each call of this macro pair is stored within
+the diversion and can be manipulated from within the macros.
+.
+.
+.\" --------------------------------------------------------------------
+.SH FILES
+.\" --------------------------------------------------------------------
+.
+All macro names must be named
+.IB name .tmac
+to fully use the tmac mechanism.
+.
+.BI tmac. name
+as with classical packages is possible as well, but deprecated.
+.
+.
+.P
+The macro files are kept in the
+.IR "tmac directories" ;
+a colon separated list of these constitutes the
+.IR "tmac path" .
+.
+.
+.P
+The search sequence for macro files is (in that order):
+.
+.Topic
+the directories specified with troff/groff's
+.B \-M
+command line option
+.
+.Topic
+the directories given in the
+.Env_var $GROFF_TMAC_PATH
+environment variable
+.
+.Topic
+the current directory (only if in unsafe mode, which is enabled by the
+.B \-U
+command line switch)
+.
+.Topic
+the home directory
+.
+.Topic
+a platform-specific directory, being
+.B @SYSTEMMACRODIR@
+in this installation
+.
+.Topic
+a site-specific (platform-independent) directory, being
+.B @LOCALMACRODIR@
+in this installation
+.
+.Topic
+the main tmac directory, being
+.B @MACRODIR@
+in this installation
+.
+.
+.\" --------------------------------------------------------------------
+.SH ENVIRONMENT
+.\" --------------------------------------------------------------------
+.
+.TP
+.Env_var $GROFF_TMAC_PATH
+A colon separated list of additional tmac directories in which to search
+for macro files.
+.
+See the previous section for a detailed description.
+.
+.
+.\" --------------------------------------------------------------------
+.SH AUTHOR
+.\" --------------------------------------------------------------------
+.
+Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+.
+.P
+This document is distributed under the terms of the FDL (GNU Free
+Documentation License) version 1.1 or later.
+.
+You should have received a copy of the FDL on your system, it is also
+available on-line at the
+.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
+.
+.P
+This document is part of
+.IR groff ,
+the GNU roff distribution.
+.
+It was written by
+.MTO bwarken@mayn.de "Bernd Warken" ;
+it is maintained by
+.MTO wl@gnu.org "Werner Lemberg" .
+.
+.
+.\" --------------------------------------------------------------------
+.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+.
+A complete reference for all parts of the groff system is found in the
+groff
+.BR info (1)
+file.
+.
+.TP
+.BR groff (@MAN1EXT@)
+an overview of the groff system.
+.
+.TP
+.BR groff_man (@MAN7EXT@),
+.TP+
+.BR groff_mdoc (@MAN7EXT@),
+.TP+
+.BR groff_me (@MAN7EXT@),
+.TP+
+.BR groff_mm (@MAN7EXT@),
+.TP+
+.BR groff_mom (@MAN7EXT@),
+.TP+
+.BR groff_ms (@MAN7EXT@),
+.TP+
+.BR groff_www (@MAN7EXT@).
+the groff tmac macro packages.
+.
+.TP
+.BR groff (@MAN7EXT@)
+the groff language.
+.
+.
+.P
+The Filesystem Hierarchy Standard is available at the
+.URL http://\:www.pathname.com/\:fhs/ "FHS web site" .
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff --git a/contrib/groff/man/roff.man b/contrib/groff/man/roff.man
index 2897ac0..5a9c5b5 100644
--- a/contrib/groff/man/roff.man
+++ b/contrib/groff/man/roff.man
@@ -1,16 +1,18 @@
-'\" t
.ig
-roff.7
+roff.man
+
+Last update: 22 Apr 2002
This file is part of groff, the GNU roff type-setting system.
-Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
written by Bernd Warken <bwarken@mayn.de>
+maintained by Werner Lemberg <wl@gnu.org>
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHOR, with no
+Invariant Sections being this .ig-section and AUTHORS, with no
Front-Cover Texts, and with no Back-Cover Texts.
A copy of the Free Documentation License is included as a file called
@@ -21,6 +23,8 @@ FDL in the main directory of the groff source package.
.\" Setup
.\" --------------------------------------------------------------------
.
+.mso www.tmac
+.
.if n \{\
. mso tty-char.tmac
. ftr CR R
@@ -28,304 +32,888 @@ FDL in the main directory of the groff source package.
. ftr CB B
.\}
.
-.\" text lines in macro definitions or bracketed sections \{...\}
-.de text
-. if 1 \&\\$*\&
+.if '\*[.T]'dvi' \{\
+. ftr CB CW
+.\}
+.
+.
+.\" --------------------------------------------------------------------
+.\" String definitions
+.
+.\" Final `\""' comments are used to make Emacs happy, sic \""
+.
+.\" The `-' sign for options.
+.ie t \{\
+. ds @- \-\"
+. ds @-- \-\-\"
+.\}
+.el \{\
+. ds @- -\"
+. ds @-- --\"
+.\}
+.
+.ds Comment \.\[rs]\[dq]\"
+.ds Ellipsis \.\|.\|.\&\"
+.
+.
+.\" --------------------------------------------------------------------
+.\" Begin of macro definitions
+.
+.de c
+.\" this is like a comment request when escape mechanism is off
..
.
-.de option
-. ds @tmp@ \f(CB\\$1\fP
-. shift 1
-. text \\*[@tmp@]\\$*
-. rm @tmp@
+.eo
+.
+.c ---------------------------------------------------------------------
+.
+.de Text
+. nop \)\$*
..
.
-.de 'char
-. ds @tmp@ `\f(CB\\$1\fP'
+.de CodeSkip
+. ie t \
+. sp 0.2v
+. el \
+. sp
+..
+.
+.de Esc
+. ds @1 \$1\"
. shift
-. text \\*[@tmp@]\\$*
-. rm @tmp@
+. Text \f[B]\[rs]\*[@1]\f[]\$*
+. rm @1
..
.
-.de esc
-. ds @tmp@ \f(CB\e\\$1\fP
+.de QuotedChar
+. ds @1 \$1
. shift
-. text \\*[@tmp@]\\$*
-. rm @tmp@
+. nop `\f[B]\*[@1]\f[]'\$*
+. rm @1
..
.
-.de argname
-. ds @tmp@ \f(CI\\$1\fP
-. shift 1
-. text \\*[@tmp@]\\$*
-. rm @tmp@
+.c --------------------------------------------------------------------
+.
+.c a shell command line
+.de ShellCommand
+. br
+. ad l
+. nh
+. Text \f[I]sh#\h'1m'\f[]\f[CR]\$*\f[]\&\"
+. ft R
+. ft P
+. hy
+. ad
..
.
-.de prefixednumber
-. ds @tmp@ \&\\$1\ \f(CR\\$2\fP
-. shift 2
-. text \\*[@tmp@]\\$*
-. rm @tmp@
+.c --------------------------------------------------------------------
+.
+.c ShortOpt ([c [punct]])
+.c
+.c `-c' somewhere in the text.
+.c The second argument is some trailing punctuation.
+.c
+.de ShortOpt
+. ds @1 \$1\"
+. shift
+. nh
+. Text \f[CB]\*[@-]\f[]\f[B]\*[@1]\f[]\/\$*
+. hy
+. rm @1
+..
+.
+.de TP+
+. br
+. ns
+. TP \$1
..
.
-.de TQ
-.br
-.ns
-.TP \\$1
+.c --------------------------------------------------------------------
+.
+.c Topic
+.c
+.de Topic
+. TP 2m
+. Text \[bu]
..
.
+.ec
+.\" End of macro definitions
+.
+.
.\" --------------------------------------------------------------------
.\" Title
.\" --------------------------------------------------------------------
+.
.TH ROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
.SH NAME
-roff \- a survey of the roff typesetting system
+roff \- concepts and history of roff typesetting
+.
+.
.\" --------------------------------------------------------------------
.SH DESCRIPTION
.\" --------------------------------------------------------------------
+.
.I roff
is the general name for a set of type-setting programs, known under
names like
.IR troff ,
.IR nroff ,
+.IR ditroff ,
.IR groff ,
etc.
-.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
+.
+A roff type-setting system consists of an extensible text formatting
+language and a set of programs for printing and converting to other
+text formats.
+.
+Traditionally, it is the main text processing system of Unix; every
+Unix-like operating system still distributes a roff system as a core
+package.
+.
+.P
The most common roff system today is the free software implementation
+.IR "GNU roff",
+.BR groff (@MAN1EXT@).
+.
+The pre-groff implementations are referred to as
+.I classical
+(dating back as long as 1973).
+.
.I groff
-(from `GNU\ roff').
-The pre-groff implementations are referred to as `classical' (dating
-back as long as 1973).
-.LP
+implements the look-and-feel and functionality of its classical
+ancestors, but has many extensions.
+.
+As
.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.
+is the only roff system that is available for every (or almost every)
+computer system it is the de-facto roff standard today.
+.
+.P
+In some ancient Unix systems, there was a binary called
+.B roff
+that implemented the even more ancient
+.B runoff
+of the
+.I Multics
+operating system, cf. section
+.BR HISTORY .
+The functionality of this program was very restricted even in
+comparison to ancient troff; it is not supported any longer.
+.
+Consequently, in this document, the term
+.I roff
+always refers to the general meaning of
+.IR "roff system" ,
+not to the ancient roff binary.
+.
+.P
+In spite of its age, roff is in wide use today, for example, the manual
+pages on UNIX systems
+.RI ( man\~pages\/ ),
+many software books, system documentation, standards, and corporate
+documents are written in roff.
+.
The roff output for text devices is still unmatched, and its graphical
-output has the same quality as 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.
+output has the same quality as other free type-setting programs and is
+better than some of the commercial systems.
+.
+.P
+The most popular application of roff is the concept of
+.I manual pages
+or shortly
+.IR "man pages" ;
+this is the standard documentation system on many operating systems.
+.
+.P
+This document describes the historical facts around the development
+of the
+.IR "roff system" ;
+some usage aspects common to all roff versions, details on the roff
+pipeline, which is usually hidden behind front-ends like
+.BR groff (@MAN1EXT@);
+an general overview of the formatting language; some tips for editing
+roff files; and many pointers to further readings.
+.
+.
.\" --------------------------------------------------------------------
-.SH "FORMATTING LANGUAGE"
+.SH "HISTORY"
.\" --------------------------------------------------------------------
-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
+.
+The
.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.
+text processing system has a very long history, dating back to the
+1960s.
+.
+The roff system itself is intimately connected to the Unix operating
+system, but its roots go back to the earlier operating systems CTSS
+and Multics.
+.
+.
.\" --------------------------------------------------------------------
-.SH FORMATTERS
+.SS "The Predecessor runoff"
.\" --------------------------------------------------------------------
-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
+.
+.P
+The evolution of
.I roff
-had two formatters,
+is intimately related to the history of the operating systems.
+.
+Its predecessor
+.B runoff
+was written by
+.I Jerry Saltzer
+on the
+.I CTSS
+operating system
+.RI ( "Compatible Time Sharing System" )
+as early as 1961.
+.
+When CTTS was further developed into the operating system
+.URL http://\:www.multicians.org "Multics" ,
+the famous predecessor of Unix from 1963,
+.I runoff
+became the main format for documentation and text processing.
+.
+Both operating systems could only be run on very expensive computers
+at that time, so they were mostly used in research and for official
+and military tasks.
+.
+.P
+The possibilities of the
+.I runoff
+language were quite limited as compared to modern roff.
+.
+Only text output was possible in the 1960s.
+.
+This could be implemented by a set of requests of length\~2, many of
+which are still identically used in roff.
+.
+The language was modelled according to the habits of typesetting in
+the pre-computer age, where lines starting with a dot were used in
+manuscripts to denote formatting requests to the person who would
+perform the typesetting manually later on.
+.
+.P
+The runoff program was written in the
+.I PL/1
+language first, later on in
+.IR BCPL ,
+the grandmother of the
+.IR C \~\c
+programming language.
+.
+In the Multics operating system, the help system was handled by
+runoff, similar to roff's task to manage the Unix manual pages.
+.
+There are still documents written in the runoff language; for examples
+see Saltzer's home page, cf. section
+.BR "SEE ALSO" .
+.
+.
+.\" --------------------------------------------------------------------
+.SS "The Classical nroff/troff System"
+.\" --------------------------------------------------------------------
+.
+In the 1970s, the Multics off-spring
+.I Unix
+became more and more popular because it could be run on affordable
+machines and was easily available for universities at that time.
+.
+At MIT (the Massachusetts Institute of Technology), there was a need to
+drive the Wang
+.I Graphic Systems CAT
+typesetter, a graphical output device from a PDP-11 computer running
+Unix.
+.
+As runoff was too limited for this task it was further developed into
+a more powerful text formatting system by
+.IR "Josef F. Osanna" ,
+a main developer of the Multics operating system and programmer of
+several runoff ports.
+.
+.P
+The name
+.I runoff
+was shortened to
+.IR roff .
+The greatly enlarged language of Osanna's concept included already all
+elements of a full
+.IR "roff system" .
+.
+All modern roff systems try to implement compatibility to this system.
+.
+So Joe Osanna can be called the father of all roff systems.
+.
+.P
+This first
+.I roff system
+had three formatter programs.
+.
+.TP
+.B troff
+.RI ( "typesetter roff\/" )
+generated a graphical output for the
+.I CAT
+typesetter as its only device.
+.
+.TP
.B nroff
-for text devices and
+produced text output suitable for terminals and line printers.
+.
+.TP
+.B roff
+was the reimplementation of the former runoff program with its limited
+features; this program was abandoned in later versions.
+.
+Today, the name
+.I roff
+is used to refer to a troff/\:nroff sytem as a whole.
+.
+.P
+Osanna first version was written in the PDP-11 assembly language and
+released in 1973.
+.
+.I Brian Kernighan
+joined the
+.I roff
+development by rewriting it in the C\~programming language.
+.
+The C\~version was released in 1975.
+.
+.P
+The syntax of the formatting language of the
+.BR nroff / troff
+programs was documented in the famous
+.IR "Troff User's Manual [CSTR\~#54]" ,
+first published in 1976, with further revisions up to 1992 by Brian
+Kernighan.
+.
+This document is the specification of the
+.IR "classical troff" .
+All later
+.I roff
+systems tried to establish compatibility with this specification.
+.
+.P
+After Osanna had died in 1977 by a heart-attack at the age of about\~50,
+Kernighan went on with developing troff.
+.
+The next milestone was to equip troff with a general interface to
+support more devices, the intermediate output format and the
+postprocessor system.
+.
+This completed the structure of a
+.I "roff system"
+as it is still in use today; see section
+.BR "USING ROFF" .
+.
+In 1979, these novelties were described in the paper
+.IR "[CSTR\~#97]" .
+This new troff version is the basis for all existing newer troff
+systems, including
+.IR groff .
+.
+On some systems, this
+.I device independent troff
+got a binary of its own, called
+.BR ditroff (@MAN7EXT@).
+.
+All modern
.B troff
-for graphical devices.
-.LP
-These programs still exist in the
+programs already provide the full ditroff capabilities automatically.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Commercialization"
+.\" --------------------------------------------------------------------
+.
+A major degradation occurred when the easily available Unix\~7
+operating system was commercialized.
+.
+A whole bunch of divergent operating systems emerged, fighting each
+other with incompatibilities in their extensions.
+.
+Luckily, the incompatibilities did not fight the original troff.
+.
+All of the different commercial roff systems made heavy use of
+Osanna/\:Kernighan's open source code and documentation, but sold them
+as \[lq]their\[rq] system \[em] with only minor additions.
+.
+.P
+The source code of both the ancient Unix and classical troff weren't
+available for two decades.
+.
+Fortunately, Caldera bought SCO UNIX in 2001.
+.
+In the following, Caldera made the ancient source code accessible
+on-line for non-commercial use, cf. section
+.BR "SEE ALSO" .
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Free roff"
+.\" --------------------------------------------------------------------
+.
+None of the commercial roff systems could attain the status of a
+successor for the general roff development.
+.
+Everyone was only interested in their own stuff.
+.
+This led to a steep downfall of the once excellent
+Unix operating system during the 1980s.
+.
+.P
+As a counter-measure to the galopping commercialization, AT&T Bell
+Labs tried to launch a rescue project with their
+.I Plan\~9
+operating system.
+.
+It is freely available for non-commercial use, even the source code,
+but has a proprietary license that empedes the free development.
+.
+This concept is outdated, so Plan\~9 was not accepted as a platform to
+bundle the main-stream development.
+.
+.P
+The only remedy came from the emerging free operatings systems
+(386BSD, GNU/\:Linux, etc.) and software projects during the 1980s and
+1990s.
+.
+These implemented the ancient Unix features and many extensions, such
+that the old experience is not lost.
+.
+In the 21st century, Unix-like systems are again a major factor in
+computer industry \[em] thanks to free software.
+.
+.P
+The most important free roff project was the GNU port of troff,
+created by James Clark and put under the
+.URL http://\:www.gnu.org/\:copyleft "GNU Public License" .
+.
+It was called
.I groff
-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.
+.RI ( "GNU roff" ).
+See
+.BR groff (@MAN1EXT@)
+for an overview.
+.
+.P
+The groff system is still actively developed.
+.
+It is compatible to the classical troff, but many extensions were
+added.
+.
+It is the first roff system that is available on almost all operating
+systems \[em] and it is free.
+.
+This makes groff the de-facto roff standard today.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "USING ROFF"
+.\" --------------------------------------------------------------------
+.
+Most people won't even notice that they are actually using roff.
+.
+When you read a system manual page (man page) roff is working in the
+background.
+.
+Roff documents can be viewed with a native viewer called
+.BR xditview (1x),
+a standard program of the X window distribution, see
+.BR X (7x).
+.
+But using roff explicitly isn't difficult either.
+.
+.P
+Some roff implementations provide wrapper programs that make it easy
+to use the roff system on the shell command line.
+.
+For example, the GNU roff implementation
+.BR groff (@MAN1EXT@)
+provides command line options to avoid the long command pipes of
+classical troff; a program
+.BR grog (@MAN1EXT@)
+tries to guess from the document which arguments should be used for a
+run of groff; people who do not like specifying command line options
+should try the
+.BR groffer (@MAN1EXT@)
+program for graphically displaying groff files and man pages.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "The roff Pipe"
+.\" --------------------------------------------------------------------
+.
+Each roff system consists of preprocessors, roff formatter programs,
+and a set of device postprocessors.
+.
+This concept makes heavy use of the
+.I piping
+mechanism, that is, a series of programs is called one after the other,
+where the output of each program in the queue is taken as the input
+for the next program.
+.
+.CodeSkip
+.
+.ds @1 "cat \f[I]file\f[P] |\""
+.ds @2 "\*[Ellipsis] | \f[I]preproc\f[P] | \*[Ellipsis] |\""
+.ds @3 "troff \f[I]options\f[P] | \f[I]postproc\f[P]\""
+.
+.ShellCommand "\*[@1] \*[@2] \*[@3]"
+.
+.rm @1
+.rm @2
+.rm @3
+.P
+The preprocessors generate roff code that is fed into a roff formatter
+(e.g. troff), which in turn generates
+.I intermediate output
+that is fed into a device postprocessor program for printing or final
+output.
+.
+.P
+All of these parts use programming languages of their own; each
+language is totally unrelated to the other parts.
+.
+Moreover, roff macro packages that were tailored for special purposes
+can be included.
+.
+.P
+Most roff documents use the macros of some package, intermixed with
+code for one or more preprocessors, spiced with some elements from the
+plain roff language.
+.
+The full power of the roff formatting language is seldom needed by
+users; only programmers of macro packages need to know about the gory
+details.
+.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Preprocessors"
+.\" --------------------------------------------------------------------
+.
+A roff preprocessor is any program that generates output that
+syntactically obeys the rules of the roff formatting language.
+.
+Each preprocessor defines a language of its own that is translated
+into roff code when run through the preprocessor program.
+.
+Parts written in these languages may be included within a roff
+document; they are identified by special roff requests or macros.
+.
+Each document that is enhanced by preprocessor code must be run
+through all corresponding preprocessors before it is fed into the
+actual roff formatter program, for the formatter just ignores all
+alien code.
+.
+The preprocessor programs extract and transform only the document
+parts that are determined for them.
+.
+.P
+There are a lot of free and commercial roff preprocessors.
+.
+Some of them aren't available on each system, but there is a small
+set of preprocessors that are considered as an integral part of each
+roff system.
+.
+The classical preprocessors are
+.
+
+.de @TP
+.\" local indent for .TP
+.TP \\w'\\f[B]soelim\\f[P]'u+2n
+..
+.P
.RS
-.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.
+.@TP
+.B tbl
+for tables
+.@TP
+.B eqn
+for mathematical formul\[ae]
+.@TP
+.B pic
+for drawing diagrams
+.@TP
+.B refer
+for bibliographic references
+.@TP
+.B soelim
+for including macro files from standard locations
.PD
.RE
-.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"
+.
+.P
+Other known preprocessors that are not available on all systems
+include
+.
+.P
+.RS
+.PD 0
+.@TP
+.B chem
+for drawing chemical formul\[ae].
+.@TP
+.B grap
+for constructing graphical elements.
+.@TP
+.B grn
+for including
+.BR gremlin (1)
+pictures.
+.PD
+.RE
+.
+.rm @TP
+.
+.\" --------------------------------------------------------------------
+.SS "Formatter Programs"
.\" --------------------------------------------------------------------
+.
+A
+.I roff formatter
+is a program that parses documents written in the roff formatting
+language or uses some of the roff macro packages.
+.
+It generates
+.IR "intermediate output" ,
+which is intended to be fed into a single device postprocessor that
+must be specified by a command-line option to the formatter program.
+.
+The documents must have been run through all necessary preprocessors
+before.
+.
+.P
+The output produced by a roff formatter is represented in yet another
+language, the
+.IR "intermediate output format"
+or
+.IR "troff output" .
+This language was first specified in
+.IR "[CSTR\~#97]" ;
+its GNU extension is documented in
+.BR groff_out (@MAN5EXT@).
+.
+The intermediate output language is a kind of assembly language
+compared to the high-level roff language.
+.
+The generated intermediate output is optimized for a special device,
+but the language is the same for every device.
+.
+.P
+The roff formatter is the heart of the roff system.
+.
+The traditional roff had two formatters,
+.B nroff
+for text devices and
+.B troff
+for graphical devices.
+.
+.P
+Often, the name
+.I troff
+is used as a general term to refer to both formatters.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Devices and Postprocessors"
+.\" --------------------------------------------------------------------
+.
+Devices are hardware interfaces like printers, text or graphical
+terminals, etc., or software interfaces such as a conversion into a
+different text or graphical format.
+.
+.P
+A roff postprocessor is a program that transforms troff output into a
+form suitable for a special device.
+.
+The roff postprocessors are like device drivers for the output target.
+.
+.P
+For each device there is a postprocessor program that fits the device
+optimally.
+.
+The postprocessor parses the generated intermediate output and
+generates device-specific code that is sent directly to the device.
+.
+.P
+The names of the devices and the postprocessor programs are not fixed
+because they greatly depend on the software and hardware abilities of
+the actual computer.
+.
+For example, the classical devices mentioned in
+.I [CSTR\~#54]
+have greatly changed since the classical times.
+.
+The old hardware doesn't exist any longer and the old graphical
+conversions were quite imprecise when compared to their modern
+counterparts.
+.
+.P
+For example, the Postscript device
+.I post
+in classical troff had a resolution
+of 720, while groff's
+.I ps
+device has 72000, a refinement of factor 100.
+.
+.P
+Today the operating systems provide device drivers for most
+printer-like hardware, so it isn't necessary to write a special
+hardware postprocessor for each printer.
+.
+.
+.\" --------------------------------------------------------------------
+.SH "ROFF PROGRAMMING"
+.\" --------------------------------------------------------------------
+.
+Documents using roff are normal text files decorated by roff
+formatting elements.
+.
+The roff formatting language is quite powerful; it is almost a full
+programming language and provides elements to enlarge the language.
+.
+With these, it became possible to develop macro packages that are
+tailored for special applications.
+.
+Such macro packages are much handier than plain roff.
+.
+So most people will choose a macro package without worrying about the
+internals of the roff language.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Macro Packages"
+.\" --------------------------------------------------------------------
+.
Macro packages are collections of macros that are suitable to format a
special kind of documents in a convenient way.
+.
This greatly eases the usage of roff.
+.
The macro definitions of a package are kept in a file called
.IB name .tmac
-(or
+(classically
.BI tmac. name\c
-) where
-.I name
-is the internal roff name for this package.
-All tmac files are stored in a single or few directories at standard
+).
+.
+All tmac files are stored in one or more directories at standardized
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
+.
+Details on the naming of macro packages and their placement is found
+in
.BR groff_tmac (@MAN5EXT@).
-.LP
+.
+.P
+A macro package that is to be used in a document can be announced to
+the formatter by the command line option
+.ShortOpt m ,
+see
+.BR troff (@MAN1EXT@),
+or it can be specified within a document using the file inclusion
+requests of the roff language, see
+.BR groff (@MAN7EXT@).
+.
+.P
Famous classical macro packages are
-.IR man ,
-.IR mandoc ,
-and
+.I man
+for traditional man pages,
.I mdoc
-for manual pages and
-.IR me ,
-.IR ms ,
+for BSD-style manual pages;
+the macro sets for books, articles, and letters are
+.I me
+(probably from the first name of its creator
+.I Eric
+Allman),
+.I ms
+(from
+.IR "Manuscript Macros\/" ),
and
.I mm
-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.
+(from
+.IR "Memorandum Macros\/" ).
+.
+.
+.\" --------------------------------------------------------------------
+.SS "The roff Formatting Language"
+.\" --------------------------------------------------------------------
+.
+The classical roff formatting language is documented in the
+.I Troff User's Manual
+.IR "[CSTR\~#54]" .
+.
+The roff language is a full programming language providing requests,
+definition of macros, escape sequences, string variables, number or
+size registers, and flow controls.
+.
+.P
+.I Requests
+are the predefined basic formatting commands similar to the commands
+at the shell prompt.
+.
+The user can define request-like elements using predefined roff
+elements.
+.
+These are then called
+.IR macros .
+.
+A document writer will not note any difference in usage for requests
+or macros; both are written on a line on their own starting with a dot.
+.
+.P
+.I Escape sequences
+are roff elements starting with a backslash
+.QuotedChar \[rs] .
+They can be inserted anywhere, also in the midst of text in a line.
+.
+They are used to implement various features, including the insertion of
+non-ASCII characters with
+.Esc ( ,
+font changes with
+.Esc f ,
+in-line comments with
+.Esc \[dq] ,
+the escaping of special control characters like
+.Esc \[rs] ,
+and many other features.
+.
+.P
+.I Strings
+are variables that can store a string.
+.
+A string is stored by the
+.B .ds
+request.
+.
+The stored string can be retrieved later by the
+.B \[rs]*
+escape sequence.
+.
+.P
+.I Registers
+store numbers and sizes.
+.
+A register can be set with the request
+.B .nr
+and its value can be retrieved by the escape sequence
+.BR "\[rs]n" .
+.
+.
.\" --------------------------------------------------------------------
.SH "FILE NAME EXTENSIONS"
.\" --------------------------------------------------------------------
-Manual pages (man-pages) take the section number as a file name
+.
+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
+i.e., it is kept in section\~7
+of the man pages.
+.
+.P
The classical macro packages take the package name as an extension, e.g.
.IB file. me
for a document using the
@@ -342,201 +930,347 @@ for
.I pic
files,
etc.
-.ig
-.LP
+.
+.P
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
+.IB file. tr
+for
+.I troff file
+is seen now and then.
+.
+Maybe there should be a standardization for the filename extensions of
+roff files.
+.
+.P
File name extensions can be very handy in conjunction with the
.BR less (1)
pager.
-It provides the possibility to feed all input into a command-line pipe that
-is specified in the shell environment variable
-.B LESSOPEN
-This process is not well documented, so here an example
-.B LESSOPEN='|lesspipe %s'
+.
+It provides the possibility to feed all input into a command-line pipe
+that is specified in the shell environment variable
+.BR LESSOPEN .
+This process is not well documented, so here an example:
+.
+.CodeSkip
+.ShellCommand LESSOPEN='|lesspipe %s'
+.CodeSkip
+.
where
.B lesspipe
is either a system supplied command or a shell script of your own.
-..
+.
+.
+.\" --------------------------------------------------------------------
+.SH "EDITING ROFF"
+.\" --------------------------------------------------------------------
+.
+The best program for editing a roff document is Emacs (or Xemacs), see
+.BR emacs (1).
+It provides an
+.I nroff
+mode that is suitable for all kinds of roff dialects.
+.
+This mode can be activated by the following methods.
+.
+.P
+When editing a file within Emacs the mode can be changed by typing
+.RI ` "M-x nroff-mode" ',
+where
+.B M-x
+means to hold down the
+.B Meta
+key (or
+.BR Alt )
+and hitting the
+.BR x\~ key
+at the same time.
+.
+.P
+But it is also possible to have the mode automatically selected when
+the file is loaded into the editor.
+.
+.Topic
+The most general method is to include the following 3 comment lines at
+the end of the file.
+.
+.CodeSkip
+.nf
+.B \*[Comment] Local Variables:
+.B \*[Comment] mode: nroff
+.B \*[Comment] End:
+.fi
+.
+.Topic
+There is a set of file name extensions, e.g. the man pages that
+trigger the automatic activation of the nroff mode.
+.
+.Topic
+Theoretically, it is possible to write the sequence
+.CodeSkip
+.B \*[Comment] \%-*-\ nroff\ -*-
+.CodeSkip
+as the first line of a file to have it started in nroff mode when
+loaded.
+.
+Unfortunately, some applications such as the
+.B man
+program are confused by this; so this is deprecated.
+.
+.P
+All roff formatters provide automated line breaks and horizontal and
+vertical spacing.
+.
+In order to not disturb this, the following tips can be helpful.
+.
+.Topic
+Never include empty or blank lines in a roff document.
+.
+Instead, use the empty request (a line consisting of a dot only) or a
+line comment
+.B \*[Comment]
+if a structuring element is needed.
+.
+.Topic
+Never start a line with whitespace because this can lead to
+unexpected behavior.
+.
+Indented paragraphs can be constructed in a controlled way by roff
+requests.
+.
+.Topic
+Start each sentence on a line of its own, for the spacing after a dot
+is handled differently depending on whether it terminates an
+abbreviation or a sentence.
+.
+To distinguish both cases, do a line break after each sentence.
+.
+.Topic
+To additionally use the auto-fill mode in Emacs, it is best to insert
+an empty roff request (a line consisting of a dot only) after each
+sentence.
+.
+.P
+The following example shows how optimal roff editing could look.
+.
+.IP
+.nf
+This is an example for a roff document.
+.Text .
+This is the next sentence in the same paragraph.
+.Text .
+This is a longer sentence stretching over several
+lines; abbreviations like `cf.' are easily
+identified because the dot is not followed by a
+line break.
+.Text .
+In the output, this will still go to the same
+paragraph.
+.fi
+.
+.P
+Besides Emacs, some other editors provide nroff style files too, e.g.\&
+.BR vim (1),
+an extension of the
+.BR vi (1)
+program.
+.
+.
+.\" --------------------------------------------------------------------
+.SH BUGS
.\" --------------------------------------------------------------------
-.SH EDITING
+.
+.I UNIX\[rg]
+is a registered trademark of the Open Group.
+.
+But things have improved considerably after Caldera had bought SCO
+UNIX in 2001.
+.
+.
.\" --------------------------------------------------------------------
-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 "SEE ALSO"
.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
+.
+There is a lot of documentation on roff.
+.
+The original papers on classical troff are still available, and all
+aspects of groff are documented in great detail.
+.
+.
.\" --------------------------------------------------------------------
+.SS "Internet sites"
+.\" --------------------------------------------------------------------
+.
.TP
-.SM
-.B GROFF_TMAC_PATH
-A colon separated list of directories in which to search for
-macro files, see
-.BR groff_tmac (@MAN5EXT@).
+troff.org
+.URL http://\:www.troff.org "The historical troff site"
+provides an overview and pointers to all historical aspects of roff.
+.
+This web site is under construction; once, it will be the major source
+for roff history.
+.
.TP
-.SM
-.B GROFF_TYPESETTER
-Default device.
+Multics
+.URL http://\:www.multicians.org "The Multics site"
+contains a lot of information on the MIT projects, CTSS, Multics,
+early Unix, including
+.IR runoff ;
+especially useful are a glossary and the many links to ancient
+documents.
+.
.TP
-.SM
-.B GROFF_FONT_PATH
-A colon separated list of directories in which to search for the
-.BI dev name
-directory.
-.B troff
-will first search in directories given with the
-.option \-F
-command line option, then in
-.BR GROFF_FONT_PATH ,
-and finally in the standard directories
-.RB ( @FONTPATH@ ).
+Unix Archive
+.URL http://\:www.tuhs.org/\:Archive/ \
+ "The Ancient Unixes Archive"
+.
+provides the source code and some binaries of the ancient Unixes
+(including the source code of troff and its documentation) that were
+made public by Caldera since 2001, e.g. of the famous Unix version\~7
+for PDP-11 at the
+.URL http://\:www.tuhs.org/\:Archive/\:PDP-11/\:Trees/\:V7 \
+ "Unix V7 site" .
+.
+.TP
+Developers at AT&T Bell Labs
+.URL http://\:cm.bell-labs.com/\:cm/\:index.html \
+ "Bell Labs Computing and Mathematical Sciences Research"
+.
+provides a search facility for tracking information on the early
+developers.
+.
+.TP
+Plan 9
+.URL http://\:plan9.bell-labs.com "The Plan\~9 operating system"
+.
+by AT&T Bell Labs.
+.
+.TP
+runoff
+.URL http://web.mit.edu/\:Saltzer/\:www/\:publications/\:pubs.html \
+"Jerry Saltzer's home page"
+.
+stores some documents using the ancient runoff formatting language.
+.
+.TP
+CSTR Papers
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html \
+ "The Bell Labs CSTR site"
+.
+stores the original troff manuals (CSTR #54, #97, #114, #116, #122)
+and famous historical documents on programming.
+.
+.TP
+GNU roff
+.URL http://\:www.gnu.org/\:software/\:groff "The groff web site"
+provides the free roff implementation groff, the actual standard roff.
+.
+.
.\" --------------------------------------------------------------------
-.SH FILES
+.SS "Historical roff Documentation"
.\" --------------------------------------------------------------------
-By default,
-.I groff
-installs all of its data files in subdirectories of
-.I @FONTDIR@
-and in
-.I @MACRODIR@
-(except wrapper files for system-specific macro packages which will be
-in
-.IR @SYSTEMMACRODIR@ ).
-These locations might vary for different systems.
-In the following, the former is referred to as
-.IR <groff_font_dir> ,
-the latter as
-.IR <groff_macro_dir> .
+.
+Many classical
+.troff
+documents are still available on-line.
+.
+The two main manuals of the troff language are
+.
.TP
-.IB <groff_macro_dir> /troffrc
-Initialization file for troff.
+[CSTR\~#54]
+J. F. Osanna,
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:54.ps \
+ "\fINroff/\:Troff User's Manual\fP" ;
+.
+Bell Labs, 1976; revised by Brian Kernighan, 1992.
+
+.
.TP
-.IB <groff_macro_dir> / name .tmac
-.TQ
-.IB <groff_macro_dir> /tmac. name
-Macro files.
+[CSTR\~#97]
+Brian Kernighan,
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:97.ps \
+ "\fIA Typesetter-independent TROFF\fP" ,
+.
+Bell Labs, 1981, revised March 1982.
+.
+.P
+The "little language" roff papers are
+.
.TP
-.IB <groff_font_dir> /dev name /DESC
-Device description file for device
-.IR name .
+[CSTR\~#114]
+Jon L. Bentley and Brian W. Kernighan,
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:114.ps \
+ "\fIGRAP \(em A Language for Typesetting Graphs\fP" ;
+.
+Bell Labs, August 1984.
+.
.TP
-.IB <groff_font_dir> /dev name / F
-Font file for font
-.I F
-of device
-.IR name .
-.LP
-Finally, a local macro directory
-.I @LOCALMACRODIR@
-is provided for site-specific macros and packages; by default, it will be
-searched before the main macro directory.
+[CSTR\~#116]
+Brian W. Kernighan,
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:116.ps \
+ "\fIPIC -- A Graphics Language for Typesetting\fP" ;
+.
+Bell Labs, December 1984.
+.
+.TP
+[CSTR\~#122]
+J. L. Bentley, L. W. Jelinski, and B. W. Kernighan,
+.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:122.ps \
+"\fICHEM \(em A Program for Typesetting Chemical Structure Diagrams, \
+Computers and Chemistry\fP" ;
+.
+Bell Labs, April 1986.
+.
+.
.\" --------------------------------------------------------------------
-.SH BUGS
+.SS "Manual Pages"
.\" --------------------------------------------------------------------
-The groff documentation is in evolution at the moment.
-It is possible that small inconsistencies between different documents exist
-temporarily.
+.
+Due to its complex structure, a full roff system has many man pages,
+each describing a single aspect of roff.
+.
+Unfortunately, there is no general naming scheme for the
+documentation among the different roff implementations.
+.
+.P
+In
+.IR groff ,
+the man page
+.BR groff (@MAN1EXT@)
+contains a survey of all documentation available in groff.
+.
+.P
+On other systems, you are on your own, but
+.BR troff (1)
+might be a good starting point.
+.
+.
.\" --------------------------------------------------------------------
-.SH AUTHOR
+.SH AUTHORS
.\" --------------------------------------------------------------------
-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
+.
+Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+.
+.P
+This document is distributed under the terms of the FDL (GNU Free
+Documentation License) version 1.1 or later.
+.
+You should have received a copy of the FDL on your system, it is also
+available on-line at the
+.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
+.
+.P
+This document is part of
+.IR groff ,
+the GNU roff distribution.
+.
+It was written by
+.MTO bwarken@mayn.de "Bernd Warken" ;
+it is maintained by
+.MTO wl@gnu.org "Werner Lemberg".
+.
+.
.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
+.\" Emacs setup
.\" --------------------------------------------------------------------
-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@),
-and
-.BR groff_ms (@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/ .
.
.\" Local Variables:
.\" mode: nroff
diff --git a/contrib/groff/src/devices/grodvi/Makefile.sub b/contrib/groff/src/devices/grodvi/Makefile.sub
index 0e5d32c..74e627d 100644
--- a/contrib/groff/src/devices/grodvi/Makefile.sub
+++ b/contrib/groff/src/devices/grodvi/Makefile.sub
@@ -1,6 +1,6 @@
-PROG=grodvi
+PROG=grodvi$(EXEEXT)
MAN1=grodvi.n
XLIBS=$(LIBDRIVER) $(LIBGROFF)
MLIB=$(LIBM)
-OBJS=dvi.o
+OBJS=dvi.$(OBJEXT)
CCSRCS=$(srcdir)/dvi.cc
diff --git a/contrib/groff/src/devices/grodvi/dvi.cc b/contrib/groff/src/devices/grodvi/dvi.cc
index b5b7c49..8412636 100644
--- a/contrib/groff/src/devices/grodvi/dvi.cc
+++ b/contrib/groff/src/devices/grodvi/dvi.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -44,8 +44,6 @@ width in the tfm file. */
#define SIZESCALE 100
#define MULTIPLIER 1
-#define FILL_MAX 1000
-
class dvi_font : public font {
dvi_font(const char *);
public:
@@ -123,6 +121,7 @@ class dvi_printer : public printer {
output_font output_font_table[FONTS_MAX];
font *cur_font;
int cur_point_size;
+ color cur_color;
int pushed;
int pushed_h;
int pushed_v;
@@ -132,6 +131,7 @@ class dvi_printer : public printer {
void define_font(int);
void set_font(int);
void possibly_begin_line();
+ void set_color(color *);
protected:
enum {
id_byte = 2,
@@ -179,9 +179,8 @@ public:
class draw_dvi_printer : public dvi_printer {
int output_pen_size;
- int fill;
void set_line_thickness(const environment *);
- void fill_next();
+ void fill_next(const environment *);
public:
draw_dvi_printer();
~draw_dvi_printer();
@@ -214,7 +213,7 @@ dvi_printer::~dvi_printer()
draw_dvi_printer::draw_dvi_printer()
-: output_pen_size(-1), fill(FILL_MAX)
+: output_pen_size(-1)
{
}
@@ -302,9 +301,45 @@ int scale(int x, int z)
return sw;
}
+void dvi_printer::set_color(color *col)
+{
+ cur_color = *col;
+ char buf[256];
+ unsigned int components[4];
+ color_scheme cs = col->get_components(components);
+ switch (cs) {
+ case DEFAULT:
+ sprintf(buf, "color gray 0");
+ break;
+ case RGB:
+ sprintf(buf, "color rgb %.3g %.3g %.3g",
+ double(Red) / color::MAX_COLOR_VAL,
+ double(Green) / color::MAX_COLOR_VAL,
+ double(Blue) / color::MAX_COLOR_VAL);
+ break;
+ case CMY:
+ col->get_cmyk(&Cyan, &Magenta, &Yellow, &Black);
+ // fall through
+ case CMYK:
+ sprintf(buf, "color cmyk %.3g %.3g %.3g %.3g",
+ double(Cyan) / color::MAX_COLOR_VAL,
+ double(Magenta) / color::MAX_COLOR_VAL,
+ double(Yellow) / color::MAX_COLOR_VAL,
+ double(Black) / color::MAX_COLOR_VAL);
+ break;
+ case GRAY:
+ sprintf(buf, "color gray %.3g",
+ double(Gray) / color::MAX_COLOR_VAL);
+ break;
+ }
+ do_special(buf);
+}
-void dvi_printer::set_char(int index, font *f, const environment *env, int w, const char *name)
+void dvi_printer::set_char(int index, font *f, const environment *env,
+ int w, const char *name)
{
+ if (*env->col != cur_color)
+ set_color(env->col);
int code = f->get_code(index);
if (env->size != cur_point_size || f != cur_font) {
cur_font = f;
@@ -345,7 +380,7 @@ void dvi_printer::set_char(int index, font *f, const environment *env, int w, co
possibly_begin_line();
end_h = env->hpos + w;
cur_h += scale(f->get_width(index, UNITWIDTH)/MULTIPLIER,
- cur_point_size*RES_7227);
+ cur_point_size*RES_7227);
if (cur_h > max_h)
max_h = cur_h;
if (cur_v > max_v)
@@ -464,6 +499,8 @@ void dvi_printer::begin_page(int i)
out4(0);
out4(last_bop);
last_bop = tem;
+ if (cur_color != default_color)
+ set_color(&cur_color);
// By convention position (0,0) in a dvi file is placed at (1in, 1in).
cur_h = font::res;
cur_v = font::res;
@@ -472,6 +509,7 @@ void dvi_printer::begin_page(int i)
void dvi_printer::end_page(int)
{
+ set_color(&default_color);
if (pushed)
end_of_line();
out1(eop);
@@ -629,10 +667,17 @@ void draw_dvi_printer::set_line_thickness(const environment *env)
}
}
-void draw_dvi_printer::fill_next()
+void draw_dvi_printer::fill_next(const environment *env)
{
+ unsigned int g;
+ if (env->fill->is_default())
+ g = 0;
+ else {
+ // currently, only BW support
+ env->fill->get_gray(&g);
+ }
char buf[256];
- sprintf(buf, "sh %.3f", double(fill)/FILL_MAX);
+ sprintf(buf, "sh %.3g", 1 - double(g)/color::MAX_COLOR_VAL);
do_special(buf);
}
@@ -652,7 +697,7 @@ void draw_dvi_printer::draw(int code, int *p, int np, const environment *env)
}
moveto(env->hpos+p[0]/2, env->vpos);
if (fill_flag)
- fill_next();
+ fill_next(env);
else
set_line_thickness(env);
int rad;
@@ -685,7 +730,7 @@ void draw_dvi_printer::draw(int code, int *p, int np, const environment *env)
}
moveto(env->hpos+p[0]/2, env->vpos);
if (fill_flag)
- fill_next();
+ fill_next(env);
sprintf(buf, "%s 0 0 %d %d 0 6.28319",
(fill_flag ? "ia" : "ar"),
milliinches(p[0]/2),
@@ -707,7 +752,7 @@ void draw_dvi_printer::draw(int code, int *p, int np, const environment *env)
}
moveto(env->hpos, env->vpos);
if (fill_flag)
- fill_next();
+ fill_next(env);
else
set_line_thickness(env);
do_special("pa 0 0");
@@ -790,17 +835,6 @@ void draw_dvi_printer::draw(int code, int *p, int np, const environment *env)
}
break;
}
- case 'f':
- {
- if (np != 1 && np != 2) {
- error("1 argument required for fill");
- break;
- }
- fill = p[0];
- if (fill < 0 || fill > FILL_MAX)
- fill = FILL_MAX;
- break;
- }
case 'R':
{
if (np != 2) {
diff --git a/contrib/groff/src/devices/grodvi/grodvi.man b/contrib/groff/src/devices/grodvi/grodvi.man
index a4488ce..f732a42 100644
--- a/contrib/groff/src/devices/grodvi/grodvi.man
+++ b/contrib/groff/src/devices/grodvi/grodvi.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -16,6 +16,8 @@ versions, except that this permission notice may be included in
translations approved by the Free Software Foundation instead of in
the original English.
..
+.
+.
.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
.el .ds tx TeX
.\" Like TP, but if specified indent is more than half
@@ -24,9 +26,13 @@ the original English.
.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
.el .TP "\\$1"
..
+.
+.
.TH GRODVI @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
.SH NAME
grodvi \- convert groff output to TeX dvi format
+.
+.
.SH SYNOPSIS
.B grodvi
[
@@ -36,18 +42,22 @@ grodvi \- convert groff output to TeX dvi format
] [
.BI \-F dir
] [
-.IR files \|.\|.\|.
+.IR files \|.\|.\|.\&
]
.PP
It is possible to have whitespace between a command line option and its
parameter.
+.
+.
.SH DESCRIPTION
.B grodvi
is a driver for
.B groff
that produces \*(tx dvi format.
+.
Normally it should be run by
.BR groff\ \-Tdvi .
+.
This will run
.BR @g@troff\ \-Tdvi ;
it will also input the macros
@@ -56,115 +66,312 @@ if the input is being preprocessed with
.B @g@eqn
it will also input
.BR @FONTDIR@/devdvi/eqnchar .
+.
.LP
The dvi file generated by
.B grodvi
can be printed by any correctly-written dvi driver.
+.
The troff drawing primitives are implemented
-using the tpic version 2 specials.
+using the tpic version\~2 specials.
+.
If the driver does not support these, the
-.B \eD
+.B \[rs]D
commands will not produce any output.
+.
.LP
There is an additional drawing command available:
+.
.TP
-.BI \eD'R\ dh\ dv '
+.BI \[rs]D'R\ dh\ dv '
Draw a rule (solid black rectangle), with one corner
at the current position, and the diagonally opposite corner
-at the current position
+at the current position
.RI +( dh , dv ).
-Afterwards the current position will be at the opposite corner. This
-produces a rule in the dvi file and so can be printed even with a
+.
+Afterwards the current position will be at the opposite corner.
+.
+This produces a rule in the dvi file and so can be printed even with a
driver that does not support the tpic specials unlike the other
-.B \eD
+.B \[rs]D
commands.
+.
.LP
The groff command
-.BI \eX' anything '
+.BI \[rs]X' anything '
is translated into the same command in the dvi file as would be
produced by
-.BI \especial{ anything }
+.BI \[rs]special{ anything }
in \*(tx;
-.I anything may not contain a newline.
+.I anything
+may not contain a newline.
+.
+.LP
+For inclusion of EPS image files,
+.B grodvi
+loads
+.B pspic.tmac
+automatically, providing the
+.B PSPIC
+macro.
+.
+Please check
+.B grops (@MAN1EXT@)
+for a detailed description of this macro.
+.
.LP
Font files for
.B grodvi
can be created from tfm files using
.BR tfmtodit (@MAN1EXT@).
+.
The font description file should contain the following
additional commands:
+.
.Tp \w'\fBinternalname'u+2n
.BI internalname\ name
The name of the tfm file (without the
.B .tfm
extension) is
.IR name .
+.
.TP
.BI checksum\ n
The checksum in the tfm file is
.IR n .
+.
.TP
.BI designsize\ n
The designsize in the tfm file is
.IR n .
+.
.LP
These are automatically generated by
.B tfmtodit.
+.
+.LP
+The default color for
+.B \[rs]m
+and
+.B \[rs]M
+is black.
+.
+Currently, the drawing color for
+.B \[rs]D
+commands is always black, and fill color values are translated to gray.
+.
.LP
In
.B troff
the
-.B \eN
+.B \[rs]N
escape sequence can be used to access characters by their position
in the corresponding tfm file;
all characters in the tfm file can be accessed this way.
+.
+.
.SH OPTIONS
.TP
.B \-d
Do not use tpic specials to implement drawing commands.
+.
Horizontal and vertical lines will be implemented by rules.
+.
Other drawing commands will be ignored.
+.
.TP
.B \-v
Print the version number.
+.
.TP
.BI \-w n
Set the default line thickness to
.I n
-thousandths of an em.
+thousandths of an em.
+If this option isn't specified, the line thickness defaults to 0.04\~em.
+.
.TP
.BI \-F dir
Prepend directory
-.IB dir /devdvi
-to the search path for font and device description files.
+.IB dir /dev name
+to the search path for font and device description files;
+.I name
+is the name of the device, usually
+.BR dvi .
+.
+.
+.SH USAGE
+There are styles called
+.BR R ,
+.BR I ,
+.BR B ,
+and
+.B BI
+mounted at font positions 1 to 4.
+The fonts are grouped into families
+.B T
+and
+.B H
+having members in each of these styles:
+.
+.de FT
+.if '\\*(.T'dvi' .ft \\$1
+..
+.
+.RS
+.TP
+.B TR
+.FT TR
+CM Roman (cmr10)
+.FT
+.
+.TP
+.B TI
+.FT TI
+CM Text Italic (cmti10)
+.FT
+.
+.TP
+.B TB
+.FT TB
+CM Bold Extended Roman (cmbx10)
+.FT
+.
+.TP
+.B TBI
+.FT TBI
+CM Bold Extended Text Italic (cmbxti10)
+.FT
+.
+.TP
+.B HR
+.FT HR
+CM Sans Serif (cmss10)
+.FT
+.
+.TP
+.B HI
+.FT HI
+CM Slanted Sans Serif (cmssi10)
+.FT
+.
+.TP
+.B HB
+.FT HB
+CM Sans Serif Bold Extended (cmssbx10)
+.FT
+.
+.TP
+.B HBI
+.FT HBI
+CM Slanted Sans Serif Bold Extended (cmssbxo10)
+.FT
+.RE
+.
+.LP
+There are also the following fonts which are not members of a family:
+.
+.RS
+.TP
+.B CW
+CM Typewriter Text (cmtt10)
+.FT CW
+.FT
+.
+.TP
+.B CWI
+CM Italic Typewriter Text (cmitt10)
+.FT CWI
+.FT
+.RE
+.
+.LP
+Special fonts are
+.B MI
+(cmmi10),
+.B S
+(cmsy10),
+.B EX
+(cmex10),
+and, perhaps surprisingly,
+.BR TR ,
+.BR TI ,
+and
+.BR CW ,
+due to the different font encodings of text fonts.
+.
+For italic fonts,
+.B CWI
+is used instead of
+.BR CW .
+.
+.LP
+Finally, the symbol fonts of the American Mathematical Society are available
+as special fonts
+.B SA
+(msam10) and
+.B SB
+(msbm10).
+.
+These two fonts are not mounted by default.
+.
+.LP
+Using the option
+.B \-mec
+(loading the file
+.BR ec.tmac )
+EC and TC fonts are used.
+.
+The design of the EC family is very similar to that of the CM fonts;
+additionally, they give a much better coverage of groff symbols.
+.
+Note that
+.B ec.tmac
+must be called before any language-specific files; it doesn't take care of
+hcode values.
+.
+.
.SH FILES
.TP
.B @FONTDIR@/devdvi/DESC
Device description file.
+.
.TP
.BI @FONTDIR@/devdvi/ F
Font description file for font
.IR F .
+.
.TP
.B @MACRODIR@/dvi.tmac
Macros for use with
.BR grodvi .
+.
+.TP
+.B @MACRODIR@/ec.tmac
+Macros to switch to EC fonts.
+.
+.
.SH BUGS
Dvi files produced by
.B grodvi
use a different resolution (57816 units per inch) to those produced by
\*(tx.
+.
Incorrectly written drivers which assume the resolution used by \*(tx,
rather than using the resolution specified in the dvi file will not
work with
.BR grodvi .
+.
.LP
When using the
.B \-d
option with boxed tables,
vertical and horizontal lines can sometimes protrude by one pixel.
+.
This is a consequence of the way \*(tx requires that the heights
and widths of rules be rounded.
+.
+.
.SH "SEE ALSO"
.BR tfmtodit (@MAN1EXT@),
.BR groff (@MAN1EXT@),
diff --git a/contrib/groff/src/devices/grohtml/Makefile.sub b/contrib/groff/src/devices/grohtml/Makefile.sub
index 10f28ce..33e41f8 100644
--- a/contrib/groff/src/devices/grohtml/Makefile.sub
+++ b/contrib/groff/src/devices/grohtml/Makefile.sub
@@ -1,15 +1,18 @@
-PROG=post-grohtml
+PROG=post-grohtml$(EXEEXT)
MAN1=grohtml.n
XLIBS=$(LIBDRIVER) $(LIBGROFF)
MLIB=$(LIBM)
OBJS=\
- post-html.o \
- html-text.o \
- output.o
+ post-html.$(OBJEXT) \
+ html-table.$(OBJEXT) \
+ html-text.$(OBJEXT) \
+ output.$(OBJEXT)
CCSRCS=\
$(srcdir)/post-html.cc \
+ $(srcdir)/html-table.cc \
$(srcdir)/html-text.cc \
$(srcdir)/output.cc
HDRS=\
$(srcdir)/html.h \
+ $(srcdir)/html-table.h \
$(srcdir)/html-text.h
diff --git a/contrib/groff/src/devices/grohtml/grohtml.man b/contrib/groff/src/devices/grohtml/grohtml.man
index 7b0f5e1..976990a 100644
--- a/contrib/groff/src/devices/grohtml/grohtml.man
+++ b/contrib/groff/src/devices/grohtml/grohtml.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1999-2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 1999-2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@@ -23,8 +23,10 @@ the original English.
.el .TP "\\$1"
..
.TH GROHTML @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
+.
.SH NAME
grohtml \- html driver for groff
+.
.SH SYNOPSIS
.nr a \n(.j
.ad l
@@ -36,17 +38,25 @@ grohtml \- html driver for groff
.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
.el .RB "[\ " "\\$1" "\ ]"
..
-.OP \-v?lrn
+.OP \-vhlrn
.OP \-D dir
.OP \-F dir
.OP \-i resolution
-.OP \-I image stem
-.OP \-o image vertical offset
+.OP \-I \%image-stem
+.OP \-o \%image-vertical-offset
+.OP \-a \%aa-text-bits
+.OP \-a \%aa-graphic-bits
.RI "[\ " files\|.\|.\|. "\ ]"
.br
.ad \na
+.
.SH DESCRIPTION
+The
.B grohtml
+front end (which consists of a preprocessor,
+.BR pre-grohtml ,
+and a device driver,
+.BR post-grohtml )
translates the output of GNU
.B troff
to html.
@@ -76,11 +86,51 @@ using
option.
.SH OPTIONS
.TP
-.B \-v
-Displays the version.
+.BI \-a aa-text-bits
+Number of bits of antialiasing information to be used by
+.I text
+when generating png images.
+The default is\~4 but legal values are 0, 1, 2, and\~4.
+Note your version of
+.B gs
+needs to support the
+.B \%\-dTextAlphaBits
+and
+.B \%\-dGraphicAlphaBits
+options in order to exploit antialiasing.
+A value of\~0 stops
+.B grohtml
+from issuing antialiasing commands to
+.BR gs .
+.TP
+.BI \-g aa-graphic-bits
+Number of bits of antialiasing information to be used by
+.I graphics
+when generating png images.
+The default is\~4 but legal values are 0, 1, 2, and\~4.
+Note your version of
+.B gs
+needs to support the
+.B \%\-dTextAlphaBits
+and
+.B \%\-dGraphicAlphaBits
+options in order to exploit antialiasing.
+A value of\~0 stops
+.B grohtml
+from issuing antialiasing commands to
+.BR gs .
+.TP
+.B -b
+Initialize the background color to white.
.TP
-.B \-?
-Emits a usage synopsis.
+.B -h
+Generates section and number headings by using
+.BR <B> .\|.\|. </B>
+and increasing the font size, rather than using the
+.BI <H n >\c
+\&.\|.\|.\c
+.BI </H n >
+tags.
.TP
.B -l
Turns off the production of automatic section links at the top of the document.
@@ -91,10 +141,15 @@ Turns off the automatic header and footer line (html rule).
.B -n
Generate simple heading anchors whenever a section/number heading is found.
Without the option the anchor value is the textual heading.
-This can cause problems when a heading contains a `?' on some brousers
+This can cause problems when a heading contains a `?' on some browsers
(netscape).
This flag is automatically turned on if a heading contains an image.
.TP
+.B -p
+Display page rendering progress to stderr.
+.B grohtml
+only displays a page number when an image is required.
+.TP
.BI \-F dir
Prepend directory
.IB dir /dev name
@@ -105,8 +160,8 @@ is the name of the device, usually
.TP
.BI \-i resolution
Select the resolution for all images.
-By default this is 80 pixels per inch.
-Example: -i100 indicates 100 pixels per inch.
+By default this is 100 pixels per inch.
+Example: -i200 indicates 200 pixels per inch.
.TP
.BI \-I stem
Determine the image stem name.
@@ -115,6 +170,9 @@ If omitted grohtml uses
.RI ( XXX
is the process ID).
.TP
+.BI \-o vertical-offset
+Specify the vertical offset of images in points.
+.TP
.BI \-D dir
Inform
.B grohtml
@@ -123,9 +181,7 @@ to place all image files into directory
.TP
.B \-v
Print the version number.
-.TP
-.B \-?
-Display usage.
+.
.SH USAGE
There are styles called
.BR R ,
@@ -137,9 +193,19 @@ mounted at font positions 1 to 4.
.SH DEPENDENCIES
.B grohtml
is dependent upon the png utilities
-.RB ( \&\%pnmcut ,\ \%pnmtopng )
+.RB ( \&\%pnmcut ,\ \%pnmcrop ,\ \%pnmtopng )
and GhostScript
.RB ( gs ).
+.B \%pnmtopng
+(version 2.37.6 or greater)
+and
+.B \%pnmcut
+from the netpbm package (version 9.16 or greater) will work also.
+It is also dependent upon
+.B \%psselect
+from the
+.B PSUtils
+package.
Images are generated whenever a table, picture, equation or line is
encountered.
.SH BUGS
diff --git a/contrib/groff/src/devices/grohtml/html-table.cc b/contrib/groff/src/devices/grohtml/html-table.cc
new file mode 100644
index 0000000..a2bb255
--- /dev/null
+++ b/contrib/groff/src/devices/grohtml/html-table.cc
@@ -0,0 +1,687 @@
+// -*- C++ -*-
+/* Copyright (C) 2002 Free Software Foundation, Inc.
+ *
+ * Gaius Mulley (gaius@glam.ac.uk) wrote html-table.cc
+ *
+ * html-table.h
+ *
+ * provides the methods necessary to handle indentation and tab
+ * positions using html tables.
+ */
+
+/*
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "driver.h"
+#include "stringclass.h"
+#include "cset.h"
+#include "html-table.h"
+#include "ctype.h"
+#include "html.h"
+
+#if !defined(TRUE)
+# define TRUE (1==1)
+#endif
+#if !defined(FALSE)
+# define FALSE (1==0)
+#endif
+
+tabs::tabs ()
+ : tab(NULL)
+{
+}
+
+tabs::~tabs ()
+{
+ delete_list();
+}
+
+/*
+ * delete_list - frees the tab list and sets tab to NULL.
+ */
+
+void tabs::delete_list (void)
+{
+ tab_position *p = tab;
+ tab_position *q;
+
+ while (p != NULL) {
+ q = p;
+ p = p->next;
+ free(q);
+ }
+ tab = NULL;
+}
+
+void tabs::clear (void)
+{
+ delete_list();
+}
+
+/*
+ * compatible - returns TRUE if the tab stops in, s, do
+ * not conflict with the current tab stops.
+ * The new tab stops are _not_ placed into
+ * this class.
+ */
+
+int tabs::compatible (const char *s)
+{
+ char align;
+ int total=0;
+ tab_position *last = tab;
+
+ if (last == NULL)
+ return FALSE; // no tab stops defined
+
+ // move over tag name
+ while ((*s != (char)0) && !isspace(*s))
+ s++;
+
+ while (*s != (char)0 && last != NULL) {
+ // move over white space
+ while ((*s != (char)0) && isspace(*s))
+ s++;
+ // collect alignment
+ align = *s;
+ // move over alignment
+ s++;
+ // move over white space
+ while ((*s != (char)0) && isspace(*s))
+ s++;
+ // collect tab position
+ total += atoi(s);
+ // move over tab position
+ while ((*s != (char)0) && !isspace(*s))
+ s++;
+ if (last->alignment != align || last->position != total)
+ return FALSE;
+
+ last = last->next;
+ }
+ return TRUE;
+}
+
+/*
+ * init - scans the string, s, and initializes the tab stops.
+ */
+
+void tabs::init (const char *s)
+{
+ char align;
+ int total=0;
+ tab_position *last = NULL;
+
+ clear(); // remove any tab stops
+
+ // move over tag name
+ while ((*s != (char)0) && !isspace(*s))
+ s++;
+
+ while (*s != (char)0) {
+ // move over white space
+ while ((*s != (char)0) && isspace(*s))
+ s++;
+ // collect alignment
+ align = *s;
+ // move over alignment
+ s++;
+ // move over white space
+ while ((*s != (char)0) && isspace(*s))
+ s++;
+ // collect tab position
+ total = atoi(s);
+ // move over tab position
+ while ((*s != (char)0) && !isspace(*s))
+ s++;
+ if (last == NULL) {
+ tab = (tab_position *)malloc(sizeof(tab_position));
+ last = tab;
+ } else {
+ last->next = (tab_position *)malloc(sizeof(tab_position));
+ last = last->next;
+ }
+ last->alignment = align;
+ last->position = total;
+ last->next = NULL;
+ }
+}
+
+/*
+ * find_tab - returns the tab number corresponding to the position, pos.
+ */
+
+int tabs::find_tab (int pos)
+{
+ tab_position *p;
+ int i=0;
+
+ for (p = tab; p != NULL; p = p->next) {
+ i++;
+ if (p->position == pos)
+ return i;
+ }
+ return 0;
+}
+
+/*
+ * get_tab_pos - returns the, nth, tab position
+ */
+
+int tabs::get_tab_pos (int n)
+{
+ tab_position *p;
+
+ n--;
+ for (p = tab; (p != NULL) && (n>0); p = p->next) {
+ n--;
+ if (n == 0)
+ return p->position;
+ }
+ return 0;
+}
+
+char tabs::get_tab_align (int n)
+{
+ tab_position *p;
+
+ n--;
+ for (p = tab; (p != NULL) && (n>0); p = p->next) {
+ n--;
+ if (n == 0)
+ return p->alignment;
+ }
+ return 'L';
+}
+
+/*
+ * dump_tab - display tab positions
+ */
+
+void tabs::dump_tabs (void)
+{
+ int i=1;
+ tab_position *p;
+
+ for (p = tab; p != NULL; p = p->next) {
+ printf("tab %d is %d\n", i, p->position);
+ i++;
+ }
+}
+
+/*
+ * html_table - methods
+ */
+
+html_table::html_table (simple_output *op, int linelen)
+ : columns(NULL), out(op), linelength(linelen), last_col(NULL), start_space(FALSE)
+{
+ tab_stops = new tabs();
+}
+
+html_table::~html_table ()
+{
+ if (tab_stops != NULL)
+ delete tab_stops;
+}
+
+/*
+ * remove_cols - remove a list of columns as defined by, c.
+ */
+
+void html_table::remove_cols (cols *c)
+{
+ cols *p;
+
+ while (c != NULL) {
+ p = c;
+ c = c->next;
+ free(p);
+ }
+}
+
+/*
+ * set_linelength - sets the line length value in this table.
+ * It also adds an extra blank column to the
+ * table should linelen exceed the last column.
+ */
+
+void html_table::set_linelength (int linelen)
+{
+ cols *p = NULL;
+ cols *c;
+ linelength = linelen;
+
+ for (c = columns; c != NULL; c = c->next) {
+ if (c->right > linelength) {
+ c->right = linelength;
+ remove_cols(c->next);
+ c->next = NULL;
+ return;
+ }
+ p = c;
+ }
+ if (p != NULL && p->right != 0)
+ add_column(p->no+1, p->right+1, linelen, 'L');
+}
+
+/*
+ * get_effective_linelength -
+ */
+
+int html_table::get_effective_linelength (void)
+{
+ if (columns != NULL)
+ return linelength - columns->left;
+ else
+ return linelength;
+}
+
+/*
+ * add_indent - adds the indent to a table.
+ */
+
+void html_table::add_indent (int indent)
+{
+ if (columns != NULL && columns->left > indent)
+ add_column(0, indent, columns->left-1, 'L');
+}
+
+/*
+ * emit_table_header - emits the html header for this table.
+ */
+
+void html_table::emit_table_header (int space)
+{
+ if (columns == NULL)
+ return;
+
+ // dump_table();
+
+ last_col = NULL;
+ if (linelength > 0) {
+ int n = no_columns() + no_gaps();
+
+ out->nl();
+ out->nl();
+ if (space)
+ out->put_string("<p>");
+ start_space = space;
+ out->put_string("<table width=\"100%\" border=0 rules=\"none\" frame=\"void\"\n cols=\"").put_number(n).put_string("\" cellspacing=\"0\" cellpadding=\"0\">").nl();
+ out->put_string("<tr valign=\"top\" align=\"left\">").nl();
+ }
+}
+
+/*
+ * get_right - returns the right most position of this column.
+ */
+
+int html_table::get_right (cols *c)
+{
+ if (c != NULL && c->right > 0)
+ return c->right;
+ if (c->next != NULL)
+ return c->left;
+ return linelength;
+}
+
+/*
+ * emit_col - moves onto column, n.
+ */
+
+void html_table::emit_col (int n)
+{
+ cols *c = columns;
+ cols *b = columns;
+ int width = 0;
+
+ // must be a different row
+ if (last_col != NULL && n <= last_col->no)
+ emit_new_row();
+
+ while (c != NULL && c->no < n)
+ c = c->next;
+
+ // can we find column, n?
+ if (c != NULL && c->no == n) {
+ // shutdown previous column
+ if (last_col != NULL)
+ out->put_string("</td>").nl();
+
+ // find previous column
+ if (last_col == NULL)
+ b = columns;
+ else
+ b = last_col;
+
+ // have we a gap?
+ if (last_col != NULL) {
+ if (is_gap(b))
+ out->put_string("<td width=\"").put_number(is_gap(b)).put_string("%\"></td>").nl();
+ b = b->next;
+ }
+
+ // move across to column n
+ while (b != c) {
+ width = ((get_right(b) - b->left) * 100)/get_effective_linelength();
+ out->put_string("<td width=\"").put_number(width).put_string("%\"></td>").nl();
+ // have we a gap?
+ if (is_gap(b))
+ out->put_string("<td width=\"").put_number(is_gap(b)).put_string("%\"></td>").nl();
+ b = b->next;
+ }
+ width = ((get_right(b) - b->left) * 100)/get_effective_linelength();
+ switch (b->alignment) {
+
+ case 'C': out->put_string("<td width=\"").put_number(width).put_string("%\" align=center>").nl();
+ break;
+ case 'R': out->put_string("<td width=\"").put_number(width).put_string("%\" align=right>").nl();
+ break;
+ default:
+ out->put_string("<td width=\"").put_number(width).put_string("%\">").nl();
+ }
+ // remember column, b
+ last_col = b;
+ }
+}
+
+/*
+ * finish_row -
+ */
+
+void html_table::finish_row (void)
+{
+ int n = 0;
+ cols *c;
+
+ if (last_col != NULL) {
+ for (c = last_col->next; c != NULL; c = c->next)
+ n = c->no;
+
+ if (n > 0)
+ emit_col(n);
+ out->put_string("</td>").nl();
+ }
+}
+
+/*
+ * emit_new_row - move to the next row.
+ */
+
+void html_table::emit_new_row (void)
+{
+ finish_row();
+ out->put_string("<tr valign=\"top\" align=\"left\">").nl();
+ last_col = NULL;
+}
+
+void html_table::emit_finish_table (void)
+{
+ finish_row();
+ // out->put_string("linelength = ").put_number(linelength).nl();
+ out->put_string("</table>");
+ if (start_space)
+ out->put_string("</p>");
+ out->nl();
+}
+
+/*
+ * add_column - adds a column. It returns FALSE if hstart..hend
+ * crosses into a different columns.
+ */
+
+int html_table::add_column (int coln, int hstart, int hend, char align)
+{
+ cols *c = get_column(coln);
+
+ if (c == NULL)
+ return insert_column(coln, hstart, hend, align);
+ else
+ return modify_column(c, hstart, hend, align);
+}
+
+/*
+ * get_column - returns the column, coln.
+ */
+
+cols *html_table::get_column (int coln)
+{
+ cols *c = columns;
+
+ while (c != NULL && coln != c->no)
+ c = c->next;
+
+ if (c != NULL && coln == c->no)
+ return c;
+ else
+ return NULL;
+}
+
+/*
+ * insert_column - inserts a column, coln.
+ * It returns TRUE if it does not bump into
+ * another column.
+ */
+
+int html_table::insert_column (int coln, int hstart, int hend, char align)
+{
+ cols *c = columns;
+ cols *l = NULL;
+ cols *n = NULL;
+
+ while (c != NULL && c->no < coln) {
+ l = c;
+ c = c->next;
+ }
+ if ((l != NULL) && (hstart < l->right))
+ return FALSE; // new column bumps into previous one
+
+ if ((l != NULL) && (l->next != NULL) &&
+ (l->next->left < hend))
+ return FALSE; // new column bumps into next one
+
+ n = (cols *)malloc(sizeof(cols));
+ if (l == NULL) {
+ n->next = columns;
+ columns = n;
+ } else {
+ n->next = l->next;
+ l->next = n;
+ }
+ n->left = hstart;
+ n->right = hend;
+ n->no = coln;
+ n->alignment = align;
+ return TRUE;
+}
+
+/*
+ * modify_column - given a column, c, modify the width to
+ * contain hstart..hend.
+ * It returns TRUE if it does not clash with
+ * the next or previous column.
+ */
+
+int html_table::modify_column (cols *c, int hstart, int hend, char align)
+{
+ cols *l = columns;
+
+ while (l != NULL && l->next != c)
+ l = l->next;
+
+ if ((l != NULL) && (hstart < l->right))
+ return FALSE; // new column bumps into previous one
+
+ if ((c->next != NULL) && (c->next->left < hend))
+ return FALSE; // new column bumps into next one
+
+ if (c->left > hstart)
+ c->left = hstart;
+
+ if (c->right < hend)
+ c->right = hend;
+
+ c->alignment = align;
+
+ return TRUE;
+}
+
+/*
+ * find_tab_column - finds the column number for position, pos.
+ * It searches through the list tab stops.
+ */
+
+int html_table::find_tab_column (int pos)
+{
+ // remember the first column is reserved for un tabbed glyphs
+ return tab_stops->find_tab(pos)+1;
+}
+
+/*
+ * find_column - find the column number for position, pos.
+ * It searches through the list of columns.
+ */
+
+int html_table::find_column (int pos)
+{
+ int p=0;
+ cols *c;
+
+ for (c = columns; c != NULL; c = c->next) {
+ if (c->left > pos)
+ return p;
+ p = c->no;
+ }
+ return p;
+}
+
+/*
+ * no_columns - returns the number of table columns (rather than tabs)
+ */
+
+int html_table::no_columns (void)
+{
+ int n=0;
+ cols *c;
+
+ for (c = columns; c != NULL; c = c->next)
+ n++;
+ return n;
+}
+
+/*
+ * is_gap - returns the gap between column, c, and the next column.
+ */
+
+int html_table::is_gap (cols *c)
+{
+ if (c == NULL || c->right == 0 || c->next == NULL)
+ return 0;
+ else
+ return (c->next->left - c->right)*100/get_effective_linelength();
+}
+
+/*
+ * no_gaps - returns the number of table gaps between the columns
+ */
+
+int html_table::no_gaps (void)
+{
+ int n=0;
+ cols *c;
+
+ for (c = columns; c != NULL; c = c->next)
+ if (is_gap(c))
+ n++;
+ return n;
+}
+
+/*
+ * get_tab_pos - returns the, nth, tab position
+ */
+
+int html_table::get_tab_pos (int n)
+{
+ return tab_stops->get_tab_pos(n);
+}
+
+char html_table::get_tab_align (int n)
+{
+ return tab_stops->get_tab_align(n);
+}
+
+
+void html_table::dump_table (void)
+{
+ if (columns != NULL) {
+ cols *c;
+ for (c = columns; c != NULL; c = c->next) {
+ printf("column %d %d..%d %c\n", c->no, c->left, c->right, c->alignment);
+ }
+ } else
+ tab_stops->dump_tabs();
+}
+
+/*
+ * html_indent - creates an indent with indentation, ind, given
+ * a line length of linelength.
+ */
+
+html_indent::html_indent (simple_output *op, int ind, int pageoffset, int linelength)
+{
+ table = new html_table(op, linelength);
+
+ table->add_column(1, ind+pageoffset, linelength, 'L');
+ table->add_indent(pageoffset);
+ in = ind;
+ pg = pageoffset;
+ ll = linelength;
+ is_used = FALSE;
+}
+
+html_indent::~html_indent (void)
+{
+ end();
+ delete table;
+}
+
+void html_indent::begin (int space)
+{
+ if (! is_used) {
+ table->emit_table_header(space);
+ table->emit_col(1);
+ is_used = TRUE;
+ }
+}
+
+void html_indent::end (void)
+{
+ if (is_used)
+ table->emit_finish_table();
+ is_used = FALSE;
+}
+
+/*
+ * get_reg - collects the registers as supplied during initialization.
+ */
+
+void html_indent::get_reg (int *ind, int *pageoffset, int *linelength)
+{
+ *ind = in;
+ *pageoffset = pg;
+ *linelength = ll;
+}
diff --git a/contrib/groff/src/devices/grohtml/html-table.h b/contrib/groff/src/devices/grohtml/html-table.h
new file mode 100644
index 0000000..3152060
--- /dev/null
+++ b/contrib/groff/src/devices/grohtml/html-table.h
@@ -0,0 +1,130 @@
+// -*- C++ -*-
+/* Copyright (C) 2002 Free Software Foundation, Inc.
+ *
+ * Gaius Mulley (gaius@glam.ac.uk) wrote html-table.cc
+ *
+ * html-table.h
+ *
+ * provides the methods necessary to handle indentation and tab
+ * positions using html tables.
+ */
+
+/*
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "html.h"
+
+#if !defined(HTML_TABLE_H)
+#define HTML_TABLE_H
+
+typedef struct tab_position {
+ char alignment;
+ int position;
+ struct tab_position *next;
+} tab_position;
+
+
+class tabs {
+public:
+ tabs ();
+ ~tabs ();
+ void clear (void);
+ int compatible (const char *s);
+ void init (const char *s);
+ int find_tab (int pos);
+ int get_tab_pos (int n);
+ char get_tab_align (int n);
+ void dump_tabs (void);
+
+private:
+ void delete_list (void);
+ tab_position *tab;
+};
+
+/*
+ * define a column
+ */
+
+typedef struct cols {
+ int left, right;
+ int no;
+ char alignment;
+ struct cols *next;
+} cols;
+
+class html_table {
+public:
+ html_table (simple_output *op, int linelen);
+ ~html_table (void);
+ int add_column (int coln, int hstart, int hend, char align);
+ cols *get_column (int coln);
+ int insert_column (int coln, int hstart, int hend, char align);
+ int modify_column (cols *c, int hstart, int hend, char align);
+ int find_tab_column (int pos);
+ int find_column (int pos);
+ int get_tab_pos (int n);
+ char get_tab_align (int n);
+ void set_linelength (int linelen);
+ int no_columns (void);
+ int no_gaps (void);
+ int is_gap (cols *c);
+ void dump_table (void);
+ void emit_table_header (int space);
+ void emit_col (int n);
+ void emit_new_row (void);
+ void emit_finish_table (void);
+ int get_right (cols *c);
+ void add_indent (int indent);
+ void finish_row (void);
+ int get_effective_linelength (void);
+
+ tabs *tab_stops; /* tab stop positions */
+private:
+ cols *columns; /* column entries */
+ simple_output *out;
+ int linelength;
+ cols *last_col; /* last column started */
+ int start_space; /* encapsulate with <p> </p> */
+
+ void remove_cols (cols *c);
+};
+
+/*
+ * the indentation wrapper.
+ * Builds an indentation from a html-table.
+ * This table is only emitted if the paragraph is emitted.
+ */
+
+class html_indent {
+public:
+ html_indent (simple_output *op, int ind, int pageoffset, int linelength);
+ ~html_indent (void);
+ void begin (int space); // called if we need to use the indent
+ void get_reg (int *ind, int *pageoffset, int *linelength);
+
+ // the indent is shutdown when it is deleted
+
+private:
+ void end (void);
+ int is_used;
+ int pg; // values of the registers as passed via initialization
+ int ll;
+ int in;
+ html_table *table;
+};
+
+#endif
diff --git a/contrib/groff/src/devices/grohtml/html-text.cc b/contrib/groff/src/devices/grohtml/html-text.cc
index 56d6c78..31e4311 100644
--- a/contrib/groff/src/devices/grohtml/html-text.cc
+++ b/contrib/groff/src/devices/grohtml/html-text.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
*
* Gaius Mulley (gaius@glam.ac.uk) wrote html-text.cc
*
@@ -40,10 +40,12 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "html-text.h"
+// #define DEBUGGING
html_text::html_text (simple_output *op) :
stackptr(NULL), lastptr(NULL), out(op), space_emitted(TRUE),
- current_indentation(-1), pageoffset(-1), linelength(-1)
+ current_indentation(-1), pageoffset(-1), linelength(-1),
+ blank_para(TRUE), start_space(FALSE)
{
}
@@ -52,6 +54,87 @@ html_text::~html_text ()
flush_text();
}
+
+#if defined(DEBUGGING)
+static int debugStack = FALSE;
+
+
+/*
+ * turnDebug - flip the debugStack boolean and return the new value.
+ */
+
+static int turnDebug (void)
+{
+ debugStack = 1-debugStack;
+ return debugStack;
+}
+
+/*
+ * dump_stack_element - display an element of the html stack, p.
+ */
+
+void html_text::dump_stack_element (tag_definition *p)
+{
+ fprintf(stderr, " | ");
+ switch (p->type) {
+
+ case P_TAG: if (p->indent == NULL) {
+ fprintf(stderr, "<P %s>", (char *)p->arg1); break;
+ } else {
+ fprintf(stderr, "<P %s [TABLE]>", (char *)p->arg1); break;
+ }
+ case I_TAG: fprintf(stderr, "<I>"); break;
+ case B_TAG: fprintf(stderr, "<B>"); break;
+ case SUB_TAG: fprintf(stderr, "<SUB>"); break;
+ case SUP_TAG: fprintf(stderr, "<SUP>"); break;
+ case TT_TAG: fprintf(stderr, "<TT>"); break;
+ case PRE_TAG: if (p->indent == NULL) {
+ fprintf(stderr, "<PRE>"); break;
+ } else {
+ fprintf(stderr, "<PRE [TABLE]>"); break;
+ }
+ case SMALL_TAG: fprintf(stderr, "<SMALL>"); break;
+ case BIG_TAG: fprintf(stderr, "<BIG>"); break;
+ case BREAK_TAG: fprintf(stderr, "<BREAK>"); break;
+ case COLOR_TAG: {
+ if (p->col.is_default())
+ fprintf(stderr, "<COLOR (default)>");
+ else {
+ unsigned int r, g, b;
+
+ p->col.get_rgb(&r, &g, &b);
+ fprintf(stderr, "<COLOR %x %x %x>", r/0x101, g/0x101, b/0x101);
+ }
+ break;
+ }
+ default: fprintf(stderr, "unknown tag");
+ }
+ if (p->text_emitted)
+ fprintf(stderr, "[t] ");
+}
+
+/*
+ * dump_stack - debugging function only.
+ */
+
+void html_text::dump_stack (void)
+{
+ if (debugStack) {
+ tag_definition *p = stackptr;
+
+ while (p != NULL) {
+ dump_stack_element(p);
+ p = p->next;
+ }
+ }
+ fprintf(stderr, "\n");
+ fflush(stderr);
+}
+#else
+void html_text::dump_stack (void) {}
+#endif
+
+
/*
* end_tag - shuts down the tag.
*/
@@ -62,19 +145,21 @@ void html_text::end_tag (tag_definition *t)
case I_TAG: out->put_string("</i>"); break;
case B_TAG: out->put_string("</b>"); break;
- case P_TAG: out->put_string("</p>").nl().enable_newlines(FALSE); break;
+ case P_TAG: out->put_string("</p>");
+ if (t->indent != NULL) {
+ delete t->indent;
+ t->indent = NULL;
+ }
+ out->nl(); out->enable_newlines(FALSE);
+ blank_para = TRUE; break;
case SUB_TAG: out->put_string("</sub>"); break;
case SUP_TAG: out->put_string("</sup>"); break;
case TT_TAG: out->put_string("</tt>"); break;
- case PRE_TAG: out->put_string("</pre>");
- if (! is_present(TABLE_TAG)) {
- out->nl();
- out->enable_newlines(TRUE);
- }
- break;
+ case PRE_TAG: out->put_string("</pre>"); out->nl(); out->enable_newlines(TRUE);
+ blank_para = TRUE; break;
case SMALL_TAG: out->put_string("</small>"); break;
case BIG_TAG: out->put_string("</big>"); break;
- case TABLE_TAG: issue_table_end(); break;
+ case COLOR_TAG: out->put_string("</font>"); break;
default:
error("unrecognised tag");
@@ -99,6 +184,27 @@ void html_text::issue_tag (char *tagname, char *arg)
}
/*
+ * issue_color_begin - writes out an html color tag.
+ */
+
+void html_text::issue_color_begin (color *c)
+{
+ unsigned int r, g, b;
+ char buf[6+1];
+
+ out->put_string("<font color=\"#");
+ if (c->is_default())
+ sprintf(buf, "000000");
+ else {
+ c->get_rgb(&r, &g, &b);
+ // we have to scale 0..0xFFFF to 0..0xFF
+ sprintf(buf, "%.2X%.2X%.2X", r/0x101, g/0x101, b/0x101);
+ }
+ out->put_string(buf);
+ out->put_string("\">");
+}
+
+/*
* start_tag - starts a tag.
*/
@@ -106,60 +212,42 @@ void html_text::start_tag (tag_definition *t)
{
switch (t->type) {
- case I_TAG: issue_tag("<i", t->arg1); break;
- case B_TAG: issue_tag("<b", t->arg1); break;
- case P_TAG: issue_tag("\n<p", t->arg1);
+ case I_TAG: issue_tag("<i", (char *)t->arg1); break;
+ case B_TAG: issue_tag("<b", (char *)t->arg1); break;
+ case P_TAG: if (t->indent == NULL) {
+ out->nl();
+ issue_tag("\n<p", (char *)t->arg1);
+ } else {
+ out->nl();
+ out->simple_comment("INDENTATION");
+ t->indent->begin(FALSE);
+ start_space = FALSE;
+ issue_tag("<p", (char *)t->arg1);
+ }
+
out->enable_newlines(TRUE); break;
- case SUB_TAG: issue_tag("<sub", t->arg1); break;
- case SUP_TAG: issue_tag("<sup", t->arg1); break;
- case TT_TAG: issue_tag("<tt", t->arg1); break;
- case PRE_TAG: out->nl(); issue_tag("<pre", t->arg1);
+ case SUB_TAG: issue_tag("<sub", (char *)t->arg1); break;
+ case SUP_TAG: issue_tag("<sup", (char *)t->arg1); break;
+ case TT_TAG: issue_tag("<tt", (char *)t->arg1); break;
+ case PRE_TAG: if (t->indent != NULL) {
+ out->nl();
+ out->simple_comment("INDENTATION");
+ t->indent->begin(FALSE);
+ start_space = FALSE;
+ }
+ out->enable_newlines(TRUE);
+ out->nl(); issue_tag("<pre", (char *)t->arg1);
out->enable_newlines(FALSE); break;
- case SMALL_TAG: issue_tag("<small", t->arg1); break;
- case BIG_TAG: issue_tag("<big", t->arg1); break;
- case TABLE_TAG: issue_table_begin(t); break;
+ case SMALL_TAG: issue_tag("<small", (char *)t->arg1); break;
+ case BIG_TAG: issue_tag("<big", (char *)t->arg1); break;
case BREAK_TAG: break;
+ case COLOR_TAG: issue_color_begin(&t->col); break;
default:
error("unrecognised tag");
}
}
-int html_text::table_is_void (tag_definition *t)
-{
- if (linelength > 0) {
- return( current_indentation*100/linelength <= 0 );
- } else {
- return( FALSE );
- }
-}
-
-void html_text::issue_table_begin (tag_definition *t)
-{
- if (linelength > 0) {
- int width=current_indentation*100/linelength;
-
- if (width > 0) {
- out->put_string("<table width=\"100%\" border=0 rules=\"none\" frame=\"void\"\n cols=\"2\" cellspacing=\"0\" cellpadding=\"0\">").nl();
- out->put_string("<tr valign=\"top\" align=\"left\">").nl();
- if ((t->arg1 == 0) || (strcmp(t->arg1, "") == 0))
- out->put_string("<td width=\"").put_number(width).put_string("%\"></td>");
- else {
- out->put_string("<td width=\"").put_number(width).put_string("%\">").nl();
- out->put_string(t->arg1).put_string("</td>");
- t->arg1[0] = (char)0;
- }
- out->put_string("<td width=\"").put_number(100-width).put_string("%\">").nl();
- }
- }
-}
-
-void html_text::issue_table_end (void)
-{
- out->put_string("</td></table>").nl();
- out->enable_newlines(TRUE);
-}
-
/*
* flush_text - flushes html tags which are outstanding on the html stack.
*/
@@ -190,116 +278,94 @@ int html_text::is_present (HTML_TAG t)
tag_definition *p=stackptr;
while (p != NULL) {
- if (t == p->type) {
- return( TRUE );
- }
+ if (t == p->type)
+ return TRUE;
p = p->next;
}
- return( FALSE );
+ return FALSE;
}
+extern void stop();
+
/*
- * push_para - adds a new entry onto the html paragraph stack.
+ * do_push - places, tag_definition, p, onto the stack
*/
-void html_text::push_para (HTML_TAG t, char *arg)
+void html_text::do_push (tag_definition *p)
{
- tag_definition *p=(tag_definition *)malloc(sizeof(tag_definition));
+ HTML_TAG t = p->type;
- p->type = t;
- p->arg1 = arg;
- p->text_emitted = FALSE;
+#if defined(DEBUGGING)
+ if (t == PRE_TAG)
+ stop();
+ debugStack = TRUE;
+ fprintf(stderr, "\nentering do_push (");
+ dump_stack_element(p);
+ fprintf(stderr, ")\n");
+ dump_stack();
+ fprintf(stderr, ")\n");
+ fflush(stderr);
+#endif
/*
- * if t is a P_TAG or TABLE_TAG or PRE_TAG make sure it goes on the end of the stack.
- * But we insist that a TABLE_TAG is always after a PRE_TAG
- * and that a P_TAG is always after a TABLE_TAG
+ * if t is a P_TAG or PRE_TAG make sure it goes on the end of the stack.
*/
- if (((t == P_TAG) || (t == PRE_TAG) || (t == TABLE_TAG)) &&
- (lastptr != NULL)) {
- if (((lastptr->type == TABLE_TAG) && (t == PRE_TAG)) ||
- ((lastptr->type == P_TAG) && (t == TABLE_TAG))) {
- /*
- * insert p before the lastptr
- */
- if (stackptr == lastptr) {
- /*
- * only on element of the stack
- */
- p->next = stackptr;
- stackptr = p;
- } else {
- /*
- * more than one element is on the stack
- */
- tag_definition *q = stackptr;
-
- while (q->next != lastptr) {
- q = q->next;
- }
- q->next = p;
- p->next = lastptr;
- }
- } else {
- /*
- * store, p, at the end
- */
- lastptr->next = p;
- lastptr = p;
- p->next = NULL;
- }
+ if (((t == P_TAG) || (t == PRE_TAG)) && (lastptr != NULL)) {
+ /*
+ * store, p, at the end
+ */
+ lastptr->next = p;
+ lastptr = p;
+ p->next = NULL;
} else {
p->next = stackptr;
if (stackptr == NULL)
lastptr = p;
stackptr = p;
}
+
+#if defined(DEBUGGING)
+ dump_stack();
+ fprintf(stderr, "exiting do_push\n");
+#endif
}
/*
- * do_indent - remember the indent parameters and if
- * indent is > pageoff and indent has changed
- * then we start a html table to implement the indentation.
+ * push_para - adds a new entry onto the html paragraph stack.
*/
-void html_text::do_indent (char *arg, int indent, int pageoff, int linelen)
+void html_text::push_para (HTML_TAG t, void *arg, html_indent *in)
{
- if ((current_indentation != -1) &&
- (pageoffset+current_indentation != indent+pageoff)) {
- /*
- * actual indentation of text has changed, we need to put
- * a table tag onto the stack.
- */
- do_table(arg);
- }
- current_indentation = indent;
- pageoffset = pageoff;
- linelength = linelen;
+ tag_definition *p=(tag_definition *)malloc(sizeof(tag_definition));
+
+ p->type = t;
+ p->arg1 = arg;
+ p->text_emitted = FALSE;
+ p->indent = in;
+
+ if (t == PRE_TAG && is_present(PRE_TAG))
+ fatal("cannot have multiple PRE_TAGs");
+
+ do_push(p);
}
-void html_text::do_table (char *arg)
+void html_text::push_para (HTML_TAG t)
{
- int in_pre = is_in_pre();
- // char *para_type = done_para();
- done_pre();
- shutdown(TABLE_TAG); // shutdown a previous table, if present
- remove_break();
- if (in_pre) {
- do_pre();
- }
- // do_para(para_type);
- push_para(TABLE_TAG, arg);
+ push_para(t, (void *)"", NULL);
}
-/*
- * done_table - terminates a possibly existing table.
- */
-
-void html_text::done_table (void)
+void html_text::push_para (color *c)
{
- shutdown(TABLE_TAG);
- space_emitted = TRUE;
+ tag_definition *p=(tag_definition *)malloc(sizeof(tag_definition));
+
+ p->type = COLOR_TAG;
+ p->arg1 = NULL;
+ p->col = *c;
+ p->text_emitted = FALSE;
+ p->indent = NULL;
+
+ do_push(p);
}
/*
@@ -308,11 +374,8 @@ void html_text::done_table (void)
void html_text::do_italic (void)
{
- done_bold();
- done_tt();
- if (! is_present(I_TAG)) {
- push_para(I_TAG, "");
- }
+ if (! is_present(I_TAG))
+ push_para(I_TAG);
}
/*
@@ -321,11 +384,8 @@ void html_text::do_italic (void)
void html_text::do_bold (void)
{
- done_italic();
- done_tt();
- if (! is_present(B_TAG)) {
- push_para(B_TAG, "");
- }
+ if (! is_present(B_TAG))
+ push_para(B_TAG);
}
/*
@@ -334,11 +394,8 @@ void html_text::do_bold (void)
void html_text::do_tt (void)
{
- done_bold();
- done_italic();
- if ((! is_present(TT_TAG)) && (! is_present(PRE_TAG))) {
- push_para(TT_TAG, "");
- }
+ if ((! is_present(TT_TAG)) && (! is_present(PRE_TAG)))
+ push_para(TT_TAG);
}
/*
@@ -347,13 +404,15 @@ void html_text::do_tt (void)
void html_text::do_pre (void)
{
- done_bold();
- done_italic();
done_tt();
- (void)done_para();
- if (! is_present(PRE_TAG)) {
- push_para(PRE_TAG, "");
- }
+ if (is_present(P_TAG)) {
+ html_indent *i = remove_indent(P_TAG);
+ (void)done_para();
+ if (! is_present(PRE_TAG))
+ push_para(PRE_TAG, NULL, i);
+ } else if (! is_present(PRE_TAG))
+ push_para(PRE_TAG, NULL, NULL);
+ dump_stack();
}
/*
@@ -363,16 +422,26 @@ void html_text::do_pre (void)
int html_text::is_in_pre (void)
{
- return( is_present(PRE_TAG) );
+ return is_present(PRE_TAG);
+}
+
+/*
+ * do_color - initiates a new color tag.
+ */
+
+void html_text::do_color (color *c)
+{
+ shutdown(COLOR_TAG); // shutdown a previous color tag, if present
+ push_para(c);
}
/*
- * is_in_table - returns TRUE if we are currently within a table.
+ * done_color - shutdown an outstanding color tag, if it exists.
*/
-int html_text::is_in_table (void)
+void html_text::done_color (void)
{
- return( is_present(TABLE_TAG) );
+ shutdown(COLOR_TAG);
}
/*
@@ -388,6 +457,7 @@ char *html_text::shutdown (HTML_TAG t)
tag_definition *temp =NULL;
int notext =TRUE;
+ dump_stack();
while ((stackptr != NULL) && (stackptr->type != t)) {
notext = (notext && (! stackptr->text_emitted));
if (! notext) {
@@ -417,12 +487,14 @@ char *html_text::shutdown (HTML_TAG t)
end_tag(stackptr);
}
if (t == P_TAG) {
- arg = stackptr->arg1;
+ arg = (char *)stackptr->arg1;
}
p = stackptr;
stackptr = stackptr->next;
if (stackptr == NULL)
lastptr = NULL;
+ if (p->indent != NULL)
+ delete p->indent;
free(p);
}
@@ -430,13 +502,16 @@ char *html_text::shutdown (HTML_TAG t)
* and restore unaffected tags
*/
while (temp != NULL) {
- push_para(temp->type, temp->arg1);
+ if (temp->type == COLOR_TAG)
+ push_para(&temp->col);
+ else
+ push_para(temp->type, temp->arg1, temp->indent);
p = temp;
temp = temp->next;
free(p);
}
}
- return( arg );
+ return arg;
}
/*
@@ -519,37 +594,9 @@ void html_text::done_big (void)
void html_text::check_emit_text (tag_definition *t)
{
if ((t != NULL) && (! t->text_emitted)) {
- /*
- * we peep and see whether there is a <p> before the <table>
- * in which case we skip the <p>
- */
- if (t->type == TABLE_TAG) {
- if (table_is_void(t)) {
- tag_definition *n = t->next;
- remove_def(t);
- check_emit_text(n);
- } else {
- /*
- * a table which will be emitted, is there a <p> succeeding it?
- */
- if ((t->next != NULL) &&
- (t->next->type == P_TAG) &&
- ((t->next->arg1 == 0) || strcmp(t->next->arg1, "") == 0)) {
- /*
- * yes skip the <p>
- */
- check_emit_text(t->next->next);
- } else {
- check_emit_text(t->next);
- }
- t->text_emitted = TRUE;
- start_tag(t);
- }
- } else {
- check_emit_text(t->next);
- t->text_emitted = TRUE;
- start_tag(t);
- }
+ check_emit_text(t->next);
+ t->text_emitted = TRUE;
+ start_tag(t);
}
}
@@ -557,7 +604,7 @@ void html_text::check_emit_text (tag_definition *t)
* do_emittext - tells the class that text was written during the current tag.
*/
-void html_text::do_emittext (char *s, int length)
+void html_text::do_emittext (const char *s, int length)
{
if ((! is_present(P_TAG)) && (! is_present(PRE_TAG)))
do_para("");
@@ -577,25 +624,47 @@ void html_text::do_emittext (char *s, int length)
}
out->put_string(s, length);
space_emitted = FALSE;
+ blank_para = FALSE;
}
/*
- * do_para- starts a new paragraph
+ * do_para - starts a new paragraph
*/
-void html_text::do_para (char *arg)
+void html_text::do_para (const char *arg, html_indent *in)
{
- done_pre();
if (! is_present(P_TAG)) {
- remove_sub_sup();
- if ((arg != 0) && (strcmp(arg, "") != 0)) {
- remove_tag(TABLE_TAG);
+ if (is_present(PRE_TAG)) {
+ html_indent *i = remove_indent(PRE_TAG);
+ done_pre();
+ if (i == in || in == NULL)
+ in = i;
+ else
+ delete i;
}
- push_para(P_TAG, arg);
+ remove_sub_sup();
+ push_para(P_TAG, (void *)arg, in);
space_emitted = TRUE;
}
}
+void html_text::do_para (const char *arg)
+{
+ do_para(arg, NULL);
+}
+
+void html_text::do_para (simple_output *op, const char *arg1,
+ int indentation, int pageoffset, int linelength)
+{
+ html_indent *indent;
+
+ if (indentation == 0)
+ indent = NULL;
+ else
+ indent = new html_indent(op, indentation, pageoffset, linelength);
+ do_para(arg1, indent);
+}
+
/*
* done_para - shuts down a paragraph tag.
*/
@@ -603,7 +672,27 @@ void html_text::do_para (char *arg)
char *html_text::done_para (void)
{
space_emitted = TRUE;
- return( shutdown(P_TAG) );
+ return shutdown(P_TAG);
+}
+
+/*
+ * remove_indent - returns the indent associated with, tag.
+ * The indent associated with tag is set to NULL.
+ */
+
+html_indent *html_text::remove_indent (HTML_TAG tag)
+{
+ tag_definition *p=stackptr;
+
+ while (p != NULL) {
+ if (tag == p->type) {
+ html_indent *i = p->indent;
+ p->indent = NULL;
+ return i;
+ }
+ p = p->next;
+ }
+ return NULL;
}
/*
@@ -613,11 +702,19 @@ char *html_text::done_para (void)
void html_text::do_space (void)
{
if (is_in_pre()) {
- do_emittext("", 0);
+ if (blank_para)
+ start_space = TRUE;
+ else {
+ do_emittext("", 0);
+ out->nl();
+ }
} else {
- do_para(done_para());
+ html_indent *i = remove_indent(P_TAG);
+
+ do_para(done_para(), i);
+ space_emitted = TRUE;
+ start_space = TRUE;
}
- space_emitted = TRUE;
}
/*
@@ -629,7 +726,7 @@ void html_text::do_break (void)
if (! is_present(PRE_TAG)) {
if (emitted_text()) {
if (! is_present(BREAK_TAG)) {
- push_para(BREAK_TAG, "");
+ push_para(BREAK_TAG);
}
}
}
@@ -654,7 +751,25 @@ void html_text::do_newline (void)
int html_text::emitted_text (void)
{
- return( ! space_emitted);
+ return !space_emitted;
+}
+
+/*
+ * ever_emitted_text - returns TRUE if we have ever emitted text in this paragraph.
+ */
+
+int html_text::ever_emitted_text (void)
+{
+ return !blank_para;
+}
+
+/*
+ * starts_with_space - returns TRUE if we have start this paragraph with a .sp
+ */
+
+int html_text::starts_with_space (void)
+{
+ return start_space;
}
/*
@@ -758,9 +873,9 @@ int html_text::remove_break (void)
if (stackptr == NULL)
lastptr = NULL;
q = stackptr;
- } else if (l == 0) {
+ } else if (l == 0)
error("stack list pointers are wrong");
- } else {
+ else {
l->next = p->next;
q = p->next;
if (l->next == NULL)
@@ -772,13 +887,35 @@ int html_text::remove_break (void)
* now determine whether text was issued before <br>
*/
while (q != 0) {
- if (q->text_emitted) {
- return( TRUE );
- } else {
+ if (q->text_emitted)
+ return TRUE;
+ else
q = q->next;
+ }
+ return FALSE;
+}
+
+/*
+ * remove_para_align - removes a paragraph which has a text
+ * argument. If the paragraph has no text
+ * argument then it is left alone.
+ */
+
+void html_text::remove_para_align (void)
+{
+ if (is_present(P_TAG)) {
+ tag_definition *p=stackptr;
+
+ while (p != NULL) {
+ if (p->type == P_TAG && p->arg1 != NULL) {
+ html_indent *i = remove_indent(P_TAG);
+ done_para();
+ do_para("", i);
+ return;
+ }
+ p = p->next;
}
}
- return( FALSE );
}
/*
@@ -789,11 +926,10 @@ int html_text::remove_break (void)
void html_text::do_small (void)
{
- if (is_present(BIG_TAG)) {
+ if (is_present(BIG_TAG))
done_big();
- } else {
- push_para(SMALL_TAG, "");
- }
+ else
+ push_para(SMALL_TAG);
}
/*
@@ -802,11 +938,10 @@ void html_text::do_small (void)
void html_text::do_big (void)
{
- if (is_present(SMALL_TAG)) {
+ if (is_present(SMALL_TAG))
done_small();
- } else {
- push_para(BIG_TAG, "");
- }
+ else
+ push_para(BIG_TAG);
}
/*
@@ -815,7 +950,7 @@ void html_text::do_big (void)
void html_text::do_sup (void)
{
- push_para(SUP_TAG, "");
+ push_para(SUP_TAG);
}
/*
@@ -824,6 +959,6 @@ void html_text::do_sup (void)
void html_text::do_sub (void)
{
- push_para(SUB_TAG, "");
+ push_para(SUB_TAG);
}
diff --git a/contrib/groff/src/devices/grohtml/html-text.h b/contrib/groff/src/devices/grohtml/html-text.h
index 5bbcd43..c43cbda 100644
--- a/contrib/groff/src/devices/grohtml/html-text.h
+++ b/contrib/groff/src/devices/grohtml/html-text.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
*
* Gaius Mulley (gaius@glam.ac.uk) wrote html-text.cc
*
@@ -26,18 +26,22 @@ 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 "html.h"
+#include "html-table.h"
/*
* html tags
*/
typedef enum {I_TAG, B_TAG, P_TAG, SUB_TAG, SUP_TAG, TT_TAG,
- PRE_TAG, SMALL_TAG, BIG_TAG, BREAK_TAG, TABLE_TAG} HTML_TAG;
+ PRE_TAG, SMALL_TAG, BIG_TAG, BREAK_TAG,
+ COLOR_TAG} HTML_TAG;
typedef struct tag_definition {
HTML_TAG type;
- char *arg1;
+ void *arg1;
int text_emitted;
+ color col;
+ html_indent *indent;
tag_definition *next;
} tag_definition ;
@@ -49,61 +53,73 @@ typedef struct tag_definition {
class html_text {
public:
- html_text (simple_output *op);
- ~html_text (void);
- void flush_text (void);
- void do_emittext (char *s, int length);
- void do_italic (void);
- void do_bold (void);
- void do_roman (void);
- void do_tt (void);
- void do_pre (void);
- void do_small (void);
- void do_big (void);
- void do_para (char *arg1);
- void do_sup (void);
- void do_sub (void);
- void do_space (void);
- void do_break (void);
- void do_newline (void);
- void do_table (char *arg);
- void done_bold (void);
- void done_italic (void);
- char *done_para (void);
- void done_sup (void);
- void done_sub (void);
- void done_tt (void);
- void done_pre (void);
- void done_small (void);
- void done_big (void);
- void do_indent (char *arg, int indent, int pageoff, int linelen);
- int emitted_text (void);
- void emit_space (void);
- int is_in_pre (void);
- void remove_tag (HTML_TAG tag);
- void remove_sub_sup (void);
- void done_table (void);
- int is_in_table (void);
+ html_text (simple_output *op);
+ ~html_text (void);
+ void flush_text (void);
+ void do_emittext (const char *s, int length);
+ void do_italic (void);
+ void do_bold (void);
+ void do_roman (void);
+ void do_tt (void);
+ void do_pre (void);
+ void do_small (void);
+ void do_big (void);
+ void do_para (const char *arg); // used for no indentation
+ void do_para (simple_output *op, const char *arg1,
+ int indentation, int pageoffset, int linelength);
+ void do_sup (void);
+ void do_sub (void);
+ void do_space (void);
+ void do_break (void);
+ void do_newline (void);
+ void do_table (const char *arg);
+ void done_bold (void);
+ void done_italic (void);
+ char *done_para (void);
+ void done_sup (void);
+ void done_sub (void);
+ void done_tt (void);
+ void done_pre (void);
+ void done_small (void);
+ void done_big (void);
+ void do_color (color *c);
+ void done_color (void);
+ int emitted_text (void);
+ int ever_emitted_text (void);
+ int starts_with_space (void);
+ void emit_space (void);
+ int is_in_pre (void);
+ void remove_tag (HTML_TAG tag);
+ void remove_sub_sup (void);
+ void remove_para_align (void);
private:
tag_definition *stackptr; /* the current paragraph state */
tag_definition *lastptr; /* the end of the stack */
simple_output *out;
- int space_emitted;
- int current_indentation; /* current .in value */
- int pageoffset; /* .po value */
- int linelength; /* current line length */
+ int space_emitted; /* just emitted a space? */
+ int current_indentation; /* current .in value */
+ int pageoffset; /* .po value */
+ int linelength; /* current line length */
+ int blank_para; /* have we ever written text? */
+ int start_space; /* does para start with a .sp */
+ html_indent *indent; /* our indent class */
- int is_present (HTML_TAG t);
- void end_tag (tag_definition *t);
- void start_tag (tag_definition *t);
- void push_para (HTML_TAG t, char *arg);
- char *shutdown (HTML_TAG t);
- void check_emit_text (tag_definition *t);
- int remove_break (void);
- void issue_tag (char *tagname, char *arg);
- void issue_table_begin (tag_definition *t);
- void issue_table_end (void);
- int table_is_void (tag_definition *t);
- void remove_def (tag_definition *t);
+ int is_present (HTML_TAG t);
+ void end_tag (tag_definition *t);
+ void start_tag (tag_definition *t);
+ void do_para (const char *arg, html_indent *in);
+ void push_para (HTML_TAG t);
+ void push_para (HTML_TAG t, void *arg, html_indent *in);
+ void push_para (color *c);
+ void do_push (tag_definition *p);
+ char *shutdown (HTML_TAG t);
+ void check_emit_text (tag_definition *t);
+ int remove_break (void);
+ void issue_tag (char *tagname, char *arg);
+ void issue_color_begin (color *c);
+ void remove_def (tag_definition *t);
+ html_indent *remove_indent (HTML_TAG tag);
+ void dump_stack_element (tag_definition *p);
+ void dump_stack (void);
};
diff --git a/contrib/groff/src/devices/grohtml/html.h b/contrib/groff/src/devices/grohtml/html.h
index 69b6e35..431647c 100644
--- a/contrib/groff/src/devices/grohtml/html.h
+++ b/contrib/groff/src/devices/grohtml/html.h
@@ -20,8 +20,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#if !defined(HTML_H)
# define HTML_H
-# undef DEBUGGING
-// # define DEBUGGING
/*
* class and structure needed to buffer words
@@ -53,6 +51,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 &put_string(const string &s);
simple_output &put_troffps_char (const char *s);
simple_output &put_translated_string(const char *s);
simple_output &put_number(int);
diff --git a/contrib/groff/src/devices/grohtml/output.cc b/contrib/groff/src/devices/grohtml/output.cc
index 88ab7d6..67d5874 100644
--- a/contrib/groff/src/devices/grohtml/output.cc
+++ b/contrib/groff/src/devices/grohtml/output.cc
@@ -38,6 +38,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include <unistd.h>
#endif
+#undef DEBUGGING
+// #define DEBUGGING
+
#if !defined(TRUE)
# define TRUE (1==1)
#endif
@@ -45,6 +48,18 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
# define FALSE (1==0)
#endif
+
+#if defined(DEBUGGING)
+# define FPUTC(X,Y) do { fputc((X),(Y)); fputc((X), stderr); fflush(stderr); } while (0)
+# define FPUTS(X,Y) do { fputs((X),(Y)); fputs((X), stderr); fflush(stderr); } while (0)
+# define PUTC(X,Y) do { putc((X),(Y)); putc((X), stderr); fflush(stderr); } while (0)
+#else
+# define FPUTC(X,Y) do { fputc((X),(Y)); } while (0)
+# define FPUTS(X,Y) do { fputs((X),(Y)); } while (0)
+# define PUTC(X,Y) do { putc((X),(Y)); } while (0)
+#endif
+
+
/*
* word - initialise a word and set next to NULL
*/
@@ -88,7 +103,7 @@ int word_list::flush (FILE *f)
while (head != 0) {
t = head;
head = head->next;
- fputs(t->s, f);
+ FPUTS(t->s, f);
delete t;
}
head = 0;
@@ -146,7 +161,7 @@ simple_output &simple_output::copy_file(FILE *infp)
{
int c;
while ((c = getc(infp)) != EOF)
- putc(c, fp);
+ PUTC(c, fp);
return *this;
}
@@ -154,7 +169,7 @@ simple_output &simple_output::end_line()
{
flush_last_word();
if (col != 0) {
- putc('\n', fp);
+ PUTC('\n', fp);
col = 0;
}
return *this;
@@ -169,10 +184,10 @@ simple_output &simple_output::simple_comment(const char *s)
{
flush_last_word();
if (col != 0)
- putc('\n', fp);
- fputs("<!-- ", fp);
- fputs(s, fp);
- fputs(" -->\n", fp);
+ PUTC('\n', fp);
+ FPUTS("<!-- ", fp);
+ FPUTS(s, fp);
+ FPUTS(" -->\n", fp);
col = 0;
return *this;
}
@@ -181,7 +196,7 @@ simple_output &simple_output::begin_comment(const char *s)
{
flush_last_word();
if (col != 0)
- putc('\n', fp);
+ PUTC('\n', fp);
col = 0;
put_string("<!--");
space_or_newline();
@@ -205,7 +220,7 @@ simple_output &simple_output::end_comment()
simple_output &simple_output::check_newline(int n)
{
if ((col + n + last_word.get_length() + 1 > max_line_length) && (newlines)) {
- fputc('\n', fp);
+ FPUTC('\n', fp);
col = last_word.flush(fp);
}
return *this;
@@ -218,11 +233,8 @@ simple_output &simple_output::check_newline(int n)
simple_output &simple_output::space_or_newline (void)
{
-#if defined(DEBUGGING)
- fflush(fp); // just for testing
-#endif
if ((col + last_word.get_length() + 1 > max_line_length) && (newlines)) {
- fputc('\n', fp);
+ FPUTC('\n', fp);
if (last_word.get_length() > 0) {
col = last_word.flush(fp);
} else {
@@ -231,7 +243,7 @@ simple_output &simple_output::space_or_newline (void)
} else {
if (last_word.get_length() != 0) {
if (col > 0) {
- fputc(' ', fp);
+ FPUTC(' ', fp);
col++;
}
col += last_word.flush(fp);
@@ -250,7 +262,7 @@ simple_output &simple_output::nl (void)
space_or_newline();
col += last_word.flush(fp);
if (col != 0) {
- fputc('\n', fp);
+ FPUTC('\n', fp);
col = 0;
}
return *this ;
@@ -266,7 +278,7 @@ simple_output &simple_output::set_fixed_point(int n)
simple_output &simple_output::put_raw_char(char c)
{
col += last_word.flush(fp);
- putc(c, fp);
+ PUTC(c, fp);
col++;
return *this;
}
@@ -283,6 +295,12 @@ simple_output &simple_output::put_string(const char *s)
return *this;
}
+simple_output &simple_output::put_string(const string &s)
+{
+ last_word.add_word(s.contents(), s.length());
+ return *this;
+}
+
simple_output &simple_output::put_number(int n)
{
char buf[1 + INT_DIGITS + 1];
@@ -322,15 +340,15 @@ void simple_output::flush_last_word (void)
if (len > 0) {
if (newlines) {
if (col + len + 1 > max_line_length) {
- fputs("\n", fp);
+ FPUTS("\n", fp);
col = 0;
} else {
- fputs(" ", fp);
+ FPUTS(" ", fp);
col++;
}
len += last_word.flush(fp);
} else {
- fputs(" ", fp);
+ FPUTS(" ", fp);
col++;
col += last_word.flush(fp);
}
diff --git a/contrib/groff/src/devices/grohtml/post-html.cc b/contrib/groff/src/devices/grohtml/post-html.cc
index 0c36941..4431f17 100644
--- a/contrib/groff/src/devices/grohtml/post-html.cc
+++ b/contrib/groff/src/devices/grohtml/post-html.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
*
* Gaius Mulley (gaius@glam.ac.uk) wrote post-html.cc
* but it owes a huge amount of ideas and raw code from
@@ -28,6 +28,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "cset.h"
#include "html.h"
#include "html-text.h"
+#include "html-table.h"
#include <time.h>
@@ -47,25 +48,26 @@ extern "C" const char *Version_string;
# define FALSE (1==0)
#endif
-#define MAX_STRING_LENGTH 4096
#define MAX_LINE_LENGTH 60 /* maximum characters we want in a line */
#define SIZE_INCREMENT 2 /* font size increment <big> = +2 */
#define BASE_POINT_SIZE 10 /* 10 points is the base size ie html size 3 */
#define CENTER_TOLERANCE 2 /* how many pixels off center will we still */
-#define ANCHOR_TEMPLATE "heading%d" /* if simple anchor is set we use this */
+#define ANCHOR_TEMPLATE "heading" /* if simple anchor is set we use this */
#define UNICODE_DESC_START 0x80 /* all character entities above this are */
/* either encoded by their glyph names or if */
/* there is no name then we use &#nnn; */
-#define INDENTATION /* #undef INDENTATION to remove .in handling */
-
typedef enum {CENTERED, LEFT, RIGHT, INLINE} TAG_ALIGNMENT;
+typedef enum {col_tag, tab_tag, tab0_tag, none} colType;
+
+#undef DEBUG_TABLES
+
/*
* prototypes
*/
-void str_translate_to_html (font *f, char *buf, int buflen, char *str, int len, int and_single);
-char *get_html_translation (font *f, const char *name);
+char *get_html_translation (font *f, const string &name);
+int char_translate_to_html (font *f, char *buf, int buflen, unsigned char ch, int b, int and_single);
static int auto_links = TRUE; /* by default we enable automatic links at */
@@ -73,6 +75,9 @@ static int auto_links = TRUE; /* by default we enable aut
static int auto_rule = TRUE; /* by default we enable an automatic rule */
/* at the top and bottom of the document */
static int simple_anchors = FALSE; /* default to anchors with heading text */
+static int manufacture_headings = FALSE; /* default is to use the Hn html headings, */
+ /* rather than manufacture our own. */
+static color *default_background = NULL; /* has user requested initial bg color? */
/*
@@ -83,41 +88,27 @@ void stop () {}
static int min (int a, int b)
{
- if (a < b) {
- return( a );
- } else {
- return( b );
- }
+ if (a < b)
+ return a;
+ else
+ return b;
}
static int max (int a, int b)
{
- if (a > b) {
- return( a );
- } else {
- return( b );
- }
+ if (a > b)
+ return a;
+ else
+ return b;
}
/*
- * is_subsection - returns TRUE if a1..a2 is within b1..b2
- */
-
-#if 0
-static int is_subsection (int a1, int a2, int b1, int b2)
-{
- // easier to see whether this is not the case
- return( !((a1 < b1) || (a1 > b2) || (a2 < b1) || (a2 > b2)) );
-}
-#endif
-
-/*
* is_intersection - returns TRUE if range a1..a2 intersects with b1..b2
*/
static int is_intersection (int a1, int a2, int b1, int b2)
{
- // again easier to prove NOT outside limits
+ // easier to prove NOT outside limits
return( ! ((a1 > b2) || (a2 < b1)) );
}
@@ -230,8 +221,9 @@ struct style {
int font_no;
int height;
int slant;
+ color col;
style ();
- style (font *, int, int, int, int);
+ style (font *, int, int, int, int, color);
int operator == (const style &) const;
int operator != (const style &) const;
};
@@ -241,15 +233,15 @@ style::style()
{
}
-style::style(font *p, int sz, int h, int sl, int no)
- : f(p), point_size(sz), font_no(no), height(h), slant(sl)
+style::style(font *p, int sz, int h, int sl, int no, color c)
+ : f(p), point_size(sz), font_no(no), height(h), slant(sl), col(c)
{
}
int style::operator==(const style &s) const
{
return (f == s.f && point_size == s.point_size
- && height == s.height && slant == s.slant);
+ && height == s.height && slant == s.slant && col == s.col);
}
int style::operator!=(const style &s) const
@@ -263,23 +255,33 @@ int style::operator!=(const style &s) const
struct char_block {
enum { SIZE = 256 };
- char buffer[SIZE];
+ char *buffer;
int used;
char_block *next;
char_block();
+ char_block::char_block(int length);
};
char_block::char_block()
+: buffer(NULL), used(0), next(0)
+{
+}
+
+char_block::char_block(int length)
: used(0), next(0)
{
+ buffer = (char *)malloc(max(length, char_block::SIZE));
+ if (buffer == NULL)
+ fatal("out of memory error");
}
class char_buffer {
public:
char_buffer();
~char_buffer();
- char *add_string(char *, unsigned int);
+ char *add_string(const char *, unsigned int);
+ char *add_string(const string &);
private:
char_block *head;
char_block *tail;
@@ -299,24 +301,23 @@ char_buffer::~char_buffer()
}
}
-char *char_buffer::add_string (char *s, unsigned int length)
+char *char_buffer::add_string (const char *s, unsigned int length)
{
int i=0;
unsigned int old_used;
+ if (s == NULL || length == 0)
+ return NULL;
+
if (tail == 0) {
- tail = new char_block;
+ tail = new char_block(length+1);
head = tail;
} else {
if (tail->used + length+1 > char_block::SIZE) {
- tail->next = new char_block;
- tail = tail->next;
+ tail->next = new char_block(length+1);
+ tail = tail->next;
}
}
- // at this point we have a tail which is ready for the string.
- if (tail->used + length+1 > char_block::SIZE) {
- fatal("need to increase char_block::SIZE");
- }
old_used = tail->used;
do {
@@ -336,59 +337,196 @@ char *char_buffer::add_string (char *s, unsigned int length)
return( &tail->buffer[old_used] );
}
+char *char_buffer::add_string (const string &s)
+{
+ return add_string(s.contents(), s.length());
+}
+
/*
* the classes and methods for maintaining glyph positions.
*/
class text_glob {
public:
- text_glob (style *s, char *string, unsigned int length,
- int min_vertical , int min_horizontal,
- int max_vertical , int max_horizontal,
- int is_html , int is_troff_command,
- int is_auto_image,
- int is_a_line , int thickness);
- text_glob (void);
- ~text_glob (void);
- int is_a_line (void);
- int is_a_tag (void);
- int is_raw (void);
- int is_eol (void);
- int is_auto_img (void);
- int is_br (void);
+ void text_glob_html (style *s, char *str, int length,
+ int min_vertical, int min_horizontal,
+ int max_vertical, int max_horizontal);
+ void text_glob_special (style *s, char *str, int length,
+ int min_vertical, int min_horizontal,
+ int max_vertical, int max_horizontal);
+ void text_glob_line (style *s,
+ int min_vertical, int min_horizontal,
+ int max_vertical, int max_horizontal,
+ int thickness);
+ void text_glob_auto_image(style *s, char *str, int length,
+ int min_vertical, int min_horizontal,
+ int max_vertical, int max_horizontal);
+ void text_glob_tag (style *s, char *str, int length,
+ int min_vertical, int min_horizontal,
+ int max_vertical, int max_horizontal);
+
+ text_glob (void);
+ ~text_glob (void);
+ int is_a_line (void);
+ int is_a_tag (void);
+ int is_eol (void);
+ int is_auto_img (void);
+ int is_br (void);
+ int is_in (void);
+ int is_po (void);
+ int is_ti (void);
+ int is_ce (void);
+ int is_eol_ce (void);
+ int is_col (void);
+ int is_tab (void);
+ int is_tab0 (void);
+ int is_ta (void);
+ int is_tab_ts (void);
+ int is_tab_te (void);
+ int is_nf (void);
+ int is_fi (void);
+ int get_arg (void);
+ int get_tab_args (char *align);
+
+ void remember_table (html_table *t);
+ html_table *get_table (void);
style text_style;
- char *text_string;
+ const char *text_string;
unsigned int text_length;
int minv, minh, maxv, maxh;
- int is_raw_command; // should the text be sent directly to the device?
int is_tag; // is this a .br, .sp, .tl etc
int is_img_auto; // image created by eqn delim
+ int is_special; // text has come via 'x X html:'
int is_line; // is the command a <line>?
int thickness; // the thickness of a line
+ html_table *tab; // table description
+
+private:
+ text_glob (style *s, char *str, int length,
+ int min_vertical , int min_horizontal,
+ int max_vertical , int max_horizontal,
+ bool is_troff_command,
+ bool is_auto_image, bool is_special_command,
+ bool is_a_line , int thickness);
};
-text_glob::text_glob (style *s, char *string, unsigned int length,
+text_glob::text_glob (style *s, char *str, int length,
int min_vertical, int min_horizontal,
int max_vertical, int max_horizontal,
- int is_html, int is_troff_command,
- int is_auto_image,
- int is_a_line, int line_thickness)
- : text_style(*s), text_string(string), text_length(length),
+ bool is_troff_command,
+ bool is_auto_image, bool is_special_command,
+ bool is_a_line, int line_thickness)
+ : text_style(*s), text_string(str), text_length(length),
minv(min_vertical), minh(min_horizontal), maxv(max_vertical), maxh(max_horizontal),
- is_raw_command(is_html), is_tag(is_troff_command), is_img_auto(is_auto_image),
- is_line(is_a_line), thickness(line_thickness)
+ is_tag(is_troff_command), is_img_auto(is_auto_image), is_special(is_special_command),
+ is_line(is_a_line), thickness(line_thickness), tab(NULL)
{
}
text_glob::text_glob ()
: text_string(0), text_length(0), minv(-1), minh(-1), maxv(-1), maxh(-1),
- is_raw_command(FALSE), is_tag(FALSE), is_line(FALSE), thickness(0)
+ is_tag(FALSE), is_special(FALSE), is_line(FALSE), thickness(0), tab(NULL)
{
}
text_glob::~text_glob ()
{
+ if (tab != NULL)
+ delete tab;
+}
+
+/*
+ * text_glob_html - used to place html text into the glob buffer.
+ */
+
+void text_glob::text_glob_html (style *s, char *str, int length,
+ int min_vertical , int min_horizontal,
+ int max_vertical , int max_horizontal)
+{
+ text_glob *g = new text_glob(s, str, length,
+ min_vertical, min_horizontal, max_vertical, max_horizontal,
+ FALSE, FALSE, FALSE, FALSE, 0);
+ *this = *g;
+}
+
+/*
+ * text_glob_html - used to place html specials into the glob buffer.
+ * This text is essentially html commands coming through
+ * from the macro sets, with special designated sequences of
+ * characters translated into html. See add_and_encode.
+ */
+
+void text_glob::text_glob_special (style *s, char *str, int length,
+ int min_vertical , int min_horizontal,
+ int max_vertical , int max_horizontal)
+{
+ text_glob *g = new text_glob(s, str, length,
+ min_vertical, min_horizontal, max_vertical, max_horizontal,
+ FALSE, FALSE, TRUE, FALSE, 0);
+ *this = *g;
+}
+
+/*
+ * text_glob_line - record horizontal draw line commands.
+ */
+
+void text_glob::text_glob_line (style *s,
+ int min_vertical , int min_horizontal,
+ int max_vertical , int max_horizontal,
+ int thickness)
+{
+ text_glob *g = new text_glob(s, "", 0,
+ min_vertical, min_horizontal, max_vertical, max_horizontal,
+ FALSE, FALSE, FALSE, TRUE, thickness);
+ *this = *g;
+}
+
+/*
+ * text_glob_auto_image - record the presence of a .auto-image tag command.
+ * Used to mark that an image has been created automatically
+ * by a preprocessor and (pre-grohtml/troff) combination.
+ * Under some circumstances images may not be created.
+ * (consider .EQ
+ * delim $$
+ * .EN
+ * .TS
+ * tab(!), center;
+ * l!l.
+ * $1 over x$!recripical of x
+ * .TE
+ *
+ * the first auto-image marker is created via .EQ/.EN pair
+ * and no image is created.
+ * The second auto-image marker occurs at $1 over x$
+ * Currently this image will not be created
+ * as the whole of the table is created as an image.
+ * (Once html tables are handled by grohtml this will change.
+ * Shortly this will be the case).
+ */
+
+void text_glob::text_glob_auto_image(style *s, char *str, int length,
+ int min_vertical, int min_horizontal,
+ int max_vertical, int max_horizontal)
+{
+ text_glob *g = new text_glob(s, str, length,
+ min_vertical, min_horizontal, max_vertical, max_horizontal,
+ TRUE, TRUE, FALSE, FALSE, 0);
+ *this = *g;
+}
+
+/*
+ * text_glob_tag - records a troff tag.
+ */
+
+void text_glob::text_glob_tag (style *s, char *str, int length,
+ int min_vertical, int min_horizontal,
+ int max_vertical, int max_horizontal)
+{
+ text_glob *g = new text_glob(s, str, length,
+ min_vertical, min_horizontal, max_vertical, max_horizontal,
+ TRUE, FALSE, FALSE, FALSE, 0);
+ *this = *g;
}
/*
@@ -397,7 +535,7 @@ text_glob::~text_glob ()
int text_glob::is_a_line (void)
{
- return( is_line );
+ return is_line;
}
/*
@@ -406,7 +544,7 @@ int text_glob::is_a_line (void)
int text_glob::is_a_tag (void)
{
- return( is_tag );
+ return is_tag;
}
/*
@@ -419,12 +557,121 @@ int text_glob::is_eol (void)
}
/*
- * is_raw - returns TRUE if glob contains raw html.
+ * is_eol_ce - returns TRUE if glob contains the tag eol.ce
+ */
+
+int text_glob::is_eol_ce (void)
+{
+ return( is_tag && (strcmp(text_string, "html-tag:eol.ce") == 0) );
+}
+
+
+/*
+ * is_nf - returns TRUE if glob contains the tag .nf
+ */
+
+int text_glob::is_nf (void)
+{
+ return( is_tag && (strcmp(text_string, "html-tag:.nf") == 0) );
+}
+
+/*
+ * is_fi - returns TRUE if glob contains the tag .fi
+ */
+
+int text_glob::is_fi (void)
+{
+ return( is_tag && (strcmp(text_string, "html-tag:.fi") == 0) );
+}
+
+/*
+ * is_ce - returns TRUE if glob contains the tag .ce
+ */
+
+int text_glob::is_ce (void)
+{
+ return( is_tag && (strcmp(text_string, "html-tag:.ce") == 0) );
+}
+
+/*
+ * is_in - returns TRUE if glob contains the tag .in
+ */
+
+int text_glob::is_in (void)
+{
+ return( is_tag && (strncmp(text_string, "html-tag:.in ", strlen("html-tag:.in ")) == 0) );
+}
+
+/*
+ * is_po - returns TRUE if glob contains the tag .po
*/
-int text_glob::is_raw (void)
+int text_glob::is_po (void)
{
- return( is_raw_command );
+ return( is_tag && (strncmp(text_string, "html-tag:.po ", strlen("html-tag:.po ")) == 0) );
+}
+
+/*
+ * is_ti - returns TRUE if glob contains the tag .ti
+ */
+
+int text_glob::is_ti (void)
+{
+ return( is_tag && (strncmp(text_string, "html-tag:.ti ", strlen("html-tag:.ti ")) == 0) );
+}
+
+/*
+ * is_col - returns TRUE if glob contains the tag .col
+ */
+
+int text_glob::is_col (void)
+{
+ return( is_tag && (strncmp(text_string, "html-tag:.col", strlen("html-tag:.col")) == 0) );
+}
+
+/*
+ * is_tab_ts - returns TRUE if glob contains the tag .tab_ts
+ */
+
+int text_glob::is_tab_ts (void)
+{
+ return( is_tag && (strcmp(text_string, "html-tag:.tab-ts") == 0) );
+}
+
+/*
+ * is_tab_te - returns TRUE if glob contains the tag .tab_te
+ */
+
+int text_glob::is_tab_te (void)
+{
+ return( is_tag && (strcmp(text_string, "html-tag:.tab-te") == 0) );
+}
+
+/*
+ * is_ta - returns TRUE if glob contains the tag .ta
+ */
+
+int text_glob::is_ta (void)
+{
+ return( is_tag && (strncmp(text_string, "html-tag:.ta ", strlen("html-tag:.ta ")) == 0) );
+}
+
+/*
+ * is_tab - returns TRUE if glob contains the tag tab
+ */
+
+int text_glob::is_tab (void)
+{
+ return( is_tag && (strncmp(text_string, "html-tag:tab ", strlen("html-tag:tab ")) == 0) );
+}
+
+/*
+ * is_tab0 - returns TRUE if glob contains the tag tab0
+ */
+
+int text_glob::is_tab0 (void)
+{
+ return( is_tag && (strncmp(text_string, "html-tag:tab0", strlen("html-tag:tab0")) == 0) );
}
/*
@@ -434,16 +681,82 @@ int text_glob::is_raw (void)
int text_glob::is_auto_img (void)
{
- return( is_img_auto );
+ return is_img_auto;
}
/*
* is_br - returns TRUE if the glob is a tag containing a .br
+ * or an implied .br. Note that we do not include .nf or .fi
+ * as grohtml will place a .br after these commands if they
+ * should break the line.
*/
int text_glob::is_br (void)
{
- return( is_a_tag() && (strcmp("html-tag:.br", text_string) == 0) );
+ return( is_a_tag() && ((strcmp ("html-tag:.br", text_string) == 0) ||
+ (strncmp("html-tag:.sp", text_string, 11) == 0) ||
+ (strcmp ("html-tag:.ce", text_string) == 0)) );
+}
+
+int text_glob::get_arg (void)
+{
+ if (strncmp("html-tag:", text_string, strlen("html-tag:")) == 0) {
+ const char *p = text_string;
+
+ while ((*p != (char)0) && (!isspace(*p)))
+ p++;
+ while ((*p != (char)0) && (isspace(*p)))
+ p++;
+ if (*p == (char)0)
+ return -1;
+ return atoi(p);
+ }
+ return -1;
+}
+
+/*
+ * get_tab_args - returns the tab position and alignment of the tab tag
+ */
+
+int text_glob::get_tab_args (char *align)
+{
+ if (strncmp("html-tag:", text_string, strlen("html-tag:")) == 0) {
+ const char *p = text_string;
+
+ // firstly the alignment C|R|L
+ while ((*p != (char)0) && (!isspace(*p)))
+ p++;
+ while ((*p != (char)0) && (isspace(*p)))
+ p++;
+ *align = *p;
+ // now the int value
+ while ((*p != (char)0) && (!isspace(*p)))
+ p++;
+ while ((*p != (char)0) && (isspace(*p)))
+ p++;
+ if (*p == (char)0)
+ return -1;
+ return atoi(p);
+ }
+ return -1;
+}
+
+/*
+ * remember_table - saves table, t, in the text_glob.
+ */
+
+void text_glob::remember_table (html_table *t)
+{
+ tab = t;
+}
+
+/*
+ * get_table - returns the stored table description.
+ */
+
+html_table *text_glob::get_table (void)
+{
+ return tab;
}
/*
@@ -502,6 +815,8 @@ public:
int is_equal_to_head (void);
void start_from_head (void);
void start_from_tail (void);
+ void insert (text_glob *in);
+ void move_to (text_glob *in);
text_glob *move_right_get_data (void);
text_glob *move_left_get_data (void);
text_glob *get_data (void);
@@ -569,6 +884,7 @@ void list::add (text_glob *in, int line_number, int min_vertical, int min_horizo
if (head == 0) {
head = t;
tail = t;
+ ptr = t;
t->left = t;
t->right = t;
} else {
@@ -719,7 +1035,7 @@ text_glob* list::move_right_get_data (void)
/*
* move_left_get_data - returns the datum referenced via ptr and moves
- * ptr right.
+ * ptr right.
*/
text_glob* list::move_left_get_data (void)
@@ -733,21 +1049,55 @@ text_glob* list::move_left_get_data (void)
}
/*
+ * insert - inserts data after the current position.
+ */
+
+void list::insert (text_glob *in)
+{
+ if (is_empty())
+ fatal("list must not be empty if we are inserting data");
+ else {
+ if (ptr == 0)
+ ptr = head;
+
+ element_list *t = new element_list(in, ptr->lineno, ptr->minv, ptr->minh, ptr->maxv, ptr->maxh);
+ if (ptr == tail)
+ tail = t;
+ ptr->right->left = t;
+ t->right = ptr->right;
+ ptr->right = t;
+ t->left = ptr;
+ }
+}
+
+/*
+ * move_to - moves the current position to the point where data, in, exists.
+ * This is an expensive method and should be used sparingly.
+ */
+
+void list::move_to (text_glob *in)
+{
+ ptr = head;
+ while (ptr != tail && ptr->datum != in)
+ ptr = ptr->right;
+}
+
+/*
* page class and methods
*/
class page {
public:
page (void);
- void add (style *s, char *string, unsigned int length,
+ void add (style *s, const string &str,
int line_number,
int min_vertical, int min_horizontal,
int max_vertical, int max_horizontal);
- void add_html (style *s, char *string, unsigned int length,
+ void add_tag (style *s, const string &str,
int line_number,
int min_vertical, int min_horizontal,
int max_vertical, int max_horizontal);
- void add_tag (style *s, char *string, unsigned int length,
+ void add_and_encode (style *s, const string &str,
int line_number,
int min_vertical, int min_horizontal,
int max_vertical, int max_horizontal);
@@ -755,6 +1105,7 @@ public:
int line_number,
int x1, int y1, int x2, int y2,
int thickness);
+ void insert_tag (const string &str);
void dump_page (void); // debugging method
// and the data
@@ -767,32 +1118,34 @@ page::page()
{
}
-void page::add (style *s, char *string, unsigned int length,
- int line_number,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal)
+/*
+ * insert_tag - inserts a tag after the current position.
+ */
+
+void page::insert_tag (const string &str)
{
- if (length > 0) {
- text_glob *g=new text_glob(s, buffer.add_string(string, length), length,
- min_vertical, min_horizontal, max_vertical, max_horizontal,
- FALSE, FALSE, FALSE, FALSE, 0);
- glyphs.add(g, line_number, min_vertical, min_horizontal, max_vertical, max_horizontal);
+ if (str.length() > 0) {
+ text_glob *g=new text_glob();
+ text_glob *f=glyphs.get_data();
+ g->text_glob_tag(&f->text_style, buffer.add_string(str), str.length(),
+ f->minv, f->minh, f->maxv, f->maxh);
+ glyphs.insert(g);
}
}
/*
- * add_html - add a raw html command, for example mailto, line, background, image etc.
+ * add - add html text to the list of glyphs.
*/
-void page::add_html (style *s, char *string, unsigned int length,
- int line_number,
- int min_vertical, int min_horizontal,
- int max_vertical, int max_horizontal)
+void page::add (style *s, const string &str,
+ int line_number,
+ int min_vertical, int min_horizontal,
+ int max_vertical, int max_horizontal)
{
- if (length > 0) {
- text_glob *g=new text_glob(s, buffer.add_string(string, length), length,
- min_vertical, min_horizontal, max_vertical, max_horizontal,
- TRUE, FALSE, FALSE, FALSE, 0);
+ if (str.length() > 0) {
+ text_glob *g=new text_glob();
+ g->text_glob_html(s, buffer.add_string(str), str.length(),
+ min_vertical, min_horizontal, max_vertical, max_horizontal);
glyphs.add(g, line_number, min_vertical, min_horizontal, max_vertical, max_horizontal);
}
}
@@ -801,17 +1154,23 @@ void page::add_html (style *s, char *string, unsigned int length,
* add_tag - adds a troff tag, for example: .tl .sp .br
*/
-void page::add_tag (style *s, char *string, unsigned int length,
+void page::add_tag (style *s, const string &str,
int line_number,
int min_vertical, int min_horizontal,
int max_vertical, int max_horizontal)
{
- if (length > 0) {
- text_glob *g=new text_glob(s, buffer.add_string(string, length), length,
- min_vertical, min_horizontal, max_vertical, max_horizontal,
- FALSE, TRUE,
- (strncmp(string, "html-tag:.auto-image", 20) == 0),
- FALSE, 0);
+ if (str.length() > 0) {
+ text_glob *g;
+
+ if (strncmp((str+'\0').contents(), "html-tag:.auto-image", 20) == 0) {
+ g = new text_glob();
+ g->text_glob_auto_image(s, buffer.add_string(str), str.length(),
+ min_vertical, min_horizontal, max_vertical, max_horizontal);
+ } else {
+ g = new text_glob();
+ g->text_glob_tag(s, buffer.add_string(str), str.length(),
+ min_vertical, min_horizontal, max_vertical, max_horizontal);
+ }
glyphs.add(g, line_number, min_vertical, min_horizontal, max_vertical, max_horizontal);
}
}
@@ -826,29 +1185,115 @@ void page::add_line (style *s,
int thickness)
{
if (y1 == y2) {
- text_glob *g = new text_glob(s, "", 0,
- min(y1, y2), min(x1, y2), max(y1, y2), max(x1, x2),
- FALSE, TRUE, FALSE, FALSE, thickness);
+ text_glob *g = new text_glob();
+ g->text_glob_line(s,
+ min(y1, y2), min(x1, y2), max(y1, y2), max(x1, x2),
+ thickness);
glyphs.add(g, line_number, min(y1, y2), min(x1, y2), max(y1, y2), max(x1, x2));
}
}
/*
+ * to_unicode - returns a unicode translation of int, ch.
+ */
+
+static char *to_unicode (unsigned int ch)
+{
+ static char buf[30];
+
+ sprintf(buf, "&#%u;", ch);
+ return buf;
+}
+
+/*
+ * add_and_encode - adds a special string to the page, it translates the string
+ * into html glyphs. The special string will have come from x X html:
+ * and can contain troff character encodings which appear as
+ * \(char\). A sequence of \\ represents \.
+ * So for example we can write:
+ * "cost = \(Po\)3.00 file = \\foo\\bar"
+ * which is translated into:
+ * "cost = &pound;3.00 file = \foo\bar"
+ */
+
+void page::add_and_encode (style *s, const string &str,
+ int line_number,
+ int min_vertical, int min_horizontal,
+ int max_vertical, int max_horizontal)
+{
+ string html_string;
+ char *html_glyph;
+ int i=0;
+
+ if (s->f == NULL)
+ return;
+ while (i < str.length()) {
+ if ((i+1<str.length()) && (str.substring(i, 2) == string("\\("))) {
+ // start of escape
+ i += 2; // move over \(
+ int a = i;
+ while ((i+1<str.length()) && (str.substring(i, 2) != string("\\)"))) {
+ i++;
+ }
+ int n = i;
+ if ((i+1<str.length()) && (str.substring(i, 2) == string("\\)")))
+ i++;
+ else
+ n = -1;
+ if (n > 0) {
+ string troff_charname = str.substring(a, n-a);
+ html_glyph = get_html_translation(s->f, troff_charname);
+ if (html_glyph)
+ html_string += html_glyph;
+ else {
+ int index=s->f->name_to_index((troff_charname + '\0').contents());
+
+ if (s->f->contains(index) && (index != 0))
+ html_string += s->f->get_code(index);
+ }
+ }
+ } else
+ html_string += str[i];
+ i++;
+ }
+ if (html_string.length() > 0) {
+ text_glob *g=new text_glob();
+ g->text_glob_special(s, buffer.add_string(html_string), html_string.length(),
+ min_vertical, min_horizontal, max_vertical, max_horizontal);
+ glyphs.add(g, line_number, min_vertical, min_horizontal, max_vertical, max_horizontal);
+ }
+}
+
+/*
* dump_page - dump the page contents for debugging purposes.
*/
void page::dump_page(void)
{
+#if defined(DEBUG_TABLES)
+ text_glob *old_pos = glyphs.get_data();
text_glob *g;
+ printf("\n<!--\n");
printf("\n\ndebugging start\n");
glyphs.start_from_head();
do {
g = glyphs.get_data();
+ if (g->is_tab_ts()) {
+ printf("\n\n");
+ if (g->get_table() != NULL)
+ g->get_table()->dump_table();
+ }
printf("%s ", g->text_string);
+ if (g->is_tab_te())
+ printf("\n\n");
glyphs.move_right();
} while (! glyphs.is_equal_to_head());
+ glyphs.move_to(old_pos);
printf("\ndebugging end\n\n");
+ printf("\n-->\n");
+ fflush(stdout);
+#endif
}
/*
@@ -895,12 +1340,13 @@ public:
int has_been_written;
int has_been_found;
- char text[MAX_STRING_LENGTH];
+ int with_h1;
+ string text;
};
title_desc::title_desc ()
- : has_been_written(FALSE), has_been_found(FALSE)
+ : has_been_written(FALSE), has_been_found(FALSE), with_h1(FALSE)
{
}
@@ -918,7 +1364,7 @@ public:
list headers; // list of headers built from .NH and .SH
int header_level; // current header level
int written_header; // have we written the header yet?
- char header_buffer[MAX_STRING_LENGTH]; // current header text
+ string header_buffer; // current header text
void write_headings (FILE *f, int force);
};
@@ -948,9 +1394,13 @@ void header_desc::write_headings (FILE *f, int force)
do {
g = headers.get_data();
fputs("<a href=\"#", f);
- if (simple_anchors)
- fprintf(f, ANCHOR_TEMPLATE, h);
- else
+ if (simple_anchors) {
+ string buffer(ANCHOR_TEMPLATE);
+
+ buffer += as_string(h);
+ buffer += '\0';
+ fprintf(f, buffer.contents());
+ } else
fputs(g->text_string, f);
h++;
fputs("\">", f);
@@ -968,16 +1418,18 @@ class html_printer : public printer {
simple_output html;
int res;
int space_char_index;
+ int space_width;
int no_of_printed_pages;
int paper_length;
- enum { SBUF_SIZE = 8192 };
- char sbuf[SBUF_SIZE];
- int sbuf_len;
+ string sbuf;
int sbuf_start_hpos;
int sbuf_vpos;
int sbuf_end_hpos;
+ int sbuf_prev_hpos;
int sbuf_kern;
style sbuf_style;
+ int last_sbuf_length;
+ int overstrike_detected;
style output_style;
int output_hpos;
int output_vpos;
@@ -986,21 +1438,22 @@ class html_printer : public printer {
int line_thickness;
int output_line_thickness;
unsigned char output_space_code;
- string defs;
char *inside_font_style;
int page_number;
title_desc title;
- title_desc indent; // use title class to remember $1 of .ip
header_desc header;
int header_indent;
int supress_sub_sup;
int cutoff_heading;
page *page_contents;
html_text *current_paragraph;
+ html_indent *indent;
+ html_table *table;
int end_center;
int end_tempindent;
TAG_ALIGNMENT next_tag;
int fill_on;
+ int max_linelength;
int linelength;
int pageoffset;
int indentation;
@@ -1008,6 +1461,7 @@ class html_printer : public printer {
int pointsize;
int vertical_spacing;
int line_number;
+ color *background;
void flush_sbuf ();
void set_style (const style &);
@@ -1020,19 +1474,15 @@ class html_printer : public printer {
void set_line_thickness (const environment *);
void terminate_current_font (void);
void flush_font (void);
- void add_char_to_sbuf (unsigned char code);
- void add_to_sbuf (unsigned char code, const char *name);
+ void add_to_sbuf (int index, const string &s);
void write_title (int in_head);
- 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 ();
- int seen_backwards_escape (char *s, int l);
+ int sbuf_continuation (int index, const char *name, const environment *env, int w);
void flush_page (void);
void troff_tag (text_glob *g);
void flush_globs (void);
void emit_line (text_glob *g);
void emit_raw (text_glob *g);
- void translate_to_html (text_glob *g);
+ void emit_html (text_glob *g);
void determine_space (text_glob *g);
void start_font (const char *name);
void end_font (const char *name);
@@ -1043,6 +1493,7 @@ class html_printer : public printer {
void do_center (char *arg);
void do_break (void);
void do_eol (void);
+ void do_eol_ce (void);
void do_title (void);
void do_fill (int on);
void do_heading (char *arg);
@@ -1067,19 +1518,42 @@ class html_printer : public printer {
int end_subscript (text_glob *g);
int start_superscript (text_glob *g);
int end_superscript (text_glob *g);
-
+ void outstanding_eol (int n);
+ int is_bold (font *f);
+ font *make_bold (font *f);
+ int overstrike (int index, const char *name, const environment *env, int w);
+ void do_body (void);
+ int next_horiz_pos (text_glob *g, int nf);
+ void lookahead_for_tables (void);
+ void insert_tab_te (void);
+ text_glob *insert_tab_ts (text_glob *where);
+ void insert_tab0_foreach_tab (void);
+ void insert_tab_0 (text_glob *where);
+ void do_indent (int in, int pageoff, int linelen);
+ void shutdown_table (void);
+ void do_tab_ts (text_glob *g);
+ void do_tab_te (void);
+ void do_col (char *s);
+ void do_tab (char *s);
+ void do_tab0 (void);
+ int calc_nf (text_glob *g, int nf);
+ void calc_po_in (text_glob *g, int nf);
+ void remove_tabs (void);
+ void remove_courier_tabs (void);
+ void update_min_max (colType type_of_col, int *minimum, int *maximum, text_glob *g);
+ void add_table_end (char *debug_string);
// ADD HERE
public:
- html_printer ();
- ~html_printer ();
- void set_char (int i, font *f, const environment *env, int w, const char *name);
- void draw (int code, int *p, int np, const environment *env);
- void begin_page (int);
- void end_page (int);
- void special (char *arg, const environment *env, char type);
- font *make_font (const char *);
- void end_of_line ();
+ html_printer ();
+ ~html_printer ();
+ void set_char (int i, font *f, const environment *env, int w, const char *name);
+ void draw (int code, int *p, int np, const environment *env);
+ void begin_page (int);
+ void end_page (int);
+ void special (char *arg, const environment *env, char type);
+ font *make_font (const char *);
+ void end_of_line ();
};
printer *make_printer()
@@ -1092,7 +1566,7 @@ static void usage(FILE *stream);
void html_printer::set_style(const style &sty)
{
const char *fontname = sty.f->get_name();
- if (fontname == 0)
+ if (fontname == NULL)
fatal("no internalname specified for font");
#if 0
@@ -1100,6 +1574,33 @@ void html_printer::set_style(const style &sty)
#endif
}
+/*
+ * is_bold - returns TRUE if font, f, is bold.
+ */
+
+int html_printer::is_bold (font *f)
+{
+ const char *fontname = f->get_name();
+ return (strcmp(fontname, "B") == 0) || (strcmp(fontname, "BI") == 0);
+}
+
+/*
+ * make_bold - if a bold font of, f, exists then return it.
+ */
+
+font *html_printer::make_bold (font *f)
+{
+ const char *fontname = f->get_name();
+
+ if (strcmp(fontname, "B") == 0)
+ return f;
+ if (strcmp(fontname, "I") == 0)
+ return font::load_font("BI");
+ if (strcmp(fontname, "BI") == 0)
+ return f;
+ return NULL;
+}
+
void html_printer::end_of_line()
{
flush_sbuf();
@@ -1127,8 +1628,6 @@ void html_printer::emit_raw (text_glob *g)
determine_space(g);
current_paragraph->do_emittext(g->text_string, g->text_length);
} else {
- int in_table=current_paragraph->is_in_table();
-
current_paragraph->done_para();
switch (next_tag) {
@@ -1136,10 +1635,10 @@ void html_printer::emit_raw (text_glob *g)
current_paragraph->do_para("align=center");
break;
case LEFT:
- current_paragraph->do_para("align=left");
+ current_paragraph->do_para(&html, "align=left", indentation, pageoffset, linelength);
break;
case RIGHT:
- current_paragraph->do_para("align=right");
+ current_paragraph->do_para(&html, "align=right", indentation, pageoffset, linelength);
break;
default:
fatal("unknown enumeration");
@@ -1148,13 +1647,14 @@ void html_printer::emit_raw (text_glob *g)
current_paragraph->done_para();
next_tag = INLINE;
supress_sub_sup = TRUE;
-#if defined(INDENTATION)
- if (in_table) {
- stop();
- current_paragraph->do_indent(NULL, 0, pageoffset, linelength);
- current_paragraph->do_indent(indent.text, indentation, pageoffset, linelength);
+ if (indentation > 0) {
+ /*
+ * restore indentation
+ */
+ int newin = indentation;
+ indentation = 0;
+ do_indent(newin, pageoffset, linelength);
}
-#endif
}
}
@@ -1165,16 +1665,16 @@ void html_printer::emit_raw (text_glob *g)
void html_printer::do_center (char *arg)
{
int n = atoi(arg);
-
current_paragraph->do_break();
- current_paragraph->done_para();
- supress_sub_sup = TRUE;
-
+
if (n > 0) {
+ current_paragraph->done_para();
+ supress_sub_sup = TRUE;
current_paragraph->do_para("align=center");
end_center += n;
} else {
end_center = 0;
+ current_paragraph->remove_para_align();
}
}
@@ -1229,23 +1729,16 @@ static int exists (const char *filename)
* providing that the image exists.
*/
-static char *generate_img_src (const char *filename)
+static string &generate_img_src (const char *filename)
{
- static char buffer[MAX_STRING_LENGTH];
+ string *s = new string("");
while (filename && (filename[0] == ' ')) {
filename++;
}
- if (exists(filename)) {
- strcpy(buffer, "<img src=\"");
- strncat(buffer, filename, MAX_STRING_LENGTH-strlen("<img src=\"")-1);
- if (strlen(buffer) < MAX_STRING_LENGTH-3) {
- strncat(buffer, "\">", 3);
- }
- return( (char *)&buffer );
- } else {
- return( 0 );
- }
+ if (exists(filename))
+ *s += string("<img src=\"") + filename + "\">";
+ return *s;
}
/*
@@ -1258,19 +1751,30 @@ static char *generate_img_src (const char *filename)
void html_printer::do_auto_image (text_glob *g, const char *filename)
{
- char *buffer = generate_img_src(filename);
+ string buffer = generate_img_src(filename);
- if (buffer) {
+ if (! buffer.empty()) {
/*
* utilize emit_raw by creating a new text_glob.
*/
text_glob h = *g;
- h.text_string = buffer;
- h.text_length = strlen(buffer);
+ h.text_string = buffer.contents();
+ h.text_length = buffer.length();
emit_raw(&h);
- } else {
+ } else
next_tag = INLINE;
+}
+
+/*
+ * outstanding_eol - call do_eol, n, times.
+ */
+
+void html_printer::outstanding_eol (int n)
+{
+ while (n > 0) {
+ do_eol();
+ n--;
}
}
@@ -1282,7 +1786,7 @@ void html_printer::do_title (void)
{
text_glob *t;
int removed_from_head;
- char buf[MAX_STRING_LENGTH];
+ int eol_ce = 0;
if (page_number == 1) {
int found_title_start = FALSE;
@@ -1292,44 +1796,43 @@ void html_printer::do_title (void)
t = page_contents->glyphs.get_data();
removed_from_head = FALSE;
if (t->is_auto_img()) {
- char *img=generate_img_src((char *)(t->text_string + 20));
+ string img = generate_img_src((char *)(t->text_string + 20));
- if (img) {
- if (found_title_start) {
- strcat(title.text, " ");
- }
+ if (! img.empty()) {
+ if (found_title_start)
+ title.text += " ";
found_title_start = TRUE;
title.has_been_found = TRUE;
- strcat(title.text, img);
+ title.text += img;
}
page_contents->glyphs.sub_move_right(); /* move onto next word */
removed_from_head = ((!page_contents->glyphs.is_empty()) &&
(page_contents->glyphs.is_equal_to_head()));
- } else if (t->is_raw_command) {
- /* skip raw commands
+ } else if (t->is_eol_ce()) {
+ /* process the eol associated with .ce
*/
+ eol_ce++;
page_contents->glyphs.sub_move_right(); /* move onto next word */
} else if (t->is_eol()) {
/* end of title found
*/
title.has_been_found = TRUE;
+ outstanding_eol(eol_ce);
return;
} else if (t->is_a_tag()) {
/* end of title found, but move back so that we read this tag and process it
*/
page_contents->glyphs.move_left(); /* move backwards to last word */
title.has_been_found = TRUE;
+ outstanding_eol(eol_ce);
return;
} else if (found_title_start) {
- strcat(title.text, " ");
- str_translate_to_html(t->text_style.f, buf, MAX_STRING_LENGTH, t->text_string, t->text_length, TRUE);
- strcat(title.text, buf);
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- removed_from_head = ((!page_contents->glyphs.is_empty()) &&
- (page_contents->glyphs.is_equal_to_head()));
+ title.text += " " + string(t->text_string, t->text_length);
+ page_contents->glyphs.sub_move_right(); /* move onto next word */
+ removed_from_head = ((!page_contents->glyphs.is_empty()) &&
+ (page_contents->glyphs.is_equal_to_head()));
} else {
- str_translate_to_html(t->text_style.f, buf, MAX_STRING_LENGTH, t->text_string, t->text_length, TRUE);
- strcpy((char *)title.text, buf);
+ title.text += string(t->text_string, t->text_length);
found_title_start = TRUE;
title.has_been_found = TRUE;
page_contents->glyphs.sub_move_right(); /* move onto next word */
@@ -1338,20 +1841,19 @@ void html_printer::do_title (void)
}
} while ((! page_contents->glyphs.is_equal_to_head()) || (removed_from_head));
}
- // page_contents->glyphs.move_left(); /* move backwards to last word */
+ outstanding_eol(eol_ce);
}
}
void html_printer::write_header (void)
{
- if (strlen(header.header_buffer) > 0) {
+ if (! header.header_buffer.empty()) {
if (header.header_level > 7) {
header.header_level = 7;
}
// firstly we must terminate any font and type faces
current_paragraph->done_para();
- current_paragraph->done_table();
supress_sub_sup = TRUE;
if (cutoff_heading+2 > header.header_level) {
@@ -1359,12 +1861,13 @@ void html_printer::write_header (void)
header.no_of_headings++;
style 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, FALSE, FALSE, FALSE);
+ text_glob *h=new text_glob();
+ h->text_glob_html(&st,
+ header.headings.add_string(header.header_buffer),
+ header.header_buffer.length(),
+ header.no_of_headings, header.header_level,
+ header.no_of_headings, header.header_level);
+
header.headers.add(h,
header.no_of_headings,
header.no_of_headings, header.no_of_headings,
@@ -1374,26 +1877,45 @@ void html_printer::write_header (void)
html.nl().put_string("<a name=\"");
if (simple_anchors) {
- char buffer[MAX_LINE_LENGTH];
+ string buffer(ANCHOR_TEMPLATE);
- sprintf(buffer, ANCHOR_TEMPLATE, header.no_of_headings);
- html.put_string(buffer);
+ buffer += as_string(header.no_of_headings);
+ buffer += '\0';
+ html.put_string(buffer.contents());
} else {
html.put_string(header.header_buffer);
}
html.put_string("\"></a>").nl();
}
- // and now we issue the real header
- html.put_string("<h");
- html.put_number(header.header_level);
- html.put_string(">");
- html.put_string(header.header_buffer);
- html.put_string("</h");
- html.put_number(header.header_level);
- html.put_string(">").nl();
+ if (manufacture_headings) {
+ // line break before a header
+ if (!current_paragraph->emitted_text())
+ current_paragraph->do_space();
+ // user wants manufactured headings which look better than <Hn></Hn>
+ if (header.header_level<4) {
+ html.put_string("<b><font size=\"+1\">");
+ html.put_string(header.header_buffer);
+ html.put_string("</font></b>").nl();
+ }
+ else {
+ html.put_string("<b>");
+ html.put_string(header.header_buffer);
+ html.put_string("</b>").nl();
+ }
+ }
+ else {
+ // and now we issue the real header
+ html.put_string("<h");
+ html.put_number(header.header_level);
+ html.put_string(">");
+ html.put_string(header.header_buffer);
+ html.put_string("</h");
+ html.put_number(header.header_level);
+ html.put_string(">").nl();
+ }
- current_paragraph->do_para("");
+ current_paragraph->do_para(&html, "", indentation, pageoffset, linelength);
}
}
@@ -1401,9 +1923,10 @@ void html_printer::determine_header_level (int level)
{
if (level == 0) {
int i;
- int l=strlen(header.header_buffer);
- for (i=0; ((i<l) && ((header.header_buffer[i] == '.') || is_digit(header.header_buffer[i]))) ; i++) {
+ for (i=0; ((i<header.header_buffer.length())
+ && ((header.header_buffer[i] == '.')
+ || is_digit(header.header_buffer[i]))) ; i++) {
if (header.header_buffer[i] == '.') {
level++;
}
@@ -1420,35 +1943,33 @@ void html_printer::do_heading (char *arg)
{
text_glob *g;
text_glob *l = 0;
- char buf[MAX_STRING_LENGTH];
int level=atoi(arg);
- strcpy(header.header_buffer, "");
+ header.header_buffer.clear();
page_contents->glyphs.move_right();
if (! page_contents->glyphs.is_equal_to_head()) {
g = page_contents->glyphs.get_data();
do {
if (g->is_auto_img()) {
- char *img=generate_img_src((char *)(g->text_string + 20));
+ string img=generate_img_src((char *)(g->text_string + 20));
- if (img) {
+ if (! img.empty()) {
simple_anchors = TRUE; // we cannot use full heading anchors with images
- if (l != 0) {
- strcat(header.header_buffer, " ");
- }
+ if (l != 0)
+ header.header_buffer += " ";
+
l = g;
- strcat(header.header_buffer, img);
+ header.header_buffer += img;
}
- } else if (! (g->is_a_line() || g->is_a_tag() || g->is_raw())) {
+ } else if (! (g->is_a_line() || g->is_a_tag())) {
/*
- * we ignore raw commands when constructing a heading
+ * we ignore tags commands when constructing a heading
*/
- if (l != 0) {
- strcat(header.header_buffer, " ");
- }
+ if (l != 0)
+ header.header_buffer += " ";
l = g;
- 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);
+
+ header.header_buffer += string(g->text_string, g->text_length);
}
page_contents->glyphs.move_right();
g = page_contents->glyphs.get_data();
@@ -1478,22 +1999,20 @@ int html_printer::is_courier_until_eol (void)
page_contents->glyphs.move_right();
do {
g = page_contents->glyphs.get_data();
- if (! is_font_courier(g->text_style.f)) {
+ if (! g->is_a_tag() && (! is_font_courier(g->text_style.f)))
result = FALSE;
- }
page_contents->glyphs.move_right();
- } while ((result) &&
+ } while (result &&
(! page_contents->glyphs.is_equal_to_head()) &&
- (! g->is_eol()));
+ (! g->is_fi()) && (! g->is_eol()));
/*
* now restore our previous position.
*/
- while (page_contents->glyphs.get_data() != orig) {
+ while (page_contents->glyphs.get_data() != orig)
page_contents->glyphs.move_left();
- }
}
- return( result );
+ return result;
}
/*
@@ -1502,12 +2021,11 @@ int html_printer::is_courier_until_eol (void)
void html_printer::do_linelength (char *arg)
{
-#if defined(INDENTATION)
- if (fill_on) {
- linelength = atoi(arg);
- current_paragraph->do_indent(indent.text, indentation, pageoffset, linelength);
- }
-#endif
+ if (max_linelength == -1)
+ max_linelength = atoi(arg);
+
+ if (fill_on)
+ do_indent(indentation, pageoffset, atoi(arg));
}
/*
@@ -1516,12 +2034,8 @@ void html_printer::do_linelength (char *arg)
void html_printer::do_pageoffset (char *arg)
{
-#if defined(INDENTATION)
- pageoffset = atoi(arg);
- if (fill_on) {
- current_paragraph->do_indent(indent.text, indentation, pageoffset, linelength);
- }
-#endif
+ if (fill_on)
+ do_indent(indentation, atoi(arg), linelength);
}
/*
@@ -1530,12 +2044,8 @@ void html_printer::do_pageoffset (char *arg)
void html_printer::do_indentation (char *arg)
{
-#if defined(INDENTATION)
- if (fill_on) {
- indentation = atoi(arg);
- current_paragraph->do_indent(indent.text, indentation, pageoffset, linelength);
- }
-#endif
+ if (fill_on)
+ do_indent(atoi(arg), pageoffset, linelength);
}
/*
@@ -1544,81 +2054,47 @@ void html_printer::do_indentation (char *arg)
void html_printer::do_tempindent (char *arg)
{
-#if defined(INDENTATION)
if (fill_on) {
end_tempindent = 1;
prev_indent = indentation;
- indentation = atoi(arg);
- current_paragraph->do_indent(indent.text, indentation, pageoffset, linelength);
+ do_indent(atoi(arg), pageoffset, linelength);
}
-#endif
}
/*
- * do_indentedparagraph - handle the .ip tag, this buffers the next line
- * and passes this to text-text as the left hand
- * column table entry.
+ * shutdown_table - shuts down the current table.
*/
-void html_printer::do_indentedparagraph (void)
+void html_printer::shutdown_table (void)
{
-#if defined(INDENTATION)
- text_glob *t;
- int removed_from_head;
- char buf[MAX_STRING_LENGTH];
- int found_indent_start = FALSE;
+ if (table != NULL) {
+ current_paragraph->done_para();
+ table->emit_finish_table();
+ // dont delete this table as it will be deleted when we destroy the text_glob
+ table = NULL;
+ }
+}
- indent.has_been_found = FALSE;
- indent.text[0] = (char)0;
+/*
+ * do_indent - remember the indent parameters and if
+ * indent is > pageoff and indent has changed
+ * then we start a html table to implement the indentation.
+ */
- if (! page_contents->glyphs.is_empty()) {
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- do {
- t = page_contents->glyphs.get_data();
- removed_from_head = FALSE;
- if (t->is_auto_img()) {
- char *img=generate_img_src((char *)(t->text_string + 20));
-
- if (img) {
- if (found_indent_start) {
- strcat(indent.text, " ");
- }
- found_indent_start = TRUE;
- strcat(indent.text, img);
- }
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- } else if (t->is_raw_command) {
- /* skip raw commands
- */
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- } else if (t->is_a_tag() && (strncmp(t->text_string, "html-tag:.br", 12) == 0)) {
- /* end of indented para found, but move back so that we read this tag and process it
- */
- page_contents->glyphs.move_left(); /* move backwards to last word */
- indent.has_been_found = TRUE;
- return;
- } else if (t->is_a_tag()) {
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- } else if (found_indent_start) {
- strcat(indent.text, " ");
- str_translate_to_html(t->text_style.f, buf, MAX_STRING_LENGTH, t->text_string, t->text_length, TRUE);
- strcat(indent.text, buf);
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- removed_from_head = ((!page_contents->glyphs.is_empty()) &&
- (page_contents->glyphs.is_equal_to_head()));
- } else {
- str_translate_to_html(t->text_style.f, buf, MAX_STRING_LENGTH, t->text_string, t->text_length, TRUE);
- strcpy((char *)indent.text, buf);
- found_indent_start = TRUE;
- indent.has_been_found = TRUE;
- page_contents->glyphs.sub_move_right(); /* move onto next word */
- removed_from_head = ((!page_contents->glyphs.is_empty()) &&
- (page_contents->glyphs.is_equal_to_head()));
- }
- } while ((! page_contents->glyphs.is_equal_to_head()) || (removed_from_head));
+void html_printer::do_indent (int in, int pageoff, int linelen)
+{
+ if ((indentation != -1) &&
+ (pageoffset+indentation != in+pageoff)) {
+
+ current_paragraph->done_para();
+
+ indentation = in;
+ pageoffset = pageoff;
+ if (linelen <= max_linelength)
+ linelength = linelen;
+
+ current_paragraph->do_para(&html, "", indentation, pageoffset, max_linelength);
}
- // page_contents->glyphs.move_left(); /* move backwards to last word */
-#endif
}
/*
@@ -1650,13 +2126,12 @@ void html_printer::do_fill (int on)
supress_sub_sup = TRUE;
if (fill_on != on) {
- if (on) {
- current_paragraph->done_pre();
- } else {
+ if (on)
+ current_paragraph->do_para("");
+ else
current_paragraph->do_pre();
- }
+ fill_on = on;
}
- fill_on = on;
}
/*
@@ -1666,14 +2141,25 @@ void html_printer::do_fill (int on)
void html_printer::do_eol (void)
{
if (! fill_on) {
- current_paragraph->do_newline();
- current_paragraph->do_break();
+ if (current_paragraph->ever_emitted_text()) {
+ current_paragraph->do_newline();
+ current_paragraph->do_break();
+ }
}
output_hpos = indentation+pageoffset;
+}
+
+/*
+ * do_eol_ce - handle end of line specifically for a .ce
+ */
+
+void html_printer::do_eol_ce (void)
+{
if (end_center > 0) {
- if (end_center > 1) {
- current_paragraph->do_break();
- }
+ if (end_center > 1)
+ if (current_paragraph->emitted_text())
+ current_paragraph->do_break();
+
end_center--;
if (end_center == 0) {
current_paragraph->done_para();
@@ -1689,7 +2175,6 @@ void html_printer::do_eol (void)
void html_printer::do_flush (void)
{
current_paragraph->done_para();
- current_paragraph->done_table();
}
/*
@@ -1699,12 +2184,9 @@ void html_printer::do_flush (void)
void html_printer::do_links (void)
{
current_paragraph->done_para();
- current_paragraph->done_table();
auto_links = FALSE; /* from now on only emit under user request */
-#if !defined(DEBUGGING)
file_list.add_new_file(xtmpfile());
html.set_file(file_list.get_file());
-#endif
}
/*
@@ -1715,20 +2197,106 @@ void html_printer::do_links (void)
void html_printer::do_break (void)
{
current_paragraph->do_break();
-#if defined(INDENTATION)
if (end_tempindent > 0) {
end_tempindent--;
- if (end_tempindent == 0) {
- indentation = prev_indent;
- current_paragraph->do_indent(indent.text, indentation, pageoffset, linelength);
- }
+ if (end_tempindent == 0)
+ do_indent(prev_indent, pageoffset, linelength);
}
-#endif
output_hpos = indentation+pageoffset;
supress_sub_sup = TRUE;
}
/*
+ * do_tab_ts - start a table, which will have already been defined.
+ */
+
+void html_printer::do_tab_ts (text_glob *g)
+{
+ html_table *t = g->get_table();
+
+ if (t != NULL) {
+ current_paragraph->done_pre();
+ current_paragraph->done_para();
+
+ html.simple_comment("TABS");
+
+ t->set_linelength(max_linelength);
+ t->add_indent(pageoffset);
+ t->emit_table_header(FALSE);
+ }
+
+ table = t;
+}
+
+/*
+ * do_tab_te - finish a table.
+ */
+
+void html_printer::do_tab_te (void)
+{
+ if (table) {
+ current_paragraph->done_para();
+ table->emit_finish_table();
+ }
+
+ table = NULL;
+
+ if (indentation > 0) {
+ /*
+ * restore indentation
+ */
+ int newin = indentation;
+ indentation = 0;
+ do_indent(newin, pageoffset, linelength);
+ }
+}
+
+/*
+ * do_tab - handle the "html-tag:tab" tag
+ */
+
+void html_printer::do_tab (char *s)
+{
+ if (table) {
+ while (isspace(*s))
+ s++;
+ s++;
+ int col = table->find_column(atoi(s) + pageoffset + indentation);
+ if (col > 0) {
+ current_paragraph->done_para();
+ table->emit_col(col);
+ }
+ }
+}
+
+/*
+ * do_tab0 - handle the "html-tag:tab0" tag
+ */
+
+void html_printer::do_tab0 (void)
+{
+ if (table) {
+ int col = table->find_column(pageoffset+indentation);
+ if (col > 0) {
+ current_paragraph->done_para();
+ table->emit_col(col);
+ }
+ }
+}
+
+/*
+ * do_col - start column, s.
+ */
+
+void html_printer::do_col (char *s)
+{
+ if (table) {
+ current_paragraph->done_para();
+ table->emit_col(atoi(s));
+ }
+}
+
+/*
* troff_tag - processes the troff tag and manipulates the troff state machine.
*/
@@ -1741,8 +2309,13 @@ void html_printer::troff_tag (text_glob *g)
if (g->is_eol()) {
do_eol();
+ } else if (g->is_eol_ce()) {
+ do_eol_ce();
} else if (strncmp(t, ".sp", 3) == 0) {
- current_paragraph->do_space();
+ if (g->get_arg() > 0)
+ current_paragraph->do_space();
+ else
+ current_paragraph->do_break();
supress_sub_sup = TRUE;
} else if (strncmp(t, ".br", 3) == 0) {
do_break();
@@ -1761,6 +2334,11 @@ void html_printer::troff_tag (text_glob *g)
do_center(a);
} else if (strncmp(t, ".tl", 3) == 0) {
supress_sub_sup = TRUE;
+ title.with_h1 = TRUE;
+ do_title();
+ } else if (strncmp(t, ".html-tl", 8) == 0) {
+ supress_sub_sup = TRUE;
+ title.with_h1 = FALSE;
do_title();
} else if (strncmp(t, ".fi", 3) == 0) {
do_fill(TRUE);
@@ -1784,10 +2362,25 @@ void html_printer::troff_tag (text_glob *g)
} else if (strncmp(t, ".vs", 3) == 0) {
char *a = (char *)t+3;
do_verticalspacing(a);
- } else if (strncmp(t, ".ip", 3) == 0) {
- do_indentedparagraph();
+ } else if (strncmp(t, ".ps", 3) == 0) {
+ char *a = (char *)t+3;
+ do_pointsize(a);
} else if (strcmp(t, ".links") == 0) {
do_links();
+ } else if (strcmp(t, ".no-auto-rule") == 0) {
+ auto_rule = FALSE;
+ } else if (strcmp(t, ".tab-ts") == 0) {
+ do_tab_ts(g);
+ } else if (strcmp(t, ".tab-te") == 0) {
+ do_tab_te();
+ } else if (strncmp(t, ".col ", 5) == 0) {
+ char *a = (char *)t+4;
+ do_col(a);
+ } else if (strncmp(t, "tab ", 4) == 0) {
+ char *a = (char *)t+3;
+ do_tab(a);
+ } else if (strncmp(t, "tab0", 4) == 0) {
+ do_tab0();
}
}
@@ -1813,18 +2406,15 @@ void html_printer::flush_globs (void)
do {
g = page_contents->glyphs.get_data();
- if (strcmp(g->text_string, "XXXXXXX") == 0) {
+ if (strcmp(g->text_string, "XXXXXXX") == 0)
stop();
- }
- if (g->is_raw()) {
- emit_raw(g);
- } else if (g->is_a_tag()) {
+ if (g->is_a_tag()) {
troff_tag(g);
} else if (g->is_a_line()) {
emit_line(g);
} else {
- translate_to_html(g);
+ emit_html(g);
}
/*
* after processing the title (and removing it) the glyph list might be empty
@@ -1836,29 +2426,474 @@ void html_printer::flush_globs (void)
}
}
+/*
+ * calc_nf - calculates the _no_ format flag, given the
+ * text glob, g.
+ */
+
+int html_printer::calc_nf (text_glob *g, int nf)
+{
+ if (g != NULL) {
+ if (g->is_fi())
+ return FALSE;
+ if (g->is_nf())
+ return TRUE;
+ }
+ return nf;
+}
+
+/*
+ * calc_po_in - calculates the, in, po, registers
+ */
+
+void html_printer::calc_po_in (text_glob *g, int nf)
+{
+ if (g->is_in())
+ indentation = g->get_arg();
+ else if (g->is_po())
+ pageoffset = g->get_arg();
+ else if (g->is_ti()) {
+ prev_indent = indentation;
+ indentation = g->get_arg();
+ end_tempindent = 1;
+ } else if (g->is_br() && ((end_tempindent > 0) || (nf && g->is_eol()))) {
+ end_tempindent = 0;
+ indentation = prev_indent;
+ }
+}
+
+/*
+ * next_horiz_pos - returns the next horiz position.
+ * -1 is returned if it doesn't exist.
+ */
+
+int html_printer::next_horiz_pos (text_glob *g, int nf)
+{
+ int next = -1;
+
+ if ((g != NULL) && (g->is_br() || (nf && g->is_eol())))
+ if (! page_contents->glyphs.is_empty()) {
+ page_contents->glyphs.move_right_get_data();
+ if (g == NULL)
+ page_contents->glyphs.start_from_head();
+ else {
+ next = g->minh;
+ page_contents->glyphs.move_left();
+ }
+ }
+ return next;
+}
+
+/*
+ * insert_tab_ts - inserts a tab-ts before, where.
+ */
+
+text_glob *html_printer::insert_tab_ts (text_glob *where)
+{
+ text_glob *start_of_table;
+ text_glob *old_pos = page_contents->glyphs.get_data();
+
+ page_contents->glyphs.move_to(where);
+ page_contents->glyphs.move_left();
+ page_contents->insert_tag(string("html-tag:.tab-ts")); // tab table start
+ page_contents->glyphs.move_right();
+ start_of_table = page_contents->glyphs.get_data();
+ page_contents->glyphs.move_to(old_pos);
+ return start_of_table;
+}
+
+/*
+ * insert_tab_te - inserts a tab-te before the current position
+ * (it skips backwards over .sp/.br)
+ */
+
+void html_printer::insert_tab_te (void)
+{
+ text_glob *g = page_contents->glyphs.get_data();
+ page_contents->dump_page();
+
+ while (page_contents->glyphs.get_data()->is_a_tag())
+ page_contents->glyphs.move_left();
+
+ page_contents->insert_tag(string("html-tag:.tab-te")); // tab table end
+ while (g != page_contents->glyphs.get_data())
+ page_contents->glyphs.move_right();
+ page_contents->dump_page();
+}
+
+/*
+ * insert_tab_0 - inserts a tab0 before, where.
+ */
+
+void html_printer::insert_tab_0 (text_glob *where)
+{
+ text_glob *old_pos = page_contents->glyphs.get_data();
+
+ page_contents->glyphs.move_to(where);
+ page_contents->glyphs.move_left();
+ page_contents->insert_tag(string("html-tag:tab0")); // tab0 start of line
+ page_contents->glyphs.move_right();
+ page_contents->glyphs.move_to(old_pos);
+}
+
+/*
+ * remove_tabs - removes the tabs tags on this line.
+ */
+
+void html_printer::remove_tabs (void)
+{
+ text_glob *orig = page_contents->glyphs.get_data();
+ text_glob *g;
+
+ if (! page_contents->glyphs.is_equal_to_tail()) {
+ do {
+ g = page_contents->glyphs.get_data();
+ if (g->is_tab()) {
+ page_contents->glyphs.sub_move_right();
+ if (g == orig)
+ orig = page_contents->glyphs.get_data();
+ } else
+ page_contents->glyphs.move_right();
+ } while ((! page_contents->glyphs.is_equal_to_head()) &&
+ (! g->is_eol()));
+
+ /*
+ * now restore our previous position.
+ */
+ while (page_contents->glyphs.get_data() != orig)
+ page_contents->glyphs.move_left();
+ }
+}
+
+void html_printer::remove_courier_tabs (void)
+{
+ text_glob *g;
+ int line_start = TRUE;
+ int nf = FALSE;
+
+ if (! page_contents->glyphs.is_empty()) {
+ page_contents->glyphs.start_from_head();
+ line_start = TRUE;
+ do {
+ g = page_contents->glyphs.get_data();
+
+ nf = calc_nf(g, nf);
+
+ if (line_start) {
+ if (line_start && nf && is_courier_until_eol()) {
+ remove_tabs();
+ g = page_contents->glyphs.get_data();
+ }
+ }
+
+ line_start = g->is_br() || g->is_nf() || g->is_fi() || (nf && g->is_eol());
+ page_contents->glyphs.move_right();
+ } while (! page_contents->glyphs.is_equal_to_head());
+ }
+}
+
+void html_printer::insert_tab0_foreach_tab (void)
+{
+ text_glob *start_of_line = NULL;
+ text_glob *g = NULL;
+ int seen_tab = FALSE;
+ int seen_col = FALSE;
+ int nf = FALSE;
+
+ if (! page_contents->glyphs.is_empty()) {
+ page_contents->glyphs.start_from_head();
+ start_of_line = page_contents->glyphs.get_data();
+ do {
+ g = page_contents->glyphs.get_data();
+
+ nf = calc_nf(g, nf);
+
+ if (g->is_tab())
+ seen_tab = TRUE;
+
+ if (g->is_col())
+ seen_col = TRUE;
+
+ if (g->is_br() || (nf && g->is_eol())) {
+ do {
+ page_contents->glyphs.move_right();
+ g = page_contents->glyphs.get_data();
+ nf = calc_nf(g, nf);
+ if (page_contents->glyphs.is_equal_to_head()) {
+ if (seen_tab && !seen_col)
+ insert_tab_0(start_of_line);
+ return;
+ }
+ } while (g->is_br() || (nf && g->is_eol()) || g->is_ta());
+ // printf("\nstart_of_line is: %s\n", g->text_string);
+ if (seen_tab && !seen_col) {
+ insert_tab_0(start_of_line);
+ page_contents->glyphs.move_to(g);
+ }
+
+ seen_tab = FALSE;
+ seen_col = FALSE;
+ start_of_line = g;
+ }
+ page_contents->glyphs.move_right();
+ } while (! page_contents->glyphs.is_equal_to_head());
+ if (seen_tab && !seen_col)
+ insert_tab_0(start_of_line);
+
+ }
+}
+
+/*
+ * update_min_max - updates the extent of a column, given the left and right
+ * extents of a glyph, g.
+ */
+
+void html_printer::update_min_max (colType type_of_col, int *minimum, int *maximum, text_glob *g)
+{
+ switch (type_of_col) {
+
+ case tab_tag:
+ break;
+ case tab0_tag:
+ *minimum = g->minh;
+ break;
+ case col_tag:
+ *minimum = g->minh;
+ *maximum = g->maxh;
+ break;
+ default:
+ break;
+ }
+}
+
+/*
+ * add_table_end - moves left one glyph, adds a table end tag and adds a
+ * debugging string.
+ */
+
+void html_printer::add_table_end (char *debug_string)
+{
+ page_contents->glyphs.move_left();
+ insert_tab_te();
+#if defined(DEBUG_TABLES)
+ page_contents->insert_tag(string(debug_string));
+#endif
+}
+
+/*
+ * lookahead_for_tables - checks for .col tags and inserts table start/end tags
+ */
+
+void html_printer::lookahead_for_tables (void)
+{
+ text_glob *g;
+ text_glob *start_of_line = NULL;
+ text_glob *start_of_table = NULL;
+ text_glob *last = NULL;
+ colType type_of_col = none;
+ int left = 0;
+ int found_col = FALSE;
+ int seen_text = FALSE;
+ int ncol = 0;
+ int colmin;
+ int colmax;
+ html_table *table = new html_table(&html, -1);
+ const char *tab_defs = NULL;
+ char align = 'L';
+ int nf = FALSE;
+ int old_pageoffset = pageoffset;
+
+ remove_courier_tabs();
+ page_contents->dump_page();
+ insert_tab0_foreach_tab();
+ page_contents->dump_page();
+ if (! page_contents->glyphs.is_empty()) {
+ page_contents->glyphs.start_from_head();
+ g = page_contents->glyphs.get_data();
+ do {
+#if defined(DEBUG_TABLES)
+ fprintf(stderr, " [") ;
+ fprintf(stderr, g->text_string) ;
+ fprintf(stderr, "] ") ;
+ fflush(stderr);
+ if (strcmp(g->text_string, "XXXXXXX") == 0)
+ stop();
+#endif
+
+ nf = calc_nf(g, nf);
+ calc_po_in(g, nf);
+ if (g->is_col()) {
+ if (type_of_col == tab_tag && start_of_table != NULL) {
+ page_contents->glyphs.move_left();
+ insert_tab_te();
+ start_of_table->remember_table(table);
+ table = new html_table(&html, -1);
+ page_contents->insert_tag(string("*** TAB -> COL ***"));
+ if (tab_defs != NULL)
+ table->tab_stops->init(tab_defs);
+ start_of_table = NULL;
+ last = NULL;
+ }
+ type_of_col = col_tag;
+ found_col = TRUE;
+ ncol = g->get_arg();
+ align = 'L';
+ colmin = 0;
+ colmax = 0;
+ } else if (g->is_tab()) {
+ type_of_col = tab_tag;
+ colmin = g->get_tab_args(&align);
+ align = 'L'; // for now as 'C' and 'R' are broken
+ ncol = table->find_tab_column(colmin);
+ colmin += pageoffset + indentation;
+ colmax = table->get_tab_pos(ncol+1);
+ if (colmax > 0)
+ colmax += pageoffset + indentation;
+ } else if (g->is_tab0()) {
+ if (type_of_col == col_tag && start_of_table != NULL) {
+ page_contents->glyphs.move_left();
+ insert_tab_te();
+ start_of_table->remember_table(table);
+ table = new html_table(&html, -1);
+ page_contents->insert_tag(string("*** COL -> TAB ***"));
+ start_of_table = NULL;
+ last = NULL;
+ }
+ if (tab_defs != NULL)
+ table->tab_stops->init(tab_defs);
+
+ type_of_col = tab0_tag;
+ ncol = 1;
+ colmin = 0;
+ colmax = table->get_tab_pos(2) + pageoffset + indentation;
+ } else if (! g->is_a_tag())
+ update_min_max(type_of_col, &colmin, &colmax, g);
+
+ if ((! g->is_a_tag()) || g->is_tab())
+ seen_text = TRUE;
+
+ if ((g->is_col() || g->is_tab() || g->is_tab0())
+ && (start_of_line != NULL) && (start_of_table == NULL)) {
+ start_of_table = insert_tab_ts(start_of_line);
+ start_of_line = NULL;
+ seen_text = FALSE;
+ } else if (g->is_ce() && (start_of_table != NULL)) {
+ add_table_end("*** CE ***");
+ start_of_table->remember_table(table);
+ start_of_table = NULL;
+ last = NULL;
+ } else if (g->is_ta()) {
+ tab_defs = g->text_string;
+ if (!table->tab_stops->compatible(tab_defs)) {
+ if (start_of_table != NULL) {
+ add_table_end("*** TABS ***");
+ start_of_table->remember_table(table);
+ table = new html_table(&html, -1);
+ start_of_table = NULL;
+ type_of_col = none;
+ last = NULL;
+ }
+ table->tab_stops->init(tab_defs);
+ }
+ }
+
+ if (((! g->is_a_tag()) || g->is_tab()) && (start_of_table != NULL)) {
+ // we are in a table and have a glyph
+ if ((ncol == 0) || (! table->add_column(ncol, colmin, colmax, align))) {
+ if (ncol == 0)
+ add_table_end("*** NCOL == 0 ***");
+ else
+ add_table_end("*** CROSSED COLS ***");
+
+ start_of_table->remember_table(table);
+ table = new html_table(&html, -1);
+ start_of_table = NULL;
+ type_of_col = none;
+ last = NULL;
+ }
+ }
+
+ /*
+ * move onto next glob, check whether we are starting a new line
+ */
+ g = page_contents->glyphs.move_right_get_data();
+
+ if (g == NULL) {
+ if (found_col) {
+ page_contents->glyphs.start_from_head();
+ last = g;
+ found_col = FALSE;
+ }
+ } else if (g->is_br() || (nf && g->is_eol())) {
+ do {
+ g = page_contents->glyphs.move_right_get_data();
+ nf = calc_nf(g, nf);
+ } while ((g != NULL) && (g->is_br() || (nf && g->is_eol())));
+ start_of_line = g;
+ seen_text = FALSE;
+ ncol = 0;
+ left = next_horiz_pos(g, nf);
+ if (found_col)
+ last = g;
+ found_col = FALSE;
+ }
+ } while ((g != NULL) && (! page_contents->glyphs.is_equal_to_head()));
+
+#if defined(DEBUG_TABLES)
+ fprintf(stderr, "finished scanning for tables\n");
+#endif
+
+ page_contents->glyphs.start_from_head();
+ if (start_of_table != NULL) {
+ if (last != NULL)
+ while (last != page_contents->glyphs.get_data())
+ page_contents->glyphs.move_left();
+
+ insert_tab_te();
+ start_of_table->remember_table(table);
+ table = NULL;
+ page_contents->insert_tag(string("*** LAST ***"));
+ }
+ }
+ if (table != NULL)
+ delete table;
+
+ // and reset the registers
+ pageoffset = old_pageoffset;
+ indentation = 0;
+ prev_indent = 0;
+ end_tempindent = 0;
+}
+
void html_printer::flush_page (void)
{
supress_sub_sup = TRUE;
flush_sbuf();
- // page_contents->dump_page();
+ page_contents->dump_page();
+ lookahead_for_tables();
+ page_contents->dump_page();
+
flush_globs();
current_paragraph->done_para();
- current_paragraph->done_table();
// move onto a new page
delete page_contents;
+#if defined(DEBUG_TABLES)
+ fprintf(stderr, "\n\n*** flushed page ***\n\n");
+
+ html.simple_comment("new page called");
+#endif
page_contents = new page;
}
/*
* determine_space - works out whether we need to write a space.
- * If last glyth is ajoining then no space emitted.
+ * If last glyph is ajoining then no space emitted.
*/
void html_printer::determine_space (text_glob *g)
{
if (current_paragraph->is_in_pre()) {
- int space_width = sbuf_style.f->get_space_width(sbuf_style.point_size);
/*
* .nf has been specified
*/
@@ -1902,7 +2937,16 @@ void html_printer::end_font (const char *fontname)
current_paragraph->done_italic();
} else if (strcmp(fontname, "CR") == 0) {
current_paragraph->done_tt();
- current_paragraph->done_pre();
+ } else if (strcmp(fontname, "CI") == 0) {
+ current_paragraph->done_italic();
+ current_paragraph->done_tt();
+ } else if (strcmp(fontname, "CB") == 0) {
+ current_paragraph->done_bold();
+ current_paragraph->done_tt();
+ } else if (strcmp(fontname, "CBI") == 0) {
+ current_paragraph->done_bold();
+ current_paragraph->done_italic();
+ current_paragraph->done_tt();
}
}
@@ -1928,6 +2972,25 @@ void html_printer::start_font (const char *fontname)
current_paragraph->do_pre();
}
current_paragraph->do_tt();
+ } else if (strcmp(fontname, "CI") == 0) {
+ if ((! fill_on) && (is_courier_until_eol())) {
+ current_paragraph->do_pre();
+ }
+ current_paragraph->do_tt();
+ current_paragraph->do_italic();
+ } else if (strcmp(fontname, "CB") == 0) {
+ if ((! fill_on) && (is_courier_until_eol())) {
+ current_paragraph->do_pre();
+ }
+ current_paragraph->do_tt();
+ current_paragraph->do_bold();
+ } else if (strcmp(fontname, "CBI") == 0) {
+ if ((! fill_on) && (is_courier_until_eol())) {
+ current_paragraph->do_pre();
+ }
+ current_paragraph->do_tt();
+ current_paragraph->do_italic();
+ current_paragraph->do_bold();
}
}
@@ -1986,6 +3049,11 @@ void html_printer::do_font (text_glob *g)
output_style.point_size = g->text_style.point_size;
}
}
+ if (output_style.col != g->text_style.col) {
+ current_paragraph->done_color();
+ output_style.col = g->text_style.col;
+ current_paragraph->do_color(&output_style.col);
+ }
}
/*
@@ -2070,18 +3138,14 @@ void html_printer::do_sup_or_sub (text_glob *g)
}
/*
- * translate_to_html - translates a textual string into html text
+ * emit_html - write out the html text
*/
-void html_printer::translate_to_html (text_glob *g)
+void html_printer::emit_html (text_glob *g)
{
- char buf[MAX_STRING_LENGTH];
-
do_font(g);
determine_space(g);
- str_translate_to_html(g->text_style.f, buf, MAX_STRING_LENGTH,
- g->text_string, g->text_length, TRUE);
- current_paragraph->do_emittext(buf, strlen(buf));
+ current_paragraph->do_emittext(g->text_string, g->text_length);
output_vpos = g->minv;
output_hpos = g->maxh;
output_vpos_max = g->maxv;
@@ -2094,18 +3158,26 @@ void html_printer::translate_to_html (text_glob *g)
void html_printer::flush_sbuf()
{
- if (sbuf_len > 0) {
+ if (sbuf.length() > 0) {
int r=font::res; // resolution of the device
set_style(sbuf_style);
+ if (overstrike_detected && (! is_bold(sbuf_style.f))) {
+ font *bold_font = make_bold(sbuf_style.f);
+ if (bold_font != NULL)
+ sbuf_style.f = bold_font;
+ }
- page_contents->add(&sbuf_style, sbuf, sbuf_len,
+ page_contents->add(&sbuf_style, sbuf,
line_number,
sbuf_vpos-sbuf_style.point_size*r/72, sbuf_start_hpos,
sbuf_vpos , sbuf_end_hpos);
output_hpos = sbuf_end_hpos;
output_vpos = sbuf_vpos;
- sbuf_len = 0;
+ last_sbuf_length = 0;
+ sbuf_prev_hpos = sbuf_end_hpos;
+ overstrike_detected = FALSE;
+ sbuf.clear();
}
}
@@ -2119,6 +3191,7 @@ void html_printer::draw(int code, int *p, int np, const environment *env)
switch (code) {
case 'l':
+# if 0
if (np == 2) {
page_contents->add_line(&sbuf_style,
line_number,
@@ -2126,6 +3199,7 @@ void html_printer::draw(int code, int *p, int np, const environment *env)
} else {
error("2 arguments required for line");
}
+# endif
break;
case 't':
{
@@ -2143,125 +3217,30 @@ void html_printer::draw(int code, int *p, int np, const environment *env)
}
case 'P':
- // fall through
+ break;
case 'p':
- {
-#if 0
- if (np & 1) {
- error("even number of arguments required for polygon");
- break;
- }
- if (np == 0) {
- error("no arguments for polygon");
- break;
- }
- // firstly lets add our current position to polygon
- int oh=env->hpos;
- int ov=env->vpos;
- int i=0;
-
- while (i<np) {
- p[i+0] += oh;
- p[i+1] += ov;
- oh = p[i+0];
- ov = p[i+1];
- i += 2;
- }
- // now store polygon in page
- page_contents->add_polygon(code, np, p, env->hpos, env->vpos, env->size, fill);
-#endif
- }
break;
case 'E':
- // fall through
+ break;
case 'e':
-#if 0
- if (np != 2) {
- error("2 arguments required for ellipse");
- break;
- }
- page_contents->add_line(code,
- env->hpos, env->vpos-p[1]/2, env->hpos+p[0], env->vpos+p[1]/2,
- env->size, fill);
-#endif
break;
case 'C':
- // fill circle
-
+ break;
case 'c':
- {
-#if 0
- // troff adds an extra argument to C
- if (np != 1 && !(code == 'C' && np == 2)) {
- error("1 argument required for circle");
- break;
- }
- page_contents->add_line(code,
- env->hpos, env->vpos-p[0]/2, env->hpos+p[0], env->vpos+p[0]/2,
- env->size, fill);
-#endif
- }
break;
case 'a':
- {
-#if 0
- if (np == 4) {
- double c[2];
-
- if (adjust_arc_center(p, c)) {
- page_contents->add_arc('a', env->hpos, env->vpos, p, c, env->size, fill);
- } else {
- // a straignt line
- page_contents->add_line('l', env->hpos, env->vpos, p[0]+p[2], p[1]+p[3], env->size, fill);
- }
- } else {
- error("4 arguments required for arc");
- }
-#endif
- }
break;
case '~':
- {
-#if 0
- if (np & 1) {
- error("even number of arguments required for spline");
- break;
- }
- if (np == 0) {
- error("no arguments for spline");
- break;
- }
- // firstly lets add our current position to spline
- int oh=env->hpos;
- int ov=env->vpos;
- int i=0;
-
- while (i<np) {
- p[i+0] += oh;
- p[i+1] += ov;
- oh = p[i+0];
- ov = p[i+1];
- i += 2;
- }
- page_contents->add_spline('~', env->hpos, env->vpos, np, p, env->size, fill);
-#endif
- }
break;
case 'f':
- {
-#if 0
- if (np != 1 && np != 2) {
- error("1 argument required for fill");
- break;
- }
- fill = p[0];
- if (fill < 0 || fill > FILL_MAX) {
- // This means fill with the current color.
- fill = FILL_MAX + 1;
- }
-#endif
- break;
- }
+ break;
+ case 'F':
+ // fill with color env->fill
+ if (background != NULL)
+ delete background;
+ background = new color;
+ *background = *env->fill;
+ break;
default:
error("unrecognised drawing command `%1'", char(code));
@@ -2272,7 +3251,8 @@ void html_printer::draw(int code, int *p, int np, const environment *env)
html_printer::html_printer()
: html(0, MAX_LINE_LENGTH),
no_of_printed_pages(0),
- sbuf_len(0),
+ last_sbuf_length(0),
+ overstrike_detected(FALSE),
output_hpos(-1),
output_vpos(-1),
output_vpos_max(-1),
@@ -2282,21 +3262,22 @@ html_printer::html_printer()
header_indent(-1),
supress_sub_sup(TRUE),
cutoff_heading(100),
+ indent(NULL),
+ table(NULL),
end_center(0),
end_tempindent(0),
next_tag(INLINE),
fill_on(TRUE),
+ max_linelength(-1),
linelength(0),
pageoffset(0),
indentation(0),
prev_indent(0),
- line_number(0)
+ pointsize(0),
+ line_number(0),
+ background(default_background)
{
-#if defined(DEBUGGING)
- file_list.add_new_file(stdout);
-#else
file_list.add_new_file(xtmpfile());
-#endif
html.set_file(file_list.get_file());
if (font::hor != 24)
fatal("horizontal resolution must be 24");
@@ -2316,6 +3297,7 @@ html_printer::html_printer()
res = r;
html.set_fixed_point(point);
space_char_index = font::name_to_index("space");
+ space_width = font::hor;
paper_length = font::paperlength;
linelength = font::res*13/2;
if (paper_length == 0)
@@ -2325,174 +3307,65 @@ html_printer::html_printer()
}
/*
- * 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.
*/
-void html_printer::add_to_sbuf (unsigned char code, const char *name)
+void html_printer::add_to_sbuf (int index, const string &s)
{
- if (name == 0) {
- add_char_to_sbuf(code);
- } else {
- if (sbuf_style.f != NULL) {
- char *html_glyph = get_html_translation(sbuf_style.f, name);
+ if (sbuf_style.f == NULL)
+ return;
- if (html_glyph == NULL) {
- add_char_to_sbuf(code);
- } else {
- int l = strlen(html_glyph);
- int i;
+ char *html_glyph = NULL;
+ unsigned int code = sbuf_style.f->get_code(index);
- // Escape the name, so that "&" doesn't get expanded to "&amp;"
- // later during translate_to_html.
- add_char_to_sbuf('\\'); add_char_to_sbuf('(');
+ if (s.empty()) {
+ if (sbuf_style.f->contains(index))
+ html_glyph = (char *)sbuf_style.f->get_special_device_encoding(index);
+ else
+ html_glyph = NULL;
+
+ if ((html_glyph == NULL) && (code >= UNICODE_DESC_START))
+ html_glyph = to_unicode(code);
+ } else
+ html_glyph = get_html_translation(sbuf_style.f, s);
- for (i=0; i<l; i++) {
- add_char_to_sbuf(html_glyph[i]);
- }
- add_char_to_sbuf('\\'); add_char_to_sbuf(')');
- }
- }
- }
+ last_sbuf_length = sbuf.length();
+ if (html_glyph == NULL)
+ sbuf += ((char)code);
+ else
+ sbuf += html_glyph;
}
-int html_printer::sbuf_continuation (unsigned char code, const char *name,
+int html_printer::sbuf_continuation (int index, const char *name,
const environment *env, int w)
{
- if (sbuf_end_hpos == env->hpos) {
- add_to_sbuf(code, name);
+ /*
+ * lets see whether the glyph is closer to the end of sbuf
+ */
+ if ((sbuf_end_hpos == env->hpos)
+ || ((sbuf_prev_hpos < sbuf_end_hpos)
+ && (env->hpos < sbuf_end_hpos)
+ && ((sbuf_end_hpos-env->hpos < env->hpos-sbuf_prev_hpos)))) {
+ add_to_sbuf(index, name);
+ sbuf_prev_hpos = sbuf_end_hpos;
sbuf_end_hpos += w + sbuf_kern;
- return( TRUE );
+ return TRUE;
} else {
- if ((sbuf_len < SBUF_SIZE-1) && (env->hpos >= sbuf_end_hpos) &&
+ if ((env->hpos >= sbuf_end_hpos) &&
((sbuf_kern == 0) || (sbuf_end_hpos - sbuf_kern != env->hpos))) {
/*
* lets see whether a space is needed or not
*/
- int space_width = sbuf_style.f->get_space_width(sbuf_style.point_size);
- if (env->hpos-sbuf_end_hpos < space_width/2) {
- add_to_sbuf(code, name);
+ if (env->hpos-sbuf_end_hpos < space_width) {
+ add_to_sbuf(index, name);
+ sbuf_prev_hpos = sbuf_end_hpos;
sbuf_end_hpos = env->hpos + w;
- return( TRUE );
+ return TRUE;
}
}
}
- return( FALSE );
-}
-
-/*
- * seen_backwards_escape - returns TRUE if we can see a escape at position i..l in s
- */
-
-int html_printer::seen_backwards_escape (char *s, int l)
-{
- /*
- * this is tricky so it is broken into components for clarity
- * (we let the compiler put in all back into a complex expression)
- */
- if ((l>0) && (sbuf[l] == '(') && (sbuf[l-1] == '\\')) {
- /*
- * ok seen '\(' but we must now check for '\\('
- */
- if ((l>1) && (sbuf[l-2] == '\\')) {
- /*
- * escaped the escape
- */
- return( FALSE );
- } else {
- return( TRUE );
- }
- } else {
- return( FALSE );
- }
-}
-
-/*
- * reverse - return reversed string.
- */
-
-char *reverse (char *s)
-{
- int i=0;
- int j=strlen(s)-1;
- char t;
-
- while (i<j) {
- t = s[i];
- s[i] = s[j];
- s[j] = t;
- i++;
- j--;
- }
- return( s );
-}
-
-/*
- * remove_last_char_from_sbuf - removes the last character from sbuf.
- */
-
-char *html_printer::remove_last_char_from_sbuf ()
-{
- int l=sbuf_len;
- static char last[MAX_STRING_LENGTH];
-
- if (l>0) {
- l--;
- if ((sbuf[l] == ')') && (l>0) && (sbuf[l-1] == '\\')) {
- /*
- * found terminating escape
- */
- int i=0;
-
- l -= 2;
- while ((l>0) && (! seen_backwards_escape(sbuf, l))) {
- if (sbuf[l] == '\\') {
- if (sbuf[l-1] == '\\') {
- last[i] = sbuf[l];
- i++;
- l--;
- }
- } else {
- last[i] = sbuf[l];
- i++;
- }
- l--;
- }
- last[i] = (char)0;
- sbuf_len = l;
- if (seen_backwards_escape(sbuf, l)) {
- sbuf_len--;
- }
- return( reverse(last) );
- } else {
- if ((sbuf[l] == '\\') && (l>0) && (sbuf[l-1] == '\\')) {
- l -= 2;
- sbuf_len = l;
- return( "\\" );
- } else {
- sbuf_len--;
- last[0] = sbuf[sbuf_len];
- last[1] = (char)0;
- return( last );
- }
- }
- } else {
- return( NULL );
- }
+ return FALSE ;
}
/*
@@ -2500,149 +3373,57 @@ char *html_printer::remove_last_char_from_sbuf ()
* return the device encoding for such character.
*/
-char *get_html_translation (font *f, const char *name)
+char *get_html_translation (font *f, const string &name)
{
- int index;
+ int index;
- if ((f == 0) || (name == 0) || (strcmp(name, "") == 0)) {
- return( NULL );
- } else {
- index = f->name_to_index((char *)name);
+ if ((f == 0) || name.empty())
+ return NULL;
+ else {
+ index = f->name_to_index((char *)(name + '\0').contents());
if (index == 0) {
- error("character `%s' not found", name);
- return( NULL );
- } else {
- if (f->contains(index)) {
- return( (char *)f->get_special_device_encoding(index) );
- } else {
- return( NULL );
- }
- }
+ error("character `%s' not found", (name + '\0').contents());
+ return NULL;
+ } else
+ if (f->contains(index))
+ return (char *)f->get_special_device_encoding(index);
+ else
+ return NULL;
}
}
/*
- * to_unicode - returns a unicode translation of char, ch.
- */
-
-static char *to_unicode (unsigned char ch)
-{
- static char buf[20];
-
- sprintf(buf, "&#%u;", (unsigned int)ch);
- return( buf );
-}
-
-/*
- * char_translate_to_html - convert a single non escaped character
- * into the appropriate html character.
+ * overstrike - returns TRUE if the glyph (i, name) is going to overstrike
+ * a previous glyph in sbuf.
+ * If TRUE the font is changed to bold and the previous sbuf
+ * is flushed.
*/
-int char_translate_to_html (font *f, char *buf, int buflen, unsigned char ch, int b, int and_single)
+int html_printer::overstrike(int index, const char *name, const environment *env, int w)
{
- if (and_single) {
- int t, l;
- char *translation;
- char name[2];
-
- name[0] = ch;
- name[1] = (char)0;
- translation = get_html_translation(f, name);
- if ((translation == NULL) && (ch >= UNICODE_DESC_START)) {
- translation = to_unicode(ch);
- }
- 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] = ch;
- b++;
- }
- }
- } else {
+ if ((env->hpos < sbuf_end_hpos)
+ || ((sbuf_kern != 0) && (sbuf_end_hpos - sbuf_kern < env->hpos))) {
/*
- * do not attempt to encode single characters
+ * at this point we have detected an overlap
*/
- if (b<buflen) {
- buf[b] = ch;
- b++;
- }
- }
- return( b );
-}
-
-/*
- * 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)
-{
- char *translation;
- int e;
- char escaped_char[MAX_STRING_LENGTH];
- int l;
- 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 (f->contains(index) && (index != 0)) {
- buf[b] = f->get_code(index);
- b++;
- }
- }
- }
- } else {
- b = char_translate_to_html(f, buf, buflen, str[i], b, and_single);
- i++;
- }
+ if (overstrike_detected) {
+ /* already detected, remove previous glyph and use this glyph */
+ sbuf.set_length(last_sbuf_length);
+ add_to_sbuf(index, name);
+ sbuf_end_hpos = env->hpos + w;
+ return TRUE;
} else {
- b = char_translate_to_html(f, buf, buflen, str[i], b, and_single);
- i++;
+ /* first time we have detected an overstrike in the sbuf */
+ sbuf.set_length(last_sbuf_length); /* remove previous glyph */
+ if (! is_bold(sbuf_style.f))
+ flush_sbuf();
+ overstrike_detected = TRUE;
+ add_to_sbuf(index, name);
+ sbuf_end_hpos = env->hpos + w;
+ return TRUE;
}
}
- buf[min(b, buflen)] = (char)0;
+ return FALSE ;
}
/*
@@ -2652,33 +3433,25 @@ void str_translate_to_html (font *f, char *buf, int buflen, char *str, int len,
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);
+ style sty(f, env->size, env->height, env->slant, env->fontno, *env->col);
if (sty.slant != 0) {
if (sty.slant > 80 || sty.slant < -80) {
error("silly slant `%1' degrees", sty.slant);
sty.slant = 0;
}
}
- if ((sbuf_len > 0) && (sbuf_len < SBUF_SIZE) && (sty == sbuf_style) &&
- (sbuf_vpos == env->vpos) && (sbuf_continuation(code, name, env, w))) {
+ if (((! sbuf.empty()) && (sty == sbuf_style) && (sbuf_vpos == env->vpos))
+ && (sbuf_continuation(i, name, env, w) || overstrike(i, name, env, w)))
return;
- } else {
- flush_sbuf();
- sbuf_len = 0;
- add_to_sbuf(code, name);
- sbuf_end_hpos = env->hpos + w;
- sbuf_start_hpos = env->hpos;
- sbuf_vpos = env->vpos;
- sbuf_style = sty;
- sbuf_kern = 0;
- }
+
+ flush_sbuf();
+ add_to_sbuf(i, name);
+ sbuf_end_hpos = env->hpos + w;
+ sbuf_start_hpos = env->hpos;
+ sbuf_prev_hpos = env->hpos;
+ sbuf_vpos = env->vpos;
+ sbuf_style = sty;
+ sbuf_kern = 0;
}
/*
@@ -2694,9 +3467,11 @@ void html_printer::write_title (int in_head)
html.put_string("</title>").nl().nl();
} else {
title.has_been_written = TRUE;
- html.put_string("<h1 align=center>");
- html.put_string(title.text);
- html.put_string("</h1>").nl().nl();
+ if (title.with_h1) {
+ html.put_string("<h1 align=center>");
+ html.put_string(title.text);
+ html.put_string("</h1>").nl().nl();
+ }
}
} else if (in_head) {
// place empty title tags to help conform to `tidy'
@@ -2731,9 +3506,7 @@ void html_printer::begin_page(int n)
output_vpos = -1;
output_vpos_max = -1;
current_paragraph = new html_text(&html);
-#if defined(INDENTATION)
- current_paragraph->do_indent(indent.text, indentation, pageoffset, linelength);
-#endif
+ do_indent(indentation, pageoffset, linelength);
current_paragraph->do_para("");
}
@@ -2748,47 +3521,62 @@ font *html_printer::make_font(const char *nm)
return html_font::load_html_font(nm);
}
+void html_printer::do_body (void)
+{
+ if (background == NULL)
+ fputs("<body>\n\n", stdout);
+ else {
+ unsigned int r, g, b;
+ char buf[6+1];
+
+ background->get_rgb(&r, &g, &b);
+ // we have to scale 0..0xFFFF to 0..0xFF
+ sprintf(buf, "%.2X%.2X%.2X", r/0x101, g/0x101, b/0x101);
+
+ fputs("<body bgcolor=\"#", stdout);
+ fputs(buf, stdout);
+ fputs("\">\n\n", stdout);
+ }
+}
+
html_printer::~html_printer()
{
+#ifdef LONG_FOR_TIME_T
+ long t;
+#else
+ time_t t;
+#endif
+
current_paragraph->flush_text();
html.end_line();
html.set_file(stdout);
+ html.begin_comment("Creator : ")
+ .put_string("groff ")
+ .put_string("version ")
+ .put_string(Version_string)
+ .end_comment();
+
+ t = time(0);
+ html.begin_comment("CreationDate: ")
+ .put_string(ctime(&t), strlen(ctime(&t))-1)
+ .end_comment();
+
/*
* 'HTML: The definitive guide', O'Reilly, p47. advises against specifying
- * the dtd, so for the moment I'll leave this commented out.
- * If requested we could always emit it if a command line switch
- * was present.
- *
- * fputs("<!doctype html public \"-//IETF//DTD HTML 4.0//EN\">\n", stdout);
+ * the dtd.
*/
+ // fputs("<!doctype html public \"-//IETF//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n", stdout);
fputs("<html>\n", stdout);
fputs("<head>\n", stdout);
fputs("<meta name=\"generator\" content=\"groff -Thtml, see www.gnu.org\">\n", stdout);
fputs("<meta name=\"Content-Style\" content=\"text/css\">\n", stdout);
write_title(TRUE);
fputs("</head>\n", stdout);
- fputs("<body>\n\n", stdout);
+ do_body();
+
write_title(FALSE);
header.write_headings(stdout, FALSE);
write_rule();
- {
- html.begin_comment("Creator : ")
- .put_string("groff ")
- .put_string("version ")
- .put_string(Version_string)
- .end_comment();
- }
- {
-#ifdef LONG_FOR_TIME_T
- long
-#else
- time_t
-#endif
- t = time(0);
- html.begin_comment("CreationDate: ")
- .put_string(ctime(&t), strlen(ctime(&t))-1)
- .end_comment();
- }
#if defined(DEBUGGING)
html.begin_comment("Total number of pages: ").put_string(i_to_a(no_of_printed_pages)).end_comment();
#endif
@@ -2825,13 +3613,13 @@ void html_printer::special(char *s, const environment *env, char type)
if (s != 0) {
flush_sbuf();
if (env->fontno >= 0) {
- style sty(get_font_from_index(env->fontno), env->size, env->height, env->slant, env->fontno);
+ style sty(get_font_from_index(env->fontno), env->size, env->height,
+ env->slant, env->fontno, *env->col);
sbuf_style = sty;
}
if (strncmp(s, "html:", 5) == 0) {
int r=font::res; /* resolution of the device */
- char buf[MAX_STRING_LENGTH];
font *f=sbuf_style.f;
if (f == NULL) {
@@ -2839,28 +3627,26 @@ void html_printer::special(char *s, const environment *env, char type)
f = font::load_font("TR", &found);
}
- str_translate_to_html(f, buf, MAX_STRING_LENGTH,
- &s[5], strlen(s)-5, FALSE);
/*
* need to pass rest of string through to html output during flush
*/
- page_contents->add_html(&sbuf_style, buf, strlen(buf),
- line_number,
- env->vpos-env->size*r/72, env->hpos,
- env->vpos , env->hpos);
+ page_contents->add_and_encode(&sbuf_style, string(&s[5]),
+ line_number,
+ env->vpos-env->size*r/72, env->hpos,
+ env->vpos , env->hpos);
/*
* assume that the html command has no width, if it does then hopefully troff
* will have fudged this in a macro by requesting that the formatting move right by
- * the appropriate width.
+ * the appropriate amount.
*/
} else if (strncmp(s, "index:", 6) == 0) {
cutoff_heading = atoi(&s[6]);
} else if (strncmp(s, "html-tag:", 9) == 0) {
int r=font::res; /* resolution of the device */
- page_contents->add_tag(&sbuf_style, s, strlen(s),
+ page_contents->add_tag(&sbuf_style, string(s),
line_number,
env->vpos-env->size*r/72, env->hpos,
env->vpos , env->hpos);
@@ -2879,15 +3665,24 @@ int main(int argc, char **argv)
{ "version", no_argument, 0, 'v' },
{ NULL, 0, 0, 0 }
};
- while ((c = getopt_long(argc, argv, "o:i:I:D:F:vd?lrn", long_options, NULL))
+ while ((c = getopt_long(argc, argv, "a:g:o:i:I:D:F:vbdhlrnp", long_options, NULL))
!= EOF)
switch(c) {
case 'v':
- {
- printf("GNU post-grohtml (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
+ printf("GNU post-grohtml (groff) version %s\n", Version_string);
+ exit(0);
+ break;
+ case 'a':
+ /* text antialiasing bits - handled by pre-html */
+ break;
+ case 'g':
+ /* graphic antialiasing bits - handled by pre-html */
+ break;
+ case 'b':
+ // set background color to white
+ default_background = new color;
+ default_background->set_gray(color::MAX_COLOR_VAL);
+ break;
case 'F':
font::command_line_font_dir(optarg);
break;
@@ -2897,9 +3692,19 @@ int main(int argc, char **argv)
case 'r':
auto_rule = FALSE;
break;
+ case 'd':
+ /* handled by pre-html */
+ break;
+ case 'h':
+ /* do not use the Hn headings of html, but manufacture our own */
+ manufacture_headings = TRUE;
+ break;
case 'o':
/* handled by pre-html */
break;
+ case 'p':
+ /* handled by pre-html */
+ break;
case 'i':
/* handled by pre-html */
break;
@@ -2935,6 +3740,6 @@ int main(int argc, char **argv)
static void usage(FILE *stream)
{
- fprintf(stream, "usage: %s [-vld?n] [-D dir] [-I image_stem] [-F dir] [files ...]\n",
+ fprintf(stream, "usage: %s [-vblnh] [-D dir] [-I image_stem] [-F dir] [files ...]\n",
program_name);
}
diff --git a/contrib/groff/src/devices/grolbp/Makefile.sub b/contrib/groff/src/devices/grolbp/Makefile.sub
index d60008b..d8000d1 100644
--- a/contrib/groff/src/devices/grolbp/Makefile.sub
+++ b/contrib/groff/src/devices/grolbp/Makefile.sub
@@ -1,6 +1,6 @@
-PROG=grolbp
+PROG=grolbp$(EXEEXT)
MAN1=grolbp.n
XLIBS=$(LIBDRIVER) $(LIBGROFF)
MLIB=$(LIBM)
-OBJS=lbp.o
+OBJS=lbp.$(OBJEXT)
CCSRCS=$(srcdir)/lbp.cc
diff --git a/contrib/groff/src/devices/grolbp/grolbp.man b/contrib/groff/src/devices/grolbp/grolbp.man
index d567c1a..6685c4f 100644
--- a/contrib/groff/src/devices/grolbp/grolbp.man
+++ b/contrib/groff/src/devices/grolbp/grolbp.man
@@ -3,7 +3,7 @@
.\" vim: set syntax=nroff :
.\" The above line should set vim into nroff mode
.ig
-Copyright (C) 1994-2000 Free Software Foundation, Inc.
+Copyright (C) 1994-2000, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -35,11 +35,14 @@ program.
.el .TP "\\$1"
..
.TH GROLBP @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
+.
.SH NAME
grolbp \- groff driver for Canon CAPSL printers (LBP-4 and LBP-8 series laser printers).
+.
.SH SYNOPSIS
.nr a \n(.j
.ad l
+.nh
.nr i \n(.i
.in +\w'\fBgrolbp 'u
.ti \niu
@@ -58,6 +61,8 @@ grolbp \- groff driver for Canon CAPSL printers (LBP-4 and LBP-8 series laser pr
.OP \-\-papersize= paper_size
.OP \-o orientation
.OP \-\-orientation= orientation
+.OP \-w width
+.OP \-\-linewidth= width
.OP \-F dir
.OP \-\-fontdir= dir
.OP \-h
@@ -65,6 +70,8 @@ grolbp \- groff driver for Canon CAPSL printers (LBP-4 and LBP-8 series laser pr
.RI "[\ " files\|.\|.\|. "\ ]"
.br
.ad \na
+.hy
+.
.SH DESCRIPTION
.B grolbp
is a driver for
@@ -111,6 +118,14 @@ Print the document with
.I orientation
orientation, which must be `portrait' or `landscape'.
.TP
+.BI \-w width
+.TQ
+.BI \-\-linewidth= width
+Set the default line thickness to
+.I width
+thousandths of an em.
+If this option isn't specified, the line thickness defaults to 0.04\~em.
+.TP
.B \-v
.TQ
.B \-\-version
@@ -120,8 +135,11 @@ Print the version number.
.TQ
.BI \-\-fontdir= dir
Prepend directory
-.IB dir /devlbp
-to the search path for font and device description files.
+.IB dir /dev name
+to the search path for font and device description files;
+.I name
+is the name of the device, usually
+.BR lbp .
.TP
.B \-h
.TQ
@@ -160,74 +178,35 @@ 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
+See
+.BR groff_font (@MAN1EXT@)
+how to set the paper dimensions in the
.B DESC
-file, only the first valid one is used.
+file.
.PP
To set the paper size in the command line, add
.sp 1
.in +2m
-.BI \-p \ desired_papersize
+.BI \-p \ paper-size
.in -2m
.sp 1
or
.sp 1
.in +2m
-.BI \-\-papersize= desired_papersize
+.BI \-\-papersize= paper-size
.in -2m
.sp 1
to the other
.B grolbp
options, where
-.B desired_papersize
+.I paper-size
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
@@ -247,7 +226,7 @@ file, insert a line with the following content:
.RB [ portrait | landscape ]
.in -2m
.sp 1
-As with paper sizes, only the first valid orientation command in the
+Only the first valid orientation command in the
.B DESC
file is used.
.PP
diff --git a/contrib/groff/src/devices/grolbp/lbp.cc b/contrib/groff/src/devices/grolbp/lbp.cc
index ec8c7b1..76db32a 100644
--- a/contrib/groff/src/devices/grolbp/lbp.cc
+++ b/contrib/groff/src/devices/grolbp/lbp.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1994, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1994, 2000, 2001, 2002 Free Software Foundation, Inc.
Written by Francisco Andrés Verdú <pandres@dragonet.es> with many ideas
taken from the other groff drivers.
@@ -30,16 +30,22 @@ TODO
#include "driver.h"
#include "lbp.h"
#include "charset.h"
+#include "paper.h"
#include "nonposix.h"
extern "C" const char *Version_string;
-static short int papersize = -1, // papersize
- orientation = -1 , // orientation
- paperlength = 0, // Custom Paper size
- paperwidth = 0,
- ncopies = 1; // Number of copies
+static int user_papersize = -1; // papersize
+static int orientation = -1; // orientation
+static double user_paperlength = 0; // Custom Paper size
+static double user_paperwidth = 0;
+static int ncopies = 1; // Number of copies
+
+#define DEFAULT_LINEWIDTH_FACTOR 40 // 0.04em
+static int linewidth_factor = DEFAULT_LINEWIDTH_FACTOR;
+
+static int set_papersize(const char *paperformat);
class lbp_font : public font {
public:
@@ -55,7 +61,7 @@ private:
class lbp_printer : public printer {
public:
- lbp_printer();
+ lbp_printer(int, double, double);
~lbp_printer();
void set_char(int, font *, const environment *, int, const char *name);
void draw(int code, int *p, int np, const environment *env);
@@ -64,7 +70,7 @@ public:
font *make_font(const char *);
void end_of_line();
private:
- void set_line_thickness(int size, int dot = 0);
+ void set_line_thickness(int size,const environment *env);
void vdmstart();
void vdmflush(); // the name vdmend was already used in lbp.h
void setfillmode(int mode);
@@ -79,38 +85,27 @@ private:
int cur_size;
unsigned short cur_symbol_set;
int line_thickness;
+ int req_linethickness; // requested line thickness
+ int papersize;
+ int paperlength; // custom paper size
+ int paperwidth;
};
// Compatibility section.
//
-// Here we define some functions not present in some of the targets
+// 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;
-
-};
+ 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)
{
@@ -124,12 +119,12 @@ 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
+ f->is_scalable = 1; // Default is that fonts are scalable
if (!f->load()) {
- delete f;
- return 0;
- }
- return f;
+ delete f;
+ return 0;
+ }
+ return f;
}
@@ -138,64 +133,75 @@ void lbp_font::handle_unknown_font_command(const char *command,
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);
-};
+ if (arg == 0)
+ fatal_with_file_and_line(filename, lineno,
+ "`%1' command requires an argument",
+ command);
+ this->lbpname = new char[strlen(arg) + 1];
+ strcpy(this->lbpname, arg);
+ // we recognize bitmapped fonts by the first character of its name
+ if (arg[0] == 'N')
+ this->is_scalable = 0;
+ // fprintf(stderr, "Loading font \"%s\" \n", arg);
+ }
+ // fprintf(stderr, "Loading font %s \"%s\" in %s at %d\n",
+ // command, arg, filename, lineno);
+}
static void wp54charset()
{
unsigned int i;
-
lbpputs("\033[714;100;29;0;32;120.}");
- for (i = 0; i < sizeof(symset) ; i++) lbpputc(symset[i]);
+ for (i = 0; i < sizeof(symset); i++)
+ lbpputc(symset[i]);
lbpputs("\033[100;0 D");
- return ;
-};
+ return;
+}
-lbp_printer::lbp_printer()
+lbp_printer::lbp_printer(int ps, double pw, double pl)
: fill_pattern(1),
fill_mode(0),
cur_hpos(-1),
cur_font(0),
cur_size(0),
cur_symbol_set(0),
- line_thickness(-1)
+ req_linethickness(-1)
{
#ifdef SET_BINARY
- SET_BINARY(fileno(stdout));
+ 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;
-};
+ lbpinit(stdout);
+ lbpputs("\033c\033;\033[2&z\033[7 I\033[?32h\033[?33h\033[11h");
+ wp54charset(); // Define the new symbol set
+ lbpputs("\033[7 I\033[?32h\033[?33h\033[11h");
+ // Paper size handling
+ if (orientation < 0)
+ orientation = 0; // Default orientation is portrait
+ papersize = 14; // Default paper size is A4
+ if (font::papersize) {
+ papersize = set_papersize(font::papersize);
+ paperlength = font::paperlength;
+ paperwidth = font::paperwidth;
+ }
+ if (ps >= 0) {
+ papersize = ps;
+ paperlength = int(pl * font::res + 0.5);
+ paperwidth = int(pw * font::res + 0.5);
+ }
+ if (papersize < 80) // standard paper
+ lbpprintf("\033[%dp", (papersize | orientation));
+ else // Custom paper
+ lbpprintf("\033[%d;%d;%dp", (papersize | orientation),
+ paperlength, paperwidth);
+ // Number of copies
+ lbpprintf("\033[%dv\n", ncopies);
+ lbpputs("\033[0u\033[1u\033P1y Grolbp\033\\");
+ lbpmoveabs(0, 0);
+ lbpputs("\033[0t\033[2t");
+ lbpputs("\033('$2\033)' 1"); // Primary symbol set IBML
+ // Secondary symbol set IBMR1
+ cur_symbol_set = 0;
+}
lbp_printer::~lbp_printer()
{
@@ -209,460 +215,415 @@ void lbp_printer::begin_page(int)
void lbp_printer::end_page(int)
{
- if (vdminited()) vdmflush();
+ if (vdminited())
+ vdmflush();
lbpputc('\f');
cur_hpos = -1;
}
void lbp_printer::end_of_line()
{
- cur_hpos = -1; // force absolute motion
+ 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. */
-
+ static char bfont_name[255]; // The resulting font name
+ char type, // Italic, Roman, Bold
+ ori, // Normal or Rotated
+ *nam; // The font name without other data.
+ int cpi; // The font size in characters per inch
+ // (bitmapped fonts are monospaced).
+ /* Bitmap font selection is ugly in this printer, so don't expect
+ this function to be elegant. */
bfont_name[0] = 0x00;
- if (orientation) // Landscape
- ori = 'R';
- else // Portrait
- ori = 'N';
- type = f->lbpname[strlen(f->lbpname)-1];
- nam = new char[strlen(f->lbpname)-2];
- strncpy(nam,&(f->lbpname[1]),strlen(f->lbpname)-2);
- nam[strlen(f->lbpname)-2] = 0x00;
- // fprintf(stderr,"Bitmap font '%s' %d %c %c \n",nam,siz,type,ori);
- /* Since these fonts are 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;
- };
-
+ if (orientation) // Landscape
+ ori = 'R';
+ else // Portrait
+ ori = 'N';
+ type = f->lbpname[strlen(f->lbpname) - 1];
+ nam = new char[strlen(f->lbpname) - 2];
+ strncpy(nam, &(f->lbpname[1]), strlen(f->lbpname) - 2);
+ nam[strlen(f->lbpname) - 2] = 0x00;
+ // fprintf(stderr, "Bitmap font '%s' %d %c %c \n", nam, siz, type, ori);
+ /* Since these fonts are available only at certain sizes,
+ 10 and 17 cpi for courier, 12 and 17 cpi for elite,
+ we adjust the resulting size. */
+ cpi = 17;
+ // Fortunately there are only two bitmapped fonts shipped with the printer.
+ if (!strcasecmp(nam, "courier")) {
+ // Courier font
+ if (siz >= 12)
+ cpi = 10;
+ else cpi = 17;
+ }
+ if (!strcasecmp(nam, "elite")) {
+ if (siz >= 10)
+ cpi = 12;
+ else cpi = 17;
+ }
// Now that we have all the data, let's generate the font name.
if ((type != 'B') && (type != 'I')) // Roman font
- sprintf(bfont_name,"%c%s%d",ori,nam,cpi);
+ sprintf(bfont_name, "%c%s%d", ori, nam, cpi);
else
- sprintf(bfont_name,"%c%s%d%c",ori,nam,cpi,type);
-
+ 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)
+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;
+ // fprintf(stderr, "Loading font %s \"%d\" \n", psf->lbpname, env->size);
+ if (psf->is_scalable) {
+ // Scalable font selection is different from bitmaped
+ lbpprintf("\033Pz%s.IBML\033\\\033[%d C", psf->lbpname,
+ (int)((env->size * font::res) / 72));
+ }
+ else
+ // bitmapped font
+ lbpprintf("\033Pz%s.IBML\033\\\n", font_name(psf, env->size));
+ lbpputs("\033)' 1"); // Select IBML and IBMR1 symbol set
cur_font = psf;
cur_symbol_set = 0;
+ // Update the line thickness if needed
+ if ((req_linethickness < 0 ) && (env->size != cur_size))
+ set_line_thickness(req_linethickness,env);
+ cur_size = env->size;
}
if (symbol_set != cur_symbol_set) {
- if ( cur_symbol_set == 3 ) {
- // if current symbol set is Symbol we must restore the font
- lbpprintf("\033Pz%s.IBML\033\\\033[%d C",cur_font->lbpname,\
- (int)((env->size*300)/72));
- }; // if ( cur_symbol_set == 3 )
+ if (cur_symbol_set == 3)
+ // if current symbol set is Symbol we must restore the font
+ lbpprintf("\033Pz%s.IBML\033\\\033[%d C", cur_font->lbpname,
+ (int)((env->size * font::res) / 72));
switch (symbol_set) {
- case 0: lbpputs("\033('$2\033)' 1"); // Select IBML and IBMR1 symbol sets
- break;
- case 1: lbpputs("\033(d\033)' 1"); // Select wp54 symbol set
- break;
- case 2: lbpputs("\033('$2\033)'!0"); // Select IBMP symbol set
- break;
- case 3: lbpprintf("\033PzSymbol.SYML\033\\\033[%d C",\
- (int)((env->size*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
+ case 0:
+ lbpputs("\033('$2\033)' 1"); // Select IBML and IBMR1 symbol sets
+ break;
+ case 1:
+ lbpputs("\033(d\033)' 1"); // Select wp54 symbol set
+ break;
+ case 2:
+ lbpputs("\033('$2\033)'!0"); // Select IBMP symbol set
+ break;
+ case 3:
+ lbpprintf("\033PzSymbol.SYML\033\\\033[%d C",
+ (int)((env->size * font::res) / 72));
+ lbpputs("\033(\"!!0\033)\"!!1"); // Select symbol font
+ break;
+ case 4:
+ lbpputs("\033)\"! 1\033(\"!$2"); // Select PS symbol set
+ break;
+ }
cur_symbol_set = symbol_set;
}
if (env->size != cur_size) {
-
if (!cur_font->is_scalable)
- lbpprintf("\033Pz%s.IBML\033\\\n",font_name(cur_font,env->size));
+ lbpprintf("\033Pz%s.IBML\033\\\n", font_name(cur_font, env->size));
else
- lbpprintf("\033[%d C",(int)((env->size*300)/72));
+ lbpprintf("\033[%d C", (int)((env->size * font::res) / 72));
cur_size = env->size;
+ // Update the line thickness if needed
+ if (req_linethickness < 0 )
+ set_line_thickness(req_linethickness,env);
}
- if ((env->hpos != cur_hpos) || (env->vpos != cur_vpos))
- {
- // lbpmoveabs(env->hpos - ((5*300)/16),env->vpos );
- lbpmoveabs(env->hpos - 64,env->vpos - 64 );
- cur_vpos = env->vpos;
- cur_hpos = env->hpos;
- };
- if ((ch & 0x7F) < 32) lbpputs("\033[1.v");
+ 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()
+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);
-
-};
+ errno = 0;
+ f = tmpfile();
+ // f = fopen("/tmp/gtmp","w+");
+ if (f == NULL)
+ perror("Opening temporary file");
+ vdminit(f);
+ if (!changed_origin) { // we should change the origin only one time
+ changed_origin = 1;
+ vdmorigin(-63, 0);
+ }
+ vdmlinewidth(line_thickness);
+}
void
lbp_printer::vdmflush()
{
char buffer[1024];
int bytes_read = 1;
-
vdmend();
fflush(lbpoutput);
- /* lets copy the vdm code to the output */
+ /* let's copy the vdm code to the output */
rewind(vdmoutput);
- do
- {
- bytes_read = fread(buffer,1,sizeof(buffer),vdmoutput);
- bytes_read = fwrite(buffer,1,bytes_read,lbpoutput);
- } while ( bytes_read == sizeof(buffer));
-
- fclose(vdmoutput); // This will also delete the file,
- // since it is created by tmpfile()
- vdmoutput = NULL;
-
-}; // lbp_printer::vdmflush
-
-inline void
-lbp_printer::setfillmode(int mode)
+ do {
+ bytes_read = fread(buffer, 1, sizeof(buffer), vdmoutput);
+ bytes_read = fwrite(buffer, 1, bytes_read, lbpoutput);
+ } while (bytes_read == sizeof(buffer));
+ fclose(vdmoutput); // This will also delete the file,
+ // since it is created by tmpfile()
+ vdmoutput = NULL;
+}
+
+inline void lbp_printer::setfillmode(int mode)
{
if (mode != fill_mode) {
- if (mode != 1) vdmsetfillmode(mode,1,0);
- else vdmsetfillmode(mode,1,1); // To get black we must use white
- // inverted
- fill_mode = mode;
- };
-}; // setfillmode
+ if (mode != 1)
+ vdmsetfillmode(mode, 1, 0);
+ else
+ vdmsetfillmode(mode, 1, 1); // To get black we must use white
+ // inverted
+ fill_mode = mode;
+ }
+}
-inline void
-lbp_printer::polygon( int hpos,int vpos,int np,int *p)
+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);
-};
+ 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);
+}
+
+inline void lbp_printer::set_line_thickness(int size,const environment *env)
+{
+ if (size == 0)
+ line_thickness = 1;
+ else {
+ if (size < 0)
+ // line_thickness =
+ // (env->size * (font::res/72)) * (linewidth_factor/1000)
+ // we ought to check for overflow
+ line_thickness =
+ env->size * linewidth_factor * font::res / 72000;
+ else // size > 0
+ line_thickness = size;
+ } // else from if (size == 0)
+ if (line_thickness < 1)
+ line_thickness = 1;
+ if (vdminited())
+ vdmlinewidth(line_thickness);
+ req_linethickness = size; // an size requested
+ /* fprintf(stderr, "thickness: %d == %d, size %d, %d \n",
+ size, line_thickness, env->size,req_linethickness); */
+ return;
+}; // lbp_printer::set_line_thickness
void lbp_printer::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 ;
-};
+ if ((req_linethickness < 0 ) && (env->size != cur_size))
+ set_line_thickness(req_linethickness,env);
+
+ switch (code) {
+ case 't':
+ if (np == 0)
+ line_thickness = 1;
+ else { // troff gratuitously adds an extra 0
+ if (np != 1 && np != 2) {
+ error("0 or 1 argument required for thickness");
+ break;
+ };
+ set_line_thickness(p[0],env);
+ };
+ break;
+ case 'l': // Line
+ if (np != 2) {
+ error("2 arguments required for line");
+ break;
+ }
+ if (!vdminited())
+ vdmstart();
+ vdmline(env->hpos, env->vpos, p[0], p[1]);
+/* fprintf(stderr, "\nline: %d,%d - %d,%d thickness %d == %d\n",
+ env->hpos - 64,env->vpos -64, env->hpos - 64 + p[0],
+ env->vpos -64 + p[1], env->size, line_thickness);*/
+ break;
+ case 'R': // Rule
+ if (np != 2) {
+ error("2 arguments required for Rule");
+ break;
+ }
+ if (vdminited()) {
+ setfillmode(fill_pattern); // Solid Rule
+ vdmrectangle(env->hpos, env->vpos, p[0], p[1]);
+ }
+ else {
+ lbpruleabs(env->hpos - 64, env->vpos -64, p[0], p[1]);
+ cur_vpos = p[1];
+ cur_hpos = p[0];
+ }
+ // fprintf(stderr, "\nrule: thickness %d == %d\n",
+ // env->size, line_thickness);
+ break;
+ case 'P': // Filled Polygon
+ if (!vdminited())
+ vdmstart();
+ setfillmode(fill_pattern);
+ polygon(env->hpos, env->vpos, np, p);
+ break;
+ case 'p': // Empty Polygon
+ if (!vdminited())
+ vdmstart();
+ setfillmode(0);
+ polygon(env->hpos, env->vpos, np, p);
+ break;
+ case 'C': // Filled Circle
+ if (!vdminited())
+ vdmstart();
+ // fprintf(stderr, "Circle (%d,%d) Fill %d\n",
+ // env->hpos, env->vpos, fill_pattern);
+ setfillmode(fill_pattern);
+ vdmcircle(env->hpos + (p[0]/2), env->vpos, p[0]/2);
+ break;
+ case 'c': // Empty Circle
+ if (!vdminited())
+ vdmstart();
+ setfillmode(0);
+ vdmcircle(env->hpos + (p[0]/2), env->vpos, p[0]/2);
+ break;
+ case 'E': // Filled Ellipse
+ if (!vdminited())
+ vdmstart();
+ setfillmode(fill_pattern);
+ vdmellipse(env->hpos + (p[0]/2), env->vpos, p[0]/2, p[1]/2, 0);
+ break;
+ case 'e': // Empty Ellipse
+ if (!vdminited())
+ vdmstart();
+ setfillmode(0);
+ vdmellipse(env->hpos + (p[0]/2), env->vpos, p[0]/2, p[1]/2, 0);
+ break;
+ case 'a': // Arc
+ if (!vdminited())
+ vdmstart();
+ setfillmode(0);
+ // VDM draws arcs clockwise and pic counterclockwise
+ // We must compensate for that, exchanging the starting and
+ // ending points
+ vdmvarc(env->hpos + p[0], env->vpos+p[1],
+ int(sqrt(double((p[0]*p[0]) + (p[1]*p[1])))),
+ p[2], p[3],
+ (-p[0]), (-p[1]), 1, 2);
+ break;
+ case '~': // Spline
+ if (!vdminited())
+ vdmstart();
+ setfillmode(0);
+ vdmspline(np/2, env->hpos, env->vpos, p);
+ break;
+ case 'f':
+ if (np != 1 && np != 2) {
+ error("1 argument required for fill");
+ break;
+ }
+ // fprintf(stderr, "Fill %d\n", p[0]);
+ if ((p[0] == 1) || (p[0] >= 1000)) { // Black
+ fill_pattern = 1;
+ break;
+ }
+ if (p[0] == 0) { // White
+ fill_pattern = 0;
+ break;
+ }
+ if ((p[0] > 1) && (p[0] < 1000))
+ {
+ if (p[0] >= 990) fill_pattern = -23;
+ else if (p[0] >= 700) fill_pattern = -28;
+ else if (p[0] >= 500) fill_pattern = -27;
+ else if (p[0] >= 400) fill_pattern = -26;
+ else if (p[0] >= 300) fill_pattern = -25;
+ else if (p[0] >= 200) fill_pattern = -22;
+ else if (p[0] >= 100) fill_pattern = -24;
+ else fill_pattern = -21;
+ }
+ break;
+ case 'F':
+ // not implemented yet
+ break;
+ default:
+ error("unrecognised drawing command `%1'", char(code));
+ break;
+ }
+ return;
+}
font *lbp_printer::make_font(const char *nm)
{
return lbp_font::load_lbp_font(nm);
}
-
-
printer *make_printer()
{
- return new lbp_printer;
+ return new lbp_printer(user_papersize, user_paperwidth, user_paperlength);
}
-static struct
-{
- const char *name;
- int code;
-} papersizes[] =
-{{ "A4", 14 },
-{ "letter", 30 },
-{ "legal", 32 },
-{ "executive", 40 },
-};
-
+static struct {
+ const char *name;
+ int code;
+} lbp_papersizes[] =
+ {{ "A4", 14 },
+ { "letter", 30 },
+ { "legal", 32 },
+ { "executive", 40 },
+ };
-static int set_papersize(const char *papersize)
+static int set_papersize(const char *paperformat)
{
unsigned 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++)
+ // paper size
+ for (i = 0 ; i < sizeof(lbp_papersizes) / sizeof(lbp_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
-
+ if (strcasecmp(lbp_papersizes[i].name,paperformat) == 0)
+ return lbp_papersizes[i].code;
+ }
+ // Otherwise, we assume a custom paper size
+ return 82;
+}
static void handle_unknown_desc_command(const char *command, const char *arg,
const char *filename, int lineno)
{
- // 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
+ // orientation command
if (strcasecmp(command, "orientation") == 0) {
// We give priority to command line options
- if (orientation > 0) return;
+ if (orientation > 0)
+ return;
if (arg == 0)
error_with_file_and_line(filename, lineno,
- "`papersize' command requires an argument");
+ "`orientation' command requires an argument");
else {
- if (strcasecmp(arg,"portrait") == 0) orientation = 0;
- else { if (strcasecmp(arg,"landscape") == 0) orientation = 1;
- else error_with_file_and_line(filename, lineno,
- "`orientation' command requires an argument");
- };
- }; // if (arg == 0) ... else ...
- }; // if (strcasecmp(command, "orientation") == 0)
-};
+ if (strcasecmp(arg, "portrait") == 0)
+ orientation = 0;
+ else {
+ if (strcasecmp(arg, "landscape") == 0)
+ orientation = 1;
+ else
+ error_with_file_and_line(filename, lineno,
+ "invalid argument to `orientation' command");
+ }
+ }
+ }
+}
static struct option long_options[] = {
{ "orientation", required_argument, NULL, 'o' },
@@ -670,97 +631,110 @@ static struct option long_options[] = {
{ "copies", required_argument, NULL, 'c' },
{ "landscape", no_argument, NULL, 'l' },
{ "papersize", required_argument, NULL, 'p' },
+ { "linewidth", required_argument, NULL, 'w' },
{ "fontdir", required_argument, NULL, 'F' },
{ "help", no_argument, NULL, 'h' },
{ NULL, 0, 0, 0 }
- };
+};
static void usage(FILE *stream)
{
fprintf(stream,
- "usage: %s [-lvh] [-c n] [-p paper_size] [-F dir] [-o or] "\
- " [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",
+ "usage: %s [-lvh] [-c n] [-p paper_size] [-F dir] [-o or]\n"
+ " [-w width] [files ...]\n"
+ "\n"
+ " -o --orientation=[portrait|landscape]\n"
+ " -v --version\n"
+ " -c --copies=numcopies\n"
+ " -l --landscape\n"
+ " -p --papersize=paper_size\n"
+ " -w --linewidth=width\n"
+ " -F --fontdir=dir\n"
+ " -h --help\n",
program_name);
-}; // 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' : {
- printf("GNU grolbp (groff) version %s\n",
- Version_string);
- exit(0);
- break;
- };
- case 'o' : {
- if (strcasecmp(optarg,"portrait") == 0)
- orientation = 0;
- else {
- if (strcasecmp(optarg,"landscape") == 0)
- orientation = 1;
- else
- error("unknown orientation '%1'", optarg);
- };
- break;
- };
- case 'c' : {
- char *ptr;
- long n = strtol(optarg, &ptr, 10);
- if ((n <= 0) && (ptr == optarg))
- error("argument for -c must be a positive integer");
- else if (n <= 0 || n > 32767)
- error("out of range argument for -c");
- else
- ncopies = unsigned(n);
- break;
- }
- case 'h' : usage(stdout);
- exit(0);
- break;
- case '?' : usage(stderr);
- exit(1);
- break;
-
- }; // switch (c)
- }; // while (c > 0 )
-
- if (optind >= argc)
- do_file("-");
-
- while (optind < argc) {
- do_file(argv[optind++]);
- };
-
- lbpputs("\033c\033<");
- return 0;
-};
+ if (program_name == NULL)
+ program_name = strsave(argv[0]);
+ font::set_unknown_desc_command_handler(handle_unknown_desc_command);
+ // command line parsing
+ int c = 0;
+ int option_index = 0;
+ while (c >= 0) {
+ c = getopt_long (argc, argv, "F:p:lvo:c:hw:",
+ long_options, &option_index);
+ switch (c) {
+ case 'F':
+ font::command_line_font_dir(optarg);
+ break;
+ case 'p':
+ {
+ const char *s;
+ if (!font::scan_papersize(optarg, &s,
+ &user_paperlength, &user_paperwidth))
+ error("invalid paper size `%1' ignored", optarg);
+ else
+ user_papersize = set_papersize(s);
+ break;
+ }
+ case 'l':
+ orientation = 1;
+ break;
+ case 'v':
+ printf("GNU grolbp (groff) version %s\n", Version_string);
+ exit(0);
+ break;
+ case 'o':
+ if (strcasecmp(optarg, "portrait") == 0)
+ orientation = 0;
+ else {
+ if (strcasecmp(optarg, "landscape") == 0)
+ orientation = 1;
+ else
+ error("unknown orientation '%1'", optarg);
+ };
+ break;
+ case 'c':
+ {
+ char *ptr;
+ long n = strtol(optarg, &ptr, 10);
+ if ((n <= 0) && (ptr == optarg))
+ error("argument for -c must be a positive integer");
+ else if (n <= 0 || n > 32767)
+ error("out of range argument for -c");
+ else
+ ncopies = unsigned(n);
+ break;
+ }
+ case 'w':
+ {
+ char *ptr;
+ long n = strtol(optarg, &ptr, 10);
+ if (n == 0 && ptr == optarg)
+ error("argument for -w must be a non-negative integer");
+ else if (n < 0 || n > INT_MAX)
+ error("out of range argument for -w");
+ else
+ linewidth_factor = int(n);
+ break;
+ }
+ case 'h':
+ usage(stdout);
+ exit(0);
+ break;
+ case '?':
+ usage(stderr);
+ exit(1);
+ break;
+ }
+ }
+ if (optind >= argc)
+ do_file("-");
+ while (optind < argc)
+ do_file(argv[optind++]);
+ lbpputs("\033c\033<");
+ delete pr;
+ return 0;
+}
diff --git a/contrib/groff/src/devices/grolbp/lbp.h b/contrib/groff/src/devices/grolbp/lbp.h
index cacf3ea..3b8a941 100644
--- a/contrib/groff/src/devices/grolbp/lbp.h
+++ b/contrib/groff/src/devices/grolbp/lbp.h
@@ -1,5 +1,5 @@
// -*- C -*-
-/* Copyright (C) 1994, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1994, 2000, 2001 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
diff --git a/contrib/groff/src/devices/grolj4/Makefile.sub b/contrib/groff/src/devices/grolj4/Makefile.sub
index bbb0cff..21c3780 100644
--- a/contrib/groff/src/devices/grolj4/Makefile.sub
+++ b/contrib/groff/src/devices/grolj4/Makefile.sub
@@ -1,6 +1,6 @@
-PROG=grolj4
+PROG=grolj4$(EXEEXT)
MAN1=grolj4.n
XLIBS=$(LIBDRIVER) $(LIBGROFF)
MLIB=$(LIBM)
-OBJS=lj4.o
+OBJS=lj4.$(OBJEXT)
CCSRCS=$(srcdir)/lj4.cc
diff --git a/contrib/groff/src/devices/grolj4/grolj4.man b/contrib/groff/src/devices/grolj4/grolj4.man
index 414ad78..267c621 100644
--- a/contrib/groff/src/devices/grolj4/grolj4.man
+++ b/contrib/groff/src/devices/grolj4/grolj4.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1994-2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 1994-2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -59,7 +59,7 @@ There is an additional drawing command available:
.BI \eD'R\ dh\ dv '
Draw a rule (solid black rectangle), with one corner
at the current position, and the diagonally opposite corner
-at the current position
+at the current position
.RI +( dh , dv ).
Afterwards the current position will be at the opposite corner. This
generates a PCL fill rectangle command, and so will work on
@@ -77,7 +77,7 @@ copies of each page.
Print the document with a landscape orientation.
.TP
.BI "\-d [" n ]
-Use duplex mode
+Use duplex mode
.IR n :
1\ is long-side binding; 2\ is short-side binding;
default is\ 1.
@@ -94,17 +94,20 @@ Print the version number.
.BI \-w n
Set the default line thickness to
.I n
-thousandths of an em.
+thousandths of an em.
+If this option isn't specified, the line thickness defaults to 0.04\~em.
.TP
.BI \-F dir
Prepend directory
-.IB dir /devlj4
-to the search path for font and device description files.
+.IB dir /dev name
+to the search path for font and device description files;
+.I name
+is the name of the device, usually
+.BR lj4 .
.LP
The following four commands are available additionally in the
-.B DESC
-file:
-.TP
+font description files:
+.TP
.BI pclweight \ N
The integer value
.I N
diff --git a/contrib/groff/src/devices/grolj4/lj4.cc b/contrib/groff/src/devices/grolj4/lj4.cc
index 6829acb..0c3150d 100644
--- a/contrib/groff/src/devices/grolj4/lj4.cc
+++ b/contrib/groff/src/devices/grolj4/lj4.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1994, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1994, 2000, 2001, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -55,7 +55,7 @@ static struct {
{ "dl", 90, 71, 59 },
};
-static int paper_size = -1;
+static int user_paper_size = -1;
static int landscape_flag = 0;
static int duplex_flag = 0;
@@ -76,6 +76,8 @@ const int DEFAULT_HPGL_UNITS = 1016;
int line_width_factor = DEFAULT_LINE_WIDTH_FACTOR;
unsigned ncopies = 0; // 0 means don't send ncopies command
+static int lookup_paper_size(const char *);
+
class lj4_font : public font {
public:
~lj4_font();
@@ -158,7 +160,7 @@ void lj4_font::handle_unknown_font_command(const char *command,
class lj4_printer : public printer {
public:
- lj4_printer();
+ lj4_printer(int);
~lj4_printer();
void set_char(int, font *, const environment *, int, const char *name);
void draw(int code, int *p, int np, const environment *env);
@@ -184,6 +186,7 @@ private:
double pen_width;
double hpgl_scale;
int hpgl_inited;
+ int paper_size;
};
inline
@@ -207,7 +210,7 @@ void lj4_printer::hpgl_end()
fputs(";\033%0A", stdout);
}
-lj4_printer::lj4_printer()
+lj4_printer::lj4_printer(int ps)
: cur_hpos(-1),
cur_font(0),
cur_size(0),
@@ -221,11 +224,19 @@ lj4_printer::lj4_printer()
font::res);
fputs("\033E", stdout); // reset
if (font::res != 300)
- printf("\033&u%dD", font::res); // unit of measure
+ printf("\033&u%dD", font::res); // unit of measure
if (ncopies > 0)
printf("\033&l%uX", ncopies);
- if (paper_size < 0)
- paper_size = 0; // default to letter
+ paper_size = 0; // default to letter
+ if (font::papersize) {
+ int n = lookup_paper_size(font::papersize);
+ if (n < 0)
+ error("unknown paper size `%1'", font::papersize);
+ else
+ paper_size = n;
+ }
+ if (ps >= 0)
+ paper_size = ps;
printf("\033&l%dA" // paper size
"\033&l%dO" // orientation
"\033&l0E", // no top margin
@@ -266,7 +277,8 @@ int is_unprintable(unsigned char c)
return c < 32 && (c == 0 || (7 <= c && c <= 15) || c == 27);
}
-void lj4_printer::set_char(int index, font *f, const environment *env, int w, const char *name)
+void lj4_printer::set_char(int index, font *f, const environment *env,
+ int w, const char *name)
{
int code = f->get_code(index);
@@ -502,6 +514,9 @@ void lj4_printer::draw(int code, int *p, int np, const environment *env)
printf("FT10,%d", p[0]/10);
hpgl_end();
break;
+ case 'F':
+ // not implemented yet
+ break;
case 't':
{
if (np == 0) {
@@ -531,8 +546,8 @@ void lj4_printer::hpgl_init()
hpgl_scale = double(DEFAULT_HPGL_UNITS)/font::res;
printf("\033&f0S" // push position
"\033*p0x0Y" // move to 0,0
- "\033*c%dx%dy0T" // establish picture frame
- "\033%%1B" // switch to HPGL
+ "\033*c%dx%dy0T" // establish picture frame
+ "\033%%1B" // switch to HPGL
"SP1SC0,%.4f,0,-%.4f,2IR0,100,0,100" // set up scaling
"LA1,4,2,4" // round line ends and joins
"PR" // relative plotting
@@ -565,7 +580,7 @@ font *lj4_printer::make_font(const char *nm)
printer *make_printer()
{
- return new lj4_printer;
+ return new lj4_printer(user_paper_size);
}
static
@@ -580,25 +595,6 @@ int lookup_paper_size(const char *s)
return -1;
}
-static
-void handle_unknown_desc_command(const char *command, const char *arg,
- const char *filename, int lineno)
-{
- if (strcmp(command, "papersize") == 0) {
- if (arg == 0)
- error_with_file_and_line(filename, lineno,
- "`papersize' command requires an argument");
- else if (paper_size < 0) {
- int n = lookup_paper_size(arg);
- if (n < 0)
- error_with_file_and_line(filename, lineno,
- "unknown paper size `%1'", arg);
- else
- paper_size = n;
- }
- }
-}
-
static void usage(FILE *stream);
extern "C" int optopt, optind;
@@ -608,7 +604,6 @@ int main(int argc, char **argv)
program_name = argv[0];
static char stderr_buf[BUFSIZ];
setbuf(stderr, stderr_buf);
- font::set_unknown_desc_command_handler(handle_unknown_desc_command);
int c;
static const struct option long_options[] = {
{ "help", no_argument, 0, CHAR_MAX + 1 },
@@ -644,7 +639,7 @@ int main(int argc, char **argv)
if (n < 0)
error("unknown paper size `%1'", optarg);
else
- paper_size = n;
+ user_paper_size = n;
break;
}
case 'v':
diff --git a/contrib/groff/src/devices/grops/Makefile.sub b/contrib/groff/src/devices/grops/Makefile.sub
index 4182527..ee2e6d1 100644
--- a/contrib/groff/src/devices/grops/Makefile.sub
+++ b/contrib/groff/src/devices/grops/Makefile.sub
@@ -1,10 +1,10 @@
-PROG=grops
+PROG=grops$(EXEEXT)
MAN1=grops.n
XLIBS=$(LIBDRIVER) $(LIBGROFF)
MLIB=$(LIBM)
OBJS=\
- ps.o \
- psrm.o
+ ps.$(OBJEXT) \
+ psrm.$(OBJEXT)
CCSRCS=\
$(srcdir)/ps.cc \
$(srcdir)/psrm.cc
diff --git a/contrib/groff/src/devices/grops/TODO b/contrib/groff/src/devices/grops/TODO
index da67973..7ab3b69 100644
--- a/contrib/groff/src/devices/grops/TODO
+++ b/contrib/groff/src/devices/grops/TODO
@@ -6,9 +6,6 @@ Generate %%For comment.
Generate %%Title comment.
-For efficiency it might be better to have the printer interface have
-support for the t and u commands.
-
Angles in arc command: don't generate more digits after the decimal
point than are necessary.
diff --git a/contrib/groff/src/devices/grops/grops.man b/contrib/groff/src/devices/grops/grops.man
index e9c6be4..e7d2305 100644
--- a/contrib/groff/src/devices/grops/grops.man
+++ b/contrib/groff/src/devices/grops/grops.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -16,15 +16,25 @@ versions, except that this permission notice may be included in
translations approved by the Free Software Foundation instead of in
the original English.
..
+.
+.mso www.tmac
+.
+.
.\" Like TP, but if specified indent is more than half
.\" the current line-length - indent, use the default indent.
.de Tp
.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
.el .TP "\\$1"
..
+.
+.
.TH GROPS @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
+.
+.
.SH NAME
grops \- PostScript driver for groff
+.
+.
.SH SYNOPSIS
.nr a \n(.j
.ad l
@@ -32,43 +42,55 @@ grops \- PostScript driver for groff
.in +\w'\fBgrops 'u
.ti \niu
.B grops
+.
.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
+.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
+.OP \-p papersize
.OP \-P prologue
+.OP \-w n
.RI "[\ " files\|.\|.\|. "\ ]"
.br
.ad \na
+.
.PP
It is possible to have whitespace between a command line option and its
parameter.
+.
+.
.SH DESCRIPTION
.B grops
translates the output of GNU
.B troff
to PostScript.
+.
Normally
.B grops
should be invoked by using the groff command
with a
.B \-Tps
option.
+.
.if '@DEVICE@'ps' (Actually, this is the default for groff.)
+.
If no files are given,
.B grops
will read the standard input.
+.
A filename of
.B \-
will also cause
.B grops
to read the standard input.
+.
PostScript output is written to the standard output.
+.
When
.B grops
is run by
@@ -79,22 +101,29 @@ using the
.B groff
.B \-P
option.
+.
+.
.SH OPTIONS
.TP
.BI \-b n
Workaround broken spoolers and previewers.
+.
Normally
.B grops
produces output that conforms
the Document Structuring Conventions version 3.0.
+.
Unfortunately some spoolers and previewers can't handle such output.
-The value of
+.
+The value of\~\c
.I n
controls what
.B grops
does to its output acceptable to such programs.
-A value of 0 will cause grops not to employ any workarounds.
-Add 1 if no
+.
+A value of\~0 will cause grops not to employ any workarounds.
+.
+Add\~1 if no
.B %%BeginDocumentSetup
and
.B %%EndDocumentSetup
@@ -105,10 +134,12 @@ anything between the
comment and the first
.B %%Page
comment.
-Add 2 if lines in included files beginning with
+.
+Add\~2 if lines in included files beginning with
.B %!
should be stripped out; this is needed for Sun's pageview previewer.
-Add 4 if
+.
+Add\~4 if
.BR %%Page ,
.BR %%Trailer
and
@@ -120,63 +151,97 @@ don't understand the
and
.B %%EndDocument
comments.
-Add 8 if the first line of the PostScript output should be
+.
+Add\~8 if the first line of the PostScript output should be
.B %!PS-Adobe-2.0
rather than
.BR %!PS-Adobe-3.0 ;
this is needed when using Sun's Newsprint with a printer that requires
page reversal.
+.
The default value can be specified by a
+.
.RS
.IP
.BI broken\ n
+.
.LP
command in the DESC file.
-Otherwise the default value is 0.
+.
+Otherwise the default value is\~0.
.RE
+.
.TP
.BI \-c n
Print
.I n
copies of each page.
+.
+.TP
+.BI \-F dir
+Prepend directory
+.IB dir /dev name
+to the search path for prologue, font, and device description files;
+.I name
+is the name of the device, usually
+.BR ps .
+.
.TP
.BI \-g
Guess the page length.
+.
This generates PostScript code that guesses the page length.
+.
The guess will be correct only if the imageable area is vertically
centered on the page.
+.
This option allows you to generate documents that can be printed
both on letter (8.5\(mu11) paper and on A4 paper without change.
+.
.TP
.B \-l
Print the document in landscape format.
+.
.TP
.B \-m
Turn manual feed on for the document.
+.
.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for prologue, font, and device description files;
-.I name
-is the name of the device, usually
-.BR ps .
+.BI \-p paper-size
+Set physical dimension of output medium.
+.
+This overrides the
+.B papersize
+and
+.B paperlength
+commands in the
+.B DESC
+file; it accepts the same arguments as the
+.B papersize
+command.
+.
.TP
.BI \-P prologue-file
Use the file
.I prologue-file
(in the font path) as the prologue instead of the default prologue file
.BR prologue .
+.
This option overrides the environment variable
.SM GROPS_PROLOGUE.
+.
.TP
.BI \-w n
Lines should be drawn using a thickness of
-.I n
+.IR n \~\c
thousandths of an em.
+If this option is not given, the line thickness defaults to 0.04\~em.
+.
.TP
.B \-v
Print the version number.
+.
+.
.SH USAGE
There are styles called
.BR R ,
@@ -184,7 +249,8 @@ There are styles called
.BR B ,
and
.B BI
-mounted at font positions 1 to 4.
+mounted at font positions 1 to\~4.
+.
The fonts are grouped into families
.BR A ,
.BR BM ,
@@ -193,245 +259,313 @@ The fonts are grouped into families
.BR HN ,
.BR N ,
.B P
-and
+and\~\c
.B T
having members in each of these styles:
+.
.de FT
.if '\\*(.T'ps' .ft \\$1
..
+.
+.RS
.TP
.B AR
.FT AR
AvantGarde-Book
.FT
+.
.TP
.B AI
.FT AI
AvantGarde-BookOblique
.FT
+.
.TP
.B AB
.FT AB
AvantGarde-Demi
.FT
+.
.TP
.B ABI
.FT ABI
AvantGarde-DemiOblique
.FT
+.
.TP
.B BMR
.FT BMR
Bookman-Light
.FT
+.
.TP
.B BMI
.FT BMI
Bookman-LightItalic
.FT
+.
.TP
.B BMB
.FT BMB
Bookman-Demi
.FT
+.
.TP
.B BMBI
.FT BMBI
Bookman-DemiItalic
.FT
+.
.TP
.B CR
.FT CR
Courier
.FT
+.
.TP
.B CI
.FT CI
Courier-Oblique
.FT
+.
.TP
.B CB
.FT CB
Courier-Bold
.FT
+.
.TP
.B CBI
.FT CBI
Courier-BoldOblique
.FT
+.
.TP
.B HR
.FT HR
Helvetica
.FT
+.
.TP
.B HI
.FT HI
Helvetica-Oblique
.FT
+.
.TP
.B HB
.FT HB
Helvetica-Bold
.FT
+.
.TP
.B HBI
.FT HBI
Helvetica-BoldOblique
.FT
+.
.TP
.B HNR
.FT HNR
Helvetica-Narrow
.FT
+.
.TP
.B HNI
.FT HNI
Helvetica-Narrow-Oblique
.FT
+.
.TP
.B HNB
.FT HNB
Helvetica-Narrow-Bold
.FT
+.
.TP
.B HNBI
.FT HNBI
Helvetica-Narrow-BoldOblique
.FT
+.
.TP
.B NR
.FT NR
NewCenturySchlbk-Roman
.FT
+.
.TP
.B NI
.FT NI
NewCenturySchlbk-Italic
.FT
+.
.TP
.B NB
.FT NB
NewCenturySchlbk-Bold
.FT
+.
.TP
.B NBI
.FT NBI
NewCenturySchlbk-BoldItalic
.FT
+.
.TP
.B PR
.FT PR
Palatino-Roman
.FT
+.
.TP
.B PI
.FT PI
Palatino-Italic
.FT
+.
.TP
.B PB
.FT PB
Palatino-Bold
.FT
+.
.TP
.B PBI
.FT PBI
Palatino-BoldItalic
.FT
+.
.TP
.B TR
.FT TR
Times-Roman
.FT
+.
.TP
.B TI
.FT TI
Times-Italic
.FT
+.
.TP
.B TB
.FT TB
Times-Bold
.FT
+.
.TP
.B TBI
.FT TBI
Times-BoldItalic
.FT
+.RE
+.
.LP
There is also the following font which is not a member of a family:
+.
+.RS
.TP
.B ZCMI
.FT ZCMI
ZapfChancery-MediumItalic
.FT
+.RE
+.
.LP
There are also some special fonts called
.B SS
-and
+and\~\c
.BR S .
+.
Zapf Dingbats is available as
.BR ZD
and a reversed version of ZapfDingbats (with symbols pointing in the opposite
direction) is available as
.BR ZDR ;
most characters in these fonts are unnamed and must be accessed using
-.BR \eN .
+.BR \[rs]N .
+.
+.LP
+The default color for
+.B \[rs]m
+and
+.B \[rs]M
+is black; for colors defined in the `rgb' color space,
+.B setrgbcolor
+is used, for `cmy' and `cmyk'
+.BR setcmykcolor ,
+and for `gray'
+.BR setgray .
+.
.LP
.B grops
-understands various X commands produced using the
-.B \eX
+understands various X\~commands produced using the
+.B \[rs]X
escape sequence;
.B grops
will only interpret commands that begin with a
.B ps:
tag.
+.
.TP
-.BI \eX'ps:\ exec\ code '
+.BI \[rs]X'ps:\ exec\ code '
This executes the arbitrary PostScript commands in
.IR code .
+.
The PostScript currentpoint will be set to the position of the
-.B \eX
+.B \[rs]X
command before executing
.IR code .
+.
The origin will be at the top left corner of the page,
-and y coordinates will increase down the page.
-A procedure
+and y\~coordinates will increase down the page.
+.
+A procedure\~\c
.B u
will be defined that converts groff units
to the coordinate system in effect.
+.
For example,
+.
.RS
.IP
.B
\&.nr x 1i
.br
.B
-\eX'ps: exec \enx u 0 rlineto stroke'
+\[rs]X'ps: exec \[rs]nx u 0 rlineto stroke'
.br
.RE
+.
.IP
will draw a horizontal line one inch long.
+.
.I code
may make changes to the graphics state,
but any changes will persist only to the
end of the page.
+.
A dictionary containing the definitions specified by the
.B def
and
.B mdef
will be on top of the dictionary stack.
+.
If your code adds definitions to this dictionary,
you should allocate space for them using
-.BI \eX'ps\ mdef \ n '\fR.
+.BI \[rs]X'ps\ mdef \ n '\fR.
+.
Any definitions will persist only until the end of the page.
+.
If you use the
-.B \eY
+.B \[rs]Y
escape sequence with an argument that names a macro,
.I code
can extend over multiple lines.
+.
For example,
+.
.RS
.IP
.nf
@@ -439,63 +573,74 @@ For example,
\&.nr x 1i
\&.de y
\&ps: exec
-\&\enx u 0 rlineto
+\&\[rs]nx u 0 rlineto
\&stroke
\&..
-\&\eYy
+\&\[rs]Yy
.fi
.ft R
+.
.LP
is another way to draw a horizontal line one inch long.
.RE
+.
.TP
-.BI \eX'ps:\ file\ name '
+.BI \[rs]X'ps:\ file\ name '
This is the same as the
.B exec
command except that the PostScript code is read from file
.IR name .
+.
.TP
-.BI \eX'ps:\ def\ code '
+.BI \[rs]X'ps:\ def\ code '
Place a PostScript definition contained in
.I code
in the prologue.
+.
There should be at most one definition per
-.B \eX
+.B \[rs]X
command.
+.
Long definitions can be split over several
-.B \eX
+.B \[rs]X
commands;
all the
.I code
arguments are simply joined together separated by newlines.
+.
The definitions are placed in a dictionary which is automatically
pushed on the dictionary stack when an
.B exec
command is executed.
+.
If you use the
-.B \eY
+.B \[rs]Y
escape sequence with an argument that names a macro,
.I code
can extend over multiple lines.
+.
.TP
-.BI \eX'ps:\ mdef\ n\ code '
+.BI \[rs]X'ps:\ mdef\ n\ code '
Like
.BR def ,
except that
.I code
may contain up to
-.I n
+.IR n \~\c
definitions.
+.
.B grops
needs to know how many definitions
.I code
contains
so that it can create an appropriately sized PostScript dictionary
to contain them.
+.
.TP
-.BI \eX'ps:\ import\ file\ llx\ lly\ urx\ ury\ width\ \fR[\fP\ height\ \fR]\fP '
+.BI \[rs]X'ps:\ import\ file\ llx\ lly\ urx\ ury\ width\ \fR[\fP\ height\ \fR]\fP '
Import a PostScript graphic from
.IR file .
+.
The arguments
.IR llx ,
.IR lly ,
@@ -507,26 +652,29 @@ coordinate system; they should all be integers;
.I llx
and
.I lly
-are the x and y coordinates of the lower left
+are the x and y\~coordinates of the lower left
corner of the graphic;
.I urx
and
.I ury
-are the x and y coordinates of the upper right corner of the graphic;
+are the x and y\~coordinates of the upper right corner of the graphic;
.I width
and
.I height
are integers that give the desired width and height in groff
units of the graphic.
+.
The graphic will be scaled so that it has this width and height
and translated so that the lower left corner of the graphic is
located at the position associated with
-.B \eX
+.B \[rs]X
command.
+.
If the height argument is omitted it will be scaled uniformly in the
-x and y directions so that it has the specified width.
+x and y\~directions so that it has the specified width.
+.
Note that the contents of the
-.B \eX
+.B \[rs]X
command are not interpreted by
.BR troff ;
so vertical space for the graphic is not automatically added,
@@ -535,6 +683,7 @@ and the
and
.I height
arguments are not allowed to have attached scaling indicators.
+.
If the PostScript file complies with the Adobe Document Structuring
Conventions and contains a
.B %%BoundingBox
@@ -542,6 +691,7 @@ comment, then the bounding box can be automatically
extracted from within groff by using the
.B psbb
request.
+.
.RS
.LP
The
@@ -551,10 +701,11 @@ macros (which are automatically loaded when
is run by the groff command) include a
.B PSPIC
macro which allows a picture to be easily imported.
+.
This has the format
.IP
-\&\fB.PSPIC\fP [ \fB\-L\fP | \fB-R\fP | \fB\-I\fP \fIn\fP ]\ \"
-\fI\|file\fP [ \fIwidth\fP [ \fIheight\fP ]]
+\&\fB.PSPIC\fP [\fB\-L\fP|\fB-R\fP|\fB\-I\fP \fIn\fP]\ \fI\|file\fP [\fIwidth\fP [\fIheight\fP]]
+.
.LP
.I file
is the name of the file containing the illustration;
@@ -562,42 +713,49 @@ is the name of the file containing the illustration;
and
.I height
give the desired width and height of the graphic.
+.
The
.I width
and
.I height
arguments may have scaling indicators attached;
-the default scaling indicator is
+the default scaling indicator is\~\c
.BR i .
+.
This macro will scale the graphic uniformly
-in the x and y directions so that it is no more than
+in the x and y\~directions so that it is no more than
.I width
wide
and
.I height
high.
+.
By default, the graphic will be horizontally centered.
+.
The
.BI \-L
and
.BI \-R
cause the graphic to be left-aligned and right-aligned
respectively.
+.
The
.B \-I
-option causes the graphic to be indented by
+option causes the graphic to be indented by\~\c
.IR n .
.RE
+.
.TP
-.B \eX'ps:\ invis'
+.B \[rs]X'ps:\ invis'
.br
.ns
.TP
-.B \eX'ps:\ endinvis'
+.B \[rs]X'ps:\ endinvis'
No output will be generated for text and drawing commands
that are bracketed with these
-.B \eX
+.B \[rs]X
commands.
+.
These commands are intended for use when output from
.B troff
will be previewed before being processed with
@@ -605,71 +763,94 @@ will be previewed before being processed with
if the previewer is unable to display certain characters
or other constructs, then other substitute characters or constructs
can be used for previewing by bracketing them with these
-.B \eX
+.B \[rs]X
commands.
+.
.RS
.LP
For example,
.B gxditview
is not able to display a proper
-.B \e(em
+.B \[rs](em
character because the standard X11 fonts do not provide it;
this problem can be overcome by executing the following
request
+.
.IP
.ft B
.nf
-\&.char \e(em \eX'ps: invis'\e
-\eZ'\ev'-.25m'\eh'.05m'\eD'l .9m 0'\eh'.05m''\e
-\eX'ps: endinvis'\e(em
+\&.char \[rs](em \[rs]X'ps: invis'\[rs]
+\[rs]Z'\[rs]v'-.25m'\[rs]h'.05m'\[rs]D'l .9m 0'\[rs]h'.05m''\[rs]
+\[rs]X'ps: endinvis'\[rs](em
.ft
.fi
+.
.LP
In this case,
.B gxditview
will be unable to display the
-.B \e(em
+.B \[rs](em
character and will draw the line,
whereas
.B grops
will print the
-.B \e(em
+.B \[rs](em
character
and ignore the line.
.RE
+.
.LP
The input to
.B grops
must be in the format output by
.BR @g@troff (@MAN1EXT@).
+.
This is described in
.BR groff_out (@MAN5EXT@).
+.
In addition the device and font description files for the device used
must meet certain requirements.
+.
The device and font description files supplied for
.B ps
device meet all these requirements.
+.
.BR afmtodit (@MAN1EXT@)
can be used to create font files from AFM files.
-The resolution must be an integer multiple of 72 times the
+.
+The resolution must be an integer multiple of\~72 times the
.BR sizescale .
+.
The
.B ps
device uses a resolution of 72000 and a sizescale of 1000.
+.
The device description file should contain a command
.IP
.BI paperlength\ n
.LP
which says that output should be generated which is suitable for
printing on a page whose length is
-.I n
+.IR n \~\c
machine units.
+.
+Common values are 792000 for letter paper and 841890 for paper in A4 format.
+.
+Alternatively, it can contain
+.IP
+.BI papersize\ string
+.LP
+to specify a paper size; see
+.BR groff_font (@MAN5EXT@)
+for more information.
+.
Each font description file must contain a command
.IP
.BI internalname\ psname
.LP
which says that the PostScript name of the font is
.IR psname .
+.
It may also contain a command
.IP
.BI encoding\ enc_file
@@ -688,36 +869,48 @@ is the PostScript name of the character,
and
.I code
is its position in the encoding expressed as a decimal integer.
+.
+Lines starting with
+.B #
+and blank lines are ignored.
+.
The code for each character given in the font file must correspond
to the code for the character in encoding file, or to the code in the default
encoding for the font if the PostScript font is not to be reencoded.
+.
This code can be used with the
-.B \eN
+.B \[rs]N
escape sequence in
.B troff
to select the character,
even if the character does not have a groff name.
+.
Every character in the font file must exist in the PostScript font, and
the widths given in the font file must match the widths used
in the PostScript font.
+.
.B grops
will assume that a character with a groff name of
.B space
is blank (makes no marks on the page);
it can make use of such a character to generate more efficient and
compact PostScript output.
+.
.LP
.B grops
can automatically include the downloadable fonts necessary
to print the document.
+.
Any downloadable fonts which should, when required, be included by
.B grops
must be listed in the file
.BR @FONTDIR@/devps/download ;
this should consist of lines of the form
+.
.IP
.I
-font filename
+font filename
+.
.LP
where
.I font
@@ -732,9 +925,12 @@ fields may be separated by tabs or spaces;
.I filename
will be searched for using the same mechanism that is used
for groff font metric files.
+.
The
.B download
-file itself will also be searched for using this mechanism.
+file itself will also be searched for using this mechanism;
+currently, only the first found file in the font path is used.
+.
.LP
If the file containing a downloadable font or imported document
conforms to the Adobe Document Structuring Conventions,
@@ -742,11 +938,14 @@ then
.B grops
will interpret any comments in the files sufficiently to ensure that its
own output is conforming.
+.
It will also supply any needed font resources that are listed in the
.B download
file
as well as any needed file resources.
+.
It is also able to handle inter-resource dependencies.
+.
For example, suppose that you have a downloadable font called Garamond,
and also a downloadable font called Garamond-Outline
which depends on Garamond
@@ -754,12 +953,14 @@ which depends on Garamond
and change the PaintType),
then it is necessary for Garamond to be appear before Garamond-Outline
in the PostScript document.
+.
.B grops
will handle this automatically
provided that the downloadable font file for Garamond-Outline
indicates its dependence on Garamond by means of
the Document Structuring Conventions,
for example by beginning with the following lines
+.
.IP
.B
%!PS-Adobe-3.0 Resource-Font
@@ -772,19 +973,23 @@ for example by beginning with the following lines
.br
.B
%%IncludeResource: font Garamond
+.
.LP
In this case both Garamond and Garamond-Outline would need to be listed
in the
.B download
file.
+.
A downloadable font should not include its own name in a
.B %%DocumentSuppliedResources
comment.
+.
.LP
.B grops
will not interpret
.B %%DocumentFonts
comments.
+.
The
.BR %%DocumentNeededResources ,
.BR %%DocumentSuppliedResources ,
@@ -802,6 +1007,38 @@ and
.BR %%EndFont
comments)
should be used.
+.
+.
+.SS TrueType fonts
+TrueType fonts can be used with
+.B grops
+if converted first to
+.B "Type 42"
+format, an especial PostScript wrapper equivalent to the
+PFA format mentioned in
+.BR pfbtops (@MAN1EXT@).
+There are several different methods to generate a type42
+wrapper and most of them involve the use of a PostScript
+interpreter such as Ghostscript \(em see
+.BR gs (1).
+Yet, the easiest method involves the use of the application
+.BR ttftot42 .
+This program uses
+.BR freetype (3)
+(version 1.3.1) to generate type42
+font wrappers and well-formed AFM files that can be fed to
+the
+.BR afmtodit (@MAN1EXT@)
+script to create appropriate metric files.
+The resulting font wrappers should be added to the
+.B download
+file.
+.B ttftot42
+source code can be downloaded from
+.URL ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/ \
+ ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/ .
+.
+.
.SH ENVIRONMENT
.TP
.SM
@@ -814,29 +1051,37 @@ will use the file
.I foo
(in the font path) instead of the default prologue file
.BR prologue .
+.
The option
.B \-P
overrides this environment variable.
+.
+.
.SH FILES
.Tp \w'\fB@FONTDIR@/devps/download'u+2n
.B @FONTDIR@/devps/DESC
Device description file.
+.
.TP
.BI @FONTDIR@/devps/ F
Font description file for font
.IR F .
+.
.TP
.B @FONTDIR@/devps/download
List of downloadable fonts.
+.
.TP
.B @FONTDIR@/devps/text.enc
Encoding used for text fonts.
+.
.TP
.B @MACRODIR@/ps.tmac
Macros for use with
.BR grops ;
automatically loaded by
.BR troffrc
+.
.TP
.B @MACRODIR@/pspic.tmac
Definition of
@@ -844,13 +1089,17 @@ Definition of
macro,
automatically loaded by
.BR ps.tmac .
+.
.TP
.B @MACRODIR@/psold.tmac
Macros to disable use of characters not present in older
PostScript printers (e.g. `eth' or `thorn').
+.
.TP
.BI /tmp/grops XXXXXX
Temporary file.
+.
+.
.SH "SEE ALSO"
.BR afmtodit (@MAN1EXT@),
.BR groff (@MAN1EXT@),
diff --git a/contrib/groff/src/devices/grops/ps.cc b/contrib/groff/src/devices/grops/ps.cc
index a467f04..47d1f65 100644
--- a/contrib/groff/src/devices/grops/ps.cc
+++ b/contrib/groff/src/devices/grops/ps.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -23,6 +23,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "stringclass.h"
#include "cset.h"
#include "nonposix.h"
+#include "paper.h"
#include "ps.h"
#include <time.h>
@@ -42,6 +43,7 @@ static int linewidth = -1;
// Non-zero means generate PostScript code that guesses the paper
// length using the imageable area.
static int guess_flag = 0;
+static double user_paper_length = 0;
// Non-zero if -b was specified on the command line.
static int bflag = 0;
@@ -319,7 +321,7 @@ ps_output &ps_output::put_fix_number(int i)
ps_output &ps_output::put_float(double d)
{
char buf[128];
- sprintf(buf, "%.4f", d);
+ sprintf(buf, "%.3g", d);
int len = strlen(buf);
if (col > 0 && col + len + need_space > max_line_length) {
putc('\n', fp);
@@ -354,6 +356,26 @@ ps_output &ps_output::put_symbol(const char *s)
return *this;
}
+ps_output &ps_output::put_color(unsigned int c)
+{
+ char buf[128];
+ sprintf(buf, "%.3g", double(c) / color::MAX_COLOR_VAL);
+ int len = strlen(buf);
+ if (col > 0 && col + len + need_space > max_line_length) {
+ putc('\n', fp);
+ col = 0;
+ need_space = 0;
+ }
+ if (need_space) {
+ putc(' ', fp);
+ col++;
+ }
+ fputs(buf, fp);
+ col += len;
+ need_space = 1;
+ return *this;
+}
+
ps_output &ps_output::put_literal_symbol(const char *s)
{
int len = strlen(s);
@@ -476,13 +498,13 @@ class ps_printer : public printer {
int sbuf_space_code;
int sbuf_kern;
style sbuf_style;
+ color sbuf_color; // the current PS color
style output_style;
int output_hpos;
int output_vpos;
int output_draw_point_size;
int line_thickness;
int output_line_thickness;
- int fill;
unsigned char output_space_code;
enum { MAX_DEFINED_STYLES = 50 };
style defined_styles[MAX_DEFINED_STYLES];
@@ -504,13 +526,15 @@ class ps_printer : public printer {
void do_file(char *, const environment *);
void do_invis(char *, const environment *);
void do_endinvis(char *, const environment *);
- void set_line_thickness(const environment *);
- void fill_path();
+ void set_line_thickness_and_color(const environment *);
+ void fill_path(const environment *);
void encode_fonts();
void define_encoding(const char *, int);
void reencode_font(ps_font *);
+ void set_color(color *c, int fill = 0);
+
public:
- ps_printer();
+ ps_printer(double);
~ps_printer();
void set_char(int i, font *f, const environment *env, int w, const char *name);
void draw(int code, int *p, int np, const environment *env);
@@ -521,14 +545,14 @@ public:
void end_of_line();
};
-ps_printer::ps_printer()
+// `pl' is in inches
+ps_printer::ps_printer(double pl)
: out(0, MAX_LINE_LENGTH),
pages_output(0),
sbuf_len(0),
output_hpos(-1),
output_vpos(-1),
line_thickness(-1),
- fill(FILL_MAX + 1),
ndefined_styles(0),
next_encoding_index(0),
ndefs(0),
@@ -553,9 +577,12 @@ ps_printer::ps_printer()
res = r;
out.set_fixed_point(point);
space_char_index = font::name_to_index("space");
- paper_length = font::paperlength;
+ if (pl == 0)
+ paper_length = font::paperlength;
+ else
+ paper_length = int(pl * font::res + 0.5);
if (paper_length == 0)
- paper_length = 11*font::res;
+ paper_length = 11 * font::res;
equalise_spaces = font::res >= 72000;
}
@@ -590,7 +617,8 @@ void ps_printer::set_char(int i, font *f, const environment *env, int w, const c
if (sbuf_len > 0) {
if (sbuf_len < SBUF_SIZE
&& sty == sbuf_style
- && sbuf_vpos == env->vpos) {
+ && sbuf_vpos == env->vpos
+ && sbuf_color == *env->col) {
if (sbuf_end_hpos == env->hpos) {
sbuf[sbuf_len++] = code;
sbuf_end_hpos += w + sbuf_kern;
@@ -645,6 +673,8 @@ void ps_printer::set_char(int i, font *f, const environment *env, int w, const c
sbuf_space_width = 0;
sbuf_space_count = sbuf_space_diff_count = 0;
sbuf_kern = 0;
+ if (sbuf_color != *env->col)
+ set_color(env->col);
}
static char *make_encoding_name(int encoding_index)
@@ -693,7 +723,8 @@ void ps_printer::define_encoding(const char *encoding, int encoding_index)
a_delete vec[i];
}
}
- out.put_delimiter(']').put_symbol("def");
+ out.put_delimiter(']')
+ .put_symbol("def");
}
void ps_printer::reencode_font(ps_font *f)
@@ -759,18 +790,60 @@ void ps_printer::set_style(const style &sty)
int h = sty.height == 0 ? sty.point_size : sty.height;
h *= font::res/(72*font::sizescale);
int c = int(h*tan(radians(sty.slant)) + .5);
- out.put_fix_number(c).put_fix_number(h).put_literal_symbol(psname)
+ out.put_fix_number(c)
+ .put_fix_number(h)
+ .put_literal_symbol(psname)
.put_symbol("MF");
}
else {
- out.put_literal_symbol(psname).put_symbol("SF");
+ out.put_literal_symbol(psname)
+ .put_symbol("SF");
}
defined_styles[ndefined_styles++] = sty;
}
+void ps_printer::set_color(color *col, int fill)
+{
+ sbuf_color = *col;
+ unsigned int components[4];
+ char s[3];
+ color_scheme cs = col->get_components(components);
+ s[0] = fill ? 'F' : 'C';
+ s[2] = 0;
+ switch (cs) {
+ case DEFAULT: // black
+ out.put_symbol("0");
+ s[1] = 'g';
+ break;
+ case RGB:
+ out.put_color(Red)
+ .put_color(Green)
+ .put_color(Blue);
+ s[1] = 'r';
+ break;
+ case CMY:
+ col->get_cmyk(&Cyan, &Magenta, &Yellow, &Black);
+ // fall through
+ case CMYK:
+ out.put_color(Cyan)
+ .put_color(Magenta)
+ .put_color(Yellow)
+ .put_color(Black);
+ s[1] = 'k';
+ break;
+ case GRAY:
+ out.put_color(Gray);
+ s[1] = 'g';
+ break;
+ }
+ out.put_symbol(s);
+}
+
void ps_printer::set_space_code(unsigned char c)
{
- out.put_literal_symbol("SC").put_number(c).put_symbol("def");
+ out.put_literal_symbol("SC")
+ .put_number(c)
+ .put_symbol("def");
}
void ps_printer::end_of_line()
@@ -863,39 +936,43 @@ void ps_printer::flush_sbuf()
sbuf_len = 0;
}
-
-void ps_printer::set_line_thickness(const environment *env)
+void ps_printer::set_line_thickness_and_color(const environment *env)
{
if (line_thickness < 0) {
if (output_draw_point_size != env->size) {
// we ought to check for overflow here
int lw = ((font::res/(72*font::sizescale))*linewidth*env->size)/1000;
- out.put_fix_number(lw).put_symbol("LW");
+ out.put_fix_number(lw)
+ .put_symbol("LW");
output_draw_point_size = env->size;
output_line_thickness = -1;
}
}
else {
if (output_line_thickness != line_thickness) {
- out.put_fix_number(line_thickness).put_symbol("LW");
+ out.put_fix_number(line_thickness)
+ .put_symbol("LW");
output_line_thickness = line_thickness;
output_draw_point_size = -1;
}
}
+ if (sbuf_color != *env->col)
+ set_color(env->col);
}
-void ps_printer::fill_path()
+void ps_printer::fill_path(const environment *env)
{
- if (fill > FILL_MAX)
- out.put_symbol("BL");
+ if (sbuf_color == *env->fill)
+ out.put_symbol("FL");
else
- out.put_float(transform_fill(fill)).put_symbol("FL");
+ set_color(env->fill, 1);
}
void ps_printer::draw(int code, int *p, int np, const environment *env)
{
if (invis_count > 0)
return;
+ flush_sbuf();
int fill_flag = 0;
switch (code) {
case 'C':
@@ -911,11 +988,10 @@ void ps_printer::draw(int code, int *p, int np, const environment *env)
.put_fix_number(env->vpos)
.put_fix_number(p[0]/2)
.put_symbol("DC");
- if (fill_flag) {
- fill_path();
- }
+ if (fill_flag)
+ fill_path(env);
else {
- set_line_thickness(env);
+ set_line_thickness_and_color(env);
out.put_symbol("ST");
}
break;
@@ -924,7 +1000,7 @@ void ps_printer::draw(int code, int *p, int np, const environment *env)
error("2 arguments required for line");
break;
}
- set_line_thickness(env);
+ set_line_thickness_and_color(env);
out.put_fix_number(p[0] + env->hpos)
.put_fix_number(p[1] + env->vpos)
.put_fix_number(env->hpos)
@@ -944,11 +1020,10 @@ void ps_printer::draw(int code, int *p, int np, const environment *env)
.put_fix_number(env->hpos + p[0]/2)
.put_fix_number(env->vpos)
.put_symbol("DE");
- if (fill_flag) {
- fill_path();
- }
+ if (fill_flag)
+ fill_path(env);
else {
- set_line_thickness(env);
+ set_line_thickness_and_color(env);
out.put_symbol("ST");
}
break;
@@ -973,11 +1048,10 @@ void ps_printer::draw(int code, int *p, int np, const environment *env)
.put_fix_number(p[i+1])
.put_symbol("RL");
out.put_symbol("CL");
- if (fill_flag) {
- fill_path();
- }
+ if (fill_flag)
+ fill_path(env);
else {
- set_line_thickness(env);
+ set_line_thickness_and_color(env);
out.put_symbol("ST");
}
break;
@@ -1015,7 +1089,7 @@ void ps_printer::draw(int code, int *p, int np, const environment *env)
out.put_fix_number(p[np - 2] - p[np - 2]/2)
.put_fix_number(p[np - 1] - p[np - 1]/2)
.put_symbol("RL");
- set_line_thickness(env);
+ set_line_thickness_and_color(env);
out.put_symbol("ST");
}
break;
@@ -1025,7 +1099,7 @@ void ps_printer::draw(int code, int *p, int np, const environment *env)
error("4 arguments required for arc");
break;
}
- set_line_thickness(env);
+ set_line_thickness_and_color(env);
double c[2];
if (adjust_arc_center(p, c))
out.put_fix_number(env->hpos + int(c[0]))
@@ -1043,60 +1117,47 @@ void ps_printer::draw(int code, int *p, int np, const environment *env)
}
break;
case 't':
- {
- if (np == 0) {
- line_thickness = -1;
- }
- else {
- // troff gratuitously adds an extra 0
- if (np != 1 && np != 2) {
- error("0 or 1 argument required for thickness");
- break;
- }
- line_thickness = p[0];
- }
- break;
- }
- case 'f':
- {
+ if (np == 0)
+ line_thickness = -1;
+ else {
+ // troff gratuitously adds an extra 0
if (np != 1 && np != 2) {
- error("1 argument required for fill");
+ error("0 or 1 argument required for thickness");
break;
}
- fill = p[0];
- if (fill < 0 || fill > FILL_MAX) {
- // This means fill with the current color.
- fill = FILL_MAX + 1;
- }
- break;
- }
+ line_thickness = p[0];
+ }
+ break;
default:
error("unrecognised drawing command `%1'", char(code));
break;
}
-
output_hpos = output_vpos = -1;
}
-
void ps_printer::begin_page(int n)
{
- out.begin_comment("Page:").comment_arg(i_to_a(n));
- out.comment_arg(i_to_a(++pages_output)).end_comment();
+ out.begin_comment("Page:")
+ .comment_arg(i_to_a(n));
+ out.comment_arg(i_to_a(++pages_output))
+ .end_comment();
output_style.f = 0;
output_space_code = 32;
output_draw_point_size = -1;
output_line_thickness = -1;
output_hpos = output_vpos = -1;
ndefined_styles = 0;
- out.simple_comment("BeginPageSetup");
- out.put_symbol("BP");
- out.simple_comment("EndPageSetup");
+ out.simple_comment("BeginPageSetup")
+ .put_symbol("BP")
+ .simple_comment("EndPageSetup");
+ if (sbuf_color != default_color)
+ set_color(&sbuf_color);
}
void ps_printer::end_page(int)
{
flush_sbuf();
+ set_color(&default_color);
out.put_symbol("EP");
if (invis_count != 0) {
error("missing `endinvis' command");
@@ -1111,9 +1172,9 @@ font *ps_printer::make_font(const char *nm)
ps_printer::~ps_printer()
{
- out.simple_comment("Trailer");
- out.put_symbol("end");
- out.simple_comment("EOF");
+ out.simple_comment("Trailer")
+ .put_symbol("end")
+ .simple_comment("EOF");
if (fseek(tempfp, 0L, 0) < 0)
fatal("fseek on temporary file failed");
fputs("%!PS-Adobe-", stdout);
@@ -1142,8 +1203,12 @@ ps_printer::~ps_printer()
rm.need_font(psf->get_internal_name());
}
rm.print_header_comments(out);
- out.begin_comment("Pages:").comment_arg(i_to_a(pages_output)).end_comment();
- out.begin_comment("PageOrder:").comment_arg("Ascend").end_comment();
+ out.begin_comment("Pages:")
+ .comment_arg(i_to_a(pages_output))
+ .end_comment();
+ out.begin_comment("PageOrder:")
+ .comment_arg("Ascend")
+ .end_comment();
#if 0
fprintf(out.get_file(), "%%%%DocumentMedia: () %g %g 0 () ()\n",
font::paperwidth*72.0/font::res,
@@ -1164,7 +1229,8 @@ ps_printer::~ps_printer()
out.simple_comment("BeginSetup");
}
rm.document_setup(out);
- out.put_symbol(dict_name).put_symbol("begin");
+ out.put_symbol(dict_name)
+ .put_symbol("begin");
if (ndefs > 0)
ndefs += DEFS_DICT_SPARE;
out.put_literal_symbol(defs_dict_name)
@@ -1184,8 +1250,12 @@ ps_printer::~ps_printer()
out.special(defs.contents());
out.put_symbol("end");
if (ncopies != 1)
- out.put_literal_symbol("#copies").put_number(ncopies).put_symbol("def");
- out.put_literal_symbol("RES").put_number(res).put_symbol("def");
+ out.put_literal_symbol("#copies")
+ .put_number(ncopies)
+ .put_symbol("def");
+ out.put_literal_symbol("RES")
+ .put_number(res)
+ .put_symbol("def");
out.put_literal_symbol("PL");
if (guess_flag)
out.put_symbol("PLG");
@@ -1246,7 +1316,7 @@ void ps_printer::special(char *arg, const environment *env, char type)
for (; *p != '\0' && *p != ' ' && *p != '\n'; p++)
;
if (*command == '\0') {
- error("X command without `ps:' tag ignored");
+ error("empty X command ignored");
return;
}
for (unsigned int i = 0; i < sizeof(proc_table)/sizeof(proc_table[0]); i++)
@@ -1474,7 +1544,7 @@ void ps_printer::do_endinvis(char *, const environment *)
printer *make_printer()
{
- return new ps_printer;
+ return new ps_printer(user_paper_length);
}
static void usage(FILE *stream);
@@ -1491,21 +1561,23 @@ int main(int argc, char **argv)
{ "version", no_argument, 0, 'v' },
{ NULL, 0, 0, 0 }
};
- while ((c = getopt_long(argc, argv, "F:P:glmc:w:vb:", long_options, NULL))
+ while ((c = getopt_long(argc, argv, "b:c:F:glmp:P:vw:", long_options, NULL))
!= EOF)
switch(c) {
- case 'v':
- {
- printf("GNU grops (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
+ case 'b':
+ // XXX check this
+ broken_flags = atoi(optarg);
+ bflag = 1;
+ break;
case 'c':
if (sscanf(optarg, "%d", &ncopies) != 1 || ncopies <= 0) {
error("bad number of copies `%s'", optarg);
ncopies = 1;
}
break;
+ case 'F':
+ font::command_line_font_dir(optarg);
+ break;
case 'g':
guess_flag = 1;
break;
@@ -1515,8 +1587,9 @@ int main(int argc, char **argv)
case 'm':
manual_feed_flag = 1;
break;
- case 'F':
- font::command_line_font_dir(optarg);
+ case 'p':
+ if (!font::scan_papersize(optarg, 0, &user_paper_length, 0))
+ error("invalid custom paper size `%1' ignored", optarg);
break;
case 'P':
env = "GROPS_PROLOGUE";
@@ -1526,17 +1599,16 @@ int main(int argc, char **argv)
if (putenv(strsave(env.contents())))
fatal("putenv failed");
break;
+ case 'v':
+ printf("GNU grops (groff) version %s\n", Version_string);
+ exit(0);
+ break;
case 'w':
if (sscanf(optarg, "%d", &linewidth) != 1 || linewidth < 0) {
error("bad linewidth `%1'", optarg);
linewidth = -1;
}
break;
- case 'b':
- // XXX check this
- broken_flags = atoi(optarg);
- bflag = 1;
- break;
case CHAR_MAX + 1: // --help
usage(stdout);
exit(0);
diff --git a/contrib/groff/src/devices/grops/ps.h b/contrib/groff/src/devices/grops/ps.h
index 6e78597..0e149fc 100644
--- a/contrib/groff/src/devices/grops/ps.h
+++ b/contrib/groff/src/devices/grops/ps.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -26,6 +26,7 @@ public:
ps_output &put_fix_number(int);
ps_output &put_float(double);
ps_output &put_symbol(const char *);
+ ps_output &put_color(unsigned int);
ps_output &put_literal_symbol(const char *);
ps_output &set_fixed_point(int);
ps_output &simple_comment(const char *);
diff --git a/contrib/groff/src/devices/grops/psrm.cc b/contrib/groff/src/devices/grops/psrm.cc
index 5f232c0..f2177da 100644
--- a/contrib/groff/src/devices/grops/psrm.cc
+++ b/contrib/groff/src/devices/grops/psrm.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -389,7 +389,7 @@ static int ps_get_line(char *buf, FILE *fp)
int err = 0;
while (c != '\r' && c != '\n' && c != EOF) {
if ((c < 0x1b && !white_space(c)) || c == 0x7f)
- error("illegal input character code %1", int(c));
+ error("invalid input character code %1", int(c));
else if (i < PS_LINE_MAX)
buf[i++] = c;
else if (!err) {
@@ -724,6 +724,32 @@ int read_one_of(const char **ptr, const char **s, int n)
return -1;
}
+void skip_possible_newline(const char *ptr, FILE *fp, FILE *outfp)
+{
+ int c = getc(fp);
+ if (c == '\r') {
+ current_lineno++;
+ if (outfp)
+ putc(c, outfp);
+ int cc = getc(fp);
+ if (cc != '\n') {
+ if (cc != EOF)
+ ungetc(cc, fp);
+ }
+ else {
+ if (outfp)
+ putc(cc, outfp);
+ }
+ }
+ else if (c == '\n') {
+ current_lineno++;
+ if (outfp)
+ putc(c, outfp);
+ }
+ else if (c != EOF)
+ ungetc(c, fp);
+}
+
int resource_manager::do_begin_data(const char *ptr, int, FILE *fp,
FILE *outfp)
{
@@ -790,6 +816,7 @@ int resource_manager::do_begin_data(const char *ptr, int, FILE *fp,
}
} while ((unit == Bytes ? bytecount : linecount) < numberof);
}
+ skip_possible_newline(ptr, fp, outfp);
char buf[PS_LINE_MAX + 2];
if (!ps_get_line(buf, fp)) {
error("missing %%%%EndData line");
@@ -826,11 +853,12 @@ int resource_manager::do_begin_binary(const char *ptr, int, FILE *fp,
if (cc != '\n')
current_lineno++;
if (cc != EOF)
- ungetc(c, fp);
+ ungetc(cc, fp);
}
else if (c == '\n')
current_lineno++;
}
+ skip_possible_newline(ptr, fp, outfp);
char buf[PS_LINE_MAX + 2];
if (!ps_get_line(buf, fp)) {
error("missing %%%%EndBinary line");
diff --git a/contrib/groff/src/devices/grotty/Makefile.sub b/contrib/groff/src/devices/grotty/Makefile.sub
index 91d3908..8802674 100644
--- a/contrib/groff/src/devices/grotty/Makefile.sub
+++ b/contrib/groff/src/devices/grotty/Makefile.sub
@@ -1,6 +1,6 @@
-PROG=grotty
+PROG=grotty$(EXEEXT)
MAN1=grotty.n
XLIBS=$(LIBDRIVER) $(LIBGROFF)
MLIB=$(LIBM)
-OBJS=tty.o
+OBJS=tty.$(OBJEXT)
CCSRCS=$(srcdir)/tty.cc
diff --git a/contrib/groff/src/devices/grotty/grotty.man b/contrib/groff/src/devices/grotty/grotty.man
index 4f23ca0..da5f944 100644
--- a/contrib/groff/src/devices/grotty/grotty.man
+++ b/contrib/groff/src/devices/grotty/grotty.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -16,22 +16,28 @@ versions, except that this permission notice may be included in
translations approved by the Free Software Foundation instead of in
the original English.
..
+.
+.
.TH GROTTY @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
.SH NAME
grotty \- groff driver for typewriter-like devices
+.
+.
.SH SYNOPSIS
.B grotty
[
-.B \-hfbuodBUv
+.B \-bBcdfhiouUv
] [
.BI \-F dir
] [
-.IR files \|.\|.\|.
+.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
@@ -49,6 +55,8 @@ or
.B \-Tutf8
option on ASCII based systems, and with
.B \-Tcp1047
+and
+.B \-Tutf8
on EBCDIC based hosts.
If no files are given,
.B grotty
@@ -60,21 +68,75 @@ will also cause
to read the standard input.
Output is written to the standard output.
.LP
-Normally
+By default,
.B grotty
-prints a bold character
+emits SGR escape sequences (from ISO 6429, also called ANSI color escapes)
+to change text attributes (bold, italic, colors).
+This makes it possible to have eight different \M[green]background\M[]
+and \m[red]foreground\m[] colors; additionally, bold and italic
+attributes can be used \f[BI]at the same time\f[] (by using the BI font).
+.LP
+The following colors are defined in
+.BR tty.tmac :
+black, white, red, green, blue, yellow, magenta, cyan.
+Unknown colors are mapped to the default color (which is dependent on the
+settings of the terminal; in most cases, this is black for the foreground
+and white for the background).
+.LP
+Use the
+.B \-c
+switch to revert to the old behaviour, printing a bold character
.I c
-using the sequence
+with the sequence
.RI ` c
.SM BACKSPACE
.IR c '
-and a italic character
+and an italic character
.I c
by the sequence
.RB ` _
.SM BACKSPACE
.IR c '.
-These sequences can be displayed on a terminal
+At the same time, color output is disabled.
+The same effect can be achieved by setting either the
+.B GROFF_NO_SGR
+environment variable or using the `sgr' X command (see below).
+.LP
+For SGR support, it is necessary to use the
+.B \-R
+option of
+.BR less (1)
+to disable the interpretation of
+.BR grotty 's
+old output format.
+Consequently, all programs which use
+.B less
+as the pager program have to pass this option to it.
+For
+.BR man (1)
+in particular, either add
+.B \-R
+to the
+.B $PAGER
+environment variable, e.g.\&
+.RS
+.LP
+.B PAGER="/usr/bin/less -R"
+.br
+.B export PAGER
+.RE
+.LP
+or use the
+.B \-P
+option of
+.B man
+to set the pager executable and its options, or modify the configuration
+file of
+.B man
+in a similar fashion.
+.LP
+.BR grotty 's
+old output format can be displayed on a terminal
by piping through
.BR ul (1).
Pagers such as
@@ -114,11 +176,58 @@ then it will be treated as a bold font.
The code field in the font description field gives the
code which will be used to output the character.
This code can also be used in the
-.B \eN
+.B \[rs]N
escape sequence in
.BR troff .
+.
+.
.SH OPTIONS
.TP
+.B \-b
+Suppress the use of overstriking for bold characters.
+Ignored if
+.B \-c
+isn't used.
+.
+.TP
+.B \-B
+Use only overstriking for bold-italic characters.
+Ignored if
+.B \-c
+isn't used.
+.
+.TP
+.B \-c
+Use
+.BR grotty 's
+old output format (see above).
+This also disables color output.
+.
+.TP
+.B \-d
+Ignore all
+.B \[rs]D
+commands.
+Without this
+.B grotty
+will render
+.B \[rs]D'l\|.\|.\|.\&'
+commands that have at least one zero argument
+(and so are either horizontal or vertical)
+using
+.BR \- ,
+.BR | ,
+and
+.B +
+characters.
+.
+.TP
+.B \-f
+Use form feeds in the output.
+A form feed will be output at the end of each page that has no output
+on its last line.
+.
+.TP
.BI \-F dir
Prepend directory
.IB dir /dev name
@@ -134,52 +243,69 @@ or
.B \-h
Use horizontal tabs in the output.
Tabs are assumed to be set every 8 columns.
+.
.TP
-.B \-f
-Use form feeds in the output.
-A form feed will be output at the end of each page that has no output
-on its last line.
+.B \-i
+Use escape sequences to set the italic text attribute instead of the
+underline attribute for italic fonts (`I' and `BI').
+Note that most terminals (including xterm) don't support this.
+Ignored if
+.B \-c
+is active.
+.
.TP
-.B \-b
-Suppress the use of overstriking for bold characters.
+.B \-o
+Suppress overstriking (other than for bold or underlined characters in
+case the old output format has been activated with
+.BR \-c ).
+.
.TP
.B \-u
Suppress the use of underlining for italic characters.
-.TP
-.B \-B
-Use only overstriking for bold-italic characters.
+Ignored if
+.B \-c
+isn't used.
+.
.TP
.B \-U
Use only underlining for bold-italic characters.
-.TP
-.B \-o
-Suppress overstriking (other than for bold or underlined characters).
-.TP
-.B \-d
-Ignore all
-.B \eD
-commands.
-Without this
-.B grotty
-will render
-.B \eD'l\|.\|.\|.'
-commands that have at least at least one zero argument
-(and so are either horizontal or vertical)
-using
-.BR \- ,
-.B |
-and
-.B +
-characters.
+Ignored if
+.B \-c
+isn't used.
+.
.TP
.B \-v
Print the version number.
+.
+.
+.SH USAGE
+.B grotty
+understands a single X command produced using the
+.B \[rs]X
+escape sequence.
+.TP
+.BI \[rs]X'tty:\ sgr\ n '
+If
+.I n
+is non-zero or missing, enable SGR output (this is the default), otherwise
+use the old drawing scheme for bold and underline.
+.
+.
+.SH ENVIRONMENT
+.TP
+.B GROFF_NO_SGR
+If set, the old drawing scheme for bold and underline (using the
+backspace character) is active.
+Colors are disabled.
+.
+.
.SH FILES
.TP
.B @FONTDIR@/devascii/DESC
Device description file for
.B ascii
device.
+.
.TP
.BI @FONTDIR@/devascii/ F
Font description file for font
@@ -187,11 +313,13 @@ Font description file for font
of
.B ascii
device.
+.
.TP
.B @FONTDIR@/devlatin1/DESC
Device description file for
.B latin1
device.
+.
.TP
.BI @FONTDIR@/devlatin1/ F
Font description file for font
@@ -199,11 +327,13 @@ Font description file for font
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
@@ -211,11 +341,13 @@ Font description file for font
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
@@ -223,10 +355,12 @@ Font description file for font
of
.B cp1047
device.
+.
.TP
.B @MACRODIR@/tty.tmac
Macros for use with
.BR grotty .
+.
.TP
.B @MACRODIR@/tty-char.tmac
Additional klugdey character definitions for use with
@@ -235,6 +369,8 @@ Additional klugdey character definitions for use with
Note that on EBCDIC hosts, only files for the
.B cp1047
device will be installed.
+.
+.
.SH BUGS
.LP
.B grotty
@@ -243,12 +379,22 @@ is intended only for simple documents.
There is no support for fractional horizontal or vertical motions.
.LP
There is no support for
-.B \eD
+.B \[rs]D
commands
other than horizontal and vertical lines.
.LP
-Characters above the first line (ie with a vertical position of 0)
+Characters above the first line (ie with a vertical position of\~0)
cannot be printed.
+.LP
+Color handling is different compared to
+.BR grops (@MAN1EXT@).
+.B \[rs]M
+doesn't set the fill color for closed graphic objects (which
+.B grotty
+doesn't support anyway) but changes the background color of the character
+cell, affecting all subsequent operations.
+.
+.
.SH "SEE ALSO"
.BR groff (@MAN1EXT@),
.BR @g@troff (@MAN1EXT@),
@@ -257,6 +403,7 @@ cannot be printed.
.BR groff_char (@MAN7EXT@),
.BR ul (1),
.BR more (1),
+.BR man (1),
.BR less (1)
.
.\" Local Variables:
diff --git a/contrib/groff/src/devices/grotty/tty.cc b/contrib/groff/src/devices/grotty/tty.cc
index d13adbf..81183b8 100644
--- a/contrib/groff/src/devices/grotty/tty.cc
+++ b/contrib/groff/src/devices/grotty/tty.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -23,6 +23,8 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
extern "C" const char *Version_string;
+#define putstring(s) fputs(s, stdout)
+
#ifndef SHRT_MIN
#define SHRT_MIN (-32768)
#endif
@@ -39,18 +41,42 @@ static int bold_flag = 1;
static int underline_flag = 1;
static int overstrike_flag = 1;
static int draw_flag = 1;
+static int italic_flag = 0;
+static int old_drawing_scheme = 0;
enum {
UNDERLINE_MODE = 0x01,
BOLD_MODE = 0x02,
VDRAW_MODE = 0x04,
HDRAW_MODE = 0x08,
- CU_MODE = 0x10
+ CU_MODE = 0x10,
+ COLOR_CHANGE = 0x20
};
// Mode to use for bold-underlining.
static unsigned char bold_underline_mode = BOLD_MODE|UNDERLINE_MODE;
+#ifndef IS_EBCDIC_HOST
+#define CSI "\033["
+#else
+#define CSI "\047["
+#endif
+
+// SGR handling (ISO 6429)
+#define SGR_BOLD CSI "1m"
+#define SGR_NO_BOLD CSI "22m"
+#define SGR_ITALIC CSI "3m"
+#define SGR_NO_ITALIC CSI "23m"
+#define SGR_UNDERLINE CSI "4m"
+#define SGR_NO_UNDERLINE CSI "24m"
+// many terminals can't handle `CSI 39 m' and `CSI 49 m' to reset
+// the foreground and bachground color, respectively; thus we use
+// `CSI 0 m' exclusively
+#define SGR_DEFAULT CSI "0m"
+
+#define TTY_MAX_COLORS 8
+#define DEFAULT_COLOR_IDX TTY_MAX_COLORS
+
class tty_font : public font {
tty_font(const char *);
unsigned char mode;
@@ -109,10 +135,13 @@ public:
short hpos;
unsigned int code;
unsigned char mode;
+ unsigned char back_color_idx;
+ unsigned char fore_color_idx;
void *operator new(size_t);
void operator delete(void *);
inline int draw_mode() { return mode & (VDRAW_MODE|HDRAW_MODE); }
- inline int order() { return mode & (VDRAW_MODE|HDRAW_MODE|CU_MODE); }
+ inline int order() {
+ return mode & (VDRAW_MODE|HDRAW_MODE|CU_MODE|COLOR_CHANGE); }
};
glyph *glyph::free_list = 0;
@@ -146,14 +175,26 @@ class tty_printer : public printer {
int nlines;
int cached_v;
int cached_vpos;
- void add_char(unsigned int, int, int, unsigned char);
+ unsigned char curr_fore_idx;
+ unsigned char curr_back_idx;
+ int is_underline;
+ int is_bold;
+ int cu_flag;
+ color tty_colors[TTY_MAX_COLORS];
+ void make_underline();
+ void make_bold(unsigned int);
+ unsigned char color_to_idx(color *col);
+ void add_char(unsigned int, int, int, color *, color *, unsigned char);
public:
tty_printer(const char *device);
~tty_printer();
void set_char(int, font *, const environment *, int, const char *name);
void draw(int code, int *p, int np, const environment *env);
void special(char *arg, const environment *env, char type);
+ void change_color(const environment *env);
+ void change_fill_color(const environment *env);
void put_char(unsigned int);
+ void put_color(unsigned char, int);
void begin_page(int) { }
void end_page(int page_length);
font *make_font(const char *);
@@ -162,10 +203,35 @@ public:
tty_printer::tty_printer(const char *device) : cached_v(0)
{
is_utf8 = !strcmp(device, "utf8");
+ tty_colors[0].set_rgb(0, // black
+ 0,
+ 0);
+ tty_colors[1].set_rgb(color::MAX_COLOR_VAL, // red
+ 0,
+ 0);
+ tty_colors[2].set_rgb(0, // green
+ color::MAX_COLOR_VAL,
+ 0);
+ tty_colors[3].set_rgb(color::MAX_COLOR_VAL, // yellow
+ color::MAX_COLOR_VAL,
+ 0);
+ tty_colors[4].set_rgb(0, // blue
+ 0,
+ color::MAX_COLOR_VAL);
+ tty_colors[5].set_rgb(color::MAX_COLOR_VAL, // magenta
+ 0,
+ color::MAX_COLOR_VAL);
+ tty_colors[6].set_rgb(0, // cyan
+ color::MAX_COLOR_VAL,
+ color::MAX_COLOR_VAL);
+ tty_colors[7].set_rgb(color::MAX_COLOR_VAL, // white
+ color::MAX_COLOR_VAL,
+ color::MAX_COLOR_VAL);
nlines = 66;
lines = new glyph *[nlines];
for (int i = 0; i < nlines; i++)
lines[i] = 0;
+ cu_flag = 0;
}
tty_printer::~tty_printer()
@@ -173,15 +239,64 @@ tty_printer::~tty_printer()
a_delete lines;
}
+void tty_printer::make_underline()
+{
+ if (old_drawing_scheme) {
+ putchar('_');
+ putchar('\b');
+ }
+ else {
+ if (!is_underline) {
+ if (italic_flag)
+ putstring(SGR_ITALIC);
+ else
+ putstring(SGR_UNDERLINE);
+ }
+ is_underline = 1;
+ }
+}
+
+void tty_printer::make_bold(unsigned int c)
+{
+ if (old_drawing_scheme) {
+ put_char(c);
+ putchar('\b');
+ }
+ else {
+ if (!is_bold)
+ putstring(SGR_BOLD);
+ is_bold = 1;
+ }
+}
+
+unsigned char tty_printer::color_to_idx(color *col)
+{
+ if (col->is_default())
+ return DEFAULT_COLOR_IDX;
+ for (int i = 0; i < TTY_MAX_COLORS; i++)
+ if (*col == tty_colors[i])
+ return (unsigned char)i;
+ unsigned r, g, b;
+ col->get_rgb(&r, &g, &b);
+ error("Unknown color (%1, %2, %3) mapped to default", r, g, b);
+ return DEFAULT_COLOR_IDX;
+}
+
void tty_printer::set_char(int i, font *f, const environment *env,
int w, const char *name)
{
if (w != font::hor)
fatal("width of character not equal to horizontal resolution");
- add_char(f->get_code(i), env->hpos, env->vpos, ((tty_font *)f)->get_mode());
+ add_char(f->get_code(i),
+ env->hpos, env->vpos,
+ env->col, env->fill,
+ ((tty_font *)f)->get_mode());
}
-void tty_printer::add_char(unsigned int c, int h, int v, unsigned char mode)
+void tty_printer::add_char(unsigned int c,
+ int h, int v,
+ color *fore, color *back,
+ unsigned char mode)
{
#if 0
// This is too expensive.
@@ -221,12 +336,14 @@ void tty_printer::add_char(unsigned int c, int h, int v, unsigned char mode)
glyph *g = new glyph;
g->hpos = hpos;
g->code = c;
+ g->fore_color_idx = color_to_idx(fore);
+ g->back_color_idx = color_to_idx(back);
g->mode = mode;
// The list will be reversed later. After reversal, it must be in
- // increasing order of hpos, with CU specials before HDRAW characters
- // before VDRAW characters before normal characters at each hpos, and
- // otherwise in order of occurrence.
+ // increasing order of hpos, with COLOR_CHANGE and CU specials before
+ // HDRAW characters before VDRAW characters before normal characters
+ // at each hpos, and otherwise in order of occurrence.
glyph **pp;
for (pp = lines + (vpos - 1); *pp; pp = &(*pp)->next)
@@ -239,8 +356,51 @@ void tty_printer::add_char(unsigned int c, int h, int v, unsigned char mode)
void tty_printer::special(char *arg, const environment *env, char type)
{
- if (type == 'u')
- add_char(*arg - '0', env->hpos, env->vpos, CU_MODE);
+ if (type == 'u') {
+ add_char(*arg - '0', env->hpos, env->vpos, env->col, env->fill, CU_MODE);
+ return;
+ }
+ if (type != 'p')
+ return;
+ char *p;
+ for (p = arg; *p == ' ' || *p == '\n'; p++)
+ ;
+ char *tag = p;
+ for (; *p != '\0' && *p != ':' && *p != ' ' && *p != '\n'; p++)
+ ;
+ if (*p == '\0' || strncmp(tag, "tty", p - tag) != 0) {
+ error("X command without `tty:' tag ignored");
+ return;
+ }
+ p++;
+ for (; *p == ' ' || *p == '\n'; p++)
+ ;
+ char *command = p;
+ for (; *p != '\0' && *p != ' ' && *p != '\n'; p++)
+ ;
+ if (*command == '\0') {
+ error("empty X command ignored");
+ return;
+ }
+ if (strncmp(command, "sgr", p - command) == 0) {
+ for (; *p == ' ' || *p == '\n'; p++)
+ ;
+ int n;
+ if (*p != '\0' && sscanf(p, "%d", &n) == 1 && n == 0)
+ old_drawing_scheme = 1;
+ else
+ old_drawing_scheme = 0;
+ }
+}
+
+void tty_printer::change_color(const environment *env)
+{
+ add_char(0, env->hpos, env->vpos, env->col, env->fill, COLOR_CHANGE);
+}
+
+void tty_printer::change_fill_color(const environment *env)
+{
+ add_char(0, env->hpos, env->vpos, env->col, env->fill, COLOR_CHANGE);
}
void tty_printer::draw(int code, int *p, int np, const environment *env)
@@ -260,7 +420,7 @@ void tty_printer::draw(int code, int *p, int np, const environment *env)
len = -len;
}
while (len >= 0) {
- add_char('|', env->hpos, v, VDRAW_MODE);
+ add_char('|', env->hpos, v, env->col, env->fill, VDRAW_MODE);
len -= font::vert;
v += font::vert;
}
@@ -274,7 +434,7 @@ void tty_printer::draw(int code, int *p, int np, const environment *env)
len = -len;
}
while (len >= 0) {
- add_char('-', h, env->vpos, HDRAW_MODE);
+ add_char('-', h, env->vpos, env->col, env->fill, HDRAW_MODE);
len -= font::hor;
h += font::hor;
}
@@ -302,14 +462,37 @@ void tty_printer::put_char(unsigned int wc)
do *++p = (unsigned char)(((wc >> (6 * --count)) & 0x3f) | 0x80);
while (count > 0);
*++p = '\0';
- fputs(buf, stdout);
+ putstring(buf);
}
- else {
+ else
putchar(wc);
- }
}
-int cu_flag = 0;
+void tty_printer::put_color(unsigned char color_index, int back)
+{
+ if (color_index == DEFAULT_COLOR_IDX) {
+ putstring(SGR_DEFAULT);
+ // set bold and underline again
+ if (is_bold)
+ putstring(SGR_BOLD);
+ if (is_underline) {
+ if (italic_flag)
+ putstring(SGR_ITALIC);
+ else
+ putstring(SGR_UNDERLINE);
+ }
+ // set other color again
+ back = !back;
+ color_index = back ? curr_back_idx : curr_fore_idx;
+ }
+ putstring(CSI);
+ if (back)
+ putchar('4');
+ else
+ putchar('3');
+ putchar(color_index + '0');
+ putchar('m');
+}
void tty_printer::end_page(int page_length)
{
@@ -345,6 +528,10 @@ void tty_printer::end_page(int page_length)
}
int hpos = 0;
glyph *nextp;
+ curr_fore_idx = DEFAULT_COLOR_IDX;
+ curr_back_idx = DEFAULT_COLOR_IDX;
+ is_underline = 0;
+ is_bold = 0;
for (p = g; p; delete p, p = nextp) {
nextp = p->next;
if (p->mode & CU_MODE) {
@@ -376,34 +563,79 @@ void tty_printer::end_page(int page_length)
int next_tab_pos = ((hpos + TAB_WIDTH) / TAB_WIDTH) * TAB_WIDTH;
if (next_tab_pos > p->hpos)
break;
- if (cu_flag) {
- putchar('_');
- putchar('\b');
+ if (cu_flag)
+ make_underline();
+ else if (!old_drawing_scheme && is_underline) {
+ if (italic_flag)
+ putstring(SGR_NO_ITALIC);
+ else
+ putstring(SGR_NO_UNDERLINE);
+ is_underline = 0;
}
putchar('\t');
hpos = next_tab_pos;
}
}
for (; hpos < p->hpos; hpos++) {
- if (cu_flag) {
- putchar('_');
- putchar('\b');
+ if (cu_flag)
+ make_underline();
+ else if (!old_drawing_scheme && is_underline) {
+ if (italic_flag)
+ putstring(SGR_NO_ITALIC);
+ else
+ putstring(SGR_NO_UNDERLINE);
+ is_underline = 0;
}
putchar(' ');
}
}
assert(hpos == p->hpos);
- if (p->mode & UNDERLINE_MODE) {
- putchar('_');
- putchar('\b');
+ if (p->mode & COLOR_CHANGE) {
+ if (!old_drawing_scheme) {
+ if (p->fore_color_idx != curr_fore_idx) {
+ put_color(p->fore_color_idx, 0);
+ curr_fore_idx = p->fore_color_idx;
+ }
+ if (p->back_color_idx != curr_back_idx) {
+ put_color(p->back_color_idx, 1);
+ curr_back_idx = p->back_color_idx;
+ }
+ }
+ continue;
+ }
+ if (p->mode & UNDERLINE_MODE)
+ make_underline();
+ else if (!old_drawing_scheme && is_underline) {
+ if (italic_flag)
+ putstring(SGR_NO_ITALIC);
+ else
+ putstring(SGR_NO_UNDERLINE);
+ is_underline = 0;
}
- if (p->mode & BOLD_MODE) {
- put_char(p->code);
- putchar('\b');
+ if (p->mode & BOLD_MODE)
+ make_bold(p->code);
+ else if (!old_drawing_scheme && is_bold) {
+ putstring(SGR_NO_BOLD);
+ is_bold = 0;
+ }
+ if (!old_drawing_scheme) {
+ if (p->fore_color_idx != curr_fore_idx) {
+ put_color(p->fore_color_idx, 0);
+ curr_fore_idx = p->fore_color_idx;
+ }
+ if (p->back_color_idx != curr_back_idx) {
+ put_color(p->back_color_idx, 1);
+ curr_back_idx = p->back_color_idx;
+ }
}
put_char(p->code);
hpos++;
}
+ if (!old_drawing_scheme
+ && (is_bold || is_underline
+ || curr_fore_idx != DEFAULT_COLOR_IDX
+ || curr_back_idx != DEFAULT_COLOR_IDX))
+ putstring(SGR_DEFAULT);
putchar('\n');
}
if (form_feed_flag) {
@@ -432,6 +664,8 @@ int main(int argc, char **argv)
{
program_name = argv[0];
static char stderr_buf[BUFSIZ];
+ if (getenv("GROFF_NO_SGR"))
+ old_drawing_scheme = 1;
setbuf(stderr, stderr_buf);
int c;
static const struct option long_options[] = {
@@ -439,19 +673,25 @@ int main(int argc, char **argv)
{ "version", no_argument, 0, 'v' },
{ NULL, 0, 0, 0 }
};
- while ((c = getopt_long(argc, argv, "F:vhfbuoBUd", long_options, NULL))
+ while ((c = getopt_long(argc, argv, "F:vhfbciuoBUd", long_options, NULL))
!= EOF)
switch(c) {
case 'v':
- {
- printf("GNU grotty (groff) version %s\n", Version_string);
- exit(0);
- break;
- }
+ printf("GNU grotty (groff) version %s\n", Version_string);
+ exit(0);
+ break;
+ case 'i':
+ // Use italic font instead of underlining.
+ italic_flag = 1;
+ break;
case 'b':
// Do not embolden by overstriking.
bold_flag = 0;
break;
+ case 'c':
+ // Use old scheme for emboldening and underline.
+ old_drawing_scheme = 1;
+ break;
case 'u':
// Do not underline.
underline_flag = 0;
@@ -493,6 +733,13 @@ int main(int argc, char **argv)
default:
assert(0);
}
+ if (old_drawing_scheme)
+ italic_flag = 0;
+ else {
+ bold_underline_mode = BOLD_MODE|UNDERLINE_MODE;
+ bold_flag = 1;
+ underline_flag = 1;
+ }
if (optind >= argc)
do_file("-");
else {
@@ -505,6 +752,6 @@ int main(int argc, char **argv)
static void usage(FILE *stream)
{
- fprintf(stream, "usage: %s [-hfvbuodBU] [-F dir] [files ...]\n",
+ fprintf(stream, "usage: %s [-hfvbciuodBU] [-F dir] [files ...]\n",
program_name);
}
diff --git a/contrib/groff/src/include/Makefile.sub b/contrib/groff/src/include/Makefile.sub
index cee00d3..620d345 100644
--- a/contrib/groff/src/include/Makefile.sub
+++ b/contrib/groff/src/include/Makefile.sub
@@ -2,14 +2,16 @@ HDRS=\
assert.h \
cmap.h \
cset.h \
+ color.h \
device.h \
driver.h \
errarg.h \
error.h \
font.h \
+ geometry.h \
getopt.h \
groff-getopt.h \
- htmlindicate.h \
+ htmlhint.h \
index.h \
lib.h \
macropath.h \
@@ -22,7 +24,6 @@ HDRS=\
searchpath.h \
stringclass.h
GENHDRS=defs.h
-CLEANADD=$(GENHDRS)
all depend: $(GENHDRS)
diff --git a/contrib/groff/src/include/color.h b/contrib/groff/src/include/color.h
new file mode 100644
index 0000000..6888da1
--- /dev/null
+++ b/contrib/groff/src/include/color.h
@@ -0,0 +1,87 @@
+// -*- C++ -*-
+
+/* <groff_src_dir>/src/include/color.h
+
+Last update: 10 Apr 2002
+
+Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+ Written by Gaius Mulley <gaius@glam.ac.uk>
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include <stddef.h>
+
+enum color_scheme {DEFAULT, CMY, CMYK, RGB, GRAY};
+
+class color {
+private:
+ color_scheme scheme;
+ unsigned int components[4];
+
+ int read_encoding(const color_scheme, const char * const,
+ const size_t);
+
+public:
+ enum {MAX_COLOR_VAL = 0xffff};
+ color() : scheme(DEFAULT){}
+ color(const color * const);
+
+ int operator==(const color & c) const;
+ int operator!=(const color & c) const;
+
+ int is_default() { return scheme == DEFAULT; }
+
+ // set color from given color component values
+ void set_default();
+ void set_rgb(const unsigned int r, const unsigned int g,
+ const unsigned int b);
+ void set_cmy(const unsigned int c, const unsigned int m,
+ const unsigned int y);
+ void set_cmyk(const unsigned int c, const unsigned int m,
+ const unsigned int y, const unsigned int k);
+ void set_gray(const unsigned int g);
+
+ // set color from a color string
+ int read_rgb(const char * const s);
+ int read_cmy(const char * const s);
+ int read_cmyk(const char * const s);
+ int read_gray(const char * const s);
+
+ // Return the actual color scheme and retrieve the color components
+ // into a predefined vector (of length at least 4).
+ color_scheme get_components(unsigned int *c) const;
+
+ // retrieve the components of a color
+ void get_rgb(unsigned int *r, unsigned int *g, unsigned int *b) const;
+ void get_cmy(unsigned int *c, unsigned int *m, unsigned int *y) const;
+ void get_cmyk(unsigned int *c, unsigned int *m,
+ unsigned int *y, unsigned int *k) const;
+ void get_gray(unsigned int *g) const;
+};
+
+#define Cyan components[0]
+#define Magenta components[1]
+#define Yellow components[2]
+#define Black components[3]
+
+#define Red components[0]
+#define Green components[1]
+#define Blue components[2]
+
+#define Gray components[0]
+
+extern color default_color;
diff --git a/contrib/groff/src/include/config.hin b/contrib/groff/src/include/config.hin
new file mode 100644
index 0000000..850e317
--- /dev/null
+++ b/contrib/groff/src/include/config.hin
@@ -0,0 +1,150 @@
+/* src/include/config.hin. Generated automatically from configure.ac by autoheader. */
+
+/* Define if your C++ doesn't understand `delete []'. */
+#undef ARRAY_DELETE_NEEDS_SIZE
+
+/* Define if you have a C++ <limits.h>. */
+#undef HAVE_CC_LIMITS_H
+
+/* Define if you have a C++ <osfcn.h>. */
+#undef HAVE_CC_OSFCN_H
+
+/* Define if you have the <dirent.h> header file. */
+#undef HAVE_DIRENT_H
+
+/* Define if you have the `fmod' function. */
+#undef HAVE_FMOD
+
+/* Define if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define if you have the <math.h> header file. */
+#undef HAVE_MATH_H
+
+/* Define if you have mkstemp(). */
+#undef HAVE_MKSTEMP
+
+/* Define if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* Define if you have the `putenv' function. */
+#undef HAVE_PUTENV
+
+/* Define if you have the `rename' function. */
+#undef HAVE_RENAME
+
+/* Define if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define if you have the `isatty' function. */
+#undef HAVE_ISATTY
+
+/* Define if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define if you have the `strncasecmp' function. */
+#undef HAVE_STRNCASECMP
+
+/* Define if you have the `strsep' function. */
+#undef HAVE_STRSEP
+
+/* Define if you have the `strtol' function. */
+#undef HAVE_STRTOL
+
+/* Define if <math.h> defines struct exception. */
+#undef HAVE_STRUCT_EXCEPTION
+
+/* Define if you have the <sys/dir.h> header file. */
+#undef HAVE_SYS_DIR_H
+
+/* Define if you have sys_errlist in <errno.h> or in <stdio.h>. */
+#undef HAVE_SYS_ERRLIST
+
+/* Define if you have sysnerr in <errno.h> or <stdio.h>. */
+#undef HAVE_SYS_NERR
+
+/* Define if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if the host's encoding is EBCDIC. */
+#undef IS_EBCDIC_HOST
+
+/* Define if localtime() takes a long * not a time_t *. */
+#undef LONG_FOR_TIME_T
+
+/* Define if your C++ doesn't declare gettimeofday(). */
+#undef NEED_DECLARATION_GETTIMEOFDAY
+
+/* Define if your C++ doesn't declare hypot(). */
+#undef NEED_DECLARATION_HYPOT
+
+/* Define if your C++ doesn't declare pclose(). */
+#undef NEED_DECLARATION_PCLOSE
+
+/* Define if your C++ doesn't declare popen(). */
+#undef NEED_DECLARATION_POPEN
+
+/* Define if your C++ doesn't declare putenv(). */
+#undef NEED_DECLARATION_PUTENV
+
+/* Define if your C++ doesn't declare strcasecmp(). */
+#undef NEED_DECLARATION_STRCASECMP
+
+/* Define if your C++ doesn't declare strncasecmp(). */
+#undef NEED_DECLARATION_STRNCASECMP
+
+/* Define if the printer's page size is A4. */
+#undef PAGEA4
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* Define if srand() returns void not int. */
+#undef RET_TYPE_SRAND_IS_VOID
+
+/* Define if `sys_siglist' is declared by <signal.h> or <unistd.h>. */
+#undef SYS_SIGLIST_DECLARED
+
+/* Define if your C++ compiler uses a traditional (Reiser) preprocessor. */
+#undef TRADITIONAL_CPP
+
+/* Define if the 0200 bit of the status returned by wait() indicates whether a
+ core image was produced for a process that was terminated by a signal. */
+#undef WCOREFLAG
+
+/* Define if -D_POSIX_SOURCE is necessary. */
+#undef _POSIX_SOURCE
+
+/* Define if you have ISC 3.x or 4.x. */
+#undef _SYSV3
+
+/* Define uintmax_t to `unsigned long' or `unsigned long long' if <inttypes.h>
+ does not exist. */
+#undef uintmax_t
diff --git a/contrib/groff/src/include/driver.h b/contrib/groff/src/include/driver.h
index 97eb891..d957928 100644
--- a/contrib/groff/src/include/driver.h
+++ b/contrib/groff/src/include/driver.h
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,7 +19,8 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
+#include "lib.h"
+
#include <ctype.h>
#include <stdlib.h>
#include <stddef.h>
@@ -29,7 +31,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "error.h"
#include "font.h"
#include "printer.h"
-#include "lib.h"
+#include "geometry.h"
void do_file(const char *);
extern printer *pr;
diff --git a/contrib/groff/src/include/errarg.h b/contrib/groff/src/include/errarg.h
index 0c7957c..08af44a 100644
--- a/contrib/groff/src/include/errarg.h
+++ b/contrib/groff/src/include/errarg.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -19,10 +19,11 @@ with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
class errarg {
- enum { EMPTY, STRING, CHAR, INTEGER, DOUBLE } type;
+ enum { EMPTY, STRING, CHAR, INTEGER, UNSIGNED_INTEGER, DOUBLE } type;
union {
const char *s;
int n;
+ unsigned int u;
char c;
double d;
};
@@ -32,6 +33,7 @@ class errarg {
errarg(char);
errarg(unsigned char);
errarg(int);
+ errarg(unsigned int);
errarg(double);
int empty() const;
void print() const;
@@ -43,4 +45,3 @@ extern void errprint(const char *,
const errarg &arg1 = empty_errarg,
const errarg &arg2 = empty_errarg,
const errarg &arg3 = empty_errarg);
-
diff --git a/contrib/groff/src/include/font.h b/contrib/groff/src/include/font.h
index 099f97b..43bf121 100644
--- a/contrib/groff/src/include/font.h
+++ b/contrib/groff/src/include/font.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -54,6 +54,8 @@ public:
const char *get_name();
const char *get_internal_name();
+ static int scan_papersize(const char *, const char **, double *, double *);
+
static font *load_font(const char *, int *not_found = 0);
static void command_line_font_dir(const char *path);
static FILE *open_file(const char *name, char **pathp);
@@ -69,6 +71,7 @@ public:
static int unitwidth;
static int paperwidth;
static int paperlength;
+ static const char *papersize;
static int biggestfont;
static int spare2;
static int sizescale;
@@ -107,6 +110,7 @@ private:
void compact();
static int scale(int w, int pointsize);
+ static int unit_scale(double *value, char unit);
virtual void handle_unknown_font_command(const char *command,
const char *arg,
const char *file, int lineno);
diff --git a/contrib/groff/src/include/geometry.h b/contrib/groff/src/include/geometry.h
new file mode 100644
index 0000000..d425f15
--- /dev/null
+++ b/contrib/groff/src/include/geometry.h
@@ -0,0 +1,27 @@
+// -*- C++ -*-
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+ Written by Gaius Mulley <gaius@glam.ac.uk>
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+int adjust_arc_center(const int *, double *);
+void check_output_arc_limits(int x, int y,
+ int xv1, int yv1,
+ int xv2, int yv2,
+ double c0, double c1,
+ int *minx, int *maxx,
+ int *miny, int *maxy);
diff --git a/contrib/groff/src/include/getopt.h b/contrib/groff/src/include/getopt.h
index c2f0180..4283c35 100644
--- a/contrib/groff/src/include/getopt.h
+++ b/contrib/groff/src/include/getopt.h
@@ -3,19 +3,19 @@
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.
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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.
+ Lesser 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. */
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
#ifndef _GETOPT_H
@@ -142,20 +142,21 @@ struct option
/* 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);
+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,
+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,
+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,
+extern int _getopt_internal (int ___argc, char *const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind,
int __long_only);
diff --git a/contrib/groff/src/include/html-strings.h b/contrib/groff/src/include/html-strings.h
index 710e8d7..23a36d1 100644
--- a/contrib/groff/src/include/html-strings.h
+++ b/contrib/groff/src/include/html-strings.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2002 Free Software Foundation, Inc.
Written by Gaius Mulley (gaius@glam.ac.uk).
This file is part of groff.
@@ -25,7 +25,3 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define HTML_IMAGE_INLINE_BEGIN "\\O[HTML-IMAGE-INLINE-BEGIN]"
#define HTML_IMAGE_INLINE_END "\\O[HTML-IMAGE-INLINE-END]"
-#define HTML_IMAGE_CENTERED ".HTML-IMAGE"
-#define HTML_IMAGE_RIGHT ".HTML-IMAGE-RIGHT"
-#define HTML_IMAGE_LEFT ".HTML-IMAGE-LEFT"
-#define HTML_IMAGE_END ".HTML-IMAGE-END"
diff --git a/contrib/groff/src/include/htmlhint.h b/contrib/groff/src/include/htmlhint.h
new file mode 100644
index 0000000..f1f46f7
--- /dev/null
+++ b/contrib/groff/src/include/htmlhint.h
@@ -0,0 +1,37 @@
+// -*- C++ -*-
+/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+ Written by Gaius Mulley <gaius@glam.ac.uk>
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifndef HTMLINDICATE_H
+#define HTMLINDICATE_H
+
+/*
+ * html_begin_suppress - suppresses output for the html device
+ * and resets the min/max registers for -Tps.
+ * Only called for inline images (such as eqn).
+ *
+ */
+extern void html_begin_suppress();
+
+/*
+ * html_end_suppress - end the suppression of output.
+ */
+extern void html_end_suppress();
+
+#endif
diff --git a/contrib/groff/src/include/lib.h b/contrib/groff/src/include/lib.h
index db5277c..c6468e0 100644
--- a/contrib/groff/src/include/lib.h
+++ b/contrib/groff/src/include/lib.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,20 +18,30 @@ You should have 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_CONFIG_H
+#include <config.h>
+#endif
+
extern "C" {
#ifndef HAVE_STRERROR
char *strerror(int);
#endif
const char *i_to_a(int);
+ const char *ui_to_a(unsigned int);
const char *if_to_a(int, int);
}
-/* stdio.h on IRIX, OSF/1, and UWIN includes getopt.h */
+/* stdio.h on IRIX, OSF/1, emx, and UWIN include getopt.h */
+/* unistd.h on CYGWIN includes getopt.h */
#if !(defined(__sgi) \
|| (defined(__osf__) && defined(__alpha)) \
- || defined(_UWIN))
+ || defined(_UWIN) \
+ || defined(__EMX__) \
+ || defined(__CYGWIN__))
#include <groff-getopt.h>
+#else
+#include <getopt.h>
#endif
char *strsave(const char *s);
@@ -43,31 +53,54 @@ int is_prime(unsigned);
#include <strings.h>
#endif
-FILE *xtmpfile(char **namep = 0, char *postfix = 0, int do_unlink = 1);
-char *xtmptemplate(char *extension = 0);
+#ifndef HAVE_SNPRINTF
+#include <stdarg.h>
+extern "C" {
+ int snprintf(char *, size_t, const char *, /*args*/ ...);
+ int vsnprintf(char *, size_t, const char *, va_list);
+}
+#endif
+
+#ifndef HAVE_MKSTEMP
+/* since mkstemp() is defined as a real C++ function if taken from
+ groff's mkstemp.cc we need a declaration */
+int mkstemp(char *tmpl);
+#endif /* HAVE_MKSTEMP */
-#ifdef NEED_DECLARATION_POPEN
+int mksdir(char *tmpl);
-extern "C" { FILE *popen(const char *, const char *); }
+FILE *xtmpfile(char **namep = 0,
+ const char *postfix_long = 0, const char *postfix_short = 0,
+ int do_unlink = 1);
+char *xtmptemplate(const char *postfix_long, const char *postfix_short);
+#ifdef NEED_DECLARATION_POPEN
+extern "C" { FILE *popen(const char *, const char *); }
#endif /* NEED_DECLARATION_POPEN */
#ifdef NEED_DECLARATION_PCLOSE
-
extern "C" { int pclose (FILE *); }
-
#endif /* NEED_DECLARATION_PCLOSE */
size_t file_name_max(const char *fname);
int interpret_lf_args(const char *p);
-extern char illegal_char_table[];
+extern char invalid_char_table[];
-inline int illegal_input_char(int c)
+inline int invalid_input_char(int c)
{
- return c >= 0 && illegal_char_table[c];
+ return c >= 0 && invalid_char_table[c];
+}
+
+#ifdef HAVE_STRCASECMP
+#ifdef NEED_DECLARATION_STRCASECMP
+extern "C" {
+ // Ultrix4.3's string.h fails to declare this.
+ int strcasecmp(const char *, const char *);
}
+#endif /* NEED_DECLARATION_STRCASECMP */
+#endif /* HAVE_STRCASECMP */
#if !defined(_AIX) && !defined(sinix) && !defined(__sinix__)
#ifdef HAVE_STRNCASECMP
diff --git a/contrib/groff/src/include/nonposix.h b/contrib/groff/src/include/nonposix.h
index abd7d1e..86aa2e0 100644
--- a/contrib/groff/src/include/nonposix.h
+++ b/contrib/groff/src/include/nonposix.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
Written by Eli Zaretskii (eliz@is.elta.co.il)
This file is part of groff.
@@ -24,11 +24,10 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
# ifndef _WIN32
# define _WIN32
# endif
-# define setmode(f,m) _setmode(f,m)
#endif
#if defined(__MSDOS__) \
- || (defined(_WIN32) && !defined(_UWIN) && !defined(__CYGWIN32__))
+ || (defined(_WIN32) && !defined(_UWIN) && !defined(__CYGWIN__))
/* Binary I/O nuisances. Note: "setmode" is right for DJGPP and
Borland; Windows compilers might need _setmode or some such. */
@@ -37,17 +36,21 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
# 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)
+# define mkdir(p,m) _mkdir(p)
+# define setmode(f,m) _setmode(f,m)
+# define WAIT(s,p,m) _cwait(s,p,m)
+# define creat(p,m) _creat(p,m)
# endif
+# define SET_BINARY(f) do {if (!isatty(f)) setmode(f,O_BINARY);} while(0)
+# define FOPEN_RB "rb"
+# define FOPEN_WB "wb"
+# define FOPEN_RWB "wb+"
# ifndef O_BINARY
# ifdef _O_BINARY
# define O_BINARY (_O_BINARY)
@@ -135,3 +138,12 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef NULL_DEV
# define NULL_DEV "/dev/null"
#endif
+#ifndef GS_NAME
+# define GS_NAME "gs"
+#endif
+#ifndef WAIT
+# define WAIT(s,p,m) wait(s)
+#endif
+#ifndef _WAIT_CHILD
+# define _WAIT_CHILD 0
+#endif
diff --git a/contrib/groff/src/include/paper.h b/contrib/groff/src/include/paper.h
new file mode 100644
index 0000000..7a01fc2
--- /dev/null
+++ b/contrib/groff/src/include/paper.h
@@ -0,0 +1,37 @@
+// -*- C++ -*-
+/* Copyright (C) 2002 Free Software Foundation, Inc.
+ Written by Werner Lemberg (wl@gnu.org)
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+struct paper {
+ char *name;
+ double length; // in PS points
+ double width; // in PS points
+};
+
+// global constructor
+static class papersize_init {
+ static int initialised;
+public:
+ papersize_init();
+} _papersize_init;
+
+// A0-A7, B0-B7, C0-C7, D0-D7, 8 American paper sizes, 1 special size */
+#define NUM_PAPERSIZES 4*8 + 8 + 1
+
+extern paper papersizes[];
diff --git a/contrib/groff/src/include/posix.h b/contrib/groff/src/include/posix.h
index 1b7d5cd..e7f38cd 100644
--- a/contrib/groff/src/include/posix.h
+++ b/contrib/groff/src/include/posix.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1992, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 2000, 2001 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -42,6 +42,14 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define S_IROTH 0004
#endif
+#ifndef S_IWUSR
+#define S_IWUSR 0200
+#endif
+
+#ifndef S_IXUSR
+#define S_IXUSR 0100
+#endif
+
#ifndef S_ISREG
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#endif
@@ -49,3 +57,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#ifndef O_RDONLY
#define O_RDONLY 0
#endif
+
+#ifndef HAVE_ISATTY
+#define isatty(n) (1)
+#endif
diff --git a/contrib/groff/src/include/printer.h b/contrib/groff/src/include/printer.h
index beae4d9..4d5cbf5 100644
--- a/contrib/groff/src/include/printer.h
+++ b/contrib/groff/src/include/printer.h
@@ -1,22 +1,42 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-This file is part of groff.
+// <groff_src_dir>/src/include/printer.h
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
+ Written by James Clark (jjc@jclark.com)
-You should have 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. */
+ Last update: 12 Apr 2002
+
+ This file is part of groff.
+
+ groff is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ groff is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have 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.
+*/
+
+/* Description
+
+ The class `printer' performs the postprocessing. Each
+ postprocessor only need to implement a derived class of `printer' and
+ a suitable function `make_printer' for the device-dependent tasks.
+ Then the methods of class `printer' are called automatically by
+ `do_file()' in `input.cc'.
+*/
+
+#include "color.h"
struct environment {
int fontno;
@@ -25,6 +45,8 @@ struct environment {
int vpos;
int height;
int slant;
+ color *col;
+ color *fill;
};
struct font;
@@ -45,17 +67,22 @@ public:
int *widthp = 0);
void set_special_char(const char *nm, const environment *env,
int *widthp = 0);
- void set_numbered_char(int n, const environment *env, int *widthp = 0);
+ void set_numbered_char(int n, const environment *env,
+ int *widthp = 0);
int set_char_and_width(const char *nm, const environment *env,
int *widthp, font **f);
font *get_font_from_index(int fontno);
virtual void draw(int code, int *p, int np, const environment *env);
+ // perform change of line color (text, outline) in the print-out
+ virtual void change_color(const environment * const env);
+ // perform change of fill color in the print-out
+ virtual void change_fill_color(const environment * const env);
virtual void begin_page(int) = 0;
virtual void end_page(int page_length) = 0;
virtual font *make_font(const char *nm);
virtual void end_of_line();
- virtual void special(char *arg, const environment *env, char type = 'p');
- static int adjust_arc_center(const int *, double *);
+ virtual void special(char *arg, const environment *env,
+ char type = 'p');
protected:
font_pointer_list *font_list;
diff --git a/contrib/groff/src/include/stringclass.h b/contrib/groff/src/include/stringclass.h
index be3a044..c6295b0 100644
--- a/contrib/groff/src/include/stringclass.h
+++ b/contrib/groff/src/include/stringclass.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -67,6 +67,7 @@ public:
const char *contents() const;
int search(char) const;
char *extract() const;
+ void remove_spaces();
void clear();
void move(string &);
@@ -122,7 +123,7 @@ inline int string::operator*() const
inline const char *string::contents() const
{
- return ptr;
+ return ptr;
}
inline string operator+(const string &s1, const string &s2)
diff --git a/contrib/groff/src/libs/libbib/Makefile.sub b/contrib/groff/src/libs/libbib/Makefile.sub
index 482f01a..6e59d64 100644
--- a/contrib/groff/src/libs/libbib/Makefile.sub
+++ b/contrib/groff/src/libs/libbib/Makefile.sub
@@ -1,10 +1,10 @@
LIB=bib
OBJS=\
- common.o \
- index.o \
- linear.o \
- search.o \
- map.o
+ common.$(OBJEXT) \
+ index.$(OBJEXT) \
+ linear.$(OBJEXT) \
+ search.$(OBJEXT) \
+ map.$(OBJEXT)
CCSRCS=\
$(srcdir)/common.cc \
$(srcdir)/index.cc \
diff --git a/contrib/groff/src/libs/libbib/index.cc b/contrib/groff/src/libs/libbib/index.cc
index 4d836a0..3633df1 100644
--- a/contrib/groff/src/libs/libbib/index.cc
+++ b/contrib/groff/src/libs/libbib/index.cc
@@ -18,13 +18,12 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
-#include <string.h>
+#include "lib.h"
+
#include <stdlib.h>
#include <errno.h>
#include "posix.h"
-#include "lib.h"
#include "cset.h"
#include "cmap.h"
#include "errarg.h"
diff --git a/contrib/groff/src/libs/libbib/linear.cc b/contrib/groff/src/libs/libbib/linear.cc
index a8c2a55..1dd902b 100644
--- a/contrib/groff/src/libs/libbib/linear.cc
+++ b/contrib/groff/src/libs/libbib/linear.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,14 +19,13 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+#include "lib.h"
-#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <errno.h>
#include "posix.h"
-#include "lib.h"
#include "errarg.h"
#include "error.h"
#include "cset.h"
diff --git a/contrib/groff/src/libs/libbib/map.c b/contrib/groff/src/libs/libbib/map.c
index ee5d008..4d878a2 100644
--- a/contrib/groff/src/libs/libbib/map.c
+++ b/contrib/groff/src/libs/libbib/map.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -17,6 +18,12 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+#include <stdlib.h>
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#ifdef HAVE_MMAP
#include <sys/types.h>
diff --git a/contrib/groff/src/libs/libbib/search.cc b/contrib/groff/src/libs/libbib/search.cc
index 1e027c6..2223fb6 100644
--- a/contrib/groff/src/libs/libbib/search.cc
+++ b/contrib/groff/src/libs/libbib/search.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,13 +19,13 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+#include "lib.h"
+
#include <stdlib.h>
-#include <string.h>
#include <assert.h>
#include <errno.h>
#include "posix.h"
-#include "lib.h"
#include "errarg.h"
#include "error.h"
#include "nonposix.h"
diff --git a/contrib/groff/src/libs/libdriver/Makefile.sub b/contrib/groff/src/libs/libdriver/Makefile.sub
index d50f060..547b8c0 100644
--- a/contrib/groff/src/libs/libdriver/Makefile.sub
+++ b/contrib/groff/src/libs/libdriver/Makefile.sub
@@ -1,7 +1,7 @@
LIB=driver
OBJS=\
- input.o \
- printer.o
+ input.$(OBJEXT) \
+ printer.$(OBJEXT)
CCSRCS=\
$(srcdir)/input.cc \
$(srcdir)/printer.cc
diff --git a/contrib/groff/src/libs/libdriver/input.cc b/contrib/groff/src/libs/libdriver/input.cc
index e19841c..a02c139 100644
--- a/contrib/groff/src/libs/libdriver/input.cc
+++ b/contrib/groff/src/libs/libdriver/input.cc
@@ -1,504 +1,1814 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-This file is part of groff.
+// <groff_src_dir>/src/libs/libdriver/input.cc
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
+ Written by James Clark (jjc@jclark.com)
+ Major rewrite 2001 by Bernd Warken (bwarken@mayn.de)
-You should have 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. */
+ Last update: 12 Apr 2002
+
+ This file is part of groff, the GNU roff text processing system.
+
+ groff is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ groff is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with groff; see the file COPYING. If not, write to the Free
+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.
+*/
+
+/* Description
+
+ This file implements the parser for the intermediate groff output,
+ see groff_out(5), and does the printout for the given device.
+
+ All parsed information is processed within the function do_file() by
+ using the global object `pr' of class `printer'. So a device
+ postprocessor just needs to fill in the methods for the class
+ `printer' without having to worry about the syntax of the
+ intermediate output format. Consequently, the programming of groff
+ postprocessors is similar to the development of device-drivers.
+
+ The prototyping for this file is done in driver.h (and error.h).
+
+ Postprocessor programs must deallocate the global variables `pr' and
+ `device' using `delete', and `current_filename' using
+ `free((char *))'.
+*/
+
+/* Changes of the 2001 rewrite of this file.
+
+ The interface to the outside and the handling of the global
+ variables was not changed, but internally many necessary changes
+ were performed.
+
+ The main aim for this rewrite is to provide a first step towards
+ making groff fully compatible with classical troff without pain.
+
+ Bugs fixed
+ - Unknown subcommands of `D' and `x' are now ignored like in the
+ classical case, but a warning is issued. This was also
+ implemented for the other commands.
+ - A warning is emitted if `x stop' is missing.
+ - `DC' and `DE' commands didn't position to the right end after
+ drawing (now they do), see discussion below.
+ - So far, `x stop' was ignored. Now it terminates the processing
+ of the current intermediate output file like the classical troff.
+ - The command `c' didn't check correctly on white-space.
+ - The environment stack wasn't suitable for the color extensions
+ (replaced by a class).
+ - The old groff parser could only handle a prologue with the first
+ 3 lines having a fixed structure, while classical troff specified
+ the sequence of the first 3 commands without further
+ restrictions. Now the parser is smart about additional
+ white space, comments, and empty lines in the prologue.
+ - The old parser allowed space characters only as syntactical
+ separators, while classical troff had tab characters as well.
+ Now any sequence of tabs and/or spaces is a syntactical
+ separator between commands and/or arguments.
+ - Range checks for numbers implemented.
+
+ New and improved features
+ - The color commands `m' and `DF' are added.
+ - The old color command `Df' is now converted and delegated to `DFg'.
+ - The command `F' is implemented as `use intended file name'. It
+ checks whether its argument agrees with the file name used so far,
+ otherwise a warning is issued. Then the new name is remembered
+ and used for the following error messages.
+ - For the positioning after drawing commands, an alternative, easier
+ scheme is provided, but not yet activated; it can be chosen by
+ undefining the preprocessor macro STUPID_DRAWING_POSITIONING.
+ It extends the rule of the classical troff output language in a
+ logical way instead of the rather strange actual positioning.
+ For details, see the discussion below.
+ - For the `D' commands that only set the environment, the calling of
+ pr->send_draw() was removed because this doesn't make sense for
+ the `DF' commands; the (changed) environment is sent with the
+ next command anyway.
+ - Error handling was clearly separated into warnings and fatal.
+ - The error behavior on additional arguments for `D' and `x'
+ commands with a fixed number of arguments was changed from being
+ ignored (former groff) to issue a warning and ignore (now), see
+ skip_line_x(). No fatal was chosen because both string and
+ integer arguments can occur.
+ - The gtroff program issues a trailing dummy integer argument for
+ some drawing commands with an odd number of arguments to make the
+ number of arguments even, e.g. the DC and Dt commands; this is
+ honored now.
+ - All D commands with a variable number of args expect an even
+ number of trailing integer arguments, so fatal on error was
+ implemented.
+ - Disable environment stack and the commands `{' and `}' by making
+ them conditional on macro USE_ENV_STACK; actually, this is
+ undefined by default. There isn't any known application for these
+ features.
+
+ Cosmetics
+ - Nested `switch' commands are avoided by using more functions.
+ Dangerous 'fall-through's avoided.
+ - Commands and functions are sorted alphabetically (where possible).
+ - Dynamic arrays/buffers are now implemented as container classes.
+ - Some functions had an ugly return structure; this has been
+ streamlined by using classes.
+ - Use standard C math functions for number handling, so getting rid
+ of differences to '0'.
+ - The macro `IntArg' has been created for an easier transition
+ to guaranteed 32 bits integers (`int' is enough for GNU, while
+ ANSI only guarantees `long int' to have a length of 32 bits).
+ - The many usages of type `int' are differentiated by using `Char',
+ `bool', and `IntArg' where appropriate.
+ - To ease the calls of the local utility functions, the parser
+ variables `current_file', `npages', and `current_env'
+ (formerly env) were made global to the file (formerly they were
+ local to the do_file() function)
+ - Various comments were added.
+
+ TODO
+ - Get rid of the stupid drawing positioning.
+ - Can the `Dt' command be completely handled by setting environment
+ within do_file() instead of sending to pr?
+ - Integer arguments must be >= 32 bits, use conditional #define.
+ - Add scaling facility for classical device independence and
+ non-groff devices. Classical troff output had a quasi device
+ independence by scaling the intermediate output to the resolution
+ of the postprocessor device if different from the one specified
+ with `x T', groff have not. So implement full quasi device
+ indepedence, including the mapping of the strange classical
+ devices to the postprocessor device (seems to be reasonably
+ easy).
+ - The external, global pointer variables are not optimally handled.
+ - `pr' isn't used outside besides initialization and deletion.
+ So it could be replaced by a static local variable. For
+ example, a wrapper class `Postprocessor' for class `printer' with
+ internal make_printer() and automatic clean-up would make sense.
+ - The global variables `current_filename' and `current_lineno' are
+ only used for error reporting. So implement a static class
+ `Error' (`::' calls).
+ - The global `device' is the name used during the formatting
+ process; there should be a new variable for the device name used
+ during the postprocessing.
+ - Implement the B-spline drawing `D~' for all graphical devices.
+ - Make `environment' a class with an overflow check for its members
+ and a delete method to get rid of delete_current_env().
+ - Implement the `EnvStack' to use `new' instead of `malloc'.
+ - The class definitions of this document could go into a new file.
+ - The comments in this section should go to a `Changelog' or some
+ `README' file in this directory.
+*/
+
+/*
+ Discussion of the positioning by drawing commands
+
+ There was some confusion about the positioning of the graphical
+ pointer at the printout after having executed a `D' command.
+ The classical troff manual of Osanna & Kernighan specified,
+
+ `The position after a graphical object has been drawn is
+ at its end; for circles and ellipses, the "end" is at the
+ right side.'
+
+ From this, it follows that
+ - all open figures (args, splines, and lines) should position at their
+ final point.
+ - all circles and ellipses should position at their right-most point
+ (as if 2 halves had been drawn).
+ - all closed figures apart from circles and ellipses shouldn't change
+ the position because they return to their origin.
+ - all setting commands should not change position because they do not
+ draw any graphical object.
+
+ In the case of the open figures, this means that the horizontal
+ displacement is the sum of all odd arguments and the vertical offset
+ the sum of all even arguments, called the alternate arguments sum
+ displacement in the following.
+
+ Unfortunately, groff did not implement this simple rule. The former
+ documentation in groff_out(5) differed from the source code, and
+ neither of them is compatible with the classical rule.
+
+ The former groff_out(5) specified to use the alternative arguments
+ sum displacement for calculating the drawing positioning of
+ non-classical commands, including the `Dt' command (setting-only)
+ and closed polygons. Applying this to the new groff color commands
+ will lead to disaster. For their arguments can take large values (>
+ 65000). On low resolution devices, the displacement of such large
+ values will corrupt the display or kill the printer. So the
+ nonsense specification has come to a natural end anyway.
+
+ The groff source code, however, had no positioning for the
+ setting-only commands (esp. `Dt'), the right-end positioning for
+ outlined circles and ellipses, and the alternative argument sum
+ displacement for all other commands (including filled circles and
+ ellipses).
+
+ The reason why no one seems to have suffered from this mayhem so
+ far is that the graphical objects are usually generated by
+ preprocessors like pic that do not depend on the automatic
+ positioning. When using the low level `\D' escape sequences or `D'
+ output commands, the strange positionings can be circumvented by
+ absolute positionings or by tricks like `\Z'.
+
+ So doing an exorcism on the strange, incompatible displacements might
+ not harm any existing documents, but will make the usage of the
+ graphical escape sequences and commands natural.
+
+ That's why the rewrite of this file returned to the reasonable,
+ classical specification with its clear end-of-drawing rule that is
+ suitable for all cases. But a macro STUPID_DRAWING_POSITIONING is
+ provided for testing the funny former behavior.
+
+ The new rule implies the following behavior.
+ - Setting commands (`Dt', `Df', `DF') and polygons (`Dp' and `DP')
+ do not change position now.
+ - Filled circles and ellipses (`DC' and `DE') position at their
+ most right point (outlined ones `Dc' and `De' did this anyway).
+ - As before, all open graphical objects position to their final
+ drawing point (alternate sum of the command arguments).
+
+*/
+
+#ifndef STUPID_DRAWING_POSITIONING
+// uncomment next line if all non-classical D commands shall position
+// to the strange alternate sum of args displacement
+#define STUPID_DRAWING_POSITIONING
+#endif
+
+// Decide whether the commands `{' and `}' for different environments
+// should be used.
+#undef USE_ENV_STACK
#include "driver.h"
#include "device.h"
-#include "cset.h"
-const char *current_filename=0;
-int current_lineno;
-const char *device = 0;
-FILE *current_file;
+#include <stdlib.h>
+#include <errno.h>
+#include <ctype.h>
+#include <math.h>
+
+
+/**********************************************************************
+ local types
+ **********************************************************************/
+
+// integer type used in the fields of struct environment (see printer.h)
+typedef int EnvInt;
-int get_integer(); // don't read the newline
-int possibly_get_integer(int *);
-char *get_string(int is_long = 0);
-void skip_line();
+// integer arguments of groff_out commands, must be >= 32 bits
+typedef int IntArg;
-struct environment_list {
- environment env;
- environment_list *next;
+// color components of groff_out color commands, must be >= 32 bits
+typedef unsigned int ColorArg;
+
+// Array for IntArg values.
+class IntArray {
+ size_t num_allocated;
+ size_t num_stored;
+ IntArg *data;
+public:
+ IntArray(void);
+ IntArray(const size_t);
+ ~IntArray(void);
+ const IntArg operator[](const size_t i) const
+ {
+ if (i >= num_stored || i < 0)
+ fatal("index out of range");
+ return (const IntArg) data[i];
+ }
+ void append(IntArg);
+ const IntArg * const
+ get_data(void) const { return (const IntArg * const) data; }
+ const size_t len(void) const { return num_stored; }
+};
+
+// Characters read from the input queue.
+class Char {
+ int data;
+public:
+ Char(void) : data('\0') {}
+ Char(const int c) : data(c) {}
+ bool operator==(char c) const { return (data == c) ? true : false; }
+ bool operator==(int c) const { return (data == c) ? true : false; }
+ bool operator==(const Char c) const
+ { return (data == c.data) ? true : false; }
+ bool operator!=(char c) const { return !(*this == c); }
+ bool operator!=(int c) const { return !(*this == c); }
+ bool operator!=(const Char c) const { return !(*this == c); }
+ operator int() const { return (int) data; }
+ operator unsigned char() const { return (unsigned char) data; }
+ operator char() const { return (char) data; }
+};
+
+// Buffer for string arguments (Char, not char).
+class StringBuf {
+ size_t num_allocated;
+ size_t num_stored;
+ Char *data; // not terminated by '\0'
+public:
+ StringBuf(void); // allocate without storing
+ ~StringBuf(void);
+ void append(const Char); // append character to `data'
+ char *make_string(void); // return new copy of `data' with '\0'
+ bool is_empty(void) { // true if none stored
+ return (num_stored > 0) ? false : true;
+ }
+ void reset(void); // set `num_stored' to 0
+};
- environment_list(const environment &, environment_list *);
+#ifdef USE_ENV_STACK
+class EnvStack {
+ environment **data;
+ size_t num_allocated;
+ size_t num_stored;
+public:
+ EnvStack(void);
+ ~EnvStack(void);
+ environment *pop(void);
+ void push(environment *e);
};
+#endif // USE_ENV_STACK
+
+
+/**********************************************************************
+ external variables
+ **********************************************************************/
+
+// exported as extern by error.h (called from driver.h)
+// needed for error messages (see ../libgroff/error.cc)
+const char *current_filename = 0; // printable name of the current file
+int current_lineno = 0; // current line number of printout
+
+// exported as extern by device.h;
+const char *device = 0; // cancel former init with literal
+
+// from driver.h; pr is kept between several runs of do_file()
+// extern printer *pr;
+
+// Note:
+//
+// We rely on an implementation of the `new' operator which aborts
+// gracefully if it can't allocate memory (e.g. from libgroff/new.cc).
+
+
+/**********************************************************************
+ static local variables
+ **********************************************************************/
+
+FILE *current_file = 0; // current input stream for parser
+
+// npages: number of pages processed so far (including current page),
+// _not_ the page number in the printout (can be set with `p').
+int npages = 0;
+
+const ColorArg
+COLORARG_MAX = (ColorArg) 65536U; // == 0xFFFF + 1 == 0x10000
+
+const IntArg
+INTARG_MAX = (IntArg) 0x7FFFFFFF; // maximal signed 32 bits number
+
+// parser environment, created and deleted by each run of do_file()
+environment *current_env = 0;
-environment_list::environment_list(const environment &e, environment_list *p)
-: env(e), next(p)
+#ifdef USE_ENV_STACK
+const size_t
+envp_size = sizeof(environment *);
+#endif // USE_ENV_STACK
+
+
+/**********************************************************************
+ function declarations
+ **********************************************************************/
+
+// utility functions
+ColorArg color_from_Df_command(IntArg);
+ // transform old color into new
+void delete_current_env(void); // delete global var current_env
+void fatal_command(char); // abort for invalid command
+inline Char get_char(void); // read next character from input stream
+ColorArg get_color_arg(void); // read in argument for new color cmds
+IntArray *get_D_fixed_args(const size_t);
+ // read in fixed number of integer
+ // arguments
+IntArray *get_D_fixed_args_odd_dummy(const size_t);
+ // read in a fixed number of integer
+ // arguments plus optional dummy
+IntArray *get_D_variable_args(void);
+ // variable, even number of int args
+char *get_extended_arg(void); // argument for `x X' (several lines)
+IntArg get_integer_arg(void); // read in next integer argument
+IntArray *get_possibly_integer_args();
+ // 0 or more integer arguments
+char *get_string_arg(void); // read in next string arg, ended by WS
+inline bool is_space_or_tab(const Char);
+ // test on space/tab char
+Char next_arg_begin(void); // skip white space on current line
+Char next_command(void); // go to next command, evt. diff. line
+inline bool odd(const int); // test if integer is odd
+void position_to_end_of_args(const IntArray * const);
+ // positioning after drawing
+void remember_filename(const char *);
+ // set global current_filename
+void send_draw(const Char, const IntArray * const);
+ // call pr->draw
+void skip_line(void); // unconditionally skip to next line
+bool skip_line_checked(void); // skip line, false if args are left
+void skip_line_fatal(void); // skip line, fatal if args are left
+void skip_line_warn(void); // skip line, warn if args are left
+void skip_line_D(void); // skip line in D commands
+void skip_line_x(void); // skip line in x commands
+void skip_to_end_of_line(void); // skip to the end of the current line
+inline void unget_char(const Char);
+ // restore character onto input
+
+// parser subcommands
+void parse_color_command(color *);
+ // color sub(sub)commands m and DF
+void parse_D_command(void); // graphical subcommands
+bool parse_x_command(void); // device controller subcommands
+
+
+/**********************************************************************
+ class methods
+ **********************************************************************/
+
+#ifdef USE_ENV_STACK
+EnvStack::EnvStack(void)
{
+ num_allocated = 4;
+ // allocate pointer to array of num_allocated pointers to environment
+ data = (environment **) malloc(envp_size * num_allocated);
+ if (data == 0)
+ fatal("could not allocate environment data");
+ num_stored = 0;
}
-inline int get_char()
+EnvStack::~EnvStack(void)
{
- return getc(current_file);
+ for (size_t i = 0; i < num_stored; i++)
+ delete data[i];
+ free(data);
}
-/*
- * remember_filename - is needed as get_string might overwrite the
- * filename eventually.
- */
+// return top element from stack and decrease stack pointer
+//
+// the calling function must take care of properly deleting the result
+environment *
+EnvStack::pop(void)
+{
+ num_stored--;
+ environment *result = data[num_stored];
+ data[num_stored] = 0;
+ return result;
+}
-void remember_filename(const char *filename)
+// copy argument and push this onto the stack
+void
+EnvStack::push(environment *e)
{
- if (current_filename != 0) {
- free((char *)current_filename);
+ environment *e_copy = new environment;
+ if (num_stored >= num_allocated) {
+ environment **old_data = data;
+ num_allocated *= 2;
+ data = (environment **) malloc(envp_size * num_allocated);
+ if (data == 0)
+ fatal("could not allocate data");
+ for (size_t i = 0; i < num_stored; i++)
+ data[i] = old_data[i];
+ free(old_data);
}
- if (strcmp(filename, "-") == 0) {
- filename = "<standard input>";
+ e_copy->col = new color;
+ e_copy->fill = new color;
+ *e_copy->col = *e->col;
+ *e_copy->fill = *e->fill;
+ e_copy->fontno = e->fontno;
+ e_copy->height = e->height;
+ e_copy->hpos = e->hpos;
+ e_copy->size = e->size;
+ e_copy->slant = e->slant;
+ e_copy->vpos = e->vpos;
+ data[num_stored] = e_copy;
+ num_stored++;
+}
+#endif // USE_ENV_STACK
+
+IntArray::IntArray(void)
+{
+ num_allocated = 4;
+ data = new IntArg[num_allocated];
+ num_stored = 0;
+}
+
+IntArray::IntArray(const size_t n)
+{
+ if (n <= 0)
+ fatal("number of integers to be allocated must be > 0");
+ num_allocated = n;
+ data = new IntArg[num_allocated];
+ num_stored = 0;
+}
+
+IntArray::~IntArray(void)
+{
+ a_delete data;
+}
+
+void
+IntArray::append(IntArg x)
+{
+ if (num_stored >= num_allocated) {
+ IntArg *old_data = data;
+ num_allocated *= 2;
+ data = new IntArg[num_allocated];
+ for (size_t i = 0; i < num_stored; i++)
+ data[i] = old_data[i];
+ a_delete old_data;
}
- current_filename = (const char *)malloc(strlen(filename) + 1);
- if (current_filename == 0) {
- fatal("can't malloc space for filename");
+ data[num_stored] = x;
+ num_stored++;
+}
+
+StringBuf::StringBuf(void)
+{
+ num_stored = 0;
+ num_allocated = 128;
+ data = new Char[num_allocated];
+}
+
+StringBuf::~StringBuf(void)
+{
+ a_delete data;
+}
+
+void
+StringBuf::append(const Char c)
+{
+ if (num_stored >= num_allocated) {
+ Char *old_data = data;
+ num_allocated *= 2;
+ data = new Char[num_allocated];
+ for (size_t i = 0; i < num_stored; i++)
+ data[i] = old_data[i];
+ a_delete old_data;
}
- strcpy((char *)current_filename, (char *)filename);
+ data[num_stored] = c;
+ num_stored++;
}
-void do_file(const char *filename)
+char *
+StringBuf::make_string(void)
{
- int npages = 0;
- if (filename[0] == '-' && filename[1] == '\0') {
- remember_filename(filename);
- current_file = stdin;
+ char *result = new char[num_stored + 1];
+ for (size_t i = 0; i < num_stored; i++)
+ result[i] = (char) data[i];
+ result[num_stored] = '\0';
+ return result;
+}
+
+void
+StringBuf::reset(void)
+{
+ num_stored = 0;
+}
+
+/**********************************************************************
+ utility functions
+ **********************************************************************/
+
+//////////////////////////////////////////////////////////////////////
+/* color_from_Df_command:
+ Process the gray shade setting command Df.
+
+ Transform Df style color into DF style color.
+ Df color: 0-1000, 0 is white
+ DF color: 0-65536, 0 is black
+
+ The Df command is obsoleted by command DFg, but kept for
+ compatibility.
+
+ XXX: Add proper handling for values < 0 or > 1000 as documented in
+ groff_out(5).
+*/
+ColorArg
+color_from_Df_command(IntArg Df_gray)
+{
+ if (Df_gray <= 0)
+ return COLORARG_MAX;
+ if (Df_gray >= 1000)
+ return 0;
+ return ColorArg((1000-Df_gray) * COLORARG_MAX / 1000); // scaling
+}
+
+//////////////////////////////////////////////////////////////////////
+/* delete_current_env():
+ Delete global variable current_env and its pointer members.
+
+ This should be a class method of environment.
+*/
+void delete_current_env(void)
+{
+ delete current_env->col;
+ delete current_env->fill;
+ delete current_env;
+}
+
+//////////////////////////////////////////////////////////////////////
+/* fatal_command():
+ Emit error message about invalid command and abort.
+*/
+void
+fatal_command(char command)
+{
+ fatal("`%1' command invalid before first `p' command", command);
+}
+
+//////////////////////////////////////////////////////////////////////
+/* get_char():
+ Retrieve the next character from the input queue.
+
+ Return: The retrieved character (incl. EOF), converted to Char.
+*/
+inline Char
+get_char(void)
+{
+ return (Char) getc(current_file);
+}
+
+//////////////////////////////////////////////////////////////////////
+/* get_color_arg():
+ Retrieve an argument suitable for the color commands m and DF.
+
+ Return: The retrieved color argument.
+*/
+ColorArg
+get_color_arg(void)
+{
+ IntArg x = get_integer_arg();
+ if (x < 0 || x > (IntArg)COLORARG_MAX) {
+ error("color component argument out of range");
+ x = 0;
}
- else {
- errno = 0;
- current_file = fopen(filename, "r");
- if (current_file == 0) {
- error("can't open `%1'", filename);
- return;
+ return (ColorArg) x;
+}
+
+//////////////////////////////////////////////////////////////////////
+/* get_D_fixed_args():
+ Get a fixed number of integer arguments for D commands.
+
+ Fatal if wrong number of arguments.
+ Too many arguments on the line raise a warning.
+ A line skip is done.
+
+ number: In-parameter, the number of arguments to be retrieved.
+ ignore: In-parameter, ignore next argument -- GNU troff always emits
+ pairs of parameters for `D' extensions added by groff.
+ Default is `false'.
+
+ Return: New IntArray containing the arguments.
+*/
+IntArray *
+get_D_fixed_args(const size_t number)
+{
+ if (number <= 0)
+ fatal("requested number of arguments must be > 0");
+ IntArray *args = new IntArray(number);
+ for (size_t i = 0; i < number; i++)
+ args->append(get_integer_arg());
+ skip_line_D();
+ return args;
+}
+
+//////////////////////////////////////////////////////////////////////
+/* get_D_fixed_args_odd_dummy():
+ Get a fixed number of integer arguments for D commands and optionally
+ ignore a dummy integer argument if the requested number is odd.
+
+ The gtroff program adds a dummy argument to some commands to get
+ an even number of arguments.
+ Error if the number of arguments differs from the scheme above.
+ A line skip is done.
+
+ number: In-parameter, the number of arguments to be retrieved.
+
+ Return: New IntArray containing the arguments.
+*/
+IntArray *
+get_D_fixed_args_odd_dummy(const size_t number)
+{
+ if (number <= 0)
+ fatal("requested number of arguments must be > 0");
+ IntArray *args = new IntArray(number);
+ for (size_t i = 0; i < number; i++)
+ args->append(get_integer_arg());
+ if (odd(number)) {
+ IntArray *a = get_possibly_integer_args();
+ if (a->len() > 1)
+ error("too many arguments");
+ delete a;
+ }
+ skip_line_D();
+ return args;
+}
+
+//////////////////////////////////////////////////////////////////////
+/* get_D_variable_args():
+ Get a variable even number of integer arguments for D commands.
+
+ Get as many integer arguments as possible from the rest of the
+ current line.
+ - The arguments are separated by an arbitrary sequence of space or
+ tab characters.
+ - A comment, a newline, or EOF indicates the end of processing.
+ - Error on non-digit characters different from these.
+ - A final line skip is performed (except for EOF).
+
+ Return: New IntArray of the retrieved arguments.
+*/
+IntArray *
+get_D_variable_args()
+{
+ IntArray *args = get_possibly_integer_args();
+ size_t n = args->len();
+ if (n <= 0)
+ error("no arguments found");
+ if (odd(n))
+ error("even number of arguments expected");
+ skip_line_D();
+ return args;
+}
+
+//////////////////////////////////////////////////////////////////////
+/* get_extended_arg():
+ Retrieve extended arg for `x X' command.
+
+ - Skip leading spaces and tabs, error on EOL or newline.
+ - Return everything before the next NL or EOF ('#' is not a comment);
+ as long as the following line starts with '+' this is returned
+ as well, with the '+' replaced by a newline.
+ - Final line skip is always performed.
+
+ Return: Allocated (new) string of retrieved text argument.
+*/
+char *
+get_extended_arg(void)
+{
+ StringBuf buf = StringBuf();
+ Char c = next_arg_begin();
+ while ((int) c != EOF) {
+ if ((int) c == '\n') {
+ current_lineno++;
+ c = get_char();
+ if ((int) c == '+')
+ buf.append((Char) '\n');
+ else {
+ unget_char(c); // first character of next line
+ break;
+ }
}
- remember_filename(filename);
+ else
+ buf.append(c);
+ c = get_char();
}
- environment env;
- env.vpos = -1;
- env.hpos = -1;
- env.fontno = -1;
- env.height = 0;
- env.slant = 0;
- environment_list *env_list = 0;
- current_lineno = 1;
- int command;
- char *s;
- command = get_char();
- if (command == EOF)
- return;
- if (command != 'x')
- fatal("the first command must be `x T'");
- s = get_string();
- if (s[0] != 'T')
- fatal("the first command must be `x T'");
- char *dev = get_string();
- if (pr == 0) {
- device = strsave(dev);
- if (!font::load_desc())
- fatal("sorry, I can't continue");
+ return buf.make_string();
+}
+
+//////////////////////////////////////////////////////////////////////
+/* get_integer_arg(): Retrieve integer argument.
+
+ Skip leading spaces and tabs, collect an optional '-' and all
+ following decimal digits (at least one) up to the next non-digit,
+ which is restored onto the input queue.
+
+ Fatal error on all other situations.
+
+ Return: Retrieved integer.
+*/
+IntArg
+get_integer_arg(void)
+{
+ StringBuf buf = StringBuf();
+ Char c = next_arg_begin();
+ if ((int) c == '-') {
+ buf.append(c);
+ c = get_char();
}
- else {
- if (device == 0 || strcmp(device, dev) != 0)
- fatal("all files must use the same device");
+ if (!isdigit((int) c))
+ error("integer argument expected");
+ while (isdigit((int) c)) {
+ buf.append(c);
+ c = get_char();
}
- skip_line();
- env.size = 10*font::sizescale;
- command = get_char();
- if (command != 'x')
- fatal("the second command must be `x res'");
- s = get_string();
- if (s[0] != 'r')
- fatal("the second command must be `x res'");
- int n = get_integer();
- if (n != font::res)
- fatal("resolution does not match");
- n = get_integer();
- if (n != font::hor)
- fatal("horizontal resolution does not match");
- n = get_integer();
- if (n != font::vert)
- fatal("vertical resolution does not match");
- skip_line();
- command = get_char();
- if (command != 'x')
- fatal("the third command must be `x init'");
- s = get_string();
- if (s[0] != 'i')
- fatal("the third command must be `x init'");
- skip_line();
- if (pr == 0)
- pr = make_printer();
- while ((command = get_char()) != EOF) {
- switch (command) {
- case 's':
- env.size = get_integer();
- if (env.height == env.size)
- env.height = 0;
- break;
- case 'f':
- env.fontno = get_integer();
- break;
- case 'F':
- remember_filename(get_string());
- break;
- case 'C':
- {
- if (npages == 0)
- fatal("`C' command illegal before first `p' command");
- char *s = get_string();
- pr->set_special_char(s, &env);
+ // c is not a digit
+ unget_char(c);
+ char *s = buf.make_string();
+ errno = 0;
+ long int number = strtol(s, 0, 10);
+ if (errno != 0
+ || number > INTARG_MAX || number < -INTARG_MAX) {
+ error("integer argument too large");
+ number = 0;
+ }
+ delete s;
+ return (IntArg) number;
+}
+
+//////////////////////////////////////////////////////////////////////
+/* get_possibly_integer_args():
+ Parse the rest of the input line as a list of integer arguments.
+
+ Get as many integer arguments as possible from the rest of the
+ current line, even none.
+ - The arguments are separated by an arbitrary sequence of space or
+ tab characters.
+ - A comment, a newline, or EOF indicates the end of processing.
+ - Error on non-digit characters different from these.
+ - No line skip is performed.
+
+ Return: New IntArray of the retrieved arguments.
+*/
+IntArray *
+get_possibly_integer_args()
+{
+ bool done = false;
+ StringBuf buf = StringBuf();
+ Char c = get_char();
+ IntArray *args = new IntArray();
+ while (!done) {
+ buf.reset();
+ while (is_space_or_tab(c))
+ c = get_char();
+ if (c == '-') {
+ Char c1 = get_char();
+ if (isdigit((int) c1)) {
+ buf.append(c);
+ c = c1;
}
- break;
- case 'N':
- {
- if (npages == 0)
- fatal("`N' command illegal before first `p' command");
- pr->set_numbered_char(get_integer(), &env);
+ else
+ unget_char(c1);
+ }
+ while (isdigit((int) c)) {
+ buf.append(c);
+ c = get_char();
+ }
+ if (!buf.is_empty()) {
+ char *s = buf.make_string();
+ errno = 0;
+ long int x = strtol(s, 0, 10);
+ if (errno
+ || x > INTARG_MAX || x < -INTARG_MAX) {
+ error("invalid integer argument, set to 0");
+ x = 0;
}
+ args->append((IntArg) x);
+ delete s;
+ }
+ // Here, c is not a digit.
+ // Terminate on comment, end of line, or end of file, while
+ // space or tab indicate continuation; otherwise error.
+ switch((int) c) {
+ case '#':
+ skip_to_end_of_line();
+ done = true;
break;
- case 'H':
- env.hpos = get_integer();
+ case '\n':
+ done = true;
+ unget_char(c);
break;
- case 'h':
- env.hpos += get_integer();
+ case EOF:
+ done = true;
break;
- case 'V':
- env.vpos = get_integer();
+ case ' ':
+ case '\t':
break;
- case 'v':
- env.vpos += get_integer();
+ default:
+ error("integer argument expected");
break;
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- {
- int c = get_char();
- if (!csdigit(c))
- fatal("digit expected");
- env.hpos += (command - '0')*10 + (c - '0');
- }
- // fall through
- case 'c':
- {
- if (npages == 0)
- fatal("`c' command illegal before first `p' command");
- int c = get_char();
- if (c == EOF)
- fatal("missing argument to `c' command");
- pr->set_ascii_char(c, &env);
- }
+ }
+ }
+ return args;
+}
+
+//////////////////////////////////////////////////////////////////////
+/* get_string_arg():
+ Retrieve string arg.
+
+ - Skip leading spaces and tabs; error on EOL or newline.
+ - Return all following characters before the next space, tab,
+ newline, or EOF character (in-word '#' is not a comment character).
+ - The terminating space, tab, newline, or EOF character is restored
+ onto the input queue, so no line skip.
+
+ Return: Retrieved string as char *, allocated by 'new'.
+*/
+char *
+get_string_arg(void)
+{
+ StringBuf buf = StringBuf();
+ Char c = next_arg_begin();
+ while (!is_space_or_tab(c)
+ && c != Char('\n') && c != Char(EOF)) {
+ buf.append(c);
+ c = get_char();
+ }
+ unget_char(c); // restore white space
+ return buf.make_string();
+}
+
+//////////////////////////////////////////////////////////////////////
+/* is_space_or_tab():
+ Test a character if it is a space or tab.
+
+ c: In-parameter, character to be tested.
+
+ Return: True, if c is a space or tab character, false otherwise.
+*/
+inline bool
+is_space_or_tab(const Char c)
+{
+ return (c == Char(' ') || c == Char('\t')) ? true : false;
+}
+
+//////////////////////////////////////////////////////////////////////
+/* next_arg_begin():
+ Return first character of next argument.
+
+ Skip space and tab characters; error on newline or EOF.
+
+ Return: The first character different from these (including '#').
+*/
+Char
+next_arg_begin(void)
+{
+ Char c;
+ while (1) {
+ c = get_char();
+ switch ((int) c) {
+ case ' ':
+ case '\t':
break;
- case 'n':
- if (npages == 0)
- fatal("`n' command illegal before first `p' command");
- pr->end_of_line();
- (void)get_integer();
- (void)get_integer();
+ case '\n':
+ case EOF:
+ error("missing argument");
break;
- case 'w':
+ default: // first essential character
+ return c;
+ }
+ }
+}
+
+//////////////////////////////////////////////////////////////////////
+/* next_command():
+ Find the first character of the next command.
+
+ Skip spaces, tabs, comments (introduced by #), and newlines.
+
+ Return: The first character different from these (including EOF).
+*/
+Char
+next_command(void)
+{
+ Char c;
+ while (1) {
+ c = get_char();
+ switch ((int) c) {
case ' ':
+ case '\t':
break;
case '\n':
current_lineno++;
break;
- case 'p':
- if (npages)
- pr->end_page(env.vpos);
- npages++;
- pr->begin_page(get_integer());
- env.vpos = 0;
- break;
- case '{':
- env_list = new environment_list(env, env_list);
- break;
- case '}':
- if (!env_list) {
- fatal("can't pop");
- }
- else {
- env = env_list->env;
- environment_list *tem = env_list;
- env_list = env_list->next;
- delete tem;
- }
- break;
- case 'u':
- {
- if (npages == 0)
- fatal("`u' command illegal before first `p' command");
- int kern = get_integer();
- int c = get_char();
- while (c == ' ')
- c = get_char();
- while (c != EOF) {
- if (c == '\n') {
- current_lineno++;
- break;
- }
- int w;
- pr->set_ascii_char(c, &env, &w);
- env.hpos += w + kern;
- c = get_char();
- if (c == ' ')
- break;
- }
- }
- break;
- case 't':
- {
- if (npages == 0)
- fatal("`t' command illegal before first `p' command");
- int c;
- while ((c = get_char()) != EOF && c != ' ') {
- if (c == '\n') {
- current_lineno++;
- break;
- }
- int w;
- pr->set_ascii_char(c, &env, &w);
- env.hpos += w;
- }
- }
- break;
- case '#':
- skip_line();
- break;
- case 'D':
- {
- if (npages == 0)
- fatal("`D' command illegal before first `p' command");
- int c;
- while ((c = get_char()) == ' ')
- ;
- int n;
- int *p = 0;
- int szp = 0;
- int np;
- for (np = 0; possibly_get_integer(&n); np++) {
- if (np >= szp) {
- if (szp == 0) {
- szp = 16;
- p = new int[szp];
- }
- else {
- int *oldp = p;
- p = new int[szp*2];
- memcpy(p, oldp, szp*sizeof(int));
- szp *= 2;
- a_delete oldp;
- }
- }
- p[np] = n;
- }
- pr->draw(c, p, np, &env);
- if (c == 'e') {
- if (np > 0)
- env.hpos += p[0];
- }
- else if (c == 'f' || c == 't')
- ;
- else {
- int i;
- for (i = 0; i < np/2; i++) {
- env.hpos += p[i*2];
- env.vpos += p[i*2 + 1];
- }
- // there might be an odd number of characters
- if (i*2 < np)
- env.hpos += p[i*2];
- }
- a_delete p;
- skip_line();
- }
- break;
- case 'x':
- {
- char *s = get_string();
- int suppress_skip = 0;
- switch (s[0]) {
- case 'i':
- error("duplicate `x init' command");
- break;
- case 'T':
- error("duplicate `x T' command");
- break;
- case 'r':
- error("duplicate `x res' command");
- break;
- case 'p':
- break;
- case 's':
- break;
- case 't':
- break;
- case 'f':
- {
- int n = get_integer();
- char *name = get_string();
- pr->load_font(n, name);
- }
- break;
- case 'H':
- env.height = get_integer();
- if (env.height == env.size)
- env.height = 0;
- break;
- case 'S':
- env.slant = get_integer();
- break;
- case 'X':
- if (npages == 0)
- fatal("`x X' command illegal before first `p' command");
- pr->special(get_string(1), &env);
- suppress_skip = 1;
- break;
- case 'u':
- // .cu
- pr->special(get_string(), &env, 'u');
- break;
- default:
- error("unrecognised x command `%1'", s);
- }
- if (!suppress_skip)
- skip_line();
- }
- break;
- default:
- error("unrecognised command code %1", int(command));
+ case '#': // comment
skip_line();
break;
+ default: // EOF or first essential character
+ return c;
}
}
- if (npages)
- pr->end_page(env.vpos);
}
-int get_integer()
+//////////////////////////////////////////////////////////////////////
+/* odd():
+ Test whether argument is an odd number.
+
+ n: In-parameter, the integer to be tested.
+
+ Return: True if odd, false otherwise.
+*/
+inline bool
+odd(const int n)
+{
+ return (n & 1 == 1) ? true : false;
+}
+
+//////////////////////////////////////////////////////////////////////
+/* position_to_end_of_args():
+ Move graphical pointer to end of drawn figure.
+
+ This is used by the D commands that draw open geometrical figures.
+ The algorithm simply sums up all horizontal displacements (arguments
+ with even number) for the horizontal component. Similarly, the
+ vertical component is the sum of the odd arguments.
+
+ args: In-parameter, the arguments of a former drawing command.
+*/
+void
+position_to_end_of_args(const IntArray * const args)
{
- int c = get_char();
- while (c == ' ')
- c = get_char();
- int neg = 0;
- if (c == '-') {
- neg = 1;
+ size_t i;
+ const size_t n = args->len();
+ for (i = 0; i < n; i += 2)
+ current_env->hpos += (*args)[i];
+ for (i = 1; i < n; i += 2)
+ current_env->vpos += (*args)[i];
+}
+
+//////////////////////////////////////////////////////////////////////
+/* remember_filename():
+ Set global variable current_filename.
+
+ The actual filename is stored in current_filename. This is used by
+ the postprocessors, expecting the name "<standard input>" for stdin.
+
+ filename: In-out-parameter; is changed to the new value also.
+*/
+void
+remember_filename(const char *filename)
+{
+ char *fname;
+ if (strcmp(filename, "-") == 0)
+ fname = "<standard input>";
+ else
+ fname = (char *) filename;
+ size_t len = strlen(fname) + 1;
+ if (current_filename != 0)
+ free((char *)current_filename);
+ current_filename = (const char *) malloc(len);
+ if (current_filename == 0)
+ fatal("can't malloc space for filename");
+ strncpy((char *)current_filename, (char *)fname, len);
+}
+
+//////////////////////////////////////////////////////////////////////
+/* send_draw():
+ Call draw method of printer class.
+
+ subcmd: Letter of actual D subcommand.
+ args: Array of integer arguments of actual D subcommand.
+*/
+void
+send_draw(const Char subcmd, const IntArray * const args)
+{
+ EnvInt n = (EnvInt) args->len();
+ pr->draw((int) subcmd, (IntArg *) args->get_data(), n, current_env);
+}
+
+//////////////////////////////////////////////////////////////////////
+/* skip_line():
+ Go to next line within the input queue.
+
+ Skip the rest of the current line, including the newline character.
+ The global variable current_lineno is adjusted.
+ No errors are raised.
+*/
+void
+skip_line(void)
+{
+ Char c = get_char();
+ while (1) {
+ if (c == '\n') {
+ current_lineno++;
+ break;
+ }
+ if (c == EOF)
+ break;
c = get_char();
}
- if (!csdigit(c))
- fatal("integer expected");
- int total = 0;
- do {
- total = total*10;
- if (neg)
- total -= c - '0';
- else
- total += c - '0';
- c = get_char();
- } while (csdigit(c));
- if (c != EOF)
- ungetc(c, current_file);
- return total;
}
-int possibly_get_integer(int *res)
+//////////////////////////////////////////////////////////////////////
+/* skip_line_checked ():
+ Check that there aren't any arguments left on the rest of the line,
+ then skip line.
+
+ Spaces, tabs, and a comment are allowed before newline or EOF.
+ All other characters raise an error.
+*/
+bool
+skip_line_checked(void)
{
- int c = get_char();
- while (c == ' ')
- c = get_char();
- int neg = 0;
- if (c == '-') {
- neg = 1;
+ bool ok = true;
+ Char c = get_char();
+ while (is_space_or_tab(c))
c = get_char();
+ switch((int) c) {
+ case '#': // comment
+ skip_line();
+ break;
+ case '\n':
+ current_lineno++;
+ break;
+ case EOF:
+ break;
+ default:
+ ok = false;
+ skip_line();
+ break;
}
- if (!csdigit(c)) {
- if (c != EOF)
- ungetc(c, current_file);
- return 0;
+ return ok;
+}
+
+//////////////////////////////////////////////////////////////////////
+/* skip_line_fatal ():
+ Fatal error if arguments left, otherwise skip line.
+
+ Spaces, tabs, and a comment are allowed before newline or EOF.
+ All other characters trigger the error.
+*/
+void
+skip_line_fatal(void)
+{
+ bool ok = skip_line_checked();
+ if (!ok) {
+ current_lineno--;
+ error("too many arguments");
+ current_lineno++;
+ }
+}
+
+//////////////////////////////////////////////////////////////////////
+/* skip_line_warn ():
+ Skip line, but warn if arguments are left on actual line.
+
+ Spaces, tabs, and a comment are allowed before newline or EOF.
+ All other characters raise a warning
+*/
+void
+skip_line_warn(void)
+{
+ bool ok = skip_line_checked();
+ if (!ok) {
+ current_lineno--;
+ warning("too many arguments on current line");
+ current_lineno++;
}
- int total = 0;
- do {
- total = total*10;
- if (neg)
- total -= c - '0';
- else
- total += c - '0';
- c = get_char();
- } while (csdigit(c));
- if (c != EOF)
- ungetc(c, current_file);
- *res = total;
- return 1;
}
+//////////////////////////////////////////////////////////////////////
+/* skip_line_D ():
+ Skip line in `D' commands.
-char *get_string(int is_long)
+ Decide whether in case of an additional argument a fatal error is
+ raised (the documented classical behavior), only a warning is
+ issued, or the line is just skipped (former groff behavior).
+ Actually decided for the warning.
+*/
+void
+skip_line_D(void)
{
- static char *buf;
- static int buf_size;
- int c = get_char();
- while (c == ' ')
+ skip_line_warn();
+ // or: skip_line_fatal();
+ // or: skip_line();
+}
+
+//////////////////////////////////////////////////////////////////////
+/* skip_line_x ():
+ Skip line in `x' commands.
+
+ Decide whether in case of an additional argument a fatal error is
+ raised (the documented classical behavior), only a warning is
+ issued, or the line is just skipped (former groff behavior).
+ Actually decided for the warning.
+*/
+void
+skip_line_x(void)
+{
+ skip_line_warn();
+ // or: skip_line_fatal();
+ // or: skip_line();
+}
+
+//////////////////////////////////////////////////////////////////////
+/* skip_to_end_of_line():
+ Go to the end of the current line.
+
+ Skip the rest of the current line, excluding the newline character.
+ The global variable current_lineno is not changed.
+ No errors are raised.
+*/
+void
+skip_to_end_of_line(void)
+{
+ Char c = get_char();
+ while (1) {
+ if (c == '\n') {
+ unget_char(c);
+ return;
+ }
+ if (c == EOF)
+ return;
c = get_char();
- for (int i = 0;; i++) {
- if (i >= buf_size) {
- if (buf_size == 0) {
- buf_size = 16;
- buf = new char[buf_size];
+ }
+}
+
+//////////////////////////////////////////////////////////////////////
+/* unget_char(c):
+ Restore character c onto input queue.
+
+ Write a character back onto the input stream.
+ EOF is gracefully handled.
+
+ c: In-parameter; character to be pushed onto the input queue.
+*/
+inline void
+unget_char(const Char c)
+{
+ if (c != EOF) {
+ int ch = (int) c;
+ if (ungetc(ch, current_file) == EOF)
+ fatal("could not unget character");
+ }
+}
+
+
+/**********************************************************************
+ parser subcommands
+ **********************************************************************/
+
+//////////////////////////////////////////////////////////////////////
+/* parse_color_command:
+ Process the commands m and DF, but not Df.
+
+ col: In-out-parameter; the color object to be set, must have
+ been initialized before.
+*/
+void
+parse_color_command(color *col)
+{
+ ColorArg gray = 0;
+ ColorArg red = 0, green = 0, blue = 0;
+ ColorArg cyan = 0, magenta = 0, yellow = 0, black = 0;
+ Char subcmd = next_arg_begin();
+ switch((int) subcmd) {
+ case 'c': // DFc or mc: CMY
+ cyan = get_color_arg();
+ magenta = get_color_arg();
+ yellow = get_color_arg();
+ col->set_cmy(cyan, magenta, yellow);
+ break;
+ case 'd': // DFd or md: set default color
+ col->set_default();
+ break;
+ case 'g': // DFg or mg: gray
+ gray = get_color_arg();
+ col->set_gray(gray);
+ break;
+ case 'k': // DFk or mk: CMYK
+ cyan = get_color_arg();
+ magenta = get_color_arg();
+ yellow = get_color_arg();
+ black = get_color_arg();
+ col->set_cmyk(cyan, magenta, yellow, black);
+ break;
+ case 'r': // DFr or mr: RGB
+ red = get_color_arg();
+ green = get_color_arg();
+ blue = get_color_arg();
+ col->set_rgb(red, green, blue);
+ break;
+ default:
+ error("invalid color scheme `%1'", (int) subcmd);
+ break;
+ } // end of color subcommands
+}
+
+//////////////////////////////////////////////////////////////////////
+/* parse_D_command():
+ Parse the subcommands of graphical command D.
+
+ This is the part of the do_file() parser that scans the graphical
+ subcommands.
+ - Error on lacking or wrong arguments.
+ - Warning on too many arguments.
+ - Line is always skipped.
+*/
+void
+parse_D_command()
+{
+ Char subcmd = next_arg_begin();
+ switch((int) subcmd) {
+ case '~': // D~: draw B-spline
+ // actually, this isn't available for some postprocessors
+ // fall through
+ default: // unknown options are passed to device
+ {
+ IntArray *args = get_D_variable_args();
+ send_draw(subcmd, args);
+ position_to_end_of_args(args);
+ delete args;
+ break;
+ }
+ case 'a': // Da: draw arc
+ {
+ IntArray *args = get_D_fixed_args(4);
+ send_draw(subcmd, args);
+ position_to_end_of_args(args);
+ delete args;
+ break;
+ }
+ case 'c': // Dc: draw circle line
+ {
+ IntArray *args = get_D_fixed_args(1);
+ send_draw(subcmd, args);
+ // move to right end
+ current_env->hpos += (*args)[0];
+ delete args;
+ break;
+ }
+ case 'C': // DC: draw solid circle
+ {
+ IntArray *args = get_D_fixed_args_odd_dummy(1);
+ send_draw(subcmd, args);
+ // move to right end
+ current_env->hpos += (*args)[0];
+ delete args;
+ break;
+ }
+ case 'e': // De: draw ellipse line
+ case 'E': // DE: draw solid ellipse
+ {
+ IntArray *args = get_D_fixed_args(2);
+ send_draw(subcmd, args);
+ // move to right end
+ current_env->hpos += (*args)[0];
+ delete args;
+ break;
+ }
+ case 'f': // Df: set fill gray; obsoleted by DFg
+ {
+ IntArg arg = get_integer_arg();
+ if ((arg >= 0) && (arg <= 1000)) {
+ // convert arg and treat it like DFg
+ ColorArg gray = color_from_Df_command(arg);
+ current_env->fill->set_gray(gray);
}
else {
- char *old_buf = buf;
- int old_size = buf_size;
- buf_size *= 2;
- buf = new char[buf_size];
- memcpy(buf, old_buf, old_size);
- a_delete old_buf;
+ // set fill color to the same value as the current outline color
+ delete current_env->fill;
+ current_env->fill = new color(current_env->col);
}
+ pr->change_fill_color(current_env);
+ // skip unused `vertical' component (\D'...' always emits pairs)
+ (void) get_integer_arg();
+ // no positioning
+ skip_line_x();
+ break;
}
- if ((!is_long && (c == ' ' || c == '\n')) || c == EOF) {
- buf[i] = '\0';
+ case 'F': // DF: set fill color, several formats
+ parse_color_command(current_env->fill);
+ pr->change_fill_color(current_env);
+ // no positioning (setting-only command)
+ skip_line_x();
+ break;
+ case 'l': // Dl: draw line
+ {
+ IntArray *args = get_D_fixed_args(2);
+ send_draw(subcmd, args);
+ position_to_end_of_args(args);
+ delete args;
break;
}
- if (is_long && c == '\n') {
- current_lineno++;
- c = get_char();
- if (c == '+')
- c = '\n';
+ case 'p': // Dp: draw closed polygon line
+ case 'P': // DP: draw solid closed polygon
+ {
+ IntArray *args = get_D_variable_args();
+ send_draw(subcmd, args);
+# ifdef STUPID_DRAWING_POSITIONING
+ // final args positioning
+ position_to_end_of_args(args);
+# endif
+ delete args;
+ break;
+ }
+ case 't': // Dt: set line thickness
+ {
+ IntArray *args = get_D_fixed_args_odd_dummy(1);
+ send_draw(subcmd, args);
+# ifdef STUPID_DRAWING_POSITIONING
+ // final args positioning
+ position_to_end_of_args(args);
+# endif
+ // no positioning?
+ delete args;
+ break;
+ }
+ } // end of D subcommands
+}
+
+//////////////////////////////////////////////////////////////////////
+/* parse_x_command():
+ Parse subcommands of the device control command x.
+
+ This is the part of the do_file() parser that scans the device
+ controlling commands.
+ - Error on duplicate prologue commands.
+ - Error on wrong or lacking arguments.
+ - Warning on too many arguments.
+ - Line is always skipped.
+
+ Globals:
+ - current_env: is set by many subcommands.
+ - npages: page counting variable
+
+ Return: boolean in the meaning of `stopped'
+ - true if parsing should be stopped (`x stop').
+ - false if parsing should continue.
+*/
+bool
+parse_x_command(void)
+{
+ bool stopped = false;
+ char *subcmd_str = get_string_arg();
+ char subcmd = subcmd_str[0];
+ switch (subcmd) {
+ case 'f': // x font: mount font
+ {
+ IntArg n = get_integer_arg();
+ char *name = get_string_arg();
+ pr->load_font(n, name);
+ delete name;
+ skip_line_x();
+ break;
+ }
+ case 'F': // x Filename: set filename for errors
+ {
+ char *str_arg = get_string_arg();
+ if (str_arg == 0)
+ warning("empty argument for `x F' command");
else {
- buf[i] = '\0';
- break;
+ remember_filename(str_arg);
+ delete str_arg;
}
- }
- buf[i] = c;
- c = get_char();
+ break;
+ }
+ case 'H': // x Height: set character height
+ current_env->height = get_integer_arg();
+ if (current_env->height == current_env->size)
+ current_env->height = 0;
+ skip_line_x();
+ break;
+ case 'i': // x init: initialize device
+ error("duplicate `x init' command");
+ skip_line_x();
+ break;
+ case 'p': // x pause: pause device
+ skip_line_x();
+ break;
+ case 'r': // x res: set resolution
+ error("duplicate `x res' command");
+ skip_line_x();
+ break;
+ case 's': // x stop: stop device
+ stopped = true;
+ skip_line_x();
+ break;
+ case 'S': // x Slant: set slant
+ current_env->slant = get_integer_arg();
+ skip_line_x();
+ break;
+ case 't': // x trailer: generate trailer info
+ skip_line_x();
+ break;
+ case 'T': // x Typesetter: set typesetter
+ error("duplicate `x T' command");
+ skip_line();
+ break;
+ case 'u': // x underline: from .cu
+ {
+ char *str_arg = get_string_arg();
+ pr->special(str_arg, current_env, 'u');
+ delete str_arg;
+ skip_line_x();
+ break;
+ }
+ case 'X': // x X: send uninterpretedly to device
+ {
+ char *str_arg = get_extended_arg(); // includes line skip
+ if (npages <= 0)
+ error("`x X' command invalid before first `p' command");
+ else
+ pr->special(str_arg, current_env);
+ delete str_arg;
+ break;
+ }
+ default: // ignore unknown x commands, but warn
+ warning("unknown command `x %1'", subcmd);
+ skip_line();
}
- if (c != EOF)
- ungetc(c, current_file);
- return buf;
+ delete subcmd_str;
+ return stopped;
}
-void skip_line()
+
+/**********************************************************************
+ exported part (by driver.h)
+ **********************************************************************/
+
+////////////////////////////////////////////////////////////////////////
+/* do_file():
+ Parse and postprocess groff intermediate output.
+
+ filename: "-" for standard input, normal file name otherwise
+*/
+void
+do_file(const char *filename)
{
- int c;
- while ((c = get_char()) != EOF)
- if (c == '\n') {
- current_lineno++;
- break;
+ Char command;
+ bool stopped = false; // terminating condition
+
+#ifdef USE_ENV_STACK
+ EnvStack env_stack = EnvStack();
+#endif // USE_ENV_STACK
+
+ // setup of global variables
+ npages = 0;
+ current_lineno = 1;
+ // `pr' is initialized after the prologue.
+ // `device' is set by the 1st prologue command.
+
+ if (filename[0] == '-' && filename[1] == '\0')
+ current_file = stdin;
+ else {
+ errno = 0;
+ current_file = fopen(filename, "r");
+ if (errno != 0 || current_file == 0) {
+ error("can't open file `%1'", filename);
+ return;
}
+ }
+ remember_filename(filename);
+
+ if (current_env != 0)
+ delete_current_env();
+ current_env = new environment;
+ current_env->col = new color;
+ current_env->fill = new color;
+ current_env->fontno = -1;
+ current_env->height = 0;
+ current_env->hpos = -1;
+ current_env->slant = 0;
+ current_env->size = 0;
+ current_env->vpos = -1;
+
+ // parsing of prologue (first 3 commands)
+ {
+ char *str_arg;
+ IntArg int_arg;
+
+ // 1st command `x T'
+ command = next_command();
+ if ((int) command == EOF)
+ return;
+ if ((int) command != 'x')
+ fatal("the first command must be `x T'");
+ str_arg = get_string_arg();
+ if (str_arg[0] != 'T')
+ fatal("the first command must be `x T'");
+ delete str_arg;
+ char *tmp_dev = get_string_arg();
+ if (pr == 0) { // note: `pr' initialized after prologue
+ device = tmp_dev;
+ if (!font::load_desc())
+ fatal("couldn't load DESC file, can't continue");
+ }
+ else {
+ if (device == 0 || strcmp(device, tmp_dev) != 0)
+ fatal("all files must use the same device");
+ delete tmp_dev;
+ }
+ skip_line_x(); // ignore further arguments
+ current_env->size = 10 * font::sizescale;
+
+ // 2nd command `x res'
+ command = next_command();
+ if ((int) command != 'x')
+ fatal("the second command must be `x res'");
+ str_arg = get_string_arg();
+ if (str_arg[0] != 'r')
+ fatal("the second command must be `x res'");
+ delete str_arg;
+ int_arg = get_integer_arg();
+ EnvInt font_res = font::res;
+ if (int_arg != font_res)
+ fatal("resolution does not match");
+ int_arg = get_integer_arg();
+ if (int_arg != font::hor)
+ fatal("minimum horizontal motion does not match");
+ int_arg = get_integer_arg();
+ if (int_arg != font::vert)
+ fatal("minimum vertical motion does not match");
+ skip_line_x(); // ignore further arguments
+
+ // 3rd command `x init'
+ command = next_command();
+ if (command != 'x')
+ fatal("the third command must be `x init'");
+ str_arg = get_string_arg();
+ if (str_arg[0] != 'i')
+ fatal("the third command must be `x init'");
+ delete str_arg;
+ skip_line_x();
+ }
+
+ // parsing of body
+ if (pr == 0)
+ pr = make_printer();
+ while (!stopped) {
+ command = next_command();
+ if (command == EOF)
+ break;
+ // spaces, tabs, comments, and newlines are skipped here
+ switch ((int) command) {
+ case '#': // #: comment, ignore up to end of line
+ skip_line();
+ break;
+#ifdef USE_ENV_STACK
+ case '{': // {: start a new environment (a copy)
+ env_stack.push(current_env);
+ break;
+ case '}': // }: pop previous env from stack
+ delete_current_env();
+ current_env = env_stack.pop();
+ break;
+#endif // USE_ENV_STACK
+ case '0': // ddc: obsolete jump and print command
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ { // expect 2 digits and a character
+ char s[3];
+ Char c = next_arg_begin();
+ if (npages <= 0)
+ fatal_command(command);
+ if (!isdigit((int) c)) {
+ error("digit expected");
+ c = 0;
+ }
+ s[0] = (char) command;
+ s[1] = (char) c;
+ s[2] = '\0';
+ errno = 0;
+ long int x = strtol(s, 0, 10);
+ if (errno != 0)
+ error("couldn't convert 2 digits");
+ EnvInt hor_pos = (EnvInt) x;
+ current_env->hpos += hor_pos;
+ c = next_arg_begin();
+ if ((int) c == '\n' || (int) c == EOF)
+ error("character argument expected");
+ else
+ pr->set_ascii_char((unsigned char) c, current_env);
+ break;
+ }
+ case 'c': // c: print ascii char without moving
+ {
+ if (npages <= 0)
+ fatal_command(command);
+ Char c = next_arg_begin();
+ if (c == '\n' || c == EOF)
+ error("missing argument to `c' command");
+ else
+ pr->set_ascii_char((unsigned char) c, current_env);
+ break;
+ }
+ case 'C': // C: print named special character
+ {
+ if (npages <= 0)
+ fatal_command(command);
+ char *str_arg = get_string_arg();
+ pr->set_special_char(str_arg, current_env);
+ delete str_arg;
+ break;
+ }
+ case 'D': // drawing commands
+ if (npages <= 0)
+ fatal_command(command);
+ parse_D_command();
+ break;
+ case 'f': // f: set font to number
+ current_env->fontno = get_integer_arg();
+ break;
+ case 'F': // F: obsolete, replaced by `x F'
+ {
+ char *str_arg = get_string_arg();
+ remember_filename(str_arg);
+ delete str_arg;
+ break;
+ }
+ case 'h': // h: relative horizontal move
+ current_env->hpos += (EnvInt) get_integer_arg();
+ break;
+ case 'H': // H: absolute horizontal positioning
+ current_env->hpos = (EnvInt) get_integer_arg();
+ break;
+ case 'm': // m: glyph color
+ parse_color_command(current_env->col);
+ pr->change_color(current_env);
+ break;
+ case 'n': // n: print end of line
+ // ignore two arguments (historically)
+ if (npages <= 0)
+ fatal_command(command);
+ pr->end_of_line();
+ (void) get_integer_arg();
+ (void) get_integer_arg();
+ break;
+ case 'N': // N: print char with given int code
+ if (npages <= 0)
+ fatal_command(command);
+ pr->set_numbered_char(get_integer_arg(), current_env);
+ break;
+ case 'p': // p: start new page with given number
+ if (npages > 0)
+ pr->end_page(current_env->vpos);
+ npages++; // increment # of processed pages
+ pr->begin_page(get_integer_arg());
+ current_env->vpos = 0;
+ break;
+ case 's': // s: set point size
+ current_env->size = get_integer_arg();
+ if (current_env->height == current_env->size)
+ current_env->height = 0;
+ break;
+ case 't': // t: print a text word
+ {
+ char c;
+ if (npages <= 0)
+ fatal_command(command);
+ char *str_arg = get_string_arg();
+ size_t i = 0;
+ while ((c = str_arg[i++]) != '\0') {
+ EnvInt w;
+ pr->set_ascii_char((unsigned char) c, current_env, &w);
+ current_env->hpos += w;
+ }
+ delete str_arg;
+ break;
+ }
+ case 'u': // u: print spaced word
+ {
+ char c;
+ if (npages <= 0)
+ fatal_command(command);
+ EnvInt kern = (EnvInt) get_integer_arg();
+ char *str_arg = get_string_arg();
+ size_t i = 0;
+ while ((c = str_arg[i++]) != '\0') {
+ EnvInt w;
+ pr->set_ascii_char((unsigned char) c, current_env, &w);
+ current_env->hpos += w + kern;
+ }
+ delete str_arg;
+ break;
+ }
+ case 'v': // v: relative vertical move
+ current_env->vpos += (EnvInt) get_integer_arg();
+ break;
+ case 'V': // V: absolute vertical positioning
+ current_env->vpos = (EnvInt) get_integer_arg();
+ break;
+ case 'w': // w: inform about paddable space
+ break;
+ case 'x': // device controlling commands
+ stopped = parse_x_command();
+ break;
+ default:
+ warning("unrecognized command `%1'", (unsigned char) command);
+ skip_line();
+ break;
+ } // end of switch
+ } // end of while
+
+ // end of file reached
+ if (npages > 0)
+ pr->end_page(current_env->vpos);
+ fclose(current_file);
+ // If `stopped' is not `true' here then there wasn't any `x stop'.
+ if (!stopped)
+ warning("no final `x stop' command");
+ delete_current_env();
}
diff --git a/contrib/groff/src/libs/libdriver/printer.cc b/contrib/groff/src/libs/libdriver/printer.cc
index 4d66f7b..c97e2ce 100644
--- a/contrib/groff/src/libs/libdriver/printer.cc
+++ b/contrib/groff/src/libs/libdriver/printer.cc
@@ -1,22 +1,30 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-This file is part of groff.
+// <groff_src_dir>/src/libs/libdriver/printer.cc
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
+ Written by James Clark (jjc@jclark.com)
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
+ Last update: 12 Apr 2002
-You should have 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 is part of groff.
+
+ groff is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ groff is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have 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"
@@ -105,6 +113,14 @@ void printer::draw(int, int *, int, const environment *)
{
}
+void printer::change_color(const environment *)
+{
+}
+
+void printer::change_fill_color(const environment *)
+{
+}
+
void printer::set_ascii_char(unsigned char c, const environment *env,
int *widthp)
{
@@ -126,13 +142,12 @@ void printer::set_special_char(const char *nm, const environment *env,
int *widthp)
{
font *f;
- int w;
+ int w;
int i = set_char_and_width(nm, env, &w, &f);
if (i != -1) {
set_char(i, f, env, w, nm);
- if (widthp) {
+ if (widthp)
*widthp = w;
- }
}
}
@@ -199,73 +214,3 @@ font *printer::get_font_from_index(int fontno)
else
return(0);
}
-
-// This utility function adjusts the specified center of the
-// arc so that it is equidistant between the specified start
-// and end points. (p[0], p[1]) is a vector from the current
-// point to the center; (p[2], p[3]) is a vector from the
-// center to the end point. If the center can be adjusted,
-// a vector from the current point to the adjusted center is
-// stored in c[0], c[1] and 1 is returned. Otherwise 0 is
-// returned.
-
-#if 1
-int printer::adjust_arc_center(const int *p, double *c)
-{
- // We move the center along a line parallel to the line between
- // the specified start point and end point so that the center
- // is equidistant between the start and end point.
- // It can be proved (using Lagrange multipliers) that this will
- // give the point nearest to the specified center that is equidistant
- // between the start and end point.
-
- double x = p[0] + p[2]; // (x, y) is the end point
- double y = p[1] + p[3];
- double n = x*x + y*y;
- if (n != 0) {
- c[0]= double(p[0]);
- c[1] = double(p[1]);
- double k = .5 - (c[0]*x + c[1]*y)/n;
- c[0] += k*x;
- c[1] += k*y;
- return 1;
- }
- else
- return 0;
-}
-#else
-int printer::adjust_arc_center(const int *p, double *c)
-{
- int x = p[0] + p[2]; // (x, y) is the end point
- int y = p[1] + p[3];
- // Start at the current point; go in the direction of the specified
- // center point until we reach a point that is equidistant between
- // the specified starting point and the specified end point. Place
- // the center of the arc there.
- double n = p[0]*double(x) + p[1]*double(y);
- if (n > 0) {
- double k = (double(x)*x + double(y)*y)/(2.0*n);
- // (cx, cy) is our chosen center
- c[0] = k*p[0];
- c[1] = k*p[1];
- return 1;
- }
- else {
- // We would never reach such a point. So instead start at the
- // specified end point of the arc. Go towards the specified
- // center point until we reach a point that is equidistant between
- // the specified start point and specified end point. Place
- // the center of the arc there.
- n = p[2]*double(x) + p[3]*double(y);
- if (n > 0) {
- double k = 1 - (double(x)*x + double(y)*y)/(2.0*n);
- // (c[0], c[1]) is our chosen center
- c[0] = p[0] + k*p[2];
- c[1] = p[1] + k*p[3];
- return 1;
- }
- else
- return 0;
- }
-}
-#endif
diff --git a/contrib/groff/src/libs/libgroff/Makefile.sub b/contrib/groff/src/libs/libgroff/Makefile.sub
index ff5c655..ff6bd00 100644
--- a/contrib/groff/src/libs/libgroff/Makefile.sub
+++ b/contrib/groff/src/libs/libgroff/Makefile.sub
@@ -1,42 +1,48 @@
LIB=groff
OBJS=\
- assert.o \
- change_lf.o \
- cmap.o \
- cset.o \
- device.o \
- errarg.o \
- error.o \
- fatal.o \
- filename.o \
- font.o \
- fontfile.o \
- getopt.o \
- getopt1.o \
- htmlindicate.o \
- illegal.o \
- lf.o \
- lineno.o \
- macropath.o \
- maxfilename.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 \
+ assert.$(OBJEXT) \
+ change_lf.$(OBJEXT) \
+ cmap.$(OBJEXT) \
+ color.$(OBJEXT) \
+ cset.$(OBJEXT) \
+ device.$(OBJEXT) \
+ errarg.$(OBJEXT) \
+ error.$(OBJEXT) \
+ fatal.$(OBJEXT) \
+ filename.$(OBJEXT) \
+ font.$(OBJEXT) \
+ fontfile.$(OBJEXT) \
+ geometry.$(OBJEXT) \
+ getopt.$(OBJEXT) \
+ getopt1.$(OBJEXT) \
+ htmlhint.$(OBJEXT) \
+ invalid.$(OBJEXT) \
+ lf.$(OBJEXT) \
+ lineno.$(OBJEXT) \
+ macropath.$(OBJEXT) \
+ maxfilename.$(OBJEXT) \
+ mksdir.$(OBJEXT) \
+ nametoindex.$(OBJEXT) \
+ new.$(OBJEXT) \
+ paper.$(OBJEXT) \
+ prime.$(OBJEXT) \
+ progname.$(OBJEXT) \
+ ptable.$(OBJEXT) \
+ searchpath.$(OBJEXT) \
+ string.$(OBJEXT) \
+ strsave.$(OBJEXT) \
+ tmpfile.$(OBJEXT) \
+ tmpname.$(OBJEXT) \
+ iftoa.$(OBJEXT) \
+ itoa.$(OBJEXT) \
+ matherr.$(OBJEXT) \
+ version.$(OBJEXT) \
$(LIBOBJS)
CCSRCS=\
$(srcdir)/assert.cc \
$(srcdir)/change_lf.cc \
$(srcdir)/cmap.cc \
+ $(srcdir)/color.cc \
$(srcdir)/cset.cc \
$(srcdir)/device.cc \
$(srcdir)/errarg.cc \
@@ -45,14 +51,18 @@ CCSRCS=\
$(srcdir)/filename.cc \
$(srcdir)/font.cc \
$(srcdir)/fontfile.cc \
- $(srcdir)/htmlindicate.cc \
- $(srcdir)/illegal.cc \
+ $(srcdir)/geometry.cc \
+ $(srcdir)/htmlhint.cc \
+ $(srcdir)/invalid.cc \
$(srcdir)/lf.cc \
$(srcdir)/lineno.cc \
$(srcdir)/macropath.cc \
$(srcdir)/maxfilename.cc \
+ $(srcdir)/mksdir.cc \
+ $(srcdir)/mkstemp.cc \
$(srcdir)/nametoindex.cc \
$(srcdir)/new.cc \
+ $(srcdir)/paper.cc \
$(srcdir)/prime.cc \
$(srcdir)/progname.cc \
$(srcdir)/ptable.cc \
@@ -60,6 +70,7 @@ CCSRCS=\
$(srcdir)/string.cc \
$(srcdir)/strsave.cc \
$(srcdir)/tmpfile.cc \
+ $(srcdir)/tmpname.cc \
version.cc
CSRCS=\
$(srcdir)/fmod.c \
@@ -71,16 +82,22 @@ CSRCS=\
$(srcdir)/matherr.c \
$(srcdir)/putenv.c \
$(srcdir)/strerror.c \
- $(srcdir)/strtol.c
+ $(srcdir)/strtol.c \
+ $(srcdir)/../snprintf/snprintf.c
GENSRCS=\
version.cc
-version=`cat $(top_srcdir)/VERSION`
-revision=`cat $(top_srcdir)/REVISION`
+src_version=`cat $(top_srcdir)/VERSION`
+src_revision=`cat $(top_srcdir)/REVISION`
version.cc: $(top_srcdir)/VERSION $(top_srcdir)/REVISION
@echo Making version.cc
- @echo const char \*version_string = \"$(version)\"\; >$@
- @echo const char \*revision_string = \"$(revision)\"\; >>$@
- @echo extern \"C\" const char \*Version_string = \"$(version).$(revision)\"\; | \
+ @echo const char \*version_string = \"$(src_version)\"\; >$@
+ @echo const char \*revision_string = \"$(src_revision)\"\; >>$@
+ @echo extern \"C\" const char \*Version_string = \"$(src_version).$(src_revision)\"\; | \
sed -e 's/\.0\"/\"/' >>$@
+
+# We have to avoid $(COMPILE.c) since we must not use groff's `assert.h'
+snprintf.$(OBJEXT): $(srcdir)/../snprintf/snprintf.c
+ $(CC) -c $(CDEFINES) $(CFLAGS) $(CPPFLAGS) \
+ $(srcdir)/../snprintf/snprintf.c
diff --git a/contrib/groff/src/libs/libgroff/color.cc b/contrib/groff/src/libs/libgroff/color.cc
new file mode 100644
index 0000000..68e604c
--- /dev/null
+++ b/contrib/groff/src/libs/libgroff/color.cc
@@ -0,0 +1,363 @@
+// -*- C++ -*-
+
+/* <groff_src_dir>/src/libs/libgroff/color.cc
+
+Last update: 10 Apr 2002
+
+Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+ Written by Gaius Mulley <gaius@glam.ac.uk>
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "color.h"
+#include "cset.h"
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <assert.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include "errarg.h"
+#include "error.h"
+
+static inline unsigned int
+min(const unsigned int a, const unsigned int b)
+{
+ if (a < b)
+ return a;
+ else
+ return b;
+}
+
+color::color(const color * const c)
+{
+ scheme = c->scheme;
+ components[0] = c->components[0];
+ components[1] = c->components[1];
+ components[2] = c->components[2];
+ components[3] = c->components[3];
+}
+
+int color::operator==(const color & c) const
+{
+ if (scheme != c.scheme)
+ return 0;
+ switch (scheme) {
+ case DEFAULT:
+ break;
+ case RGB:
+ if (Red != c.Red || Green != c.Green || Blue != c.Blue)
+ return 0;
+ break;
+ case CMYK:
+ if (Cyan != c.Cyan || Magenta != c.Magenta
+ || Yellow != c.Yellow || Black != c.Black)
+ return 0;
+ break;
+ case GRAY:
+ if (Gray != c.Gray)
+ return 0;
+ break;
+ case CMY:
+ if (Cyan != c.Cyan || Magenta != c.Magenta || Yellow != c.Yellow)
+ return 0;
+ break;
+ }
+ return 1;
+}
+
+int color::operator!=(const color & c) const
+{
+ return !(*this == c);
+}
+
+color_scheme color::get_components(unsigned int *c) const
+{
+#if 0
+ if (sizeof (c) < sizeof (unsigned int) * 4)
+ fatal("argument is not big enough to store 4 color components");
+#endif
+ c[0] = components[0];
+ c[1] = components[1];
+ c[2] = components[2];
+ c[3] = components[3];
+ return scheme;
+}
+
+void color::set_default()
+{
+ scheme = DEFAULT;
+}
+
+// (0, 0, 0) is black
+
+void color::set_rgb(const unsigned int r, const unsigned int g,
+ const unsigned int b)
+{
+ scheme = RGB;
+ Red = min(MAX_COLOR_VAL, r);
+ Green = min(MAX_COLOR_VAL, g);
+ Blue = min(MAX_COLOR_VAL, b);
+}
+
+// (0, 0, 0) is white
+
+void color::set_cmy(const unsigned int c, const unsigned int m,
+ const unsigned int y)
+{
+ scheme = CMY;
+ Cyan = min(MAX_COLOR_VAL, c);
+ Magenta = min(MAX_COLOR_VAL, m);
+ Yellow = min(MAX_COLOR_VAL, y);
+}
+
+// (0, 0, 0, 0) is white
+
+void color::set_cmyk(const unsigned int c, const unsigned int m,
+ const unsigned int y, const unsigned int k)
+{
+ scheme = CMYK;
+ Cyan = min(MAX_COLOR_VAL, c);
+ Magenta = min(MAX_COLOR_VAL, m);
+ Yellow = min(MAX_COLOR_VAL, y);
+ Black = min(MAX_COLOR_VAL, k);
+}
+
+// (0) is black
+
+void color::set_gray(const unsigned int g)
+{
+ scheme = GRAY;
+ Gray = min(MAX_COLOR_VAL, g);
+}
+
+/*
+ * atoh - computes the decimal value of a hexadecimal number string.
+ * `length' characters of `s' are read. Returns 1 if successful.
+ */
+
+static int atoh(unsigned int *result,
+ const char * const s, const size_t length)
+{
+ size_t i = 0;
+ unsigned int val = 0;
+ while ((i < length) && csxdigit(s[i])) {
+ if (csdigit(s[i]))
+ val = val*0x10 + (s[i]-'0');
+ else if (csupper(s[i]))
+ val = val*0x10 + (s[i]-'A') + 10;
+ else
+ val = val*0x10 + (s[i]-'a') + 10;
+ i++;
+ }
+ if (i != length)
+ return 0;
+ *result = val;
+ return 1;
+}
+
+/*
+ * read_encoding - set color from a hexadecimal color string.
+ *
+ * Use color scheme `cs' to parse `n' color components from string `s'.
+ * Returns 1 if successful.
+ */
+
+int color::read_encoding(const color_scheme cs, const char * const s,
+ const size_t n)
+{
+ size_t hex_length = 2;
+ scheme = cs;
+ char *p = (char *) s;
+ p++;
+ if (*p == '#') {
+ hex_length = 4;
+ p++;
+ }
+ for (size_t i = 0; i < n; i++) {
+ if (!atoh(&(components[i]), p, hex_length))
+ return 0;
+ if (hex_length == 2)
+ components[i] *= 0x101; // scale up -- 0xff should become 0xffff
+ p += hex_length;
+ }
+ return 1;
+}
+
+int color::read_rgb(const char * const s)
+{
+ return read_encoding(RGB, s, 3);
+}
+
+int color::read_cmy(const char * const s)
+{
+ return read_encoding(CMY, s, 3);
+}
+
+int color::read_cmyk(const char * const s)
+{
+ return read_encoding(CMYK, s, 4);
+}
+
+int color::read_gray(const char * const s)
+{
+ return read_encoding(GRAY, s, 1);
+}
+
+void
+color::get_rgb(unsigned int *r, unsigned int *g, unsigned int *b) const
+{
+ switch (scheme) {
+ case RGB:
+ *r = Red;
+ *g = Green;
+ *b = Blue;
+ break;
+ case CMY:
+ *r = MAX_COLOR_VAL - Cyan;
+ *g = MAX_COLOR_VAL - Magenta;
+ *b = MAX_COLOR_VAL - Yellow;
+ break;
+ case CMYK:
+ *r = MAX_COLOR_VAL
+ - min(MAX_COLOR_VAL,
+ Cyan * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
+ *g = MAX_COLOR_VAL
+ - min(MAX_COLOR_VAL,
+ Magenta * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
+ *b = MAX_COLOR_VAL
+ - min(MAX_COLOR_VAL,
+ Yellow * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
+ break;
+ case GRAY:
+ *r = *g = *b = Gray;
+ break;
+ default:
+ assert(0);
+ break;
+ }
+}
+
+void
+color::get_cmy(unsigned int *c, unsigned int *m, unsigned int *y) const
+{
+ switch (scheme) {
+ case RGB:
+ *c = MAX_COLOR_VAL - Red;
+ *m = MAX_COLOR_VAL - Green;
+ *y = MAX_COLOR_VAL - Blue;
+ break;
+ case CMY:
+ *c = Cyan;
+ *m = Magenta;
+ *y = Yellow;
+ break;
+ case CMYK:
+ *c = min(MAX_COLOR_VAL,
+ Cyan * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
+ *m = min(MAX_COLOR_VAL,
+ Magenta * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
+ *y = min(MAX_COLOR_VAL,
+ Yellow * (MAX_COLOR_VAL - Black) / MAX_COLOR_VAL + Black);
+ break;
+ case GRAY:
+ *c = *m = *y = MAX_COLOR_VAL - Gray;
+ break;
+ default:
+ assert(0);
+ break;
+ }
+}
+
+void color::get_cmyk(unsigned int *c, unsigned int *m,
+ unsigned int *y, unsigned int *k) const
+{
+ switch (scheme) {
+ case RGB:
+ *k = min(MAX_COLOR_VAL - Red,
+ min(MAX_COLOR_VAL - Green, MAX_COLOR_VAL - Blue));
+ if (MAX_COLOR_VAL == *k) {
+ *c = MAX_COLOR_VAL;
+ *m = MAX_COLOR_VAL;
+ *y = MAX_COLOR_VAL;
+ }
+ else {
+ *c = (MAX_COLOR_VAL * (MAX_COLOR_VAL - Red - *k))
+ / (MAX_COLOR_VAL - *k);
+ *m = (MAX_COLOR_VAL * (MAX_COLOR_VAL - Green - *k))
+ / (MAX_COLOR_VAL - *k);
+ *y = (MAX_COLOR_VAL * (MAX_COLOR_VAL - Blue - *k))
+ / (MAX_COLOR_VAL - *k);
+ }
+ break;
+ case CMY:
+ *k = min(Cyan, min(Magenta, Yellow));
+ if (MAX_COLOR_VAL == *k) {
+ *c = MAX_COLOR_VAL;
+ *m = MAX_COLOR_VAL;
+ *y = MAX_COLOR_VAL;
+ }
+ else {
+ *c = (MAX_COLOR_VAL * (Cyan - *k)) / (MAX_COLOR_VAL - *k);
+ *m = (MAX_COLOR_VAL * (Magenta - *k)) / (MAX_COLOR_VAL - *k);
+ *y = (MAX_COLOR_VAL * (Yellow - *k)) / (MAX_COLOR_VAL - *k);
+ }
+ break;
+ case CMYK:
+ *c = Cyan;
+ *m = Magenta;
+ *y = Yellow;
+ *k = Black;
+ break;
+ case GRAY:
+ *c = *m = *y = 0;
+ *k = MAX_COLOR_VAL - Gray;
+ break;
+ default:
+ assert(0);
+ break;
+ }
+}
+
+// we use `0.222r + 0.707g + 0.071b' (this is the ITU standard)
+// as an approximation for gray
+
+void color::get_gray(unsigned int *g) const
+{
+ switch (scheme) {
+ case RGB:
+ *g = (222*Red + 707*Green + 71*Blue) / 1000;
+ break;
+ case CMY:
+ *g = MAX_COLOR_VAL - (222*Cyan + 707*Magenta + 71*Yellow) / 1000;
+ break;
+ case CMYK:
+ *g = (MAX_COLOR_VAL - (222*Cyan + 707*Magenta + 71*Yellow) / 1000)
+ * (MAX_COLOR_VAL - Black);
+ break;
+ case GRAY:
+ *g = Gray;
+ break;
+ default:
+ assert(0);
+ break;
+ }
+}
+
+color default_color;
diff --git a/contrib/groff/src/libs/libgroff/errarg.cc b/contrib/groff/src/libs/libgroff/errarg.cc
index f8075ea..2ddc0cc 100644
--- a/contrib/groff/src/libs/libgroff/errarg.cc
+++ b/contrib/groff/src/libs/libgroff/errarg.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -31,14 +32,14 @@ errarg::errarg() : type(EMPTY)
{
}
-errarg::errarg(unsigned char cc) : type(CHAR)
+errarg::errarg(int nn) : type(INTEGER)
{
- c = cc;
+ n = nn;
}
-errarg::errarg(int nn) : type(INTEGER)
+errarg::errarg(unsigned int uu) : type(UNSIGNED_INTEGER)
{
- n = nn;
+ u = uu;
}
errarg::errarg(char cc) : type(CHAR)
@@ -46,6 +47,11 @@ errarg::errarg(char cc) : type(CHAR)
c = cc;
}
+errarg::errarg(unsigned char cc) : type(CHAR)
+{
+ c = cc;
+}
+
errarg::errarg(double dd) : type(DOUBLE)
{
d = dd;
@@ -58,6 +64,7 @@ int errarg::empty() const
extern "C" {
const char *i_to_a(int);
+ const char *ui_to_a(unsigned int);
}
void errarg::print() const
@@ -66,6 +73,9 @@ void errarg::print() const
case INTEGER:
fputs(i_to_a(n), stderr);
break;
+ case UNSIGNED_INTEGER:
+ fputs(ui_to_a(u), stderr);
+ break;
case CHAR:
putc(c, stderr);
break;
diff --git a/contrib/groff/src/libs/libgroff/font.cc b/contrib/groff/src/libs/libgroff/font.cc
index aa602b4..69e46e1 100644
--- a/contrib/groff/src/libs/libgroff/font.cc
+++ b/contrib/groff/src/libs/libgroff/font.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -19,8 +19,8 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
-#include <string.h>
+#include "lib.h"
+
#include <ctype.h>
#include <assert.h>
#include <math.h>
@@ -29,7 +29,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "error.h"
#include "cset.h"
#include "font.h"
-#include "lib.h"
+#include "paper.h"
const char *const WS = " \t\n\r";
@@ -94,13 +94,12 @@ text_file::~text_file()
fclose(fp);
}
-
int text_file::next()
{
if (fp == 0)
return 0;
if (buf == 0) {
- buf = new char [128];
+ buf = new char[128];
size = 128;
}
for (;;) {
@@ -109,8 +108,8 @@ int text_file::next()
int c = getc(fp);
if (c == EOF)
break;
- if (illegal_input_char(c))
- error("illegal input character code `%1'", int(c));
+ if (invalid_input_char(c))
+ error("invalid input character code `%1'", int(c));
else {
if (i + 1 >= size) {
char *old_buf = buf;
@@ -161,6 +160,9 @@ font::font(const char *s)
font::~font()
{
+ for (int i = 0; i < ch_used; i++)
+ if (ch[i].special_device_coding)
+ a_delete ch[i].special_device_coding;
a_delete ch;
a_delete ch_index;
if (kern_hash_table) {
@@ -206,6 +208,34 @@ inline int font::scale(int w, int sz)
return sz == unitwidth ? w : scale_round(w, sz, unitwidth);
}
+int font::unit_scale(double *value, char unit)
+{
+ // we scale everything to inch
+ double divisor = 0;
+ switch (unit) {
+ case 'i':
+ divisor = 1;
+ break;
+ case 'p':
+ divisor = 72;
+ break;
+ case 'P':
+ divisor = 6;
+ break;
+ case 'c':
+ divisor = 2.54;
+ break;
+ default:
+ assert(0);
+ break;
+ }
+ if (divisor) {
+ *value /= divisor;
+ return 1;
+ }
+ return 0;
+}
+
int font::get_skew(int c, int point_size, int sl)
{
int h = get_height(c, point_size);
@@ -303,7 +333,7 @@ int font::get_space_width(int point_size)
}
font_kern_list::font_kern_list(int c1, int c2, int n, font_kern_list *p)
- : i1(c1), i2(c2), amount(n), next(p)
+: i1(c1), i2(c2), amount(n), next(p)
{
}
@@ -472,6 +502,58 @@ static char *trim_arg(char *p)
return p;
}
+int font::scan_papersize(const char *p,
+ const char **size, double *length, double *width)
+{
+ double l, w;
+ char lu[2], wu[2];
+ const char *pp = p;
+ int test_file = 1;
+ char line[255];
+again:
+ if (csdigit(*pp)) {
+ if (sscanf(pp, "%lf%1[ipPc],%lf%1[ipPc]", &l, lu, &w, wu) == 4
+ && l > 0 && w > 0
+ && unit_scale(&l, lu[0]) && unit_scale(&w, wu[0])) {
+ if (length)
+ *length = l;
+ if (width)
+ *width = w;
+ if (size)
+ *size = "custom";
+ return 1;
+ }
+ }
+ else {
+ int i;
+ for (i = 0; i < NUM_PAPERSIZES; i++)
+ if (strcasecmp(papersizes[i].name, pp) == 0) {
+ if (length)
+ *length = papersizes[i].length;
+ if (width)
+ *width = papersizes[i].width;
+ if (size)
+ *size = papersizes[i].name;
+ return 1;
+ }
+ if (test_file) {
+ FILE *f = fopen(p, "r");
+ if (f) {
+ fgets(line, 254, f);
+ fclose(f);
+ test_file = 0;
+ char *linep = strchr(line, '\0');
+ // skip final newline, if any
+ if (*(--linep) == '\n')
+ *linep = '\0';
+ pp = line;
+ goto again;
+ }
+ }
+ }
+ return 0;
+}
+
// If the font can't be found, then if not_found is non-NULL, it will be set
// to 1 otherwise a message will be printed.
@@ -586,12 +668,12 @@ int font::load(int *not_found)
}
int i1 = name_to_index(c1);
if (i1 < 0) {
- t.error("illegal character `%1'", c1);
+ t.error("invalid character `%1'", c1);
return 0;
}
int i2 = name_to_index(c2);
if (i2 < 0) {
- t.error("illegal character `%1'", c2);
+ t.error("invalid character `%1'", c2);
return 0;
}
add_kern(i1, i2, n);
@@ -624,7 +706,7 @@ int font::load(int *not_found)
}
int index = name_to_index(nm);
if (index < 0) {
- t.error("illegal character `%1'", nm);
+ t.error("invalid character `%1'", nm);
return 0;
}
copy_entry(index, last_index);
@@ -671,20 +753,15 @@ 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");
- }
+ }
+ else {
+ char *name = new char[strlen(p) + 1];
strcpy(name, p);
metric.special_device_coding = name;
}
-
if (strcmp(nm, "---") == 0) {
last_index = number_to_index(metric.code);
add_entry(last_index, metric);
@@ -692,7 +769,7 @@ int font::load(int *not_found)
else {
last_index = name_to_index(nm);
if (last_index < 0) {
- t.error("illegal character `%1'", nm);
+ t.error("invalid character `%1'", nm);
return 0;
}
add_entry(last_index, metric);
@@ -736,7 +813,6 @@ static struct {
{ "sizescale", &font::sizescale }
};
-
int font::load_desc()
{
int nfonts = 0;
@@ -769,15 +845,6 @@ int font::load_desc()
return 0;
}
}
- 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) {
@@ -815,6 +882,31 @@ int font::load_desc()
}
font_name_table[nfonts] = 0;
}
+ else if (strcmp("papersize", p) == 0) {
+ p = strtok(0, WS);
+ if (!p) {
+ t.error("papersize command requires an argument");
+ return 0;
+ }
+ int found_paper = 0;
+ while (p) {
+ double unscaled_paperwidth, unscaled_paperlength;
+ if (scan_papersize(p, &papersize, &unscaled_paperlength,
+ &unscaled_paperwidth)) {
+ paperwidth = int(unscaled_paperwidth * res + 0.5);
+ paperlength = int(unscaled_paperlength * res + 0.5);
+ found_paper = 1;
+ break;
+ }
+ p = strtok(0, WS);
+ }
+ if (!found_paper) {
+ t.error("bad paper size");
+ return 0;
+ }
+ }
+ else if (strcmp("pass_filenames", p) == 0)
+ pass_filenames = 1;
else if (strcmp("sizes", p) == 0) {
int n = 16;
sizes = new int[n];
@@ -885,6 +977,10 @@ int font::load_desc()
style_table[i++] = tem;
}
}
+ else if (strcmp("tcommand", p) == 0)
+ tcommand = 1;
+ else if (strcmp("use_charnames_in_special", p) == 0)
+ use_charnames_in_special = 1;
else if (strcmp("charset", p) == 0)
break;
else if (unknown_desc_command_handler) {
diff --git a/contrib/groff/src/libs/libgroff/fontfile.cc b/contrib/groff/src/libs/libgroff/fontfile.cc
index cc1ad2c..8502d12 100644
--- a/contrib/groff/src/libs/libgroff/fontfile.cc
+++ b/contrib/groff/src/libs/libgroff/fontfile.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,13 +19,12 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
-#include <string.h>
+#include "lib.h"
+
#include <assert.h>
#include <stdlib.h>
#include <errno.h>
#include "font.h"
-#include "lib.h"
#include "searchpath.h"
#include "device.h"
#include "defs.h"
@@ -39,6 +39,7 @@ int font::vert = 1;
int font::unitwidth = 0;
int font::paperwidth = 0;
int font::paperlength = 0;
+const char *font::papersize = 0;
int font::biggestfont = 0;
int font::spare2 = 0;
int font::sizescale = 1;
diff --git a/contrib/groff/src/libs/libgroff/geometry.cc b/contrib/groff/src/libs/libgroff/geometry.cc
new file mode 100644
index 0000000..58a94a4
--- /dev/null
+++ b/contrib/groff/src/libs/libgroff/geometry.cc
@@ -0,0 +1,286 @@
+// -*- C++ -*-
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
+ Free Software Foundation, Inc.
+ Written by Gaius Mulley <gaius@glam.ac.uk>
+ using adjust_arc_center() from printer.cc, written by James Clark.
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+
+#include <stdio.h>
+#include <math.h>
+
+#undef MAX
+#define MAX(a, b) (((a) > (b)) ? (a) : (b))
+
+#undef MIN
+#define MIN(a, b) (((a) < (b)) ? (a) : (b))
+
+
+// This utility function adjusts the specified center of the
+// arc so that it is equidistant between the specified start
+// and end points. (p[0], p[1]) is a vector from the current
+// point to the center; (p[2], p[3]) is a vector from the
+// center to the end point. If the center can be adjusted,
+// a vector from the current point to the adjusted center is
+// stored in c[0], c[1] and 1 is returned. Otherwise 0 is
+// returned.
+
+#if 1
+int adjust_arc_center(const int *p, double *c)
+{
+ // We move the center along a line parallel to the line between
+ // the specified start point and end point so that the center
+ // is equidistant between the start and end point.
+ // It can be proved (using Lagrange multipliers) that this will
+ // give the point nearest to the specified center that is equidistant
+ // between the start and end point.
+
+ double x = p[0] + p[2]; // (x, y) is the end point
+ double y = p[1] + p[3];
+ double n = x*x + y*y;
+ if (n != 0) {
+ c[0]= double(p[0]);
+ c[1] = double(p[1]);
+ double k = .5 - (c[0]*x + c[1]*y)/n;
+ c[0] += k*x;
+ c[1] += k*y;
+ return 1;
+ }
+ else
+ return 0;
+}
+#else
+int printer::adjust_arc_center(const int *p, double *c)
+{
+ int x = p[0] + p[2]; // (x, y) is the end point
+ int y = p[1] + p[3];
+ // Start at the current point; go in the direction of the specified
+ // center point until we reach a point that is equidistant between
+ // the specified starting point and the specified end point. Place
+ // the center of the arc there.
+ double n = p[0]*double(x) + p[1]*double(y);
+ if (n > 0) {
+ double k = (double(x)*x + double(y)*y)/(2.0*n);
+ // (cx, cy) is our chosen center
+ c[0] = k*p[0];
+ c[1] = k*p[1];
+ return 1;
+ }
+ else {
+ // We would never reach such a point. So instead start at the
+ // specified end point of the arc. Go towards the specified
+ // center point until we reach a point that is equidistant between
+ // the specified start point and specified end point. Place
+ // the center of the arc there.
+ n = p[2]*double(x) + p[3]*double(y);
+ if (n > 0) {
+ double k = 1 - (double(x)*x + double(y)*y)/(2.0*n);
+ // (c[0], c[1]) is our chosen center
+ c[0] = p[0] + k*p[2];
+ c[1] = p[1] + k*p[3];
+ return 1;
+ }
+ else
+ return 0;
+ }
+}
+#endif
+
+
+/*
+ * check_output_arc_limits - works out the smallest box that will encompass
+ * an arc defined by an origin (x, y) and two
+ * vectors (p0, p1) and (p2, p3).
+ * (x1, y1) -> start of arc
+ * (x1, y1) + (xv1, yv1) -> center of circle
+ * (x1, y1) + (xv1, yv1) + (xv2, yv2) -> end of arc
+ *
+ * Works out in which quadrant the arc starts and
+ * stops, and from this it determines the x, y
+ * max/min limits. The arc is drawn clockwise.
+ *
+ * [I'm sure there is a better way to do this, but
+ * I don't know how. Please can someone let me
+ * know or "improve" this function.]
+ */
+
+void check_output_arc_limits(int x1, int y1,
+ int xv1, int yv1,
+ int xv2, int yv2,
+ double c0, double c1,
+ int *minx, int *maxx,
+ int *miny, int *maxy)
+{
+ int radius = (int)sqrt(c0*c0 + c1*c1);
+ int x2 = x1 + xv1 + xv2; // end of arc is (x2, y2)
+ int y2 = y1 + yv1 + yv2;
+
+ // firstly lets use the `circle' limitation
+ *minx = x1 + xv1 - radius;
+ *maxx = x1 + xv1 + radius;
+ *miny = y1 + yv1 - radius;
+ *maxy = y1 + yv1 + radius;
+
+ /* now to see which min/max can be reduced and increased for the limits of
+ * the arc
+ *
+ * Q2 | Q1
+ * -----+-----
+ * Q3 | Q4
+ *
+ *
+ * NB. (x1+xv1, y1+yv1) is at the origin
+ *
+ * below we ask a nested question
+ * (i) from which quadrant does the first vector start?
+ * (ii) into which quadrant does the second vector go?
+ * from the 16 possible answers we determine the limits of the arc
+ */
+ if (xv1 > 0 && yv1 > 0) {
+ // first vector in Q3
+ if (xv2 >= 0 && yv2 >= 0 ) {
+ // second in Q1
+ *maxx = x2;
+ *miny = y1;
+ }
+ else if (xv2 < 0 && yv2 >= 0) {
+ // second in Q2
+ *maxx = x2;
+ *miny = y1;
+ }
+ else if (xv2 >= 0 && yv2 < 0) {
+ // second in Q4
+ *miny = MIN(y1, y2);
+ }
+ else if (xv2 < 0 && yv2 < 0) {
+ // second in Q3
+ if (x1 >= x2) {
+ *minx = x2;
+ *maxx = x1;
+ *miny = MIN(y1, y2);
+ *maxy = MAX(y1, y2);
+ }
+ else {
+ // xv2, yv2 could all be zero?
+ }
+ }
+ }
+ else if (xv1 > 0 && yv1 < 0) {
+ // first vector in Q2
+ if (xv2 >= 0 && yv2 >= 0) {
+ // second in Q1
+ *maxx = MAX(x1, x2);
+ *minx = MIN(x1, x2);
+ *miny = y1;
+ }
+ else if (xv2 < 0 && yv2 >= 0) {
+ // second in Q2
+ if (x1 < x2) {
+ *maxx = x2;
+ *minx = x1;
+ *miny = MIN(y1, y2);
+ *maxy = MAX(y1, y2);
+ }
+ else {
+ // otherwise almost full circle anyway
+ }
+ }
+ else if (xv2 >= 0 && yv2 < 0) {
+ // second in Q4
+ *miny = y2;
+ *minx = x1;
+ }
+ else if (xv2 < 0 && yv2 < 0) {
+ // second in Q3
+ *minx = MIN(x1, x2);
+ }
+ }
+ else if (xv1 <= 0 && yv1 <= 0) {
+ // first vector in Q1
+ if (xv2 >= 0 && yv2 >= 0) {
+ // second in Q1
+ if (x1 < x2) {
+ *minx = x1;
+ *maxx = x2;
+ *miny = MIN(y1, y2);
+ *maxy = MAX(y1, y2);
+ }
+ else {
+ // nearly full circle
+ }
+ }
+ else if (xv2 < 0 && yv2 >= 0) {
+ // second in Q2
+ *maxy = MAX(y1, y2);
+ }
+ else if (xv2 >= 0 && yv2 < 0) {
+ // second in Q4
+ *miny = MIN(y1, y2);
+ *maxy = MAX(y1, y2);
+ *minx = MIN(x1, x2);
+ }
+ else if (xv2 < 0 && yv2 < 0) {
+ // second in Q3
+ *minx = x2;
+ *maxy = y1;
+ }
+ }
+ else if (xv1 <= 0 && yv1 > 0) {
+ // first vector in Q4
+ if (xv2 >= 0 && yv2 >= 0) {
+ // second in Q1
+ *maxx = MAX(x1, x2);
+ }
+ else if (xv2 < 0 && yv2 >= 0) {
+ // second in Q2
+ *maxy = MAX(y1, y2);
+ *maxx = MAX(x1, x2);
+ }
+ else if (xv2 >= 0 && yv2 < 0) {
+ // second in Q4
+ if (x1 >= x2) {
+ *miny = MIN(y1, y2);
+ *maxy = MAX(y1, y2);
+ *minx = MIN(x1, x2);
+ *maxx = MAX(x2, x2);
+ }
+ else {
+ // nearly full circle
+ }
+ }
+ else if (xv2 < 0 && yv2 < 0) {
+ // second in Q3
+ *maxy = MAX(y1, y2);
+ *minx = MIN(x1, x2);
+ *maxx = MAX(x1, x2);
+ }
+ }
+
+ // this should *never* happen but if it does it means a case above is wrong
+ // this code is only present for safety sake
+ if (*maxx < *minx) {
+ fprintf(stderr, "assert failed *minx > *maxx\n");
+ fflush(stderr);
+ *maxx = *minx;
+ }
+ if (*maxy < *miny) {
+ fprintf(stderr, "assert failed *miny > *maxy\n");
+ fflush(stderr);
+ *maxy = *miny;
+ }
+}
diff --git a/contrib/groff/src/libs/libgroff/getopt.c b/contrib/groff/src/libs/libgroff/getopt.c
index 0ecad38..289d137 100644
--- a/contrib/groff/src/libs/libgroff/getopt.c
+++ b/contrib/groff/src/libs/libgroff/getopt.c
@@ -2,24 +2,24 @@
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
+ Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002
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.
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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.
+ Lesser 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. */
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; 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>. */
@@ -78,7 +78,7 @@
#ifndef _
/* This is for other GNU distributions with internationalized messages. */
-# if defined HAVE_LIBINTL_H || defined _LIBC
+# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
# include <libintl.h>
# ifndef _
# define _(msgid) gettext (msgid)
@@ -86,6 +86,13 @@
# else
# define _(msgid) (msgid)
# endif
+# if defined _LIBC && defined USE_IN_LIBIO
+# include <wchar.h>
+# endif
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
#endif
/* This version of `getopt' appears to the caller like standard Unix `getopt'
@@ -131,7 +138,7 @@ int optind = 1;
causes problems with re-calling getopt as programs generally don't
know that. */
-int __getopt_initialized;
+int __getopt_initialized attribute_hidden;
/* The next char to be scanned in the option-element
in which the last option character we returned was found.
@@ -250,41 +257,34 @@ static int first_nonopt;
static int last_nonopt;
#ifdef _LIBC
+/* Stored original parameters.
+ 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). */
+extern int __libc_argc;
+extern char **__libc_argv;
+
/* Bash 2.0 gives us an environment variable containing flags
indicating ARGV elements that should not be considered arguments. */
+# ifdef USE_NONOPTION_FLAGS
/* Defined in getopt_init.c */
extern char *__getopt_nonoption_flags;
static int nonoption_flags_max_len;
static int nonoption_flags_len;
+# endif
-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) \
+# ifdef USE_NONOPTION_FLAGS
+# 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
+# define SWAP_FLAGS(ch1, ch2)
+# endif
#else /* !_LIBC */
# define SWAP_FLAGS(ch1, ch2)
#endif /* _LIBC */
@@ -316,7 +316,7 @@ exchange (argv)
It leaves the longer segment in the right place overall,
but it consists of two parts that need to be swapped next. */
-#ifdef _LIBC
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
/* 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. */
@@ -420,9 +420,9 @@ _getopt_initialize (argc, argv, optstring)
else
ordering = PERMUTE;
-#ifdef _LIBC
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
if (posixly_correct == NULL
- && argc == original_argc && argv == original_argv)
+ && argc == __libc_argc && argv == __libc_argv)
{
if (nonoption_flags_max_len == 0)
{
@@ -539,7 +539,7 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
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
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
|| (optind < nonoption_flags_len \
&& __getopt_nonoption_flags[optind] == '1'))
@@ -685,8 +685,26 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (ambig && !exact)
{
if (print_errors)
- fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
- argv[0], argv[optind]);
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"),
+ argv[0], argv[optind]) >= 0)
+ {
+
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
+ argv[0], argv[optind]);
+#endif
+ }
nextchar += strlen (nextchar);
optind++;
optopt = 0;
@@ -707,16 +725,50 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
{
if (print_errors)
{
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+ int n;
+#endif
+
if (argv[optind - 1][1] == '-')
- /* --option */
- fprintf (stderr,
- _("%s: option `--%s' doesn't allow an argument\n"),
- argv[0], pfound->name);
+ {
+ /* --option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("\
+%s: option `--%s' doesn't allow an argument\n"),
+ argv[0], pfound->name);
+#else
+ fprintf (stderr, _("\
+%s: option `--%s' doesn't allow an argument\n"),
+ argv[0], pfound->name);
+#endif
+ }
else
- /* +option or -option */
- fprintf (stderr,
- _("%s: option `%c%s' doesn't allow an argument\n"),
- argv[0], argv[optind - 1][0], pfound->name);
+ {
+ /* +option or -option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("\
+%s: option `%c%s' doesn't allow an argument\n"),
+ argv[0], argv[optind - 1][0],
+ pfound->name);
+#else
+ fprintf (stderr, _("\
+%s: option `%c%s' doesn't allow an argument\n"),
+ argv[0], argv[optind - 1][0], pfound->name);
+#endif
+ }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+ if (n >= 0)
+ {
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ free (buf);
+ }
+#endif
}
nextchar += strlen (nextchar);
@@ -732,9 +784,27 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
else
{
if (print_errors)
- fprintf (stderr,
- _("%s: option `%s' requires an argument\n"),
- argv[0], argv[optind - 1]);
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option `%s' requires an argument\n"),
+ argv[0], argv[optind - 1]) >= 0)
+ {
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr,
+ _("%s: option `%s' requires an argument\n"),
+ argv[0], argv[optind - 1]);
+#endif
+ }
nextchar += strlen (nextchar);
optopt = pfound->val;
return optstring[0] == ':' ? ':' : '?';
@@ -760,14 +830,45 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
{
if (print_errors)
{
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+ int n;
+#endif
+
if (argv[optind][1] == '-')
- /* --option */
- fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
- argv[0], nextchar);
+ {
+ /* --option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"),
+ argv[0], nextchar);
+#else
+ fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
+ argv[0], nextchar);
+#endif
+ }
else
- /* +option or -option */
- fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
- argv[0], argv[optind][0], nextchar);
+ {
+ /* +option or -option */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"),
+ argv[0], argv[optind][0], nextchar);
+#else
+ fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
+ argv[0], argv[optind][0], nextchar);
+#endif
+ }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+ if (n >= 0)
+ {
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ free (buf);
+ }
+#endif
}
nextchar = (char *) "";
optind++;
@@ -790,13 +891,42 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
{
if (print_errors)
{
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+ int n;
+#endif
+
if (posixly_correct)
- /* 1003.2 specifies the format of this message. */
- fprintf (stderr, _("%s: illegal option -- %c\n"),
- argv[0], c);
+ {
+ /* 1003.2 specifies the format of this message. */
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("%s: illegal option -- %c\n"),
+ argv[0], c);
+#else
+ fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c);
+#endif
+ }
else
- fprintf (stderr, _("%s: invalid option -- %c\n"),
- argv[0], c);
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ n = __asprintf (&buf, _("%s: invalid option -- %c\n"),
+ argv[0], c);
+#else
+ fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c);
+#endif
+ }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+ if (n >= 0)
+ {
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ free (buf);
+ }
+#endif
}
optopt = c;
return '?';
@@ -825,8 +955,24 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (print_errors)
{
/* 1003.2 specifies the format of this message. */
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf,
+ _("%s: option requires an argument -- %c\n"),
+ argv[0], c) >= 0)
+ {
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ free (buf);
+ }
+#else
fprintf (stderr, _("%s: option requires an argument -- %c\n"),
argv[0], c);
+#endif
}
optopt = c;
if (optstring[0] == ':')
@@ -872,8 +1018,25 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (ambig && !exact)
{
if (print_errors)
- fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
- argv[0], argv[optind]);
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"),
+ argv[0], argv[optind]) >= 0)
+ {
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
+ argv[0], argv[optind]);
+#endif
+ }
nextchar += strlen (nextchar);
optind++;
return '?';
@@ -890,9 +1053,27 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
else
{
if (print_errors)
- fprintf (stderr, _("\
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option `-W %s' doesn't allow an argument\n"),
+ argv[0], pfound->name) >= 0)
+ {
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr, _("\
%s: option `-W %s' doesn't allow an argument\n"),
- argv[0], pfound->name);
+ argv[0], pfound->name);
+#endif
+ }
nextchar += strlen (nextchar);
return '?';
@@ -905,9 +1086,27 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
else
{
if (print_errors)
- fprintf (stderr,
- _("%s: option `%s' requires an argument\n"),
- argv[0], argv[optind - 1]);
+ {
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option `%s' requires an argument\n"),
+ argv[0], argv[optind - 1]) >= 0)
+ {
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ free (buf);
+ }
+#else
+ fprintf (stderr,
+ _("%s: option `%s' requires an argument\n"),
+ argv[0], argv[optind - 1]);
+#endif
+ }
nextchar += strlen (nextchar);
return optstring[0] == ':' ? ':' : '?';
}
@@ -954,9 +1153,25 @@ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
if (print_errors)
{
/* 1003.2 specifies the format of this message. */
+#if defined _LIBC && defined USE_IN_LIBIO
+ char *buf;
+
+ if (__asprintf (&buf, _("\
+%s: option requires an argument -- %c\n"),
+ argv[0], c) >= 0)
+ {
+ if (_IO_fwide (stderr, 0) > 0)
+ __fwprintf (stderr, L"%s", buf);
+ else
+ fputs (buf, stderr);
+
+ free (buf);
+ }
+#else
fprintf (stderr,
_("%s: option requires an argument -- %c\n"),
argv[0], c);
+#endif
}
optopt = c;
if (optstring[0] == ':')
diff --git a/contrib/groff/src/libs/libgroff/getopt1.c b/contrib/groff/src/libs/libgroff/getopt1.c
index 3d264f2..22a7efb 100644
--- a/contrib/groff/src/libs/libgroff/getopt1.c
+++ b/contrib/groff/src/libs/libgroff/getopt1.c
@@ -4,19 +4,19 @@
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.
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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.
+ Lesser 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. */
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; 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>
diff --git a/contrib/groff/src/libs/libgroff/htmlhint.cc b/contrib/groff/src/libs/libgroff/htmlhint.cc
new file mode 100644
index 0000000..3015767
--- /dev/null
+++ b/contrib/groff/src/libs/libgroff/htmlhint.cc
@@ -0,0 +1,59 @@
+/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+ Written by Gaius Mulley (gaius@glam.ac.uk)
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "lib.h"
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#include "nonposix.h"
+#include "stringclass.h"
+#include "html-strings.h"
+
+/*
+ * This file contains a very simple set of routines which might
+ * be shared by preprocessors. It allows a preprocessor to indicate
+ * when an inline image should be created.
+ * This string is intercepted by pre-grohtml and substituted for
+ * the image name and suppression escapes.
+ *
+ * pre-html runs troff twice, once with -Thtml and once with -Tps.
+ * troff -Thtml device driver emits a <src='image'.png> tag
+ * and the postscript device driver works out the min/max limits
+ * of the graphic region. These region limits are read by pre-html
+ * and an image is generated via troff -Tps -> gs -> png
+ */
+
+/*
+ * html_begin_suppress - emit a start of image tag which will be seen
+ * by pre-html.
+ */
+void html_begin_suppress()
+{
+ put_string(HTML_IMAGE_INLINE_BEGIN, stdout);
+}
+
+/*
+ * html_end_suppress - emit an end of image tag which will be seen
+ * by pre-html.
+ */
+void html_end_suppress()
+{
+ put_string(HTML_IMAGE_INLINE_END, stdout);
+}
diff --git a/contrib/groff/src/libs/libgroff/invalid.cc b/contrib/groff/src/libs/libgroff/invalid.cc
new file mode 100644
index 0000000..f36894a
--- /dev/null
+++ b/contrib/groff/src/libs/libgroff/invalid.cc
@@ -0,0 +1,60 @@
+/* Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+ Written by James Clark (jjc@jclark.com)
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "lib.h"
+
+// Table of invalid input characters.
+
+char invalid_char_table[256]= {
+#ifndef IS_EBCDIC_HOST
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+#else
+ 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+#endif
+};
diff --git a/contrib/groff/src/libs/libgroff/itoa.c b/contrib/groff/src/libs/libgroff/itoa.c
index 72826b7..245c7df 100644
--- a/contrib/groff/src/libs/libgroff/itoa.c
+++ b/contrib/groff/src/libs/libgroff/itoa.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,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. */
#define INT_DIGITS 19 /* enough for 64 bit integer */
+#define UINT_DIGITS 20
char *i_to_a(i)
int i;
@@ -41,3 +43,16 @@ char *i_to_a(i)
}
return p;
}
+
+char *ui_to_a(i)
+ unsigned int i;
+{
+ /* Room for UINT_DIGITS digits and '\0' */
+ static char buf[UINT_DIGITS + 1];
+ char *p = buf + UINT_DIGITS; /* points to terminating '\0' */
+ do {
+ *--p = '0' + (i % 10);
+ i /= 10;
+ } while (i != 0);
+ return p;
+}
diff --git a/contrib/groff/src/libs/libgroff/matherr.c b/contrib/groff/src/libs/libgroff/matherr.c
index b0097b8..757a540 100644
--- a/contrib/groff/src/libs/libgroff/matherr.c
+++ b/contrib/groff/src/libs/libgroff/matherr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -17,6 +17,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_CONFIG_H
+#include <config.h>
+#endif
+
#include <math.h>
#include <errno.h>
diff --git a/contrib/groff/src/libs/libgroff/maxfilename.cc b/contrib/groff/src/libs/libgroff/maxfilename.cc
index c5a03d7..341cf92 100644
--- a/contrib/groff/src/libs/libgroff/maxfilename.cc
+++ b/contrib/groff/src/libs/libgroff/maxfilename.cc
@@ -20,6 +20,8 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* file_name_max(dir) does the same as pathconf(dir, _PC_NAME_MAX) */
+#include "lib.h"
+
#include <sys/types.h>
#ifdef HAVE_UNISTD_H
diff --git a/contrib/groff/src/libs/libgroff/mksdir.cc b/contrib/groff/src/libs/libgroff/mksdir.cc
new file mode 100644
index 0000000..bf4d300
--- /dev/null
+++ b/contrib/groff/src/libs/libgroff/mksdir.cc
@@ -0,0 +1,34 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+ Written by Werner Lemberg (wl@gnu.org)
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+
+/* This file is heavily based on the file mkstemp.c which is part of the
+ fileutils package. */
+
+
+extern int gen_tempname(char *, int = 0);
+
+/* Generate a unique temporary directory name from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the filename unique.
+ Then open the directory and return a fd. */
+int mksdir(char *tmpl)
+{
+ return gen_tempname(tmpl, 1);
+}
diff --git a/contrib/groff/src/libs/libgroff/mkstemp.cc b/contrib/groff/src/libs/libgroff/mkstemp.cc
new file mode 100644
index 0000000..cd2717c
--- /dev/null
+++ b/contrib/groff/src/libs/libgroff/mkstemp.cc
@@ -0,0 +1,34 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+ Written by Werner Lemberg (wl@gnu.org)
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+
+/* This file is heavily based on the file mkstemp.c which is part of the
+ fileutils package. */
+
+
+extern int gen_tempname(char *, int);
+
+/* Generate a unique temporary file name from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the filename unique.
+ Then open the file and return a fd. */
+int mkstemp(char *tmpl)
+{
+ return gen_tempname(tmpl, 0);
+}
diff --git a/contrib/groff/src/libs/libgroff/nametoindex.cc b/contrib/groff/src/libs/libgroff/nametoindex.cc
index 578ff34..7c94b25 100644
--- a/contrib/groff/src/libs/libgroff/nametoindex.cc
+++ b/contrib/groff/src/libs/libgroff/nametoindex.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,12 +19,11 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
-#include <string.h>
+#include "lib.h"
+
#include <ctype.h>
#include <assert.h>
#include <stdlib.h>
-#include "lib.h"
#include "errarg.h"
#include "error.h"
#include "font.h"
@@ -45,7 +45,6 @@ private:
int ascii_index[256];
int small_number_index[NSMALL];
PTABLE(int) table;
- int lookup_char(const char *, int);
};
character_indexer::character_indexer()
diff --git a/contrib/groff/src/libs/libgroff/new.cc b/contrib/groff/src/libs/libgroff/new.cc
index 8d98591..4975149 100644
--- a/contrib/groff/src/libs/libgroff/new.cc
+++ b/contrib/groff/src/libs/libgroff/new.cc
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -17,9 +17,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. */
+#include "lib.h"
+
#include <stddef.h>
#include <stdlib.h>
-#include <string.h>
#include "posix.h"
#include "nonposix.h"
diff --git a/contrib/groff/src/libs/libgroff/paper.cc b/contrib/groff/src/libs/libgroff/paper.cc
new file mode 100644
index 0000000..d79733e
--- /dev/null
+++ b/contrib/groff/src/libs/libgroff/paper.cc
@@ -0,0 +1,84 @@
+// -*- C++ -*-
+/* Copyright (C) 2002
+ Free Software Foundation, Inc.
+ Written by Werner Lemberg (wl@gnu.org)
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "lib.h"
+#include "paper.h"
+
+paper papersizes[NUM_PAPERSIZES];
+
+// length and width in mm
+static void add_iso_paper(char series, int offset,
+ int start_length, int start_width)
+{
+ int length = start_length;
+ int width = start_width;
+ for (int i = 0; i < 8; i++)
+ {
+ char *p = new char[3];
+ p[0] = series;
+ p[1] = '0' + i;
+ p[2] = '\0';
+ papersizes[offset + i].name = p;
+ // convert mm to inch
+ papersizes[offset + i].length = (double)length / 25.4;
+ papersizes[offset + i].width = (double)width / 25.4;
+ // after division by two, values must be rounded down to the next
+ // integer (as specified by ISO)
+ int tmp = width;
+ width = length;
+ length = tmp / 2;
+ }
+}
+
+// length and width in inch
+static void add_american_paper(const char *name, int index,
+ double length, double width )
+{
+ char *p = new char[strlen(name) + 1];
+ strcpy(p, name);
+ papersizes[index].name = p;
+ papersizes[index].length = length;
+ papersizes[index].width = width;
+}
+
+int papersize_init::initialised = 0;
+
+papersize_init::papersize_init()
+{
+ if (initialised)
+ return;
+ initialised = 1;
+ add_iso_paper('a', 0, 1189, 841);
+ add_iso_paper('b', 8, 1414, 1000);
+ add_iso_paper('c', 16, 1297, 917);
+ add_iso_paper('d', 24, 1090, 771);
+ add_american_paper("letter", 32, 11, 8.5);
+ add_american_paper("legal", 33, 14, 8.5);
+ add_american_paper("tabloid", 34, 17, 11);
+ add_american_paper("ledger", 35, 11, 17);
+ add_american_paper("statement", 36, 8.5, 5.5);
+ add_american_paper("executive", 37, 10, 7.5);
+ // the next three entries are for grolj4
+ add_american_paper("com10", 38, 9.5, 4.125);
+ add_american_paper("monarch", 39, 7.5, 3.875);
+ // this is an ISO format, but it easier to use add_american_paper
+ add_american_paper("dl", 40, 220/25.4, 110/25.4);
+}
diff --git a/contrib/groff/src/libs/libgroff/putenv.c b/contrib/groff/src/libs/libgroff/putenv.c
index c1ca671..2091f3b 100644
--- a/contrib/groff/src/libs/libgroff/putenv.c
+++ b/contrib/groff/src/libs/libgroff/putenv.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -18,6 +18,10 @@ Cambridge, MA 02139, USA. */
/* Hacked slightly by jjc@jclark.com for groff. */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <string.h>
#ifdef __STDC__
diff --git a/contrib/groff/src/libs/libgroff/searchpath.cc b/contrib/groff/src/libs/libgroff/searchpath.cc
index f4e2b90..1f8b233 100644
--- a/contrib/groff/src/libs/libgroff/searchpath.cc
+++ b/contrib/groff/src/libs/libgroff/searchpath.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,12 +19,11 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
-#include <string.h>
+#include "lib.h"
+
#include <stdlib.h>
#include <assert.h>
-#include "lib.h"
#include "searchpath.h"
#include "nonposix.h"
diff --git a/contrib/groff/src/libs/libgroff/strerror.c b/contrib/groff/src/libs/libgroff/strerror.c
index 69089f1..be2d1f3 100644
--- a/contrib/groff/src/libs/libgroff/strerror.c
+++ b/contrib/groff/src/libs/libgroff/strerror.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -17,6 +17,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_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdio.h>
#define INT_DIGITS 19 /* enough for 64 bit integer */
diff --git a/contrib/groff/src/libs/libgroff/string.cc b/contrib/groff/src/libs/libgroff/string.cc
index 4bcd4cc..2ef547e 100644
--- a/contrib/groff/src/libs/libgroff/string.cc
+++ b/contrib/groff/src/libs/libgroff/string.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,10 +19,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. */
-#include <stdio.h>
-#include "stringclass.h"
#include "lib.h"
+#include "stringclass.h"
+
static char *salloc(int len, int *sizep);
static void sfree(char *ptr, int size);
static char *sfree_alloc(char *ptr, int size, int len, int *sizep);
@@ -290,10 +291,39 @@ char *string::extract() const
for (i = 0; i < n; i++)
if (p[i] != '\0')
*r++ = p[i];
- q[n] = '\0';
+ *r = '\0';
return q;
}
+void string::remove_spaces()
+{
+ int l = len - 1;
+ while (l >= 0 && ptr[l] == ' ')
+ l--;
+ char *p = ptr;
+ if (l > 0)
+ while (*p == ' ') {
+ p++;
+ l--;
+ }
+ if (len - 1 != l) {
+ if (l >= 0) {
+ len = l + 1;
+ char *tmp = new char[len];
+ memcpy(tmp, p, len);
+ a_delete ptr;
+ ptr = tmp;
+ }
+ else {
+ len = 0;
+ if (ptr) {
+ a_delete ptr;
+ ptr = 0;
+ }
+ }
+ }
+}
+
void put_string(const string &s, FILE *fp)
{
int len = s.length();
diff --git a/contrib/groff/src/libs/libgroff/strtol.c b/contrib/groff/src/libs/libgroff/strtol.c
index 61ce70e..46b1702 100644
--- a/contrib/groff/src/libs/libgroff/strtol.c
+++ b/contrib/groff/src/libs/libgroff/strtol.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -17,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_CONFIG_H
+#include <config.h>
+#endif
+
#include <string.h>
#include <ctype.h>
#include <errno.h>
diff --git a/contrib/groff/src/libs/libgroff/tmpfile.cc b/contrib/groff/src/libs/libgroff/tmpfile.cc
index 8508c59..41b7f06 100644
--- a/contrib/groff/src/libs/libgroff/tmpfile.cc
+++ b/contrib/groff/src/libs/libgroff/tmpfile.cc
@@ -19,23 +19,16 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
+#include "lib.h"
+
#include <errno.h>
-#include <string.h>
#include <stdlib.h>
#include "posix.h"
-#include "lib.h"
#include "errarg.h"
#include "error.h"
#include "nonposix.h"
-#ifndef HAVE_MKSTEMP_PROTO
-extern "C" {
- extern int mkstemp (char *);
-}
-#endif
-
// If this is set, create temporary files there
#define GROFF_TMPDIR_ENVVAR "GROFF_TMPDIR"
// otherwise if this is set, create temporary files there
@@ -48,11 +41,49 @@ extern "C" {
# define DEFAULT_TMPDIR "/tmp"
#endif
// Use this as the prefix for temporary filenames.
-#ifdef __MSDOS__
-#define TMPFILE_PREFIX ""
-#else
-#define TMPFILE_PREFIX "groff"
-#endif
+#define TMPFILE_PREFIX_SHORT ""
+#define TMPFILE_PREFIX_LONG "groff"
+
+char *tmpfile_prefix;
+size_t tmpfile_prefix_len;
+int use_short_postfix = 0;
+
+struct temp_init {
+ temp_init();
+ ~temp_init();
+} _temp_init;
+
+temp_init::temp_init()
+{
+ const char *tem = getenv(GROFF_TMPDIR_ENVVAR);
+ if (!tem) {
+ tem = getenv(TMPDIR_ENVVAR);
+ if (!tem)
+ tem = DEFAULT_TMPDIR;
+ }
+ size_t tem_len = strlen(tem);
+ const char *tem_end = tem + tem_len - 1;
+ int need_slash = strchr(DIR_SEPS, *tem_end) == NULL ? 1 : 0;
+ char *tem2 = new char[tem_len + need_slash + 1];
+ strcpy(tem2, tem);
+ if (need_slash)
+ strcat(tem2, "/");
+ const char *tem3 = TMPFILE_PREFIX_LONG;
+ if (file_name_max(tem2) <= 14) {
+ tem3 = TMPFILE_PREFIX_SHORT;
+ use_short_postfix = 1;
+ }
+ tmpfile_prefix_len = tem_len + need_slash + strlen(tem3);
+ tmpfile_prefix = new char[tmpfile_prefix_len + 1];
+ strcpy(tmpfile_prefix, tem2);
+ strcat(tmpfile_prefix, tem3);
+ a_delete tem2;
+}
+
+temp_init::~temp_init()
+{
+ a_delete tmpfile_prefix;
+}
/*
* Generate a temporary name template with a postfix
@@ -62,85 +93,67 @@ extern "C" {
* only the *template* is returned.
*/
-char *xtmptemplate(char *postfix)
+char *xtmptemplate(const char *postfix_long, const char *postfix_short)
{
- const char *dir = getenv(GROFF_TMPDIR_ENVVAR);
+ const char *postfix = use_short_postfix ? postfix_short : postfix_long;
int postlen = 0;
-
if (postfix)
postlen = strlen(postfix);
-
- if (!dir) {
- dir = getenv(TMPDIR_ENVVAR);
- if (!dir)
- dir = DEFAULT_TMPDIR;
- }
-
- size_t dir_len = strlen(dir);
- const char *dir_end = dir + dir_len - 1;
- int needs_slash = strchr(DIR_SEPS, *dir_end) == NULL;
- char *templ = new char[strlen(dir) + needs_slash
- + sizeof(TMPFILE_PREFIX) - 1 + 6 + 1 + postlen];
- strcpy(templ, dir);
- if (needs_slash)
- strcat(templ, "/");
- strcat(templ, TMPFILE_PREFIX);
+ char *templ = new char[tmpfile_prefix_len + postlen + 6 + 1];
+ strcpy(templ, tmpfile_prefix);
if (postlen > 0)
strcat(templ, postfix);
strcat(templ, "XXXXXX");
-
- return( templ );
+ 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.
+// Instead, we maintain a list of files to be deleted on exit.
// This should be portable to all platforms.
-static struct xtmpfile_list {
- struct xtmpfile_list *next;
- char fname[1];
-} *xtmpfiles_to_delete;
+struct xtmpfile_list {
+ char *fname;
+ xtmpfile_list *next;
+ xtmpfile_list(char *fn) : fname(fn), next(0) {}
+};
+
+xtmpfile_list *xtmpfiles_to_delete = 0;
-static void remove_tmp_files()
+struct xtmpfile_list_init {
+ ~xtmpfile_list_init();
+} _xtmpfile_list_init;
+
+xtmpfile_list_init::~xtmpfile_list_init()
{
- struct xtmpfile_list *p = xtmpfiles_to_delete;
-
- while (p) {
- if (unlink(p->fname) < 0)
- error("cannot unlink `%1': %2", p->fname, strerror(errno));
- struct xtmpfile_list *old = p;
- p = p->next;
- free(old);
+ xtmpfile_list *x = xtmpfiles_to_delete;
+ while (x != 0) {
+ if (unlink(x->fname) < 0)
+ error("cannot unlink `%1': %2", x->fname, strerror(errno));
+ xtmpfile_list *tmp = x;
+ x = x->next;
+ a_delete tmp->fname;
+ delete tmp;
}
}
static void add_tmp_file(const char *name)
{
- if (xtmpfiles_to_delete == NULL)
- atexit(remove_tmp_files);
-
- struct xtmpfile_list *p
- = (struct xtmpfile_list *)malloc(sizeof(struct xtmpfile_list)
- + strlen (name));
- if (p == NULL) {
- error("cannot unlink `%1': %2", name, strerror(errno));
- return;
- }
- p->next = xtmpfiles_to_delete;
- strcpy(p->fname, name);
- xtmpfiles_to_delete = p;
+ char *s = new char[strlen(name)+1];
+ strcpy(s, name);
+ xtmpfile_list *x = new xtmpfile_list(s);
+ x->next = xtmpfiles_to_delete;
+ xtmpfiles_to_delete = x;
}
// Open a temporary file and with fatal error on failure.
-FILE *xtmpfile(char **namep, char *postfix, int do_unlink)
+FILE *xtmpfile(char **namep,
+ const char *postfix_long, const char *postfix_short,
+ int do_unlink)
{
- char *templ = xtmptemplate(postfix);
-
-#ifdef HAVE_MKSTEMP
+ char *templ = xtmptemplate(postfix_long, postfix_short);
errno = 0;
int fd = mkstemp(templ);
if (fd < 0)
@@ -149,17 +162,9 @@ FILE *xtmpfile(char **namep, char *postfix, int do_unlink)
FILE *fp = fdopen(fd, FOPEN_RWB); // many callers of xtmpfile use binary I/O
if (!fp)
fatal("fdopen: %1", strerror(errno));
-#else /* not HAVE_MKSTEMP */
- if (!mktemp(templ) || !templ[0])
- fatal("cannot create file name for temporary file");
- errno = 0;
- FILE *fp = fopen(templ, FOPEN_RWB);
- if (!fp)
- fatal("cannot open `%1': %2", templ, strerror(errno));
-#endif /* not HAVE_MKSTEMP */
if (do_unlink)
add_tmp_file(templ);
- if ((namep != 0) && ((*namep) != 0))
+ if (namep)
*namep = templ;
else
a_delete templ;
diff --git a/contrib/groff/src/libs/libgroff/tmpname.cc b/contrib/groff/src/libs/libgroff/tmpname.cc
new file mode 100644
index 0000000..213b0ee
--- /dev/null
+++ b/contrib/groff/src/libs/libgroff/tmpname.cc
@@ -0,0 +1,116 @@
+/* Copyright (C) 2001 Free Software Foundation, Inc.
+ Written by Werner Lemberg (wl@gnu.org)
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+
+/* This file is heavily based on the function __gen_tempname() in the
+ file tempname.c which is part of the fileutils package. */
+
+
+#include "lib.h"
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <time.h>
+
+#include "posix.h"
+#include "nonposix.h"
+
+#ifndef TMP_MAX
+# define TMP_MAX 238328
+#endif
+
+#if HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+
+#ifdef HAVE_GETTIMEOFDAY
+#ifdef NEED_DECLARATION_GETTIMEOFDAY
+extern "C" {
+ int gettimeofday(struct timeval *, void *);
+}
+#endif
+#endif
+
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+/* Use the widest available unsigned type if uint64_t is not
+ available. The algorithm below extracts a number less than 62**6
+ (approximately 2**35.725) from uint64_t, so ancient hosts where
+ uintmax_t is only 32 bits lose about 3.725 bits of randomness,
+ which is better than not having mkstemp at all. */
+#if !defined UINT64_MAX && !defined uint64_t
+# define uint64_t uintmax_t
+#endif
+
+/* These are the characters used in temporary filenames. */
+static const char letters[] =
+"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+int gen_tempname(char *tmpl, int dir)
+{
+ static uint64_t value;
+
+ size_t len = strlen(tmpl);
+ if (len < 6 || strcmp(&tmpl[len - 6], "XXXXXX"))
+ return -1; /* EINVAL */
+
+ /* This is where the Xs start. */
+ char *XXXXXX = &tmpl[len - 6];
+
+ /* Get some more or less random data. */
+#if HAVE_GETTIMEOFDAY
+ timeval tv;
+ gettimeofday(&tv, NULL);
+ uint64_t random_time_bits = ((uint64_t)tv.tv_usec << 16) ^ tv.tv_sec;
+#else
+ uint64_t random_time_bits = time(NULL);
+#endif
+ value += random_time_bits ^ getpid();
+
+ for (int count = 0; count < TMP_MAX; value += 7777, ++count) {
+ uint64_t v = value;
+
+ /* Fill in the random bits. */
+ XXXXXX[0] = letters[v % 62];
+ v /= 62;
+ XXXXXX[1] = letters[v % 62];
+ v /= 62;
+ XXXXXX[2] = letters[v % 62];
+ v /= 62;
+ XXXXXX[3] = letters[v % 62];
+ v /= 62;
+ XXXXXX[4] = letters[v % 62];
+ v /= 62;
+ XXXXXX[5] = letters[v % 62];
+
+ int fd = dir ? mkdir(tmpl, S_IRUSR | S_IWUSR | S_IXUSR)
+ : open(tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+
+ if (fd >= 0)
+ return fd;
+ else if (errno != EEXIST)
+ return -1;
+ }
+
+ /* We got out of the loop because we ran out of combinations to try. */
+ return -1; /* EEXIST */
+}
diff --git a/contrib/groff/src/preproc/eqn/Makefile.sub b/contrib/groff/src/preproc/eqn/Makefile.sub
index 20421e1c..6997290 100644
--- a/contrib/groff/src/preproc/eqn/Makefile.sub
+++ b/contrib/groff/src/preproc/eqn/Makefile.sub
@@ -1,22 +1,22 @@
-PROG=eqn
+PROG=eqn$(EXEEXT)
MAN1=eqn.n neqn.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
+ eqn.$(OBJEXT) \
+ main.$(OBJEXT) \
+ lex.$(OBJEXT) \
+ box.$(OBJEXT) \
+ limit.$(OBJEXT) \
+ list.$(OBJEXT) \
+ over.$(OBJEXT) \
+ text.$(OBJEXT) \
+ script.$(OBJEXT) \
+ mark.$(OBJEXT) \
+ other.$(OBJEXT) \
+ delim.$(OBJEXT) \
+ sqrt.$(OBJEXT) \
+ pile.$(OBJEXT) \
+ special.$(OBJEXT)
CCSRCS=\
$(srcdir)/main.cc \
$(srcdir)/lex.cc \
@@ -37,8 +37,8 @@ HDRS=\
$(srcdir)/eqn.h \
$(srcdir)/pbox.h
GRAM=$(srcdir)/eqn.y
-YTABC=$(srcdir)/eqn.cc
-YTABH=$(srcdir)/eqn_tab.h
+YTABC=eqn.cc
+YTABH=eqn_tab.h
NAMEPREFIX=$(g)
CLEANADD=neqn
diff --git a/contrib/groff/src/preproc/eqn/box.cc b/contrib/groff/src/preproc/eqn/box.cc
index 4e61b5d..41d8dff 100644
--- a/contrib/groff/src/preproc/eqn/box.cc
+++ b/contrib/groff/src/preproc/eqn/box.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -232,7 +232,7 @@ void start_string()
void output_string()
{
- printf("\\*[" LINE_STRING "]\n");
+ printf("\\*(" LINE_STRING "\n");
}
void restore_compatibility()
@@ -259,7 +259,7 @@ void set_script_size()
if (script_size_reduction >= 0)
printf(".ps \\n[.s]-%d>?%d\n", script_size_reduction, minimum_size);
else
- printf(".ps (u;\\n[.s]*7+5/10>?%d)*1z\n", minimum_size);
+ printf(".ps (u;\\n[.ps]*7+5/10>?%d)\n", minimum_size);
}
int box::next_uid = 0;
@@ -281,7 +281,7 @@ void box::top_level()
printf(".ft\n");
printf(".nr " SAVED_PREV_FONT_REG " \\n[.f]\n");
printf(".ft %s\n", get_gfont());
- printf(".nr " SAVED_SIZE_REG " \\n[.s]z\n");
+ printf(".nr " SAVED_SIZE_REG " \\n[.ps]\n");
if (gsize > 0) {
char buf[INT_DIGITS + 1];
sprintf(buf, "%d", gsize);
@@ -299,7 +299,7 @@ void box::top_level()
printf(".nr " MARK_WIDTH_REG " 0\\n[" WIDTH_FORMAT "]\n", b->uid);
}
else if (r == FOUND_LINEUP)
- printf(".if r" SAVED_MARK_REG " .as " LINE_STRING " \\h'\\n["
+ printf(".if r" SAVED_MARK_REG " .as1 " LINE_STRING " \\h'\\n["
SAVED_MARK_REG "]u-\\n[" MARK_REG "]u'\n");
else
assert(r == FOUND_NOTHING);
@@ -311,9 +311,9 @@ void box::top_level()
"\\R'" SAVED_INLINE_FONT_REG " \\\\n[.f]'"
"\\fP"
"\\R'" SAVED_INLINE_PREV_FONT_REG " \\\\n[.f]'"
- "\\R'" SAVED_INLINE_SIZE_REG " \\\\n[.s]z'"
+ "\\R'" SAVED_INLINE_SIZE_REG " \\\\n[.ps]'"
"\\s0"
- "\\R'" SAVED_INLINE_PREV_SIZE_REG " \\\\n[.s]z'"
+ "\\R'" SAVED_INLINE_PREV_SIZE_REG " \\\\n[.ps]'"
"\n"
".ds " RESTORE_FONT_STRING " "
"\\f[\\\\n[" SAVED_INLINE_PREV_FONT_REG "]]"
@@ -321,14 +321,14 @@ void box::top_level()
"\\s'\\\\n[" SAVED_INLINE_PREV_SIZE_REG "]u'"
"\\s'\\\\n[" SAVED_INLINE_SIZE_REG "]u'"
"\n");
- printf(".as " LINE_STRING " \\&\\E*[" SAVE_FONT_STRING "]");
+ printf(".as1 " LINE_STRING " \\&\\E*[" SAVE_FONT_STRING "]");
printf("\\f[%s]", get_gfont());
printf("\\s'\\En[" SAVED_SIZE_REG "]u'");
current_roman_font = get_grfont();
b->output();
printf("\\E*[" RESTORE_FONT_STRING "]\n");
if (r == FOUND_LINEUP)
- printf(".if r" SAVED_MARK_REG " .as " LINE_STRING " \\h'\\n["
+ printf(".if r" SAVED_MARK_REG " .as1 " LINE_STRING " \\h'\\n["
MARK_WIDTH_REG "]u-\\n[" SAVED_MARK_REG "]u-(\\n["
WIDTH_FORMAT "]u-\\n[" MARK_REG "]u)'\n",
b->uid);
@@ -351,20 +351,20 @@ void box::extra_space()
if (positive_space >= 0 || negative_space >= 0) {
if (positive_space > 0)
printf(".if !\\n[" EQN_NO_EXTRA_SPACE_REG "] "
- ".as " LINE_STRING " \\x'-%dM'\n", positive_space);
+ ".as1 " LINE_STRING " \\x'-%dM'\n", positive_space);
if (negative_space > 0)
printf(".if !\\n[" EQN_NO_EXTRA_SPACE_REG "] "
- ".as " LINE_STRING " \\x'%dM'\n", negative_space);
+ ".as1 " LINE_STRING " \\x'%dM'\n", negative_space);
positive_space = negative_space = -1;
}
else {
printf(".if !\\n[" EQN_NO_EXTRA_SPACE_REG "] "
- ".if \\n[" HEIGHT_FORMAT "]>%dM .as " LINE_STRING
+ ".if \\n[" HEIGHT_FORMAT "]>%dM .as1 " LINE_STRING
" \\x'-(\\n[" HEIGHT_FORMAT
"]u-%dM)'\n",
uid, body_height, uid, body_height);
printf(".if !\\n[" EQN_NO_EXTRA_SPACE_REG "] "
- ".if \\n[" DEPTH_FORMAT "]>%dM .as " LINE_STRING
+ ".if \\n[" DEPTH_FORMAT "]>%dM .as1 " LINE_STRING
" \\x'\\n[" DEPTH_FORMAT
"]u-%dM'\n",
uid, body_depth, uid, body_depth);
diff --git a/contrib/groff/src/preproc/eqn/eqn.cc b/contrib/groff/src/preproc/eqn/eqn.cc
index 1fdda61..2c01ba6 100644
--- a/contrib/groff/src/preproc/eqn/eqn.cc
+++ b/contrib/groff/src/preproc/eqn/eqn.cc
@@ -1,26 +1,13 @@
-#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[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93 (groff)";
#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 20 "eqn.y"
#include <stdio.h>
#include <string.h>
@@ -41,7 +28,7 @@ typedef union {
int n;
column *col;
} YYSTYPE;
-#line 45 "y.tab.c"
+#line 32 "y.tab.c"
#define OVER 257
#define SMALLOVER 258
#define SQRT 259
@@ -101,7 +88,7 @@ typedef union {
#define GRFONT 313
#define GBFONT 314
#define YYERRCODE 256
-static YYCONST short yylhs[] = { -1,
+short yylhs[] = { -1,
0, 0, 6, 6, 1, 1, 1, 2, 2, 2,
2, 2, 3, 3, 3, 3, 4, 4, 7, 7,
7, 5, 5, 5, 5, 5, 5, 5, 5, 5,
@@ -111,7 +98,7 @@ static YYCONST short yylhs[] = { -1,
13, 16, 16, 15, 15, 14, 14, 14, 14, 9,
9, 10, 10, 10,
};
-static YYCONST short yylen[] = { 2,
+short yylen[] = { 2,
0, 1, 1, 2, 1, 2, 2, 1, 3, 3,
5, 5, 1, 2, 3, 3, 1, 3, 1, 3,
5, 1, 1, 2, 2, 1, 1, 1, 3, 2,
@@ -121,7 +108,7 @@ static YYCONST short yylen[] = { 2,
2, 1, 3, 3, 4, 2, 2, 2, 2, 1,
1, 1, 1, 1,
};
-static YYCONST short yydefred[] = { 0,
+short yydefred[] = { 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 22, 23, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 26, 27, 28, 0,
@@ -137,11 +124,11 @@ static YYCONST short yydefred[] = { 0,
69, 34, 61, 0, 0, 0, 0, 59, 35, 0,
0, 0, 11, 12, 21, 0, 64, 0, 0, 65,
};
-static YYCONST short yydgoto[] = { 31,
+short yydgoto[] = { 31,
32, 33, 34, 35, 36, 84, 38, 43, 44, 52,
85, 45, 98, 99, 118, 131,
};
-static YYCONST short yysindex[] = { 1488,
+short yysindex[] = { 1488,
1527, -120, -120, -120, -120, -123, -249, -249, 1566, 1566,
1566, 1566, 0, 0, -249, -249, -249, -249, -115, 1488,
1488, -249, 1566, -256, -251, -249, 0, 0, 0, 1488,
@@ -157,7 +144,7 @@ static YYCONST short yysindex[] = { 1488,
0, 0, 0, 1527, 1527, 1566, 1488, 0, 0, 1488,
-105, 1488, 0, 0, 0, 1488, 0, -104, 1488, 0,
};
-static YYCONST short yyrindex[] = { 41,
+short yyrindex[] = { 41,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -173,12 +160,12 @@ static YYCONST short yyrindex[] = { 41,
0, 0, 0, 0, 0, 0, -102, 0, 0, -101,
0, 0, 0, 0, 0, 0, 0, 0, -99, 0,
};
-static YYCONST short yygindex[] = { 0,
+short yygindex[] = { 0,
-7, -69, 3, -66, 458, 9, -26, 52, 27, -63,
-32, 54, 0, -35, 2, -59,
};
#define YYTABLESIZE 1865
-static YYCONST short yytable[] = { 49,
+short yytable[] = { 49,
8, 50, 42, 39, 105, 116, 122, 63, 37, 8,
109, 113, 64, 65, 94, 95, 96, 97, 128, 137,
140, 56, 57, 62, 68, 63, 76, 77, 69, 83,
@@ -367,7 +354,7 @@ static YYCONST short yytable[] = { 49,
18, 19, 0, 0, 0, 0, 0, 0, 22, 23,
0, 24, 25, 0, 26,
};
-static YYCONST short yycheck[] = { 123,
+short yycheck[] = { 123,
0, 125, 123, 1, 74, 123, 125, 123, 0, 9,
77, 125, 20, 21, 287, 288, 289, 290, 125, 125,
125, 125, 125, 125, 281, 125, 260, 261, 280, 37,
@@ -562,7 +549,7 @@ static YYCONST short yycheck[] = { 123,
#endif
#define YYMAXTOKEN 314
#if YYDEBUG
-static YYCONST char *YYCONST yyname[] = {
+char *yyname[] = {
"end-of-file",0,0,0,0,0,0,0,0,"'\\t'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -577,7 +564,7 @@ static YYCONST char *YYCONST yyname[] = {
"UACCENT","SPECIAL","SPACE","GFONT","GSIZE","DEFINE","NDEFINE","TDEFINE",
"SDEFINE","UNDEF","IFDEF","INCLUDE","DELIM","CHARTYPE","SET","GRFONT","GBFONT",
};
-static YYCONST char *YYCONST yyrule[] = {
+char *yyrule[] = {
"$accept : top",
"top :",
"top : equation",
@@ -655,13 +642,6 @@ static YYCONST char *YYCONST yyrule[] = {
"delim : '}'",
};
#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
@@ -669,44 +649,36 @@ 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
#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"))
{
@@ -720,26 +692,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;
@@ -749,8 +707,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
}
@@ -759,18 +717,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;
@@ -806,17 +758,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;
@@ -826,8 +773,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;
@@ -844,8 +791,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);
@@ -854,8 +801,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];
@@ -1164,7 +1111,7 @@ case 74:
#line 328 "eqn.y"
{ yyval.str = strsave("}"); }
break;
-#line 1168 "y.tab.c"
+#line 1115 "y.tab.c"
}
yyssp -= yym;
yystate = *yyssp;
@@ -1174,8 +1121,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;
@@ -1189,8 +1136,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
}
@@ -1204,17 +1151,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;
@@ -1226,52 +1168,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/src/preproc/eqn/eqn.h b/contrib/groff/src/preproc/eqn/eqn.h
index 70b1927..ee25f03 100644
--- a/contrib/groff/src/preproc/eqn/eqn.h
+++ b/contrib/groff/src/preproc/eqn/eqn.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,15 +18,14 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
-#include <string.h>
+#include "lib.h"
+
#include <assert.h>
#include <stdlib.h>
#include <errno.h>
#include "cset.h"
#include "errarg.h"
#include "error.h"
-#include "lib.h"
#include "box.h"
diff --git a/contrib/groff/src/preproc/eqn/eqn.man b/contrib/groff/src/preproc/eqn/eqn.man
index bc7dc7e..6d0733c 100644
--- a/contrib/groff/src/preproc/eqn/eqn.man
+++ b/contrib/groff/src/preproc/eqn/eqn.man
@@ -42,7 +42,7 @@ the original English.
.el .RB "[\ " "\\$1" "\ ]"
..
.OP \-rvCNR
-.OP \-d cc
+.OP \-d xy
.OP \-T name
.OP \-M dir
.OP \-f F
@@ -97,6 +97,16 @@ it does not support low-resolution, typewriter-like devices
(although it may work adequately for very simple input).
.SH OPTIONS
.TP
+.BI \-d xy
+Specify delimiters
+.I x
+and
+.I y
+for the left and right end, respectively, of in-line equations.
+Any
+.B delim
+statements in the source file overrides this.
+.TP
.B \-C
Recognize
.B .EQ
@@ -456,7 +466,7 @@ by drawing a diagonal line through it.
.IP
.nf
.ft B
-.ne 6+\n(.Vu
+.if t .ne 6+\n(.Vu
\&.EQ
define cancel 'special Ca'
\&.EN
@@ -475,7 +485,7 @@ Here's a more complicated construct that draws a box round an expression:
.IP
.nf
.ft B
-.ne 11+\n(.Vu
+.if t .ne 11+\n(.Vu
\&.EQ
define box 'special Bx'
\&.EN
diff --git a/contrib/groff/src/preproc/eqn/lex.cc b/contrib/groff/src/preproc/eqn/lex.cc
index e14053d..4e62f86 100644
--- a/contrib/groff/src/preproc/eqn/lex.cc
+++ b/contrib/groff/src/preproc/eqn/lex.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -371,8 +371,8 @@ int file_input::read_line()
int c = getc(fp);
if (c == EOF)
break;
- else if (illegal_input_char(c))
- lex_error("illegal input character code %1", c);
+ else if (invalid_input_char(c))
+ lex_error("invalid input character code %1", c);
else {
line += char(c);
if (c == '\n')
@@ -467,7 +467,7 @@ int top_input::get_location(char **fnp, int *lnp)
return 1;
}
-// Character representing $1. Must be illegal input character.
+// Character representing $1. Must be invalid input character.
#define ARG1 14
argument_macro_input::argument_macro_input(const char *body, int ac,
diff --git a/contrib/groff/src/preproc/eqn/limit.cc b/contrib/groff/src/preproc/eqn/limit.cc
index 046885d..c8b5587 100644
--- a/contrib/groff/src/preproc/eqn/limit.cc
+++ b/contrib/groff/src/preproc/eqn/limit.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -55,10 +55,10 @@ limit_box::~limit_box()
int limit_box::compute_metrics(int style)
{
- printf(".nr " SIZE_FORMAT " \\n[.s]\n", uid);
+ printf(".nr " SIZE_FORMAT " \\n[.ps]\n", uid);
if (!(style <= SCRIPT_STYLE && one_size_reduction_flag))
set_script_size();
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.s]\n", uid);
+ printf(".nr " SMALL_SIZE_FORMAT " \\n[.ps]\n", uid);
int res = 0;
int mark_uid = -1;
if (from != 0) {
@@ -75,7 +75,7 @@ int limit_box::compute_metrics(int style)
res = r;
}
}
- printf(".ps \\n[" SIZE_FORMAT "]\n", uid);
+ printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
int r = p->compute_metrics(style);
p->compute_subscript_kern();
if (res && r)
@@ -139,7 +139,7 @@ int limit_box::compute_metrics(int style)
void limit_box::output()
{
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
if (to != 0) {
printf("\\Z" DELIMITER_CHAR);
printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
@@ -158,7 +158,7 @@ void limit_box::output()
from->output();
printf(DELIMITER_CHAR);
}
- printf("\\s[\\n[" SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
printf("\\Z" DELIMITER_CHAR);
printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u"
"-(\\n[" WIDTH_FORMAT "]u/2u)'",
diff --git a/contrib/groff/src/preproc/eqn/main.cc b/contrib/groff/src/preproc/eqn/main.cc
index f53ffa3..dabac5f 100644
--- a/contrib/groff/src/preproc/eqn/main.cc
+++ b/contrib/groff/src/preproc/eqn/main.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -24,8 +24,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "device.h"
#include "searchpath.h"
#include "macropath.h"
-#include "htmlindicate.h"
+#include "htmlhint.h"
#include "pbox.h"
+#include "ctype.h"
#define STARTUP_FILE "eqnrc"
@@ -44,9 +45,6 @@ int one_size_reduction_flag = 0;
int compatible_flag = 0;
int no_newline_in_delim_flag = 0;
int html = 0;
-// if we encounter a region marked as an image then we
-// do not mark up inline equations.
-int suppress_html = 0;
int read_line(FILE *fp, string *p)
@@ -54,10 +52,10 @@ int read_line(FILE *fp, string *p)
p->clear();
int c = -1;
while ((c = getc(fp)) != EOF) {
- if (!illegal_input_char(c))
+ if (!invalid_input_char(c))
*p += char(c);
else
- error("illegal input character code `%1'", c);
+ error("invalid input character code `%1'", c);
if (c == '\n')
break;
}
@@ -81,33 +79,12 @@ void do_file(FILE *fp, const char *filename)
if (interpret_lf_args(linebuf.contents() + 3))
current_lineno--;
}
- else if (linebuf.length() >= 12
- && linebuf[0] == '.' && linebuf[1] == 'H' && linebuf[2] == 'T'
- && linebuf[3] == 'M' && linebuf[4] == 'L' && linebuf[5] == '-'
- && linebuf[6] == 'I' && linebuf[7] == 'M' && linebuf[8] == 'A'
- && linebuf[9] == 'G' && linebuf[10] == 'E'
- && linebuf[11] == '\n') {
- put_string(linebuf, stdout);
- suppress_html++;
- }
- else if (linebuf.length() >= 16
- && linebuf[0] == '.' && linebuf[1] == 'H' && linebuf[2] == 'T'
- && linebuf[3] == 'M' && linebuf[4] == 'L' && linebuf[5] == '-'
- && linebuf[6] == 'I' && linebuf[7] == 'M' && linebuf[8] == 'A'
- && linebuf[9] == 'G' && linebuf[10] == 'E' && linebuf[11] == '-'
- && linebuf[12] == 'E' && linebuf[13] == 'N' && linebuf[14] == 'D'
- && linebuf[15] == '\n') {
- put_string(linebuf, stdout);
- suppress_html--;
- }
else if (linebuf.length() >= 4
&& linebuf[0] == '.'
&& linebuf[1] == 'E'
&& linebuf[2] == 'Q'
&& (linebuf[3] == ' ' || linebuf[3] == '\n'
|| compatible_flag)) {
- if (html && (suppress_html == 0))
- graphic_start(0);
put_string(linebuf, stdout);
int start_lineno = current_lineno + 1;
str.clear();
@@ -132,15 +109,13 @@ void do_file(FILE *fp, const char *filename)
non_empty_flag = 0;
inline_flag = 0;
yyparse();
+ restore_compatibility();
if (non_empty_flag) {
printf(".lf %d\n", current_lineno - 1);
output_string();
}
- restore_compatibility();
printf(".lf %d\n", current_lineno);
put_string(linebuf, stdout);
- if (html && (suppress_html == 0))
- graphic_end();
}
else if (start_delim != '\0' && linebuf.search(start_delim) >= 0
&& inline_equation(fp, linebuf, str))
@@ -190,21 +165,22 @@ static int inline_equation(FILE *fp, string &linebuf, string &str)
}
str += ptr;
if (!read_line(fp, &linebuf))
- fatal("end of file before `%1'", end_delim);
+ fatal("unterminated `%1' at line %2, looking for `%3'",
+ start_delim, start_lineno, end_delim);
linebuf += '\0';
ptr = &linebuf[0];
}
str += '\0';
- if (html && (suppress_html == 0)) {
- printf(".as %s ", LINE_STRING);
- graphic_start(1);
+ if (html) {
+ printf(".as1 %s ", LINE_STRING);
+ html_begin_suppress();
printf("\n");
}
init_lex(str.contents(), current_filename, start_lineno);
yyparse();
- if (html && (suppress_html == 0)) {
- printf(".as %s ", LINE_STRING);
- graphic_end();
+ if (html) {
+ printf(".as1 %s ", LINE_STRING);
+ html_end_suppress();
printf("\n");
}
start = delim_search(ptr, start_delim);
@@ -216,9 +192,9 @@ static int inline_equation(FILE *fp, string &linebuf, string &str)
break;
}
}
+ restore_compatibility();
printf(".lf %d\n", current_lineno);
output_string();
- restore_compatibility();
printf(".lf %d\n", current_lineno + 1);
return 1;
}
@@ -311,9 +287,9 @@ int main(int argc, char **argv)
case 'd':
if (optarg[0] == '\0' || optarg[1] == '\0')
error("-d requires two character argument");
- else if (illegal_input_char(optarg[0]))
+ else if (invalid_input_char(optarg[0]))
error("bad delimiter `%1'", optarg[0]);
- else if (illegal_input_char(optarg[1]))
+ else if (invalid_input_char(optarg[1]))
error("bad delimiter `%1'", optarg[1]);
else {
start_delim = optarg[0];
diff --git a/contrib/groff/src/preproc/eqn/other.cc b/contrib/groff/src/preproc/eqn/other.cc
index eb9e50a..c052f52 100644
--- a/contrib/groff/src/preproc/eqn/other.cc
+++ b/contrib/groff/src/preproc/eqn/other.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -392,11 +392,11 @@ size_box::size_box(char *s, box *pp) : pointer_box(pp), size(s)
int size_box::compute_metrics(int style)
{
- printf(".nr " SIZE_FORMAT " \\n[.s]\n", uid);
+ printf(".nr " SIZE_FORMAT " \\n[.ps]\n", uid);
printf(".ps %s\n", size);
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.s]\n", uid);
+ printf(".nr " SMALL_SIZE_FORMAT " \\n[.ps]\n", uid);
int r = p->compute_metrics(style);
- printf(".ps \\n[" SIZE_FORMAT "]\n", uid);
+ printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
printf(".nr " WIDTH_FORMAT " 0\\n[" WIDTH_FORMAT "]\n", uid, p->uid);
printf(".nr " HEIGHT_FORMAT " \\n[" HEIGHT_FORMAT "]\n", uid, p->uid);
printf(".nr " DEPTH_FORMAT " \\n[" DEPTH_FORMAT "]\n", uid, p->uid);
@@ -405,9 +405,9 @@ int size_box::compute_metrics(int style)
void size_box::output()
{
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
p->output();
- printf("\\s[\\n[" SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
}
size_box::~size_box()
diff --git a/contrib/groff/src/preproc/eqn/over.cc b/contrib/groff/src/preproc/eqn/over.cc
index 4c544d1..279efc8 100644
--- a/contrib/groff/src/preproc/eqn/over.cc
+++ b/contrib/groff/src/preproc/eqn/over.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -61,9 +62,9 @@ int over_box::compute_metrics(int style)
{
if (reduce_size) {
style = script_style(style);
- printf(".nr " SIZE_FORMAT " \\n[.s]\n", uid);
+ printf(".nr " SIZE_FORMAT " \\n[.ps]\n", uid);
set_script_size();
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.s]\n", uid);
+ printf(".nr " SMALL_SIZE_FORMAT " \\n[.ps]\n", uid);
}
int mark_uid = 0;
int res = num->compute_metrics(style);
@@ -77,7 +78,7 @@ int over_box::compute_metrics(int style)
res = r;
}
if (reduce_size)
- printf(".ps \\n[" SIZE_FORMAT "]\n", uid);
+ printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
printf(".nr " WIDTH_FORMAT " (\\n[" WIDTH_FORMAT "]>?\\n[" WIDTH_FORMAT "]",
uid, num->uid, den->uid);
// allow for \(ru being wider than both the numerator and denominator
@@ -118,7 +119,7 @@ int over_box::compute_metrics(int style)
void over_box::output()
{
if (reduce_size)
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
#ifdef USE_Z
printf("\\Z" DELIMITER_CHAR);
#endif
@@ -165,7 +166,7 @@ void over_box::output()
printf("\\v'-\\n[" SUB_LOWER_FORMAT "]u'", uid);
#endif
if (reduce_size)
- printf("\\s[\\n[" SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
// draw the line
printf("\\h'%dM'", null_delimiter_space);
printf("\\v'-%dM'", axis_height);
diff --git a/contrib/groff/src/preproc/eqn/script.cc b/contrib/groff/src/preproc/eqn/script.cc
index 7c2e6c2..62a05b4 100644
--- a/contrib/groff/src/preproc/eqn/script.cc
+++ b/contrib/groff/src/preproc/eqn/script.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -73,10 +73,10 @@ int script_box::compute_metrics(int style)
{
int res = p->compute_metrics(style);
p->compute_subscript_kern();
- printf(".nr " SIZE_FORMAT " \\n[.s]\n", uid);
+ printf(".nr " SIZE_FORMAT " \\n[.ps]\n", uid);
if (!(style <= SCRIPT_STYLE && one_size_reduction_flag))
set_script_size();
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.s]\n", uid);
+ printf(".nr " SMALL_SIZE_FORMAT " \\n[.ps]\n", uid);
if (sub != 0)
sub->compute_metrics(cramped_style(script_style(style)));
if (sup != 0)
@@ -92,7 +92,7 @@ int script_box::compute_metrics(int style)
printf(".nr " SUB_LOWER_FORMAT " \\n[" DEPTH_FORMAT "]+%dM\n",
uid, p->uid, sub_drop);
}
- printf(".ps \\n[" SIZE_FORMAT "]\n", uid);
+ printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
if (sup == 0) {
assert(sub != 0);
// 18b
@@ -171,18 +171,18 @@ void script_box::output()
if (sup != 0) {
printf("\\Z" DELIMITER_CHAR);
printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
sup->output();
- printf("\\s[\\n[" SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
printf(DELIMITER_CHAR);
}
if (sub != 0) {
printf("\\Z" DELIMITER_CHAR);
printf("\\v'\\n[" SUB_LOWER_FORMAT "]u'", uid);
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
printf("\\h'-\\n[" SUB_KERN_FORMAT "]u'", p->uid);
sub->output();
- printf("\\s[\\n[" SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
printf(DELIMITER_CHAR);
}
printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'",
diff --git a/contrib/groff/src/preproc/eqn/sqrt.cc b/contrib/groff/src/preproc/eqn/sqrt.cc
index 6109ffe..bffa4f2 100644
--- a/contrib/groff/src/preproc/eqn/sqrt.cc
+++ b/contrib/groff/src/preproc/eqn/sqrt.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -54,7 +54,7 @@ int sqrt_box::compute_metrics(int style)
"]+%dM+(%dM/4)\n",
p->uid, p->uid, default_rule_thickness,
(style > SCRIPT_STYLE ? x_height : default_rule_thickness));
- printf(".nr " SIZE_FORMAT " \\n[.s]\n", uid);
+ printf(".nr " SIZE_FORMAT " \\n[.ps]\n", uid);
printf(".ds " SQRT_STRING_FORMAT " " SQRT_CHAR "\n", uid);
printf(".ds " BAR_STRING " " RADICAL_EXTENSION_CHAR "\n");
printf(".nr " SQRT_WIDTH_FORMAT
@@ -84,8 +84,8 @@ int sqrt_box::compute_metrics(int style)
// Determine the maximum point size
printf(".ps 1000\n");
- printf(".nr " MAX_SIZE_REG " \\n[.s]\n");
- printf(".ps \\n[" SIZE_FORMAT "]\n", uid);
+ printf(".nr " MAX_SIZE_REG " \\n[.ps]\n");
+ printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
// We define a macro that will increase the current point size
// until we get a radical sign that's tall enough or we reach
// the maximum point size.
@@ -93,7 +93,7 @@ int sqrt_box::compute_metrics(int style)
".nr " SQRT_WIDTH_FORMAT
" 0\\w" DELIMITER_CHAR "\\*[" SQRT_STRING_FORMAT "]" DELIMITER_CHAR "\n"
".if \\\\n[rst]-\\\\n[rsb]-%dM<\\n[" TEMP_REG "]"
- "&(\\\\n[.s]<\\n[" MAX_SIZE_REG "]) \\{"
+ "&(\\\\n[.ps]<\\n[" MAX_SIZE_REG "]) \\{"
".ps +1\n"
"." TEMP_MACRO "\n"
".\\}\n"
@@ -103,7 +103,7 @@ int sqrt_box::compute_metrics(int style)
printf(".\\}\\}\n");
- printf(".nr " SMALL_SIZE_FORMAT " \\n[.s]\n", uid);
+ printf(".nr " SMALL_SIZE_FORMAT " \\n[.ps]\n", uid);
// set TEMP_REG to the amount by which the radical sign is too big
printf(".nr " TEMP_REG " \\n[rst]-\\n[rsb]-%dM-\\n[" TEMP_REG "]\n",
default_rule_thickness);
@@ -143,17 +143,17 @@ int sqrt_box::compute_metrics(int style)
uid, p->uid, uid);
// put a bit of extra space above the bar
printf(".nr " HEIGHT_FORMAT " +%dM\n", uid, default_rule_thickness);
- printf(".ps \\n[" SIZE_FORMAT "]\n", uid);
+ printf(".ps \\n[" SIZE_FORMAT "]u\n", uid);
return r;
}
void sqrt_box::output()
{
printf("\\Z" DELIMITER_CHAR);
- printf("\\s[\\n[" SMALL_SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid);
printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid);
printf("\\*[" SQRT_STRING_FORMAT "]", uid);
- printf("\\s[\\n[" SIZE_FORMAT "]]", uid);
+ printf("\\s[\\n[" SIZE_FORMAT "]u]", uid);
printf(DELIMITER_CHAR);
printf("\\Z" DELIMITER_CHAR);
diff --git a/contrib/groff/src/preproc/grn/Makefile.sub b/contrib/groff/src/preproc/grn/Makefile.sub
index ffa0ad2..d180803 100644
--- a/contrib/groff/src/preproc/grn/Makefile.sub
+++ b/contrib/groff/src/preproc/grn/Makefile.sub
@@ -1,12 +1,12 @@
-PROG=grn
+PROG=grn$(EXEEXT)
MAN1=grn.n
MLIB=$(LIBM)
XLIBS=$(LIBGROFF)
OBJS=\
- hdb.o \
- hpoint.o \
- hgraph.o \
- main.o
+ hdb.$(OBJEXT) \
+ hpoint.$(OBJEXT) \
+ hgraph.$(OBJEXT) \
+ main.$(OBJEXT)
CCSRCS=\
$(srcdir)/hdb.cc \
$(srcdir)/hpoint.cc \
diff --git a/contrib/groff/src/preproc/grn/README b/contrib/groff/src/preproc/grn/README
index b5b9fc9..7ac685e 100644
--- a/contrib/groff/src/preproc/grn/README
+++ b/contrib/groff/src/preproc/grn/README
@@ -16,7 +16,15 @@ 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)
+a later time. (Daniel Senderowicz <daniel@synchrods.com> 12/28/99)
+
+=====================================================================
+
+Gremlin produces three types of curves: B-Splines, interpolated
+curves and Bezier. As the original Berkeley grn, now groff grn
+will honor B-Splines and interpolated curves. Bezier curves will
+be printed as B-Splines. (Daniel Senderowicz <daniel@synchrods.com>
+10/04/02)
=====================================================================
diff --git a/contrib/groff/src/preproc/grn/gprint.h b/contrib/groff/src/preproc/grn/gprint.h
index b25305b..b9df60e 100644
--- a/contrib/groff/src/preproc/grn/gprint.h
+++ b/contrib/groff/src/preproc/grn/gprint.h
@@ -38,6 +38,8 @@
#define ARC 4
#define CURVE 5
#define POLYGON 6
+#define BSPLINE 7
+#define BEZIER 8
#define TOPLEFT 10
#define TOPCENT 11
#define TOPRIGHT 12
diff --git a/contrib/groff/src/preproc/grn/grn.man b/contrib/groff/src/preproc/grn/grn.man
index 82e43cf..9722145 100644
--- a/contrib/groff/src/preproc/grn/grn.man
+++ b/contrib/groff/src/preproc/grn/grn.man
@@ -1,6 +1,6 @@
'\" t
.ig
-Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -46,7 +46,7 @@ the original English.
.BI \-F dir
]
[
-.IR file\.\.\.
+.IR file\.\.\.\&
]
.PP
It is possible to have whitespace between a command line option and its
@@ -131,8 +131,11 @@ for subdirectories
.RI ( name
is the name of the device) for the
.B DESC
-file before the normal
-.BR @FONTDIR@ .
+file before the default font directories
+.BR @LOCALFONTDIR@ ,
+.BR @FONTDIR@ ,
+and
+.BR @LEGACYFONTDIR@ .
.TP
.B \-C
Recognize
@@ -217,7 +220,7 @@ confusion with
There is
.I no
default for stipples (unless one is set by the default command), and it is
-illegal to include a
+invalid to include a
.I gremlin
picture with polygons without specifying a
stipple font.
@@ -408,7 +411,6 @@ 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.
@@ -435,7 +437,6 @@ css.
.sp
Table 1. File examples
.TE
-.DE
.sp
.IP \(bu
The first line of each
@@ -479,6 +480,8 @@ The stuff on this line really isn't all that important; a value of ``1 0.00
.IP \(bu
The rest of the file consists of zero or more element specifications.
After the last element specification is a line containing the string ``-1''.
+.IP \(bu
+Lines longer than 127 characters are chopped to this limit.
.SH ELEMENT SPECIFICATIONS
.IP \(bu
The first line of each element contains a single decimal number giving the
@@ -489,7 +492,6 @@ version) or its ASCII name
version).
See Table 2.
.sp
-.DS
.TS
center, tab(@);
css
@@ -505,6 +507,8 @@ nll.
4@ARC@arc
5@CURVE@curve
6@POLYGON@polygon
+7@BSPLINE@b-spline
+8@BEZIER@B\['e]zier
10@TOPLEFT@top-left-justified text
11@TOPCENT@top-center-justified text
12@TOPRIGHT@top-right-justified text
@@ -517,7 +521,6 @@ css.
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
@@ -536,7 +539,6 @@ 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.
@@ -547,13 +549,11 @@ ncw(0.1i)l.
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.
@@ -562,7 +562,6 @@ ncw(0.1i)l.
3 \(mi@@bold (B font in groff)
4 \(mi@@special (S font in groff)
.TE
-.DE
.sp
If you're using
.I @g@grn
@@ -570,9 +569,9 @@ to run your pictures through
.IR groff ,
the font is really just a starting font:
The text string can contain formatting sequences like
-``\\fI''
+``\efI''
or
-``\\d''
+``\ed''
which may change the font (as well as do many other things).
For text, the size field is a decimal value between 1 and 4.
It selects the size of the font in which the text will be drawn.
diff --git a/contrib/groff/src/preproc/grn/hdb.cc b/contrib/groff/src/preproc/grn/hdb.cc
index fd5bb48..648a535 100644
--- a/contrib/groff/src/preproc/grn/hdb.cc
+++ b/contrib/groff/src/preproc/grn/hdb.cc
@@ -15,6 +15,7 @@
#include "error.h"
#define MAXSTRING 128
+#define MAXSTRING_S "127"
/* imports from main.cc */
@@ -89,7 +90,7 @@ DBRead(register FILE *file)
SUNFILE = FALSE;
elist = DBInit();
- (void) fscanf(file, "%s\n", string);
+ (void) fscanf(file, "%" MAXSTRING_S "s%*[^\n]\n", string);
if (strcmp(string, "gremlinfile")) {
if (strcmp(string, "sungremlinfile")) {
error("`%1' is not a gremlin file", gremlinfile);
@@ -103,10 +104,10 @@ DBRead(register FILE *file)
done = FALSE;
while (!done) {
- /* if (fscanf(file,"%s\n", string) == EOF) */
+ /* if (fscanf(file,"%" MAXSTRING_S "s\n", string) == EOF) */
/* I changed the scanf format because the element */
/* can have two words (e.g. CURVE SPLINE) */
- if (fscanf(file, "\n%[^\n]\n", string) == EOF) {
+ if (fscanf(file, "\n%" MAXSTRING_S "[^\n]%*[^\n]\n", string) == EOF) {
error("`%1', error in file format", gremlinfile);
return (elist);
}
@@ -210,8 +211,20 @@ DBGetType(register char *s)
case 'A':
return (ARC);
case 'C':
- if (s[1] == 'U')
- return (CURVE);
+ if (s[1] == 'U') {
+ if (s[5] == '\n')
+ return (CURVE);
+ switch (s[7]) {
+ case 'S':
+ return(BSPLINE);
+ case 'E':
+ fprintf(stderr,
+ "Warning: Bezier Curves will be printed as B-Splines\n");
+ return(BSPLINE);
+ default:
+ return(CURVE);
+ }
+ }
switch (s[4]) {
case 'L':
return (CENTLEFT);
diff --git a/contrib/groff/src/preproc/grn/hgraph.cc b/contrib/groff/src/preproc/grn/hgraph.cc
index 7963720..d307faa 100644
--- a/contrib/groff/src/preproc/grn/hgraph.cc
+++ b/contrib/groff/src/preproc/grn/hgraph.cc
@@ -4,6 +4,8 @@
* to troff input.
*/
+#include "lib.h"
+
#include "gprint.h"
#ifdef NEED_DECLARATION_HYPOT
@@ -58,12 +60,13 @@ void tmove2(int px, int py);
void doarc(POINT cp, POINT sp, int angle);
void tmove(POINT * ptr);
void cr();
-void drawwig(POINT * ptr);
+void drawwig(POINT * ptr, int type);
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 HGCurve(int *x, int *y, int numpoints);
void Paramaterize(int x[], int y[], float h[], int n);
void PeriodicSpline(float h[], int z[],
float dz[], float d2z[], float d3z[],
@@ -126,8 +129,14 @@ HGPrintElt(ELT *element,
break;
case CURVE:
- length = 0; /* keep track of line length */
- drawwig(p1);
+ length = 0; /* keep track of line length */
+ drawwig(p1, CURVE);
+ cr();
+ break;
+
+ case BSPLINE:
+ length = 0; /* keep track of line length */
+ drawwig(p1, BSPLINE);
cr();
break;
@@ -533,16 +542,17 @@ line(int px,
/*----------------------------------------------------------------------------
- | Routine: drawwig (ptr)
+ | Routine: drawwig (ptr, type)
|
| Results: The point sequence found in the structure pointed by ptr is
| placed in integer arrays for further manipulation by the
- | existing routing. With the proper parameters, HGCurve is
- | called.
+ | existing routing. With the corresponding type parameter,
+ | either picurve or HGCurve are called.
*----------------------------------------------------------------------------*/
void
-drawwig(POINT * ptr)
+drawwig(POINT * ptr,
+ int type)
{
register int npts; /* point list index */
int x[MAXPOINTS], y[MAXPOINTS]; /* point list */
@@ -552,8 +562,10 @@ drawwig(POINT * ptr)
y[npts] = (int) (ptr->y * troffscale);
}
if (--npts) {
- /* HGCurve(&x[0], &y[0], npts); */ /*Gremlin looks different, so... */
- picurve(&x[0], &y[0], npts);
+ if (type == CURVE) /* Use the 2 different types of curves */
+ HGCurve(&x[0], &y[0], npts);
+ else
+ picurve(&x[0], &y[0], npts);
}
}
diff --git a/contrib/groff/src/preproc/grn/main.cc b/contrib/groff/src/preproc/grn/main.cc
index efb33a9..9b09ea6 100644
--- a/contrib/groff/src/preproc/grn/main.cc
+++ b/contrib/groff/src/preproc/grn/main.cc
@@ -67,9 +67,10 @@
*/
+#include "lib.h"
+
#include <ctype.h>
#include <stdlib.h>
-#include <string.h>
#include "gprint.h"
#include "device.h"
@@ -77,7 +78,6 @@
#include "searchpath.h"
#include "macropath.h"
-#include "lib.h"
#include "errarg.h"
#include "error.h"
#include "defs.h"
@@ -848,7 +848,7 @@ interpret(char *line)
if (par > 0.0)
xscale *= par;
else
- error("illegal scale value on line %1", linenum);
+ error("invalid scale value on line %1", linenum);
break;
case 'f': /* file */
diff --git a/contrib/groff/src/preproc/html/Makefile.sub b/contrib/groff/src/preproc/html/Makefile.sub
index 8ecd332..5da6d43 100644
--- a/contrib/groff/src/preproc/html/Makefile.sub
+++ b/contrib/groff/src/preproc/html/Makefile.sub
@@ -1,6 +1,6 @@
-PROG=pre-grohtml
+PROG=pre-grohtml$(EXEEXT)
# MAN1=pre-grohtml.n
MAN1=
XLIBS=$(LIBGROFF)
-OBJS=pre-html.o pushbackbuffer.o
-CCSRCS=$(srcdir)/pre-html.cc $(srcdir)/pushbackbuffer.cc
+OBJS=pre-html.$(OBJEXT) pushback.$(OBJEXT)
+CCSRCS=$(srcdir)/pre-html.cc $(srcdir)/pushback.cc
diff --git a/contrib/groff/src/preproc/html/pre-html.cc b/contrib/groff/src/preproc/html/pre-html.cc
index 2a36740..e7364dd 100644
--- a/contrib/groff/src/preproc/html/pre-html.cc
+++ b/contrib/groff/src/preproc/html/pre-html.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
Written by Gaius Mulley (gaius@glam.ac.uk).
This file is part of groff.
@@ -20,18 +20,21 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define PREHTMLC
-#include <stdio.h>
+#include "lib.h"
+
#include <signal.h>
#include <ctype.h>
#include <assert.h>
#include <stdlib.h>
#include <errno.h>
-#include "lib.h"
#include "errarg.h"
#include "error.h"
#include "stringclass.h"
#include "posix.h"
#include "defs.h"
+#include "searchpath.h"
+#include "paper.h"
+#include "font.h"
#include <errno.h>
#include <sys/types.h>
@@ -53,32 +56,27 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
extern "C" const char *Version_string;
#include "pre-html.h"
-#include "pushbackbuffer.h"
+#include "pushback.h"
#include "html-strings.h"
-#define POSTSCRIPTRES 72000 // maybe there is a better way to find this? --fixme--
-#define DEFAULT_IMAGE_RES 80 // 80 pixels per inch resolution
-#define DEFAULT_VERTICAL_OFFSET 45 // DEFAULT_VERTICAL_OFFSET/72 of an inch
+#define DEFAULT_LINE_LENGTH 7 // inches wide
+#define DEFAULT_IMAGE_RES 100 // number of pixels per inch resolution
#define IMAGE_BOARDER_PIXELS 0
-#define MAX_WIDTH 8 // inches
#define INLINE_LEADER_CHAR '\\'
-#define MAX_RETRIES 4096 // number of different page directory names to try before giving up
-#define TRANSPARENT "-background \"#FFF\" -transparent \"#FFF\""
+#define TRANSPARENT "-background white -transparent white"
+#define MIN_ALPHA_BITS 0
+#define MAX_ALPHA_BITS 4
-#ifdef __MSDOS__
-#define PAGE_TEMPLATE "pg"
-#define PS_TEMPLATE "ps"
-#define REGION_TEMPLATE "rg"
-#else
-#define PAGE_TEMPLATE "-page-"
-#define PS_TEMPLATE "-ps-"
-#define REGION_TEMPLATE "-regions-"
-#endif
+#define PAGE_TEMPLATE_SHORT "pg"
+#define PAGE_TEMPLATE_LONG "-page-"
+#define PS_TEMPLATE_SHORT "ps"
+#define PS_TEMPLATE_LONG "-ps-"
+#define REGION_TEMPLATE_SHORT "rg"
+#define REGION_TEMPLATE_LONG "-regions-"
#if 0
# define DEBUGGING
-# define DEBUG_HTML
#endif
#if !defined(TRUE)
@@ -88,31 +86,41 @@ extern "C" const char *Version_string;
# define FALSE (1==0)
#endif
-void stop() {}
-
typedef enum {CENTERED, LEFT, RIGHT, INLINE} IMAGE_ALIGNMENT;
-static int stdoutfd = 1; // output file descriptor - normally 1 but might move
+static int postscriptRes =-1; // postscript resolution, dots per inch
+static int stdoutfd = 1; // output file descriptor - normally 1 but might move
// -1 means closed
-static int copyofstdoutfd =-1; // a copy of stdout, so we can restore stdout when
+static int copyofstdoutfd =-1; // a copy of stdout, so we can restore stdout when
// writing to post-html
-static char *psFileName = NULL; // name of postscript file
-static char *regionFileName = NULL; // name of file containing all image regions
-static char *imagePageStem = NULL; // stem of all files containing page images
-static char *image_device = "pnmraw";
-static int image_res = DEFAULT_IMAGE_RES;
-static int vertical_offset= DEFAULT_VERTICAL_OFFSET;
-static char *image_template = NULL; // image template filename
-static int troff_arg = 0; // troff arg index
-static char *command_prefix = NULL; // optional prefix for some installations.
-static char *troff_command = NULL;
-static char *image_dir = NULL; // user specified image directory
+static char *psFileName = NULL; // name of postscript file
+static char *psPageName = NULL; // name of file containing postscript current page
+static char *regionFileName = NULL; // name of file containing all image regions
+static char *imagePageName = NULL; // name of bitmap image containing current page
+static char *image_device = "pnmraw";
+static int image_res = DEFAULT_IMAGE_RES;
+static int vertical_offset = 0;
+static char *image_template = NULL; // image template filename
+static char *macroset_template= NULL; // image template passed to troff by -D
+static int troff_arg = 0; // troff arg index
+static char *image_dir = NULL; // user specified image directory
+static int textAlphaBits = MAX_ALPHA_BITS;
+static int graphicAlphaBits = MAX_ALPHA_BITS;
+static char *antiAlias = NULL; // antialias arguments we pass to gs.
+static int show_progress = FALSE; // should we display page numbers as they are processed?
+static int currentPageNo = -1; // current image page number
#if defined(DEBUGGING)
static int debug = FALSE;
static char *troffFileName = NULL; // output of pre-html output which is sent to troff -Tps
static char *htmlFileName = NULL; // output of pre-html output which is sent to troff -Thtml
#endif
+static char *linebuf = NULL; // for scanning devps/DESC
+static int linebufsize = 0;
+
+const char *const FONT_ENV_VAR = "GROFF_FONT_PATH";
+static search_path font_path(FONT_ENV_VAR, FONTPATH, 0, 0);
+
/*
* Images are generated via postscript, gs and the pnm utilities.
@@ -132,12 +140,80 @@ static int do_file(const char *filename);
void sys_fatal (const char *s)
{
- fprintf(stderr, "%s: %s: %s", program_name, s, strerror(errno));
+ fatal("%1: %2", s, strerror(errno));
+}
+
+/*
+ * get_line - copies a line (w/o newline) from a file to the global line buffer
+ */
+
+int get_line (FILE *f)
+{
+ if (f == 0)
+ return 0;
+ if (linebuf == 0) {
+ linebuf = new char[128];
+ linebufsize = 128;
+ }
+ int i = 0;
+ // skip leading whitespace
+ for (;;) {
+ int c = getc(f);
+ if (c == EOF)
+ return 0;
+ if (c != ' ' && c != '\t') {
+ ungetc(c, f);
+ break;
+ }
+ }
+ for (;;) {
+ int c = getc(f);
+ if (c == EOF)
+ break;
+ if (i + 1 >= linebufsize) {
+ char *old_linebuf = linebuf;
+ linebuf = new char[linebufsize * 2];
+ memcpy(linebuf, old_linebuf, linebufsize);
+ a_delete old_linebuf;
+ linebufsize *= 2;
+ }
+ linebuf[i++] = c;
+ if (c == '\n') {
+ i--;
+ break;
+ }
+ }
+ linebuf[i] = '\0';
+ return 1;
+}
+
+/*
+ * get_resolution - returns the postscript resolution from devps/DESC
+ */
+
+static unsigned int get_resolution (void)
+{
+ char *pathp;
+ FILE *f;
+ unsigned int res;
+ f = font_path.open_file("devps/DESC", &pathp);
+ if (f == 0)
+ fatal("can't open devps/DESC");
+ while (get_line(f)) {
+ int n = sscanf(linebuf, "res %u", &res);
+ if (n >= 1) {
+ fclose(f);
+ return res;
+ }
+ }
+ fatal("can't find `res' keyword in devps/DESC");
+ return 0;
}
/*
* html_system - a wrapper for system()
*/
+
void html_system(const char *s, int redirect_stdout)
{
// Redirect standard error to the null device. This is more
@@ -160,16 +236,10 @@ void html_system(const char *s, int redirect_stdout)
fprintf(stderr, "Calling `%s' failed\n", s);
else if (status)
fprintf(stderr, "Calling `%s' returned status %d\n", s, status);
+ close(save_stderr);
+ close(save_stdout);
}
-#if 0
-
-/*
- * if/when vsnprintf becomes available on all *NIX machines we can use this function,
- * until then we must use the more complex function below which performs hand built
- * %d, %s and %%.
- */
-
/*
* make_message - taken from man printf(3), creates a string via malloc
* and places the result of the va args into string.
@@ -194,9 +264,7 @@ make_message (const char *fmt, ...)
/* If that worked, return the string. */
if (n > -1 && n < size) {
if (size > n+1) {
- np = strdup(p);
- if (np == NULL)
- sys_fatal("strdup");
+ np = strsave(p);
free(p);
return np;
}
@@ -214,142 +282,6 @@ make_message (const char *fmt, ...)
p = np; /* use realloc'ed, p */
}
}
-#else
-
-/*
- * lengthOfintToStr - returns the length of the proposed string value of i.
- * Hand built log10.
- */
-
-int
-lengthOfintToStr (int i)
-{
- int n=0;
-
- if (i < 0)
- sys_fatal("expecting positive integer value");
-
- do {
- i /= 10;
- n++;
- } while (i > 0);
- return n;
-}
-
-/*
- * intToStr - returns a string containing the positive value of i.
- * (int i is assumed to be positive).
- */
-
-char *
-intToStr (int i)
-{
- int n=lengthOfintToStr(i)+1;
- char *p = (char *)malloc(n);
-
- if (p == NULL)
- sys_fatal("malloc");
-
- if (i < 0)
- sys_fatal("expecting positive integer value");
-
- n--;
- p[n] = (char)0;
- do {
- n--;
- p[n] = (char)((i % 10) + (int)'0');
- i /= 10;
- } while (i > 0);
- return( p );
-}
-
-/*
- * make_message - returns a string built from a format specifier.
- * This function does not use vsnprintf; it only
- * understands primitive %%, %s, and %d specifiers.
- */
-
-char *
-make_message (const char *fmt, ...)
-{
- char *p = strdup(fmt); /* so we can splat a nul anywhere in the string */
- char *np;
- char *l;
- char *s;
- char *num;
- int search=0;
- va_list ap;
-
- if (p == NULL)
- sys_fatal("strdup");
-
- va_start(ap, fmt);
- while (p) {
- int lenp=strlen(p);
- char *f = strchr(p+search, '%');
-
- search = f-p;
- np = p;
-
- if (f == NULL) {
- va_end(ap);
- return p;
- }
- switch (*(f+1)) {
-
- case 'd':
- l = strdup(f+2);
- if (l == NULL)
- sys_fatal("strdup");
- *f = (char)0;
- num = intToStr(va_arg(ap, int));
- np = (char *)malloc(strlen(p)+strlen(num)+strlen(l)+1);
- if (np == NULL)
- sys_fatal("malloc");
- strcpy(np, p);
- strcat(np, num);
- strcat(np, l);
- search += strlen(np)-lenp;
- free(num);
- free(l);
- break;
- case 's':
- /* concat */
- l = f+2;
- if (l == NULL)
- sys_fatal("strdup");
- s = va_arg(ap, char *);
- *f = (char)0;
- np = (char *)malloc(strlen(l)+1+strlen(p)+strlen(s));
- if (np == NULL)
- sys_fatal("malloc");
- strcpy(np, p);
- strcat(np, s);
- strcat(np, l);
- search += strlen(s);
- break;
- case '%':
- /* remove one of the two % that we have seen */
- *f = (char)0;
- l = f+1;
- np = (char *)malloc(strlen(l)+1+strlen(p));
- if (np == NULL)
- sys_fatal("malloc");
- strcpy(np, p);
- strcat(np, l);
- search++;
- break;
- default:
- sys_fatal("unexpected format specifier");
- return NULL;
- }
- free(p);
- p = np;
- }
- va_end(ap);
- return NULL;
-}
-#endif
/*
* the class and methods for retaining ascii text
@@ -385,7 +317,7 @@ public:
void write_upto_newline (char_block **t, int *i, int is_html);
int can_see(char_block **t, int *i, char *string);
int skip_spaces(char_block **t, int *i);
- void skip_to_newline(char_block **t, int *i);
+ void skip_until_newline(char_block **t, int *i);
private:
char_block *head;
char_block *tail;
@@ -473,13 +405,12 @@ static void writeString (char *s)
}
/*
- * makeFileName - creates the image filename template.
+ * makeFileName - creates the image filename template
+ * and the macroset image template.
*/
static void makeFileName (void)
{
- char *s;
-
if ((image_dir != NULL) && (strchr(image_dir, '%') != NULL)) {
error("cannot use a `%%' within the image directory name");
exit(1);
@@ -499,19 +430,35 @@ static void makeFileName (void)
}
if (image_template == NULL)
- s = make_message("%sgrohtml-%d", image_dir, (int)getpid());
- else {
- s = make_message("%s%s", image_dir, image_template);
- }
- if (s == NULL)
+ macroset_template = make_message("%sgrohtml-%d", image_dir, (int)getpid());
+ else
+ macroset_template = make_message("%s%s", image_dir, image_template);
+
+ if (macroset_template == NULL)
sys_fatal("make_message");
- image_template = (char *)malloc(strlen("-%d")+strlen(s)+1);
+ image_template = (char *)malloc(strlen("-%d")+strlen(macroset_template)+1);
if (image_template == NULL)
sys_fatal("malloc");
- strcpy(image_template, s);
+ strcpy(image_template, macroset_template);
strcat(image_template, "-%d");
- free(s);
+}
+
+/*
+ * setupAntiAlias - sets up the antialias string, used when we call gs.
+ */
+
+static void setupAntiAlias (void)
+{
+ if (textAlphaBits == 0 && graphicAlphaBits == 0)
+ antiAlias = make_message(" ");
+ else if (textAlphaBits == 0)
+ antiAlias = make_message("-dGraphicsAlphaBits=%d ", graphicAlphaBits);
+ else if (graphicAlphaBits == 0)
+ antiAlias = make_message("-dTextAlphaBits=%d ", textAlphaBits);
+ else
+ antiAlias = make_message("-dTextAlphaBits=%d -dGraphicsAlphaBits=%d ",
+ textAlphaBits, graphicAlphaBits);
}
/*
@@ -521,7 +468,7 @@ static void makeFileName (void)
static void checkImageDir (void)
{
if ((image_dir != NULL) && (strcmp(image_dir, "") != 0))
- if (! ((mkdir(image_dir, 0700) == 0) || (errno == EEXIST))) {
+ if (! ((mkdir(image_dir, 0777) == 0) || (errno == EEXIST))) {
error("cannot create directory `%1'", image_dir);
exit(1);
}
@@ -533,17 +480,19 @@ static void checkImageDir (void)
static void write_end_image (int is_html)
{
- if (is_html) {
- /*
- * emit image name and enable output
- */
- writeString("\\O[2]\\O[1]\\O[4]\n");
- } else {
- /*
- * postscript, therefore emit image boundaries
- */
- writeString("\\O[2]\\O[4]\n");
- }
+ /*
+ * if we are producing html then these
+ * emit image name and enable output
+ * else
+ * we are producing images
+ * in which case these generate image
+ * boundaries
+ */
+ writeString("\\O[4]\\O[2]");
+ if (is_html)
+ writeString("\\O[1]");
+ else
+ writeString("\\O[0]");
}
/*
@@ -556,36 +505,29 @@ static void write_end_image (int is_html)
static void write_start_image (IMAGE_ALIGNMENT pos, int is_html)
{
- if (pos == INLINE) {
- writeString("\\O[3]\\O[5 ");
- writeString(image_template); writeString(".png]");
- } else {
- writeString(".begin \\{\\\n");
- switch (pos) {
-
- case LEFT:
- writeString(". image l ");
- break;
- case RIGHT:
- writeString(". image r ");
- break;
- case CENTERED:
- default:
- writeString(". image c ");
- }
- writeString(image_template); writeString(".png\n");
- if (! is_html) {
- writeString(".bp\n");
- writeString(".tl ''''\n");
- }
- writeString("\\}\n");
+ writeString("\\O[5");
+ switch (pos) {
+
+ case INLINE:
+ writeString("i");
+ break;
+ case LEFT:
+ writeString("l");
+ break;
+ case RIGHT:
+ writeString("r");
+ break;
+ case CENTERED:
+ default:
+ writeString("c");
+ break;
}
- if (is_html) {
- writeString("\\O[0]\n");
- } else {
+ writeString(image_template); writeString(".png]");
+ if (is_html)
+ writeString("\\O[0]\\O[3]");
+ else
// reset min/max registers
- writeString("\\O[0]\\O[1]\n");
- }
+ writeString("\\O[1]\\O[3]");
}
/*
@@ -690,11 +632,11 @@ int char_buffer::skip_spaces(char_block **t, int *i)
}
/*
- * skip_to_newline - skips all characters until a newline is seen.
- * The newline is also consumed.
+ * skip_until_newline - skips all characters until a newline is seen.
+ * The newline is not consumed.
*/
-void char_buffer::skip_to_newline (char_block **t, int *i)
+void char_buffer::skip_until_newline (char_block **t, int *i)
{
int j=*i;
@@ -702,17 +644,10 @@ void char_buffer::skip_to_newline (char_block **t, int *i)
while ((j < (*t)->used) && ((*t)->buffer[j] != '\n')) {
j++;
}
- if ((j < (*t)->used) && ((*t)->buffer[j] == '\n')) {
- j++;
- }
if (j == (*t)->used) {
*i = 0;
- if ((*t)->buffer[j-1] == '\n') {
- *t = (*t)->next;
- } else {
- *t = (*t)->next;
- skip_to_newline(t, i);
- }
+ *t = (*t)->next;
+ skip_until_newline(t, i);
} else {
// newline was seen
*i = j;
@@ -731,24 +666,7 @@ void char_buffer::write_file_troff (void)
if (t != NULL) {
do {
- /*
- * remember to check the shortest string last
- */
- if (can_see(&t, &i, HTML_IMAGE_END)) {
- write_end_image(FALSE);
- skip_to_newline(&t, &i);
- } else if (can_see(&t, &i, HTML_IMAGE_LEFT)) {
- write_start_image(LEFT, FALSE);
- skip_to_newline(&t, &i);
- } else if (can_see(&t, &i, HTML_IMAGE_RIGHT)) {
- write_start_image(RIGHT, FALSE);
- skip_to_newline(&t, &i);
- } else if (can_see(&t, &i, HTML_IMAGE_CENTERED)) {
- write_start_image(CENTERED, FALSE);
- skip_to_newline(&t, &i);
- } else {
- write_upto_newline(&t, &i, FALSE);
- }
+ write_upto_newline(&t, &i, FALSE);
} while (t != NULL);
}
if (close(stdoutfd) < 0)
@@ -820,6 +738,10 @@ public:
imageList();
~imageList();
void add(int x1, int y1, int x2, int y2, int page, int res, int maxx, char *name);
+ void createImages (void);
+ int createPage (int pageno);
+ void createImage (imageItem *i);
+ int getMaxX (int pageno);
};
/*
@@ -845,82 +767,76 @@ imageList::~imageList ()
}
/*
- * createAllPages - creates a set of images, one per page.
+ * createPage - creates one image of, page pageno, from the postscript file.
*/
-static int createAllPages (void)
+int imageList::createPage (int pageno)
{
- char buffer[4096];
char *s;
- int retries = MAX_RETRIES;
- imagePageStem = xtmptemplate(PAGE_TEMPLATE);
- strcpy(buffer, imagePageStem);
+ if (currentPageNo == pageno)
+ return 0;
- do {
- if (mktemp(imagePageStem) == NULL) {
- sys_fatal("mktemp");
- return -1;
- }
- if (mkdir(imagePageStem, 0700) == 0) break;
- if (errno == EEXIST) {
- // directory already exists, try another name
- retries--;
- if (retries == 0) {
- // time to give up
- sys_fatal("mkdir");
- return -1;
- }
- } else {
- // another error, quit
- sys_fatal("mkdir");
- return -1;
- }
- strcpy(imagePageStem, buffer);
- } while (1);
+ if (currentPageNo >= 1) {
+ /*
+ * we need to unlink the files which change each time a new page is processed.
+ * The final unlink is done by xtmpfile when pre-grohtml exits.
+ */
+ unlink(imagePageName);
+ unlink(psPageName);
+ }
+
+ if (show_progress) {
+ fprintf(stderr, "[%d] ", pageno);
+ fflush(stderr);
+ }
+#if defined(DEBUGGING)
+ if (debug)
+ fprintf(stderr, "creating page %d\n", pageno);
+#endif
+
+ s = make_message("psselect -q -p%d %s %s\n",
+ pageno, psFileName, psPageName);
+
+ if (s == NULL)
+ sys_fatal("make_message");
+#if defined(DEBUGGING)
+ if (debug) {
+ fwrite(s, sizeof(char), strlen(s), stderr);
+ fflush(stderr);
+ }
+#endif
+ html_system(s, 1);
+
s = make_message("echo showpage | "
- "gs%s -q -dSAFER -sDEVICE=%s -r%d "
- "-sOutputFile=%s/%%d %s -",
+ "gs%s -q -dBATCH -dSAFER "
+ "-dDEVICEHEIGHTPOINTS=792 "
+ "-dDEVICEWIDTHPOINTS=%d -dFIXEDMEDIA=true "
+ "-sDEVICE=%s -r%d %s "
+ "-sOutputFile=%s %s -\n",
EXE_EXT,
+ (getMaxX(pageno) * image_res) / postscriptRes,
image_device,
image_res,
- imagePageStem,
- psFileName);
+ antiAlias,
+ imagePageName,
+ psPageName);
if (s == NULL)
sys_fatal("make_message");
#if defined(DEBUGGING)
- fwrite(s, sizeof(char), strlen(s), stderr);
- fflush(stderr);
+ if (debug) {
+ fwrite(s, sizeof(char), strlen(s), stderr);
+ fflush(stderr);
+ }
#endif
html_system(s, 1);
- free(s);
+ a_delete s;
+ currentPageNo = pageno;
return 0;
}
/*
- * removeAllPages - removes all page images.
- */
-
-static void removeAllPages (void)
-{
-#if !defined(DEBUGGING)
- char *s=NULL;
- int i=1;
-
- do {
- if (s)
- free(s);
- s = make_message("%s/%d", imagePageStem, i);
- if (s == NULL)
- sys_fatal("make_message");
- i++;
- } while (unlink(s) == 0);
- rmdir(imagePageStem);
-#endif
-}
-
-/*
* min - returns the minimum of two numbers.
*/
@@ -947,38 +863,63 @@ int max (int x, int y)
}
/*
+ * getMaxX - returns the largest right hand position for any image on, pageno
+ */
+
+int imageList::getMaxX (int pageno)
+{
+ imageItem *h = head;
+ int x = postscriptRes * DEFAULT_LINE_LENGTH;
+
+ while (h != NULL) {
+ if (h->pageNo == pageno)
+ x = max(h->X2, x);
+ h = h->next;
+ }
+ return x;
+}
+
+/*
* createImage - generates a minimal png file from the set of page images.
*/
-static void createImage (imageItem *i)
+void imageList::createImage (imageItem *i)
{
if (i->X1 != -1) {
char *s;
- int x1 = max(min(i->X1, i->X2)*image_res/POSTSCRIPTRES-1*IMAGE_BOARDER_PIXELS, 0);
- int y1 = max((image_res*vertical_offset/72)+min(i->Y1, i->Y2)*image_res/POSTSCRIPTRES-IMAGE_BOARDER_PIXELS, 0);
- int x2 = max(i->X1, i->X2)*image_res/POSTSCRIPTRES+1*IMAGE_BOARDER_PIXELS;
- int y2 = (image_res*vertical_offset/72)+max(i->Y1, i->Y2)*image_res/POSTSCRIPTRES+1*IMAGE_BOARDER_PIXELS;
-
- s = make_message("pnmcut%s %d %d %d %d < %s/%d | pnmtopng%s %s > %s \n",
- EXE_EXT,
- x1, y1, x2-x1+1, y2-y1+1,
- imagePageStem,
- i->pageNo,
- EXE_EXT,
- TRANSPARENT,
- i->imageName);
- if (s == NULL)
- sys_fatal("make_message");
+ int x1 = max(min(i->X1, i->X2)*image_res/postscriptRes-1*IMAGE_BOARDER_PIXELS, 0);
+ int y1 = max((image_res*vertical_offset/72)+min(i->Y1, i->Y2)*image_res/postscriptRes-IMAGE_BOARDER_PIXELS, 0);
+ int x2 = max(i->X1, i->X2)*image_res/postscriptRes+1*IMAGE_BOARDER_PIXELS;
+ int y2 = (image_res*vertical_offset/72)+(max(i->Y1, i->Y2)*image_res/postscriptRes)+1+IMAGE_BOARDER_PIXELS;
+ if (createPage(i->pageNo) == 0) {
+ s = make_message("pnmcut%s %d %d %d %d < %s | pnmcrop -quiet | pnmtopng%s %s > %s \n",
+ EXE_EXT,
+ x1, y1, x2-x1+1, y2-y1+1,
+ imagePageName,
+ EXE_EXT,
+ TRANSPARENT,
+ i->imageName);
+ if (s == NULL)
+ sys_fatal("make_message");
#if defined(DEBUGGING)
- fprintf(stderr, s);
+ if (debug) {
+ fprintf(stderr, s);
+ fflush(stderr);
+ }
#endif
- html_system(s, 0);
- free(s);
+ html_system(s, 0);
+ a_delete s;
+ } else {
+ fprintf(stderr, "failed to generate image of page %d\n", i->pageNo);
+ fflush(stderr);
+ }
#if defined(DEBUGGING)
} else {
- fprintf(stderr, "ignoring image as x1 coord is -1\n");
- fflush(stderr);
+ if (debug) {
+ fprintf(stderr, "ignoring image as x1 coord is -1\n");
+ fflush(stderr);
+ }
#endif
}
}
@@ -998,7 +939,20 @@ void imageList::add (int x1, int y1, int x2, int y2, int page, int res, int maxx
tail->next = i;
tail = i;
}
- createImage(i);
+}
+
+/*
+ * createImages - foreach image descriptor on the imageList, create the actual image.
+ */
+
+void imageList::createImages (void)
+{
+ imageItem *h = head;
+
+ while (h != NULL) {
+ createImage(h);
+ h = h->next;
+ }
}
static imageList listOfImages; // list of images defined by the region file.
@@ -1011,31 +965,12 @@ static imageList listOfImages; // list of images defined by the region file.
void char_buffer::write_file_html (void)
{
- char_block *t =head;
+ char_block *t=head;
int i=0;
if (t != NULL) {
- stop();
do {
- /*
- * remember to check the shortest string last
- */
- if (can_see(&t, &i, HTML_IMAGE_END)) {
- write_end_image(TRUE);
- skip_to_newline(&t, &i);
- } else if (can_see(&t, &i, HTML_IMAGE_LEFT)) {
- write_start_image(LEFT, TRUE);
- skip_to_newline(&t, &i);
- } else if (can_see(&t, &i, HTML_IMAGE_RIGHT)) {
- write_start_image(RIGHT, TRUE);
- skip_to_newline(&t, &i);
- } else if (can_see(&t, &i, HTML_IMAGE_CENTERED)) {
- stop();
- write_start_image(CENTERED, TRUE);
- skip_to_newline(&t, &i);
- } else {
- write_upto_newline(&t, &i, TRUE);
- }
+ write_upto_newline(&t, &i, TRUE);
} while (t != NULL);
}
if (close(stdoutfd) < 0)
@@ -1067,9 +1002,9 @@ static void generateImages (char *regionFileName)
int y1 = f->readInt();
int x2 = f->readInt();
int y2 = f->readInt();
- int maxx = max(f->readInt(), MAX_WIDTH*image_res);
+ int maxx = f->readInt();
char *name = f->readString();
- int res = POSTSCRIPTRES; // --fixme-- prefer (f->readInt()) providing that troff can discover the value
+ int res = postscriptRes;
listOfImages.add(x1, y1, x2, y2, page, res, maxx, name);
while ((f->putPB(f->getPB()) != '\n') &&
(f->putPB(f->getPB()) != eof)) {
@@ -1085,6 +1020,13 @@ static void generateImages (char *regionFileName)
fputc(f->getPB(), stderr);
}
}
+
+ listOfImages.createImages();
+ if (show_progress) {
+ fprintf(stderr, "done\n");
+ fflush(stderr);
+ }
+ delete f;
}
/*
@@ -1123,7 +1065,7 @@ static void waitForChild (PID_T pid)
PID_T waitpd;
int status;
- waitpd = wait(&status);
+ waitpd = WAIT(&status, pid, _WAIT_CHILD);
if (waitpd != pid)
sys_fatal("wait");
}
@@ -1132,7 +1074,7 @@ static void waitForChild (PID_T pid)
* alterDeviceTo - if toImage is set then the arg list is altered to include
* IMAGE_DEVICE and we invoke groff rather than troff.
* else
- * set -Thtml and troff
+ * set -Thtml and groff
*/
static void alterDeviceTo (int argc, char *argv[], int toImage)
@@ -1154,8 +1096,68 @@ static void alterDeviceTo (int argc, char *argv[], int toImage)
}
i++;
}
- argv[troff_arg] = troff_command; /* use troff */
+ argv[troff_arg] = "groff"; /* use groff -Z */
+ }
+}
+
+/*
+ * addZ - appends -Z onto the command list for groff.
+ */
+
+char **addZ (int argc, char *argv[])
+{
+ char **new_argv = (char **)malloc((argc+2)*sizeof(char *));
+ int i=0;
+
+ if (new_argv == NULL)
+ sys_fatal("malloc");
+
+ if (argc > 0) {
+ new_argv[i] = argv[i];
+ i++;
+ }
+ new_argv[i] = "-Z";
+ while (i<argc) {
+ new_argv[i+1] = argv[i];
+ i++;
}
+ argc++;
+ new_argv[argc] = NULL;
+ return new_argv;
+}
+
+/*
+ * addRegDef - appends a defined register or string onto the command list for troff.
+ */
+
+char **addRegDef (int argc, char *argv[], const char *numReg)
+{
+ char **new_argv = (char **)malloc((argc+2)*sizeof(char *));
+ int i=0;
+
+ if (new_argv == NULL)
+ sys_fatal("malloc");
+
+ while (i<argc) {
+ new_argv[i] = argv[i];
+ i++;
+ }
+ new_argv[argc] = strdup(numReg);
+ argc++;
+ new_argv[argc] = NULL;
+ return new_argv;
+}
+
+/*
+ * dump_args - display the argument list.
+ */
+
+void dump_args (int argc, char *argv[])
+{
+ fprintf(stderr, " %d arguments:", argc);
+ for (int i=0; i<argc; i++)
+ fprintf(stderr, " %s", argv[i]);
+ fprintf(stderr, "\n");
}
/*
@@ -1167,19 +1169,23 @@ int char_buffer::do_html(int argc, char *argv[])
{
int pdes[2];
PID_T pid;
-
- if (pipe(pdes) < 0)
- sys_fatal("pipe");
+ string s;
alterDeviceTo(argc, argv, 0);
- argv += troff_arg; // skip all arguments up to troff/groff
+ argv += troff_arg; // skip all arguments up to groff
argc -= troff_arg;
+ argv = addZ(argc, argv);
+ argc++;
+
+ s = "-dwww-image-template=";
+ s += macroset_template; // do not combine these statements otherwise they will not work
+ s += '\0'; // the trailing '\0' is ignored
+ argv = addRegDef(argc, argv, s.contents());
+ argc++;
+
+ if (pipe(pdes) < 0)
+ sys_fatal("pipe");
-#if defined(DEBUG_HTML)
- write_file_html();
- writeString("--------------- troff --------------------------\n");
- write_file_troff();
-#else
pid = fork();
if (pid < 0)
sys_fatal("fork");
@@ -1216,30 +1222,7 @@ int char_buffer::do_html(int argc, char *argv[])
write_file_html();
waitForChild(pid);
}
-#endif
- return( 0 );
-}
-
-/*
- * addps4html - appends -rps4html=1 onto the command list for troff.
- */
-
-char **addps4html (int argc, char *argv[])
-{
- char **new_argv = (char **)malloc((argc+2)*sizeof(char *));
- int i=0;
-
- if (new_argv == NULL)
- sys_fatal("malloc");
-
- while (i<argc) {
- new_argv[i] = argv[i];
- i++;
- }
- new_argv[argc] = "-rps4html=1";
- argc++;
- new_argv[argc] = NULL;
- return( new_argv );
+ return 0;
}
/*
@@ -1250,16 +1233,27 @@ int char_buffer::do_image(int argc, char *argv[])
{
PID_T pid;
int pdes[2];
-
- if (pipe(pdes) < 0)
- sys_fatal("pipe");
+ string s;
alterDeviceTo(argc, argv, 1);
argv += troff_arg; // skip all arguments up to troff/groff
argc -= troff_arg;
- argv = addps4html(argc, argv);
+ argv = addRegDef(argc, argv, "-rps4html=1");
+ argc++;
+
+ s = "-dwww-image-template=";
+ s += macroset_template;
+ s += '\0';
+ argv = addRegDef(argc, argv, s.contents());
+ argc++;
+
+ // override local settings and produce a page size letter postscript file
+ argv = addRegDef(argc, argv, "-P-pletter");
argc++;
+ if (pipe(pdes) < 0)
+ sys_fatal("pipe");
+
pid = fork();
if (pid == 0) {
// child
@@ -1295,7 +1289,7 @@ int char_buffer::do_image(int argc, char *argv[])
write_file_troff();
waitForChild(pid);
}
- return( 0 );
+ return 0;
}
static char_buffer inputFile;
@@ -1315,44 +1309,96 @@ void usage(FILE *stream)
}
/*
- * scanArguments - scans for -P-i, -P-o, -P-D and -P-I arguments.
+ * scanArguments - scans for all arguments including -P-i, -P-o, -P-D and -P-I. It returns
+ * the argument index of the first non option.
*/
int scanArguments (int argc, char **argv)
{
- int i=1;
-
- while (i<argc) {
- if (strncmp(argv[i], "-D", 2) == 0) {
- image_dir = (char *)(argv[i]+2);
- } else if (strncmp(argv[i], "-I", 2) == 0) {
- image_template = (char *)(argv[i]+2);
- } else if (strncmp(argv[i], "-i", 2) == 0) {
- image_res = atoi((char *)(argv[i]+2));
- } else if (strncmp(argv[i], "-o", 2) == 0) {
- vertical_offset = atoi((char *)(argv[i]+2));
- } else if ((strcmp(argv[i], "-v") == 0)
- || (strcmp(argv[i], "--version") == 0)) {
+ const char *command_prefix = getenv("GROFF_COMMAND_PREFIX");
+ if (!command_prefix)
+ command_prefix = PROG_PREFIX;
+ char *troff_name = new char[strlen(command_prefix) + strlen("troff") + 1];
+ strcpy(troff_name, command_prefix);
+ strcat(troff_name, "troff");
+ int c, i;
+ static const struct option long_options[] = {
+ { "help", no_argument, 0, CHAR_MAX + 1 },
+ { "version", no_argument, 0, 'v' },
+ { NULL, 0, 0, 0 }
+ };
+ while ((c = getopt_long(argc, argv, "+a:g:o:i:I:D:F:vbdhlrnp", long_options, NULL))
+ != EOF)
+ switch(c) {
+ case 'v':
printf("GNU pre-grohtml (groff) version %s\n", Version_string);
exit(0);
- } else if ((strcmp(argv[i], "-h") == 0)
- || (strcmp(argv[i], "--help") == 0)
- || (strcmp(argv[i], "-?") == 0)) {
- usage(stdout);
- exit(0);
- } else if (strcmp(argv[i], troff_command) == 0) {
- /* remember troff argument number */
- troff_arg = i;
+ case 'a':
+ textAlphaBits = min(max(MIN_ALPHA_BITS, atoi(optarg)), MAX_ALPHA_BITS);
+ if (textAlphaBits == 3) {
+ error("cannot use 3 bits of antialiasing information");
+ exit(1);
+ }
+ break;
+ case 'g':
+ graphicAlphaBits = min(max(MIN_ALPHA_BITS, atoi(optarg)), MAX_ALPHA_BITS);
+ if (graphicAlphaBits == 3) {
+ error("cannot use 3 bits of antialiasing information");
+ exit(1);
+ }
+ break;
+ case 'b':
+ // handled by post-grohtml (set background color to white)
+ break;
+ case 'D':
+ image_dir = optarg;
+ break;
+ case 'I':
+ image_template = optarg;
+ break;
+ case 'i':
+ image_res = atoi(optarg);
+ break;
+ case 'F':
+ font_path.command_line_dir(optarg);
+ break;
+ case 'o':
+ vertical_offset = atoi(optarg);
+ break;
+ case 'p':
+ show_progress = TRUE;
+ break;
+ case 'd':
#if defined(DEBUGGING)
- } else if (strcmp(argv[i], "-d") == 0) {
debug = TRUE;
#endif
- } else if (argv[i][0] != '-') {
- return( i );
+ break;
+ case 'h':
+ // handled by post-grohtml
+ break;
+ case CHAR_MAX + 1: // --help
+ usage(stdout);
+ exit(0);
+ break;
+ case '?':
+ usage(stderr);
+ exit(1);
+ break;
+ default:
+ break;
}
+
+ i = optind;
+ while (i < argc) {
+ if (strcmp(argv[i], troff_name) == 0)
+ troff_arg = i;
+ else if (argv[i][0] != '-')
+ return i;
i++;
}
- return( argc );
+ a_delete troff_name;
+
+ return argc;
}
/*
@@ -1364,58 +1410,57 @@ static int makeTempFiles (void)
#if defined(DEBUGGING)
psFileName = "/tmp/prehtml-ps";
regionFileName = "/tmp/prehtml-region";
- imagePageStem = "/tmp/prehtml-page";
+ imagePageName = "/tmp/prehtml-page";
+ psPageName = "/tmp/prehtml-psn";
troffFileName = "/tmp/prehtml-troff";
htmlFileName = "/tmp/prehtml-html";
#else
- int fd;
-
- if ((fd = mkstemp(psFileName = xtmptemplate(PS_TEMPLATE))) == -1) {
- sys_fatal("mkstemp");
+ FILE *f;
+
+ /* psPageName contains a single page of postscript */
+ f = xtmpfile(&psPageName,
+ PS_TEMPLATE_LONG, PS_TEMPLATE_SHORT,
+ TRUE);
+ if (f == NULL) {
+ sys_fatal("xtmpfile");
return -1;
}
- close(fd);
- if ((fd = mkstemp(regionFileName = xtmptemplate(REGION_TEMPLATE))) == -1) {
- sys_fatal("mkstemp");
- unlink(psFileName);
+ fclose(f);
+
+ /* imagePageName contains a bitmap image of the single postscript page */
+ f = xtmpfile(&imagePageName,
+ PAGE_TEMPLATE_LONG, PAGE_TEMPLATE_SHORT,
+ TRUE);
+ if (f == NULL) {
+ sys_fatal("xtmpfile");
return -1;
}
- close(fd);
-#endif
- return 0;
-}
-
-/*
- * removeTempFiles - remove the temporary files
- */
+ fclose(f);
+
+ /* psFileName contains a postscript file of the complete document */
+ f = xtmpfile(&psFileName,
+ PS_TEMPLATE_LONG, PS_TEMPLATE_SHORT,
+ TRUE);
+ if (f == NULL) {
+ sys_fatal("xtmpfile");
+ return -1;
+ }
+ fclose(f);
+
+ /* regionFileName contains a list of the images and their boxed coordinates */
+ f = xtmpfile(&regionFileName,
+ REGION_TEMPLATE_LONG, REGION_TEMPLATE_SHORT,
+ TRUE);
+ if (f == NULL) {
+ sys_fatal("xtmpfile");
+ return -1;
+ }
+ fclose(f);
-static void removeTempFiles (void)
-{
-#if !defined(DEBUGGING)
- unlink(psFileName);
- unlink(regionFileName);
#endif
+ return 0;
}
-/*
- * findPrefix - finds the optional prefix to the groff utilities.
- * It also builds the 'troff' executable name.
- */
-
-static void findPrefix (void)
-{
- command_prefix = getenv("GROFF_COMMAND_PREFIX");
- if (!command_prefix)
- command_prefix = PROG_PREFIX;
- troff_command = (char *)malloc(strlen("troff")+strlen(command_prefix)+1);
- if (troff_command == NULL)
- sys_fatal("malloc");
-
- strcpy(troff_command, command_prefix);
- strcat(troff_command, "troff");
-}
-
-
int main(int argc, char **argv)
{
program_name = argv[0];
@@ -1423,8 +1468,9 @@ int main(int argc, char **argv)
int found=0;
int ok=1;
- findPrefix();
+ postscriptRes = get_resolution();
i = scanArguments(argc, argv);
+ setupAntiAlias();
checkImageDir();
makeFileName();
while (i < argc) {
@@ -1448,14 +1494,9 @@ int main(int argc, char **argv)
return 1;
ok = inputFile.do_image(argc, argv);
if (ok == 0) {
- ok = createAllPages();
- if (ok == 0) {
- generateImages(regionFileName);
- ok = inputFile.do_html(argc, argv);
- removeAllPages();
- }
+ generateImages(regionFileName);
+ ok = inputFile.do_html(argc, argv);
}
- removeTempFiles();
return ok;
}
diff --git a/contrib/groff/src/preproc/html/pushback.cc b/contrib/groff/src/preproc/html/pushback.cc
new file mode 100644
index 0000000..d18c5e2
--- /dev/null
+++ b/contrib/groff/src/preproc/html/pushback.cc
@@ -0,0 +1,333 @@
+// -*- C++ -*-
+/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Written by Gaius Mulley (gaius@glam.ac.uk).
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "lib.h"
+
+#include <signal.h>
+#include <ctype.h>
+#include <assert.h>
+#include <stdlib.h>
+#include <errno.h>
+#include "errarg.h"
+#include "error.h"
+#include "stringclass.h"
+#include "posix.h"
+#include "nonposix.h"
+
+#include <errno.h>
+#include <sys/types.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "pushback.h"
+#include "pre-html.h"
+
+#if !defined(TRUE)
+# define TRUE (1==1)
+#endif
+
+#if !defined(FALSE)
+# define FALSE (1==0)
+#endif
+
+# define ERROR(X) (void)(fprintf(stderr, "%s:%d error %s\n", __FILE__, __LINE__, X) && \
+ (fflush(stderr)) && localexit(1))
+
+
+#define MAXPUSHBACKSTACK 4096 /* maximum number of character that can be pushed back */
+
+
+/*
+ * constructor for pushBackBuffer
+ */
+
+pushBackBuffer::pushBackBuffer (char *filename)
+{
+ charStack = (char *)malloc(MAXPUSHBACKSTACK);
+ if (charStack == 0) {
+ sys_fatal("malloc");
+ }
+ stackPtr = 0; /* index to push back stack */
+ debug = 0;
+ verbose = 0;
+ eofFound = FALSE;
+ lineNo = 1;
+ if (strcmp(filename, "") != 0) {
+ stdIn = dup(0);
+ close(0);
+ if (open(filename, O_RDONLY) != 0) {
+ sys_fatal("when trying to open file");
+ } else {
+ fileName = filename;
+ }
+ }
+}
+
+pushBackBuffer::~pushBackBuffer ()
+{
+ int old;
+
+ if (charStack != 0) {
+ free(charStack);
+ }
+ close(0);
+ /* restore stdin in file descriptor 0 */
+ old = dup(stdIn);
+ close(stdIn);
+}
+
+/*
+ * localexit - wraps exit with a return code to aid the ERROR macro.
+ */
+
+int localexit (int i)
+{
+ exit(i);
+ return( 1 );
+}
+
+/*
+ * getPB - returns a character, possibly a pushed back character.
+ */
+
+char pushBackBuffer::getPB (void)
+{
+ if (stackPtr>0) {
+ stackPtr--;
+ return( charStack[stackPtr] );
+ } else {
+ char ch;
+
+ if (read(0, &ch, 1) == 1) {
+ if (verbose) {
+ printf("%c", ch);
+ }
+ if (ch == '\n') {
+ lineNo++;
+ }
+ return( ch );
+ } else {
+ eofFound = TRUE;
+ return( eof );
+ }
+ }
+}
+
+/*
+ * putPB - pushes a character onto the push back stack.
+ * The same character is returned.
+ */
+
+char pushBackBuffer::putPB (char ch)
+{
+ if (stackPtr<MAXPUSHBACKSTACK) {
+ charStack[stackPtr] = ch ;
+ stackPtr++;
+ } else {
+ ERROR("max push back stack exceeded, increase MAXPUSHBACKSTACK constant");
+ }
+ return( ch );
+}
+
+/*
+ * isWhite - returns TRUE if a white character is found. This character is NOT consumed.
+ */
+
+static int isWhite (char ch)
+{
+ return( (ch==' ') || (ch == '\t') || (ch == '\n') );
+}
+
+/*
+ * skipToNewline - skips characters until a newline is seen.
+ */
+
+void pushBackBuffer::skipToNewline (void)
+{
+ char ch;
+
+ while ((putPB(getPB()) != '\n') && (! eofFound)) {
+ ch = getPB();
+ }
+}
+
+/*
+ * skipUntilToken - skips until a token is seen
+ */
+
+void pushBackBuffer::skipUntilToken (void)
+{
+ char ch;
+
+ while ((isWhite(putPB(getPB())) || (putPB(getPB()) == '#')) && (! eofFound)) {
+ ch = getPB();
+ if (ch == '#') {
+ skipToNewline();
+ }
+ }
+}
+
+/*
+ * isString - returns TRUE if the string, s, matches the pushed back string.
+ * if TRUE is returned then this string is consumed, otherwise it is
+ * left alone.
+ */
+
+int pushBackBuffer::isString (char *s)
+{
+ int length=strlen(s);
+ int i=0;
+
+ while ((i<length) && (putPB(getPB())==s[i])) {
+ if (getPB() != s[i]) {
+ ERROR("assert failed");
+ }
+ i++;
+ }
+ if (i==length) {
+ return( TRUE );
+ } else {
+ i--;
+ while (i>=0) {
+ if (putPB(s[i]) != s[i]) {
+ ERROR("assert failed");
+ }
+ i--;
+ }
+ }
+ return( FALSE );
+}
+
+/*
+ * isDigit - returns TRUE if the character, ch, is a digit.
+ */
+
+static int isDigit (char ch)
+{
+ return( ((ch>='0') && (ch<='9')) );
+}
+
+/*
+ * isHexDigit - returns TRUE if the character, ch, is a hex digit.
+ */
+
+#if 0
+static int isHexDigit (char ch)
+{
+ return( (isDigit(ch)) || ((ch>='a') && (ch<='f')) );
+}
+#endif
+
+/*
+ * readInt - returns an integer from the input stream.
+ */
+
+int pushBackBuffer::readInt (void)
+{
+ int c =0;
+ int i =0;
+ int s =1;
+ char ch=getPB();
+
+ while (isWhite(ch)) {
+ ch=getPB();
+ }
+ // now read integer
+
+ if (ch == '-') {
+ s = -1;
+ ch = getPB();
+ }
+ while (isDigit(ch)) {
+ i *= 10;
+ if ((ch>='0') && (ch<='9')) {
+ i += (int)(ch-'0');
+ }
+ ch = getPB();
+ c++;
+ }
+ if (ch != putPB(ch)) {
+ ERROR("assert failed");
+ }
+ return( i*s );
+}
+
+/*
+ * convertToFloat - converts integers, a and b into a.b
+ */
+
+static float convertToFloat (int a, int b)
+{
+ int c=10;
+ float f;
+
+ while (b>c) {
+ c *= 10;
+ }
+ f = ((float)a) + (((float)b)/((float)c));
+ return( f );
+}
+
+/*
+ * readNumber - returns a float representing the word just read.
+ */
+
+float pushBackBuffer::readNumber (void)
+{
+ int i;
+ char ch;
+
+ i = readInt();
+ if ((ch = getPB()) == '.') {
+ return convertToFloat(i, readInt());
+ }
+ putPB(ch);
+ return (float)i;
+}
+
+/*
+ * readString - reads a string terminated by white space
+ * and returns a malloced area of memory containing
+ * a copy of the characters.
+ */
+
+char *pushBackBuffer::readString (void)
+{
+ char buffer[MAXPUSHBACKSTACK];
+ char *string = 0;
+ int i=0;
+ char ch=getPB();
+
+ while (isWhite(ch)) {
+ ch=getPB();
+ }
+ while ((i < MAXPUSHBACKSTACK) && (! isWhite(ch)) && (! eofFound)) {
+ buffer[i] = ch;
+ i++;
+ ch = getPB();
+ }
+ if (i < MAXPUSHBACKSTACK) {
+ buffer[i] = (char)0;
+ string = (char *)malloc(strlen(buffer)+1);
+ strcpy(string, buffer);
+ }
+ return( string );
+}
diff --git a/contrib/groff/src/preproc/html/pushback.h b/contrib/groff/src/preproc/html/pushback.h
new file mode 100644
index 0000000..93cb3f1
--- /dev/null
+++ b/contrib/groff/src/preproc/html/pushback.h
@@ -0,0 +1,54 @@
+// -*- C -*-
+/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+ Written by Gaius Mulley (gaius@glam.ac.uk).
+
+This file is part of groff.
+
+groff is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+groff is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with groff; see the file COPYING. If not, write to the Free Software
+Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+
+#define eof (char)-1
+
+
+/*
+ * defines the class and methods implemented within pushbackbuffer.cc
+ */
+
+class pushBackBuffer
+{
+ private:
+ char *charStack;
+ int stackPtr; /* index to push back stack */
+ int debug;
+ int verbose;
+ int eofFound;
+ char *fileName;
+ int lineNo;
+ int stdIn;
+
+ public:
+ pushBackBuffer (char *);
+ ~ pushBackBuffer ();
+ char getPB (void);
+ char putPB (char ch);
+ void skipUntilToken (void);
+ void skipToNewline (void);
+ float readNumber (void);
+ int readInt (void);
+ char *readString (void);
+ int isString (char *string);
+};
+
+
diff --git a/contrib/groff/src/preproc/pic/Makefile.sub b/contrib/groff/src/preproc/pic/Makefile.sub
index f1e2927..05c47a1 100644
--- a/contrib/groff/src/preproc/pic/Makefile.sub
+++ b/contrib/groff/src/preproc/pic/Makefile.sub
@@ -1,16 +1,16 @@
-PROG=pic
+PROG=pic$(EXEEXT)
MAN1=pic.n
XLIBS=$(LIBGROFF)
MLIB=$(LIBM)
OBJS=\
- pic.o \
- lex.o \
- main.o \
- object.o \
- common.o \
- troff.o \
- tex.o
- # fig.o
+ pic.$(OBJEXT) \
+ lex.$(OBJEXT) \
+ main.$(OBJEXT) \
+ object.$(OBJEXT) \
+ common.$(OBJEXT) \
+ troff.$(OBJEXT) \
+ tex.$(OBJEXT)
+ # fig.$(OBJEXT)
CCSRCS=\
$(srcdir)/lex.cc \
$(srcdir)/main.cc \
@@ -26,6 +26,6 @@ HDRS=\
$(srcdir)/position.h \
$(srcdir)/text.h
GRAM=$(srcdir)/pic.y
-YTABC=$(srcdir)/pic.cc
-YTABH=$(srcdir)/pic_tab.h
+YTABC=pic.cc
+YTABH=pic_tab.h
NAMEPREFIX=$(g)
diff --git a/contrib/groff/src/preproc/pic/common.cc b/contrib/groff/src/preproc/pic/common.cc
index e83ef31..5075e93 100644
--- a/contrib/groff/src/preproc/pic/common.cc
+++ b/contrib/groff/src/preproc/pic/common.cc
@@ -437,7 +437,6 @@ void common_output::dot_line(const position &start, const position &end,
}
}
-
void common_output::solid_rounded_box(const position &cent,
const distance &dim, double rad,
const line_type &lt)
diff --git a/contrib/groff/src/preproc/pic/common.h b/contrib/groff/src/preproc/pic/common.h
index 25a6e10..90b65fa 100644
--- a/contrib/groff/src/preproc/pic/common.h
+++ b/contrib/groff/src/preproc/pic/common.h
@@ -63,6 +63,10 @@ public:
const line_type &, double) = 0;
void rounded_box(const position &, const distance &, double,
const line_type &, double);
+ void set_color(char *, char *) = 0;
+ void reset_color() = 0;
+ char *get_last_filled() = 0;
+ char *get_outline_color() = 0;
};
int compute_arc_center(const position &start, const position &cent,
diff --git a/contrib/groff/src/preproc/pic/lex.cc b/contrib/groff/src/preproc/pic/lex.cc
index 5b6d439..14a4cc3 100644
--- a/contrib/groff/src/preproc/pic/lex.cc
+++ b/contrib/groff/src/preproc/pic/lex.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -83,8 +84,8 @@ int file_input::read_line()
int c = getc(fp);
if (c == EOF)
break;
- else if (illegal_input_char(c))
- lex_error("illegal input character code %1", c);
+ else if (invalid_input_char(c))
+ lex_error("invalid input character code %1", c);
else {
line += char(c);
if (c == '\n')
@@ -153,7 +154,7 @@ int macro_input::peek()
return (unsigned char)*p;
}
-// Character representing $1. Must be illegal input character.
+// Character representing $1. Must be invalid input character.
#define ARG1 14
char *process_body(const char *body)
@@ -446,6 +447,10 @@ int lookup_keyword(const char *str, int len)
{ "center", CENTER },
{ "chop", CHOP },
{ "circle", CIRCLE },
+ { "color", COLORED },
+ { "colored", COLORED },
+ { "colour", COLORED },
+ { "coloured", COLORED },
{ "command", COMMAND },
{ "copy", COPY },
{ "cos", COS },
@@ -457,6 +462,7 @@ int lookup_keyword(const char *str, int len)
{ "do", DO },
{ "dotted", DOTTED },
{ "down", DOWN },
+ { "east", EAST },
{ "ellipse", ELLIPSE },
{ "else", ELSE },
{ "end", END },
@@ -480,7 +486,10 @@ int lookup_keyword(const char *str, int len)
{ "max", K_MAX },
{ "min", K_MIN },
{ "move", MOVE },
+ { "north", NORTH },
{ "of", OF },
+ { "outline", OUTLINED },
+ { "outlined", OUTLINED },
{ "plot", PLOT },
{ "print", PRINT },
{ "rad", RADIUS },
@@ -491,8 +500,10 @@ int lookup_keyword(const char *str, int len)
{ "rjust", RJUST },
{ "same", SAME },
{ "sh", SH },
+ { "shaded", SHADED },
{ "sin", SIN },
{ "solid", SOLID },
+ { "south", SOUTH },
{ "spline", SPLINE },
{ "sprintf", SPRINTF },
{ "sqrt", SQRT },
@@ -510,6 +521,7 @@ int lookup_keyword(const char *str, int len)
{ "up", UP },
{ "upper", UPPER },
{ "way", WAY },
+ { "west", WEST },
{ "wid", WIDTH },
{ "width", WIDTH },
{ "with", WITH },
@@ -953,7 +965,7 @@ int get_token(int lookup_flag)
double factor = 1.0;
for (;;) {
c = input_stack::peek_char();
- if (!c == EOF || !csdigit(c))
+ if (c == EOF || !csdigit(c))
break;
input_stack::get_char();
context_buffer += char(c);
@@ -1618,8 +1630,8 @@ simple_file_input::~simple_file_input()
int simple_file_input::get()
{
int c = getc(fp);
- while (illegal_input_char(c)) {
- error("illegal input character code %1", c);
+ while (invalid_input_char(c)) {
+ error("invalid input character code %1", c);
c = getc(fp);
}
if (c == '\n')
@@ -1630,8 +1642,8 @@ int simple_file_input::get()
int simple_file_input::peek()
{
int c = getc(fp);
- while (illegal_input_char(c)) {
- error("illegal input character code %1", c);
+ while (invalid_input_char(c)) {
+ error("invalid input character code %1", c);
c = getc(fp);
}
if (c != EOF)
@@ -1816,6 +1828,46 @@ int yylex()
}
else
return t;
+ case NORTH:
+ // recognise NORTH only before OF
+ old_context_buffer = context_buffer;
+ lookahead_token = get_token(1);
+ if (lookahead_token != OF) {
+ yylval.str = strsave("north");
+ return VARIABLE;
+ }
+ else
+ return t;
+ case SOUTH:
+ // recognise SOUTH only before OF
+ old_context_buffer = context_buffer;
+ lookahead_token = get_token(1);
+ if (lookahead_token != OF) {
+ yylval.str = strsave("south");
+ return VARIABLE;
+ }
+ else
+ return t;
+ case EAST:
+ // recognise EAST only before OF
+ old_context_buffer = context_buffer;
+ lookahead_token = get_token(1);
+ if (lookahead_token != OF) {
+ yylval.str = strsave("east");
+ return VARIABLE;
+ }
+ else
+ return t;
+ case WEST:
+ // recognise WEST only before OF
+ old_context_buffer = context_buffer;
+ lookahead_token = get_token(1);
+ if (lookahead_token != OF) {
+ yylval.str = strsave("west");
+ return VARIABLE;
+ }
+ else
+ return t;
case TOP:
// recognise TOP only before OF
old_context_buffer = context_buffer;
diff --git a/contrib/groff/src/preproc/pic/main.cc b/contrib/groff/src/preproc/pic/main.cc
index b795d48..124cbd5 100644
--- a/contrib/groff/src/preproc/pic/main.cc
+++ b/contrib/groff/src/preproc/pic/main.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989-1992, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1989-1992, 2000, 2001, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -80,8 +80,8 @@ int top_input::get()
return c;
}
int c = getc(fp);
- while (illegal_input_char(c)) {
- error("illegal input character code %1", int(c));
+ while (invalid_input_char(c)) {
+ error("invalid input character code %1", int(c));
c = getc(fp);
bol = 0;
}
@@ -152,8 +152,8 @@ int top_input::peek()
if (push_back[0] != EOF)
return push_back[0];
int c = getc(fp);
- while (illegal_input_char(c)) {
- error("illegal input character code %1", int(c));
+ while (invalid_input_char(c)) {
+ error("invalid input character code %1", int(c));
c = getc(fp);
bol = 0;
}
@@ -476,7 +476,7 @@ void usage(FILE *stream)
#endif
}
-#ifdef __MSDOS__
+#if defined(__MSDOS__) || defined(__EMX__)
static char *fix_program_name(char *arg, char *dflt)
{
if (!arg)
@@ -499,13 +499,13 @@ static char *fix_program_name(char *arg, char *dflt)
*p = 'a' + (*p - 'A');
return prog;
}
-#endif /* __MSDOS__ */
+#endif /* __MSDOS__ || __EMX__ */
int main(int argc, char **argv)
{
-#ifdef __MSDOS__
+#if defined(__MSDOS__) || defined(__EMX__)
argv[0] = fix_program_name(argv[0], "pic");
-#endif /* __MSDOS__ */
+#endif /* __MSDOS__ || __EMX__ */
program_name = argv[0];
static char stderr_buf[BUFSIZ];
setbuf(stderr, stderr_buf);
diff --git a/contrib/groff/src/preproc/pic/object.cc b/contrib/groff/src/preproc/pic/object.cc
index 6b34633..fd25371 100644
--- a/contrib/groff/src/preproc/pic/object.cc
+++ b/contrib/groff/src/preproc/pic/object.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -53,14 +54,6 @@ void output::set_args(const char *s)
args = strsave(s);
}
-void output::command(const char *, const char *, int)
-{
-}
-
-void output::set_location(const char *, int)
-{
-}
-
int output::supports_filled_polygons()
{
return 0;
@@ -219,7 +212,8 @@ struct arrow_head_type {
};
void draw_arrow(const position &pos, const distance &dir,
- const arrow_head_type &aht, const line_type &lt)
+ const arrow_head_type &aht, const line_type &lt,
+ char *outline_color_for_fill)
{
double hyp = hypot(dir);
if (hyp == 0.0) {
@@ -237,8 +231,9 @@ void draw_arrow(const position &pos, const distance &dir,
v[0] = pos;
v[1] = pos + base + n;
v[2] = pos + base - n;
- // A value > 1 means fill with the current color.
- out->polygon(v, 3, slt, 2.0);
+ // fill with outline color
+ out->set_color(outline_color_for_fill, outline_color_for_fill);
+ out->polygon(v, 3, slt, 1);
}
else {
position v[2];
@@ -549,6 +544,8 @@ class graphic_object : public object {
int aligned;
protected:
line_type lt;
+ char *outline_color;
+ char *color_fill;
public:
graphic_object();
~graphic_object();
@@ -559,10 +556,14 @@ public:
void set_dashed(double);
void set_thickness(double);
void set_invisible();
+ void set_outline_color(char *);
+ char *get_outline_color();
virtual void set_fill(double);
+ virtual void set_fill_color(char *);
};
-graphic_object::graphic_object() : ntext(0), text(0), aligned(0)
+graphic_object::graphic_object()
+: ntext(0), text(0), aligned(0), outline_color(0), color_fill(0)
{
}
@@ -587,6 +588,21 @@ void graphic_object::set_fill(double)
{
}
+void graphic_object::set_fill_color(char *c)
+{
+ color_fill = c;
+}
+
+void graphic_object::set_outline_color(char *c)
+{
+ outline_color = c;
+}
+
+char *graphic_object::get_outline_color()
+{
+ return outline_color;
+}
+
void graphic_object::set_invisible()
{
lt.type = line_type::invisible;
@@ -622,8 +638,11 @@ void graphic_object::print_text()
if (d.x != 0.0 || d.y != 0.0)
angle = atan2(d.y, d.x);
}
- if (text != 0)
+ if (text != 0) {
+ out->set_color(color_fill, get_outline_color());
out->text(center(), text, ntext, angle);
+ out->reset_color();
+ }
}
graphic_object::~graphic_object()
@@ -676,12 +695,14 @@ public:
closed_object(const position &);
object_type type() = 0;
void set_fill(double);
+ void set_fill_color(char *fill);
protected:
double fill; // < 0 if not filled
+ char *color_fill; // = 0 if not colored
};
closed_object::closed_object(const position &pos)
-: rectangle_object(pos), fill(-1.0)
+: rectangle_object(pos), fill(-1.0), color_fill(0)
{
}
@@ -691,6 +712,10 @@ void closed_object::set_fill(double f)
fill = f;
}
+void closed_object::set_fill_color(char *fill)
+{
+ color_fill = fill;
+}
class box_object : public closed_object {
double xrad;
@@ -738,8 +763,9 @@ position box_object::south_west()
void box_object::print()
{
- if (lt.type == line_type::invisible && fill < 0.0)
+ if (lt.type == line_type::invisible && fill < 0.0 && color_fill == 0)
return;
+ out->set_color(color_fill, graphic_object::get_outline_color());
if (xrad == 0.0) {
distance dim2 = dim/2.0;
position vec[4];
@@ -753,6 +779,7 @@ void box_object::print()
distance abs_dim(fabs(dim.x), fabs(dim.y));
out->rounded_box(cent, abs_dim, fabs(xrad), lt, fill);
}
+ out->reset_color();
}
graphic_object *object_spec::make_box(position *curpos, direction *dirp)
@@ -990,9 +1017,11 @@ ellipse_object::ellipse_object(const position &d)
void ellipse_object::print()
{
- if (lt.type == line_type::invisible && fill < 0.0)
+ if (lt.type == line_type::invisible && fill < 0.0 && color_fill == 0)
return;
+ out->set_color(color_fill, graphic_object::get_outline_color());
out->ellipse(cent, dim, lt, fill);
+ out->reset_color();
}
graphic_object *object_spec::make_ellipse(position *curpos, direction *dirp)
@@ -1037,9 +1066,11 @@ circle_object::circle_object(double diam)
void circle_object::print()
{
- if (lt.type == line_type::invisible && fill < 0.0)
+ if (lt.type == line_type::invisible && fill < 0.0 && color_fill == 0)
return;
+ out->set_color(color_fill, graphic_object::get_outline_color());
out->circle(cent, dim.x/2.0, lt, fill);
+ out->reset_color();
}
graphic_object *object_spec::make_circle(position *curpos, direction *dirp)
@@ -1098,7 +1129,7 @@ graphic_object *object_spec::make_move(position *curpos, direction *dirp)
// No need to look at at since `at' attribute sets `from' attribute.
position startpos = (flags & HAS_FROM) ? from : *curpos;
if (!(flags & HAS_SEGMENT)) {
- if ((flags && IS_SAME) && have_last_move)
+ if ((flags & IS_SAME) && have_last_move)
segment_pos = last_move;
else {
switch (dir) {
@@ -1222,11 +1253,14 @@ void line_object::print()
{
if (lt.type == line_type::invisible)
return;
+ out->set_color(0, graphic_object::get_outline_color());
out->line(strt, v, n, lt);
if (arrow_at_start)
- draw_arrow(strt, strt-v[0], aht, lt);
+ draw_arrow(strt, strt-v[0], aht, lt, graphic_object::get_outline_color());
if (arrow_at_end)
- draw_arrow(en, v[n-1] - (n > 1 ? v[n - 2] : strt), aht, lt);
+ draw_arrow(en, v[n-1] - (n > 1 ? v[n - 2] : strt), aht, lt,
+ graphic_object::get_outline_color());
+ out->reset_color();
}
void line_object::update_bounding_box(bounding_box *p)
@@ -1289,11 +1323,14 @@ void spline_object::print()
{
if (lt.type == line_type::invisible)
return;
+ out->set_color(0, graphic_object::get_outline_color());
out->spline(strt, v, n, lt);
if (arrow_at_start)
- draw_arrow(strt, strt-v[0], aht, lt);
+ draw_arrow(strt, strt-v[0], aht, lt, graphic_object::get_outline_color());
if (arrow_at_end)
- draw_arrow(en, v[n-1] - (n > 1 ? v[n - 2] : strt), aht, lt);
+ draw_arrow(en, v[n-1] - (n > 1 ? v[n - 2] : strt), aht, lt,
+ graphic_object::get_outline_color());
+ out->reset_color();
}
line_object::~line_object()
@@ -1500,6 +1537,7 @@ void arc_object::print()
{
if (lt.type == line_type::invisible)
return;
+ out->set_color(0, graphic_object::get_outline_color());
if (clockwise)
out->arc(en, cent, strt, lt);
else
@@ -1508,14 +1546,15 @@ void arc_object::print()
position c = cent - strt;
draw_arrow(strt,
(clockwise ? position(c.y, -c.x) : position(-c.y, c.x)),
- aht, lt);
+ aht, lt, graphic_object::get_outline_color());
}
if (arrow_at_end) {
position e = en - cent;
draw_arrow(en,
(clockwise ? position(e.y, -e.x) : position(-e.y, e.x)),
- aht, lt);
+ aht, lt, graphic_object::get_outline_color());
}
+ out->reset_color();
}
inline double max(double a, double b)
@@ -1708,13 +1747,19 @@ object *object_spec::make_object(position *curpos, direction *dirp)
else
lookup_variable("linethick", &th);
obj->set_thickness(th);
+ if (flags & IS_OUTLINED)
+ obj->set_outline_color(outlined);
if (flags & (IS_DEFAULT_FILLED|IS_FILLED)) {
- if (flags & IS_DEFAULT_FILLED)
- lookup_variable("fillval", &fill);
- if (fill < 0.0)
- error("bad fill value %1", fill);
- else
- obj->set_fill(fill);
+ if (flags & IS_SHADED)
+ obj->set_fill_color(shaded);
+ else {
+ if (flags & IS_DEFAULT_FILLED)
+ lookup_variable("fillval", &fill);
+ if (fill < 0.0)
+ error("bad fill value %1", fill);
+ else
+ obj->set_fill(fill);
+ }
}
}
return obj;
@@ -1737,18 +1782,28 @@ string_list::~string_list()
a_delete str;
}
-/* A path is used to hold the argument to the with attribute. For example,
-`.nw' or `.A.s' or `.A'. The major operation on a path is to take a
-place and follow the path through the place to place within the place.
-Note that `.A.B.C.sw' will work. */
+/* A path is used to hold the argument to the `with' attribute. For
+ example, `.nw' or `.A.s' or `.A'. The major operation on a path is to
+ take a place and follow the path through the place to place within the
+ place. Note that `.A.B.C.sw' will work.
+
+ For compatibility with DWB pic, `with' accepts positions also (this
+ is incorrectly documented in CSTR 116). */
path::path(corner c)
-: crn(c), label_list(0), ypath(0)
+: crn(c), label_list(0), ypath(0), is_position(0)
{
}
+path::path(position p)
+: crn(0), label_list(0), ypath(0), is_position(1)
+{
+ pos.x = p.x;
+ pos.y = p.y;
+}
+
path::path(char *l, corner c)
-: crn(c), ypath(0)
+: crn(c), ypath(0), is_position(0)
{
label_list = new string_list(l);
}
@@ -1786,6 +1841,12 @@ void path::set_ypath(path *p)
int path::follow(const place &pl, place *result) const
{
+ if (is_position) {
+ result->x = pos.x;
+ result->y = pos.y;
+ result->obj = 0;
+ return 1;
+ }
const place *p = &pl;
for (string_list *lb = label_list; lb; lb = lb->next)
if (p->obj == 0 || (p = p->obj->find_label(lb->str)) == 0) {
@@ -1795,9 +1856,9 @@ int path::follow(const place &pl, place *result) const
if (crn == 0 || p->obj == 0)
*result = *p;
else {
- position pos = ((p->obj)->*(crn))();
- result->x = pos.x;
- result->y = pos.y;
+ position ps = ((p->obj)->*(crn))();
+ result->x = ps.x;
+ result->y = ps.y;
result->obj = 0;
}
if (ypath) {
diff --git a/contrib/groff/src/preproc/pic/object.h b/contrib/groff/src/preproc/pic/object.h
index 2748e81..98937f93 100644
--- a/contrib/groff/src/preproc/pic/object.h
+++ b/contrib/groff/src/preproc/pic/object.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -76,11 +76,14 @@ struct place {
struct string_list;
class path {
+ position pos;
corner crn;
string_list *label_list;
path *ypath;
+ int is_position;
public:
path(corner = 0);
+ path(position);
path(char *, corner = 0);
~path();
void append(corner);
@@ -150,6 +153,8 @@ const unsigned long HAS_THICKNESS = 01000000;
const unsigned long IS_FILLED = 02000000;
const unsigned long IS_DEFAULT_FILLED = 04000000;
const unsigned long IS_ALIGNED = 010000000;
+const unsigned long IS_SHADED = 020000000;
+const unsigned long IS_OUTLINED = 040000000;
struct segment {
int is_absolute;
@@ -183,6 +188,8 @@ struct object_spec {
double end_chop;
double thickness;
double fill;
+ char *shaded;
+ char *outlined;
direction dir;
segment *segment_list;
position segment_pos;
diff --git a/contrib/groff/src/preproc/pic/output.h b/contrib/groff/src/preproc/pic/output.h
index ac490db..a0a8331 100644
--- a/contrib/groff/src/preproc/pic/output.h
+++ b/contrib/groff/src/preproc/pic/output.h
@@ -55,8 +55,12 @@ public:
const line_type &, double) = 0;
virtual void rounded_box(const position &, const distance &, double,
const line_type &, double) = 0;
- virtual void command(const char *, const char *, int);
- virtual void set_location(const char *, int);
+ virtual void command(const char *, const char *, int) = 0;
+ virtual void set_location(const char *, int) {}
+ virtual void set_color(char *, char *) = 0;
+ virtual void reset_color() = 0;
+ virtual char *get_last_filled() = 0;
+ virtual char *get_outline_color() = 0;
virtual int supports_filled_polygons();
virtual void begin_block(const position &ll, const position &ur);
virtual void end_block();
diff --git a/contrib/groff/src/preproc/pic/pic.cc b/contrib/groff/src/preproc/pic/pic.cc
index 6e6c527..a405401 100644
--- a/contrib/groff/src/preproc/pic/pic.cc
+++ b/contrib/groff/src/preproc/pic/pic.cc
@@ -1,6 +1,5 @@
#ifndef lint
-/*static char yysccsid[] = "from: @(#)yaccpar 1.9 (Berkeley) 02/21/93";*/
-static char yyrcsid[] = "$Id: pic.cc,v 1.4 2001/04/19 14:01:55 wlemb Exp $";
+static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93 (groff)";
#endif
#define YYBYACC 1
#define YYMAJOR 1
@@ -9,7 +8,7 @@ static char yyrcsid[] = "$Id: pic.cc,v 1.4 2001/04/19 14:01:55 wlemb Exp $";
#define yyerrok (yyerrflag=0)
#define YYRECOVERING (yyerrflag!=0)
#define YYPREFIX "yy"
-#line 20 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 21 "pic.y"
#include "pic.h"
#include "ptable.h"
#include "object.h"
@@ -69,7 +68,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 82 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 83 "pic.y"
typedef union {
char *str;
int n;
@@ -88,7 +87,7 @@ typedef union {
graphics_state state;
object_type obtype;
} YYSTYPE;
-#line 92 "y.tab.c"
+#line 91 "y.tab.c"
#define LABEL 257
#define VARIABLE 258
#define NUMBER 259
@@ -188,19 +187,26 @@ typedef union {
#define GREATEREQUAL 353
#define LEFT_CORNER 354
#define RIGHT_CORNER 355
-#define CENTER 356
-#define END 357
-#define START 358
-#define RESET 359
-#define UNTIL 360
-#define PLOT 361
-#define THICKNESS 362
-#define FILL 363
-#define ALIGNED 364
-#define SPRINTF 365
-#define COMMAND 366
-#define DEFINE 367
-#define UNDEF 368
+#define NORTH 356
+#define SOUTH 357
+#define EAST 358
+#define WEST 359
+#define CENTER 360
+#define END 361
+#define START 362
+#define RESET 363
+#define UNTIL 364
+#define PLOT 365
+#define THICKNESS 366
+#define FILL 367
+#define COLORED 368
+#define OUTLINED 369
+#define SHADED 370
+#define ALIGNED 371
+#define SPRINTF 372
+#define COMMAND 373
+#define DEFINE 374
+#define UNDEF 375
#define YYERRCODE 256
short yylhs[] = { -1,
0, 0, 16, 17, 17, 28, 28, 29, 29, 30,
@@ -215,18 +221,19 @@ short yylhs[] = { -1,
18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 25, 25, 24, 24, 19,
- 19, 6, 6, 6, 6, 6, 6, 44, 44, 5,
- 5, 13, 13, 13, 13, 13, 14, 14, 14, 22,
- 22, 21, 21, 8, 8, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 11, 11, 12, 12, 12, 10,
- 10, 10, 10, 10, 10, 9, 9, 9, 9, 9,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 25,
+ 25, 24, 24, 19, 19, 6, 6, 6, 6, 6,
+ 6, 44, 44, 5, 5, 13, 13, 13, 13, 13,
+ 14, 14, 14, 22, 22, 21, 21, 8, 8, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 11, 11,
+ 12, 12, 12, 10, 10, 10, 10, 10, 10, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 1, 1, 1, 1, 1, 1, 1,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 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, 1, 1,
};
short yylen[] = { 2,
1, 1, 3, 1, 3, 0, 1, 1, 2, 3,
@@ -239,807 +246,821 @@ short yylen[] = { 2,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
3, 0, 4, 3, 3, 3, 3, 2, 2, 3,
2, 3, 2, 3, 2, 3, 3, 3, 3, 3,
- 3, 2, 2, 2, 3, 2, 3, 2, 3, 2,
- 3, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 3, 2, 1, 5, 0, 3, 1,
- 1, 1, 3, 3, 5, 5, 6, 1, 4, 3,
- 3, 1, 2, 2, 3, 1, 1, 1, 3, 1,
- 3, 1, 2, 2, 2, 1, 1, 1, 1, 1,
- 1, 1, 2, 1, 2, 3, 1, 1, 2, 1,
- 5, 4, 3, 3, 2, 1, 1, 1, 1, 1,
+ 3, 3, 2, 2, 2, 3, 2, 3, 2, 3,
+ 3, 3, 3, 2, 3, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 3, 2, 1,
+ 5, 0, 3, 1, 1, 1, 3, 3, 5, 5,
+ 6, 1, 4, 3, 3, 1, 2, 2, 3, 1,
+ 1, 1, 3, 1, 3, 1, 2, 2, 2, 1,
+ 1, 1, 1, 1, 1, 1, 2, 1, 2, 3,
+ 1, 1, 2, 1, 5, 4, 3, 3, 2, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 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, 4,
- 3, 3, 3, 3, 3, 3, 3, 3, 2,
+ 1, 1, 1, 1, 2, 2, 2, 2, 1, 1,
+ 2, 2, 2, 2, 1, 1, 1, 1, 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, 4, 3, 3,
+ 3, 3, 3, 3, 3, 3, 2,
};
short yydefred[] = { 0,
- 8, 0, 2, 0, 0, 0, 0, 126, 16, 12,
+ 8, 0, 2, 0, 0, 0, 0, 130, 16, 12,
13, 14, 15, 71, 72, 73, 74, 75, 76, 77,
78, 0, 19, 0, 0, 0, 0, 0, 0, 0,
- 65, 82, 0, 4, 0, 0, 79, 68, 0, 9,
- 0, 0, 0, 0, 25, 0, 147, 204, 205, 150,
- 152, 189, 190, 146, 176, 177, 178, 179, 180, 181,
- 182, 183, 184, 185, 186, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 187, 188, 0, 0,
- 195, 196, 201, 203, 202, 0, 0, 0, 0, 0,
- 132, 130, 148, 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, 114,
- 115, 116, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 102, 103, 0, 0, 0,
- 112, 113, 120, 121, 122, 123, 117, 118, 0, 0,
- 125, 0, 119, 36, 0, 0, 10, 0, 22, 0,
- 20, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 191, 193, 197, 199, 192, 194, 198, 200,
- 0, 0, 0, 0, 0, 0, 0, 0, 138, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 206, 207, 208,
- 209, 210, 0, 143, 0, 0, 164, 156, 157, 158,
- 159, 160, 161, 162, 0, 155, 153, 154, 39, 0,
- 0, 57, 0, 0, 0, 43, 0, 0, 0, 0,
- 81, 128, 0, 0, 0, 0, 5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 167, 100, 0, 170, 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, 229, 0, 0,
- 218, 141, 0, 151, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 149, 133, 134, 163, 0, 0, 53,
- 0, 0, 0, 0, 0, 51, 0, 0, 50, 49,
- 0, 66, 83, 32, 175, 0, 0, 0, 0, 165,
- 0, 169, 0, 0, 23, 0, 219, 220, 0, 222,
- 223, 224, 0, 0, 227, 228, 230, 0, 0, 0,
- 0, 0, 44, 0, 127, 0, 0, 174, 173, 0,
- 166, 0, 0, 27, 0, 0, 0, 135, 139, 0,
- 0, 0, 0, 70, 67, 172, 0, 24, 46, 221,
- 225, 226, 137, 0, 0, 171, 0, 0, 28, 0,
- 0, 29,
+ 82, 65, 0, 4, 0, 0, 79, 68, 0, 9,
+ 0, 0, 0, 0, 25, 0, 151, 212, 213, 154,
+ 156, 193, 194, 150, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 191, 192, 0, 0,
+ 199, 200, 205, 206, 207, 208, 209, 211, 210, 0,
+ 0, 0, 0, 0, 136, 134, 152, 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, 118, 119, 120, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 103,
+ 104, 0, 0, 0, 116, 117, 124, 125, 126, 127,
+ 121, 122, 0, 0, 0, 0, 0, 129, 0, 123,
+ 36, 0, 0, 10, 0, 22, 0, 20, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 195,
+ 197, 201, 203, 196, 198, 202, 204, 0, 0, 0,
+ 0, 0, 0, 0, 0, 142, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 214, 215, 216, 217, 218, 0,
+ 147, 0, 0, 168, 160, 161, 162, 163, 164, 165,
+ 166, 0, 159, 157, 158, 39, 0, 0, 57, 0,
+ 0, 0, 43, 0, 0, 0, 0, 81, 132, 0,
+ 0, 0, 0, 5, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 100, 0, 174, 0, 0, 0, 102, 0,
+ 0, 0, 0, 0, 112, 113, 111, 37, 0, 0,
+ 0, 0, 0, 0, 62, 0, 11, 0, 26, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 237, 0,
+ 0, 226, 145, 0, 155, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 153, 137, 138, 167, 0, 0,
+ 53, 0, 0, 0, 0, 0, 51, 0, 0, 50,
+ 49, 0, 83, 66, 32, 171, 179, 0, 0, 0,
+ 169, 0, 0, 173, 0, 0, 23, 0, 227, 228,
+ 0, 230, 231, 232, 0, 0, 235, 236, 238, 0,
+ 0, 0, 0, 0, 44, 0, 131, 0, 0, 178,
+ 177, 0, 170, 0, 0, 27, 0, 0, 0, 139,
+ 143, 0, 0, 0, 0, 70, 67, 176, 0, 24,
+ 46, 229, 233, 234, 141, 0, 0, 175, 0, 0,
+ 28, 0, 0, 29,
};
short yydgoto[] = { 2,
- 106, 182, 108, 405, 91, 92, 33, 93, 94, 266,
- 267, 268, 109, 96, 34, 3, 35, 36, 97, 226,
- 98, 99, 384, 341, 110, 101, 102, 244, 5, 38,
- 46, 287, 382, 160, 356, 411, 246, 39, 334, 115,
- 395, 376, 116, 205,
+ 110, 189, 112, 417, 95, 96, 33, 97, 98, 273,
+ 274, 275, 113, 100, 34, 3, 35, 36, 101, 233,
+ 102, 103, 396, 352, 114, 105, 106, 251, 5, 38,
+ 46, 298, 394, 167, 368, 423, 253, 39, 345, 120,
+ 407, 388, 119, 212,
};
-short yysindex[] = { 25,
- 0, 0, 0,11784, 59, -47, -5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -250, 0,10817, -218,10934, -197,11387, 90,10817,
- 0, 0, -214, 0, 25,10516, 0, 0, -36, 0,
- 25,10934, 75, -192, 0, -124, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 106, 107, 110, 111, 113,
- 120, 122, 124, 143, 146, 153, 0, 0, -213, -41,
- 0, 0, 0, 0, 0,11061,10934,11387,11387, 635,
- 0, 0, 0, -61, -64, 2542, 44, 834, 356, 0,
-10817, 0, 133,10934,10934, 1378, -91, -294, -64, -279,
- 0, -28, -52,10817, 25, 25, 0, 0,11406, 0,
- 0, 0,11694,11694,11694,11694,11387,11387,11387,11387,
-11505,11505,11505, 3348,11609, 0, 0,11694,11694,11694,
- 0, 0, 0, 0, 0, 0, 0, 0,11387,11694,
- 0, 1491, 0, 0, -33,10189, 0,10934, 0, -46,
- 0,10934,10934,10934,10934,10934,10934,10934,10934,10934,
-10633,10934, 0, 0, 0, 0, 0, 0, 0, 0,
- 1524, 194, 195, -23, -26, 150, 150, -56, 0,11387,
-11387,11387,11387,11387,11387,11387,11505,11387,11387,11387,
-11387,11387,11387,11387,11505, -29, 213, 0, 0, 0,
- 0, 0, -7, 0,11609,11609, 0, 0, 0, 0,
- 0, 0, 0, 0, 167, 0, 0, 0, 0,11387,
- 150, 0,10934,10934,11387, 0,10934,10934, -230, -230,
- 0, 0, 139,11784, 177, 11, 0, 1491, 1491, 1491,
- 1491, 1491, 1491, 1491, 1491, 635, 44, 44, 44, 2101,
- 432, 834, 2101, 17, 0, 0, 2435, 0,11178, 623,
- 0, 1491, 1491, 1491, 1491, 1491, 0, -47, -5, 0,
- 0, 0, -64, 0, 44, 0, 18, 0, 240, 246,
- 244, 248, 249, 250, 252, 253, 257, 0, 260, 262,
- 0, 0,11505, 0, 1, 1953, 1821, 158, 158, 4,
- 4, 1491, -19, 48, 4, 200, 200, 150, 150, 150,
- 150, -42, 213, 0, 0, 0, 0, 1044, 1953, 0,
- 1924, -43, 4, 46, 1953, 0, 1924, -43, 0, 0,
- 19, 0, 0, 0, 0, 834, 2101, 2101, 266, 0,
- 49, 0, 1079, 195, 0, -49, 0, 0,10934, 0,
- 0, 0,10934,10934, 0, 0, 0, 33, 8,11505,
-11505,11387, 0,11387, 0,11784, 2101, 0, 0, 2101,
- 0, -49, 55, 0, 275, 277, 290, 0, 0, 7,
- 44, 1484, 1491, 0, 0, 0, 293, 0, 0, 0,
- 0, 0, 0,11283, -10, 0,11387, 1491, 0, 1491,
- 74, 0,
+short yysindex[] = { -39,
+ 0, 0, 0, 9550, -11, 22, -19, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -237, 0,12453, -206,12579, -187,13185, 42,12453,
+ 0, 0, -263, 0, -39,12034, 0, 0, -34, 0,
+ -39,12579, 25, -234, 0, -140, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 91, 105, 114, 118, 119,
+ 121, 122, 124, 149, 155, 157, 0, 0, -221, -128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,12697,
+12579,13185,13185, 785, 0, 0, 0, 433, -3, 401,
+ 14, 1, 473, 0,12453, 0, 141,12579,12579, 1265,
+ -153, -323, -3, -287, 0, 421, -56,12453, -39, -39,
+ 0, 0,10066, 0, 0, 0,13555,13555,13555,13555,
+13185,13185,13185,13185,13311,13311,13311,12941,13429, 0,
+ 0,13555,13555,13555, 0, 0, 0, 0, 0, 0,
+ 0, 0,13185,13555, -249, -249, -249, 0, 2139, 0,
+ 0, -47,11785, 0,12579, 0, -50, 0,12579,12579,
+12579,12579,12579,12579,12579,12579,12579,12152,12579, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1241, 173, 174,
+ 107, -45, 129, 129, -73, 0,13185,13185,13185,13185,
+13185,13185,13185,13311,13185,13185,13185,13185,13185,13185,
+13185,13311, -6, 186, 0, 0, 0, 0, 0, -23,
+ 0,13429,13429, 0, 0, 0, 0, 0, 0, 0,
+ 0, 153, 0, 0, 0, 0,13185, 129, 0,12579,
+12579,13185, 0,12579,12579, -249, -249, 0, 0, 162,
+ 9550, 117, -2, 0, 2139, 2139, 2139, 2139, 2139, 2139,
+ 2139, 2139, 785, 14, 14, 14, 1372, 177, 177, 6,
+12335, 433, 0, 1432, 0, 14,12823, -7, 0, 2139,
+ 2139, 2139, 2139, 2139, 0, 0, 0, 0, 22, -19,
+ 0, 0, 0, -3, 0, 14, 0, 4, 0, 224,
+ 239, 241, 257, 258, 261, 276, 281, 286, 0, 287,
+ 294, 0, 0,13311, 0, 36, 188, 2151, -29, -29,
+ 469, 469, 2139, 46, 127, 469, -15, -15, 129, 129,
+ 129, 129, -36, 186, 0, 0, 0, 0, 3091, 188,
+ 0, 2177, -8, 469, 92, 188, 0, 2177, -8, 0,
+ 0, 5, 0, 0, 0, 0, 0, 1, 1772, 1772,
+ 0, 311, 99, 0, 809, 174, 0, -1, 0, 0,
+12579, 0, 0, 0,12579,12579, 0, 0, 0, 29,
+ 53,13311,13311,13185, 0,13185, 0, 9550, 1772, 0,
+ 0, 1772, 0, -1, 104, 0, 324, 325, 328, 0,
+ 0, 13, 14, 334, 2139, 0, 0, 0, 331, 0,
+ 0, 0, 0, 0, 0,13067, 28, 0,13185, 2139,
+ 0, 2139, 126, 0,
};
-short yyrindex[] = { 204,
- 0, 0, 0, 338, 94, 0, 0, 0, 0, 0,
+short yyrindex[] = { 34,
+ 0, 0, 0, 383, 163, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
+ 0, 0, 76, 0, 2, 146, 0, 0, 228, 0,
+11903, 0, 0, 724, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 36, 0, 0, 0,
- 0, 0, 399, 0, 27, 412, 0, 0, 443, 0,
-10384, 0, 0, 454, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,10226, 0, 0, 0, 0, 4393, 9409,
+10332, 0, 0, 0, 742, 0, 0, 0, 0, 1139,
+ 0, 1213, 0, 0, 0,11390, 0, 743,10020,10020,
+ 0, 0, 24, 0, 0, 0,10623,10740,10436,10560,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 8824,
- 0, 0, 0, 0, 4444, 8610, 9125, 0, 0, 0,
- 467, 0, 0, 0, 0, 954, 0, 970, 0, 0,
- 0,10077, 0, 487,11820,11820, 0, 0, 31, 0,
- 0, 0, 9459, 9500, 9245, 9351, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 9612, 9720, 9761,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 9868,
- 0, 4996, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0,10874,10988,11122, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0,11236, 0, 0, 0, 0, 5189, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 299, 0, 114, 0, 0, 456, 566, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 343, 0, 193,
+ 0, 0, 289, 629, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3115, 0, 0, 0,
+ 0, 0, 0, 3025, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0,11734, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 224, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 5297, 5406, 5707,
- 5816, 6117, 6226, 6527, 6636, 0, 6937, 7046, 7347, 0,
- 0, 0, 0, 0, 0, 0, 8697, 0, 0, 0,
- 0, 7456, 7757, 7866, 8167, 8276, 0, 9870, 1967, 3642,
- 4085, 184, 233, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 5305, 5645, 5761, 6101, 6217, 6557,
+ 6673, 7013, 0, 7129, 7469, 7585, 9710, -239, 130, 0,
+ 0, 9293, 0, 9804, 0, 7925, 0, 0, 0, 8041,
+ 8381, 8497, 8837, 8953, 0, 0, 0, 0,11495, 1584,
+ 147, 148, 732, 765, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4001, 4110, 3224, 3558, 2229,
- 2338, 4887, 9004, 0, 2672, 1786, 1895, 900, 1009, 1343,
- 1452, 0, 3667, 0, 0, 0, 0, 0, 29, 0,
- 38, 182, 2781, 0, 96, 0, 468, 578, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3937, 4277, 3365, 3481,
+ 2113, 2453, 4849, 9892, 0, 2569, 1657, 1997, 745, 1085,
+ 1201, 1541, 0, 3821, 0, 0, 0, 0, 0, 97,
+ 0, 3453, 3, 2909, 0, 3909, 0, 3039, 4365, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 299, 0, 0, 495, 0, 0, 0, 0,
+ 0, 0, 0, 0, 343, 0, 0, 780, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 530, 0, 0, 0, 0,
- 0, 495, 0, 0, 0, 0, 0, 0, 0, 0,
- 4553, -4, 39, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, -2, 0, -1,
- 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 781, 0, 0,
+ 0, 0, 0, 780, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4733, 41, 80, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,
+ 0, 48, 0, 0,
};
short yygindex[] = { 0,
- -24, 480, -89, 0, -18, 189, 0, 0, -48, 0,
- 0, 354, 3172, -87, -114, -3, 0, 0, 1313, -74,
- 0, 0, -21, 0, 9, 326, -57, 2, 324, 0,
+ -24, 2472, 56, 0, -13, 237, 0, 0, -22, 0,
+ 0, 408, 9343, -81, -118, -20, 0, 0, 1092, -102,
+ 0, 0, 8, 0, 37, 361, -90, 19, 368, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
};
-#define YYTABLESIZE 12186
-short yytable[] = { 90,
- 215, 4, 216, 112, 247, 90, 207, 155, 203, 44,
- 41, 152, 37, 201, 199, 232, 200, 203, 202, 215,
- 303, 216, 201, 199, 228, 200, 6, 202, 237, 8,
- 7, 235, 100, 198, 87, 34, 118, 238, 100, 103,
- 203, 284, 156, 229, 153, 201, 199, 214, 200, 215,
- 202, 216, 43, 237, 238, 42, 229, 173, 174, 375,
- 111, 181, 374, 186, 187, 204, 87, 183, 403, 237,
- 239, 240, 237, 388, 204, 215, 90, 216, 238, 129,
- 231, 238, 129, 1, 45, 265, 215, 237, 216, 90,
- 215, 370, 216, 7, 34, 52, 238, 204, 248, 249,
- 250, 251, 252, 253, 254, 255, 256, 256, 256, 100,
- 270, 243, 245, 272, 273, 274, 271, 40, 323, 6,
- 241, 237, 100, 7, 275, 276, 7, 37, 34, 113,
- 238, 256, 117, 7, 29, 158, 52, 161, 7, 52,
- 175, 176, 159, 330, 332, 162, 163, 336, 338, 164,
- 165, 6, 166, 237, 52, 7, 132, 132, 132, 167,
- 34, 168, 238, 169, 37, 306, 307, 308, 309, 310,
- 311, 312, 313, 315, 316, 317, 318, 319, 320, 321,
- 256, 56, 170, 63, 7, 171, 347, 348, 52, 7,
- 270, 270, 172, 230, 203, 47, 325, 326, 236, 201,
- 199, 50, 200, 6, 202, 328, 51, 242, 329, 331,
- 333, 265, 335, 337, 265, 288, 7, 235, 352, 198,
- 52, 154, 56, 239, 277, 56, 130, 47, 130, 177,
- 178, 8, 64, 50, 301, 302, 203, 304, 51, 206,
- 56, 201, 63, 204, 353, 305, 202, 339, 340, 324,
- 354, 204, 37, 208, 209, 210, 211, 212, 213, 327,
- 239, 394, 371, 342, 239, 239, 239, 239, 239, 343,
- 239, 377, 344, 350, 56, 131, 63, 131, 256, 355,
- 357, 188, 239, 239, 189, 239, 358, 359, 360, 361,
- 362, 64, 237, 204, 6, 363, 364, 365, 265, 265,
- 366, 238, 367, 369, 237, 381, 56, 373, 63, 380,
- 383, 389, 179, 180, 399, 400, 239, 401, 237, 190,
- 191, 192, 193, 194, 195, 64, 6, 238, 265, 237,
- 402, 265, 237, 406, 409, 412, 29, 1, 238, 47,
- 58, 238, 59, 60, 282, 256, 256, 392, 239, 393,
- 7, 7, 7, 7, 7, 114, 7, 64, 119, 52,
- 398, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 0, 0, 237, 237, 0, 408,
- 0, 0, 410, 0, 37, 52, 238, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 30, 7,
+#define YYTABLESIZE 13917
+short yytable[] = { 94,
+ 235, 6, 56, 116, 254, 94, 222, 210, 223, 162,
+ 8, 159, 208, 206, 236, 207, 214, 209, 4, 1,
+ 154, 210, 44, 7, 244, 245, 208, 236, 154, 210,
+ 242, 209, 205, 6, 208, 206, 203, 207, 43, 209,
+ 37, 42, 34, 56, 295, 387, 56, 40, 386, 180,
+ 181, 107, 242, 122, 205, 222, 222, 223, 223, 163,
+ 104, 56, 246, 247, 211, 188, 104, 193, 194, 400,
+ 115, 222, 160, 223, 415, 30, 190, 221, 211, 41,
+ 94, 117, 210, 121, 238, 165, 211, 208, 206, 91,
+ 207, 232, 209, 94, 6, 56, 245, 45, 250, 252,
+ 166, 34, 255, 256, 257, 258, 259, 260, 261, 262,
+ 263, 263, 263, 263, 278, 272, 7, 280, 281, 282,
+ 133, 168, 29, 133, 6, 279, 6, 56, 283, 284,
+ 169, 334, 182, 183, 30, 34, 243, 245, 263, 211,
+ 245, 104, 184, 185, 170, 61, 14, 15, 7, 222,
+ 314, 223, 248, 171, 104, 245, 6, 172, 173, 37,
+ 174, 175, 7, 176, 239, 359, 360, 34, 30, 222,
+ 382, 223, 317, 318, 319, 320, 321, 322, 323, 324,
+ 326, 327, 328, 329, 330, 331, 332, 263, 177, 245,
+ 214, 285, 286, 287, 178, 7, 179, 278, 278, 37,
+ 30, 237, 7, 249, 61, 14, 15, 7, 336, 337,
+ 288, 299, 339, 312, 313, 340, 342, 344, 315, 346,
+ 348, 245, 211, 161, 210, 186, 187, 33, 316, 208,
+ 206, 220, 207, 335, 209, 136, 136, 136, 61, 14,
+ 15, 354, 193, 194, 356, 338, 188, 242, 272, 205,
+ 47, 364, 365, 7, 353, 389, 50, 190, 7, 355,
+ 224, 51, 361, 366, 369, 367, 56, 232, 383, 406,
+ 61, 14, 15, 225, 226, 227, 228, 229, 230, 370,
+ 231, 211, 350, 351, 371, 7, 33, 37, 225, 263,
+ 6, 6, 56, 6, 6, 341, 343, 372, 373, 347,
+ 349, 374, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 215, 216, 217, 218, 219, 375,
+ 33, 225, 201, 202, 376, 225, 377, 378, 225, 225,
+ 225, 225, 225, 225, 379, 225, 356, 356, 381, 244,
+ 197, 198, 199, 200, 201, 202, 195, 225, 225, 196,
+ 225, 56, 33, 385, 392, 393, 401, 263, 263, 404,
+ 245, 405, 395, 411, 412, 413, 356, 6, 414, 356,
+ 210, 418, 421, 6, 6, 208, 206, 6, 207, 6,
+ 209, 225, 1, 47, 225, 58, 245, 424, 59, 156,
+ 118, 420, 60, 242, 422, 205, 6, 245, 6, 293,
+ 245, 410, 123, 193, 194, 6, 6, 0, 0, 193,
+ 194, 0, 0, 225, 193, 194, 0, 0, 0, 7,
+ 7, 7, 7, 7, 37, 7, 0, 211, 0, 0,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 61, 0, 0, 0, 0, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 0, 7,
- 7, 7, 7, 7, 7, 0, 0, 7, 0, 7,
- 0, 0, 33, 52, 52, 56, 225, 7, 7, 7,
- 7, 7, 7, 21, 7, 217, 0, 30, 7, 7,
- 6, 6, 0, 6, 6, 0, 18, 55, 0, 0,
- 61, 56, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 0, 0, 17, 239, 217, 0,
- 0, 30, 217, 0, 45, 217, 217, 217, 217, 217,
- 217, 33, 217, 0, 61, 107, 0, 0, 55, 194,
- 195, 55, 21, 239, 217, 217, 0, 217, 0, 0,
- 0, 157, 225, 30, 239, 18, 55, 239, 0, 69,
- 56, 0, 0, 0, 0, 33, 61, 6, 0, 0,
- 0, 0, 0, 6, 6, 17, 21, 6, 217, 6,
- 0, 217, 0, 45, 0, 0, 0, 0, 0, 18,
- 55, 0, 6, 0, 6, 239, 185, 33, 6, 6,
- 0, 239, 239, 239, 239, 239, 239, 54, 21, 17,
- 217, 0, 0, 0, 0, 0, 0, 45, 69, 0,
- 0, 18, 55, 0, 0, 0, 0, 0, 239, 0,
- 0, 0, 239, 0, 0, 239, 239, 239, 239, 239,
- 239, 17, 239, 345, 0, 217, 349, 0, 54, 45,
- 0, 54, 69, 227, 239, 239, 0, 239, 218, 219,
- 220, 221, 222, 223, 0, 224, 54, 286, 0, 0,
- 0, 289, 290, 291, 292, 293, 294, 295, 296, 297,
- 299, 300, 0, 0, 69, 0, 0, 0, 239, 203,
- 0, 239, 0, 0, 201, 199, 196, 200, 0, 202,
- 54, 203, 0, 0, 0, 0, 201, 199, 196, 200,
- 0, 202, 235, 0, 198, 0, 0, 0, 0, 0,
- 239, 217, 0, 0, 197, 0, 198, 0, 0, 346,
- 378, 379, 54, 0, 218, 219, 220, 221, 222, 223,
- 0, 224, 217, 217, 217, 217, 204, 0, 217, 217,
- 217, 217, 217, 217, 217, 217, 217, 217, 204, 0,
- 396, 55, 0, 397, 0, 0, 217, 217, 217, 217,
- 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
- 217, 217, 217, 217, 217, 217, 217, 55, 0, 217,
- 217, 217, 217, 217, 217, 217, 217, 217, 217, 217,
- 217, 217, 217, 0, 0, 0, 0, 0, 217, 217,
- 217, 217, 217, 217, 217, 217, 217, 217, 217, 0,
- 0, 217, 217, 217, 217, 0, 0, 217, 217, 0,
- 217, 0, 0, 217, 217, 217, 217, 217, 217, 217,
- 217, 217, 217, 217, 0, 0, 55, 217, 217, 217,
- 217, 0, 239, 239, 239, 239, 0, 0, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 385, 0,
- 0, 54, 386, 387, 0, 0, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 54, 0, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 0, 0, 0, 0, 0, 239, 239,
- 239, 239, 239, 239, 239, 239, 239, 239, 239, 213,
- 0, 239, 239, 239, 239, 0, 0, 239, 239, 0,
- 239, 0, 0, 239, 239, 239, 239, 239, 239, 239,
- 239, 239, 239, 239, 225, 0, 54, 239, 239, 239,
- 239, 0, 213, 0, 0, 188, 213, 0, 189, 213,
- 213, 213, 213, 213, 213, 0, 213, 0, 0, 0,
- 0, 0, 0, 47, 0, 0, 0, 0, 213, 213,
- 0, 213, 0, 0, 0, 0, 0, 0, 0, 48,
- 190, 191, 192, 193, 194, 195, 0, 0, 0, 0,
- 0, 0, 190, 191, 192, 193, 194, 195, 0, 0,
- 0, 0, 213, 0, 47, 213, 0, 47, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 214, 0,
- 48, 0, 47, 48, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 213, 0, 0, 0, 48, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 214, 0, 0, 0, 214, 47, 0, 214, 214,
- 214, 214, 214, 214, 0, 214, 0, 0, 0, 0,
- 0, 0, 48, 0, 0, 0, 0, 214, 214, 0,
- 214, 0, 0, 0, 0, 0, 0, 0, 47, 0,
- 203, 0, 0, 0, 0, 201, 199, 0, 200, 0,
- 202, 0, 0, 217, 48, 0, 0, 0, 0, 0,
- 0, 214, 0, 235, 214, 198, 218, 219, 220, 221,
- 222, 223, 0, 224, 0, 203, 0, 0, 0, 0,
- 201, 199, 196, 200, 0, 202, 0, 0, 0, 0,
- 0, 0, 0, 214, 0, 0, 0, 204, 235, 0,
- 198, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 213, 213, 213, 213,
- 0, 0, 213, 213, 213, 213, 213, 213, 213, 213,
- 213, 213, 204, 0, 0, 0, 0, 0, 0, 0,
- 213, 213, 213, 213, 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, 47, 0, 0,
- 0, 0, 213, 213, 213, 213, 213, 213, 213, 213,
- 213, 213, 213, 48, 0, 213, 213, 213, 213, 0,
- 0, 213, 213, 47, 213, 0, 0, 213, 213, 213,
- 213, 213, 213, 213, 213, 213, 213, 213, 0, 48,
- 0, 213, 213, 213, 213, 214, 214, 214, 214, 0,
- 0, 214, 214, 214, 214, 214, 214, 214, 214, 214,
- 214, 0, 0, 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,
- 0, 0, 214, 214, 214, 214, 214, 214, 214, 214,
- 214, 214, 214, 214, 214, 214, 0, 0, 0, 372,
- 0, 214, 214, 214, 214, 214, 214, 214, 214, 214,
- 214, 214, 215, 0, 214, 214, 214, 214, 0, 0,
- 214, 214, 0, 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, 0, 215,
- 0, 190, 191, 192, 193, 194, 195, 0, 184, 0,
- 0, 215, 215, 0, 215, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 203, 0, 0, 0, 0, 201,
- 199, 0, 200, 0, 202, 0, 233, 234, 192, 193,
- 194, 195, 0, 0, 0, 215, 0, 235, 215, 198,
- 0, 0, 0, 257, 258, 259, 0, 0, 0, 0,
- 0, 216, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 215, 285, 0,
- 0, 204, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 216, 0, 0, 0, 216, 0,
- 0, 216, 216, 216, 216, 216, 216, 0, 216, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 314,
- 216, 216, 0, 216, 0, 0, 0, 322, 0, 0,
- 203, 0, 0, 0, 0, 201, 199, 203, 200, 0,
- 202, 0, 201, 199, 0, 200, 0, 202, 0, 0,
- 0, 0, 0, 235, 216, 198, 0, 216, 0, 0,
- 235, 0, 198, 0, 0, 0, 0, 0, 0, 0,
- 203, 0, 0, 0, 0, 201, 199, 196, 200, 0,
- 202, 0, 0, 0, 0, 0, 216, 204, 0, 0,
- 0, 0, 0, 197, 204, 198, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 215,
- 215, 215, 215, 0, 0, 215, 215, 215, 215, 215,
- 215, 215, 215, 215, 215, 368, 0, 204, 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, 215, 0, 0, 215, 215, 215, 215,
- 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
- 0, 0, 0, 0, 0, 215, 215, 215, 215, 215,
- 215, 215, 215, 215, 215, 215, 0, 0, 215, 215,
- 215, 215, 390, 391, 215, 215, 0, 215, 0, 0,
- 215, 215, 215, 215, 215, 215, 215, 215, 215, 215,
- 215, 0, 0, 0, 215, 215, 215, 215, 216, 216,
- 216, 216, 0, 0, 216, 216, 216, 216, 216, 216,
- 216, 216, 216, 216, 0, 233, 234, 192, 193, 194,
- 195, 0, 216, 216, 216, 216, 216, 216, 216, 216,
- 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, 0, 404, 0, 216, 216, 216, 216, 216, 216,
- 216, 216, 216, 216, 216, 211, 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, 0, 0, 216, 216, 216, 216, 0, 211, 0,
- 0, 0, 0, 0, 188, 211, 211, 189, 211, 211,
- 211, 190, 191, 192, 193, 194, 195, 0, 190, 191,
- 192, 193, 194, 195, 211, 211, 0, 211, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 203, 0, 0,
- 0, 0, 201, 199, 0, 200, 0, 202, 0, 0,
- 0, 233, 234, 192, 193, 194, 195, 0, 211, 0,
- 235, 211, 198, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 212, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 211, 0, 0, 0, 204, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 212, 0, 0,
- 0, 0, 0, 0, 212, 212, 0, 212, 212, 212,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 212, 212, 0, 212, 0, 0, 0,
- 203, 0, 0, 0, 0, 201, 199, 0, 200, 0,
- 202, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 235, 0, 198, 0, 212, 0, 203,
- 212, 0, 0, 0, 201, 199, 0, 200, 0, 202,
- 0, 0, 0, 204, 0, 0, 0, 0, 204, 204,
- 204, 204, 235, 204, 198, 0, 0, 204, 0, 212,
- 0, 0, 0, 0, 0, 0, 204, 0, 204, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 211, 211, 211, 211, 204, 0, 211, 211,
- 211, 211, 211, 211, 211, 211, 211, 211, 0, 0,
- 204, 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, 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, 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, 0, 0, 264, 211, 211, 211,
- 211, 212, 212, 212, 212, 0, 0, 212, 212, 212,
- 212, 212, 212, 212, 212, 212, 212, 0, 190, 0,
- 192, 193, 194, 195, 0, 212, 212, 212, 212, 212,
- 212, 212, 212, 212, 212, 212, 212, 212, 212, 212,
- 212, 212, 212, 212, 212, 212, 0, 0, 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, 212, 212, 212, 212, 212, 232, 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, 0, 212, 212, 212, 212,
- 0, 232, 0, 0, 0, 0, 0, 204, 232, 232,
- 204, 233, 232, 192, 193, 194, 195, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 232, 232, 0,
- 232, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 192, 193, 194, 195, 0, 0, 0, 0,
- 0, 0, 0, 0, 204, 204, 204, 204, 204, 204,
- 0, 232, 0, 0, 232, 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, 232, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 234, 52, 53, 0, 0, 0, 0, 234, 234, 0,
- 0, 234, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 234, 234, 0, 234,
- 0, 0, 0, 0, 0, 0, 0, 55, 56, 57,
+ 7, 7, 7, 0, 245, 245, 220, 193, 194, 225,
+ 226, 227, 228, 229, 230, 0, 231, 210, 0, 0,
+ 0, 0, 208, 206, 0, 207, 0, 209, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 242, 0, 205, 0, 0, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 0, 7, 7,
+ 7, 7, 7, 7, 0, 210, 7, 0, 7, 0,
+ 208, 206, 0, 207, 211, 209, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 0, 7, 91, 0,
+ 0, 0, 0, 0, 7, 7, 0, 199, 200, 201,
+ 202, 0, 0, 0, 0, 225, 225, 225, 225, 0,
+ 0, 225, 225, 225, 225, 225, 225, 225, 225, 225,
+ 225, 0, 211, 232, 0, 0, 0, 0, 0, 225,
+ 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
+ 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
+ 0, 0, 225, 225, 225, 225, 225, 225, 225, 225,
+ 225, 225, 225, 225, 225, 225, 0, 0, 0, 0,
+ 0, 225, 225, 225, 225, 225, 225, 225, 225, 225,
+ 225, 225, 416, 0, 225, 225, 225, 225, 247, 0,
+ 225, 225, 0, 225, 0, 0, 225, 225, 225, 225,
+ 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
+ 225, 0, 0, 0, 225, 225, 225, 225, 225, 225,
+ 225, 247, 0, 0, 0, 247, 0, 0, 247, 247,
+ 247, 247, 247, 247, 357, 247, 0, 0, 362, 0,
+ 8, 197, 198, 199, 200, 201, 202, 247, 247, 47,
+ 247, 0, 0, 0, 0, 50, 0, 0, 0, 0,
+ 51, 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, 0,
- 234, 0, 0, 234, 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, 234, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 351, 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, 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, 213, 0, 0,
- 232, 232, 232, 232, 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, 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, 233, 0, 234, 234, 234, 234, 0, 0, 234,
- 234, 0, 234, 0, 0, 234, 234, 234, 234, 234,
- 234, 234, 234, 234, 234, 234, 0, 0, 0, 234,
- 234, 234, 234, 0, 233, 52, 53, 0, 0, 0,
- 0, 233, 233, 0, 0, 233, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 233, 233, 0, 233, 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, 0, 233, 0, 0, 233, 0, 0,
- 77, 78, 79, 80, 0, 0, 0, 0, 0, 0,
- 231, 0, 0, 0, 0, 0, 0, 0, 81, 82,
- 83, 84, 85, 0, 0, 0, 233, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 231, 0, 0, 0, 0, 0, 0,
- 231, 231, 0, 0, 231, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 231, 0, 0, 231, 77, 78, 79,
- 80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 247, 0, 21, 247, 0, 0, 0, 0, 0,
+ 0, 63, 224, 213, 0, 0, 77, 78, 79, 80,
+ 234, 18, 17, 0, 221, 225, 226, 227, 228, 229,
+ 230, 0, 231, 247, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 0, 64, 0, 390, 391, 197, 198,
+ 199, 200, 201, 202, 134, 0, 134, 221, 0, 45,
+ 69, 221, 21, 0, 221, 221, 221, 221, 221, 221,
+ 63, 221, 29, 0, 0, 0, 408, 0, 0, 409,
+ 18, 17, 0, 221, 221, 0, 221, 135, 0, 135,
+ 0, 0, 0, 0, 0, 0, 21, 0, 0, 0,
+ 0, 210, 0, 64, 63, 0, 208, 206, 203, 207,
+ 0, 209, 0, 0, 18, 17, 0, 221, 45, 69,
+ 221, 0, 0, 0, 204, 210, 205, 0, 21, 0,
+ 208, 206, 203, 207, 0, 209, 63, 64, 0, 0,
+ 0, 0, 0, 0, 0, 0, 18, 17, 242, 221,
+ 205, 0, 45, 69, 0, 0, 0, 0, 211, 0,
+ 0, 0, 0, 0, 0, 247, 247, 247, 247, 64,
+ 0, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 0, 211, 0, 45, 69, 0, 0, 0, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 0, 0, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 0, 0, 0, 0,
+ 0, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 0, 0, 247, 247, 247, 247, 0, 0,
+ 247, 247, 0, 247, 0, 0, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 0, 0, 0, 247, 247, 247, 247, 247, 247,
+ 247, 221, 221, 221, 221, 0, 0, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 0, 0, 0,
+ 0, 0, 0, 0, 0, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 0, 0, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 0, 0, 0, 0, 0, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 221, 0, 0,
+ 221, 221, 221, 221, 222, 195, 221, 221, 196, 221,
+ 0, 0, 221, 221, 221, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 221, 0, 0, 0,
+ 221, 221, 221, 221, 221, 221, 221, 222, 0, 0,
+ 0, 222, 0, 0, 222, 222, 222, 222, 222, 222,
+ 0, 222, 197, 198, 199, 200, 201, 202, 47, 0,
+ 0, 0, 0, 222, 222, 0, 222, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 240, 241, 199, 200,
+ 201, 202, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 222, 0, 47,
+ 222, 191, 47, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 47, 0, 0,
+ 223, 0, 0, 0, 0, 0, 0, 0, 0, 222,
+ 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 264, 265, 266, 276,
+ 0, 47, 0, 223, 0, 0, 0, 223, 0, 0,
+ 223, 223, 223, 223, 223, 223, 0, 223, 0, 0,
+ 0, 0, 0, 48, 296, 0, 48, 0, 0, 223,
+ 223, 0, 223, 47, 0, 0, 0, 0, 0, 0,
+ 0, 48, 0, 0, 0, 0, 0, 210, 0, 0,
+ 0, 0, 208, 206, 203, 207, 0, 209, 0, 0,
+ 0, 0, 0, 223, 0, 325, 223, 0, 0, 0,
+ 204, 210, 205, 333, 0, 48, 208, 206, 0, 207,
+ 0, 209, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 242, 223, 205, 0, 0, 0,
+ 0, 0, 0, 0, 211, 0, 0, 48, 0, 0,
+ 0, 222, 222, 222, 222, 0, 0, 222, 222, 222,
+ 222, 222, 222, 222, 222, 222, 222, 0, 211, 0,
+ 0, 0, 191, 0, 0, 222, 222, 222, 222, 222,
+ 222, 222, 222, 222, 222, 222, 222, 222, 222, 222,
+ 222, 222, 222, 222, 222, 222, 0, 0, 222, 222,
+ 222, 222, 222, 222, 222, 222, 222, 222, 222, 222,
+ 222, 222, 47, 0, 0, 380, 0, 222, 222, 222,
+ 222, 222, 222, 222, 222, 222, 222, 222, 0, 0,
+ 222, 222, 222, 222, 0, 0, 222, 222, 47, 222,
+ 0, 0, 222, 222, 222, 222, 222, 222, 222, 222,
+ 222, 222, 222, 222, 222, 222, 222, 0, 0, 0,
+ 222, 222, 222, 222, 222, 222, 222, 223, 223, 223,
+ 223, 0, 0, 223, 223, 223, 223, 223, 223, 223,
+ 223, 223, 223, 402, 403, 0, 48, 363, 0, 0,
+ 0, 223, 223, 223, 223, 223, 223, 223, 223, 223,
+ 223, 223, 223, 223, 223, 223, 223, 223, 223, 223,
+ 223, 223, 48, 0, 223, 223, 223, 223, 223, 223,
+ 223, 223, 223, 223, 223, 223, 223, 223, 0, 0,
+ 0, 0, 0, 223, 223, 223, 223, 223, 223, 223,
+ 223, 223, 223, 223, 0, 0, 223, 223, 223, 223,
+ 224, 195, 223, 223, 196, 223, 0, 0, 223, 223,
+ 223, 223, 223, 223, 223, 223, 223, 223, 223, 223,
+ 223, 223, 223, 0, 0, 0, 223, 223, 223, 223,
+ 223, 223, 223, 224, 0, 0, 0, 224, 0, 0,
+ 224, 224, 224, 224, 224, 224, 0, 224, 240, 241,
+ 199, 200, 201, 202, 0, 0, 0, 0, 0, 224,
+ 224, 0, 224, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 240, 241, 199, 200, 201, 202, 0, 0,
+ 212, 0, 0, 0, 0, 212, 212, 212, 212, 0,
+ 212, 0, 0, 224, 0, 0, 224, 0, 0, 0,
+ 0, 0, 0, 212, 0, 212, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 219, 0, 0, 0,
+ 0, 0, 0, 0, 0, 224, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 212, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 219,
+ 0, 0, 0, 0, 0, 0, 219, 219, 0, 219,
+ 219, 219, 52, 53, 0, 0, 0, 77, 78, 79,
+ 80, 0, 0, 0, 0, 219, 219, 0, 219, 0,
0, 0, 0, 0, 0, 81, 82, 83, 84, 85,
- 0, 0, 0, 0, 0, 231, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 233, 0, 0, 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, 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, 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, 144, 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, 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, 95, 0, 0, 0, 0,
- 0, 95, 0, 0, 0, 0, 0, 144, 0, 0,
- 144, 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, 0, 0, 0, 144,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 236, 95, 0, 0,
- 0, 0, 0, 236, 236, 0, 0, 236, 0, 0,
- 0, 0, 95, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 236, 0, 0, 95, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 95, 95, 95, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 236, 0, 0, 236,
- 0, 0, 0, 0, 0, 0, 0, 283, 0, 0,
- 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 95, 0,
- 0, 144, 144, 144, 144, 0, 95, 144, 0, 144,
- 144, 144, 144, 144, 144, 144, 144, 263, 0, 0,
- 0, 0, 0, 264, 0, 144, 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,
+ 86, 87, 88, 89, 0, 0, 0, 0, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 219,
+ 0, 0, 219, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 77, 78, 79,
+ 80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 219, 0, 0, 0, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 0, 0, 0, 224, 224, 224,
+ 224, 0, 0, 224, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 0, 0, 0, 0, 270, 0, 0,
+ 0, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+ 224, 224, 0, 0, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 224, 224, 224, 224, 224, 0, 0,
+ 0, 0, 0, 224, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 224, 0, 0, 224, 224, 224, 224,
+ 0, 0, 224, 224, 212, 224, 0, 212, 224, 224,
+ 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
+ 224, 224, 224, 0, 0, 0, 224, 224, 224, 224,
+ 224, 224, 224, 219, 219, 219, 219, 0, 0, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219, 219, 0,
+ 0, 212, 212, 212, 212, 212, 212, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219, 0, 0,
+ 219, 219, 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 0, 0, 0, 0, 0, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219, 219, 219,
+ 0, 0, 219, 219, 219, 219, 220, 0, 219, 219,
+ 0, 219, 0, 0, 219, 219, 219, 219, 219, 219,
+ 219, 219, 219, 219, 219, 219, 219, 219, 219, 0,
+ 0, 0, 219, 219, 219, 219, 219, 219, 219, 220,
+ 0, 0, 0, 0, 0, 0, 220, 220, 0, 220,
+ 220, 220, 52, 53, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 220, 220, 0, 220, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 220,
+ 0, 0, 220, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 77, 78, 79,
+ 80, 0, 240, 0, 0, 0, 0, 0, 0, 0,
+ 0, 220, 0, 0, 0, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 240, 0, 0, 0, 0,
+ 0, 0, 240, 240, 0, 0, 240, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 240, 240, 0, 240, 210, 0, 0, 0, 0,
+ 208, 206, 0, 207, 0, 209, 0, 210, 0, 0,
+ 0, 0, 208, 206, 0, 207, 0, 209, 242, 0,
+ 205, 0, 0, 0, 0, 240, 0, 0, 240, 0,
+ 242, 0, 205, 210, 0, 0, 0, 0, 208, 206,
+ 0, 207, 0, 209, 0, 0, 0, 0, 0, 0,
+ 0, 0, 211, 0, 0, 0, 242, 240, 205, 0,
+ 0, 0, 0, 0, 211, 0, 0, 0, 0, 0,
+ 0, 0, 0, 220, 220, 220, 220, 0, 0, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 0,
+ 211, 0, 0, 0, 0, 0, 0, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220, 0, 0,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 0, 0, 0, 0, 0, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
+ 0, 0, 220, 220, 220, 220, 0, 0, 220, 220,
+ 0, 220, 0, 0, 220, 220, 220, 220, 220, 220,
+ 220, 220, 220, 220, 220, 220, 220, 220, 220, 0,
+ 0, 0, 220, 220, 220, 220, 220, 220, 220, 240,
+ 240, 240, 240, 0, 0, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 0, 0, 0, 0, 0,
+ 0, 0, 0, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 0, 0, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 0, 0, 0, 0, 0, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 240, 0, 0, 240, 240,
+ 240, 240, 242, 0, 240, 240, 0, 240, 0, 0,
+ 240, 240, 240, 240, 240, 240, 240, 240, 240, 240,
+ 240, 240, 240, 240, 240, 0, 0, 0, 240, 240,
+ 240, 240, 240, 240, 240, 242, 197, 198, 199, 200,
+ 201, 202, 242, 242, 0, 0, 242, 111, 197, 0,
+ 199, 200, 201, 202, 0, 0, 0, 0, 0, 0,
+ 0, 242, 242, 164, 242, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 240, 0, 199, 200, 201, 202,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 242, 0, 0, 242, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 192, 0, 0, 0, 0, 0, 241, 0,
+ 0, 0, 0, 0, 0, 0, 0, 242, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 241, 0, 0, 0, 0, 0, 0, 241, 241,
+ 0, 0, 241, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 241, 241, 0,
+ 241, 0, 0, 0, 0, 0, 297, 0, 0, 0,
+ 300, 301, 302, 303, 304, 305, 306, 307, 308, 310,
+ 311, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 241, 0, 0, 241, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 241, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 242,
+ 242, 242, 242, 0, 0, 242, 242, 242, 242, 242,
+ 242, 242, 242, 242, 242, 0, 0, 0, 0, 0,
+ 0, 0, 0, 242, 242, 242, 242, 242, 242, 242,
+ 242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
+ 242, 242, 242, 242, 0, 0, 242, 242, 242, 242,
+ 242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
+ 0, 0, 0, 0, 0, 242, 242, 242, 242, 242,
+ 242, 242, 242, 242, 242, 242, 0, 0, 242, 242,
+ 242, 242, 0, 0, 242, 242, 0, 242, 0, 0,
+ 242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
+ 242, 242, 242, 242, 242, 0, 0, 0, 242, 242,
+ 242, 242, 242, 242, 242, 241, 241, 241, 241, 0,
+ 0, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 0, 397, 0, 0, 0, 398, 399, 0, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 0, 0, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 0, 0, 0, 0,
+ 0, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 241, 0, 0, 241, 241, 241, 241, 239, 0,
+ 241, 241, 0, 241, 0, 0, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 0, 0, 0, 241, 241, 241, 241, 241, 241,
+ 241, 239, 0, 0, 0, 0, 0, 0, 239, 239,
+ 0, 0, 239, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 239, 239, 0,
+ 239, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 239, 0, 0, 239, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 148, 0, 0, 0, 0, 0,
+ 0, 0, 0, 239, 0, 0, 0, 0, 55, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 148, 0, 0,
+ 0, 0, 0, 0, 148, 148, 0, 148, 148, 148,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 55,
+ 0, 0, 55, 148, 0, 0, 148, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 55, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 148, 0, 0,
+ 148, 0, 0, 0, 0, 0, 0, 210, 0, 0,
+ 0, 55, 208, 206, 0, 207, 0, 209, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 148,
+ 242, 0, 205, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 55, 0, 239, 239, 239, 239, 0,
+ 0, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 239, 0, 0, 0, 211, 0, 0, 0, 0, 239,
+ 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 0, 0, 239, 239, 239, 239, 239, 239, 239, 239,
+ 239, 239, 239, 239, 239, 239, 0, 0, 0, 0,
+ 0, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 239, 239, 0, 0, 239, 239, 239, 239, 0, 0,
+ 239, 239, 0, 239, 0, 0, 239, 239, 239, 239,
+ 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 239, 0, 0, 0, 239, 239, 239, 239, 239, 239,
+ 239, 148, 148, 148, 148, 0, 0, 148, 0, 148,
+ 148, 148, 148, 148, 148, 148, 148, 0, 0, 0,
+ 0, 0, 55, 0, 0, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 0, 0, 0, 55, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 0, 0,
+ 148, 148, 148, 148, 244, 0, 148, 148, 0, 0,
+ 0, 0, 0, 0, 0, 0, 384, 0, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 55, 0, 0,
+ 148, 148, 148, 148, 148, 148, 148, 244, 0, 0,
+ 0, 0, 0, 0, 244, 244, 0, 0, 244, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 244, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 197, 198,
+ 199, 200, 201, 202, 0, 0, 0, 0, 0, 0,
+ 0, 0, 246, 0, 0, 0, 0, 244, 0, 0,
+ 244, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 243, 0, 0, 0, 0, 0, 0, 0, 0, 244,
+ 0, 0, 0, 246, 0, 0, 246, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 246, 0, 243, 0, 0, 0, 0, 0, 0,
+ 243, 243, 0, 0, 243, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 243,
+ 0, 0, 0, 0, 0, 246, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 243, 0, 0, 243, 246, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 243, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 244, 244, 244, 244, 0, 0, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 0, 0, 0,
+ 0, 0, 0, 0, 0, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 0, 0, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 0, 0, 0, 0, 0, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 0, 0,
+ 244, 244, 244, 244, 0, 0, 244, 244, 0, 244,
+ 0, 0, 244, 244, 244, 244, 246, 0, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 0, 0, 0,
+ 244, 244, 244, 244, 244, 244, 244, 243, 243, 243,
+ 243, 0, 246, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 246, 0, 0, 246, 0, 0, 0,
+ 0, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 0, 0, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 0, 0,
+ 0, 246, 0, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 243, 0, 0, 243, 243, 243, 243,
+ 149, 0, 243, 243, 0, 243, 0, 0, 243, 243,
+ 243, 243, 0, 0, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 0, 0, 0, 243, 243, 243, 243,
+ 243, 243, 243, 149, 0, 0, 0, 0, 0, 0,
+ 149, 149, 0, 149, 149, 149, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 149,
+ 0, 0, 149, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 52, 0,
+ 0, 0, 0, 149, 0, 0, 149, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 245, 0, 0, 0,
+ 0, 0, 0, 0, 0, 149, 0, 0, 0, 52,
+ 0, 0, 52, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 52, 0, 245,
+ 0, 0, 0, 0, 0, 0, 245, 245, 0, 0,
+ 245, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 245, 0, 0, 0, 0,
+ 0, 52, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 245,
+ 0, 0, 245, 52, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 245, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 149, 149, 149,
+ 149, 0, 0, 149, 0, 149, 149, 149, 149, 149,
+ 149, 149, 149, 0, 0, 0, 0, 0, 0, 0,
+ 0, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 0, 0, 0, 0, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 149, 0, 0, 149, 149, 149, 149,
+ 0, 0, 149, 149, 0, 0, 0, 0, 0, 0,
+ 0, 0, 52, 0, 149, 149, 149, 149, 149, 149,
+ 149, 149, 149, 0, 0, 0, 149, 149, 149, 149,
+ 149, 149, 149, 245, 245, 245, 245, 0, 52, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245, 245, 0,
+ 0, 0, 0, 0, 0, 0, 0, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245, 0, 0,
+ 245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
+ 245, 245, 245, 245, 0, 0, 52, 52, 0, 245,
+ 245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
+ 0, 0, 245, 245, 245, 245, 246, 0, 245, 245,
+ 0, 245, 0, 0, 245, 245, 0, 0, 0, 0,
+ 245, 245, 245, 245, 245, 245, 245, 245, 245, 0,
+ 0, 0, 245, 245, 245, 245, 245, 245, 245, 246,
+ 0, 0, 0, 0, 0, 0, 246, 246, 0, 0,
+ 246, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 246, 0, 0, 0, 0,
+ 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, 0, 0, 0, 0, 246,
+ 0, 0, 246, 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, 246, 0, 0, 0, 54, 0, 0, 54, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 54, 0, 135, 0, 0, 0, 0,
+ 0, 0, 135, 135, 0, 135, 135, 135, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 135, 0, 0, 135, 0, 0, 54, 0, 0,
+ 0, 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, 54,
+ 0, 0, 0, 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,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 246, 246, 246, 246, 0, 0, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246, 246, 0,
+ 0, 0, 0, 0, 0, 0, 0, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246, 0, 0,
+ 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
+ 246, 246, 246, 246, 0, 0, 0, 0, 0, 246,
+ 246, 246, 246, 246, 246, 246, 246, 246, 246, 246,
+ 0, 0, 246, 246, 246, 246, 0, 0, 246, 246,
+ 0, 246, 0, 0, 0, 246, 0, 0, 54, 0,
+ 246, 246, 246, 246, 246, 246, 246, 246, 246, 0,
+ 0, 0, 246, 246, 246, 246, 246, 246, 246, 135,
+ 135, 135, 135, 0, 54, 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, 135, 0, 0, 0, 0, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
+ 0, 0, 0, 54, 0, 135, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 135, 0, 0, 135, 135,
+ 135, 135, 140, 0, 135, 135, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 135, 135, 135, 135,
+ 135, 135, 135, 135, 135, 0, 0, 0, 135, 135,
+ 135, 135, 135, 135, 135, 140, 0, 0, 0, 0,
+ 0, 0, 140, 140, 0, 0, 140, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 140, 0, 0, 140, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 140, 0, 0, 140, 0,
+ 0, 0, 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, 140, 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, 0, 0, 0, 0, 144, 144,
+ 0, 0, 144, 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, 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, 0, 0, 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, 140,
+ 140, 140, 140, 0, 0, 140, 0, 140, 140, 140,
+ 140, 140, 140, 140, 140, 0, 0, 0, 0, 0,
+ 0, 0, 0, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 140, 140, 140, 0, 0, 0, 0, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
+ 0, 0, 0, 0, 0, 140, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 140, 0, 0, 140, 140,
+ 140, 140, 0, 0, 140, 140, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 140, 140, 140, 140,
+ 140, 140, 140, 140, 140, 0, 0, 0, 140, 140,
+ 140, 140, 140, 140, 140, 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,
- 144, 144, 144, 144, 0, 0, 144, 144, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 144, 144,
- 144, 144, 144, 0, 95, 0, 144, 144, 144, 144,
- 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, 236, 0, 0, 236, 236, 236,
- 236, 236, 236, 236, 236, 236, 236, 236, 236, 236,
- 236, 95, 95, 0, 0, 0, 236, 236, 236, 236,
- 236, 236, 236, 236, 236, 236, 236, 235, 0, 236,
- 236, 236, 236, 0, 0, 236, 236, 0, 236, 0,
- 0, 236, 236, 236, 236, 0, 0, 236, 236, 236,
- 236, 236, 0, 0, 0, 236, 236, 236, 236, 0,
- 235, 0, 0, 0, 0, 0, 0, 235, 235, 0,
- 0, 235, 0, 0, 260, 0, 0, 0, 0, 0,
- 261, 0, 0, 0, 0, 262, 235, 0, 52, 53,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 14, 0, 0, 0, 0, 0, 0, 0, 0,
- 235, 0, 0, 235, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 0, 145, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 235, 77, 78, 79, 80, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 145,
- 14, 81, 82, 83, 84, 85, 145, 145, 0, 145,
- 145, 145, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 145, 0, 0, 145, 0,
- 0, 0, 0, 0, 14, 0, 0, 189, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 145,
- 0, 0, 145, 0, 0, 0, 14, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 145, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 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, 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, 0, 0, 235, 235, 235, 235, 0, 189, 235,
- 235, 0, 235, 0, 189, 235, 235, 235, 235, 189,
- 0, 235, 235, 235, 235, 235, 0, 0, 0, 235,
- 235, 235, 235, 145, 145, 145, 145, 0, 0, 145,
- 0, 145, 145, 145, 145, 145, 145, 145, 145, 0,
- 0, 0, 189, 0, 0, 0, 0, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 0, 0, 0,
- 0, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
- 237, 0, 145, 145, 145, 145, 0, 0, 145, 145,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 145, 145, 145, 145, 145, 0, 0, 0, 145, 145,
- 145, 145, 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, 15, 0, 0, 0, 0, 0,
- 0, 0, 0, 237, 0, 0, 237, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 238,
- 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, 0, 238, 15, 0, 0, 0, 0, 0, 238,
- 238, 0, 0, 238, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 238, 0,
- 0, 0, 0, 0, 0, 0, 0, 15, 0, 0,
- 190, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 238, 0, 0, 238, 0, 0, 0, 15,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 238, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 237, 237, 237, 237,
- 0, 190, 237, 237, 0, 237, 0, 190, 237, 237,
- 0, 0, 190, 0, 237, 237, 237, 237, 237, 0,
- 0, 0, 237, 237, 237, 237, 238, 238, 238, 238,
- 0, 0, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 0, 0, 0, 190, 0, 0, 0, 0,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 0, 0, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 0, 0, 0,
- 0, 0, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 238, 238, 131, 0, 238, 238, 238, 238, 0,
- 0, 238, 238, 0, 238, 0, 0, 0, 238, 0,
- 0, 0, 0, 238, 238, 238, 238, 238, 0, 0,
- 0, 238, 238, 238, 238, 0, 131, 0, 0, 0,
- 0, 0, 0, 131, 131, 0, 131, 131, 131, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 131, 0, 0, 131, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 131, 0, 0, 131,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 136, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 131, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 136, 0, 0, 0, 0,
- 0, 0, 136, 136, 0, 0, 136, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 136, 0, 0, 136, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 136, 0, 0, 136, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 136, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 131, 131, 131, 131, 0, 0, 131, 0, 131, 131,
- 131, 131, 131, 131, 131, 131, 0, 0, 0, 0,
- 0, 0, 0, 0, 131, 131, 131, 131, 131, 131,
- 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
- 131, 131, 131, 131, 0, 0, 0, 0, 131, 131,
- 131, 131, 131, 131, 131, 131, 131, 131, 131, 131,
- 131, 0, 0, 0, 0, 0, 131, 131, 131, 131,
- 131, 131, 131, 131, 131, 131, 131, 0, 0, 131,
- 131, 131, 131, 0, 0, 131, 131, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 131, 131, 131,
- 131, 131, 0, 0, 0, 131, 131, 131, 131, 136,
- 136, 136, 136, 0, 0, 136, 0, 136, 136, 136,
- 136, 136, 136, 136, 136, 0, 0, 0, 0, 0,
- 0, 0, 0, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 0, 0, 0, 0, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 0, 0, 0, 0, 0, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 140, 0, 136, 136,
- 136, 136, 0, 0, 136, 136, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 136, 136, 136, 136,
- 136, 0, 0, 0, 136, 136, 136, 136, 0, 140,
- 0, 0, 0, 0, 0, 0, 140, 140, 0, 0,
- 140, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 140, 0, 0, 0, 0,
+ 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, 0, 0, 0, 0,
+ 0, 144, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 144, 0, 0, 144, 144, 144, 144, 88, 0,
+ 144, 144, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 144, 144, 144, 144, 144, 144, 144, 144,
+ 144, 0, 0, 0, 144, 144, 144, 144, 144, 144,
+ 144, 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, 88, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 140,
- 0, 0, 140, 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, 140, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 88, 0, 0, 0, 0, 0,
+ 0, 88, 0, 0, 88, 0, 0, 0, 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, 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, 88, 0,
- 0, 88, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 90, 0, 0,
+ 0, 0, 0, 0, 90, 0, 0, 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, 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, 140, 140, 140, 140, 0, 0, 140,
- 0, 140, 140, 140, 140, 140, 140, 140, 140, 0,
- 0, 0, 0, 0, 0, 0, 0, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 140, 140, 140, 0, 0, 0,
- 0, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 140, 140, 140, 140, 0, 0, 0, 0, 0, 140,
- 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
- 0, 0, 140, 140, 140, 140, 0, 0, 140, 140,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 140, 140, 140, 140, 140, 0, 0, 0, 140, 140,
- 140, 140, 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, 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, 90, 0, 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, 0, 0, 0, 0, 90,
- 0, 0, 90, 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, 90, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 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, 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, 88, 0,
+ 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, 0, 0, 88, 88, 88, 88, 0, 0,
+ 88, 88, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 0, 0, 0, 88, 88, 88, 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, 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, 92, 0, 90, 90, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 90, 90,
+ 90, 90, 90, 90, 90, 90, 90, 0, 0, 0,
+ 90, 90, 90, 90, 90, 90, 90, 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 92, 0,
- 0, 92, 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, 0, 0, 0,
+ 0, 0, 0, 0, 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, 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, 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,
+ 96, 0, 0, 0, 0, 0, 0, 0, 0, 92,
0, 0, 0, 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, 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, 0, 0, 96, 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, 96,
- 0, 0, 96, 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, 96, 0, 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, 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, 96, 0, 0, 96, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 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, 96, 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, 92, 0, 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, 0, 0,
+ 92, 92, 92, 92, 0, 0, 92, 92, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 92, 92,
+ 92, 92, 92, 92, 92, 92, 92, 0, 0, 0,
+ 92, 92, 92, 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, 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, 0, 0, 96, 96, 96, 96,
+ 94, 0, 96, 96, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 96, 96, 96, 96, 96, 96,
+ 96, 96, 96, 0, 0, 0, 96, 96, 96, 96,
+ 96, 96, 96, 94, 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, 94,
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, 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,
- 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, 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, 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, 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, 0, 85, 0, 0, 0, 0,
+ 0, 0, 0, 94, 0, 0, 94, 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, 85, 0,
- 0, 0, 0, 0, 0, 85, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 84, 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, 85, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,
+ 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, 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,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,
+ 0, 0, 84, 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, 0, 0, 84, 84, 84, 84, 0, 0, 84,
+ 0, 84, 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,
+ 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, 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, 94,
+ 94, 94, 94, 0, 0, 0, 94, 94, 94, 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,
@@ -1047,833 +1068,1064 @@ short yytable[] = { 90,
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, 84, 84, 84, 84, 85, 0, 84, 84,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 84, 84, 84, 84, 84, 84, 84, 84, 84, 0,
+ 0, 0, 84, 84, 84, 84, 84, 84, 84, 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, 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, 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, 85, 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, 85, 0, 0, 0, 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, 86, 0, 0, 0, 0,
0, 0, 86, 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, 86, 0, 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, 86, 0, 0, 86, 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, 0, 0, 0, 0, 0, 0, 86, 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, 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, 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, 85,
+ 0, 0, 85, 85, 85, 85, 0, 0, 85, 85,
0, 0, 0, 0, 0, 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,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 0,
+ 0, 0, 85, 85, 85, 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, 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, 0, 0, 0, 0, 0, 86, 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,
+ 0, 0, 0, 0, 0, 86, 86, 86, 86, 86,
+ 86, 86, 86, 86, 86, 86, 0, 0, 86, 86,
+ 86, 86, 87, 0, 86, 86, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 86, 86, 86, 86,
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, 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,
+ 86, 86, 86, 86, 86, 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, 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, 0, 97,
- 0, 0, 97, 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, 97, 0,
+ 0, 0, 0, 0, 0, 0, 0, 87, 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, 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, 98, 0, 0, 0, 0, 0,
+ 0, 97, 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, 97, 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, 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, 97, 0, 0, 97, 0, 0, 0, 0, 0,
0, 0, 0, 0, 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,
+ 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, 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, 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, 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, 87, 87, 87, 87, 0, 0, 0, 87, 87,
+ 87, 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, 97,
97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
- 97, 97, 97, 97, 97, 97, 97, 0, 0, 0,
+ 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, 0, 0, 0, 0,
+ 0, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 0, 0, 97, 97, 97, 97, 98, 0,
+ 97, 97, 0, 0, 0, 0, 0, 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,
+ 97, 0, 0, 0, 97, 97, 97, 97, 97, 97,
+ 97, 98, 0, 0, 0, 0, 0, 0, 98, 0,
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, 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, 98, 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, 105, 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, 105, 0,
- 0, 0, 0, 0, 0, 105, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 105, 0, 0, 0, 0, 0,
+ 0, 98, 0, 0, 98, 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, 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, 105, 0,
- 0, 105, 0, 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, 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,
- 105, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 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,
+ 0, 0, 0, 0, 0, 0, 0, 99, 0, 0,
+ 99, 0, 0, 0, 0, 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, 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, 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, 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, 98, 98, 98,
+ 98, 0, 0, 0, 98, 98, 98, 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, 99, 99, 99, 99, 99, 99, 99, 99,
- 99, 99, 99, 99, 0, 0, 0, 0, 0, 99,
+ 0, 0, 0, 0, 0, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
- 0, 0, 99, 99, 99, 99, 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, 101, 0, 99, 99, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 0, 0, 0,
+ 99, 99, 99, 99, 99, 99, 99, 101, 0, 0,
+ 0, 0, 0, 0, 101, 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, 105, 105, 105, 105, 0, 0, 105, 0,
- 105, 105, 105, 105, 105, 105, 105, 105, 0, 0,
- 0, 0, 0, 0, 0, 0, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 105, 105, 105, 107, 0, 0, 0,
- 0, 105, 105, 105, 105, 105, 105, 105, 105, 105,
- 105, 105, 105, 0, 0, 0, 0, 0, 105, 105,
- 105, 105, 105, 105, 105, 105, 105, 105, 105, 107,
- 0, 105, 105, 105, 105, 0, 107, 105, 105, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
- 105, 105, 105, 105, 0, 107, 0, 105, 105, 105,
- 105, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 101, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 107,
- 0, 0, 107, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 111, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 107, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 111, 0,
- 0, 0, 0, 0, 0, 111, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 101, 0, 0,
+ 101, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 111, 0, 0, 0, 0, 0,
+ 106, 0, 0, 0, 0, 0, 0, 0, 0, 101,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 111, 0,
- 0, 111, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 106, 0, 0, 0, 0, 0, 0,
+ 106, 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,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 107, 107, 107, 107, 0, 0, 107,
- 0, 107, 107, 107, 107, 107, 107, 107, 107, 0,
- 0, 0, 0, 0, 0, 0, 0, 107, 107, 107,
- 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
- 107, 107, 107, 107, 107, 107, 107, 0, 0, 0,
- 0, 0, 107, 107, 107, 107, 107, 107, 107, 107,
- 107, 107, 107, 107, 0, 0, 0, 0, 0, 107,
- 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
- 0, 0, 107, 107, 107, 107, 0, 0, 107, 107,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 107, 107, 107, 107, 107, 0, 0, 0, 107, 107,
- 107, 107, 111, 111, 111, 111, 0, 0, 111, 0,
- 111, 111, 111, 111, 111, 111, 111, 111, 0, 0,
- 0, 0, 0, 0, 0, 0, 111, 111, 111, 111,
- 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
- 111, 111, 111, 111, 111, 111, 124, 0, 0, 0,
- 0, 111, 111, 111, 111, 111, 111, 111, 111, 111,
- 111, 111, 111, 0, 0, 0, 0, 0, 111, 111,
- 111, 111, 111, 111, 111, 111, 111, 111, 111, 124,
- 0, 111, 111, 111, 111, 0, 124, 111, 111, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 111,
- 111, 111, 111, 111, 0, 124, 0, 111, 111, 111,
- 111, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 124,
- 0, 0, 124, 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, 124, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 109, 0,
- 0, 0, 0, 0, 0, 109, 0, 0, 0, 0,
+ 0, 0, 0, 106, 0, 0, 106, 0, 0, 0,
0, 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, 106, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 109, 0,
- 0, 109, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 101, 101, 101, 101, 0, 0, 101, 0, 101,
+ 101, 101, 101, 101, 101, 101, 101, 0, 0, 0,
+ 0, 0, 0, 0, 0, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 0, 0, 0, 0, 0,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 0, 0, 0, 0, 0, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 0, 0,
+ 101, 101, 101, 101, 0, 0, 101, 101, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 0, 0, 0,
+ 101, 101, 101, 101, 101, 101, 101, 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,
+ 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, 0, 0, 106, 106, 106, 106,
+ 108, 0, 106, 106, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 106, 106, 106, 106, 106, 106,
+ 106, 106, 106, 0, 0, 0, 106, 106, 106, 106,
+ 106, 106, 106, 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, 0, 108,
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, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 124, 124, 124, 124, 0, 0, 124,
- 0, 124, 124, 124, 124, 124, 124, 124, 124, 0,
- 0, 0, 0, 0, 0, 0, 0, 124, 124, 124,
- 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
- 124, 124, 124, 124, 124, 124, 124, 0, 0, 0,
- 0, 0, 124, 124, 124, 124, 124, 124, 124, 124,
- 124, 124, 124, 124, 0, 0, 0, 0, 0, 124,
- 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
- 0, 0, 124, 124, 124, 124, 0, 0, 124, 124,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 124, 124, 124, 124, 124, 0, 0, 0, 124, 124,
- 124, 124, 109, 109, 109, 109, 0, 0, 109, 0,
- 109, 109, 109, 109, 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, 109, 0, 0, 0, 0,
- 0, 109, 109, 109, 109, 109, 109, 109, 109, 109,
- 109, 109, 109, 0, 0, 0, 0, 0, 109, 109,
- 109, 109, 109, 109, 109, 109, 109, 109, 109, 142,
- 0, 109, 109, 109, 109, 0, 0, 109, 109, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 109,
- 109, 109, 109, 109, 0, 0, 0, 109, 109, 109,
- 109, 0, 142, 0, 0, 0, 0, 0, 0, 142,
- 142, 0, 142, 142, 142, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 142, 0,
- 0, 142, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 168, 0, 0, 0,
- 0, 0, 142, 0, 0, 142, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 168,
- 0, 0, 0, 0, 142, 0, 168, 168, 0, 0,
- 168, 168, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 168, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 168,
- 0, 0, 168, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 168, 0, 40, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 40, 0, 0, 0,
- 0, 0, 0, 40, 0, 0, 142, 142, 142, 142,
- 0, 0, 142, 0, 142, 142, 142, 142, 142, 142,
- 142, 142, 40, 0, 0, 0, 0, 0, 0, 0,
- 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
- 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
- 0, 0, 0, 0, 142, 142, 40, 0, 0, 40,
- 0, 0, 0, 0, 0, 0, 0, 142, 142, 142,
- 142, 142, 142, 142, 142, 142, 142, 142, 142, 142,
- 142, 142, 142, 0, 0, 0, 0, 0, 40, 0,
- 0, 142, 142, 168, 168, 168, 168, 0, 0, 168,
- 0, 168, 168, 168, 168, 168, 168, 0, 0, 0,
- 0, 142, 142, 142, 142, 0, 0, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 168, 168, 168, 168, 168, 168, 168, 0, 0, 0,
- 0, 0, 168, 231, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 168,
- 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
- 0, 0, 0, 0, 0, 0, 231, 0, 168, 168,
- 0, 0, 0, 231, 231, 0, 0, 231, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 168, 168,
- 168, 168, 231, 231, 0, 231, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 40, 40, 40, 40, 0, 0, 40, 0, 0, 0,
- 0, 40, 0, 0, 40, 40, 231, 0, 0, 231,
- 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, 0, 231, 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, 42, 0, 40,
- 40, 40, 40, 0, 42, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 40, 40, 40,
- 40, 40, 0, 42, 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 42, 0, 0,
- 42, 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, 95, 0, 0, 0, 0, 42,
+ 0, 0, 0, 0, 0, 0, 115, 0, 0, 0,
+ 0, 0, 0, 0, 0, 108, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 231, 231, 231, 231, 0, 0, 231, 0, 0, 0,
- 0, 231, 0, 0, 231, 231, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 115,
+ 0, 0, 0, 0, 0, 0, 115, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 115, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 95, 0, 0, 0, 0, 0, 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, 95, 0, 231,
- 231, 231, 231, 0, 0, 0, 0, 0, 0, 0,
- 93, 231, 231, 231, 231, 231, 231, 231, 231, 231,
- 231, 231, 0, 0, 0, 0, 0, 0, 231, 95,
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, 0, 0, 0, 0, 0, 0, 0, 0, 93,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 115,
+ 0, 0, 115, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 115, 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,
+ 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, 0, 0, 108, 108, 108, 108,
+ 0, 0, 108, 108, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 108, 108, 108, 108, 108, 108,
+ 108, 108, 108, 0, 0, 0, 108, 108, 108, 108,
+ 108, 108, 108, 115, 115, 115, 115, 0, 0, 115,
+ 0, 115, 115, 115, 115, 115, 115, 115, 115, 0,
+ 0, 0, 0, 0, 0, 0, 0, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 0, 0, 0,
+ 0, 0, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 0, 0, 0, 0, 0, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 0, 0, 115, 115, 115, 115, 128, 0, 115, 115,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 0,
+ 0, 0, 115, 115, 115, 115, 115, 115, 115, 128,
+ 0, 0, 0, 0, 0, 0, 128, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 128,
+ 0, 0, 128, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 110, 0, 0, 0, 0, 0, 0, 0,
+ 0, 128, 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, 0, 0,
+ 0, 0, 110, 0, 0, 0, 0, 0, 0, 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, 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, 110, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 128, 128, 128, 128, 0, 0, 128,
+ 0, 128, 128, 128, 128, 128, 128, 128, 128, 0,
+ 0, 0, 0, 0, 0, 0, 0, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 0, 0, 0,
+ 0, 0, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 128, 128, 128, 0, 0, 0, 0, 0, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 0, 0, 128, 128, 128, 128, 0, 0, 128, 128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 0,
+ 0, 0, 128, 128, 128, 128, 128, 128, 128, 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, 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, 110, 0, 0, 110, 110,
+ 110, 110, 171, 0, 110, 110, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 110, 110, 110, 110,
+ 110, 110, 110, 110, 110, 0, 0, 0, 110, 110,
+ 110, 110, 110, 110, 110, 171, 0, 0, 0, 0,
+ 0, 0, 171, 0, 0, 0, 171, 171, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 171, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 99, 0, 0, 0,
+ 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 171, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
- 42, 42, 0, 93, 0, 0, 0, 42, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42, 89, 0,
- 42, 42, 42, 42, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 93, 0, 0, 42, 42,
- 42, 42, 42, 0, 0, 0, 0, 0, 0, 42,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 91,
- 0, 0, 0, 0, 95, 0, 0, 0, 0, 95,
- 95, 95, 0, 95, 95, 95, 95, 89, 0, 0,
- 0, 0, 0, 0, 0, 95, 95, 95, 95, 95,
+ 0, 0, 0, 0, 0, 0, 0, 0, 146, 0,
+ 0, 0, 0, 0, 0, 0, 0, 171, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 99, 0, 0, 0, 0, 0, 0, 0,
+ 0, 146, 0, 0, 0, 0, 0, 99, 146, 146,
+ 0, 146, 146, 146, 0, 0, 0, 0, 0, 0,
+ 99, 0, 0, 0, 0, 0, 0, 146, 0, 0,
+ 146, 0, 0, 0, 0, 0, 0, 99, 99, 99,
+ 99, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 146, 0, 0, 146, 294, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 146, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 99, 0, 0, 0,
+ 171, 171, 171, 0, 99, 0, 0, 171, 171, 171,
+ 0, 171, 171, 171, 171, 0, 0, 0, 0, 0,
+ 0, 0, 0, 171, 171, 171, 171, 171, 171, 171,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+ 171, 171, 171, 0, 0, 0, 0, 0, 171, 171,
+ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171,
+ 0, 0, 0, 99, 0, 171, 171, 171, 171, 171,
+ 171, 171, 171, 171, 171, 171, 0, 0, 171, 171,
+ 171, 171, 0, 0, 171, 171, 0, 0, 0, 0,
+ 31, 0, 0, 0, 0, 0, 171, 171, 171, 171,
+ 171, 171, 171, 171, 171, 0, 99, 0, 171, 171,
+ 171, 171, 171, 171, 171, 146, 146, 146, 146, 0,
+ 0, 146, 32, 146, 146, 146, 146, 146, 146, 146,
+ 146, 0, 0, 0, 0, 0, 0, 0, 0, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 151,
+ 0, 0, 0, 146, 146, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 99, 99, 146, 146, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
+ 146, 146, 151, 0, 0, 0, 0, 0, 0, 151,
+ 146, 146, 151, 0, 151, 151, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 151, 0,
+ 0, 0, 0, 0, 146, 146, 146, 146, 146, 146,
+ 146, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 151, 172, 0, 151, 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, 151, 0, 172, 0, 0, 0,
+ 0, 0, 0, 172, 172, 0, 0, 172, 172, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 172, 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, 239, 0, 25, 0, 26, 172, 0, 0, 172,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 27, 0, 28, 0, 0, 0, 0, 0,
+ 0, 29, 30, 0, 239, 0, 0, 0, 172, 0,
+ 0, 239, 239, 0, 0, 239, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 239, 239, 0, 239, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 151, 151, 151, 151,
+ 0, 0, 151, 0, 151, 151, 151, 151, 151, 151,
+ 151, 151, 0, 0, 239, 0, 0, 239, 0, 0,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 0, 0, 0, 0, 0, 151, 239, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 0, 0, 0, 0, 0, 0, 0,
+ 0, 151, 151, 0, 0, 0, 0, 0, 0, 0,
+ 172, 172, 172, 172, 0, 0, 172, 0, 172, 172,
+ 172, 172, 172, 172, 0, 151, 151, 151, 151, 151,
+ 151, 151, 0, 0, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
+ 172, 172, 172, 172, 0, 0, 0, 0, 0, 172,
+ 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 40, 0, 172, 172, 172, 172,
+ 172, 172, 172, 172, 172, 172, 172, 0, 0, 0,
+ 0, 0, 6, 0, 0, 172, 172, 0, 239, 239,
+ 239, 239, 0, 0, 239, 0, 31, 0, 0, 239,
+ 0, 0, 239, 239, 0, 0, 0, 0, 0, 172,
+ 172, 172, 172, 172, 172, 172, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 32, 0,
+ 0, 0, 0, 0, 0, 0, 0, 239, 239, 239,
+ 239, 239, 239, 239, 239, 239, 239, 239, 239, 0,
+ 0, 0, 0, 0, 239, 239, 239, 239, 239, 239,
+ 239, 239, 239, 239, 239, 40, 0, 239, 239, 239,
+ 239, 0, 0, 0, 0, 0, 0, 0, 0, 239,
+ 239, 239, 239, 239, 239, 239, 239, 239, 239, 239,
+ 239, 239, 239, 239, 0, 0, 0, 0, 40, 0,
+ 0, 0, 0, 239, 0, 40, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 6, 6, 0, 6,
+ 6, 0, 0, 0, 40, 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, 40, 0,
+ 0, 40, 6, 7, 0, 8, 9, 0, 0, 0,
+ 0, 42, 0, 0, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 0, 0, 0, 0,
+ 40, 0, 0, 6, 0, 0, 0, 0, 0, 6,
+ 6, 0, 0, 6, 42, 6, 0, 0, 0, 0,
+ 0, 42, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 6, 0, 6, 0, 0, 0, 0, 0,
+ 42, 6, 6, 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, 42, 0, 0, 42, 27, 0,
+ 28, 0, 0, 0, 0, 95, 0, 29, 30, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 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, 40, 40, 40, 40, 0, 0, 40, 0,
+ 0, 0, 0, 40, 95, 0, 40, 40, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 95, 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, 93,
+ 95, 40, 40, 40, 40, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 42, 42,
+ 42, 42, 0, 0, 42, 0, 0, 40, 0, 42,
+ 0, 0, 42, 42, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 93, 0,
+ 0, 0, 89, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 0,
+ 0, 0, 93, 0, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 0, 0, 42, 42, 42,
+ 42, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 89, 0, 0, 93, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 0, 95, 0, 0, 0, 0,
+ 95, 95, 95, 42, 95, 95, 95, 95, 0, 0,
+ 0, 0, 0, 0, 0, 89, 95, 95, 95, 95,
95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 189, 0, 0, 0, 0,
- 0, 89, 0, 0, 0, 0, 0, 0, 91, 0,
+ 95, 95, 95, 95, 95, 95, 193, 0, 0, 91,
+ 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, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 95, 95, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 89, 0, 0, 95, 95, 0, 0,
- 0, 0, 91, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 95, 95, 95, 95,
- 93, 104, 0, 0, 0, 93, 93, 93, 0, 93,
- 93, 93, 93, 0, 91, 0, 0, 0, 0, 0,
- 0, 93, 93, 93, 93, 93, 93, 93, 93, 93,
+ 0, 0, 0, 0, 0, 0, 0, 0, 91, 0,
+ 0, 95, 95, 95, 95, 95, 95, 95, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,
+ 0, 0, 0, 0, 93, 93, 93, 0, 93, 93,
+ 93, 93, 91, 0, 0, 0, 0, 0, 0, 0,
+ 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
- 93, 190, 0, 0, 0, 0, 0, 0, 0, 0,
+ 194, 0, 0, 0, 91, 0, 0, 0, 0, 0,
+ 0, 0, 0, 105, 0, 0, 0, 0, 0, 0,
+ 0, 0, 89, 0, 0, 0, 0, 89, 89, 89,
+ 0, 89, 89, 89, 89, 0, 0, 0, 0, 0,
+ 0, 93, 93, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
+ 89, 89, 89, 0, 0, 93, 93, 93, 93, 93,
+ 93, 93, 105, 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, 93, 93, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 104, 0, 0, 0, 0, 0,
- 0, 0, 93, 93, 93, 93, 0, 0, 89, 106,
- 0, 0, 0, 89, 89, 89, 0, 89, 89, 89,
- 89, 0, 0, 0, 0, 0, 104, 0, 0, 89,
- 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
- 89, 89, 89, 89, 89, 89, 89, 89, 89, 91,
- 110, 0, 0, 0, 91, 91, 91, 0, 91, 91,
- 91, 91, 0, 0, 0, 0, 0, 0, 106, 0,
+ 0, 0, 0, 0, 89, 89, 105, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 107, 89, 89,
+ 89, 89, 89, 89, 89, 0, 0, 0, 105, 91,
+ 0, 0, 0, 0, 91, 91, 91, 0, 91, 91,
+ 91, 91, 0, 0, 0, 0, 0, 0, 0, 0,
91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
- 89, 89, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 106, 0, 0, 0, 0, 0, 0, 110,
- 89, 89, 89, 89, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 91, 91, 0, 106, 0, 0, 0, 0, 0,
- 0, 0, 0, 110, 0, 0, 0, 0, 0, 0,
- 0, 91, 91, 91, 91, 0, 0, 108, 0, 147,
- 0, 104, 0, 0, 0, 0, 104, 104, 104, 0,
- 104, 104, 104, 104, 0, 110, 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, 104, 147, 0, 147, 147, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 108, 0, 147, 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, 104, 0, 0, 0, 0, 0,
- 108, 0, 147, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 104, 104, 104, 104, 0, 0, 106,
- 0, 0, 0, 0, 106, 106, 106, 0, 106, 106,
- 106, 106, 108, 0, 147, 0, 0, 0, 0, 0,
- 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
- 106, 106, 106, 106, 106, 106, 106, 106, 106, 106,
- 110, 0, 0, 0, 0, 110, 110, 110, 0, 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,
- 110, 106, 106, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 80, 0, 0, 0,
- 0, 106, 106, 106, 106, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 110, 110, 0, 0, 0, 0, 0, 80,
- 0, 0, 0, 0, 0, 0, 80, 0, 0, 0,
- 0, 0, 110, 110, 110, 110, 0, 108, 0, 0,
- 0, 0, 108, 108, 108, 80, 108, 108, 108, 108,
- 147, 147, 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, 108, 0, 80,
- 0, 0, 80, 0, 0, 0, 147, 147, 147, 147,
- 147, 147, 147, 147, 147, 147, 147, 147, 147, 147,
- 147, 147, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 80, 0, 0, 0, 147, 147, 147, 147, 108,
- 108, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 89, 0, 147, 147, 147, 147, 147, 86, 108,
- 108, 108, 108, 88, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 107, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 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,
+ 107, 91, 91, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 91, 91, 91, 91, 91,
+ 91, 91, 107, 0, 0, 0, 0, 0, 0, 0,
+ 0, 114, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 105, 0, 0, 0, 0, 105, 105,
+ 105, 0, 105, 105, 105, 105, 0, 0, 0, 0,
+ 0, 0, 0, 0, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 0, 0, 0, 0, 0, 0,
+ 114, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 114, 105, 105, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 109, 0, 0, 0, 105,
+ 105, 105, 105, 105, 105, 105, 114, 107, 0, 0,
+ 0, 0, 107, 107, 107, 0, 107, 107, 107, 107,
+ 0, 0, 0, 0, 0, 0, 0, 0, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 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, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 109, 107,
+ 107, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 107, 107, 107, 107, 107, 107, 107,
+ 109, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 114, 0, 0, 0, 0, 114, 114, 114, 80,
+ 114, 114, 114, 114, 0, 0, 0, 0, 0, 0,
+ 0, 0, 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 80, 0, 0, 0, 0, 0, 0, 80,
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, 80, 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,
+ 0, 0, 0, 114, 114, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 80, 0, 0, 80, 0, 114, 114, 114,
+ 114, 114, 114, 114, 151, 109, 0, 0, 0, 0,
+ 109, 109, 109, 0, 109, 109, 109, 109, 0, 0,
+ 0, 0, 0, 0, 80, 0, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 0, 151, 0, 151,
+ 151, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 151, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 109, 109, 0,
+ 0, 0, 0, 0, 0, 0, 0, 151, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 109, 109, 109, 109, 109, 109, 109, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 151,
+ 0, 0, 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, 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, 80, 80, 0, 0, 0, 0, 0, 80,
- 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
- 0, 0, 80, 80, 80, 80, 6, 0, 80, 80,
- 0, 0, 0, 6, 0, 0, 0, 0, 6, 0,
- 80, 80, 80, 80, 80, 0, 0, 0, 80, 80,
- 80, 0, 0, 0, 0, 278, 279, 49, 8, 9,
- 0, 50, 0, 0, 0, 0, 51, 10, 11, 280,
- 281, 14, 15, 16, 17, 18, 19, 20, 21, 0,
- 0, 0, 0, 0, 6, 0, 0, 0, 0, 6,
+ 80, 80, 80, 0, 0, 80, 80, 80, 80, 0,
+ 0, 80, 80, 247, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 80, 80, 80, 80, 80, 80, 80,
+ 80, 80, 0, 0, 0, 80, 80, 80, 80, 80,
+ 80, 0, 0, 0, 0, 151, 151, 0, 0, 0,
+ 247, 0, 0, 0, 247, 247, 247, 247, 247, 0,
+ 247, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 247, 247, 0, 247, 0, 0, 0, 0,
+ 0, 151, 151, 151, 151, 151, 151, 151, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 93, 0, 0,
+ 0, 0, 0, 0, 90, 0, 247, 0, 0, 92,
+ 151, 151, 151, 151, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 151, 151,
+ 151, 151, 151, 151, 151, 151, 151, 0, 247, 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, 6, 0, 0, 0,
- 0, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 22, 0, 77, 78, 79, 80, 23, 24,
- 0, 0, 25, 0, 26, 0, 0, 0, 0, 0,
- 0, 0, 81, 82, 83, 84, 85, 27, 89, 28,
- 0, 0, 0, 29, 30, 104, 0, 0, 0, 0,
- 88, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 31, 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, 0, 0, 0, 0, 32, 0, 0,
0, 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, 0, 6, 0, 0, 0, 0, 6, 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, 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, 105, 0, 0, 0, 0,
- 0, 0, 104, 298, 0, 0, 0, 88, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 6, 0, 0, 0, 247, 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, 247, 0, 6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 247, 0, 0, 247, 0, 0,
+ 0, 289, 290, 49, 8, 9, 0, 50, 0, 0,
+ 0, 0, 51, 10, 11, 291, 292, 14, 15, 16,
+ 17, 18, 19, 20, 21, 0, 93, 0, 0, 0,
+ 0, 0, 0, 108, 0, 0, 0, 0, 92, 0,
+ 0, 247, 247, 247, 247, 247, 247, 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, 0, 0, 25, 91,
+ 26, 0, 0, 0, 0, 0, 0, 0, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 27, 0, 28,
+ 0, 0, 0, 0, 0, 0, 29, 30, 0, 6,
+ 6, 6, 6, 6, 0, 6, 0, 0, 0, 0,
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, 87, 6,
- 0, 0, 0, 0, 0, 0, 0, 6, 6, 6,
- 6, 6, 6, 0, 6, 0, 0, 0, 6, 6,
- 0, 0, 0, 0, 0, 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,
- 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, 146, 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, 89,
- 0, 77, 78, 79, 80, 0, 86, 147, 148, 0,
- 0, 88, 0, 0, 0, 0, 0, 0, 0, 81,
- 82, 83, 84, 85, 0, 0, 0, 149, 150, 151,
- 29, 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, 0, 0,
- 0, 0, 87, 0, 0, 0, 0, 0, 0, 0,
+ 6, 6, 6, 0, 109, 0, 0, 0, 0, 0,
+ 0, 108, 309, 0, 0, 0, 92, 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, 91, 6, 0,
+ 0, 0, 0, 0, 0, 0, 6, 6, 6, 6,
+ 6, 6, 6, 6, 6, 6, 0, 6, 0, 0,
+ 0, 0, 0, 0, 6, 6, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 47, 48, 49, 8, 0, 0, 50, 0, 124, 125,
+ 126, 51, 127, 128, 129, 130, 0, 0, 0, 0,
+ 0, 0, 0, 0, 131, 132, 133, 134, 135, 136,
+ 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
+ 147, 148, 149, 150, 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, 109, 0, 77,
+ 78, 79, 80, 0, 90, 151, 152, 0, 0, 92,
+ 270, 0, 0, 0, 0, 0, 0, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 0, 0, 0, 153,
+ 154, 155, 156, 157, 158, 29, 0, 0, 47, 48,
+ 49, 8, 0, 0, 50, 0, 0, 0, 0, 51,
+ 0, 0, 52, 53, 0, 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, 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, 93, 0, 77, 78, 79,
+ 80, 0, 90, 0, 0, 0, 0, 92, 0, 0,
+ 0, 0, 0, 0, 0, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 0, 0, 0, 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, 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, 91, 0,
0, 0, 0, 0, 0, 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,
+ 0, 47, 48, 49, 8, 0, 0, 50, 0, 0,
+ 0, 0, 51, 0, 0, 52, 53, 0, 0, 0,
+ 0, 109, 0, 0, 0, 0, 0, 0, 108, 0,
+ 0, 0, 0, 92, 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, 91, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 29, 0, 0, 47,
+ 48, 49, 8, 0, 0, 50, 0, 0, 0, 0,
+ 51, 0, 0, 52, 53, 0, 0, 0, 0, 109,
+ 0, 0, 0, 0, 0, 0, 90, 0, 0, 0,
+ 0, 92, 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, 91, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 29, 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, 0, 109, 0, 0, 0, 0,
+ 0, 0, 277, 0, 0, 0, 0, 92, 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, 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, 91, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 81, 82, 83, 84, 85, 86, 87, 88,
+ 89, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 29, 0, 0, 47, 48, 49, 8, 0, 0, 50,
0, 0, 0, 0, 51, 0, 0, 52, 53, 0,
- 0, 0, 0, 105, 0, 0, 0, 0, 0, 0,
- 86, 0, 0, 0, 0, 88, 0, 0, 0, 0,
+ 0, 0, 0, 93, 0, 0, 0, 0, 0, 0,
+ 271, 0, 0, 0, 0, 92, 270, 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, 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,
- 47, 48, 49, 8, 0, 0, 50, 0, 0, 0,
- 0, 51, 0, 0, 52, 53, 0, 0, 0, 0,
- 105, 0, 0, 0, 0, 0, 0, 269, 0, 0,
- 0, 0, 88, 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, 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, 89, 0, 47, 48, 49,
- 8, 0, 104, 50, 407, 0, 0, 88, 51, 0,
- 0, 52, 53, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 77, 78, 79, 80, 91, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 29, 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, 0, 93,
+ 0, 0, 0, 0, 0, 0, 108, 0, 419, 0,
+ 0, 92, 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, 91, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 29, 0, 0, 267, 48, 49,
+ 0, 0, 0, 268, 0, 0, 0, 0, 269, 0,
+ 0, 52, 53, 0, 0, 0, 0, 93, 0, 0,
+ 0, 0, 0, 0, 108, 0, 0, 0, 0, 92,
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, 87, 0,
+ 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,
+ 91, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 81, 82, 83, 84, 85, 89,
- 0, 0, 0, 0, 0, 29, 104, 0, 0, 0,
- 0, 88, 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, 0, 0, 40, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 87, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 0, 32, 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, 31, 0,
- 0, 81, 82, 83, 84, 85, 0, 89, 0, 47,
- 48, 49, 29, 0, 86, 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, 47, 48, 49, 0, 0, 0, 50,
+ 0, 0, 0, 0, 51, 0, 0, 52, 53, 0,
+ 0, 0, 0, 93, 0, 0, 0, 0, 0, 0,
+ 90, 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, 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, 89, 0, 47, 48, 49, 0, 0, 269, 50,
- 0, 0, 0, 88, 51, 0, 0, 52, 53, 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, 54, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 87, 0, 0, 0, 0, 66,
+ 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, 89, 0, 0, 0,
- 0, 0, 0, 104, 0, 0, 0, 0, 88, 22,
- 81, 82, 83, 84, 85, 23, 24, 0, 0, 25,
- 0, 26, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 47, 48, 49, 27, 0, 28, 50, 0, 0,
- 29, 30, 51, 0, 0, 52, 53, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 87,
+ 0, 0, 77, 78, 79, 80, 91, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 0,
+ 0, 0, 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, 93, 0, 0, 0, 0, 0, 0, 277, 0,
+ 0, 0, 0, 92, 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,
+ 77, 78, 79, 80, 91, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 81, 82,
- 83, 84, 85, 0, 0, 47, 48, 49, 0, 0,
- 0, 50, 0, 0, 32, 0, 51, 0, 0, 52,
+ 83, 84, 85, 86, 87, 88, 89, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 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, 93, 0, 0,
+ 0, 0, 0, 0, 108, 0, 0, 0, 0, 92,
+ 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,
+ 91, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 31, 0, 0, 0,
- 6, 0, 0, 0, 54, 55, 56, 57, 58, 59,
+ 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, 6, 0, 77, 78, 79, 80, 0, 0,
- 47, 48, 49, 0, 0, 0, 50, 0, 0, 0,
- 0, 51, 81, 82, 83, 84, 85, 0, 0, 0,
+ 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, 86, 87, 88,
+ 89, 0, 0, 0, 0, 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, 0,
- 6, 7, 0, 8, 9, 0, 0, 81, 82, 83,
- 84, 85, 10, 11, 12, 13, 14, 15, 16, 17,
- 18, 19, 20, 21, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 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, 47, 48, 49, 0, 0, 0, 50, 0, 0,
+ 0, 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, 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, 0, 0, 0, 29, 30,
- 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,
+ 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,
+ 0, 0, 0, 0, 0, 0, 0, 0, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89,
};
short yycheck[] = { 24,
- 43, 0, 45, 28, 119, 30, 94, 44, 37, 260,
- 58, 36, 4, 42, 43, 105, 45, 37, 47, 43,
- 44, 45, 42, 43, 99, 45, 0, 47, 0, 260,
- 0, 60, 24, 62, 96, 0, 35, 0, 30, 258,
- 37, 156, 41, 101, 36, 42, 43, 96, 45, 43,
- 47, 45, 58, 348, 349, 61, 114, 271, 272, 41,
- 258, 86, 44, 88, 89, 94, 96, 86, 62, 41,
- 350, 351, 44, 41, 94, 43, 101, 45, 41, 41,
- 105, 44, 44, 59, 335, 134, 43, 59, 45, 114,
- 43, 44, 45, 0, 59, 0, 59, 94, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 101,
- 135, 115, 116, 138, 139, 140, 135, 59, 206, 93,
- 112, 93, 114, 93, 149, 150, 33, 119, 93, 40,
- 93, 156, 347, 40, 365, 61, 41, 262, 45, 44,
- 354, 355, 335, 233, 234, 40, 40, 237, 238, 40,
- 40, 125, 40, 125, 59, 125, 43, 44, 45, 40,
- 125, 40, 125, 40, 156, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 0, 40, 0, 91, 40, 261, 262, 93, 96,
- 215, 216, 40, 61, 37, 257, 215, 216, 290, 42,
- 43, 263, 45, 0, 47, 230, 268, 260, 233, 234,
- 235, 260, 237, 238, 263, 262, 123, 60, 267, 62,
- 125, 258, 41, 0, 258, 44, 43, 257, 45, 271,
- 272, 260, 0, 263, 41, 41, 37, 264, 268, 301,
- 59, 42, 59, 94, 269, 302, 47, 239, 240, 257,
- 269, 94, 244, 318, 319, 320, 321, 322, 46, 93,
- 37, 376, 305, 125, 41, 42, 43, 44, 45, 93,
- 47, 346, 262, 257, 93, 43, 93, 45, 303, 262,
- 41, 301, 59, 60, 304, 62, 41, 44, 41, 41,
- 41, 59, 264, 94, 91, 44, 44, 41, 347, 348,
- 41, 264, 41, 303, 348, 257, 125, 262, 125, 44,
- 360, 304, 354, 355, 260, 41, 93, 41, 290, 348,
- 349, 350, 351, 352, 353, 93, 123, 290, 377, 301,
- 41, 380, 304, 41, 345, 262, 365, 0, 301, 41,
- 345, 304, 345, 345, 156, 370, 371, 372, 125, 374,
- 257, 258, 259, 260, 261, 30, 263, 125, 35, 264,
- 382, 268, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, -1, -1, 348, 349, -1, 404,
- -1, -1, 407, -1, 376, 290, 349, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 0, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, 0, -1, -1, -1, -1, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 332, 333, 334, -1, 336,
- 337, 338, 339, 340, 341, -1, -1, 344, -1, 346,
- -1, -1, 0, 348, 349, 264, 91, 354, 355, 356,
- 357, 358, 359, 0, 361, 0, -1, 59, 365, 366,
- 257, 258, -1, 260, 261, -1, 0, 0, -1, -1,
- 59, 290, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, -1, -1, 0, 264, 33, -1,
- -1, 93, 37, -1, 0, 40, 41, 42, 43, 44,
- 45, 59, 47, -1, 93, 26, -1, -1, 41, 352,
- 353, 44, 59, 290, 59, 60, -1, 62, -1, -1,
- -1, 42, 91, 125, 301, 59, 59, 304, -1, 0,
- 349, -1, -1, -1, -1, 93, 125, 334, -1, -1,
- -1, -1, -1, 340, 341, 59, 93, 344, 93, 346,
- -1, 96, -1, 59, -1, -1, -1, -1, -1, 93,
- 93, -1, 359, -1, 361, 0, 87, 125, 365, 366,
- -1, 348, 349, 350, 351, 352, 353, 0, 125, 93,
- 125, -1, -1, -1, -1, -1, -1, 93, 59, -1,
- -1, 125, 125, -1, -1, -1, -1, -1, 33, -1,
- -1, -1, 37, -1, -1, 40, 41, 42, 43, 44,
- 45, 125, 47, 260, -1, 260, 263, -1, 41, 125,
- -1, 44, 93, 268, 59, 60, -1, 62, 273, 274,
- 275, 276, 277, 278, -1, 280, 59, 158, -1, -1,
- -1, 162, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, -1, -1, 125, -1, -1, -1, 93, 37,
- -1, 96, -1, -1, 42, 43, 44, 45, -1, 47,
- 93, 37, -1, -1, -1, -1, 42, 43, 44, 45,
- -1, 47, 60, -1, 62, -1, -1, -1, -1, -1,
- 125, 260, -1, -1, 60, -1, 62, -1, -1, 268,
- 347, 348, 125, -1, 273, 274, 275, 276, 277, 278,
- -1, 280, 257, 258, 259, 260, 94, -1, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 94, -1,
- 377, 264, -1, 380, -1, -1, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 290, -1, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, -1,
- -1, 336, 337, 338, 339, -1, -1, 342, 343, -1,
- 345, -1, -1, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, 357, 358, -1, -1, 349, 362, 363, 364,
- 365, -1, 257, 258, 259, 260, -1, -1, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 359, -1,
- -1, 264, 363, 364, -1, -1, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 290, -1, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 0,
- -1, 336, 337, 338, 339, -1, -1, 342, 343, -1,
- 345, -1, -1, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, 357, 358, 91, -1, 349, 362, 363, 364,
- 365, -1, 33, -1, -1, 301, 37, -1, 304, 40,
- 41, 42, 43, 44, 45, -1, 47, -1, -1, -1,
- -1, -1, -1, 0, -1, -1, -1, -1, 59, 60,
- -1, 62, -1, -1, -1, -1, -1, -1, -1, 0,
- 348, 349, 350, 351, 352, 353, -1, -1, -1, -1,
- -1, -1, 348, 349, 350, 351, 352, 353, -1, -1,
- -1, -1, 93, -1, 41, 96, -1, 44, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
- 41, -1, 59, 44, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 125, -1, -1, -1, 59, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 33, -1, -1, -1, 37, 93, -1, 40, 41,
- 42, 43, 44, 45, -1, 47, -1, -1, -1, -1,
- -1, -1, 93, -1, -1, -1, -1, 59, 60, -1,
- 62, -1, -1, -1, -1, -1, -1, -1, 125, -1,
- 37, -1, -1, -1, -1, 42, 43, -1, 45, -1,
- 47, -1, -1, 260, 125, -1, -1, -1, -1, -1,
- -1, 93, -1, 60, 96, 62, 273, 274, 275, 276,
- 277, 278, -1, 280, -1, 37, -1, -1, -1, -1,
- 42, 43, 44, 45, -1, 47, -1, -1, -1, -1,
- -1, -1, -1, 125, -1, -1, -1, 94, 60, -1,
- 62, -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, 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,
- 301, -1, -1, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 317, 264, -1, -1,
- -1, -1, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, 332, 333, 264, -1, 336, 337, 338, 339, -1,
- -1, 342, 343, 290, 345, -1, -1, 348, 349, 350,
- 351, 352, 353, 354, 355, 356, 357, 358, -1, 290,
- -1, 362, 363, 364, 365, 257, 258, 259, 260, -1,
+ 103, 0, 0, 28, 123, 30, 43, 37, 45, 44,
+ 260, 36, 42, 43, 105, 45, 98, 47, 0, 59,
+ 260, 37, 260, 0, 348, 349, 42, 118, 268, 37,
+ 60, 47, 62, 0, 42, 43, 44, 45, 58, 47,
+ 4, 61, 0, 41, 163, 41, 44, 59, 44, 271,
+ 272, 258, 60, 35, 62, 43, 43, 45, 45, 41,
+ 24, 59, 350, 351, 94, 90, 30, 92, 93, 41,
+ 258, 43, 36, 45, 62, 0, 90, 100, 94, 58,
+ 105, 40, 37, 347, 109, 61, 94, 42, 43, 96,
+ 45, 91, 47, 118, 93, 93, 0, 335, 119, 120,
+ 335, 59, 127, 128, 129, 130, 131, 132, 133, 134,
+ 135, 136, 137, 138, 139, 138, 93, 142, 143, 144,
+ 41, 262, 372, 44, 91, 139, 125, 125, 153, 154,
+ 40, 213, 354, 355, 59, 93, 290, 41, 163, 94,
+ 44, 105, 271, 272, 40, 0, 0, 0, 125, 43,
+ 44, 45, 116, 40, 118, 59, 123, 40, 40, 123,
+ 40, 40, 0, 40, 109, 268, 269, 125, 93, 43,
+ 44, 45, 197, 198, 199, 200, 201, 202, 203, 204,
+ 205, 206, 207, 208, 209, 210, 211, 212, 40, 93,
+ 272, 155, 156, 157, 40, 33, 40, 222, 223, 163,
+ 125, 61, 40, 260, 59, 59, 59, 45, 222, 223,
+ 258, 262, 237, 41, 41, 240, 241, 242, 264, 244,
+ 245, 125, 94, 258, 37, 354, 355, 0, 302, 42,
+ 43, 46, 45, 257, 47, 43, 44, 45, 93, 93,
+ 93, 125, 96, 96, 267, 93, 271, 60, 271, 62,
+ 257, 274, 277, 91, 93, 358, 263, 271, 96, 262,
+ 260, 268, 257, 277, 41, 262, 264, 91, 305, 388,
+ 125, 125, 125, 273, 274, 275, 276, 277, 278, 41,
+ 280, 94, 246, 247, 44, 123, 59, 251, 0, 314,
+ 257, 258, 290, 260, 261, 240, 241, 41, 41, 244,
+ 245, 41, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279, 280, 318, 319, 320, 321, 322, 44,
+ 93, 33, 352, 353, 44, 37, 41, 41, 40, 41,
+ 42, 43, 44, 45, 41, 47, 359, 360, 303, 348,
+ 348, 349, 350, 351, 352, 353, 301, 59, 60, 304,
+ 62, 349, 125, 262, 44, 257, 304, 382, 383, 384,
+ 264, 386, 364, 260, 41, 41, 389, 334, 41, 392,
+ 37, 41, 345, 340, 341, 42, 43, 344, 45, 346,
+ 47, 93, 0, 41, 96, 345, 290, 262, 345, 260,
+ 30, 416, 345, 60, 419, 62, 363, 301, 365, 163,
+ 304, 394, 35, 257, 257, 372, 373, -1, -1, 263,
+ 263, -1, -1, 125, 268, 268, -1, -1, -1, 257,
+ 258, 259, 260, 261, 388, 263, -1, 94, -1, -1,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, -1, 348, 349, 46, 301, 301, 273,
+ 274, 275, 276, 277, 278, -1, 280, 37, -1, -1,
+ -1, -1, 42, 43, -1, 45, -1, 47, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ 60, -1, 62, -1, -1, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, 334, -1, 336, 337,
+ 338, 339, 340, 341, -1, 37, 344, -1, 346, -1,
+ 42, 43, -1, 45, 94, 47, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, 363, -1, 365, 96, -1,
+ -1, -1, -1, -1, 372, 373, -1, 350, 351, 352,
+ 353, -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,
+ 272, -1, 94, 91, -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, 301,
-1, -1, 304, 305, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, 317, -1, -1, -1, 286,
+ 312, 313, 314, 315, 316, 317, -1, -1, -1, -1,
-1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- 332, 333, 0, -1, 336, 337, 338, 339, -1, -1,
+ 332, 333, 289, -1, 336, 337, 338, 339, 0, -1,
342, 343, -1, 345, -1, -1, 348, 349, 350, 351,
- 352, 353, 354, 355, 356, 357, 358, -1, -1, -1,
- 362, 363, 364, 365, -1, 33, -1, -1, -1, 37,
- -1, -1, 40, 41, 42, 43, 44, 45, -1, 47,
- -1, 348, 349, 350, 351, 352, 353, -1, 86, -1,
- -1, 59, 60, -1, 62, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 37, -1, -1, -1, -1, 42,
- 43, -1, 45, -1, 47, -1, 348, 349, 350, 351,
- 352, 353, -1, -1, -1, 93, -1, 60, 96, 62,
- -1, -1, -1, 131, 132, 133, -1, -1, -1, -1,
- -1, 0, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 125, 156, -1,
- -1, 94, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 33, -1, -1, -1, 37, -1,
- -1, 40, 41, 42, 43, 44, 45, -1, 47, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 197,
- 59, 60, -1, 62, -1, -1, -1, 205, -1, -1,
- 37, -1, -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, -1, -1,
+ 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, -1, -1, -1, 366, 367, 368, 369, 370, 371,
+ 372, 33, -1, -1, -1, 37, -1, -1, 40, 41,
+ 42, 43, 44, 45, 267, 47, -1, -1, 271, -1,
+ 260, 348, 349, 350, 351, 352, 353, 59, 60, 257,
+ 62, -1, -1, -1, -1, 263, -1, -1, -1, -1,
+ 268, -1, -1, -1, -1, -1, -1, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
+ -1, 93, -1, 0, 96, -1, -1, -1, -1, -1,
+ -1, 0, 260, 301, -1, -1, 336, 337, 338, 339,
+ 268, 0, 0, -1, 0, 273, 274, 275, 276, 277,
+ 278, -1, 280, 125, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, -1, 0, -1, 359, 360, 348, 349,
+ 350, 351, 352, 353, 43, -1, 45, 33, -1, 0,
+ 0, 37, 59, -1, 40, 41, 42, 43, 44, 45,
+ 59, 47, 372, -1, -1, -1, 389, -1, -1, 392,
+ 59, 59, -1, 59, 60, -1, 62, 43, -1, 45,
+ -1, -1, -1, -1, -1, -1, 93, -1, -1, -1,
+ -1, 37, -1, 59, 93, -1, 42, 43, 44, 45,
+ -1, 47, -1, -1, 93, 93, -1, 93, 59, 59,
+ 96, -1, -1, -1, 60, 37, 62, -1, 125, -1,
+ 42, 43, 44, 45, -1, 47, 125, 93, -1, -1,
+ -1, -1, -1, -1, -1, -1, 125, 125, 60, 125,
+ 62, -1, 93, 93, -1, -1, -1, -1, 94, -1,
+ -1, -1, -1, -1, -1, 257, 258, 259, 260, 125,
+ -1, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, -1, 94, -1, 125, 125, -1, -1, -1, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+ -1, -1, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, -1, -1, -1, -1,
+ -1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, -1, -1, 336, 337, 338, 339, -1, -1,
+ 342, 343, -1, 345, -1, -1, 348, 349, 350, 351,
+ 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, -1, -1, -1, 366, 367, 368, 369, 370, 371,
+ 372, 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, 301, -1, -1, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, -1, -1, -1, -1, -1, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, -1, -1,
+ 336, 337, 338, 339, 0, 301, 342, 343, 304, 345,
+ -1, -1, 348, 349, 350, 351, 352, 353, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, -1, -1, -1,
+ 366, 367, 368, 369, 370, 371, 372, 33, -1, -1,
+ -1, 37, -1, -1, 40, 41, 42, 43, 44, 45,
+ -1, 47, 348, 349, 350, 351, 352, 353, 0, -1,
+ -1, -1, -1, 59, 60, -1, 62, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 348, 349, 350, 351,
+ 352, 353, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 93, -1, 41,
+ 96, 90, 44, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 59, -1, -1,
+ 0, -1, -1, -1, -1, -1, -1, -1, -1, 125,
+ -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 135, 136, 137, 138,
+ -1, 93, -1, 33, -1, -1, -1, 37, -1, -1,
+ 40, 41, 42, 43, 44, 45, -1, 47, -1, -1,
+ -1, -1, -1, 41, 163, -1, 44, -1, -1, 59,
+ 60, -1, 62, 125, -1, -1, -1, -1, -1, -1,
+ -1, 59, -1, -1, -1, -1, -1, 37, -1, -1,
+ -1, -1, 42, 43, 44, 45, -1, 47, -1, -1,
+ -1, -1, -1, 93, -1, 204, 96, -1, -1, -1,
+ 60, 37, 62, 212, -1, 93, 42, 43, -1, 45,
+ -1, 47, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 60, 125, 62, -1, -1, -1,
+ -1, -1, -1, -1, 94, -1, -1, 125, -1, -1,
+ -1, 257, 258, 259, 260, -1, -1, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, -1, 94, -1,
+ -1, -1, 271, -1, -1, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 300, 301, -1, -1, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, 264, -1, -1, 314, -1, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, -1, -1,
+ 336, 337, 338, 339, -1, -1, 342, 343, 290, 345,
+ -1, -1, 348, 349, 350, 351, 352, 353, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, -1, -1, -1,
+ 366, 367, 368, 369, 370, 371, 372, 257, 258, 259,
+ 260, -1, -1, 263, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, 382, 383, -1, 264, 46, -1, -1,
+ -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 301, 290, -1, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
+ -1, -1, -1, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, -1, -1, 336, 337, 338, 339,
+ 0, 301, 342, 343, 304, 345, -1, -1, 348, 349,
+ 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, -1, -1, -1, 366, 367, 368, 369,
+ 370, 371, 372, 33, -1, -1, -1, 37, -1, -1,
+ 40, 41, 42, 43, 44, 45, -1, 47, 348, 349,
+ 350, 351, 352, 353, -1, -1, -1, -1, -1, 59,
60, -1, 62, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 348, 349, 350, 351, 352, 353, -1, -1,
37, -1, -1, -1, -1, 42, 43, 44, 45, -1,
- 47, -1, -1, -1, -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, 257,
+ 47, -1, -1, 93, -1, -1, 96, -1, -1, -1,
+ -1, -1, -1, 60, -1, 62, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
+ -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 94, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, 317, 33,
+ -1, -1, -1, -1, -1, -1, 40, 41, -1, 43,
+ 44, 45, 271, 272, -1, -1, -1, 336, 337, 338,
+ 339, -1, -1, -1, -1, 59, 60, -1, 62, -1,
+ -1, -1, -1, -1, -1, 354, 355, 356, 357, 358,
+ 359, 360, 361, 362, -1, -1, -1, -1, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, 317, 93,
+ -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 336, 337, 338,
+ 339, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 125, -1, -1, -1, 354, 355, 356, 357, 358,
+ 359, 360, 361, 362, -1, -1, -1, 257, 258, 259,
+ 260, -1, -1, 263, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, -1, -1, -1, -1, 46, -1, -1,
+ -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 301, -1, -1, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
+ -1, -1, -1, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, -1, -1, 336, 337, 338, 339,
+ -1, -1, 342, 343, 301, 345, -1, 304, 348, 349,
+ 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, -1, -1, -1, 366, 367, 368, 369,
+ 370, 371, 372, 257, 258, 259, 260, -1, -1, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, -1,
+ -1, 348, 349, 350, 351, 352, 353, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, 300, 301, -1, -1,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
+ -1, -1, 336, 337, 338, 339, 0, -1, 342, 343,
+ -1, 345, -1, -1, 348, 349, 350, 351, 352, 353,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, -1,
+ -1, -1, 366, 367, 368, 369, 370, 371, 372, 33,
+ -1, -1, -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, -1, -1, -1, -1, -1, -1, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, 317, 93,
+ -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 336, 337, 338,
+ 339, -1, 0, -1, -1, -1, -1, -1, -1, -1,
+ -1, 125, -1, -1, -1, 354, 355, 356, 357, 358,
+ 359, 360, 361, 362, -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, 37, -1, -1, -1, -1,
+ 42, 43, -1, 45, -1, 47, -1, 37, -1, -1,
+ -1, -1, 42, 43, -1, 45, -1, 47, 60, -1,
+ 62, -1, -1, -1, -1, 93, -1, -1, 96, -1,
+ 60, -1, 62, 37, -1, -1, -1, -1, 42, 43,
+ -1, 45, -1, 47, -1, -1, -1, -1, -1, -1,
+ -1, -1, 94, -1, -1, -1, 60, 125, 62, -1,
+ -1, -1, -1, -1, 94, -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,
+ 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, 301, -1, -1,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
+ -1, -1, 336, 337, 338, 339, -1, -1, 342, 343,
+ -1, 345, -1, -1, 348, 349, 350, 351, 352, 353,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, -1,
+ -1, -1, 366, 367, 368, 369, 370, 371, 372, 257,
258, 259, 260, -1, -1, 263, 264, 265, 266, 267,
- 268, 269, 270, 271, 272, 303, -1, 94, -1, -1,
+ 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, 301, -1, -1, 304, 305, 306, 307,
308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
-1, -1, -1, -1, -1, 323, 324, 325, 326, 327,
328, 329, 330, 331, 332, 333, -1, -1, 336, 337,
- 338, 339, 370, 371, 342, 343, -1, 345, -1, -1,
+ 338, 339, 0, -1, 342, 343, -1, 345, -1, -1,
348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
- 358, -1, -1, -1, 362, 363, 364, 365, 257, 258,
- 259, 260, -1, -1, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, -1, 348, 349, 350, 351, 352,
- 353, -1, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, 301, -1, -1, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 317, -1,
- -1, -1, 289, -1, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, 332, 333, 0, -1, 336, 337, 338,
- 339, -1, -1, 342, 343, -1, 345, -1, -1, 348,
- 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
- -1, -1, -1, 362, 363, 364, 365, -1, 33, -1,
- -1, -1, -1, -1, 301, 40, 41, 304, 43, 44,
- 45, 348, 349, 350, 351, 352, 353, -1, 348, 349,
- 350, 351, 352, 353, 59, 60, -1, 62, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 37, -1, -1,
- -1, -1, 42, 43, -1, 45, -1, 47, -1, -1,
- -1, 348, 349, 350, 351, 352, 353, -1, 93, -1,
- 60, 96, 62, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 0, -1, -1, -1, -1, -1,
+ 358, 359, 360, 361, 362, -1, -1, -1, 366, 367,
+ 368, 369, 370, 371, 372, 33, 348, 349, 350, 351,
+ 352, 353, 40, 41, -1, -1, 44, 26, 348, -1,
+ 350, 351, 352, 353, -1, -1, -1, -1, -1, -1,
+ -1, 59, 60, 42, 62, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 348, -1, 350, 351, 352, 353,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 125, -1, -1, -1, 94, -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, 93, -1, -1, 96, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 59, 60, -1, 62, -1, -1, -1,
- 37, -1, -1, -1, -1, 42, 43, -1, 45, -1,
- 47, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 60, -1, 62, -1, 93, -1, 37,
- 96, -1, -1, -1, 42, 43, -1, 45, -1, 47,
- -1, -1, -1, 37, -1, -1, -1, -1, 42, 43,
- 44, 45, 60, 47, 62, -1, -1, 94, -1, 125,
- -1, -1, -1, -1, -1, -1, 60, -1, 62, -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, -1, -1,
- 94, -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, 301, -1, -1, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, -1,
- -1, 336, 337, 338, 339, -1, -1, 342, 343, -1,
- 345, -1, -1, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, 357, 358, -1, -1, 46, 362, 363, 364,
- 365, 257, 258, 259, 260, -1, -1, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, -1, 348, -1,
- 350, 351, 352, 353, -1, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
- 296, 297, 298, 299, 300, 301, -1, -1, 304, 305,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, 317, -1, -1, -1, -1, -1, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, 332, 333, 0, -1,
- 336, 337, 338, 339, -1, -1, 342, 343, -1, 345,
- -1, -1, 348, 349, 350, 351, 352, 353, 354, 355,
- 356, 357, 358, -1, -1, -1, 362, 363, 364, 365,
- -1, 33, -1, -1, -1, -1, -1, 301, 40, 41,
- 304, 348, 44, 350, 351, 352, 353, -1, -1, -1,
+ -1, -1, 91, -1, -1, -1, -1, -1, 0, -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, 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, 350, 351, 352, 353, -1, -1, -1, -1,
- -1, -1, -1, -1, 348, 349, 350, 351, 352, 353,
+ 62, -1, -1, -1, -1, -1, 165, -1, -1, -1,
+ 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
+ 179, -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, 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, 125, -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, 301, -1, -1, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ -1, -1, -1, -1, -1, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, -1, -1, 336, 337,
+ 338, 339, -1, -1, 342, 343, -1, 345, -1, -1,
+ 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, -1, -1, -1, 366, 367,
+ 368, 369, 370, 371, 372, 257, 258, 259, 260, -1,
+ -1, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, -1, 371, -1, -1, -1, 375, 376, -1, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+ -1, -1, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, -1, -1, -1, -1,
+ -1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, -1, -1, 336, 337, 338, 339, 0, -1,
+ 342, 343, -1, 345, -1, -1, 348, 349, 350, 351,
+ 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, -1, -1, -1, 366, 367, 368, 369, 370, 371,
+ 372, 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, -1, -1, -1, -1, -1, -1, -1, -1,
- 33, 271, 272, -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, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 93, -1, -1, 96, -1, -1, 336, 337, 338, 339,
+ -1, 93, -1, -1, 96, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 354, 355, 356, 357, 358, -1,
- -1, -1, 125, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 0, -1, -1, -1, -1, -1,
+ -1, -1, -1, 125, -1, -1, -1, -1, 0, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 46, -1, -1, -1, -1, 257, 258, 259, 260, -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, 41,
+ -1, -1, 44, 59, -1, -1, 62, -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, 93, -1, -1,
+ 96, -1, -1, -1, -1, -1, -1, 37, -1, -1,
+ -1, 93, 42, 43, -1, 45, -1, 47, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 125,
+ 60, -1, 62, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 125, -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,
+ 272, -1, -1, -1, 94, -1, -1, -1, -1, 281,
282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
-1, -1, 304, 305, 306, 307, 308, 309, 310, 311,
@@ -1881,229 +2133,179 @@ short yycheck[] = { 24,
-1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
332, 333, -1, -1, 336, 337, 338, 339, -1, -1,
342, 343, -1, 345, -1, -1, 348, 349, 350, 351,
- 352, 353, 354, 355, 356, 357, 358, 46, -1, -1,
- 362, 363, 364, 365, 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, 301, -1,
- -1, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 317, -1, -1, -1, -1, -1,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
- 333, 0, -1, 336, 337, 338, 339, -1, -1, 342,
- 343, -1, 345, -1, -1, 348, 349, 350, 351, 352,
- 353, 354, 355, 356, 357, 358, -1, -1, -1, 362,
- 363, 364, 365, -1, 33, 271, 272, -1, -1, -1,
- -1, 40, 41, -1, -1, 44, -1, -1, -1, -1,
+ 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, -1, -1, -1, 366, 367, 368, 369, 370, 371,
+ 372, 257, 258, 259, 260, -1, -1, 263, -1, 265,
+ 266, 267, 268, 269, 270, 271, 272, -1, -1, -1,
+ -1, -1, 264, -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, 290, 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, 333, -1, -1,
+ 336, 337, 338, 339, 0, -1, 342, 343, -1, -1,
+ -1, -1, -1, -1, -1, -1, 286, -1, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, 349, -1, -1,
+ 366, 367, 368, 369, 370, 371, 372, 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, 348, 349,
+ 350, 351, 352, 353, -1, -1, -1, -1, -1, -1,
+ -1, -1, 0, -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,
- 59, 60, -1, 62, -1, -1, -1, -1, -1, -1,
- -1, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, 317, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, -1, -1, 96, -1, -1,
- 336, 337, 338, 339, -1, -1, -1, -1, -1, -1,
- 0, -1, -1, -1, -1, -1, -1, -1, 354, 355,
- 356, 357, 358, -1, -1, -1, 125, -1, -1, -1,
+ 0, -1, -1, -1, -1, -1, -1, -1, -1, 125,
+ -1, -1, -1, 41, -1, -1, 44, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
+ -1, 59, -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, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 317, -1,
+ -1, -1, -1, -1, -1, 93, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, -1, -1, 96, 336, 337, 338,
- 339, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 354, 355, 356, 357, 358,
- -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, 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, 301, -1, -1, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 317, -1,
- -1, -1, -1, -1, 323, 324, 325, 326, 327, 328,
- 329, 330, 331, 332, 333, -1, -1, 336, 337, 338,
- 339, -1, -1, 342, 343, -1, 345, -1, -1, 348,
- 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
- -1, -1, -1, 362, 363, 364, 365, 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, 301, -1, -1, 304, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
- -1, -1, -1, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, 332, 333, 0, -1, 336, 337, 338, 339,
- -1, -1, 342, 343, -1, 345, -1, -1, 348, 349,
- 350, 351, 352, 353, 354, 355, 356, 357, 358, -1,
- -1, -1, 362, 363, 364, 365, -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, 24, -1, -1, -1, -1,
- -1, 30, -1, -1, -1, -1, -1, 93, -1, -1,
- 96, -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, 125,
+ -1, -1, -1, 93, -1, -1, 96, 125, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 33, 86, -1, -1,
- -1, -1, -1, 40, 41, -1, -1, 44, -1, -1,
- -1, -1, 101, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, -1, -1, 114, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 131, 132, 133, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 93, -1, -1, 96,
- -1, -1, -1, -1, -1, -1, -1, 156, -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, 125, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 197, -1,
- -1, 257, 258, 259, 260, -1, 205, 263, -1, 265,
- 266, 267, 268, 269, 270, 271, 272, 40, -1, -1,
- -1, -1, -1, 46, -1, 281, 282, 283, 284, 285,
+ -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, -1, -1, 305,
+ 296, 297, 298, 299, 300, 301, -1, -1, 304, 305,
306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, 317, 318, 319, 320, 321, 322, 323, 324, 325,
+ 316, 317, -1, -1, -1, -1, -1, 323, 324, 325,
326, 327, 328, 329, 330, 331, 332, 333, -1, -1,
- 336, 337, 338, 339, -1, -1, 342, 343, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 354, 355,
- 356, 357, 358, -1, 303, -1, 362, 363, 364, 365,
- 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, 301, -1, -1, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, 370, 371, -1, -1, -1, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 332, 333, 0, -1, 336,
- 337, 338, 339, -1, -1, 342, 343, -1, 345, -1,
- -1, 348, 349, 350, 351, -1, -1, 354, 355, 356,
- 357, 358, -1, -1, -1, 362, 363, 364, 365, -1,
- 33, -1, -1, -1, -1, -1, -1, 40, 41, -1,
- -1, 44, -1, -1, 257, -1, -1, -1, -1, -1,
- 263, -1, -1, -1, -1, 268, 59, -1, 271, 272,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 336, 337, 338, 339, -1, -1, 342, 343, -1, 345,
+ -1, -1, 348, 349, 350, 351, 264, -1, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, -1, -1, -1,
+ 366, 367, 368, 369, 370, 371, 372, 257, 258, 259,
+ 260, -1, 290, 263, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, 301, -1, -1, 304, -1, -1, -1,
+ -1, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 301, -1, -1, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
+ -1, 349, -1, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, -1, -1, 336, 337, 338, 339,
+ 0, -1, 342, 343, -1, 345, -1, -1, 348, 349,
+ 350, 351, -1, -1, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, -1, -1, -1, 366, 367, 368, 369,
+ 370, 371, 372, 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, 0, -1, -1, -1, -1, -1, -1, -1, -1,
- 93, -1, -1, 96, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 317, -1, 0, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
+ -1, -1, -1, 93, -1, -1, 96, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 125, 336, 337, 338, 339, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 33,
- 59, 354, 355, 356, 357, 358, 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, 93, -1, -1, 96, -1, -1,
+ -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
+ -1, -1, -1, -1, -1, 125, -1, -1, -1, 41,
+ -1, -1, 44, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 59, -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, 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, -1, 93,
- -1, -1, 96, -1, -1, -1, 125, -1, -1, -1,
+ -1, -1, 96, 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, 125, -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, 301, -1,
- -1, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 317, -1, -1, -1, -1, -1,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
- 333, -1, -1, 336, 337, 338, 339, -1, 257, 342,
- 343, -1, 345, -1, 263, 348, 349, 350, 351, 268,
- -1, 354, 355, 356, 357, 358, -1, -1, -1, 362,
- 363, 364, 365, 257, 258, 259, 260, -1, -1, 263,
- -1, 265, 266, 267, 268, 269, 270, 271, 272, -1,
- -1, -1, 301, -1, -1, -1, -1, 281, 282, 283,
+ -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,
+ 300, -1, -1, -1, -1, 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, 333, -1, -1, 336, 337, 338, 339,
+ -1, -1, 342, 343, -1, -1, -1, -1, -1, -1,
+ -1, -1, 264, -1, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, -1, -1, -1, 366, 367, 368, 369,
+ 370, 371, 372, 257, 258, 259, 260, -1, 290, 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, -1,
- -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
+ 294, 295, 296, 297, 298, 299, 300, 301, -1, -1,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, 317, -1, -1, 348, 349, -1, 323,
324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
- 0, -1, 336, 337, 338, 339, -1, -1, 342, 343,
+ -1, -1, 336, 337, 338, 339, 0, -1, 342, 343,
+ -1, 345, -1, -1, 348, 349, -1, -1, -1, -1,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, -1,
+ -1, -1, 366, 367, 368, 369, 370, 371, 372, 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,
- 354, 355, 356, 357, 358, -1, -1, -1, 362, 363,
- 364, 365, -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, 0, -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, 93, -1, -1, 96, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
+ -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
+ -1, 125, -1, -1, -1, 41, -1, -1, 44, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 125, -1, -1, -1, -1,
+ -1, -1, -1, 59, -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, 33, 59, -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, 93, -1, -1,
- 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 59, -1, -1, 62, -1, -1, 93, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 93, -1, -1, 96, -1, -1, -1, 125,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 93, -1, -1, 96, 125,
-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, 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, 301, -1, -1, 304, 305, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
- -1, -1, -1, 323, 324, 325, 326, 327, 328, 329,
- 330, 331, 332, 333, -1, -1, 336, 337, 338, 339,
- -1, 257, 342, 343, -1, 345, -1, 263, 348, 349,
- -1, -1, 268, -1, 354, 355, 356, 357, 358, -1,
- -1, -1, 362, 363, 364, 365, 257, 258, 259, 260,
- -1, -1, 263, 264, 265, 266, 267, 268, 269, 270,
- 271, 272, -1, -1, -1, 301, -1, -1, -1, -1,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
- 301, -1, -1, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 317, -1, -1, -1,
- -1, -1, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, 332, 333, 0, -1, 336, 337, 338, 339, -1,
- -1, 342, 343, -1, 345, -1, -1, -1, 349, -1,
- -1, -1, -1, 354, 355, 356, 357, 358, -1, -1,
- -1, 362, 363, 364, 365, -1, 33, -1, -1, -1,
- -1, -1, -1, 40, 41, -1, 43, 44, 45, -1,
+ -1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 59, -1, -1, 62, -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, 301, -1, -1,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
+ -1, -1, 336, 337, 338, 339, -1, -1, 342, 343,
+ -1, 345, -1, -1, -1, 349, -1, -1, 264, -1,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, -1,
+ -1, -1, 366, 367, 368, 369, 370, 371, 372, 257,
+ 258, 259, 260, -1, 290, 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, -1, -1, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ -1, -1, -1, 349, -1, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, -1, -1, 336, 337,
+ 338, 339, 0, -1, 342, 343, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, -1, -1, -1, 366, 367,
+ 368, 369, 370, 371, 372, 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, -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, 0, -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, 33, -1, -1, -1, -1,
- -1, -1, 40, 41, -1, -1, 44, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 0, -1,
+ -1, -1, -1, -1, -1, -1, -1, 125, -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, 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, 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, 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,
- 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, -1, -1, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, -1, -1, -1, -1, -1, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 332, 333, -1, -1, 336,
- 337, 338, 339, -1, -1, 342, 343, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 354, 355, 356,
- 357, 358, -1, -1, -1, 362, 363, 364, 365, 257,
+ -1, -1, -1, 125, -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,
@@ -2111,115 +2313,148 @@ short yycheck[] = { 24,
298, 299, 300, -1, -1, -1, -1, 305, 306, 307,
308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
-1, -1, -1, -1, -1, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, 332, 333, 0, -1, 336, 337,
+ 328, 329, 330, 331, 332, 333, -1, -1, 336, 337,
338, 339, -1, -1, 342, 343, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 354, 355, 356, 357,
- 358, -1, -1, -1, 362, 363, 364, 365, -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,
+ 358, 359, 360, 361, 362, -1, -1, -1, 366, 367,
+ 368, 369, 370, 371, 372, 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, -1, -1, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, -1, -1, -1, -1,
+ -1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, -1, -1, 336, 337, 338, 339, 0, -1,
+ 342, 343, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, -1, -1, -1, 366, 367, 368, 369, 370, 371,
+ 372, 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, 0, -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, 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, 93, -1, -1, 96, -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, 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, 93, -1,
- -1, 96, -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,
- 125, -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, 300, -1, -1, -1,
- -1, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
- -1, -1, 336, 337, 338, 339, -1, -1, 342, 343,
+ -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,
- 354, 355, 356, 357, 358, -1, -1, -1, 362, 363,
- 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, 300, 0, -1, -1, -1,
- -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 33,
- -1, 336, 337, 338, 339, -1, 40, 342, 343, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 354,
- 355, 356, 357, 358, -1, 59, -1, 362, 363, 364,
- 365, -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, 93,
- -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 0, -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, 300, -1,
+ -1, -1, -1, -1, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, -1, -1, -1, -1,
+ -1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, -1, -1, 336, 337, 338, 339, -1, -1,
+ 342, 343, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, -1, -1, -1, 366, 367, 368, 369, 370, 371,
+ 372, 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, -1, -1, -1,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, -1, -1, -1, -1, -1, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, -1, -1,
+ 336, 337, 338, 339, 0, -1, 342, 343, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, -1, -1, -1,
+ 366, 367, 368, 369, 370, 371, 372, 33, -1, -1,
+ -1, -1, -1, -1, 40, -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, 33, -1,
- -1, -1, -1, -1, -1, 40, -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, 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, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 93, -1,
- -1, 96, -1, -1, -1, -1, -1, -1, -1, -1,
+ 0, -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, 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, 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, -1,
- -1, -1, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
- -1, -1, 336, 337, 338, 339, -1, -1, 342, 343,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 354, 355, 356, 357, 358, -1, -1, -1, 362, 363,
- 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, 300, 0, -1, -1, -1,
- -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 33,
- -1, 336, 337, 338, 339, -1, 40, 342, 343, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 354,
- 355, 356, 357, 358, -1, 59, -1, 362, 363, 364,
- 365, -1, -1, -1, -1, -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, 0, -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, -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, 125, -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, 300, -1, -1, -1, -1, -1,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, -1, -1, -1, -1, -1, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, -1, -1,
+ 336, 337, 338, 339, -1, -1, 342, 343, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, -1, -1, -1,
+ 366, 367, 368, 369, 370, 371, 372, 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, -1, -1, -1, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
+ -1, -1, -1, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, -1, -1, 336, 337, 338, 339,
+ 0, -1, 342, 343, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, -1, -1, -1, 366, 367, 368, 369,
+ 370, 371, 372, 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, 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, 93, -1, -1, 96, -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, 0, -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, 257, 258, 259, 260, -1, -1, 263,
+ -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, -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,
+ 300, -1, -1, -1, -1, -1, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
+ -1, -1, -1, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, -1, -1, 336, 337, 338, 339,
+ -1, -1, 342, 343, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, -1, -1, -1, 366, 367, 368, 369,
+ 370, 371, 372, 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,
@@ -2227,38 +2462,31 @@ short yycheck[] = { 24,
-1, -1, 306, 307, 308, 309, 310, 311, 312, 313,
314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
- -1, -1, 336, 337, 338, 339, -1, -1, 342, 343,
+ -1, -1, 336, 337, 338, 339, 0, -1, 342, 343,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, -1,
+ -1, -1, 366, 367, 368, 369, 370, 371, 372, 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,
- 354, 355, 356, 357, 358, -1, -1, -1, 362, 363,
- 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, 300, 0, -1, -1, -1,
- -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 33,
- -1, 336, 337, 338, 339, -1, 40, 342, 343, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 354,
- 355, 356, 357, 358, -1, 59, -1, 362, 363, 364,
- 365, -1, -1, -1, -1, -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, 0, -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, 125, -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, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, -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, 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, 93, -1, -1, 96, -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, -1, -1, 125, -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,
@@ -2270,161 +2498,191 @@ short yycheck[] = { 24,
324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
-1, -1, 336, 337, 338, 339, -1, -1, 342, 343,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 354, 355, 356, 357, 358, -1, -1, -1, 362, 363,
- 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, 300, 0, -1, -1, -1,
- -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 33,
- -1, 336, 337, 338, 339, -1, 40, 342, 343, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 354,
- 355, 356, 357, 358, -1, 59, -1, 362, 363, 364,
- 365, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, -1,
+ -1, -1, 366, 367, 368, 369, 370, 371, 372, 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, -1, -1, -1, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ -1, -1, -1, -1, -1, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, -1, -1, 336, 337,
+ 338, 339, 0, -1, 342, 343, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, -1, -1, -1, 366, 367,
+ 368, 369, 370, 371, 372, 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, -1, -1, -1, -1, -1, -1, -1, -1, 93,
- -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 0, -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, 125, -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, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, -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, 0, -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, 93, -1,
- -1, 96, -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, -1, -1,
- 125, -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, 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, -1,
- -1, -1, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
- -1, -1, 336, 337, 338, 339, -1, -1, 342, 343,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 354, 355, 356, 357, 358, -1, -1, -1, 362, 363,
- 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, 300, 0, -1, -1, -1,
- -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 33,
- -1, 336, 337, 338, 339, -1, 40, 342, 343, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 354,
- 355, 356, 357, 358, -1, 59, -1, 362, 363, 364,
- 365, -1, -1, -1, -1, -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, 0, -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, 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, 125, -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, 300, -1, -1, -1, -1, -1, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ -1, -1, -1, -1, -1, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, -1, -1, 336, 337,
+ 338, 339, -1, -1, 342, 343, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, -1, -1, -1, 366, 367,
+ 368, 369, 370, 371, 372, 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, -1, -1, -1, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, -1, -1, -1, -1,
+ -1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, -1, -1, 336, 337, 338, 339, 0, -1,
+ 342, 343, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, -1, -1, -1, 366, 367, 368, 369, 370, 371,
+ 372, 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, -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,
- -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, 300, -1, -1, -1,
- -1, -1, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
- -1, -1, 336, 337, 338, 339, -1, -1, 342, 343,
+ -1, -1, -1, -1, 0, -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,
- 354, 355, 356, 357, 358, -1, -1, -1, 362, 363,
- 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, 300, 0, -1, -1, -1,
- -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 33,
- -1, 336, 337, 338, 339, -1, 40, 342, 343, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 354,
- 355, 356, 357, 358, -1, 59, -1, 362, 363, 364,
- 365, -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, -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, 0, -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, 125, -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, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, -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, 93, -1,
- -1, 96, -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, 300, -1,
+ -1, -1, -1, -1, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, -1, -1, -1, -1,
+ -1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, -1, -1, 336, 337, 338, 339, -1, -1,
+ 342, 343, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, -1, -1, -1, 366, 367, 368, 369, 370, 371,
+ 372, 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, -1, -1, -1,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, -1, -1, -1, -1, -1, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, -1, -1,
+ 336, 337, 338, 339, 0, -1, 342, 343, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, -1, -1, -1,
+ 366, 367, 368, 369, 370, 371, 372, 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,
- 125, -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, 300, -1, -1, -1,
- -1, -1, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
- -1, -1, 336, 337, 338, 339, -1, -1, 342, 343,
+ -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,
- 354, 355, 356, 357, 358, -1, -1, -1, 362, 363,
- 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, 300, 0, -1, -1, -1,
- -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 33,
- -1, 336, 337, 338, 339, -1, 40, 342, 343, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 354,
- 355, 356, 357, 358, -1, 59, -1, 362, 363, 364,
- 365, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 0, -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, 93,
- -1, -1, 96, -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, 125, -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, 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, 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, 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,
- 125, -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, 257, 258, 259, 260, -1, -1, 263,
+ -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, 300, -1, -1, -1, -1, -1,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, -1, -1, -1, -1, -1, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, -1, -1,
+ 336, 337, 338, 339, -1, -1, 342, 343, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, -1, -1, -1,
+ 366, 367, 368, 369, 370, 371, 372, 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, -1, -1, -1, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
+ -1, -1, -1, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, -1, -1, 336, 337, 338, 339,
+ 0, -1, 342, 343, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, -1, -1, -1, 366, 367, 368, 369,
+ 370, 371, 372, 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, 0, -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, 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, -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,
+ 300, -1, -1, -1, -1, -1, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
+ -1, -1, -1, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, -1, -1, 336, 337, 338, 339,
+ -1, -1, 342, 343, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, -1, -1, -1, 366, 367, 368, 369,
+ 370, 371, 372, 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,
@@ -2432,38 +2690,31 @@ short yycheck[] = { 24,
-1, -1, 306, 307, 308, 309, 310, 311, 312, 313,
314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
- -1, -1, 336, 337, 338, 339, -1, -1, 342, 343,
+ -1, -1, 336, 337, 338, 339, 0, -1, 342, 343,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, -1,
+ -1, -1, 366, 367, 368, 369, 370, 371, 372, 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,
- 354, 355, 356, 357, 358, -1, -1, -1, 362, 363,
- 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, 300, 0, -1, -1, -1,
- -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 33,
- -1, 336, 337, 338, 339, -1, 40, 342, 343, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 354,
- 355, 356, 357, 358, -1, 59, -1, 362, 363, 364,
- 365, -1, -1, -1, -1, -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, 0, -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, 125, -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, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 59, -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, 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, 93, -1, -1, 96, -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, -1, -1, 125, -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,
@@ -2475,262 +2726,420 @@ short yycheck[] = { 24,
324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
-1, -1, 336, 337, 338, 339, -1, -1, 342, 343,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 354, 355, 356, 357, 358, -1, -1, -1, 362, 363,
- 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, 300, -1, -1, -1, -1,
- -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 0,
- -1, 336, 337, 338, 339, -1, -1, 342, 343, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 354,
- 355, 356, 357, 358, -1, -1, -1, 362, 363, 364,
- 365, -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,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, -1,
+ -1, -1, 366, 367, 368, 369, 370, 371, 372, 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, -1, -1, -1, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ -1, -1, -1, -1, -1, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, -1, -1, 336, 337,
+ 338, 339, 0, -1, 342, 343, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, -1, -1, -1, 366, 367,
+ 368, 369, 370, 371, 372, 33, -1, -1, -1, -1,
+ -1, -1, 40, -1, -1, -1, 44, 45, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
- -1, -1, 93, -1, -1, 96, -1, -1, -1, -1,
+ -1, 59, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 24, -1, -1, -1,
+ -1, -1, 30, -1, -1, -1, -1, -1, -1, -1,
+ -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, 33,
- -1, -1, -1, -1, 125, -1, 40, 41, -1, -1,
- 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, 0, -1,
+ -1, -1, -1, -1, -1, -1, -1, 125, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 90, -1, -1, -1, -1, -1, -1, -1,
+ -1, 33, -1, -1, -1, -1, -1, 105, 40, 41,
+ -1, 43, 44, 45, -1, -1, -1, -1, -1, -1,
+ 118, -1, -1, -1, -1, -1, -1, 59, -1, -1,
+ 62, -1, -1, -1, -1, -1, -1, 135, 136, 137,
+ 138, -1, -1, -1, -1, -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, 93, -1, -1, 96, 163, -1, -1, -1, -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, 204, -1, -1, -1,
+ 258, 259, 260, -1, 212, -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, -1, -1, -1, -1, -1, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ -1, -1, -1, 271, -1, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, -1, -1, 336, 337,
+ 338, 339, -1, -1, 342, 343, -1, -1, -1, -1,
+ 91, -1, -1, -1, -1, -1, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, -1, 314, -1, 366, 367,
+ 368, 369, 370, 371, 372, 257, 258, 259, 260, -1,
+ -1, 263, 123, 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, 0,
+ -1, -1, -1, 305, 306, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 382, 383, 318, 319, 320, 321,
+ 322, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, 33, -1, -1, -1, -1, -1, -1, 40,
+ 342, 343, 43, -1, 45, 46, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
+ -1, -1, -1, -1, 366, 367, 368, 369, 370, 371,
+ 372, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 93, 0, -1, 96, 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, 125, -1, 33, -1, -1, -1,
+ -1, -1, -1, 40, 41, -1, -1, 44, 45, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 125, -1, 0, -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, 334, -1, -1, -1, -1, -1, 340,
+ 341, 0, -1, 344, -1, 346, 93, -1, -1, 96,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 363, -1, 365, -1, -1, -1, -1, -1,
+ -1, 372, 373, -1, 33, -1, -1, -1, 125, -1,
+ -1, 40, 41, -1, -1, 44, -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, 257, 258, 259, 260,
+ 59, 60, -1, 62, -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, 59, -1, -1, -1, -1, -1, -1, -1,
+ 271, 272, -1, -1, 93, -1, -1, 96, -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, 305, 306, 93, -1, -1, 96,
+ -1, -1, -1, -1, -1, 306, 125, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 318, 319, 320,
321, 322, 323, 324, 325, 326, 327, 328, 329, 330,
- 331, 332, 333, -1, -1, -1, -1, -1, 125, -1,
- -1, 342, 343, 257, 258, 259, 260, -1, -1, 263,
- -1, 265, 266, 267, 268, 269, 270, -1, -1, -1,
- -1, 362, 363, 364, 365, -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, 306, 0, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
- -1, -1, -1, -1, -1, -1, 33, -1, 342, 343,
- -1, -1, -1, 40, 41, -1, -1, 44, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 362, 363,
- 364, 365, 59, 60, -1, 62, -1, -1, -1, -1,
+ 331, 332, 333, -1, -1, -1, -1, -1, -1, -1,
+ -1, 342, 343, -1, -1, -1, -1, -1, -1, -1,
+ 257, 258, 259, 260, -1, -1, 263, -1, 265, 266,
+ 267, 268, 269, 270, -1, 366, 367, 368, 369, 370,
+ 371, 372, -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, 306,
+ 91, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 59, -1, 323, 324, 325, 326,
+ 327, 328, 329, 330, 331, 332, 333, -1, -1, -1,
+ -1, -1, 123, -1, -1, 342, 343, -1, 257, 258,
+ 259, 260, -1, -1, 263, -1, 91, -1, -1, 268,
+ -1, -1, 271, 272, -1, -1, -1, -1, -1, 366,
+ 367, 368, 369, 370, 371, 372, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 123, -1,
+ -1, -1, -1, -1, -1, -1, -1, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, 317, -1,
+ -1, -1, -1, -1, 323, 324, 325, 326, 327, 328,
+ 329, 330, 331, 332, 333, 0, -1, 336, 337, 338,
+ 339, -1, -1, -1, -1, -1, -1, -1, -1, 348,
+ 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
+ 359, 360, 361, 362, -1, -1, -1, -1, 33, -1,
+ -1, -1, -1, 372, -1, 40, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 257, 258, -1, 260,
+ 261, -1, -1, -1, 59, -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,
- 257, 258, 259, 260, -1, -1, 263, -1, -1, -1,
- -1, 268, -1, -1, 271, 272, 93, -1, -1, 96,
+ -1, -1, -1, -1, -1, -1, -1, -1, 93, -1,
+ -1, 96, 257, 258, -1, 260, 261, -1, -1, -1,
+ -1, 0, -1, -1, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, -1, -1, -1, -1,
+ 125, -1, -1, 334, -1, -1, -1, -1, -1, 340,
+ 341, -1, -1, 344, 33, 346, -1, -1, -1, -1,
+ -1, 40, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 363, -1, 365, -1, -1, -1, -1, -1,
+ 59, 372, 373, -1, -1, -1, -1, -1, -1, 334,
+ -1, -1, -1, -1, -1, 340, 341, -1, -1, 344,
+ -1, 346, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 93, -1, -1, 96, 363, -1,
+ 365, -1, -1, -1, -1, 0, -1, 372, 373, -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, 0, -1, -1, -1, 125, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, -1, -1, -1, -1, -1, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 332, 333, 33, -1, 336,
- 337, 338, 339, -1, 40, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 354, 355, 356,
- 357, 358, -1, 59, -1, -1, -1, -1, 365, -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, 59, -1, 271, 272, -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, 0, -1, -1, -1, -1, 125,
+ -1, -1, -1, -1, -1, -1, -1, -1, 93, -1,
+ -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
+ 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, 333, 0,
+ 125, 336, 337, 338, 339, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 354,
+ 355, 356, 357, 358, 359, 360, 361, 362, 257, 258,
+ 259, 260, -1, -1, 263, -1, -1, 372, -1, 268,
+ -1, -1, 271, 272, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
+ -1, -1, 0, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, 317, -1,
+ -1, -1, 93, -1, 323, 324, 325, 326, 327, 328,
+ 329, 330, 331, 332, 333, -1, -1, 336, 337, 338,
+ 339, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 59, -1, -1, 125, 354, 355, 356, 357, 358,
+ 359, 360, 361, 362, -1, 260, -1, -1, -1, -1,
+ 265, 266, 267, 372, 269, 270, 271, 272, -1, -1,
+ -1, -1, -1, -1, -1, 93, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, 301, -1, -1, 0,
+ -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,
- 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, 342, 343, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 59, -1,
+ -1, 366, 367, 368, 369, 370, 371, 372, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 260,
+ -1, -1, -1, -1, 265, 266, 267, -1, 269, 270,
+ 271, 272, 93, -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,
+ 301, -1, -1, -1, 125, -1, -1, -1, -1, -1,
+ -1, -1, -1, 0, -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, 342, 343, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 300, -1, -1, 366, 367, 368, 369, 370,
+ 371, 372, 59, -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, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, -1, -1, -1, -1, -1, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 332, 333, 93, -1, 336,
- 337, 338, 339, -1, -1, -1, -1, -1, -1, -1,
- 0, 348, 349, 350, 351, 352, 353, 354, 355, 356,
- 357, 358, -1, -1, -1, -1, -1, -1, 365, 125,
-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, -1, -1, -1, -1, -1, -1, -1, -1, 59,
+ -1, -1, -1, -1, 342, 343, 93, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 0, 366, 367,
+ 368, 369, 370, 371, 372, -1, -1, -1, 125, 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,
+ -1, -1, -1, -1, -1, -1, 59, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, 317, -1, 93, -1, -1, -1, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, 332, 333, 0, -1,
- 336, 337, 338, 339, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 125, -1, -1, 354, 355,
- 356, 357, 358, -1, -1, -1, -1, -1, -1, 365,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 0,
- -1, -1, -1, -1, 260, -1, -1, -1, -1, 265,
- 266, 267, -1, 269, 270, 271, 272, 59, -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, 301, -1, -1, -1, -1,
- -1, 93, -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, 125, -1, -1, 342, 343, -1, -1,
- -1, -1, 93, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 362, 363, 364, 365,
- 260, 0, -1, -1, -1, 265, 266, 267, -1, 269,
- 270, 271, 272, -1, 125, -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, 301, -1, -1, -1, -1, -1, -1, -1, -1,
+ 93, 342, 343, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 366, 367, 368, 369, 370,
+ 371, 372, 125, -1, -1, -1, -1, -1, -1, -1,
+ -1, 0, -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, 300, -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, 342, 343, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 93, -1, -1, -1, -1, -1,
- -1, -1, 362, 363, 364, 365, -1, -1, 260, 0,
- -1, -1, -1, 265, 266, 267, -1, 269, 270, 271,
- 272, -1, -1, -1, -1, -1, 125, -1, -1, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- 292, 293, 294, 295, 296, 297, 298, 299, 300, 260,
- 0, -1, -1, -1, 265, 266, 267, -1, 269, 270,
- 271, 272, -1, -1, -1, -1, -1, -1, 59, -1,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
- 342, 343, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 93, -1, -1, -1, -1, -1, -1, 59,
- 362, 363, 364, 365, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 342, 343, -1, 125, -1, -1, -1, -1, -1,
- -1, -1, -1, 93, -1, -1, -1, -1, -1, -1,
- -1, 362, 363, 364, 365, -1, -1, 0, -1, 0,
- -1, 260, -1, -1, -1, -1, 265, 266, 267, -1,
- 269, 270, 271, 272, -1, 125, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 93, 342, 343, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 0, -1, -1, -1, 366,
+ 367, 368, 369, 370, 371, 372, 125, 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, -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, 342,
+ 343, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 366, 367, 368, 369, 370, 371, 372,
+ 125, -1, -1, -1, -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, 0,
+ 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, 43, -1, 45, 46, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 59, -1, 59, -1,
+ 299, 300, 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, 342, 343, -1, -1, -1, -1, -1,
- 93, -1, 93, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 362, 363, 364, 365, -1, -1, 260,
- -1, -1, -1, -1, 265, 266, 267, -1, 269, 270,
- 271, 272, 125, -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,
- 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, 342, 343, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 0, -1, -1, -1,
- -1, 362, 363, 364, 365, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 342, 343, -1, -1, -1, -1, -1, 33,
- -1, -1, -1, -1, -1, -1, 40, -1, -1, -1,
- -1, -1, 362, 363, 364, 365, -1, 260, -1, -1,
- -1, -1, 265, 266, 267, 59, 269, 270, 271, 272,
- 271, 272, -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, 93,
- -1, -1, 96, -1, -1, -1, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
- 321, 322, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 125, -1, -1, -1, 336, 337, 338, 339, 342,
- 343, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 33, -1, 354, 355, 356, 357, 358, 40, 362,
- 363, 364, 365, 45, -1, -1, -1, -1, -1, -1,
+ -1, -1, 93, -1, -1, 96, -1, 366, 367, 368,
+ 369, 370, 371, 372, 0, 260, -1, -1, -1, -1,
+ 265, 266, 267, -1, 269, 270, 271, 272, -1, -1,
+ -1, -1, -1, -1, 125, -1, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, -1, 43, -1, 45,
+ 46, -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, 342, 343, -1,
+ -1, -1, -1, -1, -1, -1, -1, 93, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 366, 367, 368, 369, 370, 371, 372, -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, -1, -1, -1, -1, -1, 91,
- -1, -1, -1, -1, 96, -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, 300,
+ -1, -1, -1, -1, -1, 306, 307, 308, 309, 310,
+ 311, 312, 313, 314, 315, 316, 317, -1, -1, -1,
+ -1, -1, 323, 324, 325, 326, 327, 328, 329, 330,
+ 331, 332, 333, -1, -1, 336, 337, 338, 339, -1,
+ -1, 342, 343, 0, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 354, 355, 356, 357, 358, 359, 360,
+ 361, 362, -1, -1, -1, 366, 367, 368, 369, 370,
+ 371, -1, -1, -1, -1, 271, 272, -1, -1, -1,
+ 37, -1, -1, -1, 41, 42, 43, 44, 45, -1,
+ 47, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 59, 60, -1, 62, -1, -1, -1, -1,
+ -1, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, 318, 319, 320, 321, 322, 33, -1, -1,
+ -1, -1, -1, -1, 40, -1, 93, -1, -1, 45,
+ 336, 337, 338, 339, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, -1, 125, -1,
-1, -1, -1, -1, -1, -1, -1, -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, 123, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 123, -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, 300, -1, -1, -1,
- -1, -1, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
- -1, -1, 336, 337, 338, 339, 33, -1, 342, 343,
- -1, -1, -1, 40, -1, -1, -1, -1, 45, -1,
- 354, 355, 356, 357, 358, -1, -1, -1, 362, 363,
- 364, -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,
- -1, -1, -1, -1, 91, -1, -1, -1, -1, 96,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, 317, 123, -1, -1, -1,
- -1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- 332, 333, 334, -1, 336, 337, 338, 339, 340, 341,
- -1, -1, 344, -1, 346, -1, -1, -1, -1, -1,
- -1, -1, 354, 355, 356, 357, 358, 359, 33, 361,
- -1, -1, -1, 365, 366, 40, -1, -1, -1, -1,
- 45, -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, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -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, 91, -1, -1, -1, 264, 96, -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, -1, 306,
+ -1, -1, -1, 290, -1, 123, -1, -1, -1, -1,
+ -1, -1, -1, -1, 301, -1, -1, 304, -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, -1, -1, -1, -1, 45, -1,
+ -1, 348, 349, 350, 351, 352, 353, -1, -1, -1,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, -1, -1, -1, -1, -1, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, 334, -1,
+ 336, 337, 338, 339, 340, 341, -1, -1, 344, 96,
+ 346, -1, -1, -1, -1, -1, -1, -1, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, 363, -1, 365,
+ -1, -1, -1, -1, -1, -1, 372, 373, -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, -1, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ -1, -1, -1, -1, -1, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, 334, -1, 336, 337,
+ 338, 339, 340, 341, -1, -1, 344, 96, 346, -1,
+ -1, -1, -1, -1, -1, -1, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, 363, -1, 365, -1, -1,
+ -1, -1, -1, -1, 372, 373, -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, 300, -1, -1, -1, -1, -1, 306,
307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
317, -1, -1, -1, -1, -1, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 332, 333, 334, -1, 336,
- 337, 338, 339, 340, 341, -1, -1, 344, 96, 346,
- -1, -1, -1, -1, -1, -1, -1, 354, 355, 356,
- 357, 358, 359, -1, 361, -1, -1, -1, 365, 366,
+ 327, 328, 329, 330, 331, 332, 333, 33, -1, 336,
+ 337, 338, 339, -1, 40, 342, 343, -1, -1, 45,
+ 46, -1, -1, -1, -1, -1, -1, 354, 355, 356,
+ 357, 358, 359, 360, 361, 362, -1, -1, -1, 366,
+ 367, 368, 369, 370, 371, 372, -1, -1, 257, 258,
+ 259, 260, -1, -1, 263, -1, -1, -1, -1, 268,
+ -1, -1, 271, 272, -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, 306, 307, 308,
+ 309, 310, 311, 312, 313, 314, 315, 316, 317, -1,
+ -1, -1, -1, -1, 323, 324, 325, 326, 327, 328,
+ 329, 330, 331, 332, 333, 33, -1, 336, 337, 338,
+ 339, -1, 40, -1, -1, -1, -1, 45, -1, -1,
+ -1, -1, -1, -1, -1, 354, 355, 356, 357, 358,
+ 359, 360, 361, 362, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 372, -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, 300, -1, -1, -1, -1,
- -1, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, -1, -1, -1, -1, -1, 323, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 333, 33,
- -1, 336, 337, 338, 339, -1, 40, 342, 343, -1,
- -1, 45, -1, -1, -1, -1, -1, -1, -1, 354,
- 355, 356, 357, 358, -1, -1, -1, 362, 363, 364,
- 365, -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, -1,
- -1, -1, 96, -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, -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,
+ -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,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, -1, -1, -1, -1, -1, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, -1, -1,
+ 336, 337, 338, 339, 96, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 372, -1, -1, 257,
+ 258, 259, 260, -1, -1, 263, -1, -1, -1, -1,
+ 268, -1, -1, 271, 272, -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, -1, -1, -1, -1, -1, -1, -1, 306, 307,
308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
-1, -1, -1, -1, -1, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, 332, 333, 33, -1, 336, 337,
- 338, 339, -1, 40, -1, -1, -1, -1, 45, -1,
+ 328, 329, 330, 331, 332, 333, -1, -1, 336, 337,
+ 338, 339, 96, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 354, 355, 356, 357,
- 358, -1, -1, -1, -1, -1, -1, 365, -1, -1,
+ 358, 359, 360, 361, 362, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 372, -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, 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, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, -1, -1, -1, -1,
+ -1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, -1, -1, 336, 337, 338, 339, 96, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 96,
+ -1, -1, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 372, -1, -1, 257, 258, 259, 260, -1, -1, 263,
+ -1, -1, -1, -1, 268, -1, -1, 271, 272, -1,
+ -1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
+ 40, -1, -1, -1, -1, 45, 46, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, 317, -1, -1, -1, -1, -1, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
+ -1, -1, 336, 337, 338, 339, 96, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 372, -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, 33,
+ -1, -1, -1, -1, -1, -1, 40, -1, 42, -1,
+ -1, 45, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ -1, -1, -1, -1, -1, 323, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, -1, -1, 336, 337,
+ 338, 339, 96, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 372, -1, -1, 257, 258, 259,
+ -1, -1, -1, 263, -1, -1, -1, -1, 268, -1,
+ -1, 271, 272, -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, -1,
+ -1, -1, -1, -1, -1, -1, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
+ -1, -1, -1, 323, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, -1, -1, 336, 337, 338, 339,
+ 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, -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, 257, 258, 259, -1, -1, -1, 263,
-1, -1, -1, -1, 268, -1, -1, 271, 272, -1,
-1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
40, -1, -1, -1, -1, 45, -1, -1, -1, -1,
@@ -2740,68 +3149,48 @@ short yycheck[] = { 24,
324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
-1, -1, 336, 337, 338, 339, 96, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 354, 355, 356, 357, 358, -1, -1, -1, -1, -1,
- -1, 365, -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,
- 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, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, -1, -1, -1, -1, -1, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 332, 333, -1, -1, 336,
- 337, 338, 339, 96, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 354, 355, 356,
- 357, 358, -1, -1, -1, -1, -1, -1, 365, -1,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -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, 257, 258, 259, -1, -1, -1, 263, -1, -1,
+ -1, -1, 268, -1, -1, 271, 272, -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, -1, -1, -1, -1, -1, -1, -1,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, -1, -1, -1, -1, -1, 323, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, -1, -1,
+ 336, 337, 338, 339, 96, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, -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, -1, -1, -1, 268, -1,
+ -1, 271, 272, -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, -1,
-1, -1, -1, -1, -1, -1, 306, 307, 308, 309,
- 310, 311, 312, 313, 314, 315, 316, 317, 96, -1,
+ 310, 311, 312, 313, 314, 315, 316, 317, -1, -1,
-1, -1, -1, 323, 324, 325, 326, 327, 328, 329,
330, 331, 332, 333, -1, -1, 336, 337, 338, 339,
+ 96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, -1, -1, -1, -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,
- -1, -1, -1, -1, 354, 355, 356, 357, 358, 33,
- -1, -1, -1, -1, -1, 365, 40, -1, -1, -1,
- -1, 45, -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, -1, -1, 59, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, -1, -1, -1, -1,
+ -1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, -1, -1, 336, 337, 338, 339, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 96, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 317, -1, 91, -1, -1, -1,
- 323, 324, 325, 326, 327, 328, 329, 330, 331, 332,
- 333, -1, -1, 336, 337, 338, 339, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 123, -1,
- -1, 354, 355, 356, 357, 358, -1, 33, -1, 257,
- 258, 259, 365, -1, 40, 263, -1, -1, -1, 45,
- 268, -1, -1, 271, 272, -1, -1, -1, -1, -1,
+ -1, -1, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, -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, -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, -1, -1, -1, 306, 307,
- 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
- 96, -1, -1, -1, -1, 323, 324, 325, 326, 327,
- 328, 329, 330, 331, 332, 333, -1, -1, 336, 337,
- 338, 339, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 354, 355, 356, 357,
- 358, 33, -1, 257, 258, 259, -1, -1, 40, 263,
- -1, -1, -1, 45, 268, -1, -1, 271, 272, -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, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 315, 316, 317, 96, -1, -1, -1, -1, 323,
- 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
- -1, -1, 336, 337, 338, 339, 33, -1, -1, -1,
- -1, -1, -1, 40, -1, -1, -1, -1, 45, 334,
- 354, 355, 356, 357, 358, 340, 341, -1, -1, 344,
- -1, 346, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 257, 258, 259, 359, -1, 361, 263, -1, -1,
- 365, 366, 268, -1, -1, 271, 272, -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,
306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
@@ -2809,45 +3198,13 @@ short yycheck[] = { 24,
326, 327, 328, 329, 330, 331, 332, 333, -1, -1,
336, 337, 338, 339, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 354, 355,
- 356, 357, 358, -1, -1, 257, 258, 259, -1, -1,
- -1, 263, -1, -1, 91, -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, 123, -1, -1, -1,
- 91, -1, -1, -1, 306, 307, 308, 309, 310, 311,
- 312, 313, 314, 315, 316, 317, -1, -1, -1, -1,
- -1, 323, 324, 325, 326, 327, 328, 329, 330, 331,
- 332, 333, 123, -1, 336, 337, 338, 339, -1, -1,
- 257, 258, 259, -1, -1, -1, 263, -1, -1, -1,
- -1, 268, 354, 355, 356, 357, 358, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, -1, -1, -1, -1, -1, 323, 324, 325, 326,
- 327, 328, 329, 330, 331, 332, 333, -1, -1, 336,
- 337, 338, 339, -1, -1, -1, -1, -1, -1, -1,
- 257, 258, -1, 260, 261, -1, -1, 354, 355, 356,
- 357, 358, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, -1, -1, -1, -1, -1, -1,
- -1, -1, -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, 334, -1, -1,
- -1, -1, -1, 340, 341, -1, -1, 344, -1, 346,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 359, -1, 361, -1, -1, -1, 365, 366,
- -1, -1, -1, 334, -1, -1, -1, -1, -1, 340,
- 341, -1, -1, 344, -1, 346, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 359, -1,
- 361, -1, -1, -1, 365, 366,
+ 356, 357, 358, 359, 360, 361, 362,
};
#define YYFINAL 2
#ifndef YYDEBUG
#define YYDEBUG 0
#endif
-#define YYMAXTOKEN 368
+#define YYMAXTOKEN 375
#if YYDEBUG
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,
@@ -2868,9 +3225,9 @@ char *yyname[] = {
"DOT_WID","DOT_RAD","SIN","COS","ATAN2","LOG","EXP","SQRT","K_MAX","K_MIN",
"INT","RAND","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",
+"LESSEQUAL","GREATEREQUAL","LEFT_CORNER","RIGHT_CORNER","NORTH","SOUTH","EAST",
+"WEST","CENTER","END","START","RESET","UNTIL","PLOT","THICKNESS","FILL",
+"COLORED","OUTLINED","SHADED","ALIGNED","SPRINTF","COMMAND","DEFINE","UNDEF",
};
char *yyrule[] = {
"$accept : top",
@@ -2974,6 +3331,7 @@ char *yyrule[] = {
"object_spec : object_spec TO position",
"object_spec : object_spec AT position",
"object_spec : object_spec WITH path",
+"object_spec : object_spec WITH position",
"object_spec : object_spec BY expr_pair",
"object_spec : object_spec THEN",
"object_spec : object_spec SOLID",
@@ -2983,6 +3341,9 @@ char *yyrule[] = {
"object_spec : object_spec DASHED expr",
"object_spec : object_spec FILL",
"object_spec : object_spec FILL expr",
+"object_spec : object_spec SHADED text",
+"object_spec : object_spec COLORED text",
+"object_spec : object_spec OUTLINED text",
"object_spec : object_spec CHOP",
"object_spec : object_spec CHOP expr",
"object_spec : object_spec SAME",
@@ -3074,6 +3435,10 @@ char *yyrule[] = {
"corner : LOWER LEFT_CORNER",
"corner : UPPER RIGHT_CORNER",
"corner : LOWER RIGHT_CORNER",
+"corner : NORTH",
+"corner : SOUTH",
+"corner : EAST",
+"corner : WEST",
"corner : CENTER",
"corner : START",
"corner : END",
@@ -3137,7 +3502,7 @@ YYSTYPE yylval;
short yyss[YYSTACKSIZE];
YYSTYPE yyvs[YYSTACKSIZE];
#define yystacksize YYSTACKSIZE
-#line 1546 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 1613 "pic.y"
/* bison defines const to be empty unless __STDC__ is defined, which it
isn't under cfront */
@@ -3348,23 +3713,7 @@ char *format_number(const char *form, double n)
{
if (form == 0)
form = "%g";
- else {
- // this is a fairly feeble attempt at validation of the format
- int nspecs = 0;
- for (const char *p = form; *p != '\0'; p++)
- if (*p == '%') {
- if (p[1] == '%')
- p++;
- else
- nspecs++;
- }
- if (nspecs > 1) {
- lex_error("bad format `%1'", form);
- return strsave(form);
- }
- }
- sprintf(sprintf_buf, form, n);
- return strsave(sprintf_buf);
+ return do_sprintf(form, &n, 1);
}
char *do_sprintf(const char *form, const double *v, int nv)
@@ -3386,18 +3735,20 @@ char *do_sprintf(const char *form, const double *v, int nv)
if (*form == '%') {
one_format += *form++;
one_format += '\0';
- sprintf(sprintf_buf, one_format.contents());
+ snprintf(sprintf_buf, sizeof(sprintf_buf),
+ "%s", one_format.contents());
}
else {
if (i >= nv) {
- lex_error("too few arguments to sprintf");
+ lex_error("too few arguments to snprintf");
result += one_format;
result += form;
break;
}
one_format += *form++;
one_format += '\0';
- sprintf(sprintf_buf, one_format.contents(), v[i++]);
+ snprintf(sprintf_buf, sizeof(sprintf_buf),
+ one_format.contents(), v[i++]);
}
one_format.clear();
result += sprintf_buf;
@@ -3408,7 +3759,7 @@ char *do_sprintf(const char *form, const double *v, int nv)
result += '\0';
return strsave(result.contents());
}
-#line 3409 "y.tab.c"
+#line 3763 "y.tab.c"
#define YYABORT goto yyabort
#define YYREJECT goto yyabort
#define YYACCEPT goto yyaccept
@@ -3482,6 +3833,10 @@ yyloop:
goto yyreduce;
}
if (yyerrflag) goto yyinrecovery;
+#ifdef lint
+ goto yynewerror;
+#endif
+yynewerror:
yyerror("syntax error");
#ifdef lint
goto yyerrlab;
@@ -3550,33 +3905,33 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 283 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 295 "pic.y"
{
if (olist.head)
print_picture(olist.head);
}
break;
case 3:
-#line 292 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 304 "pic.y"
{ yyval.pl = yyvsp[-1].pl; }
break;
case 4:
-#line 297 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 309 "pic.y"
{ yyval.pl = yyvsp[0].pl; }
break;
case 5:
-#line 299 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 311 "pic.y"
{ yyval.pl = yyvsp[-2].pl; }
break;
case 10:
-#line 314 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 326 "pic.y"
{
define_variable(yyvsp[-2].str, yyvsp[0].x);
a_delete yyvsp[-2].str;
}
break;
case 11:
-#line 319 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 331 "pic.y"
{
place *p = lookup_label(yyvsp[-3].str);
if (!p) {
@@ -3590,49 +3945,49 @@ case 11:
}
break;
case 12:
-#line 331 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 343 "pic.y"
{ current_direction = UP_DIRECTION; }
break;
case 13:
-#line 333 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 345 "pic.y"
{ current_direction = DOWN_DIRECTION; }
break;
case 14:
-#line 335 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 347 "pic.y"
{ current_direction = LEFT_DIRECTION; }
break;
case 15:
-#line 337 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 349 "pic.y"
{ current_direction = RIGHT_DIRECTION; }
break;
case 16:
-#line 339 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 351 "pic.y"
{
olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename,
yyvsp[0].lstr.lineno));
}
break;
case 17:
-#line 344 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 356 "pic.y"
{
olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename,
yyvsp[0].lstr.lineno));
}
break;
case 18:
-#line 349 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 361 "pic.y"
{
fprintf(stderr, "%s\n", yyvsp[0].lstr.str);
a_delete yyvsp[0].lstr.str;
- fflush(stderr);
+ fflush(stderr);
}
break;
case 19:
-#line 355 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 367 "pic.y"
{ delim_flag = 1; }
break;
case 20:
-#line 357 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 369 "pic.y"
{
delim_flag = 0;
if (safer_flag)
@@ -3643,7 +3998,7 @@ case 20:
}
break;
case 21:
-#line 366 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 378 "pic.y"
{
if (yychar < 0)
do_lookahead();
@@ -3652,15 +4007,15 @@ case 21:
}
break;
case 22:
-#line 373 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 385 "pic.y"
{ delim_flag = 2; }
break;
case 23:
-#line 375 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 387 "pic.y"
{ delim_flag = 0; }
break;
case 24:
-#line 377 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 389 "pic.y"
{
if (yychar < 0)
do_lookahead();
@@ -3671,15 +4026,15 @@ case 24:
}
break;
case 25:
-#line 386 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 398 "pic.y"
{ delim_flag = 2; }
break;
case 26:
-#line 388 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 400 "pic.y"
{ delim_flag = 0; }
break;
case 27:
-#line 390 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 402 "pic.y"
{
if (yychar < 0)
do_lookahead();
@@ -3689,11 +4044,11 @@ case 27:
}
break;
case 28:
-#line 398 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 410 "pic.y"
{ delim_flag = 1; }
break;
case 29:
-#line 400 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 412 "pic.y"
{
delim_flag = 0;
if (yychar < 0)
@@ -3702,7 +4057,7 @@ case 29:
}
break;
case 30:
-#line 407 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 419 "pic.y"
{
if (yychar < 0)
do_lookahead();
@@ -3712,11 +4067,11 @@ case 30:
}
break;
case 31:
-#line 415 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 427 "pic.y"
{ delim_flag = 1; }
break;
case 32:
-#line 417 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 429 "pic.y"
{
delim_flag = 0;
if (yychar < 0)
@@ -3730,27 +4085,36 @@ case 32:
}
break;
case 34:
-#line 430 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 442 "pic.y"
{ define_variable("scale", 1.0); }
break;
case 35:
-#line 435 "/home/cjk/groff/src/preproc/pic/pic.y"
-{ reset(yyvsp[0].str); a_delete yyvsp[0].str; }
+#line 447 "pic.y"
+{
+ reset(yyvsp[0].str);
+ a_delete yyvsp[0].str;
+ }
break;
case 36:
-#line 437 "/home/cjk/groff/src/preproc/pic/pic.y"
-{ reset(yyvsp[0].str); a_delete yyvsp[0].str; }
+#line 452 "pic.y"
+{
+ reset(yyvsp[0].str);
+ a_delete yyvsp[0].str;
+ }
break;
case 37:
-#line 439 "/home/cjk/groff/src/preproc/pic/pic.y"
-{ reset(yyvsp[0].str); a_delete yyvsp[0].str; }
+#line 457 "pic.y"
+{
+ reset(yyvsp[0].str);
+ a_delete yyvsp[0].str;
+ }
break;
case 38:
-#line 444 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 465 "pic.y"
{ yyval.lstr = yyvsp[0].lstr; }
break;
case 39:
-#line 446 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 467 "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);
@@ -3768,7 +4132,7 @@ case 39:
}
break;
case 40:
-#line 465 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 486 "pic.y"
{
yyval.lstr.str = new char[GDIGITS + 1];
sprintf(yyval.lstr.str, "%g", yyvsp[0].x);
@@ -3777,11 +4141,11 @@ case 40:
}
break;
case 41:
-#line 472 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 493 "pic.y"
{ yyval.lstr = yyvsp[0].lstr; }
break;
case 42:
-#line 474 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 495 "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);
@@ -3790,31 +4154,35 @@ case 42:
}
break;
case 43:
-#line 483 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 505 "pic.y"
{ delim_flag = 1; }
break;
case 44:
-#line 485 "/home/cjk/groff/src/preproc/pic/pic.y"
-{ delim_flag = 0; yyval.if_data.x = yyvsp[-3].x; yyval.if_data.body = yyvsp[0].str; }
+#line 507 "pic.y"
+{
+ delim_flag = 0;
+ yyval.if_data.x = yyvsp[-3].x;
+ yyval.if_data.body = yyvsp[0].str;
+ }
break;
case 45:
-#line 490 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 516 "pic.y"
{ yyval.str = 0; }
break;
case 46:
-#line 492 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 518 "pic.y"
{ yyval.str = yyvsp[0].lstr.str; }
break;
case 47:
-#line 497 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 523 "pic.y"
{ yyval.x = yyvsp[0].x; }
break;
case 48:
-#line 499 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 525 "pic.y"
{ yyval.x = yyvsp[0].x; }
break;
case 49:
-#line 504 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 530 "pic.y"
{
yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) == 0;
a_delete yyvsp[-2].lstr.str;
@@ -3822,7 +4190,7 @@ case 49:
}
break;
case 50:
-#line 510 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 536 "pic.y"
{
yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) != 0;
a_delete yyvsp[-2].lstr.str;
@@ -3830,47 +4198,56 @@ case 50:
}
break;
case 51:
-#line 516 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 542 "pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
break;
case 52:
-#line 518 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 544 "pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
break;
case 53:
-#line 520 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 546 "pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
break;
case 54:
-#line 522 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 548 "pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
break;
case 55:
-#line 524 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 550 "pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
break;
case 56:
-#line 526 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 552 "pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
break;
case 57:
-#line 528 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 554 "pic.y"
{ yyval.x = (yyvsp[0].x == 0.0); }
break;
case 58:
-#line 534 "/home/cjk/groff/src/preproc/pic/pic.y"
-{ yyval.by.val = 1.0; yyval.by.is_multiplicative = 0; }
+#line 560 "pic.y"
+{
+ yyval.by.val = 1.0;
+ yyval.by.is_multiplicative = 0;
+ }
break;
case 59:
-#line 536 "/home/cjk/groff/src/preproc/pic/pic.y"
-{ yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 0; }
+#line 565 "pic.y"
+{
+ yyval.by.val = yyvsp[0].x;
+ yyval.by.is_multiplicative = 0;
+ }
break;
case 60:
-#line 538 "/home/cjk/groff/src/preproc/pic/pic.y"
-{ yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 1; }
+#line 570 "pic.y"
+{
+ yyval.by.val = yyvsp[0].x;
+ yyval.by.is_multiplicative = 1;
+ }
break;
case 61:
-#line 543 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 578 "pic.y"
{
yyval.pl.obj = yyvsp[0].spec->make_object(&current_position,
&current_direction);
@@ -3886,11 +4263,15 @@ case 61:
}
break;
case 62:
-#line 557 "/home/cjk/groff/src/preproc/pic/pic.y"
-{ yyval.pl = yyvsp[0].pl; define_label(yyvsp[-3].str, & yyval.pl); a_delete yyvsp[-3].str; }
+#line 592 "pic.y"
+{
+ yyval.pl = yyvsp[0].pl;
+ define_label(yyvsp[-3].str, & yyval.pl);
+ a_delete yyvsp[-3].str;
+ }
break;
case 63:
-#line 559 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 598 "pic.y"
{
yyval.pl.obj = 0;
yyval.pl.x = yyvsp[0].pair.x;
@@ -3900,7 +4281,7 @@ case 63:
}
break;
case 64:
-#line 567 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 606 "pic.y"
{
yyval.pl = yyvsp[0].pl;
define_label(yyvsp[-3].str, & yyval.pl);
@@ -3908,7 +4289,7 @@ case 64:
}
break;
case 65:
-#line 573 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 612 "pic.y"
{
yyval.state.x = current_position.x;
yyval.state.y = current_position.y;
@@ -3916,7 +4297,7 @@ case 65:
}
break;
case 66:
-#line 579 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 618 "pic.y"
{
current_position.x = yyvsp[-2].state.x;
current_position.y = yyvsp[-2].state.y;
@@ -3924,13 +4305,13 @@ case 66:
}
break;
case 67:
-#line 585 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 624 "pic.y"
{
yyval.pl = yyvsp[-3].pl;
}
break;
case 68:
-#line 589 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 628 "pic.y"
{
yyval.pl.obj = 0;
yyval.pl.x = current_position.x;
@@ -3938,40 +4319,34 @@ case 68:
}
break;
case 69:
-#line 598 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 637 "pic.y"
{}
break;
case 70:
-#line 600 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 639 "pic.y"
{}
break;
case 71:
-#line 605 "/home/cjk/groff/src/preproc/pic/pic.y"
-{
- yyval.spec = new object_spec(BOX_OBJECT);
- }
+#line 644 "pic.y"
+{ yyval.spec = new object_spec(BOX_OBJECT); }
break;
case 72:
-#line 609 "/home/cjk/groff/src/preproc/pic/pic.y"
-{
- yyval.spec = new object_spec(CIRCLE_OBJECT);
- }
+#line 646 "pic.y"
+{ yyval.spec = new object_spec(CIRCLE_OBJECT); }
break;
case 73:
-#line 613 "/home/cjk/groff/src/preproc/pic/pic.y"
-{
- yyval.spec = new object_spec(ELLIPSE_OBJECT);
- }
+#line 648 "pic.y"
+{ yyval.spec = new object_spec(ELLIPSE_OBJECT); }
break;
case 74:
-#line 617 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 650 "pic.y"
{
yyval.spec = new object_spec(ARC_OBJECT);
yyval.spec->dir = current_direction;
}
break;
case 75:
-#line 622 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 655 "pic.y"
{
yyval.spec = new object_spec(LINE_OBJECT);
lookup_variable("lineht", & yyval.spec->segment_height);
@@ -3980,7 +4355,7 @@ case 75:
}
break;
case 76:
-#line 629 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 662 "pic.y"
{
yyval.spec = new object_spec(ARROW_OBJECT);
lookup_variable("lineht", & yyval.spec->segment_height);
@@ -3989,7 +4364,7 @@ case 76:
}
break;
case 77:
-#line 636 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 669 "pic.y"
{
yyval.spec = new object_spec(MOVE_OBJECT);
lookup_variable("moveht", & yyval.spec->segment_height);
@@ -3998,7 +4373,7 @@ case 77:
}
break;
case 78:
-#line 643 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 676 "pic.y"
{
yyval.spec = new object_spec(SPLINE_OBJECT);
lookup_variable("lineht", & yyval.spec->segment_height);
@@ -4007,21 +4382,21 @@ case 78:
}
break;
case 79:
-#line 650 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 683 "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 655 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 688 "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 660 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 693 "pic.y"
{
yyval.spec = new object_spec(TEXT_OBJECT);
yyval.spec->text = new text_item(format_number(yyvsp[0].lstr.str, yyvsp[-1].x),
@@ -4030,7 +4405,7 @@ case 81:
}
break;
case 82:
-#line 667 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 700 "pic.y"
{
saved_state *p = new saved_state;
yyval.pstate = p;
@@ -4047,7 +4422,7 @@ case 82:
}
break;
case 83:
-#line 682 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 715 "pic.y"
{
current_position.x = yyvsp[-2].pstate->x;
current_position.y = yyvsp[-2].pstate->y;
@@ -4061,7 +4436,7 @@ case 83:
}
break;
case 84:
-#line 694 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 727 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->height = yyvsp[0].x;
@@ -4069,7 +4444,7 @@ case 84:
}
break;
case 85:
-#line 700 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 733 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->radius = yyvsp[0].x;
@@ -4077,7 +4452,7 @@ case 85:
}
break;
case 86:
-#line 706 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 739 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->width = yyvsp[0].x;
@@ -4085,7 +4460,7 @@ case 86:
}
break;
case 87:
-#line 712 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 745 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->radius = yyvsp[0].x/2.0;
@@ -4093,7 +4468,7 @@ case 87:
}
break;
case 88:
-#line 718 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 751 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= HAS_SEGMENT;
@@ -4114,7 +4489,7 @@ case 88:
}
break;
case 89:
-#line 737 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 770 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->dir = UP_DIRECTION;
@@ -4123,7 +4498,7 @@ case 89:
}
break;
case 90:
-#line 744 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 777 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->dir = UP_DIRECTION;
@@ -4132,7 +4507,7 @@ case 90:
}
break;
case 91:
-#line 751 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 784 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->dir = DOWN_DIRECTION;
@@ -4141,7 +4516,7 @@ case 91:
}
break;
case 92:
-#line 758 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 791 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->dir = DOWN_DIRECTION;
@@ -4150,7 +4525,7 @@ case 92:
}
break;
case 93:
-#line 765 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 798 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->dir = RIGHT_DIRECTION;
@@ -4159,7 +4534,7 @@ case 93:
}
break;
case 94:
-#line 772 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 805 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->dir = RIGHT_DIRECTION;
@@ -4168,7 +4543,7 @@ case 94:
}
break;
case 95:
-#line 779 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 812 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->dir = LEFT_DIRECTION;
@@ -4177,7 +4552,7 @@ case 95:
}
break;
case 96:
-#line 786 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 819 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->dir = LEFT_DIRECTION;
@@ -4186,7 +4561,7 @@ case 96:
}
break;
case 97:
-#line 793 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 826 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= HAS_FROM;
@@ -4195,7 +4570,7 @@ case 97:
}
break;
case 98:
-#line 800 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 833 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
if (yyval.spec->flags & HAS_SEGMENT)
@@ -4212,7 +4587,7 @@ case 98:
}
break;
case 99:
-#line 815 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 848 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= HAS_AT;
@@ -4226,7 +4601,7 @@ case 99:
}
break;
case 100:
-#line 827 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 860 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= HAS_WITH;
@@ -4234,7 +4609,18 @@ case 100:
}
break;
case 101:
-#line 833 "/home/cjk/groff/src/preproc/pic/pic.y"
+#line 866 "pic.y"
+{
+ yyval.spec = yyvsp[-2].spec;
+ yyval.spec->flags |= HAS_WITH;
+ position pos;
+ pos.x = yyvsp[0].pair.x;
+ pos.y = yyvsp[0].pair.y;
+ yyval.spec->with = new path(pos);
+ }
+break;
+case 102:
+#line 875 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= HAS_SEGMENT;
@@ -4242,8 +4628,8 @@ case 101:
yyval.spec->segment_pos.y += yyvsp[0].pair.y;
}
break;
-case 102:
-#line 840 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 103:
+#line 882 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
if (yyval.spec->flags & HAS_SEGMENT) {
@@ -4256,61 +4642,90 @@ case 102:
}
}
break;
-case 103:
-#line 852 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 104:
+#line 894 "pic.y"
{
yyval.spec = yyvsp[-1].spec; /* nothing*/
}
break;
-case 104:
-#line 856 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 105:
+#line 898 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_DOTTED;
lookup_variable("dashwid", & yyval.spec->dash_width);
}
break;
-case 105:
-#line 862 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 106:
+#line 904 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= IS_DOTTED;
yyval.spec->dash_width = yyvsp[0].x;
}
break;
-case 106:
-#line 868 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 107:
+#line 910 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_DASHED;
lookup_variable("dashwid", & yyval.spec->dash_width);
}
break;
-case 107:
-#line 874 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 108:
+#line 916 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= IS_DASHED;
yyval.spec->dash_width = yyvsp[0].x;
}
break;
-case 108:
-#line 880 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 109:
+#line 922 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_DEFAULT_FILLED;
}
break;
-case 109:
-#line 885 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 110:
+#line 927 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= IS_FILLED;
yyval.spec->fill = yyvsp[0].x;
}
break;
-case 110:
-#line 891 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 111:
+#line 933 "pic.y"
+{
+ yyval.spec = yyvsp[-2].spec;
+ yyval.spec->flags |= (IS_SHADED | IS_FILLED);
+ yyval.spec->shaded = new char[strlen(yyvsp[0].lstr.str)+1];
+ strcpy(yyval.spec->shaded, yyvsp[0].lstr.str);
+ }
+break;
+case 112:
+#line 940 "pic.y"
+{
+ yyval.spec = yyvsp[-2].spec;
+ yyval.spec->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
+ yyval.spec->shaded = new char[strlen(yyvsp[0].lstr.str)+1];
+ strcpy(yyval.spec->shaded, yyvsp[0].lstr.str);
+ yyval.spec->outlined = new char[strlen(yyvsp[0].lstr.str)+1];
+ strcpy(yyval.spec->outlined, yyvsp[0].lstr.str);
+ }
+break;
+case 113:
+#line 949 "pic.y"
+{
+ yyval.spec = yyvsp[-2].spec;
+ yyval.spec->flags |= IS_OUTLINED;
+ yyval.spec->outlined = new char[strlen(yyvsp[0].lstr.str)+1];
+ strcpy(yyval.spec->outlined, yyvsp[0].lstr.str);
+ }
+break;
+case 114:
+#line 956 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
/* line chop chop means line chop 0 chop 0*/
@@ -4327,8 +4742,8 @@ case 110:
}
}
break;
-case 111:
-#line 907 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 115:
+#line 972 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
if (yyval.spec->flags & IS_DEFAULT_CHOPPED) {
@@ -4346,57 +4761,57 @@ case 111:
}
}
break;
-case 112:
-#line 924 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 116:
+#line 989 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_SAME;
}
break;
-case 113:
-#line 929 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 117:
+#line 994 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_INVISIBLE;
}
break;
-case 114:
-#line 934 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 118:
+#line 999 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= HAS_LEFT_ARROW_HEAD;
}
break;
-case 115:
-#line 939 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 119:
+#line 1004 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= HAS_RIGHT_ARROW_HEAD;
}
break;
-case 116:
-#line 944 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 120:
+#line 1009 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
}
break;
-case 117:
-#line 949 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 121:
+#line 1014 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_CLOCKWISE;
}
break;
-case 118:
-#line 954 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 122:
+#line 1019 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags &= ~IS_CLOCKWISE;
}
break;
-case 119:
-#line 959 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 123:
+#line 1024 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
text_item **p;
@@ -4405,8 +4820,8 @@ case 119:
*p = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno);
}
break;
-case 120:
-#line 967 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 124:
+#line 1032 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
if (yyval.spec->text) {
@@ -4417,8 +4832,8 @@ case 120:
}
}
break;
-case 121:
-#line 977 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 125:
+#line 1042 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
if (yyval.spec->text) {
@@ -4429,8 +4844,8 @@ case 121:
}
}
break;
-case 122:
-#line 987 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 126:
+#line 1052 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
if (yyval.spec->text) {
@@ -4441,8 +4856,8 @@ case 122:
}
}
break;
-case 123:
-#line 997 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 127:
+#line 1062 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
if (yyval.spec->text) {
@@ -4453,29 +4868,27 @@ case 123:
}
}
break;
-case 124:
-#line 1007 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 128:
+#line 1072 "pic.y"
{
yyval.spec = yyvsp[-2].spec;
yyval.spec->flags |= HAS_THICKNESS;
yyval.spec->thickness = yyvsp[0].x;
}
break;
-case 125:
-#line 1013 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 129:
+#line 1078 "pic.y"
{
yyval.spec = yyvsp[-1].spec;
yyval.spec->flags |= IS_ALIGNED;
}
break;
-case 126:
-#line 1021 "/home/cjk/groff/src/preproc/pic/pic.y"
-{
- yyval.lstr = yyvsp[0].lstr;
- }
+case 130:
+#line 1086 "pic.y"
+{ yyval.lstr = yyvsp[0].lstr; }
break;
-case 127:
-#line 1025 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 131:
+#line 1088 "pic.y"
{
yyval.lstr.filename = yyvsp[-2].lstr.filename;
yyval.lstr.lineno = yyvsp[-2].lstr.lineno;
@@ -4484,16 +4897,16 @@ case 127:
a_delete yyvsp[-2].lstr.str;
}
break;
-case 128:
-#line 1036 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 132:
+#line 1099 "pic.y"
{
yyval.dv.v = 0;
yyval.dv.nv = 0;
yyval.dv.maxv = 0;
}
break;
-case 129:
-#line 1042 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 133:
+#line 1105 "pic.y"
{
yyval.dv = yyvsp[-2].dv;
if (yyval.dv.nv >= yyval.dv.maxv) {
@@ -4513,103 +4926,106 @@ case 129:
yyval.dv.nv += 1;
}
break;
-case 130:
-#line 1064 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 134:
+#line 1127 "pic.y"
{ yyval.pair = yyvsp[0].pair; }
break;
-case 131:
-#line 1066 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 135:
+#line 1129 "pic.y"
{
position pos = yyvsp[0].pl;
yyval.pair.x = pos.x;
yyval.pair.y = pos.y;
}
break;
-case 132:
-#line 1075 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 136:
+#line 1138 "pic.y"
{ yyval.pair = yyvsp[0].pair; }
break;
-case 133:
-#line 1077 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 137:
+#line 1140 "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 1082 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 138:
+#line 1145 "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 135:
-#line 1087 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 139:
+#line 1150 "pic.y"
{
yyval.pair.x = yyvsp[-3].pair.x;
yyval.pair.y = yyvsp[-1].pair.y;
}
break;
-case 136:
-#line 1092 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 140:
+#line 1155 "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 137:
-#line 1097 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 141:
+#line 1160 "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 140:
-#line 1110 "/home/cjk/groff/src/preproc/pic/pic.y"
-{ yyval.pair.x = yyvsp[-2].x; yyval.pair.y = yyvsp[0].x; }
+case 144:
+#line 1173 "pic.y"
+{
+ yyval.pair.x = yyvsp[-2].x;
+ yyval.pair.y = yyvsp[0].x;
+ }
break;
-case 141:
-#line 1112 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 145:
+#line 1178 "pic.y"
{ yyval.pair = yyvsp[-1].pair; }
break;
-case 142:
-#line 1117 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 146:
+#line 1184 "pic.y"
{ yyval.pl = yyvsp[0].pl; }
break;
-case 143:
-#line 1119 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 147:
+#line 1186 "pic.y"
{
path pth(yyvsp[0].crn);
if (!pth.follow(yyvsp[-1].pl, & yyval.pl))
YYABORT;
}
break;
-case 144:
-#line 1125 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 148:
+#line 1192 "pic.y"
{
path pth(yyvsp[-1].crn);
if (!pth.follow(yyvsp[0].pl, & yyval.pl))
YYABORT;
}
break;
-case 145:
-#line 1131 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 149:
+#line 1198 "pic.y"
{
path pth(yyvsp[-2].crn);
if (!pth.follow(yyvsp[0].pl, & yyval.pl))
YYABORT;
}
break;
-case 146:
-#line 1137 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 150:
+#line 1204 "pic.y"
{
yyval.pl.x = current_position.x;
yyval.pl.y = current_position.y;
yyval.pl.obj = 0;
}
break;
-case 147:
-#line 1146 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 151:
+#line 1213 "pic.y"
{
place *p = lookup_label(yyvsp[0].str);
if (!p) {
@@ -4620,41 +5036,39 @@ case 147:
a_delete yyvsp[0].str;
}
break;
-case 148:
-#line 1156 "/home/cjk/groff/src/preproc/pic/pic.y"
-{
- yyval.pl.obj = yyvsp[0].obj;
- }
+case 152:
+#line 1223 "pic.y"
+{ yyval.pl.obj = yyvsp[0].obj; }
break;
-case 149:
-#line 1160 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 153:
+#line 1225 "pic.y"
{
path pth(yyvsp[0].str);
if (!pth.follow(yyvsp[-2].pl, & yyval.pl))
YYABORT;
}
break;
-case 150:
-#line 1169 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 154:
+#line 1234 "pic.y"
{ yyval.n = yyvsp[0].n; }
break;
-case 151:
-#line 1171 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 155:
+#line 1236 "pic.y"
{
/* XXX Check for overflow (and non-integers?).*/
yyval.n = (int)yyvsp[-1].x;
}
break;
-case 152:
-#line 1179 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 156:
+#line 1244 "pic.y"
{ yyval.n = 1; }
break;
-case 153:
-#line 1181 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 157:
+#line 1246 "pic.y"
{ yyval.n = yyvsp[-1].n; }
break;
-case 154:
-#line 1186 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 158:
+#line 1251 "pic.y"
{
int count = 0;
object *p;
@@ -4670,8 +5084,8 @@ case 154:
}
}
break;
-case 155:
-#line 1201 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 159:
+#line 1266 "pic.y"
{
int count = 0;
object *p;
@@ -4687,233 +5101,241 @@ case 155:
}
}
break;
-case 156:
-#line 1219 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 160:
+#line 1284 "pic.y"
{ yyval.obtype = BOX_OBJECT; }
break;
-case 157:
-#line 1221 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 161:
+#line 1286 "pic.y"
{ yyval.obtype = CIRCLE_OBJECT; }
break;
-case 158:
-#line 1223 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 162:
+#line 1288 "pic.y"
{ yyval.obtype = ELLIPSE_OBJECT; }
break;
-case 159:
-#line 1225 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 163:
+#line 1290 "pic.y"
{ yyval.obtype = ARC_OBJECT; }
break;
-case 160:
-#line 1227 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 164:
+#line 1292 "pic.y"
{ yyval.obtype = LINE_OBJECT; }
break;
-case 161:
-#line 1229 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 165:
+#line 1294 "pic.y"
{ yyval.obtype = ARROW_OBJECT; }
break;
-case 162:
-#line 1231 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 166:
+#line 1296 "pic.y"
{ yyval.obtype = SPLINE_OBJECT; }
break;
-case 163:
-#line 1233 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 167:
+#line 1298 "pic.y"
{ yyval.obtype = BLOCK_OBJECT; }
break;
-case 164:
-#line 1235 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 168:
+#line 1300 "pic.y"
{ yyval.obtype = TEXT_OBJECT; }
break;
-case 165:
-#line 1240 "/home/cjk/groff/src/preproc/pic/pic.y"
-{
- yyval.pth = new path(yyvsp[0].str);
- }
+case 169:
+#line 1305 "pic.y"
+{ yyval.pth = new path(yyvsp[0].str); }
break;
-case 166:
-#line 1244 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 170:
+#line 1307 "pic.y"
{
yyval.pth = yyvsp[-2].pth;
yyval.pth->append(yyvsp[0].str);
}
break;
-case 167:
-#line 1252 "/home/cjk/groff/src/preproc/pic/pic.y"
-{
- yyval.pth = new path(yyvsp[0].crn);
- }
+case 171:
+#line 1315 "pic.y"
+{ yyval.pth = new path(yyvsp[0].crn); }
break;
-case 168:
-#line 1259 "/home/cjk/groff/src/preproc/pic/pic.y"
-{
- yyval.pth = yyvsp[0].pth;
- }
+case 172:
+#line 1319 "pic.y"
+{ yyval.pth = yyvsp[0].pth; }
break;
-case 169:
-#line 1263 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 173:
+#line 1321 "pic.y"
{
yyval.pth = yyvsp[-1].pth;
yyval.pth->append(yyvsp[0].crn);
}
break;
-case 170:
-#line 1271 "/home/cjk/groff/src/preproc/pic/pic.y"
-{
- yyval.pth = yyvsp[0].pth;
- }
+case 174:
+#line 1329 "pic.y"
+{ yyval.pth = yyvsp[0].pth; }
break;
-case 171:
-#line 1275 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 175:
+#line 1331 "pic.y"
{
yyval.pth = yyvsp[-3].pth;
yyval.pth->set_ypath(yyvsp[-1].pth);
}
break;
-case 172:
-#line 1281 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 176:
+#line 1337 "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));
yyval.pth = yyvsp[0].pth;
}
break;
-case 173:
-#line 1287 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 177:
+#line 1343 "pic.y"
{
lex_warning("`last %1' in `with' argument ignored",
object_type_name(yyvsp[-1].obtype));
yyval.pth = yyvsp[0].pth;
}
break;
-case 174:
-#line 1293 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 178:
+#line 1349 "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));
yyval.pth = yyvsp[0].pth;
}
break;
-case 175:
-#line 1299 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 179:
+#line 1355 "pic.y"
{
lex_warning("initial `%1' in `with' argument ignored", yyvsp[-1].str);
a_delete yyvsp[-1].str;
yyval.pth = yyvsp[0].pth;
}
break;
-case 176:
-#line 1308 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 180:
+#line 1364 "pic.y"
{ yyval.crn = &object::north; }
break;
-case 177:
-#line 1310 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 181:
+#line 1366 "pic.y"
{ yyval.crn = &object::east; }
break;
-case 178:
-#line 1312 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 182:
+#line 1368 "pic.y"
{ yyval.crn = &object::west; }
break;
-case 179:
-#line 1314 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 183:
+#line 1370 "pic.y"
{ yyval.crn = &object::south; }
break;
-case 180:
-#line 1316 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 184:
+#line 1372 "pic.y"
{ yyval.crn = &object::north_east; }
break;
-case 181:
-#line 1318 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 185:
+#line 1374 "pic.y"
{ yyval.crn = &object:: south_east; }
break;
-case 182:
-#line 1320 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 186:
+#line 1376 "pic.y"
{ yyval.crn = &object::north_west; }
break;
-case 183:
-#line 1322 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 187:
+#line 1378 "pic.y"
{ yyval.crn = &object::south_west; }
break;
-case 184:
-#line 1324 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 188:
+#line 1380 "pic.y"
{ yyval.crn = &object::center; }
break;
-case 185:
-#line 1326 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 189:
+#line 1382 "pic.y"
{ yyval.crn = &object::start; }
break;
-case 186:
-#line 1328 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 190:
+#line 1384 "pic.y"
{ yyval.crn = &object::end; }
break;
-case 187:
-#line 1330 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 191:
+#line 1386 "pic.y"
{ yyval.crn = &object::north; }
break;
-case 188:
-#line 1332 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 192:
+#line 1388 "pic.y"
{ yyval.crn = &object::south; }
break;
-case 189:
-#line 1334 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 193:
+#line 1390 "pic.y"
{ yyval.crn = &object::west; }
break;
-case 190:
-#line 1336 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 194:
+#line 1392 "pic.y"
{ yyval.crn = &object::east; }
break;
-case 191:
-#line 1338 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 195:
+#line 1394 "pic.y"
{ yyval.crn = &object::north_west; }
break;
-case 192:
-#line 1340 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 196:
+#line 1396 "pic.y"
{ yyval.crn = &object::south_west; }
break;
-case 193:
-#line 1342 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 197:
+#line 1398 "pic.y"
{ yyval.crn = &object::north_east; }
break;
-case 194:
-#line 1344 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 198:
+#line 1400 "pic.y"
{ yyval.crn = &object::south_east; }
break;
-case 195:
-#line 1346 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 199:
+#line 1402 "pic.y"
{ yyval.crn = &object::west; }
break;
-case 196:
-#line 1348 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 200:
+#line 1404 "pic.y"
{ yyval.crn = &object::east; }
break;
-case 197:
-#line 1350 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 201:
+#line 1406 "pic.y"
{ yyval.crn = &object::north_west; }
break;
-case 198:
-#line 1352 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 202:
+#line 1408 "pic.y"
{ yyval.crn = &object::south_west; }
break;
-case 199:
-#line 1354 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 203:
+#line 1410 "pic.y"
{ yyval.crn = &object::north_east; }
break;
-case 200:
-#line 1356 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 204:
+#line 1412 "pic.y"
{ yyval.crn = &object::south_east; }
break;
-case 201:
-#line 1358 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 205:
+#line 1414 "pic.y"
+{ yyval.crn = &object::north; }
+break;
+case 206:
+#line 1416 "pic.y"
+{ yyval.crn = &object::south; }
+break;
+case 207:
+#line 1418 "pic.y"
+{ yyval.crn = &object::east; }
+break;
+case 208:
+#line 1420 "pic.y"
+{ yyval.crn = &object::west; }
+break;
+case 209:
+#line 1422 "pic.y"
{ yyval.crn = &object::center; }
break;
-case 202:
-#line 1360 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 210:
+#line 1424 "pic.y"
{ yyval.crn = &object::start; }
break;
-case 203:
-#line 1362 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 211:
+#line 1426 "pic.y"
{ yyval.crn = &object::end; }
break;
-case 204:
-#line 1367 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 212:
+#line 1431 "pic.y"
{
if (!lookup_variable(yyvsp[0].str, & yyval.x)) {
lex_error("there is no variable `%1'", yyvsp[0].str);
@@ -4922,12 +5344,12 @@ case 204:
a_delete yyvsp[0].str;
}
break;
-case 205:
-#line 1375 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 213:
+#line 1439 "pic.y"
{ yyval.x = yyvsp[0].x; }
break;
-case 206:
-#line 1377 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 214:
+#line 1441 "pic.y"
{
if (yyvsp[-1].pl.obj != 0)
yyval.x = yyvsp[-1].pl.obj->origin().x;
@@ -4935,8 +5357,8 @@ case 206:
yyval.x = yyvsp[-1].pl.x;
}
break;
-case 207:
-#line 1384 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 215:
+#line 1448 "pic.y"
{
if (yyvsp[-1].pl.obj != 0)
yyval.x = yyvsp[-1].pl.obj->origin().y;
@@ -4944,8 +5366,8 @@ case 207:
yyval.x = yyvsp[-1].pl.y;
}
break;
-case 208:
-#line 1391 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 216:
+#line 1455 "pic.y"
{
if (yyvsp[-1].pl.obj != 0)
yyval.x = yyvsp[-1].pl.obj->height();
@@ -4953,8 +5375,8 @@ case 208:
yyval.x = 0.0;
}
break;
-case 209:
-#line 1398 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 217:
+#line 1462 "pic.y"
{
if (yyvsp[-1].pl.obj != 0)
yyval.x = yyvsp[-1].pl.obj->width();
@@ -4962,8 +5384,8 @@ case 209:
yyval.x = 0.0;
}
break;
-case 210:
-#line 1405 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 218:
+#line 1469 "pic.y"
{
if (yyvsp[-1].pl.obj != 0)
yyval.x = yyvsp[-1].pl.obj->radius();
@@ -4971,20 +5393,20 @@ case 210:
yyval.x = 0.0;
}
break;
-case 211:
-#line 1412 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 219:
+#line 1476 "pic.y"
{ yyval.x = yyvsp[-2].x + yyvsp[0].x; }
break;
-case 212:
-#line 1414 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 220:
+#line 1478 "pic.y"
{ yyval.x = yyvsp[-2].x - yyvsp[0].x; }
break;
-case 213:
-#line 1416 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 221:
+#line 1480 "pic.y"
{ yyval.x = yyvsp[-2].x * yyvsp[0].x; }
break;
-case 214:
-#line 1418 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 222:
+#line 1482 "pic.y"
{
if (yyvsp[0].x == 0.0) {
lex_error("division by zero");
@@ -4993,8 +5415,8 @@ case 214:
yyval.x = yyvsp[-2].x/yyvsp[0].x;
}
break;
-case 215:
-#line 1426 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 223:
+#line 1490 "pic.y"
{
if (yyvsp[0].x == 0.0) {
lex_error("modulus by zero");
@@ -5003,8 +5425,8 @@ case 215:
yyval.x = fmod(yyvsp[-2].x, yyvsp[0].x);
}
break;
-case 216:
-#line 1434 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 224:
+#line 1498 "pic.y"
{
errno = 0;
yyval.x = pow(yyvsp[-2].x, yyvsp[0].x);
@@ -5018,16 +5440,16 @@ case 216:
}
}
break;
-case 217:
-#line 1447 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 225:
+#line 1511 "pic.y"
{ yyval.x = -yyvsp[0].x; }
break;
-case 218:
-#line 1449 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 226:
+#line 1513 "pic.y"
{ yyval.x = yyvsp[-1].x; }
break;
-case 219:
-#line 1451 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 227:
+#line 1515 "pic.y"
{
errno = 0;
yyval.x = sin(yyvsp[-1].x);
@@ -5037,8 +5459,8 @@ case 219:
}
}
break;
-case 220:
-#line 1460 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 228:
+#line 1524 "pic.y"
{
errno = 0;
yyval.x = cos(yyvsp[-1].x);
@@ -5048,8 +5470,8 @@ case 220:
}
}
break;
-case 221:
-#line 1469 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 229:
+#line 1533 "pic.y"
{
errno = 0;
yyval.x = atan2(yyvsp[-3].x, yyvsp[-1].x);
@@ -5063,8 +5485,8 @@ case 221:
}
}
break;
-case 222:
-#line 1482 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 230:
+#line 1546 "pic.y"
{
errno = 0;
yyval.x = log10(yyvsp[-1].x);
@@ -5074,8 +5496,8 @@ case 222:
}
}
break;
-case 223:
-#line 1491 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 231:
+#line 1555 "pic.y"
{
errno = 0;
yyval.x = pow(10.0, yyvsp[-1].x);
@@ -5085,8 +5507,8 @@ case 223:
}
}
break;
-case 224:
-#line 1500 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 232:
+#line 1564 "pic.y"
{
errno = 0;
yyval.x = sqrt(yyvsp[-1].x);
@@ -5096,71 +5518,74 @@ case 224:
}
}
break;
-case 225:
-#line 1509 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 233:
+#line 1573 "pic.y"
{ yyval.x = yyvsp[-3].x > yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; }
break;
-case 226:
-#line 1511 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 234:
+#line 1575 "pic.y"
{ yyval.x = yyvsp[-3].x < yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; }
break;
-case 227:
-#line 1513 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 235:
+#line 1577 "pic.y"
{ yyval.x = floor(yyvsp[-1].x); }
break;
-case 228:
-#line 1515 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 236:
+#line 1579 "pic.y"
{ yyval.x = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*yyvsp[-1].x); }
break;
-case 229:
-#line 1517 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 237:
+#line 1581 "pic.y"
{
/* return a random number in the range [0,1) */
/* portable, but not very random */
yyval.x = (rand() & 0x7fff) / double(0x8000);
}
break;
-case 230:
-#line 1523 "/home/cjk/groff/src/preproc/pic/pic.y"
-{ yyval.x = 0; srand((unsigned int)yyvsp[-1].x); }
+case 238:
+#line 1587 "pic.y"
+{
+ yyval.x = 0;
+ srand((unsigned int)yyvsp[-1].x);
+ }
break;
-case 231:
-#line 1525 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 239:
+#line 1592 "pic.y"
{ yyval.x = (yyvsp[-2].x < yyvsp[0].x); }
break;
-case 232:
-#line 1527 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 240:
+#line 1594 "pic.y"
{ yyval.x = (yyvsp[-2].x <= yyvsp[0].x); }
break;
-case 233:
-#line 1529 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 241:
+#line 1596 "pic.y"
{ yyval.x = (yyvsp[-2].x > yyvsp[0].x); }
break;
-case 234:
-#line 1531 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 242:
+#line 1598 "pic.y"
{ yyval.x = (yyvsp[-2].x >= yyvsp[0].x); }
break;
-case 235:
-#line 1533 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 243:
+#line 1600 "pic.y"
{ yyval.x = (yyvsp[-2].x == yyvsp[0].x); }
break;
-case 236:
-#line 1535 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 244:
+#line 1602 "pic.y"
{ yyval.x = (yyvsp[-2].x != yyvsp[0].x); }
break;
-case 237:
-#line 1537 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 245:
+#line 1604 "pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); }
break;
-case 238:
-#line 1539 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 246:
+#line 1606 "pic.y"
{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); }
break;
-case 239:
-#line 1541 "/home/cjk/groff/src/preproc/pic/pic.y"
+case 247:
+#line 1608 "pic.y"
{ yyval.x = (yyvsp[0].x == 0.0); }
break;
-#line 5161 "y.tab.c"
+#line 5589 "y.tab.c"
}
yyssp -= yym;
yystate = *yyssp;
diff --git a/contrib/groff/src/preproc/pic/pic.h b/contrib/groff/src/preproc/pic/pic.h
index 36c36d1..0a092fe 100644
--- a/contrib/groff/src/preproc/pic/pic.h
+++ b/contrib/groff/src/preproc/pic/pic.h
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,8 +19,8 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
-#include <string.h>
+#include "lib.h"
+
#include <math.h>
#include <stdlib.h>
#include <errno.h>
@@ -32,7 +33,6 @@ extern "C" {
#include "assert.h"
#include "cset.h"
-#include "lib.h"
#include "stringclass.h"
#include "errarg.h"
#include "error.h"
diff --git a/contrib/groff/src/preproc/pic/pic.man b/contrib/groff/src/preproc/pic/pic.man
index ea53074..406246f 100644
--- a/contrib/groff/src/preproc/pic/pic.man
+++ b/contrib/groff/src/preproc/pic/pic.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -16,30 +16,43 @@ versions, except that this permission notice may be included in
translations approved by the Free Software Foundation instead of in
the original English.
..
+.
+.
.\" Like TP, but if specified indent is more than half
.\" the current line-length - indent, use the default indent.
.de Tp
.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
.el .TP "\\$1"
..
+.
.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-.el .ds tx TeX
+.el .ds tx TeX
+.
.ie \n(.g .ds ic \/
-.el .ds ic \^
+.el .ds ic \^
+.
.\" The BSD man macros can't handle " in arguments to font change macros,
.\" so use \(ts instead of ".
.tr \(ts"
+.
+.
.TH @G@PIC @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
+.
+.
.SH NAME
+.
@g@pic \- compile pictures for troff or TeX
+.
+.
.SH SYNOPSIS
+.
.B @g@pic
[
.B \-nvCSU
]
[
.I filename
-\&.\|.\|.
+\&.\|.\|.\&
]
.br
.B @g@pic
@@ -49,9 +62,12 @@ the original English.
]
[
.I filename
-\&.\|.\|.
+\&.\|.\|.\&
]
+.
+.
.SH DESCRIPTION
+.
This manual page describes the GNU version of
.BR pic ,
which is part of the groff document formatting system.
@@ -80,7 +96,10 @@ When the macro package being used does not supply such definitions
appropriate definitions can be obtained with
.BR \-mpic :
these will center each picture.
+.
+.
.SH OPTIONS
+.
Options that do not take arguments may be grouped behind a single
.BR \- .
The special option
@@ -89,6 +108,7 @@ can be used to mark the end of the options.
A filename of
.B \-
refers to the standard input.
+.
.TP
.B \-C
Recognize
@@ -96,6 +116,7 @@ Recognize
and
.B .PE
even when followed by a character other than space or newline.
+.
.TP
.B \-S
Safer mode; do not execute
@@ -103,10 +124,12 @@ Safer mode; do not execute
commands.
This can be useful when operating on untrustworthy input.
(enabled by default)
+.
.TP
.B \-U
Unsafe mode; revert the default option
.BR \-S .
+.
.TP
.B \-n
Don't use the groff extensions to the troff drawing commands.
@@ -119,9 +142,11 @@ The
option also causes
.B pic
not to use zero-length lines to draw dots in troff mode.
+.
.TP
.B \-t
\*(tx mode.
+.
.TP
.B \-c
Be more compatible with
@@ -151,21 +176,26 @@ specified by use of the
attribute or by setting the
.B linethick
variable.
+.
.TP
.B \-v
Print the version number.
+.
.TP
.B \-z
In \*(tx mode draw dots using zero-length lines.
+.
.LP
The following options supported by other versions of
.B pic
are ignored:
+.
.TP
.B \-D
Draw all lines using the \eD escape sequence.
.B pic
always does this.
+.
.TP
.BI \-T \ dev
Generate output for the
@@ -177,15 +207,24 @@ This is unnecessary because the
output generated by
.B pic
is device-independent.
+.
+.
.SH USAGE
+.
This section describes only the differences between GNU
.B pic
and the original version of
.BR pic .
Many of these differences also apply to newer versions of Unix
.BR pic .
-.SS \*(tx mode
+A complete documentation is available in the file
.LP
+.RS
+.B @DOCDIR@/pic.ms
+.RE
+.
+.SS \*(tx mode
+.
\*(tx mode is enabled by the
.B \-t
option.
@@ -225,7 +264,9 @@ change the value of
.BR \ebaselineskip .
Anything else may well produce undesirable results; use at your own risk.
Lines beginning with a period are not given any special treatment.
+.
.SS Commands
+.
.TP
\fBfor\fR \fIvariable\fR \fB=\fR \fIexpr1\fR \fBto\fR \fIexpr2\fR \
[\fBby\fR [\fB*\fR]\fIexpr3\fR] \fBdo\fR \fIX\fR \fIbody\fR \fIX\fR
@@ -259,6 +300,7 @@ will instead be multiplied by
.I X
can be any character not occurring in
.IR body .
+.
.TP
\fBif\fR \fIexpr\fR \fBthen\fR \fIX\fR \fIif-true\fR \fIX\fR \
[\fBelse\fR \fIY\fR \fIif-false\fR \fIY\fR]
@@ -274,6 +316,7 @@ can be any character not occurring in
.I Y
can be any character not occurring in
.IR if-false .
+.
.TP
\fBprint\fR \fIarg\fR\|.\|.\|.
Concatenate the arguments and print as a line on stderr.
@@ -281,18 +324,20 @@ Each
.I arg
must be an expression, a position, or text.
This is useful for debugging.
+.
.TP
\fBcommand\fR \fIarg\fR\|.\|.\|.
Concatenate the arguments
-and pass them through as a line to troff or\*(tx.
+and pass them through as a line to troff or \*(tx.
Each
.I arg
must be an expression, a position, or text.
This has a similar effect to a line beginning with
-.B .
+.B .\&
or
.BR \e ,
but allows the values of variables to be passed through.
+.
.TP
\fBsh\fR \fIX\fR \fIcommand\fR \fIX\fR
Pass
@@ -301,11 +346,13 @@ to a shell.
.I X
can be any character not occurring in
.IR command .
+.
.TP
\fBcopy\fR \fB"\fIfilename\fB"\fR
Include
.I filename
at this point in the file.
+.
.TP
\fBcopy\fR [\fB"\fIfilename\fB"\fR] \fBthru\fR \fIX\fR \fIbody\fR \fIX\fR \
[\fBuntil\fR \fB"\fIword\*(ic\fB"\fR]
@@ -377,12 +424,13 @@ The commands to be performed for each line can also be taken
from a macro defined earlier by giving the name of the macro
as the argument to
.BR thru .
+.
.LP
.B reset
.br
.ns
.TP
-\fBreset\fI variable1\fB,\fI variable2 .\^.\^.
+\fBreset\fI variable1\fR[\fB,\fR]\fI variable2 .\^.\^.
Reset pre-defined variables
.IR variable1 ,
.I variable2
@@ -393,6 +441,7 @@ Note that assigning a value to
.B scale
also causes all pre-defined variables that control dimensions
to be reset to their default values times the new value of scale.
+.
.TP
\fBplot\fR \fIexpr\fR [\fB"\fItext\*(ic\fB"\fR]
This is a text object which is constructed by using
@@ -412,24 +461,48 @@ Be very careful that you specify an appropriate format string;
does only very limited checking of the string.
This is deprecated in favour of
.BR sprintf .
+.
.TP
-.IB variable := expr
+.IB variable\ := \ expr
This is similar to
.B =
except
.I variable
must already be defined,
-and the value of
+and
+.I expr
+will be assigned to
.I variable
-will be changed only in the innermost block in which it is defined.
+without creating a variable local to the current block.
(By contrast,
.B =
defines the variable in the current block if it is not already defined there,
-and then changes the value in the current block.)
+and then changes the value in the current block only.)
+For example, the following:
+.RS
+.IP
+.ft B
+.nf
+\&.PS
+x = 3
+y = 3
+[
+ x := 5
+ y = 5
+]
+print x " " y
+\&.PE
+.ft
+.fi
+.RE
+.IP
+prints
+.BR 5\ 3 .
+.
.LP
Arguments of the form
.IP
-.IR X\ anything\ X
+.I X anything X
.LP
are also allowed to be of the form
.IP
@@ -447,8 +520,11 @@ or imbalanced occurrences of
.B {
and
.BR } .
+.
.SS Expressions
+.
The syntax for expressions has been significantly extended:
+.
.LP
.IB x\ ^\ y
(exponentiation)
@@ -463,7 +539,9 @@ The syntax for expressions has been significantly extended:
(base 10)
.br
.BI exp( x )
-(base 10, ie 10\v'-.4m'\fIx\*(ic\fR\v'.4m')
+(base 10, ie
+.ie t 10\v'-.4m'\fIx\*(ic\fR\v'.4m')
+.el 10^\fIx\fR)
.br
.BI sqrt( x )
.br
@@ -506,11 +584,13 @@ deprecated)
.br
\fB"\fIstr1\*(ic\fB" != "\fIstr2\*(ic\fB"\fR
.br
+.
.LP
String comparison expressions must be parenthesised in some contexts
to avoid ambiguity.
+.
.SS Other Changes
-.LP
+.
A bare expression,
.IR expr ,
is acceptable as an attribute;
@@ -523,13 +603,19 @@ For example
.IP
.B line 2i
.LP
-means draw a line 2 inches long in the current direction.
+means draw a line 2\ inches long in the current direction.
+The `i' (or `I') character is ignored; to use another measurement unit,
+set the
+.I scale
+variable to an appropriate value.
+.
.LP
The maximum width and height of the picture are taken from the variables
.B maxpswid
and
.BR maxpsht .
Initially these have values 8.5 and 11.
+.
.LP
Scientific notation is allowed for numbers.
For example
@@ -537,6 +623,7 @@ For example
.B
x = 5e\-2
.RE
+.
.LP
Text attributes can be compounded.
For example,
@@ -545,6 +632,7 @@ For example,
"foo" above ljust
.RE
is legal.
+.
.LP
There is no limit to the depth to which blocks can be examined.
For example,
@@ -556,12 +644,15 @@ For example,
circle at last [\^].A.B.C
.RE
is acceptable.
+.
.LP
Arcs now have compass points
determined by the circle of which the arc is a part.
+.
.LP
Circles and arcs can be dotted or dashed.
In \*(tx mode splines can be dotted or dashed.
+.
.LP
Boxes can have rounded corners.
The
@@ -576,8 +667,9 @@ attribute is given, a radius of
is used.
Initially,
.B boxrad
-has a value of 0.
+has a value of\ 0.
A box with rounded corners can be dotted or dashed.
+.
.LP
The
.B .PS
@@ -587,13 +679,15 @@ If the width of zero is specified the width will be ignored in computing
the scaling factor for the picture.
Note that GNU
.B pic
-will always scale a picture by the same amount vertically as horizontally.
+will always scale a picture by the same amount vertically as well as
+horizontally.
This is different from the
.SM DWB
2.0
.B pic
which may scale a picture by a different amount vertically than
horizontally if a height is specified.
+.
.LP
Each text object has an invisible box associated with it.
The compass points of a text object are determined by this box.
@@ -611,8 +705,9 @@ Initially
and
.B textht
have a value of 0.
+.
.LP
-In places where a quoted text string can be used,
+In (almost all) places where a quoted text string can be used,
an expression of the form
.IP
.BI sprintf(\(ts format \(ts,\ arg ,\fR.\|.\|.\fB)
@@ -622,14 +717,8 @@ this will produce the arguments formatted according to
.IR format ,
which should be a string as described in
.BR printf (3)
-appropriate for the number of arguments supplied,
-using only the
-.BR e ,
-.BR f ,
-.B g
-or
-.B %
-format characters.
+appropriate for the number of arguments supplied.
+.
.LP
The thickness of the lines used to draw objects is controlled by the
.B linethick
@@ -663,9 +752,10 @@ value of the
variable, nor by the width or height given in the
.B .PS
line.
+.
.LP
Boxes (including boxes with rounded corners),
-circles and ellipses can be filled by giving then an attribute of
+circles and ellipses can be filled by giving them an attribute of
.BR fill [ ed ].
This takes an optional argument of an expression with a value between
0 and 1; 0 will fill it with white, 1 with black, values in between
@@ -683,16 +773,48 @@ The invisible attribute does not affect the filling of objects.
Any text associated with a filled object will be added after the
object has been filled, so that the text will not be obscured
by the filling.
+.
+.LP
+Three additional modifiers are available to specify colored objects:
+.BR outline [ d ]
+sets the color of the outline,
+.B shaded
+the fill color, and
+.BR colo [ u ] r [ ed ]
+sets both.
+All three keywords expect a suffix specifying the color, for example
+.RS
+.LP
+.B circle shaded """green""" outline """black"""
+.RE
+.LP
+Currently, color support isn't available in \*(tx mode.
+Predefined color names for
+.B groff
+are in the device macro files, for example
+.BR ps.tmac ;
+additional colors can be defined with the
+.B .defcolor
+request (see the manual page of
+.BR @g@troff (@MAN1EXT@)
+for more details).
+.LP
+.B pic
+assumes that at the beginning of a picture both glyph and fill color are
+set to the default value.
+.
.LP
Arrow heads will be drawn as solid triangles if the variable
.B arrowhead
-is non-zero and either \*(tx mode is enabled or
-the
-.B \-x
-option has been given.
+is non-zero and either \*(tx mode is enabled or the
+.B \-n
+option has not been given.
Initially
.B arrowhead
-has a value of 1.
+has a value of\ 1.
+Note that solid arrow heads are always filled with the current outline
+color.
+.
.LP
The troff output of
.B pic
@@ -702,11 +824,12 @@ The
option is therefore redundant.
All numbers are taken to be in inches; numbers are never interpreted
to be in troff machine units.
+.
.LP
Objects can have an
.B aligned
attribute.
-This will only work when the postprocessor is
+This will only work if the postprocessor is
.BR grops .
Any text associated with an object having the
.B aligned
@@ -715,6 +838,7 @@ so that it is aligned in the direction from the start point
to the end point of the object.
Note that this attribute will have no effect for objects whose start and
end points are coincident.
+.
.LP
In places where
.IB n th
@@ -729,13 +853,17 @@ and the
.BR th .
For example,
.IP
-.B
+.ft B
.nf
for i = 1 to 4 do {
line from `i'th box.nw to `i+1'th box.se
}
+.ft
.fi
+.
+.
.SH CONVERSION
+.
To obtain a stand-alone picture from a
.B pic
file, enclose your
@@ -749,6 +877,7 @@ requests;
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
@@ -774,6 +903,7 @@ Alternatively, you can define your own requests, e.g. to do nothing:
.ft
.fi
.RE
+.
.LP
.B groff
itself does not provide direct conversion into other graphics file
@@ -806,6 +936,7 @@ Call
.RE
.LP
for a list of the available devices.
+.
.LP
As the Encapsulated PostScript File Format
.B EPS
@@ -827,7 +958,10 @@ file can be then converted to virtually any graphics format using the tools
of the
.B netpbm
package .
+.
+.
.SH FILES
+.
.Tp \w'\fB@MACRODIR@/pic.tmac'u+3n
.B
@MACRODIR@/pic.tmac
@@ -836,7 +970,10 @@ Example definitions of the
and
.B PE
macros.
+.
+.
.SH "SEE ALSO"
+.
.BR @g@troff (@MAN1EXT@),
.BR groff_out (@MAN5EXT@),
.BR tex (1),
@@ -851,7 +988,7 @@ Tpic: Pic for \*(tx
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>
+<http://cm.bell-labs.com/cm/cs/cstr/116.ps.gz>
(revised May, 1991).
.LP
.B ps2eps
@@ -866,14 +1003,16 @@ W. Richard Stevens - Turning PIC Into HTML
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
+.
+Input characters that are invalid for
.B groff
(ie those with
.SM ASCII
-code 0 or between 013 and 037 octal or between 0200 and 0237 octal)
-are rejected even in \*(tx mode.
+code 0, or 013 octal, or between 015 and 037 octal, or between 0200 and 0237
+octal) are rejected even in \*(tx mode.
.LP
The interpretation of
.B fillval
diff --git a/contrib/groff/src/preproc/pic/pic.y b/contrib/groff/src/preproc/pic/pic.y
index c0a7315..15b6b3f 100644
--- a/contrib/groff/src/preproc/pic/pic.y
+++ b/contrib/groff/src/preproc/pic/pic.y
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -202,6 +202,10 @@ char *do_sprintf(const char *form, const double *v, int nv);
%token GREATEREQUAL
%token LEFT_CORNER
%token RIGHT_CORNER
+%token NORTH
+%token SOUTH
+%token EAST
+%token WEST
%token CENTER
%token END
%token START
@@ -210,6 +214,9 @@ char *do_sprintf(const char *form, const double *v, int nv);
%token PLOT
%token THICKNESS
%token FILL
+%token COLORED
+%token OUTLINED
+%token SHADED
%token ALIGNED
%token SPRINTF
%token COMMAND
@@ -217,6 +224,8 @@ char *do_sprintf(const char *form, const double *v, int nv);
%token DEFINE
%token UNDEF
+%left '.'
+
/* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
%left PLOT
%left TEXT SPRINTF
@@ -231,12 +240,14 @@ box "foo" above ljust == box ("foo" above ljust)
/* Give attributes that take an optional expression a higher
precedence than left and right, so that eg `line chop left'
parses properly. */
-%left CHOP SOLID DASHED DOTTED UP DOWN FILL
+%left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
%left LABEL
%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST
%left ORDINAL HERE '`'
+%left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '['
+
/* these need to be lower than '-' */
%left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS
@@ -244,7 +255,7 @@ parses properly. */
works */
%left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C
%left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER
-%left UPPER LOWER CENTER START END
+%left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END
%left ','
%left OROR
@@ -350,7 +361,7 @@ placeless_element:
{
fprintf(stderr, "%s\n", $2.str);
a_delete $2.str;
- fflush(stderr);
+ fflush(stderr);
}
| SH
{ delim_flag = 1; }
@@ -433,11 +444,20 @@ placeless_element:
reset_variables:
RESET VARIABLE
- { reset($2); a_delete $2; }
+ {
+ reset($2);
+ a_delete $2;
+ }
| reset_variables VARIABLE
- { reset($2); a_delete $2; }
+ {
+ reset($2);
+ a_delete $2;
+ }
| reset_variables ',' VARIABLE
- { reset($3); a_delete $3; }
+ {
+ reset($3);
+ a_delete $3;
+ }
;
print_args:
@@ -462,7 +482,7 @@ print_args:
;
print_arg:
- expr %prec ','
+ expr %prec ','
{
$$.str = new char[GDIGITS + 1];
sprintf($$.str, "%g", $1);
@@ -471,19 +491,24 @@ print_arg:
}
| text
{ $$ = $1; }
- | position %prec ','
+ | position %prec ','
{
$$.str = new char[GDIGITS + 2 + GDIGITS + 1];
sprintf($$.str, "%g, %g", $1.x, $1.y);
$$.filename = 0;
$$.lineno = 0;
}
+ ;
simple_if:
IF any_expr THEN
{ delim_flag = 1; }
DELIMITED
- { delim_flag = 0; $$.x = $2; $$.body = $5; }
+ {
+ delim_flag = 0;
+ $$.x = $2;
+ $$.body = $5;
+ }
;
until:
@@ -532,11 +557,20 @@ text_expr:
optional_by:
/* empty */
- { $$.val = 1.0; $$.is_multiplicative = 0; }
+ {
+ $$.val = 1.0;
+ $$.is_multiplicative = 0;
+ }
| BY expr
- { $$.val = $2; $$.is_multiplicative = 0; }
+ {
+ $$.val = $2;
+ $$.is_multiplicative = 0;
+ }
| BY '*' expr
- { $$.val = $3; $$.is_multiplicative = 1; }
+ {
+ $$.val = $3;
+ $$.is_multiplicative = 1;
+ }
;
element:
@@ -555,7 +589,11 @@ element:
}
}
| LABEL ':' optional_separator element
- { $$ = $4; define_label($1, & $$); a_delete $1; }
+ {
+ $$ = $4;
+ define_label($1, & $$);
+ a_delete $1;
+ }
| LABEL ':' optional_separator position_not_place
{
$$.obj = 0;
@@ -603,17 +641,11 @@ optional_element:
object_spec:
BOX
- {
- $$ = new object_spec(BOX_OBJECT);
- }
+ { $$ = new object_spec(BOX_OBJECT); }
| CIRCLE
- {
- $$ = new object_spec(CIRCLE_OBJECT);
- }
+ { $$ = new object_spec(CIRCLE_OBJECT); }
| ELLIPSE
- {
- $$ = new object_spec(ELLIPSE_OBJECT);
- }
+ { $$ = new object_spec(ELLIPSE_OBJECT); }
| ARC
{
$$ = new object_spec(ARC_OBJECT);
@@ -647,7 +679,7 @@ object_spec:
lookup_variable("linewid", & $$->segment_width);
$$->dir = current_direction;
}
- | text %prec TEXT
+ | text %prec TEXT
{
$$ = new object_spec(TEXT_OBJECT);
$$->text = new text_item($1.str, $1.filename, $1.lineno);
@@ -715,7 +747,7 @@ object_spec:
$$->radius = $3/2.0;
$$->flags |= HAS_RADIUS;
}
- | object_spec expr %prec HEIGHT
+ | object_spec expr %prec HEIGHT
{
$$ = $1;
$$->flags |= HAS_SEGMENT;
@@ -830,6 +862,15 @@ object_spec:
$$->flags |= HAS_WITH;
$$->with = $3;
}
+ | object_spec WITH position %prec ','
+ {
+ $$ = $1;
+ $$->flags |= HAS_WITH;
+ position pos;
+ pos.x = $3.x;
+ pos.y = $3.y;
+ $$->with = new path(pos);
+ }
| object_spec BY expr_pair
{
$$ = $1;
@@ -888,6 +929,29 @@ object_spec:
$$->flags |= IS_FILLED;
$$->fill = $3;
}
+ | object_spec SHADED text
+ {
+ $$ = $1;
+ $$->flags |= (IS_SHADED | IS_FILLED);
+ $$->shaded = new char[strlen($3.str)+1];
+ strcpy($$->shaded, $3.str);
+ }
+ | object_spec COLORED text
+ {
+ $$ = $1;
+ $$->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
+ $$->shaded = new char[strlen($3.str)+1];
+ strcpy($$->shaded, $3.str);
+ $$->outlined = new char[strlen($3.str)+1];
+ strcpy($$->outlined, $3.str);
+ }
+ | object_spec OUTLINED text
+ {
+ $$ = $1;
+ $$->flags |= IS_OUTLINED;
+ $$->outlined = new char[strlen($3.str)+1];
+ strcpy($$->outlined, $3.str);
+ }
| object_spec CHOP
{
$$ = $1;
@@ -956,7 +1020,7 @@ object_spec:
$$ = $1;
$$->flags &= ~IS_CLOCKWISE;
}
- | object_spec text %prec TEXT
+ | object_spec text %prec TEXT
{
$$ = $1;
text_item **p;
@@ -1019,9 +1083,7 @@ object_spec:
text:
TEXT
- {
- $$ = $1;
- }
+ { $$ = $1; }
| SPRINTF '(' TEXT sprintf_args ')'
{
$$.filename = $3.filename;
@@ -1108,13 +1170,17 @@ between:
expr_pair:
expr ',' expr
- { $$.x = $1; $$.y = $3; }
+ {
+ $$.x = $1;
+ $$.y = $3;
+ }
| '(' expr_pair ')'
{ $$ = $2; }
;
place:
- label %prec CHOP /* line at A left == line (at A) left */
+ /* line at A left == line (at A) left */
+ label %prec CHOP
{ $$ = $1; }
| label corner
{
@@ -1154,9 +1220,7 @@ label:
a_delete $1;
}
| nth_primitive
- {
- $$.obj = $1;
- }
+ { $$.obj = $1; }
| label '.' LABEL
{
path pth($3);
@@ -1176,7 +1240,7 @@ ordinal:
;
optional_ordinal_last:
- LAST
+ LAST
{ $$ = 1; }
| ordinal LAST
{ $$ = $1; }
@@ -1238,9 +1302,7 @@ object_type:
label_path:
'.' LABEL
- {
- $$ = new path($2);
- }
+ { $$ = new path($2); }
| label_path '.' LABEL
{
$$ = $1;
@@ -1249,17 +1311,12 @@ label_path:
;
relative_path:
- corner
- {
- $$ = new path($1);
- }
+ corner %prec CHOP
+ { $$ = new path($1); }
/* give this a lower precedence than LEFT and RIGHT so that
[A: box] with .A left == [A: box] with (.A left) */
-
- | label_path %prec TEXT
- {
- $$ = $1;
- }
+ | label_path %prec TEXT
+ { $$ = $1; }
| label_path corner
{
$$ = $1;
@@ -1269,9 +1326,7 @@ relative_path:
path:
relative_path
- {
- $$ = $1;
- }
+ { $$ = $1; }
| '(' relative_path ',' relative_path ')'
{
$$ = $2;
@@ -1355,6 +1410,14 @@ corner:
{ $$ = &object::north_east; }
| LOWER RIGHT_CORNER
{ $$ = &object::south_east; }
+ | NORTH
+ { $$ = &object::north; }
+ | SOUTH
+ { $$ = &object::south; }
+ | EAST
+ { $$ = &object::east; }
+ | WEST
+ { $$ = &object::west; }
| CENTER
{ $$ = &object::center; }
| START
@@ -1444,7 +1507,7 @@ expr:
YYABORT;
}
}
- | '-' expr %prec '!'
+ | '-' expr %prec '!'
{ $$ = -$2; }
| '(' any_expr ')'
{ $$ = $2; }
@@ -1521,7 +1584,10 @@ expr:
$$ = (rand() & 0x7fff) / double(0x8000);
}
| SRAND '(' any_expr ')'
- { $$ = 0; srand((unsigned int)$3); }
+ {
+ $$ = 0;
+ srand((unsigned int)$3);
+ }
| expr '<' expr
{ $$ = ($1 < $3); }
| expr LESSEQUAL expr
@@ -1754,23 +1820,7 @@ char *format_number(const char *form, double n)
{
if (form == 0)
form = "%g";
- else {
- // this is a fairly feeble attempt at validation of the format
- int nspecs = 0;
- for (const char *p = form; *p != '\0'; p++)
- if (*p == '%') {
- if (p[1] == '%')
- p++;
- else
- nspecs++;
- }
- if (nspecs > 1) {
- lex_error("bad format `%1'", form);
- return strsave(form);
- }
- }
- sprintf(sprintf_buf, form, n);
- return strsave(sprintf_buf);
+ return do_sprintf(form, &n, 1);
}
char *do_sprintf(const char *form, const double *v, int nv)
@@ -1792,18 +1842,20 @@ char *do_sprintf(const char *form, const double *v, int nv)
if (*form == '%') {
one_format += *form++;
one_format += '\0';
- sprintf(sprintf_buf, one_format.contents());
+ snprintf(sprintf_buf, sizeof(sprintf_buf),
+ "%s", one_format.contents());
}
else {
if (i >= nv) {
- lex_error("too few arguments to sprintf");
+ lex_error("too few arguments to snprintf");
result += one_format;
result += form;
break;
}
one_format += *form++;
one_format += '\0';
- sprintf(sprintf_buf, one_format.contents(), v[i++]);
+ snprintf(sprintf_buf, sizeof(sprintf_buf),
+ one_format.contents(), v[i++]);
}
one_format.clear();
result += sprintf_buf;
diff --git a/contrib/groff/src/preproc/pic/pic_tab.h b/contrib/groff/src/preproc/pic/pic_tab.h
index 1765882..10d97f1 100644
--- a/contrib/groff/src/preproc/pic/pic_tab.h
+++ b/contrib/groff/src/preproc/pic/pic_tab.h
@@ -97,19 +97,26 @@
#define GREATEREQUAL 353
#define LEFT_CORNER 354
#define RIGHT_CORNER 355
-#define CENTER 356
-#define END 357
-#define START 358
-#define RESET 359
-#define UNTIL 360
-#define PLOT 361
-#define THICKNESS 362
-#define FILL 363
-#define ALIGNED 364
-#define SPRINTF 365
-#define COMMAND 366
-#define DEFINE 367
-#define UNDEF 368
+#define NORTH 356
+#define SOUTH 357
+#define EAST 358
+#define WEST 359
+#define CENTER 360
+#define END 361
+#define START 362
+#define RESET 363
+#define UNTIL 364
+#define PLOT 365
+#define THICKNESS 366
+#define FILL 367
+#define COLORED 368
+#define OUTLINED 369
+#define SHADED 370
+#define ALIGNED 371
+#define SPRINTF 372
+#define COMMAND 373
+#define DEFINE 374
+#define UNDEF 375
typedef union {
char *str;
int n;
diff --git a/contrib/groff/src/preproc/pic/tex.cc b/contrib/groff/src/preproc/pic/tex.cc
index 2a91b62..a9192ac 100644
--- a/contrib/groff/src/preproc/pic/tex.cc
+++ b/contrib/groff/src/preproc/pic/tex.cc
@@ -42,6 +42,10 @@ public:
void circle(const position &, double rad, const line_type &, double);
void ellipse(const position &, const distance &, const line_type &, double);
void command(const char *, const char *, int);
+ void set_color(char *, char *);
+ void reset_color();
+ char *get_last_filled();
+ char *get_outline_color();
int supports_filled_polygons();
private:
position upper_left;
@@ -350,6 +354,28 @@ void tex_output::dot(const position &pos, const line_type &lt)
}
}
+void tex_output::set_color(char *, char *)
+{
+ /* not implemented yet */
+}
+
+void tex_output::reset_color()
+{
+ /* not implemented yet */
+}
+
+char *tex_output::get_last_filled()
+{
+ /* not implemented yet */
+ return NULL;
+}
+
+char *tex_output::get_outline_color()
+{
+ /* not implemented yet */
+ return NULL;
+}
+
class tpic_output : public tex_output {
public:
tpic_output();
diff --git a/contrib/groff/src/preproc/pic/troff.cc b/contrib/groff/src/preproc/pic/troff.cc
index 62fe540..7ee7293 100644
--- a/contrib/groff/src/preproc/pic/troff.cc
+++ b/contrib/groff/src/preproc/pic/troff.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -21,7 +21,6 @@ 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;
@@ -37,6 +36,9 @@ class simple_output : public common_output {
virtual void simple_polygon(int, const position *, int) = 0;
virtual void line_thickness(double) = 0;
virtual void set_fill(double) = 0;
+ virtual void set_color(char *, char *) = 0;
+ virtual void reset_color() = 0;
+ virtual char *get_last_filled() = 0;
void dot(const position &, const line_type &) = 0;
public:
void start_picture(double sc, const position &ll, const position &ur) = 0;
@@ -140,11 +142,10 @@ void simple_output::spline(const position &start, const position *v, int n,
void simple_output::polygon(const position *v, int n,
const line_type &lt, double fill)
{
- if (driver_extension_flag) {
- if (fill >= 0.0) {
+ if (driver_extension_flag && ((fill >= 0.0) || (get_last_filled() != 0))) {
+ if (get_last_filled() == 0)
set_fill(fill);
- simple_polygon(1, v, n);
- }
+ simple_polygon(1, v, n);
}
if (lt.type == line_type::solid && driver_extension_flag) {
line_thickness(lt.thickness);
@@ -159,8 +160,9 @@ void simple_output::polygon(const position *v, int n,
void simple_output::circle(const position &cent, double rad,
const line_type &lt, double fill)
{
- if (driver_extension_flag && fill >= 0.0) {
- set_fill(fill);
+ if (driver_extension_flag && ((fill >= 0.0) || (get_last_filled() != 0))) {
+ if (get_last_filled() == 0)
+ set_fill(fill);
simple_circle(1, cent, rad);
}
line_thickness(lt.thickness);
@@ -184,8 +186,9 @@ void simple_output::circle(const position &cent, double rad,
void simple_output::ellipse(const position &cent, const distance &dim,
const line_type &lt, double fill)
{
- if (driver_extension_flag && fill >= 0.0) {
- set_fill(fill);
+ if (driver_extension_flag && ((fill >= 0.0) || (get_last_filled() != 0))) {
+ if (get_last_filled() == 0)
+ set_fill(fill);
simple_ellipse(1, cent, dim);
}
if (lt.type != line_type::invisible)
@@ -212,6 +215,8 @@ class troff_output : public simple_output {
double scale;
double last_line_thickness;
double last_fill;
+ char *last_filled; // color
+ char *last_outlined; // color
public:
troff_output();
~troff_output();
@@ -229,6 +234,10 @@ public:
void simple_polygon(int, const position *, int);
void line_thickness(double p);
void set_fill(double);
+ void set_color(char *, char *);
+ void reset_color();
+ char *get_last_filled();
+ char *get_outline_color();
position transform(const position &);
};
@@ -238,7 +247,8 @@ output *make_troff_output()
}
troff_output::troff_output()
-: last_filename(0), last_line_thickness(BAD_THICKNESS), last_fill(-1.0)
+: last_filename(0), last_line_thickness(BAD_THICKNESS),
+ last_fill(-1.0), last_filled(0), last_outlined(0)
{
}
@@ -269,7 +279,6 @@ void troff_output::start_picture(double sc,
scale = compute_scale(sc, ll, ur);
height = (ur.y - ll.y)/scale;
double width = (ur.x - ll.x)/scale;
- graphic_start(0);
printf(".PS %.3fi %.3fi", height, width);
if (args)
printf(" %s\n", args);
@@ -288,6 +297,7 @@ void troff_output::finish_picture()
{
line_thickness(BAD_THICKNESS);
last_fill = -1.0; // force it to be reset for each picture
+ reset_color();
if (!flyback_flag)
printf(".sp %.3fi+1\n", height);
printf(".if \\n(" FILL_REG " .fi\n");
@@ -296,7 +306,6 @@ void troff_output::finish_picture()
// this is a little gross
set_location(current_filename, current_lineno);
fputs(flyback_flag ? ".PF\n" : ".PE\n", stdout);
- graphic_end();
}
void troff_output::command(const char *s,
@@ -472,6 +481,54 @@ void troff_output::set_fill(double f)
printf("\\D'f %du'\\h'%du'\n.sp -1\n", int(f*FILL_MAX), -int(f*FILL_MAX));
last_fill = f;
}
+ if (last_filled) {
+ free(last_filled);
+ last_filled = 0;
+ printf("\\M[]\n.sp -1\n");
+ }
+}
+
+void troff_output::set_color(char *color_fill, char *color_outlined)
+{
+ if (driver_extension_flag) {
+ if (last_filled || last_outlined) {
+ reset_color();
+ }
+ if (color_fill) {
+ printf("\\M[%s]\n.sp -1\n", color_fill);
+ last_filled = strdup(color_fill);
+ }
+ if (color_outlined) {
+ printf("\\m[%s]\n.sp -1\n", color_outlined);
+ last_outlined = strdup(color_outlined);
+ }
+ }
+}
+
+void troff_output::reset_color()
+{
+ if (driver_extension_flag) {
+ if (last_filled) {
+ printf("\\M[]\n.sp -1\n");
+ free(last_filled);
+ last_filled = 0;
+ }
+ if (last_outlined) {
+ printf("\\m[]\n.sp -1\n");
+ free(last_outlined);
+ last_outlined = 0;
+ }
+ }
+}
+
+char *troff_output::get_last_filled()
+{
+ return last_filled;
+}
+
+char *troff_output::get_outline_color()
+{
+ return last_outlined;
}
const double DOT_AXIS = .044;
diff --git a/contrib/groff/src/preproc/refer/Makefile.sub b/contrib/groff/src/preproc/refer/Makefile.sub
index 1631b5e..9f4a53b 100644
--- a/contrib/groff/src/preproc/refer/Makefile.sub
+++ b/contrib/groff/src/preproc/refer/Makefile.sub
@@ -1,13 +1,13 @@
-PROG=refer
+PROG=refer$(EXEEXT)
MAN1=refer.n
XLIBS=$(LIBBIB) $(LIBGROFF)
MLIB=$(LIBM)
OBJS=\
- command.o \
- label.o \
- ref.o \
- refer.o \
- token.o
+ command.$(OBJEXT) \
+ label.$(OBJEXT) \
+ ref.$(OBJEXT) \
+ refer.$(OBJEXT) \
+ token.$(OBJEXT)
CCSRCS=\
$(srcdir)/command.cc \
$(srcdir)/ref.cc \
@@ -19,5 +19,5 @@ HDRS=\
$(srcdir)/command.h \
$(srcdir)/ref.h
GRAM=$(srcdir)/label.y
-YTABC=$(srcdir)/label.cc
+YTABC=label.cc
NAMEPREFIX=$(g)
diff --git a/contrib/groff/src/preproc/refer/command.cc b/contrib/groff/src/preproc/refer/command.cc
index bf88c89d..a7c6bfb 100644
--- a/contrib/groff/src/preproc/refer/command.cc
+++ b/contrib/groff/src/preproc/refer/command.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -193,9 +194,9 @@ void input_stack::push_file(const char *fn)
}
if (c == EOF)
break;
- if (illegal_input_char(c))
+ if (invalid_input_char(c))
error_with_file_and_line(fn, lineno,
- "illegal input character code %1", int(c));
+ "invalid input character code %1", int(c));
else {
buf += c;
if (c == '\n') {
diff --git a/contrib/groff/src/preproc/refer/label.cc b/contrib/groff/src/preproc/refer/label.cc
index c6dc07c..8d915a8 100644
--- a/contrib/groff/src/preproc/refer/label.cc
+++ b/contrib/groff/src/preproc/refer/label.cc
@@ -1,6 +1,5 @@
#ifndef lint
-/*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 $";
+static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93 (groff)";
#endif
#define YYBYACC 1
#define YYMAJOR 1
@@ -214,7 +213,7 @@ typedef union {
struct { int ndigits; int val; } dig;
struct { int start; int len; } str;
} YYSTYPE;
-#line 218 "y.tab.c"
+#line 217 "y.tab.c"
#define TOKEN_LETTER 257
#define TOKEN_LITERAL 258
#define TOKEN_DIGIT 259
@@ -1224,7 +1223,7 @@ int reference::get_nauthors() const
}
return nauthors;
}
-#line 1228 "y.tab.c"
+#line 1227 "y.tab.c"
#define YYABORT goto yyabort
#define YYREJECT goto yyabort
#define YYACCEPT goto yyaccept
@@ -1298,6 +1297,10 @@ yyloop:
goto yyreduce;
}
if (yyerrflag) goto yyinrecovery;
+#ifdef lint
+ goto yynewerror;
+#endif
+yynewerror:
yyerror("syntax error");
#ifdef lint
goto yyerrlab;
@@ -1543,7 +1546,7 @@ case 33:
#line 393 "label.y"
{ yyval.num = -1; }
break;
-#line 1547 "y.tab.c"
+#line 1550 "y.tab.c"
}
yyssp -= yym;
yystate = *yyssp;
diff --git a/contrib/groff/src/preproc/refer/refer.cc b/contrib/groff/src/preproc/refer/refer.cc
index c39def7..33df35c 100644
--- a/contrib/groff/src/preproc/refer/refer.cc
+++ b/contrib/groff/src/preproc/refer/refer.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989-1992, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1989-1992, 2000, 2001, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -445,8 +445,8 @@ static void do_file(const char *filename)
line += '\n';
break;
}
- if (illegal_input_char(c))
- error("illegal input character code %1", c);
+ if (invalid_input_char(c))
+ error("invalid input character code %1", c);
else {
line += c;
if (c == '\n')
@@ -476,8 +476,8 @@ static void do_file(const char *filename)
int d = getc(fp);
if (d == ']') {
while ((d = getc(fp)) != '\n' && d != EOF) {
- if (illegal_input_char(d))
- error("illegal input character code %1", d);
+ if (invalid_input_char(d))
+ error("invalid input character code %1", d);
else
post += d;
}
@@ -486,8 +486,8 @@ static void do_file(const char *filename)
if (d != EOF)
ungetc(d, fp);
}
- if (illegal_input_char(c))
- error("illegal input character code %1", c);
+ if (invalid_input_char(c))
+ error("invalid input character code %1", c);
else
str += c;
start_of_line = (c == '\n');
@@ -580,8 +580,8 @@ static void do_file(const char *filename)
"missing `.R2' line");
break;
}
- if (illegal_input_char(c))
- error("illegal input character code %1", int(c));
+ if (invalid_input_char(c))
+ error("invalid input character code %1", int(c));
else {
line += c;
start_of_line = c == '\n';
@@ -1113,8 +1113,8 @@ void do_bib(const char *filename)
int c = getc(fp);
if (c == EOF)
break;
- if (illegal_input_char(c)) {
- error("illegal input character code %1", c);
+ if (invalid_input_char(c)) {
+ error("invalid input character code %1", c);
continue;
}
switch (state) {
diff --git a/contrib/groff/src/preproc/refer/refer.h b/contrib/groff/src/preproc/refer/refer.h
index f0ab3cd..e1e0c6d 100644
--- a/contrib/groff/src/preproc/refer/refer.h
+++ b/contrib/groff/src/preproc/refer/refer.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,15 +18,14 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
+#include "lib.h"
+
#include <stdlib.h>
#include <assert.h>
-#include <string.h>
#include <errno.h>
#include "errarg.h"
#include "error.h"
-#include "lib.h"
#include "stringclass.h"
#include "cset.h"
#include "cmap.h"
diff --git a/contrib/groff/src/preproc/soelim/Makefile.sub b/contrib/groff/src/preproc/soelim/Makefile.sub
index 77007e2..4b59ab6 100644
--- a/contrib/groff/src/preproc/soelim/Makefile.sub
+++ b/contrib/groff/src/preproc/soelim/Makefile.sub
@@ -1,6 +1,6 @@
-PROG=soelim
+PROG=soelim$(EXEEXT)
MAN1=soelim.n
XLIBS=$(LIBGROFF)
-OBJS=soelim.o
+OBJS=soelim.$(OBJEXT)
CCSRCS=$(srcdir)/soelim.cc
NAMEPREFIX=$(g)
diff --git a/contrib/groff/src/preproc/soelim/soelim.cc b/contrib/groff/src/preproc/soelim/soelim.cc
index a604004..006b04a 100644
--- a/contrib/groff/src/preproc/soelim/soelim.cc
+++ b/contrib/groff/src/preproc/soelim/soelim.cc
@@ -18,13 +18,12 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
+#include "lib.h"
+
#include <ctype.h>
-#include <string.h>
#include <assert.h>
#include <stdlib.h>
#include <errno.h>
-#include "lib.h"
#include "errarg.h"
#include "error.h"
#include "stringclass.h"
diff --git a/contrib/groff/src/preproc/tbl/Makefile.sub b/contrib/groff/src/preproc/tbl/Makefile.sub
index 224baff..fb14818 100644
--- a/contrib/groff/src/preproc/tbl/Makefile.sub
+++ b/contrib/groff/src/preproc/tbl/Makefile.sub
@@ -1,9 +1,9 @@
-PROG=tbl
+PROG=tbl$(EXEEXT)
MAN1=tbl.n
XLIBS=$(LIBGROFF)
OBJS=\
- main.o \
- table.o
+ main.$(OBJEXT) \
+ table.$(OBJEXT)
CCSRCS=\
$(srcdir)/main.cc \
$(srcdir)/table.cc
diff --git a/contrib/groff/src/preproc/tbl/main.cc b/contrib/groff/src/preproc/tbl/main.cc
index b1b14a7..dc0bdce 100644
--- a/contrib/groff/src/preproc/tbl/main.cc
+++ b/contrib/groff/src/preproc/tbl/main.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -20,7 +20,6 @@ with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "table.h"
-#include "htmlindicate.h"
#define MAX_POINT_SIZE 99
#define MAX_VERTICAL_SPACING 72
@@ -110,7 +109,7 @@ int table_input::get()
else {
state = MIDDLE;
if (c == '\0') {
- error("illegal input character code 0");
+ error("invalid input character code 0");
break;
}
}
@@ -139,7 +138,7 @@ int table_input::get()
current_lineno++;
}
else if (c == '\0') {
- error("illegal input character code 0");
+ error("invalid input character code 0");
break;
}
return c;
@@ -221,8 +220,6 @@ void process_input_file(FILE *fp)
break;
case HAD_TS:
if (c == ' ' || c == '\n' || compatible_flag) {
- printf(".if '\\*(.T'html' \\X(table-start(\n");
- html_begin_suppress(0);
putchar('.');
putchar('T');
putchar('S');
@@ -244,16 +241,12 @@ void process_input_file(FILE *fp)
fputs(".TE", stdout);
while ((c = getc(fp)) != '\n') {
if (c == EOF) {
- printf(".if '\\*(.T'html' \\X(table-end(\n");
- html_end_suppress(0);
putchar('\n');
return;
}
putchar(c);
}
putchar('\n');
- printf(".if '\\*(.T'html' \\X(table-end(\n");
- html_end_suppress(0);
current_lineno++;
}
}
@@ -453,34 +446,39 @@ options *process_options(table_input &in)
}
else if (strieq(p, "center") || strieq(p, "centre")) {
if (arg)
- error("`center' option does not take a argument");
+ error("`center' option does not take an argument");
opt->flags |= table::CENTER;
}
else if (strieq(p, "expand")) {
if (arg)
- error("`expand' option does not take a argument");
+ error("`expand' option does not take an argument");
opt->flags |= table::EXPAND;
}
else if (strieq(p, "box") || strieq(p, "frame")) {
if (arg)
- error("`box' option does not take a argument");
+ error("`box' option does not take an argument");
opt->flags |= table::BOX;
}
else if (strieq(p, "doublebox") || strieq(p, "doubleframe")) {
if (arg)
- error("`doublebox' option does not take a argument");
+ error("`doublebox' option does not take an argument");
opt->flags |= table::DOUBLEBOX;
}
else if (strieq(p, "allbox")) {
if (arg)
- error("`allbox' option does not take a argument");
+ error("`allbox' option does not take an argument");
opt->flags |= table::ALLBOX;
}
else if (strieq(p, "nokeep")) {
if (arg)
- error("`nokeep' option does not take a argument");
+ error("`nokeep' option does not take an argument");
opt->flags |= table::NOKEEP;
}
+ else if (strieq(p, "nospaces")) {
+ if (arg)
+ error("`nospaces' option does not take an argument");
+ opt->flags |= table::NOSPACES;
+ }
else if (strieq(p, "decimalpoint")) {
if (!arg)
error("`decimalpoint' option requires argument in parentheses");
@@ -1214,6 +1212,8 @@ table *process_data(table_input &in, format *f, options *opt)
int ln = current_lineno;
if (c == '\n')
--ln;
+ if ((opt->flags & table::NOSPACES))
+ input_entry.remove_spaces();
while (col < ncolumns
&& line_format[col].type == FORMAT_SPAN) {
tbl->add_entry(current_row, col, "", &line_format[col],
@@ -1385,7 +1385,7 @@ table *process_data(table_input &in, format *f, options *opt)
f = newf;
}
if (line.length() >= 3
- && line[0] == '.' && line[1] == 'f' && line[2] == 'f') {
+ && line[0] == '.' && line[1] == 'l' && line[2] == 'f') {
line += '\0';
interpret_lf_args(line.contents() + 3);
}
diff --git a/contrib/groff/src/preproc/tbl/table.h b/contrib/groff/src/preproc/tbl/table.h
index ca55b80..69959b8 100644
--- a/contrib/groff/src/preproc/tbl/table.h
+++ b/contrib/groff/src/preproc/tbl/table.h
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,7 +19,8 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
+#include "lib.h"
+
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
@@ -29,7 +31,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "stringclass.h"
#include "errarg.h"
#include "error.h"
-#include "lib.h"
struct inc_number {
short inc;
@@ -127,7 +128,8 @@ public:
BOX = 04,
ALLBOX = 010,
DOUBLEBOX = 020,
- NOKEEP = 040
+ NOKEEP = 040,
+ NOSPACES = 0100
};
table(int nc, unsigned flags, int linesize, char decimal_point_char);
~table();
diff --git a/contrib/groff/src/preproc/tbl/tbl.man b/contrib/groff/src/preproc/tbl/tbl.man
index 42dac25..f661fde 100644
--- a/contrib/groff/src/preproc/tbl/tbl.man
+++ b/contrib/groff/src/preproc/tbl/tbl.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1989-1995, 2001 Free Software Foundation, Inc.
+Copyright (C) 1989-1995, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -19,14 +19,18 @@ the original English.
.TH @G@TBL @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
.SH NAME
@g@tbl \- format tables for troff
+.
+.
.SH SYNOPSIS
.B @g@tbl
[
.B \-Cv
]
[
-.IR files \|.\|.\|.
+.IR files \|.\|.\|.\&
]
+.
+.
.SH DESCRIPTION
This manual page describes the GNU version of
.BR tbl ,
@@ -53,6 +57,8 @@ will be read.
A filename of
.B \-
will cause the standard input to be read.
+.
+.
.SH OPTIONS
.TP
.B \-C
@@ -64,47 +70,297 @@ even when followed by a character other than space or newline.
.TP
.B \-v
Print the version number.
+.
+.
.SH USAGE
-Only the differences between GNU
.B tbl
-and Unix
-.B tbl
-are described here.
-.LP
+expects to find table descriptions wrapped in the
+.B .TS
+(table start) and
+.B .TE
+(table end) macros.
+The line immediately following the
+.B .TS
+macro may contain any of the following global options (ignoring the case
+of characters -- Unix tbl only accepts options with all characters lowercase
+or all characters uppercase):
+.
+.TP
+.B center
+Centers the table (default is left-justified).
+The alternative keyword name
+.B centre
+is also recognized (this is a GNU tbl extension).
+.
+.TP
+.BI delim( xy )
+Use
+.I x
+and
+.I y
+as start and end delimiters for
+.BR @g@eqn (@MAN1EXT@).
+.
+.TP
+.B expand
+Makes the table as wide as the current line length.
+.
+.TP
+.B box
+Encloses the table in a box.
+.
+.TP
+.B doublebox
+Encloses the table in a double box.
+.
+.TP
+.B allbox
+Encloses each item of the table in a box.
+.
+.TP
+.B frame
+Same as box (GNU tbl only).
+.
+.TP
+.B doubleframe
+Same as doublebox (GNU tbl only).
+.
+.TP
+.BI tab( x )
+Uses the character
+.I x
+instead of a tab to separate items in a line of input data.
+.
+.TP
+.BI linesize( n )
+Sets lines or rules (e.g. from
+.BR box )
+in
+.IR n -point
+type.
+.
+.TP
+.B nokeep
+Don't use diversions to prevent page breaks (GNU tbl only).
Normally
.B tbl
attempts to prevent undesirable breaks in the table by using diversions.
-This can sometimes interact badly with macro packages' own use of diversions,
-when footnotes, for example, are used.
-The
-.B nokeep
-option tells
-.B tbl
-not to try and prevent breaks in this way.
+This can sometimes interact badly with macro packages' own use of
+diversions, when footnotes, for example, are used.
+.
+.TP
+.BI decimalpoint( c )
+Set the character to be recognized as the decimal point in numeric
+columns (GNU tbl only).
+.
+.TP
+.B nospaces
+Ignore leading and trailing spaces in data items (GNU tbl only).
+.
.LP
-The
-.B decimalpoint
-option specifies the character to be recognized as the decimal
-point character in place of the default period.
-It takes an argument in parentheses, which must be a single
-character, as for the
+The global options must end with a semicolon.
+There might be whitespace after an option and its argument in parentheses.
+.LP
+After global options come lines describing the format of each line of
+the table.
+Each such format line describes one line of the table itself, except that
+the last format line (which you must end with a period) describes all
+remaining lines of the table.
+A single key character describes each column of each line of the table.
+You may run format specs for multiple lines together on the same line by
+separating them with commas.
+.LP
+You may follow each key character with specifiers that determine the font
+and point size of the corresponding item, that determine column width,
+inter-column spacing, etc.
+.LP
+The longest format line defines the number of columns in the table; missing
+format descriptors at the end of format lines are assumed to be `L'.
+Extra columns in the data (which have no corresponding format entry) are
+ignored.
+.LP
+The available key characters are:
+.
+.TP
+c,C
+Centers item within the column.
+.
+.TP
+r,R
+Right-justifies item within the column.
+.
+.TP
+l,L
+Left-justifies item within the column.
+.
+.TP
+n,N
+Numerically justifies item in the column: Units positions of numbers are
+aligned vertically.
+.
+.TP
+s,S
+Spans previous item on the left into this column.
+.
+.TP
+a,A
+Centers longest line in this column and then left-justifies all other lines
+in this column with respect to that centered line.
+.
+.TP
+^
+Spans down entry from previous row in this column.
+.
+.TP
+_,-
+Replaces this entry with a horizontal line.
+.
+.TP
+=
+.
+Replaces this entry with a double horizontal line.
+.
+.TP
+|
+The corresponding column becomes a vertical rule (if two of these are
+adjacent, a double vertical rule).
+.
+.LP
+A vertical bar to the left of the first key-letter or to the right of the
+last one produces a line at the edge of the table.
+.LP
+Here are the specifiers that can appear in suffixes to column key letters:
+.
+.TP
+b,B
+Short form of fB (make affected entries bold).
+.
+.TP
+i,I
+Short form of fI (make affected entries italic).
+.
+.TP
+t,T
+Start an item vertically spanning rows at the top of its range rather than
+vertically centering it.
+.
+.TP
+d,D
+Start an item vertically spanning rows at the bottom of its range rather
+than vertically centering it (GNU tbl only).
+.
+.TP
+v,V
+Followed by a number, this indicates the vertical line spacing to be used in
+a multi-line table entry.
+If signed, the current vertical line spacing is incremented or decremented
+(using a signed number instead of a signed digit is a GNU tbl extension).
+A vertical line spacing specifier followed by a column separation number
+must be separated by one or more blanks.
+No effect if the corresponding table entry isn't a text block.
+.
+.TP
+f,F
+Either of these specifiers may be followed by a font name (either one or two
+characters long), font number (a single digit), or long name in parentheses
+(the last form is a GNU tbl extension).
+A one-letter font name must be separated by one or more blanks from whatever
+follows.
+.
+.TP
+p,P
+Followed by a number, this does a point size change for the affected fields.
+If signed, the current point size is incremented or decremented (using a
+signed number instead of a signed digit is a GNU tbl extension).
+A point size specifier followed by a column separation number must be
+separated by one or more blanks.
+.
+.TP
+w,W
+Minimal column width value.
+Must be followed either by a
+.BR @g@troff (@MAN1EXT@)
+width expression in parentheses or a unitless integer.
+If no unit is given, en units are used.
+Also used as the default line length for included text blocks.
+If used multiple times, the last entry takes effect.
+.
+.TP
+e,E
+Make equally-spaced columns.
+.
+.TP
+u,U
+Move the corresponding column up one half-line.
+.
+.TP
+z,Z
+Ignore the corresponding column for width-calculation purposes.
+.
+.LP
+A number suffix on a key character is interpreted as a column
+separation in ens (multiplied in proportion if the
+.B expand
+option is on).
+Default separation is 3n.
+.LP
+The format lines are followed by lines containing the actual data for the
+table, followed finally by
+.BR .TE .
+Within such data lines, items are normally separated by tab characters (or
+the character specified with the
.B tab
-option.
+option).
+Long input lines can be broken across multiple lines if the last character
+on the line is `\e' (which vanishes after concatenation).
.LP
-The
-.B f
-format modifier can be followed by an arbitrary length
-font name in parentheses.
-.LP
-There is a
-.B d
-format modifier which means that a vertically spanning entry
-should be aligned at the bottom of its range.
-.LP
-There is no limit on the number of columns in a table, nor any limit
-on the number of text blocks.
-All the lines of a table are considered in deciding column
-widths, not just the first 200.
+A dot starting a line, followed by anything but a digit is handled as a
+troff command, passed through without changes.
+The table position is unchanged in this case.
+.LP
+If a data line consists of only `_' or `=', a single or double line,
+respectively, is drawn across the table at that point; if a single item in a
+data line consists of only `_' or `=', then that item is replaced by a
+single or double line, joining its neighbours.
+If a data item consists only of `\e_' or `\e=', a single or double line,
+respectively, is drawn across the field at that point which does not join
+its neighbours.
+.LP
+A data item consisting only of `\eRx' (`x' any character) is replaced by
+repetitions of character `x' as wide as the column (not joining its
+neighbours).
+.LP
+A data item consisting only of `\e^' indicates that the field immediately
+above spans downward over this row.
+.LP
+A text block can be used to enter data as a single entry which would be
+too long as a simple string between tabs.
+It is started with `T{' and closed with `T}'.
+The latter must start a line, probably followed by other data columns
+(separated with tabs).
+.LP
+To change the data format within a table, use the
+.B .T&
+command (at the start of a line).
+It is followed by format and data lines (but no global options) similar to
+the
+.B .TS
+request.
+.
+.
+.SH "INTERACTION WITH @G@EQN"
+.BR @g@tbl (@MAN1EXT@)
+should always be called before
+.BR @g@eqn (@MAN1EXT@)
+.RB ( groff (@MAN1EXT@)
+automatically takes care of the correct order of preprocessors).
+.
+.
+.SH "GNU TBL ENHANCEMENTS"
+There is no limit on the number of columns in a table, nor any limit on the
+number of text blocks.
+All the lines of a table are considered in deciding column widths, not just
+the first 200.
Table continuation
.RB ( .T& )
lines are not restricted to the first 200 lines.
@@ -113,13 +369,15 @@ Numeric and alphabetic items may appear in the same column.
.LP
Numeric and alphabetic items may span horizontally.
.LP
-.B tbl
-uses register, string, macro and diversion names beginning with
+.B @g@tbl
+uses register, string, macro and diversion names beginning with the digit\~\c
.BR 3 .
When using
-.B tbl
-you should avoid using any names beginning with a
+.B @g@tbl
+you should avoid using any names beginning with a\~\c
.BR 3 .
+.
+.
.SH BUGS
You should use
.BR .TS\ H / .TH
@@ -157,7 +415,7 @@ instead of
.BR bp .
.LP
Using \ea directly in a table to get leaders will not work.
-This is correct behaviour: \ea is a
+This is correct behaviour: \ea is an
.B uninterpreted
leader.
To get leaders use a real leader, either by using a control A or like
@@ -173,6 +431,14 @@ A\e*a;B
\&.TE
.ft
.fi
+.
+.
+.SH REFERENCE
+Lesk, M.E.: "TBL -- A Program to Format Tables".
+For copyright reasons it cannot be included in the groff distribution,
+but copies can be found with a title search on the World Wide Web.
+.
+.
.SH "SEE ALSO"
.BR groff (@MAN1EXT@),
.BR @g@troff (@MAN1EXT@)
diff --git a/contrib/groff/src/roff/groff/Makefile.sub b/contrib/groff/src/roff/groff/Makefile.sub
index 42ae221..3b26caa 100644
--- a/contrib/groff/src/roff/groff/Makefile.sub
+++ b/contrib/groff/src/roff/groff/Makefile.sub
@@ -1,8 +1,8 @@
-PROG=groff
+PROG=groff$(EXEEXT)
MAN1=groff.n
XLIBS=$(LIBGROFF)
MLIB=$(LIBM)
-OBJS=groff.o pipeline.o
+OBJS=groff.$(OBJEXT) pipeline.$(OBJEXT)
CCSRCS=$(srcdir)/groff.cc
CSRCS=$(srcdir)/pipeline.c
HDRS=$(srcdir)/pipeline.h
diff --git a/contrib/groff/src/roff/groff/groff.cc b/contrib/groff/src/roff/groff/groff.cc
index 7e95c33..49104b2 100644
--- a/contrib/groff/src/roff/groff/groff.cc
+++ b/contrib/groff/src/roff/groff/groff.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -20,13 +20,12 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
// A front end for groff.
-#include <stdio.h>
-#include <string.h>
+#include "lib.h"
+
#include <stdlib.h>
#include <signal.h>
#include <errno.h>
-#include "lib.h"
#include "assert.h"
#include "errarg.h"
#include "error.h"
@@ -50,6 +49,7 @@ extern "C" {
}
#endif /* NEED_DECLARATION_PUTENV */
+// The number of commands must be in sync with MAX_COMMANDS in pipeline.h
const int SOELIM_INDEX = 0;
const int REFER_INDEX = SOELIM_INDEX + 1;
const int GRAP_INDEX = REFER_INDEX + 1;
@@ -77,6 +77,7 @@ public:
const char *get_name();
void append_arg(const char *, const char * = 0);
void insert_arg(const char *);
+ void insert_args(string s);
void clear_args();
char **get_argv();
void print(int is_last, FILE *fp);
@@ -125,7 +126,7 @@ int main(int argc, char **argv)
{ NULL, 0, 0, 0 }
};
while ((opt = getopt_long(argc, argv,
- "abCd:eEf:F:gGhiI:lL:m:M:n:No:pP:r:RsStT:UvVw:W:XzZ",
+ "abcCd:eEf:F:gGhiI:lL:m:M:n:No:pP:r:RsStT:UvVw:W:XzZ",
long_options, NULL))
!= EOF) {
char buf[3];
@@ -178,7 +179,7 @@ int main(int argc, char **argv)
vflag = 1;
{
printf("GNU groff version %s\n", Version_string);
- printf("Copyright (C) 1989-2001 Free Software Foundation, Inc.\n"
+ printf("Copyright (C) 2002 Free Software Foundation, Inc.\n"
"GNU groff comes with ABSOLUTELY NO WARRANTY.\n"
"You may redistribute copies of groff and its subprograms\n"
"under the terms of the GNU General Public License.\n"
@@ -208,6 +209,9 @@ int main(int argc, char **argv)
case 'b':
commands[TROFF_INDEX].append_arg(buf);
break;
+ case 'c':
+ commands[TROFF_INDEX].append_arg(buf);
+ break;
case 'S':
safer_flag = 1;
break;
@@ -280,19 +284,14 @@ int main(int argc, char **argv)
fatal("invalid device `%1'", device);
if (!postdriver)
fatal("no `postpro' command in DESC file for device `%1'", device);
-
- if (predriver) {
+ if (predriver && !zflag) {
commands[TROFF_INDEX].insert_arg(commands[TROFF_INDEX].get_name());
- const char *p = Pargs.contents();
- const char *end = p + Pargs.length();
- while (p < end) {
- // pass the device arguments to the predrivers as well
- commands[TROFF_INDEX].insert_arg(p);
- p = strchr(p, '\0') + 1;
- }
commands[TROFF_INDEX].set_name(predriver);
+ // pass the device arguments to the predrivers as well
+ commands[TROFF_INDEX].insert_args(Pargs);
+ if (vflag)
+ commands[TROFF_INDEX].insert_arg("-v");
}
-
const char *real_driver = 0;
if (Xflag) {
real_driver = postdriver;
@@ -549,6 +548,27 @@ void possible_command::insert_arg(const char *s)
args = str;
}
+void possible_command::insert_args(string s)
+{
+ const char *p = s.contents();
+ const char *end = p + s.length();
+ int l = 0;
+ if (p >= end)
+ return;
+ // find the total number of arguments in our string
+ do {
+ l++;
+ p = strchr(p, '\0') + 1;
+ } while (p < end);
+ // now insert each argument preserving the order
+ for (int i = l - 1; i >= 0; i--) {
+ p = s.contents();
+ for (int j = 0; j < i; j++)
+ p = strchr(p, '\0') + 1;
+ insert_arg(p);
+ }
+}
+
void possible_command::build_argv()
{
if (argv)
@@ -658,7 +678,7 @@ char **possible_command::get_argv()
void synopsis(FILE *stream)
{
fprintf(stream,
-"usage: %s [-abeghilpstvzCENRSUVXZ] [-Fdir] [-mname] [-Tdev] [-ffam]\n"
+"usage: %s [-abceghilpstvzCENRSUVXZ] [-Fdir] [-mname] [-Tdev] [-ffam]\n"
" [-wname] [-Wname] [-Mdir] [-dcs] [-rcn] [-nnum] [-olist] [-Parg]\n"
" [-Larg] [-Idir] [files...]\n",
program_name);
@@ -696,6 +716,7 @@ void help()
"-E\tinhibit all errors\n"
"-b\tprint backtraces with errors or warnings\n"
"-l\tspool the output\n"
+"-c\tdisable color output\n"
"-C\tenable compatibility mode\n"
"-V\tprint commands on stdout instead of running them\n"
"-Parg\tpass arg to the postprocessor\n"
diff --git a/contrib/groff/src/roff/groff/groff.man b/contrib/groff/src/roff/groff/groff.man
index 00c9343..8d60560 100644
--- a/contrib/groff/src/roff/groff/groff.man
+++ b/contrib/groff/src/roff/groff/groff.man
@@ -1,489 +1,1585 @@
.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+groff.man
-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.
+Last update: 14 July 2002
-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.
+Copyright (C) 1989, 2002 Free Software Foundation, Inc.
+Rewritten in 2002 by Bernd Warken <bwarken@mayn.de>
-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.
+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
+.\" --------------------------------------------------------------------
+.
+.mso www.tmac
+.
+.\" set adjust to both
+.ad b
+.
+.\" fonts of fixed length
+.
+.if n \{\
+. mso tty-char.tmac
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.if '\*[.T]'dvi' \
+. ftr CB CW
+.
+.\" --------------------------------------------------------------------
+.\" String definitions
+.
+.ds @- "\-\"
+.ds @-- "\-\^\-\"
+.
+.ds Ellipsis .\|.\|.\"
+.
+.
+.\" --------------------------------------------------------------------
+.\" Begin of macro definitions
+.de c
+.\" this is like a comment request when escape mechanism is off
..
-.de TQ
+.eo
+.
+.c --------------------------------------------------------------------
+.de TP+
.br
.ns
-.TP \\$1
+.TP \$1
..
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
+.c --------------------------------------------------------------------
+.c Like TP, but if specified indent is more than half
+.c the current line-length - indent, use the default indent.
.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
+. ie \n[.$]=0:((0\$1)*2u>(\n.lu-\n(.iu)) .TP
+. el .TP "\$1"
+..
+.c --------------------------------------------------------------------
+.de Text
+. nop \)\$*
+..
+.c --------------------------------------------------------------------
+.de Synopsis
+. ds @arg1 \$1\"
+. nr @old_indent \n[.i]
+. ad l
+. in +\w'\f[B]\*[@arg1]\0'u
+. ti \n[@old_indent]u
+. B \*[@arg1]\0\c
+. rr @old_indent
+. rm @arg1
+..
+.c --------------------------------------------------------------------
+.de EndSynopsis
+. ad
+. in
+..
+.c --------------------------------------------------------------------
+.c ShortOpt[] (name [arg])
+.c
+.c short option in synopsis
+.c
+.de ShortOpt[]
+. if \n[.$]=0 \
+. return
+. ds @opt \$1\"
+. shift
+. ie \n[.$]=0 \
+. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\f[]\f[R]]\f[]
+. el \
+. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\~\f[]\f[I]\/\$*\f[]\f[R]]\f[]
+. rm @opt
..
+.c --------------------------------------------------------------------
+.c Option in synopsis (short option)
+.de SynOpt
+. if \n[.$]=0 \
+. return
+. ds @opt \$1\"
+. shift
+. ie \n[.$]=0 \
+. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\f[]\f[R]]\f[]
+. el \
+. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\~\f[]\f[I]\/\$*\f[]\f[R]]\f[]
+. rm @opt
+..
+.c --------------------------------------------------------------------
+.c ShortOpt ([char [punct]])
+.c
+.c `-c' somwhere in the text
+.c second arg is punctuation
+.c
+.de ShortOpt
+. ds @opt \$1\"
+. shift
+. Text \f[CB]\*[@-]\*[@opt]\f[]\/\$*
+. rm @opt
+..
+.c --------------------------------------------------------------------
+.c LongOpt ([name [punct]])
+.c
+.c `--name' somwhere in the text
+.c second arg is punctuation
+.c
+.de LongOpt
+. ds @opt \$1\"
+. shift
+. Text \f[CB]\*[@--]\f[]\f[B]\*[@opt]\f[]\/\$*
+. rm @opt
+..
+.c --------------------------------------------------------------------
+.c OptDef (shortopt [longopt [argument]])
+.c
+.c option documentation
+.c args : `shortopt', `longopt' can be ""
+.c
+.de OptDef
+. ds @short
+. ds @long
+. ds @arg
+. if \n[.$]>=1 \{\
+. ds @arg1 "\$1\"
+. if !'\*[@arg1]'' \
+. ds @short "\f[CB]\*[@-]\*[@arg1]\f[]\"
+. if \n[.$]>=2 \{\
+. if !'\*[@short]'' \
+. as @short \f[CW]\0\f[]
+. ds @arg2 "\$2\"
+. if !'\*[@arg2]'' \
+. ds @long "\f[CB]\*[@--]\f[]\f[B]\*[@arg2]\f[]\"
+. if \n[.$]>=3 \{\
+. if !'\*[@long]'' \
+. as @long \|=\|\"
+. shift 2
+. ds @arg \f[I]\$*\"
+. \}
+. \}
+. \}
+. IP "\f[R]\*[@short]\*[@long]\*[@arg]\f[]"
+. rm @arg
+. rm @arg1
+. rm @arg2
+. rm @short
+. rm @long
+..
+.c --------------------------------------------------------------------
+.c Continuation of an OptDef header.
+.de OptDef+
+. br
+. ns
+. OptDef \$@
+..
+.c --------------------------------------------------------------------
+.c Environment variable
+.de EnvVar
+. SM
+. BR \$1 \$2
+..
+.c --------------------------------------------------------------------
+.c a shell command line
+.de ShellCommand
+. nr @font \n[.f]
+. c replace argument separator by unbreakable space
+. ds @args \$1\""
+. shift
+. while (\n[.$]>0) \{\
+. ds @args \*[@args]\~\$1
+. shift
+. \}
+. br
+. ad l
+. nh
+. Text \f[I]sh#\h'1m'\f[P]\f[CR]\*[@args]\f[P]\&\"
+. ft R
+. ft P
+. hy
+. ad
+. ft \n[@font]
+. br
+. rr @font
+. rm @args
+..
+.c --------------------------------------------------------------------
+.c `char or string'
+.de Quoted
+. ft CR
+. Text \[oq]\$*\[cq]
+. ft
+..
+.c --------------------------------------------------------------------
+.c End of macro definitions
+.ec
+.
+.
+.\" --------------------------------------------------------------------
+.\" Title
+.\" --------------------------------------------------------------------
+.
.TH GROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
.SH NAME
-groff \- front end for the groff document formatting system
+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
-.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.
+.Synopsis groff
+.ShortOpt[] abcegilpstzCEGNRSUVXZ
+.ShortOpt[] d cs
+.ShortOpt[] f fam
+.ShortOpt[] F dir
+.ShortOpt[] I dir
+.ShortOpt[] L arg
+.ShortOpt[] m name
+.ShortOpt[] M dir
+.ShortOpt[] n num
+.ShortOpt[] o list
+.ShortOpt[] P arg
+.ShortOpt[] r cn
+.ShortOpt[] T dev
+.ShortOpt[] w name
+.ShortOpt[] W name
+.RI [ file
+.Text \*[Ellipsis]]
+.EndSynopsis
+.
+.Synopsis groff
+.ShortOpt h
+|
+.LongOpt help
+.EndSynopsis
+.
+.Synopsis groff
+.ShortOpt v
+|
+.LongOpt version
+.RI [ option
+.Text \*[Ellipsis]]
+.EndSynopsis
+.
+.P
+The command line is parsed according to the usual GNU convention.
+.
+The whitespace between a command line option and its argument is
+optional.
+.
+Options can be grouped behind a single
+.ShortOpt
+(minus character).
+.
+A filename of
+.ShortOpt
+(minus character) denotes the standard input.
+.
+.
+.\" --------------------------------------------------------------------
.SH DESCRIPTION
+.\" --------------------------------------------------------------------
+.
+This document describes the
+.B groff
+program, the main front-end for the
+.I groff
+document formatting system.
+.
+The
+.I groff
+program and macro suite is the implementation of a
+.BR roff (@MAN7EXT@)
+system within the free software collection
+.URL http://\:www.gnu.org "GNU" .
+.
+The
+.I groff
+system has all features of the classical
+.IR roff ,
+but adds many extensions.
+.
+.P
+The
+.B groff
+program allows to control the whole
+.I groff
+system by comand line options.
+.
+This is a great simplification in comparison to the classical case (which
+uses pipes only).
+.
+.
+.\" --------------------------------------------------------------------
+.SH OPTIONS
+.\" --------------------------------------------------------------------
+.
+As
+.B groff
+is a wrapper program for
+.B @g@troff
+both programs share a set of options.
+.
+But the
+.B groff
+program has some additional, native options and gives a new meaning to
+some
+.B @g@troff
+options.
+.
+On the other hand, not all
+.B @g@troff
+options can be fed into
+.BR groff .
+.
+.
+.\" --------------------------------------------------------------------
+.SS Native groff Options
+.\" --------------------------------------------------------------------
+.
+The following options either do not exist for
+.B @g@troff
+or are differently interpreted by
+.BR groff .
+.
+.
+.OptDef e
+Preprocess with
+.BR @g@eqn .
+.
+.
+.OptDef g
+Preprocess with
+.BR @g@grn .
+.
+.
+.OptDef G
+Preprocess with
+.BR grap .
+.
+.
+.OptDef h help
+Print a help message.
+.
+.
+.OptDef I "" dir
+Add search directory for
+.BR \%@g@soelim (@MAN1EXT@).
+This option implies the
+.ShortOpt s
+option.
+.
+.
+.OptDef l
+Send the output to a spooler program for printing.
+.
+The command that should be used for this is specified by the
+.B print
+command in the device description file, see
+.BR \%groff_font (@MAN5EXT@).
+If this command is not present, the output is piped into the
+.BR lpr (1)
+program by default.
+.
+See options
+.ShortOpt L
+and
+.ShortOpt X .
+.
+.
+.OptDef L "" arg
+Pass
+.I arg
+to the spooler program.
+Several arguments should be passed with a separate
+.ShortOpt L
+option each.
+.
+Note that
.B groff
-is a front-end to the groff document formatting system.
-Normally it runs the
+does not prepend
+.ShortOpt\" just a minus sign
+(a minus sign) to
+.I arg
+before passing it to the spooler program.
+.
+.
+.OptDef N
+Don't allow newlines within
+.I eqn
+delimiters.
+.
+This is the same as the
+.ShortOpt N
+option in
+.BR @g@eqn .
+.
+.
+.OptDef p
+Preprocess with
+.BR @g@pic .
+.
+.
+.OptDef P "" "-option"
+.OptDef+ P "" "-option \f[CB]-P\f[] arg"
+Pass
+.I -option
+or
+.I -option arg
+to the postprocessor.
+.
+The option must be specified with the necessary preceding minus
+sign(s)
+.Quoted \*[@-]
+or
+.Quoted \*[@--]
+because groff does not prepend any dashes before passing it to the
+postprocessor.
+.
+For example, to pass a title to the gxditview postprocessor, the shell
+command
+.IP
+.ShellCommand groff -X -P -title -P 'groff it' \f[I]foo\f[]
+.IP
+is equivalent to
+.IP
+.ShellCommand groff -X -Z \f[I]foo\f[] | gxditview -title 'groff it' -
+.
+.
+.OptDef R
+Preprocess with
+.BR @g@refer .
+.
+No mechanism is provided for passing arguments to
+.B @g@refer
+because most
+.B @g@refer
+options have equivalent language elements that can be specified within
+the document.
+.
+See
+.BR \%@g@refer (@MAN1EXT@)
+for more details.
+.
+.
+.OptDef s
+Preprocess with
+.BR @g@soelim .
+.
+.
+.OptDef S
+Safer mode.
+.
+Pass the
+.ShortOpt S
+option to
+.B @g@pic
+and disable the following
.B @g@troff
-program and a postprocessor appropriate for the selected
-device.
-Available devices are:
+requests:
+.BR .open ,
+.BR .opena ,
+.BR .pso ,
+.BR .sy ,
+and
+.BR .pi .
+For security reasons, safer mode is enabled by default.
+.
+.
+.OptDef t
+Preprocess with
+.BR @g@tbl .
+.
+.
+.OptDef T "" dev
+Set output device to
+.IR dev .
+The possible values in
+.I groff
+are
+.BR ascii ,
+.BR cp1047 ,
+.BR dvi ,
+.BR html ,
+.BR latin1 ,
+.BR lbp ,
+.BR lj4 ,
+.BR ps ,
+.BR utf8 ,
+.BR X75 ,
+and
+.BR X100 .
+.
+Additionally,
+.B X75-12
+and
+.B X100-12
+are available for documents which use 12\|pt as the base document size.
+.
+The default device is
+.BR @DEVICE@ .
+.
+.
+.OptDef U
+Unsafe mode.
+.
+Reverts to the (old) unsafe behaviour; see option
+.ShortOpt S .
+.
+.
+.OptDef v version
+Output version information of
+.B groff
+and of all programs that are run by it; that is, the given command line
+is parsed in the usual way, passing
+.ShortOpt v
+to all subprograms.
+.
+.
+.OptDef V
+Output the pipeline that would be run by
+.BR groff
+(as a wrapper program), but do not execute it.
+.
+.
+.OptDef X
+Use
+.B gxditview
+instead of using the usual postprocessor to (pre)view a document.
+.
+The printing spooler behavior as outlined with options
+.ShortOpt l
+and
+.ShortOpt L
+is carried over to
+.BR \%gxditview (@MAN1EXT@)
+by determining an argument for the
+.B -printCommand
+option of
+.BR \%gxditview (@MAN1EXT@).
+.
+This sets the default
+.B Print
+action and the corresponding menu entry to that value.
+.
+.ShortOpt X
+only produces good results with
+.ShortOpt Tps ,
+.ShortOpt TX75 ,
+.ShortOpt TX75-12 ,
+.ShortOpt TX100 ,
+and
+.ShortOpt TX100-12 .
+.
+The default resolution for previewing
+.ShortOpt Tps
+output is 75\|dpi; this can be changed by passing the
+.ShortOpt resolution
+option to
+.BR gxditview ,
+for example
+.
+.IP
+.ShellCommand groff -X -P-resolution -P100 -man foo.1
+.
+.
+.OptDef z
+Suppress output generated by
+.BR @g@troff .
+Only error messages will be printed.
+.
+.
+.OptDef Z
+Do not postprocess the output of
+.B @g@troff
+that is normally
+called automatically by
+.BR groff .
+This will print the intermediate output to standard output; see
+.BR \%groff_out (@MAN5EXT@).
+.
+.
+.\" --------------------------------------------------------------------
+.SS Tranparent Options
+.\" --------------------------------------------------------------------
+.
+The following options are transparently handed over to the formatter
+program
+.B @g@troff
+that is called by groff subsequently.
+.
+These options are described in more detail in
+.BR @g@troff (@MAN1EXT@).
+.
+.OptDef a
+ascii approximation of output.
+.
+.OptDef b
+backtrace on error or warning.
+.
+.OptDef c
+disable color output.
+.
+.OptDef C
+enable compatibility mode.
+.
+.OptDef d "" cs
+.OptDef+ d "" name=s
+define string.
+.
+.OptDef E
+disable
+.B @g@troff
+error messages.
+.
+.OptDef f "" fam
+set default font family.
+.
+.OptDef F "" dir
+set path for font DESC files.
+.
+.OptDef i
+process standard input after the specified input files.
+.
+.OptDef m "" name
+include macro file \f[I]name\f[]\f[B].tmac\f[] (or
+\f[B]tmac.\f[]\f[I]name\f[]); see also
+.BR \%groff_tmac (@MAN5EXT@).
+.
+.OptDef M "" dir
+path for macro files.
+.
+.OptDef n "" num
+number the first page
+.IR num .
+.
+.OptDef o "" list
+output only pages in
+.IR list .
+.
+.OptDef r "" cn
+.OptDef+ r "" name=n
+set number register.
+.
+.OptDef w "" name
+enable warning
+.IR name .
+.
+.OptDef W "" name
+disable warning
+.IR name .
+.
+.
+.\" --------------------------------------------------------------------
+.SH "USING GROFF"
+.\" --------------------------------------------------------------------
+.
+The
+.I groff system
+implements the infrastructure of classical roff; see
+.BR roff (@MAN7EXT@)
+for a survey on how a roff system works in general.
+.
+Due to the front-end programs available within the groff system, using
+.I groff
+is much easier than
+.IR "classical roff" .
+.
+This section gives an overview of the parts that consitute the groff
+system.
+.
+It complements
+.BR roff (@MAN7EXT@)
+with groff-specific features.
+.
+This section can be regarded as a guide to the documentation around
+the groff system.
+.
+.
+.\" --------------------------------------------------------------------
+.SS Front-ends
+.\" --------------------------------------------------------------------
+.
+The
+.B groff
+program is a wrapper around the
+.BR @g@troff (@MAN1EXT@)
+program.
+.
+It allows to specify the preprocessors by command line options and
+automatically runs the postprocessor that is appropriate for the
+selected device.
+.
+Doing so, the sometimes tedious piping mechanism of classical
+.BR roff (@MAN7EXT@)
+can be avoided.
+.
+.P
+The
+.BR grog (@MAN1EXT@)
+program can be used for guessing the correct groff command line to
+format a file.
+.
+.P
+The
+.BR \%groffer (@MAN1EXT@)
+program is an allround-viewer for groff files and man pages.
+.
+.
+.\" --------------------------------------------------------------------
+.SS Preprocessors
+.\" --------------------------------------------------------------------
+.
+The groff preprocessors are reimplementations of the classical
+preprocessors with moderate extensions.
+.
+The preprocessors distributed with the
+.I groff
+package are
+.
.TP
-.B ps
-For PostScript printers and previewers
+.BR @g@eqn (@MAN1EXT@)
+for mathematical formul\(ae,
.TP
-.B dvi
-For TeX dvi format.
+.BR @g@grn (@MAN1EXT@)
+for including
+.BR gremlin (1)
+pictures,
.TP
-.B X75
-For a 75dpi X11 previewer.
+.BR @g@pic (@MAN1EXT@)
+for drawing diagrams,
.TP
-.B X100
-For a 100dpi X11 previewer.
+.BR \%@g@refer (@MAN1EXT@)
+for bibliographic references,
.TP
-.B ascii
-For typewriter-like devices.
+.BR \%@g@soelim (@MAN1EXT@)
+for including macro files from standard locations,
+.
+.P
+and
.TP
-.B latin1
-For typewriter-like devices using the ISO Latin-1 (ISO 8859-1) character set.
+.BR @g@tbl (@MAN1EXT@)
+for tables.
+.
+.P
+Besides these, there are some internal preprocessors that are
+automatically run with some devices.
+.
+These aren't visible to the user.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Macro Packages"
+.\" --------------------------------------------------------------------
+.
+Macro packages can be included by option
+.ShortOpt m .
+.
+The groff system implements and extends all classical macro packages
+in a compatible way and adds some packages of its own.
+.
+Actually, the following macro packages come with
+.IR groff :
+.
.TP
-.B utf8
-For typewriter-like devices using the Unicode (ISO 10646) character set with
-UTF-8 encoding.
+.B man
+The traditional man page format; see
+.BR \%groff_man (@MAN7EXT@).
+It can be specified on the command line as
+.ShortOpt man
+or
+.ShortOpt m
+.BR man .
+.
+.TP
+.B mandoc
+The general package for man pages; it automatically recognizes
+whether the documents uses the
+.I man
+or the
+.I mdoc
+format and branches to the corresponding macro package.
+.
+It can be specified on the command line as
+.ShortOpt mandoc
+or
+.ShortOpt m
+.BR mandoc .
+.
+.TP
+.B mdoc
+The BSD-style man page format; see
+.BR \%groff_mdoc (@MAN7EXT@).
+It can be specified on the command line as
+.ShortOpt mdoc
+or
+.ShortOpt m
+.BR mdoc .
+.
+.TP
+.B me
+The classical
+.I me
+document format; see
+.BR \%groff_me (@MAN7EXT@).
+It can be specified on the command line as
+.ShortOpt me
+or
+.ShortOpt m
+.BR me .
+.
+.TP
+.B mm
+The classical
+.I mm
+document format; see
+.BR \%groff_mm (@MAN7EXT@).
+It can be specified on the command line as
+.ShortOpt mm
+or
+.ShortOpt m
+.BR mm .
+.
+.TP
+.B ms
+The classical
+.I ms
+document format; see
+.BR \%groff_ms (@MAN7EXT@).
+It can be specified on the command line as
+.ShortOpt ms
+or
+.ShortOpt m
+.BR ms .
+.
+.TP
+.B www
+HTML-like macros for inclusion in arbitrary groff documents; see
+.BR \%groff_www (@MAN7EXT@).
+.
+.P
+Details on the naming of macro files and their placement can be found
+in
+.BR \%groff_tmac (@MAN5EXT@).
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Programming Language"
+.\" --------------------------------------------------------------------
+.
+General concepts common to all roff programming languages are
+described in
+.BR roff (@MAN7EXT@).
+.
+.P
+The groff extensions to the classical troff language are documented in
+.BR \%groff_diff (@MAN7EXT@).
+.
+.P
+The groff language as a whole is described in the (still incomplete)
+.IR "groff info file" ;
+a short (but complete) reference can be found in
+.BR groff (@MAN7EXT@).
+.
+.
+.\" --------------------------------------------------------------------
+.SS Formatters
+.\" --------------------------------------------------------------------
+.
+The central roff formatter within the groff system is
+.BR @g@troff (@MAN1EXT@).
+It provides the features of both the classical troff and nroff, as
+well as the groff extensions.
+.
+The command line option
+.ShortOpt C
+switches
+.B @g@troff
+into
+.I "compatibility mode"
+which tries to emulate classical roff as much as possible.
+.
+.P
+There is a shell script
+.BR @g@nroff (@MAN1EXT@)
+that emulates the behavior of classical nroff.
+.
+It tries to automatically select the proper output encoding, according to
+the current locale.
+.
+.P
+The formatter program generates
+.IR "intermediate output" ;
+see
+.BR \%groff_out (@MAN7EXT@).
+.
+.
+.\" --------------------------------------------------------------------
+.SS Devices
+.\" --------------------------------------------------------------------
+.
+In roff, the output targets are called
+.IR devices .
+A device can be a piece of hardware, e.g. a printer, or a software
+file format.
+.
+A device is specified by the option
+.ShortOpt T .
+The groff devices are as follows.
+.
+.TP
+.B ascii
+Text output using the
+.BR ascii (7)
+character set.
+.
.TP
.B cp1047
-For typewriter-like devices which use the EBCDIC code page IBM cp1047
-(e.g. OS/390 Unix).
+Text output using the EBCDIC code page IBM cp1047 (e.g. OS/390 Unix).
+.
+.TP
+.B dvi
+TeX DVI format.
+.
+.TP
+.B html
+HTML output.
+.
+.TP
+.B latin1
+Text output using the ISO Latin-1 (ISO 8859-1) character set; see
+.BR iso_8859_1 (7).
+.
+.TP
+.B lbp
+Output for Canon CAPSL printers (LBP-4 and LBP-8 series laser printers).
+.
.TP
.B lj4
-For an HP LaserJet4-compatible (or other PCL5-compatible) printer.
+HP LaserJet4-compatible (or other PCL5-compatible) printers.
+.
.TP
-.B lbp
-For Canon CAPSL printers (LBP-4 and LBP-8 series laser printers).
+.B ps
+PostScript output; suitable for printers and previewers like
+.BR gv (1).
+.
.TP
-.B html
-To produce HTML output.
-.LP
+.B utf8
+Text output using the Unicode (ISO 10646) character set with UTF-8
+encoding; see
+.BR unicode (7).
+.
+.TP
+.B X75
+75dpi X Window System output suitable for the previewers
+.BR xditview (1x)
+and
+.BR \%gxditview (@MAN1EXT@).
+A variant for a 12\|pt document base font is
+.BR X75-12 .
+.
+.TP
+.B X100
+100dpi X Window System output suitable for the previewers
+.BR xditview (1x)
+and
+.BR \%gxditview (@MAN1EXT@).
+A variant for a 12\|pt document base font is
+.BR X100-12 .
+.
+.P
The postprocessor to be used for a device is specified by the
.B postpro
-command in the device description file.
+command in the device description file; see
+.BR \%groff_font (@MAN5EXT@).
+.
This can be overridden with the
.B \-X
option.
-.LP
+.
+.P
The default device is
.BR @DEVICE@ .
-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
-.B @g@soelim.
-.LP
-Options without an argument can be grouped behind a single
-.BR \- .
-A filename of
-.B \-
-denotes the standard input.
-.LP
-The
-.B grog
-command can be used to guess the correct groff command to use to
-format a file.
-.SH OPTIONS
-.TP
-.B \-h
-Print a help message.
-.TP
-.B \-e
-Preprocess with @g@eqn.
-.TP
-.B \-t
-Preprocess with @g@tbl.
+.
+.
+.\" --------------------------------------------------------------------
+.SS Postprocessors
+.\" --------------------------------------------------------------------
+.
+groff provides 3\~hardware postprocessors:
+.
.TP
-.B \-g
-Preprocess with @g@grn.
+.BR \%grolbp (@MAN1EXT@)
+for some Canon printers,
.TP
-.B \-G
-Preprocess with grap.
+.BR \%grolj4 (@MAN1EXT@)
+for printers compatible to the HP LaserJet\~4 and PCL5,
.TP
-.B \-p
-Preprocess with @g@pic.
+.BR \%grotty (@MAN1EXT@)
+for text output using various encodings, e.g. on text-oriented
+terminals or line-printers.
+.
+.P
+Today, most printing or drawing hardware is handled by the operating
+system, by device drivers, or by software interfaces, usally accepting
+PostScript.
+.
+Consequently, there isn't an urgent need for more hardware device
+postprocessors.
+.
+.P
+The groff software devices for conversion into other document file
+formats are
+.
.TP
-.B \-s
-Preprocess with @g@soelim.
+.BR \%grodvi (@MAN1EXT@)
+for the DVI format,
.TP
-.BI \-I dir
-This option is as described in
-.BR @g@soelim (@MAN1EXT@).
-This option implies the
-.B \-s
-option.
+.BR \%grohtml (@MAN1EXT@)
+for HTML format,
.TP
-.B \-R
-Preprocess with @g@refer.
-No mechanism is provided for passing arguments to
-.B @g@refer
-because most @g@refer options have equivalent commands
-which can be included in the file.
-See
-.BR @g@refer (@MAN1EXT@)
-for more details.
+.BR grops (@MAN1EXT@)
+for PostScript.
+.
+.P
+Combined with the many existing free conversion tools this should
+be sufficient to convert a troff document into virtually any existing
+data format.
+.
+.
+.\" --------------------------------------------------------------------
+.SS Utilities
+.\" --------------------------------------------------------------------
+.
+The following utility programs around groff are available.
+.
.TP
-.B \-v
-Make programs run by
-.B groff
-print out their version number.
+.BR \%addftinfo (@MAN1EXT@)
+Add information to troff font description files for use with groff.
+.
.TP
-.B \-V
-Print the pipeline on stdout instead of executing it.
+.BR \%afmtodit (@MAN1EXT@)
+Create font description files for PostScript device.
+.
.TP
-.B \-z
-Suppress output from
-.BR @g@troff .
-Only error messages will be printed.
+.BR \%groffer (@MAN1EXT@)
+General viewer program for groff files and man pages.
+.
.TP
-.B \-Z
-Do not postprocess the output of
-.BR @g@troff .
-Normally
-.B groff
-will automatically run the appropriate postprocessor.
+.BR \%gxditview (@MAN1EXT@)
+The groff X viewer, the GNU version of xditview.
+.
.TP
-.BI \-P arg
-Pass
-.I arg
-to the postprocessor.
-Each argument should be passed with a separate
-.B \-P
-option.
-Note that
-.B groff
-does not prepend
-.B \-
-to
-.I arg
-before passing it to the postprocessor.
+.BR \%hpftodit (@MAN1EXT@)
+Create font description files for lj4 device.
+.
.TP
-.B \-l
-Send the output to a spooler for printing.
-The command used for this is specified by the
-.B print
-command in the device description file (if not present,
-.B \-l
-has no effect).
+.BR \%indxbib (@MAN1EXT@)
+Make inverted index for bibliographic databases.
+.
.TP
-.BI \-L arg
-Pass
-.I arg
-to the spooler.
-Each argument should be passed with a separate
-.B \-L
-option.
-Note that
-.B groff
-does not prepend
-.B \-
-to
-.I arg
-before passing it to the postprocessor.
-If there is no
-.B print
-command in the device description file,
-.B \-L
-is ignored.
+.BR lkbib (@MAN1EXT@)
+Search bibliographic databases.
+.
.TP
-.BI \-T dev
-Prepare output for device
-.IR dev .
-The default device is
-.BR @DEVICE@ .
+.BR \%lookbib (@MAN1EXT@)
+Interactively search bibliographic databases.
+.
.TP
-.B \-X
-Preview with
-.B gxditview
-instead of using the usual postprocessor.
-.B Groff
-passes
-.B gxditview
-a
-.B -printCommand
-option which will make the
-.B Print
-action do what
-.B groff
-would have done if the
-.B -l
-option had been given.
-This is unlikely to produce good results except with
-.BR \-Tps .
-.TP
-.B \-N
-Don't allow newlines with eqn delimiters.
-This is the same as the
-.B \-N
-option in
-.BR @g@eqn .
+.BR \%pfbtops (@MAN1EXT@)
+Translate a PostScript font in .pfb format to ASCII.
+.
.TP
-.B \-S
-Safer mode. Pass the
-.B \-S
-option to
-.B @g@pic
-and disable the following
-.B @g@troff
-requests:
-.BR .open ,
-.BR .opena ,
-.BR .pso ,
-.BR .sy ,
-and
-.BR .pi .
-For security reasons, safer mode is enabled by default.
+.BR \%tfmtodit (@MAN1EXT@)
+Create font description files for TeX DVI device.
+.
.TP
-.B \-U
-Unsafe mode. Reverts to the old unsafe behaviour.
-.TP
-.B \-a
-.TQ
-.B \-b
-.TQ
-.B \-i
-.TQ
-.B \-C
-.TQ
-.B \-E
-.TQ
-.BI \-w name
-.TQ
-.BI \-W name
-.TQ
-.BI \-m name
-.TQ
-.BI \-o list
-.TQ
-.BI \-d cs
-.TQ
-.BI \-r cn
-.TQ
-.BI \-F dir
-.TQ
-.BI \-M dir
-.TQ
-.BI \-f fam
-.TQ
-.BI \-n num
-These are as described in
-.BR @g@troff (@MAN1EXT@) .
+.BR \%xditview (1x)
+roff viewer distributed with X window.
+.
+.
+.\" --------------------------------------------------------------------
.SH ENVIRONMENT
+.\" --------------------------------------------------------------------
+.
+Normally, the path separator in the following environment variables is the
+colon; this may vary depending on the operating system.
+.
+For example, DOS and Windows use a semicolon instead.
+.
.TP
-.SM
-.B GROFF_COMMAND_PREFIX
-If this is set
-.IR X ,
+.EnvVar GROFF_BIN_PATH
+This search path, followed by
+.EnvVar $PATH ,
+will be used for commands that are executed by
+.BR groff .
+.
+If it is not set then the directory where the groff binaries were
+installed is prepended to
+.EnvVar PATH .
+.
+.TP
+.EnvVar GROFF_COMMAND_PREFIX
+When there is a need to run different roff implementations at the same
+time
+.I groff
+provides the facility to prepend a prefix to most of its programs that
+could provoke name clashings at run time (default is to have none).
+.
+Historically, this prefix was the character
+.BR g ,
+but it can be anything.
+.
+For example,
+.BR gtroff
+stood for
+.IR groff 's
+.BR troff ,
+.BR gtbl
+for the
+.I groff
+version of
+.BR tbl .
+.
+By setting
+.EnvVar GROFF_COMMAND_PREFIX
+to different values, the different roff installations can be
+addressed.
+.
+More exactly, if it is set to prefix
+.I xxx
then
.B groff
-will run
-.IB X troff
+as a wrapper program will internally call
+.IB xxx troff
instead of
-.BR @g@troff .
-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 ,
-.BR grolj4 ,
-.BR grohtml ,
+.BR troff .
+This also applies to the preprocessors
+.BR \%eqn ,
+.BR \%grn ,
+.BR \%pic ,
+.BR \%refer ,
+.BR \%tbl ,
+.BR \%soelim ,
+and to the utilities
+.B \%@g@indxbib
and
-.BR gxditview .
+.BR \%@g@lookbib .
+.
+This feature does not apply to any programs different from the ones
+above (most notably
+.B groff
+itself) since they are unique to the groff package.
+.
+.
.TP
-.SM
-.B GROFF_TMAC_PATH
-A colon separated list of directories in which to search for
-macro files in addition to the default directories.
+.EnvVar GROFF_FONT_PATH
+A list of directories in which to search for the
+.BI dev name
+directory in addition to the default ones.
+.
See
-.BR troff (1)
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_font (@MAN5EXT@)
for more details.
+.
+.
.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 in addition to the default one.
+.EnvVar GROFF_TMAC_PATH
+A list of directories in which to search for macro files in addition to
+the default directories.
+.
See
-.BR troff (1)
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_tmac (@MAN5EXT@)
for more details.
+.
+.
.TP
-.SM
-.B GROFF_BIN_PATH
-This search path, followed by
-.BR PATH ,
-will be used for commands executed by
-.BR groff .
-If not set, `@BINDIR@' is prepended to
-.BR PATH .
-.TP
-.SM
-.B GROFF_TMPDIR
+.EnvVar GROFF_TMPDIR
The directory in which temporary files will be created.
-If this is not set and
-.B
-.SM TMPDIR
-is set, temporary files will be created in that directory.
+.
+If this is not set but the environment variable
+.EnvVar TMPDIR
+instead, temporary files will be created in the directory
+.EnvVar $TMPDIR .
+.
Otherwise temporary files will be created in
.BR /tmp .
The
-.BR grops (@MAN1EXT@)
+.BR \%@g@refer (@MAN1EXT@),
+.BR \%groffer (@MAN1EXT@),
+.BR \%grohtml (@MAN1EXT@),
and
-.BR @g@refer (@MAN1EXT@)
-commands can create temporary files.
+.BR grops (@MAN1EXT@)
+commands use temporary files.
+.
+.
+.TP
+.EnvVar GROFF_TYPESETTER
+Preset the default device.
+.
+If this is not set the
+.B @DEVICE@
+device is used as default.
+.
+This device name is overwritten by the option
+.ShortOpt T .
+.
+.
+.\" --------------------------------------------------------------------
.SH FILES
-.Tp \w'\fB@FONTDIR@/dev\fIname\fB/DESC'u+3n
-.BI @FONTDIR@/dev name /DESC
-Device description file for device
+.\" --------------------------------------------------------------------
+.
+There are some directories in which
+.I groff
+installs all of its data files.
+.
+Due to different installation habits on different operating systems,
+their locations are not absolutely fixed, but their function is
+clearly defined and coincides on all systems.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "groff Macro Directory"
+.\" --------------------------------------------------------------------
+.
+This contains all information related to macro packages.
+.
+Note that more than a single directory is searched for those files
+as documented in
+.BR \%groff_tmac (@MAN5EXT@).
+.
+For the groff installation corresponding to this document, it is
+located at
+.IR @MACRODIR@ .
+.
+The following files contained in the
+.I groff macro directory
+have a special meaning:
+.
+.
+.TP
+.B troffrc
+Initialization file for troff.
+.
+This is interpreted by
+.B @g@troff
+before reading the macro sets and any input.
+.
+.
+.TP
+.B troffrc-end
+Final startup file for troff, it is parsed after all macro sets have
+been read.
+.
+.
+.TP
+.IB name .tmac
+.TP+
+.BI tmac. name
+Macro file for macro package
.IR name .
+.
+.
+.\" --------------------------------------------------------------------
+.SS "groff Font Directory"
+.\" --------------------------------------------------------------------
+.
+This contains all information related to output devices.
+.
+Note that more than a single directory is searched for those files; see
+.BR @g@troff (@MAN1EXT@).
+.
+For the groff installation corresponding to this document, it is
+located at
+.IR @FONTDIR@ .
+.
+The following files contained in the
+.I groff font directory
+have a special meaning:
+.
+.
+.TP
+.BI dev name /DESC
+Device description file for device
+.IR name ,
+see
+.BR \%groff_font (@MAN5EXT@).
+.
+.
.TP
-.BI @FONTDIR@/dev name / F
+.BI dev name / F
Font file for font
.I F
of device
.IR name .
-.LP
-Note that on EBCDIC hosts, output devices
-.BR ascii ,
-.BR latin1 ,
+.
+.
+.\" --------------------------------------------------------------------
+.SH EXAMPLES
+.\" --------------------------------------------------------------------
+.
+The following example illustrates the power of the
+.B groff
+program as a wrapper around
+.BR @g@troff .
+.
+.P
+To process a roff file using the preprocessors
+.B tbl
and
-.B utf8
+.B pic
+and the
+.B me
+macro set, classical troff had to be called by
+.
+.P
+.ShellCommand pic foo.me | tbl | troff -me -Tlatin1 | grotty
+.
+.P
+Using
+.BR groff ,
+this pipe can be shortened to the equivalent command
+.P
+.ShellCommand groff -p -t -me -T latin1 foo.me
+.
+.P
+An even easier way to call this is to use
+.BR grog (@MAN1EXT@)
+to guess the preprocessor and macro options and execute the generated
+command (by specifying shell left quotes)
+.P
+.ShellCommand `grog -Tlatin1 foo.me`
+.
+.P
+The simplest way is to view the contents in an automated way by
+calling
+.
+.P
+.ShellCommand groffer foo.me
+.
+.
+.\" --------------------------------------------------------------------
+.SH BUGS
+.\" --------------------------------------------------------------------
+.
+.P
+On EBCDIC hosts (e.g. OS/390 Unix), output devices
+.B ascii
+and
+.B latin1
aren't available.
-Similarly,
+.
+Similarly, output for EBCDIC code page
.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
+.
+.P
Report bugs to bug-groff@gnu.org.
-Include a complete, self-contained example
-that will allow the bug to be reproduced,
-and say which version of groff you are using.
-.SH COPYRIGHT
-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
-Software Foundation; either version 2, or (at your option) any later
-version.
-.LP
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-.LP
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+.
+Include a complete, self-contained example that will allow the bug to
+be reproduced, and say which version of groff you are using.
+.
+.
+.\" --------------------------------------------------------------------
.SH AVAILABILITY
-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
+.\" --------------------------------------------------------------------
+.
+Information on how to get groff and related information is available
+at the
+.URL http://\:www.gnu.org/\:software/\:groff "GNU website" .
+The most recent released version of groff is available for anonymous
+ftp at the
+.URL ftp://ftp.ffii.org/\:pub/\:groff/\:devel/\:groff-current.tar.gz \
+ "groff development site" .
+.
+.P
+Three groff mailing lists are available:
+.TP
+.MTO bug-groff@gnu.org
+for reporting bugs,
+.
+.TP
+.MTO groff@gnu.org
+for general discussion of groff,
+.
+.TP
+.MTO groff-commit@ffii.org
+a read-only list showing logs of commitments to the CVS repository.
+.
+.P
+Details on CVS access and much more can be found in the file
+.B README
+at the top directory of the groff source package.
+.
+.P
+There is a free implementation of the
.B grap
-implementation written by Ted Faber <faber@lunabase.org>.
-The actual version can be found at
-.IP
-\%http://www.lunabase.org/~faber/Vault/software/grap/
+preprocessor, written by
+.MTO faber@lunabase.org " Ted Faber" .
+.
+The actual version can be found at the
+.
+.URL http://\:www.lunabase.org/\:~faber/\:Vault/\:software/\:grap/ \
+ "grap website" .
+This is the only grap version supported by groff.
+.
+.
+.\" --------------------------------------------------------------------
+.SH AUTHORS
+.\" --------------------------------------------------------------------
+.
+Copyright \(co 1989, 2002 Free Software Foundation, Inc.
+.
+.P
+This document is distributed under the terms of the FDL (GNU Free
+Documentation License) version 1.1 or later.
+.
+You should have received a copy of the FDL on your system, it is also
+available on-line at the
+.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
+.
+.P
+This document is based on the original groff man page written by
+.MTO jjc@jclark.com "James Clark" .
+.
+It was rewritten, enhanced, and put under the FDL license by
+.MTO bwarken@mayn.de "Bernd Warken" .
+.
+It is maintained by
+.MTO wl@gnu.org "Werner Lemberg" .
+.
+.P
+.I groff
+is a GNU free software project.
+.
+All parts of the
+.I groff package
+are protected by GNU copyleft licenses.
+.
+The software files are distributed under the terms of the GNU General
+Public License (GPL), while the documentation files mostly use the GNU
+Free Documentation License (FDL).
+.
+.
+.\" --------------------------------------------------------------------
.SH "SEE ALSO"
-.BR grog (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@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@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_man (@MAN7EXT@),
-.BR groff_ms (@MAN7EXT@),
-.BR groff_me (@MAN7EXT@),
-.BR groff_char (@MAN7EXT@)
+.\" --------------------------------------------------------------------
+.
+The
+.IR "groff info file"
+contains all information on the groff system within a single document.
+.
+Beneath the detailed documentation of all aspects, it provides
+examples and background information.
+.
+See
+.BR info (1)
+on how to read it.
+.
+.P
+Due to its complex structure, the groff system has many man pages.
+.
+They can be read with
+.BR man (1)
+or
+.BR \%groffer (@MAN1EXT@).
+.
+.TP
+Introduction, history and further readings:
+.BR roff (@MAN7EXT@).
+.
+.TP
+Viewer for groff files:
+.BR \%groffer (@MAN1EXT@),
+.BR \%gxditview (@MAN1EXT@),
+.BR \%xditview (1x).
+.
+.TP
+Wrapper programs for formatters:
+.BR \%groff (@MAN1EXT@),
+.BR \%grog (@MAN1EXT@).
+.
+.TP
+Roff preprocessors:
+.BR \%@g@eqn (@MAN1EXT@),
+.BR \%@g@grn (@MAN1EXT@),
+.BR \%@g@pic (@MAN1EXT@),
+.BR \%@g@refer (@MAN1EXT@),
+.BR \%@g@soelim (@MAN1EXT@),
+.BR \%@g@tbl (@MAN1EXT@),
+.BR grap (1).
+.
+.TP
+Roff language with the groff extensions:
+.BR \%groff (@MAN7EXT@),
+.BR \%groff_char (@MAN7EXT@),
+.BR \%groff_diff (@MAN7EXT@),
+.BR \%groff_font (@MAN5EXT@).
+.
+.TP
+Roff formatter programs:
+.BR \%@g@nroff (@MAN1EXT@),
+.BR \%@g@troff (@MAN1EXT@),
+.BR ditroff (@MAN7EXT@).
+.
+.TP
+The intermediate output language:
+.BR \%groff_out (@MAN7EXT@).
+.
+.TP
+Postprocessors for the output devices:
+.BR \%grodvi (@MAN1EXT@),
+.BR \%grohtml (@MAN1EXT@),
+.BR \%grolbp (@MAN1EXT@),
+.BR \%grolj4 (@MAN1EXT@),
+.BR \%grops (@MAN1EXT@),
+.BR \%grotty (@MAN1EXT@).
+.
+.TP
+Groff macro packages and macro-specific utilities:
+.BR \%groff_tmac (@MAN5EXT@),
+.BR \%groff_man (@MAN7EXT@),
+.BR \%groff_mdoc (@MAN7EXT@),
+.BR \%groff_me (@MAN7EXT@),
+.BR \%groff_mm (@MAN7EXT@),
+.BR \%groff_mmse (@MAN7EXT@),
+.BR \%groff_mom (@MAN7EXT@),
+.BR \%groff_ms (@MAN7EXT@),
+.BR \%groff_www (@MAN7EXT@),
+.BR \%mmroff (@MAN7EXT@).
+.
+.TP
+The following utilities are available:
+.BR \%addftinfo (@MAN1EXT@),
+.BR \%afmtodit (@MAN1EXT@),
+.BR \%eqn2graph (@MAN1EXT@),
+.BR \%groffer (@MAN1EXT@),
+.BR \%gxditview (@MAN1EXT@),
+.BR \%hpftodit (@MAN1EXT@),
+.BR \%@g@indxbib (@MAN1EXT@),
+.BR \%@g@lookbib (@MAN1EXT@),
+.BR \%pfbtops (@MAN1EXT@),
+.BR \%pic2graph (@MAN1EXT@),
+.BR \%tfmtodit (@MAN1EXT@).
+.
+.
+.\" --------------------------------------------------------------------
+.\" Emacs setup
+.\" --------------------------------------------------------------------
.
.\" Local Variables:
.\" mode: nroff
diff --git a/contrib/groff/src/roff/groff/pipeline.c b/contrib/groff/src/roff/groff/pipeline.c
index f26608f..59480dd 100644
--- a/contrib/groff/src/roff/groff/pipeline.c
+++ b/contrib/groff/src/roff/groff/pipeline.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -18,14 +18,9 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-/*
-Compile options are:
-
--DWCOREFLAG=0200 (or whatever)
--DHAVE_SYS_SIGLIST
--DSYS_SIGLIST_DECLARED
--DHAVE_UNISTD_H
-*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdio.h>
#include <signal.h>
@@ -41,6 +36,14 @@ Compile options are:
extern char *strerror();
#endif
+#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 _POSIX_VERSION
#include <sys/wait.h>
@@ -104,7 +107,8 @@ static char *i_to_a P((int));
via temporary files... */
#if defined(__MSDOS__) \
- || (defined(_WIN32) && !defined(_UWIN) && !defined(__CYGWIN32__))
+ || (defined(_WIN32) && !defined(_UWIN) && !defined(__CYGWIN__)) \
+ || defined(__EMX__)
#include <process.h>
#include <fcntl.h>
diff --git a/contrib/groff/src/roff/groff/pipeline.h b/contrib/groff/src/roff/groff/pipeline.h
index abb4b0c..52bff85 100644
--- a/contrib/groff/src/roff/groff/pipeline.h
+++ b/contrib/groff/src/roff/groff/pipeline.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -24,7 +25,7 @@ extern "C" {
#endif
/* run_pipeline can handle at most this many commands */
-#define MAX_COMMANDS 10
+#define MAX_COMMANDS 12
/* Children exit with this status if execvp fails. */
#define EXEC_FAILED_EXIT_STATUS 0xff
diff --git a/contrib/groff/src/roff/grog/Makefile.sub b/contrib/groff/src/roff/grog/Makefile.sub
index 85e2ad5..d199ac9 100644
--- a/contrib/groff/src/roff/grog/Makefile.sub
+++ b/contrib/groff/src/roff/grog/Makefile.sub
@@ -3,7 +3,14 @@ CLEANADD=grog
all: grog
-grog: grog.pl grog.sh
+grog: grog.sh
+ rm -f $@
+ sed -e "s|@g@|$(g)|g" \
+ -e "s|@VERSION@|$(version)$(revision)|" \
+ -e $(SH_SCRIPT_SED_CMD) $(srcdir)/grog.sh >$@
+ chmod +x $@
+
+grog.old: grog.pl grog.sh
if test -n "$(PERLPATH)" && test -f "$(PERLPATH)"; then \
rm -f $@; \
sed -e "s|/usr/bin/perl|$(PERLPATH)|" \
diff --git a/contrib/groff/src/roff/grog/grog.man b/contrib/groff/src/roff/grog/grog.man
index 8cd0bb2..e1ab74e 100644
--- a/contrib/groff/src/roff/grog/grog.man
+++ b/contrib/groff/src/roff/grog/grog.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -23,10 +23,10 @@ grog \- guess options for groff command
.B grog
[
.BI \- option
-\|.\|.\|.
+\|.\|.\|.\&
]
[
-.IR files \|.\|.\|.
+.IR files\ \|.\|.\|.\&
]
.SH DESCRIPTION
.B grog
@@ -39,6 +39,7 @@ options
.BR \-man ,
.BR \-me ,
.BR \-mm ,
+.BR \-mom ,
.BR \-ms ,
.BR \-mdoc,
.BR \-mdoc-old,
diff --git a/contrib/groff/src/roff/grog/grog.pl b/contrib/groff/src/roff/grog/grog.pl
index a61106c..07fa7a4 100644
--- a/contrib/groff/src/roff/grog/grog.pl
+++ b/contrib/groff/src/roff/grog/grog.pl
@@ -19,13 +19,9 @@ while ($ARGV[0] =~ /^-./) {
push(@command, $arg);
}
-if (@ARGV) {
- foreach $arg (@ARGV) {
- &process($arg, 0);
- }
-}
-else {
- &process("-", 0);
+@ARGV = ('-') unless @ARGV;
+foreach $arg (@ARGV) {
+ &process($arg, 0);
}
sub process {
@@ -81,10 +77,18 @@ sub process {
}
}
}
- elsif (/^\.R1$sp/ || /^\.\[$sp/) {
+ elsif (/^\.R1$sp/) {
$refer++;
$soelim++ if $level;
}
+ elsif (/^\.\[/) {
+ $refer_open++;
+ $soelim++ if $level;
+ }
+ elsif (/^\.\]/) {
+ $refer_close++;
+ $soelim++ if $level;
+ }
elsif (/^\.[PLI]P$sp/) {
$PP++;
}
@@ -144,6 +148,9 @@ sub process {
}
redo;
}
+ elsif (/^\.(PRINTSTYLE|START)$sp/) {
+ $mom++;
+ }
if (/^\.so$sp/) {
chop;
s/^.so *//;
@@ -166,6 +173,8 @@ sub help {
exit 0;
}
+$refer ||= $refer_open && $refer_close;
+
if ($pic || $tbl || $eqn || $grn || $grap || $refer) {
$s = "-";
$s .= "s" if $soelim;
@@ -185,6 +194,9 @@ if ($me > 0) {
elsif ($SH > 0 && $TH > 0) {
push(@command, "-man");
}
+else ($mom > 0) {
+ push(@command, "-mom");
+}
elsif ($PP > 0) {
push(@command, "-ms");
}
diff --git a/contrib/groff/src/roff/grog/grog.sh b/contrib/groff/src/roff/grog/grog.sh
index ae269af..3999d77 100644
--- a/contrib/groff/src/roff/grog/grog.sh
+++ b/contrib/groff/src/roff/grog/grog.sh
@@ -29,19 +29,21 @@ do
esac
done
-egrep -h "^\.(P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|so|\[|R1|GS|G1|PH|SA)$sp" $* \
+egrep -h "^\.(\[|\])|((P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|so|\[|R1|GS|G1|PH|SA)$sp)" $* \
| sed -e '/^\.so/s/^.*$/.SO_START\
&\
.SO_END/' \
| $soelim \
-| egrep '^\.(P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|\[|R1|GS|G1|PH|SA|SO_START|SO_END)' \
+| egrep '^\.(P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|\[|\]|R1|GS|G1|PH|SA|SO_START|SO_END)' \
| awk '
/^\.SO_START$/ { so = 1 }
/^\.SO_END$/ { so = 0 }
/^\.TS/ { tbl++; if (so > 0) soelim++ }
/^\.PS([ 0-9.<].*)?$/ { pic++; if (so > 0) soelim++ }
/^\.EQ/ { eqn++; if (so > 0) soelim++ }
-/^\.(R1|\[)/ { refer++; if (so > 0) soelim++ }
+/^\.R1/ { refer++; if (so > 0) soelim++ }
+/^\.\[/ {refer_start++; if (so > 0) soelim++ }
+/^\.\]/ {refer_end++; if (so > 0) soelim++ }
/^\.GS/ { grn++; if (so > 0) soelim++ }
/^\.G1/ { grap++; pic++; if (so > 0) soelim++ }
/^\.TH/ { TH++ }
@@ -69,11 +71,13 @@ egrep -h "^\.(P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|T
Oo--
}
}
+/^\.(PRINTSTYLE|START)/ { mom++ }
END {
if (files ~ /^-/)
files = "-- " files
printf "groff"
+ refer = refer || (refer_start && refer_end)
if (pic > 0 || tbl > 0 || grn > 0 || grap > 0 || eqn > 0 || refer > 0) {
printf " -"
if (soelim > 0) printf "s"
@@ -88,6 +92,8 @@ END {
printf " -me"
else if (SH > 0 && TH > 0)
printf " -man"
+ else if (mom > 0)
+ printf " -mom"
else if (PP > 0)
printf " -ms"
else if (P > 0 || mm > 0)
diff --git a/contrib/groff/src/roff/nroff/nroff.man b/contrib/groff/src/roff/nroff/nroff.man
index fade08e..eb070b0 100644
--- a/contrib/groff/src/roff/nroff/nroff.man
+++ b/contrib/groff/src/roff/nroff/nroff.man
@@ -37,12 +37,12 @@ the original English.
.OP \-o list
.OP \-p
.OP \-r cn
-.OP \-t
.OP \-S
+.OP \-t
.OP \-T name
.OP \-U
.OP \-v
-.RI "[\ " file\|.\|.\|. "\ ]"
+.RI "[\ " "file" "\ .\|.\|.\ ]"
.br
.ad \na
.SH DESCRIPTION
@@ -78,16 +78,22 @@ environment variable.
.PP
The
.B \-h
-option
-is equivalent to the
+and
+.B \-c
+options
+are equivalent to
.BR grotty 's
+options
.B \-h
-option (i.e., using tabs in the output).
+(using tabs in the output) and
+.B \-c
+(using the old output scheme instead of SGR escape sequences).
The
+.BR \-C ,
.BR \-i ,
.BR \-n ,
.BR \-m ,
-.B \-o
+.BR \-o ,
and
.B \-r
options have the effect described in
@@ -111,8 +117,6 @@ Options
.B \-U
(unsafe) are passed to
.BR groff .
-.B \-S
-is passed by default.
.B \-v
shows the version number.
.SH ENVIRONMENT
diff --git a/contrib/groff/src/roff/nroff/nroff.sh b/contrib/groff/src/roff/nroff/nroff.sh
index cdc221f..ed1df0b 100755
--- a/contrib/groff/src/roff/nroff/nroff.sh
+++ b/contrib/groff/src/roff/nroff/nroff.sh
@@ -34,13 +34,14 @@ case "`locale charmap 2>/dev/null`" in
esac ;;
esac
opts=
-safer=-S
# `for i; do' doesn't work with some versions of sh
for i
do
case $1 in
+ -c)
+ opts="$opts -P-c" ;;
-h)
opts="$opts -P-h" ;;
-[eq] | -s*)
@@ -49,19 +50,13 @@ for i
-[mrnoT])
echo "$prog: option $1 requires an argument" >&2
exit 1 ;;
- -[ipt] | -[mrno]*)
+ -[iptSUC] | -[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.
@@ -70,7 +65,7 @@ for i
echo "GNU nroff (groff) version @VERSION@"
exit 0 ;;
--help)
- echo "usage: nroff [-h] [-i] [-mNAME] [-nNUM] [-oLIST] [-p] [-rCN] [-t] [-Tname] [FILE...]"
+ echo "usage: nroff [-cChipt] [-mNAME] [-nNUM] [-oLIST] [-rCN] [-Tname] [FILE...]"
exit 0 ;;
--)
shift
@@ -91,6 +86,6 @@ done
: ${GROFF_BIN_PATH=@BINDIR@}
export GROFF_BIN_PATH
-PATH=$GROFF_BIN_PATH:$PATH groff $safer -Wall -mtty-char $T $opts ${1+"$@"}
+PATH=$GROFF_BIN_PATH:$PATH groff -mtty-char $T $opts ${1+"$@"}
# eof
diff --git a/contrib/groff/src/roff/troff/Makefile.sub b/contrib/groff/src/roff/troff/Makefile.sub
index e883959..e889cdd 100644
--- a/contrib/groff/src/roff/troff/Makefile.sub
+++ b/contrib/groff/src/roff/troff/Makefile.sub
@@ -1,17 +1,17 @@
-PROG=troff
+PROG=troff$(EXEEXT)
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
+ env.$(OBJEXT) \
+ node.$(OBJEXT) \
+ input.$(OBJEXT) \
+ div.$(OBJEXT) \
+ symbol.$(OBJEXT) \
+ dictionary.$(OBJEXT) \
+ reg.$(OBJEXT) \
+ number.$(OBJEXT) \
+ majorminor.$(OBJEXT)
CCSRCS=\
$(srcdir)/env.cc \
$(srcdir)/node.cc \
diff --git a/contrib/groff/src/roff/troff/TODO b/contrib/groff/src/roff/troff/TODO
index 6660597..49aa0eb 100644
--- a/contrib/groff/src/roff/troff/TODO
+++ b/contrib/groff/src/roff/troff/TODO
@@ -83,9 +83,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).
-Variant of `.it' for which a line interrupted with \c counts as one
-input line.
-
Make it possible to suppress hyphenation on a word-by-word basis.
(Perhaps store hyphenation flags in tfont.)
diff --git a/contrib/groff/src/roff/troff/charinfo.h b/contrib/groff/src/roff/troff/charinfo.h
index a4ecd57..b907ae4 100644
--- a/contrib/groff/src/roff/troff/charinfo.h
+++ b/contrib/groff/src/roff/troff/charinfo.h
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -30,9 +31,13 @@ class charinfo {
unsigned char hyphenation_code;
unsigned char flags;
unsigned char ascii_code;
+ unsigned char asciify_code;
char not_found;
- char transparent_translate; // non-zero means translation applies to
+ char transparent_translate; // non-zero means translation applies
// to transparent throughput
+ char translate_input; // non-zero means that asciify_code is
+ // active for .asciify (set by .trin)
+ char fallback;
public:
enum {
ENDS_SENTENCE = 1,
@@ -61,19 +66,24 @@ public:
int transparent();
unsigned char get_hyphenation_code();
unsigned char get_ascii_code();
+ unsigned char get_asciify_code();
void set_hyphenation_code(unsigned char);
void set_ascii_code(unsigned char);
+ void set_asciify_code(unsigned char);
+ void set_translation_input();
+ int get_translation_input();
charinfo *get_translation(int = 0);
- void set_translation(charinfo *, int);
+ void set_translation(charinfo *, int, int);
void set_flags(unsigned char);
void set_special_translation(int, int);
int get_special_translation(int = 0);
- macro *set_macro(macro *);
+ macro *set_macro(macro *, int = 0);
macro *get_macro();
int first_time_not_found();
void set_number(int);
int get_number();
int numbered();
+ int is_fallback();
symbol *get_symbol();
};
@@ -116,6 +126,11 @@ inline int charinfo::numbered()
return flags & NUMBERED;
}
+inline int charinfo::is_fallback()
+{
+ return fallback;
+}
+
inline charinfo *charinfo::get_translation(int transparent_throughput)
{
return (transparent_throughput && !transparent_translate
@@ -133,6 +148,11 @@ inline unsigned char charinfo::get_ascii_code()
return ascii_code;
}
+inline unsigned char charinfo::get_asciify_code()
+{
+ return (translate_input ? asciify_code : 0);
+}
+
inline void charinfo::set_flags(unsigned char c)
{
flags = c;
@@ -143,6 +163,16 @@ inline int charinfo::get_index()
return index;
}
+inline void charinfo::set_translation_input()
+{
+ translate_input = 1;
+}
+
+inline int charinfo::get_translation_input()
+{
+ return translate_input;
+}
+
inline int charinfo::get_special_translation(int transparent_throughput)
{
return (transparent_throughput && !transparent_translate
diff --git a/contrib/groff/src/roff/troff/dictionary.cc b/contrib/groff/src/roff/troff/dictionary.cc
index bca3845..a70ebb0 100644
--- a/contrib/groff/src/roff/troff/dictionary.cc
+++ b/contrib/groff/src/roff/troff/dictionary.cc
@@ -138,7 +138,7 @@ int dictionary_iterator::get(symbol *sp, void **vp)
}
object_dictionary_iterator::object_dictionary_iterator(object_dictionary &od)
- : di(od.d)
+: di(od.d)
{
}
diff --git a/contrib/groff/src/roff/troff/div.cc b/contrib/groff/src/roff/troff/div.cc
index c885ca8..14c7399 100644
--- a/contrib/groff/src/roff/troff/div.cc
+++ b/contrib/groff/src/roff/troff/div.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -410,7 +410,7 @@ void top_level_diversion::output(node *nd, int retain_size,
void top_level_diversion::transparent_output(unsigned char c)
{
if (before_first_page && begin_page())
- // This can only happen with the transparent() request.
+ // This can only happen with the .output request.
fatal("sorry, I didn't manage to begin the first page in time: use an explicit .br request");
const char *s = asciify(c);
while (*s)
@@ -467,7 +467,7 @@ void top_level_diversion::space(vunits n, int forced)
}
trap::trap(symbol s, vunits n, trap *p)
- : next(p), position(n), nm(s)
+: next(p), position(n), nm(s)
{
}
@@ -641,7 +641,7 @@ void page_offset()
n = topdiv->prev_page_offset;
topdiv->prev_page_offset = topdiv->page_offset;
topdiv->page_offset = n;
- curenv->add_html_tag(".po", n.to_units());
+ curenv->add_html_tag(0, ".po", n.to_units());
skip_line();
}
@@ -760,7 +760,7 @@ void space_request()
else
// The line might have had line spacing that was truncated.
truncated_space += n;
- curenv->add_html_tag(".sp", n.to_units());
+ curenv->add_html_tag(1, ".sp", n.to_units());
tok.next();
}
@@ -769,7 +769,7 @@ void blank_line()
curenv->do_break();
if (!trap_sprung_flag && !curdiv->no_space_mode) {
curdiv->space(curenv->get_vertical_spacing());
- curenv->add_html_tag(".sp", 1);
+ curenv->add_html_tag(1, ".sp", 1);
} else
truncated_space += curenv->get_vertical_spacing();
}
@@ -791,8 +791,13 @@ void need_space()
void page_number()
{
int n;
- if (has_arg() && get_integer(&n, topdiv->get_page_number()))
- topdiv->set_next_page_number(n);
+
+ // the ps4html register is set if we are using -Tps
+ // to generate images for html
+ reg *r = (reg *)number_reg_dictionary.lookup("ps4html");
+ if (r == NULL)
+ if (has_arg() && get_integer(&n, topdiv->get_page_number()))
+ topdiv->set_next_page_number(n);
skip_line();
}
@@ -828,7 +833,7 @@ void flush_output()
curenv->do_break();
if (the_output)
the_output->flush();
- curenv->add_html_tag(".fl");
+ curenv->add_html_tag(1, ".fl");
tok.next();
}
diff --git a/contrib/groff/src/roff/troff/div.h b/contrib/groff/src/roff/troff/div.h
index 3b726c3..31b9af3 100644
--- a/contrib/groff/src/roff/troff/div.h
+++ b/contrib/groff/src/roff/troff/div.h
@@ -152,5 +152,7 @@ void push_page_ejector();
void continue_page_eject();
void handle_first_page_transition();
void blank_line();
+void begin_page();
+void end_diversions();
extern void cleanup_and_exit(int);
diff --git a/contrib/groff/src/roff/troff/env.cc b/contrib/groff/src/roff/troff/env.cc
index c0743441..40c9e3c 100644
--- a/contrib/groff/src/roff/troff/env.cc
+++ b/contrib/groff/src/roff/troff/env.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -31,6 +31,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "reg.h"
#include "charinfo.h"
#include "macropath.h"
+#include "input.h"
#include <math.h>
symbol default_family("T");
@@ -299,7 +300,8 @@ node *environment::make_char_node(charinfo *ci)
void environment::add_node(node *n)
{
- assert(n != 0);
+ if (n == 0)
+ return;
if (current_tab || current_field)
n->freeze_space();
if (interrupted) {
@@ -392,7 +394,7 @@ void environment::space_newline()
width_total += x;
return;
}
- add_node(new word_space_node(x, w));
+ add_node(new word_space_node(x, get_fill_color(), w));
possibly_break_line(0, spread_flag);
spread_flag = 0;
}
@@ -426,6 +428,7 @@ void environment::space(hunits space_width, hunits sentence_space_width)
return;
}
add_node(new word_space_node(x,
+ get_fill_color(),
new width_list(space_width,
sentence_space_width)));
possibly_break_line(0, spread_flag);
@@ -438,7 +441,7 @@ void environment::set_font(symbol nm)
{
if (interrupted)
return;
- if (nm == symbol("P")) {
+ if (nm == symbol("P") || nm.is_empty()) {
if (family->make_definite(prev_fontno) < 0)
return;
int tem = fontno;
@@ -479,7 +482,9 @@ void environment::set_font(int n)
void environment::set_family(symbol fam)
{
- if (fam.is_null()) {
+ if (interrupted)
+ return;
+ if (fam.is_null() || fam.is_empty()) {
if (prev_family->make_definite(fontno) < 0)
return;
font_family *tem = family;
@@ -532,6 +537,42 @@ void environment::set_char_slant(int n)
char_slant = n;
}
+color *environment::get_prev_glyph_color()
+{
+ return prev_glyph_color;
+}
+
+color *environment::get_glyph_color()
+{
+ return glyph_color;
+}
+
+color *environment::get_prev_fill_color()
+{
+ return prev_fill_color;
+}
+
+color *environment::get_fill_color()
+{
+ return fill_color;
+}
+
+void environment::set_glyph_color(color *c)
+{
+ if (interrupted)
+ return;
+ curenv->prev_glyph_color = curenv->glyph_color;
+ curenv->glyph_color = c;
+}
+
+void environment::set_fill_color(color *c)
+{
+ if (interrupted)
+ return;
+ curenv->prev_fill_color = curenv->fill_color;
+ curenv->fill_color = c;
+}
+
environment::environment(symbol nm)
: dummy(0),
prev_line_length((units_per_inch*13)/2),
@@ -565,6 +606,7 @@ environment::environment(symbol nm)
underline_lines(0),
underline_spaces(0),
input_trap_count(0),
+ continued_input_trap(0),
line(0),
prev_text_length(0),
width_total(0),
@@ -597,9 +639,12 @@ environment::environment(symbol nm)
#ifdef WIDOW_CONTROL
widow_control(0),
#endif /* WIDOW_CONTROL */
- need_eol(0),
ignore_next_eol(0),
emitted_node(0),
+ glyph_color(&default_color),
+ prev_glyph_color(&default_color),
+ fill_color(&default_color),
+ prev_fill_color(&default_color),
name(nm),
control_char('.'),
no_break_control_char('\''),
@@ -651,6 +696,7 @@ environment::environment(const environment *e)
underline_lines(0),
underline_spaces(0),
input_trap_count(0),
+ continued_input_trap(0),
line(0),
prev_text_length(e->prev_text_length),
width_total(0),
@@ -683,8 +729,12 @@ environment::environment(const environment *e)
#ifdef WIDOW_CONTROL
widow_control(e->widow_control),
#endif /* WIDOW_CONTROL */
- need_eol(0),
ignore_next_eol(0),
+ emitted_node(0),
+ glyph_color(e->glyph_color),
+ prev_glyph_color(e->prev_glyph_color),
+ fill_color(e->fill_color),
+ prev_fill_color(e->prev_fill_color),
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),
@@ -725,6 +775,7 @@ void environment::copy(const environment *e)
underline_lines = 0;
underline_spaces = 0;
input_trap_count = 0;
+ continued_input_trap = 0;
prev_text_length = e->prev_text_length;
width_total = 0;
space_total = 0;
@@ -765,6 +816,12 @@ void environment::copy(const environment *e)
hyphenation_space = e->hyphenation_space;
hyphenation_margin = e->hyphenation_margin;
composite = 0;
+ ignore_next_eol = e->ignore_next_eol;
+ emitted_node = e->emitted_node;
+ glyph_color= e->glyph_color;
+ prev_glyph_color = e->prev_glyph_color;
+ fill_color = e->fill_color;
+ prev_fill_color = e->prev_fill_color;
}
environment::~environment()
@@ -1107,13 +1164,54 @@ void point_size()
if (n <= 0)
n = 1;
curenv->set_size(n);
- curenv->add_html_tag(".ps", n);
+ curenv->add_html_tag(1, ".ps", n);
}
else
curenv->set_size(0);
skip_line();
}
+void override_sizes()
+{
+ int n = 16;
+ int *sizes = new int[n];
+ int i = 0;
+ char *buf = read_string();
+ if (!buf)
+ return;
+ char *p = strtok(buf, " \t");
+ for (;;) {
+ if (!p)
+ break;
+ int lower, upper;
+ switch (sscanf(p, "%d-%d", &lower, &upper)) {
+ case 1:
+ upper = lower;
+ // fall through
+ case 2:
+ if (lower <= upper && lower >= 0)
+ break;
+ // fall through
+ default:
+ warning(WARN_RANGE, "bad size range `%1'", p);
+ return;
+ }
+ if (i + 2 > n) {
+ int *old_sizes = sizes;
+ sizes = new int[n*2];
+ memcpy(sizes, old_sizes, n*sizeof(int));
+ n *= 2;
+ a_delete old_sizes;
+ }
+ sizes[i++] = lower;
+ if (lower == 0)
+ break;
+ sizes[i++] = upper;
+ p = strtok(0, " \t");
+ }
+ font_size::init_size_table(sizes);
+}
+
void space_size()
{
int n;
@@ -1134,7 +1232,8 @@ void fill()
if (break_flag)
curenv->do_break();
curenv->fill = 1;
- curenv->add_html_tag(".fi");
+ curenv->add_html_tag(1, ".fi");
+ curenv->add_html_tag(0, ".br");
tok.next();
}
@@ -1144,11 +1243,10 @@ void no_fill()
tok.next();
if (break_flag)
curenv->do_break();
-
curenv->fill = 0;
- curenv->add_html_tag(".nf");
- curenv->ignore_next_eol = 1;
- curenv->add_html_tag(".po", topdiv->get_page_offset().to_units());
+ curenv->add_html_tag(1, ".nf");
+ curenv->add_html_tag(0, ".br");
+ curenv->add_html_tag(0, ".po", topdiv->get_page_offset().to_units());
tok.next();
}
@@ -1165,7 +1263,7 @@ void center()
curenv->do_break();
curenv->right_justify_lines = 0;
curenv->center_lines = n;
- curenv->add_html_tag(".ce", n);
+ curenv->add_html_tag(1, ".ce", n);
tok.next();
}
@@ -1182,7 +1280,7 @@ void right_justify()
curenv->do_break();
curenv->center_lines = 0;
curenv->right_justify_lines = n;
- curenv->add_html_tag(".rj", n);
+ curenv->add_html_tag(1, ".rj", n);
tok.next();
}
@@ -1199,7 +1297,7 @@ void line_length()
temp = curenv->prev_line_length;
curenv->prev_line_length = curenv->line_length;
curenv->line_length = temp;
- curenv->add_html_tag(".ll", temp.to_units());
+ curenv->add_html_tag(1, ".ll", temp.to_units());
skip_line();
}
@@ -1286,7 +1384,8 @@ void indent()
curenv->have_temporary_indent = 0;
curenv->prev_indent = curenv->indent;
curenv->indent = temp;
- curenv->add_html_tag(".in", temp.to_units());
+ if (break_flag)
+ curenv->add_html_tag(1, ".in", temp.to_units());
tok.next();
}
@@ -1307,7 +1406,7 @@ void temporary_indent()
if (!err) {
curenv->temporary_indent = temp;
curenv->have_temporary_indent = 1;
- curenv->add_html_tag(".ti", temp.to_units());
+ curenv->add_html_tag(1, ".ti", temp.to_units());
}
tok.next();
}
@@ -1562,6 +1661,11 @@ void environment::newline()
if (x > H0)
saved_indent += x/2;
to_be_output = line;
+ if (is_html) {
+ node *n = make_html_tag("eol.ce");
+ n->next = to_be_output;
+ to_be_output = n;
+ }
to_be_output_width = width_total;
line = 0;
}
@@ -1583,12 +1687,21 @@ void environment::newline()
}
input_line_start = line == 0 ? H0 : width_total;
if (to_be_output) {
+ if (is_html && !fill) {
+ if (curdiv == topdiv) {
+ node *n = make_html_tag("eol");
+
+ n->next = to_be_output;
+ to_be_output = n;
+ }
+ }
output_line(to_be_output, to_be_output_width);
hyphen_line_count = 0;
}
if (input_trap_count > 0) {
- if (--input_trap_count == 0)
- spring_trap(input_trap);
+ if (!(continued_input_trap && prev_line_interrupted))
+ if (--input_trap_count == 0)
+ spring_trap(input_trap);
}
}
@@ -1598,7 +1711,7 @@ void environment::output_line(node *n, hunits width)
if (margin_character_flags) {
hunits d = line_length + margin_character_distance - saved_indent - width;
if (d > 0) {
- n = new hmotion_node(d, n);
+ n = new hmotion_node(d, get_fill_color(), n);
width += d;
}
margin_character_flags &= ~MARGIN_CHARACTER_NEXT;
@@ -1621,7 +1734,7 @@ void environment::output_line(node *n, hunits width)
n = tem;
}
if (!saved_indent.is_zero())
- nn = new hmotion_node(saved_indent, nn);
+ nn = new hmotion_node(saved_indent, get_fill_color(), nn);
width += saved_indent;
if (no_number_count > 0)
--no_number_count;
@@ -1629,11 +1742,11 @@ void environment::output_line(node *n, hunits width)
hunits w = (line_number_digit_width
*(3+line_number_indent+number_text_separation));
if (next_line_number % line_number_multiple != 0)
- nn = new hmotion_node(w, nn);
+ nn = new hmotion_node(w, get_fill_color(), nn);
else {
hunits x = w;
- nn = new hmotion_node(number_text_separation*line_number_digit_width,
- nn);
+ nn = new hmotion_node(number_text_separation * line_number_digit_width,
+ get_fill_color(), nn);
x -= number_text_separation*line_number_digit_width;
char buf[30];
sprintf(buf, "%3d", next_line_number);
@@ -1646,7 +1759,7 @@ void environment::output_line(node *n, hunits width)
gn->next = nn;
nn = gn;
}
- nn = new hmotion_node(x, nn);
+ nn = new hmotion_node(x, get_fill_color(), nn);
}
width += w;
++next_line_number;
@@ -1789,7 +1902,7 @@ breakpoint *environment::choose_breakpoint()
}
if (best_bp) {
if (!best_bp_fits)
- warning(WARN_BREAK, "can't break line");
+ output_warning(WARN_BREAK, "can't break line");
return best_bp;
}
return 0;
@@ -1875,6 +1988,14 @@ static void distribute_space(node *n, int nspaces, hunits desired_space,
static int reverse = 0;
if (force_reverse || reverse)
n = node_list_reverse(n);
+ if (!force_reverse && nspaces > 0 && spread_limit >= 0
+ && desired_space.to_units() > 0) {
+ hunits em = curenv->get_size();
+ double Ems = (double)desired_space.to_units() / nspaces
+ / (em.is_zero() ? hresolution : em.to_units());
+ if (Ems > spread_limit)
+ output_warning(WARN_BREAK, "spreading %1m per space", Ems);
+ }
for (node *tem = n; tem; tem = tem->next)
tem->spread_space(&nspaces, &desired_space);
if (force_reverse || reverse)
@@ -1909,6 +2030,9 @@ void environment::possibly_break_line(int start_here, int forced)
case ADJUST_BOTH:
if (bp->nspaces != 0)
extra_space_width = target_text_length - bp->width;
+ else if (bp->width > 0 && target_text_length > 0
+ && target_text_length > bp->width)
+ output_warning(WARN_BREAK, "cannot adjust line");
break;
case ADJUST_CENTER:
saved_indent += (target_text_length - bp->width)/2;
@@ -2013,32 +2137,15 @@ void environment::final_break()
}
/*
- * add_html_tag_eol - add an end of line tag if appropriate.
- */
-
-void environment::add_html_tag_eol()
-{
- if (is_html) {
- if (ignore_next_eol > 0)
- ignore_next_eol--;
- else if (need_eol > 0) {
- need_eol--;
- add_html_tag("eol");
- }
- else if (!fill && emitted_node) {
- add_html_tag("eol");
- emitted_node = 0;
- }
- }
-}
-
-/*
* add_html_tag - emits a special html-tag: to help post-grohtml understand
* the key troff commands
*/
-void environment::add_html_tag(const char *name)
+void environment::add_html_tag(int force, const char *name)
{
+ if (!force && (curdiv != topdiv))
+ return;
+
if (is_html) {
/*
* need to emit tag for post-grohtml
@@ -2049,9 +2156,11 @@ void environment::add_html_tag(const char *name)
macro *m = new macro;
m->append_str("html-tag:");
for (const char *p = name; *p; p++)
- if (!illegal_input_char((unsigned char)*p))
+ if (!invalid_input_char((unsigned char)*p))
m->append(*p);
- add_node(new special_node(*m));
+ curdiv->output(new special_node(*m), 1, 0, 0, 0);
+ if (strcmp(name, ".nf") == 0)
+ curenv->ignore_next_eol = 1;
}
}
@@ -2061,18 +2170,12 @@ void environment::add_html_tag(const char *name)
* of i.
*/
-void environment::add_html_tag(const char *name, int i)
+void environment::add_html_tag(int force, const char *name, int i)
{
- if (is_html) {
- if (strcmp(name, ".ce") == 0) {
- if (i == 0)
- need_eol = 0;
- else {
- need_eol = i;
- ignore_next_eol = 1; // since the .ce creates an eol
- }
- }
+ if (!force && (curdiv != topdiv))
+ return;
+ if (is_html) {
/*
* need to emit tag for post-grohtml
* but we check to see whether we can emit specials
@@ -2082,13 +2185,12 @@ void environment::add_html_tag(const char *name, int i)
macro *m = new macro;
m->append_str("html-tag:");
for (const char *p = name; *p; p++)
- if (!illegal_input_char((unsigned char)*p))
+ if (!invalid_input_char((unsigned char)*p))
m->append(*p);
m->append(' ');
m->append_int(i);
- // output_pending_lines();
- output(new special_node(*m), !fill, 0, 0, 0);
- // output_pending_lines();
+ node *n = new special_node(*m);
+ curdiv->output(n, 1, 0, 0, 0);
}
}
@@ -2096,8 +2198,11 @@ void environment::add_html_tag(const char *name, int i)
* add_html_tag_tabs - emits the tab settings for post-grohtml
*/
-void environment::add_html_tag_tabs()
+void environment::add_html_tag_tabs(int force)
{
+ if (!force && (curdiv != topdiv))
+ return;
+
if (is_html) {
/*
* need to emit tag for post-grohtml
@@ -2115,24 +2220,62 @@ void environment::add_html_tag_tabs()
switch (t) {
case TAB_LEFT:
m->append_str(" L ");
- m->append_int(d.to_units());
+ m->append_int(l.to_units());
break;
case TAB_CENTER:
m->append_str(" C ");
- m->append_int(d.to_units());
+ m->append_int(l.to_units());
break;
case TAB_RIGHT:
m->append_str(" R ");
- m->append_int(d.to_units());
+ m->append_int(l.to_units());
break;
case TAB_NONE:
break;
}
} while ((t != TAB_NONE) && (l < get_line_length()));
- output_pending_lines();
- output(new special_node(*m), !fill, 0, 0, 0);
- output_pending_lines();
+ curdiv->output(new special_node(*m), 1, 0, 0, 0);
+ }
+}
+
+node *environment::make_html_tag(const char *name, int i)
+{
+ if (is_html) {
+ /*
+ * need to emit tag for post-grohtml
+ * but we check to see whether we can emit specials
+ */
+ if (curdiv == topdiv && topdiv->before_first_page)
+ topdiv->begin_page();
+ macro *m = new macro;
+ m->append_str("html-tag:");
+ for (const char *p = name; *p; p++)
+ if (!invalid_input_char((unsigned char)*p))
+ m->append(*p);
+ m->append(' ');
+ m->append_int(i);
+ return new special_node(*m);
}
+ return 0;
+}
+
+node *environment::make_html_tag(const char *name)
+{
+ if (is_html) {
+ /*
+ * need to emit tag for post-grohtml
+ * but we check to see whether we can emit specials
+ */
+ if (curdiv == topdiv && topdiv->before_first_page)
+ topdiv->begin_page();
+ macro *m = new macro;
+ m->append_str("html-tag:");
+ for (const char *p = name; *p; p++)
+ if (!invalid_input_char((unsigned char)*p))
+ m->append(*p);
+ return new special_node(*m);
+ }
+ return 0;
}
void environment::do_break(int spread)
@@ -2144,7 +2287,8 @@ void environment::do_break(int spread)
if (current_tab)
wrap_up_tab();
if (line) {
- line = new space_node(H0, line); // this is so that hyphenation works
+ // this is so that hyphenation works
+ line = new space_node(H0, get_fill_color(), line);
space_total++;
possibly_break_line(0, spread);
}
@@ -2191,7 +2335,7 @@ void do_break_request(int spread)
tok.next();
if (break_flag) {
curenv->do_break(spread);
- curenv->add_html_tag(".br");
+ curenv->add_html_tag(0, ".br");
}
tok.next();
}
@@ -2228,6 +2372,10 @@ void title()
curenv->char_slant = env.char_slant;
curenv->fontno = env.fontno;
curenv->prev_fontno = env.prev_fontno;
+ curenv->glyph_color = env.glyph_color;
+ curenv->prev_glyph_color = env.prev_glyph_color;
+ curenv->fill_color = env.fill_color;
+ curenv->prev_fill_color = env.prev_fill_color;
node *n = 0;
node *p = part[2];
while (p != 0) {
@@ -2239,7 +2387,7 @@ void title()
hunits title_length(curenv->title_length);
hunits f = title_length - part_width[1];
hunits f2 = f/2;
- n = new hmotion_node(f2 - part_width[2], n);
+ n = new hmotion_node(f2 - part_width[2], curenv->get_fill_color(), n);
p = part[1];
while (p != 0) {
node *tem = p;
@@ -2247,7 +2395,7 @@ void title()
tem->next = n;
n = tem;
}
- n = new hmotion_node(f - f2 - part_width[0], n);
+ n = new hmotion_node(f - f2 - part_width[0], curenv->get_fill_color(), n);
p = part[0];
while (p != 0) {
node *tem = p;
@@ -2302,9 +2450,11 @@ void no_adjust()
skip_line();
}
-void input_trap()
+void do_input_trap(int continued)
{
curenv->input_trap_count = 0;
+ if (continued)
+ curenv->continued_input_trap = 1;
int n;
if (has_arg() && get_integer(&n)) {
if (n <= 0)
@@ -2321,6 +2471,16 @@ void input_trap()
skip_line();
}
+void input_trap()
+{
+ do_input_trap(0);
+}
+
+void input_trap_continued()
+{
+ do_input_trap(1);
+}
+
/* tabs */
// must not be R or C or L or a legitimate part of a number expression
@@ -2371,7 +2531,7 @@ tab::tab(hunits x, tab_type t) : next(0), pos(x), type(t)
}
tab_stops::tab_stops(hunits distance, tab_type type)
- : initial_list(0)
+: initial_list(0)
{
repeated_list = new tab(distance, type);
}
@@ -2383,12 +2543,21 @@ tab_stops::~tab_stops()
tab_type tab_stops::distance_to_next_tab(hunits curpos, hunits *distance)
{
+ hunits nextpos;
+
+ return distance_to_next_tab(curpos, distance, &nextpos);
+}
+
+tab_type tab_stops::distance_to_next_tab(hunits curpos, hunits *distance,
+ hunits *nextpos)
+{
hunits lastpos = 0;
tab *tem;
for (tem = initial_list; tem && tem->pos <= curpos; tem = tem->next)
lastpos = tem->pos;
if (tem) {
*distance = tem->pos - curpos;
+ *nextpos = tem->pos;
return tem->type;
}
if (repeated_list == 0)
@@ -2399,6 +2568,7 @@ tab_type tab_stops::distance_to_next_tab(hunits curpos, hunits *distance)
lastpos = tem->pos;
if (tem) {
*distance = tem->pos + base - curpos;
+ *nextpos = tem->pos + base;
return tem->type;
}
assert(lastpos > 0);
@@ -2476,7 +2646,7 @@ tab_stops::tab_stops() : initial_list(0), repeated_list(0)
}
tab_stops::tab_stops(const tab_stops &ts)
- : initial_list(0), repeated_list(0)
+: initial_list(0), repeated_list(0)
{
tab **p = &initial_list;
tab *t = ts.initial_list;
@@ -2573,7 +2743,7 @@ void set_tabs()
}
}
curenv->tabs = tabs;
- curenv->add_html_tag_tabs();
+ curenv->add_html_tag_tabs(1);
skip_line();
}
@@ -2605,6 +2775,14 @@ tab_type environment::distance_to_next_tab(hunits *distance)
: curenv->tabs.distance_to_next_tab(get_input_line_position(), distance);
}
+tab_type environment::distance_to_next_tab(hunits *distance, hunits *leftpos)
+{
+ return line_tabs
+ ? curenv->tabs.distance_to_next_tab(get_text_length(), distance, leftpos)
+ : curenv->tabs.distance_to_next_tab(get_input_line_position(), distance,
+ leftpos);
+}
+
void field_characters()
{
field_delimiter_char = get_optional_char();
@@ -2683,7 +2861,7 @@ node *environment::make_tab_node(hunits d, node *next)
leader_node = 0;
}
if (!leader_node)
- return new hmotion_node(d, 1, 0, next);
+ return new hmotion_node(d, 1, 0, get_fill_color(), next);
node *n = new hline_node(d, leader_node, next);
leader_node = 0;
return n;
@@ -2692,31 +2870,34 @@ node *environment::make_tab_node(hunits d, node *next)
void environment::handle_tab(int is_leader)
{
hunits d;
+ hunits abs;
if (current_tab)
wrap_up_tab();
charinfo *ci = is_leader ? leader_char : tab_char;
delete leader_node;
leader_node = ci ? make_char_node(ci) : 0;
- tab_type t = distance_to_next_tab(&d);
+ tab_type t = distance_to_next_tab(&d, &abs);
switch (t) {
case TAB_NONE:
return;
case TAB_LEFT:
- add_html_tag("tab left");
add_node(make_tab_node(d));
+ add_node(make_html_tag("tab L", abs.to_units()));
return;
case TAB_RIGHT:
+ add_node(make_html_tag("tab R", abs.to_units()));
+ break;
case TAB_CENTER:
- add_html_tag("tab center");
- tab_width = 0;
- tab_distance = d;
- tab_contents = 0;
- current_tab = t;
- tab_field_spaces = 0;
- return;
+ add_node(make_html_tag("tab C", abs.to_units()));
+ break;
default:
assert(0);
}
+ tab_width = 0;
+ tab_distance = d;
+ tab_contents = 0;
+ current_tab = t;
+ tab_field_spaces = 0;
}
void environment::start_field()
@@ -2792,13 +2973,13 @@ void environment::wrap_up_field()
void environment::add_padding()
{
if (current_tab) {
- tab_contents = new space_node(H0, tab_contents);
+ tab_contents = new space_node(H0, get_fill_color(), tab_contents);
tab_field_spaces++;
}
else {
if (line == 0)
start_line();
- line = new space_node(H0, line);
+ line = new space_node(H0, get_fill_color(), line);
field_spaces++;
}
}
@@ -2921,6 +3102,12 @@ const char *environment::get_font_family_string()
return family->nm.contents();
}
+const char *environment::get_font_name_string()
+{
+ symbol f = get_font_name(fontno, this);
+ return f.contents();
+}
+
const char *environment::get_name_string()
{
return name.contents();
@@ -3001,12 +3188,14 @@ const char *environment::get_requested_point_size_string()
void init_env_requests()
{
init_request("it", input_trap);
+ init_request("itc", input_trap_continued);
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("sizes", override_sizes);
init_request("ft", font_change);
init_request("fam", family_change);
init_request("ss", space_size);
@@ -3070,6 +3259,7 @@ void init_env_requests()
init_int_env_reg(".ss", get_space_size);
init_int_env_reg(".sss", get_sentence_space_size);
init_string_env_reg(".fam", get_font_family_string);
+ init_string_env_reg(".fn", get_font_name_string);
init_string_env_reg(".ev", get_name_string);
init_int_env_reg(".hy", get_hyphenation_flags);
init_int_env_reg(".hlm", get_hyphen_line_max);
@@ -3118,14 +3308,15 @@ class hyphen_trie : private trie {
void do_match(int i, void *v);
void do_delete(void *v);
void insert_pattern(const char *pat, int patlen, int *num);
+ void insert_hyphenation(dictionary ex, const char *pat, int patlen);
+ int hpf_getc(FILE *f);
public:
hyphen_trie() {}
~hyphen_trie() {}
void hyphenate(const char *word, int len, int *hyphens);
- void read_patterns_file(const char *name);
+ void read_patterns_file(const char *name, int append, dictionary ex);
};
-
struct hyphenation_language {
symbol name;
dictionary exceptions;
@@ -3150,7 +3341,8 @@ static void set_hyphenation_language()
skip_line();
}
-const int WORD_MAX = 1024;
+const int WORD_MAX = 256; // we use unsigned char for offsets in
+ // hyphenation exceptions
static void hyphen_word()
{
@@ -3189,7 +3381,7 @@ static void hyphen_word()
pos[npos] = 0;
buf[i] = 0;
unsigned char *tem = new unsigned char[npos + 1];
- memcpy(tem, pos, npos+1);
+ memcpy(tem, pos, npos + 1);
tem = (unsigned char *)current_language->exceptions.lookup(symbol(buf),
tem);
if (tem)
@@ -3290,6 +3482,33 @@ void hyphen_trie::insert_pattern(const char *pat, int patlen, int *num)
insert(pat, patlen, op);
}
+void hyphen_trie::insert_hyphenation(dictionary ex, const char *pat,
+ int patlen)
+{
+ char buf[WORD_MAX + 1];
+ unsigned char pos[WORD_MAX + 2];
+ int i = 0, j = 0;
+ int npos = 0;
+ while (j < patlen) {
+ unsigned char c = pat[j++];
+ if (c == '-') {
+ if (i > 0 && (npos == 0 || pos[npos - 1] != i))
+ pos[npos++] = i;
+ }
+ else
+ buf[i++] = hpf_code_table[c];
+ }
+ if (i > 0) {
+ pos[npos] = 0;
+ buf[i] = 0;
+ unsigned char *tem = new unsigned char[npos + 1];
+ memcpy(tem, pos, npos + 1);
+ tem = (unsigned char *)ex.lookup(symbol(buf), tem);
+ if (tem)
+ a_delete tem;
+ }
+}
+
void hyphen_trie::hyphenate(const char *word, int len, int *hyphens)
{
int j;
@@ -3324,10 +3543,78 @@ void hyphen_trie::do_delete(void *v)
delete tem;
}
}
-
-void hyphen_trie::read_patterns_file(const char *name)
+
+/* We use very simple rules to parse TeX's hyphenation patterns.
+
+ . `%' starts a comment even if preceded by `\'.
+
+ . No support for digraphs and like `\$'.
+
+ . `^^xx' (`x' is 0-9 or a-f), and `^^x' (character code of `x' in the
+ range 0-127) are recognized; other use of `^' causes an error.
+
+ . No macro expansion.
+
+ . We check for the expression `\patterns{...}' (possibly with
+ whitespace before and after the braces). Everything between the
+ braces is taken as hyphenation patterns. Consequently, `{' and `}'
+ are not allowed in patterns.
+
+ . Similarly, `\hyphenation{...}' gives a list of hyphenation
+ exceptions.
+
+ . `\endinput' is recognized also.
+
+ . For backwards compatibility, if `\patterns' is missing, the
+ whole file is treated as a list of hyphenation patterns (only
+ recognizing `%' as the start of a comment.
+
+*/
+
+int hyphen_trie::hpf_getc(FILE *f)
+{
+ int c = getc(f);
+ int c1;
+ int cc = 0;
+ if (c != '^')
+ return c;
+ c = getc(f);
+ if (c != '^')
+ goto fail;
+ c = getc(f);
+ c1 = getc(f);
+ if (((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f'))
+ && ((c1 >= '0' && c1 <= '9') || (c1 >= 'a' && c1 <= 'f'))) {
+ if (c >= '0' && c <= '9')
+ c -= '0';
+ else
+ c = c - 'a' + 10;
+ if (c1 >= '0' && c1 <= '9')
+ c1 -= '0';
+ else
+ c1 = c1 - 'a' + 10;
+ cc = c * 16 + c1;
+ }
+ else {
+ ungetc(c1, f);
+ if (c >= 0 && c <= 63)
+ cc = c + 64;
+ else if (c >= 64 && c <= 127)
+ cc = c - 64;
+ else
+ goto fail;
+ }
+ return cc;
+fail:
+ error("invalid ^, ^^x, or ^^xx character in hyphenation patterns file");
+ return c;
+}
+
+void hyphen_trie::read_patterns_file(const char *name, int append,
+ dictionary ex)
{
- clear();
+ if (!append)
+ clear();
char buf[WORD_MAX];
int num[WORD_MAX+1];
errno = 0;
@@ -3337,32 +3624,111 @@ void hyphen_trie::read_patterns_file(const char *name)
error("can't find hyphenation patterns file `%1'", name);
return;
}
- int c = getc(fp);
+ int c = hpf_getc(fp);
+ int have_patterns = 0; // we've seen \patterns
+ int final_pattern = 0; // 1 if we have a trailing closing brace
+ int have_hyphenation = 0; // we've seen \hyphenation
+ int final_hyphenation = 0; // 1 if we have a trailing closing brace
+ int have_keyword = 0; // we've seen either \patterns or \hyphenation
+ int traditional = 0; // don't handle \patterns
for (;;) {
for (;;) {
- if (c == '%') {
+ if (c == '%') { // skip comments
do {
c = getc(fp);
} while (c != EOF && c != '\n');
}
if (c == EOF || !csspace(c))
break;
- c = getc(fp);
+ c = hpf_getc(fp);
+ }
+ if (c == EOF) {
+ if (have_keyword || traditional) // we are done
+ break;
+ else { // rescan file in `traditional' mode
+ rewind(fp);
+ traditional = 1;
+ c = hpf_getc(fp);
+ continue;
+ }
}
- if (c == EOF)
- break;
int i = 0;
num[0] = 0;
- do {
- if (csdigit(c))
- num[i] = c - '0';
- else {
- buf[i++] = c;
- num[i] = 0;
+ if (!(c == '{' || c == '}')) { // skip braces at line start
+ do { // scan patterns
+ if (csdigit(c))
+ num[i] = c - '0';
+ else {
+ buf[i++] = c;
+ num[i] = 0;
+ }
+ c = hpf_getc(fp);
+ } while (i < WORD_MAX && c != EOF && !csspace(c)
+ && c != '%' && c != '{' && c != '}');
+ }
+ if (!traditional) {
+ if (i >= 9 && !strncmp(buf + i - 9, "\\patterns", 9)) {
+ while (csspace(c))
+ c = hpf_getc(fp);
+ if (c == '{') {
+ if (have_patterns || have_hyphenation)
+ error("`{' not allowed inside of \\patterns or \\hyphenation");
+ else {
+ have_patterns = 1;
+ have_keyword = 1;
+ }
+ c = hpf_getc(fp);
+ continue;
+ }
+ }
+ else if (i >= 12 && !strncmp(buf + i - 12, "\\hyphenation", 12)) {
+ while (csspace(c))
+ c = hpf_getc(fp);
+ if (c == '{') {
+ if (have_patterns || have_hyphenation)
+ error("`{' not allowed inside of \\patterns or \\hyphenation");
+ else {
+ have_hyphenation = 1;
+ have_keyword = 1;
+ }
+ c = hpf_getc(fp);
+ continue;
+ }
+ }
+ else if (strstr(buf, "\\endinput")) {
+ if (have_patterns || have_hyphenation)
+ error("found \\endinput inside of %1 group",
+ have_patterns ? "\\patterns" : "\\hyphenation");
+ break;
+ }
+ else if (c == '}') {
+ if (have_patterns) {
+ have_patterns = 0;
+ if (i > 0)
+ final_pattern = 1;
+ }
+ else if (have_hyphenation) {
+ have_hyphenation = 0;
+ if (i > 0)
+ final_hyphenation = 1;
+ }
+ c = hpf_getc(fp);
}
- c = getc(fp);
- } while (i < WORD_MAX && c != EOF && !csspace(c) && c != '%');
- insert_pattern(buf, i, num);
+ else if (c == '{') // skipped if not starting \patterns
+ c = hpf_getc(fp); // or \hyphenation
+ }
+ if (i > 0) {
+ if (have_patterns || final_pattern || traditional) {
+ for (int j = 0; j < i; j++)
+ buf[j] = hpf_code_table[buf[j]];
+ insert_pattern(buf, i, num);
+ final_pattern = 0;
+ }
+ else if (have_hyphenation || final_hyphenation) {
+ insert_hyphenation(ex, buf, i);
+ final_hyphenation = 0;
+ }
+ }
}
fclose(fp);
a_delete path;
@@ -3419,18 +3785,30 @@ void hyphenate(hyphen_list *h, unsigned flags)
}
}
-static void hyphenation_patterns_file()
+static void do_hyphenation_patterns_file(int append)
{
symbol name = get_long_name(1);
if (!name.is_null()) {
if (!current_language)
error("no current hyphenation language");
else
- current_language->patterns.read_patterns_file(name.contents());
+ current_language->patterns.read_patterns_file(
+ name.contents(), append,
+ current_language->exceptions);
}
skip_line();
}
+static void hyphenation_patterns_file()
+{
+ do_hyphenation_patterns_file(0);
+}
+
+static void hyphenation_patterns_file_append()
+{
+ do_hyphenation_patterns_file(1);
+}
+
class hyphenation_language_reg : public reg {
public:
const char *get_string();
@@ -3446,5 +3824,6 @@ void init_hyphen_requests()
init_request("hw", hyphen_word);
init_request("hla", set_hyphenation_language);
init_request("hpf", hyphenation_patterns_file);
+ init_request("hpfa", hyphenation_patterns_file_append);
number_reg_dictionary.define(".hla", new hyphenation_language_reg);
}
diff --git a/contrib/groff/src/roff/troff/env.h b/contrib/groff/src/roff/troff/env.h
index 851a9a0..43a4c97 100644
--- a/contrib/groff/src/roff/troff/env.h
+++ b/contrib/groff/src/roff/troff/env.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -85,6 +85,7 @@ public:
~tab_stops();
void operator=(const tab_stops &);
tab_type distance_to_next_tab(hunits pos, hunits *distance);
+ tab_type distance_to_next_tab(hunits curpos, hunits *distance, hunits *leftpos);
void clear();
void add_tab(hunits pos, tab_type type, int repeated);
const char *to_string();
@@ -140,6 +141,7 @@ class environment {
int underline_spaces;
symbol input_trap;
int input_trap_count;
+ int continued_input_trap;
node *line; // in reverse order
hunits prev_text_length;
hunits width_total;
@@ -181,11 +183,15 @@ class environment {
#ifdef WIDOW_CONTROL
int widow_control;
#endif /* WIDOW_CONTROL */
- int need_eol;
int ignore_next_eol;
int emitted_node; // have we emitted a node since the last html eol tag?
+ color *glyph_color;
+ color *prev_glyph_color;
+ color *fill_color;
+ color *prev_fill_color;
tab_type distance_to_next_tab(hunits *);
+ tab_type distance_to_next_tab(hunits *distance, hunits *leftpos);
void start_line();
void output_line(node *, hunits);
void output(node *nd, int retain_size, vunits vs, vunits post_vs,
@@ -261,6 +267,12 @@ public:
int get_center_lines();
int get_right_justify_lines();
int get_prev_line_interrupted() { return prev_line_interrupted; }
+ color *get_fill_color();
+ color *get_glyph_color();
+ color *get_prev_glyph_color();
+ color *get_prev_fill_color();
+ void set_glyph_color(color *c);
+ void set_fill_color(color *c);
node *make_char_node(charinfo *);
node *extract_output_line();
void width_registers();
@@ -277,10 +289,11 @@ public:
void possibly_break_line(int start_here = 0, int forced = 0);
void do_break(int spread = 0); // .br
void final_break();
- void add_html_tag_eol();
- void add_html_tag(const char *);
- void add_html_tag(const char *, int);
- void add_html_tag_tabs();
+ void add_html_tag(int, const char *);
+ void add_html_tag(int, const char *, int);
+ void add_html_tag_tabs(int);
+ node *make_html_tag(const char *name, int i);
+ node *make_html_tag(const char *);
void newline();
void handle_tab(int is_leader = 0); // do a tab or leader
void add_node(node *);
@@ -291,6 +304,7 @@ public:
void space(hunits, hunits);
void space_newline();
const char *get_font_family_string();
+ const char *get_font_name_string();
const char *get_name_string();
const char *get_point_size_string();
const char *get_requested_point_size_string();
@@ -311,7 +325,7 @@ public:
friend void indent();
friend void temporary_indent();
friend void do_underline(int);
- friend void input_trap();
+ friend void do_input_trap(int);
friend void set_tabs();
friend void margin_character();
friend void no_number();
@@ -343,7 +357,12 @@ extern void push_env(int);
void init_environments();
void read_hyphen_file(const char *name);
+void title();
+
+extern double spread_limit;
extern int break_flag;
extern symbol default_family;
extern int translate_space_to_dummy;
+
+extern unsigned char hpf_code_table[];
diff --git a/contrib/groff/src/roff/troff/input.cc b/contrib/groff/src/roff/troff/input.cc
index 54aaa3f..7a90e4b 100644
--- a/contrib/groff/src/roff/troff/input.cc
+++ b/contrib/groff/src/roff/troff/input.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -36,7 +36,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "defs.h"
#include "input.h"
-// Needed for getpid().
+// Needed for getpid() and isatty()
#include "posix.h"
#include "nonposix.h"
@@ -47,17 +47,6 @@ extern "C" {
}
#endif /* NEED_DECLARATION_PUTENV */
-#ifdef ISATTY_MISSING
-#undef isatty
-#define isatty(n) (1)
-#else /* not ISATTY_MISSING */
-#ifndef isatty
-extern "C" {
- int isatty(int);
-}
-#endif /* not isatty */
-#endif /* not ISATTY_MISSING */
-
#define MACRO_PREFIX "tmac."
#define MACRO_POSTFIX ".tmac"
#define INITIAL_STARTUP_FILE "troffrc"
@@ -86,17 +75,19 @@ void copy_file();
#ifdef COLUMN
void vjustify();
#endif /* COLUMN */
-void transparent();
void transparent_file();
+void process_input_stack();
const char *program_name = 0;
token tok;
int break_flag = 0;
+int color_flag = 1; // colors are on by default
static int backtrace_flag = 0;
#ifndef POPEN_MISSING
char *pipe_command = 0;
#endif
charinfo *charset_table[256];
+unsigned char hpf_code_table[256];
static int warning_mask = DEFAULT_WARNING_MASK;
static int inhibit_errors = 0;
@@ -114,9 +105,18 @@ int suppress_output_flag = 0;
int is_html = 0;
int begin_level = 0; // number of nested .begin requests
+int have_input = 0; // whether \f, \H, \R, \s, or \S has
+ // been processed in token::next()
int tcommand_flag = 0;
int safer_flag = 1; // safer by default
+int have_string_arg = 0; // whether we have \*[foo bar...]
+
+double spread_limit = -3.0 - 1.0; // negative means deactivated
+
+double warn_scale;
+char warn_scaling_indicator;
+
search_path *mac_path = &safer_macro_path;
static int get_copy(node**, int = 0);
@@ -125,8 +125,11 @@ static void copy_mode_error(const char *,
const errarg & = empty_errarg,
const errarg & = empty_errarg);
-static symbol read_escape_name();
+enum read_mode { ALLOW_EMPTY, WITH_ARGS, NO_ARGS };
+static symbol read_escape_name(read_mode mode = NO_ARGS);
+static symbol read_long_escape_name(read_mode mode = NO_ARGS);
static void interpolate_string(symbol);
+static void interpolate_string_with_args(symbol);
static void interpolate_macro(symbol);
static void interpolate_number_format(symbol);
static void interpolate_environment_variable(symbol);
@@ -135,7 +138,6 @@ static void interpolate_arg(symbol);
static request_or_macro *lookup_request(symbol);
static int get_delim_number(units *, int);
static int get_delim_number(units *, int, units);
-static symbol get_delim_file_name();
static int get_line_arg(units *res, int si, charinfo **cp);
static int read_size(int *);
static symbol get_delim_name();
@@ -185,7 +187,7 @@ void restore_escape_char()
class input_iterator {
public:
input_iterator();
- virtual ~input_iterator();
+ virtual ~input_iterator() {}
int get(node **);
friend class input_stack;
protected:
@@ -197,15 +199,13 @@ private:
virtual int peek();
virtual int has_args() { return 0; }
virtual int nargs() { return 0; }
- virtual input_iterator *get_arg(int) { return NULL; }
- virtual int get_location(int, const char **, int *)
- { return 0; }
+ virtual input_iterator *get_arg(int) { return 0; }
+ virtual int get_location(int, const char **, int *) { return 0; }
virtual void backtrace() {}
- virtual int set_location(const char *, int)
- { return 0; }
+ virtual int set_location(const char *, int) { return 0; }
virtual int next_file(FILE *, const char *) { return 0; }
virtual void shift(int) {}
- virtual int is_boundary() { return 0; }
+ virtual int is_boundary() {return 0; }
virtual int internal_level() { return 0; }
virtual int is_file() { return 0; }
virtual int is_macro() { return 0; }
@@ -218,10 +218,6 @@ input_iterator::input_iterator()
{
}
-input_iterator::~input_iterator()
-{
-}
-
int input_iterator::fill(node **)
{
return EOF;
@@ -253,6 +249,7 @@ class file_iterator : public input_iterator {
const char *filename;
int popened;
int newline_flag;
+ int seen_escape;
enum { BUF_SIZE = 512 };
unsigned char buf[BUF_SIZE];
void close();
@@ -269,7 +266,8 @@ public:
};
file_iterator::file_iterator(FILE *f, const char *fn, int po)
-: fp(f), lineno(1), filename(fn), popened(po), newline_flag(0)
+: fp(f), lineno(1), filename(fn), popened(po),
+ newline_flag(0), seen_escape(0)
{
if ((font::use_charnames_in_special) && (fn != 0)) {
if (!the_output)
@@ -307,6 +305,7 @@ int file_iterator::next_file(FILE *f, const char *s)
fp = f;
lineno = 1;
newline_flag = 0;
+ seen_escape = 0;
popened = 0;
ptr = 0;
eptr = 0;
@@ -315,10 +314,8 @@ int file_iterator::next_file(FILE *f, const char *s)
int file_iterator::fill(node **)
{
- if (newline_flag) {
- curenv->add_html_tag_eol();
+ if (newline_flag)
lineno++;
- }
newline_flag = 0;
unsigned char *p = buf;
ptr = p;
@@ -327,14 +324,16 @@ int file_iterator::fill(node **)
int c = getc(fp);
if (c == EOF)
break;
- if (illegal_input_char(c))
- warning(WARN_INPUT, "illegal input character code %1", int(c));
+ if (invalid_input_char(c))
+ warning(WARN_INPUT, "invalid input character code %1", int(c));
else {
*p++ = c;
if (c == '\n') {
+ seen_escape = 0;
newline_flag = 1;
break;
}
+ seen_escape = (c == '\\');
}
}
if (p > buf) {
@@ -350,8 +349,8 @@ int file_iterator::fill(node **)
int file_iterator::peek()
{
int c = getc(fp);
- while (illegal_input_char(c)) {
- warning(WARN_INPUT, "illegal input character code %1", int(c));
+ while (invalid_input_char(c)) {
+ warning(WARN_INPUT, "invalid input character code %1", int(c));
c = getc(fp);
}
if (c != EOF)
@@ -517,7 +516,7 @@ void input_stack::push(input_iterator *in)
input_iterator *input_stack::get_arg(int i)
{
input_iterator *p;
- for (p = top; p != NULL; p = p->next)
+ for (p = top; p != 0; p = p->next)
if (p->has_args())
return p->get_arg(i);
return 0;
@@ -677,21 +676,25 @@ void shift()
skip_line();
}
-static int get_char_for_escape_name()
+static int get_char_for_escape_name(int allow_space = 0)
{
- int c = get_copy(NULL);
+ int c = get_copy(0);
switch (c) {
case EOF:
copy_mode_error("end of input in escape name");
return '\0';
default:
- if (!illegal_input_char(c))
+ if (!invalid_input_char(c))
break;
// fall through
case '\n':
if (c == '\n')
input_stack::push(make_temp_iterator("\n"));
+ // fall through
case ' ':
+ if (c == ' ' && allow_space)
+ break;
+ // fall through
case '\t':
case '\001':
case '\b':
@@ -716,20 +719,25 @@ static symbol read_two_char_escape_name()
return symbol(buf);
}
-static symbol read_long_escape_name()
+static symbol read_long_escape_name(read_mode mode)
{
int start_level = input_stack::get_level();
char abuf[ABUF_SIZE];
char *buf = abuf;
int buf_size = ABUF_SIZE;
int i = 0;
+ int c;
+ int have_char = 0;
for (;;) {
- int c = get_char_for_escape_name();
+ c = get_char_for_escape_name(have_char && mode == WITH_ARGS);
if (c == 0) {
if (buf != abuf)
a_delete buf;
return NULL_SYMBOL;
}
+ have_char = 1;
+ if (mode == WITH_ARGS && c == ' ')
+ break;
if (i + 2 > buf_size) {
if (buf == abuf) {
buf = new char[ABUF_SIZE*2];
@@ -749,10 +757,13 @@ static symbol read_long_escape_name()
buf[i++] = c;
}
buf[i] = 0;
+ if (c == ' ')
+ have_string_arg = 1;
if (buf == abuf) {
if (i == 0) {
- copy_mode_error("empty escape name");
- return NULL_SYMBOL;
+ if (mode != ALLOW_EMPTY)
+ copy_mode_error("empty escape name");
+ return EMPTY_SYMBOL;
}
return symbol(abuf);
}
@@ -763,7 +774,7 @@ static symbol read_long_escape_name()
}
}
-static symbol read_escape_name()
+static symbol read_escape_name(read_mode mode)
{
int c = get_char_for_escape_name();
if (c == 0)
@@ -771,7 +782,7 @@ static symbol read_escape_name()
if (c == '(')
return read_two_char_escape_name();
if (c == '[' && !compatible_flag)
- return read_long_escape_name();
+ return read_long_escape_name(mode);
char buf[2];
buf[0] = c;
buf[1] = '\0';
@@ -826,131 +837,137 @@ static int get_copy(node **nd, int defining)
case 0:
return escape_char;
case '"':
- (void)input_stack::get(NULL);
- while ((c = input_stack::get(NULL)) != '\n' && c != EOF)
+ (void)input_stack::get(0);
+ while ((c = input_stack::get(0)) != '\n' && c != EOF)
;
return c;
case '#': // Like \" but newline is ignored.
- (void)input_stack::get(NULL);
- while ((c = input_stack::get(NULL)) != '\n')
+ (void)input_stack::get(0);
+ while ((c = input_stack::get(0)) != '\n')
if (c == EOF)
return EOF;
break;
case '$':
{
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
symbol s = read_escape_name();
- if (!s.is_null())
+ if (!(s.is_null() || s.is_empty()))
interpolate_arg(s);
break;
}
case '*':
{
- (void)input_stack::get(NULL);
- symbol s = read_escape_name();
- if (!s.is_null())
- interpolate_string(s);
+ (void)input_stack::get(0);
+ symbol s = read_escape_name(WITH_ARGS);
+ if (!(s.is_null() || s.is_empty())) {
+ if (have_string_arg) {
+ have_string_arg = 0;
+ interpolate_string_with_args(s);
+ }
+ else
+ interpolate_string(s);
+ }
break;
}
case 'a':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return '\001';
case 'e':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_e;
case 'E':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_E;
case 'n':
{
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
int inc;
symbol s = read_increment_and_escape_name(&inc);
- if (!s.is_null())
+ if (!(s.is_null() || s.is_empty()))
interpolate_number_reg(s, inc);
break;
}
case 'g':
{
- (void)input_stack::get(NULL);
- symbol s = read_escape_name();
- if (!s.is_null())
+ (void)input_stack::get(0);
+ symbol s = read_escape_name();
+ if (!(s.is_null() || s.is_empty()))
interpolate_number_format(s);
- break;
+ break;
}
case 't':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return '\t';
case 'V':
{
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
symbol s = read_escape_name();
- if (!s.is_null())
+ if (!(s.is_null() || s.is_empty()))
interpolate_environment_variable(s);
break;
}
case '\n':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
if (defining)
return ESCAPE_NEWLINE;
break;
case ' ':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_SPACE;
case '~':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_TILDE;
case ':':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_COLON;
case '|':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_BAR;
case '^':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_CIRCUMFLEX;
case '{':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_LEFT_BRACE;
case '}':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_RIGHT_BRACE;
case '`':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_LEFT_QUOTE;
case '\'':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_RIGHT_QUOTE;
case '-':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_HYPHEN;
case '_':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_UNDERSCORE;
case 'c':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_c;
case '!':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_BANG;
case '?':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_QUESTION;
case '&':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_AMPERSAND;
case ')':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_RIGHT_PARENTHESIS;
case '.':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return c;
case '%':
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return ESCAPE_PERCENT;
default:
if (c == escape_char) {
- (void)input_stack::get(NULL);
+ (void)input_stack::get(0);
return c;
}
else
@@ -1004,27 +1021,255 @@ int non_interpreted_char_node::interpret(macro *mac)
static void do_width();
static node *do_non_interpreted();
static node *do_special();
-static node *do_suppress();
+static node *do_suppress(symbol nm);
static void do_register();
+dictionary color_dictionary(501);
+static symbol default_symbol("default");
+
+static color *lookup_color(symbol nm)
+{
+ assert(!nm.is_null());
+ if (nm == default_symbol)
+ return &default_color;
+ color *c = (color *)color_dictionary.lookup(nm);
+ if (c == 0)
+ warning(WARN_COLOR, "`%1' not defined", nm.contents());
+ return c;
+}
+
+void do_glyph_color(symbol nm)
+{
+ if (nm.is_null())
+ return;
+ if (nm.is_empty())
+ curenv->set_glyph_color(curenv->get_prev_glyph_color());
+ else {
+ color *tem = lookup_color(nm);
+ if (tem)
+ curenv->set_glyph_color(tem);
+ else
+ (void)color_dictionary.lookup(nm, new color);
+ }
+}
+
+void do_fill_color(symbol nm)
+{
+ if (nm.is_null())
+ return;
+ if (nm.is_empty())
+ curenv->set_fill_color(curenv->get_prev_fill_color());
+ else {
+ color *tem = lookup_color(nm);
+ if (tem)
+ curenv->set_fill_color(tem);
+ else
+ (void)color_dictionary.lookup(nm, new color);
+ }
+}
+
+static unsigned int get_color_element(const char *scheme, const char *col)
+{
+ units val;
+ if (!get_number(&val, 'f')) {
+ warning(WARN_COLOR, "%1 in %2 definition set to 0", col, scheme);
+ tok.next();
+ return 0;
+ }
+ if (val < 0) {
+ warning(WARN_RANGE, "%1 cannot be negative: set to 0", col);
+ return 0;
+ }
+ if (val > color::MAX_COLOR_VAL+1) {
+ warning(WARN_RANGE, "%1 cannot be greater than 1", col);
+ // we change 0x10000 to 0xffff
+ return color::MAX_COLOR_VAL;
+ }
+ return (unsigned int)val;
+}
+
+static color *read_rgb()
+{
+ symbol component = get_long_name(0);
+ if (component.is_null()) {
+ warning(WARN_COLOR, "missing rgb color values");
+ return 0;
+ }
+ const char *s = component.contents();
+ color *col = new color;
+ if (*s == '#') {
+ if (!col->read_rgb(s)) {
+ warning(WARN_COLOR, "expecting rgb color definition not `%1'", s);
+ delete col;
+ return 0;
+ }
+ }
+ else {
+ input_stack::push(make_temp_iterator(" "));
+ input_stack::push(make_temp_iterator(s));
+ tok.next();
+ unsigned int r = get_color_element("rgb color", "red component");
+ unsigned int g = get_color_element("rgb color", "green component");
+ unsigned int b = get_color_element("rgb color", "blue component");
+ col->set_rgb(r, g, b);
+ }
+ return col;
+}
+
+static color *read_cmy()
+{
+ symbol component = get_long_name(0);
+ if (component.is_null()) {
+ warning(WARN_COLOR, "missing cmy color values");
+ return 0;
+ }
+ const char *s = component.contents();
+ color *col = new color;
+ if (*s == '#') {
+ if (!col->read_cmy(s)) {
+ warning(WARN_COLOR, "expecting cmy color definition not `%1'", s);
+ delete col;
+ return 0;
+ }
+ }
+ else {
+ input_stack::push(make_temp_iterator(" "));
+ input_stack::push(make_temp_iterator(s));
+ tok.next();
+ unsigned int c = get_color_element("cmy color", "cyan component");
+ unsigned int m = get_color_element("cmy color", "magenta component");
+ unsigned int y = get_color_element("cmy color", "yellow component");
+ col->set_cmy(c, m, y);
+ }
+ return col;
+}
+
+static color *read_cmyk()
+{
+ symbol component = get_long_name(0);
+ if (component.is_null()) {
+ warning(WARN_COLOR, "missing cmyk color values");
+ return 0;
+ }
+ const char *s = component.contents();
+ color *col = new color;
+ if (*s == '#') {
+ if (!col->read_cmyk(s)) {
+ warning(WARN_COLOR, "`expecting a cmyk color definition not `%1'", s);
+ delete col;
+ return 0;
+ }
+ }
+ else {
+ input_stack::push(make_temp_iterator(" "));
+ input_stack::push(make_temp_iterator(s));
+ tok.next();
+ unsigned int c = get_color_element("cmyk color", "cyan component");
+ unsigned int m = get_color_element("cmyk color", "magenta component");
+ unsigned int y = get_color_element("cmyk color", "yellow component");
+ unsigned int k = get_color_element("cmyk color", "black component");
+ col->set_cmyk(c, m, y, k);
+ }
+ return col;
+}
+
+static color *read_gray()
+{
+ symbol component = get_long_name(0);
+ if (component.is_null()) {
+ warning(WARN_COLOR, "missing gray values");
+ return 0;
+ }
+ const char *s = component.contents();
+ color *col = new color;
+ if (*s == '#') {
+ if (!col->read_gray(s)) {
+ warning(WARN_COLOR, "`expecting a gray definition not `%1'", s);
+ delete col;
+ return 0;
+ }
+ }
+ else {
+ input_stack::push(make_temp_iterator("\n"));
+ input_stack::push(make_temp_iterator(s));
+ tok.next();
+ unsigned int g = get_color_element("gray", "gray value");
+ col->set_gray(g);
+ }
+ return col;
+}
+
+static void activate_color()
+{
+ int n;
+ if (has_arg() && get_integer(&n))
+ color_flag = n != 0;
+ else
+ color_flag = 1;
+ skip_line();
+}
+
+static void define_color()
+{
+ symbol color_name = get_long_name(1);
+ if (color_name.is_null()) {
+ skip_line();
+ return;
+ }
+ if (color_name == default_symbol) {
+ warning(WARN_COLOR, "default color can't be redefined");
+ skip_line();
+ return;
+ }
+ symbol style = get_long_name(1);
+ if (style.is_null()) {
+ skip_line();
+ return;
+ }
+ color *col;
+ if (strcmp(style.contents(), "rgb") == 0)
+ col = read_rgb();
+ else if (strcmp(style.contents(), "cmyk") == 0)
+ col = read_cmyk();
+ else if (strcmp(style.contents(), "gray") == 0)
+ col = read_gray();
+ else if (strcmp(style.contents(), "grey") == 0)
+ col = read_gray();
+ else if (strcmp(style.contents(), "cmy") == 0)
+ col = read_cmy();
+ else {
+ warning(WARN_COLOR,
+ "unknown color space `%1'; use rgb, cmyk, gray or cmy",
+ style.contents());
+ skip_line();
+ return;
+ }
+ if (col)
+ (void)color_dictionary.lookup(color_name, col);
+ skip_line();
+}
+
static node *do_overstrike()
{
token start;
overstrike_node *on = new overstrike_node;
+ int start_level = input_stack::get_level();
start.next();
- tok.next();
- while (tok != start) {
+ for (;;) {
+ tok.next();
if (tok.newline() || tok.eof()) {
warning(WARN_DELIM, "missing closing delimiter");
break;
}
+ if (tok == start
+ && (compatible_flag || input_stack::get_level() == start_level))
+ break;
charinfo *ci = tok.get_char(1);
if (ci) {
node *n = curenv->make_char_node(ci);
if (n)
on->overstrike(n);
}
- tok.next();
}
return on;
}
@@ -1034,8 +1279,9 @@ static node *do_bracket()
token start;
bracket_node *bn = new bracket_node;
start.next();
- tok.next();
- while (tok != start) {
+ int start_level = input_stack::get_level();
+ for (;;) {
+ tok.next();
if (tok.eof()) {
warning(WARN_DELIM, "missing closing delimiter");
break;
@@ -1045,13 +1291,15 @@ static node *do_bracket()
input_stack::push(make_temp_iterator("\n"));
break;
}
+ if (tok == start
+ && (compatible_flag || input_stack::get_level() == start_level))
+ break;
charinfo *ci = tok.get_char(1);
if (ci) {
node *n = curenv->make_char_node(ci);
if (n)
bn->bracket(n);
}
- tok.next();
}
return bn;
}
@@ -1164,7 +1412,7 @@ static node *do_zero_width()
&& (compatible_flag || input_stack::get_level() == start_level))
break;
if (!tok.add_to_node_list(&rev))
- error("illegal token in argument to \\Z");
+ error("invalid token in argument to \\Z");
}
node *n = 0;
while (rev) {
@@ -1326,8 +1574,7 @@ void token::next()
return;
case ESCAPE_SPACE:
ESCAPE_SPACE:
- type = TOKEN_NODE;
- nd = new space_char_hmotion_node(curenv->get_space_width());
+ type = TOKEN_UNSTRETCHABLE_SPACE;
return;
case ESCAPE_TILDE:
ESCAPE_TILDE:
@@ -1335,10 +1582,7 @@ void token::next()
return;
case ESCAPE_COLON:
ESCAPE_COLON:
- type = TOKEN_NODE;
- nd = new space_node(H0);
- nd->freeze_space();
- nd->is_escape_colon();
+ type = TOKEN_ZERO_WIDTH_BREAK;
return;
case ESCAPE_e:
ESCAPE_e:
@@ -1349,12 +1593,14 @@ void token::next()
case ESCAPE_BAR:
ESCAPE_BAR:
type = TOKEN_NODE;
- nd = new hmotion_node(curenv->get_narrow_space_width());
+ nd = new hmotion_node(curenv->get_narrow_space_width(),
+ curenv->get_fill_color());
return;
case ESCAPE_CIRCUMFLEX:
ESCAPE_CIRCUMFLEX:
type = TOKEN_NODE;
- nd = new hmotion_node(curenv->get_half_narrow_space_width());
+ nd = new hmotion_node(curenv->get_half_narrow_space_width(),
+ curenv->get_fill_color());
return;
case ESCAPE_NEWLINE:
break;
@@ -1447,7 +1693,7 @@ void token::next()
}
else {
handle_escape_char:
- cc = input_stack::get(NULL);
+ cc = input_stack::get(0);
switch(cc) {
case '(':
nm = read_two_char_escape_name();
@@ -1470,7 +1716,8 @@ void token::next()
case ' ':
goto ESCAPE_SPACE;
case '0':
- nd = new hmotion_node(curenv->get_digit_width());
+ nd = new hmotion_node(curenv->get_digit_width(),
+ curenv->get_fill_color());
type = TOKEN_NODE;
return;
case '|':
@@ -1497,7 +1744,7 @@ void token::next()
case ':':
goto ESCAPE_COLON;
case '"':
- while ((cc = input_stack::get(NULL)) != '\n' && cc != EOF)
+ while ((cc = input_stack::get(0)) != '\n' && cc != EOF)
;
if (cc == '\n')
type = TOKEN_NEWLINE;
@@ -1505,7 +1752,7 @@ void token::next()
type = TOKEN_EOF;
return;
case '#': // Like \" but newline is ignored.
- while ((cc = input_stack::get(NULL)) != '\n')
+ while ((cc = input_stack::get(0)) != '\n')
if (cc == EOF) {
type = TOKEN_EOF;
return;
@@ -1514,15 +1761,21 @@ void token::next()
case '$':
{
symbol nm = read_escape_name();
- if (!nm.is_null())
+ if (!(nm.is_null() || nm.is_empty()))
interpolate_arg(nm);
break;
}
case '*':
{
- symbol nm = read_escape_name();
- if (!nm.is_null())
- interpolate_string(nm);
+ symbol nm = read_escape_name(WITH_ARGS);
+ if (!(nm.is_null() || nm.is_empty())) {
+ if (have_string_arg) {
+ have_string_arg = 0;
+ interpolate_string_with_args(nm);
+ }
+ else
+ interpolate_string(nm);
+ }
break;
}
case 'a':
@@ -1551,7 +1804,8 @@ void token::next()
return;
case 'd':
type = TOKEN_NODE;
- nd = new vmotion_node(curenv->get_size()/2);
+ nd = new vmotion_node(curenv->get_size() / 2,
+ curenv->get_fill_color());
return;
case 'D':
nd = read_draw_node();
@@ -1565,23 +1819,33 @@ void token::next()
goto handle_escape_char;
case 'f':
{
- symbol s = read_escape_name();
+ symbol s = read_escape_name(ALLOW_EMPTY);
if (s.is_null())
break;
const char *p;
for (p = s.contents(); *p != '\0'; p++)
if (!csdigit(*p))
break;
- if (*p)
+ if (*p || s.is_empty())
curenv->set_font(s);
else
curenv->set_font(atoi(s.contents()));
+ if (!compatible_flag)
+ have_input = 1;
+ break;
+ }
+ case 'F':
+ {
+ symbol s = read_escape_name(ALLOW_EMPTY);
+ if (s.is_null())
+ break;
+ curenv->set_family(s);
break;
}
case 'g':
{
symbol s = read_escape_name();
- if (!s.is_null())
+ if (!(s.is_null() || s.is_empty()))
interpolate_number_format(s);
break;
}
@@ -1589,15 +1853,27 @@ void token::next()
if (!get_delim_number(&x, 'm'))
break;
type = TOKEN_NODE;
- nd = new hmotion_node(x);
+ nd = new hmotion_node(x, curenv->get_fill_color());
return;
case 'H':
- if (get_delim_number(&x, 'z', curenv->get_requested_point_size()))
- curenv->set_char_height(x);
+ // don't take height increments relative to previous height if
+ // in compatibility mode
+ if (!compatible_flag && curenv->get_char_height())
+ {
+ if (get_delim_number(&x, 'z', curenv->get_char_height()))
+ curenv->set_char_height(x);
+ }
+ else
+ {
+ if (get_delim_number(&x, 'z', curenv->get_requested_point_size()))
+ curenv->set_char_height(x);
+ }
+ if (!compatible_flag)
+ have_input = 1;
break;
case 'k':
nm = read_escape_name();
- if (nm.is_null())
+ if (nm.is_null() || nm.is_empty())
break;
type = TOKEN_MARK_INPUT;
return;
@@ -1617,11 +1893,21 @@ void token::next()
nd = new vline_node(x, n);
return;
}
+ case 'm':
+ do_glyph_color(read_escape_name(ALLOW_EMPTY));
+ if (!compatible_flag)
+ have_input = 1;
+ break;
+ case 'M':
+ do_fill_color(read_escape_name(ALLOW_EMPTY));
+ if (!compatible_flag)
+ have_input = 1;
+ break;
case 'n':
{
int inc;
symbol nm = read_increment_and_escape_name(&inc);
- if (!nm.is_null())
+ if (!(nm.is_null() || nm.is_empty()))
interpolate_number_reg(nm, inc);
break;
}
@@ -1635,7 +1921,7 @@ void token::next()
type = TOKEN_NODE;
return;
case 'O':
- nd = do_suppress();
+ nd = do_suppress(read_escape_name());
if (!nd)
break;
type = TOKEN_NODE;
@@ -1645,18 +1931,24 @@ void token::next()
return;
case 'r':
type = TOKEN_NODE;
- nd = new vmotion_node(-curenv->get_size());
+ nd = new vmotion_node(-curenv->get_size(), curenv->get_fill_color());
return;
case 'R':
do_register();
+ if (!compatible_flag)
+ have_input = 1;
break;
case 's':
if (read_size(&x))
curenv->set_size(x);
+ if (!compatible_flag)
+ have_input = 1;
break;
case 'S':
if (get_delim_number(&x, 0))
curenv->set_char_slant(x);
+ if (!compatible_flag)
+ have_input = 1;
break;
case 't':
type = TOKEN_NODE;
@@ -1664,18 +1956,19 @@ void token::next()
return;
case 'u':
type = TOKEN_NODE;
- nd = new vmotion_node(-curenv->get_size()/2);
+ nd = new vmotion_node(-curenv->get_size() / 2,
+ curenv->get_fill_color());
return;
case 'v':
if (!get_delim_number(&x, 'v'))
break;
type = TOKEN_NODE;
- nd = new vmotion_node(x);
+ nd = new vmotion_node(x, curenv->get_fill_color());
return;
case 'V':
- {
+ {
symbol nm = read_escape_name();
- if (!nm.is_null())
+ if (!(nm.is_null() || nm.is_empty()))
interpolate_environment_variable(nm);
break;
}
@@ -1697,7 +1990,7 @@ void token::next()
case 'Y':
{
symbol s = read_escape_name();
- if (s.is_null())
+ if (s.is_null() || s.is_empty())
break;
request_or_macro *p = lookup_request(s);
macro *m = p->to_macro();
@@ -1712,9 +2005,9 @@ void token::next()
case 'z':
{
next();
- if (type == TOKEN_NODE)
- nd = new zero_width_node(nd);
- else {
+ if (type == TOKEN_NODE)
+ nd = new zero_width_node(nd);
+ else {
charinfo *ci = get_char(1);
if (ci == 0)
break;
@@ -1723,7 +2016,7 @@ void token::next()
break;
nd = new zero_width_node(gn);
type = TOKEN_NODE;
- }
+ }
return;
}
case 'Z':
@@ -1741,7 +2034,7 @@ void token::next()
case '[':
if (!compatible_flag) {
nm = read_long_escape_name();
- if (nm.is_null())
+ if (nm.is_null() || nm.is_empty())
break;
type = TOKEN_SPECIAL;
return;
@@ -1817,6 +2110,7 @@ int token::delimiter(int err)
case TOKEN_NODE:
case TOKEN_SPACE:
case TOKEN_STRETCHABLE_SPACE:
+ case TOKEN_UNSTRETCHABLE_SPACE:
case TOKEN_TAB:
case TOKEN_NEWLINE:
if (err)
@@ -1871,12 +2165,16 @@ const char *token::description()
return "`\\p'";
case TOKEN_STRETCHABLE_SPACE:
return "`\\~'";
+ case TOKEN_UNSTRETCHABLE_SPACE:
+ return "`\\ '";
case TOKEN_TAB:
return "a tab character";
case TOKEN_TRANSPARENT:
return "`\\!'";
case TOKEN_TRANSPARENT_DUMMY:
return "`\\)'";
+ case TOKEN_ZERO_WIDTH_BREAK:
+ return "`\\:'";
case TOKEN_EOF:
return "end of input";
default:
@@ -2015,19 +2313,21 @@ void exit_troff()
tok.next();
process_input_stack();
end_diversions();
- done_end_macro = 1;
- topdiv->set_ejecting();
- static unsigned char buf[2] = { LAST_PAGE_EJECTOR, '\0' };
- input_stack::push(make_temp_iterator((char *)buf));
- topdiv->space(topdiv->get_page_length(), 1);
- tok.next();
- process_input_stack();
- seen_last_page_ejector = 1; // should be set already
- topdiv->set_ejecting();
- push_page_ejector();
- topdiv->space(topdiv->get_page_length(), 1);
- tok.next();
- process_input_stack();
+ if (topdiv->get_page_length() > 0) {
+ done_end_macro = 1;
+ topdiv->set_ejecting();
+ static unsigned char buf[2] = { LAST_PAGE_EJECTOR, '\0' };
+ input_stack::push(make_temp_iterator((char *)buf));
+ topdiv->space(topdiv->get_page_length(), 1);
+ tok.next();
+ process_input_stack();
+ seen_last_page_ejector = 1; // should be set already
+ topdiv->set_ejecting();
+ push_page_ejector();
+ topdiv->space(topdiv->get_page_length(), 1);
+ tok.next();
+ process_input_stack();
+ }
// This will only happen if a trap-invoked macro starts a diversion,
// or if vertical position traps have been disabled.
cleanup_and_exit(0);
@@ -2095,7 +2395,7 @@ inline int possibly_handle_first_page_transition()
static int transparent_translate(int cc)
{
- if (!illegal_input_char(cc)) {
+ if (!invalid_input_char(cc)) {
charinfo *ci = charset_table[cc];
switch (ci->get_special_translation(1)) {
case charinfo::TRANSLATE_SPACE:
@@ -2230,9 +2530,9 @@ void process_input_stack()
case token::TOKEN_CHAR:
{
unsigned char ch = tok.c;
- if (bol &&
- (ch == curenv->control_char
- || ch == curenv->no_break_control_char)) {
+ if (bol && !have_input
+ && (ch == curenv->control_char
+ || ch == curenv->no_break_control_char)) {
break_flag = ch == curenv->control_char;
// skip tabs as well as spaces here
do {
@@ -2244,6 +2544,7 @@ void process_input_stack()
else
interpolate_macro(nm);
suppress_next = 1;
+ have_input = 0;
}
else {
if (possibly_handle_first_page_transition())
@@ -2286,11 +2587,13 @@ void process_input_stack()
}
case token::TOKEN_NEWLINE:
{
- if (bol && !curenv->get_prev_line_interrupted())
+ if (bol && !have_input
+ && !curenv->get_prev_line_interrupted())
trapping_blank_line();
else {
curenv->newline();
bol = 1;
+ have_input = 0;
}
break;
}
@@ -2318,6 +2621,7 @@ void process_input_stack()
break;
}
suppress_next = 1;
+ have_input = 0;
break;
}
case token::TOKEN_SPACE:
@@ -2326,6 +2630,9 @@ void process_input_stack()
;
else if (bol && !curenv->get_prev_line_interrupted()) {
int nspaces = 0;
+ // save space_width now so that it isn't changed by \f or \s
+ // which we wouldn't notice here
+ hunits space_width = curenv->get_space_width();
do {
nspaces += tok.nspaces();
tok.next();
@@ -2335,8 +2642,8 @@ void process_input_stack()
else {
push_token(tok);
curenv->do_break();
- curenv->add_node(new hmotion_node(curenv->get_space_width()
- * nspaces));
+ curenv->add_node(new hmotion_node(space_width * nspaces,
+ curenv->get_fill_color()));
bol = 0;
}
}
@@ -2375,6 +2682,7 @@ void process_input_stack()
{
trap_bol_stack.push(bol);
bol = 1;
+ have_input = 0;
break;
}
case token::TOKEN_END_TRAP:
@@ -2388,9 +2696,9 @@ void process_input_stack()
way to do it. Doing an output_pending_lines() whenever a
TOKEN_END_TRAP is detected doesn't work: for example,
- .wh -1i x
- .de x
- 'bp
+ .wh -1i x
+ .de x
+ 'bp
..
.wh -.5i y
.de y
@@ -2401,8 +2709,8 @@ void process_input_stack()
.sp |\n(.pu-1i-.5v
a\%very\%very\%long\%word
- will print all but the first lines from the word immediately
- after the footer, rather than on the next page. */
+ will print all but the first lines from the word immediately
+ after the footer, rather than on the next page. */
if (trap_bol_stack.is_empty())
curenv->output_pending_lines();
@@ -2468,6 +2776,8 @@ public:
char_list();
~char_list();
void append(unsigned char);
+ void set(unsigned char, int);
+ unsigned char get(int);
int length();
private:
unsigned char *ptr;
@@ -2514,6 +2824,44 @@ void char_list::append(unsigned char c)
len++;
}
+void char_list::set(unsigned char c, int offset)
+{
+ assert(len > offset);
+ // optimization for access at the end
+ int boundary = len - len % char_block::SIZE;
+ if (offset >= boundary) {
+ *(tail->s + offset - boundary) = c;
+ return;
+ }
+ char_block *tem = head;
+ int l = 0;
+ for (;;) {
+ l += char_block::SIZE;
+ if (l > offset) {
+ *(tem->s + offset % char_block::SIZE) = c;
+ return;
+ }
+ tem = tem->next;
+ }
+}
+
+unsigned char char_list::get(int offset)
+{
+ assert(len > offset);
+ // optimization for access at the end
+ int boundary = len - len % char_block::SIZE;
+ if (offset >= boundary)
+ return *(tail->s + offset - boundary);
+ char_block *tem = head;
+ int l = 0;
+ for (;;) {
+ l += char_block::SIZE;
+ if (l > offset)
+ return *(tem->s + offset % char_block::SIZE);
+ tem = tem->next;
+ }
+}
+
class node_list {
node *head;
node *tail;
@@ -2586,12 +2934,14 @@ macro::macro()
filename = 0;
lineno = 0;
}
- length = 0;
+ len = 0;
+ empty_macro = 1;
p = 0;
}
macro::macro(const macro &m)
-: p(m.p), filename(m.filename), lineno(m.lineno), length(m.length)
+: p(m.p), filename(m.filename), lineno(m.lineno), len(m.len),
+ empty_macro(m.empty_macro)
{
if (p != 0)
p->count++;
@@ -2607,7 +2957,8 @@ macro &macro::operator=(const macro &m)
p = m.p;
filename = m.filename;
lineno = m.lineno;
- length = m.length;
+ len = m.len;
+ empty_macro = m.empty_macro;
return *this;
}
@@ -2616,14 +2967,34 @@ void macro::append(unsigned char c)
assert(c != 0);
if (p == 0)
p = new macro_header;
- if (p->cl.length() != length) {
- macro_header *tem = p->copy(length);
+ if (p->cl.length() != len) {
+ macro_header *tem = p->copy(len);
if (--(p->count) <= 0)
delete p;
p = tem;
}
p->cl.append(c);
- ++length;
+ ++len;
+ if (c != COMPATIBLE_SAVE && c != COMPATIBLE_RESTORE)
+ empty_macro = 0;
+}
+
+void macro::set(unsigned char c, int offset)
+{
+ assert(p != 0);
+ assert(c != 0);
+ p->cl.set(c, offset);
+}
+
+unsigned char macro::get(int offset)
+{
+ assert(p != 0);
+ return p->cl.get(offset);
+}
+
+int macro::length()
+{
+ return len;
}
void macro::append_str(const char *s)
@@ -2643,15 +3014,16 @@ void macro::append(node *n)
assert(n != 0);
if (p == 0)
p = new macro_header;
- if (p->cl.length() != length) {
- macro_header *tem = p->copy(length);
+ if (p->cl.length() != len) {
+ macro_header *tem = p->copy(len);
if (--(p->count) <= 0)
delete p;
p = tem;
}
p->cl.append(0);
p->nl.append(n);
- ++length;
+ ++len;
+ empty_macro = 0;
}
void macro::append_unsigned(unsigned int i)
@@ -2673,7 +3045,7 @@ void macro::append_int(int i)
void macro::print_size()
{
- errprint("%1", length);
+ errprint("%1", len);
}
// make a copy of the first n bytes
@@ -2740,9 +3112,10 @@ public:
};
string_iterator::string_iterator(const macro &m, const char *p, symbol s)
-: mac(m), how_invoked(p), newline_flag(0), lineno(1), nm(s)
+: mac(m), how_invoked(p),
+ newline_flag(0), lineno(1), nm(s)
{
- count = mac.length;
+ count = mac.len;
if (count != 0) {
bp = mac.p->cl.head;
nd = mac.p->nl.head;
@@ -2811,8 +3184,6 @@ int string_iterator::peek()
if (count <= 0)
return EOF;
const unsigned char *p = eptr;
- if (count <= 0)
- return EOF;
if (p >= bp->s + char_block::SIZE) {
p = bp->next->s;
}
@@ -2940,7 +3311,7 @@ input_iterator *make_temp_iterator(const char *s)
}
}
-// this is used when macros are interpolated using the .macro_name notation
+// this is used when macros with arguments are interpolated
struct arg_list {
macro mac;
@@ -3012,11 +3383,11 @@ void macro_iterator::shift(int n)
int operator==(const macro &m1, const macro &m2)
{
- if (m1.length != m2.length)
+ if (m1.len != m2.len)
return 0;
string_iterator iter1(m1);
string_iterator iter2(m2);
- int n = m1.length;
+ int n = m1.len;
while (--n >= 0) {
node *nd1 = 0;
int c1 = iter1.get(&nd1);
@@ -3084,7 +3455,7 @@ static void decode_args(macro_iterator *mi)
if (!tok.newline() && !tok.eof()) {
node *n;
int c = get_copy(&n);
- for (;;) {
+ for (;;) {
while (c == ' ')
c = get_copy(&n);
if (c == '\n' || c == EOF)
@@ -3126,6 +3497,56 @@ static void decode_args(macro_iterator *mi)
}
}
+static void decode_string_args(macro_iterator *mi)
+{
+ node *n;
+ int c = get_copy(&n);
+ for (;;) {
+ while (c == ' ')
+ c = get_copy(&n);
+ if (c == '\n' || c == EOF) {
+ error("missing `]'");
+ break;
+ }
+ if (c == ']')
+ break;
+ macro arg;
+ int quote_input_level = 0;
+ int done_tab_warning = 0;
+ if (c == '\"') {
+ quote_input_level = input_stack::get_level();
+ c = get_copy(&n);
+ }
+ while (c != EOF && c != '\n'
+ && !(c == ']' && quote_input_level == 0)
+ && !(c == ' ' && quote_input_level == 0)) {
+ if (quote_input_level > 0 && c == '\"'
+ && input_stack::get_level() == quote_input_level) {
+ c = get_copy(&n);
+ if (c == '"') {
+ arg.append(c);
+ c = get_copy(&n);
+ }
+ else
+ break;
+ }
+ else {
+ if (c == 0)
+ arg.append(n);
+ else {
+ if (c == '\t' && quote_input_level == 0 && !done_tab_warning) {
+ warning(WARN_TAB, "tab character in unquoted string argument");
+ done_tab_warning = 1;
+ }
+ arg.append(c);
+ }
+ c = get_copy(&n);
+ }
+ }
+ mi->add_arg(arg);
+ }
+}
+
void macro::invoke(symbol nm)
{
macro_iterator *mi = new macro_iterator(nm, *this);
@@ -3141,7 +3562,7 @@ macro *macro::to_macro()
int macro::empty()
{
- return length == 0;
+ return empty_macro == 1;
}
macro_iterator::macro_iterator(symbol s, macro &m, const char *how_invoked)
@@ -3209,16 +3630,16 @@ void read_request()
int reading_from_terminal = isatty(fileno(stdin));
int had_prompt = 0;
if (!tok.newline() && !tok.eof()) {
- int c = get_copy(NULL);
+ int c = get_copy(0);
while (c == ' ')
- c = get_copy(NULL);
+ c = get_copy(0);
while (c != EOF && c != '\n' && c != ' ') {
- if (!illegal_input_char(c)) {
+ if (!invalid_input_char(c)) {
if (reading_from_terminal)
fputc(c, stderr);
had_prompt = 1;
}
- c = get_copy(NULL);
+ c = get_copy(0);
}
if (c == ' ') {
tok.make_space();
@@ -3234,8 +3655,8 @@ void read_request()
int nl = 0;
int c;
while ((c = getchar()) != EOF) {
- if (illegal_input_char(c))
- warning(WARN_INPUT, "illegal input character code %1", int(c));
+ if (invalid_input_char(c))
+ warning(WARN_INPUT, "invalid input character code %1", int(c));
else {
if (c == '\n') {
if (nl)
@@ -3254,7 +3675,10 @@ void read_request()
tok.next();
}
-void do_define_string(int append)
+enum define_mode { DEFINE_NORMAL, DEFINE_APPEND, DEFINE_IGNORE };
+enum calling_mode { CALLING_NORMAL, CALLING_INDIRECT, CALLING_DISABLE_COMP };
+
+void do_define_string(define_mode mode, calling_mode calling)
{
symbol nm;
node *n;
@@ -3282,8 +3706,10 @@ void do_define_string(int append)
macro mac;
request_or_macro *rm = (request_or_macro *)request_dictionary.lookup(nm);
macro *mm = rm ? rm->to_macro() : 0;
- if (append && mm)
+ if (mode == DEFINE_APPEND && mm)
mac = *mm;
+ if (calling == CALLING_DISABLE_COMP)
+ mac.append(COMPATIBLE_SAVE);
while (c != '\n' && c != EOF) {
if (c == 0)
mac.append(n);
@@ -3295,21 +3721,33 @@ void do_define_string(int append)
mm = new macro;
request_dictionary.define(nm, mm);
}
+ if (calling == CALLING_DISABLE_COMP)
+ mac.append(COMPATIBLE_RESTORE);
*mm = mac;
tok.next();
}
void define_string()
{
- do_define_string(0);
+ do_define_string(DEFINE_NORMAL, CALLING_NORMAL);
+}
+
+void define_nocomp_string()
+{
+ do_define_string(DEFINE_NORMAL, CALLING_DISABLE_COMP);
}
void append_string()
{
- do_define_string(1);
+ do_define_string(DEFINE_APPEND, CALLING_NORMAL);
}
-void define_character()
+void append_nocomp_string()
+{
+ do_define_string(DEFINE_APPEND, CALLING_DISABLE_COMP);
+}
+
+void do_define_character(int fallback)
{
node *n;
int c;
@@ -3343,12 +3781,22 @@ void define_character()
m->append((unsigned char)c);
c = get_copy(&n);
}
- m = ci->set_macro(m);
+ m = ci->set_macro(m, fallback);
if (m)
delete m;
tok.next();
}
+void define_character()
+{
+ do_define_character(0);
+}
+
+void define_fallback_character()
+{
+ do_define_character(1);
+}
+
static void remove_character()
{
tok.skip();
@@ -3371,13 +3819,26 @@ static void interpolate_string(symbol nm)
request_or_macro *p = lookup_request(nm);
macro *m = p->to_macro();
if (!m)
- error("you can only invoke a string using \\*");
+ error("you can only invoke a string or macro using \\*");
else {
string_iterator *si = new string_iterator(*m, "string", nm);
input_stack::push(si);
}
}
+static void interpolate_string_with_args(symbol s)
+{
+ request_or_macro *p = lookup_request(s);
+ macro *m = p->to_macro();
+ if (!m)
+ error("you can only invoke a string or macro using \\*");
+ else {
+ macro_iterator *mi = new macro_iterator(s, *m);
+ decode_string_args(mi);
+ input_stack::push(mi);
+ }
+}
+
/* This class is used for the implementation of \$@. It is used for
each of the closing double quotes. It artificially increases the
input level by 2, so that the closing double quote will appear to have
@@ -3473,9 +3934,6 @@ void handle_initial_title()
// this should be local to define_macro, but cfront 1.2 doesn't support that
static symbol dot_symbol(".");
-enum define_mode { DEFINE_NORMAL, DEFINE_APPEND, DEFINE_IGNORE };
-enum calling_mode { CALLING_NORMAL, CALLING_INDIRECT, CALLING_DISABLE_COMP };
-
void do_define_macro(define_mode mode, calling_mode calling)
{
symbol nm, term;
@@ -3537,11 +3995,17 @@ void do_define_macro(define_mode mode, calling_mode calling)
const char *s = term.contents();
int d = 0;
// see if it matches term
- int i;
- for (i = 0; s[i] != 0; i++) {
- d = get_copy(&n);
- if ((unsigned char)s[i] != d)
- break;
+ int i = 0;
+ if (s[0] != 0) {
+ while ((d = get_copy(&n)) == ' ' || d == '\t')
+ ;
+ if ((unsigned char)s[0] == d) {
+ for (i = 1; s[i] != 0; i++) {
+ d = get_copy(&n);
+ if ((unsigned char)s[i] != d)
+ break;
+ }
+ }
}
if (s[i] == 0
&& ((i == 2 && compatible_flag)
@@ -3625,6 +4089,11 @@ void append_macro()
do_define_macro(DEFINE_APPEND, CALLING_NORMAL);
}
+void append_indirect_macro()
+{
+ do_define_macro(DEFINE_APPEND, CALLING_INDIRECT);
+}
+
void append_nocomp_macro()
{
do_define_macro(DEFINE_APPEND, CALLING_DISABLE_COMP);
@@ -3680,75 +4149,121 @@ void chop_macro()
macro *m = p->to_macro();
if (!m)
error("cannot chop request");
- else if (m->length == 0)
+ else if (m->empty())
error("cannot chop empty macro");
- else
- m->length -= 1;
+ else {
+ int have_restore = 0;
+ // we have to check for additional save/restore pairs which could be
+ // there due to empty am1 requests.
+ for (;;) {
+ if (m->get(m->len - 1) != COMPATIBLE_RESTORE)
+ break;
+ have_restore = 1;
+ m->len -= 1;
+ if (m->get(m->len - 1) != COMPATIBLE_SAVE)
+ break;
+ have_restore = 0;
+ m->len -= 1;
+ if (m->len == 0)
+ break;
+ }
+ if (m->len == 0)
+ error("cannot chop empty macro");
+ else {
+ if (have_restore)
+ m->set(COMPATIBLE_RESTORE, m->len - 1);
+ else
+ m->len -= 1;
+ }
+ }
}
skip_line();
}
-void substring_macro()
+void substring_request()
{
- int start;
+ int start; // 0, 1, ..., n-1 or -1, -2, ...
symbol s = get_name(1);
if (!s.is_null() && get_integer(&start)) {
request_or_macro *p = lookup_request(s);
macro *m = p->to_macro();
if (!m)
- error("cannot substring request");
+ error("cannot apply `substring' on a request");
else {
- if (start <= 0)
- start += m->length;
- else
- start--;
- int end = 0;
+ int end = -1;
if (!has_arg() || get_integer(&end)) {
- if (end <= 0)
- end += m->length;
- else
- end--;
+ int real_length = 0; // 1, 2, ..., n
+ string_iterator iter1(*m);
+ for (int l = 0; l < m->len; l++) {
+ int c = iter1.get(0);
+ if (c == COMPATIBLE_SAVE || c == COMPATIBLE_RESTORE)
+ continue;
+ if (c == EOF)
+ break;
+ real_length++;
+ }
+ if (start < 0)
+ start += real_length;
+ if (end < 0)
+ end += real_length;
if (start > end) {
int tem = start;
start = end;
end = tem;
}
- if (start >= m->length || start == end) {
- m->length = 0;
+ if (start >= real_length || end < 0) {
+ warning(WARN_RANGE,
+ "start and end index of substring out of range");
+ m->len = 0;
if (m->p) {
if (--(m->p->count) <= 0)
delete m->p;
m->p = 0;
}
+ skip_line();
+ return;
}
- else if (start == 0)
- m->length = end;
- else {
- string_iterator iter(*m);
- int i;
- for (i = 0; i < start; i++)
- if (iter.get(0) == EOF)
- break;
- macro mac;
- for (; i < end; i++) {
- node *nd;
- int c = iter.get(&nd);
- if (c == EOF)
- break;
- if (c == 0)
- mac.append(nd);
- else
- mac.append((unsigned char)c);
- }
- *m = mac;
+ if (start < 0) {
+ warning(WARN_RANGE,
+ "start index of substring out of range, set to 0");
+ start = 0;
+ }
+ if (end >= real_length) {
+ warning(WARN_RANGE,
+ "end index of substring out of range, set to string length");
+ end = real_length - 1;
}
+ // now extract the substring
+ string_iterator iter(*m);
+ int i;
+ for (i = 0; i < start; i++) {
+ int c = iter.get(0);
+ while (c == COMPATIBLE_SAVE || c == COMPATIBLE_RESTORE)
+ c = iter.get(0);
+ if (c == EOF)
+ break;
+ }
+ macro mac;
+ for (; i <= end; i++) {
+ node *nd;
+ int c = iter.get(&nd);
+ while (c == COMPATIBLE_SAVE || c == COMPATIBLE_RESTORE)
+ c = iter.get(0);
+ if (c == EOF)
+ break;
+ if (c == 0)
+ mac.append(nd);
+ else
+ mac.append((unsigned char)c);
+ }
+ *m = mac;
}
}
}
skip_line();
}
-void length_macro()
+void length_request()
{
symbol ret;
ret = get_name(1);
@@ -3778,12 +4293,12 @@ void length_macro()
++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);
+ tok.next();
}
void asciify_macro()
@@ -3900,19 +4415,20 @@ static int get_line_arg(units *n, int si, charinfo **cp)
{
token start;
start.next();
- if (start.delimiter(1)) {
- tok.next();
- if (get_number(n, si)) {
- if (tok.dummy() || tok.transparent_dummy())
- tok.next();
- if (start != tok) {
- *cp = tok.get_char(1);
- tok.next();
- }
- if (start != tok)
- warning(WARN_DELIM, "closing delimiter does not match");
- return 1;
+ int start_level = input_stack::get_level();
+ if (!start.delimiter(1))
+ return 0;
+ tok.next();
+ if (get_number(n, si)) {
+ if (tok.dummy() || tok.transparent_dummy())
+ tok.next();
+ if (!(start == tok && input_stack::get_level() == start_level)) {
+ *cp = tok.get_char(1);
+ tok.next();
}
+ if (!(start == tok && input_stack::get_level() == start_level))
+ warning(WARN_DELIM, "closing delimiter does not match");
+ return 1;
}
return 0;
}
@@ -4085,65 +4601,6 @@ static symbol get_delim_name()
}
}
-static symbol get_delim_file_name()
-{
- token start;
- start.next();
- if (start.eof()) {
- error("end of input at start of delimited file name");
- return NULL_SYMBOL;
- }
- if (start.newline()) {
- error("can't delimit file name with a newline");
- return NULL_SYMBOL;
- }
- int start_level = input_stack::get_level();
- char abuf[ABUF_SIZE];
- char *buf = abuf;
- int buf_size = ABUF_SIZE;
- int i = 0;
- for (;;) {
- if (i + 1 > buf_size) {
- if (buf == abuf) {
- buf = new char[ABUF_SIZE*2];
- memcpy(buf, abuf, buf_size);
- buf_size = ABUF_SIZE*2;
- }
- else {
- char *old_buf = buf;
- buf = new char[buf_size*2];
- memcpy(buf, old_buf, buf_size);
- buf_size *= 2;
- a_delete old_buf;
- }
- }
- tok.next();
- if (tok.ch() == ']' && input_stack::get_level() == start_level)
- break;
- if ((buf[i] = tok.ch()) == 0) {
- error("missing delimiter (got %1)", tok.description());
- if (buf != abuf)
- a_delete buf;
- return NULL_SYMBOL;
- }
- i++;
- }
- buf[i] = '\0';
- if (buf == abuf) {
- if (i == 0) {
- error("empty delimited file name");
- return NULL_SYMBOL;
- }
- else
- return symbol(buf);
- }
- else {
- symbol s(buf);
- a_delete buf;
- return s;
- }
-}
-
// Implement \R
static void do_register()
@@ -4331,9 +4788,14 @@ static void encode_char(macro *mac, char c)
mac->append(')');
}
}
- else {
- error("%1 is illegal within \\X", tok.description());
- }
+ else if (tok.stretchable_space()
+ || tok.unstretchable_space())
+ mac->append(' ');
+ else if (!(tok.hyphen_indicator()
+ || tok.dummy()
+ || tok.transparent_dummy()
+ || tok.zero_width_break()))
+ error("%1 is invalid within \\X", tok.description());
}
else {
if ((font::use_charnames_in_special) && (c == '\\')) {
@@ -4380,29 +4842,48 @@ node *do_special()
return new special_node(mac);
}
-node *do_suppress()
+void output_request()
{
+ if (!tok.newline() && !tok.eof()) {
+ int c;
+ for (;;) {
+ c = get_copy(0);
+ if (c == '"') {
+ c = get_copy(0);
+ break;
+ }
+ if (c != ' ' && c != '\t')
+ break;
+ }
+ for (; c != '\n' && c != EOF; c = get_copy(0))
+ topdiv->transparent_output(c);
+ topdiv->transparent_output('\n');
+ }
tok.next();
- int c = tok.ch();
- if (c != '[') {
- error("argument(s) of \\O must be enclosed in brackets (got %1)",
- char(c));
+}
+
+extern int image_no; // from node.cc
+
+static node *do_suppress(symbol nm)
+{
+ if (nm.is_null() || nm.is_empty()) {
+ error("expecting an argument to escape \\O");
return 0;
}
- tok.next();
- c = tok.ch();
- tok.next();
- switch (c) {
+ const char *s = nm.contents();
+ switch (*s) {
case '0':
- if (begin_level == 1)
+ if (begin_level == 0)
+ // suppress generation of glyphs
return new suppress_node(0, 0);
break;
case '1':
- if (begin_level == 1)
+ if (begin_level == 0)
+ // enable generation of glyphs
return new suppress_node(1, 0);
break;
case '2':
- if (begin_level == 1)
+ if (begin_level == 0)
return new suppress_node(1, 1);
break;
case '3':
@@ -4411,20 +4892,33 @@ node *do_suppress()
case '4':
begin_level--;
break;
- case '5': {
- symbol filename = get_delim_file_name();
- tok.next();
- if (filename.is_null()) {
- error("missing filename as second argument to \\O");
- return 0;
+ case '5':
+ {
+ s++; // move over '5'
+ char position = *s;
+ if (*s == (char)0) {
+ error("missing position and filename in \\O");
+ return 0;
+ }
+ if (!(position == 'l'
+ || position == 'r'
+ || position == 'c'
+ || position == 'i')) {
+ error("l, r, c, or i position expected (got %1 in \\O)", position);
+ return 0;
+ }
+ s++; // onto image name
+ if (s == (char *)0) {
+ error("missing image name for \\O");
+ return 0;
+ }
+ image_no++;
+ if (begin_level == 0)
+ return new suppress_node(symbol(s), position, image_no);
}
- if (begin_level == 1)
- return new suppress_node(filename, 'i');
- return 0;
break;
- }
default:
- error("`%1' is an invalid argument to \\O", char(c));
+ error("`%1' is an invalid argument to \\O", *s);
}
return 0;
}
@@ -4434,7 +4928,7 @@ void special_node::tprint(troff_output_file *out)
tprint_start(out);
string_iterator iter(mac);
for (;;) {
- int c = iter.get(NULL);
+ int c = iter.get(0);
if (c == EOF)
break;
for (const char *s = ::asciify(c); *s; s++)
@@ -4484,7 +4978,7 @@ static void skip_alternative()
level++;
int c;
for (;;) {
- c = input_stack::get(NULL);
+ c = input_stack::get(0);
if (c == EOF)
break;
if (c == ESCAPE_LEFT_BRACE)
@@ -4492,7 +4986,7 @@ static void skip_alternative()
else if (c == ESCAPE_RIGHT_BRACE)
--level;
else if (c == escape_char && escape_char > 0)
- switch(input_stack::get(NULL)) {
+ switch(input_stack::get(0)) {
case '{':
++level;
break;
@@ -4500,7 +4994,7 @@ static void skip_alternative()
--level;
break;
case '"':
- while ((c = input_stack::get(NULL)) != '\n' && c != EOF)
+ while ((c = input_stack::get(0)) != '\n' && c != EOF)
;
}
/*
@@ -4574,6 +5068,16 @@ int do_if_request()
? request_dictionary.lookup(nm) != 0
: number_reg_dictionary.lookup(nm) != 0);
}
+ else if (c == 'm') {
+ tok.next();
+ symbol nm = get_long_name(1);
+ if (nm.is_null()) {
+ skip_alternative();
+ return 0;
+ }
+ result = (nm == default_symbol
+ || color_dictionary.lookup(nm) != 0);
+ }
else if (c == 'c') {
tok.next();
tok.skip();
@@ -4660,65 +5164,6 @@ void else_request()
}
}
-/*
- * begin - if this is the outermost html_begin request then execute the
- * rest of the line, else skip line
- */
-
-void begin()
-{
- begin_level++;
- if (begin_level == 1)
- begin_alternative();
- else
- skip_alternative();
-}
-
-/*
- * end - if this is the outermost html_end request then execute the
- * rest of the line, else skip line
- */
-
-void end()
-{
- begin_level--;
- if (begin_level == 0)
- begin_alternative();
- else
- skip_alternative();
- if (begin_level < 0)
- begin_level = 0;
-}
-
-/*
- * image - implements the directive `.image {l|r|c|i} filename'
- * which places the filename into a node which is later
- * written out
- *
- * . either as a special in the form of an image tag for -Thtml
- * . or as an image region definition for all other devices
- *
- */
-
-void image()
-{
- if (has_arg()) {
- char position = tok.ch();
- if (!(position == 'l'
- || position == 'r'
- || position == 'c'
- || position == 'i')) {
- error("l, r, c, or i expected (got %1)", tok.description());
- position = 'c';
- }
- tok.next();
- symbol filename = get_long_name(1);
- if (!filename.is_null())
- curenv->add_node(new suppress_node(filename, position));
- }
- skip_line();
-}
-
static int while_depth = 0;
static int while_break_flag = 0;
@@ -4766,7 +5211,7 @@ void while_request()
input_stack::push(new string_iterator(mac, "while loop"));
tok.next();
if (!do_if_request()) {
- while (input_stack::get(NULL) != EOF)
+ while (input_stack::get(0) != EOF)
;
break;
}
@@ -4790,7 +5235,7 @@ void while_break_request()
}
else {
while_break_flag = 1;
- while (input_stack::get(NULL) != EOF)
+ while (input_stack::get(0) != EOF)
;
tok.next();
}
@@ -4803,7 +5248,7 @@ void while_continue_request()
skip_line();
}
else {
- while (input_stack::get(NULL) != EOF)
+ while (input_stack::get(0) != EOF)
;
tok.next();
}
@@ -4846,12 +5291,12 @@ void pipe_source()
error("missing command");
else {
int c;
- while ((c = get_copy(NULL)) == ' ' || c == '\t')
+ while ((c = get_copy(0)) == ' ' || c == '\t')
;
int buf_size = 24;
char *buf = new char[buf_size];
int buf_used = 0;
- for (; c != '\n' && c != EOF; c = get_copy(NULL)) {
+ for (; c != '\n' && c != EOF; c = get_copy(0)) {
const char *s = asciify(c);
int slen = strlen(s);
if (buf_used + slen + 1> buf_size) {
@@ -4938,7 +5383,7 @@ int ps_get_line(char *buf, FILE *fp, const char* filename)
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);
+ error("invalid input character code %1 in `%2'", int(c), filename);
else if (i < PS_LINE_MAX)
buf[i++] = c;
else if (!err) {
@@ -4991,14 +5436,15 @@ void do_ps_file(FILE *fp, const char* filename)
if (res == 1) {
assign_registers(bb.llx, bb.lly, bb.urx, bb.ury);
return;
- } else if (res == 2) {
+ }
+ else if (res == 2) {
bb_at_end = 1;
break;
}
else {
error("the arguments to the %%%%BoundingBox comment in `%1' are bad",
filename);
- return;
+ return;
}
}
}
@@ -5132,8 +5578,12 @@ const char *asciify(int c)
case ESCAPE_COLON:
buf[1] = ':';
break;
+ case COMPATIBLE_SAVE:
+ case COMPATIBLE_RESTORE:
+ buf[0] = '\0';
+ break;
default:
- if (illegal_input_char(c))
+ if (invalid_input_char(c))
buf[0] = '\0';
else
buf[0] = c;
@@ -5159,7 +5609,7 @@ const char *input_char_description(int c)
return "a node";
}
static char buf[sizeof("magic character code ") + 1 + INT_DIGITS];
- if (illegal_input_char(c)) {
+ if (invalid_input_char(c)) {
const char *s = asciify(c);
if (*s) {
buf[0] = '`';
@@ -5187,15 +5637,15 @@ void do_terminal(int newline, int string_like)
if (!tok.newline() && !tok.eof()) {
int c;
for (;;) {
- c = get_copy(NULL);
+ c = get_copy(0);
if (string_like && c == '"') {
- c = get_copy(NULL);
+ c = get_copy(0);
break;
}
if (c != ' ' && c != '\t')
break;
}
- for (; c != '\n' && c != EOF; c = get_copy(NULL))
+ for (; c != '\n' && c != EOF; c = get_copy(0))
fputs(asciify(c), stderr);
}
if (newline)
@@ -5278,7 +5728,9 @@ void close_request()
skip_line();
}
-void write_request()
+// .write and .writec
+
+void do_write_request(int newline)
{
symbol stream = get_name(1);
if (stream.is_null()) {
@@ -5292,17 +5744,28 @@ void write_request()
return;
}
int c;
- while ((c = get_copy(NULL)) == ' ')
+ while ((c = get_copy(0)) == ' ')
;
if (c == '"')
- c = get_copy(NULL);
- for (; c != '\n' && c != EOF; c = get_copy(NULL))
+ c = get_copy(0);
+ for (; c != '\n' && c != EOF; c = get_copy(0))
fputs(asciify(c), fp);
- fputc('\n', fp);
+ if (newline)
+ fputc('\n', fp);
fflush(fp);
tok.next();
}
+void write_request()
+{
+ do_write_request(1);
+}
+
+void write_request_continue()
+{
+ do_write_request(0);
+}
+
void write_macro_request()
{
symbol stream = get_name(1);
@@ -5338,6 +5801,47 @@ void write_macro_request()
skip_line();
}
+void warnscale_request()
+{
+ if (has_arg()) {
+ char c = tok.ch();
+ if (c == 'u')
+ warn_scale = 1.0;
+ else if (c == 'i')
+ warn_scale = (double)units_per_inch;
+ else if (c == 'c')
+ warn_scale = (double)units_per_inch / 2.54;
+ else if (c == 'p')
+ warn_scale = (double)units_per_inch / 72.0;
+ else if (c == 'P')
+ warn_scale = (double)units_per_inch / 6.0;
+ else {
+ warning(WARN_SCALE,
+ "invalid scaling indicator `%1', using `i' instead", c);
+ c = 'i';
+ }
+ warn_scaling_indicator = c;
+ }
+ skip_line();
+}
+
+void spreadwarn_request()
+{
+ hunits n;
+ if (has_arg() && get_hunits(&n, 'm')) {
+ if (n < 0)
+ n = 0;
+ hunits em = curenv->get_size();
+ spread_limit = (double)n.to_units()
+ / (em.is_zero() ? hresolution : em.to_units());
+ }
+ else
+ spread_limit = -spread_limit - 1; // no arg toggles on/off without
+ // changing value; we mirror at
+ // -0.5 to make zero a valid value
+ skip_line();
+}
+
static void init_charset_table()
{
char buf[16];
@@ -5369,7 +5873,13 @@ static void init_charset_table()
page_character = charset_table['%'];
}
-static void do_translate(int translate_transparent)
+static void init_hpf_code_table()
+{
+ for (int i = 0; i < 256; i++)
+ hpf_code_table[i] = i;
+}
+
+static void do_translate(int translate_transparent, int translate_input)
{
tok.skip();
while (!tok.newline() && !tok.eof()) {
@@ -5408,9 +5918,9 @@ static void do_translate(int translate_transparent)
if (ci2 == 0)
break;
if (ci1 == ci2)
- ci1->set_translation(0, translate_transparent);
+ ci1->set_translation(0, translate_transparent, translate_input);
else
- ci1->set_translation(ci2, translate_transparent);
+ ci1->set_translation(ci2, translate_transparent, translate_input);
}
tok.next();
}
@@ -5419,12 +5929,17 @@ static void do_translate(int translate_transparent)
void translate()
{
- do_translate(1);
+ do_translate(1, 0);
}
void translate_no_transparent()
{
- do_translate(0);
+ do_translate(0, 0);
+}
+
+void translate_input()
+{
+ do_translate(1, 1);
}
void char_flags()
@@ -5463,12 +5978,42 @@ void hyphenation_code()
break;
}
ci->set_hyphenation_code(c);
+ if (ci->get_translation()
+ && ci->get_translation()->get_translation_input())
+ ci->get_translation()->set_hyphenation_code(c);
tok.next();
tok.skip();
}
skip_line();
}
+void hyphenation_patterns_file_code()
+{
+ tok.skip();
+ while (!tok.newline() && !tok.eof()) {
+ int n1, n2;
+ if (get_integer(&n1) && (0 <= n1 && n1 <= 255)) {
+ if (!has_arg()) {
+ error("missing output hyphenation code");
+ break;
+ }
+ if (get_integer(&n2) && (0 <= n2 && n2 <= 255)) {
+ hpf_code_table[n1] = n2;
+ tok.skip();
+ }
+ else {
+ error("output hyphenation code must be integer in the range 0..255");
+ break;
+ }
+ }
+ else {
+ error("input hyphenation code must be integer in the range 0..255");
+ break;
+ }
+ }
+ skip_line();
+}
+
charinfo *token::get_char(int required)
{
if (type == TOKEN_CHAR)
@@ -5553,17 +6098,28 @@ int token::add_to_node_list(node **pp)
case TOKEN_RIGHT_BRACE:
break;
case TOKEN_SPACE:
- n = new hmotion_node(curenv->get_space_width());
+ n = new hmotion_node(curenv->get_space_width(),
+ curenv->get_fill_color());
break;
case TOKEN_SPECIAL:
*pp = (*pp)->add_char(get_charinfo(nm), curenv, &w, &s);
break;
case TOKEN_STRETCHABLE_SPACE:
- n = new unbreakable_space_node(curenv->get_space_width());
+ n = new unbreakable_space_node(curenv->get_space_width(),
+ curenv->get_fill_color());
+ break;
+ case TOKEN_UNSTRETCHABLE_SPACE:
+ n = new space_char_hmotion_node(curenv->get_space_width(),
+ curenv->get_fill_color());
break;
case TOKEN_TRANSPARENT_DUMMY:
n = new transparent_dummy_node;
break;
+ case TOKEN_ZERO_WIDTH_BREAK:
+ n = new space_node(H0, curenv->get_fill_color());
+ n->freeze_space();
+ n->is_escape_colon();
+ break;
default:
return 0;
}
@@ -5580,7 +6136,8 @@ void token::process()
return;
switch (type) {
case TOKEN_BACKSPACE:
- curenv->add_node(new hmotion_node(-curenv->get_space_width()));
+ curenv->add_node(new hmotion_node(-curenv->get_space_width(),
+ curenv->get_fill_color()));
break;
case TOKEN_CHAR:
curenv->add_char(charset_table[c]);
@@ -5631,7 +6188,7 @@ void token::process()
curenv->add_char(get_charinfo_by_number(val));
break;
case TOKEN_REQUEST:
- // handled in process_input_stack
+ // handled in process_input_stack()
break;
case TOKEN_RIGHT_BRACE:
break;
@@ -5645,7 +6202,12 @@ void token::process()
curenv->spread();
break;
case TOKEN_STRETCHABLE_SPACE:
- curenv->add_node(new unbreakable_space_node(curenv->get_space_width()));
+ curenv->add_node(new unbreakable_space_node(curenv->get_space_width(),
+ curenv->get_fill_color()));
+ break;
+ case TOKEN_UNSTRETCHABLE_SPACE:
+ curenv->add_node(new space_char_hmotion_node(curenv->get_space_width(),
+ curenv->get_fill_color()));
break;
case TOKEN_TAB:
curenv->handle_tab(0);
@@ -5655,6 +6217,14 @@ void token::process()
case TOKEN_TRANSPARENT_DUMMY:
curenv->add_node(new transparent_dummy_node);
break;
+ case TOKEN_ZERO_WIDTH_BREAK:
+ {
+ node *tmp = new space_node(H0, curenv->get_fill_color());
+ tmp->freeze_space();
+ tmp->is_escape_colon();
+ curenv->add_node(tmp);
+ break;
+ }
default:
assert(0);
}
@@ -5764,7 +6334,7 @@ void abort_request()
if (c == EOF || c == '\n')
fputs("User Abort.", stderr);
else {
- for (; c != '\n' && c != EOF; c = get_copy(NULL))
+ for (; c != '\n' && c != EOF; c = get_copy(0))
fputs(asciify(c), stderr);
}
fputc('\n', stderr);
@@ -5780,7 +6350,7 @@ char *read_string()
;
int i = 0;
while (c != '\n' && c != EOF) {
- if (!illegal_input_char(c)) {
+ if (!invalid_input_char(c)) {
if (i + 2 > len) {
char *tem = s;
s = new char[len*2];
@@ -5817,8 +6387,20 @@ void pipe_output()
skip_line();
}
else {
- if ((pipe_command = read_string()) == 0)
+ char *pc;
+ if ((pc = read_string()) == 0)
error("can't pipe to empty command");
+ if (pipe_command) {
+ char *s = new char[strlen(pipe_command) + strlen(pc) + 1 + 1];
+ strcpy(s, pipe_command);
+ strcat(s, "|");
+ strcat(s, pc);
+ a_delete pipe_command;
+ a_delete pc;
+ pipe_command = s;
+ }
+ else
+ pipe_command = pc;
}
#endif /* not POPEN_MISSING */
}
@@ -5897,8 +6479,8 @@ void transparent_file()
int c = getc(fp);
if (c == EOF)
break;
- if (illegal_input_char(c))
- warning(WARN_INPUT, "illegal input character code %1", int(c));
+ if (invalid_input_char(c))
+ warning(WARN_INPUT, "invalid input character code %1", int(c));
else {
curdiv->transparent_output(c);
bol = c == '\n';
@@ -6098,7 +6680,7 @@ static int evaluate_expression(const char *expr, units *res)
input_stack::push(make_temp_iterator(expr));
tok.next();
int success = get_number(res, 'u');
- while (input_stack::get(NULL) != EOF)
+ while (input_stack::get(0) != EOF)
;
return success;
}
@@ -6129,7 +6711,7 @@ static void set_string(const char *name, const char *value)
{
macro *m = new macro;
for (const char *p = value; *p; p++)
- if (!illegal_input_char((unsigned char)*p))
+ if (!invalid_input_char((unsigned char)*p))
m->append(*p);
request_dictionary.define(name, m);
}
@@ -6177,7 +6759,7 @@ static void add_string(const char *s, string_list **p)
void usage(FILE *stream, const char *prog)
{
fprintf(stream,
-"usage: %s -abivzCERU -wname -Wname -dcs -ffam -mname -nnum -olist\n"
+"usage: %s -abcivzCERU -wname -Wname -dcs -ffam -mname -nnum -olist\n"
" -rcn -Tname -Fdir -Mdir [files...]\n",
prog);
}
@@ -6213,10 +6795,10 @@ int main(int argc, char **argv)
static const struct option long_options[] = {
{ "help", no_argument, 0, CHAR_MAX + 1 },
{ "version", no_argument, 0, 'v' },
- { NULL, 0, 0, 0 }
+ { 0, 0, 0, 0 }
};
- while ((c = getopt_long(argc, argv, "abivw:W:zCEf:m:n:o:r:d:F:M:T:tqs:RU",
- long_options, NULL))
+ while ((c = getopt_long(argc, argv, "abcivw:W:zCEf:m:n:o:r:d:F:M:T:tqs:RU",
+ long_options, 0))
!= EOF)
switch(c) {
case 'v':
@@ -6232,6 +6814,9 @@ int main(int argc, char **argv)
break;
case 'C':
compatible_flag = 1;
+ // fall through
+ case 'c':
+ color_flag = 0;
break;
case 'M':
macro_path.command_line_dir(optarg);
@@ -6316,6 +6901,7 @@ int main(int argc, char **argv)
mac_path = &macro_path;
set_string(".T", device);
init_charset_table();
+ init_hpf_code_table();
if (!font::load_desc())
fatal("sorry, I can't continue");
units_per_inch = font::res;
@@ -6323,6 +6909,8 @@ int main(int argc, char **argv)
vresolution = font::vert;
sizescale = font::sizescale;
tcommand_flag = font::tcommand;
+ warn_scale = (double)units_per_inch;
+ warn_scaling_indicator = 'i';
if (!fflag && font::family != 0 && *font::family != '\0')
default_family = symbol(font::family);
font_size::init_size_table(font::sizes);
@@ -6347,7 +6935,6 @@ int main(int argc, char **argv)
init_column_requests();
#endif /* COLUMN */
init_node_requests();
- init_markup_requests();
number_reg_dictionary.define(".T", new constant_reg(tflag ? "1" : "0"));
init_registers();
init_reg_requests();
@@ -6408,6 +6995,9 @@ static void init_registers()
t = time(0);
// Use struct here to work around misfeature in old versions of g++.
struct tm *tt = localtime(&t);
+ set_number_reg("seconds", int(tt->tm_sec));
+ set_number_reg("minutes", int(tt->tm_min));
+ set_number_reg("hours", int(tt->tm_hour));
set_number_reg("dw", int(tt->tm_wday + 1));
set_number_reg("dy", int(tt->tm_mday));
set_number_reg("mo", int(tt->tm_mon + 1));
@@ -6458,120 +7048,126 @@ void get_output_registers(int *minx, int *miny, int *maxx, int *maxy)
*maxy = output_reg_maxy_contents;
}
-void init_markup_requests()
-{
- init_request("begin", begin);
- init_request("end", end);
- init_request("image", image);
-}
-
void init_input_requests()
{
- init_request("ds", define_string);
+ init_request("ab", abort_request);
+ init_request("als", alias_macro);
+ init_request("am", append_macro);
+ init_request("am1", append_nocomp_macro);
+ init_request("ami", append_indirect_macro);
init_request("as", append_string);
+ init_request("as1", append_nocomp_string);
+ init_request("asciify", asciify_macro);
+ init_request("backtrace", backtrace_request);
+ init_request("blm", blank_line_macro);
+ init_request("break", while_break_request);
+ init_request("cf", copy_file);
+ init_request("cflags", char_flags);
+ init_request("char", define_character);
+ init_request("chop", chop_macro);
+ init_request("close", close_request);
+ init_request("color", activate_color);
+ init_request("continue", while_continue_request);
+ init_request("cp", compatible);
init_request("de", define_macro);
- init_request("dei", define_indirect_macro);
init_request("de1", define_nocomp_macro);
- init_request("am", append_macro);
- init_request("am1", append_nocomp_macro);
+ init_request("defcolor", define_color);
+ init_request("dei", define_indirect_macro);
+ init_request("do", do_request);
+ init_request("ds", define_string);
+ init_request("ds1", define_nocomp_string);
+ init_request("ec", set_escape_char);
+ init_request("ecr", restore_escape_char);
+ init_request("ecs", save_escape_char);
+ init_request("el", else_request);
+ init_request("em", end_macro);
+ init_request("eo", escape_off);
+ init_request("ex", exit_request);
+ init_request("fchar", define_fallback_character);
+#ifdef WIDOW_CONTROL
+ init_request("fpl", flush_pending_lines);
+#endif /* WIDOW_CONTROL */
+ init_request("hcode", hyphenation_code);
+ init_request("hpfcode", hyphenation_patterns_file_code);
+ init_request("ie", if_else_request);
+ init_request("if", if_request);
init_request("ig", ignore);
- init_request("rm", remove_macro);
- init_request("rn", rename_macro);
+ init_request("length", length_request);
+ init_request("lf", line_file);
+ init_request("mso", macro_source);
init_request("nop", nop_request);
- init_request("if", if_request);
- init_request("ie", if_else_request);
- init_request("el", else_request);
- init_request("so", source);
init_request("nx", next_file);
- init_request("pm", print_macros);
- init_request("eo", escape_off);
- init_request("ec", set_escape_char);
- init_request("ecs", save_escape_char);
- init_request("ecr", restore_escape_char);
+ init_request("open", open_request);
+ init_request("opena", opena_request);
+ init_request("output", output_request);
init_request("pc", set_page_character);
+ init_request("pi", pipe_output);
+ init_request("pm", print_macros);
+ init_request("psbb", ps_bbox_request);
+#ifndef POPEN_MISSING
+ init_request("pso", pipe_source);
+#endif /* not POPEN_MISSING */
+ init_request("rchar", remove_character);
+ init_request("rd", read_request);
+ init_request("return", return_macro_request);
+ init_request("rm", remove_macro);
+ init_request("rn", rename_macro);
+ init_request("shift", shift);
+ init_request("so", source);
+ init_request("spreadwarn", spreadwarn_request);
+ init_request("substring", substring_request);
+ init_request("sy", system_request);
init_request("tm", terminal);
init_request("tm1", terminal1);
init_request("tmc", terminal_continue);
- init_request("ex", exit_request);
- init_request("return", return_macro_request);
- init_request("em", end_macro);
- init_request("blm", blank_line_macro);
init_request("tr", translate);
+ init_request("trf", transparent_file);
+ init_request("trin", translate_input);
init_request("trnt", translate_no_transparent);
- init_request("ab", abort_request);
- init_request("pi", pipe_output);
- init_request("cf", copy_file);
- init_request("sy", system_request);
- init_request("lf", line_file);
- init_request("cflags", char_flags);
- init_request("shift", shift);
- init_request("rd", read_request);
- init_request("cp", compatible);
- init_request("char", define_character);
- init_request("rchar", remove_character);
- init_request("hcode", hyphenation_code);
- init_request("while", while_request);
- init_request("break", while_break_request);
- init_request("continue", while_continue_request);
- init_request("als", alias_macro);
- init_request("backtrace", backtrace_request);
- init_request("chop", chop_macro);
- init_request("substring", substring_macro);
- init_request("length", length_macro);
- init_request("asciify", asciify_macro);
init_request("unformat", unformat_macro);
init_request("warn", warn_request);
- init_request("open", open_request);
- init_request("opena", opena_request);
- init_request("close", close_request);
+ init_request("while", while_request);
init_request("write", write_request);
+ init_request("writec", write_request_continue);
init_request("writem", write_macro_request);
- init_request("trf", transparent_file);
-#ifdef WIDOW_CONTROL
- init_request("fpl", flush_pending_lines);
-#endif /* WIDOW_CONTROL */
init_request("nroff", nroff_request);
init_request("troff", troff_request);
#ifdef COLUMN
init_request("vj", vjustify);
#endif /* COLUMN */
- init_request("mso", macro_source);
- init_request("do", do_request);
-#ifndef POPEN_MISSING
- init_request("pso", pipe_source);
-#endif /* not POPEN_MISSING */
- init_request("psbb", ps_bbox_request);
- number_reg_dictionary.define("systat", new variable_reg(&system_status));
- number_reg_dictionary.define("slimit",
- new variable_reg(&input_stack::limit));
+ init_request("warnscale", warnscale_request);
number_reg_dictionary.define(".$", new nargs_reg);
- number_reg_dictionary.define(".c", new lineno_reg);
- number_reg_dictionary.define("c.", new writable_lineno_reg);
- number_reg_dictionary.define(".F", new filename_reg);
number_reg_dictionary.define(".C", new constant_int_reg(&compatible_flag));
+ number_reg_dictionary.define(".F", new filename_reg);
number_reg_dictionary.define(".H", new constant_int_reg(&hresolution));
- number_reg_dictionary.define(".V", new constant_int_reg(&vresolution));
number_reg_dictionary.define(".R", new constant_reg("10000"));
- extern const char *major_version;
- number_reg_dictionary.define(".x", new constant_reg(major_version));
- extern const char *minor_version;
- number_reg_dictionary.define(".y", new constant_reg(minor_version));
+ number_reg_dictionary.define(".V", new constant_int_reg(&vresolution));
extern const char *revision;
number_reg_dictionary.define(".Y", new constant_reg(revision));
+ number_reg_dictionary.define(".c", new lineno_reg);
number_reg_dictionary.define(".g", new constant_reg("1"));
+ number_reg_dictionary.define(".color", new constant_int_reg(&color_flag));
number_reg_dictionary.define(".warn", new constant_int_reg(&warning_mask));
+ extern const char *major_version;
+ number_reg_dictionary.define(".x", new constant_reg(major_version));
+ extern const char *minor_version;
+ number_reg_dictionary.define(".y", new constant_reg(minor_version));
+ number_reg_dictionary.define("c.", new writable_lineno_reg);
number_reg_dictionary.define("llx", new variable_reg(&llx_reg_contents));
number_reg_dictionary.define("lly", new variable_reg(&lly_reg_contents));
- number_reg_dictionary.define("urx", new variable_reg(&urx_reg_contents));
- number_reg_dictionary.define("ury", new variable_reg(&ury_reg_contents));
- number_reg_dictionary.define("opminx",
- new variable_reg(&output_reg_minx_contents));
- number_reg_dictionary.define("opminy",
- new variable_reg(&output_reg_miny_contents));
number_reg_dictionary.define("opmaxx",
new variable_reg(&output_reg_maxx_contents));
number_reg_dictionary.define("opmaxy",
new variable_reg(&output_reg_maxy_contents));
+ number_reg_dictionary.define("opminx",
+ new variable_reg(&output_reg_minx_contents));
+ number_reg_dictionary.define("opminy",
+ new variable_reg(&output_reg_miny_contents));
+ number_reg_dictionary.define("slimit",
+ new variable_reg(&input_stack::limit));
+ number_reg_dictionary.define("systat", new variable_reg(&system_status));
+ number_reg_dictionary.define("urx", new variable_reg(&urx_reg_contents));
+ number_reg_dictionary.define("ury", new variable_reg(&ury_reg_contents));
}
object_dictionary request_dictionary(501);
@@ -6718,12 +7314,20 @@ static node *read_draw_node()
if (no_last_v)
error("even number of arguments needed for spline");
break;
+ case 'f':
+ if (npoints != 1 || !no_last_v) {
+ error("one argument needed for gray shade");
+ npoints = 1;
+ point[0].v = V0;
+ }
default:
// silently pass it through
break;
}
draw_node *dn = new draw_node(type, point, npoints,
- curenv->get_font_size());
+ curenv->get_font_size(),
+ curenv->get_glyph_color(),
+ curenv->get_fill_color());
a_delete point;
return dn;
}
@@ -6758,6 +7362,7 @@ static struct {
{ "mac", WARN_MAC },
{ "reg", WARN_REG },
{ "ig", WARN_IG },
+ { "color", WARN_COLOR },
{ "all", WARN_TOTAL & ~(WARN_DI | WARN_MAC | WARN_REG) },
{ "w", WARN_TOTAL },
{ "default", DEFAULT_WARNING_MASK },
@@ -6808,7 +7413,7 @@ static void copy_mode_error(const char *format,
error(format, arg1, arg2, arg3);
}
-enum error_type { WARNING, ERROR, FATAL };
+enum error_type { WARNING, OUTPUT_WARNING, ERROR, FATAL };
static void do_error(error_type type,
const char *format,
@@ -6837,6 +7442,18 @@ static void do_error(error_type type,
case WARNING:
fputs("warning: ", stderr);
break;
+ case OUTPUT_WARNING:
+ double fromtop = topdiv->get_vertical_position().to_units() / warn_scale;
+ fprintf(stderr, "warning [p %d, %.1f%c",
+ topdiv->get_page_number(), fromtop, warn_scaling_indicator);
+ if (topdiv != curdiv) {
+ double fromtop1 = curdiv->get_vertical_position().to_units()
+ / warn_scale;
+ fprintf(stderr, ", div `%s', %.1f%c",
+ curdiv->get_diversion_name(), fromtop1, warn_scaling_indicator);
+ }
+ fprintf(stderr, "]: ");
+ break;
}
errprint(format, arg1, arg2, arg3);
fputc('\n', stderr);
@@ -6859,6 +7476,20 @@ int warning(warning_type t,
return 0;
}
+int output_warning(warning_type t,
+ const char *format,
+ const errarg &arg1,
+ const errarg &arg2,
+ const errarg &arg3)
+{
+ if ((t & warning_mask) != 0) {
+ do_error(OUTPUT_WARNING, format, arg1, arg2, arg3);
+ return 1;
+ }
+ else
+ return 0;
+}
+
void error(const char *format,
const errarg &arg1,
const errarg &arg2,
@@ -6916,8 +7547,9 @@ int charinfo::next_index = 0;
charinfo::charinfo(symbol s)
: translation(0), mac(0), special_translation(TRANSLATE_NONE),
- hyphenation_code(0), flags(0), ascii_code(0), not_found(0),
- transparent_translate(1), nm(s)
+ hyphenation_code(0), flags(0), ascii_code(0), asciify_code(0),
+ not_found(0), transparent_translate(1), translate_input(0),
+ fallback(0), nm(s)
{
index = next_index++;
}
@@ -6927,9 +7559,18 @@ void charinfo::set_hyphenation_code(unsigned char c)
hyphenation_code = c;
}
-void charinfo::set_translation(charinfo *ci, int tt)
+void charinfo::set_translation(charinfo *ci, int tt, int ti)
{
translation = ci;
+ if (ci && ti) {
+ if (hyphenation_code != 0)
+ ci->set_hyphenation_code(hyphenation_code);
+ if (asciify_code != 0)
+ ci->set_asciify_code(asciify_code);
+ else if (ascii_code != 0)
+ ci->set_asciify_code(ascii_code);
+ ci->set_translation_input();
+ }
special_translation = TRANSLATE_NONE;
transparent_translate = tt;
}
@@ -6946,10 +7587,16 @@ void charinfo::set_ascii_code(unsigned char c)
ascii_code = c;
}
-macro *charinfo::set_macro(macro *m)
+void charinfo::set_asciify_code(unsigned char c)
+{
+ asciify_code = c;
+}
+
+macro *charinfo::set_macro(macro *m, int f)
{
macro *tem = mac;
mac = m;
+ fallback = f;
return tem;
}
diff --git a/contrib/groff/src/roff/troff/node.cc b/contrib/groff/src/roff/troff/node.cc
index 2d2d799..650bf0e 100644
--- a/contrib/groff/src/roff/troff/node.cc
+++ b/contrib/groff/src/roff/troff/node.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -19,11 +19,12 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+#include "troff.h"
+
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
-#include "troff.h"
#include "symbol.h"
#include "dictionary.h"
#include "hvunits.h"
@@ -35,6 +36,8 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "font.h"
#include "reg.h"
#include "input.h"
+#include "div.h"
+#include "geometry.h"
#include "nonposix.h"
@@ -60,8 +63,8 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
* debugging grohtml
*/
-static int image_no=0;
-static int suppress_start_page=0;
+int image_no = 0;
+static int suppress_start_page = 0;
#define STORE_WIDTH 1
@@ -147,6 +150,7 @@ public:
int get_bold(hunits *);
int is_special();
int is_style();
+ friend symbol get_font_name(int, environment *);
};
class tfont_spec {
@@ -234,6 +238,14 @@ inline int font_info::is_style()
return fm == 0;
}
+tfont *make_tfont(tfont_spec &spec)
+{
+ for (tfont *p = tfont::tfont_list; p; p = p->next)
+ if (*p == spec)
+ return p;
+ return new tfont(spec);
+}
+
// this is the current_font, fontno is where we found the character,
// presumably a special font
@@ -378,6 +390,15 @@ symbol font_info::get_name()
return internal_name;
}
+symbol get_font_name(int fontno, environment *env)
+{
+ symbol f = font_table[fontno]->get_name();
+ if (font_table[fontno]->is_style()) {
+ return concat(env->get_family()->nm, f);
+ }
+ return f;
+}
+
hunits font_info::get_space_width(font_size fs, int space_size)
{
if (is_constant_spaced == CONSTANT_SPACE_NONE)
@@ -626,14 +647,6 @@ inline int tfont::get_kern(charinfo *c1, charinfo *c2, hunits *res)
}
}
-tfont *make_tfont(tfont_spec &spec)
-{
- for (tfont *p = tfont::tfont_list; p; p = p->next)
- if (*p == spec)
- return p;
- return new tfont(spec);
-}
-
tfont *tfont::tfont_list = 0;
tfont::tfont(tfont_spec &spec) : tfont_spec(spec)
@@ -658,7 +671,7 @@ class real_output_file : public output_file {
int piped;
#endif
int printing; // decision via optional page list
- int output_on; // .output 1 or .output 0 requests
+ int output_on; // \O[0] or \O[1] escape calls
virtual void really_transparent_char(unsigned char) = 0;
virtual void really_print_line(hunits x, vunits y, node *n,
vunits before, vunits after, hunits width) = 0;
@@ -727,6 +740,8 @@ class troff_output_file : public real_output_file {
int current_slant;
int current_height;
tfont *current_tfont;
+ color *current_fill_color;
+ color *current_glyph_color;
int current_font_number;
symbol *font_position;
int nfont_positions;
@@ -739,6 +754,7 @@ class troff_output_file : public real_output_file {
void put(char c);
void put(unsigned char c);
void put(int i);
+ void put(unsigned int i);
void put(const char *s);
void set_font(tfont *tf);
void flush_tbuf();
@@ -746,13 +762,13 @@ public:
troff_output_file();
~troff_output_file();
void trailer(vunits page_length);
- void put_char(charinfo *ci, tfont *tf);
- void put_char_width(charinfo *ci, tfont *tf, hunits w, hunits k);
+ void put_char(charinfo *, tfont *, color *, color *);
+ void put_char_width(charinfo *, tfont *, color *, color *, hunits, hunits);
void right(hunits);
void down(vunits);
void moveto(hunits, vunits);
- void start_special(tfont *tf, int no_init_string = 0);
- void start_special(int no_init_string = 0);
+ void start_special(tfont *, color *, color *, int = 0);
+ void start_special();
void special_char(unsigned char c);
void end_special();
void word_marker();
@@ -763,9 +779,11 @@ public:
void really_put_filename(const char *filename);
void really_on();
void really_off();
- void draw(char, hvpair *, int, font_size);
+ void draw(char, hvpair *, int, font_size, color *, color *);
void determine_line_limits (char code, hvpair *point, int npoints);
void check_charinfo(tfont *tf, charinfo *ci);
+ void glyph_color(color *c);
+ void fill_color(color *c);
int get_hpos() { return hpos; }
int get_vpos() { return vpos; }
};
@@ -796,29 +814,29 @@ inline void troff_output_file::put(int i)
put_string(i_to_a(i), fp);
}
-void troff_output_file::start_special(tfont *tf, int no_init_string)
+inline void troff_output_file::put(unsigned int i)
{
- flush_tbuf();
+ put_string(ui_to_a(i), fp);
+}
- /*
- * although this is extremely unlikely to have an effect on other devices
- * this way is safer. Currently this is only needed for html.
- */
- if (is_html && tf) {
- if (tf != current_tfont)
- set_font(tf);
- }
+void troff_output_file::start_special(tfont *tf, color *gcol, color *fcol,
+ int no_init_string)
+{
+ flush_tbuf();
do_motion();
+ if (tf != current_tfont)
+ set_font(tf);
+ glyph_color(gcol);
+ fill_color(fcol);
if (!no_init_string)
put("x X ");
}
-void troff_output_file::start_special(int no_init_string)
+void troff_output_file::start_special()
{
flush_tbuf();
do_motion();
- if (!no_init_string)
- put("x X ");
+ put("x X ");
}
void troff_output_file::special_char(unsigned char c)
@@ -844,8 +862,7 @@ void troff_output_file::really_print_line(hunits x, vunits y, node *n,
{
moveto(x, y);
while (n != 0) {
- if (is_on() || (n->force_tprint()))
- n->tprint(this);
+ n->tprint(this);
n = n->next;
}
flush_tbuf();
@@ -864,7 +881,8 @@ void troff_output_file::really_print_line(hunits x, vunits y, node *n,
inline void troff_output_file::word_marker()
{
flush_tbuf();
- put('w');
+ if (is_on())
+ put('w');
}
inline void troff_output_file::right(hunits n)
@@ -920,6 +938,11 @@ void troff_output_file::do_motion()
void troff_output_file::flush_tbuf()
{
+ if (!is_on()) {
+ tbuf_len = 0;
+ return;
+ }
+
if (tbuf_len == 0)
return;
if (tbuf_kern == 0)
@@ -930,7 +953,7 @@ void troff_output_file::flush_tbuf()
put(' ');
}
check_output_limits(hpos, vpos);
- check_output_limits(hpos, vpos + current_size + current_height);
+ check_output_limits(hpos, vpos - current_size);
for (int i = 0; i < tbuf_len; i++)
put(tbuf[i]);
@@ -940,29 +963,37 @@ void troff_output_file::flush_tbuf()
void troff_output_file::check_charinfo(tfont *tf, charinfo *ci)
{
- int size = tf->get_size().to_scaled_points();
+ if (!is_on())
+ return;
+
int height = tf->get_char_height(ci).to_units();
int width = tf->get_width(ci).to_units()
+ tf->get_italic_correction(ci).to_units();
int depth = tf->get_char_depth(ci).to_units();
- check_output_limits(output_hpos,
- output_vpos - height);
- check_output_limits(output_hpos + width,
- output_vpos + size + depth);
+ check_output_limits(output_hpos, output_vpos - height);
+ check_output_limits(output_hpos + width, output_vpos + depth);
}
-void troff_output_file::put_char_width(charinfo *ci, tfont *tf, hunits w,
- hunits k)
+void troff_output_file::put_char_width(charinfo *ci, tfont *tf,
+ color *gcol, color *fcol,
+ hunits w, hunits k)
{
+ int kk = k.to_units();
+ if (!is_on()) {
+ flush_tbuf();
+ hpos += w.to_units() + kk;
+ return;
+ }
if (tf != current_tfont) {
flush_tbuf();
set_font(tf);
}
char c = ci->get_ascii_code();
- int kk = k.to_units();
if (c == '\0') {
flush_tbuf();
do_motion();
+ glyph_color(gcol);
+ fill_color(fcol);
check_charinfo(tf, ci);
if (ci->numbered()) {
put('N');
@@ -983,6 +1014,7 @@ void troff_output_file::put_char_width(charinfo *ci, tfont *tf, hunits w,
}
else if (tcommand_flag) {
if (tbuf_len > 0 && hpos == output_hpos && vpos == output_vpos
+ && gcol == current_glyph_color && fcol == current_fill_color
&& kk == tbuf_kern
&& tbuf_len < TBUF_SIZE) {
check_charinfo(tf, ci);
@@ -993,6 +1025,8 @@ void troff_output_file::put_char_width(charinfo *ci, tfont *tf, hunits w,
}
flush_tbuf();
do_motion();
+ glyph_color(gcol);
+ fill_color(fcol);
check_charinfo(tf, ci);
tbuf[tbuf_len++] = c;
output_hpos += w.to_units() + kk;
@@ -1004,7 +1038,9 @@ void troff_output_file::put_char_width(charinfo *ci, tfont *tf, hunits w,
int n = hpos - output_hpos;
check_charinfo(tf, ci);
// check_output_limits(output_hpos, output_vpos);
- if (vpos == output_vpos && n > 0 && n < 100 && !force_motion) {
+ if (vpos == output_vpos
+ && gcol == current_glyph_color && fcol == current_fill_color
+ && n > 0 && n < 100 && !force_motion) {
put(char(n/10 + '0'));
put(char(n%10 + '0'));
put(c);
@@ -1019,14 +1055,19 @@ void troff_output_file::put_char_width(charinfo *ci, tfont *tf, hunits w,
}
}
-void troff_output_file::put_char(charinfo *ci, tfont *tf)
+void troff_output_file::put_char(charinfo *ci, tfont *tf,
+ color *gcol, color *fcol)
{
flush_tbuf();
+ if (!is_on())
+ return;
if (tf != current_tfont)
set_font(tf);
char c = ci->get_ascii_code();
if (c == '\0') {
do_motion();
+ glyph_color(gcol);
+ fill_color(fcol);
if (ci->numbered()) {
put('N');
put(ci->get_number());
@@ -1045,7 +1086,9 @@ void troff_output_file::put_char(charinfo *ci, tfont *tf)
}
else {
int n = hpos - output_hpos;
- if (vpos == output_vpos && n > 0 && n < 100) {
+ if (vpos == output_vpos
+ && gcol == current_glyph_color && fcol == current_fill_color
+ && n > 0 && n < 100) {
put(char(n/10 + '0'));
put(char(n%10 + '0'));
put(c);
@@ -1053,6 +1096,8 @@ void troff_output_file::put_char(charinfo *ci, tfont *tf)
}
else {
do_motion();
+ glyph_color(gcol);
+ fill_color(fcol);
put('c');
put(c);
}
@@ -1115,12 +1160,112 @@ void troff_output_file::set_font(tfont *tf)
current_tfont = tf;
}
+void troff_output_file::fill_color(color *col)
+{
+ if ((current_fill_color == col) || !color_flag)
+ return;
+ flush_tbuf();
+ put("DF");
+ unsigned int components[4];
+ color_scheme cs;
+ cs = col->get_components(components);
+ switch (cs) {
+ case DEFAULT:
+ put('d');
+ break;
+ case RGB:
+ put("r ");
+ put(Red);
+ put(' ');
+ put(Green);
+ put(' ');
+ put(Blue);
+ break;
+ case CMY:
+ put("c ");
+ put(Cyan);
+ put(' ');
+ put(Magenta);
+ put(' ');
+ put(Yellow);
+ break;
+ case CMYK:
+ put("k ");
+ put(Cyan);
+ put(' ');
+ put(Magenta);
+ put(' ');
+ put(Yellow);
+ put(' ');
+ put(Black);
+ break;
+ case GRAY:
+ put("g ");
+ put(Gray);
+ break;
+ }
+ put('\n');
+ current_fill_color = col;
+}
+
+void troff_output_file::glyph_color(color *col)
+{
+ if ((current_glyph_color == col) || !color_flag)
+ return;
+ flush_tbuf();
+ put("m");
+ unsigned int components[4];
+ color_scheme cs;
+ cs = col->get_components(components);
+ switch (cs) {
+ case DEFAULT:
+ put('d');
+ break;
+ case RGB:
+ put("r ");
+ put(Red);
+ put(' ');
+ put(Green);
+ put(' ');
+ put(Blue);
+ break;
+ case CMY:
+ put("c ");
+ put(Cyan);
+ put(' ');
+ put(Magenta);
+ put(' ');
+ put(Yellow);
+ break;
+ case CMYK:
+ put("k ");
+ put(Cyan);
+ put(' ');
+ put(Magenta);
+ put(' ');
+ put(Yellow);
+ put(' ');
+ put(Black);
+ break;
+ case GRAY:
+ put("g ");
+ put(Gray);
+ break;
+ }
+ put('\n');
+ current_glyph_color = col;
+}
+
// determine_line_limits - works out the smallest box which will contain
// the entity, code, built from the point array.
void troff_output_file::determine_line_limits(char code, hvpair *point,
int npoints)
{
int i, x, y;
+
+ if (!is_on())
+ return;
+
switch (code) {
case 'c':
case 'C':
@@ -1157,8 +1302,37 @@ void troff_output_file::determine_line_limits(char code, hvpair *point,
check_output_limits(x, y);
}
break;
+ case 'a':
+ double c[2];
+ int p[4];
+ int minx, miny, maxx, maxy;
+ x = output_hpos;
+ y = output_vpos;
+ p[0] = point[0].h.to_units();
+ p[1] = point[0].v.to_units();
+ p[2] = point[1].h.to_units();
+ p[3] = point[1].v.to_units();
+ if (adjust_arc_center(p, c)) {
+ check_output_arc_limits(x, y,
+ p[0], p[1], p[2], p[3],
+ c[0], c[1],
+ &minx, &maxx, &miny, &maxy);
+ check_output_limits(minx, miny);
+ check_output_limits(maxx, maxy);
+ break;
+ }
+ // fall through
+ case 'l':
+ x = output_hpos;
+ y = output_vpos;
+ check_output_limits(x, y);
+ for (i = 0; i < npoints; i++) {
+ x += point[i].h.to_units();
+ y += point[i].v.to_units();
+ check_output_limits(x, y);
+ }
+ break;
default:
- // remember this doesn't work for arc.. yet
x = output_hpos;
y = output_vpos;
for (i = 0; i < npoints; i++) {
@@ -1170,34 +1344,37 @@ void troff_output_file::determine_line_limits(char code, hvpair *point,
}
void troff_output_file::draw(char code, hvpair *point, int npoints,
- font_size fsize)
+ font_size fsize, color *gcol, color *fcol)
{
+ int i;
flush_tbuf();
do_motion();
- int size = fsize.to_scaled_points();
- if (current_size != size) {
- put('s');
- put(size);
- put('\n');
- current_size = size;
- current_tfont = 0;
- }
- put('D');
- put(code);
- int i;
- if (code == 'c') {
- put(' ');
- put(point[0].h.to_units());
- }
- else
- for (i = 0; i < npoints; i++) {
- put(' ');
- put(point[i].h.to_units());
+ glyph_color(gcol);
+ fill_color(fcol);
+ if (is_on()) {
+ int size = fsize.to_scaled_points();
+ if (current_size != size) {
+ put('s');
+ put(size);
+ put('\n');
+ current_size = size;
+ current_tfont = 0;
+ }
+ put('D');
+ put(code);
+ if (code == 'c') {
put(' ');
- put(point[i].v.to_units());
+ put(point[0].h.to_units());
}
-
- determine_line_limits(code, point, npoints);
+ else
+ for (i = 0; i < npoints; i++) {
+ put(' ');
+ put(point[i].h.to_units());
+ put(' ');
+ put(point[i].v.to_units());
+ }
+ determine_line_limits(code, point, npoints);
+ }
for (i = 0; i < npoints; i++)
output_hpos += point[i].h.to_units();
@@ -1207,15 +1384,18 @@ void troff_output_file::draw(char code, hvpair *point, int npoints,
output_vpos += point[i].v.to_units();
vpos = output_vpos;
}
- put('\n');
+ if (is_on())
+ put('\n');
}
-void troff_output_file::really_on ()
+void troff_output_file::really_on()
{
flush_tbuf();
+ force_motion = 1;
+ do_motion();
}
-void troff_output_file::really_off ()
+void troff_output_file::really_off()
{
flush_tbuf();
}
@@ -1412,7 +1592,7 @@ int real_output_file::is_printing()
void real_output_file::begin_page(int pageno, vunits page_length)
{
printing = in_output_page_list(pageno);
- if (printing && output_on)
+ if (printing)
really_begin_page(pageno, page_length);
}
@@ -1454,9 +1634,8 @@ void real_output_file::really_put_filename(const char *filename)
void real_output_file::on()
{
really_on();
- if (output_on == 0) {
+ if (output_on == 0)
output_on = 1;
- }
}
void real_output_file::off()
@@ -1467,7 +1646,7 @@ void real_output_file::off()
int real_output_file::is_on()
{
- return( output_on );
+ return output_on;
}
void real_output_file::really_on()
@@ -1562,14 +1741,16 @@ class glyph_node : public charinfo_node {
static glyph_node *free_list;
protected:
tfont *tf;
+ color *gcol;
+ color *fcol; /* this is needed for grotty */
#ifdef STORE_WIDTH
hunits wid;
- glyph_node(charinfo *, tfont *, hunits, node * = 0);
+ glyph_node(charinfo *, tfont *, color *, color *, hunits, node * = 0);
#endif
public:
void *operator new(size_t);
void operator delete(void *);
- glyph_node(charinfo *, tfont *, node * = 0);
+ glyph_node(charinfo *, tfont *, color *, color *, node * = 0);
~glyph_node() {}
node *copy();
node *merge_glyph_node(glyph_node *);
@@ -1584,6 +1765,8 @@ public:
hunits skew();
hyphenation_type get_hyphenation_type();
tfont *get_tfont();
+ color *get_glyph_color();
+ color *get_fill_color();
void tprint(troff_output_file *);
void zero_width_tprint(troff_output_file *);
hyphen_list *get_hyphen_list(hyphen_list *ss = 0);
@@ -1602,12 +1785,14 @@ class ligature_node : public glyph_node {
node *n1;
node *n2;
#ifdef STORE_WIDTH
- ligature_node(charinfo *, tfont *, hunits, node *gn1, node *gn2, node *x = 0);
+ ligature_node(charinfo *, tfont *, color *, color *, hunits,
+ node *, node *, node * = 0);
#endif
public:
void *operator new(size_t);
void operator delete(void *);
- ligature_node(charinfo *, tfont *, node *gn1, node *gn2, node *x = 0);
+ ligature_node(charinfo *, tfont *, color *, color *,
+ node *, node *, node * = 0);
~ligature_node();
node *copy();
node *add_self(node *, hyphen_list **);
@@ -1708,8 +1893,8 @@ void ligature_node::operator delete(void *p)
delete[] (char *)p;
}
-glyph_node::glyph_node(charinfo *c, tfont *t, node *x)
-: charinfo_node(c, x), tf(t)
+glyph_node::glyph_node(charinfo *c, tfont *t, color *gc, color *fc, node *x)
+: charinfo_node(c, x), tf(t), gcol(gc), fcol(fc)
{
#ifdef STORE_WIDTH
wid = tf->get_width(ci);
@@ -1717,8 +1902,9 @@ glyph_node::glyph_node(charinfo *c, tfont *t, node *x)
}
#ifdef STORE_WIDTH
-glyph_node::glyph_node(charinfo *c, tfont *t, hunits w, node *x)
-: charinfo_node(c, x), tf(t), wid(w)
+glyph_node::glyph_node(charinfo *c, tfont *t,
+ color *gc, color *fc, hunits w, node *x)
+: charinfo_node(c, x), tf(t), gcol(gc), fcol(fc), wid(w)
{
}
#endif
@@ -1726,9 +1912,9 @@ glyph_node::glyph_node(charinfo *c, tfont *t, hunits w, node *x)
node *glyph_node::copy()
{
#ifdef STORE_WIDTH
- return new glyph_node(ci, tf, wid);
+ return new glyph_node(ci, tf, gcol, fcol, wid);
#else
- return new glyph_node(ci, tf);
+ return new glyph_node(ci, tf, gcol, fcol);
#endif
}
@@ -1779,6 +1965,26 @@ tfont *glyph_node::get_tfont()
return tf;
}
+color *node::get_glyph_color()
+{
+ return 0;
+}
+
+color *glyph_node::get_glyph_color()
+{
+ return gcol;
+}
+
+color *node::get_fill_color()
+{
+ return 0;
+}
+
+color *glyph_node::get_fill_color()
+{
+ return fcol;
+}
+
node *node::merge_glyph_node(glyph_node * /*gn*/)
{
return 0;
@@ -1786,12 +1992,12 @@ node *node::merge_glyph_node(glyph_node * /*gn*/)
node *glyph_node::merge_glyph_node(glyph_node *gn)
{
- if (tf == gn->tf) {
+ if (tf == gn->tf && gcol == gn->gcol && fcol == gn->fcol) {
charinfo *lig;
if ((lig = tf->get_lig(ci, gn->ci)) != 0) {
node *next1 = next;
next = 0;
- return new ligature_node(lig, tf, this, gn, next1);
+ return new ligature_node(lig, tf, gcol, fcol, this, gn, next1);
}
hunits kern;
if (tf->get_kern(ci, gn->ci, &kern)) {
@@ -1860,16 +2066,16 @@ void glyph_node::ascii_print(ascii_output_file *ascii)
ascii->outs(ci->nm.contents());
}
-ligature_node::ligature_node(charinfo *c, tfont *t,
+ligature_node::ligature_node(charinfo *c, tfont *t, color *gc, color *fc,
node *gn1, node *gn2, node *x)
-: glyph_node(c, t, x), n1(gn1), n2(gn2)
+: glyph_node(c, t, gc, fc, x), n1(gn1), n2(gn2)
{
}
#ifdef STORE_WIDTH
-ligature_node::ligature_node(charinfo *c, tfont *t, hunits w,
- node *gn1, node *gn2, node *x)
-: glyph_node(c, t, w, x), n1(gn1), n2(gn2)
+ligature_node::ligature_node(charinfo *c, tfont *t, color *gc, color *fc,
+ hunits w, node *gn1, node *gn2, node *x)
+: glyph_node(c, t, gc, fc, w, x), n1(gn1), n2(gn2)
{
}
#endif
@@ -1883,9 +2089,9 @@ ligature_node::~ligature_node()
node *ligature_node::copy()
{
#ifdef STORE_WIDTH
- return new ligature_node(ci, tf, wid, n1->copy(), n2->copy());
+ return new ligature_node(ci, tf, gcol, fcol, wid, n1->copy(), n2->copy());
#else
- return new ligature_node(ci, tf, n1->copy(), n2->copy());
+ return new ligature_node(ci, tf, gcol, fcol, n1->copy(), n2->copy());
#endif
}
@@ -1986,10 +2192,12 @@ node *kern_pair_node::add_discretionary_hyphen()
tfont *tf = n2->get_tfont();
if (tf) {
if (tf->contains(soft_hyphen_char)) {
+ color *gcol = n2->get_glyph_color();
+ color *fcol = n2->get_fill_color();
node *next1 = next;
next = 0;
node *n = copy();
- glyph_node *gn = new glyph_node(soft_hyphen_char, tf);
+ glyph_node *gn = new glyph_node(soft_hyphen_char, tf, gcol, fcol);
node *nn = n->merge_glyph_node(gn);
if (nn == 0) {
gn->next = n;
@@ -2121,10 +2329,12 @@ node *node::add_discretionary_hyphen()
if (!tf)
return new hyphen_inhibitor_node(this);
if (tf->contains(soft_hyphen_char)) {
+ color *gcol = get_glyph_color();
+ color *fcol = get_fill_color();
node *next1 = next;
next = 0;
node *n = copy();
- glyph_node *gn = new glyph_node(soft_hyphen_char, tf);
+ glyph_node *gn = new glyph_node(soft_hyphen_char, tf, gcol, fcol);
node *n1 = n->merge_glyph_node(gn);
if (n1 == 0) {
gn->next = n;
@@ -2362,8 +2572,9 @@ int italic_corrected_node::character_type()
class break_char_node : public node {
node *ch;
char break_code;
+ color *col;
public:
- break_char_node(node *, int, node * = 0);
+ break_char_node(node *, int, color *, node * = 0);
~break_char_node();
node *copy();
hunits width();
@@ -2387,8 +2598,8 @@ public:
int force_tprint();
};
-break_char_node::break_char_node(node *n, int c, node *x)
-: node(x), ch(n), break_code(c)
+break_char_node::break_char_node(node *n, int bc, color *c, node *x)
+: node(x), ch(n), break_code(bc), col(c)
{
}
@@ -2399,7 +2610,7 @@ break_char_node::~break_char_node()
node *break_char_node::copy()
{
- return new break_char_node(ch->copy(), break_code);
+ return new break_char_node(ch->copy(), break_code, col);
}
hunits break_char_node::width()
@@ -2431,13 +2642,13 @@ node *break_char_node::add_self(node *n, hyphen_list **p)
{
assert((*p)->hyphenation_code == 0);
if ((*p)->breakable && (break_code & 1)) {
- n = new space_node(H0, n);
+ n = new space_node(H0, col, n);
n->freeze_space();
}
next = n;
n = this;
if ((*p)->breakable && (break_code & 2)) {
- n = new space_node(H0, n);
+ n = new space_node(H0, col, n);
n->freeze_space();
}
hyphen_list *pp = *p;
@@ -2493,17 +2704,17 @@ node *vertical_size_node::copy()
node *hmotion_node::copy()
{
- return new hmotion_node(n, was_tab, unformat);
+ return new hmotion_node(n, was_tab, unformat, col);
}
node *space_char_hmotion_node::copy()
{
- return new space_char_hmotion_node(n);
+ return new space_char_hmotion_node(n, col);
}
node *vmotion_node::copy()
{
- return new vmotion_node(n);
+ return new vmotion_node(n, col);
}
node *dummy_node::copy()
@@ -2648,6 +2859,8 @@ node *bracket_node::copy()
bracket_node *on = new bracket_node;
node *last = 0;
node *tem;
+ if (list)
+ list->last = 0;
for (tem = list; tem; tem = tem->next) {
if (tem->next)
tem->next->last = tem;
@@ -2711,13 +2924,13 @@ inline void space_node::operator delete(void *p)
}
#endif
-space_node::space_node(hunits nn, node *p)
-: node(p), n(nn), set(0), was_escape_colon(0)
+space_node::space_node(hunits nn, color *c, node *p)
+: node(p), n(nn), set(0), was_escape_colon(0), col(c)
{
}
-space_node::space_node(hunits nn, int s, int flag, node *p)
-: node(p), n(nn), set(s), was_escape_colon(flag)
+space_node::space_node(hunits nn, int s, int flag, color *c, node *p)
+: node(p), n(nn), set(s), was_escape_colon(flag), col(c)
{
}
@@ -2729,7 +2942,7 @@ space_node::~space_node()
node *space_node::copy()
{
- return new space_node(n, set, was_escape_colon);
+ return new space_node(n, set, was_escape_colon, col);
}
int space_node::force_tprint()
@@ -3025,7 +3238,9 @@ void node::asciify(macro *m)
void glyph_node::asciify(macro *m)
{
- unsigned char c = ci->get_ascii_code();
+ unsigned char c = ci->get_asciify_code();
+ if (c == 0)
+ c = ci->get_ascii_code();
if (c != 0) {
m->append(c);
delete this;
@@ -3098,8 +3313,9 @@ void hmotion_node::asciify(macro *m)
m->append(this);
}
-space_char_hmotion_node::space_char_hmotion_node(hunits i, node *next)
-: hmotion_node(i, next)
+space_char_hmotion_node::space_char_hmotion_node(hunits i, color *c,
+ node *next)
+: hmotion_node(i, c, next)
{
}
@@ -3153,8 +3369,8 @@ int node::nbreaks()
return 0;
}
-breakpoint *space_node::get_breakpoints(hunits width, int ns, breakpoint *rest,
- int is_inner)
+breakpoint *space_node::get_breakpoints(hunits width, int ns,
+ breakpoint *rest, int is_inner)
{
if (next->discardable())
return rest;
@@ -3351,23 +3567,27 @@ special_node::special_node(const macro &m, int n)
font_size fs = curenv->get_font_size();
int char_height = curenv->get_char_height();
int char_slant = curenv->get_char_slant();
- int fontno = curenv->get_font();
- tf = font_table[fontno]->get_tfont(fs, char_height, char_slant,
- fontno);
+ int fontno = env_definite_font(curenv);
+ tf = font_table[fontno]->get_tfont(fs, char_height, char_slant, fontno);
if (curenv->is_composite())
tf = tf->get_plain();
+ gcol = curenv->get_glyph_color();
+ fcol = curenv->get_fill_color();
}
-special_node::special_node(const macro &m, tfont *t, int n)
-: mac(m), tf(t), no_init_string(n)
+special_node::special_node(const macro &m, tfont *t,
+ color *gc, color *fc, int n)
+: mac(m), tf(t), gcol(gc), fcol(fc), no_init_string(n)
{
}
int special_node::same(node *n)
{
- return ((mac == ((special_node *)n)->mac)
- && (tf == ((special_node *)n)->tf)
- && (no_init_string == ((special_node *)n)->no_init_string));
+ return mac == ((special_node *)n)->mac
+ && tf == ((special_node *)n)->tf
+ && gcol == ((special_node *)n)->gcol
+ && fcol == ((special_node *)n)->fcol
+ && no_init_string == ((special_node *)n)->no_init_string;
}
const char *special_node::type()
@@ -3387,12 +3607,12 @@ int special_node::force_tprint()
node *special_node::copy()
{
- return new special_node(mac, tf, no_init_string);
+ return new special_node(mac, tf, gcol, fcol, no_init_string);
}
void special_node::tprint_start(troff_output_file *out)
{
- out->start_special(get_tfont(), no_init_string);
+ out->start_special(tf, gcol, fcol, no_init_string);
}
void special_node::tprint_char(troff_output_file *out, unsigned char c)
@@ -3413,18 +3633,20 @@ tfont *special_node::get_tfont()
/* suppress_node */
suppress_node::suppress_node(int on_or_off, int issue_limits)
-: is_on(on_or_off), emit_limits(issue_limits), filename(0), position(0)
+: is_on(on_or_off), emit_limits(issue_limits),
+ filename(0), position(0), image_id(0)
{
}
-suppress_node::suppress_node(symbol f, char p)
-: is_on(2), emit_limits(0), filename(f), position(p)
+suppress_node::suppress_node(symbol f, char p, int id)
+: is_on(2), emit_limits(0), filename(f), position(p), image_id(id)
{
}
suppress_node::suppress_node(int issue_limits, int on_or_off,
- symbol f, char p)
-: is_on(on_or_off), emit_limits(issue_limits), filename(f), position(p)
+ symbol f, char p, int id)
+: is_on(on_or_off), emit_limits(issue_limits),
+ filename(f), position(p), image_id(id)
{
}
@@ -3433,8 +3655,8 @@ int suppress_node::same(node *n)
return ((is_on == ((suppress_node *)n)->is_on)
&& (emit_limits == ((suppress_node *)n)->emit_limits)
&& (filename == ((suppress_node *)n)->filename)
- && (position == ((suppress_node *)n)->position));
-;
+ && (position == ((suppress_node *)n)->position)
+ && (image_id == ((suppress_node *)n)->image_id));
}
const char *suppress_node::type()
@@ -3444,7 +3666,7 @@ const char *suppress_node::type()
node *suppress_node::copy()
{
- return new suppress_node(emit_limits, is_on, filename, position);
+ return new suppress_node(emit_limits, is_on, filename, position, image_id);
}
int get_reg_int(const char *p)
@@ -3483,6 +3705,7 @@ void suppress_node::put(troff_output_file *out, const char *s)
static char last_position = 0;
static const char *last_image_filename = 0;
+static int last_image_id = 0;
inline int min(int a, int b)
{
@@ -3508,22 +3731,23 @@ inline int min(int a, int b)
void suppress_node::tprint(troff_output_file *out)
{
- int current_page = get_reg_int("%");
+ int current_page = topdiv->get_page_number();
// firstly check to see whether this suppress node contains
// an image filename & position.
if (is_on == 2) {
// remember position and filename
last_position = position;
- last_image_filename = filename.contents();
+ last_image_filename = strdup(filename.contents());
+ last_image_id = image_id;
+ // printf("start of image and page = %d\n", current_page);
}
else {
// now check whether the suppress node requires us to issue limits.
if (emit_limits) {
char name[8192];
- image_no++;
// remember that the filename will contain a %d in which the
- // image_no is placed
- sprintf(name, last_image_filename, image_no);
+ // last_image_id is placed
+ sprintf(name, last_image_filename, last_image_id);
if (is_html) {
switch (last_position) {
case 'c':
@@ -3551,14 +3775,18 @@ void suppress_node::tprint(troff_output_file *out)
}
else {
// postscript (or other device)
- if (current_page != suppress_start_page)
+ if (suppress_start_page > 0 && current_page != suppress_start_page)
error("suppression limit registers span more than one page;\n"
"image description %1 will be wrong", image_no);
+ // if (topdiv->get_page_number() != suppress_start_page)
+ // fprintf(stderr, "end of image and topdiv page = %d and suppress_start_page = %d\n",
+ // topdiv->get_page_number(), suppress_start_page);
+
// remember that the filename will contain a %d in which the
// image_no is placed
fprintf(stderr,
"grohtml-info:page %d %d %d %d %d %d %s %d %d %s\n",
- current_page,
+ topdiv->get_page_number(),
get_reg_int("opminx"), get_reg_int("opminy"),
get_reg_int("opmaxx"), get_reg_int("opmaxy"),
// page offset + line length
@@ -3568,12 +3796,13 @@ void suppress_node::tprint(troff_output_file *out)
}
}
else {
- if (is_on)
+ if (is_on) {
out->on();
+ // lastly we reset the output registers
+ reset_output_registers(out->get_vpos());
+ }
else
out->off();
- // lastly we reset the output registers
- reset_output_registers(out->get_vpos());
suppress_start_page = current_page;
}
}
@@ -3670,7 +3899,9 @@ hyphenation_type composite_node::get_hyphenation_type()
void composite_node::asciify(macro *m)
{
- unsigned char c = ci->get_ascii_code();
+ unsigned char c = ci->get_asciify_code();
+ if (c == 0)
+ c = ci->get_ascii_code();
if (c != 0) {
m->append(c);
delete this;
@@ -3741,14 +3972,14 @@ width_list::width_list(width_list *w)
{
}
-word_space_node::word_space_node(hunits d, width_list *w, node *x)
-: space_node(d, x), orig_width(w), unformat(0)
+word_space_node::word_space_node(hunits d, color *c, width_list *w, node *x)
+: space_node(d, c, x), orig_width(w), unformat(0)
{
}
-word_space_node::word_space_node(hunits d, int s, width_list *w,
+word_space_node::word_space_node(hunits d, int s, color *c, width_list *w,
int flag, node *x)
-: space_node(d, s, 0, x), orig_width(w), unformat(flag)
+: space_node(d, s, 0, c, x), orig_width(w), unformat(flag)
{
}
@@ -3774,7 +4005,7 @@ node *word_space_node::copy()
w_new_curr = w_new_curr->next;
w_old_curr = w_old_curr->next;
}
- return new word_space_node(n, set, w_new, unformat);
+ return new word_space_node(n, set, col, w_new, unformat);
}
int word_space_node::set_unformat_flag()
@@ -3785,8 +4016,9 @@ int word_space_node::set_unformat_flag()
void word_space_node::tprint(troff_output_file *out)
{
+ out->fill_color(col);
out->word_marker();
- space_node::tprint(out);
+ out->right(n);
}
int word_space_node::merge_space(hunits h, hunits sw, hunits ssw)
@@ -3800,19 +4032,20 @@ int word_space_node::merge_space(hunits h, hunits sw, hunits ssw)
return 1;
}
-unbreakable_space_node::unbreakable_space_node(hunits d, node *x)
-: word_space_node(d, 0, x)
+unbreakable_space_node::unbreakable_space_node(hunits d, color *c, node *x)
+: word_space_node(d, c, 0, x)
{
}
-unbreakable_space_node::unbreakable_space_node(hunits d, int s, node *x)
-: word_space_node(d, s, 0, 0, x)
+unbreakable_space_node::unbreakable_space_node(hunits d, int s,
+ color *c, node *x)
+: word_space_node(d, s, c, 0, 0, x)
{
}
node *unbreakable_space_node::copy()
{
- return new unbreakable_space_node(n, set);
+ return new unbreakable_space_node(n, set, col);
}
int unbreakable_space_node::force_tprint()
@@ -3845,8 +4078,9 @@ hvpair::hvpair()
{
}
-draw_node::draw_node(char c, hvpair *p, int np, font_size s)
-: npoints(np), sz(s), code(c)
+draw_node::draw_node(char c, hvpair *p, int np, font_size s,
+ color *gc, color *fc)
+: npoints(np), sz(s), gcol(gc), fcol(fc), code(c)
{
point = new hvpair[npoints];
for (int i = 0; i < npoints; i++)
@@ -3856,7 +4090,8 @@ draw_node::draw_node(char c, hvpair *p, int np, font_size s)
int draw_node::same(node *n)
{
draw_node *nd = (draw_node *)n;
- if (code != nd->code || npoints != nd->npoints || sz != nd->sz)
+ if (code != nd->code || npoints != nd->npoints || sz != nd->sz
+ || gcol != nd->gcol || fcol != nd->fcol)
return 0;
for (int i = 0; i < npoints; i++)
if (point[i].h != nd->point[i].h || point[i].v != nd->point[i].v)
@@ -3900,12 +4135,12 @@ vunits draw_node::vertical_width()
node *draw_node::copy()
{
- return new draw_node(code, point, npoints, sz);
+ return new draw_node(code, point, npoints, sz, gcol, fcol);
}
void draw_node::tprint(troff_output_file *out)
{
- out->draw(code, point, npoints, sz);
+ out->draw(code, point, npoints, sz, gcol, fcol);
}
/* tprint methods */
@@ -3914,7 +4149,7 @@ void glyph_node::tprint(troff_output_file *out)
{
tfont *ptf = tf->get_plain();
if (ptf == tf)
- out->put_char_width(ci, ptf, width(), H0);
+ out->put_char_width(ci, ptf, gcol, fcol, width(), H0);
else {
hunits offset;
int bold = tf->get_bold(&offset);
@@ -3933,10 +4168,10 @@ void glyph_node::tprint(troff_output_file *out)
else
k = tf->get_track_kern();
if (bold) {
- out->put_char(ci, ptf);
+ out->put_char(ci, ptf, gcol, fcol);
out->right(offset);
}
- out->put_char_width(ci, ptf, w, k);
+ out->put_char_width(ci, ptf, gcol, fcol, w, k);
}
}
@@ -3954,10 +4189,10 @@ void glyph_node::zero_width_tprint(troff_output_file *out)
x = x/2;
out->right(x);
}
- out->put_char(ci, ptf);
+ out->put_char(ci, ptf, gcol, fcol);
if (bold) {
out->right(offset);
- out->put_char(ci, ptf);
+ out->put_char(ci, ptf, gcol, fcol);
out->right(-offset);
}
if (cs)
@@ -3995,20 +4230,23 @@ void hline_node::tprint(troff_output_file *out)
hunits xx = x - w;
hunits xx2 = xx/2;
out->right(xx2);
- n->tprint(out);
+ if (out->is_on())
+ n->tprint(out);
out->right(xx - xx2);
}
else {
hunits rem = x - w*i;
if (rem > H0)
if (n->overlaps_horizontally()) {
- n->tprint(out);
+ if (out->is_on())
+ n->tprint(out);
out->right(rem - w);
}
else
out->right(rem);
while (--i >= 0)
- n->tprint(out);
+ if (out->is_on())
+ n->tprint(out);
}
}
@@ -4037,11 +4275,13 @@ void vline_node::tprint(troff_output_file *out)
if (overlaps) {
n->zero_width_tprint(out);
out->down(-rem);
- n->tprint(out);
+ if (out->is_on())
+ n->tprint(out);
out->down(-h);
}
else {
- n->tprint(out);
+ if (out->is_on())
+ n->tprint(out);
out->down(-h - rem);
}
}
@@ -4062,7 +4302,8 @@ void vline_node::tprint(troff_output_file *out)
n->zero_width_tprint(out);
out->down(h);
}
- n->tprint(out);
+ if (out->is_on())
+ n->tprint(out);
}
}
}
@@ -4131,16 +4372,19 @@ void node::zero_width_tprint(troff_output_file *out)
void space_node::tprint(troff_output_file *out)
{
+ out->fill_color(col);
out->right(n);
}
void hmotion_node::tprint(troff_output_file *out)
{
+ out->fill_color(col);
out->right(n);
}
void vmotion_node::tprint(troff_output_file *out)
{
+ out->fill_color(col);
out->down(n);
}
@@ -4226,6 +4470,8 @@ node *make_glyph_node(charinfo *s, environment *env, int no_error_message = 0)
int fn = fontno;
int found = font_table[fontno]->contains(s);
if (!found) {
+ if (s->is_fallback())
+ return make_composite_node(s, env);
if (s->numbered()) {
if (!no_error_message)
warning(WARN_CHAR, "can't find numbered character %1",
@@ -4284,16 +4530,20 @@ node *make_glyph_node(charinfo *s, environment *env, int no_error_message = 0)
tfont *tf = font_table[fontno]->get_tfont(fs, char_height, char_slant, fn);
if (env->is_composite())
tf = tf->get_plain();
- return new glyph_node(s, tf);
+ color *gcol = env->get_glyph_color();
+ color *fcol = env->get_fill_color();
+ return new glyph_node(s, tf, gcol, fcol);
}
node *make_node(charinfo *ci, environment *env)
{
switch (ci->get_special_translation()) {
case charinfo::TRANSLATE_SPACE:
- return new space_char_hmotion_node(env->get_space_width());
+ return new space_char_hmotion_node(env->get_space_width(),
+ env->get_fill_color());
case charinfo::TRANSLATE_STRETCHABLE_SPACE:
- return new unbreakable_space_node(env->get_space_width());
+ return new unbreakable_space_node(env->get_space_width(),
+ env->get_fill_color());
case charinfo::TRANSLATE_DUMMY:
return new dummy_node;
case charinfo::TRANSLATE_HYPHEN_INDICATOR:
@@ -4304,7 +4554,7 @@ node *make_node(charinfo *ci, environment *env)
if (tem)
ci = tem;
macro *mac = ci->get_macro();
- if (mac)
+ if (mac && !ci->is_fallback())
return make_composite_node(ci, env);
else
return make_glyph_node(ci, env);
@@ -4333,11 +4583,14 @@ node *node::add_char(charinfo *ci, environment *env,
node *res;
switch (ci->get_special_translation()) {
case charinfo::TRANSLATE_SPACE:
- res = new space_char_hmotion_node(env->get_space_width(), this);
+ res = new space_char_hmotion_node(env->get_space_width(),
+ env->get_fill_color(), this);
*widthp += res->width();
return res;
case charinfo::TRANSLATE_STRETCHABLE_SPACE:
- res = new unbreakable_space_node(env->get_space_width(), this);
+ res = new unbreakable_space_node(env->get_space_width(),
+ env->get_fill_color(), this);
+ res->freeze_space();
*widthp += res->width();
*spacep += res->nspaces();
return res;
@@ -4350,7 +4603,7 @@ node *node::add_char(charinfo *ci, environment *env,
if (tem)
ci = tem;
macro *mac = ci->get_macro();
- if (mac) {
+ if (mac && !ci->is_fallback()) {
res = make_composite_node(ci, env);
if (res) {
res->next = this;
@@ -4385,7 +4638,7 @@ node *node::add_char(charinfo *ci, environment *env,
if (break_code) {
node *next1 = res->next;
res->next = 0;
- res = new break_char_node(res, break_code, next1);
+ res = new break_char_node(res, break_code, env->get_fill_color(), next1);
}
return res;
}
@@ -4453,7 +4706,8 @@ int vertical_size_node::force_tprint()
int hmotion_node::same(node *nd)
{
- return n == ((hmotion_node *)nd)->n;
+ return n == ((hmotion_node *)nd)->n
+ && col == ((hmotion_node *)nd)->col;
}
const char *hmotion_node::type()
@@ -4488,7 +4742,8 @@ hyphen_list *hmotion_node::get_hyphen_list(hyphen_list *tail)
int space_char_hmotion_node::same(node *nd)
{
- return n == ((space_char_hmotion_node *)nd)->n;
+ return n == ((space_char_hmotion_node *)nd)->n
+ && col == ((space_char_hmotion_node *)nd)->col;
}
const char *space_char_hmotion_node::type()
@@ -4517,7 +4772,8 @@ hyphen_list *space_char_hmotion_node::get_hyphen_list(hyphen_list *tail)
int vmotion_node::same(node *nd)
{
- return n == ((vmotion_node *)nd)->n;
+ return n == ((vmotion_node *)nd)->n
+ && col == ((vmotion_node *)nd)->col;
}
const char *vmotion_node::type()
@@ -4841,7 +5097,10 @@ int composite_node::force_tprint()
int glyph_node::same(node *nd)
{
- return ci == ((glyph_node *)nd)->ci && tf == ((glyph_node *)nd)->tf;
+ return ci == ((glyph_node *)nd)->ci
+ && tf == ((glyph_node *)nd)->tf
+ && gcol == ((glyph_node *)nd)->gcol
+ && fcol == ((glyph_node *)nd)->fcol;
}
const char *glyph_node::type()
@@ -4907,8 +5166,9 @@ int dbreak_node::force_tprint()
int break_char_node::same(node *nd)
{
- return (break_code == ((break_char_node *)nd)->break_code
- && same_node(ch, ((break_char_node *)nd)->ch));
+ return break_code == ((break_char_node *)nd)->break_code
+ && col == ((break_char_node *)nd)->col
+ && same_node(ch, ((break_char_node *)nd)->ch);
}
const char *break_char_node::type()
@@ -4938,7 +5198,9 @@ int line_start_node::force_tprint()
int space_node::same(node *nd)
{
- return n == ((space_node *)nd)->n && set == ((space_node *)nd)->set;
+ return n == ((space_node *)nd)->n
+ && set == ((space_node *)nd)->set
+ && col == ((space_node *)nd)->col;
}
const char *space_node::type()
@@ -4948,8 +5210,9 @@ const char *space_node::type()
int word_space_node::same(node *nd)
{
- return (n == ((word_space_node *)nd)->n
- && set == ((word_space_node *)nd)->set);
+ return n == ((word_space_node *)nd)->n
+ && set == ((word_space_node *)nd)->set
+ && col == ((word_space_node *)nd)->col;
}
const char *word_space_node::type()
@@ -4964,8 +5227,9 @@ int word_space_node::force_tprint()
int unbreakable_space_node::same(node *nd)
{
- return (n == ((unbreakable_space_node *)nd)->n
- && set == ((unbreakable_space_node *)nd)->set);
+ return n == ((unbreakable_space_node *)nd)->n
+ && set == ((unbreakable_space_node *)nd)->set
+ && col == ((unbreakable_space_node *)nd)->col;
}
const char *unbreakable_space_node::type()
@@ -5345,7 +5609,7 @@ int symbol_fontno(symbol s)
int is_good_fontno(int n)
{
- return n >= 0 && n < font_table_size && font_table[n] != NULL;
+ return n >= 0 && n < font_table_size && font_table[n] != 0;
}
int get_bold_fontno(int n)
diff --git a/contrib/groff/src/roff/troff/node.h b/contrib/groff/src/roff/troff/node.h
index a58afed..13295f4 100644
--- a/contrib/groff/src/roff/troff/node.h
+++ b/contrib/groff/src/roff/troff/node.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -97,6 +97,8 @@ struct node {
virtual node *merge_glyph_node(glyph_node *);
virtual tfont *get_tfont();
+ virtual color *get_glyph_color();
+ virtual color *get_fill_color();
virtual void tprint(troff_output_file *);
virtual void zero_width_tprint(troff_output_file *);
@@ -106,11 +108,13 @@ struct node {
virtual const char *type() = 0;
};
-inline node::node() : next(0), last(0)
+inline node::node()
+: next(0), last(0)
{
}
-inline node::node(node *n) : next(n), last(0)
+inline node::node(node *n)
+: next(n), last(0)
{
}
@@ -152,9 +156,10 @@ protected:
hunits n;
char set;
char was_escape_colon;
- space_node(hunits, int, int, node * = 0);
+ color *col; /* for grotty */
+ space_node(hunits, int, int, color *, node * = 0);
public:
- space_node(hunits d, node *p = 0);
+ space_node(hunits, color *, node * = 0);
#if 0
~space_node();
void *operator new(size_t);
@@ -192,9 +197,9 @@ class word_space_node : public space_node {
protected:
width_list *orig_width;
unsigned char unformat;
- word_space_node(hunits, int, width_list *, int, node * = 0);
+ word_space_node(hunits, int, color *, width_list *, int, node * = 0);
public:
- word_space_node(hunits, width_list *, node * = 0);
+ word_space_node(hunits, color *, width_list *, node * = 0);
~word_space_node();
node *copy();
int reread(int *);
@@ -208,9 +213,9 @@ public:
};
class unbreakable_space_node : public word_space_node {
- unbreakable_space_node(hunits, int, node * = 0);
+ unbreakable_space_node(hunits, int, color *, node * = 0);
public:
- unbreakable_space_node(hunits, node * = 0);
+ unbreakable_space_node(hunits, color *, node * = 0);
node *copy();
int reread(int *);
int same(node *);
@@ -279,11 +284,12 @@ protected:
hunits n;
unsigned char was_tab;
unsigned char unformat;
+ color *col; /* for grotty */
public:
- hmotion_node(hunits i, node *next = 0)
- : node(next), n(i), was_tab(0), unformat(0) {}
- hmotion_node(hunits i, int flag1, int flag2, node *next = 0)
- : node(next), n(i), was_tab(flag1), unformat(flag2) {}
+ hmotion_node(hunits i, color *c, node *next = 0)
+ : node(next), n(i), was_tab(0), unformat(0), col(c) {}
+ hmotion_node(hunits i, int flag1, int flag2, color *c, node *next = 0)
+ : node(next), n(i), was_tab(flag1), unformat(flag2), col(c) {}
node *copy();
int reread(int *);
int set_unformat_flag();
@@ -301,7 +307,7 @@ public:
class space_char_hmotion_node : public hmotion_node {
public:
- space_char_hmotion_node(hunits i, node *next = 0);
+ space_char_hmotion_node(hunits, color *, node * = 0);
node *copy();
void ascii_print(ascii_output_file *);
void asciify(macro *);
@@ -315,8 +321,9 @@ public:
class vmotion_node : public node {
vunits n;
+ color *col; /* for grotty */
public:
- vmotion_node(vunits i) : n(i) {}
+ vmotion_node(vunits i, color *c) : n(i), col(c) {}
void tprint(troff_output_file *);
node *copy();
vunits vertical_width();
@@ -458,13 +465,15 @@ public:
class special_node : public node {
macro mac;
tfont *tf;
+ color *gcol;
+ color *fcol;
int no_init_string;
void tprint_start(troff_output_file *);
void tprint_char(troff_output_file *, unsigned char);
void tprint_end(troff_output_file *);
public:
special_node(const macro &, int = 0);
- special_node(const macro &, tfont *, int = 0);
+ special_node(const macro &, tfont *, color *, color *, int = 0);
node *copy();
void tprint(troff_output_file *);
int same(node *);
@@ -479,10 +488,11 @@ class suppress_node : public node {
int emit_limits; // must we issue the extent of the area written out?
symbol filename;
char position;
+ int image_id;
public:
suppress_node(int, int);
- suppress_node(symbol f, char p);
- suppress_node(int, int, symbol f, char p);
+ suppress_node(symbol f, char p, int id);
+ suppress_node(int, int, symbol f, char p, int id);
node *copy();
void tprint(troff_output_file *);
hunits width();
@@ -502,10 +512,12 @@ struct hvpair {
class draw_node : public node {
int npoints;
font_size sz;
+ color *gcol;
+ color *fcol;
char code;
hvpair *point;
public:
- draw_node(char, hvpair *, int, font_size);
+ draw_node(char, hvpair *, int, font_size, color *, color *);
~draw_node();
hunits width();
vunits vertical_width();
@@ -582,3 +594,4 @@ public:
};
font_family *lookup_family(symbol);
+symbol get_font_name(int, environment *);
diff --git a/contrib/groff/src/roff/troff/number.cc b/contrib/groff/src/roff/troff/number.cc
index 5393842..8fed342 100644
--- a/contrib/groff/src/roff/troff/number.cc
+++ b/contrib/groff/src/roff/troff/number.cc
@@ -1,5 +1,6 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -234,7 +235,7 @@ static int start_number()
enum { OP_LEQ = 'L', OP_GEQ = 'G', OP_MAX = 'X', OP_MIN = 'N' };
-#define SCALE_INDICATOR_CHARS "icPmnpuvMsz"
+#define SCALE_INDICATOR_CHARS "icfPmnpuvMsz"
static int parse_term(units *v, int scale_indicator,
int parenthesised, int rigid);
@@ -320,6 +321,7 @@ static int parse_expr(units *v, int scale_indicator,
break;
case ':':
*v = *v > 0 || v2 > 0;
+ break;
case '+':
if (v2 < 0) {
if (*v < INT_MIN - v2)
@@ -590,6 +592,9 @@ static int parse_term(units *v, int scale_indicator,
if (divisor != 1)
*v /= divisor;
break;
+ case 'f':
+ *v = scale(*v, 65536, divisor);
+ break;
case 'p':
*v = scale(*v, units_per_inch, divisor*72);
break;
diff --git a/contrib/groff/src/roff/troff/request.h b/contrib/groff/src/roff/troff/request.h
index 5654b83..0433ac1 100644
--- a/contrib/groff/src/roff/troff/request.h
+++ b/contrib/groff/src/roff/troff/request.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -48,7 +48,8 @@ class macro : public request_or_macro {
macro_header *p;
const char *filename; // where was it defined?
int lineno;
- int length;
+ int len;
+ int empty_macro;
public:
macro();
~macro();
@@ -59,13 +60,16 @@ public:
void append_unsigned(unsigned int i);
void append_int(int i);
void append_str(const char *);
+ void set(unsigned char, int);
+ unsigned char get(int);
+ int length();
void invoke(symbol);
macro *to_macro();
void print_size();
int empty();
friend class string_iterator;
friend void chop_macro();
- friend void substring_macro();
+ friend void substring_request();
friend int operator==(const macro &, const macro &);
};
diff --git a/contrib/groff/src/roff/troff/symbol.cc b/contrib/groff/src/roff/troff/symbol.cc
index ce09e39..09f4c98 100644
--- a/contrib/groff/src/roff/troff/symbol.cc
+++ b/contrib/groff/src/roff/troff/symbol.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -29,6 +29,7 @@ char *symbol::block = 0;
int symbol::block_size = 0;
const symbol NULL_SYMBOL;
+const symbol EMPTY_SYMBOL("");
#ifdef BLOCK_SIZE
#undef BLOCK_SIZE
@@ -38,9 +39,9 @@ const int BLOCK_SIZE = 1024;
// the table will increase in size as necessary
// the size will be chosen from the following array
// add some more if you want
-// I think it unlikely that we'll need more than a million symbols
static const unsigned int table_sizes[] = {
-101, 503, 1009, 2003, 3001, 4001, 5003, 10007, 20011, 40009, 80021, 160001, 500009, 1000003, 0
+ 101, 503, 1009, 2003, 3001, 4001, 5003, 10007, 20011, 40009, 80021,
+ 160001, 500009, 1000003, 1500007, 2000003, 0
};
const double FULL_MAX = 0.3; // don't let the table get more than this full
@@ -73,10 +74,14 @@ inline void unused(void *) { }
symbol::symbol(const char *p, int how)
{
- if (p == 0 || *p == 0) {
+ if (p == 0) {
s = 0;
return;
}
+ if (*p == 0) {
+ s = "";
+ return;
+ }
if (table == 0) {
table_size = table_sizes[0];
table = (const char **)new char*[table_size];
@@ -147,4 +152,3 @@ symbol concat(symbol s1, symbol s2)
a_delete buf;
return res;
}
-
diff --git a/contrib/groff/src/roff/troff/symbol.h b/contrib/groff/src/roff/troff/symbol.h
index 88e0fff..5b7c9b1 100644
--- a/contrib/groff/src/roff/troff/symbol.h
+++ b/contrib/groff/src/roff/troff/symbol.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -36,10 +36,12 @@ public:
int operator !=(symbol) const;
const char *contents() const;
int is_null() const;
+ int is_empty() const;
};
extern const symbol NULL_SYMBOL;
+extern const symbol EMPTY_SYMBOL;
inline symbol::symbol() : s(0)
{
@@ -70,4 +72,9 @@ inline int symbol::is_null() const
return s == 0;
}
+inline int symbol::is_empty() const
+{
+ return s != 0 && *s == 0;
+}
+
symbol concat(symbol, symbol);
diff --git a/contrib/groff/src/roff/troff/token.h b/contrib/groff/src/roff/troff/token.h
index b87a0b1..59f2aa2 100644
--- a/contrib/groff/src/roff/troff/token.h
+++ b/contrib/groff/src/roff/troff/token.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -51,14 +51,16 @@ class token {
TOKEN_REQUEST,
TOKEN_RIGHT_BRACE,
TOKEN_SPACE, // ` ' -- ordinary space
- TOKEN_SPECIAL, // a special character -- \' \` \- \(xx
+ TOKEN_SPECIAL, // a special character -- \' \` \- \(xx \[xxx]
TOKEN_SPREAD, // \p -- break and spread output line
TOKEN_STRETCHABLE_SPACE, // \~
+ TOKEN_UNSTRETCHABLE_SPACE, // `\ '
TOKEN_TAB, // tab
TOKEN_TRANSPARENT, // \!
TOKEN_TRANSPARENT_DUMMY, // \)
+ TOKEN_ZERO_WIDTH_BREAK, // \:
TOKEN_EOF // end of file
- } type;
+ } type;
public:
token();
~token();
@@ -71,6 +73,7 @@ public:
int nspaces(); // 1 if space, 2 if double space, 0 otherwise
int space(); // is the current token a space?
int stretchable_space(); // is the current token a stretchable space?
+ int unstretchable_space(); // is the current token an unstretchable space?
int white_space(); // is the current token space or tab?
int special(); // is the current token a special character?
int newline(); // is the current token a newline?
@@ -85,6 +88,7 @@ public:
int right_brace();
int page_ejector();
int hyphen_indicator();
+ int zero_width_break();
int operator==(const token &); // need this for delimiters, and for conditions
int operator!=(const token &); // ditto
unsigned char ch();
@@ -103,6 +107,7 @@ extern token tok; // the current token
extern symbol get_name(int required = 0);
extern symbol get_long_name(int required = 0);
extern charinfo *get_optional_char();
+extern char *read_string();
extern void check_missing_character();
extern void skip_line();
extern void handle_initial_title();
@@ -137,6 +142,11 @@ inline int token::stretchable_space()
return type == TOKEN_STRETCHABLE_SPACE;
}
+inline int token::unstretchable_space()
+{
+ return type == TOKEN_UNSTRETCHABLE_SPACE;
+}
+
inline int token::special()
{
return type == TOKEN_SPECIAL;
@@ -215,4 +225,9 @@ inline int token::hyphen_indicator()
return type == TOKEN_HYPHEN_INDICATOR;
}
+inline int token::zero_width_break()
+{
+ return type == TOKEN_ZERO_WIDTH_BREAK;
+}
+
int has_arg();
diff --git a/contrib/groff/src/roff/troff/troff.h b/contrib/groff/src/roff/troff/troff.h
index 254c626..80d9f0b 100644
--- a/contrib/groff/src/roff/troff/troff.h
+++ b/contrib/groff/src/roff/troff/troff.h
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001
+/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002
Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
@@ -20,16 +20,16 @@ with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
+#include "lib.h"
+
#include <ctype.h>
-#include <string.h>
#include <time.h>
#include <stddef.h>
#include <stdlib.h>
#include <errno.h>
-#include "lib.h"
#include "assert.h"
+#include "color.h"
#include "device.h"
#include "searchpath.h"
@@ -43,6 +43,7 @@ extern units units_per_inch;
extern int ascii_output_flag;
extern int suppress_output_flag;
+extern int color_flag;
extern int is_html;
extern int tcommand_flag;
@@ -76,13 +77,18 @@ enum warning_type {
WARN_ESCAPE = 0100000,
WARN_SPACE = 0200000,
WARN_FONT = 0400000,
- WARN_IG = 01000000
+ WARN_IG = 01000000,
+ WARN_COLOR = 02000000
// change WARN_TOTAL if you add more warning types
};
-const int WARN_TOTAL = 01777777;
+const int WARN_TOTAL = 02777777;
int warning(warning_type, const char *,
const errarg & = empty_errarg,
const errarg & = empty_errarg,
const errarg & = empty_errarg);
+int output_warning(warning_type, const char *,
+ const errarg & = empty_errarg,
+ const errarg & = empty_errarg,
+ const errarg & = empty_errarg);
diff --git a/contrib/groff/src/roff/troff/troff.man b/contrib/groff/src/roff/troff/troff.man
index ac746dc..19bb624 100644
--- a/contrib/groff/src/roff/troff/troff.man
+++ b/contrib/groff/src/roff/troff/troff.man
@@ -1,25 +1,44 @@
+'\" t
.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+troff.man
-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.
+Last update : 9 Jan 2002
-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.
+This file is part of groff, the GNU roff type-setting system.
-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.
+Copyright (C) 1989, 2000, 2001, 2002 Free Software Foundation, Inc.
+
+written by James Clark
+
+modified by Werner Lemberg <wl@gnu.org>
+ Bernd Warken <bwarken@mayn.de>
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHOR, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
..
.
-.\" define a string tx for the TeX logo
-.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-.el .ds tx TeX
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.mso www.tmac
+.
+.if n \{\
+. mso tty-char.tmac
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.if '\*[.T]'dvi' \
+. ftr CB CW
.
.de TQ
.br
@@ -34,22 +53,19 @@ the original English.
.el .TP "\\$1"
..
.
-.\" The BSD man macros can't handle " in arguments to font change macros,
-.\" so use \(ts instead of ".
-.tr \(ts"
.
+.\" --------------------------------------------------------------------
+.\" Title
+.\" --------------------------------------------------------------------
.
.TH @G@TROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.
.SH NAME
+@g@troff \- the troff processor of the groff text formatting system
.
.
-@g@troff \- format documents
-.
-.
+.\" --------------------------------------------------------------------
.SH SYNOPSIS
-.
+.\" --------------------------------------------------------------------
.
.nr a \n(.j
.ad l
@@ -61,90 +77,75 @@ the original English.
.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
.el .RB "[\ " "\\$1" "\ ]"
..
-.OP \-abivzCERU
-.OP \-w name
-.OP \-W name
+.OP \-abcivzCERU
.OP \-d cs
.OP \-f fam
+.OP \-F dir
.OP \-m name
+.OP \-M dir
.OP \-n num
.OP \-o list
.OP \-r cn
.OP \-T name
-.OP \-F dir
-.OP \-M dir
+.OP \-w name
+.OP \-W name
.RI "[\ " files\|.\|.\|. "\ ]"
.br
.ad \na
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
+.P
+It is possible to have whitespace between a command line option and
+its parameter.
.
.
+.\" --------------------------------------------------------------------
.SH DESCRIPTION
-.
+.\" --------------------------------------------------------------------
.
This manual page describes the GNU version of
-.BR troff ,
-which is part of the groff document formatting system.
-It is highly compatible with UNIX troff.
-Usually it should be invoked using the groff command, which will
-also run preprocessors and postprocessors in the appropriate
-order and with the appropriate options.
+.BR troff .
+It is part of the groff document formatting system.
.
+It is functionally compatible with UNIX troff, but has many extensions,
+see
+.BR \%groff_diff (@MAN7EXT@).
+Usually it should be invoked using the
+.BR groff (@MAN1EXT@)
+command which will also run preprocessors and postprocessors in the
+appropriate order and with the appropriate options.
.
-.SH OPTIONS
.
+.\" --------------------------------------------------------------------
+.SH OPTIONS
+.\" --------------------------------------------------------------------
.
.TP \w'\-dname=s'u+2n
.B \-a
Generate an
.SM ASCII
approximation of the typeset output.
+.
.TP
.B \-b
-Print a backtrace with each warning or error message. This backtrace
-should help track down the cause of the error. The line numbers given
-in the backtrace may not always be correct:
-.BR troff 's
-idea of line numbers
-gets confused by
+Print a backtrace with each warning or error message.
+.
+This backtrace should help track down the cause of the error.
+.
+The line numbers given in the backtrace may not always be correct, for
+.BR @g@troff 's
+idea of line numbers gets confused by
.B as
or
.B am
requests.
+.
.TP
-.B \-i
-Read the standard input after all the named input files have been
-processed.
-.TP
-.B \-v
-Print the version number.
-.TP
-.BI \-w name
-Enable warning
-.IR name .
-Available warnings are described in
-the Warnings subsection below.
-Multiple
-.B \-w
-options are allowed.
-.TP
-.BI \-W name
-Inhibit warning
-.IR name .
-Multiple
-.B \-W
-options are allowed.
-.TP
-.B \-E
-Inhibit all error messages.
-.TP
-.B \-z
-Suppress formatted output.
+.B \-c
+Disable color output (always disabled in compatibility mode).
+.
.TP
.B \-C
Enable compatibility mode.
+.
.TP
.BI \-d cs
.TQ
@@ -157,11 +158,42 @@ to be a string
.IR s ;
.I c
must be a one letter name.
+.
+.TP
+.B \-E
+Inhibit all error messages of
+.BR @g@troff .
+Note that this doesn't affect messages output to standard error by macro
+packages using the
+.B tm
+or
+.B tm1
+requests.
+.
.TP
.BI \-f fam
Use
.I fam
as the default font family.
+.
+.TP
+.BI \-F dir
+Search in directory (or directory path)
+.I dir
+for subdirectories
+.BI dev name
+.RI ( name
+is the name of the device) and there for the
+.B DESC
+file and font files.
+.I dir
+is scanned before all other font directories.
+.
+.TP
+.B \-i
+Read the standard input after all the named input files have been
+processed.
+.
.TP
.BI \-m name
Read in the file
@@ -169,36 +201,28 @@ Read in the file
If it isn't found, try
.BI tmac. name
instead.
+.
It will be first searched for in directories given with the
.B \-M
-command line option, then in directories given
-in the
+command line option, then in directories given in the
.B GROFF_TMAC_PATH
environment variable, then in the current directory (only if in unsafe
mode), the home directory, @SYSTEMMACRODIR@, @LOCALMACRODIR@, and
@MACRODIR@.
+.
.TP
-.B \-U
-Unsafe mode.
-This will enable the following requests:
-.BR .open ,
-.BR .opena ,
-.BR .pso ,
-.BR .sy ,
-and
-.BR .pi .
-For security reasons, these potentially dangerous requests are disabled
-otherwise. It will also add the current directory to the macro search path.
-.TP
-.B \-R
-Don't load
-.B troffrc
-and
-.BR troffrc-end .
+.BI \-M dir
+Search directory (or directory path)
+.I dir
+for macro files.
+.
+This is scanned before all other macro directories.
+.
.TP
.BI \-n num
Number the first page
.IR num .
+.
.TP
.BI \-o list
Output only pages in
@@ -218,8 +242,9 @@ means print every page up to
.IB n \-
means print every page from
.IR n .
-.B Troff
+.B @g@troff
will exit after printing the last page in the list.
+.
.TP
.BI \-r cn
.TQ
@@ -234,2227 +259,339 @@ to
must be a one character name;
.I n
can be any troff numeric expression.
+.
+.TP
+.B \-R
+Don't load
+.B troffrc
+and
+.BR troffrc-end .
+.
.TP
.BI \-T name
Prepare output for device
.IR name ,
rather than the default
.BR @DEVICE@ .
-.TP
-.BI \-F dir
-Search in directory (or directory path)
-.I dir
-for subdirectories
-.BI dev name
-.RI ( name
-is the name of the device) and there for the
-.B DESC
-file and font files.
-.I dir
-is scanned before all other font directories.
-.TP
-.BI \-M dir
-Search directory (or directory path)
-.I dir
-for macro files.
-This is scanned before all other macro directories.
-.
-.
-.SH USAGE
-.
-.
-Only the features not in UNIX troff are described here.
.
-.SS Long names
-.
-The names of number registers, fonts, strings/macros/diversions,
-special characters can be of any length. In escape sequences, where
-you can use
-.BI ( xx
-for a two character name, you can use
-.BI [ xxx ]
-for a name of arbitrary length:
-.TP
-.BI \e[ xxx ]
-Print the special character called
-.IR xxx .
-.TP
-.BI \ef[ xxx ]
-Set font
-.IR xxx .
.TP
-.BI \e*[ xxx ]
-Interpolate string
-.IR xxx .
-.TP
-.BI \en[ xxx ]
-Interpolate number register
-.IR xxx .
-.
-.SS Fractional pointsizes
-.
-A
-.I
-scaled point
-is equal to 1/sizescale
-points, where
-sizescale is specified in the
-.B DESC
-file (1 by default).
-There is a new scale indicator
-.B z
-which has the effect of multiplying by sizescale.
-Requests and escape sequences in troff
-interpret arguments that represent a pointsize as being in units
-of scaled points, but they evaluate each such argument
-using a default scale indicator of
-.BR z .
-Arguments treated in this way are
-the argument to the
-.B ps
-request,
-the third argument to the
-.B cs
-request,
-the second and fourth arguments to the
-.B tkf
-request,
-the argument to the
-.B \eH
-escape sequence,
-and those variants of the
-.B \es
-escape sequence that take a numeric expression as their argument.
-.LP
-For example, suppose sizescale is 1000;
-then a scaled point will be equivalent to a millipoint;
-the request
-.B .ps 10.25
-is equivalent to
-.B .ps 10.25z
-and so sets the pointsize to 10250 scaled points,
-which is equal to 10.25 points.
-.LP
-The number register
-.B \en[.s]
-returns the pointsize in points as decimal fraction.
-There is also a new number register
-.B \en[.ps]
-that returns the pointsize in scaled points.
-.LP
-It would make no sense to use the
-.B z
-scale indicator in a numeric expression
-whose default scale indicator was neither
-.B u
-nor
-.BR z ,
-and so
-.B troff
-disallows this.
-Similarly it would make no sense to use a scaling indicator
-other than
-.B z
-or
-.B u
-in a numeric expression whose default scale indicator was
-.BR z ,
-and so
-.B troff
-disallows this as well.
-.LP
-There is also new scale indicator
-.B s
-which multiplies by the number of units in a scaled point.
-So, for example,
-.B \en[.ps]s
-is equal to
-.BR 1m .
-Be sure not to confuse the
-.B s
-and
-.B z
-scale indicators.
-.
-.SS Numeric expressions
+.B \-U
+Unsafe mode.
.
-.LP
-Spaces are permitted in a number expression within parentheses.
-.LP
-.B M
-indicates a scale of 100ths of an em.
-.TP
-.IB e1 >? e2
-The maximum of
-.I e1
-and
-.IR e2 .
-.TP
-.IB e1 <? e2
-The minimum of
-.I e1
+This will enable the following requests:
+.BR open ,
+.BR opena ,
+.BR pso ,
+.BR sy ,
and
-.IR e2 .
-.TP
-.BI ( c ; e )
-Evaluate
-.I e
-using
-.I c
-as the default scaling indicator.
-If
-.I c
-is missing, ignore scaling indicators in the evaluation of
-.IR e .
+.BR pi .
+For security reasons, these potentially dangerous requests are disabled
+otherwise.
.
-.SS New escape sequences
+It will also add the current directory to the macro search path.
.
.TP
-.BI \eA' anything '
-This expands to
-.B 1
-or
-.B 0
-according as
-.I anything
-is or is not acceptable as the name of a string, macro, diversion,
-number register, environment or font.
-It will return
-.B 0
-if
-.I anything
-is empty.
-This is useful if you want to lookup user input in some sort of
-associative table.
-.TP
-.BI \eB' anything '
-This expands to
-.B 1
-or
-.B 0
-according as
-.I anything
-is or is not a valid numeric expression.
-It will return
-.B 0
-if
-.I anything
-is empty.
-.TP
-.BI \eC' xxx '
-Typeset character named
-.IR xxx .
-Normally it is more convenient to use
-.BI \e[ xxx ]\fR.
-But
-.B \eC
-has the advantage that it is compatible with recent versions of
-.SM UNIX
-and is available in compatibility mode.
-.TP
-.B \eE
-This is equivalent to an escape character,
-but it's not interpreted in copy-mode.
-For example, strings to start and end superscripting could be defined
-like this:
-.RS
-.IP
-\&.ds { \ev'\-.3m'\es'\eEn[.s]*6u/10u'
-.br
-\&.ds } \es0\ev'.3m'
-.LP
-The use of
-.B \eE
-ensures that these definitions will work even if
-.B \e*{
-gets interpreted in copy-mode
-(for example, by being used in a macro argument).
-.RE
-.TP
-.BI \eN' n '
-Typeset the character with code
-.I n
-in the current font.
-.I 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
-.I not
-be searched.
-The
-.B \eN
-escape sequence can be conveniently used on conjunction with the
-.B char
-request:
-.RS
-.IP
-.B
-\&.char \e[phone] \ef(ZD\eN'37'
-.RE
-.IP
-The code of each character is given in the fourth column in the font
-description file after the
-.B charset
-command.
-It is possible to include unnamed characters in the font description
-file by using a name of
-.BR \-\-\- ;
-the
-.B \eN
-escape sequence is the only way to use these.
-.TP
-.BI \eR' name\ \(+-n '
-This has the same effect as
-.RS
-.IP
-.BI .nr\ name\ \(+-n
-.RE
-.TP
-.BI \es( nn
-.TQ
-.BI \es\(+-( nn
-Set the point size to
-.I nn
-points;
-.I nn
-must be exactly two digits.
-.TP
-.BI \es[\(+- n ]
-.TQ
-.BI \es\(+-[ n ]
-.TQ
-.BI \es'\(+- n '
-.TQ
-.BI \es\(+-' n '
-Set the point size to
-.I n
-scaled points;
-.I n
-is a numeric expression with a default scale indicator of
-.BR z .
-.TP
-.BI \eV x
-.TQ
-.BI \eV( xx
-.TQ
-.BI \eV[ xxx ]
-Interpolate the contents of the environment variable
-.IR xxx ,
-as returned by
-.BR getenv (3).
-.B \eV
-is interpreted in copy-mode.
-.TP
-.BI \eY x
-.TQ
-.BI \eY( xx
-.TQ
-.BI \eY[ xxx ]
-This is approximately equivalent to
-.BI \eX'\e*[ xxx ]'\fR.
-However the contents of the string or macro
-.I xxx
-are not interpreted;
-also it is permitted for
-.I xxx
-to have been defined as a macro and thus contain newlines
-(it is not permitted for the argument to
-.B \eX
-to contain newlines).
-The inclusion of newlines requires an extension to the UNIX troff output
-format, and will confuse drivers that do not know about this
-extension.
-.TP
-.BI \eZ' anything '
-Print anything and then restore the horizontal and vertical
-position;
-.I anything
-may not contain tabs or leaders.
-.TP
-.B \e$0
-The name by which the current macro was invoked.
-The
-.B als
-request can make a macro have more than one name.
-.TP
-.B \e$*
-In a macro, the concatenation of all the arguments separated by spaces.
-.TP
-.B \e$@
-In a macro, the concatenation of all the arguments with each surrounded by
-double quotes, and separated by spaces.
-.TP
-.BI \e$( nn
-.TQ
-.BI \e$[ nnn ]
-In a macro, this gives the
-.IR nn -th
-or
-.IR nnn -th
-argument.
-Macros can have an unlimited number of arguments.
-.TP
-.BI \e? anything \e?
-When used in a diversion, this will transparently embed
-.I anything
-in the diversion.
-.I anything
-is read in copy mode.
-When the diversion is reread,
-.I anything
-will be interpreted.
-.I anything
-may not contain newlines; use
-.B \e!\&
-if you want to embed newlines in a diversion.
-The escape sequence
-.B \e?\&
-is also recognised in copy mode and turned into a single internal
-code; it is this code that terminates
-.IR anything .
-Thus
-.RS
-.RS
-.ft B
-.nf
-.ne 15
-\&.nr x 1
-\&.nf
-\&.di d
-\e?\e\e?\e\e\e\e?\e\e\e\e\e\e\e\enx\e\e\e\e?\e\e?\e?
-\&.di
-\&.nr x 2
-\&.di e
-\&.d
-\&.di
-\&.nr x 3
-\&.di f
-\&.e
-\&.di
-\&.nr x 4
-\&.f
-.fi
-.ft
-.RE
-.RE
-.IP
-will print
-.BR 4 .
-.TP
-.B \e/
-This 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 producing \fIf\fR)\fR,
-which is ugly.
-Inserting
-.B \e/
-produces
-.ie \n(.g \fIf\/\fR)\fR
-.el \fIf\|\fR)\fR
-and avoids this problem.
-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.
-.TP
-.B \e,
-This 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.
-For example, inserting
-.B \e,
-between the parenthesis and the f changes
-\fR(\fIf\fR to
-.ie \n(.g \fR(\,\fIf\fR.
-.el \fR(\^\fIf\fR.
-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.
-.TP
-.B \e)
-Like
-.B \e&
-except that it behaves like a character declared with the
-.B cflags
-request to be transparent for the purposes of end of sentence recognition.
-.TP
-.B \e~
-This produces an unbreakable space that stretches like a normal inter-word
-space when a line is adjusted.
-.TP
-.B \e:
-This causes the insertion of a zero-width break point.
-It is equal to
-.B \e%
-but without insertion of a soft hyphen character.
-.TP
-.B \e#
-Everything up to and including the next newline is ignored.
-This is interpreted in copy mode.
-This is like
-.B \e"
-except that
-.B \e"
-does not ignore the terminating newline.
-.
-.SS New requests
+.B \-v
+Print the version number.
.
.TP
-.BI .aln\ xx\ yy
-Create an alias
-.I xx
-for number register object named
-.IR yy .
-The new name and the old name will be exactly equivalent.
-If
-.I yy
-is undefined, a warning of type
-.B reg
-will be generated, and the request will be ignored.
-.TP
-.BI .als\ xx\ yy
-Create an alias
-.I xx
-for request, string, macro, or diversion object named
-.IR yy .
-The new name and the old name will be exactly equivalent (it is similar to a
-hard rather than a soft link).
-If
-.I yy
-is undefined, a warning of type
-.B mac
-will be generated, and the request will be ignored.
-The
-.BR de ,
-.BR am ,
-.BR di ,
-.BR da ,
-.BR ds ,
-and
-.B as
-requests only create a new object if the name of the macro, diversion
-or string diversion is currently undefined or if it is defined to be a
-request; normally they modify the value of an existing object.
-.TP
-.BI .am1\ xx\ yy
-Similar to
-.BR .am ,
-but compatibility mode is switched off during execution.
-On entry, the current compatibility mode is saved and restored at exit.
-.TP
-.BI .asciify\ xx
-This request `unformats' the diversion
-.I xx
-in such a way that
-.SM ASCII
-and space characters (and some escape sequences) that were formatted and
-diverted into
-.I xx
-will be treated like ordinary input characters when
-.I xx
-is reread.
-Useful for diversions in conjunction with the
-.B .writem
-request.
-It can be also used for gross hacks; for example, this
-.RS
-.IP
-.ne 7v+\n(.Vu
-.ft B
-.nf
-\&.tr @.
-\&.di x
-\&@nr n 1
-\&.br
-\&.di
-\&.tr @@
-\&.asciify x
-\&.x
-.fi
-.RE
-.IP
-will set register
-.B n
-to 1.
-Note that glyph information (font, font size, etc.) is not preserved; use
-.B .unformat
-instead.
-.TP
-.B .backtrace
-Print a backtrace of the input stack on stderr.
-.TP
-.BI .blm\ xx
-Set the blank line macro to
-.IR xx .
-If there is a blank line macro,
-it will be invoked when a blank line is encountered instead of the usual
-troff behaviour.
-.TP
-.BI .box\ xx
-.TQ
-.BI .boxa\ xx
-These requests are similar to the
-.B di
-and
-.B da
-requests with the exception that a partially filled line will not become
-part of the diversion (i.e., the diversion always starts with a new line)
-but restored after ending the diversion, discarding the partially filled
-line which possibly comes from the diversion.
-.TP
-.B .break
-Break out of a while loop.
-See also the
-.B while
-and
-.B continue
-requests.
-Be sure not to confuse this with the
-.B br
-request.
-.TP
-.B .brp
-This is the same as
-.BR \ep .
-.TP
-.BI .cflags\ n\ c1\ c2\|.\|.\|.
-Characters
-.IR c1 ,
-.IR c2 ,\|.\|.\|.
-have properties determined by
-.IR n ,
-which is ORed from the following:
-.RS
-.TP
-1
-the character ends sentences
-(initially characters
-.B .?!\&
-have this property);
-.TP
-2
-lines can be broken before the character
-(initially no characters have this property);
-a line will not be broken at a character with this property
-unless the characters on each side both have non-zero
-hyphenation codes.
-.TP
-4
-lines can be broken after the character
-(initially characters
-.B \-\e(hy\e(em
-have this property);
-a line will not be broken at a character with this property
-unless the characters on each side both have non-zero
-hyphenation codes.
-.TP
-8
-the character overlaps horizontally
-(initially characters
-.B \e(ul\e(rn\e(ru
-have this property);
-.TP
-16
-the character overlaps vertically
-(initially character
-.B \e(br
-has this property);
-.TP
-32
-an end of sentence character followed by any number of characters
-with this property will be treated
-as the end of a sentence if followed by a newline or two spaces;
-in other words
-the character is transparent for the purposes of end of sentence
-recognition;
-this is the same as having a zero space factor in \*(tx
-(initially characters
-.B \(ts')]*\e(dg\e(rq
-have this property).
-.RE
-.TP
-.BI .char\ c\ string
-Define character
-.I c
-to be
-.IR string .
-Every time character
-.I c
-needs to be printed,
-.I string
-will be processed in a temporary environment and the result
-will be wrapped up into a single object.
-Compatibility mode will be turned off
-and the escape character will be set to
-.B \e
-while
-.I string
-is being processed.
-Any emboldening, constant spacing or track kerning will be applied
-to this object rather than to individual characters in
-.IR 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
-.B tr
-request;
-it can be made the leader character by the
-.B lc
-request;
-repeated patterns can be drawn with the character using the
-.B \el
-and
-.B \eL
-escape sequences;
-words containing the character can be hyphenated
-correctly, if the
-.B 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
-.BR char .
-A character definition can be removed with the
-.B rchar
-request.
-.TP
-.BI .chop\ xx
-Chop the last character off macro, string, or diversion
-.IR xx .
-This is useful for removing the newline from the end of diversions
-that are to be interpolated as strings.
-.TP
-.BI .close\ stream
-Close the stream named
-.IR stream ;
-.I stream
-will no longer be an acceptable argument to the
-.B write
-request.
-See the
-.B open
-request.
-.TP
-.B .continue
-Finish the current iteration of a while loop.
-See also the
-.B while
-and
-.B break
-requests.
-.TP
-.BI .cp\ n
-If
-.I n
-is non-zero or missing, enable compatibility mode, otherwise
-disable it.
-In compatibility mode, long names are not recognised, and the
-incompatibilities caused by long names do not arise.
-.TP
-.BI .dei\ xx\ yy
-Define macro indirectly.
-The following example
-.RS
-.IP
-.ne 2v+\n(.Vu
-.ft B
-.nf
-\&.ds xx aa
-\&.ds yy bb
-\&.dei xx yy
-.fi
-.RE
-.IP
-is equivalent to
-.RS
-.IP
-.B
-\&.de aa bb
-.RE
-.TP
-.BI .de1\ xx\ yy
-Similar to
-.BR .de ,
-but compatibility mode is switched off during execution.
-On entry, the current compatibility mode is saved and restored at exit.
-.TP
-.BI .do\ xxx
-Interpret
-.I .xxx
-with compatibility mode disabled.
-For example,
-.RS
-.IP
-.B
-\&.do fam T
-.LP
-would have the same effect as
-.IP
-.B
-\&.fam T
-.LP
-except that it would work even if compatibility mode had been enabled.
-Note that the previous compatibility mode is restored before any files
-sourced by
-.I xxx
-are interpreted.
-.RE
-.TP
-.B .ecs
-Save current escape character.
-.TP
-.B .ecr
-Restore escape character saved with
-.BR ecs .
-Without a previous call to
-.BR ecs ,
-.RB ` \e '
-will be the new escape character.
-.TP
-.BI .evc\ xx
-Copy the contents of environment
-.I xx
-to the current environment.
-No pushing or popping of environents will be done.
-.TP
-.BI .fam\ xx
-Set the current font family to
-.IR xx .
-The current font family is part of the current environment.
-If
-.I xx
-is missing, switch back to previous font family.
-See the description of the
-.B sty
-request for more information on font families.
-.TP
-.BI .fspecial\ f\ s1\ s2\|.\|.\|.
-When the current font is
-.IR f ,
-fonts
-.IR s1 ,
-.IR s2 ,\|.\|.\|.
-will be special, that is, they will searched for characters not in
-the current font.
-Any fonts specified in the
-.B special
-request will be searched after fonts specified in the
-.B fspecial
-request.
-.TP
-.BI .ftr\ f\ g
-Translate font
-.I f
-to
-.IR g .
-Whenever a font named
-.I f
-is referred to in
-.B \ef
-escape sequence,
-or in the
-.BR ft ,
-.BR ul ,
-.BR bd ,
-.BR cs ,
-.BR tkf ,
-.BR special ,
-.BR fspecial ,
-.BR fp ,
-or
-.BR sty
-requests,
-font
-.I g
-will be used.
-If
-.I g
-is missing,
-or equal to
-.I f
-then font
-.I f
-will not be translated.
-.TP
-.BI .hcode \ c1\ code1\ c2\ code2\|.\|.\|.
-Set the hyphenation code of character
-.I c1
-to
-.I code1
-and that of
-.I c2
-to
-.IR code2 .
-A hyphenation code must be a single input
-character (not a special character) other than a digit or a space.
-Initially each lower-case letter has a hyphenation code, which
-is itself, and each upper-case letter has a hyphenation code
-which is the lower case version of itself.
-See also the
-.B hpf
-request.
-.TP
-.BI .hla\ lang
-Set the current hyphenation language to
-.IR lang .
-Hyphenation exceptions specified with the
-.B hw
-request and hyphenation patterns specified with the
-.B hpf
-request are both associated with the current hyphenation language.
-The
-.B hla
-request is usually invoked by the
-.B troffrc
-file.
-.TP
-.BI .hlm\ n
-Set the maximum number of consecutive hyphenated lines to
-.IR n .
-If
-.I n
-is negative, there is no maximum.
-The default value is \-1.
-This value is associated with the current environment.
-Only lines output from an environment count towards the maximum associated
-with that environment.
-Hyphens resulting from
-.B \e%
-are counted; explicit hyphens are not.
-.TP
-.BI .hpf\ file
-Read hyphenation patterns from
-.IR file ;
-this will be searched for in the same way that
-.IB name .tmac
-is searched for when the
-.BI \-m name
-option is specified.
-It should have the same format as the argument to
-the \epatterns primitive in \*(tx;
-the letters appearing in this file are interpreted as hyphenation
-codes.
-A
-.B %
-character in the patterns file introduces a comment that continues
-to the end of the line.
-The set of hyphenation patterns is associated with the current language
-set by the
-.B hla
-request.
-The
-.B hpf
-request
-is usually invoked by the
-.B troffrc
-file.
-.TP
-.BI .hym\ n
-Set the
-.I hyphenation margin
-to
-.IR n :
-when the current adjustment mode is not
-.BR b ,
-the line will not be hyphenated if the line is no more than
-.I n
-short.
-The default hyphenation margin is 0.
-The default scaling indicator for this request is
-.IR m .
-The hyphenation margin is associated with the current environment.
-The current hyphenation margin is available in the
-.B \en[.hym]
-register.
-.TP
-.BI .hys\ n
-Set the
-.I hyphenation space
-to
-.IR n :
-when the current adjustment mode is
-.B b
-don't hyphenate the line if the line can be justified by adding no more than
-.I n
-extra space to each word space.
-The default hyphenation space is 0.
-The default scaling indicator for this request is
-.BR m .
-The hyphenation space is associated with the current environment.
-The current hyphenation space is available in the
-.B \en[.hys]
-register.
-.TP
-.BI .kern\ n
-If
-.I n
-is non-zero or missing, enable pairwise kerning, otherwise disable it.
-.TP
-.BI .length\ xx\ string
-Compute the length of
-.I string
-and return it in the number register
-.I xx
-(which is not necessarily defined before).
-.TP
-.BI .linetabs\ n
-If
-.I n
-is non-zero or missing, enable line-tabs mode, otherwise disable it (which
-is the default).
-In line-tabs mode, tab distances are computed relative to the (current)
-output line.
-Otherwise they are taken relative to the input line.
-For example, the following
-.RS
-.IP
-.ne 6v+\n(.Vu
-.ft B
-.nf
-\&.ds x a\et\ec
-\&.ds y b\et\ec
-\&.ds z c
-\&.ta 1i 3i
-\e*x
-\e*y
-\e*z
-.fi
-.RE
-.IP
-yields
-.RS
-.IP
-a b c
-.RE
-.IP
-In line-tabs mode, the same code gives
-.RS
-.IP
-a b c
-.RE
-.IP
-Line-tabs mode is associated with the current environment; the read-only
-number register
-.B \\en[.linetabs]
-is set to\~1 if in line-tabs mode, and 0 otherwise.
-.TP
-.BI .mso\ file
-The same as the
-.B so
-request except that
-.I file
-is searched for in the same directories as macro files for the
-the
-.B \-m
-command line option.
-If the file name to be included
-has the form
-.IB name .tmac
-and it isn't found,
-.B mso
-tries to include
-.BI tmac. name
-instead and vice versa.
-.TP
-.BI .nop \ anything
-Execute
-.IR anything .
-This is similar to `.if\ 1'.
-.TP
-.B .nroff
-Make the
-.B n
-built-in condition true
-and the
-.B t
-built-in condition false.
-This can be reversed using the
-.B troff
-request.
-.TP
-.BI .open\ stream\ filename
-Open
-.I filename
-for writing and associate the stream named
-.I stream
-with it.
-See also the
-.B close
-and
-.B write
-requests.
-.TP
-.BI .opena\ stream\ filename
-Like
-.BR open ,
-but if
-.I filename
-exists, append to it instead of truncating it.
-.TP
-.B .pnr
-Print the names and contents of all currently defined number registers
-on stderr.
-.TP
-.BI .psbb \ filename
-Get the bounding box of a PostScript image
-.IR filename .
-This file must conform to Adobe's Document Structuring Conventions; the
-command looks for a
-.B %%BoundingBox
-comment to extract the bounding box values.
-After a successful call, the coordinates (in PostScript units) of the lower
-left and upper right corner can be found in the registers
-.BR \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 behaves like the
-.B so
-request except that input comes from the standard output of
-.IR command .
-.TP
-.B .ptr
-Print the names and positions of all traps (not including input line
-traps and diversion traps) on stderr. Empty slots in the page trap
-list are printed as well, because they can affect the priority of
-subsequently planted traps.
-.TP
-.BI .rchar\ c1\ c2\|.\|.\|.
-Remove the definitions of characters
-.IR c1 ,
-.IR c2 ,\|.\|.\|.
-This undoes the effect of a
-.B char
-request.
-.TP
-.B .return
-Within a macro, return immediately.
-No effect otherwise.
-.TP
-.B .rj
-.TQ
-.BI .rj\ n
-Right justify the next
-.I n
-input lines.
-Without an argument right justify the next input line.
-The number of lines to be right justified is available in the
-.B \en[.rj]
-register.
-This implicitly does
-.BR .ce\ 0 .
-The
-.B ce
-request implicitly does
-.BR .rj\ 0 .
-.TP
-.BI .rnn \ xx\ yy
-Rename number register
-.I xx
-to
-.IR yy .
-.TP
-.BI .shc\ c
-Set the soft hyphen character to
-.IR c .
-If
-.I c
-is omitted,
-the soft hyphen character will be set to the default
-.BR \e(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 break point,
-then the line will not be broken at that point.
-Neither definitions (specified with the
-.B char
-request)
-nor translations (specified with the
-.B tr
-request)
-are considered when finding the soft hyphen character.
-.TP
-.BI .shift\ n
-In a macro, shift the arguments by
-.I n
-positions:
-argument
-.I i
-becomes argument
-.IR i \- n ;
-arguments 1 to
-.I n
-will no longer be available.
-If
-.I n
-is missing,
-arguments will be shifted by 1.
-Shifting by negative amounts is currently undefined.
-.TP
-.BI .special\ s1\ s2\|.\|.\|.
-Fonts
-.IR s1 ,
-.IR s2 ,
-are special and will be searched for characters not in the
-current font.
-.TP
-.BI .sty\ n\ f
-Associate style
-.I f
-with font position
-.IR n .
-A font position can be associated either with a font or
-with a style.
-The current font is the index of a font position and so is also
-either a font or a style.
-When it is a style, the font that is actually used is the font the
-name of which is the concatenation of the name of the current family
-and the name of the current style.
-For example, if the current font is 1 and font position 1 is
-associated with style
-.B R
-and the current
-font family is
-.BR T ,
-then font
-.BR TR
-will be used.
-If the current font is not a style, then the current family is ignored.
-When the requests
-.BR cs ,
-.BR bd ,
-.BR tkf ,
-.BR uf ,
-or
-.B fspecial
-are applied to a style,
-then they will instead be applied to the member of the
-current family corresponding to that style.
-The default family can be set with the
-.B \-f
-option.
-The styles command in the
-.SM DESC
-file controls which font positions
-(if any) are initially associated with styles rather than fonts.
-.TP
-.BI .substring\ xx\ n1\ [ n2 ]
-Replace the string 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 .
-When the current font is
-.I f
-the width of every character will be increased by an amount
-between
-.I n1
-and
-.IR n2 ;
-when the current point size is less than or equal to
-.I s1
-the width will be increased by
-.IR n1 ;
-when it is greater than or equal to
-.I s2
-the width will be increased by
-.IR n2 ;
-when the point size is greater than or equal to
-.I s1
-and less than or equal to
-.I s2
-the increase in width is a linear function of the point size.
-.TP
-.BI .tm1\ string
-Similar to the
-.B tm
-request,
-.I string
-is read in copy mode and written on the standard error, but an initial
-double quote in
-.I string
-is stripped off to allow initial blanks.
-.TP
-.BI .tmc\ string
-Similar to
-.BR tm1
-but without writing a final newline.
-.TP
-.BI .trf\ filename
-Transparently output the contents of file
-.IR filename .
-Each line is output as it would be were it preceded by
-.BR \e! ;
-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
-.I x
-containing the contents of file
-.IR f ,
-using
-.RS
-.IP
-.BI .di\ x
-.br
-.BI .trf\ f
-.br
-.B .di
-.LP
-Unlike with the
-.B cf
-request,
-the file cannot contain characters such as
-.SM NUL
-that are not legal troff input characters.
-.RE
-.TP
-.B .trnt abcd
-This is the same as the
-.B tr
-request except that the translations do not apply to text that is
-transparently throughput into a diversion with
-.BR \e! .
-For example,
-.RS
-.IP
-.nf
-.ft B
-\&.tr ab
-\&.di x
-\e!.tm a
-\&.di
-\&.x
-.fi
-.ft
-.LP
-will print
-.BR b ;
-if
-.B trnt
-is used instead of
-.B tr
-it will print
-.BR a .
-.RE
-.TP
-.B .troff
-Make the
-.B n
-built-in condition false,
-and the
-.B t
-built-in condition true.
-This undoes the effect of the
-.B nroff
-request.
-.TP
-.BI .unformat\ xx
-This request `unformats' the diversion
-.IR xx .
-Contrary to the
-.B .asciify
-request, which tries to convert formatted elements of the diversion back
-to input tokens as much as possible,
-.B .unformat
-will only handle tabs and spaces between words (usually caused by spaces
-or newlines in the input) specially.
-The former are treated as if they were input tokens, and the latter are
-stretchable again.
-Note that the vertical size of lines is not preserved.
-Glyph information (font, font size, space width, etc.) is retained.
-Useful in conjunction with the
-.B .box
-and
-.B .boxa
-requests.
-.TP
-.BI .vpt\ n
-Enable vertical position traps if
-.I n
-is non-zero, disable them otherwise.
-Vertical position traps are traps set by the
-.B wh
-or
-.B dt
-requests.
-Traps set by the
-.B it
-request are not vertical position traps.
-The parameter that controls whether vertical position traps are enabled
-is global.
-Initially vertical position traps are enabled.
-.TP
-.BI .warn\ n
-Control warnings.
-.I n
-is the sum of the numbers associated with each warning that is to be enabled;
-all other warnings will be disabled.
-The number associated with each warning is listed in the `Warnings' section.
-For example,
-.B .warn 0
-will disable all warnings, and
-.B .warn 1
-will disable all warnings except that about missing characters.
-If
-.I n
-is not given,
-all warnings will be enabled.
-.TP
-.BI .while \ c\ anything
-While condition
-.I c
-is true, accept
-.I anything
-as input;
-.I c
-can be any condition acceptable to an
-.B if
-request;
-.I anything
-can comprise multiple lines if the first line starts with
-.B \e{
-and the last line ends with
-.BR \e} .
-See also the
-.B break
-and
-.B continue
-requests.
-.TP
-.BI .write\ stream\ anything
-Write
-.I anything
-to the stream named
-.IR stream .
-.I stream
-must previously have been the subject of an
-.B open
-request.
-.I anything
-is read in copy mode;
-a leading
-.B \(ts
-will be stripped.
-.TP
-.BI .writem\ stream\ xx
-Write the contents of the macro or string
-.I xx
-to the stream named
-.IR stream .
-.I stream
-must previously have been the subject of an
-.B open
-request.
-.I xx
-is read in copy mode.
+.BI \-w name
+Enable warning
+.IR name .
+Available warnings are described in the section
+.I WARNINGS
+below.
.
-.SS Extended requests
+For example, to enable all warnings, use
+.B \-w
+.BR all .
+Multiple
+.B \-w
+options are allowed.
.
.TP
-.BI .cf\ filename
-When used in a diversion, this will embed in the diversion an object which,
-when reread, will cause the contents of
-.I filename
-to be transparently copied through to the output.
-In UNIX troff, the
-contents of
-.I filename
-is immediately copied through to the output regardless of whether
-there is a current diversion; this behaviour is so anomalous that it
-must be considered a bug.
-.TP
-.BI .ev\ xx
-If
-.I xx
-is not a number, this will switch to a named environment called
-.IR xx .
-The environment should be popped with a matching
-.B ev
-request without any arguments, just as for numbered environments.
-There is no limit on the number of named environments; they will be
-created the first time that they are referenced.
-.TP
-.BI .fp\ n\ f1\ f2
-The
-.B 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.
-.TP
-.BI .ss\ m\ n
-When two arguments are given to the
-.B ss
-request, the second argument gives the
-.IR "sentence space size" .
-If the second argument is not given, the sentence space size
-will be the same as the word space size.
-Like the word space size, the sentence space is in units of
-one twelfth of the spacewidth parameter for the current font.
-Initially both the word space size and the sentence
-space size are 12.
-Contrary to UNIX troff, GNU troff handles this request in nroff mode
-also; a given value is then rounded down to the nearest multiple of\~12.
-The sentence space size is used in two circumstances:
-if the end of a sentence occurs at the end of a line in fill mode, then
-both an inter-word space and a sentence space will be added;
-if two spaces follow the end of a sentence in the middle of a line,
-then the second space will be a sentence space.
-Note that the behaviour of UNIX troff will be exactly
-that exhibited by GNU troff if a second argument is never given to the
-.B ss
-request.
-In GNU troff, as in UNIX troff, you should always
-follow a sentence with either a newline or two spaces.
-.TP
-.BI .ta\ n1\ n2\|.\|.\|.nn \ T\ r1\ r2\|.\|.\|.\|rn
-Set tabs at positions
-.IR n1 ,
-.IR n2 ,\|.\|.\|.\|,
-.I nn
-and then set tabs at
-.IR nn + r1 ,
-.IR nn + r2 ,\|.\|.\|.\|.\|,
-.IR nn + rn
-and then at
-.IR nn + rn + r1 ,
-.IR nn + rn + r2 ,\|.\|.\|.\|,
-.IR nn + rn + rn ,
-and so on.
-For example,
-.RS
-.IP
-.B
-\&.ta T .5i
-.LP
-will set tabs every half an inch.
-.RE
-.
-.SS New number registers
+.BI \-W name
+Inhibit warning
+.IR name .
+Multiple
+.B \-W
+options are allowed.
.
-The following read-only registers are available:
-.TP
-.B \en[.C]
-1 if compatibility mode is in effect, 0 otherwise.
-.TP
-.B \en[.cdp]
-The depth of the last character added to the current environment.
-It is positive if the character extends below the baseline.
-.TP
-.B \en[.ce]
-The number of lines remaining to be centered, as set by the
-.B ce
-request.
-.TP
-.B \en[.cht]
-The height of the last character added to the current environment.
-It is positive if the character extends above the baseline.
-.TP
-.B \en[.csk]
-The skew of the last character added to the current environment.
-The
-.I 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.
-.TP
-.B \en[.ev]
-The name or number of the current environment.
-This is a string-valued register.
-.TP
-.B \en[.fam]
-The current font family.
-This is a string-valued register.
-.TP
-.B \en[.fp]
-The number of the next free font position.
-.TP
-.B \en[.g]
-Always 1.
-Macros should use this to determine whether they are running
-under GNU troff.
-.TP
-.B \en[.hla]
-The current hyphenation language as set by the
-.B hla
-request.
-.TP
-.B \en[.hlc]
-The number of immediately preceding consecutive hyphenated lines.
-.TP
-.B \en[.hlm]
-The maximum allowed number of consecutive hyphenated lines, as set by the
-.B hlm
-request.
-.TP
-.B \en[.hy]
-The current hyphenation flags (as set by the
-.B hy
-request).
-.TP
-.B \en[.hym]
-The current hyphenation margin (as set by the
-.B hym
-request).
-.TP
-.B \en[.hys]
-The current hyphenation space (as set by the
-.B hys
-request).
-.TP
-.B \en[.in]
-The indent that applies to the current output line.
-.TP
-.B \en[.int]
-Set to a positive value if last output line is interrupted (i.e., if it
-contains
-.IR \ec ).
-.TP
-.B \en[.kern]
-.B 1
-if pairwise kerning is enabled,
-.B 0
-otherwise.
-.TP
-.B \en[.lg]
-The current ligature mode (as set by the
-.B lg
-request).
-.TP
-.B \en[.linetabs]
-The current line-tabs mode (as set by the
-.B linetabs
-request).
-.TP
-.B \en[.ll]
-The line length that applies to the current output line.
-.TP
-.B \en[.lt]
-The title length as set by the
-.B lt
-request.
-.TP
-.B \en[.ne]
-The amount of space that was needed in the last
-.B ne
-request that caused a trap to be sprung.
-Useful in conjunction with the
-.B \en[.trunc]
-register.
-.TP
-.B \en[.ns]
-.B 1
-if no-space mode is active,
-.B 0
-otherwise.
-.TP
-.B \en[.pn]
-The number of the next page:
-either the value set by a
-.B pn
-request, or the number of the current page plus 1.
-.TP
-.B \en[.ps]
-The current pointsize in scaled points.
-.TP
-.B \en[.psr]
-The last-requested pointsize in scaled points.
-.TP
-.B \en[.rj]
-The number of lines to be right-justified as set by the
-.B rj
-request.
-.TP
-.B \en[.sr]
-The last requested pointsize in points as a decimal fraction.
-This is a string-valued register.
-.TP
-.B \en[.tabs]
-A string representation of the current tab settings suitable for use as
-an argument to the
-.B ta
-request.
-.TP
-.B \en[.trunc]
-The amount of vertical space truncated by the most recently sprung
-vertical position trap, or,
-if the trap was sprung by a
-.B ne
-request,
-minus the amount of vertical motion produced by the
-.B ne
-request.
-In other words, at the point a trap is sprung, it represents the difference
-of what the vertical position would have been but for the trap,
-and what the vertical position actually is.
-Useful in conjunction with the
-.B \en[.ne]
-register.
-.TP
-.B \en[.ss]
-.TQ
-.B \en[.sss]
-These give the values of the parameters set by the
-first and second arguments of the
-.B ss
-request.
-.TP
-.B \en[.vpt]
-1 if vertical position traps are enabled, 0 otherwise.
-.TP
-.B \en[.warn]
-The sum of the numbers associated with each of the currently enabled
-warnings.
-The number associated with each warning is listed in the `Warnings'
-subsection.
-.TP
-.B \en[.x]
-The major version number.
-For example, if the version number is
-.B 1.03
-then
-.B \en[.x]
-will contain
-.BR 1 .
-.TP
-.B \en[.y]
-The minor version number.
-For example, if the version number is
-.B 1.03
-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 read/write registers are set by the
-.B \ew
-escape sequence:
-.TP
-.B \en[rst]
-.TQ
-.B \en[rsb]
-Like the
-.B st
-and
-.B sb
-registers, but takes account of the heights and depths of characters.
-.TP
-.B \en[ssc]
-The amount of horizontal space (possibly negative) that should
-be added to the last character before a subscript.
-.TP
-.B \en[skw]
-How far to right of the center of the last character
-in the
-.B \ew
-argument,
-the center of an accent from a roman font should be placed over that character.
-.LP
-Other available read/write number registers are:
-.TP
-.B \en[c.]
-The current input line number.
-.B \en[.c]
-is a read-only alias to this register.
.TP
-.B \en[hp]
-The current horizontal position at input line.
-.TP
-.B \en[systat]
-The return value of the system() function executed by the last
-.B sy
-request.
-.TP
-.B \en[slimit]
-If greater than 0, the maximum number of objects on the input stack.
-If less than or equal to 0, there is no limit on the number of objects
-on the input stack. With no limit, recursion can continue until
-virtual memory is exhausted.
-.TP
-.B \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 \-z
+Suppress formatted output.
.
-.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
-file are automatically mounted on the next available font position
-when they are referenced.
-If a font is to be mounted explicitly with the
-.B fp
-request on an unused font position,
-it should be mounted on the first unused font position,
-which can be found in the
-.B \en[.fp]
-register;
-although
-.B troff
-does not enforce this strictly,
-it will not allow a font to be mounted at a position whose number is much
-greater than that of any currently used position.
-.LP
-Interpolating a string does not hide existing macro arguments.
-Thus in a macro, a more efficient way of doing
-.IP
-.BI . xx\ \e\e$@
-.LP
-is
-.IP
-.BI \e\e*[ xx ]\e\e
-.LP
-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
-.B \e&
-between them.
-.LP
-In a string comparison in a condition,
-characters that appear at different input levels
-to the first delimiter character will not be recognised
-as the second or third delimiters.
-This applies also to the
-.B tl
-request.
-In a
-.B \ew
-escape sequence,
-a character that appears at a different input level to
-the starting delimiter character will not be recognised
-as the closing delimiter character.
-When decoding a macro argument that is delimited
-by double quotes, a character that appears at a different
-input level to the starting delimiter character will not
-be recognised as the closing delimiter character.
-The implementation of
-.B \e$@
-ensures that the double quotes surrounding an argument
-will appear the same input level, which will be different
-to the input level of the argument itself.
-In a long escape name
-.B ]
-will not be recognized as a closing delimiter except
-when it occurs at the same input level as the opening
-.BR ] .
-In compatibility mode, no attention is paid to the input-level.
-.LP
-There are some new types of condition:
-.TP
-.BI .if\ r xxx
-True if there is a number register named
-.IR xxx .
-.TP
-.BI .if\ d xxx
-True if there is a string, macro, diversion, or request named
-.IR xxx .
-.TP
-.BI .if\ c ch
-True if there is a character
-.IR ch
-available;
-.I ch
-is either an
-.SM ASCII
-character
-or a special character
-.BI \e( xx
-or
-.BI \e[ xxx ]\fR;
-the condition will also be true if
-.I ch
-has been defined by the
-.B char
-request.
-.LP
-The
-.B tr
-request can now map characters onto
-.BR \e~ .
.
-.SS Warnings
+.\" --------------------------------------------------------------------
+.SH WARNINGS
+.\" --------------------------------------------------------------------
.
The warnings that can be given by
-.B troff
+.B @g@troff
are divided into the following categories.
+.
The name associated with each warning is used by the
.B \-w
and
.B \-W
-options;
-the number is used by the
+options; the number is used by the
.B warn
request, and by the
.B .warn
-register.
-.nr x \w'\fBright-brace'+1n+\w'0000'u
+register; it is always a power of 2 to allow bitwise composition.
+.
+.P
+.TS
+tab(@), center, box;
+c c c | c c c
+r rI lB | r rI lB.
+Bit@Code@Warning@Bit@Code@Warning
+_
+0@1@char@10@1024@reg
+1@2@number@11@2048@tab
+2@4@break@12@4096@right-brace
+3@8@delim@13@8192@missing
+4@16@el@14@16384@input
+5@32@scale@15@32768@escape
+6@64@range@16@65536@space
+7@128@syntax@17@131072@font
+8@256@di@18@262144@ig
+9@512@mac@19@524288@color
+.TE
+.
+.P
+.nr x \w'\fBright-brace'+1n+\w'00000'u
.ta \nxuR
+.
.TP \nxu+3n
-.BR char \t1
-Non-existent characters.
+.BR break "\t4"
+In fill mode, lines which could not be broken so that their length was
+less than the line length.
+.
This is enabled by default.
+.
.TP
-.BR number \t2
-Invalid numeric expressions.
+.BR char "\t1"
+Non-existent characters.
+.
This is enabled by default.
+.
.TP
-.BR break \t4
-In fill mode, lines which could not be broken so that their length was
-less than the line length.
-This is enabled by default.
+.BR color "\t524288"
+Color related warnings.
+.
.TP
-.BR delim \t8
+.BR delim "\t8"
Missing or mismatched closing delimiters.
+.
+.TP
+.BR di "\t256"
+Use of
+.B di
+or
+.B da
+without an argument when there is no current diversion.
+.
.TP
-.BR el \t16
+.BR el "\t16"
Use of the
.B el
request with no matching
.B ie
request.
+.
.TP
-.BR scale \t32
-Meaningless scaling indicators.
+.BR escape "\t32768"
+Unrecognized escape sequences.
+.
+When an unrecognized escape sequence is encountered, the escape
+character is ignored.
+.
.TP
-.BR range \t64
-Out of range arguments.
+.BR font "\t131072"
+Non-existent fonts.
+.
+This is enabled by default.
+.
.TP
-.BR syntax \t128
-Dubious syntax in numeric expressions.
+.BR ig "\t262144"
+Invalid escapes in text ignored with the
+.B ig
+request.
+.
+These are conditions that are errors when they do not occur in ignored
+text.
+.
.TP
-.BR di \t256
-Use of
-.B di
-or
-.B da
-without an argument when there is no current diversion.
+.BR input "\t16384"
+Invalid input characters.
+.
.TP
-.BR mac \t512
+.BR mac "\t512"
Use of undefined strings, macros and diversions.
-When an undefined string, macro or diversion is used,
-that string is automatically defined as empty.
-So, in most cases, at most one warning will be given for
-each name.
+.
+When an undefined string, macro or diversion is used, that string is
+automatically defined as empty.
+.
+So, in most cases, at most one warning will be given for each name.
+.
.TP
-.BR reg \t1024
-Use of undefined number registers.
-When an undefined number register is used,
-that register is automatically defined to have a value of 0.
-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.
+.BR missing "\t8192"
+Requests that are missing non-optional arguments.
+.
.TP
-.BR tab \t2048
-Inappropriate use of a tab character.
-Either use of a tab character where a number was expected,
-or use of tab character in an unquoted macro argument.
+.BR number "\t2"
+Invalid numeric expressions.
+.
+This is enabled by default.
+.
.TP
-.BR right-brace \t4096
-Use of
-.B \e}
-where a number was expected.
+.BR range "\t64"
+Out of range arguments.
+.
.TP
-.BR missing \t8192
-Requests that are missing non-optional arguments.
+.BR reg "\t1024"
+Use of undefined number registers.
+.
+When an undefined number register is used, that register is
+automatically defined to have a value of\~0.
+.
+So, in most cases, at most one warning will be given for use of a
+particular name.
+.
.TP
-.BR input \t16384
-Illegal input characters.
+.BR right-brace "\t4096"
+Use of
+.B \[rs]}
+where a number was expected.
+.
.TP
-.BR escape \t32768
-Unrecognized escape sequences.
-When an unrecognized escape sequence is encountered,
-the escape character is ignored.
+.BR scale "\t32"
+Meaningless scaling indicators.
+.
.TP
-.BR space \t65536
+.BR space "\t65536"
Missing space between a request or macro and its argument.
-This warning will be given
-when an undefined name longer than two characters is encountered,
-and the first two characters of the name make a defined name.
+.
+This warning will be given when an undefined name longer than two
+characters is encountered, and the first two characters of the name
+make a defined name.
+.
The request or macro will not be invoked.
+.
When this warning is given, no macro is automatically defined.
+.
This is enabled by default.
+.
This warning will never occur in compatibility mode.
+.
.TP
-.BR font \t131072
-Non-existent fonts.
-This is enabled by default.
+.BR syntax "\t128"
+Dubious syntax in numeric expressions.
+.
.TP
-.BR ig \t262144
-Illegal escapes in text ignored with the
-.B ig
-request.
-These are conditions that are errors when they do not occur
-in ignored text.
-.LP
+.BR tab "\t2048"
+Inappropriate use of a tab character.
+Either use of a tab character where a number was expected, or use of tab
+character in an unquoted macro argument.
+.
+.P
There are also names that can be used to refer to groups of warnings:
+.
.TP
.B all
All warnings except
.BR di ,
-.B mac
+.BR mac ,
and
.BR reg .
-It is intended that this covers all warnings
-that are useful with traditional macro packages.
+It is intended that this covers all warnings that are useful with
+traditional macro packages.
+.
.TP
.B w
All warnings.
.
-.SS Incompatibilities
-.
-.LP
-Long names cause some incompatibilities.
-UNIX troff will interpret
-.IP
-.B
-\&.dsabcd
-.LP
-as defining a string
-.B ab
-with contents
-.BR cd .
-Normally, GNU troff will interpret this as a call of a macro named
-.BR dsabcd .
-Also UNIX troff will interpret
-.B \e*[
-or
-.B \en[
-as references to a string or number register called
-.BR [ .
-In GNU troff, however, this will normally be interpreted as the start
-of a long name.
-In
-.I 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
-.B \-C
-command line option, and turned on or off with the
-.B cp
-request.
-The number register
-.B \en[.C]
-is 1 if compatibility mode is on, 0 otherwise.
-.LP
-GNU troff
-does not allow the use of the escape sequences
-.BR \\e\e|\e^\e&\e}\e{\e (space) \e'\e`\e-\e_\e!\e%\ec
-in names of strings, macros, diversions, number registers,
-fonts or environments; UNIX troff does.
-The
-.B \eA
-escape sequence may be helpful in avoiding use of these
-escape sequences in names.
-.LP
-Fractional pointsizes cause one noteworthy incompatibility.
-In UNIX troff the
-.B ps
-request ignores scale indicators and so
-.IP
-.B .ps\ 10u
-.LP
-will set the pointsize to 10 points, whereas in
-GNU troff it will set the pointsize to 10 scaled points.
-.LP
-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 unaffected by any subsequent
-requests that are executed, including
-.BR bd ,
-.BR cs ,
-.BR tkf ,
-.BR tr ,
-or
-.B 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,
-.IP
-.nf
-.ft B
-\&.di x
-\e\e\e\e
-\&.br
-\&.di
-\&.x
-.ft
-.fi
-.LP
-will print
-.B \e\e
-in GNU troff;
-each pair of input
-.BR \e s
-is turned into one output
-.B \e
-and the resulting output
-.BR \e s
-are not interpreted as escape characters when they are reread.
-UNIX troff would interpret them as escape characters
-when they were reread and would end up printing one
-.BR \e .
-The correct way to obtain a printable
-.B \e
-is to use the
-.B \ee
-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 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
-.B \e!\&
-transparent output facility, or, if this is unsuitable, the new
-.B \e?\&
-escape sequence.
-.
.
+.\" --------------------------------------------------------------------
.SH ENVIRONMENT
-.
+.\" --------------------------------------------------------------------
.
.TP
.SM
.B GROFF_TMAC_PATH
A colon separated list of directories in which to search for
macro files.
-.B troff
-will scan directories given in
-the
+.B @g@troff
+will scan directories given in the
.B \-M
-option before these, and in standard directories (current directory if in
-unsafe mode, home directory,
-.BR @LOCALMACRODIR@ ,
+option before these, and in standard directories (current directory if
+in unsafe mode, home directory,
.BR @SYSTEMMACRODIR@ ,
+.BR @LOCALMACRODIR@ ,
.BR @MACRODIR@ )
after these.
+.
.TP
.SM
.B GROFF_TYPESETTER
Default device.
+.
.TP
.SM
.B GROFF_FONT_PATH
A colon separated list of directories in which to search for the
.BI dev name
directory.
-.B troff
+.B @g@troff
will scan directories given in the
.B \-F
option before these, and in standard directories
-.RB ( @FONTPATH@ )
+.RB ( @LOCALFONTDIR@ ,
+.BR @FONTDIR@ ,
+.BR @LEGACYFONTDIR@ )
after these.
.
.
+.\" --------------------------------------------------------------------
.SH FILES
-.
+.\" --------------------------------------------------------------------
.
.Tp \w'@FONTDIR@/devname/DESC'u+3n
.B @MACRODIR@/troffrc
Initialization file (called before any other macro package).
+.
.TP
.B @MACRODIR@/troffrc-end
Initialization file (called after any other macro package).
+.
.TP
.BI @MACRODIR@/ name .tmac
.TQ
.BI @MACRODIR@/tmac. name
Macro files
+.
.TP
.BI @FONTDIR@/dev name /DESC
Device description file for device
.IR name .
+.
.TP
.BI @FONTDIR@/dev name / F
Font file for font
.I F
of device
.IR name .
-.LP
+.P
Note that
.B troffrc
and
.B troffrc-end
-are neither searched in the current nor in the home directory by default for
-security reasons (even if the
+are neither searched in the current nor in the home directory by
+default for security reasons (even if the
.B \-U
option is given).
+.
Use the
.B \-M
command line option or the
@@ -2463,28 +600,86 @@ environment variable to add these directories to the search path if
necessary.
.
.
+.\" --------------------------------------------------------------------
+.SH AUTHOR
+.\" --------------------------------------------------------------------
+.
+Copyright (C) 1989, 2001, 2002 Free Software Foundation, Inc.
+.
+.P
+This document is distributed under the terms of the FDL (GNU Free
+Documentation License) version 1.1 or later.
+.
+You should have received a copy of the FDL on your system, it is also
+available on-line at the
+.URL http://www.gnu.org/copyleft/fdl.html "GNU copyleft site" .
+This document was written by James Clark, with modifications from
+.MTO wl@gnu.org "Werner Lemberg"
+and
+.MTO bwarken@mayn.de "Bernd Warken"
+.
+.P
+This document is part of
+.IR groff ,
+the GNU roff distribution.
+.
+.
+.\" --------------------------------------------------------------------
.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
.
+.TP
+.BR groff (@MAN1EXT@)
+The main program of the
+.I groff
+system, a wrapper around
+.IR @g@troff .
.
+.TP
.BR groff (@MAN7EXT@)
--- This is a short but complete reference of all requests, registers, and
-escapes.
-.PP
-.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@)
+A description of the
+.I groff
+language, including a short but complete reference of all predefined
+requests, registers, and escapes of plain
+.IR groff .
+From the command line, this is called by
+.RS
+.IP
+.B man 7 groff
+.RE
+.
+.TP
+.BR \%groff_diff (@MAN7EXT@)
+The differences of the
+.I groff
+language and the
+.I classical troff
+language.
+.
+Currently, this is the most actual document of the
+.I groff
+system.
+.
+.TP
+.BR roff (@MAN7EXT@)
+An overview over
+.I groff
+and other
+.I roff
+systems, including pointers to further related documentation.
+.
+.P
+The
+.I groff info
+.IR file ,
+cf.\&
+.BR info (@MAN1EXT@),
+presents all groff documentation within a single document.
+.
+.
+.\" --------------------------------------------------------------------
+.\" Emacs variables
+.\" --------------------------------------------------------------------
.
.\" Local Variables:
.\" mode: nroff
diff --git a/contrib/groff/src/utils/addftinfo/Makefile.sub b/contrib/groff/src/utils/addftinfo/Makefile.sub
index 23848d5..af5bf70 100644
--- a/contrib/groff/src/utils/addftinfo/Makefile.sub
+++ b/contrib/groff/src/utils/addftinfo/Makefile.sub
@@ -1,9 +1,9 @@
-PROG=addftinfo
+PROG=addftinfo$(EXEEXT)
MAN1=addftinfo.n
XLIBS=$(LIBGROFF)
OBJS=\
- addftinfo.o \
- guess.o
+ addftinfo.$(OBJEXT) \
+ guess.$(OBJEXT)
CCSRCS=\
$(srcdir)/addftinfo.cc \
$(srcdir)/guess.cc
diff --git a/contrib/groff/src/utils/addftinfo/addftinfo.cc b/contrib/groff/src/utils/addftinfo/addftinfo.cc
index eb222d9..931d836 100644
--- a/contrib/groff/src/utils/addftinfo/addftinfo.cc
+++ b/contrib/groff/src/utils/addftinfo/addftinfo.cc
@@ -18,13 +18,12 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
+#include "lib.h"
+
#include <ctype.h>
-#include <string.h>
#include <assert.h>
#include <stdlib.h>
#include <errno.h>
-#include "lib.h"
#include "errarg.h"
#include "error.h"
#include "stringclass.h"
diff --git a/contrib/groff/src/utils/afmtodit/afmtodit.man b/contrib/groff/src/utils/afmtodit/afmtodit.man
index 585c229..2d4c866 100644
--- a/contrib/groff/src/utils/afmtodit/afmtodit.man
+++ b/contrib/groff/src/utils/afmtodit/afmtodit.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -16,15 +16,23 @@ versions, except that this permission notice may be included in
translations approved by the Free Software Foundation instead of in
the original English.
..
+.
+.
.\" Like TP, but if specified indent is more than half
.\" the current line-length - indent, use the default indent.
.de Tp
.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
.el .TP "\\$1"
..
+.
+.
.TH AFMTODIT @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
+.
+.
.SH NAME
afmtodit \- create font files for use with groff \-Tps
+.
+.
.SH SYNOPSIS
.nr a \n(.j
.ad l
@@ -36,6 +44,7 @@ afmtodit \- create font files for use with groff \-Tps
.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
.el .RB "[\ " "\\$1" "\ ]"
..
+.
.OP \-nsv
.OP \-d desc_file
.OP \-e enc_file
@@ -46,16 +55,21 @@ afmtodit \- create font files for use with groff \-Tps
.I font
.br
.ad \na
+.
+.
.SH DESCRIPTION
.B afmtodit
creates a font file for use with groff and
.BR grops .
+.
.B afmtodit
is written in perl;
-you must have perl version 3 installed in order to run
+you must have perl version 3 or newer installed in order to run
.BR afmtodit .
+.
.I afm_file
is the AFM (Adobe Font Metric) file for the font.
+.
.I map_file
is a file that says which groff character names map onto
each PostScript character name;
@@ -69,15 +83,22 @@ where
is the PostScript name of the character
and
.I groff_char
-is the groff name of the character (as used in the groff font file.)
+is the groff name of the character (as used in the groff font file).
+.
The same
.I ps_char
can occur multiple times in the file;
each
.I groff_char
must occur at most once.
+.
+Lines starting with
+.B #
+and blank lines are ignored.
+.
.I font
is the groff name of the font.
+.
If a PostScript character is in the encoding to be used for the font
but is not mentioned in
.I map_file
@@ -88,14 +109,17 @@ which can be accessed by the
.B \eN
escape sequence in
.BR troff .
+.
The groff font file will be output to a file called
.IR font .
+.
.LP
If there is a downloadable font file for the font, it may be listed in
the file
.BR @FONTDIR@/devps/download ;
see
.BR grops (@MAN1EXT@).
+.
.LP
If the
.B \-i
@@ -123,53 +147,67 @@ is the PostScript name of the character,
and
.I n
is the desired value of the corresponding parameter in thousandths of an em.
+.
These parameters are normally needed only for italic (or oblique) fonts.
+.
+.
.SH OPTIONS
.TP
.B \-v
Print version.
+.
.TP
.B \-n
Don't output a
.B ligatures
command for this font.
+.
Use this with constant-width fonts.
+.
.TP
.B \-s
The font is special.
+.
The effect of this option is to add the
.B special
command to the font file.
+.
.TP
.BI \-d desc_file
The device description file is
.I desc_file
rather than the default
.BR DESC .
+.
.TP
.BI \-e enc_file
The PostScript font should be reencoded to use the encoding described
in enc_file.
+.
The format of
.I enc_file
is described in
.BR grops (@MAN1EXT@).
+.
.TP
.BI \-a n
Use
.I n
as the slant parameter in the font file;
this is used by groff in the positioning of accents.
+.
By default
.B afmtodit
uses the negative of the ItalicAngle specified in the afm file;
with true italic fonts it is sometimes desirable to use
a slant that is less than this.
+.
If you find that characters from an italic font have accents
placed too far to the right over them,
then use the
.B \-a
option to give the font a smaller slant.
+.
.TP
.BI \-i n
Generate an italic correction for each character so that
@@ -179,15 +217,19 @@ is equal to
thousandths of an em
plus the amount by which the right edge of the character's bounding
is to the right of the character's origin.
+.
If this would result in a negative italic correction, use a zero
italic correction instead.
+.
.IP
Also generate a subscript correction equal to the
product of the tangent of the slant of the font and
four fifths of the x-height of the font.
+.
If this would result in a subscript correction greater than the italic
correction, use a subscript correction equal to the italic correction
instead.
+.
.IP
Also generate a left italic correction for each character
equal to
@@ -195,29 +237,40 @@ equal to
thousandths of an em
plus the amount by which the left edge of the character's bounding box
is to the left of the character's origin.
+.
The left italic correction may be negative.
+.
.IP
This option is normally needed only with italic (or oblique) fonts.
+.
The font files distributed with groff were created using an option of
.B \-i50
for italic fonts.
+.
+.
.SH FILES
.Tp \w'\fB@FONTDIR@/devps/download'u+2n
.B @FONTDIR@/devps/DESC
Device description file.
+.
.TP
.BI @FONTDIR@/devps/ F
Font description file for font
.IR F .
+.
.TP
.B @FONTDIR@/devps/download
List of downloadable fonts.
+.
.TP
.B @FONTDIR@/devps/text.enc
Encoding used for text fonts.
+.
.TP
.B @FONTDIR@/devps/generate/textmap
Standard mapping.
+.
+.
.SH "SEE ALSO"
.BR groff (@MAN1EXT@),
.BR grops (@MAN1EXT@),
diff --git a/contrib/groff/src/utils/afmtodit/afmtodit.pl b/contrib/groff/src/utils/afmtodit/afmtodit.pl
index bfc058a..67c0f682 100644
--- a/contrib/groff/src/utils/afmtodit/afmtodit.pl
+++ b/contrib/groff/src/utils/afmtodit/afmtodit.pl
@@ -1,6 +1,6 @@
-#! /usr/bin/perl -P-
+#! /usr/bin/perl
# -*- Perl -*-
-# Copyright (C) 1989-2000 Free Software Foundation, Inc.
+# Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
# Written by James Clark (jjc@jclark.com)
#
# This file is part of groff.
@@ -145,6 +145,7 @@ if ($opt_e) {
open(ENCODING, $opt_e) || die "$prog: can't open \`$opt_e': $!\n";
while (<ENCODING>) {
+ next if /^#/;
chop;
@field = split(' ');
if ($#field == 1) {
diff --git a/contrib/groff/src/utils/hpftodit/Makefile.sub b/contrib/groff/src/utils/hpftodit/Makefile.sub
index f5ff13e..7a16531 100644
--- a/contrib/groff/src/utils/hpftodit/Makefile.sub
+++ b/contrib/groff/src/utils/hpftodit/Makefile.sub
@@ -1,6 +1,6 @@
-PROG=hpftodit
+PROG=hpftodit$(EXEEXT)
MAN1=hpftodit.n
XLIBS=$(LIBGROFF)
MLIB=$(LIBM)
-OBJS=hpftodit.o
+OBJS=hpftodit.$(OBJEXT)
CCSRCS=$(srcdir)/hpftodit.cc
diff --git a/contrib/groff/src/utils/hpftodit/hpftodit.cc b/contrib/groff/src/utils/hpftodit/hpftodit.cc
index 15f6f7f..ecbc8a8 100644
--- a/contrib/groff/src/utils/hpftodit/hpftodit.cc
+++ b/contrib/groff/src/utils/hpftodit/hpftodit.cc
@@ -28,13 +28,12 @@ make it work with TrueType fonts
put filename in error messages (or fix lib)
*/
-#include <stdio.h>
+#include "lib.h"
+
#include <stdlib.h>
#include <math.h>
-#include <string.h>
#include <errno.h>
#include "assert.h"
-#include "lib.h"
#include "posix.h"
#include "errarg.h"
#include "error.h"
@@ -309,24 +308,6 @@ 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)
diff --git a/contrib/groff/src/utils/indxbib/Makefile.sub b/contrib/groff/src/utils/indxbib/Makefile.sub
index f45a7a7..01e43b2 100644
--- a/contrib/groff/src/utils/indxbib/Makefile.sub
+++ b/contrib/groff/src/utils/indxbib/Makefile.sub
@@ -1,10 +1,10 @@
-PROG=indxbib
+PROG=indxbib$(EXEEXT)
MAN1=indxbib.n
XLIBS=$(LIBBIB) $(LIBGROFF)
MLIB=$(LIBM)
OBJS=\
- indxbib.o \
- signal.o
+ indxbib.$(OBJEXT) \
+ signal.$(OBJEXT)
CCSRCS=\
$(srcdir)/indxbib.cc
CSRCS=\
diff --git a/contrib/groff/src/utils/indxbib/indxbib.cc b/contrib/groff/src/utils/indxbib/indxbib.cc
index 4b2477f..9fced93 100644
--- a/contrib/groff/src/utils/indxbib/indxbib.cc
+++ b/contrib/groff/src/utils/indxbib/indxbib.cc
@@ -1,5 +1,5 @@
// -*- C++ -*-
-/* Copyright (C) 1989-1992, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1989-1992, 2000, 2001, 2002 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -18,14 +18,13 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
+#include "lib.h"
+
#include <stdlib.h>
-#include <string.h>
#include <assert.h>
#include <errno.h>
#include "posix.h"
-#include "lib.h"
#include "errarg.h"
#include "error.h"
#include "stringclass.h"
@@ -39,12 +38,6 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
extern "C" const char *Version_string;
-#ifndef HAVE_MKSTEMP_PROTO
-extern "C" {
- extern int mkstemp(char *);
-}
-#endif
-
#define DEFAULT_HASH_TABLE_SIZE 997
#define TEMP_INDEX_TEMPLATE "indxbibXXXXXX"
@@ -229,7 +222,7 @@ int main(int argc, char **argv)
name_max = file_name_max(".");
const char *filename = p ? p + 1 : basename;
if (name_max >= 0 &&
- long(strlen(filename) + sizeof(INDEX_SUFFIX) - 1) > name_max)
+ (strlen(filename) + sizeof(INDEX_SUFFIX) - 1) > name_max)
fatal("`%1.%2' is too long for a filename", filename, INDEX_SUFFIX);
if (p) {
p++;
@@ -240,16 +233,8 @@ 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, FOPEN_WB);
@@ -300,6 +285,9 @@ int main(int argc, char **argv)
strcpy(index_file, basename);
strcat(index_file, INDEX_SUFFIX);
#ifdef HAVE_RENAME
+#ifdef __EMX__
+ unline(index_file);
+#endif /* __EMX__ */
if (rename(temp_index_file, index_file) < 0) {
#ifdef __MSDOS__
// RENAME could fail on plain MSDOS filesystems because
diff --git a/contrib/groff/src/utils/indxbib/signal.c b/contrib/groff/src/utils/indxbib/signal.c
index 8078472..fccd289 100644
--- a/contrib/groff/src/utils/indxbib/signal.c
+++ b/contrib/groff/src/utils/indxbib/signal.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 2001 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -20,6 +20,10 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* Unfortunately vendors seem to have problems writing a <signal.h>
that is correct for C++, so we implement all signal handling in C. */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <sys/types.h>
#include <signal.h>
#ifdef HAVE_UNISTD_H
diff --git a/contrib/groff/src/utils/lkbib/Makefile.sub b/contrib/groff/src/utils/lkbib/Makefile.sub
index 8f31e10..899236a 100644
--- a/contrib/groff/src/utils/lkbib/Makefile.sub
+++ b/contrib/groff/src/utils/lkbib/Makefile.sub
@@ -1,6 +1,6 @@
-PROG=lkbib
+PROG=lkbib$(EXEEXT)
MAN1=lkbib.n
XLIBS=$(LIBBIB) $(LIBGROFF)
MLIB=$(LIBM)
-OBJS=lkbib.o
+OBJS=lkbib.$(OBJEXT)
CCSRCS=$(srcdir)/lkbib.cc
diff --git a/contrib/groff/src/utils/lkbib/lkbib.cc b/contrib/groff/src/utils/lkbib/lkbib.cc
index 50e4e9b..42156ea 100644
--- a/contrib/groff/src/utils/lkbib/lkbib.cc
+++ b/contrib/groff/src/utils/lkbib/lkbib.cc
@@ -18,13 +18,12 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
+#include "lib.h"
+
#include <stdlib.h>
#include <errno.h>
-#include <string.h>
#include <assert.h>
-#include "lib.h"
#include "errarg.h"
#include "error.h"
diff --git a/contrib/groff/src/utils/lookbib/Makefile.sub b/contrib/groff/src/utils/lookbib/Makefile.sub
index 91b1404..7a08f0a 100644
--- a/contrib/groff/src/utils/lookbib/Makefile.sub
+++ b/contrib/groff/src/utils/lookbib/Makefile.sub
@@ -1,7 +1,7 @@
-PROG=lookbib
+PROG=lookbib$(EXEEXT)
MAN1=lookbib.n
XLIBS=$(LIBBIB) $(LIBGROFF)
MLIB=$(LIBM)
-OBJS=lookbib.o
+OBJS=lookbib.$(OBJEXT)
CCSRCS=$(srcdir)/lookbib.cc
NAMEPREFIX=$(g)
diff --git a/contrib/groff/src/utils/lookbib/lookbib.cc b/contrib/groff/src/utils/lookbib/lookbib.cc
index b742a4b..65e89bc 100644
--- a/contrib/groff/src/utils/lookbib/lookbib.cc
+++ b/contrib/groff/src/utils/lookbib/lookbib.cc
@@ -18,22 +18,23 @@ You should have received a copy of the GNU General Public License along
with groff; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-#include <stdio.h>
+#include "lib.h"
+
#include <stdlib.h>
-#include <string.h>
#include <assert.h>
#include <errno.h>
#include "errarg.h"
#include "error.h"
-#include "lib.h"
#include "cset.h"
#include "refid.h"
#include "search.h"
+/* for isatty() */
+#include "posix.h"
+
extern "C" {
- int isatty(int);
const char *Version_string;
}
diff --git a/contrib/groff/src/utils/pfbtops/Makefile.sub b/contrib/groff/src/utils/pfbtops/Makefile.sub
index f731ff5..a8ed92a 100644
--- a/contrib/groff/src/utils/pfbtops/Makefile.sub
+++ b/contrib/groff/src/utils/pfbtops/Makefile.sub
@@ -1,6 +1,6 @@
-PROG=pfbtops
+PROG=pfbtops$(EXEEXT)
MAN1=pfbtops.n
-OBJS=pfbtops.o
+OBJS=pfbtops.$(OBJEXT)
CSRCS=$(srcdir)/pfbtops.c
XLIBS=$(LIBGROFF)
MLIB=$(LIBM)
diff --git a/contrib/groff/src/utils/pfbtops/pfbtops.c b/contrib/groff/src/utils/pfbtops/pfbtops.c
index 0964ede..3417dcb 100644
--- a/contrib/groff/src/utils/pfbtops/pfbtops.c
+++ b/contrib/groff/src/utils/pfbtops/pfbtops.c
@@ -19,7 +19,12 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
/* This translates ps fonts in .pfb format to ASCII ps files. */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdio.h>
+#include <stdlib.h>
#include <getopt.h>
#include <limits.h>
diff --git a/contrib/groff/src/utils/tfmtodit/Makefile.sub b/contrib/groff/src/utils/tfmtodit/Makefile.sub
index 057bb3e..ee56ce6 100644
--- a/contrib/groff/src/utils/tfmtodit/Makefile.sub
+++ b/contrib/groff/src/utils/tfmtodit/Makefile.sub
@@ -1,6 +1,6 @@
-PROG=tfmtodit
+PROG=tfmtodit$(EXEEXT)
MAN1=tfmtodit.n
XLIBS=$(LIBGROFF)
MLIB=$(LIBM)
-OBJS=tfmtodit.o
+OBJS=tfmtodit.$(OBJEXT)
CCSRCS=$(srcdir)/tfmtodit.cc
diff --git a/contrib/groff/src/utils/tfmtodit/tfmtodit.cc b/contrib/groff/src/utils/tfmtodit/tfmtodit.cc
index 06b5d18..9fbbe25 100644
--- a/contrib/groff/src/utils/tfmtodit/tfmtodit.cc
+++ b/contrib/groff/src/utils/tfmtodit/tfmtodit.cc
@@ -47,12 +47,11 @@ This need only be done for a font for which math_fitting is false;
When it's true, the left_correction and subscript_correction should
both be zero. */
-#include <stdio.h>
+#include "lib.h"
+
#include <stdlib.h>
#include <math.h>
-#include <string.h>
#include <errno.h>
-#include "lib.h"
#include "errarg.h"
#include "error.h"
#include "assert.h"
diff --git a/contrib/groff/src/utils/tfmtodit/tfmtodit.man b/contrib/groff/src/utils/tfmtodit/tfmtodit.man
index b141c77..51f806d 100644
--- a/contrib/groff/src/utils/tfmtodit/tfmtodit.man
+++ b/contrib/groff/src/utils/tfmtodit/tfmtodit.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -121,8 +121,26 @@ def ignore_math_fit(expr left_adjustment,right_adjustment) =
.fi
.ft R
.LP
+For the EC font family, load the following definition after
+.B exbase
+(it is probably easiest to patch
+.B exbase.mf
+locally):
+.IP
+.nf
+.ft B
+def ignore_math_fit(expr left_adjustment,right_adjustment) =
+ ori_special "adjustment";
+ ori_numspecial left_adjustment*16/designsize;
+ ori_numspecial right_adjustment*16/designsize;
+ enddef;
+.fi
+.ft R
+.LP
The gf file created using this modified
.B cm.base
+or
+.B exbase
should be specified with the
.B \-g
option.
diff --git a/contrib/groff/src/xditview/ChangeLog b/contrib/groff/src/xditview/ChangeLog
index 977a90c..9db7cde 100644
--- a/contrib/groff/src/xditview/ChangeLog
+++ b/contrib/groff/src/xditview/ChangeLog
@@ -1,7 +1,57 @@
+2002-09-16 Werner LEMBERG <wl@gnu.org>
+
+ * Imakefile.in (GROFF_LOCALFONTDIR): New variable.
+ (GROFF_FONTPATH): Use it.
+ Remove /usr/local/lib/font.
+
+Version 1.18.0 released
+=======================
+
+2002-06-22 Werner LEMBERG <wl@gnu.org>
+
+ * gxditview.c (main): Handle `-help' and `--help' correctly.
+
+2002-06-17 Colin Watson <cjwatson@debian.org>
+
+ * Imakefile.in: s/@top_builddir@/@groff_top_builddir@/.
+
+2002-04-06 Werner LEMBERG <wl@gnu.org>
+
+ * DviChar.c (ISO_8859_1_map, Adobe_Symbol_map): Remove all
+ characters > 0x80.
+ * parse.c (ParseInput): Ignore `m' command.
+ (ParseDrawFunction): Don't move for unknown drawing functions.
+ Don't move for `f' drawing function.
+
+2002-03-25 Werner LEMBERG <wl@gnu.org>
+
+ * DviChar.c (ISO_8859_1_map): Use `t+-', `tmu', and `tdi' symbols
+ instead of `+-', `mu', and `di', respectively.
+
+2002-02-23 Werner LEMBERG <wl@gnu.org>
+
+ * DviChar.c (ISO_8859_1_map): Add `mc' symbol.
+
+2001-09-22 Werner LEMBERG <wl@gnu.org>
+
+ * Imakefile.in: Redefine `ProgramTargetHelper' as
+ `ProgramTargetHelperNoMan' and add a call to `InstallManPageLong'
+ to make the `install.man' target work if the build directory isn't
+ $srcdir.
+
+Version 1.17.2 released
+=======================
+
+Version 1.17.1 released
+=======================
+
2001-04-21 Albert Chin-A-Young <china@thewrittenword.com>
* Imakefile.in: Add support for recent HP architectures.
+Version 1.17 released
+=====================
+
2001-01-04 Rob Daasch <daasch@ece.pdx.edu>
* parse.c (ParseInput): Added 'F' to command switch to swallow
diff --git a/contrib/groff/src/xditview/DviChar.c b/contrib/groff/src/xditview/DviChar.c
index 2aaba45..608fb9e 100644
--- a/contrib/groff/src/xditview/DviChar.c
+++ b/contrib/groff/src/xditview/DviChar.c
@@ -132,526 +132,524 @@ static DviCharNameMap ISO8859_1_map = {
"iso8859-1",
0,
{
-{ 0, /* 0 */},
-{ 0, /* 1 */},
-{ 0, /* 2 */},
-{ 0, /* 3 */},
-{ 0, /* 4 */},
-{ 0, /* 5 */},
-{ 0, /* 6 */},
-{ 0, /* 7 */},
-{ 0, /* 8 */},
-{ 0, /* 9 */},
-{ 0, /* 10 */},
-{ 0, /* 11 */},
-{ 0, /* 12 */},
-{ 0, /* 13 */},
-{ 0, /* 14 */},
-{ 0, /* 15 */},
-{ 0, /* 16 */},
-{ 0, /* 17 */},
-{ 0, /* 18 */},
-{ 0, /* 19 */},
-{ 0, /* 20 */},
-{ 0, /* 21 */},
-{ 0, /* 22 */},
-{ 0, /* 23 */},
-{ 0, /* 24 */},
-{ 0, /* 25 */},
-{ 0, /* 26 */},
-{ 0, /* 27 */},
-{ 0, /* 28 */},
-{ 0, /* 29 */},
-{ 0, /* 30 */},
-{ 0, /* 31 */},
-{ 0, /* 32 */},
-{ "!", /* 33 */},
-{ "\"","dq", /* 34 */},
-{ "#","sh", /* 35 */},
-{ "$","Do", /* 36 */},
-{ "%", /* 37 */},
-{ "&", /* 38 */},
-{ "'","cq", /* 39 */},
-{ "(", /* 40 */},
-{ ")", /* 41 */},
-{ "*", /* 42 */},
-{ "+", /* 43 */},
-{ ",", /* 44 */},
-{ "\\-", /* 45 */},
-{ ".", /* 46 */},
-{ "/","sl", /* 47 */},
-{ "0", /* 48 */},
-{ "1", /* 49 */},
-{ "2", /* 50 */},
-{ "3", /* 51 */},
-{ "4", /* 52 */},
-{ "5", /* 53 */},
-{ "6", /* 54 */},
-{ "7", /* 55 */},
-{ "8", /* 56 */},
-{ "9", /* 57 */},
-{ ":", /* 58 */},
-{ ";", /* 59 */},
-{ "<", /* 60 */},
-{ "=","eq", /* 61 */},
-{ ">", /* 62 */},
-{ "?", /* 63 */},
-{ "@","at", /* 64 */},
-{ "A", /* 65 */},
-{ "B", /* 66 */},
-{ "C", /* 67 */},
-{ "D", /* 68 */},
-{ "E", /* 69 */},
-{ "F", /* 70 */},
-{ "G", /* 71 */},
-{ "H", /* 72 */},
-{ "I", /* 73 */},
-{ "J", /* 74 */},
-{ "K", /* 75 */},
-{ "L", /* 76 */},
-{ "M", /* 77 */},
-{ "N", /* 78 */},
-{ "O", /* 79 */},
-{ "P", /* 80 */},
-{ "Q", /* 81 */},
-{ "R", /* 82 */},
-{ "S", /* 83 */},
-{ "T", /* 84 */},
-{ "U", /* 85 */},
-{ "V", /* 86 */},
-{ "W", /* 87 */},
-{ "X", /* 88 */},
-{ "Y", /* 89 */},
-{ "Z", /* 90 */},
-{ "[","lB", /* 91 */},
-{ "\\","rs", /* 92 */},
-{ "]","rB", /* 93 */},
-{ "^","a^","ha" /* 94 */},
-{ "_", /* 95 */},
-{ "`","oq", /* 96 */},
-{ "a", /* 97 */},
-{ "b", /* 98 */},
-{ "c", /* 99 */},
-{ "d", /* 100 */},
-{ "e", /* 101 */},
-{ "f", /* 102 */},
-{ "g", /* 103 */},
-{ "h", /* 104 */},
-{ "i", /* 105 */},
-{ "j", /* 106 */},
-{ "k", /* 107 */},
-{ "l", /* 108 */},
-{ "m", /* 109 */},
-{ "n", /* 110 */},
-{ "o", /* 111 */},
-{ "p", /* 112 */},
-{ "q", /* 113 */},
-{ "r", /* 114 */},
-{ "s", /* 115 */},
-{ "t", /* 116 */},
-{ "u", /* 117 */},
-{ "v", /* 118 */},
-{ "w", /* 119 */},
-{ "x", /* 120 */},
-{ "y", /* 121 */},
-{ "z", /* 122 */},
-{ "{","lC", /* 123 */},
-{ "|","or","ba" /* 124 */},
-{ "}","rC", /* 125 */},
-{ "~","a~","ap","ti" /* 126 */},
-{ 0, /* 127 */},
-{ 0, /* 128 */},
-{ 0, /* 129 */},
-{ 0, /* 130 */},
-{ 0, /* 131 */},
-{ 0, /* 132 */},
-{ 0, /* 133 */},
-{ 0, /* 134 */},
-{ 0, /* 135 */},
-{ 0, /* 136 */},
-{ 0, /* 137 */},
-{ 0, /* 138 */},
-{ 0, /* 139 */},
-{ 0, /* 140 */},
-{ 0, /* 141 */},
-{ 0, /* 142 */},
-{ 0, /* 143 */},
-{ 0, /* 144 */},
-{ 0, /* 145 */},
-{ 0, /* 146 */},
-{ 0, /* 147 */},
-{ 0, /* 148 */},
-{ 0, /* 149 */},
-{ 0, /* 150 */},
-{ 0, /* 151 */},
-{ 0, /* 152 */},
-{ 0, /* 153 */},
-{ 0, /* 154 */},
-{ 0, /* 155 */},
-{ 0, /* 156 */},
-{ 0, /* 157 */},
-{ 0, /* 158 */},
-{ 0, /* 159 */},
-{ 0, /* 160 */},
-{ "r!", "\241", /* 161 */},
-{ "ct", "\242", /* 162 */},
-{ "Po", "\243", /* 163 */},
-{ "Cs", "\244", /* 164 */},
-{ "Ye", "\245", /* 165 */},
-{ "bb", "\246", /* 166 */},
-{ "sc", "\247", /* 167 */},
-{ "ad", "\250", /* 168 */},
-{ "co", "\251", /* 169 */},
-{ "Of", "\252", /* 170 */},
-{ "Fo", "\253", /* 171 */},
-{ "no", "\254", /* 172 */},
-{ "-", "hy", "\255" /* 173 */},
-{ "rg", "\256", /* 174 */},
-{ "a-", "\257", /* 175 */},
-{ "de", "\260", /* 176 */},
-{ "+-", "\261", /* 177 */},
-{ "S2", "\262", /* 178 */},
-{ "S3", "\263", /* 179 */},
-{ "aa", "\264", /* 180 */},
-/* Omit *m here; we want *m to match the other greek letters in the
- symbol font. */
-{ "\265", /* 181 */},
-{ "ps", "\266", /* 182 */},
-{ "pc", "\267", /* 183 */},
-{ "ac", "\270", /* 184 */},
-{ "S1", "\271", /* 185 */},
-{ "Om", "\272", /* 186 */},
-{ "Fc", "\273", /* 187 */},
-{ "14", "\274", /* 188 */},
-{ "12", "\275", /* 189 */},
-{ "34", "\276", /* 190 */},
-{ "r?", "\277", /* 191 */},
-{ "`A", "\300", /* 192 */},
-{ "'A", "\301", /* 193 */},
-{ "^A", "\302", /* 194 */},
-{ "~A", "\303", /* 195 */},
-{ ":A", "\304", /* 196 */},
-{ "oA", "\305", /* 197 */},
-{ "AE", "\306", /* 198 */},
-{ ",C", "\307", /* 199 */},
-{ "`E", "\310", /* 200 */},
-{ "'E", "\311", /* 201 */},
-{ "^E", "\312", /* 202 */},
-{ ":E", "\313", /* 203 */},
-{ "`I", "\314", /* 204 */},
-{ "'I", "\315", /* 205 */},
-{ "^I", "\316", /* 206 */},
-{ ":I", "\317", /* 207 */},
-{ "-D", "\320", /* 208 */},
-{ "~N", "\321", /* 209 */},
-{ "`O", "\322", /* 210 */},
-{ "'O", "\323", /* 211 */},
-{ "^O", "\324", /* 212 */},
-{ "~O", "\325", /* 213 */},
-{ ":O", "\326", /* 214 */},
-{ "mu", "\327", /* 215 */},
-{ "/O", "\330", /* 216 */},
-{ "`U", "\331", /* 217 */},
-{ "'U", "\332", /* 218 */},
-{ "^U", "\333", /* 219 */},
-{ ":U", "\334", /* 220 */},
-{ "'Y", "\335", /* 221 */},
-{ "TP", "\336", /* 222 */},
-{ "ss", "\337", /* 223 */},
-{ "`a", "\340", /* 224 */},
-{ "'a", "\341", /* 225 */},
-{ "^a", "\342", /* 226 */},
-{ "~a", "\343", /* 227 */},
-{ ":a", "\344", /* 228 */},
-{ "oa", "\345", /* 229 */},
-{ "ae", "\346", /* 230 */},
-{ ",c", "\347", /* 231 */},
-{ "`e", "\350", /* 232 */},
-{ "'e", "\351", /* 233 */},
-{ "^e", "\352", /* 234 */},
-{ ":e", "\353", /* 235 */},
-{ "`i", "\354", /* 236 */},
-{ "'i", "\355", /* 237 */},
-{ "^i", "\356", /* 238 */},
-{ ":i", "\357", /* 239 */},
-{ "Sd", "\360", /* 240 */},
-{ "~n", "\361", /* 241 */},
-{ "`o", "\362", /* 242 */},
-{ "'o", "\363", /* 243 */},
-{ "^o", "\364", /* 244 */},
-{ "~o", "\365", /* 245 */},
-{ ":o", "\366", /* 246 */},
-{ "di", "\367", /* 247 */},
-{ "/o", "\370", /* 248 */},
-{ "`u", "\371", /* 249 */},
-{ "'u", "\372", /* 250 */},
-{ "^u", "\373", /* 251 */},
-{ ":u", "\374", /* 252 */},
-{ "'y", "\375", /* 253 */},
-{ "Tp", "\376", /* 254 */},
-{ ":y", "\377", /* 255 */},
+{ 0, /* 0 */},
+{ 0, /* 1 */},
+{ 0, /* 2 */},
+{ 0, /* 3 */},
+{ 0, /* 4 */},
+{ 0, /* 5 */},
+{ 0, /* 6 */},
+{ 0, /* 7 */},
+{ 0, /* 8 */},
+{ 0, /* 9 */},
+{ 0, /* 10 */},
+{ 0, /* 11 */},
+{ 0, /* 12 */},
+{ 0, /* 13 */},
+{ 0, /* 14 */},
+{ 0, /* 15 */},
+{ 0, /* 16 */},
+{ 0, /* 17 */},
+{ 0, /* 18 */},
+{ 0, /* 19 */},
+{ 0, /* 20 */},
+{ 0, /* 21 */},
+{ 0, /* 22 */},
+{ 0, /* 23 */},
+{ 0, /* 24 */},
+{ 0, /* 25 */},
+{ 0, /* 26 */},
+{ 0, /* 27 */},
+{ 0, /* 28 */},
+{ 0, /* 29 */},
+{ 0, /* 30 */},
+{ 0, /* 31 */},
+{ 0, /* 32 */},
+{ "!", /* 33 */},
+{ "\"", "dq", /* 34 */},
+{ "#", "sh", /* 35 */},
+{ "$", "Do", /* 36 */},
+{ "%", /* 37 */},
+{ "&", /* 38 */},
+{ "'", "cq", /* 39 */},
+{ "(", /* 40 */},
+{ ")", /* 41 */},
+{ "*", /* 42 */},
+{ "+", /* 43 */},
+{ ",", /* 44 */},
+{ "\\-", /* 45 */},
+{ ".", /* 46 */},
+{ "/", "sl", /* 47 */},
+{ "0", /* 48 */},
+{ "1", /* 49 */},
+{ "2", /* 50 */},
+{ "3", /* 51 */},
+{ "4", /* 52 */},
+{ "5", /* 53 */},
+{ "6", /* 54 */},
+{ "7", /* 55 */},
+{ "8", /* 56 */},
+{ "9", /* 57 */},
+{ ":", /* 58 */},
+{ ";", /* 59 */},
+{ "<", /* 60 */},
+{ "=", "eq", /* 61 */},
+{ ">", /* 62 */},
+{ "?", /* 63 */},
+{ "@", "at", /* 64 */},
+{ "A", /* 65 */},
+{ "B", /* 66 */},
+{ "C", /* 67 */},
+{ "D", /* 68 */},
+{ "E", /* 69 */},
+{ "F", /* 70 */},
+{ "G", /* 71 */},
+{ "H", /* 72 */},
+{ "I", /* 73 */},
+{ "J", /* 74 */},
+{ "K", /* 75 */},
+{ "L", /* 76 */},
+{ "M", /* 77 */},
+{ "N", /* 78 */},
+{ "O", /* 79 */},
+{ "P", /* 80 */},
+{ "Q", /* 81 */},
+{ "R", /* 82 */},
+{ "S", /* 83 */},
+{ "T", /* 84 */},
+{ "U", /* 85 */},
+{ "V", /* 86 */},
+{ "W", /* 87 */},
+{ "X", /* 88 */},
+{ "Y", /* 89 */},
+{ "Z", /* 90 */},
+{ "[", "lB", /* 91 */},
+{ "\\", "rs", /* 92 */},
+{ "]", "rB", /* 93 */},
+{ "^", "a^", "ha" /* 94 */},
+{ "_", /* 95 */},
+{ "`", "oq", /* 96 */},
+{ "a", /* 97 */},
+{ "b", /* 98 */},
+{ "c", /* 99 */},
+{ "d", /* 100 */},
+{ "e", /* 101 */},
+{ "f", /* 102 */},
+{ "g", /* 103 */},
+{ "h", /* 104 */},
+{ "i", /* 105 */},
+{ "j", /* 106 */},
+{ "k", /* 107 */},
+{ "l", /* 108 */},
+{ "m", /* 109 */},
+{ "n", /* 110 */},
+{ "o", /* 111 */},
+{ "p", /* 112 */},
+{ "q", /* 113 */},
+{ "r", /* 114 */},
+{ "s", /* 115 */},
+{ "t", /* 116 */},
+{ "u", /* 117 */},
+{ "v", /* 118 */},
+{ "w", /* 119 */},
+{ "x", /* 120 */},
+{ "y", /* 121 */},
+{ "z", /* 122 */},
+{ "{", "lC", /* 123 */},
+{ "|", "or", "ba" /* 124 */},
+{ "}", "rC", /* 125 */},
+{ "~", "a~", "ap", "ti" /* 126 */},
+{ 0, /* 127 */},
+{ 0, /* 128 */},
+{ 0, /* 129 */},
+{ 0, /* 130 */},
+{ 0, /* 131 */},
+{ 0, /* 132 */},
+{ 0, /* 133 */},
+{ 0, /* 134 */},
+{ 0, /* 135 */},
+{ 0, /* 136 */},
+{ 0, /* 137 */},
+{ 0, /* 138 */},
+{ 0, /* 139 */},
+{ 0, /* 140 */},
+{ 0, /* 141 */},
+{ 0, /* 142 */},
+{ 0, /* 143 */},
+{ 0, /* 144 */},
+{ 0, /* 145 */},
+{ 0, /* 146 */},
+{ 0, /* 147 */},
+{ 0, /* 148 */},
+{ 0, /* 149 */},
+{ 0, /* 150 */},
+{ 0, /* 151 */},
+{ 0, /* 152 */},
+{ 0, /* 153 */},
+{ 0, /* 154 */},
+{ 0, /* 155 */},
+{ 0, /* 156 */},
+{ 0, /* 157 */},
+{ 0, /* 158 */},
+{ 0, /* 159 */},
+{ 0, /* 160 */},
+{ "r!", /* 161 */},
+{ "ct", /* 162 */},
+{ "Po", /* 163 */},
+{ "Cs", /* 164 */},
+{ "Ye", /* 165 */},
+{ "bb", /* 166 */},
+{ "sc", /* 167 */},
+{ "ad", /* 168 */},
+{ "co", /* 169 */},
+{ "Of", /* 170 */},
+{ "Fo", /* 171 */},
+{ "no", /* 172 */},
+{ "-", "hy", /* 173 */},
+{ "rg", /* 174 */},
+{ "a-", /* 175 */},
+{ "de", /* 176 */},
+{ "t+-", /* 177 */},
+{ "S2", /* 178 */},
+{ "S3", /* 179 */},
+{ "aa", /* 180 */},
+{ "mc", /* 181 */},
+{ "ps", /* 182 */},
+{ "pc", /* 183 */},
+{ "ac", /* 184 */},
+{ "S1", /* 185 */},
+{ "Om", /* 186 */},
+{ "Fc", /* 187 */},
+{ "14", /* 188 */},
+{ "12", /* 189 */},
+{ "34", /* 190 */},
+{ "r?", /* 191 */},
+{ "`A", /* 192 */},
+{ "'A", /* 193 */},
+{ "^A", /* 194 */},
+{ "~A", /* 195 */},
+{ ":A", /* 196 */},
+{ "oA", /* 197 */},
+{ "AE", /* 198 */},
+{ ",C", /* 199 */},
+{ "`E", /* 200 */},
+{ "'E", /* 201 */},
+{ "^E", /* 202 */},
+{ ":E", /* 203 */},
+{ "`I", /* 204 */},
+{ "'I", /* 205 */},
+{ "^I", /* 206 */},
+{ ":I", /* 207 */},
+{ "-D", /* 208 */},
+{ "~N", /* 209 */},
+{ "`O", /* 210 */},
+{ "'O", /* 211 */},
+{ "^O", /* 212 */},
+{ "~O", /* 213 */},
+{ ":O", /* 214 */},
+{ "tmu", /* 215 */},
+{ "/O", /* 216 */},
+{ "`U", /* 217 */},
+{ "'U", /* 218 */},
+{ "^U", /* 219 */},
+{ ":U", /* 220 */},
+{ "'Y", /* 221 */},
+{ "TP", /* 222 */},
+{ "ss", /* 223 */},
+{ "`a", /* 224 */},
+{ "'a", /* 225 */},
+{ "^a", /* 226 */},
+{ "~a", /* 227 */},
+{ ":a", /* 228 */},
+{ "oa", /* 229 */},
+{ "ae", /* 230 */},
+{ ",c", /* 231 */},
+{ "`e", /* 232 */},
+{ "'e", /* 233 */},
+{ "^e", /* 234 */},
+{ ":e", /* 235 */},
+{ "`i", /* 236 */},
+{ "'i", /* 237 */},
+{ "^i", /* 238 */},
+{ ":i", /* 239 */},
+{ "Sd", /* 240 */},
+{ "~n", /* 241 */},
+{ "`o", /* 242 */},
+{ "'o", /* 243 */},
+{ "^o", /* 244 */},
+{ "~o", /* 245 */},
+{ ":o", /* 246 */},
+{ "tdi", /* 247 */},
+{ "/o", /* 248 */},
+{ "`u", /* 249 */},
+{ "'u", /* 250 */},
+{ "^u", /* 251 */},
+{ ":u", /* 252 */},
+{ "'y", /* 253 */},
+{ "Tp", /* 254 */},
+{ ":y", /* 255 */},
}};
static DviCharNameMap Adobe_Symbol_map = {
"adobe-fontspecific",
1,
{
-{ 0, /* 0 */},
-{ 0, /* 1 */},
-{ 0, /* 2 */},
-{ 0, /* 3 */},
-{ 0, /* 4 */},
-{ 0, /* 5 */},
-{ 0, /* 6 */},
-{ 0, /* 7 */},
-{ 0, /* 8 */},
-{ 0, /* 9 */},
-{ 0, /* 10 */},
-{ 0, /* 11 */},
-{ 0, /* 12 */},
-{ 0, /* 13 */},
-{ 0, /* 14 */},
-{ 0, /* 15 */},
-{ 0, /* 16 */},
-{ 0, /* 17 */},
-{ 0, /* 18 */},
-{ 0, /* 19 */},
-{ 0, /* 20 */},
-{ 0, /* 21 */},
-{ 0, /* 22 */},
-{ 0, /* 23 */},
-{ 0, /* 24 */},
-{ 0, /* 25 */},
-{ 0, /* 26 */},
-{ 0, /* 27 */},
-{ 0, /* 28 */},
-{ 0, /* 29 */},
-{ 0, /* 30 */},
-{ 0, /* 31 */},
-{ 0, /* 32 */},
-{ "!", /* 33 */},
-{ "fa", /* 34 */},
-{ "#", "sh", /* 35 */},
-{ "te", /* 36 */},
-{ "%", /* 37 */},
-{ "&", /* 38 */},
-{ "st", /* 39 */},
-{ "(", /* 40 */},
-{ ")", /* 41 */},
-{ "**", /* 42 */},
-{ "+", "pl", /* 43 */},
-{ ",", /* 44 */},
-{ "\\-", "mi", /* 45 */},
-{ ".", /* 46 */},
-{ "/", "sl", /* 47 */},
-{ "0", /* 48 */},
-{ "1", /* 49 */},
-{ "2", /* 50 */},
-{ "3", /* 51 */},
-{ "4", /* 52 */},
-{ "5", /* 53 */},
-{ "6", /* 54 */},
-{ "7", /* 55 */},
-{ "8", /* 56 */},
-{ "9", /* 57 */},
-{ ":", /* 58 */},
-{ ";", /* 59 */},
-{ "<", /* 60 */},
-{ "=", "eq", /* 61 */},
-{ ">", /* 62 */},
-{ "?", /* 63 */},
-{ "=~", /* 64 */},
-{ "*A", /* 65 */},
-{ "*B", /* 66 */},
-{ "*X", /* 67 */},
-{ "*D", /* 68 */},
-{ "*E", /* 69 */},
-{ "*F", /* 70 */},
-{ "*G", /* 71 */},
-{ "*Y", /* 72 */},
-{ "*I", /* 73 */},
-{ "+h", /* 74 */},
-{ "*K", /* 75 */},
-{ "*L", /* 76 */},
-{ "*M", /* 77 */},
-{ "*N", /* 78 */},
-{ "*O", /* 79 */},
-{ "*P", /* 80 */},
-{ "*H", /* 81 */},
-{ "*R", /* 82 */},
-{ "*S", /* 83 */},
-{ "*T", /* 84 */},
-{ 0, /* 85 */},
-{ "ts", /* 86 */},
-{ "*W", /* 87 */},
-{ "*C", /* 88 */},
-{ "*Q", /* 89 */},
-{ "*Z", /* 90 */},
-{ "[", "lB", /* 91 */},
-{ "tf", "3d", /* 92 */},
-{ "]", "rB", /* 93 */},
-{ "pp", /* 94 */},
-{ "_", /* 95 */},
-{ "radicalex", /* 96 */},
-{ "*a", /* 97 */},
-{ "*b", /* 98 */},
-{ "*x", /* 99 */},
-{ "*d", /* 100 */},
-{ "*e", /* 101 */},
-{ "*f", /* 102 */},
-{ "*g", /* 103 */},
-{ "*y", /* 104 */},
-{ "*i", /* 105 */},
-{ "+f", /* 106 */},
-{ "*k", /* 107 */},
-{ "*l", /* 108 */},
-{ "*m", "\265", /* 109 */},
-{ "*n", /* 110 */},
-{ "*o", /* 111 */},
-{ "*p", /* 112 */},
-{ "*h", /* 113 */},
-{ "*r", /* 114 */},
-{ "*s", /* 115 */},
-{ "*t", /* 116 */},
-{ "*u", /* 117 */},
-{ "+p", /* 118 */},
-{ "*w", /* 119 */},
-{ "*c", /* 120 */},
-{ "*q", /* 121 */},
-{ "*z", /* 122 */},
-{ "lC", "{", /* 123 */},
-{ "ba", "or", "|", /* 124 */},
-{ "rC", "}", /* 125 */},
-{ "ap", /* 126 */},
-{ 0, /* 127 */},
-{ 0, /* 128 */},
-{ 0, /* 129 */},
-{ 0, /* 130 */},
-{ 0, /* 131 */},
-{ 0, /* 132 */},
-{ 0, /* 133 */},
-{ 0, /* 134 */},
-{ 0, /* 135 */},
-{ 0, /* 136 */},
-{ 0, /* 137 */},
-{ 0, /* 138 */},
-{ 0, /* 139 */},
-{ 0, /* 140 */},
-{ 0, /* 141 */},
-{ 0, /* 142 */},
-{ 0, /* 143 */},
-{ 0, /* 144 */},
-{ 0, /* 145 */},
-{ 0, /* 146 */},
-{ 0, /* 147 */},
-{ 0, /* 148 */},
-{ 0, /* 149 */},
-{ 0, /* 150 */},
-{ 0, /* 151 */},
-{ 0, /* 152 */},
-{ 0, /* 153 */},
-{ 0, /* 154 */},
-{ 0, /* 155 */},
-{ 0, /* 156 */},
-{ 0, /* 157 */},
-{ 0, /* 158 */},
-{ 0, /* 159 */},
-{ 0, /* 160 */},
-{ "*U", /* 161 */},
-{ "fm", /* 162 */},
-{ "<=", /* 163 */},
-{ "f/", /* 164 */},
-{ "if", /* 165 */},
-{ "Fn", /* 166 */},
-{ "CL", /* 167 */},
-{ "DI", /* 168 */},
-{ "HE", /* 169 */},
-{ "SP", /* 170 */},
-{ "<>", /* 171 */},
-{ "<-", /* 172 */},
-{ "ua", "arrowverttp" /* 173 */},
-{ "->", /* 174 */},
-{ "da", "arrowvertbt" /* 175 */},
-{ "de", "\260", /* 176 */},
-{ "+-", "\261", /* 177 */},
-{ "sd", /* 178 */},
-{ ">=", /* 179 */},
-{ "mu", "\327", /* 180 */},
-{ "pt", /* 181 */},
-{ "pd", /* 182 */},
-{ "bu", /* 183 */},
-{ "di", "\367", /* 184 */},
-{ "!=", /* 185 */},
-{ "==", /* 186 */},
-{ "~=", "~~", /* 187 */},
-{ 0, /* 188 */},
-{ "arrowvertex", /* 189 */},
-{ "an", /* 190 */},
-{ "CR", /* 191 */},
-{ "Ah", /* 192 */},
-{ "Im", /* 193 */},
-{ "Re", /* 194 */},
-{ "wp", /* 195 */},
-{ "c*", /* 196 */},
-{ "c+", /* 197 */},
-{ "es", /* 198 */},
-{ "ca", /* 199 */},
-{ "cu", /* 200 */},
-{ "sp", /* 201 */},
-{ "ip", /* 202 */},
-{ "nb", /* 203 */},
-{ "sb", /* 204 */},
-{ "ib", /* 205 */},
-{ "mo", /* 206 */},
-{ "nm", /* 207 */},
-{ "/_", /* 208 */},
-{ "gr", /* 209 */},
-{ "rg", /* 210 */},
-{ "co", /* 211 */},
-{ "tm", /* 212 */},
-{ 0, /* 213 */},
-{ "sr", /* 214 */},
-{ "md", /* 215 */},
-{ "no", "\254", /* 216 */},
-{ "AN", /* 217 */},
-{ "OR", /* 218 */},
-{ "hA", /* 219 */},
-{ "lA", /* 220 */},
-{ "uA", /* 221 */},
-{ "rA", /* 222 */},
-{ "dA", /* 223 */},
-{ "lz", /* 224 */},
-{ "la", /* 225 */},
-{ 0, /* 226 */},
-{ 0, /* 227 */},
-{ 0, /* 228 */},
-{ 0, /* 229 */},
-{ "parenlefttp", /* 230 */},
-{ "parenleftex", /* 231 */},
-{ "parenleftbt", /* 232 */},
-{ "bracketlefttp", "lc", /* 233 */},
-{ "bracketleftex", /* 234 */},
-{ "bracketleftbt", "lf", /* 235 */},
-{ "bracelefttp", "lt", /* 236 */},
-{ "braceleftmid", "lk", /* 237 */},
-{ "braceleftbt", "lb", /* 238 */},
+{ 0, /* 0 */},
+{ 0, /* 1 */},
+{ 0, /* 2 */},
+{ 0, /* 3 */},
+{ 0, /* 4 */},
+{ 0, /* 5 */},
+{ 0, /* 6 */},
+{ 0, /* 7 */},
+{ 0, /* 8 */},
+{ 0, /* 9 */},
+{ 0, /* 10 */},
+{ 0, /* 11 */},
+{ 0, /* 12 */},
+{ 0, /* 13 */},
+{ 0, /* 14 */},
+{ 0, /* 15 */},
+{ 0, /* 16 */},
+{ 0, /* 17 */},
+{ 0, /* 18 */},
+{ 0, /* 19 */},
+{ 0, /* 20 */},
+{ 0, /* 21 */},
+{ 0, /* 22 */},
+{ 0, /* 23 */},
+{ 0, /* 24 */},
+{ 0, /* 25 */},
+{ 0, /* 26 */},
+{ 0, /* 27 */},
+{ 0, /* 28 */},
+{ 0, /* 29 */},
+{ 0, /* 30 */},
+{ 0, /* 31 */},
+{ 0, /* 32 */},
+{ "!", /* 33 */},
+{ "fa", /* 34 */},
+{ "#", "sh", /* 35 */},
+{ "te", /* 36 */},
+{ "%", /* 37 */},
+{ "&", /* 38 */},
+{ "st", /* 39 */},
+{ "(", /* 40 */},
+{ ")", /* 41 */},
+{ "**", /* 42 */},
+{ "+", "pl", /* 43 */},
+{ ",", /* 44 */},
+{ "\\-", "mi", /* 45 */},
+{ ".", /* 46 */},
+{ "/", "sl", /* 47 */},
+{ "0", /* 48 */},
+{ "1", /* 49 */},
+{ "2", /* 50 */},
+{ "3", /* 51 */},
+{ "4", /* 52 */},
+{ "5", /* 53 */},
+{ "6", /* 54 */},
+{ "7", /* 55 */},
+{ "8", /* 56 */},
+{ "9", /* 57 */},
+{ ":", /* 58 */},
+{ ";", /* 59 */},
+{ "<", /* 60 */},
+{ "=", "eq", /* 61 */},
+{ ">", /* 62 */},
+{ "?", /* 63 */},
+{ "=~", /* 64 */},
+{ "*A", /* 65 */},
+{ "*B", /* 66 */},
+{ "*X", /* 67 */},
+{ "*D", /* 68 */},
+{ "*E", /* 69 */},
+{ "*F", /* 70 */},
+{ "*G", /* 71 */},
+{ "*Y", /* 72 */},
+{ "*I", /* 73 */},
+{ "+h", /* 74 */},
+{ "*K", /* 75 */},
+{ "*L", /* 76 */},
+{ "*M", /* 77 */},
+{ "*N", /* 78 */},
+{ "*O", /* 79 */},
+{ "*P", /* 80 */},
+{ "*H", /* 81 */},
+{ "*R", /* 82 */},
+{ "*S", /* 83 */},
+{ "*T", /* 84 */},
+{ 0, /* 85 */},
+{ "ts", /* 86 */},
+{ "*W", /* 87 */},
+{ "*C", /* 88 */},
+{ "*Q", /* 89 */},
+{ "*Z", /* 90 */},
+{ "[", "lB", /* 91 */},
+{ "tf", "3d", /* 92 */},
+{ "]", "rB", /* 93 */},
+{ "pp", /* 94 */},
+{ "_", /* 95 */},
+{ "radicalex", /* 96 */},
+{ "*a", /* 97 */},
+{ "*b", /* 98 */},
+{ "*x", /* 99 */},
+{ "*d", /* 100 */},
+{ "*e", /* 101 */},
+{ "*f", /* 102 */},
+{ "*g", /* 103 */},
+{ "*y", /* 104 */},
+{ "*i", /* 105 */},
+{ "+f", /* 106 */},
+{ "*k", /* 107 */},
+{ "*l", /* 108 */},
+{ "*m", /* 109 */},
+{ "*n", /* 110 */},
+{ "*o", /* 111 */},
+{ "*p", /* 112 */},
+{ "*h", /* 113 */},
+{ "*r", /* 114 */},
+{ "*s", /* 115 */},
+{ "*t", /* 116 */},
+{ "*u", /* 117 */},
+{ "+p", /* 118 */},
+{ "*w", /* 119 */},
+{ "*c", /* 120 */},
+{ "*q", /* 121 */},
+{ "*z", /* 122 */},
+{ "lC", "{", /* 123 */},
+{ "ba", "or", "|", /* 124 */},
+{ "rC", "}", /* 125 */},
+{ "ap", /* 126 */},
+{ 0, /* 127 */},
+{ 0, /* 128 */},
+{ 0, /* 129 */},
+{ 0, /* 130 */},
+{ 0, /* 131 */},
+{ 0, /* 132 */},
+{ 0, /* 133 */},
+{ 0, /* 134 */},
+{ 0, /* 135 */},
+{ 0, /* 136 */},
+{ 0, /* 137 */},
+{ 0, /* 138 */},
+{ 0, /* 139 */},
+{ 0, /* 140 */},
+{ 0, /* 141 */},
+{ 0, /* 142 */},
+{ 0, /* 143 */},
+{ 0, /* 144 */},
+{ 0, /* 145 */},
+{ 0, /* 146 */},
+{ 0, /* 147 */},
+{ 0, /* 148 */},
+{ 0, /* 149 */},
+{ 0, /* 150 */},
+{ 0, /* 151 */},
+{ 0, /* 152 */},
+{ 0, /* 153 */},
+{ 0, /* 154 */},
+{ 0, /* 155 */},
+{ 0, /* 156 */},
+{ 0, /* 157 */},
+{ 0, /* 158 */},
+{ 0, /* 159 */},
+{ 0, /* 160 */},
+{ "*U", /* 161 */},
+{ "fm", /* 162 */},
+{ "<=", /* 163 */},
+{ "f/", /* 164 */},
+{ "if", /* 165 */},
+{ "Fn", /* 166 */},
+{ "CL", /* 167 */},
+{ "DI", /* 168 */},
+{ "HE", /* 169 */},
+{ "SP", /* 170 */},
+{ "<>", /* 171 */},
+{ "<-", /* 172 */},
+{ "ua", "arrowverttp", /* 173 */},
+{ "->", /* 174 */},
+{ "da", "arrowvertbt", /* 175 */},
+{ "de", /* 176 */},
+{ "+-", /* 177 */},
+{ "sd", /* 178 */},
+{ ">=", /* 179 */},
+{ "mu", /* 180 */},
+{ "pt", /* 181 */},
+{ "pd", /* 182 */},
+{ "bu", /* 183 */},
+{ "di", /* 184 */},
+{ "!=", /* 185 */},
+{ "==", /* 186 */},
+{ "~=", "~~", /* 187 */},
+{ 0, /* 188 */},
+{ "arrowvertex", /* 189 */},
+{ "an", /* 190 */},
+{ "CR", /* 191 */},
+{ "Ah", /* 192 */},
+{ "Im", /* 193 */},
+{ "Re", /* 194 */},
+{ "wp", /* 195 */},
+{ "c*", /* 196 */},
+{ "c+", /* 197 */},
+{ "es", /* 198 */},
+{ "ca", /* 199 */},
+{ "cu", /* 200 */},
+{ "sp", /* 201 */},
+{ "ip", /* 202 */},
+{ "nb", /* 203 */},
+{ "sb", /* 204 */},
+{ "ib", /* 205 */},
+{ "mo", /* 206 */},
+{ "nm", /* 207 */},
+{ "/_", /* 208 */},
+{ "gr", /* 209 */},
+{ "rg", /* 210 */},
+{ "co", /* 211 */},
+{ "tm", /* 212 */},
+{ 0, /* 213 */},
+{ "sr", /* 214 */},
+{ "md", /* 215 */},
+{ "no", /* 216 */},
+{ "AN", /* 217 */},
+{ "OR", /* 218 */},
+{ "hA", /* 219 */},
+{ "lA", /* 220 */},
+{ "uA", /* 221 */},
+{ "rA", /* 222 */},
+{ "dA", /* 223 */},
+{ "lz", /* 224 */},
+{ "la", /* 225 */},
+{ 0, /* 226 */},
+{ 0, /* 227 */},
+{ 0, /* 228 */},
+{ 0, /* 229 */},
+{ "parenlefttp", /* 230 */},
+{ "parenleftex", /* 231 */},
+{ "parenleftbt", /* 232 */},
+{ "bracketlefttp", "lc", /* 233 */},
+{ "bracketleftex", /* 234 */},
+{ "bracketleftbt", "lf", /* 235 */},
+{ "bracelefttp", "lt", /* 236 */},
+{ "braceleftmid", "lk", /* 237 */},
+{ "braceleftbt", "lb", /* 238 */},
{ "bracerightex", "braceleftex", "bv", /* 239 */},
-{ 0, /* 240 */},
-{ "ra", /* 241 */},
-{ "is", /* 242 */},
-{ 0, /* 243 */},
-{ 0, /* 244 */},
-{ 0, /* 245 */},
-{ "parenrighttp", /* 246 */},
-{ "parenrightex", /* 247 */},
-{ "parenrightbt", /* 248 */},
-{ "bracketrighttp", "rc", /* 249 */},
-{ "bracketrightex", /* 250 */},
-{ "bracketrightbt", "rf", /* 251 */},
-{ "bracerighttp", "rt" /* 252 */},
-{ "bracerightmid", "rk" /* 253 */},
-{ "bracerightbt", "rb" /* 254 */},
-{ 0, /* 255 */},
+{ 0, /* 240 */},
+{ "ra", /* 241 */},
+{ "is", /* 242 */},
+{ 0, /* 243 */},
+{ 0, /* 244 */},
+{ 0, /* 245 */},
+{ "parenrighttp", /* 246 */},
+{ "parenrightex", /* 247 */},
+{ "parenrightbt", /* 248 */},
+{ "bracketrighttp", "rc", /* 249 */},
+{ "bracketrightex", /* 250 */},
+{ "bracketrightbt", "rf", /* 251 */},
+{ "bracerighttp", "rt", /* 252 */},
+{ "bracerightmid", "rk", /* 253 */},
+{ "bracerightbt", "rb", /* 254 */},
+{ 0, /* 255 */},
}};
diff --git a/contrib/groff/src/xditview/Imakefile.in b/contrib/groff/src/xditview/Imakefile.in
index 01fab4f..32b3505 100644
--- a/contrib/groff/src/xditview/Imakefile.in
+++ b/contrib/groff/src/xditview/Imakefile.in
@@ -1,7 +1,7 @@
srcdir=@srcdir@
top_srcdir=@top_srcdir@
VPATH=@srcdir@
-top_builddir=@top_builddir@
+top_builddir=@groff_top_builddir@
version=`cat $(top_srcdir)/VERSION`
# No additional number if revision is zero
@@ -12,7 +12,8 @@ GROFF_DATADIR = $(GROFF_PREFIX)/share
GROFF_DATAPROGRAMDIR = $(GROFF_DATADIR)/groff
GROFF_DATASUBDIR = $(GROFF_DATAPROGRAMDIR)/$(version)$(revision)
GROFF_FONTDIR = $(GROFF_DATASUBDIR)/font
-GROFF_FONTPATH = $(GROFF_FONTDIR):/usr/local/lib/font:/usr/lib/font
+GROFF_LOCALFONTDIR = $(GROFF_DATAPROGRAMDIR)/site-font
+GROFF_FONTPATH = $(GROFF_FONTDIR):$(GROFF_LOCALFONTDIR):/usr/lib/font
DPIS = 75 100
PROGRAMS = \
@@ -72,7 +73,10 @@ DEFINES = \
DEVDIR = $(top_builddir)/font
MKINSTALLDIRS = $(top_srcdir)/mkinstalldirs
+#undef ProgramTargetHelper
+#define ProgramTargetHelper ProgramTargetHelperNoMan
ComplexProgramTarget_1(gxditview,$(LOCAL_LIBRARIES),$(MATHLIB))
+InstallManPageLong($(srcdir)/gxditview,$(MANDIR),gxditview)
NormalProgramTarget(xtotroff,$(OBJS2),$(DEPXLIB),$(XLIB), /**/)
InstallAppDefaults(GXditview)
diff --git a/contrib/groff/src/xditview/parse.c b/contrib/groff/src/xditview/parse.c
index e1df8c9..d763268 100644
--- a/contrib/groff/src/xditview/parse.c
+++ b/contrib/groff/src/xditview/parse.c
@@ -141,6 +141,7 @@ ParseInput(dw)
break;
case 'F': /* input files */
case '+': /* continuation of X device control */
+ case 'm': /* color */
case '#': /* comment */
GetLine(dw, NULL, 0);
break;
@@ -205,7 +206,7 @@ DviWidget dw;
char *buf;
{
int v[DRAW_ARGS_MAX];
- int i;
+ int i, no_move = 0;
char *ptr;
v[0] = v[1] = v[2] = v[3] = 0;
@@ -257,24 +258,28 @@ char *buf;
case 'f':
if (i > 0 && v[0] >= 0 && v[0] <= DVI_FILL_MAX)
dw->dvi.fill = v[0];
+ no_move = 1;
break;
default:
#if 0
warning("unknown drawing function %s", buf);
#endif
+ no_move = 1;
break;
}
- if (buf[0] == 'e') {
- if (i > 0)
- dw->dvi.state->x += v[0];
- }
- else {
- while (--i >= 0) {
- if (i & 1)
- dw->dvi.state->y += v[i];
- else
- dw->dvi.state->x += v[i];
+ if (!no_move) {
+ if (buf[0] == 'e') {
+ if (i > 0)
+ dw->dvi.state->x += v[0];
+ }
+ else {
+ while (--i >= 0) {
+ if (i & 1)
+ dw->dvi.state->y += v[i];
+ else
+ dw->dvi.state->x += v[i];
+ }
}
}
}
diff --git a/contrib/groff/src/xditview/xditview.c b/contrib/groff/src/xditview/xditview.c
index e836cf5..75b7fd1 100644
--- a/contrib/groff/src/xditview/xditview.c
+++ b/contrib/groff/src/xditview/xditview.c
@@ -179,7 +179,9 @@ int main(argc, argv)
toplevel = XtAppInitialize(&xtcontext, "GXditview",
options, XtNumber (options),
&argc, argv, fallback_resources, NULL, 0);
- if (argc > 2)
+ if (argc > 2
+ || (argc == 2 && (!strcmp(argv[1], "-help")
+ || !strcmp(argv[1], "--help"))))
Syntax(argv[0]);
XtGetApplicationResources(toplevel, (XtPointer)&app_resources,
diff --git a/contrib/groff/stamp-h.in b/contrib/groff/stamp-h.in
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/contrib/groff/stamp-h.in
@@ -0,0 +1 @@
+timestamp
diff --git a/contrib/groff/test-groff b/contrib/groff/test-groff
index 4e06e96..cceecee 100755
--- a/contrib/groff/test-groff
+++ b/contrib/groff/test-groff
@@ -1,17 +1,18 @@
#! /bin/sh
# This script runs groff without requiring that it be installed.
-# The current directory must be the build directory.
+# The current directory must be the top build directory.
builddir=./src
srcdir=`echo $0 | sed -e 's;/[^/]*$;;'`
-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
+if test ! -d $builddir/roff/groff || \
+ test ! -r $builddir/roff/groff/groff; then
+ echo $0 must be run with the top build directory as the current directory 2>&1
+ exit 1
fi
GROFF_BIN_PATH=\
+$builddir/roff/groff:\
$builddir/roff/troff:\
$builddir/preproc/pic:\
$builddir/preproc/eqn:\
@@ -34,7 +35,7 @@ XENVIRONMENT=`cd $srcdir; pwd`/src/xditview/GXditview.ad
export XENVIRONMENT
GROFF_COMMAND_PREFIX=
-GROFF_FONT_PATH=$builddir:$srcdir/font
+GROFF_FONT_PATH=$builddir/../font:$srcdir/font
GROFF_TMAC_PATH=$srcdir/tmac
export GROFF_BIN_PATH GROFF_COMMAND_PREFIX GROFF_FONT_PATH GROFF_TMAC_PATH
diff --git a/contrib/groff/tmac/Makefile.sub b/contrib/groff/tmac/Makefile.sub
index 954e177..4bdea45 100644
--- a/contrib/groff/tmac/Makefile.sub
+++ b/contrib/groff/tmac/Makefile.sub
@@ -1,11 +1,10 @@
-MAN5=\
- groff_tmac.n
MAN7=\
groff_ms.n \
groff_man.n \
groff_me.n \
groff_mdoc.n \
- groff_mwww.n
+ groff_trace.n \
+ groff_www.n
NORMALFILES=\
mandoc.tmac andoc.tmac an-old.tmac \
@@ -13,14 +12,17 @@ NORMALFILES=\
mdoc.tmac \
pic.tmac \
a4.tmac \
+ ec.tmac \
safer.tmac \
trace.tmac \
ps.tmac psold.tmac pspic.tmac psatk.tmac \
dvi.tmac \
- tty.tmac tty-char.tmac latin1.tmac \
+ tty.tmac tty-char.tmac \
+ latin1.tmac cp1047.tmac \
X.tmac Xps.tmac \
lj4.tmac \
- html.tmac mwww.tmac www.tmac \
+ lbp.tmac \
+ html.tmac www.tmac \
eqnrc \
troffrc troffrc-end \
hyphen.us
diff --git a/contrib/groff/tmac/README b/contrib/groff/tmac/README
new file mode 100644
index 0000000..9821534
--- /dev/null
+++ b/contrib/groff/tmac/README
@@ -0,0 +1,20 @@
+The file `hyphen.us' is identical to the file `hyphen.tex', part of the TeX
+system written by Donald E. Knuth; the master file can be found at
+
+ ftp://labrea.stanford.edu/pub/tex/dist/lib/hyphen.tex .
+
+It has been renamed for consistency, i.e., to make patterns available under
+the filenames `hyphen.<language>', e.g. `hyphen.de' or `hyphen.uk'.
+
+From the file ftp://labrea.stanford.edu/tex/README; `hyphen.tex' is also in
+this directory:
+
+ The files in this directory are master files maintained personally by
+ Donald E. Knuth. Nobody else is authorized to make any changes whatever
+ to them! If you modify the files for any purpose, you must give your
+ files a different name, so that installations of TeX throughout the
+ world will be 100% compatible when they use the official source files.
+
+ All of the files here are available for anonymous FTP by anyone and may
+ be freely redistributed. Some are copyrighted; see the files themselves
+ for more details.
diff --git a/contrib/groff/tmac/X.tmac b/contrib/groff/tmac/X.tmac
index 464770c..8b9a1ba 100644
--- a/contrib/groff/tmac/X.tmac
+++ b/contrib/groff/tmac/X.tmac
@@ -10,39 +10,48 @@
.ftr HO HI
.ftr HX HBI
.ftr NX NBI
-.char \(ru \D'l .5m 0'
-.char \(ul \v'.25m'\D'l .5m 0'\v'-.25m'
-.char \(br \v'.25m'\D'l 0 -1m'\v'.75m'
-.char \(rn \v'-.75m'\D'l .5m 0'\v'.75m'
-.char ~ \v'-.55m'\\s[\\n(.s/2u]\v'.2m'\(ti\v'-.2m'\s0\v'.55m'
-.char ^ \v'-.55m'\\s[\\n(.s/2u]\v'.3m'\(ha\v'-.3m'\s0\v'.55m'
-.if !c\(va .char \(va \o'\(ua\(da'
-.if !c\(em .char \(em --
-.if !c\(en .char \(en \-
-.if !c\(fi .char \(fi fi
-.if !c\(fl .char \(fl fl
-.if !c\(ff .char \(ff ff
-.if !c\(Fi .char \(Fi ffi
-.if !c\(Fl .char \(Fl ffl
-.if !c\(ci .char \(ci \v'-.25m'\h'.05m'\D'c .5m'\h'.05m'\v'.25m'
-.if !c\(sq .char \(sq \h'.05m'\D'l .5m 0'\D'l 0 -.5m'\D'l -.5m 0'\D'l 0 .5m'\h'.55m'
-.if !c\(ga .char \(ga \Z'\v'-.7m'\D'l .22m .18m''\h'.33m'
-.if !c\(dg .char \(dg \Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
+.char \[ru] \D'l .5m 0'
+.char \[ul] \v'.25m'\D'l .5m 0'\v'-.25m'
+.char \[br] \v'.25m'\D'l 0 -1m'\v'.75m'
+.char \[rn] \v'-.75m'\D'l .5m 0'\v'.75m'
+.char ~ \v'-.55m'\\s[\\n(.s/2u]\v'.2m'\[ti]\v'-.2m'\s0\v'.55m'
+.char ^ \v'-.55m'\\s[\\n(.s/2u]\v'.3m'\[ha]\v'-.3m'\s0\v'.55m'
+.fchar \[va] \o'\[ua]\[da]'
+.fchar \[em] --
+.fchar \[en] \-
+.fchar \[fi] fi
+.fchar \[fl] fl
+.fchar \[ff] ff
+.fchar \[Fi] ffi
+.fchar \[Fl] ffl
+.fchar \[ci] \v'-.25m'\h'.05m'\D'c .5m'\h'.05m'\v'.25m'
+.fchar \[sq] \h'.05m'\D'l .5m 0'\D'l 0 -.5m'\D'l -.5m 0'\D'l 0 .5m'\h'.55m'
+.fchar \[ga] \Z'\v'-.7m'\D'l .22m .18m''\h'.33m'
+.fchar \[dg] \Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
\D'l .39m 0''\h'.5m'
-.if !c\(dd .char \(dd \Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
+.fchar \[dd] \Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
\D'l .39m 0'\v'.4m'\D'l -.39m 0''\h'.5m'
-.if !c\(lq .char \(lq ``
-.if !c\(rq .char \(rq ''
-.if !c\(Bq .char \(Bq ,,
-.if !c\(OE .char \(OE O\h'-.25m'E
-.if !c\(oe .char \(oe o\h'-.14m'e
-.if !c\(ah .char \(ah \v'-.55m'\s[\En[.s]/2u]v\s0\v'.55m'
-.if !c\(ao .char \(ao \v'-.55m'\s[\En[.s]*6u/10u]\D'c .25m'\s0\v'.55m'
-.if !c\(ho .char \(ho \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0
-.if !c\(lh .tr \(lh\(lA
-.if !c\(rh .tr \(rh\(rA
-.if !c\(bq .tr \(bq,
-.if !c\(aq .tr \(aq'
-.if '\*(.T'X100' .char \[radicalex] \h'-\w'\(sr'u'\[radicalex]\h'\w'\(sr'u'
-.if !\n(_C .mso pspic.tmac
-.cp \n(_C
+.fchar \[lq] ``
+.fchar \[rq] ''
+.fchar \[Bq] ,,
+.fchar \[OE] O\h'-.25m'E
+.fchar \[oe] o\h'-.14m'e
+.fchar \[ah] \v'-.55m'\s[\En[.s]/2u]v\s0\v'.55m'
+.fchar \[ao] \v'-.55m'\s[\En[.s]*6u/10u]\D'c .25m'\s0\v'.55m'
+.fchar \[ho] \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0
+.fchar \[lh] \[lA]
+.fchar \[rh] \[rA]
+.fchar \[bq] ,
+.fchar \[aq] '
+.if '\*[.T]'X100' \
+. char \[radicalex] \h'-\w'\[sr]'u'\[radicalex]\h'\w'\[sr]'u'
+.if !\n[_C] \
+. mso pspic.tmac
+.cp \n[_C]
+.
+.do ie '\[char97]'a' \
+. do mso latin1.tmac
+.el \
+. do mso cp1047.tmac
+.
+.\" make sure that no blank lines creep in at the end of this file.
diff --git a/contrib/groff/tmac/Xps.tmac b/contrib/groff/tmac/Xps.tmac
index ddb037a..1064ba6 100644
--- a/contrib/groff/tmac/Xps.tmac
+++ b/contrib/groff/tmac/Xps.tmac
@@ -4,43 +4,52 @@
.nr _C \n(.C
.cp 0
.de Xps-char
-.char \\$1 \Z"\X'ps: invis'\\$2\X'ps: endinvis'"\\$1
+. char \\$1 \Z"\X'ps: invis'\\$2\X'ps: endinvis'"\\$1
..
-.Xps-char \(bu \fS\(bu\fP
-.Xps-char \(em "\v'-.25m'\h'.05m'\D'l .9m 0'\h'.05m'"
-.Xps-char \(aq '
-.Xps-char \(bq ,
-.Xps-char \(Bq ,,
-.Xps-char \(lq ``
-.Xps-char \(rq ''
-.Xps-char \(OE OE
-.Xps-char \(oe oe
-.Xps-char \(Fn \fS\(Fn\fP
-.Xps-char \(vS \o'\(ahS'
-.Xps-char \(vs \o'\(ahs'
-.Xps-char \(vZ \o'\(ahZ'
-.Xps-char \(vz \o'\(ahz'
-.Xps-char \(/L \o'/L'
-.Xps-char \(/l \o'/l'
-.Xps-char \(:Y \o'\(adY'
-.Xps-char \(a" \(sd
-.Xps-char \(a. \v'-.6m'.
-.Xps-char \(ga "\Z'\v'-.7m'\D'l .22m .18m''\h'.33m'"
-.Xps-char \(ab \v'-.55m'\s'\\\\n(.s*6u/10u'u\s0
-.Xps-char \(ah \v'-.55m'\s[\En[.s]/2u]v\s0\v'.55m'
-.Xps-char \(ao "\v'-.55m'\s[\En[.s]*6u/10u]\D'c .25m'\s0\v'.55m'"
-.Xps-char \(ho \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0
-.Xps-char \(.i i
-.Xps-char \(fo <
-.Xps-char \(fc >
-.Xps-char \(OK \s'\\\\n(.s*6u/10u'\e\s0/
-.Xps-char \(tm \v'-.3m'\s'\\\\n(.s*6u/10u'TM\s0\v'.3m'
-.Xps-char \(dd "\Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
-\D'l .39m 0'\v'.4m'\D'l -.39m 0''\h'.5m'"
-.Xps-char \(dg "\Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
-\D'l .39m 0''\h'.5m'"
-.Xps-char \(en \-
-.Xps-char \(%0 %\s'\\\\n(.s*6u/10u'\fI0\fP\s0
-.Xps-char \(lh \(->
-.Xps-char \(rh \(<-
-.cp \n(_C
+.
+.Xps-char \[bu] \f[S]\[bu]
+.Xps-char \[f/] \f[S]\[f/]
+.Xps-char \[em] "\v'-.25m'\h'.05m'\D'l .9m 0'"
+.Xps-char \[aq] '
+.Xps-char \[bq] ,
+.Xps-char \[Bq] ,,
+.Xps-char \[lq] ``
+.Xps-char \[rq] ''
+.Xps-char \[OE] OE
+.Xps-char \[oe] oe
+.Xps-char \[Fn] \f[S]\[Fn]
+.Xps-char \[vS] \o'\[ah]S'
+.Xps-char \[vs] \o'\[ah]s'
+.Xps-char \[vZ] \o'\[ah]Z'
+.Xps-char \[vz] \o'\[ah]z'
+.Xps-char \[/L] \o'/L'
+.Xps-char \[/l] \o'/l'
+.Xps-char \[:Y] \o'\[ad]Y'
+.Xps-char \[a"] \[sd]
+.Xps-char \[a.] \v'-.6m'.
+.Xps-char \[ga] "\Z'\v'-.7m'\D'l .22m .18m''"
+.Xps-char \[ab] \v'-.55m'\s[\En[.s]*6u/10u]u\s[0]
+.Xps-char \[ah] \v'-.55m'\s[\En[.s]/2u]v\s[0]
+.Xps-char \[ao] "\v'-.55m'\s[\En[.s]*6u/10u]\D'c .25m'\s[0]"
+.Xps-char \[ho] \s[\En[.s]/2u]\v'.4m'c\s[0]
+.Xps-char \[.i] i
+.Xps-char \[fo] <
+.Xps-char \[fc] >
+.Xps-char \[OK] \s[\En[.s]*6u/10u]\e\s[0]/
+.Xps-char \[tm] \v'-.3m'\s[\En[.s]*6u/10u]TM\s[0]
+.Xps-char \[dd] "\Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
+\D'l .39m 0'\v'.4m'\D'l -.39m 0''"
+.Xps-char \[dg] "\Z'\h'.25m'\v'.15m'\D'l 0 -.8m'\v'.2m'\h'-.195m'\
+\D'l .39m 0''"
+.Xps-char \[en] \-
+.Xps-char \[%0] %\s[\En[.s]*6u/10u]\f[I]0
+.Xps-char \[lh] \[->]
+.Xps-char \[rh] \[<-]
+.cp \n[_C]
+.
+.do ie '\[char97]'a' \
+. do mso latin1.tmac
+.el \
+. do mso cp1047.tmac
+.
+.\" make sure that no blank lines creep in at the end of this file.
diff --git a/contrib/groff/tmac/an-old.tmac b/contrib/groff/tmac/an-old.tmac
index 1402e4d..3cee907 100644
--- a/contrib/groff/tmac/an-old.tmac
+++ b/contrib/groff/tmac/an-old.tmac
@@ -1,6 +1,7 @@
.\" an-old.tmac
.\"
-.\" Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc.
+.\" Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+.\" Free Software Foundation, Inc.
.\" Written by James Clark (jjc@jclark.com)
.\"
.\" This file is part of groff.
@@ -30,16 +31,18 @@
.\" -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 you need to add things to TH, use `.am1 TH'.
.\"
.
.if !\n(.g .ab These man macros work only with groff.
.
+.do if d RI .nx
+.
.nr _C \n(.C
.cp 0
.
-.if (\n[.x]\n[.y]\n[.Y] < 1171) \
-. ab You need GNU troff version 1.17.1 or higher to run this version of man!
+.if (\n[.x]\n[.y] < 118) \
+. ab You need GNU troff version 1.18 or higher to run this version of man!
.
.if !r D .nr D 0
.if !r C .nr C 0
@@ -55,11 +58,33 @@
. el .nr cR 0
.\}
.
+.if !r LL \{\
+. ie n .nr LL 78n
+. el .nr LL 6.5i
+.\}
+.if !r LT \{\
+. ie n .nr LT 78n
+. el .nr LT 6.5i
+.\}
+.
.nr an-html 0
.if '\*[.T]'html' .nr an-html 1
.if \n[an-html] .nr C 1
.if r ps4html .nr C 1
.
+.\" we redefine .ne to avoid page breaks; instead, the page length is
+.\" increased to the necessary amount (this is needed for tables)
+.if n \{\
+. de1 ne
+. ie \\n[.$] \
+. nr an-ne \\$*
+. el \
+. nr an-ne 1v
+. if (\\n[an-ne] >= \\n[.t]) \
+. pl +(\\n[an-ne]u - \\n[.t]u + 1v)
+. .
+.\}
+.
.de set-an-margin
. nr an-margin \\n[IN]
..
@@ -67,7 +92,7 @@
.\" .TH title section extra1 extra2 extra3
.de1 TH
. if \\n[an-html] \{\
-. HTML-TAG ".tl"
+. HTML-TAG ".tl"
\\$1
. \}
.
@@ -109,6 +134,7 @@
.
. ps \\n[PS]u
. vs \\n[VS]u
+. ll \\n[LL]u
.
. nr IN 7.2n
. PD
@@ -171,6 +197,7 @@
. ev 1
. ps \\n[PS]u
. vs \\n[VS]u
+. lt \\n[LT]u
. ie \\n[an-html] \
. tl ''''
. el \{\
@@ -196,6 +223,7 @@
. ev 1
. ps \\n[PS]u
. vs \\n[VS]u
+. lt \\n[LT]u
. ie \\n[an-html] \{\
. ds an-page-string
. ds an-extra1
@@ -226,7 +254,7 @@
.
.de1 an-end
. nr % 1
-. pl +3v
+. pl +4v
. fl
. sp 3
. an-p-footer
@@ -249,7 +277,7 @@
. nr an-break-flag 1
. ps \\n[PS-SH]u
. ft B
-. if !\\n[cR] .ne (2v + 1u)
+. ne (2v + 1u)
. if \\n[.$] \&\\$*
..
.
@@ -266,7 +294,7 @@
. nr an-break-flag 1
. ps \\n[PS-SS]u
. ft B
-. if !\\n[cR] .ne (2v + 1u)
+. ne (2v + 1u)
. if \\n[.$] \&\\$*
..
.
@@ -279,7 +307,7 @@
.de1 I
. it 1 an-trap
. ft I
-. if \\n[.$] \&\\$*
+. if \\n[.$] \,\\$*\/
..
.
.de1 SM
@@ -299,12 +327,9 @@
. sp \\n[PD]u
. if \\n[.$] .nr an-prevailing-indent (n;\\$1)
. it 1 an-trap
+. in 0
+. ll -\\n[an-margin]u
. if !\\n[an-div?] .di an-div
-. ie \\n[an-html] .in \\n[an-margin]u
-. el \{\
-. in 0
-. ll -\\n[an-margin]u
-. \}
. nr an-div? 1
..
.
@@ -330,7 +355,7 @@
. di
. ie (\\n[dl] + \\n[an-tag-sep] > \\n[an-prevailing-indent]) \{\
. in \\n[an-margin]u
-. if !\\n[cR] .ne (2v + 1u)
+. ne (2v + 1u)
. an-div
. br
. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
@@ -339,11 +364,32 @@
. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
. ti -\\n[an-prevailing-indent]u
. chop an-div
-. if !\\n[cR] .ne (1v + 1u)
+. ne (1v + 1u)
\\*[an-div]\\h'|\\n[an-prevailing-indent]u'\c
. \}
..
.
+.de an-do-tag-html
+. nr an-div? 0
+. br
+. ll
+. di
+. ie ((\\n[dl] + \\n[an-tag-sep]) > \\n[an-prevailing-indent]) \{\
+. in \\n[an-margin]u
+. an-div
+. br
+. in (\\n[an-margin]u + \\n[an-prevailing-indent]u + \\n[an-tag-sep]u)
+. \}
+. el \{\
+. in (\\n[an-margin]u + \\n[an-prevailing-indent]u + \\n[an-tag-sep]u)
+. ti \\n[an-margin]u
+. chop an-div
+. HTML-TAG-NS ".col 1"
+\\*[an-div]\\h'|\\n[an-prevailing-indent]u'\\h'\\n[an-tag-sep]u'\c
+. HTML-TAG-NS ".col 2"
+. \}
+..
+.
.de1 LP
. br
. sp \\n[PD]u
@@ -363,7 +409,7 @@
. vs \\n[VS]u
. ft R
. sp \\n[PD]u
-. if !\\n[cR] .ne (1v + 1u)
+. ne (1v + 1u)
. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
. \}
. el \{\
@@ -378,7 +424,7 @@
. vs \\n[VS]u
. ft R
. sp \\n[PD]u
-. if !\\n[cR] .ne (1v + 1u)
+. 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
@@ -483,17 +529,55 @@
. in \\n[an-margin]u
..
.
+.\" table support
+.
+.de1 TS
+. sp \\n[PD]u
+. HTML-IMAGE
+..
+.
+.de1 T&
+..
+.
+.de1 TE
+. HTML-IMAGE-END
+..
+.
+.\" dummy equation delimiters
+.de1 EQ
+. HTML-IMAGE
+..
+.de1 EN
+. HTML-IMAGE-END
+..
+.
+.de1 R
+\c
+. ie \\n[.$] \{\
+. tm `R' is a string (producing the registered sign), not a macro.
+. nop \\$*
+. \}
+. el \{\
+. ie c\[rg] \
+. nop \[rg]\c
+. el \
+. nop (Reg.)\c
+. \}
+..
+.
.\" these strings must work in compatibility mode also
.
-.ds S \s(\\n(PS
-.ie c\[rg] .ds R \(rg
-.el .ds R (Reg.)
+.ds S \s'\\n(PSu'
.ie c\[tm] .ds Tm \(tm
.el .ds Tm (TM)
.ds lq \(lq
.ds rq \(rq
.
-.if !\n[an-html] .hy 14
+.ie \n[an-html] \{\
+. rm an-do-tag
+. als an-do-tag an-do-tag-html
+.\}
+.el .hy 14
.
.\" Load local modifications.
.mso man.local
diff --git a/contrib/groff/tmac/andoc.tmac b/contrib/groff/tmac/andoc.tmac
index f6a16db..bfb869a 100644
--- a/contrib/groff/tmac/andoc.tmac
+++ b/contrib/groff/tmac/andoc.tmac
@@ -12,3 +12,8 @@
.do mso an-old.tmac
\\*(TH\\
..
+.\" dummy equation macros -- eqnrc is read before .TH or .Dd is parsed.
+.de EQ
+..
+.de EN
+..
diff --git a/contrib/groff/tmac/cp1047.tmac b/contrib/groff/tmac/cp1047.tmac
new file mode 100644
index 0000000..8b02753
--- /dev/null
+++ b/contrib/groff/tmac/cp1047.tmac
@@ -0,0 +1,105 @@
+.\" cp1047.tmac
+.\"
+.nr _C \n(.C
+.cp 0
+.de cp1047-tr
+. if c\\$2 .if !c\\$1 .trin \\$1\\$2
+..
+.
+.cp1047-tr \[char66] \[^a]
+.cp1047-tr \[char67] \[:a]
+.cp1047-tr \[char68] \[`a]
+.cp1047-tr \[char69] \['a]
+.cp1047-tr \[char70] \[~a]
+.cp1047-tr \[char71] \[oa]
+.cp1047-tr \[char72] \[,c]
+.cp1047-tr \[char73] \[~n]
+.cp1047-tr \[char74] \[ct]
+.cp1047-tr \[char81] \['e]
+.cp1047-tr \[char82] \[^e]
+.cp1047-tr \[char83] \[:e]
+.cp1047-tr \[char84] \[`e]
+.cp1047-tr \[char85] \['i]
+.cp1047-tr \[char86] \[^i]
+.cp1047-tr \[char87] \[:i]
+.cp1047-tr \[char88] \[`i]
+.cp1047-tr \[char89] \[ss]
+.cp1047-tr \[char98] \[^A]
+.cp1047-tr \[char99] \[:A]
+.cp1047-tr \[char100] \[`A]
+.cp1047-tr \[char101] \['A]
+.cp1047-tr \[char102] \[~A]
+.cp1047-tr \[char103] \[oA]
+.cp1047-tr \[char104] \[,C]
+.cp1047-tr \[char105] \[~N]
+.cp1047-tr \[char106] \[bb]
+.cp1047-tr \[char112] \[/o]
+.cp1047-tr \[char113] \['E]
+.cp1047-tr \[char114] \[^E]
+.cp1047-tr \[char115] \[:E]
+.cp1047-tr \[char116] \[`E]
+.cp1047-tr \[char117] \['I]
+.cp1047-tr \[char118] \[^I]
+.cp1047-tr \[char119] \[:I]
+.cp1047-tr \[char120] \[`I]
+.cp1047-tr \[char128] \[/O]
+.cp1047-tr \[char138] \[Fo]
+.cp1047-tr \[char139] \[Fc]
+.cp1047-tr \[char140] \[Sd]
+.cp1047-tr \[char141] \['y]
+.cp1047-tr \[char142] \[Tp]
+.cp1047-tr \[char143] \[t+-]
+.cp1047-tr \[char144] \[de]
+.cp1047-tr \[char154] \[Of]
+.cp1047-tr \[char155] \[Om]
+.cp1047-tr \[char156] \[ae]
+.cp1047-tr \[char157] \[ac]
+.cp1047-tr \[char158] \[AE]
+.cp1047-tr \[char159] \[Cs]
+.cp1047-tr \[char160] \[mc]
+.cp1047-tr \[char170] \[r!]
+.cp1047-tr \[char171] \[r?]
+.cp1047-tr \[char172] \[-D]
+.cp1047-tr \[char174] \[TP]
+.cp1047-tr \[char175] \[rg]
+.cp1047-tr \[char176] \[no]
+.cp1047-tr \[char177] \[Po]
+.cp1047-tr \[char178] \[Ye]
+.cp1047-tr \[char179] \[pc]
+.cp1047-tr \[char180] \[co]
+.cp1047-tr \[char181] \[sc]
+.cp1047-tr \[char182] \[ps]
+.cp1047-tr \[char183] \[14]
+.cp1047-tr \[char184] \[12]
+.cp1047-tr \[char185] \[34]
+.cp1047-tr \[char186] \['Y]
+.cp1047-tr \[char187] \[ad]
+.cp1047-tr \[char188] \[a-]
+.cp1047-tr \[char190] \[aa]
+.cp1047-tr \[char191] \[tmu]
+.\" The soft-hyphen character is only an input character
+.tr \[char202]\%
+.cp1047-tr \[char203] \[^o]
+.cp1047-tr \[char204] \[:o]
+.cp1047-tr \[char205] \[`o]
+.cp1047-tr \[char206] \['o]
+.cp1047-tr \[char207] \[~o]
+.cp1047-tr \[char218] \[S1]
+.cp1047-tr \[char219] \[^u]
+.cp1047-tr \[char220] \[:u]
+.cp1047-tr \[char221] \[`u]
+.cp1047-tr \[char222] \['u]
+.cp1047-tr \[char223] \[:y]
+.cp1047-tr \[char225] \[tdi]
+.cp1047-tr \[char234] \[S2]
+.cp1047-tr \[char235] \[^O]
+.cp1047-tr \[char236] \[:O]
+.cp1047-tr \[char237] \[`O]
+.cp1047-tr \[char238] \['O]
+.cp1047-tr \[char239] \[~O]
+.cp1047-tr \[char250] \[S3]
+.cp1047-tr \[char251] \[^U]
+.cp1047-tr \[char252] \[:U]
+.cp1047-tr \[char253] \[`U]
+.cp1047-tr \[char254] \['U]
+.cp \n(_C
diff --git a/contrib/groff/tmac/doc-common b/contrib/groff/tmac/doc-common
index 62a9d42..7310d19 100644
--- a/contrib/groff/tmac/doc-common
+++ b/contrib/groff/tmac/doc-common
@@ -151,7 +151,7 @@
.nr Xr 10n
.
.
-.\" requests which must be processed after the closing delimiter of `Op'
+.\" macros which must be processed after the closing delimiter of `Op'
.\" and friends
.ds doc-after-Ao
.ds doc-after-Bo
@@ -543,16 +543,16 @@
. doc-setup-page-layout
. if !\n[cR] \
' sp \n[doc-header-space]u
-. nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\f[P]'
-. nr doc-reg-dh1 \w'\*[doc-caption-font2]\*[doc-volume]\f[P]'
+. nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\f[]'
+. nr doc-reg-dh1 \w'\*[doc-caption-font2]\*[doc-volume]\f[]'
. if (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
. while (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
-. substring doc-header-string 1 -1
-. nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\|.\|.\|.\f[P]'
+. substring doc-header-string 0 -2
+. nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\|.\|.\|.\f[]'
. \}
. as doc-header-string "\|.\|.\|.
. \}
-. tl \*[doc-caption-font]\*[doc-header-string]\f[P]\*[doc-caption-font2]\*[doc-volume]\f[P]\*[doc-caption-font]\*[doc-header-string]\f[P]
+. tl \*[doc-caption-font]\*[doc-header-string]\f[]\*[doc-caption-font2]\*[doc-volume]\f[]\*[doc-caption-font]\*[doc-header-string]\f[]
' sp \n[doc-header-space]u
. ev
..
@@ -570,12 +570,12 @@
' sp \n[doc-footer-space]u
. ie \n[D] \{\
. ie o \
-. tl %\*[doc-caption-font2]\*[doc-date-string]\f[P]\*[doc-caption-font]\*[doc-operating-system]\f[P]
+. tl %\*[doc-caption-font2]\*[doc-date-string]\f[]\*[doc-caption-font]\*[doc-operating-system]\f[]
. el \
-. tl \*[doc-caption-font]\*[doc-operating-system]\f[P]\*[doc-caption-font2]\*[doc-date-string]\f[P]%
+. tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]%
. \}
. el \
-. tl \*[doc-caption-font]\*[doc-operating-system]\f[P]\*[doc-caption-font2]\*[doc-date-string]\f[P]%
+. tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]%
' bp
. ev
. \}
@@ -603,7 +603,7 @@
.
. if \n[cR] \{\
' sp
-. tl \*[doc-caption-font]\*[doc-operating-system]\f[P]\*[doc-caption-font2]\*[doc-date-string]\f[P]\*[doc-caption-font]\*[doc-operating-system]\f[P]
+. tl \*[doc-caption-font]\*[doc-operating-system]\f[]\*[doc-caption-font2]\*[doc-date-string]\f[]\*[doc-caption-font]\*[doc-operating-system]\f[]
. \" suppress empty lines after the footer
. pl \n[nl]u
. \}
diff --git a/contrib/groff/tmac/doc-ditroff b/contrib/groff/tmac/doc-ditroff
index dff5537..94f7e50 100644
--- a/contrib/groff/tmac/doc-ditroff
+++ b/contrib/groff/tmac/doc-ditroff
@@ -100,12 +100,12 @@
.ds doc-Va-font \f[I]\s[\n[.ps]u]
.ds doc-Xr-font \f[C]\s[\n[.ps]u]
.
-.ds doc-left-parenthesis \f[R]\|(\|\f[P]\s[\n[.ps]u]
-.ds doc-right-parenthesis \f[R]\|)\|\f[P]\s[\n[.ps]u]
-.ds lp \f[R](\f[P]\s[\n[.ps]u]
-.ds rp \f[R])\f[P]\s[\n[.ps]u]
-.ds doc-left-bracket \f[R]\^[\^\f[P]\s[\n[.ps]u]
-.ds doc-right-bracket \f[R]\^]\f[P]\s[\n[.ps]u]
+.ds doc-left-parenthesis \f[R]\|(\|\f[]\s[\n[.ps]u]
+.ds doc-right-parenthesis \f[R]\|)\|\f[]\s[\n[.ps]u]
+.ds lp \f[R](\f[]\s[\n[.ps]u]
+.ds rp \f[R])\f[]\s[\n[.ps]u]
+.ds doc-left-bracket \f[R]\^[\^\f[]\s[\n[.ps]u]
+.ds doc-right-bracket \f[R]\^]\f[]\s[\n[.ps]u]
.
.tr *\[**]
.
@@ -149,8 +149,16 @@
. nr doc-header-space .5i
. nr doc-footer-space .5i
.
-. ll 6.5i
-. lt 6.5i
+. ie r LL \
+. ll \n[LL]u
+. el \
+. ll 6.5i
+.
+. ie r LT \
+. lt \n[LT]u
+. el \
+. lt 6.5i
+.
. po 1i
.
. nr doc-display-vertical .5v
@@ -177,8 +185,9 @@
.ds Gt >
.ds Pm \[+-]
.ds If \[if]
-.ds Na \f[I]NaN\f[P]
-.ds Ba \f[R]|\f[P]
+.ds Na \f[I]NaN\f[]
+.ds Ba \f[R]|\f[]
+.ds Am &
.
.nr gX 0
.
diff --git a/contrib/groff/tmac/doc-nroff b/contrib/groff/tmac/doc-nroff
index ce4e987..9c5f307 100644
--- a/contrib/groff/tmac/doc-nroff
+++ b/contrib/groff/tmac/doc-nroff
@@ -78,12 +78,12 @@
.ds doc-Va-font \f[I]
.ds doc-Xr-font \f[R]
.
-.ds doc-left-parenthesis \f[R](\f[P]
-.ds doc-right-parenthesis \f[R])\f[P]
-.ds lp \f[R](\f[P]
-.ds rp \f[R])\f[P]
-.ds doc-left-bracket \f[R][\f[P]
-.ds doc-right-bracket \f[R]]\f[P]
+.ds doc-left-parenthesis \f[R](\f[]
+.ds doc-right-parenthesis \f[R])\f[]
+.ds lp \f[R](\f[]
+.ds rp \f[R])\f[]
+.ds doc-left-bracket \f[R][\f[]
+.ds doc-right-bracket \f[R]]\f[]
.
.\" miscellaneous
.nr doc-subheader-indent .5i
@@ -128,8 +128,16 @@
. nr doc-header-space .5i
. nr doc-footer-space .5i
.
-. ll 78n
-. lt 78n
+. ie r LL \
+. ll \n[LL]u
+. el \
+. ll 78n
+.
+. ie r LT \
+. lt \n[LT]u
+. el \
+. lt 78n
+.
. po 0i
.
. nr doc-display-vertical 1v
@@ -155,8 +163,9 @@
.ds Lt <
.ds Gt >
.ds Pm \[+-]
-.ds Na \f[I]NaN\f[P]
-.ds Ba \f[R]|\f[P]
+.ds Na \f[I]NaN\f[]
+.ds Ba \f[R]|\f[]
+.ds Am &
.
.\" Unicode TTYs have all glyph forms; for other TTY character sets we need
.\" character representations which are different from GNU troff's standard
diff --git a/contrib/groff/tmac/doc.tmac b/contrib/groff/tmac/doc.tmac
index b212e18..3667643 100644
--- a/contrib/groff/tmac/doc.tmac
+++ b/contrib/groff/tmac/doc.tmac
@@ -51,11 +51,14 @@
. ab This version of mdoc can be run with GNU troff only!
.
.
+.do if d Dd .nx
+.
+.
.cp 0
.
.
-.if (\n[.x]\n[.y] < 117) \
-. ab You need GNU troff version 1.17 or higher to run this version of mdoc!
+.if (\n[.x]\n[.y] < 118) \
+. ab You need GNU troff version 1.18 or higher to run this version of mdoc!
.
.
.\" Load start-up files
@@ -155,7 +158,7 @@
.
. \" handle `|' and `...' specially
. ie "\$1"|" \
-. ds doc-arg\n[doc-arg-limit] \f[R]|\f[P]
+. ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
. el \{ .ie "\$1"..." \
. ds doc-arg\n[doc-arg-limit] \|.\|.\|.
. el \
@@ -204,7 +207,7 @@
. nr doc-arg-limit +1
.
. ie "\*[doc-arg\n[doc-arg-limit]]"|" \
-. ds doc-arg\n[doc-arg-limit] \f[R]|\f[P]
+. ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
. el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \
. ds doc-arg\n[doc-arg-limit] \|.\|.\|.
. \}
@@ -357,7 +360,7 @@
.
. if !\n[.$] \{\
. \" no arguments
-. nop \|\-\|\f[P]\s[0]
+. nop \|\-\|\f[]\s[0]
. \}\}
.
. if !\n[doc-arg-limit] \
@@ -366,12 +369,12 @@
. nr doc-arg-ptr +1
. ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
. \" last argument
-. nop \|\-\f[P]\s[0]\c
+. nop \|\-\f[]\s[0]\c
. doc-print-and-reset
. \}
. el \{\
. ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
-. nop \|\-\f[P]\s[0]\c
+. nop \|\-\f[]\s[0]\c
. \*[doc-arg\n[doc-arg-ptr]]
. \}
. el \{\
@@ -400,7 +403,7 @@
. ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]]
.
. ie (\n[doc-reg-dfr1] == 1) \{\
-. nop \f[P]\s[0]\c
+. nop \f[]\s[0]\c
. \*[doc-str-dfr]
. \}
. el \{\
@@ -416,10 +419,10 @@
. nop \)\*[Ba]\c
. \}
. el \{\
-. ie "\*[doc-str-dfr]"\f[R]|\f[P]" \{\
+. ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\
. if \n[doc-reg-Fl] \
. nop \|\-\*[doc-space]\c
-. nop \f[R]|\f[P]\c
+. nop \f[R]|\f[]\c
. \}
. el \{\
. \" two consecutive hyphen characters?
@@ -430,14 +433,14 @@
. \}\}\}
. el \{\
. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-. nop \)\*[doc-str-dfr]\f[P]\s[0]\c
+. nop \)\*[doc-str-dfr]\f[]\s[0]\c
. \}
.
. ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
. \" last argument
. if (\n[doc-reg-dfr1] == 4) \
. nop \|\-\c
-. nop \f[P]\s[0]\c
+. nop \f[]\s[0]\c
. doc-print-and-reset
. \}
. el \{\
@@ -486,7 +489,7 @@
. el \{\
. \" punctuation character
. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-. nop \)\*[doc-str-dpr]\f[P]\s[0]\c
+. nop \)\*[doc-str-dpr]\f[]\s[0]\c
. \}
.
. nr doc-arg-ptr +1
@@ -513,7 +516,7 @@
. if !(\n[doc-type\n[doc-arg-ptr]] == 4) \
. break
. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-. nop \)\*[doc-arg\n[doc-arg-ptr]]\f[P]\s[0]\c
+. nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
. nr doc-arg-ptr +1
. \}
..
@@ -544,7 +547,8 @@
. nr doc-arg-ptr +1
. ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
. if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
-. tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
+. tmc mdoc warning: Using a macro as first argument
+. tm1 " cancels effect of .\$0 (#\n[.c])
.
. \" the right action here would be to reset the argument counters
. \" and bail out -- unfortunately, a small number of manual pages
@@ -595,7 +599,7 @@
.
. if !\n[.$] \{\
. \" no argument
-. nop \)\*[doc-str-Ar-default]\&\f[P]\s[0]
+. nop \)\*[doc-str-Ar-default]\&\f[]\s[0]
. \}\}
.
. if !\n[doc-arg-limit] \
@@ -604,7 +608,7 @@
. nr doc-arg-ptr +1
. doc-print-prefixes
. ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-. nop \)\*[doc-str-Ar-default]\&\f[P]\s[0]\c
+. nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c
. doc-print-and-reset
. \}
. el \{\
@@ -923,7 +927,7 @@
. doc-reset-args
. \}
. el \{\
-. nop \*[doc-Nm-font]\*[doc-command-name]\f[P]\s[0]\c
+. nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c
. doc-print-and-reset
. \}\}
. el \{\
@@ -936,7 +940,7 @@
. el \{\
. \" replace previous argument (Nm) with default value
. nr doc-arg-ptr -1
-. ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[P]\s[0]
+. ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]
. nr doc-type\n[doc-arg-ptr] 2
. ds doc-space\n[doc-arg-ptr] "\*[doc-space]
.
@@ -988,7 +992,7 @@
.
. if !\n[.$] \{\
. \" default value
-. nop \*[doc-Pa-font]~\f[P]\s[0]
+. nop \*[doc-Pa-font]~\f[]\s[0]
. \}\}
.
. if !\n[doc-arg-limit] \
@@ -1015,7 +1019,7 @@
. doc-print-recursive
. \}
. el \{\
-. nop \*[doc-Pa-font]~\f[P]\s[0]\c
+. nop \*[doc-Pa-font]~\f[]\s[0]\c
. doc-print-and-reset
. \}
..
@@ -1936,7 +1940,7 @@
. doc-print-and-reset
. \}
.
-. \" shall we finish .It request?
+. \" shall we finish .It macro?
. if !"\*[doc-macro-name]"It" \
. if \n[doc-in-list] \
. if !\n[doc-nesting-level] \
@@ -2022,7 +2026,7 @@
.
.de Ap
. ie !\n[doc-arg-limit] \
-. tm Usage: `Ap' cannot be first request on a line (no `.Ap') (#\n[.c])
+. tm Usage: `Ap' cannot be first macro on a line (no `.Ap') (#\n[.c])
. el \{\
. nop \)'\)\c
. nr doc-arg-ptr +1
@@ -2375,7 +2379,7 @@
.
.
.\" NS doc-fontmode-font-stackXXX global register
-.\" NS stack of saved current font values from `Bf' request
+.\" NS stack of saved current font values from `Bf' macro
.\" NS
.\" NS limit:
.\" NS doc-fontmode-depth
@@ -2384,7 +2388,7 @@
.
.
.\" NS doc-fontmode-size-stackXXX global register
-.\" NS stack of saved current size values from `Bf' request
+.\" NS stack of saved current size values from `Bf' macro
.\" NS
.\" NS limit:
.\" NS doc-fontmode-depth
@@ -2426,7 +2430,7 @@
. el \{ .ie "\$1"-symbolic" \
. nop \*[doc-Sy-font]\c
. el \{\
-. tmc mdoc warning: Unknown keyword `\$1' in .Bf request
+. tmc mdoc warning: Unknown keyword `\$1' in .Bf macro
. tm1 " (#\n[.c])
. \}\}\}\}\}\}\}
. el \
@@ -2494,7 +2498,7 @@
. doc-set-hard-space
. \}
. el \{\
-. tm mdoc warning: Unknown keyword `\$1' in .Bk request (#\n[.c])
+. tm mdoc warning: Unknown keyword `\$1' in .Bk macro (#\n[.c])
. nr doc-keep-type 3
. \}\}\}
.
@@ -2675,7 +2679,7 @@
. \}
. el \{\
. tm1 "mdoc warning: Unknown keyword `\$1' (or missing display type)
-. tm1 " in .Bd request (#\n[.c])
+. tm1 " in .Bd macro (#\n[.c])
. nr doc-reg-Bd 0
. \}\}\}\}\}
.
@@ -2763,7 +2767,7 @@
. \" character yields identical numerical results (ignoring the
. \" scaling indicator)
. ds doc-str-ddBa "\$2
-. substring doc-str-ddBa 1 -1
+. substring doc-str-ddBa 0 -2
. if \B(\*[doc-str-ddBa]) \{\
. nr doc-reg-ddBa3 (;(\$2))
. nr doc-reg-ddBa4 (\*[doc-str-ddBa])
@@ -2803,7 +2807,7 @@
. tm mdoc warning: .Bd `-file' keyword requires argument (#\n[.c])
. \}
. el \
-. tm mdoc warning: Unknown keyword `\$1' in .Bd request (#\n[.c])
+. tm mdoc warning: Unknown keyword `\$1' in .Bd macro (#\n[.c])
. \}\}
.
. if (\n[doc-reg-ddBa] < \n[.$]) \{\
@@ -2960,7 +2964,7 @@
. \}
. el \{\
. tm1 "mdoc warning: Unknown list type `\$1' (or missing list type)
-. tm1 " in .Bl request
+. tm1 " in .Bl macro
. tm
. nr doc-arg-ptr 0
. \}\}\}\}\}\}\}\}\}\}\}
@@ -3070,7 +3074,7 @@
. nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n
. \}
. el \
-. tm mdoc warning: `-nested' allowed with nested .Bl requests only (#\n[.c])
+. tm mdoc warning: `-nested' allowed with nested .Bl macros only (#\n[.c])
. \}
.
. el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\
@@ -3078,10 +3082,10 @@
. ds doc-tag-width-stack\n[doc-list-depth] TagwidtH
.
. ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-. substring doc-str-dBla 1 2
+. substring doc-str-dBla 0 0
. ie .\*[doc-str-dBla] \{\
. ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-. substring doc-str-dBla 2
+. substring doc-str-dBla 1
. doc-first-parameter \*[doc-str-dBla]
. doc-get-width "\*[doc-str-dfp]
. doc-get-arg-type "\*[doc-str-dfp]
@@ -3125,7 +3129,7 @@
. \" character yields identical numerical results (ignoring the
. \" scaling indicator)
. ds doc-str-dBla1 "\*[doc-str-dBla]
-. substring doc-str-dBla1 1 -1
+. substring doc-str-dBla1 0 -2
. if \B(\*[doc-str-dBla1]) \{\
. nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
. nr doc-reg-dBla4 (\*[doc-str-dBla1])
@@ -3167,7 +3171,7 @@
. warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
.
. ds doc-str-dBla1 "\*[doc-str-dBla]
-. substring doc-str-dBla1 1 -1
+. substring doc-str-dBla1 0 -2
. if \B(\*[doc-str-dBla1]) \{\
. nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
. nr doc-reg-dBla4 (\*[doc-str-dBla1])
@@ -3204,10 +3208,10 @@
. ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
. nr doc-num-columns +1
. ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
-. substring doc-str-dBla 1 2
+. substring doc-str-dBla 0 0
. ie .\*[doc-str-dBla] \{\
. ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-. substring doc-str-dBla 2
+. substring doc-str-dBla 1
. doc-first-parameter \*[doc-str-dBla]
. doc-get-width "\*[doc-str-dfp]
. doc-get-arg-type "\*[doc-str-dfp]
@@ -3242,7 +3246,7 @@
. \}
. el \{\
. tmc mdoc warning: Unknown keyword `\*[doc-arg\n[doc-arg-ptr]]'
-. tm1 " in .Bl request (#\n[.c])
+. tm1 " in .Bl macro (#\n[.c])
. \}\}
.
. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
@@ -3666,7 +3670,7 @@
.
. ie (\n[doc-reg-It] == 1) \{\
. if \n[.$] \{\
-. tm1 "mdoc warning: .It requests in lists of type `\*[doc-str-It]'
+. tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
. tm1 " don't take arguments (#\n[.c])
. \}\}
. el \{\
@@ -3693,13 +3697,13 @@
. doc-print-recursive
. \}\}\}
. el \{\
-. tm1 "mdoc warning: .It requests in lists of type `\*[doc-str-It]'
+. tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
. tm1 " require arguments (#\n[.c])
. \}
. \}
.
. \" the previous call of `.doc-print-recursive' can contain calls to
-. \" opening requests like `.Ao'; we then defer the call of `doc-xxx-list'
+. \" opening macros like `.Ao'; we then defer the call of `doc-xxx-list'
. if !\n[doc-nesting-level] \
. doc-\*[doc-str-It]
..
@@ -3854,7 +3858,7 @@
.
.de doc-bullet-list
. nr doc-in-list 1
-. nop \)\*[doc-Sy-font]\[bu]\f[P]
+. nop \)\*[doc-Sy-font]\[bu]\f[]
. doc-do-list
..
.
@@ -3867,7 +3871,7 @@
.
.de doc-dash-list
. nr doc-in-list 1
-. nop \)\*[doc-Sy-font]\-\f[P]
+. nop \)\*[doc-Sy-font]\-\f[]
. doc-do-list
..
.
@@ -3965,9 +3969,9 @@
. \}
. el \{\
. chop doc-item-box\n[doc-list-depth]
-. nr doc-reg-dtl1 \n[.k]u
-. nop \*[doc-item-box\n[doc-list-depth]]\c
-. nop \h'|(\n[doc-reg-dtl1]u - \n[.k]u + \n[doc-reg-dtl]u)'\c
+. \" Using \Z prevents stretching of the spaces in the tag
+. nop \Z'\*[doc-item-box\n[doc-list-depth]]'\c
+. nop \h'\n[doc-reg-dtl]u'\c
. nr doc-have-space 1
. \}
.
@@ -4185,7 +4189,7 @@
. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
. nr doc-curr-font \n[.f]
. nr doc-curr-size \n[.ps]
-. ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[P]\s[0]
+. ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
.
. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
. nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
@@ -4581,7 +4585,7 @@
.
. if \n[.$] \
. nop \*[doc-Ft-font]\$*\c
-. nop \ \f[P]\c
+. nop \ \f[]\c
..
.
.
@@ -4677,12 +4681,12 @@
. if (\n[doc-func-arg-count] > 1) \{\
. nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|,\)\c
. nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
-. nop \)\*[doc-arg\n[doc-arg-ptr]]\f[P]\s[0]\c
+. nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
. \}
.
. if (\n[doc-func-arg-count] == 1) \{\
. nop \|\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
-. nop \f[P]\s[0]\c
+. nop \f[]\s[0]\c
. \}
. nr doc-func-arg-count +1
. doc-do-func
@@ -4771,7 +4775,7 @@
. nr doc-curr-font \n[.f]
. nr doc-curr-size \n[.ps]
. nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
-. nop \f[P]\s[0]\*[lp]\)\c
+. nop \f[]\s[0]\*[lp]\)\c
.
. nr doc-arg-ptr +1
. if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
@@ -4833,7 +4837,7 @@
. if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
. nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
. nop \|\f[\n[doc-curr-font]]\s[\n[doc-curr-size]u],\)\c
-. nop \)\*[doc-space\n[doc-reg-ddfa]]\f[P]\s[0]\|\c
+. nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
. doc-do-func-args
. \}\}
..
@@ -4934,7 +4938,7 @@
. nr doc-curr-size \n[.ps]
.
. nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
-. nop \f[P]\s[0]\*[lp]\)\c
+. nop \f[]\s[0]\*[lp]\)\c
. doc-reset-args
. \}
..
@@ -5034,7 +5038,7 @@
.
.
.\" Very crude references: Stash all reference info into boxes, print out
-.\" reference on .Re request and clean up. Ordering very limited, no fancy
+.\" reference on .Re macro and clean up. Ordering very limited, no fancy
.\" citations, but can do articles, journals, and books -- need to add
.\" several missing options (like city etc). Should be able to grab a refer
.\" entry, massage it a wee bit (prefix a `.' to the %[A-Z]) and not worry
@@ -6133,19 +6137,19 @@
.ds doc-str-Rv-std-prefix "The
.ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
.as doc-str-Rv-std-suffix " otherwise the value\~-1 is returned and
-.as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[P]
+.as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
.as doc-str-Rv-std-suffix " is set to indicate the error.
.
.ds doc-str-Rv-stds-prefix "The
.ds doc-str-Rv-stds-and "and
.ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
.as doc-str-Rv-stds-suffix " otherwise the value\~-1 is returned and
-.as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[P]
+.as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
.as doc-str-Rv-stds-suffix " is set to indicate the error.
.
.ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
.as doc-str-Rv-std0 " otherwise the value\~-1 is returned and
-.as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[P]
+.as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
.as doc-str-Rv-std0 " is set to indicate the error.
.
.de Rv
diff --git a/contrib/groff/tmac/dvi.tmac b/contrib/groff/tmac/dvi.tmac
index 5fec427..4eb03b8 100644
--- a/contrib/groff/tmac/dvi.tmac
+++ b/contrib/groff/tmac/dvi.tmac
@@ -2,60 +2,76 @@
.\"
.nr _C \n(.C
.cp 0
+.
.ftr CR CW
.ftr C CW
.ftr CO CWI
.ftr CI CWI
+.ftr CB CW
.ftr TT CW
-.ftr HR H
-.\" This uses the dvi-char_1 string in font CW, dvi-char_0 otherwise.
-.char _ \R'dvi-char_ \\n(.f=\f(CW\\n(.f\fP'\\*[dvi-char_\\n[dvi-char_]]
-.char \[ul] \R'dvi-char_ \w'M'=\w'i''\\*[dvi-char_\\n[dvi-char_]]
+.ftr H HR
+.
+.special TR TI
+.fspecial TI CWI
+.fspecial TBI CWI
+.fspecial HI CWI
+.fspecial HBI CWI
+.
+.\" This uses the dvi-char_1 string in font CW or CWI, dvi-char_0 otherwise.
+.fchar _ \
+\R'dvi-char_ ((\\n[.f] == \f[CW]\\n[.f]\f[]) : \
+ (\\n[.f] == \f[CWI]\\n[.f]\f[]))'\\*[dvi-char_\\n[dvi-char_]]
+.fchar \[ul] \R'dvi-char_ \w'M'==\w'i''\\*[dvi-char_\\n[dvi-char_]]
.\" Normally use a rule.
.\" This is designed so that \(ul, \(rn and \(br form corners.
.ds dvi-char_0 \Z'\v'.23m'\D'R .54m .04m''\h'.5m'
-.\" In font CW use a real _ character.
+.\" In font CW and CWI use a real _ character.
.ds dvi-char_1 _
-.if !c\[radicalex] .char \[radicalex] \D'R .5m -.04m'\v'.04m'
-.if !c\[br] .char \[br] \Z'\v'.25m'\D'R .04m -1m''
-.if !c\[ru] .char \[ru] \Z'\v'-.02m'\D'R .54m .04m''\h'.5m'
-.if !c\[rn] .char \[rn] \Z'\v'-.77m'\D'R .54m .04m''\h'.5m'
-.if !c\[co] .char \[co] \
-\z\s-2\(ci\s0\
-\h'\w'\s-2\(ci\s0'u-\w'\s-4C\s0'u/2u'\
+.
+.fchar \[radicalex] \D'R .5m -.04m'\v'.04m'
+.fchar \[br] \Z'\v'.25m'\D'R .04m -1m''
+.fchar \[ru] \Z'\v'-.02m'\D'R .54m .04m''\h'.5m'
+.fchar \[rn] \Z'\v'-.77m'\D'R .54m .04m''\h'.5m'
+.fchar \[co] \
+\z\s-2\[ci]\s0\
+\h'\w'\s-2\[ci]\s0'u-\w'\s-4C\s0'u/2u'\
\s-4C\s0\
-\h'\w'\s-2\(ci\s0'u-\w'\s-4C\s0'u/2u'
-.if !c\[rg] .char \[rg] \
-\z\s-2\(ci\s0\
-\h'\w'\s-2\(ci\s0'u-\w'\s-4R\s0'u/2u'\
+\h'\w'\s-2\[ci]\s0'u-\w'\s-4C\s0'u/2u'
+.fchar \[rg] \
+\z\s-2\[ci]\s0\
+\h'\w'\s-2\[ci]\s0'u-\w'\s-4R\s0'u/2u'\
\s-4R\s0\
-\h'\w'\s-2\(ci\s0'u-\w'\s-4R\s0'u/2u'
-.if !c\[fm] .char \[fm] \v'-.35m'\s[\\n(.s*7u/10u]\[prime]\s0\v'.35m'
-.if !c\[de] .char \[de] \h'.05m'\v'-.54m'\D'c .3m'\v'.54m'\h'.05m'
-.if !c\[ct] .char \[ct] \o'c/'
-.if !c\[sq] .char \[sq] \Z'\h'.05m'\D'R .4m -.04m'\v'.04m'\h'-.04m'\
+\h'\w'\s-2\[ci]\s0'u-\w'\s-4R\s0'u/2u'
+.fchar \[fm] \v'-.35m'\s[\\n[.s]*7u/10u]\[prime]\s0\v'.35m'
+.fchar \[de] \h'.05m'\v'-.54m'\D'c .3m'\v'.54m'\h'.05m'
+.fchar \[ct] \o'c/'
+.fchar \[sq] \
+\Z'\h'.05m'\D'R .4m -.04m'\v'.04m'\h'-.04m'\
\D'R .04m -.4m'\v'.04m'\D'R -.4m -.04m'\D'R .04m .4m''\h'.5m'
.\"char \[sq] \h'.05m'\D'l .4m 0'\D'l 0 -.4m'\D'l -.4m 0'\D'l 0 .4m'\h'.45m'
-.if !c\[!=] .char \[!=] \[slashnot]\(eq
-.if !c\[tm] .char \[tm] \v'-.3m'\s[\\n(.s/2u]TM\s0\v'.3m'
-.if !c\[aq] .char \[aq] '
-.if !c\[bq] .char \[bq] ,
-.if !c\[Bq] .char \[Bq] ,\h'\w'\(rq'u-(2u*\w"'"u)',
-.if !c\[ho] .char \[ho] \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0
-.if !c\[-D] .char \[-D] \Z'\v'-.1m'\h'.05m'-'D
-.if !c\[Sd] .char \[Sd] \Z'\v'-.3m'\h'.35m'-'\(pd
-.if !c\[TP] .char \[TP] I\h'-.25m'\v'-.33m'\s[\En[.s]*6u/10u]\v'.33m'D\
-\v'-.33m'\s0\v'.33m'
-.if !c\[Tp] .char \[Tp] \zlp
-.if !c\[nb] .char \[nb] \[slashnot]\(sb
-.cflags 8 \(an
-.if !c\[an] .char \[an] \h'-.167m'\(mi\h'-.167m'
+.fchar \[!=] \[slashnot]\[eq]
+.fchar \[tm] \v'-.3m'\s[\\n[.s]/2u]TM\s0\v'.3m'
+.fchar \[aq] '
+.fchar \[bq] ,
+.fchar \[Bq] ,\h'\w'\[rq]'u-(2u*\w"'"u)',
+.fchar \[ho] \s[\En[.s]/2u]\v'.4m'c\v'-.4m'\s0
+.fchar \[-D] \Z'\v'-.1m'\h'.05m'-'D
+.fchar \[Sd] \Z'\v'-.3m'\h'.35m'-'\[pd]
+.fchar \[TP] \
+I\h'-.25m'\v'-.33m'\s[\En[.s]*6u/10u]\v'.33m'\
+D\v'-.33m'\s0\v'.33m'
+.fchar \[Tp] \zlp
+.fchar \[nb] \[slashnot]\[sb]
+.cflags 8 \[an]
+.fchar \[an] \h'-.167m'\[mi]\h'-.167m'
+.
.\" Define some fractions.
.de dvi-frac
-.if !c\[\\$1\\$2] .char \[\\$1\\$2] \
-\v'-.25m'\s[\\\\n(.s*7u/10u]\\$1\s0\v'.25m'\h'-.2m'\
-/\h'-.2m'\v'.25m'\s[\\\\n(.s*7u/10u]\\$2\s0\v'-.25m'
+. fchar \[\\$1\\$2] \
+\v'-.25m'\s[\\\\n[.s]*7u/10u]\\$1\s0\v'.25m'\h'-.2m'\
+/\h'-.2m'\v'.25m'\s[\\\\n[.s]*7u/10u]\\$2\s0\v'-.25m'
..
+.
.dvi-frac 1 2
.dvi-frac 3 4
.dvi-frac 1 4
@@ -63,85 +79,650 @@
.dvi-frac 3 8
.dvi-frac 5 8
.dvi-frac 7 8
+.
.\" support for ISO Latin-1
-.if !c\[S1] .char \[S1] \v'-.2m'\s-31\s+3\v'+.2m'
-.if !c\[S2] .char \[S2] \v'-.2m'\s-32\s+3\v'+.2m'
-.if !c\[S3] .char \[S3] \v'-.2m'\s-33\s+3\v'+.2m'
-.if !c\[Of] .char \[Of] \v'-.2m'\s'\En(.s*6u/10u'\o'_a'\s0\v'.2m'
-.if !c\[Om] .char \[Om] \v'-.2m'\s'\En(.s*6u/10u'\o'_o'\s0\v'.2m'
-.if !c\[Fo] .char \[Fo] <<
-.if !c\[Fc] .char \[Fc] >>
-.if !c\[bb] .char \[bb] |
-.if !c\[Ye] .char \[Ye] \o'-Y'
-.if !c\[Cs] .char \[Cs] \o'\[mu]o'
+.fchar \[S1] \v'-.2m'\s-31\s+3\v'+.2m'
+.fchar \[S2] \v'-.2m'\s-32\s+3\v'+.2m'
+.fchar \[S3] \v'-.2m'\s-33\s+3\v'+.2m'
+.fchar \[Of] \v'-.2m'\s'\En[.s]*6u/10u'\o'_a'\s0\v'.2m'
+.fchar \[Om] \v'-.2m'\s'\En[.s]*6u/10u'\o'_o'\s0\v'.2m'
+.fchar \[Fo] \v'-.1m'\s-3<\h'-.3m'<\s+3\v'+.1m'
+.fchar \[Fc] \v'-.1m'\s-3>\h'-.3m'>\s+3\v'+.1m'
+.fchar \[bb] |
+.fchar \[Ye] \o'-Y'
+.fchar \[Cs] \o'\[mu]o'
+.
.de dvi-achar
-.\" Note that character definitions are always interpreted with
-.\" compatibility mode off.
-.if !c\\$1 \{\
-.char \\$1 \\$3\
+. \" Note that character definitions are always interpreted with
+. \" compatibility mode off.
+. fchar \\$1 \
+\\$3\
\k[acc]\
\h'(u;-\w'\\$2'-\w'\\$3'/2+\\\\n[skw]+(\w'x'*0)-\\\\n[skw])'\
\v'(u;\w'x'*0+\\\\n[rst]+(\w'\\$3'*0)-\\\\n[rst])'\
\\$2\
\v'(u;\w'x'*0-\\\\n[rst]+(\w'\\$3'*0)+\\\\n[rst])'\
\h'|\\\\n[acc]u'
-.\}
-.hcode \\$1\\$4
+. hcode \\$1\\$4
..
-.dvi-achar \(`A \` A a
-.dvi-achar \('A \' A a
-.dvi-achar \(^A ^ A a
-.dvi-achar \(~A ~ A a
-.dvi-achar \(:A \(ad A a
-.dvi-achar \(oA \(ao A a
-.dvi-achar \(`E \` E e
-.dvi-achar \('E \' E e
-.dvi-achar \(^E ^ E e
-.dvi-achar \(:E \(ad E e
-.dvi-achar \(`I \` I i
-.dvi-achar \('I \' I i
-.dvi-achar \(^I ^ I i
-.dvi-achar \(:I \(ad I i
-.dvi-achar \(~N ~ N n
-.dvi-achar \(`O \` O o
-.dvi-achar \('O \' O o
-.dvi-achar \(^O ^ O o
-.dvi-achar \(~O ~ O o
-.dvi-achar \(:O \(ad O o
-.dvi-achar \(`U \` U u
-.dvi-achar \('U \' U u
-.dvi-achar \(^U ^ U u
-.dvi-achar \(:U \(ad U u
-.dvi-achar \('Y \' Y y
-.dvi-achar \(`a \` a a
-.dvi-achar \('a \' a a
-.dvi-achar \(^a ^ a a
-.dvi-achar \(~a ~ a a
-.dvi-achar \(:a \(ad a a
-.dvi-achar \(oa \(ao a a
-.dvi-achar \(`e \` e e
-.dvi-achar \('e \' e e
-.dvi-achar \(^e ^ e e
-.dvi-achar \(:e \(ad e e
-.dvi-achar \(`i \` \(.i i
-.dvi-achar \('i \' \(.i i
-.dvi-achar \(^i ^ \(.i i
-.dvi-achar \(:i \(ad \(.i i
-.dvi-achar \(~n ~ n n
-.dvi-achar \(`o \` o o
-.dvi-achar \('o \' o o
-.dvi-achar \(^o ^ o o
-.dvi-achar \(~o ~ o o
-.dvi-achar \(:o \(ad o o
-.dvi-achar \(`u \` u u
-.dvi-achar \('u \' u u
-.dvi-achar \(^u ^ u u
-.dvi-achar \(:u \(ad u u
-.dvi-achar \('y \' y y
-.dvi-achar \(:y \(ad y y
-.if !c\(,C .char \(,C \o'\(acC'
-.hcode \(,Cc
-.if !c\(,c .char \(,c \o'\(acc'
-.hcode \(,cc
+.
+.dvi-achar \[`A] \` A a
+.dvi-achar \['A] \' A a
+.dvi-achar \[^A] ^ A a
+.dvi-achar \[~A] ~ A a
+.dvi-achar \[:A] \[ad] A a
+.dvi-achar \[oA] \[ao] A a
+.dvi-achar \[`E] \` E e
+.dvi-achar \['E] \' E e
+.dvi-achar \[^E] ^ E e
+.dvi-achar \[:E] \[ad] E e
+.dvi-achar \[`I] \` I i
+.dvi-achar \['I] \' I i
+.dvi-achar \[^I] ^ I i
+.dvi-achar \[:I] \[ad] I i
+.dvi-achar \[~N] ~ N n
+.dvi-achar \[`O] \` O o
+.dvi-achar \['O] \' O o
+.dvi-achar \[^O] ^ O o
+.dvi-achar \[~O] ~ O o
+.dvi-achar \[:O] \[ad] O o
+.dvi-achar \[`U] \` U u
+.dvi-achar \['U] \' U u
+.dvi-achar \[^U] ^ U u
+.dvi-achar \[:U] \[ad] U u
+.dvi-achar \['Y] \' Y y
+.dvi-achar \[:Y] \[ad] Y y
+.dvi-achar \[`a] \` a a
+.dvi-achar \['a] \' a a
+.dvi-achar \[^a] ^ a a
+.dvi-achar \[~a] ~ a a
+.dvi-achar \[:a] \[ad] a a
+.dvi-achar \[oa] \[ao] a a
+.dvi-achar \[`e] \` e e
+.dvi-achar \['e] \' e e
+.dvi-achar \[^e] ^ e e
+.dvi-achar \[:e] \[ad] e e
+.dvi-achar \[`i] \` \[.i] i
+.dvi-achar \['i] \' \[.i] i
+.dvi-achar \[^i] ^ \[.i] i
+.dvi-achar \[:i] \[ad] \[.i] i
+.dvi-achar \[~n] ~ n n
+.dvi-achar \[`o] \` o o
+.dvi-achar \['o] \' o o
+.dvi-achar \[^o] ^ o o
+.dvi-achar \[~o] ~ o o
+.dvi-achar \[:o] \[ad] o o
+.dvi-achar \[`u] \` u u
+.dvi-achar \['u] \' u u
+.dvi-achar \[^u] ^ u u
+.dvi-achar \[:u] \[ad] u u
+.dvi-achar \['y] \' y y
+.dvi-achar \[:y] \[ad] y y
+.dvi-achar \[vs] \[ah] s s
+.dvi-achar \[vS] \[ah] S s
+.dvi-achar \[vz] \[ah] z z
+.dvi-achar \[vZ] \[ah] Z z
+.fchar \[,C] \o'\[ac]C'
+.hcode \[,C]c
+.fchar \[,c] \o'\[ac]c'
+.hcode \[,c]c
+.
+.\" now for color definitions
+.\"
+.\" this is a composite of MIT's X Consortium red/green/blue (rgb) color
+.\" specifications, X Consortium version 10.41, 1994.
+.\"
+.defcolor black rgb #000000
+.defcolor grey rgb #bebebe
+.defcolor dimgrey rgb #696969
+.defcolor lightgray rgb #d3d3d3
+.defcolor lightslategrey rgb #778899
+.defcolor slategray rgb #708090
+.defcolor slategray1 rgb #c6e2ff
+.defcolor slategray2 rgb #b9d3ee
+.defcolor slategray3 rgb #9fb6cd
+.defcolor slategray4 rgb #6c7b8b
+.defcolor slategrey rgb #708090
+.defcolor grey0 rgb #000000
+.defcolor grey1 rgb #030303
+.defcolor grey2 rgb #050505
+.defcolor grey3 rgb #080808
+.defcolor grey4 rgb #0a0a0a
+.defcolor grey5 rgb #0d0d0d
+.defcolor grey6 rgb #0f0f0f
+.defcolor grey7 rgb #121212
+.defcolor grey8 rgb #141414
+.defcolor grey9 rgb #171717
+.defcolor grey10 rgb #1a1a1a
+.defcolor grey11 rgb #1c1c1c
+.defcolor grey12 rgb #1f1f1f
+.defcolor grey13 rgb #212121
+.defcolor grey14 rgb #242424
+.defcolor grey15 rgb #262626
+.defcolor grey16 rgb #292929
+.defcolor grey17 rgb #2b2b2b
+.defcolor grey18 rgb #2e2e2e
+.defcolor grey19 rgb #303030
+.defcolor grey20 rgb #333333
+.defcolor grey21 rgb #363636
+.defcolor grey22 rgb #383838
+.defcolor grey23 rgb #3b3b3b
+.defcolor grey24 rgb #3d3d3d
+.defcolor grey25 rgb #404040
+.defcolor grey26 rgb #424242
+.defcolor grey27 rgb #454545
+.defcolor grey28 rgb #474747
+.defcolor grey29 rgb #4a4a4a
+.defcolor grey30 rgb #4d4d4d
+.defcolor grey31 rgb #4f4f4f
+.defcolor grey32 rgb #525252
+.defcolor grey33 rgb #545454
+.defcolor grey34 rgb #575757
+.defcolor grey35 rgb #595959
+.defcolor grey36 rgb #5c5c5c
+.defcolor grey37 rgb #5e5e5e
+.defcolor grey38 rgb #616161
+.defcolor grey39 rgb #636363
+.defcolor grey40 rgb #666666
+.defcolor grey41 rgb #696969
+.defcolor grey42 rgb #6b6b6b
+.defcolor grey43 rgb #6e6e6e
+.defcolor grey44 rgb #707070
+.defcolor grey45 rgb #737373
+.defcolor grey46 rgb #757575
+.defcolor grey47 rgb #787878
+.defcolor grey48 rgb #7a7a7a
+.defcolor grey49 rgb #7d7d7d
+.defcolor grey50 rgb #7f7f7f
+.defcolor grey51 rgb #828282
+.defcolor grey52 rgb #858585
+.defcolor grey53 rgb #878787
+.defcolor grey54 rgb #8a8a8a
+.defcolor grey55 rgb #8c8c8c
+.defcolor grey56 rgb #8f8f8f
+.defcolor grey57 rgb #919191
+.defcolor grey58 rgb #949494
+.defcolor grey59 rgb #969696
+.defcolor grey60 rgb #999999
+.defcolor grey61 rgb #9c9c9c
+.defcolor grey62 rgb #9e9e9e
+.defcolor grey63 rgb #a1a1a1
+.defcolor grey64 rgb #a3a3a3
+.defcolor grey65 rgb #a6a6a6
+.defcolor grey66 rgb #a8a8a8
+.defcolor grey67 rgb #ababab
+.defcolor grey68 rgb #adadad
+.defcolor grey69 rgb #b0b0b0
+.defcolor grey70 rgb #b3b3b3
+.defcolor grey71 rgb #b5b5b5
+.defcolor grey72 rgb #b8b8b8
+.defcolor grey73 rgb #bababa
+.defcolor grey74 rgb #bdbdbd
+.defcolor grey75 rgb #bfbfbf
+.defcolor grey76 rgb #c2c2c2
+.defcolor grey77 rgb #c4c4c4
+.defcolor grey78 rgb #c7c7c7
+.defcolor grey79 rgb #c9c9c9
+.defcolor grey80 rgb #cccccc
+.defcolor grey81 rgb #cfcfcf
+.defcolor grey82 rgb #d1d1d1
+.defcolor grey83 rgb #d4d4d4
+.defcolor grey84 rgb #d6d6d6
+.defcolor grey85 rgb #d9d9d9
+.defcolor grey86 rgb #dbdbdb
+.defcolor grey87 rgb #dedede
+.defcolor grey88 rgb #e0e0e0
+.defcolor grey89 rgb #e3e3e3
+.defcolor grey90 rgb #e5e5e5
+.defcolor grey91 rgb #e8e8e8
+.defcolor grey92 rgb #ebebeb
+.defcolor grey93 rgb #ededed
+.defcolor grey94 rgb #f0f0f0
+.defcolor grey95 rgb #f2f2f2
+.defcolor grey96 rgb #f5f5f5
+.defcolor grey97 rgb #f7f7f7
+.defcolor grey98 rgb #fafafa
+.defcolor grey99 rgb #fcfcfc
+.defcolor grey100 rgb #ffffff
+.defcolor aliceblue rgb #f0f8ff
+.defcolor blueviolet rgb #8a2be2
+.defcolor cadetblue rgb #5f9ea0
+.defcolor cadetblue1 rgb #98f5ff
+.defcolor cadetblue2 rgb #8ee5ee
+.defcolor cadetblue3 rgb #7ac5cd
+.defcolor cadetblue4 rgb #53868b
+.defcolor cornflowerblue rgb #6495ed
+.defcolor darkslateblue rgb #483d8b
+.defcolor darkturquoise rgb #00ced1
+.defcolor deepskyblue rgb #00bfff
+.defcolor deepskyblue1 rgb #00bfff
+.defcolor deepskyblue2 rgb #00b2ee
+.defcolor deepskyblue3 rgb #009acd
+.defcolor deepskyblue4 rgb #00688b
+.defcolor dodgerblue rgb #1e90ff
+.defcolor dodgerblue1 rgb #1e90ff
+.defcolor dodgerblue2 rgb #1c86ee
+.defcolor dodgerblue3 rgb #1874cd
+.defcolor dodgerblue4 rgb #104e8b
+.defcolor lightblue rgb #add8e6
+.defcolor lightblue1 rgb #bfefff
+.defcolor lightblue2 rgb #b2dfee
+.defcolor lightblue3 rgb #9ac0cd
+.defcolor lightblue4 rgb #68838b
+.defcolor lightcyan rgb #e0ffff
+.defcolor lightcyan1 rgb #e0ffff
+.defcolor lightcyan2 rgb #d1eeee
+.defcolor lightcyan3 rgb #b4cdcd
+.defcolor lightcyan4 rgb #7a8b8b
+.defcolor lightskyblue rgb #87cefa
+.defcolor lightskyblue1 rgb #b0e2ff
+.defcolor lightskyblue2 rgb #a4d3ee
+.defcolor lightskyblue3 rgb #8db6cd
+.defcolor lightskyblue4 rgb #607b8b
+.defcolor lightslateblue rgb #8470ff
+.defcolor lightsteelblue rgb #b0c4de
+.defcolor lightsteelblue1 rgb #cae1ff
+.defcolor lightsteelblue2 rgb #bcd2ee
+.defcolor lightsteelblue3 rgb #a2b5cd
+.defcolor lightsteelblue4 rgb #6e7b8b
+.defcolor mediumaquamarine rgb #66cdaa
+.defcolor mediumblue rgb #0000cd
+.defcolor mediumslateblue rgb #7b68ee
+.defcolor mediumturquoise rgb #48d1cc
+.defcolor midnightblue rgb #191970
+.defcolor navyblue rgb #000080
+.defcolor paleturquoise rgb #afeeee
+.defcolor paleturquoise1 rgb #bbffff
+.defcolor paleturquoise2 rgb #aeeeee
+.defcolor paleturquoise3 rgb #96cdcd
+.defcolor paleturquoise4 rgb #668b8b
+.defcolor powderblue rgb #b0e0e6
+.defcolor royalblue rgb #4169e1
+.defcolor royalblue1 rgb #4876ff
+.defcolor royalblue2 rgb #436eee
+.defcolor royalblue3 rgb #3a5fcd
+.defcolor royalblue4 rgb #27408b
+.defcolor skyblue rgb #87ceeb
+.defcolor skyblue1 rgb #87ceff
+.defcolor skyblue2 rgb #7ec0ee
+.defcolor skyblue3 rgb #6ca6cd
+.defcolor skyblue4 rgb #4a708b
+.defcolor slateblue rgb #6a5acd
+.defcolor slateblue1 rgb #836fff
+.defcolor slateblue2 rgb #7a67ee
+.defcolor slateblue3 rgb #6959cd
+.defcolor slateblue4 rgb #473c8b
+.defcolor steelblue rgb #4682b4
+.defcolor steelblue1 rgb #63b8ff
+.defcolor steelblue2 rgb #5cacee
+.defcolor steelblue3 rgb #4f94cd
+.defcolor steelblue4 rgb #36648b
+.defcolor aquamarine rgb #7fffd4
+.defcolor aquamarine1 rgb #7fffd4
+.defcolor aquamarine2 rgb #76eec6
+.defcolor aquamarine3 rgb #66cdaa
+.defcolor aquamarine4 rgb #458b74
+.defcolor azure rgb #f0ffff
+.defcolor azure1 rgb #f0ffff
+.defcolor azure2 rgb #e0eeee
+.defcolor azure3 rgb #c1cdcd
+.defcolor azure4 rgb #838b8b
+.defcolor blue rgb #0000ff
+.defcolor blue1 rgb #0000ff
+.defcolor blue2 rgb #0000ee
+.defcolor blue3 rgb #0000cd
+.defcolor blue4 rgb #00008b
+.defcolor cyan rgb #00ffff
+.defcolor cyan1 rgb #00ffff
+.defcolor cyan2 rgb #00eeee
+.defcolor cyan3 rgb #00cdcd
+.defcolor cyan4 rgb #008b8b
+.defcolor navy rgb #000080
+.defcolor turquoise rgb #40e0d0
+.defcolor turquoise1 rgb #00f5ff
+.defcolor turquoise2 rgb #00e5ee
+.defcolor turquoise3 rgb #00c5cd
+.defcolor turquoise4 rgb #00868b
+.defcolor darkslategray rgb #2f4f4f
+.defcolor darkslategray1 rgb #97ffff
+.defcolor darkslategray2 rgb #8deeee
+.defcolor darkslategray3 rgb #79cdcd
+.defcolor darkslategray4 rgb #528b8b
+.defcolor rosybrown rgb #bc8f8f
+.defcolor rosybrown1 rgb #ffc1c1
+.defcolor rosybrown2 rgb #eeb4b4
+.defcolor rosybrown3 rgb #cd9b9b
+.defcolor rosybrown4 rgb #8b6969
+.defcolor saddlebrown rgb #8b4513
+.defcolor sandybrown rgb #f4a460
+.defcolor beige rgb #f5f5dc
+.defcolor brown rgb #a52a2a
+.defcolor brown1 rgb #ff4040
+.defcolor brown2 rgb #ee3b3b
+.defcolor brown3 rgb #cd3333
+.defcolor brown4 rgb #8b2323
+.defcolor burlywood rgb #deb887
+.defcolor burlywood1 rgb #ffd39b
+.defcolor burlywood2 rgb #eec591
+.defcolor burlywood3 rgb #cdaa7d
+.defcolor burlywood4 rgb #8b7355
+.defcolor chocolate rgb #d2691e
+.defcolor chocolate1 rgb #ff7f24
+.defcolor chocolate2 rgb #ee7621
+.defcolor chocolate3 rgb #cd661d
+.defcolor chocolate4 rgb #8b4513
+.defcolor peru rgb #cd853f
+.defcolor tan rgb #d2b48c
+.defcolor tan1 rgb #ffa54f
+.defcolor tan2 rgb #ee9a49
+.defcolor tan3 rgb #cd853f
+.defcolor tan4 rgb #8b5a2b
+.defcolor darkgreen rgb #006400
+.defcolor darkkhaki rgb #bdb76b
+.defcolor darkolivegreen rgb #556b2f
+.defcolor darkolivegreen1 rgb #caff70
+.defcolor darkolivegreen2 rgb #bcee68
+.defcolor darkolivegreen3 rgb #a2cd5a
+.defcolor darkolivegreen4 rgb #6e8b3d
+.defcolor darkseagreen rgb #8fbc8f
+.defcolor darkseagreen1 rgb #c1ffc1
+.defcolor darkseagreen2 rgb #b4eeb4
+.defcolor darkseagreen3 rgb #9bcd9b
+.defcolor darkseagreen4 rgb #698b69
+.defcolor forestgreen rgb #228b22
+.defcolor greenyellow rgb #adff2f
+.defcolor lawngreen rgb #7cfc00
+.defcolor lightseagreen rgb #20b2aa
+.defcolor limegreen rgb #32cd32
+.defcolor mediumseagreen rgb #3cb371
+.defcolor mediumspringgreen rgb #00fa9a
+.defcolor mintcream rgb #f5fffa
+.defcolor olivedrab rgb #6b8e23
+.defcolor olivedrab1 rgb #c0ff3e
+.defcolor olivedrab2 rgb #b3ee3a
+.defcolor olivedrab3 rgb #9acd32
+.defcolor olivedrab4 rgb #698b22
+.defcolor palegreen rgb #98fb98
+.defcolor palegreen1 rgb #9aff9a
+.defcolor palegreen2 rgb #90ee90
+.defcolor palegreen3 rgb #7ccd7c
+.defcolor palegreen4 rgb #548b54
+.defcolor seagreen rgb #2e8b57
+.defcolor seagreen1 rgb #54ff9f
+.defcolor seagreen2 rgb #4eee94
+.defcolor seagreen3 rgb #43cd80
+.defcolor seagreen4 rgb #2e8b57
+.defcolor springgreen rgb #00ff7f
+.defcolor springgreen1 rgb #00ff7f
+.defcolor springgreen2 rgb #00ee76
+.defcolor springgreen3 rgb #00cd66
+.defcolor springgreen4 rgb #008b45
+.defcolor yellowgreen rgb #9acd32
+.defcolor chartreuse rgb #7fff00
+.defcolor chartreuse1 rgb #7fff00
+.defcolor chartreuse2 rgb #76ee00
+.defcolor chartreuse3 rgb #66cd00
+.defcolor chartreuse4 rgb #458b00
+.defcolor green rgb #00ff00
+.defcolor green1 rgb #00ff00
+.defcolor green2 rgb #00ee00
+.defcolor green3 rgb #00cd00
+.defcolor green4 rgb #008b00
+.defcolor khaki rgb #f0e68c
+.defcolor khaki1 rgb #fff68f
+.defcolor khaki2 rgb #eee685
+.defcolor khaki3 rgb #cdc673
+.defcolor khaki4 rgb #8b864e
+.defcolor darkorange rgb #ff8c00
+.defcolor darkorange1 rgb #ff7f00
+.defcolor darkorange2 rgb #ee7600
+.defcolor darkorange3 rgb #cd6600
+.defcolor darkorange4 rgb #8b4500
+.defcolor darksalmon rgb #e9967a
+.defcolor lightcoral rgb #f08080
+.defcolor lightsalmon rgb #ffa07a
+.defcolor lightsalmon1 rgb #ffa07a
+.defcolor lightsalmon2 rgb #ee9572
+.defcolor lightsalmon3 rgb #cd8162
+.defcolor lightsalmon4 rgb #8b5742
+.defcolor peachpuff rgb #ffdab9
+.defcolor peachpuff1 rgb #ffdab9
+.defcolor peachpuff2 rgb #eecbad
+.defcolor peachpuff3 rgb #cdaf95
+.defcolor peachpuff4 rgb #8b7765
+.defcolor bisque rgb #ffe4c4
+.defcolor bisque1 rgb #ffe4c4
+.defcolor bisque2 rgb #eed5b7
+.defcolor bisque3 rgb #cdb79e
+.defcolor bisque4 rgb #8b7d6b
+.defcolor coral rgb #ff7f50
+.defcolor coral1 rgb #ff7256
+.defcolor coral2 rgb #ee6a50
+.defcolor coral3 rgb #cd5b45
+.defcolor coral4 rgb #8b3e2f
+.defcolor honeydew rgb #f0fff0
+.defcolor honeydew1 rgb #f0fff0
+.defcolor honeydew2 rgb #e0eee0
+.defcolor honeydew3 rgb #c1cdc1
+.defcolor honeydew4 rgb #838b83
+.defcolor orange rgb #ffa500
+.defcolor orange1 rgb #ffa500
+.defcolor orange2 rgb #ee9a00
+.defcolor orange3 rgb #cd8500
+.defcolor orange4 rgb #8b5a00
+.defcolor salmon rgb #fa8072
+.defcolor salmon1 rgb #ff8c69
+.defcolor salmon2 rgb #ee8262
+.defcolor salmon3 rgb #cd7054
+.defcolor salmon4 rgb #8b4c39
+.defcolor sienna rgb #a0522d
+.defcolor sienna1 rgb #ff8247
+.defcolor sienna2 rgb #ee7942
+.defcolor sienna3 rgb #cd6839
+.defcolor sienna4 rgb #8b4726
+.defcolor deeppink rgb #ff1493
+.defcolor deeppink1 rgb #ff1493
+.defcolor deeppink2 rgb #ee1289
+.defcolor deeppink3 rgb #cd1076
+.defcolor deeppink4 rgb #8b0a50
+.defcolor hotpink rgb #ff69b4
+.defcolor hotpink1 rgb #ff6eb4
+.defcolor hotpink2 rgb #ee6aa7
+.defcolor hotpink3 rgb #cd6090
+.defcolor hotpink4 rgb #8b3a62
+.defcolor indianred rgb #cd5c5c
+.defcolor indianred1 rgb #ff6a6a
+.defcolor indianred2 rgb #ee6363
+.defcolor indianred3 rgb #cd5555
+.defcolor indianred4 rgb #8b3a3a
+.defcolor lightpink rgb #ffb6c1
+.defcolor lightpink1 rgb #ffaeb9
+.defcolor lightpink2 rgb #eea2ad
+.defcolor lightpink3 rgb #cd8c95
+.defcolor lightpink4 rgb #8b5f65
+.defcolor mediumvioletred rgb #c71585
+.defcolor mistyrose rgb #ffe4e1
+.defcolor mistyrose1 rgb #ffe4e1
+.defcolor mistyrose2 rgb #eed5d2
+.defcolor mistyrose3 rgb #cdb7b5
+.defcolor mistyrose4 rgb #8b7d7b
+.defcolor orangered rgb #ff4500
+.defcolor orangered1 rgb #ff4500
+.defcolor orangered2 rgb #ee4000
+.defcolor orangered3 rgb #cd3700
+.defcolor orangered4 rgb #8b2500
+.defcolor palevioletred rgb #db7093
+.defcolor palevioletred1 rgb #ff82ab
+.defcolor palevioletred2 rgb #ee799f
+.defcolor palevioletred3 rgb #cd6889
+.defcolor palevioletred4 rgb #8b475d
+.defcolor violetred rgb #d02090
+.defcolor violetred1 rgb #ff3e96
+.defcolor violetred2 rgb #ee3a8c
+.defcolor violetred3 rgb #cd3278
+.defcolor violetred4 rgb #8b2252
+.defcolor firebrick rgb #b22222
+.defcolor firebrick1 rgb #ff3030
+.defcolor firebrick2 rgb #ee2c2c
+.defcolor firebrick3 rgb #cd2626
+.defcolor firebrick4 rgb #8b1a1a
+.defcolor pink rgb #ffc0cb
+.defcolor pink1 rgb #ffb5c5
+.defcolor pink2 rgb #eea9b8
+.defcolor pink3 rgb #cd919e
+.defcolor pink4 rgb #8b636c
+.defcolor red rgb #ff0000
+.defcolor red1 rgb #ff0000
+.defcolor red2 rgb #ee0000
+.defcolor red3 rgb #cd0000
+.defcolor red4 rgb #8b0000
+.defcolor tomato rgb #ff6347
+.defcolor tomato1 rgb #ff6347
+.defcolor tomato2 rgb #ee5c42
+.defcolor tomato3 rgb #cd4f39
+.defcolor tomato4 rgb #8b3626
+.defcolor darkorchid rgb #9932cc
+.defcolor darkorchid1 rgb #bf3eff
+.defcolor darkorchid2 rgb #b23aee
+.defcolor darkorchid3 rgb #9a32cd
+.defcolor darkorchid4 rgb #68228b
+.defcolor darkviolet rgb #9400d3
+.defcolor lavenderblush rgb #fff0f5
+.defcolor lavenderblush1 rgb #fff0f5
+.defcolor lavenderblush2 rgb #eee0e5
+.defcolor lavenderblush3 rgb #cdc1c5
+.defcolor lavenderblush4 rgb #8b8386
+.defcolor mediumorchid rgb #ba55d3
+.defcolor mediumorchid1 rgb #e066ff
+.defcolor mediumorchid2 rgb #d15fee
+.defcolor mediumorchid3 rgb #b452cd
+.defcolor mediumorchid4 rgb #7a378b
+.defcolor mediumpurple rgb #9370db
+.defcolor mediumpurple1 rgb #ab82ff
+.defcolor mediumpurple2 rgb #9f79ee
+.defcolor mediumpurple3 rgb #8968cd
+.defcolor mediumpurple4 rgb #5d478b
+.defcolor lavender rgb #e6e6fa
+.defcolor magenta rgb #ff00ff
+.defcolor magenta1 rgb #ff00ff
+.defcolor magenta2 rgb #ee00ee
+.defcolor magenta3 rgb #cd00cd
+.defcolor magenta4 rgb #8b008b
+.defcolor maroon rgb #b03060
+.defcolor maroon1 rgb #ff34b3
+.defcolor maroon2 rgb #ee30a7
+.defcolor maroon3 rgb #cd2990
+.defcolor maroon4 rgb #8b1c62
+.defcolor orchid rgb #da70d6
+.defcolor orchid1 rgb #ff83fa
+.defcolor orchid2 rgb #ee7ae9
+.defcolor orchid3 rgb #cd69c9
+.defcolor orchid4 rgb #8b4789
+.defcolor plum rgb #dda0dd
+.defcolor plum1 rgb #ffbbff
+.defcolor plum2 rgb #eeaeee
+.defcolor plum3 rgb #cd96cd
+.defcolor plum4 rgb #8b668b
+.defcolor purple rgb #a020f0
+.defcolor purple1 rgb #9b30ff
+.defcolor purple2 rgb #912cee
+.defcolor purple3 rgb #7d26cd
+.defcolor purple4 rgb #551a8b
+.defcolor thistle rgb #d8bfd8
+.defcolor thistle1 rgb #ffe1ff
+.defcolor thistle2 rgb #eed2ee
+.defcolor thistle3 rgb #cdb5cd
+.defcolor thistle4 rgb #8b7b8b
+.defcolor violet rgb #ee82ee
+.defcolor antiquewhite rgb #faebd7
+.defcolor antiquewhite1 rgb #ffefdb
+.defcolor antiquewhite2 rgb #eedfcc
+.defcolor antiquewhite3 rgb #cdc0b0
+.defcolor antiquewhite4 rgb #8b8378
+.defcolor floralwhite rgb #fffaf0
+.defcolor ghostwhite rgb #f8f8ff
+.defcolor navajowhite rgb #ffdead
+.defcolor navajowhite1 rgb #ffdead
+.defcolor navajowhite2 rgb #eecfa1
+.defcolor navajowhite3 rgb #cdb38b
+.defcolor navajowhite4 rgb #8b795e
+.defcolor oldlace rgb #fdf5e6
+.defcolor whitesmoke rgb #f5f5f5
+.defcolor gainsboro rgb #dcdcdc
+.defcolor ivory rgb #fffff0
+.defcolor ivory1 rgb #fffff0
+.defcolor ivory2 rgb #eeeee0
+.defcolor ivory3 rgb #cdcdc1
+.defcolor ivory4 rgb #8b8b83
+.defcolor linen rgb #faf0e6
+.defcolor seashell rgb #fff5ee
+.defcolor seashell1 rgb #fff5ee
+.defcolor seashell2 rgb #eee5de
+.defcolor seashell3 rgb #cdc5bf
+.defcolor seashell4 rgb #8b8682
+.defcolor snow rgb #fffafa
+.defcolor snow1 rgb #fffafa
+.defcolor snow2 rgb #eee9e9
+.defcolor snow3 rgb #cdc9c9
+.defcolor snow4 rgb #8b8989
+.defcolor wheat rgb #f5deb3
+.defcolor wheat1 rgb #ffe7ba
+.defcolor wheat2 rgb #eed8ae
+.defcolor wheat3 rgb #cdba96
+.defcolor wheat4 rgb #8b7e66
+.defcolor white rgb #ffffff
+.defcolor blanchedalmond rgb #ffebcd
+.defcolor darkgoldenrod rgb #b8860b
+.defcolor darkgoldenrod1 rgb #ffb90f
+.defcolor darkgoldenrod2 rgb #eead0e
+.defcolor darkgoldenrod3 rgb #cd950c
+.defcolor darkgoldenrod4 rgb #8b6508
+.defcolor lemonchiffon rgb #fffacd
+.defcolor lemonchiffon1 rgb #fffacd
+.defcolor lemonchiffon2 rgb #eee9bf
+.defcolor lemonchiffon3 rgb #cdc9a5
+.defcolor lemonchiffon4 rgb #8b8970
+.defcolor lightgoldenrod rgb #eedd82
+.defcolor lightgoldenrod1 rgb #ffec8b
+.defcolor lightgoldenrod2 rgb #eedc82
+.defcolor lightgoldenrod3 rgb #cdbe70
+.defcolor lightgoldenrod4 rgb #8b814c
+.defcolor lightgoldenrodyellow rgb #fafad2
+.defcolor lightyellow rgb #ffffe0
+.defcolor lightyellow1 rgb #ffffe0
+.defcolor lightyellow2 rgb #eeeed1
+.defcolor lightyellow3 rgb #cdcdb4
+.defcolor lightyellow4 rgb #8b8b7a
+.defcolor palegoldenrod rgb #eee8aa
+.defcolor papayawhip rgb #ffefd5
+.defcolor cornsilk rgb #fff8dc
+.defcolor cornsilk1 rgb #fff8dc
+.defcolor cornsilk2 rgb #eee8cd
+.defcolor cornsilk3 rgb #cdc8b1
+.defcolor cornsilk4 rgb #8b8878
+.defcolor gold rgb #ffd700
+.defcolor gold1 rgb #ffd700
+.defcolor gold2 rgb #eec900
+.defcolor gold3 rgb #cdad00
+.defcolor gold4 rgb #8b7500
+.defcolor goldenrod rgb #daa520
+.defcolor goldenrod1 rgb #ffc125
+.defcolor goldenrod2 rgb #eeb422
+.defcolor goldenrod3 rgb #cd9b1d
+.defcolor goldenrod4 rgb #8b6914
+.defcolor moccasin rgb #ffe4b5
+.defcolor yellow rgb #ffff00
+.defcolor yellow1 rgb #ffff00
+.defcolor yellow2 rgb #eeee00
+.defcolor yellow3 rgb #cdcd00
+.defcolor yellow4 rgb #8b8b00
+.
.cp \n(_C
-.do mso latin1.tmac
+.
+.if !\n(.C \
+. mso pspic.tmac
+.
+.do ie '\[char97]'a' \
+. do mso latin1.tmac
+.el \
+. do mso cp1047.tmac
diff --git a/contrib/groff/tmac/e.tmac b/contrib/groff/tmac/e.tmac
index 8ea4074..b8dd9f3 100644
--- a/contrib/groff/tmac/e.tmac
+++ b/contrib/groff/tmac/e.tmac
@@ -184,7 +184,7 @@
.rs
.if \\n(hm>0 \
. sp |\\n(hmu \" move to header position
-.@t $h \" output header title
+.@t $h\" \" output header title
.if \\n(tm<=0 \
. nr tm \n(.Vu
.sp |\\n(tmu \" move to top of text
@@ -200,7 +200,7 @@
' @b
.\}
.el \
-. @n \" begin the column
+. @n\" \" begin the column
.if \n@>2 .tm << @h
..
.de @n \" --- new column or page
@@ -222,7 +222,7 @@
.nr ?f 0 \" reset footnote flag
.if \\n(?o \
\{\
-. (f _ \" reprocess footnotes which run off page
+. (f _\" \" reprocess footnotes which run off page
. nf
. |o
. fi
@@ -234,7 +234,7 @@
\{\
. nr _i \\n(.i
. in 0
-. |h \" output the table header
+. |h\" \" output the table header
. in \\n(_iu
. rr _i
. mk #T \" for tbl commands
@@ -249,7 +249,7 @@
. nr ?w 0
.\}
.os
-.$H \" special column header macro
+.$H\" \" special column header macro
.ns
..
.de @f \" --- footer
@@ -260,7 +260,7 @@
.if \\n(?T \
\{\
. nr T. 1 \" for tbl commands (to output bottom line)
-. T# 1 \" output the sides and bottom lines
+. T# 1\" \" output the sides and bottom lines
. br
.\}
.ev 2
@@ -271,11 +271,11 @@
. @k |b\" \" output bottom of page tables
.\}
.if \\n(?f \
-. @o \" output footnote if present
+. @o\" \" output footnote if present
.ie \\n($c<\\n($m \
-. @c \" handle new column
+. @c\" \" handle new column
.el \
-. @e \" new page
+. @e\" \" new page
.ev
.if \n@>2 .tm << @f
..
@@ -315,14 +315,14 @@
.@O \\n(_ou
.rs
.sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u) \" move to footer position
-.@t $f \" output footer title
+.@t $f\" \" output footer title
.nr ?h 0
.bp
..
.de @t \" --- output header or footer title
.if !\\n(?h \
\{\
-. sz \\n(tp \" set header/footer type fonts, etc.
+. sz \\n(tp\" \" set header/footer type fonts, etc.
. @F \\n(tf
. lt \\n(_Lu \" make title span entire page
. nf
@@ -375,7 +375,7 @@
. if \\n(.$>0 \
. pn \\$1
. if \\n(?I \
-. @h \" 'spring' the header trap
+. @h\" \" 'spring' the header trap
.\}
.br
.wh 0 @h \" reset header
@@ -678,7 +678,7 @@
.de 2c \" *** double columned output
.br
.if \\n($m>1 \
-. 1c \" revert to 1c if already 2c
+. 1c\" \" revert to 1c if already 2c
.nr $c 1
.nr $m 2
.if \\n(.$>1 \
@@ -795,7 +795,7 @@
.sp \\n(bsu+\\n(.Lv-1v
..
.de @( \" --- begin keep
-.if !"\\n(.z"" .tm Line \\n(c. -- Illegal nested keep \\n(.z
+.if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
.@M
.di |k
\!'rs
@@ -905,7 +905,7 @@
. nr ?e 0
. di
. if \\n(dn \
-. @q \" actual equation output
+. @q\" \" actual equation output
. rm |e
. ev
.\}
@@ -916,7 +916,7 @@
.sp \\n(esu \" output rest of preceeding text
.if !"\\n(.z"" \!.ne \\n(_Qu
.ne \\n(_Qu+\n(.Vu \" keep it on one page
-.@C 2 \" .ev 2 may be jumbled from header
+.@C 2\" \" .ev 2 may be jumbled from header
.if \\n(_d=1 \
. in (\\n(.lu+\\n($iu-\\n(dlu)/2u
.if \\n(_d=2 \
@@ -967,7 +967,7 @@
.nr ?T \\n(_T
.nr _i \\n(.i
.in 0
-.|h \" put in the initial header
+.|h\" \" put in the initial header
.in \\n(_iu
.rr _i
.mk #T
@@ -1215,7 +1215,7 @@ in \\f2\\*([B\\f1, \c
.\" *** FOOTNOTING ***
.de (f \" *** begin footnote
.ec
-.if "\\n(.z"|f" .tm Line \\n(c. -- Illegal footnote nesting
+.if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
.ie "\\n(.z"" \
\{\
. nr _D \\n(dn
@@ -1403,7 +1403,7 @@ in \\f2\\*([B\\f1, \c
.rm |x
..
.de +c \" *** begin chapter
-.ep \" force out footnotes
+.ep\" \" force out footnotes
.if \\n(?o:\\n(?a \
\{\
. bp \" force out a table or more footnote
@@ -1452,7 +1452,7 @@ in \\f2\\*([B\\f1, \c
. pn 1 \" must do before .ep
.if !\\n(_0=\\n(_M .if \\n(_M=3 \
. pn 1 \" must do before .ep
-.ep \" end page for correct page number types
+.ep\" \" end page for correct page number types
.if \\n(_0=1 \
\{\
. af ch 1
diff --git a/contrib/groff/tmac/ec.tmac b/contrib/groff/tmac/ec.tmac
new file mode 100644
index 0000000..d8bff62
--- /dev/null
+++ b/contrib/groff/tmac/ec.tmac
@@ -0,0 +1,57 @@
+.\" ec.tmac
+.\"
+.\" Switch to EC fonts.
+.\"
+.\" Load this file before any language-specific stuff.
+.\"
+.\" hcode values are not handled.
+.\"
+.
+.nr _C \n(.C
+.cp 0
+.
+.ftr R REC
+.ftr I IEC
+.ftr B BEC
+.ftr BI BIEC
+.
+.sty 1 R
+.sty 2 B
+.sty 3 I
+.sty 4 BI
+.
+.ftr CW CWEC
+.ftr CWI CWIEC
+.ftr CR CWEC
+.ftr C CWEC
+.ftr CO CWIEC
+.ftr CI CWIEC
+.ftr TT CWEC
+.ftr H HREC
+.
+.fspecial TREC TRTC
+.fspecial TIEC TITC
+.fspecial TBEC TBTC
+.fspecial TBIEC TBITC
+.fspecial HREC HRTC
+.fspecial HIEC HITC
+.fspecial HBEC HBTC
+.fspecial HBIEC HBIEC
+.fspecial CWEC CWTC
+.fspecial CWIEC CWITC
+.
+.\" remove definitions of glyphs which are TC fonts
+.rchar \[co] \[rg]
+.rchar \[ct]
+.rchar \[tm]
+.rchar \[aq]
+.rchar \[12] \[14] \[34]
+.rchar \[S1] \[S2] \[S3]
+.rchar \[Of] \[Om]
+.rchar \[Ye] \[Cs]
+.
+.\" an ID register
+.nr ECFONTS 1
+.
+.cp \n(_C
+.\" EOF
diff --git a/contrib/groff/tmac/groff_man.man b/contrib/groff/tmac/groff_man.man
index 89efa4f..2a1396e 100644
--- a/contrib/groff/tmac/groff_man.man
+++ b/contrib/groff/tmac/groff_man.man
@@ -1,5 +1,5 @@
.ig
-Copyright (C) 1999-2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 1999-2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -32,19 +32,19 @@ groff_man \- groff `man' macros to support generation of man pages
.B groff
.B \-man
[
-.IR options .\|.\|.
+.IR options .\|.\|.\&
]
[
-.IR files .\|.\|.
+.IR files .\|.\|.\&
]
.br
.B groff
.B \-m\ man
[
-.IR options .\|.\|.
+.IR options .\|.\|.\&
]
[
-.IR files .\|.\|.
+.IR files .\|.\|.\&
]
.
.SH DESCRIPTION
@@ -64,6 +64,16 @@ The
macros understand the following command line options (which define various
registers).
.TP
+.BI \-rLL= line-length
+Set line length.
+If this option is not given, the line length defaults to 78n in nroff mode
+and 6.5i in troff mode.
+.TP
+.BI \-rLT= title-length
+Set title length.
+If this option is not given, the title length defaults to 78n in nroff mode
+and 6.5i in troff mode.
+.TP
.B \-rcR=1
This option (the default if in nroff mode) will create a single, very long
page instead of multiple pages.
@@ -151,8 +161,8 @@ macro at the beginning of the file.
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
+up to the end of the line (resp. the text in the next input 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
@@ -162,8 +172,8 @@ value.
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
+up to the end of the line (resp. the text in the next input 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
@@ -175,8 +185,8 @@ The indentation is set to
.I nnn
if that argument is supplied (the default unit is `n' if omitted), otherwise
it is set to the 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.
+The first input line of text following this macro is interpreted as a string
+to be printed flush-left, as it is appropriate for a label.
It is not interpreted as part of a paragraph, so there is no attempt to fill
the first line with text from the following input lines.
Nevertheless, if the label is not as wide as the indentation, then the
@@ -290,18 +300,27 @@ The macros
and
.B RE
also cause a break but no insertion of vertical space.
+Finally, the macros
+.BR SH ,
+.BR SS ,
+.B LP
+.RB ( PP ,
+.BR P ),
+and
+.B RS
+reset the indentation to its default value.
.
.SH "MACROS TO SET FONTS"
.
The standard font is Roman; the default text size is 10\ point.
.TP
.BI ".SM [" text ]
-Causes the text on the same line or the text on the next line to appear in a
-font that is one point size smaller than the default font.
+Causes the text on the same line or the text on the next input line to
+appear in a font that is one point size smaller than the default font.
.TP
.BI ".SB [" text ]
-Causes the text on the same line or the text on the next line to appear in
-boldface font, one point size smaller than the default font.
+Causes the text on the same line or the text on the next input line to
+appear in boldface font, one point size smaller than the default font.
.TP
.BI ".BI " text
Causes text on the same line to appear alternately in bold face and italic.
@@ -335,28 +354,19 @@ 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
-.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
.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.
+of the next input line appears in bold face.
.TP
.BI ".I [" text ]
Causes
.I text
to appear in italic.
If no text is present on the line where the macro is called, then the text
-of the next line appears in italic.
+of the next input line appears in italic.
.
.SH "MISCELLANEOUS"
.
diff --git a/contrib/groff/tmac/groff_mdoc.man b/contrib/groff/tmac/groff_mdoc.man
index c13ad1f..5033cb5 100644
--- a/contrib/groff/tmac/groff_mdoc.man
+++ b/contrib/groff/tmac/groff_mdoc.man
@@ -46,7 +46,7 @@
.\" for an already extremely slow package.
.\"
.
-.Dd July 20, 2001
+.Dd October 07, 2002
.Os
.Dt GROFF_MDOC 7
.
@@ -102,7 +102,7 @@ options, function names, function parameters, pathnames, variables, cross
references to other manual pages, and so on.
These domain items have value for both the author and the future user of the
manual page.
-It is hoped the consistency gained across the manual set will provide easier
+Hopefully, the consistency gained across the manual set will provide easier
translation to future documentation tools.
.Pp
Throughout the
@@ -245,7 +245,7 @@ as follows:
The
.Nm \-mdoc
package attempts to simplify the process of writing a man page.
-Theoretically, one should not have to learn the dirty details of
+Theoretically, one should not have to learn the tricky details of
.Tn GNU
.Xr troff 1
to use
@@ -265,10 +265,10 @@ a macro is called by placing a
.Ql .\&
(dot character) at the beginning of a line followed by the two-character
(or three-character) name for the macro.
-There can be space characters between the dot and the macro name (but
+There can be space or tab characters between the dot and the macro name.
+Arguments may follow the macro separated by spaces (but
.Em no
tabs).
-Arguments may follow the macro separated by spaces (again, no tabs).
It is the dot character at the beginning of the line which causes
.Tn GNU
.Xr troff 1
@@ -281,11 +281,8 @@ a macro invocation, precede the
.Ql .\&
(dot) with the
.Ql \e&
-escape sequence.
-The
-.Ql \e&
-translates literally to a zero-width space, and is never displayed in
-the output.
+escape sequence which translates literally to a zero-width space, and is
+never displayed in the output.
.Pp
In general,
.Tn GNU
@@ -307,14 +304,13 @@ argument lists are
.Em parsed
for callable macro names.
This means an argument on the argument list which matches a general text or
-manual domain macro name and is determined to be callable will be executed
-or called when it is processed.
+manual domain macro name (and which is defined to be callable) will be
+executed or called when it is processed.
In this case the argument, although the name of a macro, is not preceded by
a
.Ql .\&
(dot).
-It is in this manner that many macros are nested; for example the
-option macro,
+This makes it possible to nest macros; for example the option macro,
.Ql .Op ,
may
.Em call
@@ -361,15 +357,22 @@ are parsed, but as it was cumbersome to constantly refer to macros as
being callable and being able to call other macros, the term parsed
has been used.
.
+.Pp
+In the following, we call an
+.Nm \-mdoc
+macro which starts a line (with a leading dot) a
+.Em command
+if this distinction is necessary.
+.
.Ss "Passing Space Characters in an Argument"
.
Sometimes it is desirable to give as an argument a string containing one or
-more blank space characters.
-This may be necessary to specify arguments to macros which expect particular
-arrangement of items in the argument list. Additionally, it makes
+more blank space characters, say, to specify arguments to commands which
+expect particular arrangement of items in the argument list.
+Additionally, it makes
.Nm \-mdoc
working faster.
-For example, the function macro
+For example, the function command
.Ql .Fn
expects the first argument to be the name of a function and any remaining
arguments to be function parameters.
@@ -438,7 +441,7 @@ It is a wise preventive measure to globally remove all blank spaces
from
.Ao blank-space Ac Ns Ao end-of-line Ac
character sequences.
-Should the need arise to force a blank character at the end of a line, it
+Should the need arise to use a blank character at the end of a line, it
may be forced with an unpaddable space and the
.Ql \e&
escape character.
@@ -559,33 +562,33 @@ extension); the rest of such a line is ignored.
The body of a man page is easily constructed from a basic template:
.
.Bd -literal -offset indent
-\&.\e" The following requests are required for all man pages.
+\&.\e" The following commands are required for all man pages.
\&.Dd Month day, year
\&.Os [OPERATING_SYSTEM] [version/release]
\&.Dt DOCUMENT_TITLE [section number] [architecture/volume]
\&.Sh NAME
\&.Nm name
\&.Nd one line description of name
-\&.\e" This next request is for sections 2 and 3 only.
+\&.\e" This next command is for sections 2 and 3 only.
\&.\e" .Sh LIBRARY
\&.Sh SYNOPSIS
\&.Sh DESCRIPTION
-\&.\e" The following requests should be uncommented and
+\&.\e" The following commands should be uncommented and
\&.\e" used where appropriate.
\&.\e" .Sh IMPLEMENTATION NOTES
-\&.\e" This next request is for sections 2, 3 and 9 function
+\&.\e" This next command is for sections 2, 3 and 9 function
\&.\e" return values only.
\&.\e" .Sh RETURN VALUES
-\&.\e" This next request is for sections 1, 6, 7 and 8 only.
+\&.\e" This next command is for sections 1, 6, 7 and 8 only.
\&.\e" .Sh ENVIRONMENT
\&.\e" .Sh FILES
\&.\e" .Sh EXAMPLES
-\&.\e" This next request is for sections 1, 6, 7, 8 and 9 only
+\&.\e" This next command is for sections 1, 6, 7, 8 and 9 only
\&.\e" (command return values (to shell) and
\&.\e" fprintf/stderr type diagnostics).
\&.\e" .Sh DIAGNOSTICS
\&.\e" .Sh COMPATIBILITY
-\&.\e" This next request is for sections 2, 3 and 9 error
+\&.\e" This next command is for sections 2, 3 and 9 error
\&.\e" and signal handling only.
\&.\e" .Sh ERRORS
\&.\e" .Sh SEE ALSO
@@ -596,7 +599,7 @@ The body of a man page is easily constructed from a basic template:
.Ed
.Pp
.
-The first items in the template are the macros
+The first items in the template are the commands
.Ql .Dd ,
.Ql .Os ,
and
@@ -605,7 +608,7 @@ the document date, the operating system the man page or subject source is
developed or modified for, and the man page title (in
.Em upper case )
along with the section of the manual the page belongs in.
-These macros identify the page and are discussed below in
+These commands identify the page and are discussed below in
.Sx TITLE MACROS .
.Pp
The remaining items in the template are section headers
@@ -653,6 +656,21 @@ Example:
.Pp
Except stated explicitly, all macros are parsed and callable.
.Pp
+Note that a macro takes effect up to the next nested macro.
+For example,
+.Ql ".Ic foo Aq bar"
+doesn't produce
+.Sq Ic "foo <bar>"
+but
+.Sq Ic foo Aq bar .
+Consequently, a warning message is emitted for most commands if the first
+argument is a macro itself since it cancels the effect of the calling
+command completely.
+Another consequence is that quoting macros never insert literal quotes;
+.Sq Ic "foo <bar>"
+has been produced by
+.Ql ".Ic \*[q]foo <bar>\*[q]" .
+.Pp
Most macros have a default width value which can be used to specify a label
width
.Pf ( Fl width )
@@ -898,7 +916,7 @@ Slightly different variations of this language are used to describe the
three different aspects of writing a man page.
First, there is the description of
.Nm \-mdoc
-macro request usage.
+macro command usage.
Second is the description of a
.Ux
command
@@ -918,7 +936,7 @@ command is:
.Pp
.
.Ql .Xx
-is a macro command or request, and anything following it are arguments to
+is a macro command, and anything following it are arguments to
be processed.
In the second case, the description of a
.Ux
@@ -1053,7 +1071,7 @@ impose an order on their argument lists.
All content macros are capable of recognizing and properly handling
punctuation, provided each punctuation character is separated by a leading
space.
-If a request is given:
+If a command is given:
.Pp
.Dl \&.Ar sptr, ptr),
.Pp
@@ -1147,7 +1165,7 @@ In the
.Sx AUTHORS
section, the
.Ql .An
-request causes a line break allowing each new name to appear on its own
+command causes a line break allowing each new name to appear on its own
line.
If this is not desirable,
.
@@ -1211,7 +1229,7 @@ In the
.Sx SYNOPSIS
section a
.Ql .Cd
-request causes a line break before and after its arguments are printed.
+command causes a line break before and after its arguments are printed.
.Pp
.
The default width is 12n.
@@ -1359,7 +1377,7 @@ In the
.Sx SYNOPSIS
section a
.Ql .Fd
-request causes a line break if a function has already been presented and a
+command causes a line break if a function has already been presented and a
break has not occurred.
This leaves a nice vertical space in between the previous function call and
the declaration for the next function.
@@ -2047,7 +2065,7 @@ For possible values of
.Ao version Ac
see the description of the
.Ql .Os
-request above in section
+command above in section
.Sx "TITLE MACROS" .
.
.Ss "FreeBSD Macro"
@@ -2066,7 +2084,7 @@ For possible values of
.Ao version Ac
see the description of the
.Ql .Os
-request above in section
+command above in section
.Sx "TITLE MACROS" .
.
.Ss "OpenBSD Macro"
@@ -2337,7 +2355,7 @@ Note: The
macro always invokes the
.Ql .No
macro after eliminating the space unless another macro name follows it.
-If used as a request (i.e., the second form above in the
+If used as a command (i.e., the second form above in the
.Sq Usage
line),
.Ql .Ns
@@ -3825,6 +3843,7 @@ The following strings are predefined:
.It Li Gt Ta > Ta \*[Gt] Ta "greater than"
.It Li Pm Ta +\- Ta \*[Pm] Ta "plus minus"
.It Li If Ta infinity Ta \*[If] Ta "infinity"
+.It Li Am Ta \*[Am] Ta \*[Am] Ta "ampersand"
.It Li Na Ta \*[Na] Ta \*[Na] Ta "not a number"
.It Li Ba Ta \*[Ba] Ta \*[Ba] Ta "vertical bar"
.El
@@ -3917,6 +3936,17 @@ Register
is ignored for
.Tn TTY
devices.
+.Pp
+The line and title length can be changed by setting the registers
+.Ql LL
+and
+.Ql LT ,
+respectively:
+.Pp
+.Dl groff -Tutf8 -rLL=100n -rLT=100n -mdoc foo.man | less
+.Pp
+If not set, both registers default to 78n for TTY devices and 6.5i
+otherwise.
.
.
.Sh FILES
diff --git a/contrib/groff/tmac/groff_ms.man b/contrib/groff/tmac/groff_ms.man
index 590b060..5b3e941 100644
--- a/contrib/groff/tmac/groff_ms.man
+++ b/contrib/groff/tmac/groff_ms.man
@@ -1,5 +1,6 @@
+'\" t
.ig
-Copyright (C) 1989-1995, 2001 Free Software Foundation, Inc.
+Copyright (C) 1989-1995, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
@@ -23,71 +24,911 @@ groff_ms \- groff ms macros
.B groff
.B \-ms
[
-.IR options .\|.\|.
+.IR options .\|.\|.\&
]
[
-.IR files .\|.\|.
+.IR files .\|.\|.\&
]
.br
.B groff
.B \-m\ ms
[
-.IR options .\|.\|.
+.IR options .\|.\|.\&
]
[
-.IR files .\|.\|.
+.IR files .\|.\|.\&
]
+.\" -----
.SH DESCRIPTION
-This manual page describes the GNU version of the ms macros,
-which is part of the groff document formatting system.
-The groff ms macros are intended to be compatible with the
-documented behaviour of the 4.3
+This manual page describes the GNU version of the
+.I ms
+macros,
+part of the
+.I groff
+typesetting system.
+The
+.I ms
+macros are mostly compatible with the
+documented behavior of the 4.3
.SM BSD
-Unix ms macros subject to the following limitations:
+Unix
+.I ms
+macros (see
+.I Differences from troff ms
+below for details).
+The
+.I ms
+macros are suitable for reports, letters, books, and
+technical documentation.
+.\" -----
+.SH USAGE
+The
+.I ms
+macro package expects files to have
+a certain amount of structure.
+The simplest documents can begin with a paragraph macro
+and consist of text separated by paragraph macros
+or even blank lines.
+Longer documents have a structure as follows:
+.TP
+.B "Document type"
+If you use the
+.B RP
+(report) macro at the beginning of the document,
+.I groff
+prints the cover page information on its own page;
+otherwise it prints the information on the
+first page with your document text immediately following.
+Other document formats found in AT&T
+.I troff
+are specific to AT&T
+or Berkeley, and are not supported in
+.IR "groff ms" .
+.TP
+.B "Format and layout"
+By setting number registers,
+you can change your document's type (font and size),
+margins, spacing, headers and footers, and footnotes.
+See
+.I "Document control registers"
+below for more details.
+.TP
+.B "Cover page"
+A cover page consists of a title,
+and optionally the author's name and institution,
+an abstract, and the date.
+See
+.I "Cover page macros"
+below for more details.
+.TP
+.B "Body"
+Following the cover page is your document.
+It consists of paragraphs, headings, and lists.
+.TP
+.B "Table of contents"
+Longer documents usually include a table of contents,
+which you can add by placing the
+.B TC
+macro at the end of your document.
+.\" -----
+.SS "Document control registers"
+The following table lists the document control
+number registers.
+For the sake of consistency,
+set registers related to margins at the beginning of your document,
+or just after the
+.B RP
+macro.
+.LP
+.ne 9
+.B Margin settings
+.RS
+.na
+.TS
+cb s cb s s cb s cb s
+afCW s l s s l s l s.
+Reg. Definition Effective Default
+_
+PO T{
+Page offset (left margin)
+T} T{
+next page
+T} 1i
+LL T{
+Line length
+T} next para. 6i
+LT T{
+Header/footer length
+T} next para. 6i
+HM T{
+Top (header) margin
+T} next page 1i
+FM T{
+Bottom (footer) margin
+T} next page 1i
+_
+.TE
+.RE
+.LP
+.ne 7
+.B Text settings
+.RS
+.TS
+cb s cb s s cb s cb s
+afCW s l s s l s l s.
+Reg. Definition Effective Default
+_
+PS T{
+Point size
+T} next para. 10p
+VS T{
+Line spacing (leading)
+T} next para. 12p
+_
+.TE
+.RE
+.LP
+.ne 7
+.B Paragraph settings
+.RS
+.TS
+cb cb s cb cb
+afCW l s l l .
+Reg. Definition Effective Default
+_
+PI T{
+Initial indent
+T} next para. 5n
+PD T{
+Space between paragraphs
+T} next para. 0.3v
+QI T{
+Quoted paragraph indent
+T} next para. 5n
+_
+.TE
+.RE
+.LP
+.ne 7
+.B Footnote settings
+.RS
+.TS
+cb cb cb cb
+afCW l l l .
+Reg. Definition Effective Default
+_
+FL Footnote length next footnote LL*5/6
+FI Footnote indent next footnote 2n
+FF Footnote format next footnote 0
+_
+.TE
+.RE
+.LP
+.ne 6
+.B Other settings
+.RS
+.TS
+cb s cb s s cb s cb s
+afCW s l s s l s l s.
+Reg. Definition Effective Default
+_
+MINGW T{
+Minimum width between columns
+T} next page 2n
+_
+.TE
+.ad
+.RE
+.\" -----
+.SS "Cover page macros"
+Use the following macros to create a cover page for your document
+in the order shown.
+.TP
+.B \&.RP [no]
+Specifies the report format for your document.
+The report format creates a separate cover page.
+With no
+.B RP
+macro,
+.I groff
+prints a subset of the
+cover page on page\~1 of your document.
+.IP
+If you use the optional
+.B no
+argument,
+.I groff
+prints a title page but
+does not repeat any of the title page information
+(title, author, abstract, etc.\&)
+on page\~1 of the document.
+.TP
+.B \&.P1
+(P-one) Prints the header on page\~1.
+The default is to suppress the header.
+.TP
+.BI "\&.DA [" xxx ]
+(optional) Print the current date,
+or the arguments to the macro if any,
+on the title page (if specified)
+and in the footers.
+This is the default for
+.IR nroff .
+.TP
+.BI "\&.ND [" xxx ]
+(optional) Print the current date,
+or the arguments to the macro if any,
+on the title page (if specified)
+but not in the footers.
+This is the default for
+.IR troff .
+.TP
+.B \&.TL
+Specifies the document title.
+.I Groff
+collects text following the
+.B TL
+macro into the title, until reaching the author name or abstract.
+.TP
+.B \&.AU
+Specifies the author's name.
+You can specify multiple authors by using an
+.B AU
+macro for each author.
+.TP
+.B \&.AI
+Specifies the author's institution.
+You can specify multiple institutions.
+.TP
+.B \&.AB [no]
+Begins the abstract.
+The default is to print the word
+.BR ABSTRACT ,
+centered and in italics, above the text of the abstract.
+The option
+.B no
+suppresses this heading.
+.TP
+.B \&.AE
+End the abstract.
+.\" -----
+.SS Paragraphs
+Use the
+.B PP
+macro to create indented paragraphs,
+and the
+.B LP
+macro to create paragraphs with no initial indent.
+.PP
+The
+.B QP
+macro indents all text at both left and right margins.
+The effect is identical to the HTML
+.B <BLOCKQUOTE>
+element.
+The next paragraph or heading
+returns margins to normal.
+.PP
+The
+.B XP
+macro produces an exdented paragraph.
+The first line of the paragraph begins at
+the left margin,
+and subsequent lines are indented
+(the opposite of
+.BR PP ).
+.SS Headings
+Use headings to create a hierarchical structure
+for your document.
+The
+.I ms
+macros print headings in
+.B bold
+using the same font family and point size as the body text.
+.PP
+The following heading macros are available:
+.TP
+.BI \&.NH \0xx
+Numbered heading.
+The argument
+.I xx
+is either a numeric argument to indicate the
+level of the heading, or
+.I S\ xx\ xx\ \c
+".\|.\|."
+to set the section number explicitly.
+If you specify heading levels out of sequence,
+such as invoking
+.B ".NH\ 3"
+after
+.BR ".NH\ 1" ,
+.I groff
+prints a warning on standard error.
+.TP
+.B \&.SH
+Unnumbered subheading.
+.\" -----
+.SS Highlighting
+The
+.I ms
+macros provide a variety of methods to highlight
+or emphasize text:
+.TP
+.BI "\&.B [" txt " [" post " [" pre ]]]
+Sets its first argument in
+.BR "bold type" .
+If you specify a second argument,
+.I groff
+prints it in the previous font after
+the bold text, with no intervening space
+(this allows you to set punctuation after
+the highlighted text without highlighting
+the punctuation).
+Similarly, it prints the third argument (if any)
+in the previous font
+.B before
+the first argument.
+For example,
+.RS
+.IP
+\&.B foo ) (
+.RE
+.IP
+prints
+.RB ( foo ).
+.IP
+If you give this macro no arguments,
+.I groff
+prints all text following in bold until
+the next highlighting, paragraph, or heading macro.
+.TP
+.BI "\&.R [" txt " [" post " [" pre ]]]
+Sets its first argument in
+roman (or regular) type.
+It operates similarly to the
+.B B
+macro otherwise.
+.TP
+.BI "\&.I [" txt " [" post " [" pre ]]]
+Sets its first argument in
+.IR "italic type" .
+It operates similarly to the
+.B B
+macro otherwise.
+.TP
+.BI "\&.CW [" txt " [" post " [" pre ]]]
+Sets its first argument in a constant width face.
+It operates similarly to the
+.B B
+macro otherwise.
+.TP
+.BI "\&.BI [" txt " [" post " [" pre ]]]
+Sets its first argument in bold italic type.
+It operates similarly to the
+.B B
+macro otherwise.
+.TP
+.BI "\&.BX [" txt ]
+Prints its argument and draws a box around it.
+If you want to box a string that contains spaces,
+use a digit-width space (\[rs]0).
+.TP
+.BI "\&.UL [" txt " [" post ]]
+Prints its first argument with an underline.
+If you specify a second argument,
+.I groff
+prints it in the previous font after
+the underlined text, with no intervening space.
+.TP
+.B \&.LG
+Prints all text following in larger type
+(2\~points larger than the current point size) until
+the next font size, highlighting, paragraph, or heading macro.
+You can specify this macro multiple times
+to enlarge the point size as needed.
+.TP
+.B \&.SM
+Prints all text following in
+smaller type
+(2\~points smaller than the current point size) until
+the next type size, highlighting, paragraph, or heading macro.
+You can specify this macro multiple times
+to reduce the point size as needed.
+.TP
+.B \&.NL
+Prints all text following in
+the normal point size
+(that is, the value of the
+.B PS
+register).
+.TP
+.BI \[rs]*{ text \[rs]*}
+Print the enclosed
+.I text
+as a superscript.
+.\" -----
+.SS Indents
+You may need to indent sections of text.
+A typical use for indents is to create nested lists and sublists.
+.PP
+Use the
+.B RS
+and
+.B RE
+macros to start and end a section of indented text, respectively.
+The
+.B PI
+register controls the amount of indent.
+.PP
+You can nest indented sections as deeply as needed by
+using multiple, nested pairs of
+.B RS
+and
+.BR RE .
+.\" -----
+.SS Lists
+The
+.B IP
+macro handles duties for all lists.
+Its syntax is as follows:
+.TP
+.BI ".IP [" marker " [" width ]]
+.IP
+The
+.I marker
+is usually a bullet character
+.B \[rs](bu
+for unordered lists,
+a number (or auto-incrementing number register) for numbered lists,
+or a word or phrase for indented (glossary-style) lists.
+.IP
+The
+.I width
+specifies the indent for the body of each list item.
+Once specified, the indent remains the same for all
+list items in the document until specified again.
+.\" -----
+.br
+.ne 15
+.SS "Tab stops"
+Use the
+.B ta
+request to set tab stops as needed.
+Use the
+.B TA
+macro to reset tabs to the default (every 5n).
+You can redefine the
+.B TA
+macro to create a different set of default tab stops.
+.\" -----
+.SS "Displays and keeps"
+Use displays to show text-based examples or figures
+(such as code listings).
+Displays turn off filling, so lines of code can be
+displayed as-is without inserting
+.B br
+requests in between each line.
+Displays can be
+.I kept
+on a single page, or allowed to break across pages.
+The following table shows the display types available.
+.RS
+.ne 11
+.na
+.TS
+cb s s s cbt s s
+cb s cb s ^ s s
+lfCW s lfCW s l s s.
+Display macro Type of display
+With keep No keep
+_
+\&.DS L \&.LD Left-justified.
+\&.DS I [\fIindent\fP] \&.ID T{
+Indented (default indent in the \fBDI\fP register).
+T}
+\&.DS B \&.BD T{
+Block-centered (left-justified, longest line centered).
+T}
+\&.DS C \&.CD Centered.
+\&.DS R \&.RD Right-justified.
+_
+.TE
+.RE
+.ad
+.LP
+Use the
+.B DE
+macro to end any display type.
+.PP
+To
+.I keep
+text together on a page,
+such as
+a paragraph that refers to a table (or list, or other item)
+immediately following, use the
+.B KS
+and
+.B KE
+macros.
+The
+.B KS
+macro begins a block of text to be kept on a single page,
+and the
+.B KE
+macro ends the block.
+.PP
+You can specify a
+.I "floating keep"
+using the
+.B KF
+and
+.B KE
+macros.
+If the keep cannot fit on the current page,
+.I groff
+holds the contents of the keep and allows text following
+the keep (in the source file) to fill in the remainder of
+the current page.
+When the page breaks,
+whether by an explicit
+.B bp
+request or by reaching the end of the page,
+.I groff
+prints the floating keep at the top of the new page.
+This is useful for printing large graphics or tables
+that do not need to appear exactly where specified.
+.\" -----
+.SS "Tables, figures, equations, and references"
+The
+.I -ms
+macros support the standard
+.I groff
+preprocessors:
+.IR tbl ,
+.IR pic ,
+.IR eqn ,
+and
+.IR refer .
+Mark text meant for preprocessors by enclosing it
+in pairs of tags as follows:
+.TP
+.BR "\&.TS [H]" " and " \&.TE
+Denotes a table, to be processed by the
+.I tbl
+preprocessor.
+The optional
+.BR H "\~argument"
+instructs
+.I groff
+to create a running header with the information
+up to the
+.B TH
+macro.
+.I Groff
+prints the header at the beginning of the table;
+if the table runs onto another page,
+.I groff
+prints the header on the next page as well.
+.TP
+.BR \&.PS " and " \&.PE
+Denotes a graphic, to be processed by the
+.I pic
+preprocessor.
+You can create a
+.I pic
+file by hand, using the
+AT&T
+.I pic
+manual available on the Web as a reference,
+or by using a graphics program such as
+.IR xfig .
+.TP
+.BR "\&.EQ [\fI\,align\/\fP]" " and " \&.EN
+Denotes an equation, to be processed by the
+.I eqn
+preprocessor.
+The optional
+.I align
+argument can be
+.BR C ,
+.BR L ,
+or\~\c
+.B I
+to center (the default), left-justify, or indent
+the equation.
+.TP
+.BR \&.[ " and " \&.]
+Denotes a reference, to be processed by the
+.I refer
+preprocessor.
+The GNU
+.IR @g@refer (@MAN1EXT@)
+manual page provides a comprehensive reference
+to the preprocessor and the format of the
+bibliographic database.
+.\" -----
+.SS Footnotes
+The
+.I ms
+macros provide a flexible footnote system.
+You can specify a numbered footnote by using the
+.B \[rs]**
+escape, followed by the text of the footnote
+enclosed by
+.B FS
+and
+.B FE
+macros.
+.PP
+You can specify symbolic footnotes
+by placing the mark character (such as
+.B \[rs](dg
+for the dagger character) in the body text,
+followed by the text of the footnote
+enclosed by
+.B FS\ \[rs](dg
+and
+.B FE
+macros.
+.PP
+You can control how
+.I groff
+prints footnote numbers by changing the value of the
+.B FF
+register as follows:
+.RS
+.ne 7
+.TP
+0
+Prints the footnote number as a superscript; indents the footnote (default).
+.TP
+1
+Prints the number followed by a period (like\~1.\&)
+and indents the footnote.
+.TP
+2
+Like\~1, without an indent.
+.TP
+3
+Like\~1, but prints the footnote number as a hanging paragraph.
+.LP
+.RE
+You can use footnotes safely within keeps and displays,
+but avoid using numbered footnotes within floating keeps.
+You can set a second
+.B \[rs]**
+between a
+.B \[rs]**
+and its corresponding
+.BR .FS ;
+as long as each
+.B .FS
+occurs
+.I after
+the corresponding
+.B \[rs]**
+and the occurrences of
+.B .FS
+are in the same order as the corresponding occurrences of
+.BR \[rs]** .
+.\" -----
+.SS "Headers and footers"
+There are two ways to define headers and footers:
+.IP \(bu 3n
+Use the strings
+.BR LH ,
+.BR CH ,
+and
+.B RH
+to set the left, center, and right headers; use
+.BR LF ,
+.BR CF ,
+and
+.B RF
+to set the left, center, and right footers.
+This works best for documents that do not distinguish
+between odd and even pages.
.IP \(bu
-the internals of groff ms are not similar to the internals of Unix ms
-and so documents that depend upon implementation details of Unix ms
-may well not work with groff ms;
+Use the
+.B OH
+and
+.B EH
+macros to define headers for the odd and even pages; and
+.B OF
+and
+.B EF
+macros to define footers for the odd and even pages.
+This is more flexible than defining the individual strings.
+The syntax for these macros is as follows:
+.RS
+.IP
+.BI "\&.OH '" left ' center ' right '
+.RE
+.IP
+You can replace the quote (') marks with any character not
+appearing in the header or footer text.
+.\" -----
+.SS Margins
+You control margins using a set of number registers.
+The following table lists the register names and defaults:
+.RS
+.ne 8
+.na
+.TS
+cb s cb s s cb s cb s
+afCW s l s s l s l s.
+Reg. Definition Effective Default
+_
+PO T{
+Page offset (left margin)
+T} next page 1i
+LL T{
+Line length
+T} next para. 6i
+LT T{
+Header/footer length
+T} next para. 6i
+HM T{
+Top (header) margin
+T} next page 1i
+FM T{
+Bottom (footer) margin
+T} next page 1i
+_
+.TE
+.RE
+.ad
+.PP
+Note that there is no right margin setting.
+The combination of page offset and line length
+provide the information necessary to
+derive the right margin.
+.\" -----
+.SS "Multiple columns"
+The
+.I ms
+macros can set text in as many columns as will reasonably
+fit on the page.
+The following macros are available.
+All of them force a page break if a multi-column mode is already set.
+However, if the current mode is single-column, starting a multi-column
+mode does
+.I not
+force a page break.
+.TP
+.B \&.1C
+Single-column mode.
+.TP
+.B \&.2C
+Two-column mode.
+.TP
+.BI "\&.MC [" width " [" gutter ]]
+Multi-column mode.
+If you specify no arguments, it is equivalent to the
+.B 2C
+macro.
+Otherwise,
+.I width
+is the width of each column and
+.I gutter
+is the space between columns.
+The
+.B MINGW
+number register is the default gutter width.
+.\" -----
+.SS "Creating a table of contents"
+Wrap text that you want to appear in the
+table of contents in
+.B XS
+and
+.B XE
+macros.
+Use the
+.B TC
+macro to print the table of contents at the end of the document,
+resetting the page number to\~\c
+.B i
+(Roman numeral\~1).
+.PP
+You can manually create a table of contents
+by specifying a page number as the first argument to
+.BR XS .
+Add subsequent entries using the
+.B XA
+macro.
+For example:
+.RS
+.PP
+.ne 8
+.nf
+\&.XS 1
+Introduction
+\&.XA 2
+A Brief History of the Universe
+\&.XA 729
+Details of Galactic Formation
+\&.\|.\|.
+\&.XE
+.fi
+.RE
+.LP
+Use the
+.B PX
+macro to print a manually-generated table of contents
+without resetting the page number.
+.PP
+If you give the argument
+.B no
+to either
+.B PX
+or
+.BR TC ,
+.I groff
+suppresses printing the title
+specified by the
+.B \[rs]*[TOC]
+string.
+.\" -----
+.SH "DIFFERENCES FROM troff ms"
+The
+.I "groff ms"
+macros are a complete re-implementation,
+using no original AT&T code.
+Since they take advantage of the extended features in
+.IR groff ,
+they cannot be used with AT&T
+.IR troff .
+Other differences include:
+.IP \(bu 3n
+The internals of
+.I "groff ms"
+differ from the internals of Unix
+.IR ms .
+Documents that depend upon implementation details of Unix
+.I ms
+may not format properly with
+.IR "groff ms" .
.IP \(bu
-there is no support for typewriter-like devices;
+The error-handling policy of
+.I "groff ms"
+is to detect and report errors,
+rather than silently to ignore them.
+.IP \(bu
+Bell Labs localisms are not implemented.
.IP \(bu
Berkeley localisms, in particular the
.B TM
and
.B CT
-macros, are not implemented;
+macros,
+are not implemented.
.IP \(bu
-groff ms
-does not provide cut marks;
+.I "Groff ms"
+does not work in compatibility mode (e.g.\& with the
+.B \-C
+option).
.IP \(bu
-multiple line spacing is not allowed
-(use a larger vertical spacing instead);
+There is no support for typewriter-like devices.
.IP \(bu
-groff ms does not work in compatibility mode (eg with the
-.B \-C
-option);
+.I "Groff ms"
+does not provide cut marks.
.IP \(bu
-the error-handling policy of groff ms
-is to detect and report errors,
-rather than silently to ignore them.
-.LP
-The groff ms macros make use of many features of GNU troff
-and therefore cannot be used with any other troff.
-.LP
-Bell Labs localisms are not implemented in either the
-.SM BSD
-ms macros or in the groff ms macros.
-.LP
-Some Unix ms documentation says that the
+Multiple line spacing is not supported
+(use a larger vertical spacing instead).
+.IP \(bu
+Some Unix
+.I ms
+documentation says that the
.B CW
and
.B GW
number registers can be used to control the column width and
gutter width respectively.
-This is not the case.
These number registers are not used in groff ms.
-.LP
-Macros that cause a reset set the indent.
+.IP \(bu
+Macros that cause a reset
+(paragraphs, headings, etc.)
+may change the indent.
Macros that change the indent do not increment or decrement
the indent, but rather set it absolutely.
This can cause problems for documents that define
@@ -99,61 +940,33 @@ request but instead the
and
.B RE
macros.
-.LP
+.IP \(bu
The number register
.B GS
-is set to 1 by the groff ms macros,
-but is not used by the Unix ms macros.
-It is intended that documents that need to determine whether
-they are being formatted with Unix ms or groff ms make use of this
-number register.
-.LP
-Footnotes are implemented so that they can safely be used within
-keeps and displays.
-Automatically numbered footnotes within floating keeps are
-not recommended.
-It is safe to have another
-.B \e**
-between a
-.B \e**
-and the corresponding
-.BR .FS ;
-it is required only that each
-.B .FS
-occur after the corresponding
-.B \e**
-and that the occurrences of
-.B .FS
-are in the same order as the corresponding occurrences of
-.BR \e** .
-.LP
-The strings
-.B \e*{
-and
-.B \e*}
-can be used to begin and end a superscript.
-.LP
-Some Unix V10 ms features are implemented.
-The
-.BR B ,
-.BR I
-and
-.B BI
-macros can have an optional third argument which will be printed
-in the current font before the first argument.
-There is a macro
-.B CW
-like
-.B B
-that changes to a constant-width font.
-.LP
-The following strings can be redefined to adapt the groff ms macros
-to languages other than English:
-.LP
-.nf
-.ta \w'REFERENCES'u+2n
+is set to\~1 by the
+.I "groff ms"
+macros,
+but is not used by the Unix
+.I ms
+macros.
+Documents that need to determine whether
+they are being formatted with Unix
+.I ms
+or
+.I "groff ms"
+should use this number register.
+.br
+.ne 22
+.SS Strings
+You can redefine the following strings to adapt the
+.I "groff ms"
+macros to languages other than English:
+.TS
+center;
+cb cb
+afCW l .
String Default Value
-.sp .3v
+_
REFERENCES References
ABSTRACT ABSTRACT
TOC Table of Contents
@@ -169,69 +982,94 @@ MONTH9 September
MONTH10 October
MONTH11 November
MONTH12 December
-.fi
+_
+.TE
+.PP
+The
+.B \[rs]*-
+string produces an em dash \[em] like this.
+.\" -----
+.SS Text Settings
+The
+.B FAM
+string sets the default font family.
+If this string is undefined at initialization,
+it is set to Times.
.LP
-The font family is reset from the string
-.BR FAM ;
-at initialization if this string is undefined it is set to the current
-font family.
The point size, vertical spacing, and inter-paragraph spacing for footnotes
-are taken from the number registers
+are controlled by the number registers
.BR FPS ,
.BR FVS ,
and
.BR FPD ;
at initialization these are set to
-.BR \en(PS-2 ,
-.BR \en[FPS]+2 ,
+.BR \[rs]n(PS-2 ,
+.BR \[rs]n[FPS]+2 ,
and
-.B \en(PD/2
-respectively; however, if any of these registers has been defined
-before initialization, it will not be set.
+.B \[rs]n(PD/2
+respectively.
+If any of these registers are defined before initialization,
+the initialization macro does not change them.
+.LP
The hyphenation flags (as set by the
-.B .hy
+.B hy
request) are set from the
.B HY
register;
-if this has not been defined at initialization,
-it will be set to 14.
-.LP
-Right-aligned displays are available with
-.B ".DS R"
-and
-.BR .RD .
+the default is\~14.
+.PP
+Improved accent marks
+(as originally defined in Berkeley's
+.I ms
+version)
+are available by specifying the
+.B AM
+macro at the beginning of your document.
+You can place an accent over most characters
+by specifying the string defining the accent
+directly after the character.
+For example,
+.B n\[rs]*~
+produces an n with a tilde over it.
+.\" -----
+.SH "NAMING CONVENTIONS"
.LP
The following conventions are used for names of macros, strings and
number registers.
-External names available to documents that use the groff ms
+External names available to documents that use the
+.I "groff ms"
macros contain only uppercase letters and digits.
-Internally the macros are divided into modules.
+.LP
+Internally the macros are divided into modules;
+naming conventions are as follows:
+.IP \(bu 3n
Names used only within one module are of the form
-.IB module * name\fR.
+.IB \%module * name\fR.
+.IP \(bu
Names used outside the module in which they are defined are of the form
-.IB module @ name\fR.
+.IB \%module @ name\fR.
+.IP \(bu
Names associated with a particular environment are of the form
-.IB environment : name;
+.IB \%environment : name;
these are used only within the
.B par
-module,
-and
+module.
+.IP \(bu
.I name
does not have a module prefix.
+.IP \(bu
Constructed names used to implement arrays are of the form
-.IB array ! index\fR.
+.IB \%array ! index\fR.
+.PP
Thus the groff ms macros reserve the following names:
+.IP \(bu 3n
+Names containing the characters
+.BR * ,
+.BR @ ,
+and\~\c
+.BR : .
.IP \(bu
-names containing
-.BR * ;
-.IP \(bu
-names containing
-.BR @ ;
-.IP \(bu
-names containing
-.BR : ;
-.IP \(bu
-names containing only uppercase letters and digits.
+Names containing only uppercase letters and digits.
.SH FILES
.B @MACRODIR@/ms.tmac
(a wrapper file for
@@ -243,10 +1081,15 @@ names containing only uppercase letters and digits.
.BR @g@troff (@MAN1EXT@),
.BR @g@tbl (@MAN1EXT@),
.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@)
-.br
-.BR ms (@MAN7EXT@)
-.
+.BR @g@eqn (@MAN1EXT@),
+.BR @g@refer (@MAN1EXT@),
+.I Groff: The GNU Implementation of troff
+by Trent Fisher and Werner Lemberg.
+.SH AUTHOR
+Original manual page by James Clark
+.IR "et al" ;
+rewritten by Larry Kollar
+(\fIlkollar@despammed.com\fR).
.\" Local Variables:
.\" mode: nroff
.\" End:
diff --git a/contrib/groff/tmac/groff_trace.man b/contrib/groff/tmac/groff_trace.man
new file mode 100644
index 0000000..f7f1ae8
--- /dev/null
+++ b/contrib/groff/tmac/groff_trace.man
@@ -0,0 +1,546 @@
+.
+.TH GROFF_TRACE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
+.SH NAME
+groff_trace \- groff macro package trace.tmac
+.SH SYNOPSIS
+.\" The .SH was moved to this place to make `apropos' happy.
+.
+.
+.\" --------------------------------------------------------------------
+.\" Legalize
+.\" --------------------------------------------------------------------
+.
+.ig
+groff_trace.7
+
+File position: <groff-source>/tmac/groff_trace.man
+
+Last update: 14 July 2002
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2002 Free Software Foundation, Inc.
+written by Bernd Warken <bwarken@mayn.de>
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being this .ig-section and AUTHOR, with no
+Front-Cover Texts, and with no Back-Cover Texts.
+
+A copy of the Free Documentation License is included as a file called
+FDL in the main directory of the groff source package.
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.mso www.tmac
+.
+.if n \{\
+. mso tty-char.tmac
+. ftr CR R
+. ftr CI I
+. ftr CB B
+.\}
+.
+.ds Ellipsis .\|.\|.\&\"
+.
+.\" Global static variables for inter-macro communication
+.rr @+Example_font
+.
+.\" --------------------------------------------------------------------
+.\" setup for the macro definitions below
+.\"
+.\" naming: namespace:category_macro.variable_name (experimental)
+.
+.\" --------------------------------------------------------------------
+.\" configuration of prompt for `.Shell_cmd'* macros
+.ds trace:Shell_cmd.prompt_text sh#\" prompt for shell commands
+.ds trace:Shell_cmd+.prompt_text >\" prompt on continuation lines
+.ds trace:Shell_cmd_base.prompt_font I\" font for prompts
+.
+.\" automatically determine setup from the configuration above
+.als @f trace:Shell_cmd_base.prompt_font\"
+.als @t trace:Shell_cmd.prompt_text\"
+.als @t+ trace:Shell_cmd+.prompt_text\"
+.ds trace:Shell_cmd.prompt \f[\*[@f]]\*[@t]\f[]\" needed
+.ds trace:Shell_cmd+.prompt \f[\*[@f]]\*[@t+]\f[]\" needed
+.nr @w \w'\*[trace:Shell_cmd.prompt]'\"
+.nr @w+ \w'\*[trace:Shell_cmd+.prompt]'\"
+.ft \*[@f]
+.\" Full prompt width is maximum of texts plus 1m
+.nr trace:Shell_cmd_base.prompt_width (\n[@w]>?\n[@w+]+1m)\" needed
+.ft
+.rm @f
+.rm @f+
+.rm @t
+.rm @t+
+.rr @w
+.rr @w+
+.
+.\"--------------------------------------------------------------------
+.\" Ignore all arguments like a comment, even after a .eo call.
+.de c
+..
+.c --------------------------------------------------------------------
+.de BIR
+. ie (\\n[.$] < 3) \
+. BI \\$@
+. el \{\
+. ds @tmp@ \fB\\$1\f[]\fI\\$2\f[]
+. shift 2
+. Text \\*[@tmp@]\fR\\$*\f[]
+. rm @tmp@
+. \}
+..
+.c --------------------------------------------------------------------
+.c .Env_var (<env_var_name> [<punct>])
+.c
+.c Display an environment variable, with optional punctuation.
+.c
+.de Env_var
+. nh
+. SM
+. Text \f[CB]\\$1\f[]\\$2
+. hy
+..
+.c --------------------------------------------------------------------
+.c .Error (<text>...)
+.c
+.c Print error message to terminal and abort.
+.c
+.de Error
+. tm \\$*
+. ab
+..
+.c --------------------------------------------------------------------
+.de Example
+. if r@+Example_font \
+. Error previous .Example was not terminated by a ./Example
+. nr @+Example_font \\n[.f]
+. nh
+. nf
+.c RS \\n[trace:Shell_cmd_base.prompt_width]u
+. ft CR
+..
+.c --------------------------------------------------------------------
+.de /Example
+. if !r@+Example_font \
+. Error no previous call to .Example
+. ft \\n[@+Example_font]
+.c RE
+. fi
+. hy
+. rr @+Example_font
+..
+.c --------------------------------------------------------------------
+.de Macdef
+. if (\\n[.$] <= 0) \
+. Error \\$0 needs at least one argument.
+. ds @s .\f[B]\\$1\f[]\"
+. shift
+. if (\\n[.$] > 0) \
+. as @s \~\f[I]\\$*\f[]\"
+. IP \\*[@s]
+. rm @s
+..
+.c --------------------------------------------------------------------
+.de Macdef+
+. br
+. ns
+. Macdef \\$@
+..
+.c --------------------------------------------------------------------
+.c .Shell_cmd (<CR> [<CI>] ...)
+.c
+.c A shell command line; display args alternating in fonts CR and CI.
+.c
+.c Examples:
+.c .Shell_cmd "groffer --dpi 100 file"
+.c result: `sh# groffer --dpi 100 file'
+.c with 'sh#' in font I, the rest in CR
+.c
+.c .Shell_cmd groffer\~--dpi\~100\~file
+.c result: the same as above
+.c
+.c .Shell_cmd "groffer --dpi=" value " file"
+.c result: sh# groffer --dpi=value file
+.c with `groffer --dpi=' and `file' in CR; `value' in CI
+.c
+.c .Shell_cmd groffer\~--dpi= value \~file
+.c result: the same as the previous example
+.c
+.de Shell_cmd
+. trace:Shell_cmd_base "\*[trace:Shell_cmd.prompt]" \\$@
+..
+.c --------------------------------------------------------------------
+.c .Shell_cmd+ (<CR> [<CI>] ...)
+.c
+.c A continuation line for .Shell_cmd.
+.c
+.de Shell_cmd+
+. trace:Shell_cmd_base "\*[trace:Shell_cmd+.prompt]" \\$@
+..
+.c --------------------------------------------------------------------
+.c .Shell_cmd_base (<prompt> [<CR> [<CI>] ...])
+.c
+.c A shell command line; display args alternating in fonts CR and CI.
+.c Internal, do not use directly.
+.c
+.c Globals: read-only register @.Shell_cmd_width
+.c
+.de trace:Shell_cmd_base
+. if (\\n[.$] <= 0) \
+. return
+. nr @+font \\n[.f]\"
+. ds @prompt \\$1\"
+. ft CR
+. c gap between prompt and command
+. nr @+gap \\n[trace:Shell_cmd_base.prompt_width]-\\w'\\*[@prompt]'\"
+. ds @res \\*[@prompt]\h'\\n[@+gap]u'\"
+. shift
+. ds @cf CR\"
+. while (\\n[.$] > 0) \{\
+. as @res \\f[\\*[@cf]]\\$1\"
+. shift
+. ie '\\*[@cf]'CR' \
+. ds @cf I\"
+. el \
+. ds @cf CR\"
+. \}
+. br
+. ad l
+. nh
+. nf
+. Text \\*[@res]\"
+. fi
+. hy
+. ad
+. br
+. ft \\n[@+font]
+. rr @+font
+. rr @+gap
+. rm @cf
+. rm @res
+..
+.c --------------------------------------------------------------------
+.c .Text (<text>...)
+.c
+.c Treat the arguments as text, no matter how they look.
+.c
+.de Text
+. if (\\n[.$] == 0) \
+. return
+. nop \)\\$*\)
+..
+.c --------------------------------------------------------------------
+.c .Topic ([<indent>])
+.c
+.c A bulleted paragraph.
+.c
+.de Topic
+. ie (\\n[.$] = 0) \
+. .ds @indent 2m\"
+. el \
+. .ds @indent \\$1\"
+. TP \\*[@indent]
+. Text \[bu]
+. rm @indent
+..
+.c --------------------------------------------------------------------
+.c .TP+ ()
+.c
+.c Continuation line for .TP header.
+.c
+.de TP+
+. br
+. ns
+. TP \\$1
+..
+.c --------------------------------------------------------------------
+.de 'char
+. ds @tmp@ `\f(CR\\$1\f[]'
+. shift
+. Text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.c --------------------------------------------------------------------
+.de option
+. ds @tmp@ \f(CB\\$1\f[]
+. shift 1
+. Text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.c --------------------------------------------------------------------
+.de argument
+. ds @tmp@ \f(CI\\$1\f[]
+. shift 1
+. Text \\*[@tmp@]\\$*
+. rm @tmp@
+..
+.c --------------------------------------------------------------------
+.de request
+. ds @tmp@ \f(CB\\$1\f[]
+. shift 1
+. Text .\\*[@tmp@]\\$*
+. rm @tmp@
+..
+.c --------------------------------------------------------------------
+.de escape
+. ds @tmp@ \f[CB]\\$1\f[]
+. shift 1
+. Text \[rs]\\*[@tmp@]\\$*
+. rm @tmp@
+..
+.
+.
+.\" --------------------------------------------------------------------
+.\" SH SYNOPSIS
+.\" --------------------------------------------------------------------
+.
+.B groff -m trace
+.RI [ options\*[Ellipsis] ]
+.RI [ files\*[Ellipsis] ]
+.
+.
+.P
+Elements in brackets denote optional arguments, and the ellipsis means
+that there can be any number of arguments of this kind.
+.
+.
+.\" --------------------------------------------------------------------
+.SH DESCRIPTION
+.\" --------------------------------------------------------------------
+.
+The
+.I trace
+macro package of
+.BR groff (@MAN1EXT@)
+can be a valuable tool for debugging documents written in the roff
+formatting language.
+.
+A call stack trace is protocolled on standard error, that means, a
+diagnostic message is emitted on entering and exiting of a macro call.
+.
+This greatly eases to track down an error in some macro.
+.
+.
+.P
+This tracing process is activated by specifying the groff or troff
+command line option
+.BR "-m\~trace" .
+This works also with the
+.BR groffer (@MAN1EXT@)
+viewer program.
+.
+A finer control can be obtained by including the macro file within the
+document by the groff macro call
+.BR ".mso\~trace.tmac" .
+Only macros that are defined after this line are traced.
+.
+.
+.P
+If some other macro package should be traced as well it must be specified
+after
+.BR "-m\~trace"
+on the command line.
+.
+.
+.P
+The macro file
+.B trace.tmac
+is unusual because it does not contain any macros to be called by a
+user.
+.
+Instead, the existing macro definition and appending facilities are
+modified such that they display diagnostic messages.
+.
+.
+.\" --------------------------------------------------------------------
+.SH EXAMPLES
+.\" --------------------------------------------------------------------
+.
+.P
+In the following examples, a roff fragment is fed into groff via
+standard input.
+.
+As we are only interested in the diagnostic messages (standard error)
+on the terminal, the normal formatted output (standard output) is
+redirected into the nirvana device
+.IR /dev/null .
+The resulting diagnostic messages are displayed directly below the
+corresponding example.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Command line option"
+.
+.P
+.Shell_cmd "echo '."
+.Shell_cmd+ ".de test_macro"
+.Shell_cmd+ ".."
+.Shell_cmd+ ".test_macro"
+.Shell_cmd+ ".test_macro some dummy arguments"
+.Shell_cmd+ "' | groff -m trace >/dev/null"
+.P
+.Example
+*** de trace enter: test_macro
+*** trace exit: test_macro
+*** de trace enter: test_macro "some" "dummy" "arguments"
+*** trace exit: test_macro "some" "dummy" "arguments"
+./Example
+.
+.P
+The entry and the exit of each macro call is displayed on the terminal
+(standard output) \[em] together with the arguments (if any).
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Nested macro calls"
+.
+.P
+.Shell_cmd "echo '."
+.Shell_cmd+ ".de child"
+.Shell_cmd+ ".."
+.Shell_cmd+ ".de parent"
+.Shell_cmd+ ".child"
+.Shell_cmd+ ".."
+.Shell_cmd+ ".parent"
+.Shell_cmd+ "' | groff -m trace >/dev/null"
+.P
+.Example
+*** de trace enter: parent
+*** de trace enter: child
+*** trace exit: child
+*** trace exit: parent
+./Example
+.
+.P
+This shows that macro calls can be nested.
+.
+This powerful feature can help to tack down quite complex call stacks.
+.
+.
+.\" --------------------------------------------------------------------
+.SS "Activating with .mso"
+.
+.Shell_cmd "echo '."
+.Shell_cmd+ ".de before"
+.Shell_cmd+ ..
+.Shell_cmd+ ".mso trace.tmac"
+.Shell_cmd+ ".de after"
+.Shell_cmd+ ..
+.Shell_cmd+ .before
+.Shell_cmd+ .after
+.Shell_cmd+ .before
+.Shell_cmd+ "' | groff >/dev/null"
+.P
+.Example
+*** de trace enter: after
+*** trace exit: after
+./Example
+.
+.P
+Here, the tracing is activated within the document, not by a command
+line option.
+.
+As tracing was not active when macro
+.I before
+was defined, no call of this macro is protocolled; on the other hand,
+the macro
+.I after
+is fully protocolled.
+.
+.
+.\" --------------------------------------------------------------------
+.SH FILES
+.\" --------------------------------------------------------------------
+.
+The
+.I trace
+macros are kept in the file
+.B trace.tmac
+located in the
+.IR "tmac directory" ;
+see
+.BR groff_tmac (@MAN5EXT@)
+for details.
+.
+.
+.\" --------------------------------------------------------------------
+.SH ENVIRONMENT
+.\" --------------------------------------------------------------------
+.
+.TP
+.Env_var $GROFF_TMAC_PATH
+A colon-separated list of additional tmac directories in which to
+search for macro files; see
+.BR groff_tmac (@MAN5EXT@)
+for details.
+.
+.
+.\" --------------------------------------------------------------------
+.SH AUTHOR
+.\" --------------------------------------------------------------------
+.
+Copyright (C) 2002 Free Software Foundation, Inc.
+.
+.P
+This document is distributed under the terms of the FDL (GNU Free
+Documentation License) version 1.1 or later.
+.
+You should have received a copy of the FDL on your system, it is also
+available on-line at the
+.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" .
+.
+.P
+This document is part of
+.IR groff ,
+the GNU roff distribution.
+.
+It was written by
+.MTO bwarken@mayn.de "Bernd Warken".
+.
+.
+.\" --------------------------------------------------------------------
+.SH "SEE ALSO"
+.\" --------------------------------------------------------------------
+.
+.TP
+.BR groff (@MAN1EXT@)
+An overview of the groff system.
+.
+.
+.TP
+.BR troff (@MAN1EXT@)
+For details on option
+.BR -m .
+.
+.
+.TP
+.BR groffer (@MAN1EXT@)
+A viewer program for all kinds of roff documents.
+.
+.
+.TP
+.BR groff_tmac (@MAN5EXT@)
+A general description of groff macro packages.
+.
+.
+.TP
+.BR groff (@MAN7EXT@)
+A short reference for the groff formatting language.
+.
+.
+.P
+A complete reference for all parts of the groff system is found in the
+groff
+.BR info (1)
+file.
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff --git a/contrib/groff/tmac/groff_www.man b/contrib/groff/tmac/groff_www.man
new file mode 100644
index 0000000..d659777
--- /dev/null
+++ b/contrib/groff/tmac/groff_www.man
@@ -0,0 +1,415 @@
+.TH GROFF_WWW @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
+.\" Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+.\" Written by Gaius Mulley (gaius@glam.ac.uk)
+.\"
+.\" This file is part of groff.
+.\"
+.\" groff is free software; you can redistribute it and/or modify it under
+.\" the terms of the GNU General Public License as published by the Free
+.\" Software Foundation; either version 2, or (at your option) any later
+.\" version.
+.\"
+.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY
+.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or
+.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+.\" for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License along
+.\" with groff; see the file COPYING. If not, write to the Free Software
+.\" Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+.\"
+.\" user level guide to using the -mwww macroset
+.\"
+.
+.do mso www.tmac
+.
+.\" we need the .LK here as we use it in the middle as an example --
+.\" once the user requests .LK then the automatic generation of links
+.\" at the top of the document is suppressed.
+.LK
+.
+.
+.SH NAME
+groff_www \- groff macros for authoring web pages
+.HR
+.SH SYNOPSIS
+.B "groff \-mwww"
+[ options ]
+file ...
+.
+.
+.SH DESCRIPTION
+This manual page describes the GNU \-mwww macro package, which is part of
+the groff document formatting system.
+The manual page is very a basic guide, and the html device driver
+.RB ( grohtml )
+has been completely rewritten but still remains as in an alpha state.
+It has been included into the distribution so that a lot of people have a
+chance to test it.
+Note that this macro file will be automatically called (via the
+.B troffrc
+file) if you use
+.BR \-Thtml .
+.PP
+To see the hyperlinks in action, please format this man page with the
+.B grohtml
+device.
+.PP
+Here is a summary of the functions found in this macro set.
+.ta 2iL
+.nf
+\&.HX automatic heading level cut off;
+ $1 point for sections/headers
+\&.BCL specify colours on a web page
+\&.BGIMG specify background image
+\&.URL create a url using two parameters
+\&.FTP create an ftp reference
+\&.MTO create a html email address
+\&.FTP create an ftp reference
+\&.TAG generate an html name
+\&.IMG include an image file
+\&.PIMG include png image
+\&.MPIMG place png on the margin and
+ wrap text around it
+\&.HnS begin heading
+\&.HnE end heading
+\&.LK emit automatically collected links.
+\&.HR produce a horizontal rule
+\&.NHR suppress automatic generation of rules.
+\&.HTL only generate HTML title
+\&.ULS unorder list begin
+\&.ULE unorder list end
+\&.LI insert a list item
+\&.DC generate a drop capital
+\&.HTML pass an html raw request to the
+ device driver
+.fi
+.PP
+Output of the
+.BR pic ,
+.BR eqn ,
+.BR refer ,
+and
+.B tbl
+preprocessors is acceptable as input.
+.
+.
+.SH REQUESTS
+.TP
+.B HX
+Specify the cut off depth when generating links from section headings.
+For example, a parameter of\~2 would cause
+.B grohtml
+to generate a list of links for
+.B .NH\ 1
+and
+.B .NH\ 2
+but not for
+.BR .NH\ 3 .
+Whereas
+.RS
+.IP
+.nf
+.B .HX 0
+.fi
+.RE
+.IP
+will tell
+.B grohtml
+that no heading links should be created at all.
+Another method for turning automatic headings off is by issuing the
+the command line switch
+.B \-P\-l
+to
+.BR groff .
+.
+.TP
+.B BCL
+This macro takes five parameters: foreground, background, active hypertext
+link, hypertext link not yet visited, and visited hypertext link colour.
+.
+.TP
+.B BGIMG
+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.
+The first parameter is the actual URL, the second is the name of the link,
+and the third is optional stuff to be printed immediately afterwards.
+Hyphenation is disabled while printing the actual URL; explicit breakpoints
+should be inserted with the
+.B \[rs]:
+escape.
+Here is how to encode
+.URL http://\:foo.\:org/ "foo" :
+.RS
+.IP
+.B .URL http://\[rs]:foo.\[rs]:org/ "foo" :
+.RE
+.IP
+If this is processed by a device other than
+.B \-Thtml
+it appears as:
+.RS
+.IP
+\m[blue]foo\m[] \[la]\f[C]http://foo.org\f[]\[ra]:
+.RE
+.IP
+The URL macro can be of any type; for example we can reference
+.URL pic.html "Eric Raymond's pic guide"
+by:
+.RS
+.IP
+.B .URL pic.html \[dq]Eric Raymond's pic guide\[dq]
+.RE
+.
+.TP
+.B MTO
+Generate an email html reference.
+The first argument is mandatory as the email address.
+The optional second argument is the text you see in your browser, and
+an optional third argument is stuff printed immediately afterwards.
+Hyphenation is disabled while printing the actual email address.
+For example,
+.MTO joe@user.org "Joe User"
+was achieved by the following macro:
+.RS
+.IP
+.B .MTO joe@user.org \[dq]Joe User\[dq]
+.RE
+.IP
+Note that all the URLs actually are treated as consuming no textual space
+in groff.
+This could be considered as a bug since it causes some problems.
+To circumvent this,
+.B www.tmac
+inserts a zero-width character which expands to a harmless space (only if
+run with
+.BR \-Thtml ).
+.
+.TP
+.B FTP
+indicates that data can be obtained via ftp.
+The first argument is the url and the second is the browser text.
+A third argument, similar to the macros above, is intended for stuff printed
+immediately afterwards.
+The second and the third parameter are optional.
+Hyphenation is disabled while printing the actual URL.
+As an example, here the location of the
+.FTP ftp://\:ftp.gnu.org/ "GNU ftp server" .
+The macro example above was specified by:
+.RS
+.IP
+.B .FTP ftp://\[rs]:ftp.gnu.org/ \[dq]GNU ftp server\[dq] .
+.RE
+.
+.TP
+.B TAG
+Generates an html name tag from its argument.
+This can then be referenced using the
+.URL #URL URL
+macro.
+As you can see, you must precede the tag name with
+.B #
+since it is a local reference.
+This link was achieved via placing a TAG in the URL description above;
+the source looks like this:
+.RS
+.IP
+.nf
+.ft B
+\&.TP
+\&.B URL
+generates
+\&.TAG URL
+a URL using either two or three arguments.
+\&.\|.\|.
+.fi
+.ft P
+.RE
+.
+.TP
+.B IMG
+Include a picture into the document.
+The first argument is the horizontal location: right, left, or center
+.RB ( \-R ,
+.BR \-L ,
+or
+.BR \-C ).
+The second argument is the filename.
+The optional third and fourth arguments are the width and height.
+If the width is absent it defaults to 1\~inch.
+If the height is absent it defaults to the width.
+This maps onto an html img tag.
+If you are including a png image then it is advisable to use the
+.B PIMG
+macro.
+.
+.TP
+.B PIMG
+Include an image in PNG format.
+This macro takes exactly the same parameters as the
+.B IMG
+macro; it has the advantage of working with postscript and html devices
+also since it can automatically convert the image into the EPS format,
+using the following programs
+of the
+.B netpbm
+package:
+.BR pngtopnm ,
+.BR pnmcrop ,
+and
+.BR pnmtops .
+If the document isn't processed with
+.B \-Thtml
+it is necessary to use the
+.B \-U
+option of groff.
+.
+.TP
+.B MPIMG
+Place a PNG image on the margin and wrap text around it.
+The first parameter is the alignment: left or right
+.RB ( \-L
+or
+.BR \-R ).
+The second argument is the filename.
+The optional third and fourth arguments are the width and height.
+If the width is absent it defaults to 1\~inch.
+If the height is absent it defaults to the width.
+.
+.TP
+.B HnS
+Begin heading.
+The heading level is specified by the first parameter.
+Use this macro of your headings contain URLs.
+Example:
+.RS
+.IP
+.nf
+.ft B
+\&.HnS 1
+\&.HR
+GNU Troff
+\&.URL http://groff.ffii.org (Groff)
+\&\(em a
+\&.URL http://www.gnu.org/ GNU
+\&project.
+\&Hosted by
+\&.URL http://ffii.org/ FFII .
+\&.HR
+\&.HnE
+.ft P
+.fi
+.RE
+.
+.TP
+.B HnE
+End heading.
+.
+.TP
+.B LK
+.TAG LK
+Force grohtml to place the automatically generated links at this position.
+If this manual page has been processed with
+.B \-Thtml
+those links can be seen right here.
+.
+.LK
+.
+.
+.SH SECTION HEADING LINKS
+By default
+.B grohtml
+generates links to all section headings and places these at the top of the
+html document. (See
+.URL #LK LINKS
+for details of how to switch this off or alter the position).
+.
+.TP
+.B HR
+Generate a full-width horizontal rule.
+.
+.TP
+.B NHR
+Suppress generation of the top and bottom rules which grohtml emits
+by default.
+.
+.TP
+.B HTL
+Generate an HTML title only.
+This differs from the
+.B TL
+macro of the
+.B ms
+macro package which generates both an HTML title and an H1 heading.
+Use it to provide an HTML title as search engine fodder but a graphic title
+in the document.
+.
+.TP
+.B HTML
+All text after this macro is treated as raw html.
+If the document is processed without
+.B \-Thtml
+then the macro is ignored.
+Internally, this macro is used as a building block for other higher-level
+macros.
+.IP
+For example, the
+.B BGIMG
+macro is defined as
+.RS
+.IP
+.nf
+.ft B
+\&.de BGIMG
+\&. HTML <body background=\[rs]$1>
+\&..
+.ft P
+.fi
+.RE
+.
+.TP
+.B DC
+Produce a drop capital.
+The first parameter is the letter to be dropped and enlarged, the second
+parameter is the ajoining text whose height the first letter should not
+exceed.
+The optional third parameter is the color of the dropped letter.
+.
+.
+.SH LIMITATIONS OF GROHTML
+.LP
+.B tbl
+information is currently rendered as a PNG image.
+.
+.
+.SH FILES
+@MACRODIR@/www.tmac
+.
+.
+.SH "SEE ALSO"
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@)
+.BR grohtml (@MAN1EXT@),
+.BR netpbm (1)
+.
+.
+.SH AUTHOR
+.B grohtml
+was written by
+.MTO gaius@glam.ac.uk "Gaius Mulley"
+.
+.
+.SH BUGS
+Report bugs to the
+.MTO bug-groff@\:gnu.org "Groff Bug Mailing List" .
+Include a complete, self-contained example that will allow the bug to be
+reproduced, and say which version of groff you are using.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
diff --git a/contrib/groff/tmac/html.tmac b/contrib/groff/tmac/html.tmac
index c5591c8..cd30c28 100644
--- a/contrib/groff/tmac/html.tmac
+++ b/contrib/groff/tmac/html.tmac
@@ -2,6 +2,9 @@
.\"
.nr _C \n(.C
.cp 0
+.
+.nroff
+.
.ftr CW CR
.ftr C CR
.ftr CO CI
@@ -10,24 +13,184 @@
.ftr HO HI
.ftr HX HBI
.ftr NX NBI
-.if !c\(em .char \(em --
-.if !c\(en .char \(en \-
-.if !c\(fi .char \(fi fi
-.if !c\(fl .char \(fl fl
-.if !c\(ff .char \(ff ff
-.if !c\(Fi .char \(Fi ffi
-.if !c\(Fl .char \(Fl ffl
-.if !c\(lq .char \(lq ``
-.if !c\(rq .char \(rq ''
-.if !c\(Bq .char \(bq ,,
-.if !c\(OE .char \(OE OE
-.if !c\(oe .char \(oe oe
-.if !c\(lh .char \(lh <-
-.if !c\(rh .char \(rh ->
-.if !c\(bq .tr \(bq,
-.if !c\(aq .tr \(aq'
-.if !\n(_C .mso pspic.tmac
-.cp \n(_C
+.
+.fchar \[fi] fi
+.fchar \[fl] fl
+.fchar \[ff] ff
+.fchar \[Fi] ffi
+.fchar \[Fl] ffl
+.
+.\"
+.\" remove hyphenation
+.\"
+.de hy
+..
+.de nh
+..
+.
+.\" Now set any characters defined in devps/S but not in devhtml/S to nul --
+.\" these are generated by eqn but not used by grohtml. grops generated
+.\" images during the alternative pass.
+.if !c\[*y] .tr \[*y]
+.if !c\[fa] .tr \[fa]
+.if !c\[te] .tr \[te]
+.if !c\[st] .tr \[st]
+.if !c\[=~] .tr \[=~]
+.if !c\[*A] .tr \[*A]
+.if !c\[*B] .tr \[*B]
+.if !c\[*X] .tr \[*X]
+.if !c\[*D] .tr \[*D]
+.if !c\[*E] .tr \[*E]
+.if !c\[*F] .tr \[*F]
+.if !c\[*G] .tr \[*G]
+.if !c\[*Y] .tr \[*Y]
+.if !c\[*I] .tr \[*I]
+.if !c\[+h] .tr \[+h]
+.if !c\[*K] .tr \[*K]
+.if !c\[*L] .tr \[*L]
+.if !c\[*M] .tr \[*M]
+.if !c\[*N] .tr \[*N]
+.if !c\[*O] .tr \[*O]
+.if !c\[*P] .tr \[*P]
+.if !c\[*H] .tr \[*H]
+.if !c\[*R] .tr \[*R]
+.if !c\[*S] .tr \[*S]
+.if !c\[*T] .tr \[*T]
+.if !c\[ts] .tr \[ts]
+.if !c\[*W] .tr \[*W]
+.if !c\[*C] .tr \[*C]
+.if !c\[*Q] .tr \[*Q]
+.if !c\[*Z] .tr \[*Z]
+.if !c\[3d] .tr \[3d]
+.if !c\[tf] .tr \[tf]
+.if !c\[pp] .tr \[pp]
+.if !c\[radicalex] .tr \[radicalex]
+.if !c\[*a] .tr \[*a]
+.if !c\[*b] .tr \[*b]
+.if !c\[*x] .tr \[*x]
+.if !c\[*d] .tr \[*d]
+.if !c\[*e] .tr \[*e]
+.if !c\[*f] .tr \[*f]
+.if !c\[*g] .tr \[*g]
+.if !c\[*y] .tr \[*y]
+.if !c\[*i] .tr \[*i]
+.if !c\[+f] .tr \[+f]
+.if !c\[*k] .tr \[*k]
+.if !c\[*l] .tr \[*l]
+.if !c\[*m] .tr \[*m]
+.if !c\[*n] .tr \[*n]
+.if !c\[*o] .tr \[*o]
+.if !c\[*p] .tr \[*p]
+.if !c\[*h] .tr \[*h]
+.if !c\[*r] .tr \[*r]
+.if !c\[*s] .tr \[*s]
+.if !c\[*t] .tr \[*t]
+.if !c\[*u] .tr \[*u]
+.if !c\[+p] .tr \[+p]
+.if !c\[*w] .tr \[*w]
+.if !c\[*c] .tr \[*c]
+.if !c\[*q] .tr \[*q]
+.if !c\[*z] .tr \[*z]
+.if !c\[ap] .tr \[ap]
+.if !c\[*U] .tr \[*U]
+.if !c\[fm] .tr \[fm]
+.if !c\[<=] .tr \[<=]
+.if !c\[f/] .tr \[f/]
+.if !c\[if] .tr \[if]
+.if !c\[Fn] .tr \[Fn]
+.if !c\[CL] .tr \[CL]
+.if !c\[DI] .tr \[DI]
+.if !c\[HE] .tr \[HE]
+.if !c\[SP] .tr \[SP]
+.if !c\[<>] .tr \[<>]
+.if !c\[<-] .tr \[<-]
+.if !c\[ua] .tr \[ua]
+.\" .if !c\[arrowverttp] .tr \[arrowverttp]
+.if !c\[->] .tr \[->]
+.if !c\[da] .tr \[da]
+.\" .if !c\[arrowvertbt] .tr \[arrowvertbt]
+.if !c\[de] .tr \[de]
+.if !c\[sd] .tr \[sd]
+.if !c\[>=] .tr \[>=]
+.if !c\[pt] .tr \[pt]
+.if !c\[pd] .tr \[pd]
+.if !c\[bu] .tr \[bu]
+.if !c\[di] .tr \[di]
+.if !c\[!=] .tr \[!=]
+.if !c\[==] .tr \[==]
+.if !c\[~~] .tr \[~~]
+.if !c\[~=] .tr \[~=]
+.\" .if !c\[arrowvertex] .tr \[arrowvertex]
+.if !c\[an] .tr \[an]
+.if !c\[CR] .tr \[CR]
+.if !c\[Ah] .tr \[Ah]
+.if !c\[Im] .tr \[Im]
+.if !c\[Re] .tr \[Re]
+.if !c\[wp] .tr \[wp]
+.if !c\[c*] .tr \[c*]
+.if !c\[c+] .tr \[c+]
+.if !c\[es] .tr \[es]
+.if !c\[ca] .tr \[ca]
+.if !c\[cu] .tr \[cu]
+.if !c\[sp] .tr \[sp]
+.if !c\[ip] .tr \[ip]
+.if !c\[nb] .tr \[nb]
+.if !c\[sb] .tr \[sb]
+.if !c\[ib] .tr \[ib]
+.if !c\[mo] .tr \[mo]
+.if !c\[nm] .tr \[nm]
+.if !c\[/_] .tr \[/_]
+.if !c\[gr] .tr \[gr]
+.\" .if !c\[product] .tr \[product]
+.if !c\[sr] .tr \[sr]
+.if !c\[md] .tr \[md]
+.if !c\[no] .tr \[no]
+.if !c\[AN] .tr \[AN]
+.if !c\[OR] .tr \[OR]
+.if !c\[hA] .tr \[hA]
+.if !c\[lA] .tr \[lA]
+.if !c\[uA] .tr \[uA]
+.if !c\[rA] .tr \[rA]
+.if !c\[dA] .tr \[dA]
+.if !c\[lz] .tr \[lz]
+.if !c\[la] .tr \[la]
+.if !c\[sum] .tr \[sum]
+.\" .if !c\[parenlefttp] .tr \[parenlefttp]
+.\" .if !c\[parenleftex] .tr \[parenleftex]
+.\" .if !c\[parenleftbt] .tr \[parenleftbt]
+.\" .if !c\[bracketlefttp] .tr \[bracketlefttp]
+.if !c\[lc] .tr \[lc]
+.\" .if !c\[bracketleftex] .tr \[bracketleftex]
+.\" .if !c\[bracketleftbt] .tr \[bracketleftbt]
+.if !c\[lf] .tr \[lf]
+.\" .if !c\[bracelefttp] .tr \[bracelefttp]
+.if !c\[lt] .tr \[lt]
+.\" .if !c\[braceleftmid] .tr \[braceleftmid]
+.if !c\[lk] .tr \[lk]
+.\" .if !c\[braceleftbt] .tr \[braceleftbt]
+.if !c\[lb] .tr \[lb]
+.\" .if !c\[braceex] .tr \[braceex]
+.\" .if !c\[bracerightex] .tr \[bracerightex]
+.\" .if !c\[braceleftex] .tr \[braceleftex]
+.\" .if !c\[barex] .tr \[barex]
+.if !c\[bv] .tr \[bv]
+.if !c\[ra] .tr \[ra]
+.if !c\[is] .tr \[is]
+.\" .if !c\[parenrighttp] .tr \[parenrighttp]
+.\" .if !c\[parenrightex] .tr \[parenrightex]
+.\" .if !c\[parenrightbt] .tr \[parenrightbt]
+.\" .if !c\[bracketrighttp] .tr \[bracketrighttp]
+.if !c\[rc] .tr \[rc]
+.\" .if !c\[bracketrightex] .tr \[bracketrightex]
+.\" .if !c\[bracketrightbt] .tr \[bracketrightbt]
+.if !c\[rf] .tr \[rf]
+.\" .if !c\[bracerighttp] .tr \[bracerighttp]
+.if !c\[rt] .tr \[rt]
+.\" .if !c\[bracerightmid] .tr \[bracerightmid]
+.if !c\[rk] .tr \[rk]
+.\" .if !c\[bracerightbt] .tr \[bracerightbt]
+.if !c\[rb] .tr \[rb]
+.
.\" now turn off all headers and footers for ms, me and mm macro sets
.if d EF .EF ''''
.if d EH .EH ''''
@@ -38,10 +201,513 @@
.if d oh .oh ''''
.if d eh .eh ''''
.tl ''''
+.
.\" 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]
+.cflags 0 -\[hy]\[em]\[en]\[shc]
+.
.pl 99999
-.\" eof of file, make sure this is the last time
+.
+.\" now for the color definitions
+.\"
+.\" html-4.0 colors
+.\"
+.defcolor white rgb #ffffff
+.defcolor fuchsia rgb #ff00ff
+.
+.\" these colors are compliant with html-3.0 and above
+.defcolor aliceblue rgb #eff7ff
+.defcolor antiquewhite rgb #f9e8d2
+.defcolor antiquewhite1 rgb #feedd6
+.defcolor antiquewhite2 rgb #ebdbc5
+.defcolor antiquewhite3 rgb #c8b9a6
+.defcolor antiquewhite4 rgb #817468
+.defcolor aquamarine rgb #43b7ba
+.defcolor aquamarine1 rgb #87fdce
+.defcolor aquamarine2 rgb #7deabe
+.defcolor aquamarine3 rgb #69c69f
+.defcolor aquamarine4 rgb #417c64
+.defcolor azure rgb #efffff
+.defcolor azure2 rgb #deecec
+.defcolor azure3 rgb #bcc7c7
+.defcolor azure4 rgb #7a7d7d
+.defcolor beige rgb #f5f3d7
+.defcolor bisque rgb #fde0bc
+.defcolor bisque2 rgb #ead0ae
+.defcolor bisque3 rgb #c7af92
+.defcolor bisque4 rgb #816e59
+.defcolor black rgb #000000
+.defcolor blanchedalmond rgb #fee8c6
+.defcolor blue rgb #0000ff
+.defcolor blue1 rgb #1535ff
+.defcolor blue2 rgb #1531ec
+.defcolor blue3 rgb #1528c7
+.defcolor blue4 rgb #151b7e
+.defcolor blueviolet rgb #7931df
+.defcolor brown rgb #980517
+.defcolor brown1 rgb #f63526
+.defcolor brown2 rgb #e42d17
+.defcolor brown3 rgb #c22217
+.defcolor burlywood1 rgb #fcce8e
+.defcolor burlywood2 rgb #eabe83
+.defcolor burlywood3 rgb #c6a06d
+.defcolor burlywood4 rgb #806341
+.defcolor cadetblue rgb #578693
+.defcolor cadetblue1 rgb #99f3ff
+.defcolor cadetblue2 rgb #8ee2ec
+.defcolor cadetblue3 rgb #77bfc7
+.defcolor cadetblue4 rgb #4c787e
+.defcolor chartreuse rgb #8afb17
+.defcolor chartreuse2 rgb #7fe817
+.defcolor chartreuse3 rgb #6cc417
+.defcolor chartreuse4 rgb #437c17
+.defcolor chocolate rgb #c85a17
+.defcolor coral rgb #f76541
+.defcolor coral2 rgb #e55b3c
+.defcolor coral3 rgb #c34a2c
+.defcolor coral4 rgb #7e2817
+.defcolor cornflowerblue rgb #151b8d
+.defcolor cornsilk rgb #fff7d7
+.defcolor cornsilk2 rgb #ece5c6
+.defcolor cornsilk3 rgb #c8c2a7
+.defcolor cornsilk4 rgb #817a68
+.defcolor cyan rgb #00ffff
+.defcolor cyan1 rgb #57feff
+.defcolor cyan2 rgb #50ebec
+.defcolor cyan3 rgb #46c7c7
+.defcolor cyan4 rgb #307d7e
+.defcolor darkgoldenrod rgb #af7817
+.defcolor darkgoldenrod1 rgb #fbb117
+.defcolor darkgoldenrod2 rgb #e8a317
+.defcolor darkgoldenrod3 rgb #c58917
+.defcolor darkgoldenrod4 rgb #7f5217
+.defcolor darkgreen rgb #254117
+.defcolor darkkhaki rgb #b7ad59
+.defcolor darkolivegreen rgb #4a4117
+.defcolor darkolivegreen1 rgb #ccfb5d
+.defcolor darkolivegreen2 rgb #bce954
+.defcolor darkolivegreen3 rgb #a0c544
+.defcolor darkolivegreen4 rgb #667c26
+.defcolor darkorange rgb #f88017
+.defcolor darkorange1 rgb #f87217
+.defcolor darkorange2 rgb #e56717
+.defcolor darkorange3 rgb #c35617
+.defcolor darkorange4 rgb #7e3117
+.defcolor darkorchid rgb #7d1b7e
+.defcolor darkorchid1 rgb #b041ff
+.defcolor darkorchid2 rgb #a23bec
+.defcolor darkorchid3 rgb #8b31c7
+.defcolor darkorchid4 rgb #571b7e
+.defcolor darksalmon rgb #e18b6b
+.defcolor darkseagreen rgb #8bb381
+.defcolor darkseagreen1 rgb #c3fdb8
+.defcolor darkseagreen2 rgb #b5eaaa
+.defcolor darkseagreen3 rgb #99c68e
+.defcolor darkseagreen4 rgb #617c58
+.defcolor darkslateblue rgb #2b3856
+.defcolor darkslategray rgb #25383c
+.defcolor darkslategray1 rgb #9afeff
+.defcolor darkslategray2 rgb #8eebec
+.defcolor darkslategray3 rgb #78c7c7
+.defcolor darkslategray4 rgb #4c7d7e
+.defcolor darkturquoise rgb #3b9c9c
+.defcolor darkviolet rgb #842dce
+.defcolor deeppink rgb #f52887
+.defcolor deeppink2 rgb #e4287c
+.defcolor deeppink3 rgb #c12267
+.defcolor deeppink4 rgb #7d053f
+.defcolor deepskyblue rgb #3bb9ff
+.defcolor deepskyblue2 rgb #38acec
+.defcolor deepskyblue3 rgb #3090c7
+.defcolor deepskyblue4 rgb #25587e
+.defcolor dimgray rgb #463e41
+.defcolor dodgerblue rgb #1589ff
+.defcolor dodgerblue2 rgb #157dec
+.defcolor dodgerblue3 rgb #1569c7
+.defcolor dodgerblue4 rgb #153e7e
+.defcolor firebrick rgb #800517
+.defcolor firebrick1 rgb #f62817
+.defcolor firebrick2 rgb #e42217
+.defcolor firebrick3 rgb #c11b17
+.defcolor floralwhite rgb #fff9ee
+.defcolor forestgreen rgb #4e9258
+.defcolor gainsboro rgb #d8d9d7
+.defcolor ghostwhite rgb #f7f7ff
+.defcolor gold rgb #d4a017
+.defcolor gold1 rgb #fdd017
+.defcolor gold2 rgb #eac117
+.defcolor gold3 rgb #c7a317
+.defcolor gold4 rgb #806517
+.defcolor goldenrod rgb #edda74
+.defcolor goldenrod1 rgb #fbb917
+.defcolor goldenrod2 rgb #e9ab17
+.defcolor goldenrod3 rgb #c68e17
+.defcolor goldenrod4 rgb #805817
+.defcolor gray rgb #736f6e
+.defcolor gray0 rgb #150517
+.defcolor gray100 rgb #ffffff
+.defcolor gray18 rgb #250517
+.defcolor gray21 rgb #2b1b17
+.defcolor gray23 rgb #302217
+.defcolor gray24 rgb #302226
+.defcolor gray25 rgb #342826
+.defcolor gray26 rgb #34282c
+.defcolor gray27 rgb #382d2c
+.defcolor gray28 rgb #3b3131
+.defcolor gray29 rgb #3e3535
+.defcolor gray30 rgb #413839
+.defcolor gray31 rgb #41383c
+.defcolor gray32 rgb #463e3f
+.defcolor gray34 rgb #4a4344
+.defcolor gray35 rgb #4c4646
+.defcolor gray36 rgb #4e4848
+.defcolor gray37 rgb #504a4b
+.defcolor gray38 rgb #544e4f
+.defcolor gray39 rgb #565051
+.defcolor gray40 rgb #595454
+.defcolor gray41 rgb #5c5858
+.defcolor gray42 rgb #5f5a59
+.defcolor gray43 rgb #625d5d
+.defcolor gray44 rgb #646060
+.defcolor gray45 rgb #666362
+.defcolor gray46 rgb #696565
+.defcolor gray47 rgb #6d6968
+.defcolor gray48 rgb #6e6a6b
+.defcolor gray49 rgb #726e6d
+.defcolor gray50 rgb #747170
+.defcolor gray51 rgb #787473
+.defcolor gray52 rgb #7a7777
+.defcolor gray53 rgb #7c7979
+.defcolor gray54 rgb #807d7c
+.defcolor gray55 rgb #82807e
+.defcolor gray56 rgb #858381
+.defcolor gray57 rgb #878583
+.defcolor gray58 rgb #8b8987
+.defcolor gray59 rgb #8d8b89
+.defcolor gray60 rgb #8f8e8d
+.defcolor gray61 rgb #939190
+.defcolor gray62 rgb #959492
+.defcolor gray63 rgb #999795
+.defcolor gray64 rgb #9a9998
+.defcolor gray65 rgb #9e9c9b
+.defcolor gray66 rgb #a09f9d
+.defcolor gray67 rgb #a3a2a0
+.defcolor gray68 rgb #a5a4a3
+.defcolor gray69 rgb #a9a8a6
+.defcolor gray70 rgb #acaba9
+.defcolor gray71 rgb #aeadac
+.defcolor gray72 rgb #b1b1af
+.defcolor gray73 rgb #b3b3b1
+.defcolor gray74 rgb #b7b6b4
+.defcolor gray75 rgb #b9b8b6
+.defcolor gray76 rgb #bcbbba
+.defcolor gray77 rgb #bebebc
+.defcolor gray78 rgb #c1c1bf
+.defcolor gray79 rgb #c3c4c2
+.defcolor gray80 rgb #c7c7c5
+.defcolor gray81 rgb #cacac9
+.defcolor gray82 rgb #cccccb
+.defcolor gray83 rgb #d0cfcf
+.defcolor gray84 rgb #d2d2d1
+.defcolor gray85 rgb #d5d5d4
+.defcolor gray86 rgb #d7d7d7
+.defcolor gray87 rgb #dbdbd9
+.defcolor gray88 rgb #dddddc
+.defcolor gray89 rgb #e0e0e0
+.defcolor gray90 rgb #e2e3e1
+.defcolor gray91 rgb #e5e6e4
+.defcolor gray92 rgb #e8e9e8
+.defcolor gray93 rgb #ebebea
+.defcolor gray94 rgb #eeeeee
+.defcolor gray95 rgb #f0f1f0
+.defcolor gray96 rgb #f4f4f3
+.defcolor gray97 rgb #f6f6f5
+.defcolor gray98 rgb #f9f9fa
+.defcolor gray99 rgb #fbfbfb
+.defcolor green rgb #00ff00
+.defcolor green1 rgb #5ffb17
+.defcolor green2 rgb #59e817
+.defcolor green3 rgb #4cc417
+.defcolor green4 rgb #347c17
+.defcolor greenyellow rgb #b1fb17
+.defcolor honeydew rgb #f0feee
+.defcolor honeydew2 rgb #deebdc
+.defcolor honeydew3 rgb #bcc7b9
+.defcolor honeydew4 rgb #7a7d74
+.defcolor hotpink rgb #f660ab
+.defcolor hotpink1 rgb #f665ab
+.defcolor hotpink2 rgb #e45e9d
+.defcolor hotpink3 rgb #c25283
+.defcolor hotpink4 rgb #7d2252
+.defcolor indianred rgb #5e2217
+.defcolor indianred1 rgb #f75d59
+.defcolor indianred2 rgb #e55451
+.defcolor indianred3 rgb #c24641
+.defcolor indianred4 rgb #7e2217
+.defcolor ivory rgb #ffffee
+.defcolor ivory2 rgb #ececdc
+.defcolor ivory3 rgb #c9c7b9
+.defcolor ivory4 rgb #817d74
+.defcolor khaki rgb #ada96e
+.defcolor khaki1 rgb #fff380
+.defcolor khaki2 rgb #ede275
+.defcolor khaki3 rgb #c9be62
+.defcolor khaki4 rgb #827839
+.defcolor lavender rgb #e3e4fa
+.defcolor lavenderblush rgb #fdeef4
+.defcolor lavenderblush2 rgb #ebdde2
+.defcolor lavenderblush3 rgb #c8bbbe
+.defcolor lavenderblush4 rgb #817679
+.defcolor lawngreen rgb #87f717
+.defcolor lemonchiffon rgb #fff8c6
+.defcolor lemonchiffon2 rgb #ece5b6
+.defcolor lemonchiffon3 rgb #c9c299
+.defcolor lemonchiffon4 rgb #827b60
+.defcolor lightblue rgb #addfff
+.defcolor lightblue1 rgb #bdedff
+.defcolor lightblue2 rgb #afdcec
+.defcolor lightblue3 rgb #95b9c7
+.defcolor lightblue4 rgb #5e767e
+.defcolor lightcoral rgb #e77471
+.defcolor lightcyan rgb #e0ffff
+.defcolor lightcyan2 rgb #cfecec
+.defcolor lightcyan3 rgb #afc7c7
+.defcolor lightcyan4 rgb #717d7d
+.defcolor lightgoldenrod rgb #ecd872
+.defcolor lightgoldenrod1 rgb #ffe87c
+.defcolor lightgoldenrod2 rgb #ecd672
+.defcolor lightgoldenrod3 rgb #c8b560
+.defcolor lightgoldenrod4 rgb #817339
+.defcolor lightgoldenrodyellow rgb #faf8cc
+.defcolor lightpink rgb #faafba
+.defcolor lightpink1 rgb #f9a7b0
+.defcolor lightpink2 rgb #e799a3
+.defcolor lightpink3 rgb #c48189
+.defcolor lightpink4 rgb #7f4e52
+.defcolor lightsalmon rgb #f9966b
+.defcolor lightsalmon2 rgb #e78a61
+.defcolor lightsalmon3 rgb #c47451
+.defcolor lightsalmon4 rgb #7f462c
+.defcolor lightseagreen rgb #3ea99f
+.defcolor lightskyblue rgb #82cafa
+.defcolor lightskyblue2 rgb #a0cfec
+.defcolor lightskyblue3 rgb #87afc7
+.defcolor lightskyblue4 rgb #566d7e
+.defcolor lightslateblue rgb #736aff
+.defcolor lightslategray rgb #6d7b8d
+.defcolor lightsteelblue rgb #728fce
+.defcolor lightsteelblue1 rgb #c6deff
+.defcolor lightsteelblue2 rgb #b7ceec
+.defcolor lightsteelblue3 rgb #9aadc7
+.defcolor lightsteelblue4 rgb #646d7e
+.defcolor lightyellow rgb #fffedc
+.defcolor lightyellow2 rgb #edebcb
+.defcolor lightyellow3 rgb #c9c7aa
+.defcolor lightyellow4 rgb #827d6b
+.defcolor limegreen rgb #41a317
+.defcolor linen rgb #f9eee2
+.defcolor magenta rgb #ff00ff
+.defcolor magenta1 rgb #f43eff
+.defcolor magenta2 rgb #e238ec
+.defcolor magenta3 rgb #c031c7
+.defcolor maroon rgb #810541
+.defcolor maroon1 rgb #f535aa
+.defcolor maroon2 rgb #e3319d
+.defcolor maroon3 rgb #c12283
+.defcolor maroon4 rgb #7d0552
+.defcolor mediumaquamarine rgb #348781
+.defcolor mediumblue rgb #152dc6
+.defcolor mediumforestgreen rgb #347235
+.defcolor mediumgoldenrod rgb #ccb954
+.defcolor mediumorchid rgb #b048b5
+.defcolor mediumorchid1 rgb #d462ff
+.defcolor mediumorchid2 rgb #c45aec
+.defcolor mediumorchid3 rgb #a74ac7
+.defcolor mediumorchid4 rgb #6a287e
+.defcolor mediumpurple rgb #8467d7
+.defcolor mediumpurple1 rgb #9e7bff
+.defcolor mediumpurple2 rgb #9172ec
+.defcolor mediumpurple3 rgb #7a5dc7
+.defcolor mediumpurple4 rgb #4e387e
+.defcolor mediumseagreen rgb #306754
+.defcolor mediumslateblue rgb #5e5a80
+.defcolor mediumspringgreen rgb #348017
+.defcolor mediumturquoise rgb #48cccd
+.defcolor mediumvioletred rgb #ca226b
+.defcolor midnightblue rgb #151b54
+.defcolor mintcream rgb #f5fff9
+.defcolor mistyrose rgb #fde1dd
+.defcolor mistyrose2 rgb #ead0cc
+.defcolor mistyrose3 rgb #c6afac
+.defcolor mistyrose4 rgb #806f6c
+.defcolor moccasin rgb #fde0ac
+.defcolor navajowhite rgb #fddaa3
+.defcolor navajowhite2 rgb #eac995
+.defcolor navajowhite3 rgb #c7aa7d
+.defcolor navajowhite4 rgb #806a4b
+.defcolor navy rgb #150567
+.defcolor oldlace rgb #fcf3e2
+.defcolor olivedrab rgb #658017
+.defcolor olivedrab1 rgb #c3fb17
+.defcolor olivedrab2 rgb #b5e917
+.defcolor olivedrab3 rgb #99c517
+.defcolor olivedrab4 rgb #617c17
+.defcolor orange rgb #f87a17
+.defcolor orange1 rgb #fa9b17
+.defcolor orange2 rgb #e78e17
+.defcolor orange3 rgb #c57717
+.defcolor orange4 rgb #7f4817
+.defcolor orangered rgb #f63817
+.defcolor orangered2 rgb #e43117
+.defcolor orangered3 rgb #c22817
+.defcolor orangered4 rgb #7e0517
+.defcolor orchid rgb #e57ded
+.defcolor orchid1 rgb #f67dfa
+.defcolor orchid2 rgb #e473e7
+.defcolor orchid3 rgb #c160c3
+.defcolor orchid4 rgb #7d387c
+.defcolor palegoldenrod rgb #ede49e
+.defcolor palegreen rgb #79d867
+.defcolor palegreen1 rgb #a0fc8d
+.defcolor palegreen2 rgb #94e981
+.defcolor palegreen3 rgb #7dc56c
+.defcolor palegreen4 rgb #4e7c41
+.defcolor paleturquoise rgb #aeebec
+.defcolor paleturquoise1 rgb #bcfeff
+.defcolor paleturquoise2 rgb #adebec
+.defcolor paleturquoise3 rgb #92c7c7
+.defcolor paleturquoise4 rgb #5e7d7e
+.defcolor palevioletred rgb #d16587
+.defcolor palevioletred1 rgb #f778a1
+.defcolor palevioletred2 rgb #e56e94
+.defcolor palevioletred3 rgb #c25a7c
+.defcolor palevioletred4 rgb #7e354d
+.defcolor papayawhip rgb #feeccf
+.defcolor peachpuff rgb #fcd5b0
+.defcolor peachpuff2 rgb #eac5a3
+.defcolor peachpuff3 rgb #c6a688
+.defcolor peachpuff4 rgb #806752
+.defcolor peru rgb #c57726
+.defcolor pink rgb #faafbe
+.defcolor pink2 rgb #e7a1b0
+.defcolor pink3 rgb #c48793
+.defcolor pink4 rgb #7f525d
+.defcolor plum rgb #b93b8f
+.defcolor plum1 rgb #f9b7ff
+.defcolor plum2 rgb #e6a9ec
+.defcolor plum3 rgb #c38ec7
+.defcolor plum4 rgb #7e587e
+.defcolor powderblue rgb #addce3
+.defcolor purple rgb #8e35ef
+.defcolor purple1 rgb #893bff
+.defcolor purple2 rgb #7f38ec
+.defcolor purple3 rgb #6c2dc7
+.defcolor purple4 rgb #461b7e
+.defcolor red rgb #ff0000
+.defcolor red1 rgb #f62217
+.defcolor red2 rgb #e41b17
+.defcolor rosybrown rgb #b38481
+.defcolor rosybrown1 rgb #fbbbb9
+.defcolor rosybrown2 rgb #e8adaa
+.defcolor rosybrown3 rgb #c5908e
+.defcolor rosybrown4 rgb #7f5a58
+.defcolor royalblue rgb #2b60de
+.defcolor royalblue1 rgb #306eff
+.defcolor royalblue2 rgb #2b65ec
+.defcolor royalblue3 rgb #2554c7
+.defcolor royalblue4 rgb #15317e
+.defcolor salmon1 rgb #f88158
+.defcolor salmon2 rgb #e67451
+.defcolor salmon3 rgb #c36241
+.defcolor salmon4 rgb #7e3817
+.defcolor sandybrown rgb #ee9a4d
+.defcolor seagreen rgb #4e8975
+.defcolor seagreen1 rgb #6afb92
+.defcolor seagreen2 rgb #64e986
+.defcolor seagreen3 rgb #54c571
+.defcolor seagreen4 rgb #387c44
+.defcolor seashell rgb #fef3eb
+.defcolor seashell2 rgb #ebe2d9
+.defcolor seashell3 rgb #c8bfb6
+.defcolor seashell4 rgb #817873
+.defcolor sienna rgb #8a4117
+.defcolor sienna1 rgb #f87431
+.defcolor sienna2 rgb #e66c2c
+.defcolor sienna3 rgb #c35817
+.defcolor sienna4 rgb #7e3517
+.defcolor skyblue rgb #6698ff
+.defcolor skyblue1 rgb #82caff
+.defcolor skyblue2 rgb #79baec
+.defcolor skyblue3 rgb #659ec7
+.defcolor skyblue4 rgb #41627e
+.defcolor slateblue rgb #737ca1
+.defcolor slateblue1 rgb #7369ff
+.defcolor slateblue2 rgb #6960ec
+.defcolor slateblue3 rgb #574ec7
+.defcolor slateblue4 rgb #342d7e
+.defcolor slategray rgb #657383
+.defcolor slategray1 rgb #c2dfff
+.defcolor slategray2 rgb #b4cfec
+.defcolor slategray3 rgb #98afc7
+.defcolor slategray4 rgb #616d7e
+.defcolor snow rgb #fff9fa
+.defcolor snow2 rgb #ece7e6
+.defcolor snow3 rgb #c8c4c2
+.defcolor snow4 rgb #817c7b
+.defcolor springgreen rgb #4aa02c
+.defcolor springgreen1 rgb #5efb6e
+.defcolor springgreen2 rgb #57e964
+.defcolor springgreen3 rgb #4cc552
+.defcolor springgreen4 rgb #347c2c
+.defcolor steelblue rgb #4863a0
+.defcolor steelblue1 rgb #5cb3ff
+.defcolor steelblue2 rgb #56a5ec
+.defcolor steelblue3 rgb #488ac7
+.defcolor steelblue4 rgb #2b547e
+.defcolor tan rgb #d8af79
+.defcolor tan1 rgb #fa9b3c
+.defcolor tan2 rgb #e78e35
+.defcolor thistle rgb #d2b9d3
+.defcolor thistle1 rgb #fcdfff
+.defcolor thistle2 rgb #e9cfec
+.defcolor thistle3 rgb #c6aec7
+.defcolor thistle4 rgb #806d7e
+.defcolor tomato rgb #f75431
+.defcolor tomato2 rgb #e54c2c
+.defcolor tomato3 rgb #c23e17
+.defcolor turquoise rgb #43c6db
+.defcolor turquoise1 rgb #52f3ff
+.defcolor turquoise2 rgb #4ee2ec
+.defcolor turquoise3 rgb #43bfc7
+.defcolor turquoise4 rgb #30787e
+.defcolor violet rgb #8d38c9
+.defcolor violetred rgb #e9358a
+.defcolor violetred1 rgb #f6358a
+.defcolor violetred2 rgb #e4317f
+.defcolor violetred3 rgb #c12869
+.defcolor violetred4 rgb #7d0541
+.defcolor wheat rgb #f3daa9
+.defcolor wheat1 rgb #fee4b1
+.defcolor wheat2 rgb #ebd3a3
+.defcolor wheat3 rgb #c8b189
+.defcolor wheat4 rgb #816f54
+.defcolor yellow rgb #ffff00
+.defcolor yellow1 rgb #fffc17
+.defcolor yellowgreen rgb #52d017
+.
+.cp \n(_C
+.
+.if !\n(_C \
+. mso pspic.tmac
+.
+.do ie '\[char97]'a' \
+. do mso latin1.tmac
+.el \
+. do mso cp1047.tmac
+.
+.\" tell grohtml the page offset
+.po
+.\" end of file, make sure this is the last line
diff --git a/contrib/groff/tmac/hyphen.us b/contrib/groff/tmac/hyphen.us
index d86c3d5..26a4332 100644
--- a/contrib/groff/tmac/hyphen.us
+++ b/contrib/groff/tmac/hyphen.us
@@ -1,5 +1,5 @@
-% Hyphenation patterns for US English.
-% These are the standard Plain TeX hyphenation patterns (in hyphen.tex).
+% The Plain TeX hyphenation tables [NOT TO BE CHANGED IN ANY WAY!]
+\patterns{ % just type <return> if you're not using INITEX
.ach4
.ad4der
.af1t
@@ -4447,3 +4447,20 @@ zo5ol
zte4
4z1z2
z4zy
+}
+\hyphenation{ % Do NOT make any alterations to this list! --- DEK
+as-so-ciate
+as-so-ciates
+dec-li-na-tion
+oblig-a-tory
+phil-an-thropic
+present
+presents
+project
+projects
+reci-procity
+re-cog-ni-zance
+ref-or-ma-tion
+ret-ri-bu-tion
+ta-ble
+}
diff --git a/contrib/groff/tmac/latin1.tmac b/contrib/groff/tmac/latin1.tmac
index 9cc15cc..01cb561 100644
--- a/contrib/groff/tmac/latin1.tmac
+++ b/contrib/groff/tmac/latin1.tmac
@@ -3,101 +3,103 @@
.nr _C \n(.C
.cp 0
.de latin1-tr
-.if c\\$2 .if !c\\$1 .tr \\$1\\$2
+. if c\\$2 .if !c\\$1 .trin \\$1\\$2
..
-.latin1-tr \[char161] \(r!
-.latin1-tr \[char162] \(ct
-.latin1-tr \[char163] \(Po
-.latin1-tr \[char164] \(Cs
-.latin1-tr \[char165] \(Ye
-.latin1-tr \[char166] \(bb
-.latin1-tr \[char167] \(sc
-.latin1-tr \[char168] \(ad
-.latin1-tr \[char169] \(co
-.latin1-tr \[char170] \(Of
-.latin1-tr \[char171] \(Fo
-.latin1-tr \[char172] \(no
-.latin1-tr \[char173] \[shc]
-.latin1-tr \[char174] \(rg
-.latin1-tr \[char175] \(a-
-.latin1-tr \[char176] \(de
-.latin1-tr \[char177] \(+-
-.latin1-tr \[char178] \(S2
-.latin1-tr \[char179] \(S3
-.latin1-tr \[char180] \(aa
-.latin1-tr \[char181] \(*m
-.latin1-tr \[char182] \(ps
-.latin1-tr \[char183] \(pc
-.latin1-tr \[char184] \(ac
-.latin1-tr \[char185] \(S1
-.latin1-tr \[char186] \(Om
-.latin1-tr \[char187] \(Fc
-.latin1-tr \[char188] \(14
-.latin1-tr \[char189] \(12
-.latin1-tr \[char190] \(34
-.latin1-tr \[char191] \(r?
-.latin1-tr \[char192] \(`A
-.latin1-tr \[char193] \('A
-.latin1-tr \[char194] \(^A
-.latin1-tr \[char195] \(~A
-.latin1-tr \[char196] \(:A
-.latin1-tr \[char197] \(oA
-.latin1-tr \[char198] \(AE
-.latin1-tr \[char199] \(,C
-.latin1-tr \[char200] \(`E
-.latin1-tr \[char201] \('E
-.latin1-tr \[char202] \(^E
-.latin1-tr \[char203] \(:E
-.latin1-tr \[char204] \(`I
-.latin1-tr \[char205] \('I
-.latin1-tr \[char206] \(^I
-.latin1-tr \[char207] \(:I
-.latin1-tr \[char208] \(-D
-.latin1-tr \[char209] \(~N
-.latin1-tr \[char210] \(`O
-.latin1-tr \[char211] \('O
-.latin1-tr \[char212] \(^O
-.latin1-tr \[char213] \(~O
-.latin1-tr \[char214] \(:O
-.latin1-tr \[char215] \(mu
-.latin1-tr \[char216] \(/O
-.latin1-tr \[char217] \(`U
-.latin1-tr \[char218] \('U
-.latin1-tr \[char219] \(^U
-.latin1-tr \[char220] \(:U
-.latin1-tr \[char221] \('Y
-.latin1-tr \[char222] \(TP
-.latin1-tr \[char223] \(ss
-.latin1-tr \[char224] \(`a
-.latin1-tr \[char225] \('a
-.latin1-tr \[char226] \(^a
-.latin1-tr \[char227] \(~a
-.latin1-tr \[char228] \(:a
-.latin1-tr \[char229] \(oa
-.latin1-tr \[char230] \(ae
-.latin1-tr \[char231] \(,c
-.latin1-tr \[char232] \(`e
-.latin1-tr \[char233] \('e
-.latin1-tr \[char234] \(^e
-.latin1-tr \[char235] \(:e
-.latin1-tr \[char236] \(`i
-.latin1-tr \[char237] \('i
-.latin1-tr \[char238] \(^i
-.latin1-tr \[char239] \(:i
-.latin1-tr \[char240] \(Sd
-.latin1-tr \[char241] \(~n
-.latin1-tr \[char242] \(`o
-.latin1-tr \[char243] \('o
-.latin1-tr \[char244] \(^o
-.latin1-tr \[char245] \(~o
-.latin1-tr \[char246] \(:o
-.latin1-tr \[char247] \(di
-.latin1-tr \[char248] \(/o
-.latin1-tr \[char249] \(`u
-.latin1-tr \[char250] \('u
-.latin1-tr \[char251] \(^u
-.latin1-tr \[char252] \(:u
-.latin1-tr \[char253] \('y
-.latin1-tr \[char254] \(Tp
-.latin1-tr \[char255] \(:y
-.cp \n(_C
+.
+.latin1-tr \[char161] \[r!]
+.latin1-tr \[char162] \[ct]
+.latin1-tr \[char163] \[Po]
+.latin1-tr \[char164] \[Cs]
+.latin1-tr \[char165] \[Ye]
+.latin1-tr \[char166] \[bb]
+.latin1-tr \[char167] \[sc]
+.latin1-tr \[char168] \[ad]
+.latin1-tr \[char169] \[co]
+.latin1-tr \[char170] \[Of]
+.latin1-tr \[char171] \[Fo]
+.latin1-tr \[char172] \[no]
+.\" The soft-hyphen character is only an input character
+.tr \[char173]\%
+.latin1-tr \[char174] \[rg]
+.latin1-tr \[char175] \[a-]
+.latin1-tr \[char176] \[de]
+.latin1-tr \[char177] \[t+-]
+.latin1-tr \[char178] \[S2]
+.latin1-tr \[char179] \[S3]
+.latin1-tr \[char180] \[aa]
+.latin1-tr \[char181] \[mc]
+.latin1-tr \[char182] \[ps]
+.latin1-tr \[char183] \[pc]
+.latin1-tr \[char184] \[ac]
+.latin1-tr \[char185] \[S1]
+.latin1-tr \[char186] \[Om]
+.latin1-tr \[char187] \[Fc]
+.latin1-tr \[char188] \[14]
+.latin1-tr \[char189] \[12]
+.latin1-tr \[char190] \[34]
+.latin1-tr \[char191] \[r?]
+.latin1-tr \[char192] \[`A]
+.latin1-tr \[char193] \['A]
+.latin1-tr \[char194] \[^A]
+.latin1-tr \[char195] \[~A]
+.latin1-tr \[char196] \[:A]
+.latin1-tr \[char197] \[oA]
+.latin1-tr \[char198] \[AE]
+.latin1-tr \[char199] \[,C]
+.latin1-tr \[char200] \[`E]
+.latin1-tr \[char201] \['E]
+.latin1-tr \[char202] \[^E]
+.latin1-tr \[char203] \[:E]
+.latin1-tr \[char204] \[`I]
+.latin1-tr \[char205] \['I]
+.latin1-tr \[char206] \[^I]
+.latin1-tr \[char207] \[:I]
+.latin1-tr \[char208] \[-D]
+.latin1-tr \[char209] \[~N]
+.latin1-tr \[char210] \[`O]
+.latin1-tr \[char211] \['O]
+.latin1-tr \[char212] \[^O]
+.latin1-tr \[char213] \[~O]
+.latin1-tr \[char214] \[:O]
+.latin1-tr \[char215] \[tmu]
+.latin1-tr \[char216] \[/O]
+.latin1-tr \[char217] \[`U]
+.latin1-tr \[char218] \['U]
+.latin1-tr \[char219] \[^U]
+.latin1-tr \[char220] \[:U]
+.latin1-tr \[char221] \['Y]
+.latin1-tr \[char222] \[TP]
+.latin1-tr \[char223] \[ss]
+.latin1-tr \[char224] \[`a]
+.latin1-tr \[char225] \['a]
+.latin1-tr \[char226] \[^a]
+.latin1-tr \[char227] \[~a]
+.latin1-tr \[char228] \[:a]
+.latin1-tr \[char229] \[oa]
+.latin1-tr \[char230] \[ae]
+.latin1-tr \[char231] \[,c]
+.latin1-tr \[char232] \[`e]
+.latin1-tr \[char233] \['e]
+.latin1-tr \[char234] \[^e]
+.latin1-tr \[char235] \[:e]
+.latin1-tr \[char236] \[`i]
+.latin1-tr \[char237] \['i]
+.latin1-tr \[char238] \[^i]
+.latin1-tr \[char239] \[:i]
+.latin1-tr \[char240] \[Sd]
+.latin1-tr \[char241] \[~n]
+.latin1-tr \[char242] \[`o]
+.latin1-tr \[char243] \['o]
+.latin1-tr \[char244] \[^o]
+.latin1-tr \[char245] \[~o]
+.latin1-tr \[char246] \[:o]
+.latin1-tr \[char247] \[tdi]
+.latin1-tr \[char248] \[/o]
+.latin1-tr \[char249] \[`u]
+.latin1-tr \[char250] \['u]
+.latin1-tr \[char251] \[^u]
+.latin1-tr \[char252] \[:u]
+.latin1-tr \[char253] \['y]
+.latin1-tr \[char254] \[Tp]
+.latin1-tr \[char255] \[:y]
+.cp \n[_C]
diff --git a/contrib/groff/tmac/lbp.tmac b/contrib/groff/tmac/lbp.tmac
index 0d17b63..e764122 100644
--- a/contrib/groff/tmac/lbp.tmac
+++ b/contrib/groff/tmac/lbp.tmac
@@ -12,4 +12,8 @@
.ftr Hi HNI
.ftr Hb HNB
.ftr Hx HNBI
+.ftr EBI EI
+.ftr CBI CI
.cp \n(_C
+.
+.do mso latin1.tmac
diff --git a/contrib/groff/tmac/lj4.tmac b/contrib/groff/tmac/lj4.tmac
index b5644e4..524e935 100644
--- a/contrib/groff/tmac/lj4.tmac
+++ b/contrib/groff/tmac/lj4.tmac
@@ -2,6 +2,7 @@
.\"
.nr _C \n(.C
.cp 0
+.
.ftr CW CR
.ftr C CR
.ftr CX CBI
@@ -12,9 +13,13 @@
.ftr HI UI
.ftr HO UI
.ftr HX UBI
-.\" This is designed so that \(ul, \(rn and \(br form corners.
-.if !c\[br] .char \[br] \Z'\v'.25m'\D'R .04m -1m''
-.if !c\[ru] .char \[ru] \Z'\v'-.02m'\D'R .54m .04m''\h'.5m'
-.if !c\[rn] .char \[rn] \Z'\v'-.77m'\D'R .54m .04m''\h'.5m'
-.if !c\[ul] .char \[ul] \Z'\v'.23m'\D'R .54m .04m''\h'.5m'
-.cp \n(_C
+.
+.\" This is designed so that \[ul], \[rn], and \[br] form corners.
+.fchar \[br] \Z'\v'.25m'\D'R .04m -1m''
+.fchar \[ru] \Z'\v'-.02m'\D'R .54m .04m''\h'.5m'
+.fchar \[rn] \Z'\v'-.77m'\D'R .54m .04m''\h'.5m'
+.fchar \[ul] \Z'\v'.23m'\D'R .54m .04m''\h'.5m'
+.
+.cp \n[_C]
+.
+.do mso latin1.tmac
diff --git a/contrib/groff/tmac/ps.tmac b/contrib/groff/tmac/ps.tmac
index 1aeacfd..01868ce 100644
--- a/contrib/groff/tmac/ps.tmac
+++ b/contrib/groff/tmac/ps.tmac
@@ -2,6 +2,7 @@
.\"
.nr _C \n(.C
.cp 0
+.
.ftr AX ABI
.ftr KR BMR
.ftr KI BMI
@@ -22,33 +23,593 @@
.ftr PX PBI
.ftr ZI ZCMI
.ftr C CR
-.cflags 8 \(an
-.char \[radicalex] \h'-\w'\(sr'u'\[radicalex]\h'\w'\(sr'u'
-.char \(mo \h'.08m'\(mo\h'-.08m'
-.char \(nm \h'.08m'\(nm\h'-.08m'
+.
+.cflags 8 \[an]
+.char \[radicalex] \h'-\w'\[sr]'u'\[radicalex]\h'\w'\[sr]'u'
+.char \[mo] \h'.08m'\[mo]\h'-.08m'
+.char \[nm] \h'.08m'\[nm]\h'-.08m'
.char \[parenlefttp] \[parenlefttp]\h'.016m'
.char \[parenleftbt] \[parenleftbt]\h'.016m'
.char \[parenleftex] \[parenleftex]\h'.016m'
.char \[parenrighttp] \[parenrighttp]\h'.016m'
.char \[parenrightbt] \[parenrightbt]\h'.016m'
.char \[parenrightex] \[parenrightex]\h'.016m'
-.if !c\[va] .char \[va] \o'\[ua]\[da]'
-.if !c\[ci] \
-.char \[ci] \v'-.25m'\h'.05m'\D'c .5m'\h'.05m'\v'.25m'
-.if !c\[sq] \
-.char \[sq] \h'.05m'\D'l .5m 0'\D'l 0 -.5m'\D'l -.5m 0'\D'l 0 .5m'\h'.55m'
-.if !c\[ru] .char \[ru] \D'l .5m 0'
-.if !c\[ul] .char \[ul] \v'.25m'\D'l .5m 0'\v'-.25m'
-.if !c\[br] .char \[br] \Z'\v'.25m'\D'l 0 -1m''
-.if !c\[rn] .char \[rn] \v'-.75m'\D'l .5m 0'\v'.75m'
-.if !c\[or] .char \[or] \h'.1m'\Z'\D'l 0 -.675m''\h'.1m'
-.if !c\[Fi] .char \[Fi] ffi
-.if !c\[Fl] .char \[Fl] ffl
-.if !c\[ff] .char \[ff] ff
-.if !c\[ij] .char \[ij] ij
-.if !c\[IJ] .char \[IJ] IJ
-.if !c\[tm] .char \[tm] \s-3\v'-.3m'TM\v'+.3m'\s+3
+.
+.fchar \[va] \o'\[ua]\[da]'
+.fchar \[ci] \v'-.25m'\h'.05m'\D'c .5m'\h'.05m'\v'.25m'
+.fchar \[sq] \h'.05m'\D'l .5m 0'\D'l 0 -.5m'\D'l -.5m 0'\D'l 0 .5m'\h'.55m'
+.fchar \[ru] \D'l .5m 0'
+.fchar \[ul] \v'.25m'\D'l .5m 0'\v'-.25m'
+.fchar \[br] \Z'\v'.25m'\D'l 0 -1m''
+.fchar \[rn] \v'-.75m'\D'l .5m 0'\v'.75m'
+.fchar \[or] \h'.1m'\Z'\D'l 0 -.675m''\h'.1m'
+.fchar \[Fi] ffi
+.fchar \[Fl] ffl
+.fchar \[ff] ff
+.fchar \[ij] ij
+.fchar \[IJ] IJ
+.fchar \[tm] \s-3\v'-.3m'TM\v'+.3m'\s+3
+.
.\" pic tests this register to see whether it should use \X'ps:...'
.nr 0p 1
-.cp \n(_C
-.if !\n(.C .mso pspic.tmac
+.
+.\" now for color definitions
+.\"
+.\" this is a composite of MIT's X Consortium red/green/blue (rgb) color
+.\" specifications, X Consortium version 10.41, 1994.
+.defcolor black rgb #000000
+.defcolor grey rgb #bebebe
+.defcolor dimgrey rgb #696969
+.defcolor lightgray rgb #d3d3d3
+.defcolor lightslategrey rgb #778899
+.defcolor slategray rgb #708090
+.defcolor slategray1 rgb #c6e2ff
+.defcolor slategray2 rgb #b9d3ee
+.defcolor slategray3 rgb #9fb6cd
+.defcolor slategray4 rgb #6c7b8b
+.defcolor slategrey rgb #708090
+.defcolor grey0 rgb #000000
+.defcolor grey1 rgb #030303
+.defcolor grey2 rgb #050505
+.defcolor grey3 rgb #080808
+.defcolor grey4 rgb #0a0a0a
+.defcolor grey5 rgb #0d0d0d
+.defcolor grey6 rgb #0f0f0f
+.defcolor grey7 rgb #121212
+.defcolor grey8 rgb #141414
+.defcolor grey9 rgb #171717
+.defcolor grey10 rgb #1a1a1a
+.defcolor grey11 rgb #1c1c1c
+.defcolor grey12 rgb #1f1f1f
+.defcolor grey13 rgb #212121
+.defcolor grey14 rgb #242424
+.defcolor grey15 rgb #262626
+.defcolor grey16 rgb #292929
+.defcolor grey17 rgb #2b2b2b
+.defcolor grey18 rgb #2e2e2e
+.defcolor grey19 rgb #303030
+.defcolor grey20 rgb #333333
+.defcolor grey21 rgb #363636
+.defcolor grey22 rgb #383838
+.defcolor grey23 rgb #3b3b3b
+.defcolor grey24 rgb #3d3d3d
+.defcolor grey25 rgb #404040
+.defcolor grey26 rgb #424242
+.defcolor grey27 rgb #454545
+.defcolor grey28 rgb #474747
+.defcolor grey29 rgb #4a4a4a
+.defcolor grey30 rgb #4d4d4d
+.defcolor grey31 rgb #4f4f4f
+.defcolor grey32 rgb #525252
+.defcolor grey33 rgb #545454
+.defcolor grey34 rgb #575757
+.defcolor grey35 rgb #595959
+.defcolor grey36 rgb #5c5c5c
+.defcolor grey37 rgb #5e5e5e
+.defcolor grey38 rgb #616161
+.defcolor grey39 rgb #636363
+.defcolor grey40 rgb #666666
+.defcolor grey41 rgb #696969
+.defcolor grey42 rgb #6b6b6b
+.defcolor grey43 rgb #6e6e6e
+.defcolor grey44 rgb #707070
+.defcolor grey45 rgb #737373
+.defcolor grey46 rgb #757575
+.defcolor grey47 rgb #787878
+.defcolor grey48 rgb #7a7a7a
+.defcolor grey49 rgb #7d7d7d
+.defcolor grey50 rgb #7f7f7f
+.defcolor grey51 rgb #828282
+.defcolor grey52 rgb #858585
+.defcolor grey53 rgb #878787
+.defcolor grey54 rgb #8a8a8a
+.defcolor grey55 rgb #8c8c8c
+.defcolor grey56 rgb #8f8f8f
+.defcolor grey57 rgb #919191
+.defcolor grey58 rgb #949494
+.defcolor grey59 rgb #969696
+.defcolor grey60 rgb #999999
+.defcolor grey61 rgb #9c9c9c
+.defcolor grey62 rgb #9e9e9e
+.defcolor grey63 rgb #a1a1a1
+.defcolor grey64 rgb #a3a3a3
+.defcolor grey65 rgb #a6a6a6
+.defcolor grey66 rgb #a8a8a8
+.defcolor grey67 rgb #ababab
+.defcolor grey68 rgb #adadad
+.defcolor grey69 rgb #b0b0b0
+.defcolor grey70 rgb #b3b3b3
+.defcolor grey71 rgb #b5b5b5
+.defcolor grey72 rgb #b8b8b8
+.defcolor grey73 rgb #bababa
+.defcolor grey74 rgb #bdbdbd
+.defcolor grey75 rgb #bfbfbf
+.defcolor grey76 rgb #c2c2c2
+.defcolor grey77 rgb #c4c4c4
+.defcolor grey78 rgb #c7c7c7
+.defcolor grey79 rgb #c9c9c9
+.defcolor grey80 rgb #cccccc
+.defcolor grey81 rgb #cfcfcf
+.defcolor grey82 rgb #d1d1d1
+.defcolor grey83 rgb #d4d4d4
+.defcolor grey84 rgb #d6d6d6
+.defcolor grey85 rgb #d9d9d9
+.defcolor grey86 rgb #dbdbdb
+.defcolor grey87 rgb #dedede
+.defcolor grey88 rgb #e0e0e0
+.defcolor grey89 rgb #e3e3e3
+.defcolor grey90 rgb #e5e5e5
+.defcolor grey91 rgb #e8e8e8
+.defcolor grey92 rgb #ebebeb
+.defcolor grey93 rgb #ededed
+.defcolor grey94 rgb #f0f0f0
+.defcolor grey95 rgb #f2f2f2
+.defcolor grey96 rgb #f5f5f5
+.defcolor grey97 rgb #f7f7f7
+.defcolor grey98 rgb #fafafa
+.defcolor grey99 rgb #fcfcfc
+.defcolor grey100 rgb #ffffff
+.defcolor aliceblue rgb #f0f8ff
+.defcolor blueviolet rgb #8a2be2
+.defcolor cadetblue rgb #5f9ea0
+.defcolor cadetblue1 rgb #98f5ff
+.defcolor cadetblue2 rgb #8ee5ee
+.defcolor cadetblue3 rgb #7ac5cd
+.defcolor cadetblue4 rgb #53868b
+.defcolor cornflowerblue rgb #6495ed
+.defcolor darkslateblue rgb #483d8b
+.defcolor darkturquoise rgb #00ced1
+.defcolor deepskyblue rgb #00bfff
+.defcolor deepskyblue1 rgb #00bfff
+.defcolor deepskyblue2 rgb #00b2ee
+.defcolor deepskyblue3 rgb #009acd
+.defcolor deepskyblue4 rgb #00688b
+.defcolor dodgerblue rgb #1e90ff
+.defcolor dodgerblue1 rgb #1e90ff
+.defcolor dodgerblue2 rgb #1c86ee
+.defcolor dodgerblue3 rgb #1874cd
+.defcolor dodgerblue4 rgb #104e8b
+.defcolor lightblue rgb #add8e6
+.defcolor lightblue1 rgb #bfefff
+.defcolor lightblue2 rgb #b2dfee
+.defcolor lightblue3 rgb #9ac0cd
+.defcolor lightblue4 rgb #68838b
+.defcolor lightcyan rgb #e0ffff
+.defcolor lightcyan1 rgb #e0ffff
+.defcolor lightcyan2 rgb #d1eeee
+.defcolor lightcyan3 rgb #b4cdcd
+.defcolor lightcyan4 rgb #7a8b8b
+.defcolor lightskyblue rgb #87cefa
+.defcolor lightskyblue1 rgb #b0e2ff
+.defcolor lightskyblue2 rgb #a4d3ee
+.defcolor lightskyblue3 rgb #8db6cd
+.defcolor lightskyblue4 rgb #607b8b
+.defcolor lightslateblue rgb #8470ff
+.defcolor lightsteelblue rgb #b0c4de
+.defcolor lightsteelblue1 rgb #cae1ff
+.defcolor lightsteelblue2 rgb #bcd2ee
+.defcolor lightsteelblue3 rgb #a2b5cd
+.defcolor lightsteelblue4 rgb #6e7b8b
+.defcolor mediumaquamarine rgb #66cdaa
+.defcolor mediumblue rgb #0000cd
+.defcolor mediumslateblue rgb #7b68ee
+.defcolor mediumturquoise rgb #48d1cc
+.defcolor midnightblue rgb #191970
+.defcolor navyblue rgb #000080
+.defcolor paleturquoise rgb #afeeee
+.defcolor paleturquoise1 rgb #bbffff
+.defcolor paleturquoise2 rgb #aeeeee
+.defcolor paleturquoise3 rgb #96cdcd
+.defcolor paleturquoise4 rgb #668b8b
+.defcolor powderblue rgb #b0e0e6
+.defcolor royalblue rgb #4169e1
+.defcolor royalblue1 rgb #4876ff
+.defcolor royalblue2 rgb #436eee
+.defcolor royalblue3 rgb #3a5fcd
+.defcolor royalblue4 rgb #27408b
+.defcolor skyblue rgb #87ceeb
+.defcolor skyblue1 rgb #87ceff
+.defcolor skyblue2 rgb #7ec0ee
+.defcolor skyblue3 rgb #6ca6cd
+.defcolor skyblue4 rgb #4a708b
+.defcolor slateblue rgb #6a5acd
+.defcolor slateblue1 rgb #836fff
+.defcolor slateblue2 rgb #7a67ee
+.defcolor slateblue3 rgb #6959cd
+.defcolor slateblue4 rgb #473c8b
+.defcolor steelblue rgb #4682b4
+.defcolor steelblue1 rgb #63b8ff
+.defcolor steelblue2 rgb #5cacee
+.defcolor steelblue3 rgb #4f94cd
+.defcolor steelblue4 rgb #36648b
+.defcolor aquamarine rgb #7fffd4
+.defcolor aquamarine1 rgb #7fffd4
+.defcolor aquamarine2 rgb #76eec6
+.defcolor aquamarine3 rgb #66cdaa
+.defcolor aquamarine4 rgb #458b74
+.defcolor azure rgb #f0ffff
+.defcolor azure1 rgb #f0ffff
+.defcolor azure2 rgb #e0eeee
+.defcolor azure3 rgb #c1cdcd
+.defcolor azure4 rgb #838b8b
+.defcolor blue rgb #0000ff
+.defcolor blue1 rgb #0000ff
+.defcolor blue2 rgb #0000ee
+.defcolor blue3 rgb #0000cd
+.defcolor blue4 rgb #00008b
+.defcolor cyan rgb #00ffff
+.defcolor cyan1 rgb #00ffff
+.defcolor cyan2 rgb #00eeee
+.defcolor cyan3 rgb #00cdcd
+.defcolor cyan4 rgb #008b8b
+.defcolor navy rgb #000080
+.defcolor turquoise rgb #40e0d0
+.defcolor turquoise1 rgb #00f5ff
+.defcolor turquoise2 rgb #00e5ee
+.defcolor turquoise3 rgb #00c5cd
+.defcolor turquoise4 rgb #00868b
+.defcolor darkslategray rgb #2f4f4f
+.defcolor darkslategray1 rgb #97ffff
+.defcolor darkslategray2 rgb #8deeee
+.defcolor darkslategray3 rgb #79cdcd
+.defcolor darkslategray4 rgb #528b8b
+.defcolor rosybrown rgb #bc8f8f
+.defcolor rosybrown1 rgb #ffc1c1
+.defcolor rosybrown2 rgb #eeb4b4
+.defcolor rosybrown3 rgb #cd9b9b
+.defcolor rosybrown4 rgb #8b6969
+.defcolor saddlebrown rgb #8b4513
+.defcolor sandybrown rgb #f4a460
+.defcolor beige rgb #f5f5dc
+.defcolor brown rgb #a52a2a
+.defcolor brown1 rgb #ff4040
+.defcolor brown2 rgb #ee3b3b
+.defcolor brown3 rgb #cd3333
+.defcolor brown4 rgb #8b2323
+.defcolor burlywood rgb #deb887
+.defcolor burlywood1 rgb #ffd39b
+.defcolor burlywood2 rgb #eec591
+.defcolor burlywood3 rgb #cdaa7d
+.defcolor burlywood4 rgb #8b7355
+.defcolor chocolate rgb #d2691e
+.defcolor chocolate1 rgb #ff7f24
+.defcolor chocolate2 rgb #ee7621
+.defcolor chocolate3 rgb #cd661d
+.defcolor chocolate4 rgb #8b4513
+.defcolor peru rgb #cd853f
+.defcolor tan rgb #d2b48c
+.defcolor tan1 rgb #ffa54f
+.defcolor tan2 rgb #ee9a49
+.defcolor tan3 rgb #cd853f
+.defcolor tan4 rgb #8b5a2b
+.defcolor darkgreen rgb #006400
+.defcolor darkkhaki rgb #bdb76b
+.defcolor darkolivegreen rgb #556b2f
+.defcolor darkolivegreen1 rgb #caff70
+.defcolor darkolivegreen2 rgb #bcee68
+.defcolor darkolivegreen3 rgb #a2cd5a
+.defcolor darkolivegreen4 rgb #6e8b3d
+.defcolor darkseagreen rgb #8fbc8f
+.defcolor darkseagreen1 rgb #c1ffc1
+.defcolor darkseagreen2 rgb #b4eeb4
+.defcolor darkseagreen3 rgb #9bcd9b
+.defcolor darkseagreen4 rgb #698b69
+.defcolor forestgreen rgb #228b22
+.defcolor greenyellow rgb #adff2f
+.defcolor lawngreen rgb #7cfc00
+.defcolor lightseagreen rgb #20b2aa
+.defcolor limegreen rgb #32cd32
+.defcolor mediumseagreen rgb #3cb371
+.defcolor mediumspringgreen rgb #00fa9a
+.defcolor mintcream rgb #f5fffa
+.defcolor olivedrab rgb #6b8e23
+.defcolor olivedrab1 rgb #c0ff3e
+.defcolor olivedrab2 rgb #b3ee3a
+.defcolor olivedrab3 rgb #9acd32
+.defcolor olivedrab4 rgb #698b22
+.defcolor palegreen rgb #98fb98
+.defcolor palegreen1 rgb #9aff9a
+.defcolor palegreen2 rgb #90ee90
+.defcolor palegreen3 rgb #7ccd7c
+.defcolor palegreen4 rgb #548b54
+.defcolor seagreen rgb #2e8b57
+.defcolor seagreen1 rgb #54ff9f
+.defcolor seagreen2 rgb #4eee94
+.defcolor seagreen3 rgb #43cd80
+.defcolor seagreen4 rgb #2e8b57
+.defcolor springgreen rgb #00ff7f
+.defcolor springgreen1 rgb #00ff7f
+.defcolor springgreen2 rgb #00ee76
+.defcolor springgreen3 rgb #00cd66
+.defcolor springgreen4 rgb #008b45
+.defcolor yellowgreen rgb #9acd32
+.defcolor chartreuse rgb #7fff00
+.defcolor chartreuse1 rgb #7fff00
+.defcolor chartreuse2 rgb #76ee00
+.defcolor chartreuse3 rgb #66cd00
+.defcolor chartreuse4 rgb #458b00
+.defcolor green rgb #00ff00
+.defcolor green1 rgb #00ff00
+.defcolor green2 rgb #00ee00
+.defcolor green3 rgb #00cd00
+.defcolor green4 rgb #008b00
+.defcolor khaki rgb #f0e68c
+.defcolor khaki1 rgb #fff68f
+.defcolor khaki2 rgb #eee685
+.defcolor khaki3 rgb #cdc673
+.defcolor khaki4 rgb #8b864e
+.defcolor darkorange rgb #ff8c00
+.defcolor darkorange1 rgb #ff7f00
+.defcolor darkorange2 rgb #ee7600
+.defcolor darkorange3 rgb #cd6600
+.defcolor darkorange4 rgb #8b4500
+.defcolor darksalmon rgb #e9967a
+.defcolor lightcoral rgb #f08080
+.defcolor lightsalmon rgb #ffa07a
+.defcolor lightsalmon1 rgb #ffa07a
+.defcolor lightsalmon2 rgb #ee9572
+.defcolor lightsalmon3 rgb #cd8162
+.defcolor lightsalmon4 rgb #8b5742
+.defcolor peachpuff rgb #ffdab9
+.defcolor peachpuff1 rgb #ffdab9
+.defcolor peachpuff2 rgb #eecbad
+.defcolor peachpuff3 rgb #cdaf95
+.defcolor peachpuff4 rgb #8b7765
+.defcolor bisque rgb #ffe4c4
+.defcolor bisque1 rgb #ffe4c4
+.defcolor bisque2 rgb #eed5b7
+.defcolor bisque3 rgb #cdb79e
+.defcolor bisque4 rgb #8b7d6b
+.defcolor coral rgb #ff7f50
+.defcolor coral1 rgb #ff7256
+.defcolor coral2 rgb #ee6a50
+.defcolor coral3 rgb #cd5b45
+.defcolor coral4 rgb #8b3e2f
+.defcolor honeydew rgb #f0fff0
+.defcolor honeydew1 rgb #f0fff0
+.defcolor honeydew2 rgb #e0eee0
+.defcolor honeydew3 rgb #c1cdc1
+.defcolor honeydew4 rgb #838b83
+.defcolor orange rgb #ffa500
+.defcolor orange1 rgb #ffa500
+.defcolor orange2 rgb #ee9a00
+.defcolor orange3 rgb #cd8500
+.defcolor orange4 rgb #8b5a00
+.defcolor salmon rgb #fa8072
+.defcolor salmon1 rgb #ff8c69
+.defcolor salmon2 rgb #ee8262
+.defcolor salmon3 rgb #cd7054
+.defcolor salmon4 rgb #8b4c39
+.defcolor sienna rgb #a0522d
+.defcolor sienna1 rgb #ff8247
+.defcolor sienna2 rgb #ee7942
+.defcolor sienna3 rgb #cd6839
+.defcolor sienna4 rgb #8b4726
+.defcolor deeppink rgb #ff1493
+.defcolor deeppink1 rgb #ff1493
+.defcolor deeppink2 rgb #ee1289
+.defcolor deeppink3 rgb #cd1076
+.defcolor deeppink4 rgb #8b0a50
+.defcolor hotpink rgb #ff69b4
+.defcolor hotpink1 rgb #ff6eb4
+.defcolor hotpink2 rgb #ee6aa7
+.defcolor hotpink3 rgb #cd6090
+.defcolor hotpink4 rgb #8b3a62
+.defcolor indianred rgb #cd5c5c
+.defcolor indianred1 rgb #ff6a6a
+.defcolor indianred2 rgb #ee6363
+.defcolor indianred3 rgb #cd5555
+.defcolor indianred4 rgb #8b3a3a
+.defcolor lightpink rgb #ffb6c1
+.defcolor lightpink1 rgb #ffaeb9
+.defcolor lightpink2 rgb #eea2ad
+.defcolor lightpink3 rgb #cd8c95
+.defcolor lightpink4 rgb #8b5f65
+.defcolor mediumvioletred rgb #c71585
+.defcolor mistyrose rgb #ffe4e1
+.defcolor mistyrose1 rgb #ffe4e1
+.defcolor mistyrose2 rgb #eed5d2
+.defcolor mistyrose3 rgb #cdb7b5
+.defcolor mistyrose4 rgb #8b7d7b
+.defcolor orangered rgb #ff4500
+.defcolor orangered1 rgb #ff4500
+.defcolor orangered2 rgb #ee4000
+.defcolor orangered3 rgb #cd3700
+.defcolor orangered4 rgb #8b2500
+.defcolor palevioletred rgb #db7093
+.defcolor palevioletred1 rgb #ff82ab
+.defcolor palevioletred2 rgb #ee799f
+.defcolor palevioletred3 rgb #cd6889
+.defcolor palevioletred4 rgb #8b475d
+.defcolor violetred rgb #d02090
+.defcolor violetred1 rgb #ff3e96
+.defcolor violetred2 rgb #ee3a8c
+.defcolor violetred3 rgb #cd3278
+.defcolor violetred4 rgb #8b2252
+.defcolor firebrick rgb #b22222
+.defcolor firebrick1 rgb #ff3030
+.defcolor firebrick2 rgb #ee2c2c
+.defcolor firebrick3 rgb #cd2626
+.defcolor firebrick4 rgb #8b1a1a
+.defcolor pink rgb #ffc0cb
+.defcolor pink1 rgb #ffb5c5
+.defcolor pink2 rgb #eea9b8
+.defcolor pink3 rgb #cd919e
+.defcolor pink4 rgb #8b636c
+.defcolor red rgb #ff0000
+.defcolor red1 rgb #ff0000
+.defcolor red2 rgb #ee0000
+.defcolor red3 rgb #cd0000
+.defcolor red4 rgb #8b0000
+.defcolor tomato rgb #ff6347
+.defcolor tomato1 rgb #ff6347
+.defcolor tomato2 rgb #ee5c42
+.defcolor tomato3 rgb #cd4f39
+.defcolor tomato4 rgb #8b3626
+.defcolor darkorchid rgb #9932cc
+.defcolor darkorchid1 rgb #bf3eff
+.defcolor darkorchid2 rgb #b23aee
+.defcolor darkorchid3 rgb #9a32cd
+.defcolor darkorchid4 rgb #68228b
+.defcolor darkviolet rgb #9400d3
+.defcolor lavenderblush rgb #fff0f5
+.defcolor lavenderblush1 rgb #fff0f5
+.defcolor lavenderblush2 rgb #eee0e5
+.defcolor lavenderblush3 rgb #cdc1c5
+.defcolor lavenderblush4 rgb #8b8386
+.defcolor mediumorchid rgb #ba55d3
+.defcolor mediumorchid1 rgb #e066ff
+.defcolor mediumorchid2 rgb #d15fee
+.defcolor mediumorchid3 rgb #b452cd
+.defcolor mediumorchid4 rgb #7a378b
+.defcolor mediumpurple rgb #9370db
+.defcolor mediumpurple1 rgb #ab82ff
+.defcolor mediumpurple2 rgb #9f79ee
+.defcolor mediumpurple3 rgb #8968cd
+.defcolor mediumpurple4 rgb #5d478b
+.defcolor lavender rgb #e6e6fa
+.defcolor magenta rgb #ff00ff
+.defcolor magenta1 rgb #ff00ff
+.defcolor magenta2 rgb #ee00ee
+.defcolor magenta3 rgb #cd00cd
+.defcolor magenta4 rgb #8b008b
+.defcolor maroon rgb #b03060
+.defcolor maroon1 rgb #ff34b3
+.defcolor maroon2 rgb #ee30a7
+.defcolor maroon3 rgb #cd2990
+.defcolor maroon4 rgb #8b1c62
+.defcolor orchid rgb #da70d6
+.defcolor orchid1 rgb #ff83fa
+.defcolor orchid2 rgb #ee7ae9
+.defcolor orchid3 rgb #cd69c9
+.defcolor orchid4 rgb #8b4789
+.defcolor plum rgb #dda0dd
+.defcolor plum1 rgb #ffbbff
+.defcolor plum2 rgb #eeaeee
+.defcolor plum3 rgb #cd96cd
+.defcolor plum4 rgb #8b668b
+.defcolor purple rgb #a020f0
+.defcolor purple1 rgb #9b30ff
+.defcolor purple2 rgb #912cee
+.defcolor purple3 rgb #7d26cd
+.defcolor purple4 rgb #551a8b
+.defcolor thistle rgb #d8bfd8
+.defcolor thistle1 rgb #ffe1ff
+.defcolor thistle2 rgb #eed2ee
+.defcolor thistle3 rgb #cdb5cd
+.defcolor thistle4 rgb #8b7b8b
+.defcolor violet rgb #ee82ee
+.defcolor antiquewhite rgb #faebd7
+.defcolor antiquewhite1 rgb #ffefdb
+.defcolor antiquewhite2 rgb #eedfcc
+.defcolor antiquewhite3 rgb #cdc0b0
+.defcolor antiquewhite4 rgb #8b8378
+.defcolor floralwhite rgb #fffaf0
+.defcolor ghostwhite rgb #f8f8ff
+.defcolor navajowhite rgb #ffdead
+.defcolor navajowhite1 rgb #ffdead
+.defcolor navajowhite2 rgb #eecfa1
+.defcolor navajowhite3 rgb #cdb38b
+.defcolor navajowhite4 rgb #8b795e
+.defcolor oldlace rgb #fdf5e6
+.defcolor whitesmoke rgb #f5f5f5
+.defcolor gainsboro rgb #dcdcdc
+.defcolor ivory rgb #fffff0
+.defcolor ivory1 rgb #fffff0
+.defcolor ivory2 rgb #eeeee0
+.defcolor ivory3 rgb #cdcdc1
+.defcolor ivory4 rgb #8b8b83
+.defcolor linen rgb #faf0e6
+.defcolor seashell rgb #fff5ee
+.defcolor seashell1 rgb #fff5ee
+.defcolor seashell2 rgb #eee5de
+.defcolor seashell3 rgb #cdc5bf
+.defcolor seashell4 rgb #8b8682
+.defcolor snow rgb #fffafa
+.defcolor snow1 rgb #fffafa
+.defcolor snow2 rgb #eee9e9
+.defcolor snow3 rgb #cdc9c9
+.defcolor snow4 rgb #8b8989
+.defcolor wheat rgb #f5deb3
+.defcolor wheat1 rgb #ffe7ba
+.defcolor wheat2 rgb #eed8ae
+.defcolor wheat3 rgb #cdba96
+.defcolor wheat4 rgb #8b7e66
+.defcolor white rgb #ffffff
+.defcolor blanchedalmond rgb #ffebcd
+.defcolor darkgoldenrod rgb #b8860b
+.defcolor darkgoldenrod1 rgb #ffb90f
+.defcolor darkgoldenrod2 rgb #eead0e
+.defcolor darkgoldenrod3 rgb #cd950c
+.defcolor darkgoldenrod4 rgb #8b6508
+.defcolor lemonchiffon rgb #fffacd
+.defcolor lemonchiffon1 rgb #fffacd
+.defcolor lemonchiffon2 rgb #eee9bf
+.defcolor lemonchiffon3 rgb #cdc9a5
+.defcolor lemonchiffon4 rgb #8b8970
+.defcolor lightgoldenrod rgb #eedd82
+.defcolor lightgoldenrod1 rgb #ffec8b
+.defcolor lightgoldenrod2 rgb #eedc82
+.defcolor lightgoldenrod3 rgb #cdbe70
+.defcolor lightgoldenrod4 rgb #8b814c
+.defcolor lightgoldenrodyellow rgb #fafad2
+.defcolor lightyellow rgb #ffffe0
+.defcolor lightyellow1 rgb #ffffe0
+.defcolor lightyellow2 rgb #eeeed1
+.defcolor lightyellow3 rgb #cdcdb4
+.defcolor lightyellow4 rgb #8b8b7a
+.defcolor palegoldenrod rgb #eee8aa
+.defcolor papayawhip rgb #ffefd5
+.defcolor cornsilk rgb #fff8dc
+.defcolor cornsilk1 rgb #fff8dc
+.defcolor cornsilk2 rgb #eee8cd
+.defcolor cornsilk3 rgb #cdc8b1
+.defcolor cornsilk4 rgb #8b8878
+.defcolor gold rgb #ffd700
+.defcolor gold1 rgb #ffd700
+.defcolor gold2 rgb #eec900
+.defcolor gold3 rgb #cdad00
+.defcolor gold4 rgb #8b7500
+.defcolor goldenrod rgb #daa520
+.defcolor goldenrod1 rgb #ffc125
+.defcolor goldenrod2 rgb #eeb422
+.defcolor goldenrod3 rgb #cd9b1d
+.defcolor goldenrod4 rgb #8b6914
+.defcolor moccasin rgb #ffe4b5
+.defcolor yellow rgb #ffff00
+.defcolor yellow1 rgb #ffff00
+.defcolor yellow2 rgb #eeee00
+.defcolor yellow3 rgb #cdcd00
+.defcolor yellow4 rgb #8b8b00
+.
+.cp \n[_C]
+.
+.if !\n(.C \
+. mso pspic.tmac
+.
+.do ie '\[char97]'a' \
+. do mso latin1.tmac
+.el \
+. do mso cp1047.tmac
+.
+.\" make sure that no blank lines creep in at the end of this file.
diff --git a/contrib/groff/tmac/psold.tmac b/contrib/groff/tmac/psold.tmac
index 28a446b..03889d1 100644
--- a/contrib/groff/tmac/psold.tmac
+++ b/contrib/groff/tmac/psold.tmac
@@ -45,7 +45,7 @@ I\h'-.25m'\v'-.33m'\s'\En(.s*6u/10u'\v'.33m'D\v'-.33m'\s0\v'.33m'
.tr \[char177]\[+-]
.tr \[char178]\[S2]
.tr \[char179]\[S3]
-.tr \[char181]\[*m]
+.tr \[char181]\[mc]
.tr \[char185]\[S1]
.tr \[char188]\[14]
.tr \[char189]\[12]
diff --git a/contrib/groff/tmac/pspic.tmac b/contrib/groff/tmac/pspic.tmac
index ab06668..6382d91 100644
--- a/contrib/groff/tmac/pspic.tmac
+++ b/contrib/groff/tmac/pspic.tmac
@@ -1,60 +1,106 @@
.\" pspic.tmac
.\"
.\" Define the PSPIC macro.
-.\" When used other than with -Tps, it will draw a box around where
+.\"
+.\" When used other than with -Tps or -Tdvi, it will draw a box around where
.\" the picture would go.
+.
.de PSPIC
-.nr ps-offset-mode 0
-.ie '\\$1'-L' \{\
-. nr ps-offset-mode 1
-. shift
-. HTML-DO-IMAGE \\$1 l
-.\}
-.el \{\
-. ie '\\$1'-R' \{\
-. nr ps-offset-mode 2
-. shift
-. HTML-DO-IMAGE \\$1 r
-. \}
-. el \{\
-. if '\\$1'-I' \{\
-. nr ps-offset-mode 3
-. nr ps-offset (m;\\$2)
-. shift 2
-. \}
-. HTML-DO-IMAGE \\$1 i
-. \}
-.\}
-.br
-.psbb \\$1
-.if (\\n[llx] : \\n[lly] : \\n[urx] : \\n[ury]) \{\
-. nr ps-wid (\\n[urx]-\\n[llx])
-. nr ps-ht (\\n[ury]-\\n[lly])
-. if \\n[ps-wid]<0 .nr ps-wid 0-\\n[ps-wid]
-. if \\n[ps-ht]<0 .nr ps-ht 0-\\n[ps-ht]
-. ie \\n[.$]>=2 .nr ps-deswid (i;\\$2)
-. el .nr ps-deswid \\n[.l]-\\n[.i]<?\\n[ps-wid]p
-. nr ps-desht \\n[ps-deswid]*1000+(\\n[ps-wid]/2)/\\n[ps-wid]\
-*\\n[ps-ht]+500/1000
-. if \\n[.$]>=3&(\\n[ps-desht]>(i;0\\$3)) \{\
-. nr ps-desht (i;\\$3)
-. nr ps-deswid \\n[ps-desht]*1000+(\\n[ps-ht]/2)/\\n[ps-ht]\
-*\\n[ps-wid]+500/1000
-. \}
-. ne \\n[ps-desht]u+1v
-. if \\n[ps-offset-mode]=0 .nr ps-offset \\n[.l]-\\n[.i]-\\n[ps-deswid]/2
-. if \\n[ps-offset-mode]=1 .nr ps-offset 0
-. if \\n[ps-offset-mode]=2 .nr ps-offset \\n[.l]-\\n[.i]-\\n[ps-deswid]
-. ie \\n[.$]>=3 .ds ps-desht \\n[ps-desht]
-. el .ds ps-desht \" empty
+. nr ps-offset-mode 0
+. ie '\\$1'-L' \{\
+. nr ps-offset-mode 1
+. shift
+. HTML-DO-IMAGE \\$1 l
+. \}
+. el \{\
+. ie '\\$1'-R' \{\
+. nr ps-offset-mode 2
+. shift
+. HTML-DO-IMAGE \\$1 r
+. \}
+. el \{\
+. ie '\\$1'-I' \{\
+. nr ps-offset-mode 3
+. nr ps-offset (m;\\$2)
+. shift 2
+. HTML-DO-IMAGE \\$1 i
+. \}
+. el \
+. HTML-DO-IMAGE \\$1 c
+. \}
+. \}
+.
+. br
+.
+. psbb \\$1
+. if (\\n[llx] : \\n[lly] : \\n[urx] : \\n[ury]) \{\
+. nr ps-wid (\\n[urx] - \\n[llx])
+. nr ps-ht (\\n[ury] - \\n[lly])
+. if (\\n[ps-wid] < 0) \
+. nr ps-wid (-\\n[ps-wid])
+. if (\\n[ps-ht] < 0) \
+. nr ps-ht (-\\n[ps-ht])
+. ie (\\n[.$] >= 2) \
+. nr ps-deswid (i;\\$2)
+. el \
+. nr ps-deswid ((\\n[.l] - \\n[.i]) <? \\n[ps-wid]p)
+. nr ps-desht (\\n[ps-deswid] * 1000 + (\\n[ps-wid] / 2) \
+ / \\n[ps-wid] * \\n[ps-ht] \
+ + 500 / 1000)
+. if ((\\n[.$] >= 3) & (\\n[ps-desht] > (i;0\\$3))) \{\
+. nr ps-desht (i;\\$3)
+. nr ps-deswid (\\n[ps-desht] * 1000 + (\\n[ps-ht] / 2) \
+ / \\n[ps-ht] * \\n[ps-wid] \
+ + 500 / 1000)
+. \}
+.
+. ne (\\n[ps-desht]u + 1v)
+.
+. if (\\n[ps-offset-mode] == 0) \
+. nr ps-offset (\\n[.l] - \\n[.i] - \\n[ps-deswid] / 2)
+. if (\\n[ps-offset-mode] == 1) \
+. nr ps-offset 0
+. if (\\n[ps-offset-mode] == 2) \
+. nr ps-offset (\\n[.l] - \\n[.i] - \\n[ps-deswid])
+.
+. ie '\*[.T]'dvi' \{\
+. ie (\\n[ps-wid]p == \\n[ps-deswid]) \{\
+. ds ps-scale \" empty
+. ds ps-hoffset hoffset=-\\n[llx]
+. ds ps-voffset voffset=-\\n[lly]
+. \}
+. el \{\
+. nr ps-scale (\\n[ps-deswid] * 100 / \\n[ps-wid]p)
+. nr ps-hoffset (-\\n[llx] * \\n[ps-scale] / 100)
+. nr ps-voffset (-\\n[lly] * \\n[ps-scale] / 100)
+. ds ps-scale hscale=\\n[ps-scale] vscale=\\n[ps-scale]
+. ds ps-hoffset hoffset=\\n[ps-hoffset]
+. ds ps-voffset voffset=\\n[ps-voffset]
+. \}
+.
+\h'\\n[ps-offset]u'\
+\v'\\n[ps-desht]u'\
+\X'psfile=\\$1 \\*[ps-hoffset] \\*[ps-voffset] \\*[ps-scale]'
+. \}
+. el \{\
+. ie (\\n[.$] >= 3) \
+. ds ps-desht \\n[ps-desht]
+. el \
+. ds ps-desht \" empty
+.
\h'\\n[ps-offset]u'\
\X'ps: invis'\
\Z'\D'p 0 \\n[ps-desht]u \\n[ps-deswid]u 0 0 -\\n[ps-desht]u''\
\X'ps: endinvis'\
-\v'\\n[ps-desht]u'\X'ps: import \\$1 \
-\\n[llx] \\n[lly] \\n[urx] \\n[ury] \\n[ps-deswid] \\*[ps-desht]'
-. br
-. sp \\n[ps-desht]u
-.\}
-.HTML-IMAGE-END
+\v'\\n[ps-desht]u'\
+\X'ps: import \
+ \\$1 \\n[llx] \\n[lly] \\n[urx] \\n[ury] \\n[ps-deswid] \\*[ps-desht]'
+. \}
+.
+. br
+. sp \\n[ps-desht]u
+. \}
+. HTML-IMAGE-END
..
+.
+.\" end of pspic.tmac
diff --git a/contrib/groff/tmac/s.tmac b/contrib/groff/tmac/s.tmac
index 7d1ad49..e36c3e2 100644
--- a/contrib/groff/tmac/s.tmac
+++ b/contrib/groff/tmac/s.tmac
@@ -3,7 +3,8 @@
s.tmac
-Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
+Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002
+ Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.com)
This file is part of groff.
@@ -25,8 +26,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
.if !\n(.g .ab These ms macros require groff.
.if \n(.C \
. ab The groff ms macros do not work in compatibility mode.
-.\" Enable warnings. You can delete this if you want.
-.warn
+.\" Enable warnings (only if none are given on the command line).
+.\" You can delete this if you want.
+.if (\n[.warn] == 65543) .warn
.\" See if already loaded.
.if r GS .nx
.nr GS 1
@@ -264,8 +266,8 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
.ns
.@PP
.if '\*(.T'html' \{\
-. cov*tl-au-print
-. als cov*tl-au-print @nop
+. cov*tl-au-print
+. als cov*tl-au-print @nop
. par@reset-env
. par@reset
. cov*print
@@ -303,7 +305,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
. bp 1
. als FS @FS
. als FE @FE
-. CHECK-FOOTER-AND-KEEP
+. CHECK-FOOTER-AND-KEEP
. \}
. br
.\}
@@ -1153,19 +1155,35 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
. par*pop-tag-env
. di
. chop par*label
-. ie '\*(.T'html' \{\
-. if \\n[dl]+1n<=\\n[\\n[.ev]:ai] .HTML-TAG ".ip"
-. ti 0
-\&\\$1
+. ti -\\n[\\n[.ev]:ai]u
+. ie \\n[dl]+1n<=\\n[\\n[.ev]:ai] \\*[par*label]\h'|\\n[\\n[.ev]:ai]u'\c
+. el \{\
+\\*[par*label]
. br
. \}
+. rm par*label
+.\}
+..
+.de @IP-html
+.if \\n[.$]>1 .nr \\n[.ev]:ai (n;\\$2)
+.par*start \\n[\\n[.ev]:ai] 0
+.if !'\\$1'' \{\
+. \" Divert the label so as to freeze any spaces.
+. di par*label
+. par*push-tag-env
+\&\\$1
+. par*pop-tag-env
+. di
+. chop par*label
+. ti -\\n[\\n[.ev]:ai]u
+. ie \\n[dl]+1n<=\\n[\\n[.ev]:ai] \{\
+. HTML-TAG-NS ".col 1"
+\\$1\h'|\\n[\\n[.ev]:ai]u'\c
+. HTML-TAG-NS ".col 2"
+. \}
. el \{\
-. ti -\\n[\\n[.ev]:ai]u
-. ie \\n[dl]+1n<=\\n[\\n[.ev]:ai] \\*[par*label]\h'|\\n[\\n[.ev]:ai]u'\c
-. el \{\
-\\*[par*label]
-. br
-. \}
+\\$1
+. br
. \}
. rm par*label
.\}
@@ -1562,7 +1580,13 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
.\}
.di eqn*div
.in 0
-.nf
+.if \\n[eqn*type]=0 .HTML-IMAGE-LEFT
+.if \\n[eqn*type]=1 \{\
+. if '\*(.T'html' .RS
+. HTML-IMAGE-INLINE
+.\}
+.if \\n[eqn*type]=2 .HTML-IMAGE
+.if !'\*(.T'html' .nf
..
.de @div-end!eqn*div
.@EN
@@ -1575,13 +1599,17 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
. di
. nr eqn*have-num 0
. if !'\\*[eqn*num]'' .nr eqn*have-num 1
-. if \\n[dl]:\\n[eqn*have-num] \{\
-. sp \\n[DD]u
+. ie \\n[dl]:\\n[eqn*have-num] \{\
+. if !'\*(.T'html' .sp \\n[DD]u
. par@reset
. ds eqn*tabs \\n[.tabs]
. nf
. ie \\n[dl] \{\
-. ds@need \\n[dn]u-1v+\n[.V]u
+.\" --fixme-- this really should not be necessary
+.\" and indicates that there is extra space creeping into
+.\" an equation when ps4html is enabled..
+. ie r ps4html .ds@need \\n[dn]u-1v+\n[.V]u+1i
+. el .ds@need \\n[dn]u-1v+\n[.V]u
. chop eqn*div
. ie \\n[eqn*type]=0 \{\
. ta (u;\\n[.l]-\\n[.i])R
@@ -1599,10 +1627,23 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
. ta (u;\\n[.l]-\\n[.i])R
\t\\*[eqn*num]
. \}
-. sp \\n[DD]u
+. if !'\*(.T'html' .sp \\n[DD]u
. ta \\*[eqn*tabs]
. \}
-. fi
+. el \{
+.\" must terminate empty equations in html and ps4html as they contain
+.\" the HTML-IMAGE-END suppression nodes
+. if \\n[dl] .chop eqn*div
+. if '\*(.T'html' \\*[eqn*div]
+. if r ps4html \\*[eqn*div]
+. \}
+. if !'\*(.T'html' .fi
+. if \\n[eqn*type]=0 .HTML-IMAGE-END
+. if \\n[eqn*type]=1 \{\
+. HTML-IMAGE-END
+. if '\*(.T'html' .RE
+. \}
+. if \\n[eqn*type]=2 .HTML-IMAGE-END
.\}
..
.\" ****************************
@@ -1618,7 +1659,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
..
.de @TS
.sp \\n[DD]u
+.\" .if !'\*(.T'html' .sp \\n[DD]u
.if '\\$1'H' .di tbl*header-div
+.HTML-IMAGE
..
.de tbl@top-hook
.if \\n[tbl*have-header] \{\
@@ -1660,8 +1703,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
.ie '\\n(.z'tbl*header-div' .@error-recover .TS H but no .TH before .TE
.el \{\
. nr tbl*have-header 0
-. sp \\n[DD]u
+. if !'\*(.T'html' .sp \\n[DD]u
.\}
+. HTML-IMAGE-END
.\" reset tabs
.TA
..
@@ -1686,8 +1730,10 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
. ds@need (u;\\$1)+1v
. in +(u;\\n[.l]-\\n[.i]-\\$2/2>?0)
.\}
+.HTML-IMAGE
..
.de PE
+.HTML-IMAGE-END
.par@reset
.sp \\n[DD]u+.5m
..
@@ -1904,31 +1950,35 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
.\" however this produced wierd results, so I've moved back to a more reliable
.\" but less interesting solution --fixme--
. if '\*(.T'html' \{\
-. rm KF
-. als KF KS
-. rm FS
-. de FS
-. br
-. HTML-IMAGE
+. rm KF
+. als KF KS
+. rm FS
+. de FS
+. br
+. HTML-IMAGE
\\..
-. rm FE
-. de FE
-. br
-. HTML-IMAGE-END
+. rm FE
+. de FE
+. br
+. HTML-IMAGE-END
\\..
. \}
. if r ps4html \{\
-. rm FS
-. de FS
-. br
-. HTML-IMAGE
+. rm FS
+. de FS
+. br
+. HTML-IMAGE
\\..
-. rm FE
-. de FE
-. br
-. HTML-IMAGE-END
+. rm FE
+. de FE
+. br
+. HTML-IMAGE-END
\\..
. \}
..
.par@load-init
+.if '\*(.T'html' \{\
+. rm @IP
+. als @IP @IP-html
+.\}
.\" Make sure that no blank lines creep in at the end of this file.
diff --git a/contrib/groff/tmac/trace.tmac b/contrib/groff/tmac/trace.tmac
index 143f954..c341b76 100644
--- a/contrib/groff/tmac/trace.tmac
+++ b/contrib/groff/tmac/trace.tmac
@@ -2,28 +2,60 @@
.\"
.\" Load this before a macro package that you want to trace.
.
+.nr _C \n(.C
+.cp 0
+.
+.do ds !!sp " \"
+.
.eo
.
.rn de !!de
.
+.
.!!de de
-. ecs
+. do ecs
. ec
-. !!de \$1
-. ie "\$1"\\$0" .tm *** trace enter: \\$0 \\$@
-. el .tm *** trace enter \$1: \\$0 \\$@
-. nop \\*[!!\$1]\\
-. ie "\$1"\\$0" .tm *** trace exit: \\$0 \\$@
-. el .tm *** trace exit \$1: \\$0 \\$@
+. do !!de \$1
+. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** de trace enter: \\$0 \\$@
+. el .do tm1 "\*[!!sp]*** trace enter \$1: \\$0 \\$@
+. do as !!sp " \"
+. do nop \\*[!!\$1]\\
+. do substring !!sp 1
+. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@
+. el .do tm1 "\*[!!sp]*** trace exit \$1: \\$0 \\$@
\..
.
-. ds !!d1 !!\$1
-. ds !!d2 \$2
+. do ds !!d1 !!\$1
+. do ds !!d2 \$2
.
-. ecr
-. dei !!d1 !!d2
+. do ecr
+. do dei !!d1 !!d2
+..
+.
+.rn am !!am
+.
+.!!am am
+. do ecs
+. ec
+. do !!am \$1
+. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** am trace enter: \\$0 \\$@
+. el .do tm1 "\*[!!sp]*** am trace enter \$1: \\$0 \\$@
+. as !!sp " \"
+. do nop \\*[!!\$1]\\
+. substring !!sp 1
+. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@
+. el .do tm1 "\*[!!sp]*** trace exit \$1: \\$0 \\$@
+\..
+.
+. do ds !!a1 !!\$1
+. do ds !!a2 \$2
+.
+. do ecr
+. do ami !!a1 !!a2
..
.
.ec
.
+.cp \n(_C
+.
.\" EOF
diff --git a/contrib/groff/tmac/troffrc b/contrib/groff/tmac/troffrc
index c4cfa20..f51eb87 100644
--- a/contrib/groff/tmac/troffrc
+++ b/contrib/groff/tmac/troffrc
@@ -1,6 +1,8 @@
.\" Startup file for troff.
+.
.\" This is tested by pic.
.nr 0p 0
+.
.\" Use .do here, so that it works with -C.
.\" The groff command defines the .X string if the -X option was given.
.ie r.X .do ds troffrc!ps Xps.tmac
@@ -21,10 +23,17 @@
. do mso \*[troffrc!\*[.T]]
.do rm troffrc!ps troffrc!Xps troffrc!dvi troffrc!X75 troffrc!X75-12 \
troffrc!X100 troffrc!X100-12 troffrc!lj4 troff!lbp troffrc!html
-.ie '\*(.T'cp1047' .do tr \[char65]
-.el .do tr \[char160]
+.
+.\" test whether we work under EBCDIC
+.do ie '\[char97]'a' \
+. do tr \[char160]\~
+.el \
+. do tr \[char65]\~
+.
.\" Set the hyphenation language to `us'.
.do hla us
+.
.\" Load hyphenation patterns from `hyphen.us' (in the tmac directory).
.do hpf hyphen.us
+.
.\" Don't let blank lines creep in here.
diff --git a/contrib/groff/tmac/troffrc-end b/contrib/groff/tmac/troffrc-end
index f786059..928c923 100644
--- a/contrib/groff/tmac/troffrc-end
+++ b/contrib/groff/tmac/troffrc-end
@@ -1,14 +1,13 @@
-.\"
.\" final startup file for troff
+.
.\" this file is parsed after all macro sets have been read
-.\"
+.
.do if '\*[.T]'html' .do mso html.tmac
+.
.\" if we are running the postscript device for html images then load www.tmac
-.\"
.do if r ps4html .do mso www.tmac
-.\"
+.
.\" for all other devices blank out these macros
-.\"
.do if !d HTML-IMAGE-INLINE .do ds HTML-IMAGE-INLINE
.do if !d HTML-IMAGE .do ds HTML-IMAGE
.do if !d HTML-IMAGE-RIGHT .do ds HTML-IMAGE-RIGHT
@@ -16,4 +15,5 @@
.do if !d HTML-IMAGE-END .do ds HTML-IMAGE-END
.do if !d HTML-TAG .do ds HTML-TAG
.do if !d HTML-DO-IMAGE .do ds HTML-DO-IMAGE
+.
.\" Don't let blank lines creep in here.
diff --git a/contrib/groff/tmac/tty-char.tmac b/contrib/groff/tmac/tty-char.tmac
index 02a1071..a0c2b4b 100644
--- a/contrib/groff/tmac/tty-char.tmac
+++ b/contrib/groff/tmac/tty-char.tmac
@@ -9,196 +9,209 @@
.\" as well as on devices that support overstriking
.\" - represent the character's graphical shape (not its meaning)
.\"
+.\" Note that the optical appearance of the definitions contained in this
+.\" file is inferior compared to that of the replacement characters defined
+.\" in the file tty.tmac.
+.\"
.nr _C \n(.C
.cp 0
+.
.de tty-char
-.if !c\\$1 .char \\$1 "\\$2
+. if !c\\$1 .char \\$1 "\\$2
..
-.ie c\(a- .ds tty-rn \(a-
-.el .ds tty-rn \v'-1m'_\v'+1m'
-.tty-char \(tm tm
-.tty-char \(rn \*[tty-rn]
-.tty-char \(ua \z|^
-.tty-char \(da \z|v
-.tty-char \(sc S
-.tty-char \(ct \z/c
-.tty-char \(dg \z|-
-.tty-char \(dd \z|=
-.tty-char \(ib (\z=_
-.tty-char \(ip \z=_)
-.tty-char \(sb (=
-.tty-char \(sp =)
-.tty-char \(if oo
-.tty-char \(pt oc
-.tty-char \(es {}
-.tty-char \(ca (^)
-.tty-char \(cu U
-.tty-char \(de o
-.tty-char \(di -:-
-.tty-char \(no ~
-.tty-char \(gr \Z'\*[tty-rn]'V
-.tty-char \(is \z'\z,I
-.tty-char \(mo E
-.tty-char \(pd a
-.tty-char \(sr \e/
-.tty-char \(*C \z_H
-.tty-char \(*D \z_/\z_\e
-.tty-char \(*F \zIO
-.tty-char \(*G |\*[tty-rn]
-.tty-char \(*H \z-O
-.tty-char \(*L /\e
-.tty-char \(*P TT
-.tty-char \(*Q \zIY
-.tty-char \(*S \z_\Z'\*[tty-rn]'>
-.tty-char \(*W \z_O
-.if c\(ss .tty-char \(*b \(ss
-.tty-char \(*b B
-.tty-char \(*a a
-.tty-char \(*c \z,E
-.tty-char \(*d d
-.tty-char \(*e e
-.tty-char \(*f \z|o
-.tty-char \(+f \z|o
-.tty-char \(*g y
-.tty-char \(*h \z-0
-.tty-char \(+h \z-0
-.tty-char \(*i i
-.tty-char \(*k k
-.tty-char \(*l \z>\e
-.tty-char \(*m \z,u
-.tty-char \(*n v
-.tty-char \(*p \z-n
-.tty-char \(+p \z-w
-.tty-char \(*q \z|u
-.tty-char \(*r p
-.tty-char \(*s \z-o
-.tty-char \(*t \z~t
-.tty-char \(*u u
-.tty-char \(*w w
-.tty-char \(*x x
-.tty-char \(*y n
-.tty-char \(*z \z,C
-.tty-char \(ts s
-.\" Definition of \(ss should follow that of \(*b.
-.tty-char \(ss B
-.tty-char \(c* \zO\(mu
-.tty-char \(c+ \zO+
-.tty-char \(AN ^
-.tty-char \(OR v
-.tty-char \(uA \z=^
-.tty-char \(dA \z=v
-.if c\(md .tty-char \(pc \(md
-.if c\(pc .tty-char \(md \(pc
-.if c\(pc .tty-char \(a. \(pc
-.tty-char \(Im I
-.tty-char \(Re R
-.tty-char \(/L \z/L
-.tty-char \(/l \z/l
-.tty-char \(%0 %o
-.tty-char \(ao o
-.tty-char \(a" """"
-.tty-char \(ab \z'`
-.tty-char \(ah v
-.tty-char \(ho \(ac
-.tty-char \(/_ \z_/
-.tty-char \(=~ =~
-.tty-char \(Ah N
-.tty-char \(CR _|
-.tty-char \(fa \z-V
-.tty-char \(nm \z/E
-.tty-char \(pp \z_|
-.tty-char \(sd ''
-.tty-char \(st -)
-.tty-char \(te 3
-.if c\(md .tty-char \(tf .\(md.
-.tty-char \(tf .:.
-.tty-char \(wp p
-.tty-char \(~~ ~~
-.tty-char \(Fn \z,f
-.tty-char \(Bq ,,
-.tty-char \(bq ,
-.tty-char \(lz <>
+.
+.ie c\[a-] \
+. ds tty-rn \[a-]
+.el \
+. ds tty-rn \v'-1m'_\v'+1m'
+.tty-char \[tm] tm
+.tty-char \[rn] \*[tty-rn]
+.tty-char \[ua] \z|^
+.tty-char \[da] \z|v
+.tty-char \[sc] S
+.tty-char \[ct] \z/c
+.tty-char \[dg] \z|-
+.tty-char \[dd] \z|=
+.tty-char \[ib] (\z=_
+.tty-char \[ip] \z=_)
+.tty-char \[sb] (=
+.tty-char \[sp] =)
+.tty-char \[if] oo
+.tty-char \[pt] oc
+.tty-char \[es] {}
+.tty-char \[ca] (^)
+.tty-char \[cu] U
+.tty-char \[de] o
+.tty-char \[di] -:-
+.tty-char \[tdi] -:-
+.tty-char \[no] ~
+.tty-char \[gr] \Z'\*[tty-rn]'V
+.tty-char \[is] \z'\z,I
+.tty-char \[mo] E
+.tty-char \[pd] a
+.tty-char \[sr] \e/
+.tty-char \[*C] \z_H
+.tty-char \[*D] \z_/\z_\e
+.tty-char \[*F] \zIO
+.tty-char \[*G] |\*[tty-rn]
+.tty-char \[*H] \z-O
+.tty-char \[*L] /\e
+.tty-char \[*P] TT
+.tty-char \[*Q] \zIY
+.tty-char \[*S] \z_\Z'\*[tty-rn]'>
+.tty-char \[*W] \z_O
+.if c\[ss] .tty-char \[*b] \[ss]
+.tty-char \[*b] B
+.tty-char \[*a] a
+.tty-char \[*c] \z,E
+.tty-char \[*d] d
+.tty-char \[*e] e
+.tty-char \[*f] \z|o
+.tty-char \[+f] \z|o
+.tty-char \[*g] y
+.tty-char \[*h] \z-0
+.tty-char \[+h] \z-0
+.tty-char \[*i] i
+.tty-char \[*k] k
+.tty-char \[*l] \z>\e
+.tty-char \[*m] \z,u
+.tty-char \[*n] v
+.tty-char \[*p] \z-n
+.tty-char \[+p] \z-w
+.tty-char \[*q] \z|u
+.tty-char \[*r] p
+.tty-char \[*s] \z-o
+.tty-char \[*t] \z~t
+.tty-char \[*u] u
+.tty-char \[*w] w
+.tty-char \[*x] x
+.tty-char \[*y] n
+.tty-char \[*z] \z,C
+.tty-char \[ts] s
+.\" Definition of \[ss] should follow that of \[*b].
+.tty-char \[ss] B
+.tty-char \[c*] \zO\[mu]
+.tty-char \[c+] \zO+
+.tty-char \[AN] ^
+.tty-char \[OR] v
+.tty-char \[uA] \z=^
+.tty-char \[dA] \z=v
+.if c\[md] .tty-char \[pc] \[md]
+.if c\[pc] .tty-char \[md] \[pc]
+.if c\[pc] .tty-char \[a.] \[pc]
+.tty-char \[Im] I
+.tty-char \[Re] R
+.tty-char \[/L] \z/L
+.tty-char \[/l] \z/l
+.tty-char \[%0] %o
+.tty-char \[ao] o
+.tty-char \[a"] """"
+.tty-char \[ab] \z'`
+.tty-char \[ah] v
+.tty-char \[ho] \[ac]
+.tty-char \[/_] \z_/
+.tty-char \[=~] =~
+.tty-char \[Ah] N
+.tty-char \[CR] _|
+.tty-char \[fa] \z-V
+.tty-char \[nm] \z/E
+.tty-char \[pp] \z_|
+.tty-char \[sd] ''
+.tty-char \[st] -)
+.tty-char \[te] 3
+.if c\[md] .tty-char \[tf] .\[md].
+.tty-char \[tf] .:.
+.tty-char \[wp] p
+.tty-char \[~~] ~~
+.tty-char \[Fn] \z,f
+.tty-char \[Bq] ,,
+.tty-char \[bq] ,
+.tty-char \[lz] <>
.\" Latin-1 characters
-.tty-char \(r! \z,i
-.tty-char \(Po \z-L
-.tty-char \(Cs \zox
-.tty-char \(Ye \z=Y
-.tty-char \(bb |
-.tty-char \(ad """"
-.tty-char \(Of \z_a
-.tty-char \(Fo <<
-.tty-char \(a- \*[tty-rn]
-.tty-char \(S2 2
-.tty-char \(S3 3
-.tty-char \(ps 9|
-.tty-char \(md .
-.tty-char \(pc .
-.tty-char \(ac ,
-.tty-char \(S1 1
-.tty-char \(Om \z_o
-.tty-char \(Fc >>
-.tty-char \(r? \z'c
-.tty-char \(`A \z`A
-.tty-char \('A \z'A
-.tty-char \(^A \z^A
-.tty-char \(~A \z~A
-.tty-char \(:A \z"A
-.tty-char \(oA \zoA
-.tty-char \(,C \z,C
-.tty-char \(`E \z`E
-.tty-char \('E \z'E
-.tty-char \(^E \z^E
-.tty-char \(:E \z"E
-.tty-char \(`I \z`I
-.tty-char \('I \z'I
-.tty-char \(^I \z^I
-.tty-char \(:I \z"I
-.tty-char \(-D \z-D
-.tty-char \(~N \z~N
-.tty-char \(`O \z`O
-.tty-char \('O \z'O
-.tty-char \(^O \z^O
-.tty-char \(~O \z~O
-.tty-char \(:O \z"O
-.tty-char \(/O \z/O
-.tty-char \(`U \z`U
-.tty-char \('U \z'U
-.tty-char \(^U \z^U
-.tty-char \(:U \z"U
-.tty-char \('Y \z'Y
-.tty-char \(TP \zIb
-.tty-char \(`a \z`a
-.tty-char \('a \z'a
-.tty-char \(^a \z^a
-.tty-char \(~a \z~a
-.tty-char \(:a \z"a
-.tty-char \(oa \zoa
-.tty-char \(,c \z,c
-.tty-char \(`e \z`e
-.tty-char \('e \z'e
-.tty-char \(^e \z^e
-.tty-char \(:e \z"e
-.tty-char \(`i \z`i
-.tty-char \('i \z'i
-.tty-char \(^i \z^i
-.tty-char \(:i \z"i
-.tty-char \(Sd \z`\z'o
-.tty-char \(~n \z~n
-.tty-char \(`o \z`o
-.tty-char \('o \z'o
-.tty-char \(^o \z^o
-.tty-char \(~o \z~o
-.tty-char \(:o \z"o
-.tty-char \(/o \z/o
-.tty-char \(`u \z`u
-.tty-char \('u \z'u
-.tty-char \(^u \z^u
-.tty-char \(:u \z"u
-.tty-char \('y \z'y
-.tty-char \(Tp \zpb
-.tty-char \(:y \z"y
-.\"tty-char \(:y \ij
+.tty-char \[r!] \z,i
+.tty-char \[Po] \z-L
+.tty-char \[Cs] \zox
+.tty-char \[Ye] \z=Y
+.tty-char \[bb] |
+.tty-char \[ad] """"
+.tty-char \[Of] \z_a
+.tty-char \[Fo] <<
+.tty-char \[a-] \*[tty-rn]
+.tty-char \[S2] 2
+.tty-char \[S3] 3
+.tty-char \[ps] 9|
+.tty-char \[md] .
+.tty-char \[pc] .
+.tty-char \[ac] ,
+.tty-char \[S1] 1
+.tty-char \[Om] \z_o
+.tty-char \[Fc] >>
+.tty-char \[r?] \z'c
+.tty-char \[`A] \z`A
+.tty-char \['A] \z'A
+.tty-char \[^A] \z^A
+.tty-char \[~A] \z~A
+.tty-char \[:A] \z"A
+.tty-char \[oA] \zoA
+.tty-char \[,C] \z,C
+.tty-char \[`E] \z`E
+.tty-char \['E] \z'E
+.tty-char \[^E] \z^E
+.tty-char \[:E] \z"E
+.tty-char \[`I] \z`I
+.tty-char \['I] \z'I
+.tty-char \[^I] \z^I
+.tty-char \[:I] \z"I
+.tty-char \[-D] \z-D
+.tty-char \[~N] \z~N
+.tty-char \[`O] \z`O
+.tty-char \['O] \z'O
+.tty-char \[^O] \z^O
+.tty-char \[~O] \z~O
+.tty-char \[:O] \z"O
+.tty-char \[/O] \z/O
+.tty-char \[`U] \z`U
+.tty-char \['U] \z'U
+.tty-char \[^U] \z^U
+.tty-char \[:U] \z"U
+.tty-char \['Y] \z'Y
+.tty-char \[TP] \zIb
+.tty-char \[`a] \z`a
+.tty-char \['a] \z'a
+.tty-char \[^a] \z^a
+.tty-char \[~a] \z~a
+.tty-char \[:a] \z"a
+.tty-char \[oa] \zoa
+.tty-char \[,c] \z,c
+.tty-char \[`e] \z`e
+.tty-char \['e] \z'e
+.tty-char \[^e] \z^e
+.tty-char \[:e] \z"e
+.tty-char \[`i] \z`i
+.tty-char \['i] \z'i
+.tty-char \[^i] \z^i
+.tty-char \[:i] \z"i
+.tty-char \[Sd] \z`\z'o
+.tty-char \[~n] \z~n
+.tty-char \[`o] \z`o
+.tty-char \['o] \z'o
+.tty-char \[^o] \z^o
+.tty-char \[~o] \z~o
+.tty-char \[:o] \z"o
+.tty-char \[/o] \z/o
+.tty-char \[`u] \z`u
+.tty-char \['u] \z'u
+.tty-char \[^u] \z^u
+.tty-char \[:u] \z"u
+.tty-char \['y] \z'y
+.tty-char \[Tp] \zpb
+.tty-char \[:y] \z"y
+.\"tty-char \[:y] \ij
.tty-char \[arrowvertex] |
-.cp \n(_C
-.if !'\*(.T'cp1047' \
+.tty-char \[mc] \z,u
+.cp \n[_C]
+.
+.ie '\*(.T'cp1047' \
+. do mso cp1047.tmac
+.el \
. do mso latin1.tmac
diff --git a/contrib/groff/tmac/tty.tmac b/contrib/groff/tmac/tty.tmac
index e680435..e6bd598 100644
--- a/contrib/groff/tmac/tty.tmac
+++ b/contrib/groff/tmac/tty.tmac
@@ -2,49 +2,75 @@
.\"
.nr _C \n(.C
.cp 0
+.
.nroff
+.ta T 0.8i
+.
.\" Don't warn about non-existent fonts.
.warn \n[.warn]-(\n[.warn]/131072%2*131072)
+.
.po 0
-.if c\[shc] .shc \[shc]
-.de tty-char
-.if !c\\$1 .char \\$1 "\\$2
-..
-.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
-.tty-char \(34 3/4
-.tty-char \(ff ff
-.tty-char \(fi fi
-.tty-char \(fl fl
-.tty-char \(Fi ffi
-.tty-char \(Fl ffl
-.tty-char \(<- <-
-.tty-char \(-> ->
-.tty-char \(<> <->
-.tty-char \(em --
-.tty-char \(+- +-
-.tty-char \(co (C)
-.tty-char \(<= <=
-.tty-char \(>= >=
-.tty-char \(!= !=
-.tty-char \(== ==
-.tty-char \(~= ~=
-.tty-char \(sq []
-.tty-char \(lh <=
-.tty-char \(rh =>
-.tty-char \(lA <=
-.tty-char \(rA =>
-.tty-char \(hA <=>
-.tty-char \(rg (R)
-.tty-char \(OE OE
-.tty-char \(oe oe
-.tty-char \(AE AE
-.tty-char \(ae ae
-.tty-char \(an -
-.cp \n(_C
+.
+.ie c\[pc] \
+. tr \[bu]\[pc]
+.el \
+. if c\[md] \
+. tr \[bu]\[md]
+.
+.fchar \[bu] \z+o
+.fchar \[14] 1/4
+.fchar \[12] 1/2
+.fchar \[34] 3/4
+.fchar \[ff] ff
+.fchar \[fi] fi
+.fchar \[fl] fl
+.fchar \[Fi] ffi
+.fchar \[Fl] ffl
+.fchar \[<-] <-
+.fchar \[->] ->
+.fchar \[<>] <->
+.fchar \[em] --
+.fchar \[+-] +-
+.fchar \[t+-] +-
+.fchar \[co] (C)
+.fchar \[<=] <=
+.fchar \[>=] >=
+.fchar \[!=] !=
+.fchar \[==] ==
+.fchar \[~=] ~=
+.fchar \[sq] []
+.fchar \[lh] <=
+.fchar \[rh] =>
+.fchar \[lA] <=
+.fchar \[rA] =>
+.fchar \[hA] <=>
+.fchar \[rg] (R)
+.fchar \[OE] OE
+.fchar \[oe] oe
+.fchar \[AE] AE
+.fchar \[ae] ae
+.fchar \[an] -
+.fchar \[eu] EUR
+.fchar \[Eu] EUR
+.
+.\" color definitions
+.defcolor black rgb #000000
+.defcolor red rgb #ff0000
+.defcolor green rgb #00ff00
+.defcolor blue rgb #0000ff
+.defcolor yellow rgb #ffff00
+.defcolor magenta rgb #ff00ff
+.defcolor cyan rgb #00ffff
+.defcolor white rgb #ffffff
+.
+.cp \n[_C]
+.
+.ie '\*(.T'cp1047' \
+. do mso cp1047.tmac
+.el \
+. if '\*(.T'latin1' \
+. do mso latin1.tmac
+.
.\" If you want the character definitions in tty-char.tmac to be loaded
.\" automatically, remove the `\"' from the next line.
.\"do mso tty-char.tmac
diff --git a/contrib/groff/tmac/www.tmac b/contrib/groff/tmac/www.tmac
index 0bef6b6..0db647e 100644
--- a/contrib/groff/tmac/www.tmac
+++ b/contrib/groff/tmac/www.tmac
@@ -1,157 +1,541 @@
.\" www.tmac
.\"
.\" A simple set of macros to provide HTML documents with basic
-.\" www functionality. It will work with any macro set.
+.\" www functionality. It should work with any macro set.
.\"
.nr _C \n(.C
.cp 0
+.
.nr www-html 0
-.if '\*(.T'html' .nr www-html 1
-.\"
+.if '\*[.T]'html' .nr www-html 1
+.
+.\" set up www-image-template
+.\" (cannot do this in html.tmac as the image device must
+.\" also know about this string)
+.
+.if !d www-image-template \
+. ds www-image-template
+.
+.if r ps4html \{\
+. \" remove the title command when we are generating images for html
+. \" (stops a title accidentally appearing inside an image)
+. di www-notitle
+. tl ''''
+. di
+. rm tl
+. de tl
+. .
+.\}
+.
+.de www-error
+. tm \\n[.F]:\\n[.c]: macro error: \\$*
+..
.\"
+.\" the main auxiliary macro for the HTML interface
.\"
.de HTML
. if \\n[www-html] \{\
-.\" the following line makes the vertical mode leave, so to say
-\&
-\X^html:\\$*^
+. \" the following line makes the vertical mode leave, so to say
+. nop \&
+. nop \X^html:\\$*^
. \}
..
-.de HTMLINDEX
-. if \\n[www-html] \X^index:\\$*^
+.\"
+.\" an auxiliary macro for HTML (without following space)
+.\"
+.de HTML-NS
+. if \\n[www-html] \
+. nop \X^html:\\$*^\c
+..
+.\"
+.\" HX n
+.\"
+.\" Automatic heading level cut off.
+.\"
+.\" N is the depth limit of automatically linked headings. So a depth
+.\" of 2 would cause grohtml to generate a list of links for `.NH 1' and
+.\" `.NH 2' but not for `.NH 3'.
+.\"
+.de HX
+. if \\n[www-html] \
+. nop \X^index:\\$*^
..
.\"
-.\" BODYCOLOR - $1 is foreground color
-.\" $2 is background color
-.\" $3 is the color of an active hypertext link
-.\" $4 is the color of a hypertext link not yet visited
-.\" $5 is the color of a visited hypertext link
+.\" BCL foreground background active not-visited visited
.\"
-.de BODYCOLOR
+.de BCL
. HTML <body text=\\$1 bgcolor=\\$2 link=\\$3 alink=\\$4 vlink=\\$5>
..
.\"
-.\" BACKGROUND - $1 is the background image file
+.\" BGIMG imagefile
.\"
-.de BACKGROUND
+.de BGIMG
. HTML <body background=\\$1>
..
.\"
-.\" URL - $1 is the classical underlined blue text
-.\" $2 is the url
-.\" $3 is optional stuff printed immediately after $3
+.\" URL url description [after]
.\"
.de URL
+. ie \\n[www-html] \
+. HTML <a href="\\$1">\\$2</a>\\$3
+. el \
+. nop \m[blue]\\$2\m[] \%\[la]\f[C]\\$1\f[]\[ra]\\$3
+..
+.\"
+.\" FTP url description [after]
+.\"
+.\" Same as UTL.
+.\"
+.als FTP URL
+.\"
+.\" MTO address description [after]
+.\"
+.\" ADDRESS is the email address (without the `mailto:' prefix).
+.\"
+.\" DESCRIPTION is the optional name. If an empty argument is given,
+.\" ADDRESS is used instead.
+.\"
+.\" AFTER is optional stuff printed immediately after ADDRESS
+.\" (resp. DESCRIPTION).
+.\"
+.\" Example:
+.\"
+.\" Foobar has been written by
+.\" .MTO fred@foo.bar "Fredrick Bloggs" .
+.\"
+.de MTO
. ie \\n[www-html] \{\
-. HTML <a href="\\$2">\\$1</a>\\$3
+. ie '\\$2'' \
+. URL mailto:\\$1 \\$1 "\\$3"
+. el \
+. URL mailto:\\$1 "\\$2" "\\$3"
. \}
. el \{\
-\\$1 \%\(la\fC\\$2\fP\(ra\\$3
+. ie '\\$2'' \
+. nop \%\m[blue]\f[C]\\$1\f[]\m[]\\$3
+. el \
+. nop \m[blue]\\$2\m[] \%\[la]\f[C]\\$1\f[]\[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
+.\" TAG name
+.\"
+.\" Generate an html name NAME.
+.\"
+.de TAG
+. HTML <a name="\\$1"></a>
+..
+.\"
+.\" IMG [-R|-L|-C] filename [width] [height]
+.\"
+.\" Include an image of any type (will only work for -Thtml).
+.\"
+.\" Alignment is centered by default (-C).
+.\" Default value for WIDTH is 1i.
+.\" If HEIGHT is not given, WIDTH is used as the height.
+.\"
+.de IMG
. ie \\n[www-html] \{\
-. HTML <a href=\\$2>\\$1</a>\\$3
+. ie '\\$2'-R' \
+. HTML-TAG ".right-image"
+. el \{\
+. ie '\\$2'-L' \
+. HTML-TAG ".left-image"
+. el \
+. HTML-TAG ".centered-image"
+. \}
+. nr www-width 100
+. if !'\\$3'' \
+. nr www-width \\$3
+. nr www-height \\n[www-width]
+. if !'\\$4'' \
+. nr www-height \\$4
+. HTML <img src="\\$1" width=\\n[www-width] height=\\n[www-height]>
. \}
-. el \{\
-\\$1 \%\(la\fC\\$2\fP\(ra\\$3
+. el \
+. nop \[la]\f[C]\\$1\f[]\[ra]
+..
+.\"
+.\" HTML-TAG
+.\"
+.\" Emit a tag for grohtml. This is an internal macro.
+.\"
+.de HTML-TAG
+. if \\n[www-html] \{\
+. \" the following line makes the vertical mode leave, so to say
+. nop \&
+. nop \X^html-tag:\\$*^
. \}
..
.\"
-.\" MAILTO - generate html email reference
-.\" $1 is the email address (without the `mailto:' prefix)
-.\" $2 is the optional name
-.\" $3 is optional stuff printed immediately after $2 (resp. $1)
+.\" HTML-TAG-NS
.\"
-.\" example:
+.\" Emit a tag for grohtml (without a space). This is an internal macro.
.\"
-.\" Foobar has been written by
-.\" .MAILTO fred@foo.bar "Fredrick Bloggs" .
+.de HTML-TAG-NS
+. if \\n[www-html] \
+. nop \X^html-tag:\\$*^\c
+..
+.\"
+.\" PIMG [-R|-L|-C] filename [width] [height]
.\"
-.de MAILTO
+.\" Include a png image. It will work for -Tps and -Thtml.
+.\" The default value for WIDTH and HEIGHT is zero; the default
+.\" alignment is centering (-C).
.\"
-.\" force reset after a potential heading by performing some motion..
-.\" how do we do this --fixme--
-.\" \h'\w' ''\h'-\w' '' doesn't work..
+.\" Note: This macro can only be used with the `-U' option of groff,
+.\" activating unsafe mode, if not used with -Thtml; the PNG image
+.\" is then converted to the EPS format using netpbm utilities.
+.\"
+.de PIMG
. ie \\n[www-html] \{\
-. ie '\\$2'' \{\
-. HTML "<a href=mailto:\\$1>\\$1</a>\\$3"
+. ie '\\$1'-R' \
+. HTML-TAG ".right-image"
+. el \{\
+. ie '\\$1'-L' \
+. HTML-TAG ".left-image"
+. el \
+. HTML-TAG ".centered-image"
+. \}
+. nr www-width 0
+. nr www-height 0
+. if !'\\$3'' \
+. nr www-width (\\$3 * 100 / 240)
+. if !'\\$4'' \
+. nr www-height (\\$4 * 100 / 240)
+. ie (\\n[www-width] == 0) \{\
+. ie (\\n[www-height] == 0) \
+. HTML <img src="\\$2">
+. el \
+. HTML <img src="\\$1" height=\\n[www-height]>
. \}
. el \{\
-. HTML "<a href=mailto:\\$1>\\$2</a>\\$3"
+. ie (\\n[www-height] == 0) \
+. HTML <img src="\\$2" width=\\n[www-width]>
+. el \
+. HTML <img src="\\$2" width=\\n[www-width] height=\\n[www-height]>
. \}
. \}
. el \{\
-. ie '\\$2'' \{\
-\fC\\$1\fP\\$3
+. if !r ps4html \{\
+. www-make-unique-name
+. sy pngtopnm \\$2 | pnmcrop -white | pnmtops -noturn > \\*[www-unique-name].eps
+. ie '\\$1'-C' \
+. PSPIC \\*[www-unique-name].eps \\$3 \\$4
+. el \
+. PSPIC \\$1 \\*[www-unique-name].eps \\$3 \\$4
. \}
-. el \{\
-\\$2 \%\(la\fC\\$1\fP\(ra\\$3
+. \}
+..
+.
+.nr www-left-ll-trap 0
+.nr www-left-po-trap 0
+.nr www-right-ll-trap 0
+.
+.de www-finish-left-po
+. po -\\n[www-left-indent]u
+. wh \\n[www-left-po-trap]u
+. nr www-left-indent 0
+..
+.
+.de www-finish-right-ll
+. ll +\\n[www-right-indent]u
+. \" now see whether we need to inline www-finish-left-ll
+. if (\\n[www-left-ll-trap]u > 0) \
+. if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-ll-trap]u) \{\
+. mk www-left-po-trap
+. nr www-left-po-trap +1v
+. wh \\n[www-left-po-trap]u www-finish-left-po
+. ll +\\n[www-left-indent]u
+. wh \\n[www-left-ll-trap]u
+. nr www-left-ll-trap 0
+. \}
+. \" and see whether we need to inline www-finish-left-po
+. if (\\n[www-left-po-trap]u > 0) \
+. if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-po-trap]u) \{\
+. po -\\n[www-left-indent]u
+. wh \\n[www-left-po-trap]u
+. nr www-left-indent 0
+. \}
+. wh \\n[www-right-ll-trap]u
+. nr www-right-ll-trap 0
+..
+.
+.de www-finish-left-ll
+. if (\\n[www-right-ll-trap] > 0) \
+. if ((\\n[www-left-ll-trap] + 1v) >= \\n[www-right-ll-trap]) \{\
+. ll +\\n[www-right-indent]u
+. nr www-right-ll-trap 0
+. \}
+. mk www-left-po-trap
+. nr www-left-po-trap +1v
+. wh \\n[www-left-po-trap]u www-finish-left-po
+. ll +\\n[www-left-indent]u
+. wh \\n[www-left-ll-trap]u
+. nr www-left-ll-trap 0
+..
+.\"
+.\" MPIMG [-R|-L] filename [width] [height]
+.\"
+.\" Include a png image and wrap text around it. It will work for
+.\" -Tps and -Thtml. The default value for WIDTH is 1i; default value
+.\" for HEIGHT is WIDTH; the default alignment is left (-L).
+.\"
+.\" Note: This macro can only be used with the `-U' option of groff,
+.\" activating unsafe mode, if not used with -Thtml; the PNG image
+.\" is then converted to the EPS format using netpbm utilities.
+.\"
+.de MPIMG
+. nr www-width 1i
+. if !'\\$3'' \
+. nr www-width \\$3
+. nr www-height \\n[www-width]
+. if !'\\$4'' \
+. nr www-height \\$4
+. nr www-width (\\n[www-width] * 100 / 240)
+. nr www-height (\\n[www-height] * 100 / 240)
+. ie \\n[www-html] \{\
+. ie '\\$1'-R' \
+. HTML <img src="\\$2" align=right width=\\n[www-width] height=\\n[www-height]>
+. el \
+. HTML <img src="\\$2" align=left width=\\n[www-width] height=\\n[www-height]>
+. \}
+. el \{\
+. if !r ps4html \{\
+. www-make-unique-name
+. sy pngtopnm \\$2 | pnmcrop -white | pnmtops -noturn > \\*[www-unique-name].eps
+. ie '\\$1'-R' \{\
+. \" we must now disable a possible left image trap
+. sp -1
+. if (\\n[www-left-ll-trap] > 0) \
+. wh \\n[www-left-ll-trap]u
+. if (\\n[www-left-po-trap] > 0) \
+. wh \\n[www-left-po-trap]u
+. PSPIC -R \\*[www-unique-name].eps \\$3 \\$4
+. sp -\\n[ps-desht]u
+. nr www-right-indent \\n[ps-deswid]u
+. ll -\\n[www-right-indent]u
+. mk www-right-ll-trap
+. nr www-right-ll-trap +(\\n[ps-desht]u - 1v)
+. wh \\n[www-right-ll-trap]u www-finish-right-ll
+. \" now restore possible left trap
+. if (\\n[www-left-ll-trap] > 0) \
+. wh \\n[www-left-ll-trap]u www-finish-left-ll
+. if (\\n[www-left-po-trap] > 0) \
+. wh \\n[www-left-po-trap]u
+. \}
+. el \{\
+. \" we must now disable a possible right image trap
+. if (\\n[www-right-ll-trap] > 0) \
+. wh \\n[www-right-ll-trap]u
+. PSPIC -L \\*[www-unique-name].eps \\$3 \\$4
+. sp -\\n[ps-desht]u
+. nr www-left-indent \\n[ps-deswid]u
+. po +\\n[www-left-indent]u
+. ll -\\n[www-left-indent]u
+. mk www-left-ll-trap
+. nr www-left-ll-trap +(\\n[ps-desht]u - 1v)
+. wh \\n[www-left-ll-trap]u www-finish-left-ll
+. \" now restore possible right trap
+. if (\\n[www-right-ll-trap] > 0) \
+. wh \\n[www-right-ll-trap]u www-finish-right-ll
+. \}
. \}
. \}
..
.\"
-.\" TAG - generate an html name $1
+.\" HnS n
.\"
-.de TAG
-. HTML <a name="\\$1"></a>
+.\" Begin heading. Heading level is N.
+.\"
+.\" HnE
+.\"
+.\" End heading.
+.\"
+.\" If your heading contains URL, FTP, MTO macros you might wish to
+.\" disable automatic links to headings. This can be done via `-P-l'
+.\" from the command line or by using a cakk to `.HX 0'.
+.\"
+.nr www-heading-no -1
+.
+.de HnS
+. ie '\\$1'' \
+. nr www-heading-no 1
+. el \
+. nr www-heading-no \\$1
+. HTML-TAG ".NH \\n[www-heading-no]"
+..
+.
+.de HnE
+. if (\\n[www-heading-no] == -1) \
+. www-error "HnE found without a corresponding HnS"
+. br
+..
+.\"
+.\" LK
+.\"
+.\" Emit the automatically collected links derived from
+.\" section/numbered headings at this position.
+.\"
+.de LK
+. HTML-TAG ".links"
..
.\"
-.\" IMAGE - reference an image
-.\" $1 is the image file
-.\" $2 is the alignment r, l or c (center by default)
-.\" $3 is the x width (default if absent 400 pixels)
-.\" $4 is the y width (default if absent is the x value)
+.\" HR
+.\"
+.\" Produce a horizontal line
.\"
-.de IMAGE
+.de HR
. ie \\n[www-html] \{\
-. ie '\\$2'r' .HTML-TAG ".right-image"
-. el \{\
-. ie '\\$2'l' .HTML-TAG ".left-image"
-. el .HTML-TAG ".centered-image"
-. \}
-. nr HTMLWIDTH 400
-. if !'\\$3'' \{\
-. nr HTMLWIDTH \\$3
-. \}
-. nr HTMLHEIGHT \\n[HTMLWIDTH]
-. if !'\\$4'' \{\
-. nr HTMLHEIGHT \\$4
-. \}
-. HTML <img src="\\$1" width=\\n[HTMLWIDTH] height=\\n[HTMLHEIGHT]>
+. ti 0
+. HTML-NS <hr>
. \}
+. el \
+. sp
+..
+.\"
+.\" NHR
+.\"
+.\" Suppresses the generation of the top and bottom rules which grohtml
+.\" emits by default.
+.\"
+.de NHR
+. HTML-TAG ".no-auto-rule"
+..
+.\"
+.\" www-end-nowhere - end of input trap called to finish diversion.
+.\"
+.de www-end-nowhere
+. di
+..
+.\"
+.\" HTL
+.\"
+.\" Generate an HTML title only. This differs from the -ms .TL macro
+.\" which generates both an HTML title and a H1 heading.
+.\"
+.\" This is useful when an author wishes to use a HTML title as search
+.\" engine fodder but a graphic title in the document.
+.\"
+.\" The macro terminates when a space or break is seen (.sp, .br).
+.\"
+.de HTL
+. HTML-TAG ".html-tl"
+. if !\\n[www-html] \{\
+. di www-nowhere
+. it 2 www-end-nowhere
+. \}
+..
+.
+.ds www-level1 \[bu]\ \ \"
+.ds www-level2 \[sq]\ \ \"
+.ds www-level3 \[ci]\ \ \"
+.nr www-level 0
+.nr www-depth 0
+.
+.\"
+.\" Auxiliary macro for ULS.
+.\"
+.de www-push-level
+. nr www-level +1
+. if (\\n[www-level] > 3) \
+. www-error "too many levels of indentation (\\n[www-level])"
+..
+.\"
+.\" Auxiliary macro for ULE.
+.\"
+.de www-pop-level
+. if !\\n[www-level] \
+. www-error "trying to terminate a list which does not exist"
+. nr www-level -1
+..
+.\"
+.\" ULS
+.\"
+.\" Start an unordered list.
+.\"
+.de ULS
+. www-push-level
+. ie \\n[www-html] \
+. HTML "<ul>"
. el \{\
-. B1
-\(la\fC\\$1\fP\(ra
-. B2
+. if (\\n[www-level] == 1) \
+. nr www-depth \\n[.i]
+. nr www-depth +\w'\\*[www-level\\n[www-level]]'u
. \}
..
-.\" HTML-TAG - emit a tag for the new grohtml
-.de HTML-TAG
-. if \\n[www-html] \{\
-.\" the following line makes the vertical mode leave, so to say
-\&
-\X^html-tag:\\$*^
+.\"
+.\" ULE
+.\"
+.\" End an unordered list.
+.\"
+.de ULE
+. ie \\n[www-html] \
+. HTML "</ul>"
+. el \{\
+. nr www-depth -\w'\\*[www-level\\n[www-level]]'u
+. in \\n[www-depth]
. \}
+. www-pop-level
..
-.\" LINKS - emit the automatically collected links derived from section/numbered
-.\" headings at this position.
-.de LINKS
-. HTML-TAG ".links"
+.\"
+.\" LI
+.\"
+.\" Insert a list item.
+.\"
+.de LI
+. ie \\n[www-html] \
+. HTML "<li>"
+. el \{\
+. in \\n[www-depth]u
+. ti -\w'\\*[www-level\\n[www-level]]'u
+. nop \\*[www-level\\n[www-level]]\c
+. \}
..
.\"
-.\" LINE - produce a horizontal line
-.\"
-.de LINE
-. ti 0
-. HTML <hr>
+.\" DC l text [color]
+.\"
+.\" L is the letter to be dropped and enlarged.
+.\"
+.\" TEXT is the following text whose height the first letter should not
+.\" exceed.
+.\"
+.\" COLOR is the optional color of the dropped letter (default black).
+.\"
+.de DC
+. ds www-dropcolor black
+. if !'\\$3'' \
+. ds www-dropcolor \\$3
+. ie '\*(.T'html' \{\
+. www-make-unique-name
+. MPIMG -L \\*[www-unique-name].png "(\\n[.v] * 2u)"
+. \}
+. el \{\
+. ie r ps4html \{\
+. www-make-unique-name
+. nop \O[5i\\*[www-unique-name].png]\O[1]
+. nop \m[\\*[www-dropcolor]]\s[40]\O[3]\\$1\O[4]\s0\m[]
+. nop \O[2]\O[1]
+. \}
+. el \{\
+. nr dummy \w'\\$1'u
+. nr dcht ((\\n[.v] + \\n[rst]) * \\n[.ps] / \\n[rst])
+. char \[dcap] \m[\\*[www-dropcolor]]\s'\\n[dcht]u'\\$1
+. nop \v'\\n[.v]u'\\[dcap]\v'-\\n[.v]u'\c
+' ti \w'\\[dcap]'u
+. \}
+. \}
+. nop \\$2
..
.\"
-.\" supplimentary macros used by other macro sets
+.\" now set up TS, TE, EQ, EN default macros
+.\"
+.do if !d TS .do ds TS HTML-IMAGE
+.do if !d TE .do ds TE HTML-IMAGE-END
+.do if !d EQ .do ds EQ HTML-IMAGE
+.do if !d EN .do ds EN HTML-IMAGE-END
+.\"
+.\" supplementary macros used by other macro sets
.\"
.\" here are some tags specially for -Tps or -Thtml when invoked by pre-html
.\" to generate png images from postscript.
@@ -160,59 +544,61 @@
.\" read back by pre-html
.\"
.de HTML-DO-IMAGE
-. if r ps4html .begin \{\
-. image \\$2 \\$1.png
-. bp
-. tl ''''
-\O[0]\O[1]
-. \}
-. if \\n[www-html] .begin \{\
-. image \\$2 \\$1.png
-\O[0]
-. \}
+. if r ps4html \
+. nop \O[5\\$2\\$1.png]\O[1]\O[3]
+. if \\n[www-html] \
+. nop \O[5\\$2\\$1.png]\O[0]\O[3]
..
.\"
.\" HTML-IMAGE-END - terminates an image for html
.\"
.de HTML-IMAGE-END
-. if r ps4html \O[2]\O[1]\O[4]
-. if \\n[www-html] \O[2]\O[1]\O[4]
+. if r ps4html \
+. nop \O[4]\O[2]\O[0]
+. if \\n[www-html] \
+. nop \O[4]\O[2]\O[1]
..
-.nr png-no 0
+.
+.nr www-png-no 0
+.
.\"
-.\" MAKE-UNIQUE-NAME - generates another unique name
+.\" www-make-unique-name - generates another unique name in string
+.\" `www-unique-name'
.\"
-.de MAKE-UNIQUE-NAME
-. nr png-no \\n[png-no]+1
-. ds HTML-UNIQUE-NAME \\n(.F-auto-\\n[png-no]
+.de www-make-unique-name
+. nr www-png-no +1
+. ds www-unique-name \\*[www-image-template]\\n[www-png-no]
..
.\"
-.\" HTML-IMAGE - is the same name as a tag generated from eqn/tbl/pic.
-.\" Although the tags generated via the preprocessor
-.\" are given image names by pre-html and troff.
-.\" The macros below can only be invoked by *other macro sets*
-.\" not user troff input since the contents of macro sets are
-.\" not seen by pre-html.
+.\" HTML-IMAGE and friends tell grohtml that this region of text needs
+.\" to be rendered as an image.
.\"
.de HTML-IMAGE
-.\" generates a centered image
-. MAKE-UNIQUE-NAME
-. HTML-DO-IMAGE \\*[HTML-UNIQUE-NAME] c
+. \" generates a centered image
+. www-make-unique-name
+. HTML-DO-IMAGE \\*[www-unique-name] c
..
+.
.de HTML-IMAGE-RIGHT
-. MAKE-UNIQUE-NAME
-. HTML-DO-IMAGE \\*[HTML-UNIQUE-NAME] r
+. www-make-unique-name
+. HTML-DO-IMAGE \\*[www-unique-name] r
..
+.
.de HTML-IMAGE-LEFT
-. MAKE-UNIQUE-NAME
-. HTML-DO-IMAGE \\*[HTML-UNIQUE-NAME] l
+. www-make-unique-name
+. HTML-DO-IMAGE \\*[www-unique-name] l
..
+.
.de HTML-IMAGE-INLINE
-. MAKE-UNIQUE-NAME
-. HTML-DO-IMAGE \\*[HTML-UNIQUE-NAME] i
+. www-make-unique-name
+. HTML-DO-IMAGE \\*[www-unique-name] i
..
+.
.if \n[www-html] \{\
. nh
. nr HY 0
.\}
+.if r ps4html .nop \O[0]
.cp \n(_C
+.
+.\" EOF
diff --git a/contrib/groff/win32-diffs b/contrib/groff/win32-diffs
index d664400..d68b497 100644
--- a/contrib/groff/win32-diffs
+++ b/contrib/groff/win32-diffs
@@ -1,6 +1,6 @@
-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
+diff -aruN groff-1.18/Makefile.msc groff-1.18.win32/Makefile.msc
+--- groff-1.18/Makefile.msc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/Makefile.msc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,36 @@
+
+
@@ -38,40 +38,40 @@ diff -aruN groff/Makefile.msc groff.win32/Makefile.msc
+ copy src\preproc\pic\pic.exe bin
+ copy src\preproc\tbl\tbl.exe bin
+ copy src\roff\troff\troff.exe bin
-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
+diff -aruN groff-1.18/bin/gs.cmd groff-1.18.win32/bin/gs.cmd
+--- groff-1.18/bin/gs.cmd Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/bin/gs.cmd Mon Jul 8 06:47:51 2002
@@ -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
+diff -aruN groff-1.18/bin/nroff.cmd groff-1.18.win32/bin/nroff.cmd
+--- groff-1.18/bin/nroff.cmd Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/bin/nroff.cmd Mon Jul 8 06:47:51 2002
@@ -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
+diff -aruN groff-1.18/bin/troff-dvi.cmd groff-1.18.win32/bin/troff-dvi.cmd
+--- groff-1.18/bin/troff-dvi.cmd Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/bin/troff-dvi.cmd Mon Jul 8 06:47:51 2002
@@ -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
+diff -aruN groff-1.18/bin/troff-lj.cmd groff-1.18.win32/bin/troff-lj.cmd
+--- groff-1.18/bin/troff-lj.cmd Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/bin/troff-lj.cmd Mon Jul 8 06:47:51 2002
@@ -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
+diff -aruN groff-1.18/bin/troff-ps.cmd groff-1.18.win32/bin/troff-ps.cmd
+--- groff-1.18/bin/troff-ps.cmd Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/bin/troff-ps.cmd Mon Jul 8 06:47:51 2002
@@ -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 @@
+diff -aruN groff-1.18/font/devascii/B groff-1.18.win32/font/devascii/B
+--- groff-1.18/font/devascii/B Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devascii/B Fri Jul 5 16:06:31 2002
+@@ -0,0 +1,168 @@
+name B
+internalname 2
+spacewidth 24
@@ -91,6 +91,7 @@ diff -aruN groff/font/devascii/B groff.win32/font/devascii/B
+aa "
+fm "
+aq "
++cq "
+( 24 0 0050
+) 24 0 0051
+* 24 0 0052
@@ -213,6 +214,7 @@ diff -aruN groff/font/devascii/B groff.win32/font/devascii/B
+w 24 0 0167
+x 24 0 0170
+mu "
++tmu "
+y 24 0 0171
+z 24 0 0172
+lC 24 0 0173
@@ -238,10 +240,10 @@ diff -aruN groff/font/devascii/B groff.win32/font/devascii/B
+~ "
+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 @@
+diff -aruN groff-1.18/font/devascii/BI groff-1.18.win32/font/devascii/BI
+--- groff-1.18/font/devascii/BI Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devascii/BI Fri Jul 5 16:06:31 2002
+@@ -0,0 +1,168 @@
+name BI
+internalname 3
+spacewidth 24
@@ -261,6 +263,7 @@ diff -aruN groff/font/devascii/BI groff.win32/font/devascii/BI
+aa "
+fm "
+aq "
++cq "
+( 24 0 0050
+) 24 0 0051
+* 24 0 0052
@@ -383,6 +386,7 @@ diff -aruN groff/font/devascii/BI groff.win32/font/devascii/BI
+w 24 0 0167
+x 24 0 0170
+mu "
++tmu "
+y 24 0 0171
+z 24 0 0172
+lC 24 0 0173
@@ -408,9 +412,9 @@ diff -aruN groff/font/devascii/BI groff.win32/font/devascii/BI
+~ "
+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
+diff -aruN groff-1.18/font/devascii/DESC groff-1.18.win32/font/devascii/DESC
+--- groff-1.18/font/devascii/DESC Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devascii/DESC Mon Jul 8 06:47:51 2002
@@ -0,0 +1,8 @@
+res 240
+hor 24
@@ -420,10 +424,10 @@ diff -aruN groff/font/devascii/DESC groff.win32/font/devascii/DESC
+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 @@
+diff -aruN groff-1.18/font/devascii/I groff-1.18.win32/font/devascii/I
+--- groff-1.18/font/devascii/I Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devascii/I Fri Jul 5 16:06:31 2002
+@@ -0,0 +1,168 @@
+name I
+internalname 1
+spacewidth 24
@@ -443,6 +447,7 @@ diff -aruN groff/font/devascii/I groff.win32/font/devascii/I
+aa "
+fm "
+aq "
++cq "
+( 24 0 0050
+) 24 0 0051
+* 24 0 0052
@@ -565,6 +570,7 @@ diff -aruN groff/font/devascii/I groff.win32/font/devascii/I
+w 24 0 0167
+x 24 0 0170
+mu "
++tmu "
+y 24 0 0171
+z 24 0 0172
+lC 24 0 0173
@@ -590,10 +596,10 @@ diff -aruN groff/font/devascii/I groff.win32/font/devascii/I
+~ "
+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 @@
+diff -aruN groff-1.18/font/devascii/R groff-1.18.win32/font/devascii/R
+--- groff-1.18/font/devascii/R Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devascii/R Fri Jul 5 16:06:31 2002
+@@ -0,0 +1,167 @@
+name R
+spacewidth 24
+charset
@@ -612,6 +618,7 @@ diff -aruN groff/font/devascii/R groff.win32/font/devascii/R
+aa "
+fm "
+aq "
++cq "
+( 24 0 0050
+) 24 0 0051
+* 24 0 0052
@@ -734,6 +741,7 @@ diff -aruN groff/font/devascii/R groff.win32/font/devascii/R
+w 24 0 0167
+x 24 0 0170
+mu "
++tmu "
+y 24 0 0171
+z 24 0 0172
+lC 24 0 0173
@@ -759,24 +767,25 @@ diff -aruN groff/font/devascii/R groff.win32/font/devascii/R
+~ "
+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 @@
+diff -aruN groff-1.18/font/devdvi/DESC groff-1.18.win32/font/devdvi/DESC
+--- groff-1.18/font/devdvi/DESC Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devdvi/DESC Mon Jul 8 08:42:17 2002
+@@ -0,0 +1,11 @@
+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
++sizes 500-1000000 0
++styles R I B BI
++family T
++fonts 13 0 0 0 0 0 0 0 0 0 MI S EX CW
+tcommand
+postpro grodvi
-diff -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 @@
+diff -aruN groff-1.18/font/devlatin1/B groff-1.18.win32/font/devlatin1/B
+--- groff-1.18/font/devlatin1/B Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devlatin1/B Fri Jul 5 16:06:31 2002
+@@ -0,0 +1,266 @@
+name B
+internalname 2
+spacewidth 24
@@ -795,6 +804,7 @@ diff -aruN groff/font/devlatin1/B groff.win32/font/devlatin1/B
+' 24 0 0047
+fm "
+aq "
++cq "
+( 24 0 0050
+) 24 0 0051
+* 24 0 0052
@@ -942,201 +952,110 @@ diff -aruN groff/font/devlatin1/B groff.win32/font/devlatin1/B
+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 "
++t+- "
+S2 24 0 0262
-+char178 "
+S3 24 0 0263
-+char179 "
+aa 24 0 0264
-+char180 "
+*m 24 0 0265
-+char181 "
++mc "
+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 "
++tmu "
+/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 "
++tdi "
+/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 @@
+diff -aruN groff-1.18/font/devlatin1/BI groff-1.18.win32/font/devlatin1/BI
+--- groff-1.18/font/devlatin1/BI Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devlatin1/BI Fri Jul 5 16:06:31 2002
+@@ -0,0 +1,266 @@
+name BI
+internalname 3
+spacewidth 24
@@ -1155,6 +1074,7 @@ diff -aruN groff/font/devlatin1/BI groff.win32/font/devlatin1/BI
+' 24 0 0047
+fm "
+aq "
++cq "
+( 24 0 0050
+) 24 0 0051
+* 24 0 0052
@@ -1302,200 +1222,109 @@ diff -aruN groff/font/devlatin1/BI groff.win32/font/devlatin1/BI
+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 "
++t+- "
+S2 24 0 0262
-+char178 "
+S3 24 0 0263
-+char179 "
+aa 24 0 0264
-+char180 "
+*m 24 0 0265
-+char181 "
++mc "
+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 "
++tmu "
+/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 "
++tdi "
+/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
+diff -aruN groff-1.18/font/devlatin1/DESC groff-1.18.win32/font/devlatin1/DESC
+--- groff-1.18/font/devlatin1/DESC Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devlatin1/DESC Mon Jul 8 06:47:51 2002
@@ -0,0 +1,8 @@
+res 240
+hor 24
@@ -1505,10 +1334,10 @@ diff -aruN groff/font/devlatin1/DESC groff.win32/font/devlatin1/DESC
+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 @@
+diff -aruN groff-1.18/font/devlatin1/I groff-1.18.win32/font/devlatin1/I
+--- groff-1.18/font/devlatin1/I Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devlatin1/I Fri Jul 5 16:06:31 2002
+@@ -0,0 +1,266 @@
+name I
+internalname 1
+spacewidth 24
@@ -1527,6 +1356,7 @@ diff -aruN groff/font/devlatin1/I groff.win32/font/devlatin1/I
+' 24 0 0047
+fm "
+aq "
++cq "
+( 24 0 0050
+) 24 0 0051
+* 24 0 0052
@@ -1674,201 +1504,110 @@ diff -aruN groff/font/devlatin1/I groff.win32/font/devlatin1/I
+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 "
++t+- "
+S2 24 0 0262
-+char178 "
+S3 24 0 0263
-+char179 "
+aa 24 0 0264
-+char180 "
+*m 24 0 0265
-+char181 "
++mc "
+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 "
++tmu "
+/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 "
++tdi "
+/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 @@
+diff -aruN groff-1.18/font/devlatin1/R groff-1.18.win32/font/devlatin1/R
+--- groff-1.18/font/devlatin1/R Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devlatin1/R Fri Jul 5 16:06:31 2002
+@@ -0,0 +1,265 @@
+name R
+spacewidth 24
+charset
@@ -1886,6 +1625,7 @@ diff -aruN groff/font/devlatin1/R groff.win32/font/devlatin1/R
+' 24 0 0047
+fm "
+aq "
++cq "
+( 24 0 0050
+) 24 0 0051
+* 24 0 0052
@@ -2033,200 +1773,109 @@ diff -aruN groff/font/devlatin1/R groff.win32/font/devlatin1/R
+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 "
++t+- "
+S2 24 0 0262
-+char178 "
+S3 24 0 0263
-+char179 "
+aa 24 0 0264
-+char180 "
+*m 24 0 0265
-+char181 "
++mc "
+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 "
++tmu "
+/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 "
++tdi "
+/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
+diff -aruN groff-1.18/font/devlj4/DESC groff-1.18.win32/font/devlj4/DESC
+--- groff-1.18/font/devlj4/DESC Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devlj4/DESC Mon Jul 8 06:47:51 2002
@@ -0,0 +1,12 @@
+res 600
+unitwidth 12700
@@ -2240,9 +1889,9 @@ diff -aruN groff/font/devlj4/DESC groff.win32/font/devlj4/DESC
+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
+diff -aruN groff-1.18/font/devps/DESC groff-1.18.win32/font/devps/DESC
+--- groff-1.18/font/devps/DESC Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devps/DESC Mon Jul 8 06:52:35 2002
@@ -0,0 +1,13 @@
+res 72000
+hor 1
@@ -2256,11 +1905,11 @@ diff -aruN groff/font/devps/DESC groff.win32/font/devps/DESC
+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 @@
++papersize letter
+diff -aruN groff-1.18/font/devps/prologue groff-1.18.win32/font/devps/prologue
+--- groff-1.18/font/devps/prologue Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devps/prologue Fri Jul 5 16:06:29 2002
+@@ -0,0 +1,164 @@
+%!PS-Adobe-3.0 Resource-ProcSet
+/setpacking where{
+pop
@@ -2359,11 +2008,20 @@ diff -aruN groff/font/devps/prologue groff.win32/font/devps/prologue
+/ST/stroke load def
+/MT/moveto load def
+/CL/closepath load def
-+/FL{
-+currentgray exch setgray fill setgray
++/Fr{
++setrgbcolor fill
++}bind def
++/Fk{
++setcmykcolor fill
++}bind def
++/Fg{
++setgray fill
+}bind def
-+/BL/fill load def
++/FL/fill load def
+/LW/setlinewidth load def
++/Cr/setrgbcolor load def
++/Ck/setcmykcolor load def
++/Cg/setgray load def
+/RE{
+findfont
+dup maxlength 1 index/FontName known not{1 add}if dict begin
@@ -2416,9 +2074,9 @@ diff -aruN groff/font/devps/prologue groff.win32/font/devps/prologue
+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
+diff -aruN groff-1.18/font/devps/symbolsl.pfa groff-1.18.win32/font/devps/symbolsl.pfa
+--- groff-1.18/font/devps/symbolsl.pfa Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devps/symbolsl.pfa Mon Jul 8 06:47:51 2002
@@ -0,0 +1,29 @@
+%!PS-Adobe-3.0 Resource-Font
+%%DocumentNeededResources: font Symbol
@@ -2449,9 +2107,9 @@ diff -aruN groff/font/devps/symbolsl.pfa groff.win32/font/devps/symbolsl.pfa
+[.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
+diff -aruN groff-1.18/font/devps/zapfdr.pfa groff-1.18.win32/font/devps/zapfdr.pfa
+--- groff-1.18/font/devps/zapfdr.pfa Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/font/devps/zapfdr.pfa Mon Jul 8 06:47:51 2002
@@ -0,0 +1,218 @@
+%!PS-Adobe-3.0 Resource-Font
+%%DocumentNeededResources: font ZapfDingbats
@@ -2671,9 +2329,9 @@ diff -aruN groff/font/devps/zapfdr.pfa groff.win32/font/devps/zapfdr.pfa
+/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
+diff -aruN groff-1.18/src/devices/grodvi/Makefile.msc groff-1.18.win32/src/devices/grodvi/Makefile.msc
+--- groff-1.18/src/devices/grodvi/Makefile.msc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/devices/grodvi/Makefile.msc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,21 @@
+
+# Makefile for Microsoft Visual C++ 6.0
@@ -2696,9 +2354,9 @@ diff -aruN groff/src/devices/grodvi/Makefile.msc groff.win32/src/devices/grodvi/
+
+
+
-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
+diff -aruN groff-1.18/src/devices/grolj4/Makefile.msc groff-1.18.win32/src/devices/grolj4/Makefile.msc
+--- groff-1.18/src/devices/grolj4/Makefile.msc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/devices/grolj4/Makefile.msc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,22 @@
+
+# Makefile for Microsoft Visual C++ 6.0
@@ -2722,9 +2380,9 @@ diff -aruN groff/src/devices/grolj4/Makefile.msc groff.win32/src/devices/grolj4/
+
+
+
-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
+diff -aruN groff-1.18/src/devices/grops/Makefile.msc groff-1.18.win32/src/devices/grops/Makefile.msc
+--- groff-1.18/src/devices/grops/Makefile.msc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/devices/grops/Makefile.msc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,23 @@
+
+# Makefile for Microsoft Visual C++ 6.0
@@ -2749,9 +2407,9 @@ diff -aruN groff/src/devices/grops/Makefile.msc groff.win32/src/devices/grops/Ma
+
+
+
-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
+diff -aruN groff-1.18/src/devices/grotty/Makefile.msc groff-1.18.win32/src/devices/grotty/Makefile.msc
+--- groff-1.18/src/devices/grotty/Makefile.msc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/devices/grotty/Makefile.msc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,22 @@
+
+# Makefile for Microsoft Visual C++ 6.0
@@ -2775,10 +2433,10 @@ diff -aruN groff/src/devices/grotty/Makefile.msc groff.win32/src/devices/grotty/
+
+
+
-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 @@
+diff -aruN groff-1.18/src/include/defs.h groff-1.18.win32/src/include/defs.h
+--- groff-1.18/src/include/defs.h Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/include/defs.h Mon Jul 8 08:32:01 2002
+@@ -0,0 +1,8 @@
+
+#define FONTPATH "c:/groff/font"
+
@@ -2787,14 +2445,10 @@ diff -aruN groff/src/include/defs.h groff.win32/src/include/defs.h
+#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 @@
+diff -aruN groff-1.18/src/include/getopt.h groff-1.18.win32/src/include/getopt.h
+--- groff-1.18/src/include/getopt.h Sat Aug 25 01:37:49 2001
++++ groff-1.18.win32/src/include/getopt.h Mon Jul 8 06:47:51 2002
+@@ -162,7 +162,7 @@
int __long_only);
# endif
#else /* not __STDC__ */
@@ -2803,9 +2457,9 @@ diff -aruN groff/src/include/getopt.h groff.win32/src/include/getopt.h
# 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
+diff -aruN groff-1.18/src/libs/libdriver/Makefile.msc groff-1.18.win32/src/libs/libdriver/Makefile.msc
+--- groff-1.18/src/libs/libdriver/Makefile.msc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/libs/libdriver/Makefile.msc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,22 @@
+
+# Makefile for Microsoft Visual C++ 6.0
@@ -2829,10 +2483,10 @@ diff -aruN groff/src/libs/libdriver/Makefile.msc groff.win32/src/libs/libdriver/
+ 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 @@
+diff -aruN groff-1.18/src/libs/libgroff/Makefile.msc groff-1.18.win32/src/libs/libgroff/Makefile.msc
+--- groff-1.18/src/libs/libgroff/Makefile.msc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/libs/libgroff/Makefile.msc Mon Jul 8 06:47:51 2002
+@@ -0,0 +1,59 @@
+
+# Makefile for Microsoft Visual C++ 6.0
+# by Blake McBride (blake@florida-software.com)
@@ -2856,6 +2510,7 @@ diff -aruN groff/src/libs/libgroff/Makefile.msc groff.win32/src/libs/libgroff/Ma
+ assert.obj \
+ change_lf.obj \
+ cmap.obj \
++ color.obj \
+ cset.obj \
+ device.obj \
+ errarg.obj \
@@ -2865,20 +2520,25 @@ diff -aruN groff/src/libs/libgroff/Makefile.msc groff.win32/src/libs/libgroff/Ma
+ font.obj \
+ fontfile.obj \
+ getopt.obj \
-+ htmlindicate.obj \
++ geometry.obj \
++ htmlhint.obj \
+ iftoa.obj \
-+ illegal.obj \
++ invalid.obj \
+ itoa.obj \
+ lf.obj \
+ lineno.obj \
+ macropath.obj \
++ mkstemp.obj \
++ mksdir.obj \
+ nametoindex.obj \
++ paper.obj \
+ progname.obj \
+ ptable.obj \
+ searchpath.obj \
+ string.obj \
+ strsave.obj \
+ tmpfile.obj \
++ tmpname.obj \
+ version.obj
+
+
@@ -2886,16 +2546,16 @@ diff -aruN groff/src/libs/libgroff/Makefile.msc groff.win32/src/libs/libgroff/Ma
+ 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
+diff -aruN groff-1.18/src/libs/libgroff/version.cc groff-1.18.win32/src/libs/libgroff/version.cc
+--- groff-1.18/src/libs/libgroff/version.cc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/libs/libgroff/version.cc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,3 @@
-+const char *version_string = "1.17";
-+const char *revision_string = "1";
-+extern "C" const char *Version_string = "1.17.1";
-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
++const char *version_string = "1.18";
++const char *revision_string = "0";
++extern "C" const char *Version_string = "1.18";
+diff -aruN groff-1.18/src/preproc/eqn/Makefile.msc groff-1.18.win32/src/preproc/eqn/Makefile.msc
+--- groff-1.18/src/preproc/eqn/Makefile.msc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/preproc/eqn/Makefile.msc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,39 @@
+
+# Makefile for Microsoft Visual C++ 6.0
@@ -2936,9 +2596,9 @@ diff -aruN groff/src/preproc/eqn/Makefile.msc groff.win32/src/preproc/eqn/Makefi
+
+
+
-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
+diff -aruN groff-1.18/src/preproc/pic/Makefile.msc groff-1.18.win32/src/preproc/pic/Makefile.msc
+--- groff-1.18/src/preproc/pic/Makefile.msc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/preproc/pic/Makefile.msc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,31 @@
+
+# Makefile for Microsoft Visual C++ 6.0
@@ -2971,9 +2631,9 @@ diff -aruN groff/src/preproc/pic/Makefile.msc groff.win32/src/preproc/pic/Makefi
+
+
+
-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
+diff -aruN groff-1.18/src/preproc/tbl/Makefile.msc groff-1.18.win32/src/preproc/tbl/Makefile.msc
+--- groff-1.18/src/preproc/tbl/Makefile.msc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/preproc/tbl/Makefile.msc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,26 @@
+
+# Makefile for Microsoft Visual C++ 6.0
@@ -3001,9 +2661,9 @@ diff -aruN groff/src/preproc/tbl/Makefile.msc groff.win32/src/preproc/tbl/Makefi
+
+
+
-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
+diff -aruN groff-1.18/src/roff/troff/Makefile.msc groff-1.18.win32/src/roff/troff/Makefile.msc
+--- groff-1.18/src/roff/troff/Makefile.msc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/roff/troff/Makefile.msc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,34 @@
+
+# Makefile for Microsoft Visual C++ 6.0
@@ -3039,10 +2699,10 @@ diff -aruN groff/src/roff/troff/Makefile.msc groff.win32/src/roff/troff/Makefile
+
+
+
-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
+diff -aruN groff-1.18/src/roff/troff/majorminor.cc groff-1.18.win32/src/roff/troff/majorminor.cc
+--- groff-1.18/src/roff/troff/majorminor.cc Thu Jan 1 01:00:00 1970
++++ groff-1.18.win32/src/roff/troff/majorminor.cc Mon Jul 8 06:47:51 2002
@@ -0,0 +1,3 @@
+const char *major_version = "1";
-+const char *minor_version = "17";
-+const char *revision = "1";
++const char *minor_version = "18";
++const char *revision = "0";
OpenPOWER on IntegriCloud