1114402Sru.ig 2114402Sruwww.tmac - macro package for adding HTML elements to roff documents. 3114402Sru 4114402SruFile position: <groff_source_top>/tmac/www.tmac 5114402SruInstalled position: groff's main macro directory. 6114402Sru 7114402Sru------------------------------------------------------------------------ 8114402Sru Legalize 9114402Sru------------------------------------------------------------------------ 10114402Sru 11114402SruThis file is part of groff, the GNU roff type-setting system. 12114402Sru 13151497SruCopyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 14114402Sruwritten by Gaius Mulley <gaius@glam.ac.uk>, with additions by 15114402SruWerner Lemberg <wl@gnu.org> and Bernd Warken <bwarken@mayn.de>. 16114402Sru 17114402Srugroff is free software; you can redistribute it and/or modify it under 18114402Sruthe terms of the GNU General Public License as published by the Free 19114402SruSoftware Foundation; either version 2, or (at your option) any later 20114402Sruversion. 21114402Sru 22114402Srugroff is distributed in the hope that it will be useful, but WITHOUT 23114402SruANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 24114402SruFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 25114402Srufor more details. 26114402Sru 27114402SruYou should have received a copy of the GNU General Public License 28114402Srualong with groff; see the file COPYING. If not, write to the Free 29151497SruSoftware Foundation, 51 Franklin St - Fifth Floor, Boston, MA 30151497Sru02110-1301, USA. 31114402Sru 32114402Sru 33114402Sru------------------------------------------------------------------------ 34114402Sru Description 35114402Sru------------------------------------------------------------------------ 36114402Sru 37114402SruA simple set of macros to provide HTML documents with basic 38114402Sruwww functionality. It should work with any macro set. 39114402Sru.. 40114402Sru. 41114402Sru.\" -------------------------------------------------------------------- 42114402Sru.\" Setup 43114402Sru.\" -------------------------------------------------------------------- 44114402Sru. 45151497Sru.do if d www:lenstr .nx 46151497Sru. 47151497Sru.do mso devtag.tmac 48151497Sru. 4975584Sru.nr _C \n(.C 5075584Sru.cp 0 51104862Sru. 52151497Sru. 5375584Sru.nr www-html 0 54104862Sru.if '\*[.T]'html' .nr www-html 1 55104862Sru. 56104862Sru.\" set up www-image-template 57104862Sru. 58104862Sru.if !d www-image-template \ 59104862Sru. ds www-image-template 60104862Sru. 61104862Sru.if r ps4html \{\ 62104862Sru. \" remove the title command when we are generating images for html 63104862Sru. \" (stops a title accidentally appearing inside an image) 64104862Sru. di www-notitle 65104862Sru. tl '''' 66104862Sru. di 67104862Sru. rm tl 68104862Sru. de tl 69104862Sru. . 70104862Sru.\} 71104862Sru. 72114402Sru. 73114402Sru.\" -------------------------------------------------------------------- 74114402Sru.\" Test for `.substring'; result in register `www.substring_ok'. 75114402Sru.\" The automated break points in .URL addresses are only added if 76114402Sru.\" this register is non-zero. 77114402Sru.\" 78114402Sru.nr www:substring_ok 0 79114402Sru.de www:@test_substring 80114402Sru. if !d substring \ 81114402Sru. return 82114402Sru. ds \\$0:s abcdefg\" 83114402Sru. substring \\$0:s 1 1 84114402Sru. if !'\\*[\\$0:s]'b' \{\ 85114402Sru. rm \\$0:s 86114402Sru. return 87114402Sru. \} 88114402Sru. ds \\$0:s abcdefg\" 89114402Sru. substring \\$0:s 0 0 90114402Sru. if !'\\*[\\$0:s]'a' \{\ 91114402Sru. rm \\$0:s 92114402Sru. return 93114402Sru. \} 94114402Sru. ds \\$0:s abcdefg\" 95114402Sru. substring \\$0:s 1 -1 96114402Sru. if !'\\*[\\$0:s]'bcdefg' \{\ 97114402Sru. rm \\$0:s 98114402Sru. return 99114402Sru. \} 100114402Sru. nr www:substring_ok 1 101114402Sru. rm \\$0:s 102114402Sru.. 103114402Sru.www:@test_substring 104114402Sru.rm www:@test_substring 105114402Sru. 106114402Sru. 107114402Sru.\" -------------------------------------------------------------------- 108114402Sru.\" Local Macros 109114402Sru.\" -------------------------------------------------------------------- 110114402Sru. 111114402Sru.\" -------------------------------------------------------------------- 112151497Sru.\" www:paraspace 113151497Sru.\" 114151497Sru.\" Space before paragraph. Use \n[PD] if it exists. 115151497Sru.\" 116151497Sru.nr www:pd 0.5v 117151497Sru.de www:paraspace 118151497Sru. ie r PD .sp \\n[PD]u 119151497Sru. el .sp \\n[www:pd]u 120151497Sru.. 121151497Sru. 122151497Sru.\" 123151497Sru.\" -------------------------------------------------------------------- 124114402Sru.\" www:error (<test>...) 125114402Sru.\" 126114402Sru.\" Print error message 127114402Sru.\" 128104862Sru.de www-error 129104862Sru. tm \\n[.F]:\\n[.c]: macro error: \\$* 130104862Sru.. 131114402Sru.als www:error www-error 132114402Sru. 133114402Sru.\" -------------------------------------------------------------------- 134114402Sru.\" www:lenstr (<register_name> <string_name>) 13575584Sru.\" 136114402Sru.\" Store length of string named <string_name> into register named 137114402Sru.\" <register_name>. 138114402Sru.\" 139114402Sru.de www:lenstr 140114402Sru. if !(\\n[.$] == 2) \{\ 141114402Sru. tm .\\$0 expects 2 arguments. 142114402Sru. ab 143114402Sru. \} 144114402Sru. length \\$0:n x\\*[\\$2] 145114402Sru. nr \\$1 (\\n[\\$0:n]-1) 146114402Sru. rr \\$0:n 147114402Sru.. 148114402Sru.\" -------------------------------------------------------------------- 149114402Sru.\" www:splitstr (<name>) 150114402Sru.\" 151114402Sru.\" Add a space character between any two adjacent characters in string 152114402Sru.\" <name> and restore result into the string variable <name>; space 153114402Sru.\" characters are first replaced by the word `space'. 154114402Sru.\" 155114402Sru.de www:splitstr 156114402Sru. if !(\\n[.$] == 1) \ 157114402Sru. www:error .\\$0 expects 1 argument. 158114402Sru. if '\\*[\\$1]'' \ 159114402Sru. return 160114402Sru. ds \\$0:r "\\*[\\$1]\"" 161114402Sru. ds \\$0:s\" 162114402Sru. while 1 \{\ 163114402Sru. ds \\$0:c "\\*[\\$0:r]\"" 164114402Sru. substring \\$0:c 0 0\" 165114402Sru. ie '\\*[\\$0:c]' ' \ 166114402Sru. as \\$0:s " space\"" 167114402Sru. el \ 168114402Sru. as \\$0:s " \\*[\\$0:c]\"" 169114402Sru. www:lenstr \\$0:n \\$0:r 170114402Sru. if (\\n[\\$0:n] <= 1) \{\ 171114402Sru. break 172114402Sru. \} 173114402Sru. substring \\$0:r 1 -1\" 174114402Sru. \} 175114402Sru. if !'\\*[\\$0:s]'' \ 176114402Sru. substring \\$0:s 1 -1 177114402Sru. ds \\$1 \\*[\\$0:s] 178114402Sru. rm \\$0:c 179114402Sru. rr \\$0:n 180114402Sru. rm \\$0:r 181114402Sru. rm \\$0:s 182114402Sru.. 183114402Sru.\" -------------------------------------------------------------------- 184114402Sru.\" www:url_breaks (<string_name>) 185114402Sru.\" 186114402Sru.\" Add `\:' (possible break point) within URL strings after `/'. 187114402Sru.\" 188114402Sru.\" Smart about multiple `/', existing `\:', and space characters; 189114402Sru.\" does not set a break point if less than 5 characters would go to 190114402Sru.\" the next line. 191114402Sru.\" 192114402Sru.de www:url_breaks 193114402Sru. if !(\\n[.$] == 1) \ 194114402Sru. www:error .\\$0 expects 1 argument. 195114402Sru. if !\n[www:substring_ok] \ 196114402Sru. return 197114402Sru. ds \\$0:s "\\*[\\$1]\"" 198114402Sru. www:splitstr \\$0:s 199114402Sru. www:url_breaks_splitted \\$0:s \\*[\\$0:s] 200114402Sru. ds \\$1 "\\*[\\$0:s]\"" 201114402Sru. rm \\$0:s 202114402Sru.. 203114402Sru.\" -------------------------------------------------------------------- 204114402Sru.\" www:url_breaks_splitted (<result> <char> [<char>...]) 205114402Sru.\" 206114402Sru.\" Add `\:' within URL strings, but arguments are a splitted string. 207114402Sru.\" 208114402Sru.\" Arguments: >=2: <result> <char> [<char>...] 209114402Sru.\" 210114402Sru.de www:url_breaks_splitted 211151497Sru. nr \\$0:min 5 \" minimal number of characters for next line 212114402Sru. if (\\n[.$] < 2) \ 213114402Sru. www:error .\\$0 expects at least 2 arguments. 214114402Sru. ds \\$0:res \\$1\" 215114402Sru. shift 216114402Sru. ds \\$0:s\" 217114402Sru. nr \\$0:done 0 218114402Sru. while !\\n[\\$0:done] \{\ 219114402Sru. if (\\n[.$] <= 0) \{\ 220114402Sru. nr \\$0:done 1 221114402Sru. break 222114402Sru. \} 223114402Sru. if '\\$1'space' \{\ 224114402Sru. as \\$0:s " \"" 225114402Sru. shift 226114402Sru. continue 227114402Sru. \} 228114402Sru. if (\\n[.$] < \\n[\\$0:min]) \{\ 229114402Sru. as \\$0:s "\\$1\"" 230114402Sru. shift 231114402Sru. continue 232114402Sru. \} 233114402Sru. if !'\\$1'/' \{\ 234114402Sru. as \\$0:s "\\$1\"" 235114402Sru. shift 236114402Sru. continue 237114402Sru. \} 238114402Sru. \" we are at a `/' character 239114402Sru. while '\\$1'/' \{\ 240114402Sru. as \\$0:s /\" 241114402Sru. if (\\n[.$] == 0) \{\ 242114402Sru. nr \\$0:done 1 243114402Sru. break 244114402Sru. \} 245114402Sru. shift 246114402Sru. \} 247114402Sru. if \\n[\\$0:done] \ 248114402Sru. break 249114402Sru. if (\\n[.$] < \\n[\\$0:min]) \ 250114402Sru. continue 251114402Sru. if '\\$1'\:' \ 252114402Sru. shift 253114402Sru. as \\$0:s \:\" 254114402Sru. \} 255114402Sru. ds \\*[\\$0:res] \\*[\\$0:s]\" 256114402Sru. rm \\$0:res 257114402Sru. rm \\$0:s 258114402Sru.. 259114402Sru.\" -------------------------------------------------------------------- 260114402Sru.\" User Interface 261114402Sru.\" -------------------------------------------------------------------- 262114402Sru. 263114402Sru.\" -------------------------------------------------------------------- 264151497Sru.\" HTML 265114402Sru.\" 266104862Sru.\" the main auxiliary macro for the HTML interface 26775584Sru.\" 26875584Sru.de HTML 26975584Sru. if \\n[www-html] \{\ 270151497Sru. \" was implemented via .nop \&\X^html:\\$*^ but 271151497Sru. \" is now implemented using HTML-NS to utilize code factoring. 272151497Sru. \" 273151497Sru. \" the `\&' makes the vertical mode leave, so to say 274151497Sru. \" 275151497Sru. nop \&\c 276151497Sru. HTML-NS \\$* 277104862Sru. nop \& 27875584Sru. \} 27975584Sru.. 280104862Sru.\" 281104862Sru.\" an auxiliary macro for HTML (without following space) 282104862Sru.\" 283104862Sru.de HTML-NS 284151497Sru. nop \X^html:\\$*^\c 28575584Sru.. 286151497Sru.\" 287151497Sru.\" emit a HTML tag after shutting down a (possibly open) paragraph 288151497Sru.\" 289151497Sru.de HTML</p> 290151497Sru. if \\n[www-html] \{\ 291151497Sru. \" the `\&' makes the vertical mode leave, so to say 292151497Sru. nop \&\X^html</p>:\\$*^ 293151497Sru. \} 294151497Sru.. 295114402Sru.\" -------------------------------------------------------------------- 296104862Sru.\" HX n 29775584Sru.\" 298104862Sru.\" Automatic heading level cut off. 299104862Sru.\" 300104862Sru.\" N is the depth limit of automatically linked headings. So a depth 301114402Sru.\" of 2 would cause grohtml to generate a list of links for `.NH 1' 302114402Sru.\" and `.NH 2' but not for `.NH 3'. 303104862Sru.\" 304104862Sru.de HX 305104862Sru. if \\n[www-html] \ 306104862Sru. nop \X^index:\\$*^ 307104862Sru.. 308114402Sru.\" -------------------------------------------------------------------- 309104862Sru.\" BCL foreground background active not-visited visited 310104862Sru.\" 311104862Sru.de BCL 31275584Sru. HTML <body text=\\$1 bgcolor=\\$2 link=\\$3 alink=\\$4 vlink=\\$5> 31375584Sru.. 314114402Sru.\" -------------------------------------------------------------------- 315104862Sru.\" BGIMG imagefile 31675584Sru.\" 317104862Sru.de BGIMG 31875584Sru. HTML <body background=\\$1> 31975584Sru.. 320114402Sru.\" -------------------------------------------------------------------- 321114402Sru.\" URL url [description] [after] 322114402Sru.\" if description is absent then the url becomes the anchor text 32375584Sru.\" 32475584Sru.de URL 325151497Sru. ie !'\\$1'' \{\ 326151497Sru. ds \\$0:adr \\$1\" 327151497Sru. www:url_breaks \\$0:adr 328151497Sru. \} 329114402Sru. ie \\n[www-html] \{\ 330151497Sru. ie '\\$3'' \ 331151497Sru. ds \\$0:after \& 332151497Sru. el \ 333151497Sru. ds \\$0:after \&\\$3 334114402Sru. ie '\\$2'' \ 335151497Sru. HTML-NS <a href="\\$1">\\$1</a> 336114402Sru. el \ 337151497Sru. HTML-NS <a href="\\$1">\\$2</a> 338151497Sru. nop \\*[\\$0:after] 339151497Sru. rm \\$0:after 340114402Sru. \} 341114402Sru. el \{\ 342114402Sru. if !r ps4html .ad l 343151497Sru. ie '\\$2'' \{\ 344151497Sru. ie '\\$1'' \{\ 345151497Sru. ie !'\\$3'' \ 346151497Sru. nop \\$3 347151497Sru. \} 348151497Sru. el \{\ 349151497Sru. ie \\n[.color] \ 350151497Sru. nop \%\[la]\m[blue]\f[C]\\*[\\$0:adr]\f[]\m[]\[ra]\\$3 351151497Sru. el \ 352151497Sru. nop \%\[la]\f[CB]\\*[\\$0:adr]\f[]\[ra]\\$3 353151497Sru. \} 354151497Sru. \} 355151497Sru. el \{\ 356151497Sru. ie '\\$1'' \{\ 357151497Sru. ie \\n[.color] \ 358151497Sru. nop \m[blue]\\$2\m[]\\$3 359151497Sru. el \ 360151497Sru. nop \f[B]\\$2\f[]\\$3 361151497Sru. \} 362151497Sru. el \{\ 363151497Sru. ie \\n[.color] \ 364151497Sru. nop \m[blue]\\$2\m[] \%\[la]\f[C]\\*[\\$0:adr]\f[]\[ra]\\$3 365151497Sru. el \ 366151497Sru. nop \f[B]\\$2\f[] \%\[la]\f[C]\\*[\\$0:adr]\f[]\[ra]\\$3 367151497Sru. \} 368151497Sru. \} 369114402Sru. if !r ps4html .ad 370114402Sru. \} 371114402Sru. rm \\$0:adr 372104862Sru.. 373114402Sru.\" -------------------------------------------------------------------- 374104862Sru.\" FTP url description [after] 375104862Sru.\" 376114402Sru.\" Same as URL. 377104862Sru.\" 378104862Sru.als FTP URL 379114402Sru.\" -------------------------------------------------------------------- 380104862Sru.\" MTO address description [after] 381104862Sru.\" 382104862Sru.\" ADDRESS is the email address (without the `mailto:' prefix). 383104862Sru.\" 384104862Sru.\" DESCRIPTION is the optional name. If an empty argument is given, 385104862Sru.\" ADDRESS is used instead. 386104862Sru.\" 387104862Sru.\" AFTER is optional stuff printed immediately after ADDRESS 388104862Sru.\" (resp. DESCRIPTION). 389104862Sru.\" 390104862Sru.\" Example: 391104862Sru.\" 392104862Sru.\" Foobar has been written by 393104862Sru.\" .MTO fred@foo.bar "Fredrick Bloggs" . 394104862Sru.\" 395104862Sru.de MTO 39675584Sru. ie \\n[www-html] \{\ 397104862Sru. ie '\\$2'' \ 398104862Sru. URL mailto:\\$1 \\$1 "\\$3" 399104862Sru. el \ 400104862Sru. URL mailto:\\$1 "\\$2" "\\$3" 40175584Sru. \} 40275584Sru. el \{\ 403151497Sru. ie '\\$2'' \{\ 404151497Sru. ie '\\$1'' \{\ 405151497Sru. ie !'\\$3'' \ 406151497Sru. nop \\$3 407151497Sru. \} 408151497Sru. el \{\ 409151497Sru. ie \\n[.color] \ 410151497Sru. nop \%\m[blue]\f[C]\\$1\f[]\m[]\\$3 411151497Sru. el \ 412151497Sru. nop \%\f[CB]\\$1\f[]\\$3 413151497Sru. \} 414151497Sru. \} 415151497Sru. el \{\ 416151497Sru. ie '\\$1'' \{\ 417151497Sru. ie \\n[.color] \ 418151497Sru. nop \m[blue]\\$2\m[]\\$3 419151497Sru. el \ 420151497Sru. nop \f[B]\\$2\f[]\\$3 421151497Sru. \} 422151497Sru. el \{\ 423151497Sru. ie \\n[.color] \ 424151497Sru. nop \m[blue]\\$2\m[] \%\[la]\f[C]\\$1\f[]\[ra]\\$3 425151497Sru. el 426151497Sru. nop \f[B]\\$2\f[] \%\[la]\f[C]\\$1\f[]\[ra]\\$3 427151497Sru. \} 428151497Sru. \} 42975584Sru. \} 43075584Sru.. 431114402Sru.\" -------------------------------------------------------------------- 432104862Sru.\" TAG name 433104862Sru.\" 434104862Sru.\" Generate an html name NAME. 435104862Sru.\" 436104862Sru.de TAG 437104862Sru. HTML <a name="\\$1"></a> 438104862Sru.. 439114402Sru.\" -------------------------------------------------------------------- 440104862Sru.\" IMG [-R|-L|-C] filename [width] [height] 441104862Sru.\" 442104862Sru.\" Include an image of any type (will only work for -Thtml). 443104862Sru.\" 444104862Sru.\" Alignment is centered by default (-C). 445104862Sru.\" Default value for WIDTH is 1i. 446104862Sru.\" If HEIGHT is not given, WIDTH is used as the height. 447104862Sru.\" 448104862Sru.de IMG 44975584Sru. ie \\n[www-html] \{\ 450104862Sru. ie '\\$2'-R' \ 451151497Sru. DEVTAG ".right-image" 452104862Sru. el \{\ 453104862Sru. ie '\\$2'-L' \ 454151497Sru. DEVTAG ".left-image" 455104862Sru. el \ 456151497Sru. DEVTAG ".centered-image" 457104862Sru. \} 458104862Sru. nr www-width 100 459104862Sru. if !'\\$3'' \ 460104862Sru. nr www-width \\$3 461104862Sru. nr www-height \\n[www-width] 462104862Sru. if !'\\$4'' \ 463104862Sru. nr www-height \\$4 464151497Sru. HTML <img src="\\$1" alt="Image \\$1" \ 465151497Sru width=\\n[www-width] height=\\n[www-height]> 46675584Sru. \} 467104862Sru. el \ 468104862Sru. nop \[la]\f[C]\\$1\f[]\[ra] 469104862Sru.. 470114402Sru.\" -------------------------------------------------------------------- 471104862Sru.\" PIMG [-R|-L|-C] filename [width] [height] 47275584Sru.\" 473104862Sru.\" Include a png image. It will work for -Tps and -Thtml. 474104862Sru.\" The default value for WIDTH and HEIGHT is zero; the default 475104862Sru.\" alignment is centering (-C). 476104862Sru.\" 477104862Sru.\" Note: This macro can only be used with the `-U' option of groff, 478104862Sru.\" activating unsafe mode, if not used with -Thtml; the PNG image 479104862Sru.\" is then converted to the EPS format using netpbm utilities. 480104862Sru.\" 481104862Sru.de PIMG 48275584Sru. ie \\n[www-html] \{\ 483104862Sru. ie '\\$1'-R' \ 484151497Sru. DEVTAG ".right-image" 485104862Sru. el \{\ 486104862Sru. ie '\\$1'-L' \ 487151497Sru. DEVTAG ".left-image" 488104862Sru. el \ 489151497Sru. DEVTAG ".centered-image" 49075584Sru. \} 491104862Sru. nr www-width 0 492104862Sru. nr www-height 0 493104862Sru. if !'\\$3'' \ 494104862Sru. nr www-width (\\$3 * 100 / 240) 495104862Sru. if !'\\$4'' \ 496104862Sru. nr www-height (\\$4 * 100 / 240) 497104862Sru. ie (\\n[www-width] == 0) \{\ 498104862Sru. ie (\\n[www-height] == 0) \ 499151497Sru. HTML <img src="\\$2" alt="Image \\$2"> 500104862Sru. el \ 501151497Sru. HTML <img src="\\$1" alt="Image \\$2" height=\\n[www-height]> 502104862Sru. \} 50375584Sru. el \{\ 504104862Sru. ie (\\n[www-height] == 0) \ 505151497Sru. HTML <img src="\\$2" alt="Image \\$2" width=\\n[www-width]> 506104862Sru. el \ 507151497Sru. HTML <img src="\\$2" alt="Image \\$2" width=\\n[www-width] \ 508151497Sru height=\\n[www-height]> 50975584Sru. \} 51075584Sru. \} 51175584Sru. el \{\ 512104862Sru. if !r ps4html \{\ 513104862Sru. www-make-unique-name 514114402Sru. sy pngtopnm \\$2 | pnmcrop -white | @PNMTOPS_NOSETPAGE@ -noturn > \\*[www-unique-name].eps 515104862Sru. ie '\\$1'-C' \ 516104862Sru. PSPIC \\*[www-unique-name].eps \\$3 \\$4 517104862Sru. el \ 518104862Sru. PSPIC \\$1 \\*[www-unique-name].eps \\$3 \\$4 51975584Sru. \} 520104862Sru. \} 521104862Sru.. 522104862Sru. 523114402Sru.\" -------------------------------------------------------------------- 524114402Sru.\" auxiliary definitions for MPIMG 525114402Sru.\" 526104862Sru.nr www-left-ll-trap 0 527104862Sru.nr www-left-po-trap 0 528104862Sru.nr www-right-ll-trap 0 529104862Sru. 530104862Sru.de www-finish-left-po 531151497Sru. po -(\\n[www-left-indent]u + \\n[www-image-gap]u) 532104862Sru. wh \\n[www-left-po-trap]u 533104862Sru. nr www-left-indent 0 534104862Sru.. 535104862Sru. 536151497Sru.\" called when the -R picture is finished 537104862Sru.de www-finish-right-ll 538151497Sru. ll +(\\n[www-right-indent]u + \\n[www-image-gap]u) 539104862Sru. \" now see whether we need to inline www-finish-left-ll 540104862Sru. if (\\n[www-left-ll-trap]u > 0) \ 541104862Sru. if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-ll-trap]u) \{\ 542104862Sru. mk www-left-po-trap 543104862Sru. nr www-left-po-trap +1v 544104862Sru. wh \\n[www-left-po-trap]u www-finish-left-po 545104862Sru. ll +\\n[www-left-indent]u 546104862Sru. wh \\n[www-left-ll-trap]u 547104862Sru. nr www-left-ll-trap 0 54875584Sru. \} 549104862Sru. \" and see whether we need to inline www-finish-left-po 550104862Sru. if (\\n[www-left-po-trap]u > 0) \ 551104862Sru. if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-po-trap]u) \{\ 552104862Sru. po -\\n[www-left-indent]u 553104862Sru. wh \\n[www-left-po-trap]u 554104862Sru. nr www-left-indent 0 555104862Sru. \} 556104862Sru. wh \\n[www-right-ll-trap]u 557104862Sru. nr www-right-ll-trap 0 558104862Sru.. 559104862Sru. 560104862Sru.de www-finish-left-ll 561104862Sru. if (\\n[www-right-ll-trap] > 0) \ 562104862Sru. if ((\\n[www-left-ll-trap] + 1v) >= \\n[www-right-ll-trap]) \{\ 563104862Sru. ll +\\n[www-right-indent]u 564104862Sru. nr www-right-ll-trap 0 565104862Sru. \} 566104862Sru. mk www-left-po-trap 567104862Sru. nr www-left-po-trap +1v 568104862Sru. wh \\n[www-left-po-trap]u www-finish-left-po 569151497Sru. ll +(\\n[www-left-indent]u + \\n[www-image-gap]u) 570104862Sru. wh \\n[www-left-ll-trap]u 571104862Sru. nr www-left-ll-trap 0 572104862Sru.. 573151497Sru. 574151497Sru.\" www-handle-percent arg N1 N2 S1 575151497Sru.\" arg - input string (number or number%) 576151497Sru.\" output parameters: 577151497Sru.\" N1 - name of number register 1=absolute 0=percentage 578151497Sru.\" N2 - number register name for absolute value 579151497Sru.\" S1 - string register name for percentage value 580151497Sru. 581151497Sru.de www-handle-percent 582151497Sru. ds www-percent \\$1\" 583151497Sru. substring www-percent -1 -1 584151497Sru. 585151497Sru. ie '\\*[www-percent]'%' \{\ 586151497Sru. ds www-abs \\$1\" 587151497Sru. substring www-abs 0 -2 588151497Sru. nr \\$2 0 589151497Sru. nr \\$3 \\*[www-abs] 590151497Sru. ds \\$4 \\$1\" 591151497Sru. \} 592151497Sru. el \{\ 593151497Sru. nr \\$2 1 594151497Sru. nr \\$3 \\$1 595151497Sru. ds \\$4 none\" 596151497Sru. \} 597151497Sru.. 598151497Sru. 599114402Sru.\" -------------------------------------------------------------------- 600151497Sru.\" MPIMG [-R|-L] [-G gap] filename [width [height]] 601104862Sru.\" 602104862Sru.\" Include a png image and wrap text around it. It will work for 603104862Sru.\" -Tps and -Thtml. The default value for WIDTH is 1i; default value 604104862Sru.\" for HEIGHT is WIDTH; the default alignment is left (-L). 605151497Sru.\" -G is used to insert a gap between the text and the image. 606151497Sru.\" The height and width can also be given as a percentage. 607151497Sru.\" The PostScript device converts the percentage width into an 608151497Sru.\" absolute value by using \\n[.l], and the height by using \\n[.p]. 609151497Sru.\" 610104862Sru.\" 611104862Sru.\" Note: This macro can only be used with the `-U' option of groff, 612104862Sru.\" activating unsafe mode, if not used with -Thtml; the PNG image 613104862Sru.\" is then converted to the EPS format using netpbm utilities. 614104862Sru.\" 615151497Sru. 616151497Sru.nr www-htmlimage-gap 0 617151497Sru. 618104862Sru.de MPIMG 619151497Sru. nr www-image-just 1 620151497Sru. nr www-image-gap 0 621151497Sru. while (\\n[.$] > 0) \{\ 622151497Sru. if '-L'\\$1' \{\ 623151497Sru. nr www-image-just 1 624151497Sru. shift 625151497Sru. continue 626151497Sru. \} 627151497Sru. if '-R'\\$1' \{\ 628151497Sru. nr www-image-just 0 629151497Sru. shift 630151497Sru. continue 631151497Sru. \} 632151497Sru. if '-G'\\$1' \{\ 633151497Sru. nr www-image-gap \\$2 634151497Sru. nr www-htmlimage-gap (\\$2 * 100 / 240) 635151497Sru. shift 2 636151497Sru. continue 637151497Sru. \} 638151497Sru. break 639151497Sru. \} 640151497Sru. 641104862Sru. nr www-width 1i 642151497Sru. nr www-height 1i 643151497Sru. ds www-size-specs "width=\\n[www-width] height=\\n[www-height]\" 644151497Sru. ie !'\\$2'' \{\ 645151497Sru. nr www-is-absolute 0 646151497Sru. nr www-absolute 0 647151497Sru. ds www-percentage none\" 648151497Sru. www-handle-percent \\$2 www-is-absolute www-absolute www-percentage 649151497Sru. ie !\\n[www-is-absolute] \{\ 650151497Sru. \" percentage of linelength requested 651151497Sru. nr www-width (\\n[www-absolute] * \\n[.l] / 100) 652151497Sru. if \\n[www-html] \ 653151497Sru. nr www-width (\\n[www-width] * 100 / 240) 654151497Sru. ds www-size-specs "width=\\*[www-percentage]\" 655151497Sru. \} 656151497Sru. el \{\ 657151497Sru. nr www-width \\n[www-absolute] 658151497Sru. if \\n[www-html] \ 659151497Sru. nr www-width (\\n[www-width] * 100 / 240) 660151497Sru. ds www-size-specs "width=\\n[www-width]\" 661151497Sru. \} 662151497Sru. 663151497Sru. nr www-height \\n[www-width] 664151497Sru. ie !'\\$3'' \{\ 665151497Sru. nr www-is-absolute 0 666151497Sru. nr www-absolute 0 667151497Sru. ds www-percentage none\" 668151497Sru. www-handle-percent \\$3 www-is-absolute www-absolute www-percentage 669151497Sru. ie !\\n[www-is-absolute] \{\ 670151497Sru. \" percentage of pagelength requested 671151497Sru. nr www-height (\\n[www-absolute] * \\n[.p] / 100) 672151497Sru. if \\n[www-html] \ 673151497Sru. nr www-height (\\n[www-height] * 100 / 240) 674151497Sru. ds www-size-specs "\\*[www-size-specs] height=\\*[www-percentage]\" 675151497Sru. \} 676151497Sru. el \{\ 677151497Sru. nr www-height \\n[www-absolute] 678151497Sru. if \\n[www-html] \ 679151497Sru. nr www-height (\\n[www-height] * 100 / 240) 680151497Sru. ds www-size-specs "\\*[www-size-specs] height=\\*[www-height]\" 681151497Sru. \} 682151497Sru. \} 683151497Sru. \} 684151497Sru. el \{\ 685151497Sru. \" height not specified; use width value 686151497Sru. ie !\\n[www-is-absolute] \{\ 687151497Sru. \" percentage value 688151497Sru. ds www-size-specs "\\*[www-size-specs] height=\\*[www-percentage]\" 689151497Sru. nr www-height \\n[www-width] 690151497Sru. \} 691151497Sru. el \{\ 692151497Sru. ds www-size-specs "\\*[www-size-specs] height=\\*[www-width]\" 693151497Sru. nr www-height \\n[www-width] 694151497Sru. \} 695151497Sru. \} 696151497Sru. 697104862Sru. ie \\n[www-html] \{\ 698151497Sru. ie !\\n[www-image-just] \ 699151497Sru. HTML <img src="\\$1" alt="Image \\$1" hspace=\\n[www-htmlimage-gap] \ 700151497Sru align=right \\*[www-size-specs]> 701104862Sru. el \ 702151497Sru. HTML <img src="\\$1" alt="Image \\$1" hspace=\\n[www-htmlimage-gap] \ 703151497Sru align=left \\*[www-size-specs]> 70475584Sru. \} 705104862Sru. el \{\ 706151497Sru. tm www-width is \\n[www-width] 707151497Sru. tm www-height is \\n[www-height] 708104862Sru. if !r ps4html \{\ 709104862Sru. www-make-unique-name 710151497Sru. sy pngtopnm \\$1 | pnmcrop -white | @PNMTOPS_NOSETPAGE@ -noturn > \\*[www-unique-name].eps 711151497Sru. ie !\\n[www-image-just] \{\ 712104862Sru. \" we must now disable a possible left image trap 713104862Sru. sp -1 714104862Sru. if (\\n[www-left-ll-trap] > 0) \ 715104862Sru. wh \\n[www-left-ll-trap]u 716104862Sru. if (\\n[www-left-po-trap] > 0) \ 717104862Sru. wh \\n[www-left-po-trap]u 718151497Sru. PSPIC -R \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u 719104862Sru. sp -\\n[ps-desht]u 720104862Sru. nr www-right-indent \\n[ps-deswid]u 721151497Sru. \" we want to have some space between text and image, 722151497Sru. \" so the line length must be shorter 723151497Sru. ll -(\\n[www-right-indent]u + \\n[www-image-gap]u) 724104862Sru. mk www-right-ll-trap 725104862Sru. nr www-right-ll-trap +(\\n[ps-desht]u - 1v) 726104862Sru. wh \\n[www-right-ll-trap]u www-finish-right-ll 727104862Sru. \" now restore possible left trap 728104862Sru. if (\\n[www-left-ll-trap] > 0) \ 729104862Sru. wh \\n[www-left-ll-trap]u www-finish-left-ll 730104862Sru. if (\\n[www-left-po-trap] > 0) \ 731104862Sru. wh \\n[www-left-po-trap]u 732104862Sru. \} 733104862Sru. el \{\ 734104862Sru. \" we must now disable a possible right image trap 735104862Sru. if (\\n[www-right-ll-trap] > 0) \ 736104862Sru. wh \\n[www-right-ll-trap]u 737151497Sru. PSPIC -L \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u 738104862Sru. sp -\\n[ps-desht]u 739104862Sru. nr www-left-indent \\n[ps-deswid]u 740151497Sru. \" increase offset by gap 741151497Sru. po +(\\n[www-left-indent]u + \\n[www-image-gap]u) 742151497Sru. \" decrease line length by gap 743151497Sru. ll -(\\n[www-left-indent]u + \\n[www-image-gap]u) 744104862Sru. mk www-left-ll-trap 745104862Sru. nr www-left-ll-trap +(\\n[ps-desht]u - 1v) 746104862Sru. wh \\n[www-left-ll-trap]u www-finish-left-ll 747104862Sru. \" now restore possible right trap 748104862Sru. if (\\n[www-right-ll-trap] > 0) \ 749104862Sru. wh \\n[www-right-ll-trap]u www-finish-right-ll 750104862Sru. \} 751104862Sru. \} 752104862Sru. \} 75375584Sru.. 754114402Sru.\" -------------------------------------------------------------------- 755104862Sru.\" HnS n 75675584Sru.\" 757104862Sru.\" Begin heading. Heading level is N. 758104862Sru.\" 759104862Sru.\" HnE 760104862Sru.\" 761104862Sru.\" End heading. 762104862Sru.\" 763104862Sru.\" If your heading contains URL, FTP, MTO macros you might wish to 764104862Sru.\" disable automatic links to headings. This can be done via `-P-l' 765104862Sru.\" from the command line or by using a cakk to `.HX 0'. 766104862Sru.\" 767104862Sru.nr www-heading-no -1 768104862Sru. 769104862Sru.de HnS 770104862Sru. ie '\\$1'' \ 771104862Sru. nr www-heading-no 1 772104862Sru. el \ 773104862Sru. nr www-heading-no \\$1 774151497Sru. DEVTAG-NH \\n[www-heading-no] 77575584Sru.. 776104862Sru. 777104862Sru.de HnE 778104862Sru. if (\\n[www-heading-no] == -1) \ 779104862Sru. www-error "HnE found without a corresponding HnS" 780151497Sru. DEVTAG-EO-H 781104862Sru.. 782114402Sru.\" -------------------------------------------------------------------- 783104862Sru.\" LK 78475584Sru.\" 785104862Sru.\" Emit the automatically collected links derived from 786104862Sru.\" section/numbered headings at this position. 787104862Sru.\" 788104862Sru.de LK 789151497Sru. DEVTAG ".links" 790104862Sru.. 791114402Sru.\" -------------------------------------------------------------------- 792104862Sru.\" HR 793104862Sru.\" 794151497Sru.\" Produce a horizontal line. 795104862Sru.\" 796104862Sru.de HR 797151497Sru. HTML</p> "<hr>" 798104862Sru.. 799114402Sru.\" -------------------------------------------------------------------- 800104862Sru.\" NHR 801104862Sru.\" 802104862Sru.\" Suppresses the generation of the top and bottom rules which grohtml 803104862Sru.\" emits by default. 804104862Sru.\" 805104862Sru.de NHR 806151497Sru. DEVTAG ".no-auto-rule" 807104862Sru.. 808104862Sru.\" 809104862Sru.\" www-end-nowhere - end of input trap called to finish diversion. 810104862Sru.\" 811104862Sru.de www-end-nowhere 812151497Sru. if !\\n[www-html] \ 813151497Sru. di 814151497Sru. DEVTAG-EO-TL 815104862Sru.. 816114402Sru.\" -------------------------------------------------------------------- 817104862Sru.\" HTL 818104862Sru.\" 819104862Sru.\" Generate an HTML title only. This differs from the -ms .TL macro 820151497Sru.\" which generates both an HTML title and an H1 heading. 821104862Sru.\" 822104862Sru.\" This is useful when an author wishes to use a HTML title as search 823104862Sru.\" engine fodder but a graphic title in the document. 824104862Sru.\" 825104862Sru.\" The macro terminates when a space or break is seen (.sp, .br). 826104862Sru.\" 827104862Sru.de HTL 828151497Sru. DEVTAG ".html-tl" 829151497Sru. if !\\n[www-html] \ 830104862Sru. di www-nowhere 831151497Sru. it 2 www-end-nowhere 832104862Sru.. 833104862Sru. 834114402Sru.\" -------------------------------------------------------------------- 835151497Sru.\" auxiliary definitions for lists 836114402Sru.\" 837151497Sru.ds www-ul-level1 \[bu]\ \ \" 838151497Sru.ds www-ul-level2 \[sq]\ \ \" 839151497Sru.ds www-ul-level3 \[ci]\ \ \" 840151497Sru.nr www-ul-level 0 841151497Sru. 842151497Sru.ds www-ol-level1 decimal\" 843151497Sru.ds www-ol-level2 lower-alpha\" 844151497Sru.ds www-ol-level3 lower-roman\" 845151497Sru.ds www-ol-tmp 00\ \ \" 846151497Sru.nr www-ol-ctr1 0 1 847151497Sru.nr www-ol-ctr2 0 1 848151497Sru.nr www-ol-ctr3 0 1 849151497Sru.af www-ol-ctr2 a 850151497Sru.af www-ol-ctr3 i 851151497Sru.nr www-ol-level 0 852151497Sru. 853151497Sru.nr www-dl-level 0 854151497Sru.nr www-dl-shift 5n 855151497Sru. 856151497Sru.\" 857151497Sru.\" allow nested lists 858151497Sru.\" 859104862Sru.nr www-depth 0 860151497Sru.nr www-li-indent \n[.i] 861151497Sru.ds www-level0 nop\" 862151497Sru.ds www-level1 863151497Sru.ds www-level2 864151497Sru.ds www-level3 865151497Sru.ds www-level4 866151497Sru.ds www-level5 867151497Sru.ds www-level6 868151497Sru.ds www-level7 869151497Sru.ds www-level8 870151497Sru.ds www-level9 871104862Sru. 872151497Sru.\" which macro to use for LI 873151497Sru.de www-push-li 874151497Sru. nr www-depth +1 875151497Sru. ds www-level\\n[www-depth] \\$1\" 876151497Sru. als LI \\$1 877151497Sru.. 878151497Sru. 879151497Sru.de www-pop-li 880151497Sru. nr www-depth -1 881151497Sru. als LI \\*[www-level\\n[www-depth]] 882151497Sru.. 883151497Sru. 884104862Sru.\" 885104862Sru.\" Auxiliary macro for ULS. 886104862Sru.\" 887151497Sru.de www-push-ul-level 888151497Sru. nr www-ul-level +1 889151497Sru. if (\\n[www-ul-level] > 3) \ 890151497Sru. www-error "ULS: too many levels of indentation (\\n[www-ul-level])" 891104862Sru.. 892104862Sru.\" 893104862Sru.\" Auxiliary macro for ULE. 894104862Sru.\" 895151497Sru.de www-pop-ul-level 896151497Sru. if !\\n[www-ul-level] \ 897151497Sru. www-error "ULE: trying to terminate a list which does not exist" 898151497Sru. nr www-ul-level -1 899104862Sru.. 900151497Sru. 901151497Sru.\" 902151497Sru.\" Auxiliary macro for OLS. 903151497Sru.\" 904151497Sru.de www-push-ol-level 905151497Sru. nr www-ol-level +1 906151497Sru. if (\\n[www-ol-level] > 3) \ 907151497Sru. www-error "OLS: too many levels of indentation (\\n[www-ol-level])" 908151497Sru.. 909151497Sru.\" 910151497Sru.\" Auxiliary macro for OLE. 911151497Sru.\" 912151497Sru.de www-pop-ol-level 913151497Sru. if !\\n[www-ol-level] \ 914151497Sru. www-error "OLE: trying to terminate a list which does not exist" 915151497Sru. nr www-ol-level -1 916151497Sru.. 917151497Sru. 918114402Sru.\" -------------------------------------------------------------------- 919104862Sru.\" ULS 920104862Sru.\" 921104862Sru.\" Start an unordered list. 922104862Sru.\" 923104862Sru.de ULS 924151497Sru. www-push-li www-li-ul 925151497Sru. www-push-ul-level 926104862Sru. ie \\n[www-html] \ 927151497Sru. HTML</p> "<ul>" 92875584Sru. el \{\ 929151497Sru. nr www-li-indent +\w'\\*[www-ul-level\\n[www-ul-level]]'u 93075584Sru. \} 93175584Sru.. 932114402Sru.\" -------------------------------------------------------------------- 933104862Sru.\" ULE 934104862Sru.\" 935104862Sru.\" End an unordered list. 936104862Sru.\" 937104862Sru.de ULE 938104862Sru. ie \\n[www-html] \ 939104862Sru. HTML "</ul>" 940104862Sru. el \{\ 941151497Sru. nr www-li-indent -\w'\\*[www-ul-level\\n[www-ul-level]]'u 942151497Sru. in \\n[www-li-indent]u 94375584Sru. \} 944151497Sru. www-pop-ul-level 945151497Sru. www-pop-li 94675584Sru.. 947114402Sru.\" -------------------------------------------------------------------- 948151497Sru.\" OLS 949151497Sru.\" 950151497Sru.\" Start an ordered list. 951151497Sru.\" 952151497Sru.de OLS 953151497Sru. www-push-li www-li-ol 954151497Sru. www-push-ol-level 955151497Sru. ie \\n[www-html] \ 956151497Sru. HTML</p> "<ol style='list-style-type: \\*[www-ol-level\\n[www-ol-level]]'>" 957151497Sru. el \ 958151497Sru. nr www-li-indent +\w'\\*[www-ol-tmp]'u 959151497Sru.. 960151497Sru.\" -------------------------------------------------------------------- 961151497Sru.\" OLE 962151497Sru.\" 963151497Sru.\" End an ordered list. 964151497Sru.\" 965151497Sru.de OLE 966151497Sru. ie \\n[www-html] \ 967151497Sru. HTML "</ol>" 968151497Sru. el \{\ 969151497Sru. nr www-li-indent -\w'\\*[www-ol-tmp]'u 970151497Sru. in \\n[www-li-indent]u 971151497Sru. nr www-ol-ctr\\n[www-ol-level] 0 1 972151497Sru. \} 973151497Sru. www-pop-ol-level 974151497Sru. www-pop-li 975151497Sru.. 976151497Sru.\" -------------------------------------------------------------------- 977151497Sru.\" 978151497Sru.\" DLS 979151497Sru.\" Start a definition list. 980151497Sru.\" 981151497Sru.de DLS 982151497Sru. www-push-li www-li-dl 983151497Sru. nr www-dl-level +1 984151497Sru. ie \\n[www-html] \ 985151497Sru. HTML</p> "<dl>" 986151497Sru. el \{\ 987151497Sru. nr www-li-indent +\\n[www-dl-shift]u 988151497Sru. in \\n[www-li-indent]u 989151497Sru. \} 990151497Sru.. 991151497Sru.\" -------------------------------------------------------------------- 992151497Sru.\" 993151497Sru.\" DLE 994151497Sru.\" End a definition list. 995151497Sru.\" 996151497Sru.de DLE 997151497Sru. ie \\n[www-html] \ 998151497Sru. HTML "</dl>" 999151497Sru. el \{\ 1000151497Sru. nr www-li-indent -\\n[www-dl-shift]u 1001151497Sru. in \\n[www-li-indent]u 1002151497Sru. \} 1003151497Sru. nr www-dl-level -1 1004151497Sru. www-pop-li 1005151497Sru.. 1006151497Sru.\" -------------------------------------------------------------------- 1007104862Sru.\" LI 1008104862Sru.\" 1009104862Sru.\" Insert a list item. 1010104862Sru.\" 1011151497Sru.\" ******** 1012151497Sru.\" www-li-ul - bulleted list item 1013151497Sru.\" 1014151497Sru.de www-li-ul 1015104862Sru. ie \\n[www-html] \ 1016151497Sru. HTML-NS "<li>" 1017104862Sru. el \{\ 1018151497Sru. www:paraspace 1019151497Sru. in \\n[www-li-indent]u 1020151497Sru. ti -\w'\\*[www-ul-level\\n[www-ul-level]]'u 1021151497Sru. nop \\*[www-ul-level\\n[www-ul-level]]\c 1022104862Sru. \} 102375584Sru.. 1024151497Sru.\" ******** 1025151497Sru.\" www-li-ol - numbered list item 1026151497Sru.\" 1027151497Sru.de www-li-ol 1028151497Sru. ie \\n[www-html] \ 1029151497Sru. HTML-NS "<li>" 1030151497Sru. el \{\ 1031151497Sru. www:paraspace 1032151497Sru. in \\n[www-li-indent]u 1033151497Sru. ti -\w'\\n[www-ol-ctr\\n[www-ol-level]]\ \ 'u 1034151497Sru. nop \\n+[www-ol-ctr\\n[www-ol-level]]\ \ \c 1035151497Sru. \} 1036151497Sru.. 1037151497Sru.\" ******** 1038151497Sru.\" www-li-dl - definition list item 1039151497Sru.\" 1040151497Sru.de www-li-dl 1041151497Sru. ie \\n[www-html] \{\ 1042151497Sru. HTML "<dt>\\$1</dt>" 1043151497Sru. HTML-NS "<dd>" 1044151497Sru. \} 1045151497Sru. el \{\ 1046151497Sru. www:paraspace 1047151497Sru. in \\n[www-li-indent]u 1048151497Sru. ti -\\n[www-dl-shift]u 1049151497Sru. nop \&\\$1 1050151497Sru. br 1051151497Sru. \} 1052151497Sru.. 1053114402Sru.\" -------------------------------------------------------------------- 1054104862Sru.\" DC l text [color] 1055104862Sru.\" 1056104862Sru.\" L is the letter to be dropped and enlarged. 1057104862Sru.\" 1058104862Sru.\" TEXT is the following text whose height the first letter should not 1059104862Sru.\" exceed. 1060104862Sru.\" 1061104862Sru.\" COLOR is the optional color of the dropped letter (default black). 1062104862Sru.\" 1063104862Sru.de DC 1064104862Sru. ds www-dropcolor black 1065104862Sru. if !'\\$3'' \ 1066104862Sru. ds www-dropcolor \\$3 1067104862Sru. ie '\*(.T'html' \{\ 1068104862Sru. www-make-unique-name 1069151497Sru. nr www-drop-width (100u * \\n[.v]u * 3u / \\n[.l]u) 1070151497Sru. MPIMG -L \\*[www-unique-name].png "\\n[www-drop-width]%" 1071104862Sru. \} 1072104862Sru. el \{\ 1073104862Sru. ie r ps4html \{\ 1074104862Sru. www-make-unique-name 1075114402Sru. \" To avoid interferences with another DC macro call which is located 1076114402Sru. \" very near to the current one, we draw the glyph on a separate page. 1077114402Sru. \" Otherwise it could theoretically happen that the dropped capital 1078114402Sru. \" glyphs overlap. 1079114402Sru. bp 1080114402Sru. ev www-DC 1081151497Sru. vs 320p 1082104862Sru. nop \O[5i\\*[www-unique-name].png]\O[1] 1083151497Sru. nop \m[\\*[www-dropcolor]]\s[160]\O[3]\\$1\O[4] 1084114402Sru. nop \O[2]\O[0] 1085114402Sru. br 1086114402Sru. ev 1087114402Sru. bp 1088104862Sru. \} 1089104862Sru. el \{\ 1090151497Sru. ie n \ 1091151497Sru. nop \\$1\c 1092151497Sru. el \{\ 1093151497Sru. nr dummy \w'\\$1'u 1094151497Sru. nr dcht ((\\n[.v] + \\n[rst]) * \\n[.ps] / \\n[rst]) 1095151497Sru. char \[dcap] \m[\\*[www-dropcolor]]\s'\\n[dcht]u'\\$1 1096151497Sru. nop \v'\\n[.v]u'\\[dcap]\v'-\\n[.v]u'\c 1097151497Sru' ti \w'\\[dcap]'u 1098151497Sru. \} 1099104862Sru. \} 1100104862Sru. \} 1101104862Sru. nop \\$2 110275584Sru.. 1103114402Sru.\" -------------------------------------------------------------------- 1104114402Sru.\" Setup around HTML-IMAGE and friends 110575584Sru.\" 1106104862Sru.\" now set up TS, TE, EQ, EN default macros 110775584Sru.\" 1108104862Sru.do if !d TS .do ds TS HTML-IMAGE 1109104862Sru.do if !d TE .do ds TE HTML-IMAGE-END 1110104862Sru.do if !d EQ .do ds EQ HTML-IMAGE 1111104862Sru.do if !d EN .do ds EN HTML-IMAGE-END 1112104862Sru.\" 1113104862Sru.\" supplementary macros used by other macro sets 1114104862Sru.\" 1115114402Sru.\" here are some tags specially for -Tps or -Thtml when invoked by 1116114402Sru.\" pre-html to generate png images from postscript. 1117114402Sru. 1118114402Sru.\" -------------------------------------------------------------------- 111975584Sru.\" HTML-DO-IMAGE - tells troff to issue an image marker which can be 112075584Sru.\" read back by pre-html 112175584Sru.\" 112275584Sru.de HTML-DO-IMAGE 1123104862Sru. if r ps4html \ 1124104862Sru. nop \O[5\\$2\\$1.png]\O[1]\O[3] 1125104862Sru. if \\n[www-html] \ 1126104862Sru. nop \O[5\\$2\\$1.png]\O[0]\O[3] 112775584Sru.. 1128114402Sru.\" -------------------------------------------------------------------- 112975584Sru.\" HTML-IMAGE-END - terminates an image for html 113075584Sru.\" 113175584Sru.de HTML-IMAGE-END 1132104862Sru. if r ps4html \ 1133104862Sru. nop \O[4]\O[2]\O[0] 1134104862Sru. if \\n[www-html] \ 1135104862Sru. nop \O[4]\O[2]\O[1] 113675584Sru.. 1137104862Sru. 1138104862Sru.nr www-png-no 0 1139104862Sru. 1140114402Sru.\" -------------------------------------------------------------------- 1141104862Sru.\" www-make-unique-name - generates another unique name in string 1142104862Sru.\" `www-unique-name' 114375584Sru.\" 1144104862Sru.de www-make-unique-name 1145104862Sru. nr www-png-no +1 1146104862Sru. ds www-unique-name \\*[www-image-template]\\n[www-png-no] 114775584Sru.. 1148114402Sru.\" -------------------------------------------------------------------- 1149104862Sru.\" HTML-IMAGE and friends tell grohtml that this region of text needs 1150104862Sru.\" to be rendered as an image. 115175584Sru.\" 115275584Sru.de HTML-IMAGE 1153104862Sru. \" generates a centered image 1154104862Sru. www-make-unique-name 1155104862Sru. HTML-DO-IMAGE \\*[www-unique-name] c 115675584Sru.. 1157104862Sru. 115875584Sru.de HTML-IMAGE-RIGHT 1159104862Sru. www-make-unique-name 1160104862Sru. HTML-DO-IMAGE \\*[www-unique-name] r 116175584Sru.. 1162104862Sru. 116375584Sru.de HTML-IMAGE-LEFT 1164104862Sru. www-make-unique-name 1165104862Sru. HTML-DO-IMAGE \\*[www-unique-name] l 116675584Sru.. 1167104862Sru. 116875584Sru.de HTML-IMAGE-INLINE 1169104862Sru. www-make-unique-name 1170104862Sru. HTML-DO-IMAGE \\*[www-unique-name] i 117175584Sru.. 1172104862Sru. 1173114402Sru.\" -------------------------------------------------------------------- 1174151497Sru.\" JOBNAME 1175151497Sru.\" 1176151497Sru.\" Generate multiple output files containing the html. 1177151497Sru.\" A file is split whenever a .SH or .NH 1 is encountered. 1178151497Sru.\" The argument to JOBNAME is the file stem for future output files. 1179151497Sru.\" 1180151497Sru.de JOBNAME 1181151497Sru. DEVTAG .job-name \\$1 1182151497Sru.. 1183151497Sru.\" -------------------------------------------------------------------- 1184151497Sru.\" HEAD 1185151497Sru.\" 1186151497Sru.\" Adds information to the <head> </head> section of the html 1187151497Sru.\" document 1188151497Sru.\" -------------------------------------------------------------------- 1189151497Sru.de HEAD 1190151497Sru. DEVTAG .head "\\$*" 1191151497Sru.. 1192151497Sru.\" -------------------------------------------------------------------- 1193114402Sru.\" Final Setup 1194114402Sru.\" -------------------------------------------------------------------- 1195114402Sru. 119679543Sru.if \n[www-html] \{\ 119779543Sru. nh 119879543Sru. nr HY 0 119979543Sru.\} 1200114402Sru. 1201114402Sru.\" 1202114402Sru.\" start of some code 1203114402Sru.\" 1204114402Sru. 1205114402Sru.de CDS 1206114402Sru.ft C 1207114402Sru.nf 1208114402Sru.. 1209114402Sru.\" 1210114402Sru.\" end of some code 1211114402Sru.\" 1212114402Sru. 1213114402Sru.de CDE 1214114402Sru.fi 1215114402Sru.ft P 1216114402Sru.. 1217114402Sru. 1218104862Sru.if r ps4html .nop \O[0] 121975584Sru.cp \n(_C 1220104862Sru. 1221114402Sru.\" now set 1222114402Sru. 1223114402Sru.\" -------------------------------------------------------------------- 1224114402Sru.\" Emacs settings 1225114402Sru.\" -------------------------------------------------------------------- 1226114402Sru. 1227114402Sru.\" Local Variables: 1228114402Sru.\" mode: nroff 1229114402Sru.\" End: 1230104862Sru.\" EOF 1231