home *** CD-ROM | disk | FTP | other *** search
- .\" www.tmac
- .\"
- .\" A simple set of macros to provide HTML documents with basic
- .\" www functionality. It should work with any macro set.
- .\"
- .nr _C \n(.C
- .cp 0
- .
- .nr www-html 0
- .if '\*[.T]'html' .nr www-html 1
- .
- .\" set up www-image-template
- .\" (cannot do this in html.tmac as the image device must
- .\" also know about this string)
- .
- .if !d www-image-template \
- . ds www-image-template
- .
- .if r ps4html \{\
- . \" remove the title command when we are generating images for html
- . \" (stops a title accidentally appearing inside an image)
- . di www-notitle
- . tl ''''
- . di
- . rm tl
- . de tl
- . .
- .\}
- .
- .de www-error
- . tm \\n[.F]:\\n[.c]: macro error: \\$*
- ..
- .\"
- .\" the main auxiliary macro for the HTML interface
- .\"
- .de HTML
- . if \\n[www-html] \{\
- . \" the following line makes the vertical mode leave, so to say
- . nop \&
- . nop \X^html:\\$*^
- . \}
- ..
- .\"
- .\" an auxiliary macro for HTML (without following space)
- .\"
- .de HTML-NS
- . if \\n[www-html] \
- . nop \X^html:\\$*^\c
- ..
- .\"
- .\" HX n
- .\"
- .\" Automatic heading level cut off.
- .\"
- .\" N is the depth limit of automatically linked headings. So a depth
- .\" of 2 would cause grohtml to generate a list of links for `.NH 1' and
- .\" `.NH 2' but not for `.NH 3'.
- .\"
- .de HX
- . if \\n[www-html] \
- . nop \X^index:\\$*^
- ..
- .\"
- .\" BCL foreground background active not-visited visited
- .\"
- .de BCL
- . HTML <body text=\\$1 bgcolor=\\$2 link=\\$3 alink=\\$4 vlink=\\$5>
- ..
- .\"
- .\" BGIMG imagefile
- .\"
- .de BGIMG
- . HTML <body background=\\$1>
- ..
- .\"
- .\" URL url description [after]
- .\"
- .de URL
- . ie \\n[www-html] \
- . HTML <a href="\\$1">\\$2</a>\\$3
- . el \
- . nop \m[blue]\\$2\m[] \%\[la]\f[C]\\$1\f[]\[ra]\\$3
- ..
- .\"
- .\" FTP url description [after]
- .\"
- .\" Same as UTL.
- .\"
- .als FTP URL
- .\"
- .\" MTO address description [after]
- .\"
- .\" ADDRESS is the email address (without the `mailto:' prefix).
- .\"
- .\" DESCRIPTION is the optional name. If an empty argument is given,
- .\" ADDRESS is used instead.
- .\"
- .\" AFTER is optional stuff printed immediately after ADDRESS
- .\" (resp. DESCRIPTION).
- .\"
- .\" Example:
- .\"
- .\" Foobar has been written by
- .\" .MTO fred@foo.bar "Fredrick Bloggs" .
- .\"
- .de MTO
- . ie \\n[www-html] \{\
- . ie '\\$2'' \
- . URL mailto:\\$1 \\$1 "\\$3"
- . el \
- . URL mailto:\\$1 "\\$2" "\\$3"
- . \}
- . el \{\
- . ie '\\$2'' \
- . nop \%\m[blue]\f[C]\\$1\f[]\m[]\\$3
- . el \
- . nop \m[blue]\\$2\m[] \%\[la]\f[C]\\$1\f[]\[ra]\\$3
- . \}
- ..
- .\"
- .\" TAG name
- .\"
- .\" Generate an html name NAME.
- .\"
- .de TAG
- . HTML <a name="\\$1"></a>
- ..
- .\"
- .\" IMG [-R|-L|-C] filename [width] [height]
- .\"
- .\" Include an image of any type (will only work for -Thtml).
- .\"
- .\" Alignment is centered by default (-C).
- .\" Default value for WIDTH is 1i.
- .\" If HEIGHT is not given, WIDTH is used as the height.
- .\"
- .de IMG
- . ie \\n[www-html] \{\
- . ie '\\$2'-R' \
- . HTML-TAG ".right-image"
- . el \{\
- . ie '\\$2'-L' \
- . HTML-TAG ".left-image"
- . el \
- . HTML-TAG ".centered-image"
- . \}
- . nr www-width 100
- . if !'\\$3'' \
- . nr www-width \\$3
- . nr www-height \\n[www-width]
- . if !'\\$4'' \
- . nr www-height \\$4
- . HTML <img src="\\$1" width=\\n[www-width] height=\\n[www-height]>
- . \}
- . el \
- . nop \[la]\f[C]\\$1\f[]\[ra]
- ..
- .\"
- .\" HTML-TAG
- .\"
- .\" Emit a tag for grohtml. This is an internal macro.
- .\"
- .de HTML-TAG
- . if \\n[www-html] \{\
- . \" the following line makes the vertical mode leave, so to say
- . nop \&
- . nop \X^html-tag:\\$*^
- . \}
- ..
- .\"
- .\" HTML-TAG-NS
- .\"
- .\" Emit a tag for grohtml (without a space). This is an internal macro.
- .\"
- .de HTML-TAG-NS
- . if \\n[www-html] \
- . nop \X^html-tag:\\$*^\c
- ..
- .\"
- .\" PIMG [-R|-L|-C] filename [width] [height]
- .\"
- .\" Include a png image. It will work for -Tps and -Thtml.
- .\" The default value for WIDTH and HEIGHT is zero; the default
- .\" alignment is centering (-C).
- .\"
- .\" Note: This macro can only be used with the `-U' option of groff,
- .\" activating unsafe mode, if not used with -Thtml; the PNG image
- .\" is then converted to the EPS format using netpbm utilities.
- .\"
- .de PIMG
- . ie \\n[www-html] \{\
- . ie '\\$1'-R' \
- . HTML-TAG ".right-image"
- . el \{\
- . ie '\\$1'-L' \
- . HTML-TAG ".left-image"
- . el \
- . HTML-TAG ".centered-image"
- . \}
- . nr www-width 0
- . nr www-height 0
- . if !'\\$3'' \
- . nr www-width (\\$3 * 100 / 240)
- . if !'\\$4'' \
- . nr www-height (\\$4 * 100 / 240)
- . ie (\\n[www-width] == 0) \{\
- . ie (\\n[www-height] == 0) \
- . HTML <img src="\\$2">
- . el \
- . HTML <img src="\\$1" height=\\n[www-height]>
- . \}
- . el \{\
- . ie (\\n[www-height] == 0) \
- . HTML <img src="\\$2" width=\\n[www-width]>
- . el \
- . HTML <img src="\\$2" width=\\n[www-width] height=\\n[www-height]>
- . \}
- . \}
- . el \{\
- . if !r ps4html \{\
- . www-make-unique-name
- . sy pngtopnm \\$2 | pnmcrop -white | pnmtops -noturn > \\*[www-unique-name].eps
- . ie '\\$1'-C' \
- . PSPIC \\*[www-unique-name].eps \\$3 \\$4
- . el \
- . PSPIC \\$1 \\*[www-unique-name].eps \\$3 \\$4
- . \}
- . \}
- ..
- .
- .nr www-left-ll-trap 0
- .nr www-left-po-trap 0
- .nr www-right-ll-trap 0
- .
- .de www-finish-left-po
- . po -\\n[www-left-indent]u
- . wh \\n[www-left-po-trap]u
- . nr www-left-indent 0
- ..
- .
- .de www-finish-right-ll
- . ll +\\n[www-right-indent]u
- . \" now see whether we need to inline www-finish-left-ll
- . if (\\n[www-left-ll-trap]u > 0) \
- . if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-ll-trap]u) \{\
- . mk www-left-po-trap
- . nr www-left-po-trap +1v
- . wh \\n[www-left-po-trap]u www-finish-left-po
- . ll +\\n[www-left-indent]u
- . wh \\n[www-left-ll-trap]u
- . nr www-left-ll-trap 0
- . \}
- . \" and see whether we need to inline www-finish-left-po
- . if (\\n[www-left-po-trap]u > 0) \
- . if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-po-trap]u) \{\
- . po -\\n[www-left-indent]u
- . wh \\n[www-left-po-trap]u
- . nr www-left-indent 0
- . \}
- . wh \\n[www-right-ll-trap]u
- . nr www-right-ll-trap 0
- ..
- .
- .de www-finish-left-ll
- . if (\\n[www-right-ll-trap] > 0) \
- . if ((\\n[www-left-ll-trap] + 1v) >= \\n[www-right-ll-trap]) \{\
- . ll +\\n[www-right-indent]u
- . nr www-right-ll-trap 0
- . \}
- . mk www-left-po-trap
- . nr www-left-po-trap +1v
- . wh \\n[www-left-po-trap]u www-finish-left-po
- . ll +\\n[www-left-indent]u
- . wh \\n[www-left-ll-trap]u
- . nr www-left-ll-trap 0
- ..
- .\"
- .\" MPIMG [-R|-L] filename [width] [height]
- .\"
- .\" Include a png image and wrap text around it. It will work for
- .\" -Tps and -Thtml. The default value for WIDTH is 1i; default value
- .\" for HEIGHT is WIDTH; the default alignment is left (-L).
- .\"
- .\" Note: This macro can only be used with the `-U' option of groff,
- .\" activating unsafe mode, if not used with -Thtml; the PNG image
- .\" is then converted to the EPS format using netpbm utilities.
- .\"
- .de MPIMG
- . nr www-width 1i
- . if !'\\$3'' \
- . nr www-width \\$3
- . nr www-height \\n[www-width]
- . if !'\\$4'' \
- . nr www-height \\$4
- . nr www-width (\\n[www-width] * 100 / 240)
- . nr www-height (\\n[www-height] * 100 / 240)
- . ie \\n[www-html] \{\
- . ie '\\$1'-R' \
- . HTML <img src="\\$2" align=right width=\\n[www-width] height=\\n[www-height]>
- . el \
- . HTML <img src="\\$2" align=left width=\\n[www-width] height=\\n[www-height]>
- . \}
- . el \{\
- . if !r ps4html \{\
- . www-make-unique-name
- . sy pngtopnm \\$2 | pnmcrop -white | pnmtops -noturn > \\*[www-unique-name].eps
- . ie '\\$1'-R' \{\
- . \" we must now disable a possible left image trap
- . sp -1
- . if (\\n[www-left-ll-trap] > 0) \
- . wh \\n[www-left-ll-trap]u
- . if (\\n[www-left-po-trap] > 0) \
- . wh \\n[www-left-po-trap]u
- . PSPIC -R \\*[www-unique-name].eps \\$3 \\$4
- . sp -\\n[ps-desht]u
- . nr www-right-indent \\n[ps-deswid]u
- . ll -\\n[www-right-indent]u
- . mk www-right-ll-trap
- . nr www-right-ll-trap +(\\n[ps-desht]u - 1v)
- . wh \\n[www-right-ll-trap]u www-finish-right-ll
- . \" now restore possible left trap
- . if (\\n[www-left-ll-trap] > 0) \
- . wh \\n[www-left-ll-trap]u www-finish-left-ll
- . if (\\n[www-left-po-trap] > 0) \
- . wh \\n[www-left-po-trap]u
- . \}
- . el \{\
- . \" we must now disable a possible right image trap
- . if (\\n[www-right-ll-trap] > 0) \
- . wh \\n[www-right-ll-trap]u
- . PSPIC -L \\*[www-unique-name].eps \\$3 \\$4
- . sp -\\n[ps-desht]u
- . nr www-left-indent \\n[ps-deswid]u
- . po +\\n[www-left-indent]u
- . ll -\\n[www-left-indent]u
- . mk www-left-ll-trap
- . nr www-left-ll-trap +(\\n[ps-desht]u - 1v)
- . wh \\n[www-left-ll-trap]u www-finish-left-ll
- . \" now restore possible right trap
- . if (\\n[www-right-ll-trap] > 0) \
- . wh \\n[www-right-ll-trap]u www-finish-right-ll
- . \}
- . \}
- . \}
- ..
- .\"
- .\" HnS n
- .\"
- .\" Begin heading. Heading level is N.
- .\"
- .\" HnE
- .\"
- .\" End heading.
- .\"
- .\" If your heading contains URL, FTP, MTO macros you might wish to
- .\" disable automatic links to headings. This can be done via `-P-l'
- .\" from the command line or by using a cakk to `.HX 0'.
- .\"
- .nr www-heading-no -1
- .
- .de HnS
- . ie '\\$1'' \
- . nr www-heading-no 1
- . el \
- . nr www-heading-no \\$1
- . HTML-TAG ".NH \\n[www-heading-no]"
- ..
- .
- .de HnE
- . if (\\n[www-heading-no] == -1) \
- . www-error "HnE found without a corresponding HnS"
- . br
- ..
- .\"
- .\" LK
- .\"
- .\" Emit the automatically collected links derived from
- .\" section/numbered headings at this position.
- .\"
- .de LK
- . HTML-TAG ".links"
- ..
- .\"
- .\" HR
- .\"
- .\" Produce a horizontal line
- .\"
- .de HR
- . ie \\n[www-html] \{\
- . ti 0
- . HTML-NS <hr>
- . \}
- . el \
- . sp
- ..
- .\"
- .\" NHR
- .\"
- .\" Suppresses the generation of the top and bottom rules which grohtml
- .\" emits by default.
- .\"
- .de NHR
- . HTML-TAG ".no-auto-rule"
- ..
- .\"
- .\" www-end-nowhere - end of input trap called to finish diversion.
- .\"
- .de www-end-nowhere
- . di
- ..
- .\"
- .\" HTL
- .\"
- .\" Generate an HTML title only. This differs from the -ms .TL macro
- .\" which generates both an HTML title and a H1 heading.
- .\"
- .\" This is useful when an author wishes to use a HTML title as search
- .\" engine fodder but a graphic title in the document.
- .\"
- .\" The macro terminates when a space or break is seen (.sp, .br).
- .\"
- .de HTL
- . HTML-TAG ".html-tl"
- . if !\\n[www-html] \{\
- . di www-nowhere
- . it 2 www-end-nowhere
- . \}
- ..
- .
- .ds www-level1 \[bu]\ \ \"
- .ds www-level2 \[sq]\ \ \"
- .ds www-level3 \[ci]\ \ \"
- .nr www-level 0
- .nr www-depth 0
- .
- .\"
- .\" Auxiliary macro for ULS.
- .\"
- .de www-push-level
- . nr www-level +1
- . if (\\n[www-level] > 3) \
- . www-error "too many levels of indentation (\\n[www-level])"
- ..
- .\"
- .\" Auxiliary macro for ULE.
- .\"
- .de www-pop-level
- . if !\\n[www-level] \
- . www-error "trying to terminate a list which does not exist"
- . nr www-level -1
- ..
- .\"
- .\" ULS
- .\"
- .\" Start an unordered list.
- .\"
- .de ULS
- . www-push-level
- . ie \\n[www-html] \
- . HTML "<ul>"
- . el \{\
- . if (\\n[www-level] == 1) \
- . nr www-depth \\n[.i]
- . nr www-depth +\w'\\*[www-level\\n[www-level]]'u
- . \}
- ..
- .\"
- .\" ULE
- .\"
- .\" End an unordered list.
- .\"
- .de ULE
- . ie \\n[www-html] \
- . HTML "</ul>"
- . el \{\
- . nr www-depth -\w'\\*[www-level\\n[www-level]]'u
- . in \\n[www-depth]
- . \}
- . www-pop-level
- ..
- .\"
- .\" LI
- .\"
- .\" Insert a list item.
- .\"
- .de LI
- . ie \\n[www-html] \
- . HTML "<li>"
- . el \{\
- . in \\n[www-depth]u
- . ti -\w'\\*[www-level\\n[www-level]]'u
- . nop \\*[www-level\\n[www-level]]\c
- . \}
- ..
- .\"
- .\" DC l text [color]
- .\"
- .\" L is the letter to be dropped and enlarged.
- .\"
- .\" TEXT is the following text whose height the first letter should not
- .\" exceed.
- .\"
- .\" COLOR is the optional color of the dropped letter (default black).
- .\"
- .de DC
- . ds www-dropcolor black
- . if !'\\$3'' \
- . ds www-dropcolor \\$3
- . ie '\*(.T'html' \{\
- . www-make-unique-name
- . MPIMG -L \\*[www-unique-name].png "(\\n[.v] * 2u)"
- . \}
- . el \{\
- . ie r ps4html \{\
- . www-make-unique-name
- . nop \O[5i\\*[www-unique-name].png]\O[1]
- . nop \m[\\*[www-dropcolor]]\s[40]\O[3]\\$1\O[4]\s0\m[]
- . nop \O[2]\O[1]
- . \}
- . el \{\
- . nr dummy \w'\\$1'u
- . nr dcht ((\\n[.v] + \\n[rst]) * \\n[.ps] / \\n[rst])
- . char \[dcap] \m[\\*[www-dropcolor]]\s'\\n[dcht]u'\\$1
- . nop \v'\\n[.v]u'\\[dcap]\v'-\\n[.v]u'\c
- ' ti \w'\\[dcap]'u
- . \}
- . \}
- . nop \\$2
- ..
- .\"
- .\" now set up TS, TE, EQ, EN default macros
- .\"
- .do if !d TS .do ds TS HTML-IMAGE
- .do if !d TE .do ds TE HTML-IMAGE-END
- .do if !d EQ .do ds EQ HTML-IMAGE
- .do if !d EN .do ds EN HTML-IMAGE-END
- .\"
- .\" supplementary macros used by other macro sets
- .\"
- .\" here are some tags specially for -Tps or -Thtml when invoked by pre-html
- .\" to generate png images from postscript.
- .\"
- .\" HTML-DO-IMAGE - tells troff to issue an image marker which can be
- .\" read back by pre-html
- .\"
- .de HTML-DO-IMAGE
- . if r ps4html \
- . nop \O[5\\$2\\$1.png]\O[1]\O[3]
- . if \\n[www-html] \
- . nop \O[5\\$2\\$1.png]\O[0]\O[3]
- ..
- .\"
- .\" HTML-IMAGE-END - terminates an image for html
- .\"
- .de HTML-IMAGE-END
- . if r ps4html \
- . nop \O[4]\O[2]\O[0]
- . if \\n[www-html] \
- . nop \O[4]\O[2]\O[1]
- ..
- .
- .nr www-png-no 0
- .
- .\"
- .\" www-make-unique-name - generates another unique name in string
- .\" `www-unique-name'
- .\"
- .de www-make-unique-name
- . nr www-png-no +1
- . ds www-unique-name \\*[www-image-template]\\n[www-png-no]
- ..
- .\"
- .\" HTML-IMAGE and friends tell grohtml that this region of text needs
- .\" to be rendered as an image.
- .\"
- .de HTML-IMAGE
- . \" generates a centered image
- . www-make-unique-name
- . HTML-DO-IMAGE \\*[www-unique-name] c
- ..
- .
- .de HTML-IMAGE-RIGHT
- . www-make-unique-name
- . HTML-DO-IMAGE \\*[www-unique-name] r
- ..
- .
- .de HTML-IMAGE-LEFT
- . www-make-unique-name
- . HTML-DO-IMAGE \\*[www-unique-name] l
- ..
- .
- .de HTML-IMAGE-INLINE
- . www-make-unique-name
- . HTML-DO-IMAGE \\*[www-unique-name] i
- ..
- .
- .if \n[www-html] \{\
- . nh
- . nr HY 0
- .\}
- .if r ps4html .nop \O[0]
- .cp \n(_C
- .
- .\" EOF
-