plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

htmlroff.7 (6166B)


      1 .TH HTMLROFF 7
      2 .SH NAME
      3 htmlroff \- HTML formatting and typesetting
      4 .SH DESCRIPTION
      5 .MR Htmlroff (1)
      6 accepts 
      7 .I troff
      8 input with a few extensions and changes.
      9 This manual describes the changes to the input language,
     10 assuming a working knowledge of
     11 .I troff
     12 itself.
     13 .SS Name lengths
     14 .PP
     15 Request, macro, string, and number names can be longer
     16 than two letters, as in:
     17 .IP
     18 .EX
     19 \&.html c <center>
     20 \&.de footnote
     21 Footnote here.
     22 \&..
     23 \&.footnote
     24 \&.ds string "hello
     25 \&\e*[string]
     26 \&.nr number 1
     27 \&\en[number]
     28 .EE
     29 .SS HTML output
     30 .PP
     31 Two new requests:
     32 .IP
     33 .EX
     34 \&.html \fIid\fP \fR[ \fI<html>\fP ]\fL
     35 \&.ihtml \fIid\fP \fR[ \fI<ihtml>\fP ]\fL
     36 .EE
     37 .LP
     38 .B .html
     39 and
     40 .B .ihtml
     41 insert HTML into the output.
     42 The requests are only for opening new HTML tags.
     43 To close previously-opened tags, repeat the request
     44 with the same
     45 .IR id .
     46 For example, the input:
     47 .IP
     48 .EX
     49 \&.html t <table><tr>
     50 \&.html td <td>Cell 1
     51 \&.html td <td>Cell 2
     52 \&.html td
     53 \&.html t
     54 .EE
     55 .LP
     56 produces this output:
     57 .IP
     58 .EX
     59 <table><tr><td>Cell 1</td><td>Cell 2</td></tr></table>
     60 .EE
     61 .LP
     62 The
     63 .B .html
     64 request is intended for block-level HTML constructs (those that can contain
     65 .BR <p> )
     66 and maintains the HTML tag stack automatically.
     67 Intermediate tags need not be explicitly closed:
     68 removing the final
     69 .B \&.html t
     70 line in the example above would produce the same output.
     71 The special
     72 .I id
     73 .L -
     74 closes the HTML tags immediately after printing them.
     75 .PP
     76 The
     77 .B .ihtml
     78 request is similar to
     79 .B .html
     80 but is intended for inline HTML constructs such as
     81 .B <b>
     82 or
     83 .B <i>
     84 (those that can be contained
     85 within 
     86 .BR <p> ).
     87 Unlike
     88 .BR .html ,
     89 .B .ihtml
     90 treats the open HTML tags as a set rather than a stack:
     91 each must be explicitly closed.
     92 Although it treats the tags as a set, 
     93 .B .ihtml
     94 treats nesting properly in the output,
     95 closing and reopening tags as necessary.
     96 For example, the input:
     97 .IP
     98 .EX
     99 \&.ihtml style <b>
    100 \&.ihtml link <a href="link.html">
    101 Bold
    102 \&.ihtml style <i>
    103 and italic, still linked.
    104 \&.ihtml link <a>
    105 Unlinked.
    106 \&.ihtml style
    107 .EE
    108 .LP
    109 produces this output:
    110 .IP
    111 .EX
    112 <b><a href="link.html">Bold</a></b>
    113 <i><a href="link.html">and italic, still linked.</i></a>
    114 <i>Unlinked.</i>
    115 .EE
    116 .PP
    117 Outside of
    118 .B .html
    119 and
    120 .B .ihtml
    121 requests, the characters
    122 .L < ,
    123 .L > ,
    124 and
    125 .L &
    126 are treated as normal characters, not HTML markers,
    127 and are translated to
    128 .L &lt; ,
    129 .L &gt; ,
    130 and
    131 .L &amp;
    132 on output.
    133 To embed the raw HTML markers, use
    134 .L \e< ,
    135 .L \e> ,
    136 and
    137 .L \e@
    138 .RI [ sic ].
    139 .SS Font changes
    140 .PP
    141 .I Htmlroff
    142 interprets the usual 
    143 .BR \ef ,
    144 .BR .ft ,
    145 .BR \es ,
    146 and
    147 .B .ps
    148 requests to change the font and point size.
    149 After applying each such change to its internal registers,
    150 .I htmlroff
    151 invokes the
    152 .B .font
    153 macro to emit corresponding HTML.
    154 The default definition of
    155 .B .font
    156 is:
    157 .IP
    158 .EX
    159 \&.de font
    160 \&.ihtml f1
    161 \&.ihtml f
    162 \&.ihtml f <span style=\"font-size=\\n(.spt\">
    163 \&.if \\n(.f==2 .ihtml f1 <i>
    164 \&.if \\n(.f==3 .ihtml f1 <b>
    165 \&.if \\n(.f==4 .ihtml f1 <b><i>
    166 \&.if \\n(.f==5 .ihtml f1 <tt>
    167 \&.if \\n(.f==6 .ihtml f1 <tt><i>
    168 \&..
    169 .EE
    170 .LP
    171 Input files can redefine
    172 .B .font
    173 like any other request or macro.
    174 .SS Paragraphs
    175 .I Htmlroff
    176 implements line height, text adjustment, and margins by 
    177 wrapping all output text in 
    178 .B <p style="...">
    179 tags.
    180 This behavior can be disabled by setting the
    181 .B .paragraph
    182 number register to zero.
    183 Setting the
    184 .B .margin
    185 register to zero
    186 eliminates only the margin annotations.
    187 .SS Subscripts and superscripts
    188 .PP
    189 .I Htmlroff
    190 interprets the
    191 .BR \eu ,
    192 .BR \ed ,
    193 and
    194 .BR \ev 
    195 requests to move vertically during output.
    196 It emits output vertically offset up the page inside
    197 .B <sup>
    198 tags and output vertically offset down the page 
    199 inside
    200 .B <sub>
    201 tags.  
    202 This heuristic handles simple equations formatted by
    203 .MR eqn (1) .
    204 .SS Conditional input
    205 .PP
    206 To make it easier to write input files that can be formatted by both
    207 .I troff
    208 and
    209 .IR htmlroff ,
    210 .I htmlroff
    211 adds a new condition
    212 .B h
    213 which evaluates true in
    214 .B .if
    215 and
    216 .B .ie
    217 requests.
    218 The
    219 .B t
    220 condition continues to evaluate true, to accomodate 
    221 input files trying to distinguish between
    222 .I troff
    223 and
    224 .IR nroff .
    225 To write a conditional matching
    226 .I troff
    227 alone, use
    228 .RB ` ".if !h .if t" '.
    229 .PP
    230 .I Htmlroff 's
    231 handling of conditional input does not match
    232 .IR troff 's
    233 exactly.
    234 For example,
    235 .IP
    236 .EX
    237 \&.if 0 \e{\e
    238 \&.de xx
    239 \&..
    240 \&.\e}
    241 .EE
    242 .LP
    243 redefines the
    244 .B xx
    245 macro in 
    246 .I troff
    247 but not in
    248 .IR htmlroff .
    249 Do not write files depending on this behavior, as this bug may be fixed
    250 in the future.
    251 .I Htmlroff
    252 also mishandles
    253 .B \e}
    254 in some cases.  To work around them, use
    255 .B .\e}
    256 on a line by itself, as in the last example.
    257 .SS Diversions
    258 .PP
    259 Diversions in 
    260 .I htmlroff
    261 use the alignment in effect at the time of the
    262 diversion
    263 when output.
    264 In particular,
    265 .IP
    266 .EX
    267 \&.di xx
    268 Line here.
    269 \&.di
    270 \&.nf
    271 \&.ce 
    272 \&.xx
    273 .EE
    274 .LP
    275 produces a centered line in 
    276 .I troff
    277 but not in 
    278 .IR htmlroff .
    279 The solution is to center inside the diversion, as in
    280 .IP
    281 .EX
    282 \&.di xx
    283 \&.if h .ce 999
    284 Line here
    285 \&.di
    286 .EE
    287 .SS Input pipes
    288 .PP
    289 .I Htmlroff
    290 adds a new request
    291 .B .inputpipe
    292 .I stop
    293 .I cmd
    294 that redirects
    295 .I htmlroff 's
    296 input into a pipe to the
    297 given 
    298 .I cmd .
    299 The redirection stops on encountering the line
    300 .IR stop ,
    301 optionally followed by white space and extra text.
    302 This is a dangerous and clusmy request, as 
    303 .I htmlroff
    304 stops interpreting its input during the redirection, so
    305 .I stop
    306 must be found in the input itself, not in a macro that
    307 the input might appear to call.
    308 Although clusmy,
    309 .B .inputpipe
    310 allows input files to invoke
    311 .I troff
    312 to handle complicated input.
    313 For example, 
    314 .B tmac.html
    315 redefines the
    316 .B PS
    317 macro that marks the beginning of a
    318 .MR pic (1)
    319 picture:
    320 .IP
    321 .EX
    322 \&.nr png -1 1
    323 \&.de PS
    324 \&.ds pngbase "\e\e*[basename]
    325 \&.if '\e\e*[pngbase]'' .ds pngbase \e\en(.B
    326 \&.ds pngfile \e\e*[pngbase]\e\en+[png].png
    327 \&.html - <center><img src="\e\e*[pngfile]"></center>
    328 \&.inputpipe .PE troff2png >\e\e*[pngfile]
    329 \&..
    330 .EE
    331 .LP
    332 This macro invokes the shell script
    333 .I troff2png
    334 to run troff and convert the Postscript
    335 output to a PNG image file.
    336 Before starting the program, the macro creates
    337 a new file name for the image and prints
    338 HTML referring to it.
    339 The new
    340 .B .B
    341 register holds the final path element
    342 (the base name) of the current input file.