Removed files not present in v1.19.2 import.

This commit is contained in:
Ruslan Ermilov 2005-10-20 10:47:26 +00:00
parent 22e7cbb874
commit 22481ce32f
62 changed files with 0 additions and 21518 deletions

View File

@ -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

View File

@ -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)

View File

@ -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. :)

View File

@ -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.

View File

@ -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

View File

@ -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]

View File

@ -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.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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.

View File

@ -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 */

View File

@ -1 +0,0 @@
const char *program_name = 0;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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 *);

View File

@ -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;
}

File diff suppressed because it is too large Load Diff

View File

@ -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.

View File

@ -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

View File

@ -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:
*/

View File

@ -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 */

View File

@ -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);
}

View File

@ -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 */ );

View File

@ -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 */

View File

@ -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

View File

@ -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()",

View File

@ -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()

View File

@ -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.

View File

@ -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:

View File

@ -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 */

View File

@ -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

View File

@ -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.

View File

@ -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;
}

View File

@ -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];

View File

@ -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' "$@"

View File

@ -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:
*/

View File

@ -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();

View File

@ -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:
*/

View File

@ -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:
*/

View File

@ -1,4 +0,0 @@
#define gray1_width 3
#define gray1_height 3
static char gray1_bits[] = {
0x00, 0x02, 0x00};

View File

@ -1,4 +0,0 @@
#define gray2_width 3
#define gray2_height 3
static char gray2_bits[] = {
0x00, 0x03, 0x00};

View File

@ -1,4 +0,0 @@
#define gray3_width 3
#define gray3_height 3
static char gray3_bits[] = {
0x00, 0x03, 0x02};

View File

@ -1,4 +0,0 @@
#define gray4_width 3
#define gray4_height 3
static char gray4_bits[] = {
0x00, 0x07, 0x02};

View File

@ -1,4 +0,0 @@
#define gray5_width 3
#define gray5_height 3
static char gray5_bits[] = {
0x04, 0x07, 0x02};

View File

@ -1,4 +0,0 @@
#define gray6_width 3
#define gray6_height 3
static char gray6_bits[] = {
0x04, 0x07, 0x03};

View File

@ -1,4 +0,0 @@
#define gray7_width 3
#define gray7_height 3
static char gray7_bits[] = {
0x05, 0x07, 0x03};

View File

@ -1,4 +0,0 @@
#define gray8_width 3
#define gray8_height 3
static char gray8_bits[] = {
0x05, 0x07, 0x07};

View File

@ -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:

View File

@ -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:
*/

View File

@ -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);
}

View File

@ -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:
*/

View File

@ -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};

View File

@ -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};

View File

@ -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:
*/

View File

@ -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:
*/

View File

@ -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+"$@"}