Removed files not present in v1.19.2 import.
This commit is contained in:
parent
22e7cbb874
commit
22481ce32f
@ -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
|
@ -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)
|
@ -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. :)
|
@ -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.
|
@ -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
|
@ -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]
|
@ -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
@ -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 `£' 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.
|
||||
|
@ -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 */
|
@ -1 +0,0 @@
|
||||
const char *program_name = 0;
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
@ -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);
|
@ -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;
|
||||
}
|
@ -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 *);
|
@ -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
@ -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.
|
@ -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
|
@ -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:
|
||||
*/
|
@ -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 */
|
@ -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);
|
||||
}
|
@ -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 */ );
|
@ -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 */
|
||||
|
||||
|
@ -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
|
@ -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()",
|
@ -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()
|
@ -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.
|
@ -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:
|
@ -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 */
|
@ -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
|
@ -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.
|
@ -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;
|
||||
}
|
@ -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];
|
@ -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' "$@"
|
@ -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", ¤t_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, ¤t_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:
|
||||
*/
|
@ -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();
|
@ -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:
|
||||
*/
|
@ -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:
|
||||
*/
|
@ -1,4 +0,0 @@
|
||||
#define gray1_width 3
|
||||
#define gray1_height 3
|
||||
static char gray1_bits[] = {
|
||||
0x00, 0x02, 0x00};
|
@ -1,4 +0,0 @@
|
||||
#define gray2_width 3
|
||||
#define gray2_height 3
|
||||
static char gray2_bits[] = {
|
||||
0x00, 0x03, 0x00};
|
@ -1,4 +0,0 @@
|
||||
#define gray3_width 3
|
||||
#define gray3_height 3
|
||||
static char gray3_bits[] = {
|
||||
0x00, 0x03, 0x02};
|
@ -1,4 +0,0 @@
|
||||
#define gray4_width 3
|
||||
#define gray4_height 3
|
||||
static char gray4_bits[] = {
|
||||
0x00, 0x07, 0x02};
|
@ -1,4 +0,0 @@
|
||||
#define gray5_width 3
|
||||
#define gray5_height 3
|
||||
static char gray5_bits[] = {
|
||||
0x04, 0x07, 0x02};
|
@ -1,4 +0,0 @@
|
||||
#define gray6_width 3
|
||||
#define gray6_height 3
|
||||
static char gray6_bits[] = {
|
||||
0x04, 0x07, 0x03};
|
@ -1,4 +0,0 @@
|
||||
#define gray7_width 3
|
||||
#define gray7_height 3
|
||||
static char gray7_bits[] = {
|
||||
0x05, 0x07, 0x03};
|
@ -1,4 +0,0 @@
|
||||
#define gray8_width 3
|
||||
#define gray8_height 3
|
||||
static char gray8_bits[] = {
|
||||
0x05, 0x07, 0x07};
|
@ -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:
|
@ -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:
|
||||
*/
|
@ -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);
|
||||
}
|
||||
|
@ -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:
|
||||
*/
|
@ -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};
|
@ -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};
|
@ -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, ¢er_width);
|
||||
XtSetArg (centerArgs[1], XtNheight, ¢er_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:
|
||||
*/
|
@ -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:
|
||||
*/
|
@ -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+"$@"}
|
Loading…
Reference in New Issue
Block a user