summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2005-10-20 10:47:26 +0000
committerru <ru@FreeBSD.org>2005-10-20 10:47:26 +0000
commita46effd45406e471462ec7bf493d86451cfa6e6a (patch)
tree0cc226b6c08790482f5bf91217129863d419b66c /contrib
parentb22adb8e7c253c75fb05127eeeaef2968232b32a (diff)
downloadFreeBSD-src-a46effd45406e471462ec7bf493d86451cfa6e6a.zip
FreeBSD-src-a46effd45406e471462ec7bf493d86451cfa6e6a.tar.gz
This commit was generated by cvs2svn to compensate for changes in r151500,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'contrib')
-rw-r--r--contrib/groff/README.CVS6
-rw-r--r--contrib/groff/README.WIN3268
-rw-r--r--contrib/groff/contrib/mom/examples/README.mom56
-rw-r--r--contrib/groff/contrib/mom/examples/macros.mom668
-rw-r--r--contrib/groff/contrib/mom/examples/typeset.mom535
-rw-r--r--contrib/groff/contrib/mom/examples/typewrite.mom233
-rw-r--r--contrib/groff/doc/groff-10485
-rw-r--r--contrib/groff/doc/groff-111623
-rw-r--r--contrib/groff/doc/groff-41406
-rw-r--r--contrib/groff/doc/groff-51327
-rw-r--r--contrib/groff/doc/groff-61462
-rw-r--r--contrib/groff/doc/groff-71460
-rw-r--r--contrib/groff/doc/groff-81416
-rw-r--r--contrib/groff/doc/groff-9985
-rw-r--r--contrib/groff/src/include/groff-getopt.h68
-rw-r--r--contrib/groff/src/libs/libgroff/progname.cpp1
-rw-r--r--contrib/groff/src/roff/troff/glyphuni.cpp503
-rw-r--r--contrib/groff/src/roff/troff/symbol.cpp154
-rw-r--r--contrib/groff/src/roff/troff/symbol.h80
-rw-r--r--contrib/groff/src/roff/troff/unicode.cpp67
-rw-r--r--contrib/groff/src/roff/troff/unicode.h26
-rw-r--r--contrib/groff/src/roff/troff/uniglyph.cpp503
-rw-r--r--contrib/groff/src/roff/troff/uniuni.cpp1994
-rw-r--r--contrib/groff/src/xditview/ChangeLog520
-rw-r--r--contrib/groff/src/xditview/DESC9
-rw-r--r--contrib/groff/src/xditview/Dvi.c573
-rw-r--r--contrib/groff/src/xditview/Dvi.h46
-rw-r--r--contrib/groff/src/xditview/DviChar.c662
-rw-r--r--contrib/groff/src/xditview/DviChar.h37
-rw-r--r--contrib/groff/src/xditview/DviP.h233
-rw-r--r--contrib/groff/src/xditview/FontMap17
-rw-r--r--contrib/groff/src/xditview/GXditview-ad.h52
-rw-r--r--contrib/groff/src/xditview/GXditview.ad57
-rw-r--r--contrib/groff/src/xditview/INSTALL20
-rw-r--r--contrib/groff/src/xditview/Imakefile.in120
-rw-r--r--contrib/groff/src/xditview/Menu.h46
-rw-r--r--contrib/groff/src/xditview/README14
-rw-r--r--contrib/groff/src/xditview/TODO17
-rw-r--r--contrib/groff/src/xditview/XFontName.c256
-rw-r--r--contrib/groff/src/xditview/XFontName.h45
-rw-r--r--contrib/groff/src/xditview/ad2c62
-rw-r--r--contrib/groff/src/xditview/device.c600
-rw-r--r--contrib/groff/src/xditview/device.h21
-rw-r--r--contrib/groff/src/xditview/draw.c725
-rw-r--r--contrib/groff/src/xditview/font.c471
-rw-r--r--contrib/groff/src/xditview/gray1.bm4
-rw-r--r--contrib/groff/src/xditview/gray2.bm4
-rw-r--r--contrib/groff/src/xditview/gray3.bm4
-rw-r--r--contrib/groff/src/xditview/gray4.bm4
-rw-r--r--contrib/groff/src/xditview/gray5.bm4
-rw-r--r--contrib/groff/src/xditview/gray6.bm4
-rw-r--r--contrib/groff/src/xditview/gray7.bm4
-rw-r--r--contrib/groff/src/xditview/gray8.bm4
-rw-r--r--contrib/groff/src/xditview/gxditview.man249
-rw-r--r--contrib/groff/src/xditview/lex.c103
-rw-r--r--contrib/groff/src/xditview/page.c88
-rw-r--r--contrib/groff/src/xditview/parse.c340
-rw-r--r--contrib/groff/src/xditview/xdit.bm14
-rw-r--r--contrib/groff/src/xditview/xdit_mask.bm14
-rw-r--r--contrib/groff/src/xditview/xditview.c596
-rw-r--r--contrib/groff/src/xditview/xtotroff.c311
-rwxr-xr-xcontrib/groff/test-groff42
62 files changed, 0 insertions, 21518 deletions
diff --git a/contrib/groff/README.CVS b/contrib/groff/README.CVS
deleted file mode 100644
index ca284dc..0000000
--- a/contrib/groff/README.CVS
+++ /dev/null
@@ -1,6 +0,0 @@
-You need the following tools to build groff directly from CVS:
-
- the netpbm package
- texinfo >= 4.3
- bison >= 1.875b or byacc
- ghostscript
diff --git a/contrib/groff/README.WIN32 b/contrib/groff/README.WIN32
deleted file mode 100644
index 478d13a..0000000
--- a/contrib/groff/README.WIN32
+++ /dev/null
@@ -1,68 +0,0 @@
-
-WIN32 port of GROFF and friends done by Blake McBride
-(blake@florida-software.com) 4/14/00.
-
-This port differs from other ports in that it uses the Microsoft
-compiler. The changes were done such that they only have effect on
-the code when compiled with the Microsoft compiler.
-
-Note that not all preprocessors and output devices have been ported;
-missing are grohtml, grolbp, grn, refer, soelim, and groff. Besides
-these programs, no utility program has been ported. Of course,
-gxditview (which only runs on the X Window System, the standard Unix
-GUI) is missing also.
-
-
-The following programs were used, running on Windows NT 4.0:
-
- Microsoft Visual C++ 6.0
- Unix utilities under NT (gzip, tar, patch)
-
-
-Build Instructions
-------------------
-
-. Unpack groff (using gzip & tar) as follows:
-
- cd \
- gzip -dc groff-1.16.tar.gz | tar xvf -
-
-. Now apply the patch file `win32-diffs':
-
- cd \groff-1.16
- patch -p1 < win32-diffs
-
- Note that with older versions of `patch', you will get a lot of
- *.orig files (most of them are empty) which can be safely deleted.
-
-. Edit the file `src/include/defs.h' and adapt the path names to
- your needs.
-
-. Build everything by typing:
-
- nmake -f Makefile.msc
-
-You are done.
-
-The `bin' directory contains some .cmd files to help show how to run
-stuff. Since Windows 95/98 doesn't understand .cmd files, if you are
-operating under that OS, you'll have to rename them to .bat files.
-.bat files do have output redirection problems.
-
-
-The changes I made fall into two categories.
-
-1. Makefiles. Several makefiles were added. All makefiles were named
- Makefile.msc.
-
-2. The Groff build includes several scripts which generate auxiliary
- files used by groff (such as DESC, I, R, prologue, etc).
-
-
-Directories needed at runtime
------------------------------
-
-bin
-font
-tmac
-mm (copied, including sub-directories, from contrib/mm)
diff --git a/contrib/groff/contrib/mom/examples/README.mom b/contrib/groff/contrib/mom/examples/README.mom
deleted file mode 100644
index fba1e01..0000000
--- a/contrib/groff/contrib/mom/examples/README.mom
+++ /dev/null
@@ -1,56 +0,0 @@
-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/macros.mom b/contrib/groff/contrib/mom/examples/macros.mom
deleted file mode 100644
index a3976f3..0000000
--- a/contrib/groff/contrib/mom/examples/macros.mom
+++ /dev/null
@@ -1,668 +0,0 @@
-\# 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/typeset.mom b/contrib/groff/contrib/mom/examples/typeset.mom
deleted file mode 100644
index 98dd918..0000000
--- a/contrib/groff/contrib/mom/examples/typeset.mom
+++ /dev/null
@@ -1,535 +0,0 @@
-\# 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, now you know how to 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\%
-ing elitr sed diam nonumy eirmod tempor invidunt ut
-.BREAK_QUOTE \" Needed because blockquote crosses page AND contain footnotes
-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
deleted file mode 100644
index b293840d..0000000
--- a/contrib/groff/contrib/mom/examples/typewrite.mom
+++ /dev/null
@@ -1,233 +0,0 @@
-\# 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/doc/groff-10 b/contrib/groff/doc/groff-10
deleted file mode 100644
index c4a7d74..0000000
--- a/contrib/groff/doc/groff-10
+++ /dev/null
@@ -1,485 +0,0 @@
-This is groff, produced by makeinfo version 4.3d from ./groff.texinfo.
-
-This manual documents GNU `troff' version 1.19.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003 Free Software Foundation,
-Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff, Node: 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.
-* .height: Artificial Fonts.
-* .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.
-* .n: Environments.
-* .ne: Page Location Traps.
-* .ns: Manipulating Spacing.
-* .o: Line Layout.
-* .p: Page Layout.
-* .P: Built-in Registers.
-* .pe: Page Location Traps.
-* .pn: Page Layout.
-* .ps: Fractional Type Sizes.
-* .psr: Fractional Type Sizes.
-* .pvs: Changing Type Sizes.
-* .rj: Manipulating Filling and Adjusting.
-* .s: Changing Type Sizes.
-* .slant: Artificial Fonts.
-* .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.
-* .w: Environments.
-* .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.
-* AT [man]: Miscellaneous man macros.
-* 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.
-* BT [man]: Optional man extensions.
-* BX [ms]: Highlighting in ms.
-* CD [ms]: ms Displays and Keeps.
-* CT [man]: Optional man extensions.
-* CW [man]: Optional man extensions.
-* CW [ms] <1>: Additional ms Macros.
-* CW [ms]: Highlighting in ms.
-* DA [ms]: ms Cover Page Macros.
-* De [man]: Optional man extensions.
-* DE [ms]: ms Displays and Keeps.
-* Ds [man]: Optional man extensions.
-* DS [ms] <1>: Additional ms Macros.
-* DS [ms]: ms Displays and Keeps.
-* DT [man]: Miscellaneous man macros.
-* EE [man]: Optional man extensions.
-* EF [ms]: ms Headers and Footers.
-* EH [ms]: ms Headers and Footers.
-* EN [ms]: ms Insertions.
-* EQ [ms]: ms Insertions.
-* EX [man]: Optional man extensions.
-* FE [ms]: ms Footnotes.
-* FS [ms]: ms Footnotes.
-* G [man]: Optional man extensions.
-* GL [man]: Optional man extensions.
-* HB [man]: Optional man extensions.
-* 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.
-* MS [man]: Optional man extensions.
-* ND [ms]: ms Cover Page Macros.
-* NE [man]: Optional man extensions.
-* NH [ms]: Headings in ms.
-* NL [ms]: Highlighting in ms.
-* NT [man]: Optional man extensions.
-* 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.
-* Pn [man]: Optional man extensions.
-* PN [man]: Optional man extensions.
-* PP [man]: Man usage.
-* PP [ms]: Paragraphs in ms.
-* PS [ms]: ms Insertions.
-* PT [man]: Optional man extensions.
-* PX [ms]: ms TOC.
-* QP [ms]: Paragraphs in ms.
-* R [man]: Optional man extensions.
-* 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.
-* RN [man]: Optional man extensions.
-* 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.
-* TB [man]: Optional man extensions.
-* 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.
-* UC [man]: Miscellaneous man macros.
-* UL [ms]: Highlighting in ms.
-* VE [man]: Optional man extensions.
-* VS [man]: Optional man extensions.
-* XA [ms]: ms TOC.
-* XE [ms]: ms TOC.
-* XP [ms]: Paragraphs in ms.
-* XS [ms]: ms TOC.
-
-
-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.
-* ? [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.
-* 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.
-* HF [man]: Predefined man strings.
-* 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.
-* composite.tmac: Using Symbols.
-* cp1047.tmac: Input Encodings.
-* 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.
-* ec.tmac: Input Encodings.
-* eqn: ms Insertions.
-* freeeuro.pfa: Input Encodings.
-* 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.
-* hyphenex.us: Manipulating Hyphenation.
-* latin1.tmac: Input Encodings.
-* latin2.tmac: Input Encodings.
-* latin9.tmac: Input Encodings.
-* makeindex: Indices.
-* man, invocation of preprocessors: Preprocessors in man pages.
-* man-old.tmac: man.
-* man.local <1>: Optional man extensions.
-* man.local: Man usage.
-* man.tmac: man.
-* man.ultrix: Optional man extensions.
-* nrchbar: Miscellaneous.
-* papersize.tmac: Paper Size.
-* 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 <4>: Paper Size.
-* 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
deleted file mode 100644
index d3050a1..0000000
--- a/contrib/groff/doc/groff-11
+++ /dev/null
@@ -1,1623 +0,0 @@
-This is groff, produced by makeinfo version 4.3d from ./groff.texinfo.
-
-This manual documents GNU `troff' version 1.19.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003 Free Software Foundation,
-Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff, Node: 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 and Macro 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 and Macro 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'f ...' and horizontal resolution: Drawing Requests.
-* \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 and Macro 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.
-* adobe glyph list (AGL): Using Symbols.
-* AGL (adobe glyph list): Using Symbols.
-* 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 and macros: Request and Macro 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, output 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.
-* boxa request, and dn (dl): Diversions.
-* bp request, and top-level diversion: Page Control.
-* bp request, and traps (.pe): Page Location Traps.
-* 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, defining fallback (fchar, fschar, schar): 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.
-* colors, fill, unnamed (\D'F...'): Drawing Requests.
-* 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.
-* composite glyph names: Using Symbols.
-* 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, input encoding: Input Encodings.
-* cp1047, output encoding: 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 dn (dl): Diversions.
-* 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 fallback character (fchar, fschar, schar): 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.
-* depth, of last glyph (.cdp): Environments.
-* DESC file, format: DESC File Format.
-* device resolution: 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.
-* discardable horizontal space: Manipulating Filling and Adjusting.
-* discarded space in traps: Manipulating Spacing.
-* 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, and traps: Page Location Traps.
-* diversions, shared name space with macros and strings: Strings.
-* dl register, and da (boxa): Diversions.
-* dn register, and da (boxa): Diversions.
-* documents, multi-file: Debugging.
-* documents, structuring the source code: Requests.
-* double quote, in a macro argument: Request and Macro 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 and Macro 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: Tab Stops.
-* EBCDIC encoding of a tab: Tabs and Fields.
-* EBCDIC encoding of backspace: Identifiers.
-* EBCDIC, input encoding: Input Encodings.
-* EBCDIC, output encoding: Groff Options.
-* 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, EBCDIC: Tab Stops.
-* encoding, input, cp1047: Input Encodings.
-* encoding, input, EBCDIC: Input Encodings.
-* encoding, input, latin-1 (ISO 8859-1): Input Encodings.
-* encoding, input, latin-2 (ISO 8859-2): Input Encodings.
-* encoding, input, latin-9 (latin-0, ISO 8859-15): Input Encodings.
-* encoding, output, ASCII: Groff Options.
-* encoding, output, cp1047: Groff Options.
-* encoding, output, EBCDIC: Groff Options.
-* encoding, output, latin-1 (ISO 8859-1): Groff Options.
-* encoding, output, 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, dimensions of last glyph (.w, .cht, .cdp, .csk): Environments.
-* environment, previous line length (.n): 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.
-* fallback character, defining (fchar, fschar, schar): Using Symbols.
-* fallback glyph, removing definition (rchar, rfschar): Using Symbols.
-* 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 colors, unnamed (\D'F...'): Drawing Requests.
-* 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 and Symbols.
-* 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 glyph search order: Using Symbols.
-* fspecial request, and imitating bold: Artificial Fonts.
-* ft request, and font translations: Changing Fonts.
-* geqn, invoking: Invoking geqn.
-* geqn, the program: geqn.
-* GGL (groff glyph list): Using Symbols.
-* 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 names, composite: Using Symbols.
-* 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, last, dimensions (.w, .cht, .cdp, .csk): Environments.
-* 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, rfschar): 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 glyph list (GGL): Using Symbols.
-* 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.
-* height, of last glyph (.cht): Environments.
-* high-water mark register (.h): Diversions.
-* history: History.
-* home directory: Macro Directories.
-* horizontal discardable space: Manipulating Filling and Adjusting.
-* 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: DESC File Format.
-* 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 input encoding: Input Encodings.
-* IBM cp1047 output encoding: 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 encoding, cp1047: Input Encodings.
-* input encoding, EBCDIC: Input Encodings.
-* input encoding, latin-1 (ISO 8859-1): Input Encodings.
-* input encoding, latin-2 (ISO 8859-2): Input Encodings.
-* input encoding, latin-9 (latin-9, ISO 8859-15): Input Encodings.
-* 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.
-* ISO 8859-1 (latin-1), input encoding: Input Encodings.
-* ISO 8859-1 (latin-1), output encoding: Groff Options.
-* ISO 8859-15 (latin-9, latin-0), input encoding: Input Encodings.
-* ISO 8859-2 (latin-2), input encoding: Input Encodings.
-* 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.
-* landscape page orientation: Paper Size.
-* last glyph, dimensions (.w, .cht, .cdp, .csk): Environments.
-* last-requested point size registers (.psr, .sr): Fractional Type Sizes.
-* latin-1 (ISO 8859-1), input encoding: Input Encodings.
-* latin-1 (ISO 8859-1), output encoding: Groff Options.
-* latin-2 (ISO 8859-2), input encoding: Input Encodings.
-* latin-9 (latin-0, ISO 8859-15), input encoding: Input Encodings.
-* 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 previous line (.n): Environments.
-* 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 length, previous (.n): Environments.
-* 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 arguments: Request and Macro Arguments.
-* 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, custom headers and footers: Optional man extensions.
-* 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 macros, Ultrix-specific: Optional man extensions.
-* man pages: man.
-* manipulating filling and adjusting: Manipulating Filling and Adjusting.
-* manipulating hyphenation: Manipulating Hyphenation.
-* manipulating spacing: Manipulating Spacing.
-* manmacros, BSD compatibility: Miscellaneous man macros.
-* 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.
-* orientation, landscape: Paper Size.
-* 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 encoding, ASCII: Groff Options.
-* output encoding, cp1047: Groff Options.
-* output encoding, EBCDIC: Groff Options.
-* output encoding, latin-1 (ISO 8859-1): Groff Options.
-* output encoding, utf-8: Groff Options.
-* 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 ejecting register (.pe): Page Location Traps.
-* 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 orientation, landscape: Paper Size.
-* page, new (bp): Page Control.
-* paper formats: Paper Formats.
-* paper size: Paper Size.
-* 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.
-* previous line length (.n): Environments.
-* 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.
-* radicalex glyph, and cflags: Using Symbols.
-* 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, rfschar): 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 and Macro 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, device: DESC File Format.
-* resolution, horizontal: DESC File Format.
-* resolution, horizontal, register (.H): Built-in Registers.
-* resolution, vertical: DESC File Format.
-* 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.
-* size, paper: Paper Size.
-* sizes: Sizes.
-* sizes, fractional <1>: Implementation Differences.
-* sizes, fractional: Fractional Type Sizes.
-* skew, of last glyph (.csk): Environments.
-* 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, and traps: 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, discardable, horizontal: Manipulating Filling and Adjusting.
-* space, discarded, in traps: Manipulating Spacing.
-* 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, in a macro argument: Request and Macro Arguments.
-* 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.
-* special request, and glyph search order: Using Symbols.
-* spline, drawing (\D'~ ...'): Drawing Requests.
-* springing a trap: Traps.
-* sqrtex glyph, and cflags: Using Symbols.
-* 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, and discarded space: Manipulating Spacing.
-* traps, and diversions: Page Location 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.
-* traps, sprung by bp request (.pe): 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.
-* Ultrix-specific man macros: Optional man extensions.
-* 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 fill colors (\D'F...'): Drawing Requests.
-* 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, output 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: DESC File Format.
-* 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.
-* width, of last glyph (.w): Environments.
-* 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-4 b/contrib/groff/doc/groff-4
deleted file mode 100644
index 7591d12..0000000
--- a/contrib/groff/doc/groff-4
+++ /dev/null
@@ -1,1406 +0,0 @@
-This is groff, produced by makeinfo version 4.3d from ./groff.texinfo.
-
-This manual documents GNU `troff' version 1.19.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003 Free Software Foundation,
-Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff, Node: 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'.
-
- Finally, MODE can be the numeric argument returned by the `.j'
- register.
-
- With no argument, `gtroff' adjusts lines in the same way it did
- before adjusting was deactivated (with a call to `na', for
- example).
-
-
- text
- .ad r
- .nr ad \n[.j]
- text
- .ad c
- text
- .na
- text
- .ad \" back to centering
- text
- .ad \n[ad] \" back to right justifying
-
- The current adjustment mode is available in the read-only number
- register `.j'; it can be stored and subsequently used to set
- adjustment.
-
- The adjustment mode status is associated with the current
- environment (*note Environments::).
-
- - Request: .na
- Disable adjusting. This request won't change the current
- adjustment mode: A subsequent call to `ad' uses the previous
- adjustment setting.
-
- The adjustment mode status is associated with the current
- environment (*note Environments::).
-
- - Request: .brp
- - Escape: \p
- Adjust the current line and cause a break.
-
- In most cases this produces very ugly results since `gtroff'
- doesn't have a sophisticated paragraph building algorithm (as TeX
- have, for example); instead, `gtroff' fills and adjusts a paragraph
- line by line:
-
-
- This is an uninteresting sentence.
- This is an uninteresting sentence.\p
- This is an uninteresting sentence.
-
- is formatted as
-
-
- This is an uninteresting sentence. This is an
- uninteresting sentence.
- This is an uninteresting sentence.
-
-
- - Request: .ss word_space_size [sentence_space_size]
- - Register: \n[.ss]
- - Register: \n[.sss]
- Change the size of a space between words. It takes its units as
- one twelfth of the space width parameter for the current font.
- Initially both the WORD_SPACE_SIZE and SENTENCE_SPACE_SIZE are 12.
- In fill mode, the values specify the minimum distance.
-
- If two arguments are given to the `ss' request, the second
- argument sets the sentence space size. If the second argument is
- not given, sentence space size is set to WORD_SPACE_SIZE. The
- sentence space size is used in two circumstances: If the end of a
- sentence occurs at the end of a line in fill mode, then both an
- inter-word space and a sentence space are added; if two spaces
- follow the end of a sentence in the middle of a line, then the
- second space is a sentence space. If a second argument is never
- given to the `ss' request, the behaviour of UNIX `troff' is the
- same as that exhibited by GNU `troff'. In GNU `troff', as in UNIX
- `troff', a sentence should always be followed by either a newline
- or two spaces.
-
- The read-only number registers `.ss' and `.sss' hold the values of
- the parameters set by the first and second arguments of the `ss'
- request.
-
- The word space and sentence space values are associated with the
- current environment (*note Environments::).
-
- Contrary to AT&T `troff', this request is _not_ ignored if a TTY
- output device is used; the given values are then rounded down to a
- multiple of 12 (*note Implementation Differences::).
-
- The request is ignored if there is no parameter.
-
- Another useful application of the `ss' request is to insert
- discardable horizontal space, i.e., space which is discarded at a
- line break. For example, paragraph-style footnotes could be
- separated this way:
-
-
- .ll 4.5i
- 1.\ This is the first footnote.\c
- .ss 48
- .nop
- .ss 12
- 2.\ This is the second footnote.
-
- The result:
-
-
- 1. This is the first footnote. 2. This
- is the second footnote.
-
- Note that the `\h' escape produces unbreakable space.
-
- - Request: .ce [nnn]
- - Register: \n[.ce]
- Center text. While the `.ad c' request also centers text, it
- fills the text as well. `ce' does not fill the text it affects.
- This request causes a break. The number of lines still to be
- centered is associated with the current environment (*note
- Environments::).
-
- The following example demonstrates the differences. Here the
- input:
-
-
- .ll 4i
- .ce 1000
- This is a small text fragment which shows the differences
- between the `.ce' and the `.ad c' request.
- .ce 0
-
- .ad c
- This is a small text fragment which shows the differences
- between the `.ce' and the `.ad c' request.
-
- And here the result:
-
-
- This is a small text fragment which
- shows the differences
- between the `.ce' and the `.ad c' request.
-
- This is a small text fragment which
- shows the differences between the `.ce'
- and the `.ad c' request.
-
- With no arguments, `ce' centers the next line of text. NNN
- specifies the number of lines to be centered. If the argument is
- zero or negative, centering is disabled.
-
- The basic length for centering text is the line length (as set
- with the `ll' request) minus the indentation (as set with the `in'
- request). Temporary indentation is ignored.
-
- As can be seen in the previous example, it is a common idiom to
- turn on centering for a large number of lines, and to turn off
- centering after text to be centered. This is useful for any
- request which takes a number of lines as an argument.
-
- The `.ce' read-only number register contains the number of lines
- remaining to be centered, as set by the `ce' request.
-
- - Request: .rj [nnn]
- - Register: \n[.rj]
- Justify unfilled text to the right margin. Arguments are
- identical to the `ce' request. The `.rj' read-only number
- register is the number of lines to be right-justified as set by
- the `rj' request. This request causes a break. The number of
- lines still to be right-justified is associated with the current
- environment (*note Environments::).
-
-
-File: groff, Node: Manipulating Hyphenation, Next: Manipulating Spacing, Prev: Manipulating Filling and Adjusting, Up: gtroff Reference
-
-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 and exceptions for American
- English (in files `hyphen.us' and `hyphenex.us').
-
- A second call to `hpf' (for the same language) will replace the
- hyphenation patterns with the new ones.
-
- Invoking `hpf' causes an error if there is no current hyphenation
- language.
-
- - Request: .hcode c1 code1 c2 code2 ...
- Set the hyphenation code of character C1 to CODE1, that of C2 to
- CODE2, etc. A hyphenation code must be a single input character
- (not a special character) other than a digit or a space.
- 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'.
-
- If a vertical trap is sprung during execution of `sp', the amount
- of vertical space after the trap is discarded. For example, this
-
-
- .de xxx
- ..
- .
- .wh 0 xxx
- .
- .pl 5v
- foo
- .sp 2
- bar
- .sp 50
- baz
-
- results in
-
-
- foo
-
-
- bar
-
- baz
-
- The amount of discarded space is available in the number register
- `.trunc'.
-
- To protect `sp' against vertical traps, use the `vpt' request:
-
-
- .vpt 0
- .sp -3
- .vpt 1
-
-
- - Request: .ls [nnn]
- - Register: \n[.L]
- Output NNN-1 blank lines after each line of text. With no
- argument, `gtroff' uses the previous value before the last `ls'
- call.
-
-
- .ls 2 \" This causes double-spaced output
- .ls 3 \" This causes triple-spaced output
- .ls \" Again double-spaced
-
- The line spacing is associated with the current environment (*note
- Environments::).
-
- The read-only number register `.L' contains the current line
- spacing setting.
-
- *Note Changing Type Sizes::, for the requests `vs' and `pvs' as
-alternatives to `ls'.
-
- - Escape: \x'spacing'
- - Register: \n[.a]
- Sometimes, extra vertical spacing is only needed occasionally, e.g.
- to allow space for a tall construct (like an equation). The `\x'
- escape does this. The escape is given a numerical argument,
- usually enclosed in quotes (like `\x'3p''); the default scaling
- indicator is `v'. If this number is positive extra vertical space
- is inserted below the current line. A negative number adds space
- above. If this escape is used multiple times on the same line,
- the maximum of the values is used.
-
- *Note Escapes::, for details on parameter delimiting characters.
-
- The `.a' read-only number register contains the most recent
- (nonnegative) extra vertical line space.
-
- Using `\x' can be necessary in combination with the `\b' escape,
- as the following example shows.
-
-
- This is a test with the \[rs]b escape.
- .br
- This is a test with the \[rs]b escape.
- .br
- This is a test with \b'xyz'\x'-1m'\x'1m'.
- .br
- This is a test with the \[rs]b escape.
- .br
- This is a test with the \[rs]b escape.
-
- produces
-
-
- This is a test with the \b escape.
- This is a test with the \b escape.
- x
- This is a test with y.
- z
- This is a test with the \b escape.
- This is a test with the \b escape.
-
-
- - Request: .ns
- - Request: .rs
- - Register: \n[.ns]
- Enable "no-space mode". In this mode, spacing (either via `sp' or
- via blank lines) is disabled. The `bp' request to advance to the
- next page is also disabled, except if it is accompanied by a page
- number (see *Note Page Control::, for more information). This
- mode ends when actual text is output or the `rs' request is
- encountered which ends no-space mode. The read-only number
- register `.ns' is set to 1 as long as no-space mode is active.
-
- This request is useful for macros that conditionally insert
- vertical space before the text starts (for example, a paragraph
- macro could insert some space except when it is the first
- paragraph after a section header).
-
-
-File: groff, Node: Tabs and Fields, Next: Character Translations, Prev: Manipulating Spacing, Up: gtroff Reference
-
-Tabs and Fields
-===============
-
- A tab character (ASCII char 9, EBCDIC char 5) causes a horizontal
-movement to the next tab stop (much like it did on a typewriter).
-
- - Escape: \t
- This escape is a non-interpreted tab character. In copy mode
- (*note Copy-in Mode::), `\t' is the same as a real tab character.
-
- - Request: .ta [n1 n2 ... nn T r1 r2 ... rn]
- - Register: \n[.tabs]
- Change tab stop positions. This request takes a series of tab
- specifiers as arguments (optionally divided into two groups with
- the letter `T') which indicate where each tab stop is to be
- (overriding any previous settings).
-
- Tab stops can be specified absolutely, i.e., as the distance from
- the left margin. For example, the following sets 6 tab stops every
- one inch.
-
-
- .ta 1i 2i 3i 4i 5i 6i
-
- Tab stops can also be specified using a leading `+' which means
- that the specified tab stop is set relative to the previous tab
- stop. For example, the following is equivalent to the previous
- example.
-
-
- .ta 1i +1i +1i +1i +1i +1i
-
- `gtroff' supports an extended syntax to specify repeat values after
- the `T' mark (these values are always taken as relative) - this is
- the usual way to specify tabs set at equal intervals. The
- following is, yet again, the same as the previous examples. It
- does even more since it defines an infinite number of tab stops
- separated by one inch.
-
-
- .ta T 1i
-
- Now we are ready to interpret the full syntax given at the
- beginning: Set tabs at positions N1, N2, ..., NN and then set tabs
- at NN+R1, NN+R2, ..., NN+RN and then at NN+RN+R1, NN+RN+R2, ...,
- NN+RN+RN, and so on.
-
- Example: `4c +6c T 3c 5c 2c' is equivalent to `4c 10c 13c 18c 20c
- 23c 28c 30c ...'.
-
- The material in each tab column (i.e., the column between two tab
- stops) may be justified to the right or left or centered in the
- column. This is specified by appending `R', `L', or `C' to the tab
- specifier. The default justification is `L'. Example:
-
-
- .ta 1i 2iC 3iR
-
- Some notes:
-
- * The default unit of the `ta' request is `m'.
-
- * A tab stop is converted into a non-breakable horizontal
- movement which can be neither stretched nor squeezed. For
- example,
-
-
- .ds foo a\tb\tc
- .ta T 5i
- \*[foo]
-
- creates a single line which is a bit longer than 10 inches (a
- string is used to show exactly where the tab characters are).
- Now consider the following:
-
-
- .ds bar a\tb b\tc
- .ta T 5i
- \*[bar]
-
- `gtroff' first converts the tab stops of the line into
- unbreakable horizontal movements, then splits the line after
- the second `b' (assuming a sufficiently short line length).
- Usually, this isn't what the user wants.
-
- * Superfluous tabs (i.e., tab characters which do not
- correspond to a tab stop) are ignored except the first one
- which delimits the characters belonging to the last tab stop
- for right-justifying or centering. Consider the following
- example
-
-
- .ds Z foo\tbar\tfoo
- .ds ZZ foo\tbar\tfoobar
- .ds ZZZ foo\tbar\tfoo\tbar
- .ta 2i 4iR
- \*[Z]
- .br
- \*[ZZ]
- .br
- \*[ZZZ]
- .br
-
- which produces the following output:
-
-
- foo bar foo
- foo bar foobar
- foo bar foobar
-
- The first line right-justifies the second `foo' relative to
- the tab stop. The second line right-justifies `foobar'. The
- third line finally right-justifies only `foo' because of the
- additional tab character which marks the end of the string
- belonging to the last defined tab stop.
-
- * Tab stops are associated with the current environment (*note
- Environments::).
-
- * Calling `ta' without an argument removes all tab stops.
-
- * The start-up value of `gtroff' is `T 0.8i'.
-
- The read-only number register `.tabs' contains a string
- representation of the current tab settings suitable for use as an
- argument to the `ta' request.
-
-
- .ds tab-string \n[.tabs]
- \*[tab-string]
- => T120u
-
- The `troff' version of the Plan 9 operating system uses register
- `.S' for the same purpose.
-
- - Request: .tc [fill-glyph]
- Normally `gtroff' fills the space to the next tab stop with
- whitespace. This can be changed with the `tc' request. With no
- argument `gtroff' reverts to using whitespace, which is the
- default. The value of this "tab repetition character" is
- associated with the current environment (*note Environments::).(1)
- (*note Tabs and Fields-Footnote-1::)
-
- - Request: .linetabs n
- - Register: \n[.linetabs]
- If N is missing or not zero, enable "line-tabs" mode, or disable
- it otherwise (the default). In line-tabs mode, `gtroff' computes
- tab distances relative to the (current) output line instead of the
- input line.
-
- For example, the following code:
-
-
- .ds x a\t\c
- .ds y b\t\c
- .ds z c
- .ta 1i 3i
- \*x
- \*y
- \*z
-
- in normal mode, results in the output
-
-
- a b c
-
- in line-tabs mode, the same code outputs
-
-
- a b c
-
- Line-tabs mode is associated with the current environment. The
- read-only register `.linetabs' is set to 1 if in line-tabs mode,
- and 0 in normal mode.
-
-* Menu:
-
-* Leaders::
-* Fields::
-
-
-File: groff, Node: Tabs and Fields-Footnotes, Up: Tabs and Fields
-
- (1) "Tab repetition character" is a misnomer since it is an output
-glyph.
-
-
-File: groff, Node: Leaders, Next: Fields, Prev: Tabs and Fields, Up: Tabs and Fields
-
-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'\En[.s]*60/100'
- .ds } \s0\v'.3m'
-
- Another example to demonstrate the differences between the various
- escape sequences, using a strange escape character, `-'.
-
-
- .ec -
- .de xxx
- --A'123'
- ..
- .xxx
- => -A'foo'
-
- The result is surprising for most users, expecting `1' since `foo'
- is a valid identifier. What has happened? As mentioned above,
- the leading escape character makes the following character
- ordinary. Written with the default escape character the sequence
- `--' becomes `\-' - this is the minus sign.
-
- If the escape character followed by itself is a valid escape
- sequence, only `\E' yields the expected result:
-
-
- .ec -
- .de xxx
- -EA'123'
- ..
- .xxx
- => 1
-
-
- - Escape: \.
- Similar to `\\', the sequence `\.' isn't a real escape sequence.
- As before, a warning message is suppressed if the escape character
- is followed by a dot, and the dot itself is printed.
-
-
- .de foo
- . nop foo
- .
- . de bar
- . nop bar
- \\..
- .
- ..
- .foo
- .bar
- => foo bar
-
- The first backslash is consumed while the macro is read, and the
- second is swallowed while exexuting macro `foo'.
-
- A "translation" is a mapping of an input character to an output
-glyph. The mapping occurs at output time, i.e., the input character
-gets assigned the metric information of the mapped output character
-right before input tokens are converted to nodes (*note Gtroff
-Internals::, for more on this process).
-
- - Request: .tr abcd...
- - Request: .trin abcd...
- Translate character A to glyph B, character C to glyph D, etc. If
- there is an odd number of arguments, the last one is translated to
- an unstretchable space (`\ ').
-
- The `trin' request is identical to `tr', but when you unformat a
- diversion with `asciify' it ignores the translation. *Note
- Diversions::, for details about the `asciify' request.
-
- Some notes:
-
- * Special characters (`\(XX', `\[XXX]', `\C'XXX'', `\'', `\`',
- `\-', `\_'), glyphs defined with the `char' request, and
- numbered glyphs (`\N'XXX'') can be translated also.
-
- * The `\e' escape can be translated also.
-
- * Characters can be mapped onto the `\%' and `\~' escapes (but
- `\%' and `\~' can't be mapped onto another glyph).
-
- * The following characters can't be translated: space (with one
- exception, see below), backspace, newline, leader (and `\a'),
- tab (and `\t').
-
- * Translations are not considered for finding the soft hyphen
- character set with the `shc' request.
-
- * The pair `C\&' (this is an arbitrary character C followed by
- the zero width space character) maps this character to
- nothing.
-
-
- .tr a\&
- foo bar
- => foo br
-
- It is even possible to map the space character to nothing:
-
-
- .tr aa \&
- foo bar
- => foobar
-
- As shown in the example, the space character can't be the
- first character/glyph pair as an argument of `tr'.
- Additionally, it is not possible to map the space character
- to any other glyph; requests like `.tr aa x' undo `.tr aa \&'
- instead.
-
- If justification is active, lines are justified in spite of
- the `empty' space character (but there is no minimal
- distance, i.e. the space character, between words).
-
- * After an output glyph has been constructed (this happens at
- the moment immediately before the glyph is appended to an
- output glyph list, either by direct output, in a macro,
- diversion, or string), it is no longer affected by `tr'.
-
- * Translating character to glyphs where one of them or both are
- undefined is possible also; `tr' does not check whether the
- entities in its argument do exist.
-
- *Note Gtroff Internals::.
-
- * `troff' no longer has a hard-coded dependency on Latin-1; all
- `charXXX' entities have been removed from the font
- description files. This has a notable consequence which
- shows up in warnings like `can't find character with input
- code XXX' if the `tr' request isn't handled properly.
-
- Consider the following translation:
-
-
- .tr 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.
-
diff --git a/contrib/groff/doc/groff-5 b/contrib/groff/doc/groff-5
deleted file mode 100644
index 2130766..0000000
--- a/contrib/groff/doc/groff-5
+++ /dev/null
@@ -1,1327 +0,0 @@
-This is groff, produced by makeinfo version 4.3d from ./groff.texinfo.
-
-This manual documents GNU `troff' version 1.19.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003 Free Software Foundation,
-Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff, Node: 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::.
-
-
-File: groff, Node: Page Control, Next: Fonts and Symbols, 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::).
-
- The number register `.pe' is set to 1 while `bp' is active. *Note
- Page Location Traps::.
-
- - Request: .ne [space]
- It is often necessary to force a certain amount of space before a
- new page occurs. This is most useful to make sure that there is
- not a single "orphan" line left at the bottom of a page. The `ne'
- request ensures that there is a certain distance, specified by the
- first argument, before the next page is triggered (see *Note
- Traps::, for further information). The default scaling indicator
- for `ne' is `v'; the default value of SPACE is 1v if no argument
- is given.
-
- For example, to make sure that no fewer than 2 lines get orphaned,
- do the following before each paragraph:
-
-
- .ne 2
- text text text
-
- `ne' will then automatically cause a page break if there is space
- for one line only.
-
- - Request: .sv [space]
- - Request: .os
- `sv' is similar to the `ne' request; it reserves the specified
- amount of vertical space. If the desired amount of space exists
- before the next trap (or the bottom page boundary if no trap is
- set), the space is output immediately (ignoring a partially filled
- line which stays untouched). If there is not enough space, it is
- stored for later output via the `os' request. The default value
- is 1v if no argument is given; the default scaling indicator is
- `v'.
-
- Both `sv' and `os' ignore no-space mode. While the `sv' request
- allows negative values for SPACE, `os' will ignore them.
-
- - Register: \n[nl]
- This register contains the current vertical position. If the
- vertical position is zero and the top of page transition hasn't
- happened yet, `nl' is set to negative value. `gtroff' itself does
- this at the very beginning of a document before anything has been
- printed, but the main usage is to plant a header trap on a page if
- this page has already started.
-
- Consider the following:
-
-
- .de xxx
- . sp
- . tl ''Header''
- . sp
- ..
- .
- First page.
- .bp
- .wh 0 xxx
- .nr nl (-1)
- Second page.
-
- Result:
-
-
- First page.
-
- ...
-
- Header
-
- Second page.
-
- ...
-
- Without resetting `nl' to a negative value, the just planted trap
- would be active beginning with the _next_ page, not the current
- one.
-
- *Note Diversions::, for a comparison with the `.h' and `.d'
- registers.
-
-
-File: groff, Node: Fonts and Symbols, Next: Sizes, Prev: Page Control, Up: gtroff Reference
-
-Fonts and Symbols
-=================
-
- `gtroff' can switch fonts at any point in the text.
-
- The basic set of fonts is `R', `I', `B', and `BI'. These are Times
-Roman, Italic, Bold, and Bold Italic. For non-TTY devices, there is
-also at least one symbol font which contains various special symbols
-(Greek, mathematics).
-
-* Menu:
-
-* Changing Fonts::
-* Font Families::
-* Font Positions::
-* Using Symbols::
-* Special Fonts::
-* Artificial Fonts::
-* Ligatures and Kerning::
-
-
-File: groff, Node: Changing Fonts, Next: Font Families, Prev: Fonts and Symbols, Up: Fonts and Symbols
-
-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 and Symbols
-
-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 and Symbols
-
-Font Positions
---------------
-
- For the sake of old phototypesetters and compatibility with old
-versions of `troff', `gtroff' has the concept of font "positions", on
-which various fonts are mounted.
-
- - Request: .fp pos font [external-name]
- - Register: \n[.f]
- - Register: \n[.fp]
- Mount font FONT at position POS (which must be a non-negative
- integer). This numeric position can then be referred to with font
- changing commands. When `gtroff' starts it is using font
- position 1 (which must exist; position 0 is unused usually at
- start-up).
-
- The current font in use, as a font position, is available in the
- read-only number register `.f'. This can be useful to remember the
- current font for later recall. It is associated with the current
- environment (*note Environments::).
-
-
- .nr save-font \n[.f]
- .ft B
- ... text text text ...
- .ft \n[save-font]
-
- The number of the next free font position is available in the
- read-only number register `.fp'. This is useful when mounting a
- new font, like so:
-
-
- .fp \n[.fp] NEATOFONT
-
- Fonts not listed in the `DESC' file are automatically mounted on
- the next available font position when they are referenced. If a
- font is to be mounted explicitly with the `fp' request on an unused
- font position, it should be mounted on the first unused font
- position, which can be found in the `.fp' register. Although
- `gtroff' does not enforce this strictly, it is not allowed to
- mount a font at a position whose number is much greater (approx.
- 1000 positions) than that of any currently used position.
-
- The `fp' request has an optional third argument. This argument
- gives the external name of the font, which is used for finding the
- font description file. The second argument gives the internal
- name of the font which is used to refer to the font in `gtroff'
- after it has been mounted. If there is no third argument then the
- internal name is used as the external name. This feature makes it
- possible to use fonts with long names in compatibility mode.
-
- Both the `ft' request and the `\f' escape have alternative syntax
-forms to access font positions.
-
- - Request: .ft nnn
- - Escape: \fn
- - Escape: \f(nn
- - Escape: \f[nnn]
- Change the current font position to NNN (one-digit position N,
- two-digit position NN), which must be a non-negative integer.
-
- If NNN is associated with a style (as set with the `sty' request
- or with the `styles' command in the `DESC' file), use it within
- the current font family (as set with the `fam' request, the `\F'
- escape, or with the `family' command in the `DESC' file).
-
-
- this is font 1
- .ft 2
- this is font 2
- .ft \" switch back to font 1
- .ft 3
- this is font 3
- .ft
- this is font 1 again
-
- *Note Changing Fonts::, for the standard syntax form.
-
-
-File: groff, Node: Using Symbols, Next: Special Fonts, Prev: Font Positions, Up: Fonts and Symbols
-
-Using Symbols
--------------
-
- A "glyph" is a graphical representation of a "character". While a
-character is an abstract entity containing semantic information, a
-glyph is something which can be actually seen on screen or paper. It
-is possible that a character has multiple glyph representation forms
-(for example, the character `A' can be either written in a roman or an
-italic font, yielding two different glyphs); sometimes more than one
-character maps to a single glyph (this is a "ligature" - the most
-common is `fi').
-
- A "symbol" is simply a named glyph. Within `gtroff', all glyph
-names of a particular font are defined in its font file. If the user
-requests a glyph not available in this font, `gtroff' looks up an
-ordered list of "special fonts". By default, the POSTSCRIPT output
-device supports the two special fonts `SS' (slanted symbols) and `S'
-(symbols) (the former is looked up before the latter). Other output
-devices use different names for special fonts. Fonts mounted with the
-`fonts' keyword in the `DESC' file are globally available. To install
-additional special fonts locally (i.e. for a particular font), use the
-`fspecial' request.
-
- Here the exact rules how `gtroff' searches a given symbol:
-
- * If the symbol has been defined with the `char' request, use it.
- This hides a symbol with the same name in the current font.
-
- * Check the current font.
-
- * If the symbol has been defined with the `fchar' request, use it.
-
- * Check whether the current font has a font-specific list of special
- fonts; test all fonts in the order of appearance in the last
- `fspecial' call if appropriate.
-
- * If the symbol has been defined with the `fschar' request for the
- current font, use it.
-
- * Check all fonts in the order of appearance in the last `special'
- call.
-
- * If the symbol has been defined with the `schar' request, use it.
-
- * As a last resort, consult all fonts loaded up to now for special
- fonts and check them, starting with the lowest font number. Note
- that this can sometimes lead to surprising results since the
- `fonts' line in the `DESC' file often contains empty positions
- which are filled later on. For example, consider the following:
-
-
- fonts 3 0 0 FOO
-
- This mounts font `foo' at font position 3. We assume that `FOO'
- is a special font, containing glyph `foo', and that no font has
- been loaded yet. The line
-
-
- .fspecial BAR BAZ
-
- makes font `BAZ' special only if font `BAR' is active. We further
- assume that `BAZ' is really a special font, i.e., the font
- description file contains the `special' keyword, and that it also
- contains glyph `foo' with a special shape fitting to font `BAR'.
- After executing `fspecial', font `BAR' is loaded at font
- position 1, and `BAZ' at position 2.
-
- We now switch to a new font `XXX', trying to access glyph `foo'
- which is assumed to be missing. There are neither font-specific
- special fonts for `XXX' nor any other fonts made special with the
- `special' request, so `gtroff' starts the search for special fonts
- in the list of already mounted fonts, with increasing font
- positions. Consequently, it finds `BAZ' before `FOO' even for
- `XXX' which is not the intended behaviour.
-
- *Note Font Files::, and *Note Special Fonts::, for more details.
-
- The list of available symbols is device dependent; see the
-`groff_char(7)' man page for a complete list of all glyphs. For
-example, say
-
-
- man -Tdvi groff_char > groff_char.dvi
-
-for a list using the default DVI fonts (not all versions of the `man'
-program support the `-T' option). If you want to use an additional
-macro package to change the used fonts, `groff' must be called directly:
-
-
- groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
-
- Glyph names not listed in groff_char(7) are derived algorithmically,
-using a simplified version of the Adobe Glyph List (AGL) algorithm
-described in
-`http://partners.adobe.com/asn/developer/typeforum/unicodegn.html'.
-The (frozen) set of glyph names which can't be derived algorithmically
-is called "groff glyph list (GGL)".
-
- * A glyph for Unicode character U+XXXX[X[X]] which is not a
- composite character will be named `uXXXX[X[X]]'. X must be an
- uppercase hexadecimal digit. Examples: `u1234', `u008E',
- `u12DB8'. The largest Unicode value is 0x10FFFF. There must be at
- least four `X' digits; if necessary, add leading zeroes (after the
- `u'). No zero padding is allowed for character codes greater than
- 0xFFFF. Surrogates (i.e., Unicode values greater than 0xFFFF
- represented with character codes from the surrogate area
- U+D800-U+DFFF) are not allowed too.
-
- * A glyph representing more than a single input character will be
- named
-
- `u' COMPONENT1 `_' COMPONENT2 `_' COMPONENT3 ...
-
- Example: `u0045_0302_0301'.
-
- For simplicity, all Unicode characters which are composites must be
- decomposed maximally (this is normalization form D in the Unicode
- standard); for example, `u00CA_0301' is not a valid glyph name
- since U+00CA (LATIN CAPITAL LETTER E WITH CIRCUMFLEX) can be
- further decomposed into U+0045 (LATIN CAPITAL LETTER E) and U+0302
- (COMBINING CIRCUMFLEX ACCENT). `u0045_0302_0301' is thus the
- glyph name for U+1EBE, LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND
- ACUTE.
-
- * groff maintains a table to decompose all algorithmically derived
- glyph names which are composites itself. For example, `u0100'
- (LATIN LETTER A WITH MACRON) will be automatically decomposed into
- `u0041_0304'. Additionally, a glyph name of the GGL is preferred
- to an algorithmically derived glyph name; groff also automatically
- does the mapping. Example: The glyph `u0045_0302' will be mapped
- to `^E'.
-
- * glyph names of the GGL can't be used in composite glyph names; for
- example, `^E_u0301' is invalid.
-
- - Escape: \(nm
- - Escape: \[name]
- - Escape: \[component1 component2 ...]
- Insert a symbol NAME (two-character name NM) or a composite glyph
- with component glyphs COMPONENT1, COMPONENT2, .... There is no
- special syntax for one-character names - the natural form `\N'
- would collide with escapes.(1) (*note Using Symbols-Footnote-1::)
-
- If NAME is undefined, a warning of type `char' is generated, and
- the escape is ignored. *Note Debugging::, for information about
- warnings.
-
- groff resolves `\[...]' with more than a single component as
- follows:
-
- * Any component which is found in the GGL will be converted to
- the `uXXXX' form.
-
- * Any component `uXXXX' which is found in the list of
- decomposable glyphs will be decomposed.
-
- * The resulting elements are then concatenated with `_'
- inbetween, dropping the leading `u' in all elements but the
- first.
-
- No check for the existence of any component (similar to `tr'
- request) will be done.
-
- Examples:
-
- `\[A ho]'
- `A' maps to `u0041', `ho' maps to `u02DB', thus the final
- glyph name would be `u0041_02DB'. Note this is not the
- expected result: The ogonek glyph `ho' is a spacing ogonek,
- but for a proper composite a non-spacing ogonek (U+0328) is
- necessary. Looking into the file `composite.tmac' one can
- find `.composite ho u0328' which changes the mapping of `ho'
- while a composite glyph name is constructed, causing the
- final glyph name to be `u0041_0328'.
-
- `\[^E u0301]'
- `\[^E aa]'
- `\[E a^ aa]'
- `\[E ^ ']'
- `^E' maps to `u0045_0302', thus the final glyph name is
- `u0045_0302_0301' in all forms (assuming proper calls of the
- `composite' request).
-
- It is not possible to define glyphs with names like `A ho' within
- a groff font file. This is not really a limitation; instead, you
- have to define `u0041_0328'.
-
- - Escape: \C'xxx'
- Typeset the glyph named XXX.(2) (*note Using Symbols-Footnote-2::)
- Normally it is more convenient to use `\[XXX]', but `\C' has the
- advantage that it is compatible with newer versions of AT&T
- `troff' and is available in compatibility mode.
-
- - Request: .composite from to
- Map glyph name FROM to glyph name TO if it is used in `\[...]'
- with more than one component. See above for examples.
-
- This mapping is based on glyph names only; no check for the
- existence of either glyph is done.
-
- A set of default mappings for many accents can be found in the file
- `composite.tmac' which is loaded at start-up.
-
- - Escape: \N'n'
- Typeset the glyph with code N in the current font (`n' is *not*
- the input character code). The number N can be any non-negative
- decimal integer. Most devices only have glyphs with codes between
- 0 and 255; the Unicode output device uses codes in the range
- 0-65535. If the current font does not contain a glyph with that
- code, special fonts are _not_ searched. The `\N' escape sequence
- can be conveniently used in conjunction with the `char' request:
-
-
- .char \[phone] \f[ZD]\N'37'
-
- The code of each glyph is given in the fourth column in the font
- description file after the `charset' command. It is possible to
- include unnamed glyphs in the font description file by using a
- name of `---'; the `\N' escape sequence is the only way to use
- these.
-
- No kerning is applied to glyphs accessed with `\N'.
-
- Some escape sequences directly map onto special glyphs.
-
- - Escape: \'
- This is a backslash followed by the apostrophe character, ASCII
- character `0x27' (EBCDIC character `0x7D'). The same as `\[aa]',
- the acute accent.
-
- - Escape: \`
- This is a backslash followed by ASCII character `0x60' (EBCDIC
- character `0x79' usually). The same as `\[ga]', the grave accent.
-
- - Escape: \-
- This is the same as `\[-]', the minus sign in the current font.
-
- - Request: .cflags n c1 c2 ...
- Input characters and symbols have certain properties associated
- with it.(3) (*note Using Symbols-Footnote-3::) These properties
- can be modified with the `cflags' request. The first argument is
- the sum of the desired flags and the remaining arguments are the
- characters or symbols to have those properties. It is possible to
- omit the spaces between the characters or symbols.
-
- `1'
- The character ends sentences (initially characters `.?!' have
- this property).
-
- `2'
- Lines can be broken before the character (initially no
- characters have this property).
-
- `4'
- Lines can be broken after the character (initially the
- character `-' and the symbols `\[hy]' and `\[em]' have this
- property).
-
- `8'
- The character overlaps horizontally (initially the symbols
- `\[ul]', `\[rn]', `\[ru]', `\[radicalex', and `\[sqrtex]'
- 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]' and `\[rq]' have this property).
-
- - Request: .char g [string]
- - Request: .fchar g [string]
- - Request: .fschar f g [string]
- - Request: .schar g [string]
- Define a new glyph G to be STRING (which can be empty).(4) (*note
- Using Symbols-Footnote-4::) Every time glyph G needs to be
- printed, STRING is processed in a temporary environment and the
- result is wrapped up into a single object. Compatibility mode is
- turned off and the escape character is set to `\' while STRING is
- being processed. Any emboldening, constant spacing or track
- kerning is applied to this object rather than to individual
- characters in STRING.
-
- A glyph defined by these requests can be used just like a normal
- glyph provided by the output device. In particular, other
- characters can be translated to it with the `tr' or `trin'
- requests; it can be made the leader character by the `lc' request;
- repeated patterns can be drawn with the glyph using the `\l' and
- `\L' escape sequences; words containing the glyph can be
- hyphenated correctly if the `hcode' request is used to give the
- glyph's symbol a hyphenation code.
-
- There is a special anti-recursion feature: Use of `g' within the
- glyph's definition is handled like normal characters and symbols
- not defined with `char'.
-
- Note that the `tr' and `trin' requests take precedence if `char'
- accesses the same symbol.
-
-
- .tr XY
- X
- => Y
- .char X Z
- X
- => Y
- .tr XX
- X
- => Z
-
- The `fchar' request defines a fallback glyph: `gtroff' only checks
- for glyphs defined with `fchar' if it cannot find the glyph in the
- current font. `gtroff' carries out this test before checking
- special fonts.
-
- `fschar' defines a fallback glyph for font F: `gtroff' checks for
- glyphs defined with `fschar' after the list of fonts declared as
- font-specific special fonts with the `fspecial' request, but
- before the list of fonts declared as global special fonts with the
- `special' request.
-
- Finally, the `schar' request defines a global fallback glyph:
- `gtroff' checks for glyphs defined with `schar' after the list of
- fonts declared as global special fonts with the `special' request,
- but before the already mounted special fonts.
-
- *Note Using Symbols::, for a detailed description of the glyph
- searching mechanism in `gtroff'.
-
- - Request: .rchar c1 c2 ...
- - Request: .rfschar f c1 c2 ...
- Remove the definitions of glyphs C1, C2, .... This undoes the
- effect of a `char', `fchar', or `schar' request.
-
- It is possible to omit the whitespace between arguments.
-
- The request `rfschar' removes glyph definitions defined with
- `fschar' for glyph f.
-
- *Note Special Characters::.
-
-
-File: groff, Node: Using Symbols-Footnotes, Up: Using Symbols
-
- (1) Note that a one-character symbol is not the same as an input
-character, i.e., the character `a' is not the same as `\[a]'. By
-default, `groff' defines only a single one-character symbol, `\[-]'; it
-is usually accessed as `\-'. On the other hand, `gtroff' has the
-special feature that `\[charXXX]' is the same as the input character
-with character code XXX. For example, `\[char97]' is identical to the
-letter `a' if ASCII encoding is active.
-
- (2) `\C' is actually a misnomer since it accesses an output glyph.
-
- (3) Note that the output glyphs themselves don't have such
-properties. For `gtroff', a glyph is a numbered box with a given
-width, depth, and height, nothing else. All manipulations with the
-`cflags' request work on the input level.
-
- (4) `char' is a misnomer since an output glyph is defined.
-
-
-File: groff, Node: Special Fonts, Next: Artificial Fonts, Prev: Using Symbols, Up: Fonts and Symbols
-
-Special Fonts
--------------
-
- Special fonts are those that `gtroff' searches when it cannot find
-the requested glyph in the current font. The Symbol font is usually a
-special font.
-
- `gtroff' provides the following two requests to add more special
-fonts. *Note Using Symbols::, for a detailed description of the glyph
-searching mechanism in `gtroff'.
-
- Usually, only non-TTY devices have special fonts.
-
- - Request: .special [s1 s2 ...]
- - Request: .fspecial f [s1 s2 ...]
- Use the `special' request to define special fonts. Initially, this
- list is empty.
-
- Use the `fspecial' request to designate special fonts only when
- font F is active. Initially, this list is empty.
-
- Previous calls to `special' or `fspecial' are overwritten; without
- arguments, the particular list of special fonts is set to empty.
- Special fonts are searched in the order they appear as arguments.
-
- All fonts which appear in a call to `special' or `fspecial' are
- loaded.
-
- *Note Using Symbols::, for the exact search order of glyphs.
-
-
-File: groff, Node: Artificial Fonts, Next: Ligatures and Kerning, Prev: Special Fonts, Up: Fonts and Symbols
-
-Artificial Fonts
-----------------
-
- There are a number of requests and escapes for artificially creating
-fonts. These are largely vestiges of the days when output devices did
-not have a wide variety of fonts, and when `nroff' and `troff' were
-separate programs. Most of them are no longer necessary in GNU
-`troff'. Nevertheless, they are supported.
-
- - Escape: \H'height'
- - Escape: \H'+height'
- - Escape: \H'-height'
- - Register: \n[.height]
- Change (increment, decrement) the height of the current font, but
- not the width. If HEIGHT is zero, restore the original height.
- Default scaling indicator is `z'.
-
- The read-only number register `.height' contains the font height as
- set by `\H'.
-
- Currently, only the `-Tps' device supports this feature.
-
- Note that `\H' doesn't produce an input token in `gtroff'. As a
- consequence, it can be used in requests like `mc' (which expects a
- single character as an argument) to change the font on the fly:
-
-
- .mc \H'+5z'x\H'0'
-
- In compatibility mode, `gtroff' behaves differently: If an
- increment or decrement is used, it is always taken relative to the
- current point size and not relative to the previously selected font
- height. Thus,
-
-
- .cp 1
- \H'+5'test \H'+5'test
-
- prints the word `test' twice with the same font height (five
- points larger than the current font size).
-
- - Escape: \S'slant'
- - Register: \n[.slant]
- Slant the current font by SLANT degrees. Positive values slant to
- the right. Only integer values are possible.
-
- The read-only number register `.slant' contains the font slant as
- set by `\S'.
-
- Currently, only the `-Tps' device supports this feature.
-
- Note that `\S' doesn't produce an input token in `gtroff'. As a
- consequence, it can be used in requests like `mc' (which expects a
- single character as an argument) to change the font on the fly:
-
-
- .mc \S'20'x\S'0'
-
- This request is incorrectly documented in the original UNIX troff
- manual; the slant is always set to an absolute value.
-
- - Request: .ul [lines]
- The `ul' request normally underlines subsequent lines if a TTY
- output device is used. Otherwise, the lines are printed in italics
- (only the term `underlined' is used in the following). The single
- argument is the number of input lines to be underlined; with no
- argument, the next line is underlined. If LINES is zero or
- negative, stop the effects of `ul' (if it was active). Requests
- and empty lines do not count for computing the number of underlined
- input lines, even if they produce some output like `tl'. Lines
- inserted by macros (e.g. invoked by a trap) do count.
-
- At the beginning of `ul', the current font is stored and the
- underline font is activated. Within the span of a `ul' request,
- it is possible to change fonts, but after the last line affected by
- `ul' the saved font is restored.
-
- This number of lines still to be underlined is associated with the
- current environment (*note Environments::). The underline font
- can be changed with the `uf' request.
-
- The `ul' request does not underline spaces.
-
- - Request: .cu [lines]
- The `cu' request is similar to `ul' but underlines spaces as well
- (if a TTY output device is used).
-
- - Request: .uf font
- Set the underline font (globally) used by `ul' and `cu'. By
- default, this is the font at position 2. FONT can be either a
- non-negative font position or the name of a font.
-
- - Request: .bd font [offset]
- - Request: .bd font1 font2 [offset]
- - Register: \n[.b]
- Artificially create a bold font by printing each glyph twice,
- slightly offset.
-
- Two syntax forms are available.
-
- * Imitate a bold font unconditionally. The first argument
- specifies the font to embolden, and the second is the number
- of basic units, minus one, by which the two glyphs are
- offset. If the second argument is missing, emboldening is
- turned off.
-
- FONT can be either a non-negative font position or the name
- of a font.
-
- OFFSET is available in the `.b' read-only register if a
- special font is active; in the `bd' request, its default unit
- is `u'.
-
- * Imitate a bold form conditionally. Embolden FONT1 by OFFSET
- only if font FONT2 is the current font. This command can be
- issued repeatedly to set up different emboldening values for
- different current fonts. If the second argument is missing,
- emboldening is turned off for this particular current font.
-
- This affects special fonts only (either set up with the
- `special' command in font files or with the `fspecial'
- request).
-
- - Request: .cs font [width [em-size]]
- Switch to and from "constant glyph space mode". If activated, the
- width of every glyph is WIDTH/36 ems. The em size is given
- absolutely by EM-SIZE; if this argument is missing, the em value
- is taken from the current font size (as set with the `ps' request)
- when the font is effectively in use. Without second and third
- argument, constant glyph space mode is deactivated.
-
- Default scaling indicator for EM-SIZE is `z'; WIDTH is an integer.
-
-
-File: groff, Node: Ligatures and Kerning, Prev: Artificial Fonts, Up: Fonts and Symbols
-
-Ligatures and Kerning
----------------------
-
- Ligatures are groups of characters that are run together, i.e,
-producing a single glyph. For example, the letters `f' and `i' can
-form a ligature `fi' as in the word `file'. This produces a cleaner
-look (albeit subtle) to the printed output. Usually, ligatures are not
-available in fonts for TTY output devices.
-
- Most POSTSCRIPT fonts support the fi and fl ligatures. The C/A/T
-typesetter that was the target of AT&T `troff' also supported `ff',
-`ffi', and `ffl' ligatures. Advanced typesetters or `expert' fonts may
-include ligatures for `ft' and `ct', although GNU `troff' does not
-support these (yet).
-
- Only the current font is checked for ligatures and kerns; neither
-special fonts nor entities defined with the `char' request (and its
-siblings) are taken into account.
-
- - Request: .lg [flag]
- - Register: \n[.lg]
- Switch the ligature mechanism on or off; if the parameter is
- non-zero or missing, ligatures are enabled, otherwise disabled.
- Default is on. The current ligature mode can be found in the
- read-only number register `.lg' (set to 1 or 2 if ligatures are
- enabled, 0 otherwise).
-
- Setting the ligature mode to 2 enables the two-character ligatures
- (fi, fl, and ff) and disables the three-character ligatures (ffi
- and ffl).
-
- "Pairwise kerning" is another subtle typesetting mechanism that
-modifies the distance between a glyph pair to improve readability. In
-most cases (but not always) the distance is decreased. Typewriter-like
-fonts and fonts for terminals where all glyphs have the same width
-don't use kerning.
-
- - Request: .kern [flag]
- - Register: \n[.kern]
- Switch kerning on or off. If the parameter is non-zero or missing,
- enable pairwise kerning, otherwise disable it. The read-only
- number register `.kern' is set to 1 if pairwise kerning is enabled,
- 0 otherwise.
-
- If the font description file contains pairwise kerning information,
- glyphs from that font are kerned. Kerning between two glyphs can
- be inhibited by placing `\&' between them: `V\&A'.
-
- *Note Font File Format::.
-
- "Track kerning" expands or reduces the space between glyphs. This
-can be handy, for example, if you need to squeeze a long word onto a
-single line or spread some text to fill a narrow column. It must be
-used with great care since it is usually considered bad typography if
-the reader notices the effect.
-
- - Request: .tkf f s1 n1 s2 n2
- Enable track kerning for font F. If the current font is F the
- width of every glyph is increased by an amount between N1 and N2
- (N1, N2 can be negative); if the current point size is less than
- or equal to S1 the width is increased by N1; if it is greater than
- or equal to S2 the width is increased by N2; if the point size is
- greater than or equal to S1 and less than or equal to S2 the
- increase in width is a linear function of the point size.
-
- The default scaling indicator is `z' for S1 and S2, `p' for N1 and
- N2.
-
- Note that the track kerning amount is added even to the rightmost
- glyph in a line; for large values it is thus recommended to
- increase the line length by the same amount to compensate it.
-
- Sometimes, when typesetting letters of different fonts, more or less
-space at such boundaries are needed. There are two escapes to help
-with this.
-
- - Escape: \/
- Increase the width of the preceding glyph so that the spacing
- between that glyph and the following glyph is correct if the
- following glyph is a roman glyph. For example, if an italic `f'
- is immediately followed by a roman right parenthesis, then in many
- fonts the top right portion of the `f' overlaps the top left of
- the right parenthesis. Use this escape sequence whenever an
- italic glyph is immediately followed by a roman glyph without any
- intervening space. This small amount of space is also called
- "italic correction".
-
-
- - Escape: \,
- Modify the spacing of the following glyph so that the spacing
- between that glyph and the preceding glyph is correct if the
- preceding glyph is a roman glyph. Use this escape sequence
- whenever a roman glyph is immediately followed by an italic glyph
- without any intervening space. In analogy to above, this space
- could be called "left italic correction", but this term isn't used
- widely.
-
-
- - Escape: \&
- Insert a zero-width character, which is invisible. Its intended
- use is to stop interaction of a character with its surrounding.
-
- * It prevents the insertion of extra space after an
- end-of-sentence character.
-
-
- Test.
- Test.
- => Test. Test.
- Test.\&
- Test.
- => Test. Test.
-
- * It prevents interpretation of a control character at the
- beginning of an input line.
-
-
- .Test
- => warning: `Test' not defined
- \&.Test
- => .Test
-
- * It prevents kerning between two glyphs.
-
- * It is needed to map an arbitrary character to nothing in the
- `tr' request (*note Character Translations::).
-
- - Escape: \)
- This escape is similar to `\&' except that it behaves like a
- character declared with the `cflags' request to be transparent for
- the purposes of an end-of-sentence character.
-
- Its main usage is in macro definitions to protect against arguments
- starting with a control character.
-
-
- .de xxx
- \)\\$1
- ..
- .de yyy
- \&\\$1
- ..
- This is a test.\c
- .xxx '
- This is a test.
- =>This is a test.' This is a test.
- This is a test.\c
- .yyy '
- This is a test.
- =>This is a test.' This is a test.
-
-
-
-File: groff, Node: Sizes, Next: Strings, Prev: Fonts and Symbols, Up: gtroff Reference
-
-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.
-
diff --git a/contrib/groff/doc/groff-6 b/contrib/groff/doc/groff-6
deleted file mode 100644
index f7f01e1..0000000
--- a/contrib/groff/doc/groff-6
+++ /dev/null
@@ -1,1462 +0,0 @@
-This is groff, produced by makeinfo version 4.3d from ./groff.texinfo.
-
-This manual documents GNU `troff' version 1.19.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003 Free Software Foundation,
-Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff, Node: 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 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::.
-
-
-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 and Macro
- Arguments::, and *Note Parameters::.
-
- Example:
-
-
- .ds foo a \\$1 test
- .
- This is \*[foo nice].
- => This is a nice test.
-
- The `\*' escape "interpolates" (expands in-place) a
- previously-defined string variable. To be more precise, the stored
- string is pushed onto the input stack which is then parsed by
- `gtroff'. Similar to number registers, it is possible to nest
- strings, i.e. string variables can be called within string
- variables.
-
- If the string named by the `\*' escape does not exist, it is
- defined as empty, and a warning of type `mac' is emitted (see
- *Note Debugging::, for more details).
-
- *Caution:* Unlike other requests, the second argument to the `ds'
- request takes up the entire line including trailing spaces. This
- means that comments on a line with such a request can introduce
- unwanted space into a string.
-
-
- .ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
-
- Instead the comment should be put on another line or have the
- comment escape adjacent with the end of the string.
-
-
- .ds UX \s-1UNIX\s0\u\s-3tm\s0\d\" UNIX trademark
-
- To produce leading space the string can be started with a double
- quote. No trailing quote is needed; in fact, any trailing quote is
- included in your string.
-
-
- .ds sign " Yours in a white wine sauce,
-
- Strings are not limited to a single line of text. A string can
- span several lines by escaping the newlines with a backslash. The
- resulting string is stored _without_ the newlines.
-
-
- .ds foo lots and lots \
- of text are on these \
- next several lines
-
- It is not possible to have real newlines in a string. To put a
- single double quote character into a string, use two consecutive
- double quote characters.
-
- The `ds1' request turns off compatibility mode while interpreting
- a string. To be more precise, a "compatibility save" input token
- is inserted at the beginning of the string, and a "compatibility
- restore" input token at the end.
-
-
- .nr xxx 12345
- .ds aa The value of xxx is \\n[xxx].
- .ds1 bb The value of xxx ix \\n[xxx].
- .
- .cp 1
- .
- \*(aa
- => warning: number register `[' not defined
- => The value of xxx is 0xxx].
- \*(bb
- => The value of xxx ix 12345.
-
- Strings, macros, and diversions (and boxes) share the same name
- space. Internally, even the same mechanism is used to store them.
- This has some interesting consequences. For example, it is
- possible to call a macro with string syntax and vice versa.
-
-
- .de xxx
- a funny test.
- ..
- This is \*[xxx]
- => This is a funny test.
-
- .ds yyy a funny test
- This is
- .yyy
- => This is a funny test.
-
- Diversions and boxes can be also called with string syntax.
-
- Another consequence is that you can copy one-line diversions or
- boxes to a string.
-
-
- .di xxx
- a \fItest\fR
- .br
- .di
- .ds yyy This is \*[xxx]\c
- \*[yyy].
- => This is a test.
-
- As the previous example shows, it is possible to store formatted
- output in strings. The `\c' escape prevents the insertion of an
- additional blank line in the output.
-
- Copying diversions longer than a single output line produces
- unexpected results.
-
-
- .di xxx
- a funny
- .br
- test
- .br
- .di
- .ds yyy This is \*[xxx]\c
- \*[yyy].
- => test This is a funny.
-
- Usually, it is not predictable whether a diversion contains one or
- more output lines, so this mechanism should be avoided. With UNIX
- `troff', this was the only solution to strip off a final newline
- from a diversion. Another disadvantage is that the spaces in the
- copied string are already formatted, making them unstretchable.
- This can cause ugly results.
-
- A clean solution to this problem is available in GNU `troff',
- using the requests `chop' to remove the final newline of a
- diversion, and `unformat' to make the horizontal spaces
- stretchable again.
-
-
- .box xxx
- a funny
- .br
- test
- .br
- .box
- .chop xxx
- .unformat xxx
- This is \*[xxx].
- => This is a funny test.
-
- *Note Gtroff Internals::, for more information.
-
- - Request: .as name [string]
- - Request: .as1 name [string]
- The `as' request is similar to `ds' but appends STRING to the
- string stored as NAME instead of redefining it. If NAME doesn't
- exist yet, it is created.
-
-
- .as sign " with shallots, onions and garlic,
-
- The `as1' request is similar to `as', but compatibility mode is
- switched off while the appended string is interpreted. To be more
- precise, a "compatibility save" input token is inserted at the
- beginning of the appended string, and a "compatibility restore"
- input token at the end.
-
- Rudimentary string manipulation routines are given with the next two
-requests.
-
- - Request: .substring str n1 [n2]
- Replace the string named STR with the substring defined by the
- indices N1 and N2. The first character in the string has index 0.
- If N2 is omitted, it is taken to be equal to the string's length.
- If the index value N1 or N2 is negative, it is counted from the
- end of the string, going backwards: The last character has
- index -1, the character before the last character has index -2,
- etc.
-
-
- .ds xxx abcdefgh
- .substring xxx 1 -4
- \*[xxx]
- => bcde
-
-
- - Request: .length reg str
- Compute the number of characters of STR and return it in the
- number register REG. If REG doesn't exist, it is created. `str'
- is read in copy mode.
-
-
- .ds xxx abcd\h'3i'efgh
- .length yyy \*[xxx]
- \n[yyy]
- => 14
-
-
- - Request: .rn xx yy
- Rename the request, macro, diversion, or string XX to YY.
-
- - Request: .rm xx
- Remove the request, macro, diversion, or string XX. `gtroff'
- treats subsequent invocations as if the object had never been
- defined.
-
- - Request: .als new old
- Create an alias named NEW for the request, string, macro, or
- diversion object named OLD. The new name and the old name are
- exactly equivalent (it is similar to a hard rather than a soft
- link). If OLD is undefined, `gtroff' generates a warning of type
- `mac' and ignores the request.
-
- - Request: .chop xx
- Remove (chop) the last character from the macro, string, or
- diversion named XX. This is useful for removing the newline from
- the end of diversions that are to be interpolated as strings.
- This command can be used repeatedly; see *Note Gtroff Internals::,
- for details on nodes inserted additionally by `gtroff'.
-
- *Note Identifiers::, and *Note Comments::.
-
-
-File: groff, Node: Conditionals and Loops, Next: Writing Macros, Prev: Strings, Up: gtroff Reference
-
-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 name [end]
- - Request: .am1 name [end]
- - Request: .ami name [end]
- Works similarly to `de' except it appends onto the macro named
- NAME. So, to make the previously defined `P' macro actually do
- indented instead of block paragraphs, add the necessary code to the
- existing macro like this:
-
-
- .am P
- .ti +5n
- ..
-
- The `am1' request turns off compatibility mode while executing the
- appended macro piece. To be more precise, a "compatibility save"
- input token is inserted at the beginning of the appended code, and
- a "compatibility restore" input token at the end.
-
- The `ami' request appends indirectly, meaning that `gtroff'
- expands strings whose names are NAME or END before performing the
- append.
-
- 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 and Macro Arguments::).
-
- - Escape: \$0
- The name used to invoke the current macro. The `als' request can
- make a macro have more than one name.
-
-
- .de generic-macro
- . ...
- . if \\n[error] \{\
- . tm \\$0: Houston, we have a problem.
- . return
- . \}
- ..
- .
- .als foo generic-macro
- .als bar generic-macro
-
-
- *Note Request and Macro Arguments::.
-
-
-File: groff, Node: Page Motions, Next: Drawing Requests, Prev: Writing Macros, Up: gtroff Reference
-
-Page Motions
-============
-
- *Note Manipulating Spacing::, for a discussion of the main request
-for vertical motion, `sp'.
-
- - Request: .mk [reg]
- - Request: .rt [dist]
- The request `mk' can be used to mark a location on a page, for
- movement to later. This request takes a register name as an
- argument in which to store the current page location. With no
- argument it stores the location in an internal register. The
- results of this can be used later by the `rt' or the `sp' request
- (or the `\v' escape).
-
- The `rt' request returns _upwards_ to the location marked with the
- last `mk' request. If used with an argument, return to a position
- which distance from the top of the page is DIST (no previous call
- to `mk' is necessary in this case). Default scaling indicator is
- `v'.
-
- Here a primitive solution for a two-column macro.
-
-
- .nr column-length 1.5i
- .nr column-gap 4m
- .nr bottom-margin 1m
- .
-
-
- .de 2c
- . br
- . mk
- . ll \\n[column-length]u
- . wh -\\n[bottom-margin]u 2c-trap
- . nr right-side 0
- ..
- .
-
-
- .de 2c-trap
- . ie \\n[right-side] \{\
- . nr right-side 0
- . po -(\\n[column-length]u + \\n[column-gap]u)
- . \" remove trap
- . wh -\\n[bottom-margin]u
- . \}
- . el \{\
- . \" switch to right side
- . nr right-side 1
- . po +(\\n[column-length]u + \\n[column-gap]u)
- . rt
- . \}
- ..
- .
-
-
- .pl 1.5i
- .ll 4i
- This is a small test which shows how the
- rt request works in combination with mk.
-
- .2c
- Starting here, text is typeset in two columns.
- Note that this implementation isn't robust
- and thus not suited for a real two-column
- macro.
-
- Result:
-
-
- This is a small test which shows how the
- rt request works in combination with mk.
-
- Starting here, isn't robust
- text is typeset and thus not
- in two columns. suited for a
- Note that this real two-column
- implementation macro.
-
-
- The following escapes give fine control of movements about the page.
-
- - Escape: \v'e'
- Move vertically, usually from the current location on the page (if
- no absolute position operator `|' is used). The argument E
- specifies the distance to move; positive is downwards and negative
- upwards. The default scaling indicator for this escape is `v'.
- Beware, however, that `gtroff' continues text processing at the
- point where the motion ends, so you should always balance motions
- to avoid interference with text processing.
-
- `\v' doesn't trigger a trap. This can be quite useful; for
- example, consider a page bottom trap macro which prints a marker
- in the margin to indicate continuation of a footnote or something
- similar.
-
- There are some special-case escapes for vertical motion.
-
- - Escape: \r
- Move upwards 1v.
-
- - Escape: \u
- Move upwards .5v.
-
- - Escape: \d
- Move down .5v.
-
- - Escape: \h'e'
- Move horizontally, usually from the current location (if no
- absolute position operator `|' is used). The expression E
- indicates how far to move: positive is rightwards and negative
- leftwards. The default scaling indicator for this escape is `m'.
-
- This horizontal space is not discarded at the end of a line. To
- insert discardable space of a certain length use the `ss' request.
-
- There are a number of special-case escapes for horizontal motion.
-
- - Escape: \<SP>
- An unbreakable and unpaddable (i.e. not expanded during filling)
- space. (Note: This is a backslash followed by a space.)
-
- - Escape: \~
- An unbreakable space that stretches like a normal inter-word space
- when a line is adjusted.
-
- - Escape: \|
- A 1/6th em space. Ignored for TTY output devices (rounded to
- zero).
-
- - Escape: \^
- A 1/12th em space. Ignored for TTY output devices (rounded to
- zero).
-
- - Escape: \0
- A space the size of a digit.
-
- The following string sets the TeX logo:
-
-
- .ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-
- - Escape: \w'text'
- - Register: \n[st]
- - Register: \n[sb]
- - Register: \n[rst]
- - Register: \n[rsb]
- - Register: \n[ct]
- - Register: \n[ssc]
- - Register: \n[skw]
- Return the width of the specified TEXT in basic units. This
- allows horizontal movement based on the width of some arbitrary
- text (e.g. given as an argument to a macro).
-
-
- The length of the string `abc' is \w'abc'u.
- => The length of the string `abc' is 72u.
-
- Font changes may occur in TEXT which don't affect current settings.
-
- After use, `\w' sets several registers:
-
- `st'
- `sb'
- The highest and lowest point of the baseline, respectively,
- in TEXT.
-
- `rst'
- `rsb'
- Like the `st' and `sb' registers, but takes account of the
- heights and depths of glyphs. With other words, this gives
- the highest and lowest point of TEXT. Values below the
- baseline are negative.
-
- `ct'
- Defines the kinds of glyphs occurring in TEXT:
-
- 0
- only short glyphs, no descenders or tall glyphs.
-
- 1
- at least one descender.
-
- 2
- at least one tall glyph.
-
- 3
- at least one each of a descender and a tall glyph.
-
- `ssc'
- The amount of horizontal space (possibly negative) that
- should be added to the last glyph before a subscript.
-
- `skw'
- How far to right of the center of the last glyph in the `\w'
- argument, the center of an accent from a roman font should be
- placed over that glyph.
-
- - Escape: \kp
- - Escape: \k(ps
- - Escape: \k[position]
- Store the current horizontal position in the _input_ line in
- number register with name POSITION (one-character name P,
- two-character name PS). Use this, for example, to return to the
- beginning of a string for highlighting or other decoration.
-
- - Register: \n[hp]
- The current horizontal position at the input line.
-
- - Register: \n[.k]
- A read-only number register containing the current horizontal
- output position.
-
- - 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, and
- `\D'FX ...'' which arguments are treated similar to the `defcolor'
- request.
-
- `\D'l DX DY''
- Draw a line from the current location to the relative point
- specified by (DX,DY).
-
- The following example is a macro for creating a box around a
- text string; for simplicity, the box margin is taken as a
- fixed value, 0.2m.
-
-
- .de BOX
- . nr @wd \w'\\$1'
- \h'.2m'\
- \h'-.2m'\v'(.2m - \\n[rsb]u)'\
- \D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
- \D'l (\\n[@wd]u + .4m) 0'\
- \D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
- \D'l -(\\n[@wd]u + .4m) 0'\
- \h'.2m'\v'-(.2m - \\n[rsb]u)'\
- \\$1\
- \h'.2m'
- ..
-
- First, the width of the string is stored in register `@wd'.
- Then, four lines are drawn to form a box, properly offset by
- the box margin. The registers `rst' and `rsb' are set by the
- `\w' escape, containing the largest height and depth of the
- whole string.
-
- `\D'c D''
- Draw a circle with a diameter of D with the leftmost point at
- the current position. After drawing, the current location is
- positioned at the rightmost point of the circle.
-
- `\D'C D''
- Draw a solid circle with the same parameters and behaviour as
- an outlined circle. No outline is drawn.
-
- `\D'e X Y''
- Draw an ellipse with a horizontal diameter of X and a vertical
- diameter of Y with the leftmost point at the current position.
- After drawing, the current location is positioned at the
- rightmost point of the ellipse.
-
- `\D'E X Y''
- Draw a solid ellipse with the same parameters and behaviour
- as an outlined ellipse. No outline is drawn.
-
- `\D'a DX1 DY1 DX2 DY2''
- Draw an arc clockwise from the current location through the
- two specified relative locations (DX1,DY1) and (DX2,DY2).
- The coordinates of the first point are relative to the
- current position, and the coordinates of the second point are
- relative to the first point. After drawing, the current
- position is moved to the final point of the arc.
-
- `\D'~ DX1 DY1 DX2 DY2 ...''
- Draw a spline from the current location to the relative point
- (DX1,DY1) and then to (DX2,DY2), and so on. The current
- position is moved to the terminal point of the drawn curve.
-
- `\D'f N''
- Set the shade of gray to be used for filling solid objects
- to N; N must be an integer between 0 and 1000, where 0
- corresponds solid white and 1000 to solid black, and values
- in between correspond to intermediate shades of gray. This
- applies only to solid circles, solid ellipses, and solid
- polygons. By default, a level of 1000 is used.
-
- Despite of being silly, the current point is moved
- horizontally to the right by N.
-
- Don't use this command! It has the serious drawback that it
- will be always rounded to the next integer multiple of the
- horizontal resolution (the value of the `hor' keyword in the
- `DESC' file). Use `\M' (*note Colors::) or `\D'Fg ...''
- instead.
-
- `\D'p DX1 DY1 DX2 DY2 ...''
- Draw a polygon from the current location to the relative
- position (DX1,DY1) and then to (DX2,DY2) and so on. When the
- specified data points are exhausted, a line is drawn back to
- the starting point. The current position is changed by
- adding the sum of all arguments with odd index to the actual
- horizontal position and the even ones to the vertical
- position.
-
- `\D'P DX1 DY1 DX2 DY2 ...''
- Draw a solid polygon with the same parameters and behaviour
- as an outlined polygon. No outline is drawn.
-
- Here a better variant of the box macro to fill the box with
- some color. Note that the box must be drawn before the text
- since colors in `gtroff' are not transparent; the filled
- polygon would hide the text completely.
-
-
- .de BOX
- . nr @wd \w'\\$1'
- \h'.2m'\
- \h'-.2m'\v'(.2m - \\n[rsb]u)'\
- \M[lightcyan]\
- \D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
- (\\n[@wd]u + .4m) 0 \
- 0 (\\n[rst]u - \\n[rsb]u + .4m) \
- -(\\n[@wd]u + .4m) 0'\
- \h'.2m'\v'-(.2m - \\n[rsb]u)'\
- \M[]\
- \\$1\
- \h'.2m'
- ..
-
- `\D't N''
- Set the current line thickness to N machine units. A value of
- zero selects the smallest available line thickness. A
- negative value makes the line thickness proportional to the
- current point size (this is the default behaviour of AT&T
- `troff').
-
- Despite of being silly, the current point is moved
- horizontally to the right by N.
-
- `\D'FSCHEME COLOR_COMPONENTS''
- Change current fill color. SCHEME is a single letter
- denoting the color scheme: `r' (rgb), `c' (cmy), `k' (cmyk),
- `g' (gray), or `d' (default color). The color components use
- exactly the same syntax as in the `defcolor' request (*note
- Colors::); the command `\D'Fd'' doesn't take an argument.
-
- _No_ position changing!
-
- Examples:
-
-
- \D'Fg .3' \" same gray as \D'f 700' \D'Fr #0000ff' \"
- blue
-
- *Note Graphics Commands::.
-
- - Escape: \b'string'
- "Pile" a sequence of glyphs vertically, and center it vertically
- on the current line. Use it to build large brackets and braces.
-
- Here an example how to create a large opening brace:
-
-
- \b'\[lt]\[bv]\[lk]\[bv]\[lb]'
-
- The first glyph is on the top, the last glyph in STRING is at the
- bottom. Note that `gtroff' separates the glyphs vertically by 1m,
- and the whole object is centered 0.5m above the current baseline;
- the largest glyph width is used as the width for the whole object.
- This rather unflexible positioning algorithm doesn't work with
- `-Tdvi' since the bracket pieces vary in height for this device.
- Instead, use the `eqn' preprocessor.
-
- *Note Manipulating Spacing::, how to adjust the vertical spacing
- with the `\x' escape.
-
-
-File: groff, Node: Traps, Next: Diversions, Prev: Drawing Requests, Up: gtroff Reference
-
-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::
-
diff --git a/contrib/groff/doc/groff-7 b/contrib/groff/doc/groff-7
deleted file mode 100644
index edf7290..0000000
--- a/contrib/groff/doc/groff-7
+++ /dev/null
@@ -1,1460 +0,0 @@
-This is groff, produced by makeinfo version 4.3d from ./groff.texinfo.
-
-This manual documents GNU `troff' version 1.19.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003 Free Software Foundation,
-Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff, Node: 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.
-
- Note that a page can't be ejected if `vpt' is set to zero.
-
- - Request: .wh dist [macro]
- Set a page location trap. Non-negative values for DIST set the
- trap relative to the top of the page; negative values set the trap
- relative to the bottom of the page. Default scaling indicator is
- `v'.
-
- MACRO is the name of the macro to execute when the trap is sprung.
- If MACRO is missing, remove the first trap (if any) at DIST.
-
- The following is a simple example of how many macro packages set
- headers and footers.
-
-
- .de hd \" Page header
- ' sp .5i
- . tl 'Title''date'
- ' sp .3i
- ..
- .
- .de fo \" Page footer
- ' sp 1v
- . tl ''%''
- ' bp
- ..
- .
- .wh 0 hd \" trap at top of the page
- .wh -1i fo \" trap one inch from bottom
-
- A trap at or below the bottom of the page is ignored; it can be
- made active by either moving it up or increasing the page length
- so that the trap is on the page.
-
- It is possible to have more than one trap at the same location; to
- do so, the traps must be defined at different locations, then
- moved together with the `ch' request; otherwise the second trap
- would replace the first one. Earlier defined traps hide later
- defined traps if moved to the same position (the many empty lines
- caused by the `bp' request are omitted in the following example):
-
-
- .de a
- . nop a
- ..
- .de b
- . nop b
- ..
- .de c
- . nop c
- ..
- .
- .wh 1i a
- .wh 2i b
- .wh 3i c
- .bp
- => a b c
-
-
- .ch b 1i
- .ch c 1i
- .bp
- => a
-
-
- .ch a 0.5i
- .bp
- => a b
-
-
- - Register: \n[.t]
- A read-only number register holding the distance to the next trap.
-
- If there are no traps between the current position and the bottom
- of the page, it contains the distance to the page bottom. In a
- diversion, the distance to the page bottom is infinite (the
- returned value is the biggest integer which can be represented in
- `groff') if there are no diversion traps.
-
- - Request: .ch macro [dist]
- Change the location of a trap. The first argument is the name of
- the macro to be invoked at the trap, and the second argument is
- the new location for the trap (note that the parameters are
- specified in opposite order as in the `wh' request). This is
- useful for building up footnotes in a diversion to allow more
- space at the bottom of the page for them.
-
- Default scaling indicator for DIST is `v'. If DIST is missing,
- the trap is removed.
-
-
- - Register: \n[.ne]
- The read-only number register `.ne' contains the amount of space
- that was needed in the last `ne' request that caused a trap to be
- sprung. Useful in conjunction with the `.trunc' register. *Note
- Page Control::, for more information.
-
- Since the `.ne' register is only set by traps it doesn't make much
- sense to use it outside of trap macros.
-
- - Register: \n[.trunc]
- A read-only register containing the amount of vertical space
- truncated by the most recently sprung vertical position trap, or,
- if the trap was sprung by an `ne' request, minus the amount of
- vertical motion produced by the `ne' request. In other words, at
- the point a trap is sprung, it represents the difference of what
- the vertical position would have been but for the trap, and what
- the vertical position actually is.
-
- Since the `.trunc' register is only set by traps and it doesn't
- make much sense to use it outside of trap macros.
-
- - Register: \n[.pe]
- A read-only register which is set to 1 while a page is ejected with
- the `bp' request (or by the end of input).
-
- Outside of traps this register is always zero. In the following
- example, only the second call to `x' is caused by `bp'.
-
-
- .de x
- \&.pe=\\n[.pe]
- .br
- ..
- .wh 1v x
- .wh 4v x
- A line.
- .br
- Another line.
- .br
- => A line.
- .pe=0
- Another line.
-
- .pe=1
-
-
- An important fact to consider while designing macros is that
-diversions and traps do not interact normally. For example, if a trap
-invokes a header macro (while outputting a diversion) which tries to
-change the font on the current page, the effect will not be visible
-before the diversion has completely been printed (except for input
-protected with `\!' or `\?') since the data in the diversion is already
-formatted. In most cases, this is not the expected behaviour.
-
-
-File: groff, Node: Diversion Traps, Next: Input Line Traps, Prev: Page Location Traps, Up: Traps
-
-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 an interrupted text
- line (ending with `\c') is not counted as a separate line.
-
- Both requests are associated with the current environment (*note
- Environments::); switching to another environment disables the
- current input trap, and going back reactivates it, restoring the
- number of already processed lines.
-
-
-File: groff, Node: Blank Line Traps, Next: End-of-input Traps, Prev: Input Line Traps, Up: Traps
-
-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
-
-
-
-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 register `nl'.
-
- - Register: \n[.h]
- The "high-water mark" on the current page. It corresponds to the
- text baseline of the lowest line on the page. This is a read-only
- register.
-
-
- .tm .h==\n[.h], nl==\n[nl]
- => .h==0, nl==-1
- This is a test.
- .br
- .sp 2
- .tm .h==\n[.h], nl==\n[nl]
- => .h==40, nl==120
-
- As can be seen in the previous example, empty lines are not
- considered in the return value of the `.h' register.
-
- - Register: \n[dn]
- - Register: \n[dl]
- After completing a diversion, the read-write number registers `dn'
- and `dl' contain the vertical and horizontal size of the diversion.
- Note that only the just processed lines are counted: For the
- computation of `dn' and `dl', the requests `da' and `boxa' are
- handled as if `di' and `box' had been used - lines which have been
- already stored in a macro are not taken into account.
-
-
- .\" Center text both horizontally & vertically
- .
- .\" Enclose macro definitions in .eo and .ec
- .\" to avoid the doubling of the backslash
- .eo
- .\" macro .(c starts centering mode
- .de (c
- . br
- . ev (c
- . evc 0
- . in 0
- . nf
- . di @c
- ..
-
-
- .\" macro .)c terminates centering mode
- .de )c
- . br
- . ev
- . di
- . nr @s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
- . sp \n[@s]u
- . ce 1000
- . @c
- . ce 0
- . sp \n[@s]u
- . br
- . fi
- . rr @s
- . rm @s
- . rm @c
- ..
- .\" End of macro definitions, restore escape mechanism
- .ec
-
-
- - Escape: \!
- - Escape: \?anything\?
- Prevent requests, macros, and escapes from being interpreted when
- read into a diversion. Both escapes take the given text and
- "transparently" embed it into the diversion. This is useful for
- macros which shouldn't be invoked until the diverted text is
- actually output.
-
- The `\!' escape transparently embeds text up to and including the
- end of the line. The `\?' escape transparently embeds text until
- the next occurrence of the `\?' escape. Example:
-
-
- \?ANYTHING\?
-
- ANYTHING may not contain newlines; use `\!' to embed newlines in
- a diversion. The escape sequence `\?' is also recognized in copy
- mode and turned into a single internal code; it is this code that
- terminates ANYTHING. Thus the following example prints 4.
-
-
- .nr x 1
- .nf
- .di d
- \?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
- .di
- .nr x 2
- .di e
- .d
- .di
- .nr x 3
- .di f
- .e
- .di
- .nr x 4
- .f
-
- Both escapes read the data in copy mode.
-
- If `\!' is used in the top-level diversion, its argument is
- directly embedded into the `gtroff' intermediate output. This can
- be used for example to control a postprocessor which processes the
- data before it is sent to the device driver.
-
- The `\?' escape used in the top-level diversion produces no output
- at all; its argument is simply ignored.
-
- - Request: .output string
- Emit STRING directly to the `gtroff' intermediate output (subject
- to copy-mode interpretation); this is similar to `\!' used at the
- top level. An initial double quote in STRING is stripped off to
- allow initial blanks.
-
- This request can't be used before the first page has started - if
- you get an error, simply insert `.br' before the `output' request.
-
- Without argument, `output' is ignored.
-
- Use with caution! It is normally only needed for mark-up used by a
- postprocessor which does something with the output before sending
- it to the output device, filtering out STRING again.
-
- - Request: .asciify div
- "Unformat" the diversion specified by DIV in such a way that ASCII
- characters, characters translated with the `trin' request, space
- characters, and some escape sequences that were formatted and
- diverted are treated like ordinary input characters when the
- diversion is reread. It can be also used for gross hacks; for
- example, the following sets register `n' to 1.
-
-
- .tr @.
- .di x
- @nr n 1
- .br
- .di
- .tr @@
- .asciify x
- .x
-
- *Note Copy-in Mode::.
-
- - Request: .unformat div
- Like `asciify', unformat the specified diversion. However,
- `unformat' only unformats spaces and tabs between words.
- Unformatted tabs are treated as input tokens, and spaces are
- stretchable again.
-
- The vertical size of lines is not preserved; glyph information
- (font, font size, space width, etc.) is retained.
-
-
-File: groff, Node: Environments, Next: Suppressing output, Prev: Diversions, Up: gtroff Reference
-
-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[.w]
- - Register: \n[.cht]
- - Register: \n[.cdp]
- - Register: \n[.csk]
- The `\n[.w]' register contains the width of the last glyph added
- to the current environment.
-
- The `\n[.cht]' register contains the height of the last glyph
- added to the current environment.
-
- The `\n[.cdp]' register contains the depth of the last glyph added
- to the current environment. It is positive for glyphs extending
- below the baseline.
-
- The `\n[.csk]' register contains the "skew" (how far to the right
- of the glyph's center that `gtroff' should place an accent) of the
- last glyph added to the current environment.
-
- - Register: \n[.n]
- The `\n[.n]' register contains the length of the previous output
- line in the current environment.
-
-
-File: groff, Node: Suppressing output, Next: Colors, Prev: Environments, Up: gtroff Reference
-
-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), `cmy' (three components), `cmyk'
- (four components), and `gray' or `grey' (one component).
-
- Color components can be given either as a hexadecimal string or as
- positive decimal integers in the range 0-65535. A hexadecimal
- string contains all color components concatenated. It must start
- with either `#' or `##'; the former specifies hex values in the
- range 0-255 (which are internally multiplied by 257), the latter
- in the range 0-65535. Examples: `#FFC0CB' (pink), `##ffff0000ffff'
- (magenta). The default color name value is device-specific
- (usually black). It is possible that the default color for `\m'
- and `\M' is not identical.
-
- A new scaling indicator `f' has been introduced which multiplies
- its value by 65536; this makes it convenient to specify color
- components as fractions in the range 0 to 1 (1f equals 65536u).
- Example:
-
-
- .defcolor darkgreen rgb 0.1f 0.5f 0.2f
-
- Note that `f' is the default scaling indicator for the `defcolor'
- request, thus the above statement is equivalent to
-
-
- .defcolor darkgreen rgb 0.1 0.5 0.2
-
-
- - 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 optionally the file name `gtroff' shall
- use for error and warning messages. LINE is the input line number
- of the _next_ line.
-
- Without argument, the request is ignored.
-
- This is a debugging aid for documents which are split into many
- files, then put together with `soelim' and other preprocessors.
- Usually, it isn't invoked manually.
-
- Note that other `troff' implementations (including the original
- AT&T version) handle `lf' differently. For them, LINE changes the
- line number of the _current_ line.
-
- - Request: .tm string
- - Request: .tm1 string
- - Request: .tmc string
- Send STRING to the standard error output; this is very useful for
- printing debugging messages among other things.
-
- STRING is read in copy mode.
-
- The `tm' request ignores leading spaces of STRING; `tm1' handles
- its argument similar to the `ds' request: a leading double quote
- in STRING is stripped to allow initial blanks.
-
- The `tmc' request is similar to `tm1' but does not append a
- newline (as is done in `tm' and `tm1').
-
- - Request: .ab [string]
- Similar to the `tm' request, except that it causes `gtroff' to
- stop processing. With no argument it prints `User Abort.' to
- standard error.
-
- - Request: .ex
- The `ex' request also causes `gtroff' to stop processing; see also
- *Note I/O::.
-
- When doing something involved it is useful to leave the debugging
-statements in the code and have them turned on by a command line flag.
-
-
- .if \n(DB .tm debugging output
-
-To activate these statements say
-
-
- groff -rDB=1 file
-
- If it is known in advance that there will be many errors and no
-useful output, `gtroff' can be forced to suppress formatted output with
-the `-z' flag.
-
- - Request: .pm
- Print the entire symbol table on `stderr'. Names of all defined
- macros, strings, and diversions are print together with their size
- in bytes. Since `gtroff' sometimes adds nodes by itself, the
- returned size can be larger than expected.
-
- This request differs from UNIX `troff': `gtroff' reports the sizes
- of diversions, ignores an additional argument to print only the
- total of the sizes, and the size isn't returned in blocks of 128
- characters.
-
- - Request: .pnr
- Print the names and contents of all currently defined number
- registers on `stderr'.
-
- - Request: .ptr
- Print the names and positions of all traps (not including input
- line traps and diversion traps) on `stderr'. Empty slots in the
- page trap list are printed as well, because they can affect the
- priority of subsequently planted traps.
-
- - Request: .fl
- Instruct `gtroff' to flush its output immediately. The intent is
- for interactive use, but this behaviour is currently not
- implemented in `gtroff'. Contrary to UNIX `troff', TTY output is
- sent to a device driver also (`grotty'), making it non-trivial to
- communicate interactively.
-
- This request causes a line break.
-
- - Request: .backtrace
- Print a backtrace of the input stack to the standard error stream.
-
- Consider the following in file `test':
-
-
- .de xxx
- . backtrace
- ..
- .de yyy
- . xxx
- ..
- .
- .yyy
-
- On execution, `gtroff' prints the following:
-
-
- test:2: backtrace: macro `xxx'
- test:5: backtrace: macro `yyy'
- test:8: backtrace: file `test'
-
- The option `-b' of `gtroff' internally calls a variant of this
- request on each error and warning.
-
- - Register: \n[slimit]
- Use the `slimit' number register to set the maximum number of
- objects on the input stack. If `slimit' is less than or equal
- to 0, there is no limit set. With no limit, a buggy recursive
- macro can exhaust virtual memory.
-
- The default value is 1000; this is a compile-time constant.
-
- - Request: .warnscale si
- Set the scaling indicator used in warnings to SI. Valid values for
- SI are `u', `i', `c', `p', and `P'. At startup, it is set to `i'.
-
- - Request: .spreadwarn [limit]
- Make `gtroff' emit a warning if the additional space inserted for
- each space between words in an output line is larger or equal to
- LIMIT. A negative value is changed to zero; no argument toggles
- the warning on and off without changing LIMIT. The default scaling
- indicator is `m'. At startup, `spreadwarn' is deactivated, and
- LIMIT is set to 3m.
-
- For example,
-
-
- .spreadwarn 0.2m
-
- will cause a warning if `gtroff' must add 0.2m or more for each
- interword space in a line.
-
- This request is active only if text is justified to both margins
- (using `.ad b').
-
- `gtroff' has command line options for printing out more warnings
-(`-w') and for printing backtraces (`-b') when a warning or an error
-occurs. The most verbose level of warnings is `-ww'.
-
- - Request: .warn [flags]
- - Register: \n[.warn]
- Control the level of warnings checked for. The FLAGS are the sum
- of the numbers associated with each warning that is to be enabled;
- all other warnings are disabled. The number associated with each
- warning is listed below. For example, `.warn 0' disables all
- warnings, and `.warn 1' disables all warnings except that about
- missing glyphs. If no argument is given, all warnings are enabled.
-
- The read-only number register `.warn' contains the current warning
- level.
-
-* Menu:
-
-* Warnings::
-
diff --git a/contrib/groff/doc/groff-8 b/contrib/groff/doc/groff-8
deleted file mode 100644
index 5217828..0000000
--- a/contrib/groff/doc/groff-8
+++ /dev/null
@@ -1,1416 +0,0 @@
-This is groff, produced by makeinfo version 4.3d from ./groff.texinfo.
-
-This manual documents GNU `troff' version 1.19.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003 Free Software Foundation,
-Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff, Node: 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'
------------------
-
-
-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.cpp'.
-
-
-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.
-
- 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.
-
diff --git a/contrib/groff/doc/groff-9 b/contrib/groff/doc/groff-9
deleted file mode 100644
index 3f653d3..0000000
--- a/contrib/groff/doc/groff-9
+++ /dev/null
@@ -1,985 +0,0 @@
-This is groff, produced by makeinfo version 4.3d from ./groff.texinfo.
-
-This manual documents GNU `troff' version 1.19.
-
- Copyright (C) 1994-2000, 2001, 2002, 2003 Free Software Foundation,
-Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.1 or any later version published by the Free Software
- Foundation; with no Invariant Sections, with the Front-Cover texts
- being `A GNU Manual," and with the Back-Cover Texts as in (a)
- below. A copy of the license is included in the section entitled
- `GNU Free Documentation License."
-
- (a) The FSF's Back-Cover Text is: `You have freedom to copy and
- modify this GNU Manual, like GNU software. Copies published by
- the Free Software Foundation raise funds for GNU development."
-
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff). The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-
-File: groff, Node: 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. All horizontal
- quantities are rounded to be multiples of this value.
-
-`vert N'
- The vertical resolution is N machine units. All vertical
- quantities are rounded to be multiples of this value.
-
-`sizescale N'
- The scale factor for point sizes. By default this has a value
- of 1. One scaled point is equal to one point/N. The arguments to
- the `unitwidth' and `sizes' commands are given in scaled points.
- *Note Fractional Type Sizes::, for more information.
-
-`unitwidth N'
- Quantities in the font files are given in machine units for fonts
- whose point size is N scaled points.
-
-`prepro PROGRAM'
- Call PROGRAM as a preprocessor. Currently, this keyword is used
- by `groff' with option `-Thtml' only.
-
-`postpro PROGRAM'
- Call PROGRAM as a postprocessor. For example, the line
-
-
- postpro grodvi
-
- in the file `devdvi/DESC' makes `groff' call `grodvi' if option
- `-Tdvi' is given (and `-Z' isn't used).
-
-`tcommand'
- This means that the postprocessor can handle the `t' and `u'
- intermediate output commands.
-
-`sizes S1 S2 ... SN 0'
- This means that the device has fonts at S1, S2, ... SN scaled
- points. The list of sizes must be terminated by 0 (this is digit
- zero). Each SI can also be a range of sizes M-N. The list can
- extend over more than one line.
-
-`styles S1 S2 ... SM'
- The first M font positions are associated with styles S1 ... SM.
-
-`fonts N F1 F2 F3 ... FN'
- Fonts F1 ... FN are mounted in the font positions M+1, ..., M+N
- where M is the number of styles. This command may extend over
- more than one line. A font name of 0 means no font is mounted on
- the corresponding font position.
-
-`family FAM'
- The default font family is FAM.
-
-`use_charnames_in_special'
- This command indicates that `gtroff' should encode special
- characters inside special commands. Currently, this is only used
- by the HTML output device. *Note Postprocessor Access::.
-
-`papersize STRING ...'
- Select a paper size. Valid values for STRING are the ISO paper
- types `A0'-`A7', `B0'-`B7', `C0'-`C7', `D0'-`D7', `DL', and the US
- paper types `letter', `legal', `tabloid', `ledger', `statement',
- `executive', `com10', and `monarch'. Case is not significant for
- STRING if it holds predefined paper types. Alternatively, STRING
- can be a file name (e.g. `/etc/papersize'); if the file can be
- opened, `groff' reads the first line and tests for the above paper
- sizes. Finally, STRING can be a custom paper size in the format
- `LENGTH,WIDTH' (no spaces before and after the comma). Both
- LENGTH and WIDTH must have a unit appended; valid values are `i'
- for inches, `C' for centimeters, `p' for points, and `P' for
- picas. Example: `12c,235p'. An argument which starts with a
- digit is always treated as a custom paper format. `papersize'
- sets both the vertical and horizontal dimension of the output
- medium.
-
- More than one argument can be specified; `groff' scans from left to
- right and uses the first valid paper specification.
-
-`pass_filenames'
- Tell `gtroff' to emit the name of the source file currently being
- processed. This is achieved by the intermediate output command
- `F'. Currently, this is only used by the HTML output device.
-
-`print PROGRAM'
- Use PROGRAM as a spooler program for printing. If omitted, the
- `-l' and `-L' options of `groff' are ignored.
-
-`charset'
- This line and everything following in the file are ignored. It is
- allowed for the sake of backwards compatibility.
-
- The `res', `unitwidth', `fonts', and `sizes' lines are mandatory.
-Other commands are ignored by `gtroff' but may be used by
-postprocessors to store arbitrary information about the device in the
-`DESC' file.
-
- Here a list of obsolete keywords which are recognized by `groff' but
-completely ignored: `spare1', `spare2', `biggestfont'.
-
-
-File: groff, Node: Font File Format, Prev: DESC File Format, Up: Font Files
-
-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.
-
-
-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.
-* composite: Using Symbols.
-* 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.
-* fschar: Using Symbols.
-* 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.
-* rfschar: Using Symbols.
-* rj: Manipulating Filling and Adjusting.
-* rm: Strings.
-* rn: Strings.
-* rnn: Setting Registers.
-* rr: Setting Registers.
-* rs: Manipulating Spacing.
-* rt: Page Motions.
-* schar: Using Symbols.
-* 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:
-
-* \: 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.
-* \<colon>: Manipulating Hyphenation.
-* \<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.
-
diff --git a/contrib/groff/src/include/groff-getopt.h b/contrib/groff/src/include/groff-getopt.h
deleted file mode 100644
index a30e197..0000000
--- a/contrib/groff/src/include/groff-getopt.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2000, 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 has to be included from within lib.h instead of getopt.h
- to avoid problems with picky C++ compilers.
-*/
-
-#ifndef _GROFF_GETOPT_H
-#define _GROFF_GETOPT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern char *optarg;
-extern int optind;
-extern int opterr;
-extern int optopt;
-
-struct option
-{
- const char *name;
- int has_arg;
- int *flag;
- int val;
-};
-
-#define no_argument 0
-#define required_argument 1
-#define optional_argument 2
-
-extern int getopt(int, // __argc
- char *const *, // __argv
- const char *); // __shortopts
-extern int getopt_long(int, // __argc
- char *const *, // __argv
- const char *, // __shortopts
- const struct option *, // __longopts
- int *); // __longind
-extern int getopt_long_only(int, // __argc
- char *const *, // __argv
- const char *, // __shortopts
- const struct option *, // __longopts
- int *); // __longind
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GROFF_GETOPT_H */
diff --git a/contrib/groff/src/libs/libgroff/progname.cpp b/contrib/groff/src/libs/libgroff/progname.cpp
deleted file mode 100644
index a70e341..0000000
--- a/contrib/groff/src/libs/libgroff/progname.cpp
+++ /dev/null
@@ -1 +0,0 @@
-const char *program_name = 0;
diff --git a/contrib/groff/src/roff/troff/glyphuni.cpp b/contrib/groff/src/roff/troff/glyphuni.cpp
deleted file mode 100644
index 7e242ce..0000000
--- a/contrib/groff/src/roff/troff/glyphuni.cpp
+++ /dev/null
@@ -1,503 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002, 2003
- Free Software Foundation, Inc.
- Written by Werner Lemberg <wl@gnu.org>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "lib.h"
-#include "stringclass.h"
-#include "ptable.h"
-
-#include "unicode.h"
-
-struct glyph_to_unicode {
- char *value;
-};
-
-declare_ptable(glyph_to_unicode)
-implement_ptable(glyph_to_unicode)
-
-PTABLE(glyph_to_unicode) glyph_to_unicode_table;
-
-struct {
- const char *key;
- const char *value;
-} glyph_to_unicode_list[] = {
- { "!", "0021" },
- { "\"", "0022" },
- { "dq", "0022" },
- { "#", "0023" },
- { "sh", "0023" },
- { "$", "0024" },
- { "Do", "0024" },
- { "%", "0025" },
- { "&", "0026" },
- { "aq", "0027" },
- { "(", "0028" },
- { ")", "0029" },
- { "*", "002A" },
- { "+", "002B" },
- { "pl", "002B" },
- { ",", "002C" },
- { ".", "002E" },
- { "/", "002F" },
- { "sl", "002F" },
- { "0", "0030" },
- { "1", "0031" },
- { "2", "0032" },
- { "3", "0033" },
- { "4", "0034" },
- { "5", "0035" },
- { "6", "0036" },
- { "7", "0037" },
- { "8", "0038" },
- { "9", "0039" },
- { ":", "003A" },
- { ";", "003B" },
- { "<", "003C" },
- { "=", "003D" },
- { "eq", "003D" },
- { ">", "003E" },
- { "?", "003F" },
- { "@", "0040" },
- { "at", "0040" },
- { "A", "0041" },
- { "B", "0042" },
- { "C", "0043" },
- { "D", "0044" },
- { "E", "0045" },
- { "F", "0046" },
- { "G", "0047" },
- { "H", "0048" },
- { "I", "0049" },
- { "J", "004A" },
- { "K", "004B" },
- { "L", "004C" },
- { "M", "004D" },
- { "N", "004E" },
- { "O", "004F" },
- { "P", "0050" },
- { "Q", "0051" },
- { "R", "0052" },
- { "S", "0053" },
- { "T", "0054" },
- { "U", "0055" },
- { "V", "0056" },
- { "W", "0057" },
- { "X", "0058" },
- { "Y", "0059" },
- { "Z", "005A" },
-//{ "[", "005B" },
- { "lB", "005B" },
-//{ "\\", "005C" },
- { "rs", "005C" },
-//{ "]", "005D" },
- { "rB", "005D" },
- { "a^", "005E" },
- { "^", "005E" },
- { "ha", "005E" },
- { "_", "005F" },
- { "ru", "005F" },
- { "ul", "005F" },
-//{ "\\`", "0060" },
- { "ga", "0060" },
- { "a", "0061" },
- { "b", "0062" },
- { "c", "0063" },
- { "d", "0064" },
- { "e", "0065" },
- { "f", "0066" },
- { "ff", "0066_0066" },
- { "Fi", "0066_0066_0069" },
- { "Fl", "0066_0066_006C" },
- { "fi", "0066_0069" },
- { "fl", "0066_006C" },
- { "g", "0067" },
- { "h", "0068" },
- { "i", "0069" },
- { "j", "006A" },
- { "k", "006B" },
- { "l", "006C" },
- { "m", "006D" },
- { "n", "006E" },
- { "o", "006F" },
- { "p", "0070" },
- { "q", "0071" },
- { "r", "0072" },
- { "s", "0073" },
- { "t", "0074" },
- { "u", "0075" },
- { "v", "0076" },
- { "w", "0077" },
- { "x", "0078" },
- { "y", "0079" },
- { "z", "007A" },
- { "lC", "007B" },
- { "{", "007B" },
- { "ba", "007C" },
- { "or", "007C" },
- { "|", "007C" },
- { "rC", "007D" },
- { "}", "007D" },
- { "a~", "007E" },
- { "~", "007E" },
- { "ti", "007E" },
- { "r!", "00A1" },
- { "ct", "00A2" },
- { "Po", "00A3" },
- { "Cs", "00A4" },
- { "Ye", "00A5" },
- { "bb", "00A6" },
- { "sc", "00A7" },
- { "ad", "00A8" },
- { "co", "00A9" },
- { "Of", "00AA" },
- { "Fo", "00AB" },
- { "no", "00AC" },
- { "tno", "00AC" },
- { "shc", "00AD" },
- { "rg", "00AE" },
- { "a-", "00AF" },
- { "de", "00B0" },
- { "+-", "00B1" },
- { "t+-", "00B1" },
- { "S2", "00B2" },
- { "S3", "00B3" },
- { "aa", "00B4" },
-//{ "\\'", "00B4" },
- { "mc", "00B5" },
- { "ps", "00B6" },
- { "pc", "00B7" },
- { "ac", "00B8" },
- { "S1", "00B9" },
- { "Om", "00BA" },
- { "Fc", "00BB" },
- { "14", "00BC" },
- { "12", "00BD" },
- { "34", "00BE" },
- { "r?", "00BF" },
- { "`A", "00C0" },
- { "'A", "00C1" },
- { "^A", "00C2" },
- { "~A", "00C3" },
- { ":A", "00C4" },
- { "oA", "00C5" },
- { "AE", "00C6" },
- { ",C", "00C7" },
- { "`E", "00C8" },
- { "'E", "00C9" },
- { "^E", "00CA" },
- { ":E", "00CB" },
- { "`I", "00CC" },
- { "'I", "00CD" },
- { "^I", "00CE" },
- { ":I", "00CF" },
- { "-D", "00D0" },
- { "~N", "00D1" },
- { "`O", "00D2" },
- { "'O", "00D3" },
- { "^O", "00D4" },
- { "~O", "00D5" },
- { ":O", "00D6" },
- { "mu", "00D7" },
- { "tmu", "00D7" },
- { "/O", "00D8" },
- { "`U", "00D9" },
- { "'U", "00DA" },
- { "^U", "00DB" },
- { ":U", "00DC" },
- { "'Y", "00DD" },
- { "TP", "00DE" },
- { "ss", "00DF" },
- { "`a", "00E0" },
- { "'a", "00E1" },
- { "^a", "00E2" },
- { "~a", "00E3" },
- { ":a", "00E4" },
- { "oa", "00E5" },
- { "ae", "00E6" },
- { ",c", "00E7" },
- { "`e", "00E8" },
- { "'e", "00E9" },
- { "^e", "00EA" },
- { ":e", "00EB" },
- { "`i", "00EC" },
- { "'i", "00ED" },
- { "^i", "00EE" },
- { ":i", "00EF" },
- { "Sd", "00F0" },
- { "~n", "00F1" },
- { "`o", "00F2" },
- { "'o", "00F3" },
- { "^o", "00F4" },
- { "~o", "00F5" },
- { ":o", "00F6" },
- { "di", "00F7" },
- { "tdi", "00F7" },
- { "/o", "00F8" },
- { "`u", "00F9" },
- { "'u", "00FA" },
- { "^u", "00FB" },
- { ":u", "00FC" },
- { "'y", "00FD" },
- { "Tp", "00FE" },
- { ":y", "00FF" },
- { "'C", "0106" },
- { "'c", "0107" },
- { ".i", "0131" },
- { "IJ", "0132" },
- { "ij", "0133" },
- { "/L", "0141" },
- { "/l", "0142" },
- { "OE", "0152" },
- { "oe", "0153" },
- { "vS", "0160" },
- { "vs", "0161" },
- { ":Y", "0178" },
- { "vZ", "017D" },
- { "vz", "017E" },
- { "Fn", "0192" },
- { "ah", "02C7" },
- { "ab", "02D8" },
- { "a.", "02D9" },
- { "ao", "02DA" },
- { "ho", "02DB" },
- { "a\"", "02DD" },
- { "*A", "0391" },
- { "*B", "0392" },
- { "*G", "0393" },
- { "*D", "0394" },
- { "*E", "0395" },
- { "*Z", "0396" },
- { "*Y", "0397" },
- { "*H", "0398" },
- { "*I", "0399" },
- { "*K", "039A" },
- { "*L", "039B" },
- { "*M", "039C" },
- { "*N", "039D" },
- { "*C", "039E" },
- { "*O", "039F" },
- { "*P", "03A0" },
- { "*R", "03A1" },
- { "*S", "03A3" },
- { "*T", "03A4" },
- { "*U", "03A5" },
- { "*F", "03A6" },
- { "*X", "03A7" },
- { "*Q", "03A8" },
- { "*W", "03A9" },
- { "*a", "03B1" },
- { "*b", "03B2" },
- { "*g", "03B3" },
- { "*d", "03B4" },
- { "*e", "03B5" },
- { "*z", "03B6" },
- { "*y", "03B7" },
- { "*h", "03B8" },
- { "*i", "03B9" },
- { "*k", "03BA" },
- { "*l", "03BB" },
- { "*m", "03BC" },
- { "*n", "03BD" },
- { "*c", "03BE" },
- { "*o", "03BF" },
- { "*p", "03C0" },
- { "*r", "03C1" },
- { "ts", "03C2" },
- { "*s", "03C3" },
- { "*t", "03C4" },
- { "*u", "03C5" },
- { "*f", "03C6" },
- { "*x", "03C7" },
- { "*q", "03C8" },
- { "*w", "03C9" },
- { "+h", "03D1" },
- { "+f", "03D5" },
- { "+p", "03D6" },
- { "+e", "03F5" },
- { "-", "2010" },
- { "hy", "2010" },
- { "en", "2013" },
- { "em", "2014" },
- { "`", "2018" },
- { "oq", "2018" },
- { "'", "2019" },
- { "cq", "2019" },
- { "bq", "201A" },
- { "lq", "201C" },
- { "rq", "201D" },
- { "Bq", "201E" },
- { "dg", "2020" },
- { "dd", "2021" },
- { "bu", "2022" },
- { "%0", "2030" },
- { "fm", "2032" },
- { "sd", "2033" },
- { "fo", "2039" },
- { "fc", "203A" },
- { "rn", "203E" },
- { "f/", "2044" },
- { "eu", "20AC" },
- { "Eu", "20AC" },
- { "-h", "210F" },
- { "hbar", "210F" },
- { "Im", "2111" },
- { "wp", "2118" },
- { "Re", "211C" },
- { "tm", "2122" },
- { "Ah", "2135" },
- { "18", "215B" },
- { "38", "215C" },
- { "58", "215D" },
- { "78", "215E" },
- { "<-", "2190" },
- { "ua", "2191" },
- { "->", "2192" },
- { "da", "2193" },
- { "<>", "2194" },
- { "va", "2195" },
- { "CR", "21B5" },
- { "lA", "21D0" },
- { "uA", "21D1" },
- { "rA", "21D2" },
- { "dA", "21D3" },
- { "hA", "21D4" },
- { "vA", "21D5" },
- { "fa", "2200" },
- { "pd", "2202" },
- { "te", "2203" },
- { "es", "2205" },
- { "gr", "2207" },
- { "mo", "2208" },
- { "nm", "2209" },
- { "st", "220B" },
- { "product", "220F" },
- { "sum", "2211" },
-//{ "\\-", "2212" },
- { "mi", "2212" },
- { "-+", "2213" },
- { "**", "2217" },
- { "sr", "221A" },
- { "pt", "221D" },
- { "if", "221E" },
- { "/_", "2220" },
- { "AN", "2227" },
- { "OR", "2228" },
- { "ca", "2229" },
- { "cu", "222A" },
- { "is", "222B" },
- { "integral", "222B" },
- { "tf", "2234" },
- { "3d", "2234" },
- { "ap", "223C" },
- { "|=", "2243" },
- { "=~", "2245" },
- { "~~", "2248" },
- { "~=", "2248" },
- { "!=", "2260" },
- { "==", "2261" },
- { "ne", "2262" },
- { "<=", "2264" },
- { ">=", "2265" },
- { ">>", "226A" },
- { "<<", "226B" },
- { "sb", "2282" },
- { "sp", "2283" },
- { "nb", "2284" },
- { "nc", "2285" },
- { "ib", "2286" },
- { "ip", "2287" },
- { "c+", "2295" },
- { "c*", "2297" },
- { "pp", "22A5" },
- { "md", "22C5" },
- { "lc", "2308" },
- { "rc", "2309" },
- { "lf", "230A" },
- { "rf", "230B" },
- { "parenlefttp", "239B" },
- { "parenleftex", "239C" },
- { "parenleftbt", "239D" },
- { "parenrighttp", "239E" },
- { "parenrightex", "239F" },
- { "parenrightbt", "23A0" },
- { "bracketlefttp", "23A1" },
- { "bracketleftex", "23A2" },
- { "bracketleftbt", "23A3" },
- { "bracketrighttp", "23A4" },
- { "bracketrightex", "23A5" },
- { "bracketrightbt", "23A6" },
- { "lt", "23A7" },
- { "bracelefttp", "23A7" },
- { "lk", "23A8" },
- { "braceleftmid", "23A8" },
- { "lb", "23A9" },
- { "braceleftbt", "23A9" },
- { "bv", "23AA" },
- { "braceex", "23AA" },
- { "braceleftex", "23AA" },
- { "bracerightex", "23AA" },
- { "rt", "23AB" },
- { "bracerighttp", "23AB" },
- { "rk", "23AC" },
- { "bracerightmid", "23AC" },
- { "rb", "23AD" },
- { "bracerightbt", "23AD" },
- { "an", "23AF" },
- { "br", "2502" },
- { "rk", "251D" },
- { "lk", "2525" },
- { "lt", "256D" },
- { "rt", "256E" },
- { "rb", "256F" },
- { "lb", "2570" },
- { "sq", "25A1" },
- { "lz", "25CA" },
- { "ci", "25CB" },
- { "lh", "261C" },
- { "rh", "261E" },
- { "SP", "2660" },
- { "CL", "2663" },
- { "HE", "2665" },
- { "DI", "2666" },
- { "OK", "2713" },
- { "la", "27E8" },
- { "ra", "27E9" },
-};
-
-// global constructor
-static struct glyph_to_unicode_init {
- glyph_to_unicode_init();
-} _glyph_to_unicode_init;
-
-glyph_to_unicode_init::glyph_to_unicode_init() {
- for (unsigned int i = 0;
- i < sizeof(glyph_to_unicode_list)/sizeof(glyph_to_unicode_list[0]);
- i++) {
- glyph_to_unicode *gtu = new glyph_to_unicode[1];
- gtu->value = (char *)glyph_to_unicode_list[i].value;
- glyph_to_unicode_table.define(glyph_to_unicode_list[i].key, gtu);
- }
-}
-
-const char *glyph_name_to_unicode(const char *s)
-{
- glyph_to_unicode *result = glyph_to_unicode_table.lookup(s);
- return result ? result->value : 0;
-}
diff --git a/contrib/groff/src/roff/troff/symbol.cpp b/contrib/groff/src/roff/troff/symbol.cpp
deleted file mode 100644
index 09f4c98..0000000
--- a/contrib/groff/src/roff/troff/symbol.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-
-#include "troff.h"
-#include "symbol.h"
-
-const char **symbol::table = 0;
-int symbol::table_used = 0;
-int symbol::table_size = 0;
-char *symbol::block = 0;
-int symbol::block_size = 0;
-
-const symbol NULL_SYMBOL;
-const symbol EMPTY_SYMBOL("");
-
-#ifdef BLOCK_SIZE
-#undef BLOCK_SIZE
-#endif
-
-const int BLOCK_SIZE = 1024;
-// the table will increase in size as necessary
-// the size will be chosen from the following array
-// add some more if you want
-static const unsigned int table_sizes[] = {
- 101, 503, 1009, 2003, 3001, 4001, 5003, 10007, 20011, 40009, 80021,
- 160001, 500009, 1000003, 1500007, 2000003, 0
-};
-const double FULL_MAX = 0.3; // don't let the table get more than this full
-
-static unsigned int hash_string(const char *p)
-{
- // compute a hash code; this assumes 32-bit unsigned ints
- // see p436 of Compilers by Aho, Sethi & Ullman
- // give special treatment to two-character names
- unsigned int hc = 0, g;
- if (*p != 0) {
- hc = *p++;
- if (*p != 0) {
- hc <<= 7;
- hc += *p++;
- for (; *p != 0; p++) {
- hc <<= 4;
- hc += *p;
- if ((g = (hc & 0xf0000000)) == 0) {
- hc ^= g >> 24;
- hc ^= g;
- }
- }
- }
- }
- return hc;
-}
-
-// Tell compiler that a variable is intentionally unused.
-inline void unused(void *) { }
-
-symbol::symbol(const char *p, int how)
-{
- if (p == 0) {
- s = 0;
- return;
- }
- if (*p == 0) {
- s = "";
- return;
- }
- if (table == 0) {
- table_size = table_sizes[0];
- table = (const char **)new char*[table_size];
- for (int i = 0; i < table_size; i++)
- table[i] = 0;
- table_used = 0;
- }
- unsigned int hc = hash_string(p);
- const char **pp;
- for (pp = table + hc % table_size;
- *pp != 0;
- (pp == table ? pp = table + table_size - 1 : --pp))
- if (strcmp(p, *pp) == 0) {
- s = *pp;
- return;
- }
- if (how == MUST_ALREADY_EXIST) {
- s = 0;
- return;
- }
- if (table_used >= table_size - 1 || table_used >= table_size*FULL_MAX) {
- const char **old_table = table;
- unsigned int old_table_size = table_size;
- int i;
- for (i = 1; table_sizes[i] <= old_table_size; i++)
- if (table_sizes[i] == 0)
- fatal("too many symbols");
- table_size = table_sizes[i];
- table_used = 0;
- table = (const char **)new char*[table_size];
- for (i = 0; i < table_size; i++)
- table[i] = 0;
- for (pp = old_table + old_table_size - 1;
- pp >= old_table;
- --pp) {
- symbol temp(*pp, 1); /* insert it into the new table */
- unused(&temp);
- }
- a_delete old_table;
- for (pp = table + hc % table_size;
- *pp != 0;
- (pp == table ? pp = table + table_size - 1 : --pp))
- ;
- }
- ++table_used;
- if (how == DONT_STORE) {
- s = *pp = p;
- }
- else {
- int len = strlen(p)+1;
- if (block == 0 || block_size < len) {
- block_size = len > BLOCK_SIZE ? len : BLOCK_SIZE;
- block = new char [block_size];
- }
- (void)strcpy(block, p);
- s = *pp = block;
- block += len;
- block_size -= len;
- }
-}
-
-symbol concat(symbol s1, symbol s2)
-{
- char *buf = new char [strlen(s1.contents()) + strlen(s2.contents()) + 1];
- strcpy(buf, s1.contents());
- strcat(buf, s2.contents());
- symbol res(buf);
- a_delete buf;
- return res;
-}
diff --git a/contrib/groff/src/roff/troff/symbol.h b/contrib/groff/src/roff/troff/symbol.h
deleted file mode 100644
index 5b7c9b1..0000000
--- a/contrib/groff/src/roff/troff/symbol.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#define DONT_STORE 1
-#define MUST_ALREADY_EXIST 2
-
-class symbol {
- static const char **table;
- static int table_used;
- static int table_size;
- static char *block;
- static int block_size;
- const char *s;
-public:
- symbol(const char *p, int how = 0);
- symbol();
- unsigned long hash() const;
- int operator ==(symbol) const;
- int operator !=(symbol) const;
- const char *contents() const;
- int is_null() const;
- int is_empty() const;
-};
-
-
-extern const symbol NULL_SYMBOL;
-extern const symbol EMPTY_SYMBOL;
-
-inline symbol::symbol() : s(0)
-{
-}
-
-inline int symbol::operator==(symbol p) const
-{
- return s == p.s;
-}
-
-inline int symbol::operator!=(symbol p) const
-{
- return s != p.s;
-}
-
-inline unsigned long symbol::hash() const
-{
- return (unsigned long)s;
-}
-
-inline const char *symbol::contents() const
-{
- return s;
-}
-
-inline int symbol::is_null() const
-{
- return s == 0;
-}
-
-inline int symbol::is_empty() const
-{
- return s != 0 && *s == 0;
-}
-
-symbol concat(symbol, symbol);
diff --git a/contrib/groff/src/roff/troff/unicode.cpp b/contrib/groff/src/roff/troff/unicode.cpp
deleted file mode 100644
index 2117463..0000000
--- a/contrib/groff/src/roff/troff/unicode.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002
- Free Software Foundation, Inc.
- Written by Werner Lemberg <wl@gnu.org>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "lib.h"
-#include "cset.h"
-#include "stringclass.h"
-
-#include "unicode.h"
-
-const char *check_unicode_name(const char *u)
-{
- if (*u != 'u')
- return 0;
- const char *p = ++u;
- for (;;) {
- int val = 0;
- const char *start = p;
- for (;;) {
- // only uppercase hex digits allowed
- if (!csxdigit(*p))
- return 0;
- if (csdigit(*p))
- val = val*0x10 + (*p-'0');
- else if (csupper(*p))
- val = val*0x10 + (*p-'A'+10);
- else
- return 0;
- // biggest Unicode value is U+10FFFF
- if (val > 0x10FFFF)
- return 0;
- p++;
- if (*p == '\0' || *p == '_')
- break;
- }
- // surrogates not allowed
- if ((val >= 0xD800 && val <= 0xDBFF) || (val >= 0xDC00 && val <= 0xDFFF))
- return 0;
- if (val > 0xFFFF) {
- if (*start == '0') // no leading zeros allowed if > 0xFFFF
- return 0;
- }
- else if (p - start != 4) // otherwise, check for exactly 4 hex digits
- return 0;
- if (*p == '\0')
- break;
- p++;
- }
- return u;
-}
diff --git a/contrib/groff/src/roff/troff/unicode.h b/contrib/groff/src/roff/troff/unicode.h
deleted file mode 100644
index 846a70e..0000000
--- a/contrib/groff/src/roff/troff/unicode.h
+++ /dev/null
@@ -1,26 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002
- Free Software Foundation, Inc.
- Written by Werner Lemberg <wl@gnu.org>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-extern const char *glyph_name_to_unicode(const char *);
-extern const char *unicode_to_glyph_name(const char *);
-extern const char *decompose_unicode(const char *);
-
-extern const char *check_unicode_name(const char *);
diff --git a/contrib/groff/src/roff/troff/uniglyph.cpp b/contrib/groff/src/roff/troff/uniglyph.cpp
deleted file mode 100644
index 3428605..0000000
--- a/contrib/groff/src/roff/troff/uniglyph.cpp
+++ /dev/null
@@ -1,503 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002, 2003
- Free Software Foundation, Inc.
- Written by Werner Lemberg <wl@gnu.org>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#include "lib.h"
-#include "stringclass.h"
-#include "ptable.h"
-
-#include "unicode.h"
-
-struct unicode_to_glyph {
- char *value;
-};
-
-declare_ptable(unicode_to_glyph)
-implement_ptable(unicode_to_glyph)
-
-PTABLE(unicode_to_glyph) unicode_to_glyph_table;
-
-struct {
- const char *key;
- const char *value;
-} unicode_to_glyph_list[] = {
- { "0021", "!" },
-//{ "0022", "\"" },
- { "0022", "dq" },
-//{ "0023", "#" },
- { "0023", "sh" },
-//{ "0024", "$" },
- { "0024", "Do" },
- { "0025", "%" },
- { "0026", "&" },
- { "0027", "aq" },
- { "0028", "(" },
- { "0029", ")" },
- { "002A", "*" },
-//{ "002B", "+" },
- { "002B", "pl" },
- { "002C", "," },
- { "002E", "." },
-//{ "002F", "/" },
- { "002F", "sl" },
- { "0030", "0" },
- { "0031", "1" },
- { "0032", "2" },
- { "0033", "3" },
- { "0034", "4" },
- { "0035", "5" },
- { "0036", "6" },
- { "0037", "7" },
- { "0038", "8" },
- { "0039", "9" },
- { "003A", ":" },
- { "003B", ";" },
- { "003C", "<" },
-//{ "003D", "=" },
- { "003D", "eq" },
- { "003D_0338", "!=" },
- { "003E", ">" },
- { "003F", "?" },
-//{ "0040", "@" },
- { "0040", "at" },
- { "0041", "A" },
- { "0041_0300", "`A" },
- { "0041_0301", "'A" },
- { "0041_0302", "^A" },
- { "0041_0303", "~A" },
- { "0041_0308", ":A" },
- { "0041_030A", "oA" },
- { "0042", "B" },
- { "0043", "C" },
- { "0043_0301", "'C" },
- { "0043_0327", ",C" },
- { "0044", "D" },
- { "0045", "E" },
- { "0045_0300", "`E" },
- { "0045_0301", "'E" },
- { "0045_0302", "^E" },
- { "0045_0308", ":E" },
- { "0046", "F" },
- { "0047", "G" },
- { "0048", "H" },
- { "0049", "I" },
- { "0049_0300", "`I" },
- { "0049_0301", "'I" },
- { "0049_0302", "^I" },
- { "0049_0308", ":I" },
- { "004A", "J" },
- { "004B", "K" },
- { "004C", "L" },
- { "004D", "M" },
- { "004E", "N" },
- { "004E_0303", "~N" },
- { "004F", "O" },
- { "004F_0300", "`O" },
- { "004F_0301", "'O" },
- { "004F_0302", "^O" },
- { "004F_0303", "~O" },
- { "004F_0308", ":O" },
- { "0050", "P" },
- { "0051", "Q" },
- { "0052", "R" },
- { "0053", "S" },
- { "0053_030C", "vS" },
- { "0054", "T" },
- { "0055", "U" },
- { "0055_0300", "`U" },
- { "0055_0301", "'U" },
- { "0055_0302", "^U" },
- { "0055_0308", ":U" },
- { "0056", "V" },
- { "0057", "W" },
- { "0058", "X" },
- { "0059", "Y" },
- { "0059_0301", "'Y" },
- { "0059_0308", ":Y" },
- { "005A", "Z" },
- { "005A_030C", "vZ" },
- { "005B", "lB" },
-//{ "005B", "[" },
- { "005C", "rs" },
-//{ "005C", "\\" },
- { "005D", "rB" },
-//{ "005D", "]" },
-//{ "005E", "^" },
-//{ "005E", "a^" },
- { "005E", "ha" },
-//{ "005F", "_" },
-//{ "005F", "ru" },
- { "005F", "ul" },
- { "0060", "ga" },
-//{ "0060", "\\`" },
- { "0061", "a" },
- { "0061_0300", "`a" },
- { "0061_0301", "'a" },
- { "0061_0302", "^a" },
- { "0061_0303", "~a" },
- { "0061_0308", ":a" },
- { "0061_030A", "oa" },
- { "0062", "b" },
- { "0063", "c" },
- { "0063_0301", "'c" },
- { "0063_0327", ",c" },
- { "0064", "d" },
- { "0065", "e" },
- { "0065_0300", "`e" },
- { "0065_0301", "'e" },
- { "0065_0302", "^e" },
- { "0065_0308", ":e" },
- { "0066", "f" },
- { "0066_0066", "ff" },
- { "0066_0066_0069", "Fi" },
- { "0066_0066_006C", "Fl" },
- { "0066_0069", "fi" },
- { "0066_006C", "fl" },
- { "0067", "g" },
- { "0068", "h" },
- { "0069", "i" },
- { "0069_0300", "`i" },
- { "0069_0301", "'i" },
- { "0069_0302", "^i" },
- { "0069_0308", ":i" },
- { "006A", "j" },
- { "006B", "k" },
- { "006C", "l" },
- { "006D", "m" },
- { "006E", "n" },
- { "006E_0303", "~n" },
- { "006F", "o" },
- { "006F_0300", "`o" },
- { "006F_0301", "'o" },
- { "006F_0302", "^o" },
- { "006F_0303", "~o" },
- { "006F_0308", ":o" },
- { "0070", "p" },
- { "0071", "q" },
- { "0072", "r" },
- { "0073", "s" },
- { "0073_030C", "vs" },
- { "0074", "t" },
- { "0075", "u" },
- { "0075_0300", "`u" },
- { "0075_0301", "'u" },
- { "0075_0302", "^u" },
- { "0075_0308", ":u" },
- { "0076", "v" },
- { "0077", "w" },
- { "0078", "x" },
- { "0079", "y" },
- { "0079_0301", "'y" },
- { "0079_0308", ":y" },
- { "007A", "z" },
- { "007A_030C", "vz" },
- { "007B", "lC" },
-//{ "007B", "{" },
- { "007C", "ba" },
-//{ "007C", "or" },
-//{ "007C", "|" },
- { "007D", "rC" },
-//{ "007D", "}" },
-//{ "007E", "a~" },
- { "007E", "ti" },
-//{ "007E", "~" },
- { "00A1", "r!" },
- { "00A2", "ct" },
- { "00A3", "Po" },
- { "00A4", "Cs" },
- { "00A5", "Ye" },
- { "00A6", "bb" },
- { "00A7", "sc" },
- { "00A8", "ad" },
- { "00A9", "co" },
- { "00AA", "Of" },
- { "00AB", "Fo" },
- { "00AC", "no" },
-//{ "00AC", "tno" },
- { "00AD", "shc" },
- { "00AE", "rg" },
- { "00AF", "a-" },
- { "00B0", "de" },
- { "00B1", "+-" },
-//{ "00B1", "t+-" },
- { "00B2", "S2" },
- { "00B3", "S3" },
- { "00B4", "aa" },
-//{ "00B4", "\\'" },
- { "00B5", "mc" },
- { "00B6", "ps" },
- { "00B7", "pc" },
- { "00B8", "ac" },
- { "00B9", "S1" },
- { "00BA", "Om" },
- { "00BB", "Fc" },
- { "00BC", "14" },
- { "00BD", "12" },
- { "00BE", "34" },
- { "00BF", "r?" },
- { "00C6", "AE" },
- { "00D0", "-D" },
- { "00D7", "mu" },
-//{ "00D7", "tmu" },
- { "00D8", "/O" },
- { "00DE", "TP" },
- { "00DF", "ss" },
- { "00E6", "ae" },
- { "00F0", "Sd" },
- { "00F7", "di" },
-//{ "00F7", "tdi" },
- { "00F8", "/o" },
- { "00FE", "Tp" },
- { "0131", ".i" },
- { "0132", "IJ" },
- { "0133", "ij" },
- { "0141", "/L" },
- { "0142", "/l" },
- { "0152", "OE" },
- { "0153", "oe" },
- { "0192", "Fn" },
- { "02C7", "ah" },
- { "02D8", "ab" },
- { "02D9", "a." },
- { "02DA", "ao" },
- { "02DB", "ho" },
- { "02DD", "a\"" },
- { "0391", "*A" },
- { "0392", "*B" },
- { "0393", "*G" },
- { "0394", "*D" },
- { "0395", "*E" },
- { "0396", "*Z" },
- { "0397", "*Y" },
- { "0398", "*H" },
- { "0399", "*I" },
- { "039A", "*K" },
- { "039B", "*L" },
- { "039C", "*M" },
- { "039D", "*N" },
- { "039E", "*C" },
- { "039F", "*O" },
- { "03A0", "*P" },
- { "03A1", "*R" },
- { "03A3", "*S" },
- { "03A4", "*T" },
- { "03A5", "*U" },
- { "03A6", "*F" },
- { "03A7", "*X" },
- { "03A8", "*Q" },
- { "03A9", "*W" },
- { "03B1", "*a" },
- { "03B2", "*b" },
- { "03B3", "*g" },
- { "03B4", "*d" },
- { "03B5", "*e" },
- { "03B6", "*z" },
- { "03B7", "*y" },
- { "03B8", "*h" },
- { "03B9", "*i" },
- { "03BA", "*k" },
- { "03BB", "*l" },
- { "03BC", "*m" },
- { "03BD", "*n" },
- { "03BE", "*c" },
- { "03BF", "*o" },
- { "03C0", "*p" },
- { "03C1", "*r" },
- { "03C2", "ts" },
- { "03C3", "*s" },
- { "03C4", "*t" },
- { "03C5", "*u" },
- { "03C6", "*f" },
- { "03C7", "*x" },
- { "03C8", "*q" },
- { "03C9", "*w" },
- { "03D1", "+h" },
- { "03D5", "+f" },
- { "03D6", "+p" },
- { "03F5", "+e" },
-//{ "2010", "-" },
- { "2010", "hy" },
- { "2013", "en" },
- { "2014", "em" },
-//{ "2018", "`" },
- { "2018", "oq" },
-//{ "2019", "'" },
- { "2019", "cq" },
- { "201A", "bq" },
- { "201C", "lq" },
- { "201D", "rq" },
- { "201E", "Bq" },
- { "2020", "dg" },
- { "2021", "dd" },
- { "2022", "bu" },
- { "2030", "%0" },
- { "2032", "fm" },
- { "2033", "sd" },
- { "2039", "fo" },
- { "203A", "fc" },
- { "203E", "rn" },
- { "2044", "f/" },
- { "20AC", "Eu" },
-//{ "20AC", "eu" },
- { "210F", "-h" },
-//{ "210F", "hbar" },
- { "2111", "Im" },
- { "2118", "wp" },
- { "211C", "Re" },
- { "2122", "tm" },
- { "2135", "Ah" },
- { "215B", "18" },
- { "215C", "38" },
- { "215D", "58" },
- { "215E", "78" },
- { "2190", "<-" },
- { "2191", "ua" },
- { "2192", "->" },
- { "2193", "da" },
- { "2194", "<>" },
- { "2195", "va" },
- { "21B5", "CR" },
- { "21D0", "lA" },
- { "21D1", "uA" },
- { "21D2", "rA" },
- { "21D3", "dA" },
- { "21D4", "hA" },
- { "21D5", "vA" },
- { "2200", "fa" },
- { "2202", "pd" },
- { "2203", "te" },
- { "2205", "es" },
- { "2207", "gr" },
- { "2208", "mo" },
- { "2208_0338", "nm" },
- { "220B", "st" },
- { "220F", "product" },
- { "2211", "sum" },
- { "2212", "mi" },
-//{ "2212", "\\-" },
- { "2213", "-+" },
- { "2217", "**" },
- { "221A", "sr" },
- { "221D", "pt" },
- { "221E", "if" },
- { "2220", "/_" },
- { "2227", "AN" },
- { "2228", "OR" },
- { "2229", "ca" },
- { "222A", "cu" },
- { "222B", "is" },
-//{ "222B", "integral" },
-//{ "2234", "3d" },
- { "2234", "tf" },
- { "223C", "ap" },
- { "2243", "|=" },
- { "2245", "=~" },
-//{ "2248", "~=" },
- { "2248", "~~" },
- { "2261", "==" },
- { "2261_0338", "ne" },
- { "2264", "<=" },
- { "2265", ">=" },
- { "226A", ">>" },
- { "226B", "<<" },
- { "2282", "sb" },
- { "2282_0338", "nb" },
- { "2283", "sp" },
- { "2283_0338", "nc" },
- { "2286", "ib" },
- { "2287", "ip" },
- { "2295", "c+" },
- { "2297", "c*" },
- { "22A5", "pp" },
- { "22C5", "md" },
- { "2308", "lc" },
- { "2309", "rc" },
- { "230A", "lf" },
- { "230B", "rf" },
- { "239B", "parenlefttp" },
- { "239C", "parenleftex" },
- { "239D", "parenleftbt" },
- { "239E", "parenrighttp" },
- { "239F", "parenrightex" },
- { "23A0", "parenrightbt" },
-//{ "23A1", "bracketlefttp" },
- { "23A2", "bracketleftex" },
-//{ "23A3", "bracketleftbt" },
-//{ "23A4", "bracketrighttp" },
- { "23A5", "bracketrightex" },
-//{ "23A6", "bracketrightbt" },
- { "23A7", "lt" },
-//{ "23A7", "bracelefttp" },
- { "23A8", "lk" },
-//{ "23A8", "braceleftmid" },
- { "23A9", "lb" },
-//{ "23A9", "braceleftbt" },
- { "23AA", "bv" },
-//{ "23AA", "braceex" },
-//{ "23AA", "braceleftex" },
-//{ "23AA", "bracerightex" },
- { "23AB", "rt" },
-//{ "23AB", "bracerighttp" },
- { "23AC", "rk" },
-//{ "23AC", "bracerightmid" },
- { "23AD", "rb" },
-//{ "23AD", "bracerightbt" },
- { "23AF", "an" },
- { "2502", "br" },
- { "251D", "rk" },
- { "2525", "lk" },
- { "256D", "lt" },
- { "256E", "rt" },
- { "256F", "rb" },
- { "2570", "lb" },
- { "25A1", "sq" },
- { "25CA", "lz" },
- { "25CB", "ci" },
- { "261C", "lh" },
- { "261E", "rh" },
- { "2660", "SP" },
- { "2663", "CL" },
- { "2665", "HE" },
- { "2666", "DI" },
- { "2713", "OK" },
- { "27E8", "la" },
- { "27E9", "ra" },
-};
-
-// global constructor
-static struct unicode_to_glyph_init {
- unicode_to_glyph_init();
-} _unicode_to_glyph_init;
-
-unicode_to_glyph_init::unicode_to_glyph_init() {
- for (unsigned int i = 0;
- i < sizeof(unicode_to_glyph_list)/sizeof(unicode_to_glyph_list[0]);
- i++) {
- unicode_to_glyph *utg = new unicode_to_glyph[1];
- utg->value = (char *)unicode_to_glyph_list[i].value;
- unicode_to_glyph_table.define(unicode_to_glyph_list[i].key, utg);
- }
-}
-
-const char *unicode_to_glyph_name(const char *s)
-{
- unicode_to_glyph *result = unicode_to_glyph_table.lookup(s);
- return result ? result->value : 0;
-}
diff --git a/contrib/groff/src/roff/troff/uniuni.cpp b/contrib/groff/src/roff/troff/uniuni.cpp
deleted file mode 100644
index 3f4baa4..0000000
--- a/contrib/groff/src/roff/troff/uniuni.cpp
+++ /dev/null
@@ -1,1994 +0,0 @@
-// -*- C++ -*-
-/* Copyright (C) 2002, 2003
- Free Software Foundation, Inc.
- Written by Werner Lemberg <wl@gnu.org>
-
-This file is part of groff.
-
-groff is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-groff is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with groff; see the file COPYING. If not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-// This code has been algorithmically derived from the file
-// UnicodeData-3.2.0.txt, available from unicode.org.
-
-#include "lib.h"
-#include "stringclass.h"
-#include "ptable.h"
-
-#include "unicode.h"
-
-struct unicode_decompose {
- char *value;
-};
-
-declare_ptable(unicode_decompose)
-implement_ptable(unicode_decompose)
-
-PTABLE(unicode_decompose) unicode_decompose_table;
-
-// the first digit in the composite string gives the number of composites
-
-struct {
- const char *key;
- const char *value;
-} unicode_decompose_list[] = {
- { "00C0", "20041_0300" },
- { "00C1", "20041_0301" },
- { "00C2", "20041_0302" },
- { "00C3", "20041_0303" },
- { "00C4", "20041_0308" },
- { "00C5", "20041_030A" },
- { "00C7", "20043_0327" },
- { "00C8", "20045_0300" },
- { "00C9", "20045_0301" },
- { "00CA", "20045_0302" },
- { "00CB", "20045_0308" },
- { "00CC", "20049_0300" },
- { "00CD", "20049_0301" },
- { "00CE", "20049_0302" },
- { "00CF", "20049_0308" },
- { "00D1", "2004E_0303" },
- { "00D2", "2004F_0300" },
- { "00D3", "2004F_0301" },
- { "00D4", "2004F_0302" },
- { "00D5", "2004F_0303" },
- { "00D6", "2004F_0308" },
- { "00D9", "20055_0300" },
- { "00DA", "20055_0301" },
- { "00DB", "20055_0302" },
- { "00DC", "20055_0308" },
- { "00DD", "20059_0301" },
- { "00E0", "20061_0300" },
- { "00E1", "20061_0301" },
- { "00E2", "20061_0302" },
- { "00E3", "20061_0303" },
- { "00E4", "20061_0308" },
- { "00E5", "20061_030A" },
- { "00E7", "20063_0327" },
- { "00E8", "20065_0300" },
- { "00E9", "20065_0301" },
- { "00EA", "20065_0302" },
- { "00EB", "20065_0308" },
- { "00EC", "20069_0300" },
- { "00ED", "20069_0301" },
- { "00EE", "20069_0302" },
- { "00EF", "20069_0308" },
- { "00F1", "2006E_0303" },
- { "00F2", "2006F_0300" },
- { "00F3", "2006F_0301" },
- { "00F4", "2006F_0302" },
- { "00F5", "2006F_0303" },
- { "00F6", "2006F_0308" },
- { "00F9", "20075_0300" },
- { "00FA", "20075_0301" },
- { "00FB", "20075_0302" },
- { "00FC", "20075_0308" },
- { "00FD", "20079_0301" },
- { "00FF", "20079_0308" },
- { "0100", "20041_0304" },
- { "0101", "20061_0304" },
- { "0102", "20041_0306" },
- { "0103", "20061_0306" },
- { "0104", "20041_0328" },
- { "0105", "20061_0328" },
- { "0106", "20043_0301" },
- { "0107", "20063_0301" },
- { "0108", "20043_0302" },
- { "0109", "20063_0302" },
- { "010A", "20043_0307" },
- { "010B", "20063_0307" },
- { "010C", "20043_030C" },
- { "010D", "20063_030C" },
- { "010E", "20044_030C" },
- { "010F", "20064_030C" },
- { "0112", "20045_0304" },
- { "0113", "20065_0304" },
- { "0114", "20045_0306" },
- { "0115", "20065_0306" },
- { "0116", "20045_0307" },
- { "0117", "20065_0307" },
- { "0118", "20045_0328" },
- { "0119", "20065_0328" },
- { "011A", "20045_030C" },
- { "011B", "20065_030C" },
- { "011C", "20047_0302" },
- { "011D", "20067_0302" },
- { "011E", "20047_0306" },
- { "011F", "20067_0306" },
- { "0120", "20047_0307" },
- { "0121", "20067_0307" },
- { "0122", "20047_0327" },
- { "0123", "20067_0327" },
- { "0124", "20048_0302" },
- { "0125", "20068_0302" },
- { "0128", "20049_0303" },
- { "0129", "20069_0303" },
- { "012A", "20049_0304" },
- { "012B", "20069_0304" },
- { "012C", "20049_0306" },
- { "012D", "20069_0306" },
- { "012E", "20049_0328" },
- { "012F", "20069_0328" },
- { "0130", "20049_0307" },
- { "0134", "2004A_0302" },
- { "0135", "2006A_0302" },
- { "0136", "2004B_0327" },
- { "0137", "2006B_0327" },
- { "0139", "2004C_0301" },
- { "013A", "2006C_0301" },
- { "013B", "2004C_0327" },
- { "013C", "2006C_0327" },
- { "013D", "2004C_030C" },
- { "013E", "2006C_030C" },
- { "0143", "2004E_0301" },
- { "0144", "2006E_0301" },
- { "0145", "2004E_0327" },
- { "0146", "2006E_0327" },
- { "0147", "2004E_030C" },
- { "0148", "2006E_030C" },
- { "014C", "2004F_0304" },
- { "014D", "2006F_0304" },
- { "014E", "2004F_0306" },
- { "014F", "2006F_0306" },
- { "0150", "2004F_030B" },
- { "0151", "2006F_030B" },
- { "0154", "20052_0301" },
- { "0155", "20072_0301" },
- { "0156", "20052_0327" },
- { "0157", "20072_0327" },
- { "0158", "20052_030C" },
- { "0159", "20072_030C" },
- { "015A", "20053_0301" },
- { "015B", "20073_0301" },
- { "015C", "20053_0302" },
- { "015D", "20073_0302" },
- { "015E", "20053_0327" },
- { "015F", "20073_0327" },
- { "0160", "20053_030C" },
- { "0161", "20073_030C" },
- { "0162", "20054_0327" },
- { "0163", "20074_0327" },
- { "0164", "20054_030C" },
- { "0165", "20074_030C" },
- { "0168", "20055_0303" },
- { "0169", "20075_0303" },
- { "016A", "20055_0304" },
- { "016B", "20075_0304" },
- { "016C", "20055_0306" },
- { "016D", "20075_0306" },
- { "016E", "20055_030A" },
- { "016F", "20075_030A" },
- { "0170", "20055_030B" },
- { "0171", "20075_030B" },
- { "0172", "20055_0328" },
- { "0173", "20075_0328" },
- { "0174", "20057_0302" },
- { "0175", "20077_0302" },
- { "0176", "20059_0302" },
- { "0177", "20079_0302" },
- { "0178", "20059_0308" },
- { "0179", "2005A_0301" },
- { "017A", "2007A_0301" },
- { "017B", "2005A_0307" },
- { "017C", "2007A_0307" },
- { "017D", "2005A_030C" },
- { "017E", "2007A_030C" },
- { "01A0", "2004F_031B" },
- { "01A1", "2006F_031B" },
- { "01AF", "20055_031B" },
- { "01B0", "20075_031B" },
- { "01CD", "20041_030C" },
- { "01CE", "20061_030C" },
- { "01CF", "20049_030C" },
- { "01D0", "20069_030C" },
- { "01D1", "2004F_030C" },
- { "01D2", "2006F_030C" },
- { "01D3", "20055_030C" },
- { "01D4", "20075_030C" },
- { "01D5", "30055_0308_0304" },
- { "01D6", "30075_0308_0304" },
- { "01D7", "30055_0308_0301" },
- { "01D8", "30075_0308_0301" },
- { "01D9", "30055_0308_030C" },
- { "01DA", "30075_0308_030C" },
- { "01DB", "30055_0308_0300" },
- { "01DC", "30075_0308_0300" },
- { "01DE", "30041_0308_0304" },
- { "01DF", "30061_0308_0304" },
- { "01E0", "30041_0307_0304" },
- { "01E1", "30061_0307_0304" },
- { "01E2", "200C6_0304" },
- { "01E3", "200E6_0304" },
- { "01E6", "20047_030C" },
- { "01E7", "20067_030C" },
- { "01E8", "2004B_030C" },
- { "01E9", "2006B_030C" },
- { "01EA", "2004F_0328" },
- { "01EB", "2006F_0328" },
- { "01EC", "3004F_0328_0304" },
- { "01ED", "3006F_0328_0304" },
- { "01EE", "201B7_030C" },
- { "01EF", "20292_030C" },
- { "01F0", "2006A_030C" },
- { "01F4", "20047_0301" },
- { "01F5", "20067_0301" },
- { "01F8", "2004E_0300" },
- { "01F9", "2006E_0300" },
- { "01FA", "30041_030A_0301" },
- { "01FB", "30061_030A_0301" },
- { "01FC", "200C6_0301" },
- { "01FD", "200E6_0301" },
- { "01FE", "200D8_0301" },
- { "01FF", "200F8_0301" },
- { "0200", "20041_030F" },
- { "0201", "20061_030F" },
- { "0202", "20041_0311" },
- { "0203", "20061_0311" },
- { "0204", "20045_030F" },
- { "0205", "20065_030F" },
- { "0206", "20045_0311" },
- { "0207", "20065_0311" },
- { "0208", "20049_030F" },
- { "0209", "20069_030F" },
- { "020A", "20049_0311" },
- { "020B", "20069_0311" },
- { "020C", "2004F_030F" },
- { "020D", "2006F_030F" },
- { "020E", "2004F_0311" },
- { "020F", "2006F_0311" },
- { "0210", "20052_030F" },
- { "0211", "20072_030F" },
- { "0212", "20052_0311" },
- { "0213", "20072_0311" },
- { "0214", "20055_030F" },
- { "0215", "20075_030F" },
- { "0216", "20055_0311" },
- { "0217", "20075_0311" },
- { "0218", "20053_0326" },
- { "0219", "20073_0326" },
- { "021A", "20054_0326" },
- { "021B", "20074_0326" },
- { "021E", "20048_030C" },
- { "021F", "20068_030C" },
- { "0226", "20041_0307" },
- { "0227", "20061_0307" },
- { "0228", "20045_0327" },
- { "0229", "20065_0327" },
- { "022A", "3004F_0308_0304" },
- { "022B", "3006F_0308_0304" },
- { "022C", "3004F_0303_0304" },
- { "022D", "3006F_0303_0304" },
- { "022E", "2004F_0307" },
- { "022F", "2006F_0307" },
- { "0230", "3004F_0307_0304" },
- { "0231", "3006F_0307_0304" },
- { "0232", "20059_0304" },
- { "0233", "20079_0304" },
- { "0340", "10300" },
- { "0341", "10301" },
- { "0343", "10313" },
- { "0344", "20308_0301" },
- { "0374", "102B9" },
- { "037E", "1003B" },
- { "0385", "200A8_0301" },
- { "0386", "20391_0301" },
- { "0387", "100B7" },
- { "0388", "20395_0301" },
- { "0389", "20397_0301" },
- { "038A", "20399_0301" },
- { "038C", "2039F_0301" },
- { "038E", "203A5_0301" },
- { "038F", "203A9_0301" },
- { "0390", "303B9_0308_0301" },
- { "03AA", "20399_0308" },
- { "03AB", "203A5_0308" },
- { "03AC", "203B1_0301" },
- { "03AD", "203B5_0301" },
- { "03AE", "203B7_0301" },
- { "03AF", "203B9_0301" },
- { "03B0", "303C5_0308_0301" },
- { "03CA", "203B9_0308" },
- { "03CB", "203C5_0308" },
- { "03CC", "203BF_0301" },
- { "03CD", "203C5_0301" },
- { "03CE", "203C9_0301" },
- { "03D3", "203D2_0301" },
- { "03D4", "203D2_0308" },
- { "0400", "20415_0300" },
- { "0401", "20415_0308" },
- { "0403", "20413_0301" },
- { "0407", "20406_0308" },
- { "040C", "2041A_0301" },
- { "040D", "20418_0300" },
- { "040E", "20423_0306" },
- { "0419", "20418_0306" },
- { "0439", "20438_0306" },
- { "0450", "20435_0300" },
- { "0451", "20435_0308" },
- { "0453", "20433_0301" },
- { "0457", "20456_0308" },
- { "045C", "2043A_0301" },
- { "045D", "20438_0300" },
- { "045E", "20443_0306" },
- { "0476", "20474_030F" },
- { "0477", "20475_030F" },
- { "04C1", "20416_0306" },
- { "04C2", "20436_0306" },
- { "04D0", "20410_0306" },
- { "04D1", "20430_0306" },
- { "04D2", "20410_0308" },
- { "04D3", "20430_0308" },
- { "04D6", "20415_0306" },
- { "04D7", "20435_0306" },
- { "04DA", "204D8_0308" },
- { "04DB", "204D9_0308" },
- { "04DC", "20416_0308" },
- { "04DD", "20436_0308" },
- { "04DE", "20417_0308" },
- { "04DF", "20437_0308" },
- { "04E2", "20418_0304" },
- { "04E3", "20438_0304" },
- { "04E4", "20418_0308" },
- { "04E5", "20438_0308" },
- { "04E6", "2041E_0308" },
- { "04E7", "2043E_0308" },
- { "04EA", "204E8_0308" },
- { "04EB", "204E9_0308" },
- { "04EC", "2042D_0308" },
- { "04ED", "2044D_0308" },
- { "04EE", "20423_0304" },
- { "04EF", "20443_0304" },
- { "04F0", "20423_0308" },
- { "04F1", "20443_0308" },
- { "04F2", "20423_030B" },
- { "04F3", "20443_030B" },
- { "04F4", "20427_0308" },
- { "04F5", "20447_0308" },
- { "04F8", "2042B_0308" },
- { "04F9", "2044B_0308" },
- { "0622", "20627_0653" },
- { "0623", "20627_0654" },
- { "0624", "20648_0654" },
- { "0625", "20627_0655" },
- { "0626", "2064A_0654" },
- { "06C0", "206D5_0654" },
- { "06C2", "206C1_0654" },
- { "06D3", "206D2_0654" },
- { "0929", "20928_093C" },
- { "0931", "20930_093C" },
- { "0934", "20933_093C" },
- { "0958", "20915_093C" },
- { "0959", "20916_093C" },
- { "095A", "20917_093C" },
- { "095B", "2091C_093C" },
- { "095C", "20921_093C" },
- { "095D", "20922_093C" },
- { "095E", "2092B_093C" },
- { "095F", "2092F_093C" },
- { "09CB", "209C7_09BE" },
- { "09CC", "209C7_09D7" },
- { "09DC", "209A1_09BC" },
- { "09DD", "209A2_09BC" },
- { "09DF", "209AF_09BC" },
- { "0A33", "20A32_0A3C" },
- { "0A36", "20A38_0A3C" },
- { "0A59", "20A16_0A3C" },
- { "0A5A", "20A17_0A3C" },
- { "0A5B", "20A1C_0A3C" },
- { "0A5E", "20A2B_0A3C" },
- { "0B48", "20B47_0B56" },
- { "0B4B", "20B47_0B3E" },
- { "0B4C", "20B47_0B57" },
- { "0B5C", "20B21_0B3C" },
- { "0B5D", "20B22_0B3C" },
- { "0B94", "20B92_0BD7" },
- { "0BCA", "20BC6_0BBE" },
- { "0BCB", "20BC7_0BBE" },
- { "0BCC", "20BC6_0BD7" },
- { "0C48", "20C46_0C56" },
- { "0CC0", "20CBF_0CD5" },
- { "0CC7", "20CC6_0CD5" },
- { "0CC8", "20CC6_0CD6" },
- { "0CCA", "20CC6_0CC2" },
- { "0CCB", "30CC6_0CC2_0CD5" },
- { "0D4A", "20D46_0D3E" },
- { "0D4B", "20D47_0D3E" },
- { "0D4C", "20D46_0D57" },
- { "0DDA", "20DD9_0DCA" },
- { "0DDC", "20DD9_0DCF" },
- { "0DDD", "30DD9_0DCF_0DCA" },
- { "0DDE", "20DD9_0DDF" },
- { "0F43", "20F42_0FB7" },
- { "0F4D", "20F4C_0FB7" },
- { "0F52", "20F51_0FB7" },
- { "0F57", "20F56_0FB7" },
- { "0F5C", "20F5B_0FB7" },
- { "0F69", "20F40_0FB5" },
- { "0F73", "20F71_0F72" },
- { "0F75", "20F71_0F74" },
- { "0F76", "20FB2_0F80" },
- { "0F78", "20FB3_0F80" },
- { "0F81", "20F71_0F80" },
- { "0F93", "20F92_0FB7" },
- { "0F9D", "20F9C_0FB7" },
- { "0FA2", "20FA1_0FB7" },
- { "0FA7", "20FA6_0FB7" },
- { "0FAC", "20FAB_0FB7" },
- { "0FB9", "20F90_0FB5" },
- { "1026", "21025_102E" },
- { "1E00", "20041_0325" },
- { "1E01", "20061_0325" },
- { "1E02", "20042_0307" },
- { "1E03", "20062_0307" },
- { "1E04", "20042_0323" },
- { "1E05", "20062_0323" },
- { "1E06", "20042_0331" },
- { "1E07", "20062_0331" },
- { "1E08", "30043_0327_0301" },
- { "1E09", "30063_0327_0301" },
- { "1E0A", "20044_0307" },
- { "1E0B", "20064_0307" },
- { "1E0C", "20044_0323" },
- { "1E0D", "20064_0323" },
- { "1E0E", "20044_0331" },
- { "1E0F", "20064_0331" },
- { "1E10", "20044_0327" },
- { "1E11", "20064_0327" },
- { "1E12", "20044_032D" },
- { "1E13", "20064_032D" },
- { "1E14", "30045_0304_0300" },
- { "1E15", "30065_0304_0300" },
- { "1E16", "30045_0304_0301" },
- { "1E17", "30065_0304_0301" },
- { "1E18", "20045_032D" },
- { "1E19", "20065_032D" },
- { "1E1A", "20045_0330" },
- { "1E1B", "20065_0330" },
- { "1E1C", "30045_0327_0306" },
- { "1E1D", "30065_0327_0306" },
- { "1E1E", "20046_0307" },
- { "1E1F", "20066_0307" },
- { "1E20", "20047_0304" },
- { "1E21", "20067_0304" },
- { "1E22", "20048_0307" },
- { "1E23", "20068_0307" },
- { "1E24", "20048_0323" },
- { "1E25", "20068_0323" },
- { "1E26", "20048_0308" },
- { "1E27", "20068_0308" },
- { "1E28", "20048_0327" },
- { "1E29", "20068_0327" },
- { "1E2A", "20048_032E" },
- { "1E2B", "20068_032E" },
- { "1E2C", "20049_0330" },
- { "1E2D", "20069_0330" },
- { "1E2E", "30049_0308_0301" },
- { "1E2F", "30069_0308_0301" },
- { "1E30", "2004B_0301" },
- { "1E31", "2006B_0301" },
- { "1E32", "2004B_0323" },
- { "1E33", "2006B_0323" },
- { "1E34", "2004B_0331" },
- { "1E35", "2006B_0331" },
- { "1E36", "2004C_0323" },
- { "1E37", "2006C_0323" },
- { "1E38", "3004C_0323_0304" },
- { "1E39", "3006C_0323_0304" },
- { "1E3A", "2004C_0331" },
- { "1E3B", "2006C_0331" },
- { "1E3C", "2004C_032D" },
- { "1E3D", "2006C_032D" },
- { "1E3E", "2004D_0301" },
- { "1E3F", "2006D_0301" },
- { "1E40", "2004D_0307" },
- { "1E41", "2006D_0307" },
- { "1E42", "2004D_0323" },
- { "1E43", "2006D_0323" },
- { "1E44", "2004E_0307" },
- { "1E45", "2006E_0307" },
- { "1E46", "2004E_0323" },
- { "1E47", "2006E_0323" },
- { "1E48", "2004E_0331" },
- { "1E49", "2006E_0331" },
- { "1E4A", "2004E_032D" },
- { "1E4B", "2006E_032D" },
- { "1E4C", "3004F_0303_0301" },
- { "1E4D", "3006F_0303_0301" },
- { "1E4E", "3004F_0303_0308" },
- { "1E4F", "3006F_0303_0308" },
- { "1E50", "3004F_0304_0300" },
- { "1E51", "3006F_0304_0300" },
- { "1E52", "3004F_0304_0301" },
- { "1E53", "3006F_0304_0301" },
- { "1E54", "20050_0301" },
- { "1E55", "20070_0301" },
- { "1E56", "20050_0307" },
- { "1E57", "20070_0307" },
- { "1E58", "20052_0307" },
- { "1E59", "20072_0307" },
- { "1E5A", "20052_0323" },
- { "1E5B", "20072_0323" },
- { "1E5C", "30052_0323_0304" },
- { "1E5D", "30072_0323_0304" },
- { "1E5E", "20052_0331" },
- { "1E5F", "20072_0331" },
- { "1E60", "20053_0307" },
- { "1E61", "20073_0307" },
- { "1E62", "20053_0323" },
- { "1E63", "20073_0323" },
- { "1E64", "30053_0301_0307" },
- { "1E65", "30073_0301_0307" },
- { "1E66", "30053_030C_0307" },
- { "1E67", "30073_030C_0307" },
- { "1E68", "30053_0323_0307" },
- { "1E69", "30073_0323_0307" },
- { "1E6A", "20054_0307" },
- { "1E6B", "20074_0307" },
- { "1E6C", "20054_0323" },
- { "1E6D", "20074_0323" },
- { "1E6E", "20054_0331" },
- { "1E6F", "20074_0331" },
- { "1E70", "20054_032D" },
- { "1E71", "20074_032D" },
- { "1E72", "20055_0324" },
- { "1E73", "20075_0324" },
- { "1E74", "20055_0330" },
- { "1E75", "20075_0330" },
- { "1E76", "20055_032D" },
- { "1E77", "20075_032D" },
- { "1E78", "30055_0303_0301" },
- { "1E79", "30075_0303_0301" },
- { "1E7A", "30055_0304_0308" },
- { "1E7B", "30075_0304_0308" },
- { "1E7C", "20056_0303" },
- { "1E7D", "20076_0303" },
- { "1E7E", "20056_0323" },
- { "1E7F", "20076_0323" },
- { "1E80", "20057_0300" },
- { "1E81", "20077_0300" },
- { "1E82", "20057_0301" },
- { "1E83", "20077_0301" },
- { "1E84", "20057_0308" },
- { "1E85", "20077_0308" },
- { "1E86", "20057_0307" },
- { "1E87", "20077_0307" },
- { "1E88", "20057_0323" },
- { "1E89", "20077_0323" },
- { "1E8A", "20058_0307" },
- { "1E8B", "20078_0307" },
- { "1E8C", "20058_0308" },
- { "1E8D", "20078_0308" },
- { "1E8E", "20059_0307" },
- { "1E8F", "20079_0307" },
- { "1E90", "2005A_0302" },
- { "1E91", "2007A_0302" },
- { "1E92", "2005A_0323" },
- { "1E93", "2007A_0323" },
- { "1E94", "2005A_0331" },
- { "1E95", "2007A_0331" },
- { "1E96", "20068_0331" },
- { "1E97", "20074_0308" },
- { "1E98", "20077_030A" },
- { "1E99", "20079_030A" },
- { "1E9B", "2017F_0307" },
- { "1EA0", "20041_0323" },
- { "1EA1", "20061_0323" },
- { "1EA2", "20041_0309" },
- { "1EA3", "20061_0309" },
- { "1EA4", "30041_0302_0301" },
- { "1EA5", "30061_0302_0301" },
- { "1EA6", "30041_0302_0300" },
- { "1EA7", "30061_0302_0300" },
- { "1EA8", "30041_0302_0309" },
- { "1EA9", "30061_0302_0309" },
- { "1EAA", "30041_0302_0303" },
- { "1EAB", "30061_0302_0303" },
- { "1EAC", "30041_0323_0302" },
- { "1EAD", "30061_0323_0302" },
- { "1EAE", "30041_0306_0301" },
- { "1EAF", "30061_0306_0301" },
- { "1EB0", "30041_0306_0300" },
- { "1EB1", "30061_0306_0300" },
- { "1EB2", "30041_0306_0309" },
- { "1EB3", "30061_0306_0309" },
- { "1EB4", "30041_0306_0303" },
- { "1EB5", "30061_0306_0303" },
- { "1EB6", "30041_0323_0306" },
- { "1EB7", "30061_0323_0306" },
- { "1EB8", "20045_0323" },
- { "1EB9", "20065_0323" },
- { "1EBA", "20045_0309" },
- { "1EBB", "20065_0309" },
- { "1EBC", "20045_0303" },
- { "1EBD", "20065_0303" },
- { "1EBE", "30045_0302_0301" },
- { "1EBF", "30065_0302_0301" },
- { "1EC0", "30045_0302_0300" },
- { "1EC1", "30065_0302_0300" },
- { "1EC2", "30045_0302_0309" },
- { "1EC3", "30065_0302_0309" },
- { "1EC4", "30045_0302_0303" },
- { "1EC5", "30065_0302_0303" },
- { "1EC6", "30045_0323_0302" },
- { "1EC7", "30065_0323_0302" },
- { "1EC8", "20049_0309" },
- { "1EC9", "20069_0309" },
- { "1ECA", "20049_0323" },
- { "1ECB", "20069_0323" },
- { "1ECC", "2004F_0323" },
- { "1ECD", "2006F_0323" },
- { "1ECE", "2004F_0309" },
- { "1ECF", "2006F_0309" },
- { "1ED0", "3004F_0302_0301" },
- { "1ED1", "3006F_0302_0301" },
- { "1ED2", "3004F_0302_0300" },
- { "1ED3", "3006F_0302_0300" },
- { "1ED4", "3004F_0302_0309" },
- { "1ED5", "3006F_0302_0309" },
- { "1ED6", "3004F_0302_0303" },
- { "1ED7", "3006F_0302_0303" },
- { "1ED8", "3004F_0323_0302" },
- { "1ED9", "3006F_0323_0302" },
- { "1EDA", "3004F_031B_0301" },
- { "1EDB", "3006F_031B_0301" },
- { "1EDC", "3004F_031B_0300" },
- { "1EDD", "3006F_031B_0300" },
- { "1EDE", "3004F_031B_0309" },
- { "1EDF", "3006F_031B_0309" },
- { "1EE0", "3004F_031B_0303" },
- { "1EE1", "3006F_031B_0303" },
- { "1EE2", "3004F_031B_0323" },
- { "1EE3", "3006F_031B_0323" },
- { "1EE4", "20055_0323" },
- { "1EE5", "20075_0323" },
- { "1EE6", "20055_0309" },
- { "1EE7", "20075_0309" },
- { "1EE8", "30055_031B_0301" },
- { "1EE9", "30075_031B_0301" },
- { "1EEA", "30055_031B_0300" },
- { "1EEB", "30075_031B_0300" },
- { "1EEC", "30055_031B_0309" },
- { "1EED", "30075_031B_0309" },
- { "1EEE", "30055_031B_0303" },
- { "1EEF", "30075_031B_0303" },
- { "1EF0", "30055_031B_0323" },
- { "1EF1", "30075_031B_0323" },
- { "1EF2", "20059_0300" },
- { "1EF3", "20079_0300" },
- { "1EF4", "20059_0323" },
- { "1EF5", "20079_0323" },
- { "1EF6", "20059_0309" },
- { "1EF7", "20079_0309" },
- { "1EF8", "20059_0303" },
- { "1EF9", "20079_0303" },
- { "1F00", "203B1_0313" },
- { "1F01", "203B1_0314" },
- { "1F02", "303B1_0313_0300" },
- { "1F03", "303B1_0314_0300" },
- { "1F04", "303B1_0313_0301" },
- { "1F05", "303B1_0314_0301" },
- { "1F06", "303B1_0313_0342" },
- { "1F07", "303B1_0314_0342" },
- { "1F08", "20391_0313" },
- { "1F09", "20391_0314" },
- { "1F0A", "30391_0313_0300" },
- { "1F0B", "30391_0314_0300" },
- { "1F0C", "30391_0313_0301" },
- { "1F0D", "30391_0314_0301" },
- { "1F0E", "30391_0313_0342" },
- { "1F0F", "30391_0314_0342" },
- { "1F10", "203B5_0313" },
- { "1F11", "203B5_0314" },
- { "1F12", "303B5_0313_0300" },
- { "1F13", "303B5_0314_0300" },
- { "1F14", "303B5_0313_0301" },
- { "1F15", "303B5_0314_0301" },
- { "1F18", "20395_0313" },
- { "1F19", "20395_0314" },
- { "1F1A", "30395_0313_0300" },
- { "1F1B", "30395_0314_0300" },
- { "1F1C", "30395_0313_0301" },
- { "1F1D", "30395_0314_0301" },
- { "1F20", "203B7_0313" },
- { "1F21", "203B7_0314" },
- { "1F22", "303B7_0313_0300" },
- { "1F23", "303B7_0314_0300" },
- { "1F24", "303B7_0313_0301" },
- { "1F25", "303B7_0314_0301" },
- { "1F26", "303B7_0313_0342" },
- { "1F27", "303B7_0314_0342" },
- { "1F28", "20397_0313" },
- { "1F29", "20397_0314" },
- { "1F2A", "30397_0313_0300" },
- { "1F2B", "30397_0314_0300" },
- { "1F2C", "30397_0313_0301" },
- { "1F2D", "30397_0314_0301" },
- { "1F2E", "30397_0313_0342" },
- { "1F2F", "30397_0314_0342" },
- { "1F30", "203B9_0313" },
- { "1F31", "203B9_0314" },
- { "1F32", "303B9_0313_0300" },
- { "1F33", "303B9_0314_0300" },
- { "1F34", "303B9_0313_0301" },
- { "1F35", "303B9_0314_0301" },
- { "1F36", "303B9_0313_0342" },
- { "1F37", "303B9_0314_0342" },
- { "1F38", "20399_0313" },
- { "1F39", "20399_0314" },
- { "1F3A", "30399_0313_0300" },
- { "1F3B", "30399_0314_0300" },
- { "1F3C", "30399_0313_0301" },
- { "1F3D", "30399_0314_0301" },
- { "1F3E", "30399_0313_0342" },
- { "1F3F", "30399_0314_0342" },
- { "1F40", "203BF_0313" },
- { "1F41", "203BF_0314" },
- { "1F42", "303BF_0313_0300" },
- { "1F43", "303BF_0314_0300" },
- { "1F44", "303BF_0313_0301" },
- { "1F45", "303BF_0314_0301" },
- { "1F48", "2039F_0313" },
- { "1F49", "2039F_0314" },
- { "1F4A", "3039F_0313_0300" },
- { "1F4B", "3039F_0314_0300" },
- { "1F4C", "3039F_0313_0301" },
- { "1F4D", "3039F_0314_0301" },
- { "1F50", "203C5_0313" },
- { "1F51", "203C5_0314" },
- { "1F52", "303C5_0313_0300" },
- { "1F53", "303C5_0314_0300" },
- { "1F54", "303C5_0313_0301" },
- { "1F55", "303C5_0314_0301" },
- { "1F56", "303C5_0313_0342" },
- { "1F57", "303C5_0314_0342" },
- { "1F59", "203A5_0314" },
- { "1F5B", "303A5_0314_0300" },
- { "1F5D", "303A5_0314_0301" },
- { "1F5F", "303A5_0314_0342" },
- { "1F60", "203C9_0313" },
- { "1F61", "203C9_0314" },
- { "1F62", "303C9_0313_0300" },
- { "1F63", "303C9_0314_0300" },
- { "1F64", "303C9_0313_0301" },
- { "1F65", "303C9_0314_0301" },
- { "1F66", "303C9_0313_0342" },
- { "1F67", "303C9_0314_0342" },
- { "1F68", "203A9_0313" },
- { "1F69", "203A9_0314" },
- { "1F6A", "303A9_0313_0300" },
- { "1F6B", "303A9_0314_0300" },
- { "1F6C", "303A9_0313_0301" },
- { "1F6D", "303A9_0314_0301" },
- { "1F6E", "303A9_0313_0342" },
- { "1F6F", "303A9_0314_0342" },
- { "1F70", "203B1_0300" },
- { "1F71", "203B1_0301" },
- { "1F72", "203B5_0300" },
- { "1F73", "203B5_0301" },
- { "1F74", "203B7_0300" },
- { "1F75", "203B7_0301" },
- { "1F76", "203B9_0300" },
- { "1F77", "203B9_0301" },
- { "1F78", "203BF_0300" },
- { "1F79", "203BF_0301" },
- { "1F7A", "203C5_0300" },
- { "1F7B", "203C5_0301" },
- { "1F7C", "203C9_0300" },
- { "1F7D", "203C9_0301" },
- { "1F80", "303B1_0313_0345" },
- { "1F81", "303B1_0314_0345" },
- { "1F82", "403B1_0313_0300_0345" },
- { "1F83", "403B1_0314_0300_0345" },
- { "1F84", "403B1_0313_0301_0345" },
- { "1F85", "403B1_0314_0301_0345" },
- { "1F86", "403B1_0313_0342_0345" },
- { "1F87", "403B1_0314_0342_0345" },
- { "1F88", "30391_0313_0345" },
- { "1F89", "30391_0314_0345" },
- { "1F8A", "40391_0313_0300_0345" },
- { "1F8B", "40391_0314_0300_0345" },
- { "1F8C", "40391_0313_0301_0345" },
- { "1F8D", "40391_0314_0301_0345" },
- { "1F8E", "40391_0313_0342_0345" },
- { "1F8F", "40391_0314_0342_0345" },
- { "1F90", "303B7_0313_0345" },
- { "1F91", "303B7_0314_0345" },
- { "1F92", "403B7_0313_0300_0345" },
- { "1F93", "403B7_0314_0300_0345" },
- { "1F94", "403B7_0313_0301_0345" },
- { "1F95", "403B7_0314_0301_0345" },
- { "1F96", "403B7_0313_0342_0345" },
- { "1F97", "403B7_0314_0342_0345" },
- { "1F98", "30397_0313_0345" },
- { "1F99", "30397_0314_0345" },
- { "1F9A", "40397_0313_0300_0345" },
- { "1F9B", "40397_0314_0300_0345" },
- { "1F9C", "40397_0313_0301_0345" },
- { "1F9D", "40397_0314_0301_0345" },
- { "1F9E", "40397_0313_0342_0345" },
- { "1F9F", "40397_0314_0342_0345" },
- { "1FA0", "303C9_0313_0345" },
- { "1FA1", "303C9_0314_0345" },
- { "1FA2", "403C9_0313_0300_0345" },
- { "1FA3", "403C9_0314_0300_0345" },
- { "1FA4", "403C9_0313_0301_0345" },
- { "1FA5", "403C9_0314_0301_0345" },
- { "1FA6", "403C9_0313_0342_0345" },
- { "1FA7", "403C9_0314_0342_0345" },
- { "1FA8", "303A9_0313_0345" },
- { "1FA9", "303A9_0314_0345" },
- { "1FAA", "403A9_0313_0300_0345" },
- { "1FAB", "403A9_0314_0300_0345" },
- { "1FAC", "403A9_0313_0301_0345" },
- { "1FAD", "403A9_0314_0301_0345" },
- { "1FAE", "403A9_0313_0342_0345" },
- { "1FAF", "403A9_0314_0342_0345" },
- { "1FB0", "203B1_0306" },
- { "1FB1", "203B1_0304" },
- { "1FB2", "303B1_0300_0345" },
- { "1FB3", "203B1_0345" },
- { "1FB4", "303B1_0301_0345" },
- { "1FB6", "203B1_0342" },
- { "1FB7", "303B1_0342_0345" },
- { "1FB8", "20391_0306" },
- { "1FB9", "20391_0304" },
- { "1FBA", "20391_0300" },
- { "1FBB", "20391_0301" },
- { "1FBC", "20391_0345" },
- { "1FBE", "103B9" },
- { "1FC1", "200A8_0342" },
- { "1FC2", "303B7_0300_0345" },
- { "1FC3", "203B7_0345" },
- { "1FC4", "303B7_0301_0345" },
- { "1FC6", "203B7_0342" },
- { "1FC7", "303B7_0342_0345" },
- { "1FC8", "20395_0300" },
- { "1FC9", "20395_0301" },
- { "1FCA", "20397_0300" },
- { "1FCB", "20397_0301" },
- { "1FCC", "20397_0345" },
- { "1FCD", "21FBF_0300" },
- { "1FCE", "21FBF_0301" },
- { "1FCF", "21FBF_0342" },
- { "1FD0", "203B9_0306" },
- { "1FD1", "203B9_0304" },
- { "1FD2", "303B9_0308_0300" },
- { "1FD3", "303B9_0308_0301" },
- { "1FD6", "203B9_0342" },
- { "1FD7", "303B9_0308_0342" },
- { "1FD8", "20399_0306" },
- { "1FD9", "20399_0304" },
- { "1FDA", "20399_0300" },
- { "1FDB", "20399_0301" },
- { "1FDD", "21FFE_0300" },
- { "1FDE", "21FFE_0301" },
- { "1FDF", "21FFE_0342" },
- { "1FE0", "203C5_0306" },
- { "1FE1", "203C5_0304" },
- { "1FE2", "303C5_0308_0300" },
- { "1FE3", "303C5_0308_0301" },
- { "1FE4", "203C1_0313" },
- { "1FE5", "203C1_0314" },
- { "1FE6", "203C5_0342" },
- { "1FE7", "303C5_0308_0342" },
- { "1FE8", "203A5_0306" },
- { "1FE9", "203A5_0304" },
- { "1FEA", "203A5_0300" },
- { "1FEB", "203A5_0301" },
- { "1FEC", "203A1_0314" },
- { "1FED", "200A8_0300" },
- { "1FEE", "200A8_0301" },
- { "1FEF", "10060" },
- { "1FF2", "303C9_0300_0345" },
- { "1FF3", "203C9_0345" },
- { "1FF4", "303C9_0301_0345" },
- { "1FF6", "203C9_0342" },
- { "1FF7", "303C9_0342_0345" },
- { "1FF8", "2039F_0300" },
- { "1FF9", "2039F_0301" },
- { "1FFA", "203A9_0300" },
- { "1FFB", "203A9_0301" },
- { "1FFC", "203A9_0345" },
- { "1FFD", "100B4" },
- { "2000", "12002" },
- { "2001", "12003" },
- { "2126", "103A9" },
- { "212A", "1004B" },
- { "212B", "20041_030A" },
- { "219A", "22190_0338" },
- { "219B", "22192_0338" },
- { "21AE", "22194_0338" },
- { "21CD", "221D0_0338" },
- { "21CE", "221D4_0338" },
- { "21CF", "221D2_0338" },
- { "2204", "22203_0338" },
- { "2209", "22208_0338" },
- { "220C", "2220B_0338" },
- { "2224", "22223_0338" },
- { "2226", "22225_0338" },
- { "2241", "2223C_0338" },
- { "2244", "22243_0338" },
- { "2247", "22245_0338" },
- { "2249", "22248_0338" },
- { "2260", "2003D_0338" },
- { "2262", "22261_0338" },
- { "226D", "2224D_0338" },
- { "226E", "2003C_0338" },
- { "226F", "2003E_0338" },
- { "2270", "22264_0338" },
- { "2271", "22265_0338" },
- { "2274", "22272_0338" },
- { "2275", "22273_0338" },
- { "2278", "22276_0338" },
- { "2279", "22277_0338" },
- { "2280", "2227A_0338" },
- { "2281", "2227B_0338" },
- { "2284", "22282_0338" },
- { "2285", "22283_0338" },
- { "2288", "22286_0338" },
- { "2289", "22287_0338" },
- { "22AC", "222A2_0338" },
- { "22AD", "222A8_0338" },
- { "22AE", "222A9_0338" },
- { "22AF", "222AB_0338" },
- { "22E0", "2227C_0338" },
- { "22E1", "2227D_0338" },
- { "22E2", "22291_0338" },
- { "22E3", "22292_0338" },
- { "22EA", "222B2_0338" },
- { "22EB", "222B3_0338" },
- { "22EC", "222B4_0338" },
- { "22ED", "222B5_0338" },
- { "2329", "13008" },
- { "232A", "13009" },
- { "2ADC", "22ADD_0338" },
- { "304C", "2304B_3099" },
- { "304E", "2304D_3099" },
- { "3050", "2304F_3099" },
- { "3052", "23051_3099" },
- { "3054", "23053_3099" },
- { "3056", "23055_3099" },
- { "3058", "23057_3099" },
- { "305A", "23059_3099" },
- { "305C", "2305B_3099" },
- { "305E", "2305D_3099" },
- { "3060", "2305F_3099" },
- { "3062", "23061_3099" },
- { "3065", "23064_3099" },
- { "3067", "23066_3099" },
- { "3069", "23068_3099" },
- { "3070", "2306F_3099" },
- { "3071", "2306F_309A" },
- { "3073", "23072_3099" },
- { "3074", "23072_309A" },
- { "3076", "23075_3099" },
- { "3077", "23075_309A" },
- { "3079", "23078_3099" },
- { "307A", "23078_309A" },
- { "307C", "2307B_3099" },
- { "307D", "2307B_309A" },
- { "3094", "23046_3099" },
- { "309E", "2309D_3099" },
- { "30AC", "230AB_3099" },
- { "30AE", "230AD_3099" },
- { "30B0", "230AF_3099" },
- { "30B2", "230B1_3099" },
- { "30B4", "230B3_3099" },
- { "30B6", "230B5_3099" },
- { "30B8", "230B7_3099" },
- { "30BA", "230B9_3099" },
- { "30BC", "230BB_3099" },
- { "30BE", "230BD_3099" },
- { "30C0", "230BF_3099" },
- { "30C2", "230C1_3099" },
- { "30C5", "230C4_3099" },
- { "30C7", "230C6_3099" },
- { "30C9", "230C8_3099" },
- { "30D0", "230CF_3099" },
- { "30D1", "230CF_309A" },
- { "30D3", "230D2_3099" },
- { "30D4", "230D2_309A" },
- { "30D6", "230D5_3099" },
- { "30D7", "230D5_309A" },
- { "30D9", "230D8_3099" },
- { "30DA", "230D8_309A" },
- { "30DC", "230DB_3099" },
- { "30DD", "230DB_309A" },
- { "30F4", "230A6_3099" },
- { "30F7", "230EF_3099" },
- { "30F8", "230F0_3099" },
- { "30F9", "230F1_3099" },
- { "30FA", "230F2_3099" },
- { "30FE", "230FD_3099" },
- { "F900", "18C48" },
- { "F901", "166F4" },
- { "F902", "18ECA" },
- { "F903", "18CC8" },
- { "F904", "16ED1" },
- { "F905", "14E32" },
- { "F906", "153E5" },
- { "F907", "19F9C" },
- { "F908", "19F9C" },
- { "F909", "15951" },
- { "F90A", "191D1" },
- { "F90B", "15587" },
- { "F90C", "15948" },
- { "F90D", "161F6" },
- { "F90E", "17669" },
- { "F90F", "17F85" },
- { "F910", "1863F" },
- { "F911", "187BA" },
- { "F912", "188F8" },
- { "F913", "1908F" },
- { "F914", "16A02" },
- { "F915", "16D1B" },
- { "F916", "170D9" },
- { "F917", "173DE" },
- { "F918", "1843D" },
- { "F919", "1916A" },
- { "F91A", "199F1" },
- { "F91B", "14E82" },
- { "F91C", "15375" },
- { "F91D", "16B04" },
- { "F91E", "1721B" },
- { "F91F", "1862D" },
- { "F920", "19E1E" },
- { "F921", "15D50" },
- { "F922", "16FEB" },
- { "F923", "185CD" },
- { "F924", "18964" },
- { "F925", "162C9" },
- { "F926", "181D8" },
- { "F927", "1881F" },
- { "F928", "15ECA" },
- { "F929", "16717" },
- { "F92A", "16D6A" },
- { "F92B", "172FC" },
- { "F92C", "190CE" },
- { "F92D", "14F86" },
- { "F92E", "151B7" },
- { "F92F", "152DE" },
- { "F930", "164C4" },
- { "F931", "16AD3" },
- { "F932", "17210" },
- { "F933", "176E7" },
- { "F934", "18001" },
- { "F935", "18606" },
- { "F936", "1865C" },
- { "F937", "18DEF" },
- { "F938", "19732" },
- { "F939", "19B6F" },
- { "F93A", "19DFA" },
- { "F93B", "1788C" },
- { "F93C", "1797F" },
- { "F93D", "17DA0" },
- { "F93E", "183C9" },
- { "F93F", "19304" },
- { "F940", "19E7F" },
- { "F941", "18AD6" },
- { "F942", "158DF" },
- { "F943", "15F04" },
- { "F944", "17C60" },
- { "F945", "1807E" },
- { "F946", "17262" },
- { "F947", "178CA" },
- { "F948", "18CC2" },
- { "F949", "196F7" },
- { "F94A", "158D8" },
- { "F94B", "15C62" },
- { "F94C", "16A13" },
- { "F94D", "16DDA" },
- { "F94E", "16F0F" },
- { "F94F", "17D2F" },
- { "F950", "17E37" },
- { "F951", "1964B" },
- { "F952", "152D2" },
- { "F953", "1808B" },
- { "F954", "151DC" },
- { "F955", "151CC" },
- { "F956", "17A1C" },
- { "F957", "17DBE" },
- { "F958", "183F1" },
- { "F959", "19675" },
- { "F95A", "18B80" },
- { "F95B", "162CF" },
- { "F95C", "16A02" },
- { "F95D", "18AFE" },
- { "F95E", "14E39" },
- { "F95F", "15BE7" },
- { "F960", "16012" },
- { "F961", "17387" },
- { "F962", "17570" },
- { "F963", "15317" },
- { "F964", "178FB" },
- { "F965", "14FBF" },
- { "F966", "15FA9" },
- { "F967", "14E0D" },
- { "F968", "16CCC" },
- { "F969", "16578" },
- { "F96A", "17D22" },
- { "F96B", "153C3" },
- { "F96C", "1585E" },
- { "F96D", "17701" },
- { "F96E", "18449" },
- { "F96F", "18AAA" },
- { "F970", "16BBA" },
- { "F971", "18FB0" },
- { "F972", "16C88" },
- { "F973", "162FE" },
- { "F974", "182E5" },
- { "F975", "163A0" },
- { "F976", "17565" },
- { "F977", "14EAE" },
- { "F978", "15169" },
- { "F979", "151C9" },
- { "F97A", "16881" },
- { "F97B", "17CE7" },
- { "F97C", "1826F" },
- { "F97D", "18AD2" },
- { "F97E", "191CF" },
- { "F97F", "152F5" },
- { "F980", "15442" },
- { "F981", "15973" },
- { "F982", "15EEC" },
- { "F983", "165C5" },
- { "F984", "16FFE" },
- { "F985", "1792A" },
- { "F986", "195AD" },
- { "F987", "19A6A" },
- { "F988", "19E97" },
- { "F989", "19ECE" },
- { "F98A", "1529B" },
- { "F98B", "166C6" },
- { "F98C", "16B77" },
- { "F98D", "18F62" },
- { "F98E", "15E74" },
- { "F98F", "16190" },
- { "F990", "16200" },
- { "F991", "1649A" },
- { "F992", "16F23" },
- { "F993", "17149" },
- { "F994", "17489" },
- { "F995", "179CA" },
- { "F996", "17DF4" },
- { "F997", "1806F" },
- { "F998", "18F26" },
- { "F999", "184EE" },
- { "F99A", "19023" },
- { "F99B", "1934A" },
- { "F99C", "15217" },
- { "F99D", "152A3" },
- { "F99E", "154BD" },
- { "F99F", "170C8" },
- { "F9A0", "188C2" },
- { "F9A1", "18AAA" },
- { "F9A2", "15EC9" },
- { "F9A3", "15FF5" },
- { "F9A4", "1637B" },
- { "F9A5", "16BAE" },
- { "F9A6", "17C3E" },
- { "F9A7", "17375" },
- { "F9A8", "14EE4" },
- { "F9A9", "156F9" },
- { "F9AA", "15BE7" },
- { "F9AB", "15DBA" },
- { "F9AC", "1601C" },
- { "F9AD", "173B2" },
- { "F9AE", "17469" },
- { "F9AF", "17F9A" },
- { "F9B0", "18046" },
- { "F9B1", "19234" },
- { "F9B2", "196F6" },
- { "F9B3", "19748" },
- { "F9B4", "19818" },
- { "F9B5", "14F8B" },
- { "F9B6", "179AE" },
- { "F9B7", "191B4" },
- { "F9B8", "196B8" },
- { "F9B9", "160E1" },
- { "F9BA", "14E86" },
- { "F9BB", "150DA" },
- { "F9BC", "15BEE" },
- { "F9BD", "15C3F" },
- { "F9BE", "16599" },
- { "F9BF", "16A02" },
- { "F9C0", "171CE" },
- { "F9C1", "17642" },
- { "F9C2", "184FC" },
- { "F9C3", "1907C" },
- { "F9C4", "19F8D" },
- { "F9C5", "16688" },
- { "F9C6", "1962E" },
- { "F9C7", "15289" },
- { "F9C8", "1677B" },
- { "F9C9", "167F3" },
- { "F9CA", "16D41" },
- { "F9CB", "16E9C" },
- { "F9CC", "17409" },
- { "F9CD", "17559" },
- { "F9CE", "1786B" },
- { "F9CF", "17D10" },
- { "F9D0", "1985E" },
- { "F9D1", "1516D" },
- { "F9D2", "1622E" },
- { "F9D3", "19678" },
- { "F9D4", "1502B" },
- { "F9D5", "15D19" },
- { "F9D6", "16DEA" },
- { "F9D7", "18F2A" },
- { "F9D8", "15F8B" },
- { "F9D9", "16144" },
- { "F9DA", "16817" },
- { "F9DB", "17387" },
- { "F9DC", "19686" },
- { "F9DD", "15229" },
- { "F9DE", "1540F" },
- { "F9DF", "15C65" },
- { "F9E0", "16613" },
- { "F9E1", "1674E" },
- { "F9E2", "168A8" },
- { "F9E3", "16CE5" },
- { "F9E4", "17406" },
- { "F9E5", "175E2" },
- { "F9E6", "17F79" },
- { "F9E7", "188CF" },
- { "F9E8", "188E1" },
- { "F9E9", "191CC" },
- { "F9EA", "196E2" },
- { "F9EB", "1533F" },
- { "F9EC", "16EBA" },
- { "F9ED", "1541D" },
- { "F9EE", "171D0" },
- { "F9EF", "17498" },
- { "F9F0", "185FA" },
- { "F9F1", "196A3" },
- { "F9F2", "19C57" },
- { "F9F3", "19E9F" },
- { "F9F4", "16797" },
- { "F9F5", "16DCB" },
- { "F9F6", "181E8" },
- { "F9F7", "17ACB" },
- { "F9F8", "17B20" },
- { "F9F9", "17C92" },
- { "F9FA", "172C0" },
- { "F9FB", "17099" },
- { "F9FC", "18B58" },
- { "F9FD", "14EC0" },
- { "F9FE", "18336" },
- { "F9FF", "1523A" },
- { "FA00", "15207" },
- { "FA01", "15EA6" },
- { "FA02", "162D3" },
- { "FA03", "17CD6" },
- { "FA04", "15B85" },
- { "FA05", "16D1E" },
- { "FA06", "166B4" },
- { "FA07", "18F3B" },
- { "FA08", "1884C" },
- { "FA09", "1964D" },
- { "FA0A", "1898B" },
- { "FA0B", "15ED3" },
- { "FA0C", "15140" },
- { "FA0D", "155C0" },
- { "FA10", "1585A" },
- { "FA12", "16674" },
- { "FA15", "151DE" },
- { "FA16", "1732A" },
- { "FA17", "176CA" },
- { "FA18", "1793C" },
- { "FA19", "1795E" },
- { "FA1A", "17965" },
- { "FA1B", "1798F" },
- { "FA1C", "19756" },
- { "FA1D", "17CBE" },
- { "FA1E", "17FBD" },
- { "FA20", "18612" },
- { "FA22", "18AF8" },
- { "FA25", "19038" },
- { "FA26", "190FD" },
- { "FA2A", "198EF" },
- { "FA2B", "198FC" },
- { "FA2C", "19928" },
- { "FA2D", "19DB4" },
- { "FA30", "14FAE" },
- { "FA31", "150E7" },
- { "FA32", "1514D" },
- { "FA33", "152C9" },
- { "FA34", "152E4" },
- { "FA35", "15351" },
- { "FA36", "1559D" },
- { "FA37", "15606" },
- { "FA38", "15668" },
- { "FA39", "15840" },
- { "FA3A", "158A8" },
- { "FA3B", "15C64" },
- { "FA3C", "15C6E" },
- { "FA3D", "16094" },
- { "FA3E", "16168" },
- { "FA3F", "1618E" },
- { "FA40", "161F2" },
- { "FA41", "1654F" },
- { "FA42", "165E2" },
- { "FA43", "16691" },
- { "FA44", "16885" },
- { "FA45", "16D77" },
- { "FA46", "16E1A" },
- { "FA47", "16F22" },
- { "FA48", "1716E" },
- { "FA49", "1722B" },
- { "FA4A", "17422" },
- { "FA4B", "17891" },
- { "FA4C", "1793E" },
- { "FA4D", "17949" },
- { "FA4E", "17948" },
- { "FA4F", "17950" },
- { "FA50", "17956" },
- { "FA51", "1795D" },
- { "FA52", "1798D" },
- { "FA53", "1798E" },
- { "FA54", "17A40" },
- { "FA55", "17A81" },
- { "FA56", "17BC0" },
- { "FA57", "17DF4" },
- { "FA58", "17E09" },
- { "FA59", "17E41" },
- { "FA5A", "17F72" },
- { "FA5B", "18005" },
- { "FA5C", "181ED" },
- { "FA5D", "18279" },
- { "FA5E", "18279" },
- { "FA5F", "18457" },
- { "FA60", "18910" },
- { "FA61", "18996" },
- { "FA62", "18B01" },
- { "FA63", "18B39" },
- { "FA64", "18CD3" },
- { "FA65", "18D08" },
- { "FA66", "18FB6" },
- { "FA67", "19038" },
- { "FA68", "196E3" },
- { "FA69", "197FF" },
- { "FA6A", "1983B" },
- { "FB1D", "205D9_05B4" },
- { "FB1F", "205F2_05B7" },
- { "FB2A", "205E9_05C1" },
- { "FB2B", "205E9_05C2" },
- { "FB2C", "305E9_05BC_05C1" },
- { "FB2D", "305E9_05BC_05C2" },
- { "FB2E", "205D0_05B7" },
- { "FB2F", "205D0_05B8" },
- { "FB30", "205D0_05BC" },
- { "FB31", "205D1_05BC" },
- { "FB32", "205D2_05BC" },
- { "FB33", "205D3_05BC" },
- { "FB34", "205D4_05BC" },
- { "FB35", "205D5_05BC" },
- { "FB36", "205D6_05BC" },
- { "FB38", "205D8_05BC" },
- { "FB39", "205D9_05BC" },
- { "FB3A", "205DA_05BC" },
- { "FB3B", "205DB_05BC" },
- { "FB3C", "205DC_05BC" },
- { "FB3E", "205DE_05BC" },
- { "FB40", "205E0_05BC" },
- { "FB41", "205E1_05BC" },
- { "FB43", "205E3_05BC" },
- { "FB44", "205E4_05BC" },
- { "FB46", "205E6_05BC" },
- { "FB47", "205E7_05BC" },
- { "FB48", "205E8_05BC" },
- { "FB49", "205E9_05BC" },
- { "FB4A", "205EA_05BC" },
- { "FB4B", "205D5_05B9" },
- { "FB4C", "205D1_05BF" },
- { "FB4D", "205DB_05BF" },
- { "FB4E", "205E4_05BF" },
- { "1D15E", "21D157_1D165" },
- { "1D15F", "21D158_1D165" },
- { "1D160", "31D158_1D165_1D16E" },
- { "1D161", "31D158_1D165_1D16F" },
- { "1D162", "31D158_1D165_1D170" },
- { "1D163", "31D158_1D165_1D171" },
- { "1D164", "31D158_1D165_1D172" },
- { "1D1BB", "21D1B9_1D165" },
- { "1D1BC", "21D1BA_1D165" },
- { "1D1BD", "31D1B9_1D165_1D16E" },
- { "1D1BE", "31D1BA_1D165_1D16E" },
- { "1D1BF", "31D1B9_1D165_1D16F" },
- { "1D1C0", "31D1BA_1D165_1D16F" },
- { "2F800", "14E3D" },
- { "2F801", "14E38" },
- { "2F802", "14E41" },
- { "2F803", "120122" },
- { "2F804", "14F60" },
- { "2F805", "14FAE" },
- { "2F806", "14FBB" },
- { "2F807", "15002" },
- { "2F808", "1507A" },
- { "2F809", "15099" },
- { "2F80A", "150E7" },
- { "2F80B", "150CF" },
- { "2F80C", "1349E" },
- { "2F80D", "12063A" },
- { "2F80E", "1514D" },
- { "2F80F", "15154" },
- { "2F810", "15164" },
- { "2F811", "15177" },
- { "2F812", "12051C" },
- { "2F813", "134B9" },
- { "2F814", "15167" },
- { "2F815", "1518D" },
- { "2F816", "12054B" },
- { "2F817", "15197" },
- { "2F818", "151A4" },
- { "2F819", "14ECC" },
- { "2F81A", "151AC" },
- { "2F81B", "151B5" },
- { "2F81C", "1291DF" },
- { "2F81D", "151F5" },
- { "2F81E", "15203" },
- { "2F81F", "134DF" },
- { "2F820", "1523B" },
- { "2F821", "15246" },
- { "2F822", "15272" },
- { "2F823", "15277" },
- { "2F824", "13515" },
- { "2F825", "152C7" },
- { "2F826", "152C9" },
- { "2F827", "152E4" },
- { "2F828", "152FA" },
- { "2F829", "15305" },
- { "2F82A", "15306" },
- { "2F82B", "15317" },
- { "2F82C", "15349" },
- { "2F82D", "15351" },
- { "2F82E", "1535A" },
- { "2F82F", "15373" },
- { "2F830", "1537D" },
- { "2F831", "1537F" },
- { "2F832", "1537F" },
- { "2F833", "1537F" },
- { "2F834", "120A2C" },
- { "2F835", "17070" },
- { "2F836", "153CA" },
- { "2F837", "153DF" },
- { "2F838", "120B63" },
- { "2F839", "153EB" },
- { "2F83A", "153F1" },
- { "2F83B", "15406" },
- { "2F83C", "1549E" },
- { "2F83D", "15438" },
- { "2F83E", "15448" },
- { "2F83F", "15468" },
- { "2F840", "154A2" },
- { "2F841", "154F6" },
- { "2F842", "15510" },
- { "2F843", "15553" },
- { "2F844", "15563" },
- { "2F845", "15584" },
- { "2F846", "15584" },
- { "2F847", "15599" },
- { "2F848", "155AB" },
- { "2F849", "155B3" },
- { "2F84A", "155C2" },
- { "2F84B", "15716" },
- { "2F84C", "15606" },
- { "2F84D", "15717" },
- { "2F84E", "15651" },
- { "2F84F", "15674" },
- { "2F850", "15207" },
- { "2F851", "158EE" },
- { "2F852", "157CE" },
- { "2F853", "157F4" },
- { "2F854", "1580D" },
- { "2F855", "1578B" },
- { "2F856", "15832" },
- { "2F857", "15831" },
- { "2F858", "158AC" },
- { "2F859", "1214E4" },
- { "2F85A", "158F2" },
- { "2F85B", "158F7" },
- { "2F85C", "15906" },
- { "2F85D", "1591A" },
- { "2F85E", "15922" },
- { "2F85F", "15962" },
- { "2F860", "1216A8" },
- { "2F861", "1216EA" },
- { "2F862", "159EC" },
- { "2F863", "15A1B" },
- { "2F864", "15A27" },
- { "2F865", "159D8" },
- { "2F866", "15A66" },
- { "2F867", "136EE" },
- { "2F868", "12136A" },
- { "2F869", "15B08" },
- { "2F86A", "15B3E" },
- { "2F86B", "15B3E" },
- { "2F86C", "1219C8" },
- { "2F86D", "15BC3" },
- { "2F86E", "15BD8" },
- { "2F86F", "15BE7" },
- { "2F870", "15BF3" },
- { "2F871", "121B18" },
- { "2F872", "15BFF" },
- { "2F873", "15C06" },
- { "2F874", "15F33" },
- { "2F875", "15C22" },
- { "2F876", "13781" },
- { "2F877", "15C60" },
- { "2F878", "15C6E" },
- { "2F879", "15CC0" },
- { "2F87A", "15C8D" },
- { "2F87B", "121DE4" },
- { "2F87C", "15D43" },
- { "2F87D", "121DE6" },
- { "2F87E", "15D6E" },
- { "2F87F", "15D6B" },
- { "2F880", "15D7C" },
- { "2F881", "15DE1" },
- { "2F882", "15DE2" },
- { "2F883", "1382F" },
- { "2F884", "15DFD" },
- { "2F885", "15E28" },
- { "2F886", "15E3D" },
- { "2F887", "15E69" },
- { "2F888", "13862" },
- { "2F889", "122183" },
- { "2F88A", "1387C" },
- { "2F88B", "15EB0" },
- { "2F88C", "15EB3" },
- { "2F88D", "15EB6" },
- { "2F88E", "15ECA" },
- { "2F88F", "12A392" },
- { "2F890", "15EFE" },
- { "2F891", "122331" },
- { "2F892", "122331" },
- { "2F893", "18201" },
- { "2F894", "15F22" },
- { "2F895", "15F22" },
- { "2F896", "138C7" },
- { "2F897", "1232B8" },
- { "2F898", "1261DA" },
- { "2F899", "15F62" },
- { "2F89A", "15F6B" },
- { "2F89B", "138E3" },
- { "2F89C", "15F9A" },
- { "2F89D", "15FCD" },
- { "2F89E", "15FD7" },
- { "2F89F", "15FF9" },
- { "2F8A0", "16081" },
- { "2F8A1", "1393A" },
- { "2F8A2", "1391C" },
- { "2F8A3", "16094" },
- { "2F8A4", "1226D4" },
- { "2F8A5", "160C7" },
- { "2F8A6", "16148" },
- { "2F8A7", "1614C" },
- { "2F8A8", "1614E" },
- { "2F8A9", "1614C" },
- { "2F8AA", "1617A" },
- { "2F8AB", "1618E" },
- { "2F8AC", "161B2" },
- { "2F8AD", "161A4" },
- { "2F8AE", "161AF" },
- { "2F8AF", "161DE" },
- { "2F8B0", "161F2" },
- { "2F8B1", "161F6" },
- { "2F8B2", "16210" },
- { "2F8B3", "1621B" },
- { "2F8B4", "1625D" },
- { "2F8B5", "162B1" },
- { "2F8B6", "162D4" },
- { "2F8B7", "16350" },
- { "2F8B8", "122B0C" },
- { "2F8B9", "1633D" },
- { "2F8BA", "162FC" },
- { "2F8BB", "16368" },
- { "2F8BC", "16383" },
- { "2F8BD", "163E4" },
- { "2F8BE", "122BF1" },
- { "2F8BF", "16422" },
- { "2F8C0", "163C5" },
- { "2F8C1", "163A9" },
- { "2F8C2", "13A2E" },
- { "2F8C3", "16469" },
- { "2F8C4", "1647E" },
- { "2F8C5", "1649D" },
- { "2F8C6", "16477" },
- { "2F8C7", "13A6C" },
- { "2F8C8", "1654F" },
- { "2F8C9", "1656C" },
- { "2F8CA", "12300A" },
- { "2F8CB", "165E3" },
- { "2F8CC", "166F8" },
- { "2F8CD", "16649" },
- { "2F8CE", "13B19" },
- { "2F8CF", "16691" },
- { "2F8D0", "13B08" },
- { "2F8D1", "13AE4" },
- { "2F8D2", "15192" },
- { "2F8D3", "15195" },
- { "2F8D4", "16700" },
- { "2F8D5", "1669C" },
- { "2F8D6", "180AD" },
- { "2F8D7", "143D9" },
- { "2F8D8", "16717" },
- { "2F8D9", "1671B" },
- { "2F8DA", "16721" },
- { "2F8DB", "1675E" },
- { "2F8DC", "16753" },
- { "2F8DD", "1233C3" },
- { "2F8DE", "13B49" },
- { "2F8DF", "167FA" },
- { "2F8E0", "16785" },
- { "2F8E1", "16852" },
- { "2F8E2", "16885" },
- { "2F8E3", "12346D" },
- { "2F8E4", "1688E" },
- { "2F8E5", "1681F" },
- { "2F8E6", "16914" },
- { "2F8E7", "13B9D" },
- { "2F8E8", "16942" },
- { "2F8E9", "169A3" },
- { "2F8EA", "169EA" },
- { "2F8EB", "16AA8" },
- { "2F8EC", "1236A3" },
- { "2F8ED", "16ADB" },
- { "2F8EE", "13C18" },
- { "2F8EF", "16B21" },
- { "2F8F0", "1238A7" },
- { "2F8F1", "16B54" },
- { "2F8F2", "13C4E" },
- { "2F8F3", "16B72" },
- { "2F8F4", "16B9F" },
- { "2F8F5", "16BBA" },
- { "2F8F6", "16BBB" },
- { "2F8F7", "123A8D" },
- { "2F8F8", "121D0B" },
- { "2F8F9", "123AFA" },
- { "2F8FA", "16C4E" },
- { "2F8FB", "123CBC" },
- { "2F8FC", "16CBF" },
- { "2F8FD", "16CCD" },
- { "2F8FE", "16C67" },
- { "2F8FF", "16D16" },
- { "2F900", "16D3E" },
- { "2F901", "16D77" },
- { "2F902", "16D41" },
- { "2F903", "16D69" },
- { "2F904", "16D78" },
- { "2F905", "16D85" },
- { "2F906", "123D1E" },
- { "2F907", "16D34" },
- { "2F908", "16E2F" },
- { "2F909", "16E6E" },
- { "2F90A", "13D33" },
- { "2F90B", "16ECB" },
- { "2F90C", "16EC7" },
- { "2F90D", "123ED1" },
- { "2F90E", "16DF9" },
- { "2F90F", "16F6E" },
- { "2F910", "123F5E" },
- { "2F911", "123F8E" },
- { "2F912", "16FC6" },
- { "2F913", "17039" },
- { "2F914", "1701E" },
- { "2F915", "1701B" },
- { "2F916", "13D96" },
- { "2F917", "1704A" },
- { "2F918", "1707D" },
- { "2F919", "17077" },
- { "2F91A", "170AD" },
- { "2F91B", "120525" },
- { "2F91C", "17145" },
- { "2F91D", "124263" },
- { "2F91E", "1719C" },
- { "2F91F", "143AB" },
- { "2F920", "17228" },
- { "2F921", "17235" },
- { "2F922", "17250" },
- { "2F923", "124608" },
- { "2F924", "17280" },
- { "2F925", "17295" },
- { "2F926", "124735" },
- { "2F927", "124814" },
- { "2F928", "1737A" },
- { "2F929", "1738B" },
- { "2F92A", "13EAC" },
- { "2F92B", "173A5" },
- { "2F92C", "13EB8" },
- { "2F92D", "13EB8" },
- { "2F92E", "17447" },
- { "2F92F", "1745C" },
- { "2F930", "17471" },
- { "2F931", "17485" },
- { "2F932", "174CA" },
- { "2F933", "13F1B" },
- { "2F934", "17524" },
- { "2F935", "124C36" },
- { "2F936", "1753E" },
- { "2F937", "124C92" },
- { "2F938", "17570" },
- { "2F939", "12219F" },
- { "2F93A", "17610" },
- { "2F93B", "124FA1" },
- { "2F93C", "124FB8" },
- { "2F93D", "125044" },
- { "2F93E", "13FFC" },
- { "2F93F", "14008" },
- { "2F940", "176F4" },
- { "2F941", "1250F3" },
- { "2F942", "1250F2" },
- { "2F943", "125119" },
- { "2F944", "125133" },
- { "2F945", "1771E" },
- { "2F946", "1771F" },
- { "2F947", "1771F" },
- { "2F948", "1774A" },
- { "2F949", "14039" },
- { "2F94A", "1778B" },
- { "2F94B", "14046" },
- { "2F94C", "14096" },
- { "2F94D", "12541D" },
- { "2F94E", "1784E" },
- { "2F94F", "1788C" },
- { "2F950", "178CC" },
- { "2F951", "140E3" },
- { "2F952", "125626" },
- { "2F953", "17956" },
- { "2F954", "12569A" },
- { "2F955", "1256C5" },
- { "2F956", "1798F" },
- { "2F957", "179EB" },
- { "2F958", "1412F" },
- { "2F959", "17A40" },
- { "2F95A", "17A4A" },
- { "2F95B", "17A4F" },
- { "2F95C", "12597C" },
- { "2F95D", "125AA7" },
- { "2F95E", "125AA7" },
- { "2F95F", "17AAE" },
- { "2F960", "14202" },
- { "2F961", "125BAB" },
- { "2F962", "17BC6" },
- { "2F963", "17BC9" },
- { "2F964", "14227" },
- { "2F965", "125C80" },
- { "2F966", "17CD2" },
- { "2F967", "142A0" },
- { "2F968", "17CE8" },
- { "2F969", "17CE3" },
- { "2F96A", "17D00" },
- { "2F96B", "125F86" },
- { "2F96C", "17D63" },
- { "2F96D", "14301" },
- { "2F96E", "17DC7" },
- { "2F96F", "17E02" },
- { "2F970", "17E45" },
- { "2F971", "14334" },
- { "2F972", "126228" },
- { "2F973", "126247" },
- { "2F974", "14359" },
- { "2F975", "1262D9" },
- { "2F976", "17F7A" },
- { "2F977", "12633E" },
- { "2F978", "17F95" },
- { "2F979", "17FFA" },
- { "2F97A", "18005" },
- { "2F97B", "1264DA" },
- { "2F97C", "126523" },
- { "2F97D", "18060" },
- { "2F97E", "1265A8" },
- { "2F97F", "18070" },
- { "2F980", "12335F" },
- { "2F981", "143D5" },
- { "2F982", "180B2" },
- { "2F983", "18103" },
- { "2F984", "1440B" },
- { "2F985", "1813E" },
- { "2F986", "15AB5" },
- { "2F987", "1267A7" },
- { "2F988", "1267B5" },
- { "2F989", "123393" },
- { "2F98A", "12339C" },
- { "2F98B", "18201" },
- { "2F98C", "18204" },
- { "2F98D", "18F9E" },
- { "2F98E", "1446B" },
- { "2F98F", "18291" },
- { "2F990", "1828B" },
- { "2F991", "1829D" },
- { "2F992", "152B3" },
- { "2F993", "182B1" },
- { "2F994", "182B3" },
- { "2F995", "182BD" },
- { "2F996", "182E6" },
- { "2F997", "126B3C" },
- { "2F998", "182E5" },
- { "2F999", "1831D" },
- { "2F99A", "18363" },
- { "2F99B", "183AD" },
- { "2F99C", "18323" },
- { "2F99D", "183BD" },
- { "2F99E", "183E7" },
- { "2F99F", "18457" },
- { "2F9A0", "18353" },
- { "2F9A1", "183CA" },
- { "2F9A2", "183CC" },
- { "2F9A3", "183DC" },
- { "2F9A4", "126C36" },
- { "2F9A5", "126D6B" },
- { "2F9A6", "126CD5" },
- { "2F9A7", "1452B" },
- { "2F9A8", "184F1" },
- { "2F9A9", "184F3" },
- { "2F9AA", "18516" },
- { "2F9AB", "1273CA" },
- { "2F9AC", "18564" },
- { "2F9AD", "126F2C" },
- { "2F9AE", "1455D" },
- { "2F9AF", "14561" },
- { "2F9B0", "126FB1" },
- { "2F9B1", "1270D2" },
- { "2F9B2", "1456B" },
- { "2F9B3", "18650" },
- { "2F9B4", "1865C" },
- { "2F9B5", "18667" },
- { "2F9B6", "18669" },
- { "2F9B7", "186A9" },
- { "2F9B8", "18688" },
- { "2F9B9", "1870E" },
- { "2F9BA", "186E2" },
- { "2F9BB", "18779" },
- { "2F9BC", "18728" },
- { "2F9BD", "1876B" },
- { "2F9BE", "18786" },
- { "2F9BF", "14D57" },
- { "2F9C0", "187E1" },
- { "2F9C1", "18801" },
- { "2F9C2", "145F9" },
- { "2F9C3", "18860" },
- { "2F9C4", "18863" },
- { "2F9C5", "127667" },
- { "2F9C6", "188D7" },
- { "2F9C7", "188DE" },
- { "2F9C8", "14635" },
- { "2F9C9", "188FA" },
- { "2F9CA", "134BB" },
- { "2F9CB", "1278AE" },
- { "2F9CC", "127966" },
- { "2F9CD", "146BE" },
- { "2F9CE", "146C7" },
- { "2F9CF", "18AA0" },
- { "2F9D0", "18AED" },
- { "2F9D1", "18B8A" },
- { "2F9D2", "18C55" },
- { "2F9D3", "127CA8" },
- { "2F9D4", "18CAB" },
- { "2F9D5", "18CC1" },
- { "2F9D6", "18D1B" },
- { "2F9D7", "18D77" },
- { "2F9D8", "127F2F" },
- { "2F9D9", "120804" },
- { "2F9DA", "18DCB" },
- { "2F9DB", "18DBC" },
- { "2F9DC", "18DF0" },
- { "2F9DD", "1208DE" },
- { "2F9DE", "18ED4" },
- { "2F9DF", "18F38" },
- { "2F9E0", "1285D2" },
- { "2F9E1", "1285ED" },
- { "2F9E2", "19094" },
- { "2F9E3", "190F1" },
- { "2F9E4", "19111" },
- { "2F9E5", "12872E" },
- { "2F9E6", "1911B" },
- { "2F9E7", "19238" },
- { "2F9E8", "192D7" },
- { "2F9E9", "192D8" },
- { "2F9EA", "1927C" },
- { "2F9EB", "193F9" },
- { "2F9EC", "19415" },
- { "2F9ED", "128BFA" },
- { "2F9EE", "1958B" },
- { "2F9EF", "14995" },
- { "2F9F0", "195B7" },
- { "2F9F1", "128D77" },
- { "2F9F2", "149E6" },
- { "2F9F3", "196C3" },
- { "2F9F4", "15DB2" },
- { "2F9F5", "19723" },
- { "2F9F6", "129145" },
- { "2F9F7", "12921A" },
- { "2F9F8", "14A6E" },
- { "2F9F9", "14A76" },
- { "2F9FA", "197E0" },
- { "2F9FB", "12940A" },
- { "2F9FC", "14AB2" },
- { "2F9FD", "129496" },
- { "2F9FE", "1980B" },
- { "2F9FF", "1980B" },
- { "2FA00", "19829" },
- { "2FA01", "1295B6" },
- { "2FA02", "198E2" },
- { "2FA03", "14B33" },
- { "2FA04", "19929" },
- { "2FA05", "199A7" },
- { "2FA06", "199C2" },
- { "2FA07", "199FE" },
- { "2FA08", "14BCE" },
- { "2FA09", "129B30" },
- { "2FA0A", "19B12" },
- { "2FA0B", "19C40" },
- { "2FA0C", "19CFD" },
- { "2FA0D", "14CCE" },
- { "2FA0E", "14CED" },
- { "2FA0F", "19D67" },
- { "2FA10", "12A0CE" },
- { "2FA11", "14CF8" },
- { "2FA12", "12A105" },
- { "2FA13", "12A20E" },
- { "2FA14", "12A291" },
- { "2FA15", "19EBB" },
- { "2FA16", "14D56" },
- { "2FA17", "19EF9" },
- { "2FA18", "19EFE" },
- { "2FA19", "19F05" },
- { "2FA1A", "19F0F" },
- { "2FA1B", "19F16" },
- { "2FA1C", "19F3B" },
- { "2FA1D", "12A600" },
-};
-
-// global constructor
-
-static struct unicode_decompose_init {
- unicode_decompose_init();
-} _unicode_decompose_init;
-
-unicode_decompose_init::unicode_decompose_init() {
- for (unsigned int i = 0;
- i < sizeof(unicode_decompose_list)/sizeof(unicode_decompose_list[0]);
- i++) {
- unicode_decompose *dec = new unicode_decompose[1];
- dec->value = (char *)unicode_decompose_list[i].value;
- unicode_decompose_table.define(unicode_decompose_list[i].key, dec);
- }
-}
-
-const char *decompose_unicode(const char *s)
-{
- unicode_decompose *result = unicode_decompose_table.lookup(s);
- return result ? result->value : 0;
-}
diff --git a/contrib/groff/src/xditview/ChangeLog b/contrib/groff/src/xditview/ChangeLog
deleted file mode 100644
index a63d984..0000000
--- a/contrib/groff/src/xditview/ChangeLog
+++ /dev/null
@@ -1,520 +0,0 @@
-Version 1.19 released
-=====================
-
-2003-03-03 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile.in (extraclean): Added gxditview._man.
-
-2003-01-28 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile.in (SEP): New variable; set to @PATH_SEPARATOR@.
- (GROFF_FONTPATH): Use it.
-
-2003-01-07 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (Adobe_Symbol_map): Add `sqrt'.
-
-2003-01-06 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (Adobe_Symbol_map): Add `integral'.
-
-2002-12-29 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map): Remove `ap' and `eq'.
-
-2002-12-20 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (Adobe_Symbol_map): Don't include `or'.
- * draw.c (AdjustCharDeltas): Apply correction only if nadj > 1.
- (DoCharacter): Call FlushCharCache if font size and font number
- differ.
- Reset `dw->dvi.cache.adjustable' properly.
-
-2002-12-09 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map): Use `tno' symbol instead of `no'.
-
-2002-12-01 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile.in: Use `InstallAppDefaultsLong' instead of
- `InstallAppDefaults' to make it work if build directory isn't
- $srcdir.
-
-2002-11-24 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (Adobe_Symbol_map): Add glyph `braceex'.
-
-2002-11-14 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map): Don't include `or'.
-
-Version 1.18.1 released
-=======================
-
-2002-09-16 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile.in (GROFF_LOCALFONTDIR): New variable.
- (GROFF_FONTPATH): Use it.
- Remove /usr/local/lib/font.
-
-Version 1.18.0 released
-=======================
-
-2002-06-22 Werner LEMBERG <wl@gnu.org>
-
- * gxditview.c (main): Handle `-help' and `--help' correctly.
-
-2002-06-17 Colin Watson <cjwatson@debian.org>
-
- * Imakefile.in: s/@top_builddir@/@groff_top_builddir@/.
-
-2002-04-06 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map, Adobe_Symbol_map): Remove all
- characters > 0x80.
- * parse.c (ParseInput): Ignore `m' command.
- (ParseDrawFunction): Don't move for unknown drawing functions.
- Don't move for `f' drawing function.
-
-2002-03-25 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map): Use `t+-', `tmu', and `tdi' symbols
- instead of `+-', `mu', and `di', respectively.
-
-2002-02-23 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c (ISO_8859_1_map): Add `mc' symbol.
-
-2001-09-22 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile.in: Redefine `ProgramTargetHelper' as
- `ProgramTargetHelperNoMan' and add a call to `InstallManPageLong'
- to make the `install.man' target work if the build directory isn't
- $srcdir.
-
-Version 1.17.2 released
-=======================
-
-Version 1.17.1 released
-=======================
-
-2001-04-21 Albert Chin-A-Young <china@thewrittenword.com>
-
- * Imakefile.in: Add support for recent HP architectures.
-
-Version 1.17 released
-=====================
-
-2001-01-04 Rob Daasch <daasch@ece.pdx.edu>
-
- * parse.c (ParseInput): Added 'F' to command switch to swallow
- filename strings as ignored comments.
-
-2000-12-02 Werner LEMBERG <wl@gnu.org>
-
- * device.c (find_file): Remove home directory in search path.
-
-2000-11-14 Werner LEMBERG <wl@gnu.org>
-
- * device.c (open_device_file): Remove `path' parameter.
- (find_file): Construct font path similar to groff: First the contents
- of GROFF_FONT_PATH, then the home directory, and finally the default
- font path.
- * Imakefile.in: Fix GROFF_DATAPROGRAMDIR and GROFF_FONTPATH.
-
-2000-10-23 Werner LEMBERG <wl@gnu.org>
-
- Change installation structure for data files from .../groff/... to
- .../groff/<version><revision>/... to be conform with other GNU
- programs.
-
- * Imakefile.in: Implement it.
-
-Version 1.16.1 released
-=======================
-
-Version 1.16 released
-=====================
-
-2000-05-18 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c: Adding `cq' as an alias for "'" in latin-1 map.
-
-2000-05-03 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c: Adding `dq' as an alias for `"' in latin-1 map.
-
-2000-04-28 Werner LEMBERG <wl@gnu.org>
-
- * DviChar.c: Replacing `md' glyph name with `pc' in latin-1 map to
- make it distinct from the `md' glyph in the symbol font.
-
-2000-03-03 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile replaced with Imakefile.in which will be configured by
- the main configure script of groff. This will set the correct font
- path, and it will make it possible to build xditview in a directory
- different from $srcdir.
-
-2000-03-01 Colin Phipps <crp22@cam.ac.uk>
-
- * Dvi.c (OpenFile): Use tmpdir() for security reasons.
- * xtotroff.c (MapFont): Avoid race while opening file.
-
-2000-02-06 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile: Adapted to new directory structure.
-
- * README: Updated.
-
-Version 1.15 released
-=====================
-
-1999-12-21 Werner LEMBERG <wl@gnu.org>
-
- * README: Fixed ftp GNU address.
-
-1999-12-13 Werner LEMBERG <wl@gnu.org>
-
- * device.c: Use extern declarations of strtok(), strchr(), and
- getenv() only if not defined as macros.
-
-1999-11-18 Larry Jones <larry.jones@sdrc.com>
-
- * xditview.c: Add fallback_resources to allow running without
- access to the app-defaults file.
-
- * Imakefile: Added rule to create app-defaults to a C header file.
-
- * GXditview-ad.h: New file containing fallback default resources.
-
- * ad2c: New file to do the app-defaults -> C header file
- conversion.
-
-1999-10-27 Larry Jones <larry.jones@sdrc.com>
-
- * font.c (DisposeFontSizes): If there's a problem loading a font,
- xditview will fall-back and use the default font, but it hasn't
- checked before unloading fonts which could result in unloading the
- default font (possibly multiple times) and then X errors.
-
-1999-09-13 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile (extraclean): Added Makefile.
-
- * xditview.c (main, MakePrompt): Fixing compilation warnings.
-
- * TODO: Imakefile should be replaced with a configure script.
-
-1999-09-13 Werner LEMBERG <wl@gnu.org>
-
- * Makefile: Removed.
-
-1999-09-12 Werner LEMBERG <wl@gnu.org>
-
- * Imakefile (GROFF_FONTPATH): Another addition.
-
- * device.c (FONTPATH): Update to match current groff version.
-
-1999-09-11 Larry Jones <larry.jones@sdrc.com>
-
- * Imakefile (GROFF_LIBDIR, GROFF_FONTPATH): Update to match
- current groff version.
-
- * Dvi.c (Realize, Destroy), DviP.h, draw.c (setFillGC), gray*.bm:
- Allow 8 levels of gray rather than just 1.
-
- * draw.c (DrawFilledCircle, DrawFilledEllipse, DrawFilledPolygon):
- Draw outlines to prevent gaps between abutting figures.
-
-1999-05-27 Werner LEMBERG <wl@gnu.org>
-
- * xtotroff.c (usage): Fixed typo.
-
-Mon Sep 11 10:40:33 1995 James Clark <jjc@jclark.com>
-
- * device.c (INT_MIN, INT_MAX): Don't define if already defined.
-
-Mon Aug 8 11:14:11 1994 James Clark (jjc@jclark.com)
-
- * DviChar.c (Adobe_Symbol_map): Use \(nb for notsubset.
-
-Tue Apr 19 04:41:16 1994 James Clark (jjc@jclark.com)
-
- * Dvi.c (resources): Change default for background and foreground
- to "XtDefaultBackground" and "XtDefaultForeground".
-
-Sat Feb 12 10:38:47 1994 James Clark (jjc@jclark.com)
-
- * DviChar.c (Adobe_Symbol_map): Rename radicalex to rn.
-
-Thu May 27 20:30:12 1993 James Clark (jjc@jclark.com)
-
- * device.c (isascii): Define if necessary.
- (canonicalize_name): Cast argument to isdigit() to unsigned char.
-
-Thu Apr 29 18:36:57 1993 James Clark (jjc at jclark.com)
-
- * xditview.c: Include <X11/Xos.h>.
- (NewFile): Don't declare rindex(). Use strrchr() rather than
- rindex().
-
-Tue Mar 30 15:12:09 1993 James Clark (jjc at jclark)
-
- * draw.c (charExists): Check that fi->per_char is not NULL.
-
-Sat Dec 12 17:42:40 1992 James Clark (jjc at jclark)
-
- * Dvi.c (SetGeometry): Cast XtMakeGeometryRequest arguments.
-
- * draw.c (DrawPolygon, DrawFilledPolygon): Cast Xtfree argument.
-
- * font.c (DisposeFontSizes): Add declaration.
-
- * draw.c (FakeCharacter): Add declaration.
-
-Wed Oct 28 13:24:00 1992 James Clark (jjc at jclark)
-
- * Imakefile (install.dev): Deleted.
- (fonts): New target.
-
-Mon Oct 12 10:50:44 1992 James Clark (jjc at jclark)
-
- * Imakefile (install.dev): Say when we're installing devX*-12.
-
- * Imakefile (install.dev): Depends on DESC and FontMap.
-
-Thu Oct 1 20:03:45 1992 James Clark (jjc at jclark)
-
- * xditview.c (Syntax): Mention -filename option.
-
-Sat Aug 15 12:56:39 1992 James Clark (jjc at jclark)
-
- * GXditview.ad: Bind space and return to NextPage. Bind backspace
- and delete to previous page.
-
- * DviChar.c (Adobe_Symbol_map): Add `an'.
-
- * DviChar.c (Adobe_Symbol_map): Add arrowvertex, arrowverttp, and
- arrowvertbt.
-
-Mon Aug 10 11:54:27 1992 James Clark (jjc at jclark)
-
- * FontMap: Add m/p fields to the fonts names.
-
-Sat Aug 8 12:00:28 1992 James Clark (jjc at jclark)
-
- * DESC: Leave font positions 5-9 blank.
-
-Tue Jul 28 11:37:05 1992 James Clark (jjc at jclark)
-
- * Imakefile: Don't use gendef. Pass definition of FONTPATH using
- DEFINES.
- (path.h): Deleted.
- (device.c): Don't include path.h. Provide default definition of
- FONTPATH.
-
-Mon Jul 6 14:06:53 1992 James Clark (jjc at jclark)
-
- * Imakefile: Don't install tmac.X and tmac.Xps.
- * tmac.X, tmac.Xps: Moved to ../macros.
-
- * Imakefile: Don't install eqnchar.
- * eqnchar: Deleted.
-
-Sun Jun 14 12:55:02 1992 James Clark (jjc@jclark)
-
- * tmac.Xps: Handle OE, oe, lq, rq.
- * draw.c (FakeCharacter): Don't handle these.
-
- * draw.c (FakeCharacter): Don't handle f/.
-
-Mon Jun 8 11:46:37 1992 James Clark (jjc@jclark)
-
- * tmac.X: Translate char160 to space.
-
-Sun Jun 7 14:39:53 1992 James Clark (jjc@jclark)
-
- * tmac.X: Do `mso tmac.psic' before restoring compatibility mode.
-
- * tmac.X: Add \(OE, \(oe, \(ah, \(ao, \(ho.
-
- * tmac.Xps: Make it work in compatibility mode.
- Redo existing character definitions with .Xps-char.
- Add more character definitions.
- (Xps-char): New macro.
-
-Sat Jun 6 21:46:03 1992 James Clark (jjc@jclark)
-
- * DviChar.c (Adobe_Symbol_map): Add +h, +f, +p, Fn, lz.
- * tmac.X: Add \(bq, \(Bq, \(aq.
- * tmac.Xps: Handle \(aq, \(bq, \(Bq, \(Fn.
-
-Wed Jun 3 11:11:15 1992 James Clark (jjc@jclark)
-
- * DviChar.c (Adobe_Symbol_map): Add wp.
-
-Tue Apr 21 09:21:59 1992 James Clark (jjc at jclark)
-
- * GXditview.ad: Bind n, p, q keys to NextPage, PreviousPage and
- Quit actions.
-
- * xditview.c (RerasterizeAction): New function.
- (xditview_actions): Add RerasterizeAction.
- * GXditview.ad: Bind r key to Rerasterize action.
-
-Fri Apr 17 08:25:36 1992 James Clark (jjc at jclark)
-
- * xditview.c: Add -filename option.
- (main): Copy any -filename argument into current_file_name.
-
-Mon Mar 16 10:21:58 1992 James Clark (jjc at jclark)
-
- * tmac.X: Load tmac.pspic.
-
-Sun Mar 8 11:27:19 1992 James Clark (jjc at jclark)
-
- * Lex.c (GetLine, GetWord, GetNumber): Rewrite.
-
-Sat Oct 12 22:58:52 1991 James Clark (jjc at jclark)
-
- * Dvi.c (SetDevice): If the size change request is refused but a
- larger geometry is offered, request that.
-
-Wed Oct 9 12:27:48 1991 James Clark (jjc at jclark)
-
- * font.c (InstallFontSizes): Ignore FontNameAverageWidth component.
-
- * Dvi.c (default_font_map): Add `adobe' to font names to avoid
- ambiguity.
-
- * FontMap: New file.
- * FontMap.X100, FontMap.X75: Deleted.
- * xtotroff.c (main, usage): Add -s and -r options.
- (MapFont): Change the font pattern to have the selected resolution and
- size.
- * Imakefile (install.dev): Use FontMap and supply appropriate -s
- and -r options.
-
- * xtotroff.c (MapFont): Check for ambiguity by comparing canonicalized
- font names.
-
- * DviP.h (DviFontList): Add initialized and scalable members.
- (font.c): Add support for scalable fonts based on R5 xditview.
-
- * DviChar.c: Use xmalloc rather than malloc.
- * xditview.c (xmalloc): New function.
- * xtotroff.c (xmalloc): New function.
- * other files: Use XtMalloc and XtFree instead of malloc and free.
-
-Thu Aug 29 20:15:31 1991 James Clark (jjc at jclark)
-
- * draw.c (setGC): Do multiplication in floating point to avoid
- overflow.
-
-Tue Aug 13 12:04:41 1991 James Clark (jjc at jclark)
-
- * draw.c (FakeCharacter): Remove casts in defintion of pack2.
-
-Tue Jul 30 11:42:39 1991 James Clark (jjc at jclark)
-
- * tmac.Xps: New file.
- * Imakefile (install): Install tmac.Xps.
-
-Tue Jul 2 09:31:37 1991 James Clark (jjc at jclark)
-
- * xtotroff.c (main): Pass argv[0] to usage().
-
-Sun Jun 30 12:34:06 1991 James Clark (jjc at jclark)
-
- * xtotroff.c (MapFont): Handle the case where XLoadQueryFont
- returns NULL.
-
-Sat Jun 29 12:32:52 1991 James Clark (jjc at jclark)
-
- * Imakefile: Use ../gendef to generate path.h.
-
-Sun Jun 16 13:26:34 1991 James Clark (jjc at jclark)
-
- * Imakefile (depend.o): Change to device.o.
-
-Sun Jun 2 12:17:56 1991 James Clark (jjc at jclark)
-
- * Imakefile: Remove spaces from the beginning of variable
- assignment lines.
-
-Sun May 26 14:14:01 1991 James Clark (jjc at jclark)
-
- * xditview.c (Syntax): Update.
-
- * Dvi.c (DviSaveToFile, SaveToFile): New functions.
- (FindPage): Check that we're not readingTmp before checking for
- end of file of normal input file.
- (ClassPartInitialize): New function.
- * Dvi.h: Add declaration of DviSaveToFile.
- * DviP.h: Add save method to DviClassPart. Declare
- InheritSaveToFile.
- * xditview.c (DoPrint, Print, PrintAction): New functions.
- * xditview.c: Add print menu entry.
- * xditview.c: Provide printCommand application resource.
- * lex.c: Don't output EOF to temporary file.
-
- * Dvi.c (QueryGeometry): Check request->request_mode.
-
- * Dvi.c (SetDevice): New function.
- (SetDeviceResolution): Deleted.
-
- * Dvi.c: Add resolution resource.
- * DviP.h: Add definitions of XtNResolution and XtCResolution.
- * xditview.c: Add -resolution argument.
- * GXditview.ad: Add default for GXditview.height.
- * Dvi.c (Initialize, SetDevice): Use default_resolution.
-
- * Dvi.c: Make MY_HEIGHT and MY_WIDTH use the paperlength and
- paperwidth commands in the DESC file.
-
- * Dvi.c: Add SS font to default font map.
-
- * draw.c: Rewritten so as not to assume device and display
- resolution is the same.
- * DviP.h: Include device.h. Add device_font member to DviFontList.
- Add adjustable array to DviCharCache. Add text_x_width,
- text_device_width, word_flag, device_font, device_font_number,
- device, native, device_resolution, display_resolution,
- paperlength, paperwidth, scale_factor, sizescale members.
- * Dvi.c (Initialize): Initialize new variable used by draw.c.
- (Destroy): Call device_destroy.
- * font.c (MaxFontPosition): New function.
- (LookupFontSizeBySize): Handle sizescale.
- (InstallFont): Load the device font.
- (ForgetFonts): New function.
- (QueryDeviceFont): New function.
- * parse.c (ParseInput): Handle t and u commands. Split off
- character output into draw.c.
- (ParseDeviceControl): Ignore res command. Use the device argument
- to the T command.
-
- * font.c (MapXNameToDviName): Ifdefed out.
-
- * path.h: New file.
- * device.c, device.h: New files.
-
- * DviChar.c: Add entries for lB, rB, oq, lC, rC, md.
-
- * INSTALL: New file.
-
- * libxdvi: Merged into main directory.
- * xtotroff.c, xditview.c: Change includes accordingly.
-
- * devX75, devX100: Merged into main directory.
- * xditview.man: Renamed to gxditview.man.
-
- * Xditview.ad: Renamed to GXditview.ad.
- * xditview.c (main): Use class of GXditview rather than xditview.
-
- * Imakefile: New file.
- * Makefile: Deleted.
-
- * xtotroff.c (MapFont): Unlink output file before opening it.
-
- * Started separate ChangeLog.
diff --git a/contrib/groff/src/xditview/DESC b/contrib/groff/src/xditview/DESC
deleted file mode 100644
index 172170c..0000000
--- a/contrib/groff/src/xditview/DESC
+++ /dev/null
@@ -1,9 +0,0 @@
-styles R I B BI
-fonts 6 0 0 0 0 0 S
-sizes 8 10 12 14 18 24 0
-res 75
-X11
-hor 1
-vert 1
-unitwidth 10
-postpro gxditview
diff --git a/contrib/groff/src/xditview/Dvi.c b/contrib/groff/src/xditview/Dvi.c
deleted file mode 100644
index 08eb810..0000000
--- a/contrib/groff/src/xditview/Dvi.c
+++ /dev/null
@@ -1,573 +0,0 @@
-#ifndef SABER
-#ifndef lint
-static char Xrcsid[] = "$XConsortium: Dvi.c,v 1.9 89/12/10 16:12:25 rws Exp $";
-#endif /* lint */
-#endif /* SABER */
-
-/*
- * Dvi.c - Dvi display widget
- *
- */
-
-#define XtStrlen(s) ((s) ? strlen(s) : 0)
-
- /* The following are defined for the reader's convenience. Any
- Xt..Field macro in this code just refers to some field in
- one of the substructures of the WidgetRec. */
-
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <X11/Xmu/Converters.h>
-#include <stdio.h>
-#include <ctype.h>
-#include "DviP.h"
-
-/****************************************************************
- *
- * Full class record constant
- *
- ****************************************************************/
-
-/* Private Data */
-
-static char default_font_map[] = "\
-TR -adobe-times-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
-TI -adobe-times-medium-i-normal--*-100-*-*-*-*-iso8859-1\n\
-TB -adobe-times-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
-TBI -adobe-times-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\
-CR -adobe-courier-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
-CI -adobe-courier-medium-o-normal--*-100-*-*-*-*-iso8859-1\n\
-CB -adobe-courier-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
-CBI -adobe-courier-bold-o-normal--*-100-*-*-*-*-iso8859-1\n\
-HR -adobe-helvetica-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
-HI -adobe-helvetica-medium-o-normal--*-100-*-*-*-*-iso8859-1\n\
-HB -adobe-helvetica-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
-HBI -adobe-helvetica-bold-o-normal--*-100-*-*-*-*-iso8859-1\n\
-NR -adobe-new century schoolbook-medium-r-normal--*-100-*-*-*-*-iso8859-1\n\
-NI -adobe-new century schoolbook-medium-i-normal--*-100-*-*-*-*-iso8859-1\n\
-NB -adobe-new century schoolbook-bold-r-normal--*-100-*-*-*-*-iso8859-1\n\
-NBI -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\n\
-S -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\
-SS -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\n\
-";
-
-#define offset(field) XtOffset(DviWidget, field)
-
-#define MY_WIDTH(dw) ((int)(dw->dvi.paperwidth * dw->dvi.scale_factor + .5))
-#define MY_HEIGHT(dw) ((int)(dw->dvi.paperlength * dw->dvi.scale_factor + .5))
-
-static XtResource resources[] = {
- {XtNfontMap, XtCFontMap, XtRString, sizeof (char *),
- offset(dvi.font_map_string), XtRString, default_font_map},
- {XtNforeground, XtCForeground, XtRPixel, sizeof (unsigned long),
- offset(dvi.foreground), XtRString, "XtDefaultForeground"},
- {XtNbackground, XtCBackground, XtRPixel, sizeof (unsigned long),
- offset(dvi.background), XtRString, "XtDefaultBackground"},
- {XtNpageNumber, XtCPageNumber, XtRInt, sizeof (int),
- offset(dvi.requested_page), XtRString, "1"},
- {XtNlastPageNumber, XtCLastPageNumber, XtRInt, sizeof (int),
- offset (dvi.last_page), XtRString, "0"},
- {XtNfile, XtCFile, XtRFile, sizeof (FILE *),
- offset (dvi.file), XtRFile, (char *) 0},
- {XtNseek, XtCSeek, XtRBoolean, sizeof (Boolean),
- offset(dvi.seek), XtRString, "false"},
- {XtNfont, XtCFont, XtRFontStruct, sizeof (XFontStruct *),
- offset(dvi.default_font), XtRString, "xtdefaultfont"},
- {XtNbackingStore, XtCBackingStore, XtRBackingStore, sizeof (int),
- offset(dvi.backing_store), XtRString, "default"},
- {XtNnoPolyText, XtCNoPolyText, XtRBoolean, sizeof (Boolean),
- offset(dvi.noPolyText), XtRString, "false"},
- {XtNresolution, XtCResolution, XtRInt, sizeof(int),
- offset(dvi.default_resolution), XtRString, "75"},
-};
-
-#undef offset
-
-static void ClassInitialize ();
-static void ClassPartInitialize();
-static void Initialize(), Realize (), Destroy (), Redisplay ();
-static Boolean SetValues (), SetValuesHook ();
-static XtGeometryResult QueryGeometry ();
-static void ShowDvi ();
-static void CloseFile (), OpenFile ();
-static void FindPage ();
-
-static void SaveToFile ();
-
-DviClassRec dviClassRec = {
-{
- &widgetClassRec, /* superclass */
- "Dvi", /* class_name */
- sizeof(DviRec), /* size */
- ClassInitialize, /* class_initialize */
- ClassPartInitialize, /* class_part_initialize */
- FALSE, /* class_inited */
- Initialize, /* initialize */
- NULL, /* initialize_hook */
- Realize, /* realize */
- NULL, /* actions */
- 0, /* num_actions */
- resources, /* resources */
- XtNumber(resources), /* resource_count */
- NULLQUARK, /* xrm_class */
- FALSE, /* compress_motion */
- TRUE, /* compress_exposure */
- TRUE, /* compress_enterleave */
- FALSE, /* visible_interest */
- Destroy, /* destroy */
- NULL, /* resize */
- Redisplay, /* expose */
- SetValues, /* set_values */
- SetValuesHook, /* set_values_hook */
- NULL, /* set_values_almost */
- NULL, /* get_values_hook */
- NULL, /* accept_focus */
- XtVersion, /* version */
- NULL, /* callback_private */
- 0, /* tm_table */
- QueryGeometry, /* query_geometry */
- NULL, /* display_accelerator */
- NULL /* extension */
-},{
- SaveToFile, /* save */
-},
-};
-
-WidgetClass dviWidgetClass = (WidgetClass) &dviClassRec;
-
-static void ClassInitialize ()
-{
- XtAddConverter( XtRString, XtRBackingStore, XmuCvtStringToBackingStore,
- NULL, 0 );
-}
-
-/****************************************************************
- *
- * Private Procedures
- *
- ****************************************************************/
-
-/* ARGSUSED */
-static void Initialize(request, new)
- Widget request, new;
-{
- DviWidget dw = (DviWidget) new;
-
- dw->dvi.current_page = 0;
- dw->dvi.font_map = 0;
- dw->dvi.cache.index = 0;
- dw->dvi.text_x_width = 0;
- dw->dvi.text_device_width = 0;
- dw->dvi.word_flag = 0;
- dw->dvi.file = 0;
- dw->dvi.tmpFile = 0;
- dw->dvi.state = 0;
- dw->dvi.readingTmp = 0;
- dw->dvi.cache.char_index = 0;
- dw->dvi.cache.font_size = -1;
- dw->dvi.cache.font_number = -1;
- dw->dvi.cache.adjustable[0] = 0;
- dw->dvi.file_map = 0;
- dw->dvi.fonts = 0;
- dw->dvi.seek = False;
- dw->dvi.device_resolution = dw->dvi.default_resolution;
- dw->dvi.display_resolution = dw->dvi.default_resolution;
- dw->dvi.paperlength = dw->dvi.default_resolution*11;
- dw->dvi.paperwidth = (dw->dvi.default_resolution*8
- + dw->dvi.default_resolution/2);
- dw->dvi.scale_factor = 1.0;
- dw->dvi.sizescale = 1;
- dw->dvi.line_thickness = -1;
- dw->dvi.line_width = 1;
- dw->dvi.fill = DVI_FILL_MAX;
- dw->dvi.device_font = 0;
- dw->dvi.device_font_number = -1;
- dw->dvi.device = 0;
- dw->dvi.native = 0;
-}
-
-#include "gray1.bm"
-#include "gray2.bm"
-#include "gray3.bm"
-#include "gray4.bm"
-#include "gray5.bm"
-#include "gray6.bm"
-#include "gray7.bm"
-#include "gray8.bm"
-
-static void
-Realize (w, valueMask, attrs)
- Widget w;
- XtValueMask *valueMask;
- XSetWindowAttributes *attrs;
-{
- DviWidget dw = (DviWidget) w;
- XGCValues values;
-
- if (dw->dvi.backing_store != Always + WhenMapped + NotUseful) {
- attrs->backing_store = dw->dvi.backing_store;
- *valueMask |= CWBackingStore;
- }
- XtCreateWindow (w, (unsigned)InputOutput, (Visual *) CopyFromParent,
- *valueMask, attrs);
- values.foreground = dw->dvi.foreground;
- values.cap_style = CapRound;
- values.join_style = JoinRound;
- values.line_width = dw->dvi.line_width;
- dw->dvi.normal_GC = XCreateGC (XtDisplay (w), XtWindow (w),
- GCForeground|GCCapStyle|GCJoinStyle
- |GCLineWidth,
- &values);
- dw->dvi.gray[0] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray1_bits,
- gray1_width, gray1_height);
- dw->dvi.gray[1] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray2_bits,
- gray2_width, gray2_height);
- dw->dvi.gray[2] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray3_bits,
- gray3_width, gray3_height);
- dw->dvi.gray[3] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray4_bits,
- gray4_width, gray4_height);
- dw->dvi.gray[4] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray5_bits,
- gray5_width, gray5_height);
- dw->dvi.gray[5] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray6_bits,
- gray6_width, gray6_height);
- dw->dvi.gray[6] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray7_bits,
- gray7_width, gray7_height);
- dw->dvi.gray[7] = XCreateBitmapFromData(XtDisplay (w), XtWindow (w),
- gray8_bits,
- gray8_width, gray8_height);
- values.background = dw->dvi.background;
- values.stipple = dw->dvi.gray[5];
- dw->dvi.fill_GC = XCreateGC (XtDisplay (w), XtWindow (w),
- GCForeground|GCBackground|GCStipple,
- &values);
-
- dw->dvi.fill_type = 9;
-
- if (dw->dvi.file)
- OpenFile (dw);
- ParseFontMap (dw);
-}
-
-static void
-Destroy(w)
- Widget w;
-{
- DviWidget dw = (DviWidget) w;
-
- XFreeGC (XtDisplay (w), dw->dvi.normal_GC);
- XFreeGC (XtDisplay (w), dw->dvi.fill_GC);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[0]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[1]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[2]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[3]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[4]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[5]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[6]);
- XFreePixmap (XtDisplay (w), dw->dvi.gray[7]);
- DestroyFontMap (dw->dvi.font_map);
- DestroyFileMap (dw->dvi.file_map);
- device_destroy (dw->dvi.device);
-}
-
-/*
- * Repaint the widget window
- */
-
-/* ARGSUSED */
-static void
-Redisplay(w, event, region)
- Widget w;
- XEvent *event;
- Region region;
-{
- DviWidget dw = (DviWidget) w;
- XRectangle extents;
-
- XClipBox (region, &extents);
- dw->dvi.extents.x1 = extents.x;
- dw->dvi.extents.y1 = extents.y;
- dw->dvi.extents.x2 = extents.x + extents.width;
- dw->dvi.extents.y2 = extents.y + extents.height;
- ShowDvi (dw);
-}
-
-/*
- * Set specified arguments into widget
- */
-/* ARGSUSED */
-static Boolean
-SetValues (current, request, new)
- DviWidget current, request, new;
-{
- Boolean redisplay = FALSE;
- char *new_map;
- int cur, req;
-
- if (current->dvi.font_map_string != request->dvi.font_map_string) {
- new_map = XtMalloc (strlen (request->dvi.font_map_string) + 1);
- if (new_map) {
- redisplay = TRUE;
- strcpy (new_map, request->dvi.font_map_string);
- new->dvi.font_map_string = new_map;
- if (current->dvi.font_map_string)
- XtFree (current->dvi.font_map_string);
- current->dvi.font_map_string = 0;
- ParseFontMap (new);
- }
- }
-
- req = request->dvi.requested_page;
- cur = current->dvi.requested_page;
- if (cur != req) {
- if (!request->dvi.file)
- req = 0;
- else {
- if (req < 1)
- req = 1;
- if (current->dvi.last_page != 0 &&
- req > current->dvi.last_page)
- req = current->dvi.last_page;
- }
- if (cur != req)
- redisplay = TRUE;
- new->dvi.requested_page = req;
- if (current->dvi.last_page == 0 && req > cur)
- FindPage (new);
- }
-
- return redisplay;
-}
-
-/*
- * use the set_values_hook entry to check when
- * the file is set
- */
-
-static Boolean
-SetValuesHook (dw, args, num_argsp)
- DviWidget dw;
- ArgList args;
- Cardinal *num_argsp;
-{
- Cardinal i;
-
- for (i = 0; i < *num_argsp; i++) {
- if (!strcmp (args[i].name, XtNfile)) {
- CloseFile (dw);
- OpenFile (dw);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-static void CloseFile (dw)
- DviWidget dw;
-{
- if (dw->dvi.tmpFile)
- fclose (dw->dvi.tmpFile);
- ForgetPagePositions (dw);
-}
-
-static void OpenFile (dw)
- DviWidget dw;
-{
- dw->dvi.tmpFile = 0;
- if (!dw->dvi.seek)
- dw->dvi.tmpFile = tmpfile();
- dw->dvi.requested_page = 1;
- dw->dvi.last_page = 0;
-}
-
-static XtGeometryResult
-QueryGeometry (w, request, geometry_return)
- Widget w;
- XtWidgetGeometry *request, *geometry_return;
-{
- XtGeometryResult ret;
- DviWidget dw = (DviWidget) w;
-
- ret = XtGeometryYes;
- if (((request->request_mode & CWWidth)
- && request->width < MY_WIDTH(dw))
- || ((request->request_mode & CWHeight)
- && request->height < MY_HEIGHT(dw)))
- ret = XtGeometryAlmost;
- geometry_return->width = MY_WIDTH(dw);
- geometry_return->height = MY_HEIGHT(dw);
- geometry_return->request_mode = CWWidth|CWHeight;
- return ret;
-}
-
-SetDevice (dw, name)
- DviWidget dw;
- char *name;
-{
- XtWidgetGeometry request, reply;
- XtGeometryResult ret;
-
- ForgetFonts (dw);
- dw->dvi.device = device_load (name);
- if (!dw->dvi.device)
- return;
- dw->dvi.sizescale = dw->dvi.device->sizescale;
- dw->dvi.device_resolution = dw->dvi.device->res;
- dw->dvi.native = dw->dvi.device->X11;
- dw->dvi.paperlength = dw->dvi.device->paperlength;
- dw->dvi.paperwidth = dw->dvi.device->paperwidth;
- if (dw->dvi.native) {
- dw->dvi.display_resolution = dw->dvi.device_resolution;
- dw->dvi.scale_factor = 1.0;
- }
- else {
- dw->dvi.display_resolution = dw->dvi.default_resolution;
- dw->dvi.scale_factor = ((double)dw->dvi.display_resolution
- / dw->dvi.device_resolution);
- }
- request.request_mode = CWWidth|CWHeight;
- request.width = MY_WIDTH(dw);
- request.height = MY_HEIGHT(dw);
- ret = XtMakeGeometryRequest ((Widget)dw, &request, &reply);
- if (ret == XtGeometryAlmost
- && reply.height >= request.height
- && reply.width >= request.width) {
- request.width = reply.width;
- request.height = reply.height;
- XtMakeGeometryRequest ((Widget)dw, &request, &reply);
- }
-}
-
-static void
-ShowDvi (dw)
- DviWidget dw;
-{
- if (!dw->dvi.file) {
- static char Error[] = "No file selected";
-
- XSetFont (XtDisplay(dw), dw->dvi.normal_GC,
- dw->dvi.default_font->fid);
- XDrawString (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- 20, 20, Error, strlen (Error));
- return;
- }
-
- FindPage (dw);
-
- dw->dvi.display_enable = 1;
- ParseInput (dw);
- if (dw->dvi.last_page && dw->dvi.requested_page > dw->dvi.last_page)
- dw->dvi.requested_page = dw->dvi.last_page;
-}
-
-static void
-FindPage (dw)
- DviWidget dw;
-{
- int i;
- long file_position;
-
- if (dw->dvi.requested_page < 1)
- dw->dvi.requested_page = 1;
-
- if (dw->dvi.last_page != 0 && dw->dvi.requested_page > dw->dvi.last_page)
- dw->dvi.requested_page = dw->dvi.last_page;
-
- file_position = SearchPagePosition (dw, dw->dvi.requested_page);
- if (file_position != -1) {
- FileSeek(dw, file_position);
- dw->dvi.current_page = dw->dvi.requested_page;
- } else {
- for (i=dw->dvi.requested_page; i > 0; i--) {
- file_position = SearchPagePosition (dw, i);
- if (file_position != -1)
- break;
- }
- if (file_position == -1)
- file_position = 0;
- FileSeek (dw, file_position);
-
- dw->dvi.current_page = i;
-
- dw->dvi.display_enable = 0;
- while (dw->dvi.current_page != dw->dvi.requested_page) {
- dw->dvi.current_page = ParseInput (dw);
- /*
- * at EOF, seek back to the beginning of this page.
- */
- if (!dw->dvi.readingTmp && feof (dw->dvi.file)) {
- file_position = SearchPagePosition (dw,
- dw->dvi.current_page);
- if (file_position != -1)
- FileSeek (dw, file_position);
- dw->dvi.requested_page = dw->dvi.current_page;
- break;
- }
- }
- }
-}
-
-void DviSaveToFile(w, fp)
- Widget w;
- FILE *fp;
-{
- XtCheckSubclass(w, dviWidgetClass, NULL);
- (*((DviWidgetClass) XtClass(w))->command_class.save)(w, fp);
-}
-
-static
-void SaveToFile(w, fp)
- Widget w;
- FILE *fp;
-{
- DviWidget dw = (DviWidget)w;
- long pos;
- int c;
-
- if (dw->dvi.tmpFile) {
- pos = ftell(dw->dvi.tmpFile);
- if (dw->dvi.ungot) {
- pos--;
- dw->dvi.ungot = 0;
- /* The ungot character is in the tmpFile, so we don't
- want to read it from file. */
- (void)getc(dw->dvi.file);
- }
- }
- else
- pos = ftell(dw->dvi.file);
- FileSeek(dw, 0L);
- while (DviGetC(dw, &c) != EOF)
- if (putc(c, fp) == EOF) {
- /* XXX print error message */
- break;
- }
- FileSeek(dw, pos);
-}
-
-static
-void ClassPartInitialize(widget_class)
- WidgetClass widget_class;
-{
- DviWidgetClass wc = (DviWidgetClass)widget_class;
- DviWidgetClass super = (DviWidgetClass) wc->core_class.superclass;
- if (wc->command_class.save == InheritSaveToFile)
- wc->command_class.save = super->command_class.save;
-}
-
-/*
-Local Variables:
-c-indent-level: 8
-c-continued-statement-offset: 8
-c-brace-offset: -8
-c-argdecl-indent: 8
-c-label-offset: -8
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/xditview/Dvi.h b/contrib/groff/src/xditview/Dvi.h
deleted file mode 100644
index 5aab7d8..0000000
--- a/contrib/groff/src/xditview/Dvi.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-* $XConsortium: Dvi.h,v 1.4 89/07/21 14:22:06 jim Exp $
-*/
-
-#ifndef _XtDvi_h
-#define _XtDvi_h
-
-/***********************************************************************
- *
- * Dvi Widget
- *
- ***********************************************************************/
-
-/* Parameters:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background pixel White
- foreground Foreground Pixel Black
- fontMap FontMap char * ...
- pageNumber PageNumber int 1
-*/
-
-#define XtNfontMap "fontMap"
-#define XtNpageNumber "pageNumber"
-#define XtNlastPageNumber "lastPageNumber"
-#define XtNnoPolyText "noPolyText"
-#define XtNseek "seek"
-#define XtNresolution "resolution"
-
-#define XtCFontMap "FontMap"
-#define XtCPageNumber "PageNumber"
-#define XtCLastPageNumber "LastPageNumber"
-#define XtCNoPolyText "NoPolyText"
-#define XtCSeek "Seek"
-#define XtCResolution "Resolution"
-
-typedef struct _DviRec *DviWidget; /* completely defined in DviPrivate.h */
-typedef struct _DviClassRec *DviWidgetClass; /* completely defined in DviPrivate.h */
-
-extern WidgetClass dviWidgetClass;
-
-extern void DviSaveToFile();
-
-#endif /* _XtDvi_h */
-/* DON'T ADD STUFF AFTER THIS #endif */
diff --git a/contrib/groff/src/xditview/DviChar.c b/contrib/groff/src/xditview/DviChar.c
deleted file mode 100644
index ac4d7ce..0000000
--- a/contrib/groff/src/xditview/DviChar.c
+++ /dev/null
@@ -1,662 +0,0 @@
-/*
- * DviChar.c
- *
- * Map DVI (ditroff output) character names to
- * font indexes and back
- */
-
-#include "DviChar.h"
-
-extern char *xmalloc();
-
-#define allocHash() ((DviCharNameHash *) xmalloc (sizeof (DviCharNameHash)))
-
-struct map_list {
- struct map_list *next;
- DviCharNameMap *map;
-};
-
-static struct map_list *world;
-
-static int standard_maps_loaded = 0;
-static void load_standard_maps ();
-static int hash_name ();
-static dispose_hash(), compute_hash();
-
-DviCharNameMap *
-DviFindMap (encoding)
- char *encoding;
-{
- struct map_list *m;
-
- if (!standard_maps_loaded)
- load_standard_maps ();
- for (m = world; m; m=m->next)
- if (!strcmp (m->map->encoding, encoding))
- return m->map;
- return 0;
-}
-
-void
-DviRegisterMap (map)
- DviCharNameMap *map;
-{
- struct map_list *m;
-
- if (!standard_maps_loaded)
- load_standard_maps ();
- for (m = world; m; m = m->next)
- if (!strcmp (m->map->encoding, map->encoding))
- break;
- if (!m) {
- m = (struct map_list *) xmalloc (sizeof *m);
- m->next = world;
- world = m;
- }
- dispose_hash (map);
- m->map = map;
- compute_hash (map);
-}
-
-static
-dispose_hash (map)
- DviCharNameMap *map;
-{
- DviCharNameHash **buckets;
- DviCharNameHash *h, *next;
- int i;
-
- buckets = map->buckets;
- for (i = 0; i < DVI_HASH_SIZE; i++) {
- for (h = buckets[i]; h; h=next) {
- next = h->next;
- free (h);
- }
- }
-}
-
-static int
-hash_name (name)
- char *name;
-{
- int i = 0;
-
- while (*name)
- i = (i << 1) ^ *name++;
- if (i < 0)
- i = -i;
- return i;
-}
-
-static
-compute_hash (map)
- DviCharNameMap *map;
-{
- DviCharNameHash **buckets;
- int c, s, i;
- DviCharNameHash *h;
-
- buckets = map->buckets;
- for (i = 0; i < DVI_HASH_SIZE; i++)
- buckets[i] = 0;
- for (c = 0; c < DVI_MAP_SIZE; c++)
- for (s = 0; s < DVI_MAX_SYNONYMS; s++) {
- if (!map->dvi_names[c][s])
- break;
- i = hash_name (map->dvi_names[c][s]) % DVI_HASH_SIZE;
- h = allocHash ();
- h->next = buckets[i];
- buckets[i] = h;
- h->name = map->dvi_names[c][s];
- h->position = c;
- }
-
-}
-
-int
-DviCharIndex (map, name)
- DviCharNameMap *map;
- char *name;
-{
- int i;
- DviCharNameHash *h;
-
- i = hash_name (name) % DVI_HASH_SIZE;
- for (h = map->buckets[i]; h; h=h->next)
- if (!strcmp (h->name, name))
- return h->position;
- return -1;
-}
-
-static DviCharNameMap ISO8859_1_map = {
- "iso8859-1",
- 0,
-{
-{ 0, /* 0 */},
-{ 0, /* 1 */},
-{ 0, /* 2 */},
-{ 0, /* 3 */},
-{ 0, /* 4 */},
-{ 0, /* 5 */},
-{ 0, /* 6 */},
-{ 0, /* 7 */},
-{ 0, /* 8 */},
-{ 0, /* 9 */},
-{ 0, /* 10 */},
-{ 0, /* 11 */},
-{ 0, /* 12 */},
-{ 0, /* 13 */},
-{ 0, /* 14 */},
-{ 0, /* 15 */},
-{ 0, /* 16 */},
-{ 0, /* 17 */},
-{ 0, /* 18 */},
-{ 0, /* 19 */},
-{ 0, /* 20 */},
-{ 0, /* 21 */},
-{ 0, /* 22 */},
-{ 0, /* 23 */},
-{ 0, /* 24 */},
-{ 0, /* 25 */},
-{ 0, /* 26 */},
-{ 0, /* 27 */},
-{ 0, /* 28 */},
-{ 0, /* 29 */},
-{ 0, /* 30 */},
-{ 0, /* 31 */},
-{ 0, /* 32 */},
-{ "!", /* 33 */},
-{ "\"", "dq", /* 34 */},
-{ "#", "sh", /* 35 */},
-{ "$", "Do", /* 36 */},
-{ "%", /* 37 */},
-{ "&", /* 38 */},
-{ "'", "cq", /* 39 */},
-{ "(", /* 40 */},
-{ ")", /* 41 */},
-{ "*", /* 42 */},
-{ "+", /* 43 */},
-{ ",", /* 44 */},
-{ "\\-", /* 45 */},
-{ ".", /* 46 */},
-{ "/", "sl", /* 47 */},
-{ "0", /* 48 */},
-{ "1", /* 49 */},
-{ "2", /* 50 */},
-{ "3", /* 51 */},
-{ "4", /* 52 */},
-{ "5", /* 53 */},
-{ "6", /* 54 */},
-{ "7", /* 55 */},
-{ "8", /* 56 */},
-{ "9", /* 57 */},
-{ ":", /* 58 */},
-{ ";", /* 59 */},
-{ "<", /* 60 */},
-{ "=", /* 61 */},
-{ ">", /* 62 */},
-{ "?", /* 63 */},
-{ "@", "at", /* 64 */},
-{ "A", /* 65 */},
-{ "B", /* 66 */},
-{ "C", /* 67 */},
-{ "D", /* 68 */},
-{ "E", /* 69 */},
-{ "F", /* 70 */},
-{ "G", /* 71 */},
-{ "H", /* 72 */},
-{ "I", /* 73 */},
-{ "J", /* 74 */},
-{ "K", /* 75 */},
-{ "L", /* 76 */},
-{ "M", /* 77 */},
-{ "N", /* 78 */},
-{ "O", /* 79 */},
-{ "P", /* 80 */},
-{ "Q", /* 81 */},
-{ "R", /* 82 */},
-{ "S", /* 83 */},
-{ "T", /* 84 */},
-{ "U", /* 85 */},
-{ "V", /* 86 */},
-{ "W", /* 87 */},
-{ "X", /* 88 */},
-{ "Y", /* 89 */},
-{ "Z", /* 90 */},
-{ "[", "lB", /* 91 */},
-{ "\\", "rs", /* 92 */},
-{ "]", "rB", /* 93 */},
-{ "^", "a^", "ha", /* 94 */},
-{ "_", /* 95 */},
-{ "`", "oq", /* 96 */},
-{ "a", /* 97 */},
-{ "b", /* 98 */},
-{ "c", /* 99 */},
-{ "d", /* 100 */},
-{ "e", /* 101 */},
-{ "f", /* 102 */},
-{ "g", /* 103 */},
-{ "h", /* 104 */},
-{ "i", /* 105 */},
-{ "j", /* 106 */},
-{ "k", /* 107 */},
-{ "l", /* 108 */},
-{ "m", /* 109 */},
-{ "n", /* 110 */},
-{ "o", /* 111 */},
-{ "p", /* 112 */},
-{ "q", /* 113 */},
-{ "r", /* 114 */},
-{ "s", /* 115 */},
-{ "t", /* 116 */},
-{ "u", /* 117 */},
-{ "v", /* 118 */},
-{ "w", /* 119 */},
-{ "x", /* 120 */},
-{ "y", /* 121 */},
-{ "z", /* 122 */},
-{ "{", "lC", /* 123 */},
-{ "|", "ba", /* 124 */},
-{ "}", "rC", /* 125 */},
-{ "~", "a~", "ti", /* 126 */},
-{ 0, /* 127 */},
-{ 0, /* 128 */},
-{ 0, /* 129 */},
-{ 0, /* 130 */},
-{ 0, /* 131 */},
-{ 0, /* 132 */},
-{ 0, /* 133 */},
-{ 0, /* 134 */},
-{ 0, /* 135 */},
-{ 0, /* 136 */},
-{ 0, /* 137 */},
-{ 0, /* 138 */},
-{ 0, /* 139 */},
-{ 0, /* 140 */},
-{ 0, /* 141 */},
-{ 0, /* 142 */},
-{ 0, /* 143 */},
-{ 0, /* 144 */},
-{ 0, /* 145 */},
-{ 0, /* 146 */},
-{ 0, /* 147 */},
-{ 0, /* 148 */},
-{ 0, /* 149 */},
-{ 0, /* 150 */},
-{ 0, /* 151 */},
-{ 0, /* 152 */},
-{ 0, /* 153 */},
-{ 0, /* 154 */},
-{ 0, /* 155 */},
-{ 0, /* 156 */},
-{ 0, /* 157 */},
-{ 0, /* 158 */},
-{ 0, /* 159 */},
-{ 0, /* 160 */},
-{ "r!", /* 161 */},
-{ "ct", /* 162 */},
-{ "Po", /* 163 */},
-{ "Cs", /* 164 */},
-{ "Ye", /* 165 */},
-{ "bb", /* 166 */},
-{ "sc", /* 167 */},
-{ "ad", /* 168 */},
-{ "co", /* 169 */},
-{ "Of", /* 170 */},
-{ "Fo", /* 171 */},
-{ "tno", /* 172 */},
-{ "-", "hy", /* 173 */},
-{ "rg", /* 174 */},
-{ "a-", /* 175 */},
-{ "de", /* 176 */},
-{ "t+-", /* 177 */},
-{ "S2", /* 178 */},
-{ "S3", /* 179 */},
-{ "aa", /* 180 */},
-{ "mc", /* 181 */},
-{ "ps", /* 182 */},
-{ "pc", /* 183 */},
-{ "ac", /* 184 */},
-{ "S1", /* 185 */},
-{ "Om", /* 186 */},
-{ "Fc", /* 187 */},
-{ "14", /* 188 */},
-{ "12", /* 189 */},
-{ "34", /* 190 */},
-{ "r?", /* 191 */},
-{ "`A", /* 192 */},
-{ "'A", /* 193 */},
-{ "^A", /* 194 */},
-{ "~A", /* 195 */},
-{ ":A", /* 196 */},
-{ "oA", /* 197 */},
-{ "AE", /* 198 */},
-{ ",C", /* 199 */},
-{ "`E", /* 200 */},
-{ "'E", /* 201 */},
-{ "^E", /* 202 */},
-{ ":E", /* 203 */},
-{ "`I", /* 204 */},
-{ "'I", /* 205 */},
-{ "^I", /* 206 */},
-{ ":I", /* 207 */},
-{ "-D", /* 208 */},
-{ "~N", /* 209 */},
-{ "`O", /* 210 */},
-{ "'O", /* 211 */},
-{ "^O", /* 212 */},
-{ "~O", /* 213 */},
-{ ":O", /* 214 */},
-{ "tmu", /* 215 */},
-{ "/O", /* 216 */},
-{ "`U", /* 217 */},
-{ "'U", /* 218 */},
-{ "^U", /* 219 */},
-{ ":U", /* 220 */},
-{ "'Y", /* 221 */},
-{ "TP", /* 222 */},
-{ "ss", /* 223 */},
-{ "`a", /* 224 */},
-{ "'a", /* 225 */},
-{ "^a", /* 226 */},
-{ "~a", /* 227 */},
-{ ":a", /* 228 */},
-{ "oa", /* 229 */},
-{ "ae", /* 230 */},
-{ ",c", /* 231 */},
-{ "`e", /* 232 */},
-{ "'e", /* 233 */},
-{ "^e", /* 234 */},
-{ ":e", /* 235 */},
-{ "`i", /* 236 */},
-{ "'i", /* 237 */},
-{ "^i", /* 238 */},
-{ ":i", /* 239 */},
-{ "Sd", /* 240 */},
-{ "~n", /* 241 */},
-{ "`o", /* 242 */},
-{ "'o", /* 243 */},
-{ "^o", /* 244 */},
-{ "~o", /* 245 */},
-{ ":o", /* 246 */},
-{ "tdi", /* 247 */},
-{ "/o", /* 248 */},
-{ "`u", /* 249 */},
-{ "'u", /* 250 */},
-{ "^u", /* 251 */},
-{ ":u", /* 252 */},
-{ "'y", /* 253 */},
-{ "Tp", /* 254 */},
-{ ":y", /* 255 */},
-}};
-
-static DviCharNameMap Adobe_Symbol_map = {
- "adobe-fontspecific",
- 1,
-{
-{ 0, /* 0 */},
-{ 0, /* 1 */},
-{ 0, /* 2 */},
-{ 0, /* 3 */},
-{ 0, /* 4 */},
-{ 0, /* 5 */},
-{ 0, /* 6 */},
-{ 0, /* 7 */},
-{ 0, /* 8 */},
-{ 0, /* 9 */},
-{ 0, /* 10 */},
-{ 0, /* 11 */},
-{ 0, /* 12 */},
-{ 0, /* 13 */},
-{ 0, /* 14 */},
-{ 0, /* 15 */},
-{ 0, /* 16 */},
-{ 0, /* 17 */},
-{ 0, /* 18 */},
-{ 0, /* 19 */},
-{ 0, /* 20 */},
-{ 0, /* 21 */},
-{ 0, /* 22 */},
-{ 0, /* 23 */},
-{ 0, /* 24 */},
-{ 0, /* 25 */},
-{ 0, /* 26 */},
-{ 0, /* 27 */},
-{ 0, /* 28 */},
-{ 0, /* 29 */},
-{ 0, /* 30 */},
-{ 0, /* 31 */},
-{ 0, /* 32 */},
-{ "!", /* 33 */},
-{ "fa", /* 34 */},
-{ "#", "sh", /* 35 */},
-{ "te", /* 36 */},
-{ "%", /* 37 */},
-{ "&", /* 38 */},
-{ "st", /* 39 */},
-{ "(", /* 40 */},
-{ ")", /* 41 */},
-{ "**", /* 42 */},
-{ "+", "pl", /* 43 */},
-{ ",", /* 44 */},
-{ "\\-", "mi", /* 45 */},
-{ ".", /* 46 */},
-{ "/", "sl", /* 47 */},
-{ "0", /* 48 */},
-{ "1", /* 49 */},
-{ "2", /* 50 */},
-{ "3", /* 51 */},
-{ "4", /* 52 */},
-{ "5", /* 53 */},
-{ "6", /* 54 */},
-{ "7", /* 55 */},
-{ "8", /* 56 */},
-{ "9", /* 57 */},
-{ ":", /* 58 */},
-{ ";", /* 59 */},
-{ "<", /* 60 */},
-{ "=", "eq", /* 61 */},
-{ ">", /* 62 */},
-{ "?", /* 63 */},
-{ "=~", /* 64 */},
-{ "*A", /* 65 */},
-{ "*B", /* 66 */},
-{ "*X", /* 67 */},
-{ "*D", /* 68 */},
-{ "*E", /* 69 */},
-{ "*F", /* 70 */},
-{ "*G", /* 71 */},
-{ "*Y", /* 72 */},
-{ "*I", /* 73 */},
-{ "+h", /* 74 */},
-{ "*K", /* 75 */},
-{ "*L", /* 76 */},
-{ "*M", /* 77 */},
-{ "*N", /* 78 */},
-{ "*O", /* 79 */},
-{ "*P", /* 80 */},
-{ "*H", /* 81 */},
-{ "*R", /* 82 */},
-{ "*S", /* 83 */},
-{ "*T", /* 84 */},
-{ 0, /* 85 */},
-{ "ts", /* 86 */},
-{ "*W", /* 87 */},
-{ "*C", /* 88 */},
-{ "*Q", /* 89 */},
-{ "*Z", /* 90 */},
-{ "[", "lB", /* 91 */},
-{ "tf", "3d", /* 92 */},
-{ "]", "rB", /* 93 */},
-{ "pp", /* 94 */},
-{ "_", /* 95 */},
-{ "radicalex", /* 96 */},
-{ "*a", /* 97 */},
-{ "*b", /* 98 */},
-{ "*x", /* 99 */},
-{ "*d", /* 100 */},
-{ "*e", /* 101 */},
-{ "*f", /* 102 */},
-{ "*g", /* 103 */},
-{ "*y", /* 104 */},
-{ "*i", /* 105 */},
-{ "+f", /* 106 */},
-{ "*k", /* 107 */},
-{ "*l", /* 108 */},
-{ "*m", /* 109 */},
-{ "*n", /* 110 */},
-{ "*o", /* 111 */},
-{ "*p", /* 112 */},
-{ "*h", /* 113 */},
-{ "*r", /* 114 */},
-{ "*s", /* 115 */},
-{ "*t", /* 116 */},
-{ "*u", /* 117 */},
-{ "+p", /* 118 */},
-{ "*w", /* 119 */},
-{ "*c", /* 120 */},
-{ "*q", /* 121 */},
-{ "*z", /* 122 */},
-{ "lC", "{", /* 123 */},
-{ "ba", "|", /* 124 */},
-{ "rC", "}", /* 125 */},
-{ "ap", /* 126 */},
-{ 0, /* 127 */},
-{ 0, /* 128 */},
-{ 0, /* 129 */},
-{ 0, /* 130 */},
-{ 0, /* 131 */},
-{ 0, /* 132 */},
-{ 0, /* 133 */},
-{ 0, /* 134 */},
-{ 0, /* 135 */},
-{ 0, /* 136 */},
-{ 0, /* 137 */},
-{ 0, /* 138 */},
-{ 0, /* 139 */},
-{ 0, /* 140 */},
-{ 0, /* 141 */},
-{ 0, /* 142 */},
-{ 0, /* 143 */},
-{ 0, /* 144 */},
-{ 0, /* 145 */},
-{ 0, /* 146 */},
-{ 0, /* 147 */},
-{ 0, /* 148 */},
-{ 0, /* 149 */},
-{ 0, /* 150 */},
-{ 0, /* 151 */},
-{ 0, /* 152 */},
-{ 0, /* 153 */},
-{ 0, /* 154 */},
-{ 0, /* 155 */},
-{ 0, /* 156 */},
-{ 0, /* 157 */},
-{ 0, /* 158 */},
-{ 0, /* 159 */},
-{ 0, /* 160 */},
-{ "*U", /* 161 */},
-{ "fm", /* 162 */},
-{ "<=", /* 163 */},
-{ "f/", /* 164 */},
-{ "if", /* 165 */},
-{ "Fn", /* 166 */},
-{ "CL", /* 167 */},
-{ "DI", /* 168 */},
-{ "HE", /* 169 */},
-{ "SP", /* 170 */},
-{ "<>", /* 171 */},
-{ "<-", /* 172 */},
-{ "ua", "arrowverttp", /* 173 */},
-{ "->", /* 174 */},
-{ "da", "arrowvertbt", /* 175 */},
-{ "de", /* 176 */},
-{ "+-", /* 177 */},
-{ "sd", /* 178 */},
-{ ">=", /* 179 */},
-{ "mu", /* 180 */},
-{ "pt", /* 181 */},
-{ "pd", /* 182 */},
-{ "bu", /* 183 */},
-{ "di", /* 184 */},
-{ "!=", /* 185 */},
-{ "==", /* 186 */},
-{ "~=", "~~", /* 187 */},
-{ 0, /* 188 */},
-{ "arrowvertex", /* 189 */},
-{ "an", /* 190 */},
-{ "CR", /* 191 */},
-{ "Ah", /* 192 */},
-{ "Im", /* 193 */},
-{ "Re", /* 194 */},
-{ "wp", /* 195 */},
-{ "c*", /* 196 */},
-{ "c+", /* 197 */},
-{ "es", /* 198 */},
-{ "ca", /* 199 */},
-{ "cu", /* 200 */},
-{ "sp", /* 201 */},
-{ "ip", /* 202 */},
-{ "nb", /* 203 */},
-{ "sb", /* 204 */},
-{ "ib", /* 205 */},
-{ "mo", /* 206 */},
-{ "nm", /* 207 */},
-{ "/_", /* 208 */},
-{ "gr", /* 209 */},
-{ "rg", /* 210 */},
-{ "co", /* 211 */},
-{ "tm", /* 212 */},
-{ 0, /* 213 */},
-{ "sr", "sqrt", /* 214 */},
-{ "md", /* 215 */},
-{ "no", /* 216 */},
-{ "AN", /* 217 */},
-{ "OR", /* 218 */},
-{ "hA", /* 219 */},
-{ "lA", /* 220 */},
-{ "uA", /* 221 */},
-{ "rA", /* 222 */},
-{ "dA", /* 223 */},
-{ "lz", /* 224 */},
-{ "la", /* 225 */},
-{ 0, /* 226 */},
-{ 0, /* 227 */},
-{ 0, /* 228 */},
-{ 0, /* 229 */},
-{ "parenlefttp", /* 230 */},
-{ "parenleftex", /* 231 */},
-{ "parenleftbt", /* 232 */},
-{ "bracketlefttp", "lc", /* 233 */},
-{ "bracketleftex", /* 234 */},
-{ "bracketleftbt", "lf", /* 235 */},
-{ "bracelefttp", "lt", /* 236 */},
-{ "braceleftmid", "lk", /* 237 */},
-{ "braceleftbt", "lb", /* 238 */},
-{ "bracerightex", "braceleftex", "braceex", "bv", /* 239 */},
-{ 0, /* 240 */},
-{ "ra", /* 241 */},
-{ "is", "integral", /* 242 */},
-{ 0, /* 243 */},
-{ 0, /* 244 */},
-{ 0, /* 245 */},
-{ "parenrighttp", /* 246 */},
-{ "parenrightex", /* 247 */},
-{ "parenrightbt", /* 248 */},
-{ "bracketrighttp", "rc", /* 249 */},
-{ "bracketrightex", /* 250 */},
-{ "bracketrightbt", "rf", /* 251 */},
-{ "bracerighttp", "rt", /* 252 */},
-{ "bracerightmid", "rk", /* 253 */},
-{ "bracerightbt", "rb", /* 254 */},
-{ 0, /* 255 */},
-}};
-
-
-static void
-load_standard_maps ()
-{
- standard_maps_loaded = 1;
- DviRegisterMap (&ISO8859_1_map);
- DviRegisterMap (&Adobe_Symbol_map);
-}
diff --git a/contrib/groff/src/xditview/DviChar.h b/contrib/groff/src/xditview/DviChar.h
deleted file mode 100644
index b075240..0000000
--- a/contrib/groff/src/xditview/DviChar.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * DviChar.h
- *
- * descriptions for mapping dvi names to
- * font indexes and back. Dvi fonts are all
- * 256 elements (actually only 256-32 are usable).
- *
- * The encoding names are taken from X -
- * case insensitive, a dash separating the
- * CharSetRegistry from the CharSetEncoding
- */
-
-# define DVI_MAX_SYNONYMS 10
-# define DVI_MAP_SIZE 256
-# define DVI_HASH_SIZE 256
-
-typedef struct _dviCharNameHash {
- struct _dviCharNameHash *next;
- char *name;
- int position;
-} DviCharNameHash;
-
-typedef struct _dviCharNameMap {
- char *encoding;
- int special;
- char *dvi_names[DVI_MAP_SIZE][DVI_MAX_SYNONYMS];
- DviCharNameHash *buckets[DVI_HASH_SIZE];
-} DviCharNameMap;
-
-extern DviCharNameMap *DviFindMap ( /* char *encoding */ );
-extern void DviRegisterMap ( /* DviCharNameMap *map */ );
-#ifdef NOTDEF
-extern char *DviCharName ( /* DviCharNameMap *map, int index, int synonym */ );
-#else
-#define DviCharName(map,index,synonym) ((map)->dvi_names[index][synonym])
-#endif
-extern int DviCharIndex ( /* DviCharNameMap *map, char *name */ );
diff --git a/contrib/groff/src/xditview/DviP.h b/contrib/groff/src/xditview/DviP.h
deleted file mode 100644
index 851fdfe..0000000
--- a/contrib/groff/src/xditview/DviP.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * $XConsortium: DviP.h,v 1.5 89/07/22 19:44:08 keith Exp $
- */
-
-/*
- * DviP.h - Private definitions for Dvi widget
- */
-
-#ifndef _XtDviP_h
-#define _XtDviP_h
-
-#include "Dvi.h"
-#include "DviChar.h"
-#include "device.h"
-
-/***********************************************************************
- *
- * Dvi Widget Private Data
- *
- ***********************************************************************/
-
-/************************************
- *
- * Class structure
- *
- ***********************************/
-
-/* Type for save method. */
-
-typedef void (*DviSaveProc)();
-
-/*
- * New fields for the Dvi widget class record
- */
-
-
-typedef struct _DviClass {
- DviSaveProc save;
-} DviClassPart;
-
-/*
- * Full class record declaration
- */
-
-typedef struct _DviClassRec {
- CoreClassPart core_class;
- DviClassPart command_class;
-} DviClassRec;
-
-extern DviClassRec dviClassRec;
-
-/***************************************
- *
- * Instance (widget) structure
- *
- **************************************/
-
-/*
- * a list of fonts we've used for this widget
- */
-
-typedef struct _dviFontSizeList {
- struct _dviFontSizeList *next;
- int size;
- char *x_name;
- XFontStruct *font;
- int doesnt_exist;
-} DviFontSizeList;
-
-typedef struct _dviFontList {
- struct _dviFontList *next;
- char *dvi_name;
- char *x_name;
- int dvi_number;
- Boolean initialized;
- Boolean scalable;
- DviFontSizeList *sizes;
- DviCharNameMap *char_map;
- DeviceFont *device_font;
-} DviFontList;
-
-typedef struct _dviFontMap {
- struct _dviFontMap *next;
- char *dvi_name;
- char *x_name;
-} DviFontMap;
-
-#define DVI_TEXT_CACHE_SIZE 256
-#define DVI_CHAR_CACHE_SIZE 1024
-
-typedef struct _dviCharCache {
- XTextItem cache[DVI_TEXT_CACHE_SIZE];
- char adjustable[DVI_TEXT_CACHE_SIZE];
- char char_cache[DVI_CHAR_CACHE_SIZE];
- int index;
- int max;
- int char_index;
- int font_size;
- int font_number;
- XFontStruct *font;
- int start_x, start_y;
- int x, y;
-} DviCharCache;
-
-typedef struct _dviState {
- struct _dviState *next;
- int font_size;
- int font_number;
- int x;
- int y;
-} DviState;
-
-typedef struct _dviFileMap {
- struct _dviFileMap *next;
- long position;
- int page_number;
-} DviFileMap;
-
-/*
- * New fields for the Dvi widget record
- */
-
-typedef struct {
- /*
- * resource specifiable items
- */
- char *font_map_string;
- unsigned long foreground;
- unsigned long background;
- int requested_page;
- int last_page;
- XFontStruct *default_font;
- FILE *file;
- Boolean noPolyText;
- Boolean seek; /* file is "seekable" */
- int default_resolution;
- /*
- * private state
- */
- FILE *tmpFile; /* used when reading stdin */
- char readingTmp; /* reading now from tmp */
- char ungot; /* have ungetc'd a char */
- GC normal_GC;
- GC fill_GC;
- DviFileMap *file_map;
- DviFontList *fonts;
- DviFontMap *font_map;
- int current_page;
- int font_size;
- int font_number;
- DeviceFont *device_font;
- int device_font_number;
- Device *device;
- int native;
- int device_resolution;
- int display_resolution;
- int paperlength;
- int paperwidth;
- double scale_factor; /* display res / device res */
- int sizescale;
- int line_thickness;
- int line_width;
-
-#define DVI_FILL_MAX 1000
-
- int fill;
-#define DVI_FILL_WHITE 0
-#define DVI_FILL_GRAY 1
-#define DVI_FILL_BLACK 2
- int fill_type;
- Pixmap gray[8];
- int backing_store;
- XFontStruct *font;
- int display_enable;
- struct ExposedExtents {
- int x1, y1, x2, y2;
- } extents;
- DviState *state;
- DviCharCache cache;
- int text_x_width;
- int text_device_width;
- int word_flag;
-} DviPart;
-
-#define DviGetIn(dw,cp)\
- (dw->dvi.tmpFile ? (\
- DviGetAndPut (dw, cp) \
- ) :\
- (*cp = getc (dw->dvi.file))\
-)
-
-#define DviGetC(dw, cp)\
- (dw->dvi.readingTmp ? (\
- ((*cp = getc (dw->dvi.tmpFile)) == EOF) ? (\
- fseek (dw->dvi.tmpFile, 0l, 2),\
- (dw->dvi.readingTmp = 0),\
- DviGetIn (dw,cp)\
- ) : (\
- *cp\
- )\
- ) : (\
- DviGetIn(dw,cp)\
- )\
-)
-
-#define DviUngetC(dw, c)\
- (dw->dvi.readingTmp ? (\
- ungetc (c, dw->dvi.tmpFile)\
- ) : ( \
- (dw->dvi.ungot = 1),\
- ungetc (c, dw->dvi.file)))
-
-/*
- * Full widget declaration
- */
-
-typedef struct _DviRec {
- CorePart core;
- DviPart dvi;
-} DviRec;
-
-#define InheritSaveToFile ((DviSaveProc)_XtInherit)
-
-extern XFontStruct *QueryFont ();
-
-extern DviCharNameMap *QueryFontMap ();
-
-extern DeviceFont *QueryDeviceFont ();
-
-extern char *GetWord(), *GetLine();
-#endif /* _XtDviP_h */
-
-
diff --git a/contrib/groff/src/xditview/FontMap b/contrib/groff/src/xditview/FontMap
deleted file mode 100644
index 90911f0..0000000
--- a/contrib/groff/src/xditview/FontMap
+++ /dev/null
@@ -1,17 +0,0 @@
-TR -adobe-times-medium-r-normal--*-*-*-*-p-*-iso8859-1
-TI -adobe-times-medium-i-normal--*-*-*-*-p-*-iso8859-1
-TB -adobe-times-bold-r-normal--*-*-*-*-p-*-iso8859-1
-TBI -adobe-times-bold-i-normal--*-*-*-*-p-*-iso8859-1
-CR -adobe-courier-medium-r-normal--*-*-*-*-m-*-iso8859-1
-CI -adobe-courier-medium-o-normal--*-*-*-*-m-*-iso8859-1
-CB -adobe-courier-bold-r-normal--*-*-*-*-m-*-iso8859-1
-CBI -adobe-courier-bold-o-normal--*-*-*-*-m-*-iso8859-1
-HR -adobe-helvetica-medium-r-normal--*-*-*-*-p-*-iso8859-1
-HI -adobe-helvetica-medium-o-normal--*-*-*-*-p-*-iso8859-1
-HB -adobe-helvetica-bold-r-normal--*-*-*-*-p-*-iso8859-1
-HBI -adobe-helvetica-bold-o-normal--*-*-*-*-p-*-iso8859-1
-NR -adobe-new century schoolbook-medium-r-normal--*-*-*-*-p-*-iso8859-1
-NI -adobe-new century schoolbook-medium-i-normal--*-*-*-*-p-*-iso8859-1
-NB -adobe-new century schoolbook-bold-r-normal--*-*-*-*-p-*-iso8859-1
-NBI -adobe-new century schoolbook-bold-i-normal--*-*-*-*-p-*-iso8859-1
-S -adobe-symbol-medium-r-normal--*-*-*-*-p-*-adobe-fontspecific
diff --git a/contrib/groff/src/xditview/GXditview-ad.h b/contrib/groff/src/xditview/GXditview-ad.h
deleted file mode 100644
index d9be3da..0000000
--- a/contrib/groff/src/xditview/GXditview-ad.h
+++ /dev/null
@@ -1,52 +0,0 @@
-"GXditview.height: 840",
-"GXditview.paned.allowResize: true",
-"GXditview.paned.viewport.allowVert: true",
-"GXditview.paned.viewport.allowHoriz: true",
-"GXditview.paned.viewport.skipAdjust: false",
-"GXditview.paned.viewport.width: 600",
-"GXditview.paned.viewport.height: 800",
-"GXditview.paned.viewport.showGrip: false",
-"GXditview.paned.label.skipAdjust: true",
-"GXditview.paned.viewport.dvi.translations: #augment \
- <Btn1Down>: XawPositionSimpleMenu(menu) MenuPopup(menu)\\n\
- <Key>Next: NextPage()\\n\
- <Key>n: NextPage()\\n\
- <Key>space: NextPage()\\n\
- <Key>Return: NextPage()\\n\
- <Key>Prior: PreviousPage()\\n\
- <Key>p: PreviousPage()\\n\
- <Key>BackSpace: PreviousPage()\\n\
- <Key>Delete: PreviousPage()\\n\
- <Key>Select: SelectPage()\\n\
- <Key>Find: OpenFile()\\n\
- <Key>r: Rerasterize()\\n\
- <Key>q: Quit()",
-"GXditview.paned.label.translations: #augment \
- <Btn1Down>: XawPositionSimpleMenu(menu) MenuPopup(menu)\\n\
- <Key>Next: NextPage()\\n\
- <Key>n: NextPage()\\n\
- <Key>space: NextPage()\\n\
- <Key>Return: NextPage()\\n\
- <Key>Prior: PreviousPage()\\n\
- <Key>p: PreviousPage()\\n\
- <Key>BackSpace: PreviousPage()\\n\
- <Key>Delete: PreviousPage()\\n\
- <Key>Select: SelectPage()\\n\
- <Key>Find: OpenFile()\\n\
- <Key>r: Rerasterize()\\n\
- <Key>q: Quit()",
-"GXditview.menu.nextPage.label: Next Page",
-"GXditview.menu.previousPage.label: Previous Page",
-"GXditview.menu.selectPage.label: Select Page",
-"GXditview.menu.print.label: Print",
-"GXditview.menu.openFile.label: Open",
-"GXditview.menu.quit.label: Quit",
-"GXditview.promptShell.allowShellResize: true",
-"GXditview.promptShell.promptDialog.value.translations: #override \
- <Key>Return: Accept()",
-"GXditview.promptShell.promptDialog.accept.label: Accept",
-"GXditview.promptShell.promptDialog.accept.translations: #override \
- <BtnUp>: Accept() unset()",
-"GXditview.promptShell.promptDialog.cancel.label: Cancel",
-"GXditview.promptShell.promptDialog.cancel.translations: #override \
- <BtnUp>: Cancel() unset()",
diff --git a/contrib/groff/src/xditview/GXditview.ad b/contrib/groff/src/xditview/GXditview.ad
deleted file mode 100644
index e99ff5e..0000000
--- a/contrib/groff/src/xditview/GXditview.ad
+++ /dev/null
@@ -1,57 +0,0 @@
-GXditview.height: 840
-
-GXditview.paned.allowResize: true
-GXditview.paned.viewport.allowVert: true
-GXditview.paned.viewport.allowHoriz: true
-GXditview.paned.viewport.skipAdjust: false
-GXditview.paned.viewport.width: 600
-GXditview.paned.viewport.height: 800
-GXditview.paned.viewport.showGrip: false
-GXditview.paned.label.skipAdjust: true
-
-GXditview.paned.viewport.dvi.translations: #augment \
- <Btn1Down>: XawPositionSimpleMenu(menu) MenuPopup(menu)\n\
- <Key>Next: NextPage()\n\
- <Key>n: NextPage()\n\
- <Key>space: NextPage()\n\
- <Key>Return: NextPage()\n\
- <Key>Prior: PreviousPage()\n\
- <Key>p: PreviousPage()\n\
- <Key>BackSpace: PreviousPage()\n\
- <Key>Delete: PreviousPage()\n\
- <Key>Select: SelectPage()\n\
- <Key>Find: OpenFile()\n\
- <Key>r: Rerasterize()\n\
- <Key>q: Quit()
-GXditview.paned.label.translations: #augment \
- <Btn1Down>: XawPositionSimpleMenu(menu) MenuPopup(menu)\n\
- <Key>Next: NextPage()\n\
- <Key>n: NextPage()\n\
- <Key>space: NextPage()\n\
- <Key>Return: NextPage()\n\
- <Key>Prior: PreviousPage()\n\
- <Key>p: PreviousPage()\n\
- <Key>BackSpace: PreviousPage()\n\
- <Key>Delete: PreviousPage()\n\
- <Key>Select: SelectPage()\n\
- <Key>Find: OpenFile()\n\
- <Key>r: Rerasterize()\n\
- <Key>q: Quit()
-GXditview.menu.nextPage.label: Next Page
-GXditview.menu.previousPage.label: Previous Page
-GXditview.menu.selectPage.label: Select Page
-GXditview.menu.print.label: Print
-GXditview.menu.openFile.label: Open
-GXditview.menu.quit.label: Quit
-
-GXditview.promptShell.allowShellResize: true
-GXditview.promptShell.promptDialog.value.translations: #override \
- <Key>Return: Accept()
-
-GXditview.promptShell.promptDialog.accept.label: Accept
-GXditview.promptShell.promptDialog.accept.translations: #override \
- <BtnUp>: Accept() unset()
-
-GXditview.promptShell.promptDialog.cancel.label: Cancel
-GXditview.promptShell.promptDialog.cancel.translations: #override \
- <BtnUp>: Cancel() unset()
diff --git a/contrib/groff/src/xditview/INSTALL b/contrib/groff/src/xditview/INSTALL
deleted file mode 100644
index 144118f..0000000
--- a/contrib/groff/src/xditview/INSTALL
+++ /dev/null
@@ -1,20 +0,0 @@
-This version of gxditview uses imake.
-
-Here are the steps needed to install gxditview:
-
-- edit the Imakefile if necessary
-
-- xmkmf
-
-- make depend
-
-- make
-
-- make install
-
-- make install.man (installs the man page)
-
-The gxditview binary will be installed in the usual place for X
-binaries (eg /usr/bin/X11). Previous versions of gxditview were
-installed along with the other groff binaries (eg in /usr/local/bin);
-you will need to remove these by hand.
diff --git a/contrib/groff/src/xditview/Imakefile.in b/contrib/groff/src/xditview/Imakefile.in
deleted file mode 100644
index 1f64fe0..0000000
--- a/contrib/groff/src/xditview/Imakefile.in
+++ /dev/null
@@ -1,120 +0,0 @@
-srcdir=@srcdir@
-top_srcdir=@top_srcdir@
-VPATH=@srcdir@
-top_builddir=@groff_top_builddir@
-SEP=@PATH_SEPARATOR@
-
-version=`cat $(top_srcdir)/VERSION`
-# No additional number if revision is zero
-revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
-
-GROFF_PREFIX = @prefix@
-GROFF_DATADIR = $(GROFF_PREFIX)/share
-GROFF_DATAPROGRAMDIR = $(GROFF_DATADIR)/groff
-GROFF_DATASUBDIR = $(GROFF_DATAPROGRAMDIR)/$(version)$(revision)
-GROFF_FONTDIR = $(GROFF_DATASUBDIR)/font
-GROFF_LOCALFONTDIR = $(GROFF_DATAPROGRAMDIR)/site-font
-GROFF_FONTPATH = $(GROFF_FONTDIR)$(SEP)$(GROFF_LOCALFONTDIR)$(SEP)/usr/lib/font
-DPIS = 75 100
-
-PROGRAMS = \
- gxditview \
- xtotroff
-DEPLIBS = XawClientDepLibs
-#if defined(HPArchitecture) && (OSMajorVersion > 9)
-LOCAL_LIBRARIES = -L/usr/contrib/X11R6/lib XawClientLibs
-#else
-LOCAL_LIBRARIES = XawClientLibs
-#endif
-SRCS1 = \
- $(srcdir)/xditview.c \
- $(srcdir)/Dvi.c \
- $(srcdir)/draw.c \
- $(srcdir)/font.c \
- $(srcdir)/lex.c \
- $(srcdir)/page.c \
- $(srcdir)/parse.c \
- $(srcdir)/XFontName.c \
- $(srcdir)/DviChar.c \
- $(srcdir)/device.c
-OBJS1 = \
- xditview.o \
- Dvi.o \
- draw.o \
- font.o \
- lex.o \
- page.o \
- parse.o \
- XFontName.o \
- DviChar.o \
- device.o
-SRCS2 = \
- $(srcdir)/xtotroff.c \
- $(srcdir)/XFontName.c \
- $(srcdir)/DviChar.c
-OBJS2 = \
- xtotroff.o \
- XFontName.o \
- DviChar.o
-#if defined(HPArchitecture) && (OSMajorVersion > 9)
-INCLUDES = \
- -I/usr/contrib/X11R6/include \
- -I$(TOOLKITSRC) \
- -I$(TOP)
-#else
-INCLUDES = \
- -I$(TOOLKITSRC) \
- -I$(TOP)
-#endif
-MATHLIB = -lm
-DEFINES = \
- $(SIGNAL_DEFINES) \
- -DFONTPATH=\"$(GROFF_FONTPATH)\" # -DX_NOT_STDC_ENV
-
-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), /**/)
-
-InstallAppDefaultsLong($(srcdir)/GXditview,GXditview)
-
-fonts: xtotroff $(srcdir)/DESC $(srcdir)/FontMap
- @dir=`pwd`; \
- fonts=`sed -e 's/[ ].*//' $(srcdir)/FontMap`; \
- for dpi in $(DPIS); do \
- echo Making devX$$dpi; \
- test -d $(DEVDIR)/devX$$dpi || \
- $(MKINSTALLDIRS) $(DEVDIR)/devX$$dpi; \
- rm -f $(DEVDIR)/devX$$dpi/DESC; \
- sed -e "s/res 75/res $$dpi/" $(srcdir)/DESC \
- >$(DEVDIR)/devX$$dpi/DESC; \
- (cd $(DEVDIR)/devX$$dpi; \
- rm -f Makefile.sub; \
- echo DEV=X$$dpi >Makefile.sub; \
- echo DEVFILES=DESC $$fonts >>Makefile.sub; \
- $$dir/xtotroff -g -r $$dpi -s 10 $(srcdir)/FontMap); \
- echo Making devX$$dpi-12; \
- test -d $(DEVDIR)/devX$$dpi-12 || \
- $(MKINSTALLDIRS) $(DEVDIR)/devX$$dpi-12; \
- rm -f $(DEVDIR)/devX$$dpi-12/DESC; \
- sed -e "s/res 75/res $$dpi/" \
- -e 's/unitwidth 10/unitwidth 12/' $(srcdir)/DESC \
- >$(DEVDIR)/devX$$dpi-12/DESC; \
- (cd $(DEVDIR)/devX$$dpi-12; \
- rm -f Makefile.sub; \
- echo DEV=X$$dpi-12 >Makefile.sub; \
- echo DEVFILES=DESC $$fonts >>Makefile.sub; \
- $$dir/xtotroff -g -r $$dpi -s 12 $(srcdir)/FontMap); \
- done
-
-GXditview-ad.h: $(srcdir)/GXditview.ad
- /bin/sh $(srcdir)/ad2c $(srcdir)/GXditview.ad >GXditview-ad.h
-
-extraclean: clean
- -rm -f junk tmp grot old Makefile Imakefile $(srcdir)/gxditview._man
-
-FORCE:
diff --git a/contrib/groff/src/xditview/Menu.h b/contrib/groff/src/xditview/Menu.h
deleted file mode 100644
index c306b27..0000000
--- a/contrib/groff/src/xditview/Menu.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * $XConsortium: Menu.h,v 1.2 89/07/21 14:22:10 jim Exp $
- */
-
-#ifndef _XtMenu_h
-#define _XtMenu_h
-
-/***********************************************************************
- *
- * Menu Widget
- *
- ***********************************************************************/
-
-/* Parameters:
-
- Name Class RepType Default Value
- ---- ----- ------- -------------
- background Background pixel White
- border BorderColor pixel Black
- borderWidth BorderWidth int 1
- height Height int 120
- mappedWhenManaged MappedWhenManaged Boolean True
- reverseVideo ReverseVideo Boolean False
- width Width int 120
- x Position int 0
- y Position int 0
-
-*/
-
-#define XtNmenuEntries "menuEntries"
-#define XtNhorizontalPadding "horizontalPadding"
-#define XtNverticalPadding "verticalPadding"
-#define XtNselection "Selection"
-
-#define XtCMenuEntries "MenuEntries"
-#define XtCPadding "Padding"
-#define XtCSelection "Selection"
-
-typedef struct _MenuRec *MenuWidget; /* completely defined in MenuPrivate.h */
-typedef struct _MenuClassRec *MenuWidgetClass; /* completely defined in MenuPrivate.h */
-
-extern WidgetClass menuWidgetClass;
-
-extern Widget XawMenuCreate ();
-#endif /* _XtMenu_h */
-/* DON'T ADD STUFF AFTER THIS #endif */
diff --git a/contrib/groff/src/xditview/README b/contrib/groff/src/xditview/README
deleted file mode 100644
index b18f64a..0000000
--- a/contrib/groff/src/xditview/README
+++ /dev/null
@@ -1,14 +0,0 @@
-This is gxditview, a X11 previewer for groff based on MIT's xditview.
-This version can be used with the output of gtroff -Tps as well as
-with -TX75 and -TX100. You will need X11R5 or newer to install it (it
-might work on X11R4, but I haven't tested it.)
-
-See the file INSTALL in this directory for installation instructions.
-
-xditview is copyrighted by MIT under the usual X terms (see
-gxditview.man); my changes to it are in the public domain.
-
-Please report bugs to bug-groff@gnu.org.
-
-James Clark
-jjc@jclark.com
diff --git a/contrib/groff/src/xditview/TODO b/contrib/groff/src/xditview/TODO
deleted file mode 100644
index 161a7cf..0000000
--- a/contrib/groff/src/xditview/TODO
+++ /dev/null
@@ -1,17 +0,0 @@
-Replace Imakefile with a configure script.
-
-Better error handling.
-
-Resource and command-line option to specify font path.
-
-Resource to specify name of environment variable from which to get the
-font path.
-
-Have character substitutions (currently done in draw.c:FakeCharacter)
-specified in a resource (similar format to FontMap).
-
-The initial width of the dialog box should expand to accommodate the
-default value.
-
-Option in Print dialog to specify that only the current page should be
-printed.
diff --git a/contrib/groff/src/xditview/XFontName.c b/contrib/groff/src/xditview/XFontName.c
deleted file mode 100644
index 5ca9bb8..0000000
--- a/contrib/groff/src/xditview/XFontName.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * XFontName.c
- *
- * build/parse X Font name strings
- */
-
-#include <X11/Xlib.h>
-#include <X11/Xos.h>
-#include "XFontName.h"
-#include <ctype.h>
-
-static char *
-extractStringField (name, buffer, size, attrp, bit)
- char *name;
- char *buffer;
- int size;
- unsigned int *attrp;
- unsigned int bit;
-{
- char *buf = buffer;
-
- if (!*name)
- return 0;
- while (*name && *name != '-' && size > 0) {
- *buf++ = *name++;
- --size;
- }
- if (size <= 0)
- return 0;
- *buf = '\0';
- if (buffer[0] != '*' || buffer[1] != '\0')
- *attrp |= bit;
- if (*name == '-')
- return name+1;
- return name;
-}
-
-static char *
-extractUnsignedField (name, result, attrp, bit)
- char *name;
- unsigned int *result;
- unsigned int *attrp;
- unsigned int bit;
-{
- char buf[256];
- char *c;
- unsigned int i;
-
- name = extractStringField (name, buf, sizeof (buf), attrp, bit);
- if (!name)
- return 0;
- if (!(*attrp & bit))
- return name;
- i = 0;
- for (c = buf; *c; c++) {
- if (!isdigit (*c))
- return 0;
- i = i * 10 + (*c - '0');
- }
- *result = i;
- return name;
-}
-
-Bool
-XParseFontName (fontNameString, fontName, fontNameAttributes)
- XFontNameString fontNameString;
- XFontName *fontName;
- unsigned int *fontNameAttributes;
-{
- char *name = fontNameString;
- XFontName temp;
- unsigned int attributes = 0;
-
-#define GetString(field,bit)\
- if (!(name = extractStringField \
- (name, temp.field, sizeof (temp.field),\
- &attributes, bit))) \
- return False;
-
-#define GetUnsigned(field,bit)\
- if (!(name = extractUnsignedField \
- (name, &temp.field, \
- &attributes, bit))) \
- return False;
-
- GetString (Registry, FontNameRegistry)
- GetString (Foundry, FontNameFoundry)
- GetString (FamilyName, FontNameFamilyName)
- GetString (WeightName, FontNameWeightName)
- GetString (Slant, FontNameSlant)
- GetString (SetwidthName, FontNameSetwidthName)
- GetString (AddStyleName, FontNameAddStyleName)
- GetUnsigned (PixelSize, FontNamePixelSize)
- GetUnsigned (PointSize, FontNamePointSize)
- GetUnsigned (ResolutionX, FontNameResolutionX)
- GetUnsigned (ResolutionY, FontNameResolutionY)
- GetString (Spacing, FontNameSpacing)
- GetUnsigned (AverageWidth, FontNameAverageWidth)
- GetString (CharSetRegistry, FontNameCharSetRegistry)
- if (!*name) {
- temp.CharSetEncoding[0] = '\0';
- attributes |= FontNameCharSetEncoding;
- } else {
- GetString (CharSetEncoding, FontNameCharSetEncoding)
- }
- *fontName = temp;
- *fontNameAttributes = attributes;
- return True;
-}
-
-static char *
-utoa (u, s, size)
- unsigned int u;
- char *s;
- int size;
-{
- char *t;
-
- t = s + size;
- *--t = '\0';
- do
- *--t = (u % 10) + '0';
- while (u /= 10);
- return t;
-}
-
-Bool
-XFormatFontName (fontName, fontNameAttributes, fontNameString)
- XFontName *fontName;
- unsigned int fontNameAttributes;
- XFontNameString fontNameString;
-{
- XFontNameString tmp;
- char *name = tmp, *f;
- int left = sizeof (tmp) - 1;
- char number[32];
-
-#define PutString(field, bit)\
- f = (fontNameAttributes & bit) ? \
- fontName->field \
- : "*"; \
- if ((left -= strlen (f)) < 0) \
- return False; \
- while (*f) \
- if ((*name++ = *f++) == '-') \
- return False;
-#define PutHyphen()\
- if (--left < 0) \
- return False; \
- *name++ = '-';
-
-#define PutUnsigned(field, bit) \
- f = (fontNameAttributes & bit) ? \
- utoa (fontName->field, number, sizeof (number)) \
- : "*"; \
- if ((left -= strlen (f)) < 0) \
- return False; \
- while (*f) \
- *name++ = *f++;
-
- PutString (Registry, FontNameRegistry)
- PutHyphen ();
- PutString (Foundry, FontNameFoundry)
- PutHyphen ();
- PutString (FamilyName, FontNameFamilyName)
- PutHyphen ();
- PutString (WeightName, FontNameWeightName)
- PutHyphen ();
- PutString (Slant, FontNameSlant)
- PutHyphen ();
- PutString (SetwidthName, FontNameSetwidthName)
- PutHyphen ();
- PutString (AddStyleName, FontNameAddStyleName)
- PutHyphen ();
- PutUnsigned (PixelSize, FontNamePixelSize)
- PutHyphen ();
- PutUnsigned (PointSize, FontNamePointSize)
- PutHyphen ();
- PutUnsigned (ResolutionX, FontNameResolutionX)
- PutHyphen ();
- PutUnsigned (ResolutionY, FontNameResolutionY)
- PutHyphen ();
- PutString (Spacing, FontNameSpacing)
- PutHyphen ();
- PutUnsigned (AverageWidth, FontNameAverageWidth)
- PutHyphen ();
- PutString (CharSetRegistry, FontNameCharSetRegistry)
- PutHyphen ();
- PutString (CharSetEncoding, FontNameCharSetEncoding)
- *name = '\0';
- strcpy (fontNameString, tmp);
- return True;
-}
-
-Bool
-XCompareFontName (name1, name2, fontNameAttributes)
- XFontName *name1, *name2;
- unsigned int fontNameAttributes;
-{
-#define CompareString(field,bit) \
- if (fontNameAttributes & bit) \
- if (strcmp (name1->field, name2->field)) \
- return False;
-
-#define CompareUnsigned(field,bit) \
- if (fontNameAttributes & bit) \
- if (name1->field != name2->field) \
- return False;
-
- CompareString (Registry, FontNameRegistry)
- CompareString (Foundry, FontNameFoundry)
- CompareString (FamilyName, FontNameFamilyName)
- CompareString (WeightName, FontNameWeightName)
- CompareString (Slant, FontNameSlant)
- CompareString (SetwidthName, FontNameSetwidthName)
- CompareString (AddStyleName, FontNameAddStyleName)
- CompareUnsigned (PixelSize, FontNamePixelSize)
- CompareUnsigned (PointSize, FontNamePointSize)
- CompareUnsigned (ResolutionX, FontNameResolutionX)
- CompareUnsigned (ResolutionY, FontNameResolutionY)
- CompareString (Spacing, FontNameSpacing)
- CompareUnsigned (AverageWidth, FontNameAverageWidth)
- CompareString (CharSetRegistry, FontNameCharSetRegistry)
- CompareString (CharSetEncoding, FontNameCharSetEncoding)
- return True;
-}
-
-XCopyFontName (name1, name2, fontNameAttributes)
- XFontName *name1, *name2;
- unsigned int fontNameAttributes;
-{
-#define CopyString(field,bit) \
- if (fontNameAttributes & bit) \
- strcpy (name2->field, name1->field);
-
-#define CopyUnsigned(field,bit) \
- if (fontNameAttributes & bit) \
- name2->field = name1->field;
-
- CopyString (Registry, FontNameRegistry)
- CopyString (Foundry, FontNameFoundry)
- CopyString (FamilyName, FontNameFamilyName)
- CopyString (WeightName, FontNameWeightName)
- CopyString (Slant, FontNameSlant)
- CopyString (SetwidthName, FontNameSetwidthName)
- CopyString (AddStyleName, FontNameAddStyleName)
- CopyUnsigned (PixelSize, FontNamePixelSize)
- CopyUnsigned (PointSize, FontNamePointSize)
- CopyUnsigned (ResolutionX, FontNameResolutionX)
- CopyUnsigned (ResolutionY, FontNameResolutionY)
- CopyString (Spacing, FontNameSpacing)
- CopyUnsigned (AverageWidth, FontNameAverageWidth)
- CopyString (CharSetRegistry, FontNameCharSetRegistry)
- CopyString (CharSetEncoding, FontNameCharSetEncoding)
- return True;
-}
diff --git a/contrib/groff/src/xditview/XFontName.h b/contrib/groff/src/xditview/XFontName.h
deleted file mode 100644
index efe9eb1..0000000
--- a/contrib/groff/src/xditview/XFontName.h
+++ /dev/null
@@ -1,45 +0,0 @@
-typedef struct _xFontName {
- char Registry[256];
- char Foundry[256];
- char FamilyName[256];
- char WeightName[256];
- char Slant[3];
- char SetwidthName[256];
- char AddStyleName[256];
- unsigned int PixelSize;
- unsigned int PointSize;
- unsigned int ResolutionX;
- unsigned int ResolutionY;
- char Spacing[2];
- unsigned int AverageWidth;
- char CharSetRegistry[256];
- char CharSetEncoding[256];
-} XFontName;
-
-#define FontNameRegistry (1<<0)
-#define FontNameFoundry (1<<1)
-#define FontNameFamilyName (1<<2)
-#define FontNameWeightName (1<<3)
-#define FontNameSlant (1<<4)
-#define FontNameSetwidthName (1<<5)
-#define FontNameAddStyleName (1<<6)
-#define FontNamePixelSize (1<<7)
-#define FontNamePointSize (1<<8)
-#define FontNameResolutionX (1<<9)
-#define FontNameResolutionY (1<<10)
-#define FontNameSpacing (1<<11)
-#define FontNameAverageWidth (1<<12)
-#define FontNameCharSetRegistry (1<<13)
-#define FontNameCharSetEncoding (1<<14)
-
-#define SlantRoman "R"
-#define SlantItalic "I"
-#define SlantOblique "O"
-#define SlantReverseItalic "RI"
-#define SlantReverseOblique "RO"
-
-#define SpacingMonoSpaced "M"
-#define SpacingProportional "P"
-#define SpacingCharacterCell "C"
-
-typedef char XFontNameString[256];
diff --git a/contrib/groff/src/xditview/ad2c b/contrib/groff/src/xditview/ad2c
deleted file mode 100644
index 651ab8c..0000000
--- a/contrib/groff/src/xditview/ad2c
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/sh
-#
-# ad2c : Convert app-defaults file to C strings decls.
-#
-# George Ferguson, ferguson@cs.rcohester.edu, 12 Nov 1990.
-# 19 Mar 1991: gf
-# Made it self-contained.
-# 6 Jan 1992: mycroft@gnu.ai.mit.edu (Charles Hannum)
-# Removed use of "-n" and ":read" label since Gnu and
-# IBM sed print pattern space on "n" command. Still works
-# with Sun sed, of course.
-# 7 Jan 1992: matthew@sunpix.East.Sun.COM (Matthew Stier)
-# Escape quotes after escaping backslashes.
-# 8 Jul 1992: Version 1.6
-# Manpage fixes.
-# 19 Apr 1993: Version 1.7
-# Remove comments that were inside the sed command since
-# some versions of sed don't like them. The comments are
-# now given here in the header.
-#
-# Comments on the script by line:
-# /^!/d Remove comments
-# /^$/d Remove blanks
-# s/\\/\\\\/g Escape backslashes...
-# s/\\$//g ...except the line continuation ones
-# s/"/\\"/g Escape quotes
-# s/^/"/ Add leading quote
-# : test Establish label for later branch
-# /\\$/b slash Branch to label "slash" if line ends in backslash
-# s/$/",/ Otherwise add closing quote and comma...
-# p ...output the line...
-# d ...and clear the pattern space so it's not printed again
-# : slash Branch comes here if line ends in backslash
-# n Read next line, append to pattern space
-# [...] The "d" and "s" commands that follow just delete
-# comments and blank lines and escape control sequences
-# b test Branch up to see if the line ends in backslash or not
-#
-
-sed '
-/^!/d
-/^$/d
-s/\\/\\\\/g
-s/\\$//g
-s/"/\\"/g
-s/^/"/
-: test
-/\\$/b slash
-s/$/",/
-p
-d
-: slash
-n
-/^!/d
-/^$/d
-s/"/\\"/g
-s/\\\\/\\/g
-s/\\n/\\\\n/g
-s/\\t/\\\\t/g
-s/\\f/\\\\f/g
-s/\\b/\\\\b/g
-b test' "$@"
diff --git a/contrib/groff/src/xditview/device.c b/contrib/groff/src/xditview/device.c
deleted file mode 100644
index 264f681..0000000
--- a/contrib/groff/src/xditview/device.c
+++ /dev/null
@@ -1,600 +0,0 @@
-/* device.c */
-
-#include <stdio.h>
-#include <ctype.h>
-
-#include <X11/Xos.h>
-#include <X11/Intrinsic.h>
-
-#include "device.h"
-
-#ifndef FONTPATH
-#define FONTPATH "/usr/local/share/groff/font:/usr/local/lib/font:/usr/lib/font"
-#endif
-
-#ifndef isascii
-#define isascii(c) (1)
-#endif
-
-extern void exit();
-#ifndef strtok
-extern char *strtok();
-#endif
-#ifndef strchr
-extern char *strchr();
-#endif
-#ifndef getenv
-extern char *getenv();
-#endif
-
-/* Name of environment variable containing path to be used for
-searching for device and font description files. */
-#define FONTPATH_ENV_VAR "GROFF_FONT_PATH"
-
-#define WS " \t\r\n"
-
-#ifndef INT_MIN
-/* Minimum and maximum values a `signed int' can hold. */
-#define INT_MIN (-INT_MAX-1)
-#define INT_MAX 2147483647
-#endif
-
-#define CHAR_TABLE_SIZE 307
-
-struct _DeviceFont {
- char *name;
- int special;
- DeviceFont *next;
- Device *dev;
- struct charinfo *char_table[CHAR_TABLE_SIZE];
- struct charinfo *code_table[256];
-};
-
-struct charinfo {
- int width;
- int code;
- struct charinfo *next;
- struct charinfo *code_next;
- char name[1];
-};
-
-static char *current_filename = 0;
-static int current_lineno = -1;
-
-static void error();
-static FILE *open_device_file();
-static DeviceFont *load_font();
-static Device *new_device();
-static DeviceFont *new_font();
-static void delete_font();
-static unsigned hash_name();
-static struct charinfo *add_char();
-static int read_charset_section();
-static char *canonicalize_name();
-
-static
-Device *new_device(name)
- char *name;
-{
- Device *dev;
-
- dev = XtNew(Device);
- dev->sizescale = 1;
- dev->res = 0;
- dev->unitwidth = 0;
- dev->fonts = 0;
- dev->X11 = 0;
- dev->paperlength = 0;
- dev->paperwidth = 0;
- dev->name = XtNewString(name);
- return dev;
-}
-
-void device_destroy(dev)
- Device *dev;
-{
- DeviceFont *f;
-
- if (!dev)
- return;
- f = dev->fonts;
- while (f) {
- DeviceFont *tem = f;
- f = f->next;
- delete_font(tem);
- }
-
- XtFree(dev->name);
- XtFree((char *)dev);
-}
-
-Device *device_load(name)
- char *name;
-{
- Device *dev;
- FILE *fp;
- int err = 0;
- char buf[256];
-
- fp = open_device_file(name, "DESC", &current_filename);
- if (!fp)
- return 0;
- dev = new_device(name);
- current_lineno = 0;
- while (fgets(buf, sizeof(buf), fp)) {
- char *p;
- current_lineno++;
- p = strtok(buf, WS);
- if (p) {
- int *np = 0;
- char *q;
-
- if (strcmp(p, "charset") == 0)
- break;
- if (strcmp(p, "X11") == 0)
- dev->X11 = 1;
- else if (strcmp(p, "sizescale") == 0)
- np = &dev->sizescale;
- else if (strcmp(p, "res") == 0)
- np = &dev->res;
- else if (strcmp(p, "unitwidth") == 0)
- np = &dev->unitwidth;
- else if (strcmp(p, "paperwidth") == 0)
- np = &dev->paperwidth;
- else if (strcmp(p, "paperlength") == 0)
- np = &dev->paperlength;
-
- if (np) {
- q = strtok((char *)0, WS);
- if (!q || sscanf(q, "%d", np) != 1 || *np <= 0) {
- error("bad argument");
- err = 1;
- break;
- }
- }
- }
- }
- fclose(fp);
- current_lineno = -1;
- if (!err) {
- if (dev->res == 0) {
- error("missing res line");
- err = 1;
- }
- else if (dev->unitwidth == 0) {
- error("missing unitwidth line");
- err = 1;
- }
- }
- if (dev->paperlength == 0)
- dev->paperlength = dev->res*11;
- if (dev->paperwidth == 0)
- dev->paperwidth = dev->res*8 + dev->res/2;
- if (err) {
- device_destroy(dev);
- dev = 0;
- }
- XtFree(current_filename);
- current_filename = 0;
- return dev;
-}
-
-
-DeviceFont *device_find_font(dev, name)
- Device *dev;
- char *name;
-{
- DeviceFont *f;
-
- if (!dev)
- return 0;
- for (f = dev->fonts; f; f = f->next)
- if (strcmp(f->name, name) == 0)
- return f;
- return load_font(dev, name);
-}
-
-static
-DeviceFont *load_font(dev, name)
- Device *dev;
- char *name;
-{
- FILE *fp;
- char buf[256];
- DeviceFont *f;
- int special = 0;
-
- fp = open_device_file(dev->name, name, &current_filename);
- if (!fp)
- return 0;
- current_lineno = 0;
- for (;;) {
- char *p;
-
- if (!fgets(buf, sizeof(buf), fp)) {
- error("no charset line");
- return 0;
- }
- current_lineno++;
- p = strtok(buf, WS);
- /* charset must be on a line by itself */
- if (p && strcmp(p, "charset") == 0 && strtok((char *)0, WS) == 0)
- break;
- if (p && strcmp(p, "special") == 0)
- special = 1;
- }
- f = new_font(name, dev);
- f->special = special;
- if (!read_charset_section(f, fp)) {
- delete_font(f);
- f = 0;
- }
- else {
- f->next = dev->fonts;
- dev->fonts = f;
- }
- fclose(fp);
- XtFree(current_filename);
- current_filename = 0;
- return f;
-}
-
-static
-DeviceFont *new_font(name, dev)
- char *name;
- Device *dev;
-{
- int i;
- DeviceFont *f;
-
- f = XtNew(DeviceFont);
- f->name = XtNewString(name);
- f->dev = dev;
- f->special = 0;
- f->next = 0;
- for (i = 0; i < CHAR_TABLE_SIZE; i++)
- f->char_table[i] = 0;
- for (i = 0; i < 256; i++)
- f->code_table[i] = 0;
- return f;
-}
-
-static
-void delete_font(f)
- DeviceFont *f;
-{
- int i;
-
- if (!f)
- return;
- XtFree(f->name);
- for (i = 0; i < CHAR_TABLE_SIZE; i++) {
- struct charinfo *ptr = f->char_table[i];
- while (ptr) {
- struct charinfo *tem = ptr;
- ptr = ptr->next;
- XtFree((char *)tem);
- }
- }
- XtFree((char *)f);
-}
-
-
-static
-unsigned hash_name(name)
- char *name;
-{
- unsigned n = 0;
- /* XXX do better than this */
- while (*name)
- n = (n << 1) ^ *name++;
-
- return n;
-}
-
-static
-int scale_round(n, x, y)
- int n, x, y;
-{
- int y2;
-
- if (x == 0)
- return 0;
- y2 = y/2;
- if (n >= 0) {
- if (n <= (INT_MAX - y2)/x)
- return (n*x + y2)/y;
- }
- else if (-(unsigned)n <= (-(unsigned)INT_MIN - y2)/x)
- return (n*x - y2)/y;
- return (int)(n*(double)x/(double)y + .5);
-}
-
-static
-char *canonicalize_name(s)
- char *s;
-{
- static char ch[2];
- if (s[0] == 'c' && s[1] == 'h' && s[2] == 'a' && s[3] == 'r') {
- char *p;
- int n;
-
- for (p = s + 4; *p; p++)
- if (!isascii(*p) || !isdigit((unsigned char)*p))
- return s;
- n = atoi(s + 4);
- if (n >= 0 && n <= 0xff) {
- ch[0] = (char)n;
- return ch;
- }
- }
- return s;
-}
-
-/* Return 1 if the character is present in the font; widthp gets the
-width if non-null. */
-
-int device_char_width(f, ps, name, widthp)
- DeviceFont *f;
- int ps;
- char *name;
- int *widthp;
-{
- struct charinfo *p;
-
- name = canonicalize_name(name);
- for (p = f->char_table[hash_name(name) % CHAR_TABLE_SIZE];; p = p->next) {
- if (!p)
- return 0;
- if (strcmp(p->name, name) == 0)
- break;
- }
- *widthp = scale_round(p->width, ps, f->dev->unitwidth);
- return 1;
-}
-
-int device_code_width(f, ps, code, widthp)
- DeviceFont *f;
- int ps;
- int code;
- int *widthp;
-{
- struct charinfo *p;
-
- for (p = f->code_table[code & 0xff];; p = p->code_next) {
- if (!p)
- return 0;
- if (p->code == code)
- break;
- }
- *widthp = scale_round(p->width, ps, f->dev->unitwidth);
- return 1;
-}
-
-char *device_name_for_code(f, code)
- DeviceFont *f;
- int code;
-{
- static struct charinfo *state = 0;
- if (f)
- state = f->code_table[code & 0xff];
- for (; state; state = state->code_next)
- if (state->code == code && state->name[0] != '\0') {
- char *name = state->name;
- state = state->code_next;
- return name;
- }
- return 0;
-}
-
-int device_font_special(f)
- DeviceFont *f;
-{
- return f->special;
-}
-
-static
-struct charinfo *add_char(f, name, width, code)
- DeviceFont *f;
- char *name;
- int width, code;
-{
- struct charinfo **pp;
- struct charinfo *ci;
-
- name = canonicalize_name(name);
- if (strcmp(name, "---") == 0)
- name = "";
-
- ci = (struct charinfo *)XtMalloc(XtOffsetOf(struct charinfo, name[0])
- + strlen(name) + 1);
-
- strcpy(ci->name, name);
- ci->width = width;
- ci->code = code;
-
- if (*name != '\0') {
- pp = &f->char_table[hash_name(name) % CHAR_TABLE_SIZE];
- ci->next = *pp;
- *pp = ci;
- }
- pp = &f->code_table[code & 0xff];
- ci->code_next = *pp;
- *pp = ci;
- return ci;
-}
-
-/* Return non-zero for success. */
-
-static
-int read_charset_section(f, fp)
- DeviceFont *f;
- FILE *fp;
-{
- struct charinfo *last_charinfo = 0;
- char buf[256];
-
- while (fgets(buf, sizeof(buf), fp)) {
- char *name;
- int width;
- int code;
- char *p;
-
- current_lineno++;
- name = strtok(buf, WS);
- if (!name)
- continue; /* ignore blank lines */
- p = strtok((char *)0, WS);
- if (!p) /* end of charset section */
- break;
- if (strcmp(p, "\"") == 0) {
- if (!last_charinfo) {
- error("first line of charset section cannot use `\"'");
- return 0;
- }
- else
- (void)add_char(f, name,
- last_charinfo->width, last_charinfo->code);
- }
- else {
- char *q;
- if (sscanf(p, "%d", &width) != 1) {
- error("bad width field");
- return 0;
- }
- p = strtok((char *)0, WS);
- if (!p) {
- error("missing type field");
- return 0;
- }
- p = strtok((char *)0, WS);
- if (!p) {
- error("missing code field");
- return 0;
- }
- code = (int)strtol(p, &q, 0);
- if (q == p) {
- error("bad code field");
- return 0;
- }
- last_charinfo = add_char(f, name, width, code);
- }
- }
- return 1;
-}
-
-static
-FILE *find_file(file, result)
- char *file, **result;
-{
- char *buf = NULL;
- int bufsiz = 0;
- int flen;
- FILE *fp;
- char *path;
- char *env;
-
- env = getenv(FONTPATH_ENV_VAR);
- path = XtMalloc(((env && *env) ? strlen(env) + 1 : 0)
- + strlen(FONTPATH) + 1);
- *path = '\0';
- if (env && *env) {
- strcat(path, env);
- strcat(path, ":");
- }
- strcat(path, FONTPATH);
-
- *result = NULL;
-
- if (file == NULL)
- return NULL;
- if (*file == '\0')
- return NULL;
-
- if (*file == '/') {
- fp = fopen(file, "r");
- if (fp)
- *result = XtNewString(file);
- return fp;
- }
-
- flen = strlen(file);
-
- while (*path) {
- int len;
- char *start, *end;
-
- start = path;
- end = strchr(path, ':');
- if (end)
- path = end + 1;
- else
- path = end = strchr(path, '\0');
- if (start >= end)
- continue;
- if (end[-1] == '/')
- --end;
- len = (end - start) + 1 + flen + 1;
- if (len > bufsiz) {
- if (buf)
- buf = XtRealloc(buf, len);
- else
- buf = XtMalloc(len);
- bufsiz = len;
- }
- memcpy(buf, start, end - start);
- buf[end - start] = '/';
- strcpy(buf + (end - start) + 1, file);
- fp = fopen(buf, "r");
- if (fp) {
- *result = buf;
- return fp;
- }
- }
- XtFree(buf);
- return NULL;
-}
-
-static
-FILE *open_device_file(device_name, file_name, result)
- char *device_name, *file_name, **result;
-{
- char *buf, *path;
- FILE *fp;
-
- buf = XtMalloc(3 + strlen(device_name) + 1 + strlen(file_name) + 1);
- sprintf(buf, "dev%s/%s", device_name, file_name);
- fp = find_file(buf, result);
- if (!fp) {
- fprintf(stderr, "can't find device file `%s'\n", file_name);
- fflush(stderr);
- }
- XtFree(buf);
- return fp;
-}
-
-static
-void error(s)
- char *s;
-{
- if (current_filename) {
- fprintf(stderr, "%s:", current_filename);
- if (current_lineno > 0)
- fprintf(stderr, "%d:", current_lineno);
- putc(' ', stderr);
- }
- fputs(s, stderr);
- putc('\n', stderr);
- fflush(stderr);
-}
-
-/*
-Local Variables:
-c-indent-level: 4
-c-continued-statement-offset: 4
-c-brace-offset: -4
-c-argdecl-indent: 4
-c-label-offset: -4
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/xditview/device.h b/contrib/groff/src/xditview/device.h
deleted file mode 100644
index 2b9a64b..0000000
--- a/contrib/groff/src/xditview/device.h
+++ /dev/null
@@ -1,21 +0,0 @@
-
-typedef struct _DeviceFont DeviceFont;
-
-typedef struct _Device {
- char *name;
- int sizescale;
- int res;
- int unitwidth;
- int paperlength;
- int paperwidth;
- int X11;
- DeviceFont *fonts;
-} Device;
-
-extern void device_destroy();
-extern Device *device_load();
-extern DeviceFont *device_find_font();
-extern int device_char_width();
-extern char *device_name_for_code();
-extern int device_code_width();
-extern int device_font_special();
diff --git a/contrib/groff/src/xditview/draw.c b/contrib/groff/src/xditview/draw.c
deleted file mode 100644
index fe7c80f..0000000
--- a/contrib/groff/src/xditview/draw.c
+++ /dev/null
@@ -1,725 +0,0 @@
-/*
- * draw.c
- *
- * accept dvi function calls and translate to X
- */
-
-#include <X11/Xos.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <math.h>
-
-/* math.h on a Sequent doesn't define M_PI, apparently */
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#include "DviP.h"
-
-#define DeviceToX(dw, n) ((int)((n) * (dw)->dvi.scale_factor + .5))
-#define XPos(dw) (DeviceToX((dw), (dw)->dvi.state->x - \
- (dw)->dvi.text_device_width) + (dw)->dvi.text_x_width)
-#define YPos(dw) (DeviceToX((dw), (dw)->dvi.state->y))
-
-static int FakeCharacter();
-
-HorizontalMove(dw, delta)
- DviWidget dw;
- int delta;
-{
- dw->dvi.state->x += delta;
-}
-
-HorizontalGoto(dw, NewPosition)
- DviWidget dw;
- int NewPosition;
-{
- dw->dvi.state->x = NewPosition;
-}
-
-VerticalMove(dw, delta)
- DviWidget dw;
- int delta;
-{
- dw->dvi.state->y += delta;
-}
-
-VerticalGoto(dw, NewPosition)
- DviWidget dw;
- int NewPosition;
-{
- dw->dvi.state->y = NewPosition;
-}
-
-AdjustCacheDeltas (dw)
- DviWidget dw;
-{
- int extra;
- int nadj;
- int i;
-
- nadj = 0;
- extra = DeviceToX(dw, dw->dvi.text_device_width)
- - dw->dvi.text_x_width;
- if (extra == 0)
- return;
- for (i = 0; i <= dw->dvi.cache.index; i++)
- if (dw->dvi.cache.adjustable[i])
- ++nadj;
- dw->dvi.text_x_width += extra;
- if (nadj <= 1)
- return;
- for (i = 0; i <= dw->dvi.cache.index; i++)
- if (dw->dvi.cache.adjustable[i]) {
- int x;
- int *deltap;
-
- x = extra/nadj;
- deltap = &dw->dvi.cache.cache[i].delta;
-#define MIN_DELTA 2
- if (*deltap > 0 && x + *deltap < MIN_DELTA) {
- x = MIN_DELTA - *deltap;
- if (x <= 0)
- *deltap = MIN_DELTA;
- else
- x = 0;
- }
- else
- *deltap += x;
- extra -= x;
- --nadj;
- dw->dvi.cache.adjustable[i] = 0;
- }
-}
-
-FlushCharCache (dw)
- DviWidget dw;
-{
- if (dw->dvi.cache.char_index != 0) {
- AdjustCacheDeltas (dw);
- XDrawText (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- dw->dvi.cache.start_x, dw->dvi.cache.start_y,
- dw->dvi.cache.cache, dw->dvi.cache.index + 1);
- }
- dw->dvi.cache.index = 0;
- dw->dvi.cache.max = DVI_TEXT_CACHE_SIZE;
-#if 0
- if (dw->dvi.noPolyText)
- dw->dvi.cache.max = 1;
-#endif
- dw->dvi.cache.char_index = 0;
- dw->dvi.cache.cache[0].nchars = 0;
- dw->dvi.cache.start_x = dw->dvi.cache.x = XPos (dw);
- dw->dvi.cache.start_y = dw->dvi.cache.y = YPos (dw);
-}
-
-Newline (dw)
- DviWidget dw;
-{
- FlushCharCache (dw);
- dw->dvi.text_x_width = dw->dvi.text_device_width = 0;
- dw->dvi.word_flag = 0;
-}
-
-Word (dw)
- DviWidget dw;
-{
- dw->dvi.word_flag = 1;
-}
-
-#define charWidth(fi,c) (\
- (fi)->per_char ?\
- (fi)->per_char[(c) - (fi)->min_char_or_byte2].width\
- :\
- (fi)->max_bounds.width\
-)
-
-
-static
-int charExists (fi, c)
- XFontStruct *fi;
- int c;
-{
- XCharStruct *p;
-
- if (fi->per_char == NULL ||
- c < fi->min_char_or_byte2 || c > fi->max_char_or_byte2)
- return 0;
- p = fi->per_char + (c - fi->min_char_or_byte2);
- return (p->lbearing != 0 || p->rbearing != 0 || p->width != 0
- || p->ascent != 0 || p->descent != 0 || p->attributes != 0);
-}
-
-static
-DoCharacter (dw, c, wid)
- DviWidget dw;
- int c;
- int wid; /* width in device units */
-{
- register XFontStruct *font;
- register XTextItem *text;
- int x, y;
-
- x = XPos(dw);
- y = YPos(dw);
-
- /*
- * quick and dirty extents calculation:
- */
- if (!(y + 24 >= dw->dvi.extents.y1
- && y - 24 <= dw->dvi.extents.y2
-#if 0
- && x + 24 >= dw->dvi.extents.x1
- && x - 24 <= dw->dvi.extents.x2
-#endif
- ))
- return;
-
- if (y != dw->dvi.cache.y
- || dw->dvi.cache.char_index >= DVI_CHAR_CACHE_SIZE) {
- FlushCharCache (dw);
- x = dw->dvi.cache.x;
- dw->dvi.cache.adjustable[dw->dvi.cache.index] = 0;
- }
- /*
- * load a new font, if the current block is not empty,
- * step to the next.
- */
- if (dw->dvi.cache.font_size != dw->dvi.state->font_size ||
- dw->dvi.cache.font_number != dw->dvi.state->font_number)
- {
- FlushCharCache (dw);
- x = dw->dvi.cache.x;
- dw->dvi.cache.font_size = dw->dvi.state->font_size;
- dw->dvi.cache.font_number = dw->dvi.state->font_number;
- dw->dvi.cache.font = QueryFont (dw,
- dw->dvi.cache.font_number,
- dw->dvi.cache.font_size);
- if (dw->dvi.cache.cache[dw->dvi.cache.index].nchars != 0) {
- ++dw->dvi.cache.index;
- if (dw->dvi.cache.index >= dw->dvi.cache.max)
- FlushCharCache (dw);
- dw->dvi.cache.cache[dw->dvi.cache.index].nchars = 0;
- dw->dvi.cache.adjustable[dw->dvi.cache.index] = 0;
- }
- }
- if (x != dw->dvi.cache.x || dw->dvi.word_flag) {
- if (dw->dvi.cache.cache[dw->dvi.cache.index].nchars != 0) {
- ++dw->dvi.cache.index;
- if (dw->dvi.cache.index >= dw->dvi.cache.max)
- FlushCharCache (dw);
- dw->dvi.cache.cache[dw->dvi.cache.index].nchars = 0;
- dw->dvi.cache.adjustable[dw->dvi.cache.index] = 0;
- }
- dw->dvi.cache.adjustable[dw->dvi.cache.index]
- = dw->dvi.word_flag;
- dw->dvi.word_flag = 0;
- }
- font = dw->dvi.cache.font;
- text = &dw->dvi.cache.cache[dw->dvi.cache.index];
- if (text->nchars == 0) {
- text->chars = &dw->dvi.cache.char_cache[dw->dvi.cache.char_index];
- text->delta = x - dw->dvi.cache.x;
- if (font != dw->dvi.font) {
- text->font = font->fid;
- dw->dvi.font = font;
- } else
- text->font = None;
- dw->dvi.cache.x += text->delta;
- }
- if (charExists(font, c)) {
- int w;
- dw->dvi.cache.char_cache[dw->dvi.cache.char_index++] = (char) c;
- ++text->nchars;
- w = charWidth(font, c);
- dw->dvi.cache.x += w;
- if (wid != 0) {
- dw->dvi.text_x_width += w;
- dw->dvi.text_device_width += wid;
- }
- }
-}
-
-static
-int FindCharWidth (dw, buf, widp)
- DviWidget dw;
- char *buf;
- int *widp;
-{
- int maxpos;
- int i;
-
- if (dw->dvi.device_font == 0
- || dw->dvi.state->font_number != dw->dvi.device_font_number) {
- dw->dvi.device_font_number = dw->dvi.state->font_number;
- dw->dvi.device_font
- = QueryDeviceFont (dw, dw->dvi.device_font_number);
- }
- if (dw->dvi.device_font
- && device_char_width (dw->dvi.device_font,
- dw->dvi.state->font_size, buf, widp))
- return 1;
-
- maxpos = MaxFontPosition (dw);
- for (i = 1; i <= maxpos; i++) {
- DeviceFont *f = QueryDeviceFont (dw, i);
- if (f && device_font_special (f)
- && device_char_width (f, dw->dvi.state->font_size,
- buf, widp)) {
- dw->dvi.state->font_number = i;
- return 1;
- }
- }
- return 0;
-}
-
-/* Return the width of the character in device units. */
-
-int PutCharacter (dw, buf)
- DviWidget dw;
- char *buf;
-{
- int prevFont;
- int c = -1;
- int wid = 0;
- DviCharNameMap *map;
-
- if (!dw->dvi.display_enable)
- return 0; /* The width doesn't matter in this case. */
- prevFont = dw->dvi.state->font_number;
- if (!FindCharWidth (dw, buf, &wid))
- return 0;
- map = QueryFontMap (dw, dw->dvi.state->font_number);
- if (map)
- c = DviCharIndex (map, buf);
- if (c >= 0)
- DoCharacter (dw, c, wid);
- else
- (void) FakeCharacter (dw, buf, wid);
- dw->dvi.state->font_number = prevFont;
- return wid;
-}
-
-/* Return 1 if we can fake it; 0 otherwise. */
-
-static
-int FakeCharacter (dw, buf, wid)
- DviWidget dw;
- char *buf;
- int wid;
-{
- int oldx, oldw;
- char ch[2];
- char *chars = 0;
-
- if (buf[0] == '\0' || buf[1] == '\0' || buf[2] != '\0')
- return 0;
-#define pack2(c1, c2) (((c1) << 8) | (c2))
-
- switch (pack2(buf[0], buf[1])) {
- case pack2('f', 'i'):
- chars = "fi";
- break;
- case pack2('f', 'l'):
- chars = "fl";
- break;
- case pack2('f', 'f'):
- chars = "ff";
- break;
- case pack2('F', 'i'):
- chars = "ffi";
- break;
- case pack2('F', 'l'):
- chars = "ffl";
- break;
- }
- if (!chars)
- return 0;
- oldx = dw->dvi.state->x;
- oldw = dw->dvi.text_device_width;
- ch[1] = '\0';
- for (; *chars; chars++) {
- ch[0] = *chars;
- dw->dvi.state->x += PutCharacter (dw, ch);
- }
- dw->dvi.state->x = oldx;
- dw->dvi.text_device_width = oldw + wid;
- return 1;
-}
-
-PutNumberedCharacter (dw, c)
- DviWidget dw;
- int c;
-{
- char *name;
- int wid;
- DviCharNameMap *map;
-
- if (!dw->dvi.display_enable)
- return;
-
- if (dw->dvi.device_font == 0
- || dw->dvi.state->font_number != dw->dvi.device_font_number) {
- dw->dvi.device_font_number = dw->dvi.state->font_number;
- dw->dvi.device_font
- = QueryDeviceFont (dw, dw->dvi.device_font_number);
- }
-
- if (dw->dvi.device_font == 0
- || !device_code_width (dw->dvi.device_font,
- dw->dvi.state->font_size, c, &wid))
- return;
- if (dw->dvi.native) {
- DoCharacter (dw, c, wid);
- return;
- }
- map = QueryFontMap (dw, dw->dvi.state->font_number);
- if (!map)
- return;
- for (name = device_name_for_code (dw->dvi.device_font, c);
- name;
- name = device_name_for_code ((DeviceFont *)0, c)) {
- int code = DviCharIndex (map, name);
- if (code >= 0) {
- DoCharacter (dw, code, wid);
- break;
- }
- if (FakeCharacter (dw, name, wid))
- break;
- }
-}
-
-ClearPage (dw)
- DviWidget dw;
-{
- XClearWindow (XtDisplay (dw), XtWindow (dw));
-}
-
-static
-setGC (dw)
- DviWidget dw;
-{
- int desired_line_width;
-
- if (dw->dvi.line_thickness < 0)
- desired_line_width = (int)(((double)dw->dvi.device_resolution
- * dw->dvi.state->font_size)
- / (10.0*72.0*dw->dvi.sizescale));
- else
- desired_line_width = dw->dvi.line_thickness;
-
- if (desired_line_width != dw->dvi.line_width) {
- XGCValues values;
- values.line_width = DeviceToX(dw, desired_line_width);
- if (values.line_width == 0)
- values.line_width = 1;
- XChangeGC(XtDisplay (dw), dw->dvi.normal_GC,
- GCLineWidth, &values);
- dw->dvi.line_width = desired_line_width;
- }
-}
-
-static
-setFillGC (dw)
- DviWidget dw;
-{
- int fill_type;
- unsigned long mask = GCFillStyle | GCForeground;
-
- fill_type = (dw->dvi.fill * 10) / (DVI_FILL_MAX + 1);
- if (dw->dvi.fill_type != fill_type) {
- XGCValues values;
- if (fill_type <= 0) {
- values.foreground = dw->dvi.background;
- values.fill_style = FillSolid;
- } else if (fill_type >= 9) {
- values.foreground = dw->dvi.foreground;
- values.fill_style = FillSolid;
- } else {
- values.foreground = dw->dvi.foreground;
- values.fill_style = FillOpaqueStippled;
- values.stipple = dw->dvi.gray[fill_type - 1];
- mask |= GCStipple;
- }
- XChangeGC(XtDisplay (dw), dw->dvi.fill_GC, mask, &values);
- dw->dvi.fill_type = fill_type;
- }
-}
-
-DrawLine (dw, x, y)
- DviWidget dw;
- int x, y;
-{
- int xp, yp;
-
- AdjustCacheDeltas (dw);
- setGC (dw);
- xp = XPos (dw);
- yp = YPos (dw);
- XDrawLine (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- xp, yp,
- xp + DeviceToX (dw, x), yp + DeviceToX (dw, y));
-}
-
-DrawCircle (dw, diam)
- DviWidget dw;
- int diam;
-{
- int d;
-
- AdjustCacheDeltas (dw);
- setGC (dw);
- d = DeviceToX (dw, diam);
- XDrawArc (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- XPos (dw), YPos (dw) - d/2,
- d, d, 0, 64*360);
-}
-
-DrawFilledCircle (dw, diam)
- DviWidget dw;
- int diam;
-{
- int d;
-
- AdjustCacheDeltas (dw);
- setFillGC (dw);
- d = DeviceToX (dw, diam);
- XFillArc (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- XPos (dw), YPos (dw) - d/2,
- d, d, 0, 64*360);
- XDrawArc (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- XPos (dw), YPos (dw) - d/2,
- d, d, 0, 64*360);
-}
-
-DrawEllipse (dw, a, b)
- DviWidget dw;
- int a, b;
-{
- AdjustCacheDeltas (dw);
- setGC (dw);
- XDrawArc (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- XPos (dw), YPos (dw) - DeviceToX (dw, b/2),
- DeviceToX (dw, a), DeviceToX (dw, b), 0, 64*360);
-}
-
-DrawFilledEllipse (dw, a, b)
- DviWidget dw;
- int a, b;
-{
- AdjustCacheDeltas (dw);
- setFillGC (dw);
- XFillArc (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- XPos (dw), YPos (dw) - DeviceToX (dw, b/2),
- DeviceToX (dw, a), DeviceToX (dw, b), 0, 64*360);
- XDrawArc (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- XPos (dw), YPos (dw) - DeviceToX (dw, b/2),
- DeviceToX (dw, a), DeviceToX (dw, b), 0, 64*360);
-}
-
-DrawArc (dw, x0, y0, x1, y1)
- DviWidget dw;
- int x0, y0, x1, y1;
-{
- int angle1, angle2;
- int rad = (int)((sqrt ((double)x0*x0 + (double)y0*y0)
- + sqrt ((double)x1*x1 + (double)y1*y1) + 1.0)/2.0);
- if ((x0 == 0 && y0 == 0) || (x1 == 0 && y1 == 0))
- return;
- angle1 = (int)(atan2 ((double)y0, (double)-x0)*180.0*64.0/M_PI);
- angle2 = (int)(atan2 ((double)-y1, (double)x1)*180.0*64.0/M_PI);
-
- angle2 -= angle1;
- if (angle2 < 0)
- angle2 += 64*360;
-
- AdjustCacheDeltas (dw);
- setGC (dw);
-
- rad = DeviceToX (dw, rad);
- XDrawArc (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- XPos (dw) + DeviceToX (dw, x0) - rad,
- YPos (dw) + DeviceToX (dw, y0) - rad,
- rad*2, rad*2, angle1, angle2);
-}
-
-DrawPolygon (dw, v, n)
- DviWidget dw;
- int *v;
- int n;
-{
- XPoint *p;
- int i;
- int dx, dy;
-
- n /= 2;
-
- AdjustCacheDeltas (dw);
- setGC (dw);
- p = (XPoint *)XtMalloc((n + 2)*sizeof(XPoint));
- p[0].x = XPos (dw);
- p[0].y = YPos (dw);
- dx = 0;
- dy = 0;
- for (i = 0; i < n; i++) {
- dx += v[2*i];
- p[i + 1].x = DeviceToX (dw, dx) + p[0].x;
- dy += v[2*i + 1];
- p[i + 1].y = DeviceToX (dw, dy) + p[0].y;
- }
- p[n+1].x = p[0].x;
- p[n+1].y = p[0].y;
- XDrawLines (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- p, n + 2, CoordModeOrigin);
- XtFree((char *)p);
-}
-
-
-DrawFilledPolygon (dw, v, n)
- DviWidget dw;
- int *v;
- int n;
-{
- XPoint *p;
- int i;
- int dx, dy;
-
- n /= 2;
- if (n < 2)
- return;
-
- AdjustCacheDeltas (dw);
- setFillGC (dw);
- p = (XPoint *)XtMalloc((n + 2)*sizeof(XPoint));
- p[0].x = p[n+1].x = XPos (dw);
- p[0].y = p[n+1].y = YPos (dw);
- dx = 0;
- dy = 0;
- for (i = 0; i < n; i++) {
- dx += v[2*i];
- p[i + 1].x = DeviceToX (dw, dx) + p[0].x;
- dy += v[2*i + 1];
- p[i + 1].y = DeviceToX (dw, dy) + p[0].y;
- }
- XFillPolygon (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- p, n + 1, Complex, CoordModeOrigin);
- XDrawLines (XtDisplay (dw), XtWindow (dw), dw->dvi.fill_GC,
- p, n + 2, CoordModeOrigin);
- XtFree((char *)p);
-}
-
-#define POINTS_MAX 10000
-
-static
-appendPoint(points, pointi, x, y)
- XPoint *points;
- int *pointi;
- int x, y;
-{
- if (*pointi < POINTS_MAX) {
- points[*pointi].x = x;
- points[*pointi].y = y;
- *pointi += 1;
- }
-}
-
-#define FLATNESS 1
-
-static
-flattenCurve(points, pointi, x2, y2, x3, y3, x4, y4)
- XPoint *points;
- int *pointi;
- int x2, y2, x3, y3, x4, y4;
-{
- int x1, y1, dx, dy, n1, n2, n;
-
- x1 = points[*pointi - 1].x;
- y1 = points[*pointi - 1].y;
-
- dx = x4 - x1;
- dy = y4 - y1;
-
- n1 = dy*(x2 - x1) - dx*(y2 - y1);
- n2 = dy*(x3 - x1) - dx*(y3 - y1);
- if (n1 < 0)
- n1 = -n1;
- if (n2 < 0)
- n2 = -n2;
- n = n1 > n2 ? n1 : n2;
-
- if (n*n / (dy*dy + dx*dx) <= FLATNESS*FLATNESS)
- appendPoint (points, pointi, x4, y4);
- else {
- flattenCurve (points, pointi,
- (x1 + x2)/2, (y1 + y2)/2,
- (x1 + x2*2 + x3)/4, (y1 + y2*2 + y3)/4,
- (x1 +3*x2 + 3*x3 + x4)/8, (y1 +3*y2 + 3*y3 + y4)/8);
- flattenCurve (points, pointi,
- (x2 + x3*2 + x4)/4, (y2 + y3*2 + y4)/4,
- (x3 + x4)/2, (y3 + y4)/2,
- x4, y4);
- }
-}
-
-
-DrawSpline (dw, v, n)
- DviWidget dw;
- int *v;
- int n;
-{
- int sx, sy, tx, ty;
- int ox, oy, dx, dy;
- int i;
- int pointi;
- XPoint points[POINTS_MAX];
-
- if (n == 0 || (n & 1) != 0)
- return;
- AdjustCacheDeltas (dw);
- setGC (dw);
- ox = XPos (dw);
- oy = YPos (dw);
- dx = v[0];
- dy = v[1];
- sx = ox;
- sy = oy;
- tx = sx + DeviceToX (dw, dx);
- ty = sy + DeviceToX (dw, dy);
-
- pointi = 0;
-
- appendPoint (points, &pointi, sx, sy);
- appendPoint (points, &pointi, (sx + tx)/2, (sy + ty)/2);
-
- for (i = 2; i < n; i += 2) {
- int ux = ox + DeviceToX (dw, dx += v[i]);
- int uy = oy + DeviceToX (dw, dy += v[i+1]);
- flattenCurve (points, &pointi,
- (sx + tx*5)/6, (sy + ty*5)/6,
- (tx*5 + ux)/6, (ty*5 + uy)/6,
- (tx + ux)/2, (ty + uy)/2);
- sx = tx;
- sy = ty;
- tx = ux;
- ty = uy;
- }
-
- appendPoint (points, &pointi, tx, ty);
-
- XDrawLines (XtDisplay (dw), XtWindow (dw), dw->dvi.normal_GC,
- points, pointi, CoordModeOrigin);
-}
-
-
-/*
-Local Variables:
-c-indent-level: 8
-c-continued-statement-offset: 8
-c-brace-offset: -8
-c-argdecl-indent: 8
-c-label-offset: -8
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/xditview/font.c b/contrib/groff/src/xditview/font.c
deleted file mode 100644
index 2e028aa..0000000
--- a/contrib/groff/src/xditview/font.c
+++ /dev/null
@@ -1,471 +0,0 @@
-/*
- * font.c
- *
- * map dvi fonts to X fonts
- */
-
-#include <X11/Xos.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <stdio.h>
-#include <ctype.h>
-#include "DviP.h"
-#include "XFontName.h"
-
-static DisposeFontSizes();
-
-static char *
-savestr (s)
- char *s;
-{
- char *n;
-
- if (!s)
- return 0;
- n = XtMalloc (strlen (s) + 1);
- if (n)
- strcpy (n, s);
- return n;
-}
-
-static DviFontList *
-LookupFontByPosition (dw, position)
- DviWidget dw;
- int position;
-{
- DviFontList *f;
-
- for (f = dw->dvi.fonts; f; f = f->next)
- if (f->dvi_number == position)
- break;
- return f;
-}
-
-int
-MaxFontPosition (dw)
- DviWidget dw;
-{
- DviFontList *f;
- int n = -1;
-
- for (f = dw->dvi.fonts; f; f = f->next)
- if (f->dvi_number > n)
- n = f->dvi_number;
- return n;
-}
-
-static DviFontSizeList *
-LookupFontSizeBySize (dw, f, size)
- DviWidget dw;
- DviFontList *f;
- int size;
-{
- DviFontSizeList *fs, *best = 0, *smallest = 0;
- int bestsize = 0;
- XFontName fontName;
- unsigned int fontNameAttributes;
- char fontNameString[2048];
- int decipointsize;
-
- if (f->scalable) {
- decipointsize = (10*size)/dw->dvi.sizescale;
- for (best = f->sizes; best; best = best->next)
- if (best->size == decipointsize)
- return best;
- best = (DviFontSizeList *) XtMalloc(sizeof *best);
- best->next = f->sizes;
- best->size = decipointsize;
- f->sizes = best;
- XParseFontName (f->x_name, &fontName, &fontNameAttributes);
- fontNameAttributes &= ~(FontNamePixelSize|FontNameAverageWidth);
- fontNameAttributes |= FontNameResolutionX;
- fontNameAttributes |= FontNameResolutionY;
- fontNameAttributes |= FontNamePointSize;
- fontName.ResolutionX = dw->dvi.display_resolution;
- fontName.ResolutionY = dw->dvi.display_resolution;
- fontName.PointSize = decipointsize;
- XFormatFontName (&fontName, fontNameAttributes, fontNameString);
- best->x_name = savestr (fontNameString);
- best->doesnt_exist = 0;
- best->font = 0;
- return best;
- }
- for (fs = f->sizes; fs; fs=fs->next) {
- if (dw->dvi.sizescale*fs->size <= 10*size
- && fs->size >= bestsize) {
- best = fs;
- bestsize = fs->size;
- }
- if (smallest == 0 || fs->size < smallest->size)
- smallest = fs;
- }
- return best ? best : smallest;
-}
-
-static char *
-SkipFontNameElement (n)
- char *n;
-{
- while (*n != '-')
- if (!*++n)
- return 0;
- return n+1;
-}
-
-# define SizePosition 8
-# define EncodingPosition 13
-
-static
-ConvertFontNameToSize (n)
- char *n;
-{
- int i, size;
-
- for (i = 0; i < SizePosition; i++) {
- n = SkipFontNameElement (n);
- if (!n)
- return -1;
- }
- size = atoi (n);
- return size;
-}
-
-static char *
-ConvertFontNameToEncoding (n)
- char *n;
-{
- int i;
- for (i = 0; i < EncodingPosition; i++) {
- n = SkipFontNameElement (n);
- if (!n)
- return 0;
- }
- return n;
-}
-
-DviFontSizeList *
-InstallFontSizes (dw, x_name, scalablep)
- DviWidget dw;
- char *x_name;
- Boolean *scalablep;
-{
- char fontNameString[2048];
- char **fonts;
- int i, count;
- int size;
- DviFontSizeList *sizes, *new;
- XFontName fontName;
- unsigned int fontNameAttributes;
-
- *scalablep = FALSE;
- if (!XParseFontName (x_name, &fontName, &fontNameAttributes))
- return 0;
- fontNameAttributes &= ~(FontNamePixelSize|FontNamePointSize
- |FontNameAverageWidth);
- fontNameAttributes |= FontNameResolutionX;
- fontNameAttributes |= FontNameResolutionY;
- fontName.ResolutionX = dw->dvi.display_resolution;
- fontName.ResolutionY = dw->dvi.display_resolution;
- XFormatFontName (&fontName, fontNameAttributes, fontNameString);
- fonts = XListFonts (XtDisplay (dw), fontNameString, 10000000, &count);
- sizes = 0;
- for (i = 0; i < count; i++) {
- size = ConvertFontNameToSize (fonts[i]);
- if (size == 0) {
- DisposeFontSizes (dw, sizes);
- sizes = 0;
- *scalablep = TRUE;
- break;
- }
- if (size != -1) {
- new = (DviFontSizeList *) XtMalloc (sizeof *new);
- new->next = sizes;
- new->size = size;
- new->x_name = savestr (fonts[i]);
- new->doesnt_exist = 0;
- new->font = 0;
- sizes = new;
- }
- }
- XFreeFontNames (fonts);
- return sizes;
-}
-
-static
-DisposeFontSizes (dw, fs)
- DviWidget dw;
- DviFontSizeList *fs;
-{
- DviFontSizeList *next;
-
- for (; fs; fs=next) {
- next = fs->next;
- if (fs->x_name)
- XtFree (fs->x_name);
- if (fs->font && fs->font != dw->dvi.default_font) {
- XUnloadFont (XtDisplay (dw), fs->font->fid);
- XFree ((char *)fs->font);
- }
- XtFree ((char *) fs);
- }
-}
-
-static DviFontList *
-InstallFont (dw, position, dvi_name, x_name)
- DviWidget dw;
- int position;
- char *dvi_name;
- char *x_name;
-{
- DviFontList *f;
- char *encoding;
-
- if ((f = LookupFontByPosition (dw, position)) != NULL) {
- /*
- * ignore gratuitous font loading
- */
- if (!strcmp (f->dvi_name, dvi_name) &&
- !strcmp (f->x_name, x_name))
- return f;
-
- DisposeFontSizes (dw, f->sizes);
- if (f->dvi_name)
- XtFree (f->dvi_name);
- if (f->x_name)
- XtFree (f->x_name);
- f->device_font = 0;
- } else {
- f = (DviFontList *) XtMalloc (sizeof (*f));
- f->next = dw->dvi.fonts;
- dw->dvi.fonts = f;
- }
- f->initialized = FALSE;
- f->dvi_name = savestr (dvi_name);
- f->device_font = device_find_font (dw->dvi.device, dvi_name);
- f->x_name = savestr (x_name);
- f->dvi_number = position;
- f->sizes = 0;
- f->scalable = FALSE;
- if (f->x_name) {
- encoding = ConvertFontNameToEncoding (f->x_name);
- f->char_map = DviFindMap (encoding);
- } else
- f->char_map = 0;
- /*
- * force requery of fonts
- */
- dw->dvi.font = 0;
- dw->dvi.font_number = -1;
- dw->dvi.cache.font = 0;
- dw->dvi.cache.font_number = -1;
- dw->dvi.device_font = 0;
- dw->dvi.device_font_number = -1;
- return f;
-}
-
-ForgetFonts (dw)
- DviWidget dw;
-{
- DviFontList *f = dw->dvi.fonts;
-
- while (f) {
- DviFontList *tem = f;
-
- if (f->sizes)
- DisposeFontSizes (dw, f->sizes);
- if (f->dvi_name)
- XtFree (f->dvi_name);
- if (f->x_name)
- XtFree (f->x_name);
- f = f->next;
- XtFree ((char *) tem);
- }
-
- /*
- * force requery of fonts
- */
- dw->dvi.font = 0;
- dw->dvi.font_number = -1;
- dw->dvi.cache.font = 0;
- dw->dvi.cache.font_number = -1;
- dw->dvi.device_font = 0;
- dw->dvi.device_font_number = -1;
- dw->dvi.fonts = 0;
-}
-
-
-static char *
-MapDviNameToXName (dw, dvi_name)
- DviWidget dw;
- char *dvi_name;
-{
- DviFontMap *fm;
-
- for (fm = dw->dvi.font_map; fm; fm=fm->next)
- if (!strcmp (fm->dvi_name, dvi_name))
- return fm->x_name;
- return 0;
-}
-
-#if 0
-static char *
-MapXNameToDviName (dw, x_name)
- DviWidget dw;
- char *x_name;
-{
- DviFontMap *fm;
-
- for (fm = dw->dvi.font_map; fm; fm=fm->next)
- if (!strcmp (fm->x_name, x_name))
- return fm->dvi_name;
- return 0;
-}
-#endif
-
-ParseFontMap (dw)
- DviWidget dw;
-{
- char dvi_name[1024];
- char x_name[2048];
- char *m, *s;
- DviFontMap *fm, *new;
-
- if (dw->dvi.font_map)
- DestroyFontMap (dw->dvi.font_map);
- fm = 0;
- m = dw->dvi.font_map_string;
- while (*m) {
- s = m;
- while (*m && !isspace (*m))
- ++m;
- strncpy (dvi_name, s, m-s);
- dvi_name[m-s] = '\0';
- while (isspace (*m))
- ++m;
- s = m;
- while (*m && *m != '\n')
- ++m;
- strncpy (x_name, s, m-s);
- x_name[m-s] = '\0';
- new = (DviFontMap *) XtMalloc (sizeof *new);
- new->x_name = savestr (x_name);
- new->dvi_name = savestr (dvi_name);
- new->next = fm;
- fm = new;
- ++m;
- }
- dw->dvi.font_map = fm;
-}
-
-DestroyFontMap (font_map)
- DviFontMap *font_map;
-{
- DviFontMap *next;
-
- for (; font_map; font_map = next) {
- next = font_map->next;
- if (font_map->x_name)
- XtFree (font_map->x_name);
- if (font_map->dvi_name)
- XtFree (font_map->dvi_name);
- XtFree ((char *) font_map);
- }
-}
-
-/* ARGSUSED */
-
-SetFontPosition (dw, position, dvi_name, extra)
- DviWidget dw;
- int position;
- char *dvi_name;
- char *extra; /* unused */
-{
- char *x_name;
-
- x_name = MapDviNameToXName (dw, dvi_name);
- if (x_name)
- (void) InstallFont (dw, position, dvi_name, x_name);
-}
-
-XFontStruct *
-QueryFont (dw, position, size)
- DviWidget dw;
- int position;
- int size;
-{
- DviFontList *f;
- DviFontSizeList *fs;
-
- f = LookupFontByPosition (dw, position);
- if (!f)
- return dw->dvi.default_font;
- if (!f->initialized) {
- f->sizes = InstallFontSizes (dw, f->x_name, &f->scalable);
- f->initialized = TRUE;
- }
- fs = LookupFontSizeBySize (dw, f, size);
- if (!fs)
- return dw->dvi.default_font;
- if (!fs->font) {
- if (fs->x_name)
- fs->font = XLoadQueryFont (XtDisplay (dw), fs->x_name);
- if (!fs->font)
- fs->font = dw->dvi.default_font;
- }
- return fs->font;
-}
-
-DeviceFont *
-QueryDeviceFont (dw, position)
- DviWidget dw;
- int position;
-{
- DviFontList *f;
-
- f = LookupFontByPosition (dw, position);
- if (!f)
- return 0;
- return f->device_font;
-}
-
-DviCharNameMap *
-QueryFontMap (dw, position)
- DviWidget dw;
- int position;
-{
- DviFontList *f;
-
- f = LookupFontByPosition (dw, position);
- if (f)
- return f->char_map;
- else
- return 0;
-}
-
-#if 0
-LoadFont (dw, position, size)
- DviWidget dw;
- int position;
- int size;
-{
- XFontStruct *font;
-
- font = QueryFont (dw, position, size);
- dw->dvi.font_number = position;
- dw->dvi.font_size = size;
- dw->dvi.font = font;
- XSetFont (XtDisplay (dw), dw->dvi.normal_GC, font->fid);
- return;
-}
-#endif
-
-/*
-Local Variables:
-c-indent-level: 8
-c-continued-statement-offset: 8
-c-brace-offset: -8
-c-argdecl-indent: 8
-c-label-offset: -8
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/xditview/gray1.bm b/contrib/groff/src/xditview/gray1.bm
deleted file mode 100644
index c40a95e..0000000
--- a/contrib/groff/src/xditview/gray1.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray1_width 3
-#define gray1_height 3
-static char gray1_bits[] = {
- 0x00, 0x02, 0x00};
diff --git a/contrib/groff/src/xditview/gray2.bm b/contrib/groff/src/xditview/gray2.bm
deleted file mode 100644
index e87a1bc..0000000
--- a/contrib/groff/src/xditview/gray2.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray2_width 3
-#define gray2_height 3
-static char gray2_bits[] = {
- 0x00, 0x03, 0x00};
diff --git a/contrib/groff/src/xditview/gray3.bm b/contrib/groff/src/xditview/gray3.bm
deleted file mode 100644
index d9313eb..0000000
--- a/contrib/groff/src/xditview/gray3.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray3_width 3
-#define gray3_height 3
-static char gray3_bits[] = {
- 0x00, 0x03, 0x02};
diff --git a/contrib/groff/src/xditview/gray4.bm b/contrib/groff/src/xditview/gray4.bm
deleted file mode 100644
index dad142a..0000000
--- a/contrib/groff/src/xditview/gray4.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray4_width 3
-#define gray4_height 3
-static char gray4_bits[] = {
- 0x00, 0x07, 0x02};
diff --git a/contrib/groff/src/xditview/gray5.bm b/contrib/groff/src/xditview/gray5.bm
deleted file mode 100644
index 5f57618..0000000
--- a/contrib/groff/src/xditview/gray5.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray5_width 3
-#define gray5_height 3
-static char gray5_bits[] = {
- 0x04, 0x07, 0x02};
diff --git a/contrib/groff/src/xditview/gray6.bm b/contrib/groff/src/xditview/gray6.bm
deleted file mode 100644
index b76701d..0000000
--- a/contrib/groff/src/xditview/gray6.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray6_width 3
-#define gray6_height 3
-static char gray6_bits[] = {
- 0x04, 0x07, 0x03};
diff --git a/contrib/groff/src/xditview/gray7.bm b/contrib/groff/src/xditview/gray7.bm
deleted file mode 100644
index ef47bc6..0000000
--- a/contrib/groff/src/xditview/gray7.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray7_width 3
-#define gray7_height 3
-static char gray7_bits[] = {
- 0x05, 0x07, 0x03};
diff --git a/contrib/groff/src/xditview/gray8.bm b/contrib/groff/src/xditview/gray8.bm
deleted file mode 100644
index 12de7cb..0000000
--- a/contrib/groff/src/xditview/gray8.bm
+++ /dev/null
@@ -1,4 +0,0 @@
-#define gray8_width 3
-#define gray8_height 3
-static char gray8_bits[] = {
- 0x05, 0x07, 0x07};
diff --git a/contrib/groff/src/xditview/gxditview.man b/contrib/groff/src/xditview/gxditview.man
deleted file mode 100644
index 8680001..0000000
--- a/contrib/groff/src/xditview/gxditview.man
+++ /dev/null
@@ -1,249 +0,0 @@
-.TH GXDITVIEW 1 "Release 5" "X Version 11"
-.SH NAME
-gxditview \- display gtroff output files
-.SH SYNOPSIS
-.B gxditview
-.RI [\fB\- toolkitoption\ .\|.\|.\|]
-.RI [\fB\- option\ .\|.\|.\|]
-.RI [ filename ]
-.SH DESCRIPTION
-The
-.I gxditview
-program displays gtroff output on an X display.
-It uses the standard X11 fonts,
-so it does not require access to the server machine for font loading.
-.PP
-If
-.I filename
-is
-.BR \- ,
-.I gxditview
-will read the standard input.
-.PP
-The left mouse button brings up a menu with the following entries:
-.TP 8
-.B "Next Page"
-Display the next page.
-.TP
-.B "Previous Page"
-Display the previous page.
-.TP
-.B "Select Page"
-Select a particular numbered page specified by a dialog box.
-.TP
-.B Print
-Print the gtroff output using a command specified by a dialog box.
-The default command initially displayed is controlled by the
-.B printCommand
-application resource, and by the
-.B \-printCommand
-option.
-.TP
-.B Open
-Open for display a new file specified by a dialog box.
-The file should contain gtroff output.
-If the filename starts with
-.B |
-it will be taken to be a command to read from.
-.TP
-.B Quit
-Exit from
-.IR gxditview .
-.PP
-The
-.BR n ,
-Space
-and Return keys are bound to the
-.B Next\ Page
-action.
-The
-.BR p ,
-BackSpace
-and
-Delete
-keys are bound to the
-.B Previous\ Page
-action.
-The
-.B q
-key is bound to the
-.B Quit
-action.
-The
-.B r
-key is bound to the
-.B Rerasterize
-action which rereads the current file, and redisplays the current page;
-if the current file is a command, the command will be reexecuted.
-.PP
-The
-.B paperlength
-and
-.B paperwidth
-commands in the DESC file specify the length and width in machine units
-of the virtual page displayed by
-.IR gxditview .
-.SH OPTIONS
-.I Gxditview
-accepts all of the standard X Toolkit command line options along with the
-additional options listed below:
-.TP 8
-.B \-help
-This option indicates that a brief summary of the allowed options should be
-printed.
-.TP
-.B \-page
-This option specifies the page number of the document to be displayed.
-.TP
-.BI \-backingStore\ backing-store-type
-Redisplay of the gtroff output window can take upto a second or so,
-this option causes the server to save the window contents so that when
-it is scrolled around the viewport, the window is painted from
-contents saved in backing store.
-.I backing-store-type
-can be one of
-.BR Always ,
-.B WhenMapped
-or
-.BR NotUseful .
-.TP
-.BI \-printCommand\ command
-The default command displayed in the dialog box for the
-.B Print
-menu entry will be
-.IR command .
-.TP
-.BI \-resolution\ res
-The gtroff output file will be displayed at a resolution of
-.I res
-dpi,
-unless the DESC file contains the
-.B X11
-command, in which case the device resolution will be used.
-This corresponds the
-.I Dvi
-widget's
-.B resolution
-resource.
-The default is 75.
-.TP
-.BI \-filename\ string
-The default filename displayed in the dialog box for the
-.B Open
-menu entry will be
-.IR string .
-This can be either a filename, or a command starting with
-.BR | .
-.PP
-The following standard X Toolkit command line arguments are commonly used with
-.IR gxditview :
-.TP 8
-.BI \-bg\ color
-This option specifies the color to use for the background of the window.
-The default is \fIwhite\fP.
-.TP
-.BI \-bd\ color
-This option specifies the color to use for the border of the window.
-The default is \fIblack\fP.
-.TP
-.BI \-bw\ number
-This option specifies the width in pixels of the border surrounding the window.
-.TP
-.BI \-fg\ color
-This option specifies the color to use for displaying text. The default is
-\fIblack\fP.
-.TP
-.BI \-fn\ font
-This option specifies the font to be used for displaying widget text. The
-default is \fIfixed\fP.
-.TP
-.B \-rv
-This option indicates that reverse video should be simulated by swapping
-the foreground and background colors.
-.TP
-.BI \-geometry\ geometry
-This option specifies the preferred size and position of the window.
-.TP
-.BI \-display\ host : display
-This option specifies the X server to contact.
-.TP
-.BI \-xrm\ resourcestring
-This option specifies a resource string to be used.
-.SH X DEFAULTS
-This program uses the
-.I Dvi
-widget in the X Toolkit. It understands all of the core resource names and
-classes as well as:
-.PP
-.TP 8
-.BR width\ (class\ Width )
-Specifies the width of the window.
-.TP
-.BR height\ (class\ Height )
-Specifies the height of the window.
-.TP
-.BR foreground\ (class\ Foreground )
-Specifies the default foreground color.
-.TP
-.BR font\ (class\ Font )
-Specifies the font to be used for error messages.
-.TP
-.BR fontMap\ (class\ FontMap )
-Specifies the mapping from groff font names to X font names. This
-must be a string containing a sequence of lines. Each line contains
-two whitespace separated fields: first the groff font name, and
-secondly the X font name. The default is
-.nf
-"\e
-TR -adobe-times-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-TI -adobe-times-medium-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-TB -adobe-times-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-TBI -adobe-times-bold-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-CR -adobe-courier-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-CI -adobe-courier-medium-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-CB -adobe-courier-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-CBI -adobe-courier-bold-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-HR -adobe-helvetica-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-HI -adobe-helvetica-medium-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-HB -adobe-helvetica-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-HBI -adobe-helvetica-bold-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-NR -adobe-new century schoolbook-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-NI -adobe-new century schoolbook-medium-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-NB -adobe-new century schoolbook-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-NBI -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-S -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\en\e
-SS -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\en\e
-"
-.fi
-
-.SH "SEE ALSO"
-.IR X (1),
-.IR xrdb (1),
-.IR gtroff (1),
-.IR groff (1)
-.SH ORIGIN
-This program is derived from xditview;
-portions of xditview originated in xtroff which was derived
-from suntroff.
-.SH COPYRIGHT
-Copyright 1989, Massachusetts Institute of Technology.
-.br
-See
-.IR X (1)
-for a full statement of rights and permissions.
-.SH AUTHORS
-Keith Packard (MIT X Consortium)
-.br
-Richard L. Hyde (Purdue)
-.br
-David Slattengren (Berkeley)
-.br
-Malcolm Slaney (Schlumberger Palo Alto Research)
-.br
-Mark Moraes (University of Toronto)
-.br
-James Clark
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/groff/src/xditview/lex.c b/contrib/groff/src/xditview/lex.c
deleted file mode 100644
index 32831bd..0000000
--- a/contrib/groff/src/xditview/lex.c
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <X11/Xos.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <stdio.h>
-#include "DviP.h"
-
-DviGetAndPut(dw, cp)
- DviWidget dw;
- int *cp;
-{
- if (dw->dvi.ungot) {
- dw->dvi.ungot = 0;
- *cp = getc (dw->dvi.file);
- }
- else {
- *cp = getc (dw->dvi.file);
- if (*cp != EOF)
- putc (*cp, dw->dvi.tmpFile);
- }
- return *cp;
-}
-
-char *
-GetLine(dw, Buffer, Length)
- DviWidget dw;
- char *Buffer;
- int Length;
-{
- int i = 0, c;
-
- Length--; /* Save room for final '\0' */
-
- while (DviGetC (dw, &c) != EOF) {
- if (Buffer && i < Length)
- Buffer[i++] = c;
- if (c == '\n') {
- DviUngetC(dw, c);
- break;
- }
- }
- if (Buffer)
- Buffer[i] = '\0';
- return Buffer;
-}
-
-char *
-GetWord(dw, Buffer, Length)
- DviWidget dw;
- char *Buffer;
- int Length;
-{
- int i = 0, c;
-
- Length--; /* Save room for final '\0' */
- while (DviGetC(dw, &c) == ' ' || c == '\n')
- ;
- while (c != EOF) {
- if (Buffer && i < Length)
- Buffer[i++] = c;
- if (DviGetC(dw, &c) == ' ' || c == '\n') {
- DviUngetC(dw, c);
- break;
- }
- }
- if (Buffer)
- Buffer[i] = '\0';
- return Buffer;
-}
-
-GetNumber(dw)
- DviWidget dw;
-{
- int i = 0, c;
- int negative = 0;
-
- while (DviGetC(dw, &c) == ' ' || c == '\n')
- ;
- if (c == '-') {
- negative = 1;
- DviGetC(dw, &c);
- }
-
- for (; c >= '0' && c <= '9'; DviGetC(dw, &c)) {
- if (negative)
- i = i*10 - (c - '0');
- else
- i = i*10 + c - '0';
- }
- if (c != EOF)
- DviUngetC(dw, c);
- return i;
-}
-
-/*
-Local Variables:
-c-indent-level: 8
-c-continued-statement-offset: 8
-c-brace-offset: -8
-c-argdecl-indent: 8
-c-label-offset: -8
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/xditview/page.c b/contrib/groff/src/xditview/page.c
deleted file mode 100644
index 9284199..0000000
--- a/contrib/groff/src/xditview/page.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * page.c
- *
- * map page numbers to file position
- */
-
-#include <X11/Xos.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <stdio.h>
-#include <ctype.h>
-#include "DviP.h"
-
-#ifdef X_NOT_STDC_ENV
-extern long ftell();
-#endif
-
-static DviFileMap *
-MapPageNumberToFileMap (dw, number)
- DviWidget dw;
- int number;
-{
- DviFileMap *m;
-
- for (m = dw->dvi.file_map; m; m=m->next)
- if (m->page_number == number)
- break;
- return m;
-}
-
-DestroyFileMap (m)
- DviFileMap *m;
-{
- DviFileMap *next;
-
- for (; m; m = next) {
- next = m->next;
- XtFree ((char *) m);
- }
-}
-
-ForgetPagePositions (dw)
- DviWidget dw;
-{
- DestroyFileMap (dw->dvi.file_map);
- dw->dvi.file_map = 0;
-}
-
-RememberPagePosition(dw, number)
- DviWidget dw;
- int number;
-{
- DviFileMap *m;
-
- if (!(m = MapPageNumberToFileMap (dw, number))) {
- m = (DviFileMap *) XtMalloc (sizeof *m);
- m->page_number = number;
- m->next = dw->dvi.file_map;
- dw->dvi.file_map = m;
- }
- if (dw->dvi.tmpFile)
- m->position = ftell (dw->dvi.tmpFile);
- else
- m->position = ftell (dw->dvi.file);
-}
-
-SearchPagePosition (dw, number)
- DviWidget dw;
- int number;
-{
- DviFileMap *m;
-
- if (!(m = MapPageNumberToFileMap (dw, number)))
- return -1;
- return m->position;
-}
-
-FileSeek(dw, position)
-DviWidget dw;
-long position;
-{
- if (dw->dvi.tmpFile) {
- dw->dvi.readingTmp = 1;
- fseek (dw->dvi.tmpFile, position, 0);
- } else
- fseek (dw->dvi.file, position, 0);
-}
-
diff --git a/contrib/groff/src/xditview/parse.c b/contrib/groff/src/xditview/parse.c
deleted file mode 100644
index d763268..0000000
--- a/contrib/groff/src/xditview/parse.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * parse.c
- *
- * parse dvi input
- */
-
-#include <X11/Xos.h>
-#include <X11/IntrinsicP.h>
-#include <X11/StringDefs.h>
-#include <stdio.h>
-#include <ctype.h>
-#include "DviP.h"
-
-static int StopSeen = 0;
-static ParseDrawFunction(), ParseDeviceControl();
-static push_env(), pop_env();
-
-#define HorizontalMove(dw, delta) ((dw)->dvi.state->x += (delta))
-
-
-ParseInput(dw)
- register DviWidget dw;
-{
- int n, k;
- int c;
- char Buffer[BUFSIZ];
- int NextPage;
- int otherc;
-
- StopSeen = 0;
-
- /*
- * make sure some state exists
- */
-
- if (!dw->dvi.state)
- push_env (dw);
- for (;;) {
- switch (DviGetC(dw, &c)) {
- case '\n':
- break;
- case ' ': /* when input is text */
- case 0: /* occasional noise creeps in */
- break;
- case '{': /* push down current environment */
- push_env(dw);
- break;
- case '}':
- pop_env(dw);
- break;
- /*
- * two motion digits plus a character
- */
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- HorizontalMove(dw, (c-'0')*10 +
- DviGetC(dw,&otherc)-'0');
- /* fall through */
- case 'c': /* single ascii character */
- DviGetC(dw,&c);
- if (c == ' ')
- break;
- Buffer[0] = c;
- Buffer[1] = '\0';
- (void) PutCharacter (dw, Buffer);
- break;
- case 'C':
- GetWord (dw, Buffer, BUFSIZ);
- (void) PutCharacter (dw, Buffer);
- break;
- case 't':
- Buffer[1] = '\0';
- while (DviGetC (dw, &c) != EOF
- && c != ' ' && c != '\n') {
- Buffer[0] = c;
- HorizontalMove (dw, PutCharacter (dw, Buffer));
- }
- break;
- case 'u':
- n = GetNumber(dw);
- Buffer[1] = '\0';
- while (DviGetC (dw, &c) == ' ')
- ;
- while (c != EOF && c != ' ' && c != '\n') {
- Buffer[0] = c;
- HorizontalMove (dw,
- PutCharacter (dw, Buffer) + n);
- DviGetC (dw, &c);
- }
- break;
-
- case 'D': /* draw function */
- (void) GetLine(dw, Buffer, BUFSIZ);
- if (dw->dvi.display_enable)
- ParseDrawFunction(dw, Buffer);
- break;
- case 's': /* ignore fractional sizes */
- n = GetNumber(dw);
- dw->dvi.state->font_size = n;
- break;
- case 'f':
- n = GetNumber(dw);
- dw->dvi.state->font_number = n;
- break;
- case 'H': /* absolute horizontal motion */
- k = GetNumber(dw);
- HorizontalGoto(dw, k);
- break;
- case 'h': /* relative horizontal motion */
- k = GetNumber(dw);
- HorizontalMove(dw, k);
- break;
- case 'w': /* word space */
- Word (dw);
- break;
- case 'V':
- n = GetNumber(dw);
- VerticalGoto(dw, n);
- break;
- case 'v':
- n = GetNumber(dw);
- VerticalMove(dw, n);
- break;
- case 'P': /* new spread */
- break;
- case 'p': /* new page */
- (void) GetNumber(dw);
- NextPage = dw->dvi.current_page + 1;
- RememberPagePosition(dw, NextPage);
- FlushCharCache (dw);
- return(NextPage);
- case 'N':
- n = GetNumber(dw);
- PutNumberedCharacter (dw, n);
- break;
- case 'n': /* end of line */
- GetNumber(dw);
- GetNumber(dw);
- Newline (dw);
- HorizontalGoto(dw, 0);
- break;
- case 'F': /* input files */
- case '+': /* continuation of X device control */
- case 'm': /* color */
- case '#': /* comment */
- GetLine(dw, NULL, 0);
- break;
- case 'x': /* device control */
- ParseDeviceControl(dw);
- break;
- case EOF:
- dw->dvi.last_page = dw->dvi.current_page;
- FlushCharCache (dw);
- return dw->dvi.current_page;
- default:
- break;
- }
- }
-}
-
-static
-push_env(dw)
- DviWidget dw;
-{
- DviState *new;
-
- new = (DviState *) XtMalloc (sizeof (*new));
- if (dw->dvi.state)
- *new = *(dw->dvi.state);
- else {
- new->font_size = 10;
- new->font_number = 1;
- new->x = 0;
- new->y = 0;
- }
- new->next = dw->dvi.state;
- dw->dvi.state = new;
-}
-
-static
-pop_env(dw)
- DviWidget dw;
-{
- DviState *old;
-
- old = dw->dvi.state;
- dw->dvi.state = old->next;
- XtFree ((char *) old);
-}
-
-static
-InitTypesetter (dw)
- DviWidget dw;
-{
- while (dw->dvi.state)
- pop_env (dw);
- push_env (dw);
- FlushCharCache (dw);
-}
-
-#define DRAW_ARGS_MAX 128
-
-static
-ParseDrawFunction(dw, buf)
-DviWidget dw;
-char *buf;
-{
- int v[DRAW_ARGS_MAX];
- int i, no_move = 0;
- char *ptr;
-
- v[0] = v[1] = v[2] = v[3] = 0;
-
- if (buf[0] == '\0')
- return;
- ptr = buf+1;
-
- for (i = 0; i < DRAW_ARGS_MAX; i++) {
- if (sscanf(ptr, "%d", v + i) != 1)
- break;
- while (*ptr == ' ')
- ptr++;
- while (*ptr != '\0' && *ptr != ' ')
- ptr++;
- }
-
- switch (buf[0]) {
- case 'l': /* draw a line */
- DrawLine(dw, v[0], v[1]);
- break;
- case 'c': /* circle */
- DrawCircle(dw, v[0]);
- break;
- case 'C':
- DrawFilledCircle(dw, v[0]);
- break;
- case 'e': /* ellipse */
- DrawEllipse(dw, v[0], v[1]);
- break;
- case 'E':
- DrawFilledEllipse(dw, v[0], v[1]);
- break;
- case 'a': /* arc */
- DrawArc(dw, v[0], v[1], v[2], v[3]);
- break;
- case 'p':
- DrawPolygon(dw, v, i);
- break;
- case 'P':
- DrawFilledPolygon(dw, v, i);
- break;
- case '~': /* wiggly line */
- DrawSpline(dw, v, i);
- break;
- case 't':
- dw->dvi.line_thickness = v[0];
- break;
- case 'f':
- if (i > 0 && v[0] >= 0 && v[0] <= DVI_FILL_MAX)
- dw->dvi.fill = v[0];
- no_move = 1;
- break;
- default:
-#if 0
- warning("unknown drawing function %s", buf);
-#endif
- no_move = 1;
- break;
- }
-
- if (!no_move) {
- if (buf[0] == 'e') {
- if (i > 0)
- dw->dvi.state->x += v[0];
- }
- else {
- while (--i >= 0) {
- if (i & 1)
- dw->dvi.state->y += v[i];
- else
- dw->dvi.state->x += v[i];
- }
- }
- }
-}
-
-static
-ParseDeviceControl(dw) /* Parse the x commands */
- DviWidget dw;
-{
- char str[20], str1[50];
- int c, n;
- extern int LastPage, CurrentPage;
-
- GetWord (dw, str, 20);
- switch (str[0]) { /* crude for now */
- case 'T': /* output device */
- GetWord (dw, str, 20);
- SetDevice (dw, str);
- break;
- case 'i': /* initialize */
- InitTypesetter (dw);
- break;
- case 't': /* trailer */
- break;
- case 'p': /* pause -- can restart */
- break;
- case 's': /* stop */
- StopSeen = 1;
- return;
- case 'r': /* resolution when prepared */
- break;
- case 'f': /* font used */
- n = GetNumber (dw);
- GetWord (dw, str, 20);
- GetLine (dw, str1, 50);
- SetFontPosition (dw, n, str, str1);
- break;
- case 'H': /* char height */
- break;
- case 'S': /* slant */
- break;
- }
- while (DviGetC (dw, &c) != '\n') /* skip rest of input line */
- if (c == EOF)
- return;
- return;
-}
-
-
-/*
-Local Variables:
-c-indent-level: 8
-c-continued-statement-offset: 8
-c-brace-offset: -8
-c-argdecl-indent: 8
-c-label-offset: -8
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/xditview/xdit.bm b/contrib/groff/src/xditview/xdit.bm
deleted file mode 100644
index 67b9c8a..0000000
--- a/contrib/groff/src/xditview/xdit.bm
+++ /dev/null
@@ -1,14 +0,0 @@
-#define xdit_width 32
-#define xdit_height 32
-static char xdit_bits[] = {
- 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x03, 0x02, 0x00, 0x00, 0x02,
- 0x8a, 0xa2, 0xfc, 0x03, 0x52, 0x14, 0x03, 0x04, 0x02, 0x80, 0x00, 0x08,
- 0x52, 0x54, 0x00, 0x10, 0x8a, 0x22, 0x8f, 0x23, 0x02, 0x20, 0x06, 0x21,
- 0x8a, 0x12, 0x8c, 0x40, 0x52, 0x14, 0x8c, 0x40, 0x02, 0x10, 0x58, 0x40,
- 0x52, 0x14, 0x30, 0x40, 0x8a, 0x12, 0x30, 0x40, 0x02, 0x10, 0x70, 0x40,
- 0x8a, 0x12, 0xc8, 0x40, 0x52, 0x24, 0xc4, 0xe0, 0x02, 0x20, 0x84, 0xe1,
- 0x52, 0x54, 0xce, 0xf3, 0x8a, 0xa2, 0x00, 0xf8, 0x02, 0x00, 0x03, 0xfc,
- 0x8a, 0x22, 0xfc, 0xf3, 0x52, 0x14, 0x00, 0xc2, 0x02, 0x00, 0x00, 0x02,
- 0x52, 0x14, 0x45, 0x02, 0x8a, 0xa2, 0x28, 0x02, 0x02, 0x00, 0x00, 0x02,
- 0x02, 0x00, 0x00, 0x02, 0xfe, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/contrib/groff/src/xditview/xdit_mask.bm b/contrib/groff/src/xditview/xdit_mask.bm
deleted file mode 100644
index f34a4f8..0000000
--- a/contrib/groff/src/xditview/xdit_mask.bm
+++ /dev/null
@@ -1,14 +0,0 @@
-#define xdit_mask_width 32
-#define xdit_mask_height 32
-static char xdit_mask_bits[] = {
- 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07,
- 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x1f,
- 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xc7,
- 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07,
- 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x07,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
diff --git a/contrib/groff/src/xditview/xditview.c b/contrib/groff/src/xditview/xditview.c
deleted file mode 100644
index 75b7fd1..0000000
--- a/contrib/groff/src/xditview/xditview.c
+++ /dev/null
@@ -1,596 +0,0 @@
-/*
- * Copyright 1991 Massachusetts Institute of Technology
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of M.I.T. not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. M.I.T. makes no representations about the
- * suitability of this software for any purpose. It is provided "as is"
- * without express or implied warranty.
- *
- * M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL M.I.T.
- * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-/*
- * xditview --
- *
- * Display ditroff output in an X window
- */
-
-#ifndef SABER
-#ifndef lint
-static char rcsid[] = "$XConsortium: xditview.c,v 1.17 89/12/10 17:05:08 rws Exp $";
-#endif /* lint */
-#endif /* SABER */
-
-#include <X11/Xatom.h>
-#include <X11/Xlib.h>
-#include <X11/Xos.h>
-#include <X11/Intrinsic.h>
-#include <X11/StringDefs.h>
-#include <X11/Shell.h>
-#include <X11/Xaw/Paned.h>
-#include <X11/Xaw/Viewport.h>
-#include <X11/Xaw/Box.h>
-#include <X11/Xaw/Command.h>
-#include <X11/Xaw/Dialog.h>
-#include <X11/Xaw/Label.h>
-#include <X11/Xaw/SimpleMenu.h>
-#include <X11/Xaw/SmeBSB.h>
-
-#include <signal.h>
-
-#include "Dvi.h"
-
-#include "xdit.bm"
-#include "xdit_mask.bm"
-#include "stdio.h"
-
-extern FILE *popen();
-extern void exit();
-
-static String fallback_resources[] = {
-#include "GXditview-ad.h"
- NULL
-};
-
-static struct app_resources {
- char *print_command;
- char *filename;
-} app_resources;
-
-#define offset(field) XtOffset(struct app_resources *, field)
-
-/* Application resources. */
-
-static XtResource resources[] = {
- {"printCommand", "PrintCommand", XtRString, sizeof(char*),
- offset(print_command), XtRString, NULL},
- {"filename", "Filename", XtRString, sizeof(char*),
- offset(filename), XtRString, NULL},
-};
-
-#undef offset
-
-/* Command line options table. Only resources are entered here...there is a
- pass over the remaining options after XtParseCommand is let loose. */
-
-static XrmOptionDescRec options[] = {
-{"-page", "*dvi.pageNumber", XrmoptionSepArg, NULL},
-{"-backingStore", "*dvi.backingStore", XrmoptionSepArg, NULL},
-{"-resolution", "*dvi.resolution", XrmoptionSepArg, NULL},
-{"-printCommand", ".printCommand", XrmoptionSepArg, NULL},
-{"-filename", ".filename", XrmoptionSepArg, NULL},
-{"-noPolyText", "*dvi.noPolyText", XrmoptionNoArg, "TRUE"},
-};
-
-static char current_print_command[1024];
-
-static char current_file_name[1024];
-static FILE *current_file;
-
-/*
- * Report the syntax for calling xditview.
- */
-
-static
-Syntax(call)
- char *call;
-{
- (void) printf ("Usage: %s [-fg <color>] [-bg <color>]\n", call);
- (void) printf (" [-bd <color>] [-bw <pixels>] [-help]\n");
- (void) printf (" [-display displayname] [-geometry geom]\n");
- (void) printf (" [-page <page-number>] [-backing <backing-store>]\n");
- (void) printf (" [-resolution <res>] [-print <command>]\n");
- (void) printf (" [-filename <file>] [filename]\n\n");
- exit(1);
-}
-
-static void NewFile (), SetPageNumber ();
-static Widget toplevel, paned, viewport, dvi;
-static Widget page;
-static Widget simpleMenu;
-
-static void NextPage(), PreviousPage(), SelectPage(), OpenFile(), Quit();
-static void Print();
-
-static struct menuEntry {
- char *name;
- void (*function)();
-} menuEntries[] = {
- "nextPage", NextPage,
- "previousPage", PreviousPage,
- "selectPage", SelectPage,
- "print", Print,
- "openFile", OpenFile,
- "quit", Quit,
-};
-
-static void NextPageAction(), PreviousPageAction(), SelectPageAction();
-static void OpenFileAction(), QuitAction();
-static void AcceptAction(), CancelAction();
-static void PrintAction();
-static void RerasterizeAction();
-
-XtActionsRec xditview_actions[] = {
- "NextPage", NextPageAction,
- "PreviousPage", PreviousPageAction,
- "SelectPage", SelectPageAction,
- "Print", PrintAction,
- "OpenFile", OpenFileAction,
- "Rerasterize", RerasterizeAction,
- "Quit", QuitAction,
- "Accept", AcceptAction,
- "Cancel", CancelAction,
-};
-
-#define MenuNextPage 0
-#define MenuPreviousPage 1
-#define MenuSelectPage 2
-#define MenuPrint 3
-#define MenuOpenFile 4
-#define MenuQuit 5
-
-static char pageLabel[256] = "Page <none>";
-
-int main(argc, argv)
- int argc;
- char **argv;
-{
- char *file_name = 0;
- int i;
- static Arg labelArgs[] = {
- {XtNlabel, (XtArgVal) pageLabel},
- };
- XtAppContext xtcontext;
- Arg topLevelArgs[2];
- Widget entry;
- Arg pageNumberArgs[1];
- int page_number;
-
- toplevel = XtAppInitialize(&xtcontext, "GXditview",
- options, XtNumber (options),
- &argc, argv, fallback_resources, NULL, 0);
- if (argc > 2
- || (argc == 2 && (!strcmp(argv[1], "-help")
- || !strcmp(argv[1], "--help"))))
- Syntax(argv[0]);
-
- XtGetApplicationResources(toplevel, (XtPointer)&app_resources,
- resources, XtNumber(resources),
- NULL, (Cardinal) 0);
- if (app_resources.print_command)
- strcpy(current_print_command, app_resources.print_command);
-
- XtAppAddActions(xtcontext, xditview_actions, XtNumber (xditview_actions));
-
- XtSetArg (topLevelArgs[0], XtNiconPixmap,
- XCreateBitmapFromData (XtDisplay (toplevel),
- XtScreen(toplevel)->root,
- xdit_bits, xdit_width, xdit_height));
-
- XtSetArg (topLevelArgs[1], XtNiconMask,
- XCreateBitmapFromData (XtDisplay (toplevel),
- XtScreen(toplevel)->root,
- xdit_mask_bits,
- xdit_mask_width, xdit_mask_height));
- XtSetValues (toplevel, topLevelArgs, 2);
- if (argc > 1)
- file_name = argv[1];
-
- /*
- * create the menu and insert the entries
- */
- simpleMenu = XtCreatePopupShell ("menu", simpleMenuWidgetClass, toplevel,
- NULL, 0);
- for (i = 0; i < XtNumber (menuEntries); i++) {
- entry = XtCreateManagedWidget(menuEntries[i].name,
- smeBSBObjectClass, simpleMenu,
- NULL, (Cardinal) 0);
- XtAddCallback(entry, XtNcallback, menuEntries[i].function, NULL);
- }
-
- paned = XtCreateManagedWidget("paned", panedWidgetClass, toplevel,
- NULL, (Cardinal) 0);
- viewport = XtCreateManagedWidget("viewport", viewportWidgetClass, paned,
- NULL, (Cardinal) 0);
- dvi = XtCreateManagedWidget ("dvi", dviWidgetClass, viewport, NULL, 0);
- page = XtCreateManagedWidget ("label", labelWidgetClass, paned,
- labelArgs, XtNumber (labelArgs));
- XtSetArg (pageNumberArgs[0], XtNpageNumber, &page_number);
- XtGetValues (dvi, pageNumberArgs, 1);
- if (file_name)
- NewFile (file_name);
- /* NewFile modifies current_file_name, so do this here. */
- if (app_resources.filename)
- strcpy(current_file_name, app_resources.filename);
- XtRealizeWidget (toplevel);
- if (file_name)
- SetPageNumber (page_number);
- XtAppMainLoop(xtcontext);
- return 0;
-}
-
-static void
-SetPageNumber (number)
-{
- Arg arg[2];
- int actual_number, last_page;
-
- XtSetArg (arg[0], XtNpageNumber, number);
- XtSetValues (dvi, arg, 1);
- XtSetArg (arg[0], XtNpageNumber, &actual_number);
- XtSetArg (arg[1], XtNlastPageNumber, &last_page);
- XtGetValues (dvi, arg, 2);
- if (actual_number == 0)
- sprintf (pageLabel, "Page <none>");
- else if (last_page > 0)
- sprintf (pageLabel, "Page %d of %d", actual_number, last_page);
- else
- sprintf (pageLabel, "Page %d", actual_number);
- XtSetArg (arg[0], XtNlabel, pageLabel);
- XtSetValues (page, arg, 1);
-}
-
-static void
-SelectPageNumber (number_string)
-char *number_string;
-{
- SetPageNumber (atoi(number_string));
-}
-
-static int hadFile = 0;
-
-static void
-NewFile (name)
-char *name;
-{
- Arg arg[2];
- char *n;
- FILE *new_file;
- Boolean seek = 0;
-
- if (current_file) {
- if (!strcmp (current_file_name, "-"))
- ;
- else if (current_file_name[0] == '|')
- pclose (current_file);
- else
- fclose (current_file);
- }
- if (!strcmp (name, "-"))
- new_file = stdin;
- else if (name[0] == '|')
- new_file = popen (name+1, "r");
- else {
- new_file = fopen (name, "r");
- seek = 1;
- }
- if (!new_file) {
- /* XXX display error message */
- return;
- }
- XtSetArg (arg[0], XtNfile, new_file);
- XtSetArg (arg[1], XtNseek, seek);
- XtSetValues (dvi, arg, 2);
- if (hadFile || name[0] != '-' || name[1] != '\0') {
- XtSetArg (arg[0], XtNtitle, name);
- if (name[0] != '/' && (n = strrchr (name, '/')))
- n = n + 1;
- else
- n = name;
- XtSetArg (arg[1], XtNiconName, n);
- XtSetValues (toplevel, arg, 2);
- }
- hadFile = 1;
- SelectPageNumber ("1");
- strcpy (current_file_name, name);
- current_file = new_file;
-}
-
-static char fileBuf[1024];
-
-ResetMenuEntry (entry)
- Widget entry;
-{
- Arg arg[1];
-
- XtSetArg (arg[0], XtNpopupOnEntry, entry);
- XtSetValues (XtParent(entry) , arg, (Cardinal) 1);
-}
-
-/*ARGSUSED*/
-
-static void
-NextPage (entry, name, data)
- Widget entry;
- caddr_t name, data;
-{
- NextPageAction();
- ResetMenuEntry (entry);
-}
-
-static void
-NextPageAction ()
-{
- Arg args[1];
- int number;
-
- XtSetArg (args[0], XtNpageNumber, &number);
- XtGetValues (dvi, args, 1);
- SetPageNumber (number+1);
-}
-
-/*ARGSUSED*/
-
-static void
-PreviousPage (entry, name, data)
- Widget entry;
- caddr_t name, data;
-{
- PreviousPageAction ();
- ResetMenuEntry (entry);
-}
-
-static void
-PreviousPageAction ()
-{
- Arg args[1];
- int number;
-
- XtSetArg (args[0], XtNpageNumber, &number);
- XtGetValues (dvi, args, 1);
- SetPageNumber (number-1);
-}
-
-/* ARGSUSED */
-
-static void
-SelectPage (entry, name, data)
- Widget entry;
- caddr_t name, data;
-{
- SelectPageAction ();
- ResetMenuEntry (entry);
-}
-
-static void
-SelectPageAction ()
-{
- MakePrompt (toplevel, "Page number", SelectPageNumber, "");
-}
-
-
-static void
-DoPrint (name)
- char *name;
-{
- FILE *print_file;
-#ifdef SIGNALRETURNSINT
- int (*handler)();
-#else
- void (*handler)();
-#endif
- /* Avoid dieing because of an invalid command. */
- handler = signal(SIGPIPE, SIG_IGN);
-
- print_file = popen(name, "w");
- if (!print_file)
- /* XXX print error message */
- return;
- DviSaveToFile(dvi, print_file);
- pclose(print_file);
- signal(SIGPIPE, handler);
- strcpy(current_print_command, name);
-}
-
-static void
-RerasterizeAction()
-{
- Arg args[1];
- int number;
-
- if (current_file_name[0] == 0) {
- /* XXX display an error message */
- return;
- }
- XtSetArg (args[0], XtNpageNumber, &number);
- XtGetValues (dvi, args, 1);
- NewFile(current_file_name);
- SetPageNumber (number);
-}
-
-/* ARGSUSED */
-
-static void
-Print (entry, name, data)
- Widget entry;
- caddr_t name, data;
-{
- PrintAction ();
- ResetMenuEntry (entry);
-}
-
-static void
-PrintAction ()
-{
- if (current_print_command[0])
- strcpy (fileBuf, current_print_command);
- else
- fileBuf[0] = '\0';
- MakePrompt (toplevel, "Print command:", DoPrint, fileBuf);
-}
-
-
-/* ARGSUSED */
-
-static void
-OpenFile (entry, name, data)
- Widget entry;
- caddr_t name, data;
-{
- OpenFileAction ();
- ResetMenuEntry (entry);
-}
-
-static void
-OpenFileAction ()
-{
- if (current_file_name[0])
- strcpy (fileBuf, current_file_name);
- else
- fileBuf[0] = '\0';
- MakePrompt (toplevel, "File to open:", NewFile, fileBuf);
-}
-
-/* ARGSUSED */
-
-static void
-Quit (entry, closure, data)
- Widget entry;
- caddr_t closure, data;
-{
- QuitAction ();
-}
-
-static void
-QuitAction ()
-{
- exit (0);
-}
-
-Widget promptShell, promptDialog;
-void (*promptfunction)();
-
-/* ARGSUSED */
-static
-void CancelAction (widget, event, params, num_params)
- Widget widget;
- XEvent *event;
- String *params;
- Cardinal *num_params;
-{
- if (promptShell) {
- XtSetKeyboardFocus(toplevel, (Widget) None);
- XtDestroyWidget(promptShell);
- promptShell = (Widget) 0;
- }
-}
-
-static
-void AcceptAction (widget, event, params, num_params)
- Widget widget;
- XEvent *event;
- String *params;
- Cardinal *num_params;
-{
- (*promptfunction)(XawDialogGetValueString(promptDialog));
- CancelAction (widget, event, params, num_params);
-}
-
-MakePrompt(centerw, prompt, func, def)
-Widget centerw;
-char *prompt;
-void (*func)();
-char *def;
-{
- static Arg dialogArgs[] = {
- {XtNlabel, 0},
- {XtNvalue, 0},
- };
- Arg valueArgs[1];
- Arg centerArgs[2];
- Position source_x, source_y;
- Position dest_x, dest_y;
- Dimension center_width, center_height;
- Dimension prompt_width, prompt_height;
- Widget valueWidget;
-
- CancelAction ((Widget)NULL, (XEvent *) 0, (String *) 0, (Cardinal *) 0);
- promptShell = XtCreatePopupShell ("promptShell", transientShellWidgetClass,
- toplevel, NULL, (Cardinal) 0);
- dialogArgs[0].value = (XtArgVal)prompt;
- dialogArgs[1].value = (XtArgVal)def;
- promptDialog = XtCreateManagedWidget( "promptDialog", dialogWidgetClass,
- promptShell, dialogArgs, XtNumber (dialogArgs));
- XawDialogAddButton(promptDialog, "accept", NULL, (caddr_t) 0);
- XawDialogAddButton(promptDialog, "cancel", NULL, (caddr_t) 0);
- valueWidget = XtNameToWidget (promptDialog, "value");
- if (valueWidget) {
- XtSetArg (valueArgs[0], XtNresizable, TRUE);
- XtSetValues (valueWidget, valueArgs, 1);
- /*
- * as resizable isn't set until just above, the
- * default value will be displayed incorrectly.
- * rectify the situation by resetting the values
- */
- XtSetValues (promptDialog, dialogArgs, XtNumber (dialogArgs));
- }
- XtSetKeyboardFocus (promptDialog, valueWidget);
- XtSetKeyboardFocus (toplevel, valueWidget);
- XtRealizeWidget (promptShell);
- /*
- * place the widget in the center of the "parent"
- */
- XtSetArg (centerArgs[0], XtNwidth, &center_width);
- XtSetArg (centerArgs[1], XtNheight, &center_height);
- XtGetValues (centerw, centerArgs, 2);
- XtSetArg (centerArgs[0], XtNwidth, &prompt_width);
- XtSetArg (centerArgs[1], XtNheight, &prompt_height);
- XtGetValues (promptShell, centerArgs, 2);
- source_x = (center_width - prompt_width) / 2;
- source_y = (center_height - prompt_height) / 3;
- XtTranslateCoords (centerw, source_x, source_y, &dest_x, &dest_y);
- XtSetArg (centerArgs[0], XtNx, dest_x);
- XtSetArg (centerArgs[1], XtNy, dest_y);
- XtSetValues (promptShell, centerArgs, 2);
- XtMapWidget(promptShell);
- promptfunction = func;
-}
-
-/* For DviChar.c */
-
-char *xmalloc(n)
- int n;
-{
- return XtMalloc(n);
-}
-
-/*
-Local Variables:
-c-indent-level: 4
-c-continued-statement-offset: 4
-c-brace-offset: -4
-c-argdecl-indent: 4
-c-label-offset: -4
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/src/xditview/xtotroff.c b/contrib/groff/src/xditview/xtotroff.c
deleted file mode 100644
index 97cac0a..0000000
--- a/contrib/groff/src/xditview/xtotroff.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * xtotroff
- *
- * convert X font metrics into troff font metrics
- */
-
-#include <X11/Xlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include "XFontName.h"
-#include "DviChar.h"
-
-#ifdef X_NOT_STDC_ENV
-char *malloc();
-#else
-#include <stdlib.h>
-#endif
-
-#define charWidth(fi,c) ((fi)->per_char[(c) - (fi)->min_char_or_byte2].width)
-#define charHeight(fi,c) ((fi)->per_char[(c) - (fi)->min_char_or_byte2].ascent)
-#define charDepth(fi,c) ((fi)->per_char[(c) - (fi)->min_char_or_byte2].descent)
-#define charLBearing(fi,c) ((fi)->per_char[(c) - (fi)->min_char_or_byte2].lbearing)
-#define charRBearing(fi,c) ((fi)->per_char[(c) - (fi)->min_char_or_byte2].rbearing)
-
-Display *dpy;
-int groff_flag = 0;
-unsigned resolution = 75;
-unsigned point_size = 10;
-
-int charExists (fi, c)
- XFontStruct *fi;
- int c;
-{
- XCharStruct *p;
-
- if (c < fi->min_char_or_byte2 || c > fi->max_char_or_byte2)
- return 0;
- p = fi->per_char + (c - fi->min_char_or_byte2);
- return (p->lbearing != 0 || p->rbearing != 0 || p->width != 0
- || p->ascent != 0 || p->descent != 0 || p->attributes != 0);
-}
-
-/* Canonicalize the font name by replacing scalable parts by *s. */
-
-CanonicalizeFontName (font_name, canon_font_name)
- char *font_name, *canon_font_name;
-{
- unsigned int attributes;
- XFontName parsed;
-
- if (!XParseFontName(font_name, &parsed, &attributes)) {
- fprintf (stderr, "not a standard name: %s\n", font_name);
- return 0;
- }
-
- attributes &= ~(FontNamePixelSize|FontNameAverageWidth
- |FontNamePointSize
- |FontNameResolutionX|FontNameResolutionY);
- XFormatFontName(&parsed, attributes, canon_font_name);
- return 1;
-}
-
-int FontNamesAmbiguous(font_name, names, count)
-char *font_name;
-char **names;
-int count;
-{
- char name1[2048], name2[2048];
- int i;
-
- if (count == 1)
- return 0;
-
- for (i = 0; i < count; i++) {
- if (!CanonicalizeFontName(names[i], i == 0 ? name1 : name2)) {
- fprintf(stderr, "bad font name: %s\n", names[i]);
- return 1;
- }
- if (i > 0 && strcmp(name1, name2) != 0) {
- fprintf(stderr, "ambiguous font name: %s\n", font_name);
- fprintf(stderr, " matches %s\n", names[0]);
- fprintf(stderr, " and %s\n", names[i]);
- return 1;
- }
-
- }
- return 0;
-}
-
-MapFont (font_name, troff_name)
- char *font_name;
- char *troff_name;
-{
- XFontStruct *fi;
- int count;
- char **names;
- FILE *out;
- int c;
- unsigned int attributes;
- XFontName parsed;
- int j, k;
- DviCharNameMap *char_map;
- char encoding[256];
- char *s;
- int wid;
- char name_string[2048];
-
- if (!XParseFontName(font_name, &parsed, &attributes)) {
- fprintf (stderr, "not a standard name: %s\n", font_name);
- return 0;
- }
-
- attributes &= ~(FontNamePixelSize|FontNameAverageWidth);
- attributes |= FontNameResolutionX;
- attributes |= FontNameResolutionY;
- attributes |= FontNamePointSize;
- parsed.ResolutionX = resolution;
- parsed.ResolutionY = resolution;
- parsed.PointSize = point_size*10;
- XFormatFontName(&parsed, attributes, name_string);
-
- names = XListFonts (dpy, name_string, 100000, &count);
- if (count < 1) {
- fprintf (stderr, "bad font name: %s\n", font_name);
- return 0;
- }
-
- if (FontNamesAmbiguous(font_name, names, count))
- return 0;
-
- XParseFontName(names[0], &parsed, &attributes);
- sprintf (encoding, "%s-%s", parsed.CharSetRegistry,
- parsed.CharSetEncoding);
- for (s = encoding; *s; s++)
- if (isupper (*s))
- *s = tolower (*s);
- char_map = DviFindMap (encoding);
- if (!char_map) {
- fprintf (stderr, "not a standard encoding: %s\n", encoding);
- return 0;
- }
-
- fi = XLoadQueryFont (dpy, names[0]);
- if (!fi) {
- fprintf (stderr, "font does not exist: %s\n", names[0]);
- return 0;
- }
-
- printf ("%s -> %s\n", names[0], troff_name);
-
- { /* Avoid race while opening file */
- int fd;
- (void) unlink (troff_name);
- fd = open (troff_name, O_WRONLY | O_CREAT | O_EXCL, 0600);
- out = fdopen (fd, "w");
- }
-
- if (!out) {
- perror (troff_name);
- return 0;
- }
- fprintf (out, "name %s\n", troff_name);
- if (!strcmp (char_map->encoding, "adobe-fontspecific"))
- fprintf (out, "special\n");
- if (charExists (fi, ' ')) {
- int w = charWidth (fi, ' ');
- if (w > 0)
- fprintf (out, "spacewidth %d\n", w);
- }
- fprintf (out, "charset\n");
- for (c = fi->min_char_or_byte2; c <= fi->max_char_or_byte2; c++) {
- char *name = DviCharName (char_map,c,0);
- if (charExists (fi, c) && (groff_flag || name)) {
-
- wid = charWidth (fi, c);
-
- fprintf (out, "%s\t%d",
- name ? name : "---",
- wid);
- if (groff_flag) {
- int param[5];
- param[0] = charHeight (fi, c);
- param[1] = charDepth (fi, c);
- param[2] = 0 /* charRBearing (fi, c) - wid */;
- param[3] = 0 /* charLBearing (fi, c) */;
- param[4] = 0; /* XXX */
- for (j = 0; j < 5; j++)
- if (param[j] < 0)
- param[j] = 0;
- for (j = 4; j >= 0; j--)
- if (param[j] != 0)
- break;
- for (k = 0; k <= j; k++)
- fprintf (out, ",%d", param[k]);
- }
- fprintf (out, "\t0\t0%o\n", c);
-
- if (name) {
- for (k = 1; DviCharName(char_map,c,k); k++) {
- fprintf (out, "%s\t\"\n",
- DviCharName (char_map,c,k));
- }
- }
- }
- }
- XUnloadFont (dpy, fi->fid);
- fclose (out);
- return 1;
-}
-
-static usage(prog)
- char *prog;
-{
- fprintf (stderr,
- "usage: %s [-g] [-r resolution] [-s pointsize] FontMap\n",
- prog);
- exit (1);
-}
-
-
-/* For use by DviChar.c */
-
-char *xmalloc(n)
-int n;
-{
- char *p = malloc(n);
- if (!p) {
- fprintf(stderr, "Out of memory\n");
- exit(1);
- }
- return p;
-}
-
-main (argc, argv)
- char **argv;
-{
- char troff_name[1024];
- char font_name[1024];
- char line[1024];
- char *a, *b, c;
- int position;
- FILE *map;
- int opt;
- extern int optind;
- extern char *optarg;
-
- while ((opt = getopt(argc, argv, "gr:s:")) != EOF) {
- switch (opt) {
- case 'g':
- groff_flag = 1;
- break;
- case 'r':
- sscanf(optarg, "%u", &resolution);
- break;
- case 's':
- sscanf(optarg, "%u", &point_size);
- break;
- default:
- usage(argv[0]);
- }
- }
- if (argc - optind != 1)
- usage(argv[0]);
-
- dpy = XOpenDisplay (0);
- if (!dpy) {
- fprintf (stderr, "Can't connect to the X server.\n");
- fprintf (stderr, "Make sure the DISPLAY environment variable is set correctly.\n");
- exit (1);
- }
- position = 1;
-
- map = fopen (argv[optind], "r");
- if (map == NULL) {
- perror (argv[optind]);
- exit (1);
- }
-
- while (fgets (line, sizeof (line), map)) {
- for (a=line,b=troff_name; *a; a++,b++) {
- c = (*b = *a);
- if (c == ' ' || c == '\t')
- break;
- }
- *b = '\0';
- while (*a && (*a == ' ' || *a == '\t'))
- ++a;
- for (b=font_name; *a; a++,b++)
- if ((*b = *a) == '\n')
- break;
- *b = '\0';
- if (!MapFont (font_name, troff_name))
- exit (1);
- ++position;
- }
- exit (0);
-}
-
-/*
-Local Variables:
-c-indent-level: 8
-c-continued-statement-offset: 8
-c-brace-offset: -8
-c-argdecl-indent: 8
-c-label-offset: -8
-c-tab-always-indent: nil
-End:
-*/
diff --git a/contrib/groff/test-groff b/contrib/groff/test-groff
deleted file mode 100755
index cceecee..0000000
--- a/contrib/groff/test-groff
+++ /dev/null
@@ -1,42 +0,0 @@
-#! /bin/sh
-# This script runs groff without requiring that it be installed.
-# 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 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:\
-$builddir/preproc/tbl:\
-$builddir/preproc/grn:\
-$builddir/preproc/refer:\
-$builddir/preproc/soelim:\
-$builddir/preproc/html:\
-$builddir/devices/grops:\
-$builddir/devices/grodvi:\
-$builddir/devices/grotty:\
-$builddir/devices/grolj4:\
-$builddir/devices/grolbp:\
-$builddir/devices/grohtml:\
-$srcdir/$builddir/xditview
-
-test -n "$srcdir" || srcdir=.
-
-XENVIRONMENT=`cd $srcdir; pwd`/src/xditview/GXditview.ad
-export XENVIRONMENT
-
-GROFF_COMMAND_PREFIX=
-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
-
-exec $builddir/roff/groff/groff ${1+"$@"}
OpenPOWER on IntegriCloud