Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/html/mm2html.sh
1808 views
1
########################################################################
2
# #
3
# This software is part of the ast package #
4
# Copyright (c) 1996-2012 AT&T Intellectual Property #
5
# and is licensed under the #
6
# Eclipse Public License, Version 1.0 #
7
# by AT&T Intellectual Property #
8
# #
9
# A copy of the License is available at #
10
# http://www.eclipse.org/org/documents/epl-v10.html #
11
# (with md5 checksum b35adb5213ca9657e911e9befb180842) #
12
# #
13
# Information and Software Systems Research #
14
# AT&T Research #
15
# Florham Park NJ #
16
# #
17
# Glenn Fowler <[email protected]> #
18
# #
19
########################################################################
20
: mm2html - convert mm/man/mandoc subset to html
21
22
# it keeps going and going ...
23
#
24
# \h'0*\w"URL"'HOT-TEXT\h'0' link goto with alternate url
25
# \h'0*1'HOT-TEXT\h'0' link goto
26
# \h'0/\w"LABEL"'TEXT\h'0' local link label with alternate text
27
# \h'0/1'LABEL\h'0' local link label
28
#
29
# .xx faq .VL is a FAQ list with all but current answer hidden
30
# .xx meta.NAME="CONTENT" <meta name="NAME" content="CONTENT">
31
# .xx label="LABEL" local link label request
32
# .xx link="URL\tHOT-TEXT" link goto with url request
33
# .xx linkframe="URL\tHOT-TEXT" link goto with url request (no target=_top)
34
# .xx link="HOT-TEXT" link goto request
35
# .xx linkframe="HOT-TEXT" link goto request (no target=_top)
36
# .xx ref="URL\tMIME-TYPE" head link hint
37
# .xx begin=internal begin internal text
38
# .xx end=internal end internal text
39
# .xx index=0|1 stop|reset header index
40
# .xx noFOO .xx FOO=0
41
#
42
# .sn file like .so but text copied to output
43
44
command=mm2html
45
version='mm2html (AT&T Research) 2012-01-11' # NOTE: repeated in USAGE
46
LC_NUMERIC=C
47
case $(getopts '[-][123:xyz]' opt --xyz 2>/dev/null; echo 0$opt) in
48
0123) ARGV0="-a $command"
49
USAGE=$'
50
[-?
51
@(#)$Id: mm2html (AT&T Research) 2012-02-29 $
52
]
53
'$USAGE_LICENSE$'
54
[+NAME?mm2html - convert mm/man/mandoc subset to html]
55
[+DESCRIPTION?\bmm2html\b is a \bsed\b(1)/\bksh\b(1) script (yes!) that
56
converts input \bmm\b(1) or \bman\b(1) documents to an \bhtml\b
57
document on the standard output. If \afile\a is omitted then the
58
standard input is read. \btroff2html\b(1) is similar but does a full
59
\btroff\b(1) parse. \adir\a operands and directory components of
60
\afile\a operands are added to the included file search list.]
61
[f:frame?Generate framed HTML files in:]:[name]
62
{
63
[+man documents]
64
{
65
[+\aname\a\b.html?The parent frame page.]
66
[+\aname\a\b-toc.html?The table of contents (link)
67
frame.]
68
[+\aname\a\b-man.html?The (also standalone) man page
69
frame.]
70
}
71
[+other documents]
72
{
73
[+\aname\a\b.html?The main body.]
74
[+\aname\a\b-index.html?The frame index (if \b--index\b
75
specified).]
76
[+\aname\a\b-temp.html?Temporary frame goto labels.]
77
}
78
}
79
[g:global-index?Generate a standalone \bindex.html\b for framed HTML.]
80
[h:html?Read html options from \afile\a. Unknown options are silently
81
ignored. See the \b.xx\b request below for a description of the
82
options. The file pathname may be followed by URL style \aname=value\a
83
pairs that are evaluated as if they came from
84
\afile.\a]:[file[??name=value;...]]]
85
[l:license?Read license identification options from \afile\a. Unknown
86
options are silently ignored. See the \b.xx\b request below for a
87
description of the options. The file pathname may be followed by URL
88
style \aname=value\a pairs that are evaluated as if they came from
89
\afile\a.]:[file[??name=value;...]]]
90
[o:option?Sets a space or \b,\b separated list of \b--license\b
91
options. Option values with embedded spaces must be
92
quoted.]:[[no]]name=value]
93
[t:top?Open non-local urls in the top frame.]
94
[x:index?Generate a standalone \aname\a\b-index.html\b for framed HTML
95
where \aname\a is specified by \b--frame\b.]
96
97
[ [ dir | file ] ... ]
98
99
[+EXTENSIONS?\b.xx\b \aname\a[=\avalue\a]] is a special \bmm2html\b
100
request that handles program tracing, \bhtml\b extensions and \atroff\a
101
macro package magic. Supported operations are:]
102
{
103
[+author=text?Specifies the contact information for the
104
document HEAD section.]
105
[+background=URL?Specifies the document background URL.]
106
[+logo=URL?Specifies the logo/banner image URL that is centered
107
at the top of the document.]
108
[+mailto=address?Sets the email \aaddress\a to send comments
109
and suggestions.]
110
[+meta.name?Emits the \bhtml\b tag \b<META name=\b\aname\a
111
\bcontent=\b\acontent\a\b>\b.]
112
[+package=text?\atext\a is prepended to the \bhtml\b document
113
title.]
114
[+title=text?Sets the document title.]
115
}
116
[+?Local URL links are generated for all top level headings. These can
117
be referenced by embedding the benign (albeit convoluted) \atroff\a
118
construct \\h'\'$'0*\\w\"label\"'\'$'text\\h'\'$'0'\'$', where
119
\alabel\a is the local link label and \atext\a is the hot link text. If
120
\alabel\a and \atext\a are the same then use
121
\\h'\'$'0*1'\'$'text\\h'\'$'0'\'$'.]
122
[+?\bman\b(1) links are generated for bold or italic identifiers that
123
are immediately followed by a parenthesized number.]
124
[+FILES]
125
{
126
[+$HOME/.2html?Default rendering info.]
127
}
128
[+SEE ALSO?\btroff2html\b(1), \bhtml2rtf\b(1)]
129
'
130
;;
131
*) ARGV0=""
132
USAGE='f:gh:l:o:tx [ file ... ]'
133
;;
134
esac
135
136
set -o noglob
137
138
integer count row n s ndirs=0 nfiles=0 last_level=0 IN=2 IS=2 man_SY=0
139
integer fd=0 head=2 line=0 lists=0 nest=0 peek=0 pp=0 so=0 soff=4 faq=0
140
integer labels=0 mark=4 reference=1 ident=0 ce=0 nf=0 augment=0 tbl_ns=0 tbl_no=1 tbl_fd=1
141
typeset -Z2 page=01
142
typeset -u upper
143
typeset -l OP
144
typeset -A ds map nr outline set tr
145
typeset cond dirs files fg frame label level prev text trailer
146
typeset license html meta nl mm index authors vg header references ss
147
typeset mm_AF mm_AF_cur mm_AF_old mm_AU tr_chars
148
typeset An_sep=-line Rs_sep='' Sh='' mm_H1='<P>'
149
typeset -a list type
150
151
nl=$'\n'
152
153
license=(
154
author=
155
)
156
html=(
157
BODY=(
158
bgcolor=#ffffff
159
)
160
TABLE=(
161
bgcolor=#ffd0d0
162
border=0
163
bordercolor=#ffffff
164
frame="void"
165
rules="none"
166
)
167
H1=(
168
align=center
169
)
170
FRAMESET=(
171
rows=80,*
172
border=0
173
frameborder=0
174
framespacing=0
175
)
176
home=(
177
href=
178
)
179
ident=1
180
index=(
181
left=
182
top=
183
)
184
labels=0
185
logo=(
186
src=
187
)
188
magic=(
189
plain='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">'
190
frame='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/1998/REC-html40-19980424/frameset.dtd">'
191
)
192
width=96%
193
)
194
195
code=0
196
figure=1
197
file=
198
font=
199
frame=
200
framebody=
201
framelink=
202
framerefs=
203
hung=
204
ifs=${IFS-$'\n\t'}
205
inch=" "
206
macros=
207
variant=
208
pd=
209
pm=
210
primary=".BL|.IX"
211
redirect_old=
212
redirect_new=
213
ss="verdana,arial,helvetica,geneva,sans-serif"
214
top=
215
vg_ps=20
216
217
function setmacros
218
{
219
case $1 in
220
man) mark=6
221
[[ ${set[html.labels]} ]] || html.labels=0
222
;;
223
*) mark=4
224
;;
225
esac
226
macros=$1
227
variant=$2
228
}
229
230
function options
231
{
232
typeset i o q v
233
IFS="${IFS},"
234
set $OPTARG
235
IFS=$ifs
236
for i
237
do case $q in
238
'') o=${i%%=*}
239
v=${i#*=}
240
case $v in
241
\'*) q=\'; v=${v#?}; continue ;;
242
\"*) q=\"; v=${v#?}; continue ;;
243
esac
244
;;
245
*) v="$v $i"
246
case $i in
247
*$q) v=${v%?} ;;
248
*) continue ;;
249
esac
250
;;
251
esac
252
case $o in
253
no*) o=${o#no}
254
unset $o
255
;;
256
*) case $v in
257
"") v=1 ;;
258
esac
259
case $o in
260
*.*|[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
261
eval $o="'$v'"
262
;;
263
*) eval license.$o="'$v'"
264
;;
265
esac
266
;;
267
esac
268
set[$o]=1
269
done
270
}
271
272
if [[ -f $HOME/.2html ]]
273
then . $HOME/.2html
274
fi
275
276
usage()
277
{
278
OPTIND=0
279
getopts $ARGV0 "$USAGE" OPT '-?'
280
exit 2
281
}
282
283
while getopts $ARGV0 "$USAGE" OPT
284
do case $OPT in
285
f) frame=$OPTARG
286
;;
287
g) index=global
288
;;
289
h) case $OPTARG in
290
*\?*) . ${OPTARG%%\?*} || exit 1
291
eval "html+=( ${OPTARG#*\?} )"
292
;;
293
*) . $OPTARG || exit 1
294
;;
295
esac
296
;;
297
l) case $OPTARG in
298
*\?*) . ${OPTARG%%\?*} || exit 1
299
eval "license+=( ${OPTARG#*\?} )"
300
;;
301
*) path=$PATH
302
[[ $OPTARG == */* ]] && PATH=${OPTARG%/*}:$PATH
303
. $OPTARG || exit 1
304
PATH=$path
305
;;
306
esac
307
;;
308
o) options "$OPTARG"
309
;;
310
t) top=1
311
;;
312
x) index=local
313
;;
314
*) usage
315
;;
316
esac
317
done
318
shift OPTIND-1
319
case $# in
320
1) file=$1
321
if [[ ! -f $file ]]
322
then print -u2 $command: $file: cannot read
323
exit 1
324
fi
325
x="-m $file"
326
;;
327
*) x=
328
;;
329
esac
330
331
HTMLPATH=
332
for i in $HOME ${PATH//:/ }
333
do d=${i%/bin}/lib/html
334
if [[ -d $d ]]
335
then if [[ -w $d || -x $i/$command ]]
336
then HTMLPATH=$HTMLPATH:$d
337
if [[ -x $i/$command ]]
338
then break
339
fi
340
fi
341
fi
342
done
343
HTMLPATH=${HTMLPATH#:}
344
345
ds[Cr]='&#169;'
346
ds[Dt]=$(date -f "%B %d, %Y" $x)
347
ds[Rf]="<FONT SIZE=-6>[$reference]</FONT>"
348
ds[Rg]='&#174;'
349
ds[CM]='&#169;'
350
ds[RM]='&#174;'
351
ds[SM]='<FONT SIZE=-6><B><SUP>SM</SUP></B></FONT>'
352
ds[TM]='<FONT SIZE=-6><B><SUP>TM</SUP></B></FONT>'
353
354
map[.Bd]=.EX
355
map[.Bsx]=.Ix
356
map[.Ce]=.EE
357
map[.Cs]=.EX
358
map[.Ed]=.EE
359
map[.Sh]=.SH
360
map[.Ss]=.SS
361
map[.Tp]=.TP
362
map[.TQ]=.TP
363
364
H=H$(( head + 1 ))
365
366
function warning
367
{
368
print -u2 "$command: warning: ${file:+"$file: "}line $line:" "$@"
369
}
370
371
function getfiles
372
{
373
sed \
374
-e 's%\\".*%%' \
375
-e 's%\\\.%.%g' \
376
-e 's%\\:%%g' \
377
-e 's%\\(>=%>=%g' \
378
-e 's%\\(<=%<=%g' \
379
-e 's%&%\&amp;%g' \
380
-e $'s%\xA2%\\&cent;%g' \
381
-e $'s%\xA3%\\&pound;%g' \
382
-e $'s%\xA7%\\&sect;%g' \
383
-e $'s%\xA9%\\&copy;%g' \
384
-e $'s%\xAE%\\&reg;%g' \
385
-e $'s%\xB6%\\&para;%g' \
386
-e 's%<%\&lt;%g' \
387
-e 's%>%\&gt;%g' \
388
-e 's%\[%\&#0091;%g' \
389
-e 's%\]%\&#0093;%g' \
390
-e 's%\\&amp;%<!--NULL-->%g' \
391
-e 's%\\'\''%'\''%g' \
392
-e 's%\\`%`%g' \
393
-e 's%\\-%\&#45;%g' \
394
-e 's%\\+%+%g' \
395
-e 's%\\0%\&nbsp;%g' \
396
-e 's%\\|%\&nbsp;%g' \
397
-e 's%\\\^%\&nbsp;%g' \
398
-e 's%\\ %\&nbsp;%g' \
399
-e 's%\\(+-%\&#177;%g' \
400
-e 's%\\(-%=%g' \
401
-e 's%\\(ap%~%g' \
402
-e 's%\\(bu%\&#183;%g' \
403
-e 's%\\(bv%|%g' \
404
-e 's%\\(co%\&#169;%g' \
405
-e 's%\\(dg%\&#167;%g' \
406
-e 's%\\(fm%'\''%g' \
407
-e 's%\\(rg%\&#174;%g' \
408
-e 's%\\(sq%\&#164;%g' \
409
-e 's%\\(\*\([*`'\'']\)%\1%g' \
410
-e 's%\\\*\([*`'\'']\)%\1%g' \
411
-e 's%\\d\([^\\]*\)\\u%<SUB>\1</SUB>%g' \
412
-e 's%\\u\([^\\]*\)\\d%<SUP>\1</SUP>%g' \
413
-e 's%\\v\(.\)-\([^\\]*\)\1\(.*\)\\v\1+*\2\1%<SUB>\3</SUB>%g' \
414
-e 's%\\v\(.\)+*\([^\\]*\)\1\(.*\)\\v\1-\2\1%<SUP>\3</SUP>%g' \
415
-e 's%\\h'\''0\*\\w"\([abcdefghijklmnopqrstuvwxyz]*:[^"]*\)"'\''\([^'\'']*\)\\h'\''0'\''%<A href="\1" target=_top>\2</A>%g' \
416
-e 's%\\h'\''0\*\\w"\(/[^"]*\)"'\''\([^'\'']*\)\\h'\''0'\''%<A href="\1" target=_top>\2</A>%g' \
417
-e 's%\\h'\''0\*\\w"\([^"]*\)"'\''\([^'\'']*\)\\h'\''0'\''%<A href="\1">\2</A>%g' \
418
-e 's%\\h'\''0\*1'\''\([^:/'\'']*\)\\h'\''0'\''%<A href="#\1">\1</A>%g' \
419
-e 's%\\h'\''0\*1'\''\([abcdefghijklmnopqrstuvwxyz]*:[^'\'']*\)\\h'\''0'\''%<A href="\1" target=_top>\1</A>%g' \
420
-e 's%\\h'\''0\*1'\''\(/[^'\'']*\)\\h'\''0'\''%<A href="\1" target=_top>\1</A>%g' \
421
-e 's%\\h'\''0\*1'\''\([^'\'']*\)\\h'\''0'\''%<A href="\1" target=_parent>\1</A>%g' \
422
-e 's%\\h'\''0/\\w"\([^"]*\)"'\''\([^'\'']*\)\\h'\''0'\''%<A name="\1">\2</A>%g' \
423
-e 's%\\h'\''0/1'\''\([^'\'']*\)\\h'\''0'\''%<A name="\1">\1</A>%g' \
424
-e 's%\\s+\(.\)\([^\\]*\)\\s-\1%<FONT SIZE=+\1>\2</FONT>%g' \
425
-e 's%\\s+\(.\)\([^\\]*\)\\s0%<FONT SIZE=+\1>\2</FONT>%g' \
426
-e 's%\\s-\(.\)\([^\\]*\)\\s+\1%<FONT SIZE=-\1>\2</FONT>%g' \
427
-e 's%\\s-\(.\)\([^\\]*\)\\s0%<FONT SIZE=-\1>\2</FONT>%g' \
428
-e 's%\\f(\(..\)\([^\\]*\)%<\1>\2</\1>%g' \
429
-e 's%\\f[PR]%\\fZ%g' \
430
-e 's%\\f\(.\)\([^\\]*\)%<\1>\2</\1>%g' \
431
-e 's%&lt;\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789][-._abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*@[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.]*\)&gt;%<SMALL>\&lt;<A href=mailto:\1>\1</A>\&gt;</SMALL>%g' \
432
-e 's%\[[ABCDEFGHIJKLMNOPQRSTUVWXYZ][ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]*[0123456789][0123456789][abcdefghijklmnopqrstuvwxyz]*]%<CITE>&</CITE>%g' \
433
-e 's%</*Z>%%g' \
434
-e 's%<[146789]>%%g' \
435
-e 's%</[146789]>%%g' \
436
-e 's%<2>%<EM>%g' \
437
-e 's%</2>%</EM>%g' \
438
-e 's%<3>%<STRONG>%g' \
439
-e 's%</3>%</STRONG>%g' \
440
-e 's%<5>%<TT>%g' \
441
-e 's%</5>%</TT>%g' \
442
-e 's%<B>%<STRONG>%g' \
443
-e 's%</B>%</STRONG>%g' \
444
-e 's%<I>%<EM>%g' \
445
-e 's%</I>%</EM>%g' \
446
-e 's%<L>%<TT>%g' \
447
-e 's%</L>%</TT>%g' \
448
-e 's%<X>%<TT>%g' \
449
-e 's%</X>%</TT>%g' \
450
-e 's%<CW>%<TT>%g' \
451
-e 's%</CW>%</TT>%g' \
452
-e 's%<EM>\([^<]*\)</EM>(\([0123456789][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*\))%<NOBR><A href="../man\2/\1.html"><EM>\1</EM></A>(\2)</NOBR>%g' \
453
-e 's%<STRONG>\([^<]*\)</STRONG>(\([0123456789][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*\))%<NOBR><A href="../man\2/\1.html"><STRONG>\1</STRONG></A>(\2)</NOBR>%g' \
454
-e 's%<TT>\([^<]*\)</TT>(\([0123456789][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*\))%<NOBR><A href="../man\2/\1.html"><TT>\1</TT></A>(\2)</NOBR>%g' \
455
-e 's%\\s+\(.\)\(.*\)\\s-\1%<FONT SIZE=+\1>\2</FONT>%g' \
456
-e 's%\\s-\(.\)\(.*\)\\s+\1%<FONT SIZE=-\1>\2</FONT>%g' \
457
-e 's%\\c%<JOIN>%g' \
458
-e 's%\\e%\&#0092;%g' \
459
-e 's,@MAN\([^@]\)EXT@,\1,g' \
460
-e '/^'\''[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]\>/s%.%.%' \
461
-e '/^\..*".*\\/s%\\[^\*][^(]%\\&%g' \
462
"$@"
463
}
464
465
function getline
466
{
467
integer i n
468
typeset data a c d q v x y z
469
if (( peek ))
470
then (( peek = 0 ))
471
trap 'set -- "${text[@]}"' 0
472
return
473
fi
474
while :
475
do data=
476
while :
477
do IFS= read -r -u$fd a || {
478
if (( so > 0 ))
479
then eval exec "$fd>&-"
480
if (( --so ))
481
then (( fd = so + soff - 1 ))
482
else (( fd = 0 ))
483
fi
484
file=${so_file[so]}
485
line=${so_line[so]}
486
continue
487
fi
488
return 1
489
}
490
(( line++ ))
491
case $a in
492
*\\) x=${a%%+(\\)}
493
a=${a#"$x"}
494
if (( ! ( ${#a} & 1 ) ))
495
then data=$data$x$a
496
break
497
fi
498
data=$data$x${a%?}
499
;;
500
*\\\}) data=$data${a%??}
501
break
502
;;
503
*) data=$data$a
504
break
505
;;
506
esac
507
done
508
case $data in
509
*\\[n\*]*)
510
a= i=0
511
while :
512
do c=${data:i++:1}
513
case $c in
514
"") break
515
;;
516
\\) x=${data:i:1}
517
case $x in
518
[n\*]) (( i++ ))
519
c=${data:i++:1}
520
case $c in
521
\() c=${data:i:2}
522
(( i += 2 ))
523
;;
524
\[) c=${data:i}
525
c=${c%%]*}
526
(( i += ${#c} + 1 ))
527
x='*'
528
;;
529
esac
530
case $x in
531
n) a=$a${nr[$c]} ;;
532
*) a=$a${ds[$c]} ;;
533
esac
534
continue
535
;;
536
\\) a=$a$c
537
while :
538
do c=${data:i++:1}
539
case $c in
540
\\) ;;
541
*) break ;;
542
esac
543
a=$a$c
544
done
545
;;
546
esac
547
;;
548
esac
549
a=$a$c
550
done
551
data=$a
552
;;
553
esac
554
case $data in
555
.tr*) set -A text -- $data
556
;;
557
.?*) case $data in
558
*[\"]*)
559
unset v
560
a= i=0 n=0 q=
561
while :
562
do c=${data:i++:1}
563
case $c in
564
"") break ;;
565
esac
566
case $c in
567
$q) q=
568
case $c in
569
\>) ;;
570
*) continue
571
;;
572
esac
573
;;
574
[\"\<]) case $q in
575
"") case $c in
576
\<) q=\>
577
;;
578
*) q=$c
579
continue
580
;;
581
esac
582
;;
583
esac
584
;;
585
\ |\ )
586
case $q in
587
"") case $a in
588
?*) v[n++]=$a
589
a=
590
;;
591
esac
592
continue
593
;;
594
esac
595
;;
596
esac
597
a=$a$c
598
done
599
case $a in
600
?*) v[n++]=$a ;;
601
esac
602
set -A text -- "${v[@]}"
603
;;
604
*) set -A text -- $data
605
;;
606
esac
607
case ${text[0]} in
608
.el|.ie|.if)
609
set -- "${text[@]}"
610
shift
611
x=$1
612
shift
613
case ${text[0]} in
614
.e*) if (( nest <= 0 ))
615
then warning "unmatched ${text[0]}"
616
n=0
617
else n=$(( ! ${cond[nest--]} ))
618
fi
619
;;
620
.i*) case $x in
621
!*) x=${x#?}
622
n=1
623
;;
624
*) n=0
625
;;
626
esac
627
case $x in
628
t|\'@(*)\'\1\'|+([\-+0123456789])=\1)
629
(( n = ! n ))
630
;;
631
+([\-+0123456789])=+([\-+0123456789]))
632
;;
633
[0123456789]*[0123456789])
634
(( n = $x ))
635
;;
636
esac
637
case ${text[0]} in
638
.ie) cond[++nest]=$n ;;
639
esac
640
;;
641
esac
642
if (( ! n ))
643
then case $@ in
644
\\\{*|\{*)
645
while read -r -u$fd data
646
do (( line++ ))
647
case $data in
648
*\\\}|*\}) break ;;
649
esac
650
done
651
;;
652
esac
653
continue
654
fi
655
IFS=' '
656
set -A text -- $@
657
IFS=$ifs
658
case ${text[0]} in
659
\\\{*) text[0]=${text[0]#??} ;;
660
\{*) text[0]=${text[0]#?} ;;
661
esac
662
;;
663
.so) x=${text[1]}
664
for d in "${dirs[@]}"
665
do if [[ -f "$d$x" ]]
666
then (( fd = so + soff ))
667
tmp=/tmp/m2h$$
668
getfiles "$d$x" > $tmp
669
eval exec "$fd< $tmp"
670
rm $tmp
671
so_file[so]=$file
672
file=$d$x
673
so_line[so]=$line
674
(( line = 0 ))
675
(( so++ ))
676
continue 2
677
fi
678
done
679
warning "$x: $op cannot read"
680
continue
681
;;
682
.xx) data=
683
set -- "${text[@]}"
684
shift
685
while :
686
do case $# in
687
0) break ;;
688
esac
689
nam=${1%%=*}
690
case $nam in
691
no?*) nam=${nam#no}
692
val=0
693
;;
694
*) case $1 in
695
*=*) val=${1#*=}
696
[[ $val ]] || val=1
697
;;
698
*) val=1
699
;;
700
esac
701
;;
702
esac
703
shift
704
case $nam in
705
begin|end)
706
set -- $val
707
case $nam in
708
begin) upper=$1 ;;
709
end) upper=/$1 ;;
710
esac
711
shift
712
case $# in
713
0) val="<!--${upper}-->" ;;
714
*) val="<!--${upper} $@-->" ;;
715
esac
716
if (( ident ))
717
then print -r -- "$val"
718
else meta="$meta$nl$val"
719
fi
720
;;
721
faq) (( faq = val ))
722
;;
723
index) case $val in
724
0) labels=-1 ;;
725
*) labels=0 ;;
726
esac
727
;;
728
label|link*|ref)
729
case $val in
730
*' '*)
731
url=${val%%' '*}
732
txt=${val#*' '}
733
;;
734
*'\\t'*)
735
url=${val%%'\\t'*}
736
txt=${val#*'\\t'}
737
;;
738
*) url=$val
739
txt=$val
740
;;
741
esac
742
case $url in
743
*[:/.]*) pfx= ;;
744
*) pfx='#' ;;
745
esac
746
case $url in
747
*'${html.'*'}'*)
748
eval url=\"$url\"
749
;;
750
esac
751
case $nam in
752
label) if (( labels >= 0 ))
753
then nam=name
754
txt=${txt%%*([-.,])}
755
level[label]=$last_level
756
label[labels++]=$txt
757
print -r -- "<A $nam=\"$url\">$txt</A>"
758
fi
759
;;
760
link*) tar=
761
case $nam in
762
link) case $frame$top$vg in
763
?*) case $url in
764
*([abcdefghijklmnopqrstuvwxyz]):*|/*)
765
tar=" target=_top"
766
;;
767
esac
768
;;
769
esac
770
;;
771
esac
772
nam=href
773
if [[ $frame != '' && $title == '' ]]
774
then [[ -f $framebody ]] && rm $framebody
775
framelink=$pfx$url
776
else [[ $data ]] && data+=$'\t'
777
data+="<A $nam=\"$pfx$url\"$tar>$txt</A>"
778
fi
779
;;
780
ref) case $txt in
781
$url) x="<LINK href=\"$url\">" ;;
782
*) x="<LINK href=\"$url\" type=\"$txt\">" ;;
783
esac
784
case $framelink in
785
'') meta+="$nl$x" ;;
786
*) framerefs+="$nl$x" ;;
787
esac
788
;;
789
esac
790
;;
791
logo) eval html.$nam.src='$'val
792
;;
793
meta.*) meta="$meta$nl<META name=\"${nam#*.}\" content=\"$val\">"
794
;;
795
ident|labels|logo*|title|[ABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
796
eval html.$nam='$'val
797
;;
798
text) [[ $data ]] && data+=$'\t'
799
data+=$val
800
;;
801
*) eval license.$nam='$'val
802
;;
803
esac
804
done
805
case $data in
806
'') continue ;;
807
esac
808
set -A text -- "$data"
809
break
810
;;
811
esac
812
case ${text[0]} in
813
@($primary))
814
: primary macros take precedence
815
;;
816
.[BILMRUX]?([BILMRUX])|.CW|.F|.FR|.MW|.RF)
817
case $macros:${text[0]} in
818
mm:.LI)break ;;
819
mm:.RF) break ;;
820
man:.UR)break ;;
821
esac
822
typeset font1 font2 op
823
set -- "${text[@]}"
824
op=$1
825
shift
826
case $op in
827
.[BIL]R)case $#:$2 in
828
2':('[0123456789]*')'*([,.?!:;]))
829
x=${2#'('*')'}
830
y=${2%$x}
831
z=${y#'('}
832
z=${z%')'}
833
case $op in
834
.B*) font1=STRONG ;;
835
.L*) font1=TT ;;
836
*) font1=EM ;;
837
esac
838
case $macros in
839
man) set -A text -- "<NOBR><A href=\"../man$z/$1.html\"><$font1>$1</$font1></A>$y$x</NOBR>" ;;
840
*) set -A text -- "<NOBR><A href=\"${html.man:=../man}/man$z/$1.html\"><$font1>$1</$font1></A>$y$x</NOBR>" ;;
841
esac
842
break
843
;;
844
esac
845
;;
846
.CW|.F) op=.L ;;
847
.FR) op=.LR ;;
848
.MW) op=.L ;;
849
.RF) op=.RL ;;
850
esac
851
case $#:$macros:$op in
852
0:*) ;;
853
*:man:.?)
854
set -- "$*"
855
;;
856
esac
857
case $# in
858
0) getline
859
set -- "$*"
860
;;
861
esac
862
case $font in
863
"") data=
864
;;
865
?*) data="</$font>"
866
font=
867
;;
868
esac
869
font1=${op#.}
870
case $font1 in
871
?) font2=R
872
;;
873
*) font2=${font1#?}
874
font1=${font1%?}
875
;;
876
esac
877
case $font1 in
878
B) font1=STRONG ;;
879
I) font1=EM ;;
880
[LMX]) font1=TT ;;
881
R) font1= ;;
882
esac
883
case $font2 in
884
B) font2=STRONG ;;
885
I) font2=EM ;;
886
[LMX]) font2=TT ;;
887
R) font2= ;;
888
esac
889
font=$font2
890
while :
891
do case $# in
892
0) break ;;
893
esac
894
case $font in
895
$font2) font=$font1 ;;
896
*) font=$font2 ;;
897
esac
898
case $1 in
899
"") ;;
900
*"<FONT SIZE"*)
901
case $font in
902
"") data="$data$1" ;;
903
*) data="$data<$font>$1</$font>" ;;
904
esac
905
;;
906
*) case "$1 $2" in
907
*"<FONT SIZE"*)
908
case $font in
909
"") data="$data$1 $2" ;;
910
*) data="$data<$font>$1 $2</$font>" ;;
911
esac
912
shift
913
;;
914
*) case $font in
915
"") data="$data$1" ;;
916
*) data="$data<$font>$1</$font>" ;;
917
esac
918
;;
919
esac
920
;;
921
esac
922
shift
923
done
924
font=
925
set -A text -- $data
926
;;
927
.PD) case ${text[1]} in
928
0) pd='<BR>' ;;
929
*) pd= ;;
930
esac
931
continue
932
;;
933
.PF|.PH)continue
934
;;
935
.SB) set -- "${text[@]}"
936
shift
937
case $# in
938
0) getline ;;
939
esac
940
set -A text -- "<FONT SIZE=-2><B>""$@""</B></FONT>"
941
;;
942
.SG) continue
943
;;
944
.SM) set -- "${text[@]}"
945
shift
946
case $# in
947
0) getline ;;
948
esac
949
set -A text -- "<FONT SIZE=-2>""$@""</FONT>"
950
;;
951
*) x=${map[${text[0]}]}
952
case $x in
953
?*) text[0]=$x ;;
954
esac
955
;;
956
esac
957
;;
958
*) set -A text -- "$data"
959
;;
960
esac
961
break
962
done
963
if [[ $tr_chars && ${text[0]} != .tr && ${text[@]} == *[$tr_chars]* ]]
964
then for a in ${!tr[@]}
965
do z=${tr[$a]}
966
for (( i = 0; i < ${#text[@]}; i++))
967
do if [[ $a == \\* ]]
968
then text[i]=${text[i]//\\$a/$z}
969
else text[i]=${text[i]//$a/$z}
970
fi
971
done
972
done
973
fi
974
trap 'set -- "${text[@]}"' 0
975
}
976
977
function ident
978
{
979
ident=1
980
case $frame in
981
'') print -r -- "${html.magic.plain}" ;;
982
*) print -r -- "${html.magic.frame}" ;;
983
esac
984
print -r -- "<HTML>"
985
print -r -- "<HEAD>"
986
print -r -- "<META name=\"generator\" content=\"${version//'&'/'&amp;'}\">${meta}"
987
}
988
989
indexed=
990
991
function index
992
{
993
if [[ ! $indexed ]]
994
then indexed=1
995
if [[ ! $frame && ${html.labels} != 0 ]]
996
then redirect_old=9 redirect_new=8
997
eval "exec $redirect_old>&1"
998
t=/tmp/m2hl$$
999
eval "exec 1>$t"
1000
eval "exec $redirect_new<$t"
1001
rm -f $t
1002
else print -r -- "<!--INDEX--><!--/INDEX-->"
1003
fi
1004
fi
1005
}
1006
1007
function title
1008
{
1009
ident
1010
case $header in
1011
?*) print -r -- "$header" ;;
1012
esac
1013
print -r -- "<TITLE>" $* "</TITLE>"
1014
case ${license.author} in
1015
?*) print -r -- "<META name=\"author\" content=\"${license.author}\">" ;;
1016
esac
1017
case $vg in
1018
?*) print -r -- "<SCRIPT language='javascript' src='../lib/slide.js'></SCRIPT>"
1019
case $pages in
1020
?*) print -r -- "<SCRIPT language='javascript'>last_slide=$pages</SCRIPT>" ;;
1021
esac
1022
print -r -- "<STYLE>
1023
BODY { font-family:times; font-size:$((vg_ps))pt; }
1024
H1 { font-family:times; font-size:$((vg_ps+4))pt; }
1025
H2 { font-family:times; font-size:$((vg_ps+2))pt; }
1026
H3 { font-family:times; font-size:$((vg_ps))pt; }
1027
TH { font-family:${ss}; font-size:$((vg_ps-1))pt; }
1028
TD { font-family:${ss}; font-size:$((vg_ps-1))pt; }
1029
#notes {
1030
position:relative;
1031
text-align:center;
1032
visibility:hidden;
1033
background:#bbbbbb;
1034
}
1035
#tutorial {
1036
position:relative;
1037
text-align:center;
1038
visibility:hidden;
1039
background:papayawhip;
1040
}
1041
</STYLE>
1042
</HEAD>"
1043
return
1044
;;
1045
esac
1046
if (( faq ))
1047
then print -r -- '<SCRIPT type="text/javascript">
1048
var A, P, Q;
1049
function FAQ_mark(mark) {
1050
P = null;
1051
for (var i = 0; i < A.length; i++)
1052
A[i].className = mark;
1053
}
1054
function FAQ_init() {
1055
Q = document.getElementsByTagName("dt");
1056
A = document.getElementsByTagName("dd");
1057
FAQ_mark("hide");
1058
for (var i = 0; i < Q.length; i++) {
1059
Q[i].onclick=function() {
1060
var next = this.nextSibling;
1061
while (next.nodeType != 1)
1062
next = next.nextSibling;
1063
if (P != null && P != next)
1064
P.className = "hide";
1065
if (next.className == "hide") {
1066
next.className = "show";
1067
P = next;
1068
}
1069
else {
1070
next.className = "hide";
1071
P = null;
1072
}
1073
}
1074
}
1075
}
1076
window.onload = FAQ_init;
1077
</SCRIPT>'
1078
fi
1079
print -r -- "<STYLE type=\"text/css\">
1080
div.FI { padding-left:2em; text-indent:0em; }
1081
div.HI { padding-left:4em; text-indent:-2em; }"
1082
if (( faq ))
1083
then print -r -- "dt { margin: 15px 40px 5px; cursor: pointer; }
1084
dt:before {
1085
content: \"Q\";
1086
font-family: Georgia, \"Times New Roman\", Times, serif;
1087
margin-right: 7px;
1088
padding: 2px 6px 5px;
1089
color: #FFD87D;
1090
background-color: teal;
1091
font-weight: normal;
1092
margin-left: -35px;
1093
position: relative;
1094
}
1095
dd { margin: 25px 70px 0px; }
1096
li { padding: 2px 0; }
1097
.show { display: block; }
1098
.hide { display: none; }"
1099
else print -r -- "dt { float:left; clear:both; }
1100
dd { margin-left:3em; }"
1101
fi
1102
print -r -- "</STYLE>
1103
</HEAD>"
1104
case ${html.heading} in
1105
?*) case ${html.heading} in
1106
?*) html.toolbar=
1107
hit=
1108
if [[ -f ${html.heading} ]]
1109
then hit=${html.heading}
1110
elif [[ -f $HOME/${html.heading} ]]
1111
then hit=$HOME/${html.heading}
1112
else IFS=:
1113
set "" $HOME $PATH
1114
IFS=$ifs
1115
for i
1116
do if [[ -f ${i%/bin}/lib/${html.heading} ]]
1117
then hit=${i%/bin}/lib/${html.heading}
1118
break
1119
fi
1120
done
1121
fi
1122
case $hit in
1123
"") print -u2 "$command: ${html.heading}: cannot read"
1124
code=1
1125
;;
1126
*) eval "cat <<!
1127
$(cat $hit)
1128
!"
1129
;;
1130
esac
1131
;;
1132
esac
1133
;;
1134
*) print -r -- "<BODY" ${html.BODY/'('@(*)')'/\1} ">"
1135
case $macros:${html.width} in
1136
man:*|*:)
1137
;;
1138
?*) case ${html.width} in
1139
*%) x="align=center " ;;
1140
*) x="" ;;
1141
esac
1142
print -r -- "<TABLE border=0 ${x}width=${html.width}>$nl<TBODY><TR><TD valign=top align=left>"
1143
trailer="$nl</TD></TR></TBODY></TABLE>$nl$trailer"
1144
;;
1145
esac
1146
case $frame in
1147
'') logo=${html.logo/'('@(*)')'/\1}
1148
case ${html.ident}:${logo} in
1149
*:*"src=''"*|*:)
1150
;;
1151
1:?*) case ${html.home.href} in
1152
?*) html.home.href=${html.home.href%/*.html}/
1153
print -r -- "<A" ${html.home/'('@(*)')'/\1} "><IMG" ${logo} "></A>"
1154
;;
1155
*) print -r -- "<IMG" ${logo} ">"
1156
;;
1157
esac
1158
;;
1159
esac
1160
;;
1161
esac
1162
if [[ $macros != man ]]
1163
then index
1164
fi
1165
;;
1166
esac
1167
case $pm in
1168
?*) print -r "$pm"
1169
trailer="$pm$nl$trailer"
1170
;;
1171
esac
1172
trailer="${trailer}${nl}</BODY>"
1173
}
1174
1175
function heading
1176
{
1177
typeset op=$1 i o options beg end txt lnlnk
1178
integer count
1179
1180
shift
1181
case $op in
1182
.H) case $# in
1183
0) count=1 ;;
1184
*) count=$1; shift ;;
1185
esac
1186
if (( $# == 2 )) && [[ $2 == link=* ]]
1187
then lnk=${2#link=}
1188
set -- "$1"
1189
fi
1190
options=
1191
;;
1192
.H*|.AS)count=1
1193
options=" align=center"
1194
;;
1195
*) count=2
1196
options=" align=center"
1197
;;
1198
esac
1199
case "$op $count" in
1200
".H"*" 1")
1201
print -n -r -- "$mm_H1"
1202
mm_H1="<P><HR>"
1203
;;
1204
esac
1205
case $* in
1206
"") print -r -- "<P>"
1207
;;
1208
*) eval o='$'{html.H$count}
1209
for i in $o
1210
do case $i in
1211
align=center)
1212
beg="$beg<CENTER>"
1213
end="</CENTER>$end"
1214
;;
1215
color=*|face=*)
1216
beg="$beg<FONT $i>"
1217
end="</FONT>$end"
1218
;;
1219
esac
1220
done
1221
(( count += head ))
1222
print -nr -- "$beg<H$count$options>"
1223
txt=$*
1224
txt=${txt%%*([-,.])}
1225
txt=${txt//'&nbsp;'/' '}
1226
txt=${txt//'&amp;'/!!!AMP!!!}
1227
txt=${txt//\&+([^\;])\;/}
1228
txt=${txt//!!!AMP!!!/'&amp;'}
1229
if [[ $lnk ]]
1230
then print -nr -- "<A name=\"$txt\"></A><A href=\"$lnk\">$txt</A>"
1231
else print -nr -- "<A name=\"$txt\">$txt</A>"
1232
fi
1233
if (( labels >= 0 && count < mark ))
1234
then last_level=$count
1235
level[labels]=$count
1236
label[labels++]=$txt
1237
fi
1238
print -r -- "</H$count>$end"
1239
;;
1240
esac
1241
}
1242
1243
function tbl_attributes
1244
{
1245
typeset d f i u x
1246
typeset -F0 w
1247
case $1 in
1248
[aAcC]*)a="$a align=center" ;;
1249
[lL]*) a="$a align=left" ;;
1250
[nN]*) a="$a align=right char=." ;;
1251
[rR]*) a="$a align=right" ;;
1252
esac
1253
case $i in
1254
*[wW]\(+([0-9.])*\)*)
1255
x=${i##*[wW]\(}
1256
x=${x%%\)*}
1257
u=${x##+([0-9.])}
1258
x=${x%$u}
1259
case $u in
1260
c) (( w=x*75/2.54 )) ;;
1261
i) (( w=x*75 )) ;;
1262
m) (( w=x*75*12/72 )) ;;
1263
n) (( w=x*75*12/72/2 )) ;;
1264
p) (( w=x*75/72 )) ;;
1265
P) (( w=x*75/6 )) ;;
1266
*) (( w=x*75*12/72/2 )) ;;
1267
esac
1268
a="$a width=$w"
1269
;;
1270
esac
1271
case $i in
1272
*[bB]*) b="$b<B>" e="</B>$e" ;;
1273
esac
1274
case X$i in
1275
*[!0-9.][iI]*) b="$b<I>" e="</I>$e" ;;
1276
esac
1277
}
1278
1279
typeset Sm=" "
1280
1281
function mandoc
1282
{
1283
typeset op sp=$Sm nsp t o a c p cmp msc ver
1284
op=$1
1285
shift
1286
while (( $# ))
1287
do case $1 in
1288
Ns) sp=""
1289
shift
1290
continue
1291
;;
1292
Po|Xo) c=.${1%o}c
1293
shift
1294
p=$*
1295
while getline
1296
do if [[ $p ]]
1297
then set -- $p "$@"
1298
p=
1299
fi
1300
if (( $# ))
1301
then o=$1
1302
shift
1303
case $o in
1304
$c) break
1305
;;
1306
.[[:upper:]][[:lower:]])
1307
o=${o#.}
1308
mandoc _mandoc_ $o "$@"
1309
a=$_mandoc_
1310
[[ $t && $a && $a != [[:punct:]] ]] && t+=$sp
1311
t+=$a
1312
;;
1313
esac
1314
fi
1315
done
1316
case $c in
1317
.Po) t="($t)" ;;
1318
esac
1319
continue
1320
;;
1321
esac
1322
o=$1
1323
shift
1324
nsp=$Sm
1325
if (( ! $# )) || [[ $o == @([DFOPQ][co]|Ta) ]]
1326
then a=""
1327
nsp=""
1328
elif [[ $o != [[:upper:]][[:lower:]] ]]
1329
then a=""
1330
elif [[ $1 == [[:upper:]][[:lower:]] ]]
1331
then # NOTE: local 'a' should work here -- might not be possible with nameref #
1332
mandoc _mandoc_ "$@"
1333
a=$_mandoc_
1334
shift $#
1335
else a=$1
1336
shift
1337
while (( $# )) && [[ $1 != @([[:punct:]]|[[:upper:]][[:lower:]]) ]]
1338
do a+="$sp$1"
1339
shift
1340
done
1341
fi
1342
[[ $t && $a && $a != [[:punct:]] ]] && t+=$sp
1343
case $o in
1344
Ac) t+="$a&gt;" ;;
1345
Ad) t+="<I>$a</I>" ;;
1346
Ao) t+="&lt;$a" ;;
1347
Aq) t+="&lt;$a&gt;" ;;
1348
Ar) t+="<I>$a</I>" ;;
1349
At) t+="<SMALL><B>AT&amp;T UNIX</B></SMALL>" ;;
1350
Bc) t+="$a]" ;;
1351
Bo) t+="[$a" ;;
1352
Bq) t+="[$a]" ;;
1353
Bx) t+="<SMALL><B>BSD</B></SMALL>" ;;
1354
Cd) t+="<B><I>$a</I></B>" ;;
1355
Cm) t+="<B><TT>$a</TT></B>" ;;
1356
Dc) t+="$a''" ;;
1357
Do) t+="\`\`$a" ;;
1358
Dq) t+="\`\`$a''" ;;
1359
Dv) t+="<TT>$a</TT>" ;;
1360
Dx) t+="<SMALL><B>DragonFly</B></SMALL>" ;;
1361
Em) t+="<U><I>$a</I></U>" ;;
1362
Er) t+="<TT>$a</TT>" ;;
1363
Ev) t+="<B><TT>$a</TT></B>" ;;
1364
Ex) t+="<TT>$a</TT>" ;;
1365
Fa) t+="<TT>$a</TT>" ;;
1366
Fc) t+="<TT>$a)</TT>" ;;
1367
Fd) t+="<TT>$a</TT>" ;;
1368
Fl) t+="<B>&#45;$a</B>" ;;
1369
Fn) t+="<TT>$a</TT>" ;;
1370
Fo) t+="<TT>$a(</TT>" ;;
1371
Ft) t+="<TT>$a</TT>" ;;
1372
Fx) t+="<SMALL><B>FreeBSD</B></SMALL>" ;;
1373
Ic) t+="<B><TT>$a</TT></B>" ;;
1374
In) [[ $Sh == SYNOPSIS ]] && t+="<TT>#include </TT>"; t+="&lt;<B><TT>$a</TT></B>&gt;" ;;
1375
Ix) t+="<SMALL><B>BSDI BSD/OS</B></SMALL>" ;;
1376
Lb) t+="<B><TT>$a</TT></B>" ;;
1377
Li) t+="<TT>$a</TT>" ;;
1378
No) t+="$a" ;;
1379
Nx) t+="<SMALL><B>NetBSD</B></SMALL>" ;;
1380
Oc) t+="<B>]</B>$a" ;;
1381
Oo) t+="<B>[</B>$a" ;;
1382
Op) t+="$sp<B>[</B>$a<B>]</B>$sp" ;;
1383
Ox) t+="<SMALL><B>OpenBSD</B></SMALL>" ;;
1384
Pa) t+="<I>$a</I>" ;;
1385
Pc) t+="$a)" ;;
1386
Po) t+="($a" ;;
1387
Pq) t+="($a)" ;;
1388
Qc) t+="$a&#8220;" ;;
1389
Ql) t+="\`<TT>$a</TT>'" ;;
1390
Qo) t+="&#8220;$a" ;;
1391
Qq) t+="&#8220;$a&#8220;" ;;
1392
Rv) t+="<TT>$a</TT>" ;;
1393
Sq) t+="\`$a'" ;;
1394
St) t+="<B>$a</B>" ;;
1395
Sy) t+="<TT>$a</TT>" ;;
1396
Ta) t+=$'\t' ;;
1397
Tn) typeset -u A=$a; t+="<SMALL>$A</SMALL>" ;;
1398
Ux) t+="<SMALL><B>UNIX</B></SMALL>" ;;
1399
Va) t+="<TT>$a</TT>" ;;
1400
Vt) t+="<TT>$a</TT>" ;;
1401
[[:upper:]][[:lower:]]) t+="$a" ;;
1402
*) t+="$o" ;;
1403
esac
1404
sp=$nsp
1405
done
1406
case $op in
1407
-line) if [[ $sp ]]
1408
then sp=""
1409
t+="<BR>"
1410
else sp="n"
1411
fi
1412
print -${sp}r "$t"
1413
;;
1414
-space) print -nr "$t$Sm"
1415
;;
1416
-*) print -nr "$t"
1417
;;
1418
*) nameref ret=$op
1419
ret=$t
1420
;;
1421
esac
1422
}
1423
1424
function nohang
1425
{
1426
if (( ! faq ))
1427
then typeset a=${1//'<'*([^'>'])'>'/}
1428
a=${a//'&'*([^';'])';'/X}
1429
(( ${#a} >= 5 )) && print "<BR>"
1430
fi
1431
}
1432
1433
if [[ $frame != '' ]]
1434
then framebody=$frame.html
1435
exec > $framebody || exit
1436
fi
1437
1438
dirs[++ndirs]=""
1439
for i
1440
do if [[ -d $i ]]
1441
then dirs[++ndirs]=$i/
1442
else files[++nfiles]=$i
1443
if [[ $i == */* ]]
1444
then dirs[++ndirs]=${i%/*}/
1445
fi
1446
fi
1447
done
1448
document="${files[@]}"
1449
1450
getfiles "${files[@]}" |
1451
while :
1452
do getline || {
1453
[[ $title != '' ]] && break
1454
set -- .TL
1455
}
1456
case $1 in
1457
.) : comment
1458
;;
1459
.*) op=$1
1460
shift
1461
case $op in
1462
.AC) : ignore $op
1463
;;
1464
.AE) : ignore $op
1465
;;
1466
.AF) case $mm_AF_cur in
1467
"") mm_AF_cur="<P><I>$*" ;;
1468
*) mm_AF_cur="${mm_AF_cur}<BR>$*" ;;
1469
esac
1470
;;
1471
.AL|.VL)type[++lists]=.AL
1472
list[lists]=DIV
1473
print -r -- "<DIV class=SH>"
1474
case $op in
1475
.AL) case $1 in
1476
'') type[++lists]=.al
1477
list[lists]=OL
1478
print -r -- "<OL>"
1479
;;
1480
[0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ])
1481
type[++lists]=.al
1482
list[lists]=OL
1483
print -r -- "<OL type=\"$1\">"
1484
;;
1485
esac
1486
;;
1487
.VL) case $1 in
1488
?*) type[++lists]=.al
1489
list[lists]=DL
1490
print -r -- "<DL>"
1491
;;
1492
esac
1493
;;
1494
esac
1495
;;
1496
.AS|.H|.HU|.SH|.SS|.ce|.CE)
1497
if ((nf))
1498
then nf=0
1499
print -r -- "</PRE>"
1500
fi
1501
if ((ce))
1502
then ce=0
1503
print -r -- "</CENTER>"
1504
fi
1505
if (( lists > pp ))
1506
then case ${type[@]:0:lists} in
1507
*.[Aa][Ll]*|*.[IiTt][Pp]*)
1508
while :
1509
do case ${type[lists]} in
1510
.[Aa][Ll]|.[IiTt][Pp])
1511
print -rn -- "</${list[lists--]}>"
1512
case ${type[lists]} in
1513
.AL|.IP|.TP)break ;;
1514
esac
1515
;;
1516
*) break
1517
;;
1518
esac
1519
done
1520
;;
1521
esac
1522
fi
1523
(( pp = lists ))
1524
print -r -- "<P>"
1525
end=
1526
case ${mm.title} in
1527
?*) mm_H1="<P><HR>"
1528
case ${mm_AU}${mm.author}${mm.keywords} in
1529
?*) print -r -- "<CENTER>" ;;
1530
esac
1531
for i in ${html.H1}
1532
do case $i in
1533
align=center)
1534
beg="$beg<CENTER>"
1535
end="</CENTER>$end"
1536
;;
1537
color=*|face=*)
1538
beg="$beg<FONT $i>"
1539
end="</FONT>$end"
1540
;;
1541
esac
1542
done
1543
print -r -- "<$H>$beg${mm.title}$end</$H>"
1544
mm.title=
1545
case ${mm.author} in
1546
?*) IFS=:
1547
set -- ${mm.author#:} : "$@"
1548
IFS=$ifs
1549
while :
1550
do case $# in
1551
0) break ;;
1552
esac
1553
x=$1
1554
shift
1555
case $x in
1556
:) break ;;
1557
esac
1558
print -r -- "$x<BR>"
1559
done
1560
;;
1561
esac
1562
case $mm_AU in
1563
?*) print -r -- "$mm_AU"
1564
case $mm_AF_cur in
1565
?*) mm_AF="${mm_AF_cur}</I>" ;;
1566
esac
1567
case $mm_AF in
1568
?*) print -r -- "$mm_AF" ;;
1569
esac
1570
;;
1571
esac
1572
case ${mm_AU}${mm.author}${mm.keywords} in
1573
?*) print -r -- "</CENTER>" ;;
1574
esac
1575
;;
1576
esac
1577
case $op in
1578
.AS) print -r -- "<P>"
1579
heading $op Abstract
1580
;;
1581
.ce) case $# in
1582
0) count=1 ;;
1583
*) count=$1 ;;
1584
esac
1585
print -r -- "<CENTER>"
1586
while (( count-- > 0 )) && read -r data
1587
do print -r -- "$data<BR>"
1588
done
1589
print -r -- "</CENTER>"
1590
;;
1591
.CE) if [[ $1 != 0 ]]
1592
then ce=1
1593
print -r -- "<CENTER>"
1594
fi
1595
;;
1596
.S[HS]) setmacros man
1597
while (( lists > 0 ))
1598
do [[ $op == .SS && ${type[lists]} == .[IRS][EH] ]] && break
1599
print -r -- "</${list[lists]}>"
1600
[[ ${type[lists--]} == $op ]] && break
1601
done
1602
type[++lists]=$op
1603
list[lists]=DIV
1604
n=IN
1605
i=FI
1606
case $op in
1607
.SH) Sh=$*
1608
if [[ $macros == man && $* == DESCRIPTION && ${html.labels} != 0 ]]
1609
then index
1610
fi
1611
heading .H 2 "$@"
1612
if [[ $* == SYNOPSIS ]]
1613
then i=HI
1614
fi
1615
;;
1616
*) heading .H 3 "$@"
1617
;;
1618
esac
1619
print -r -- "<DIV class=$i>"
1620
[[ $op == .SH && $* == NAME ]] && print -nr "<!--MAN-INDEX-->"
1621
;;
1622
*) heading $op "$@"
1623
;;
1624
esac
1625
;;
1626
.AT) : ignore $op
1627
;;
1628
.AU) case $mm_AF_cur in
1629
?*) case $mm_AF in
1630
?*) case $mm_AU in
1631
?*) mm_AU="${mm_AU}${mm_AF}" ;;
1632
esac
1633
;;
1634
esac
1635
mm_AF="${mm_AF_cur}</I>"
1636
mm_AF_cur=""
1637
;;
1638
esac
1639
mm_AU="${mm_AU}<BR>$1"
1640
;;
1641
.BL|.bL|.sL)
1642
i=
1643
for ((n = 1; n <= lists; n++))
1644
do i=$i${list[n]}
1645
done
1646
case $i in
1647
*UL*UL*)i=disc ;;
1648
*UL*) i=circle ;;
1649
*) i=square ;;
1650
esac
1651
type[++lists]=.AL
1652
list[lists]=UL
1653
print -r -- "<UL type=$i>"
1654
;;
1655
.BP) center=0
1656
unset parm
1657
while [[ $1 == *=* ]]
1658
do if [[ $1 == align=center ]]
1659
then center=1
1660
else eval parm+="( ${1%%=*}='${1#*=}' )"
1661
fi
1662
shift
1663
done
1664
unset oparm
1665
oparm=$parm
1666
i=$1
1667
if [[ $i == *.@(gif|png) ]]
1668
then if (( center ))
1669
then print "<CENTER>"
1670
fi
1671
for i
1672
do f=
1673
for d in "${dirs[@]}"
1674
do if [[ -f "$d$i" ]]
1675
then f=$d$i
1676
break
1677
fi
1678
done
1679
if [[ ! $f ]]
1680
then print -u2 "$command: warning: $i: data file not found"
1681
fi
1682
if [[ ! ${oparm.alt} ]]
1683
then u=${i##*/}
1684
u=${i%.*}
1685
parm=( alt=$u )
1686
fi
1687
if [[ ! ${oparm.title} ]]
1688
then u=${i##*/}
1689
u=${i%.*}
1690
if [[ ${parm.category} ]]
1691
then u="${parm.category} $u"
1692
elif [[ ${oparm.category} ]]
1693
then u="${oparm.category} $u"
1694
fi
1695
parm=( title=$u )
1696
fi
1697
print -r -- "<IMG src=\"$i\"" ${parm/'('@(*)')'/\1}">"
1698
done
1699
if (( center ))
1700
then print "</CENTER>"
1701
fi
1702
else i=${i%.*}.gif
1703
case $frame in
1704
?*) [[ -f $frame-$i ]] && i=$frame-$i ;;
1705
esac
1706
f=
1707
for d in "${dirs[@]}"
1708
do if [[ -f "$d$1" ]]
1709
then f=$d$1
1710
break
1711
fi
1712
done
1713
if [[ ! $f ]]
1714
then print -u2 "$command: $1: data file not found"
1715
elif [[ $f -nt $i ]]
1716
then ps2gif $f $i
1717
fi
1718
print -r -- "<CENTER><IMG src=\"$i\"></CENTER>"
1719
fi
1720
;;
1721
.CT) : ignore $op
1722
;;
1723
.DE|.dE|.fi)
1724
if ((nf))
1725
then nf=0
1726
print -r -- "</PRE>"
1727
fi
1728
;;
1729
.DF|.DS|.dS|.nf)
1730
if ((!nf))
1731
then nf=1
1732
print -r -- "<PRE>"
1733
fi
1734
;;
1735
.DT) case $macros in
1736
man) ;;
1737
*) print -r -- "${ds[Dt]}" ;;
1738
esac
1739
;;
1740
.EE|.eE)while (( lists > 0 ))
1741
do print -r -- "</${list[lists]}>"
1742
case ${type[lists--]} in
1743
.EX) break ;;
1744
esac
1745
done
1746
if ((nf))
1747
then nf=0
1748
print -r -- "</PRE>"
1749
fi
1750
if [[ $fg ]]
1751
then print -r -- "<H4 align=center>$fg</H4>"
1752
fi
1753
;;
1754
.EQ|.EN): ignore $op :
1755
;;
1756
.EX|.eX)type[++lists]=.EX
1757
list[lists]=DIV
1758
print -r -- "<DIV class=FI>"
1759
if ((!nf))
1760
then nf=1
1761
print -r -- "<PRE>"
1762
else print "<BR>"
1763
fi
1764
case $# in
1765
2) fg="Figure $1: $2" ;;
1766
*) fg= ;;
1767
esac
1768
;;
1769
.FE) print -r -- '&nbsp;]&nbsp'
1770
;;
1771
.FG) print -r -- "<H4 align=center>Figure $figure: $*</H4>"
1772
(( figure++ ))
1773
;;
1774
.FS) print -r -- '&nbsp;[&nbsp'
1775
;;
1776
.FT) : ignore $op :
1777
;;
1778
.H[01234])
1779
if [[ $macros == man ]]
1780
then : optget --nroff : .Hlevel label :
1781
n=${op#.H}
1782
while [[ ${type[lists]} == .H[01234] ]]
1783
do m=${type[lists]#.H}
1784
(( m <= n )) && break
1785
print -r -- "</${list[lists--]}>"
1786
done
1787
if [[ ${type[lists]} != $op ]]
1788
then type[++lists]=$op
1789
list[lists]=DL
1790
print -r -- "<DL>"
1791
fi
1792
print -r -- "<DT><B>$*</B><DD>"$(nohang "$*")
1793
else warning "$op: unknown op"
1794
fi
1795
;;
1796
.HP|.LP|.P|.PP)
1797
if (( lists > pp ))
1798
then case ${type[@]:0:lists} in
1799
*.[Aa][Ll]*|*.[IiTt][Pp]*)
1800
while :
1801
do case ${type[lists]} in
1802
.[Aa][Ll]|.[IiTt][Pp])
1803
print -rn -- "</${list[lists--]}>"
1804
case ${type[lists]} in
1805
.AL|.IP|.TP)break ;;
1806
esac
1807
;;
1808
*) break
1809
;;
1810
esac
1811
done
1812
;;
1813
esac
1814
fi
1815
(( pp = lists ))
1816
print -r -- "<P>"
1817
;;
1818
.HY) : ignore $op
1819
;;
1820
.IP|.LI|.TF|.TP|.bI|.sI)
1821
case $macros:$op in
1822
mm:.TP) continue ;;
1823
esac
1824
case $op in
1825
.IP|.LP|.TF|.TP)
1826
if [[ ${type[lists]} != $op ]]
1827
then type[++lists]=$op
1828
list[lists]=DL
1829
print -r -- "<DL>"
1830
fi
1831
case $op in
1832
.IP|.LP|.TF)
1833
set -- "<TT>$*</TT>"
1834
;;
1835
.TP) getline
1836
;;
1837
esac
1838
;;
1839
esac
1840
case ${list[lists]} in
1841
"") warning "$op: no current list"
1842
;;
1843
DL) case $# in
1844
0) getline ;;
1845
esac
1846
if [[ ${pd} && ! ${hung} ]]
1847
then print -rn -- "${pd}"
1848
fi
1849
hung=$(nohang "$*")
1850
print -r -- "<DT>$*<DD>$hung"
1851
;;
1852
*) case $op in
1853
.bI|.sI)print -r -- "<P>" ;;
1854
esac
1855
print -r -- "<LI>$*"
1856
;;
1857
esac
1858
;;
1859
.[IR]S) case $macros:$op in
1860
mm:.RS) references="$references$nl<DT>[$reference]<DD>"$(nohang "[$reference]")
1861
while getline
1862
do case $1 in
1863
.RF) break ;;
1864
esac
1865
references="$references$nl$*"
1866
done
1867
(( reference++ ))
1868
ds[Rf]="<FONT SIZE=-6>[$reference]</FONT>"
1869
continue
1870
;;
1871
esac
1872
type[++lists]=${op%S}E
1873
list[lists]=DIV
1874
print -r -- "<DIV class=FI>"
1875
;;
1876
.[IR]E) while (( lists > 0 ))
1877
do print -r -- "</${list[lists]}>"
1878
case ${type[lists--]} in
1879
$op) break ;;
1880
esac
1881
done
1882
print "<BR>"
1883
;;
1884
.IX) : ignore $op
1885
;;
1886
.LE|.bE|.sE|.El)
1887
case ${type[@]} in
1888
*.[Aa][Ll]*)
1889
while (( lists > 0 ))
1890
do print -r -- "</${list[lists]}>"
1891
case ${type[lists--]} in
1892
.AL) break ;;
1893
esac
1894
done
1895
;;
1896
*) warning "$op: no current list type"
1897
;;
1898
esac
1899
;;
1900
.LX) : ignore $op
1901
;;
1902
.ME) if [[ $macros == man ]]
1903
then print -r -- "<BR>"
1904
fi
1905
;;
1906
.MT) if [[ $macros == man ]]
1907
then x="<A href=\"mailto:$*\">$*</A>"
1908
getline
1909
print -nr -- "$*" "$x"
1910
else setmacros mm
1911
fi
1912
;;
1913
.ND|.Dd)ds[Dt]=$*
1914
;;
1915
.NL) type[++lists]=.AL
1916
list[lists]=OL
1917
print -r -- "<OL>"
1918
;;
1919
.OK) mm.keywords="$*"
1920
;;
1921
.OP) case $macros in
1922
man) if (( man_SY ))
1923
then : .OP flag [value] :
1924
print -nr -- " [<B>$1</B>"
1925
if (( $# > 1 ))
1926
then shift
1927
print -nr -- " <I>$*</I>"
1928
fi
1929
print -nr -- "]"
1930
else : optget --nroff : .OP flag long types argument :
1931
while [[ ${type[lists]} == .H[01234] ]]
1932
do print -r -- "</${list[lists--]}>"
1933
done
1934
if [[ ${type[lists]} != $op ]]
1935
then type[++lists]=$op
1936
list[lists]=DL
1937
print -r -- "<DL>"
1938
fi
1939
x=""
1940
if [[ $1 != - ]]
1941
then x="$x-<B>$1</B>"
1942
fi
1943
if [[ $2 != - ]]
1944
then if [[ $1 != - ]]
1945
then x="$x, "
1946
fi
1947
x="$x--<B>$2</B>"
1948
if [[ $4 != - ]]
1949
then if [[ $3 == *optional* ]]
1950
then x="$x&#0091;=<I>$4</I>&#0093;"
1951
else x="$x=<I>$4</I>"
1952
fi
1953
fi
1954
elif [[ $4 != - ]]
1955
then if [[ $3 == *optional* ]]
1956
then x="$x &#0091;<I>$4</I>&#0093;"
1957
else x="$x <I>$4</I>"
1958
fi
1959
fi
1960
x="<DT>$x<DD>"$(nohang "$x")
1961
fi
1962
;;
1963
*) : .OP opt arg arg-append arg-prepend
1964
x="$4<STRONG>&#45;$1</STRONG><I>$2</I>"
1965
case $3 in
1966
'[]') x="[ $x ]" ;;
1967
?*) x="$x$3" ;;
1968
esac
1969
;;
1970
esac
1971
print -r -- "$x"
1972
;;
1973
.PM|.pM)case ${html.company} in
1974
'') pm= ;;
1975
*) pm="${html.company//\&/\&amp\;} " ;;
1976
esac
1977
case $1 in
1978
'') pm= ;;
1979
C|NDA) pm="${pm}CONFIDENTIAL" ;;
1980
RG) pm="${pm}PROPRIETARY (REGISTERED)" ;;
1981
RS) pm="${pm}PROPRIETARY (RESTRICTED)" ;;
1982
*) pm="${pm}PROPRIETARY" ;;
1983
esac
1984
case $pm in
1985
?*) case $op in
1986
.pM) pm="<TABLE align=center cellpadding=2 border=4 bgcolor=lightgrey><TR><TD><FONT face=\"${ss}\"><B>${pm}</B></FONT></TD></TR></TABLE>" ;;
1987
*) pm="<HR><CENTER><$H>${pm}</$H></CENTER>" ;;
1988
esac
1989
;;
1990
esac
1991
;;
1992
.PU) : ignore $op
1993
;;
1994
.SA) : ignore $op
1995
;;
1996
.SU) : ignore $op
1997
;;
1998
.SY) if [[ $macros == man ]]
1999
then man_SY=1
2000
print -nr -- "<B>$1</B> "
2001
fi
2002
;;
2003
.TH|.TL|.Dt)
2004
: .TL junk junk
2005
: .TH item section foot_center foot_left head_center
2006
: .Dt item section volume
2007
case $macros:$op in
2008
:.TL) setmacros mm ;;
2009
:.TH) setmacros man ;;
2010
:.Dt) setmacros man mandoc ;;
2011
esac
2012
case ${html.title} in
2013
?*) title=${html.title}
2014
;;
2015
*) case $title in
2016
'') title="$document $macros document" ;;
2017
esac
2018
title="$package $title"
2019
;;
2020
esac
2021
title $title
2022
case $op in
2023
.TH|.Dt)case $3 in
2024
?*) dc[++dcs]=$3 ;;
2025
esac
2026
case $4 in
2027
?*) dl[++dls]=$4 ;;
2028
esac
2029
case $5 in
2030
'') sec=$(set --'???'MAN=$2 2>&1)
2031
sec=$ver$msc$cmp$sec
2032
;;
2033
*) sec=$5
2034
;;
2035
esac
2036
if [[ $frame ]]
2037
then TOP="target=_top "
2038
else TOP=
2039
fi
2040
MAN="$1($2)"
2041
print -r -- "<A name=\"$MAN\"></A>"
2042
print -r -- "<H3><TABLE width=100%><TBODY><TR><TH align=left>$MAN</TH><TH align=center><A href=\".\" ${TOP}title=\"Index\">$sec</A></TH><TH align=right>$MAN</TH></TR></TBODY></TABLE></H3>"
2043
print -r -- "<HR>"
2044
;;
2045
.TL) getline || break
2046
case ${html.title} in
2047
'') mm.title=$* ;;
2048
esac
2049
;;
2050
esac
2051
;;
2052
.TM) : ignore $op
2053
;;
2054
.TS) # undent ...
2055
2056
case $1 in
2057
H) tbl_tmp=/tmp/m2h$$tbl
2058
(( tbl_fd=3 ))
2059
trap "rm -f $tbl_tmp" 0 1 2 3
2060
eval exec "$tbl_fd>$tbl_tmp"
2061
;;
2062
esac
2063
unset opts
2064
eval "opts=${html.TABLE}"
2065
unset opts.width opts.align
2066
tbl_ns=3
2067
tbl_sp='&nbsp;&nbsp;'
2068
tab=$'\t'
2069
(( augment=0 ))
2070
while :
2071
do (( row=0 ))
2072
while getline
2073
do set -- ${@//[-\|_=]/ }
2074
case $# in
2075
0) continue ;;
2076
esac
2077
case $1 in
2078
'.T&'*) continue
2079
;;
2080
.TE) if (( tbl_fd != 1 ))
2081
then warning ".TS H without .TH"
2082
eval "exec $tbl_fd>&-"
2083
(( tbl_fd=1 ))
2084
rm -f $tbl_tmp
2085
tbl_tmp=
2086
trap - 0 1 2 3
2087
if (( augment ))
2088
then print -r -u$tbl_fd -- "</THEAD><TBODY>"
2089
fi
2090
fi
2091
continue 3
2092
;;
2093
esac
2094
(( row++ ))
2095
tbl[row]=${@//..*/.}
2096
case $* in
2097
*";"*) (( row=0 ))
2098
for i in ${@//[,\;]/ }
2099
do case $i in
2100
center) opts.align=center
2101
;;
2102
expand) opts.align=center opts.width="99%"
2103
;;
2104
allbox) opts.border=1
2105
opts.frame="box"
2106
opts.rules="all"
2107
;;
2108
box) opts.border=
2109
opts.frame="void"
2110
opts.rules="none"
2111
;;
2112
doublebox)
2113
opts.border=2
2114
opts.frame="box"
2115
opts.rules="none"
2116
;;
2117
linesize'('*')')
2118
opts.border=${i//*'('@(*)')'*/\1}
2119
;;
2120
tab'('*')'*)
2121
tab=${i//*'('@(*)')'*/\1}
2122
;;
2123
tab'(') case $* in
2124
*'tab(,'*) tab=',' ;;
2125
*'tab(;'*) tab=';' ;;
2126
*'tab( '*) tab=' ' ;;
2127
*) tab=$'\t' ;;
2128
esac
2129
;;
2130
esac
2131
done
2132
;;
2133
*".") break
2134
;;
2135
esac
2136
done
2137
case ${opts.border} in
2138
0) opts.cellpadding=0
2139
opts.cellspacing=0
2140
unset opts.bgcolor
2141
;;
2142
*) case ${opts.cellpadding} in
2143
'') opts.cellpadding=2 ;;
2144
esac
2145
case ${opts.cellspacing} in
2146
'') opts.cellspacing=2 ;;
2147
esac
2148
;;
2149
esac
2150
case ${opts.border} in
2151
'') opts.border=0 ;;
2152
esac
2153
if ((!augment))
2154
then (( augment=1 ))
2155
print -r -- "<P></P><TABLE border=0 frame=void rules=none width=100%><TBODY><TR><TD>$nl<TABLE" ${opts/'('@(*)')'/\1} ">"
2156
if (( tbl_fd == 3 ))
2157
then print -r -u$tbl_fd -- "<THEAD>"
2158
else print -r -u$tbl_fd -- "<TBODY>"
2159
fi
2160
fi
2161
for ((n = 1; n < row; n++))
2162
do getline || break
2163
case $1 in
2164
[_=]*) ((n--)); continue ;;
2165
esac
2166
print -rn -u$tbl_fd -- "<TR>"
2167
IFS=$tab
2168
set -- $*
2169
IFS=$ifs
2170
set -A Q ${tbl[n]}
2171
(( q=0 ))
2172
(( s=1 ))
2173
while :
2174
do i=${Q[q++]}
2175
case $i in
2176
''|.) break
2177
;;
2178
*[0-9]*)x=${i//[pvw]*([()0-9.inm])/}
2179
x=${i//[[:alpha:]]/}
2180
case $x in
2181
+([0-9]))
2182
if (( $x > tbl_ns ))
2183
then tbl_ns=$x
2184
tbl_sp=''
2185
for ((m=(tbl_ns+1)/2; m>0; m--))
2186
do tbl_sp=${tbl_sp}'&nbsp;'
2187
done
2188
2189
fi
2190
esac
2191
;;
2192
esac
2193
a=
2194
case $q in
2195
1) b='' ;;
2196
*) b=$tbl_sp ;;
2197
esac
2198
case ${Q[q]}:$# in
2199
:*|*:[01]) e='' ;;
2200
*) e=$tbl_sp ;;
2201
esac
2202
case $i in
2203
[sS]*) (( s++ )); continue ;;
2204
esac
2205
tbl_attributes "$i"
2206
while [[ ${Q[q]} == *s* ]]
2207
do (( s++ ))
2208
(( q++ ))
2209
done
2210
if (( s > 1 ))
2211
then a="$a colspan=$s"
2212
(( s=1 ))
2213
fi
2214
v=$1
2215
case $i in
2216
*'*'*) case $v in
2217
*'=>'*) v="<A href=\"${v##*'=>'}\">${v%'=>'}</A>" ;;
2218
*) v="<A href=\"$v\">$v</A>" ;;
2219
esac
2220
esac
2221
print -rn -u$tbl_fd -- "<TD$a>$b$v$e</TD>"
2222
case $# in
2223
0|1) break ;;
2224
esac
2225
shift
2226
done
2227
print -r -u$tbl_fd -- "</TR>"
2228
done
2229
prev=
2230
set -A Q ${tbl[n]}
2231
while getline
2232
do case $1 in
2233
'.T&'*) (( augment=1 ))
2234
continue 2
2235
;;
2236
.TH*) if (( tbl_fd != 1 ))
2237
then print -r -u$tbl_fd -- "</THEAD>"
2238
if (( tbl_no == 1 || $# == 1 )) || [[ $2 != N ]]
2239
then cat $tbl_tmp
2240
fi
2241
eval "exec $tbl_fd>&-"
2242
(( tbl_fd=1 ))
2243
rm -f $tbl_tmp
2244
tbl_tmp=
2245
trap - 0 1 2 3
2246
fi
2247
print -r -u$tbl_fd -- "<TBODY>"
2248
continue
2249
;;
2250
.TE) (( tbl_no++ ))
2251
if (( tbl_fd != 1 ))
2252
then warning ".TS H without .TH"
2253
eval "exec $tbl_fd>&-"
2254
(( tbl_fd=1 ))
2255
rm -f $tbl_tmp
2256
tbl_tmp=
2257
trap - 0 1 2 3
2258
print -r -u$tbl_fd -- "</THEAD><TBODY>"
2259
fi
2260
break
2261
;;
2262
esac
2263
IFS=$tab
2264
set -- $*
2265
IFS=$ifs
2266
case $* in
2267
*"\\") prev=$prev$'\n'${*/"\\"/}
2268
;;
2269
*) print -rn -u$tbl_fd -- "<TR>"
2270
IFS=$'\t'
2271
set -- $prev$'\n'$*
2272
IFS=$ifs
2273
case $* in
2274
$'\n_') rule=1
2275
set -- '_'
2276
;;
2277
$'\n=') rule=1
2278
set -- '='
2279
;;
2280
*) rule=0
2281
;;
2282
esac
2283
(( q=0 ))
2284
while :
2285
do i=${Q[q++]}
2286
case $i in
2287
''|.) break
2288
;;
2289
*[0-9]*)x=${i//[pvw]*([()0-9.inm])/}
2290
x=${i//[[:alpha:]]/}
2291
case $x in
2292
+([0-9]))
2293
if (( $x > tbl_ns ))
2294
then tbl_ns=$x
2295
tbl_sp=''
2296
for ((m=(tbl_ns+1)/2; m>0; m--))
2297
do tbl_sp=${tbl_sp}'&nbsp;'
2298
done
2299
2300
fi
2301
esac
2302
;;
2303
esac
2304
a=
2305
case $q in
2306
1) b='' ;;
2307
*) b=$tbl_sp ;;
2308
esac
2309
case ${Q[q]}:$# in
2310
:*|*:[01]) e='' ;;
2311
*) e=$tbl_sp ;;
2312
esac
2313
case $1 in
2314
$'\n_'|'_')
2315
print -rn -u$tbl_fd -- "<TD><HR width=100% size=2 noshade></TD>"
2316
;;
2317
$'\n='|'=')
2318
print -rn -u$tbl_fd -- "<TD><HR width=100% size=4 noshade></TD>"
2319
;;
2320
*) tbl_attributes "$i"
2321
print -rn -u$tbl_fd -- "<TD$a>$b$1$e</TD>"
2322
;;
2323
esac
2324
((rule)) && continue
2325
case $# in
2326
0|1) break ;;
2327
esac
2328
shift
2329
done
2330
print -r -u$tbl_fd -- "</TR>"
2331
prev=
2332
;;
2333
esac
2334
done
2335
break
2336
done
2337
print -r -- "</TBODY></TABLE></TD></TR></TBODY></TABLE>"
2338
2339
# ... indent
2340
;;
2341
.TX) : ignore $op
2342
;;
2343
.UC) : ignore $op
2344
;;
2345
.UE) if [[ $1 ]]
2346
then getline
2347
fi
2348
print -r -- "$*"
2349
;;
2350
.UR) x="<A href=\"$*\">$*</A>"
2351
getline
2352
print -nr -- "$*" "$x"
2353
;;
2354
.VE) : ignore $op
2355
;;
2356
.VS) : ignore $op
2357
;;
2358
.YS) if (( man_SY ))
2359
then man_SY=0
2360
getline
2361
print -r -- "$*"
2362
fi
2363
;;
2364
.ad) : ignore $op
2365
;;
2366
.al) : ignore $op
2367
;;
2368
.bd) : ignore $op
2369
;;
2370
.br|.) if [[ $Sh == SYNOPSIS ]]
2371
then print "<P>"
2372
else print "<BR>"
2373
fi
2374
;;
2375
.cp) : ignore $op
2376
;;
2377
.cs) : ignore $op
2378
;;
2379
.da|.di)x=$1
2380
t=
2381
while getline
2382
do case $1:$2 in
2383
$op:) break ;;
2384
esac
2385
t=$t$nl$*
2386
done
2387
if [[ $op == .di || ! ${ds[$x]} ]]
2388
then ds[$x]=${t#?}
2389
else ds[$x]=${ds[$x]}$t
2390
fi
2391
;;
2392
.de|.am|.ig)
2393
end=..
2394
case $#:$op in
2395
0:*) ;;
2396
*:.ig) end=$1 ;;
2397
esac
2398
: ignore $op to $end
2399
while getline
2400
do case $1 in
2401
$end) break ;;
2402
esac
2403
done
2404
;;
2405
.do) : ignore $op
2406
;;
2407
.ds) op=$1
2408
shift
2409
ds[$op]=$*
2410
;;
2411
.ec) : ignore $op
2412
;;
2413
.eo) : ignore $op
2414
;;
2415
.f[tBILPR])
2416
case $op in
2417
.f[BILPR])
2418
set -- ${op#.f}
2419
;;
2420
esac
2421
case $1 in
2422
5|TT) font=TT
2423
print -n -r -- "<$font>"
2424
;;
2425
[BI]) font=$1
2426
print -n -r -- "<$font>"
2427
;;
2428
*) case $font in
2429
?*) print -n -r -- "</$font>"
2430
font=
2431
;;
2432
esac
2433
;;
2434
esac
2435
;;
2436
.fc) : ignore $op
2437
;;
2438
.fp) : ignore $op
2439
;;
2440
.hc) : ignore $op
2441
;;
2442
.hw) : ignore $op
2443
;;
2444
.hy) : ignore $op
2445
;;
2446
.in) case $1 in
2447
-*|"") while (( lists > 0 ))
2448
do print -r -- "</${list[lists]}>"
2449
case ${type[lists--]} in
2450
.in) break ;;
2451
esac
2452
done
2453
;;
2454
+*) type[++lists]=$op
2455
list[lists]=DIV
2456
print -r -- "<DIV class=HI>"
2457
;;
2458
esac
2459
print "<BR>"
2460
;;
2461
.lf) : ignore $op
2462
;;
2463
.ll) : ignore $op
2464
;;
2465
.na) : ignore $op
2466
;;
2467
.ne) : ignore $op
2468
;;
2469
.nh) : ignore $op
2470
;;
2471
.nr) op=$1
2472
shift
2473
nr[$op]=$*
2474
;;
2475
.ns) : ignore $op
2476
;;
2477
.pl) : ignore $op
2478
;;
2479
.ps|.pS)case $1 in
2480
[-+][0123456789])
2481
print -r -- "<FONT SIZE=$1>"
2482
;;
2483
esac
2484
;;
2485
.rn) : ignore $op
2486
;;
2487
.sh) case $HTMLPATH in
2488
'') ;;
2489
*) (( fd = so + soff ))
2490
file=/tmp/m2h$$
2491
#( eval PATH=$HTMLPATH "$*" ) > $file
2492
$SHELL -c "PATH=$HTMLPATH $*" > $file
2493
eval exec "$fd< $file"
2494
rm $file
2495
so_file[so]=$file
2496
file=$1
2497
so_line[so]=$line
2498
(( line = 0 ))
2499
(( so++ ))
2500
;;
2501
esac
2502
;;
2503
.sn) for d in "${dirs[@]}"
2504
do if [[ -f "$d$1" ]]
2505
then cat "$d$1"
2506
continue 2
2507
fi
2508
done
2509
warning "$1: $op cannot read"
2510
;;
2511
.sp|.SP|.Sp)
2512
while [[ ${type[lists]} == .H[01234] ]]
2513
do print -r -- "</${list[lists--]}>"
2514
done
2515
case $1 in
2516
[0123456789]*)
2517
count=$1
2518
while (( count >= 0 ))
2519
do (( count-- ))
2520
print -r -- "<BR>"
2521
done
2522
;;
2523
*) print -r -- "<P>"
2524
;;
2525
esac
2526
;;
2527
.ta) : ignore $op
2528
;;
2529
.ti) : ignore $op
2530
;;
2531
.tr) x=$1
2532
while [[ $x ]]
2533
do if [[ $x == '\('??* ]]
2534
then f=${x:0:4}
2535
x=${x#????}
2536
else f=${x:0:1}
2537
x=${x#?}
2538
fi
2539
i=${x#?}
2540
t=${x%$i}
2541
x=$i
2542
tr[$f]=${t:-'&nbsp;'}
2543
tr_chars+=\\$f
2544
done
2545
;;
2546
.ul) : ignore $op
2547
;;
2548
.vs) : ignore $op
2549
;;
2550
.vG) vg=$1
2551
inch=" "
2552
set +o noglob
2553
rm -f [0123456789][0123456789].html index.html outline.html
2554
set -o noglob
2555
exec > $page.html
2556
outline[$page]=$2
2557
header='<BASEFONT face="geneva,arial,helvetica" size=5>'
2558
title "${2//\<*([!>])\>/}"
2559
print "<BODY bgcolor='#ffffff'>"
2560
print "${pm}<CENTER>"
2561
print "<BR><H1><FONT color=red>$2</FONT></H1><BR>"
2562
case $# in
2563
0|1|2) ;;
2564
*) shift 2
2565
for name
2566
do [[ $name == "-" ]] && name=""
2567
print -- "<BR>$name"
2568
done
2569
;;
2570
esac
2571
print "</CENTER>"
2572
print "<P>"
2573
;;
2574
.vH) print -r -- "<CENTER>
2575
<BR>
2576
<H1><FONT color=red> $1 </FONT></H1>
2577
<BR>
2578
</CENTER>"
2579
;;
2580
.vP) while (( lists > 0 ))
2581
do print -r -- "</${list[lists--]}>"
2582
done
2583
print -r -- "${trailer}
2584
</HTML>"
2585
((page++))
2586
exec > $page.html
2587
outline[$page]=$1
2588
trailer=
2589
title "${1//\<*([!>])\>/}"
2590
print "<BODY bgcolor='#ffffff'>"
2591
print "${pm}<CENTER>"
2592
print "<BR><H1><FONT color=red>$1</FONT></H1>"
2593
print "</CENTER>"
2594
print "<P>"
2595
;;
2596
.nS) print -r -- "<DIV id='notes'>"
2597
;;
2598
.tS) print -r -- "<DIV id='tutorial'>"
2599
;;
2600
.nE|.tE)print -r -- "</DIV>"
2601
;;
2602
.A[cdoqrt]|.B[coqx]|.C[dm]|.D[coqvx]|.E[mrvx]|.F[acdlnotx]|.I[cnx]|.L[bi]|.N[ox]|.Ox|.P[acfoq]|.Q[cloq]|.Rv|.S[coqty]|.T[an]|.Ux|.V[at]|.Xo)
2603
mandoc -space ${op#.} "$@"
2604
;;
2605
.An) case $1 in
2606
-split) An_sep=-line
2607
;;
2608
-nosplit)
2609
An_sep=-space
2610
;;
2611
-*) ;;
2612
*) if (( $# >= 2 ))
2613
then print -nr -- "$1 $2 "
2614
shift 2
2615
mandoc $An_sep "$@"
2616
else print -r -- "$1"
2617
fi
2618
;;
2619
esac
2620
;;
2621
.Bk) : mandoc :
2622
;;
2623
.Bl) i=
2624
for o
2625
do case $o in
2626
-bullet) i="type=disc" ;;
2627
-dash|-hyphen) i="type=box" ;;
2628
-enum) i=OL ;;
2629
esac
2630
done
2631
case $i in
2632
OL) type[++lists]=.AL
2633
list[lists]=OL
2634
print -r -- "<OL>"
2635
;;
2636
*=*) type[++lists]=.AL
2637
list[lists]=UL
2638
print -r -- "<UL $i>"
2639
;;
2640
*) type[++lists]=.AL
2641
list[lists]=DIV
2642
print -r -- "<DIV class=FI>"
2643
type[++lists]=.al
2644
list[lists]=DL
2645
print -r -- "<DL>"
2646
;;
2647
esac
2648
;;
2649
.D1) (( $# )) || getline
2650
print -r -- "<DL><DT><DD>$*</DL>"
2651
;;
2652
.Dl) (( $# )) || getline
2653
print -r -- "<DL><DT><DD><TT>$*</TT></DL>"
2654
;;
2655
.Ek) : mandoc :
2656
;;
2657
.Id) meta="$meta$nl<META name=\"ident\" content=\"$*\">"
2658
;;
2659
.It) if (( $# ))
2660
then mandoc label "$@"
2661
set -A text -- .LI "$label"
2662
elif [[ ${list[lists]} == DL ]]
2663
then getline
2664
if [[ $1 == .[[:upper:]][[:lower:]] ]]
2665
then x=$1
2666
shift
2667
set -- "${x#.}" "$@"
2668
fi
2669
mandoc label "$@"
2670
set -A text -- .LI "$label"
2671
else set -A text -- .LI
2672
fi
2673
peek=1
2674
;;
2675
.Nd) print -nr -- "&#45;" "$@" ""
2676
;;
2677
.Nm) [[ $1 ]] && ds[Nm]=$1
2678
[[ $Sh == SYNOPSIS ]] && print "<BR>"
2679
print -nr -- "<B>${ds[Nm]}</B> "
2680
;;
2681
.Oo) mandoc -space ${op#.} "$@"
2682
;;
2683
.O[cp]) mandoc - ${op#.} "$@"
2684
;;
2685
.Os) : mandoc :
2686
;;
2687
.Pp) print -r -- "<P>"
2688
;;
2689
.Re) print -r -- ".<P>"
2690
;;
2691
.Rs) print -r -- "<P>"
2692
Rs_sep=''
2693
;;
2694
.Sm) case $1 in
2695
on) Sm=" " ;;
2696
off) Sm="" ;;
2697
*) case $Sm in
2698
" ") Sm="" ;;
2699
"") Sm=" " ;;
2700
esac
2701
;;
2702
esac
2703
;;
2704
.Sx) print -r -- "<NOBR><A href=\"#$1\">$1</A>$2</NOBR>"
2705
;;
2706
.Xr) print -r -- "<NOBR><A href=\"../man$2/$1.html\"><B>$1</B></A>($2)$3</NOBR>"
2707
;;
2708
.%A) print -nr -- "$Rs_sep$*"
2709
Rs_sep=", "
2710
;;
2711
.%D) print -nr -- "$Rs_sep$*"
2712
Rs_sep=", "
2713
;;
2714
.%N) print -nr -- "$Rs_sep<I>$*</I>"
2715
Rs_sep=", "
2716
;;
2717
.%O) print -nr -- "$Rs_sep$*"
2718
Rs_sep=", "
2719
;;
2720
.%T) print -nr -- "$Rs_sep<U>$*</U>"
2721
Rs_sep=", "
2722
;;
2723
*) warning "$op: unknown op"
2724
;;
2725
esac
2726
;;
2727
[\ \ ]*)
2728
case $macros in
2729
man) leading=1
2730
prefix="<TT><PRE>"
2731
blank=
2732
while :
2733
do case $1 in
2734
*([\ \ ]))
2735
case $leading in
2736
1) leading= ;;
2737
*) blank=$'\n' ;;
2738
esac
2739
;;
2740
[\ \ ]*)
2741
print -r -- "$prefix$blank$inch$*"
2742
blank=
2743
leading=
2744
prefix=
2745
;;
2746
*) (( peek = 1 ))
2747
break
2748
;;
2749
esac
2750
getline || break
2751
done
2752
case $prefix in
2753
"") print -r -- "</PRE></TT>" ;;
2754
esac
2755
;;
2756
*) print -r -- "$*"
2757
;;
2758
esac
2759
;;
2760
"") case $macros in
2761
man) print -r -- "<P>" ;;
2762
*) print -r -- "$*" ;;
2763
esac
2764
;;
2765
*) print -r -- "$*"
2766
;;
2767
esac
2768
done
2769
while (( lists > 0 ))
2770
do print -r -- "</${list[lists--]}>"
2771
done
2772
case $references in
2773
?*) heading .H 1 References
2774
print "<P>"
2775
print "<DL compact>"
2776
print -r -- "$references"
2777
print "</DL>"
2778
;;
2779
esac
2780
if (( faq ))
2781
then print -r "<TABLE cellpadding=4>
2782
<TR>
2783
<TD bgcolor=teal><A href='#' onclick='FAQ_mark(\"show\")'><FONT color=\"#FFD87D\">show all answers</FONT></A></TD>
2784
<TD bgcolor=teal><A href='#' onclick='FAQ_mark(\"hide\")'><FONT color=\"#FFD87D\">hide all answers</FONT></A></TD>
2785
</TR>
2786
</TABLE>"
2787
fi
2788
print -r -- "<P>"
2789
print -r -- "<HR>"
2790
print -r -- "<TABLE border=0 align=center width=96%>"
2791
integer dls=0 dcs=0 drs=0
2792
typeset d dl dc dr
2793
case ${html.ident} in
2794
1) case ${license.author} in
2795
?*) IFS=',+'
2796
set -- ${license.author}
2797
IFS=$ifs
2798
d=""
2799
sp=""
2800
for a
2801
do v=${contributor[$a]}
2802
case $v in
2803
?*) a=$v ;;
2804
esac
2805
IFS='<>'
2806
set -- $a
2807
IFS=$ifs
2808
case $2 in
2809
?*) d="$d$sp<A href=\"mailto:$2?subject=$title\">"
2810
sp=", "
2811
set -- $1
2812
d="$d$*</A>"
2813
;;
2814
esac
2815
done
2816
[[ $d ]] && dr[++drs]=$d
2817
;;
2818
*) case ${html.MAILTO} in
2819
?*) dr[++drs]="<A href=\"mailto:${html.MAILTO}?subject=$title\">${html.MAILTO}</A>" ;;
2820
esac
2821
;;
2822
esac
2823
for i in "${license.organization}" "${license.corporation} ${license.company}" "${license.address}" "${license.location}" "${license.phone}"
2824
do case $i in
2825
''|' ') ;;
2826
*) dr[++drs]="${i//\&/\&amp\;}" ;;
2827
esac
2828
done
2829
;;
2830
esac
2831
dr[++drs]="${ds[Dt]}"
2832
(( drs < dls )) && (( drs = dls ))
2833
for (( dls = 1; dls <= drs; dls++ ))
2834
do print -r -- "<TR>$nl<TD align=left>${dl[dls]}</TD>$nl<TD align=center>${dc[dls]}</TD>$nl<TD align=right>${dr[dls]}</TD>$nl</TR>"
2835
done
2836
print -r -- "</TABLE>"
2837
print -r -- "<P>"
2838
case ${html.footing} in
2839
?*) html.toolbar=
2840
hit=
2841
if [[ -f ${html.footing} ]]
2842
then hit=${html.footing}
2843
elif [[ -f $HOME/${html.footing} ]]
2844
then hit=$HOME/${html.footing}
2845
else IFS=:
2846
set "" $HOME $PATH
2847
IFS=$ifs
2848
for i
2849
do if [[ -f ${i%/bin}/lib/${html.footing} ]]
2850
then hit=${i%/bin}/lib/${html.footing}
2851
break
2852
fi
2853
done
2854
fi
2855
case $hit in
2856
"") print -u2 "$command: ${html.footing}: cannot read"
2857
code=1
2858
;;
2859
*) eval "cat <<!
2860
$(cat $hit)
2861
!"
2862
;;
2863
esac
2864
;;
2865
esac
2866
case ${html.toolbar} in
2867
?*) hit=
2868
if [[ -f ${html.toolbar} ]]
2869
then hit=${html.toolbar}
2870
elif [[ -f $HOME/${html.toolbar} ]]
2871
then hit=$HOME/${html.toolbar}
2872
else IFS=:
2873
set "" $HOME $PATH
2874
IFS=$ifs
2875
for i
2876
do if [[ -f ${i%/bin}/lib/${html.toolbar} ]]
2877
then hit=${i%/bin}/lib/${html.toolbar}
2878
break
2879
fi
2880
done
2881
fi
2882
case $hit in
2883
"") print -u2 "$command: ${html.toolbar}: cannot read"
2884
code=1
2885
;;
2886
*) eval "cat <<!
2887
$(cat $hit)
2888
!"
2889
;;
2890
esac
2891
;;
2892
esac
2893
trailer="$trailer$nl</HTML>"
2894
print -r -- "$trailer"
2895
case $frame in
2896
?*) if [[ ! $framelink && ${html.labels} != 0 ]] && (( labels > 1 ))
2897
then if [[ $macros == man ]]
2898
then mv $framebody $frame-man.html
2899
frameref=${frame##*/}
2900
{
2901
ident
2902
print -r -- "<TITLE>$file table of contents</TITLE>"
2903
[[ ${html.menu.style} ]] && print -r -- "${html.menu.style}"
2904
[[ ${html.menu.script} ]] && print -r -- "${html.menu.script}"
2905
print -r -- "</HEAD>"
2906
print -r -- "<BODY" ${html.BODY/'('@(*)')'/\1} ">"
2907
[[ ${html.menu.id} ]] && print -r -- "<DIV id=${html.menu.id}>"
2908
print -r -- "<UL>"
2909
(( lev = level[0] ))
2910
for ((n = 0; n < labels; n++))
2911
do while (( lev < level[n] ))
2912
do (( lev++ ))
2913
print -r -- "<UL>"
2914
done
2915
while (( lev > level[n] ))
2916
do (( lev-- ))
2917
print -r -- "</UL>"
2918
done
2919
print -r -- "<LI><A href=\"$frameref-man.html#${label[n]}\" target=\"man\">${label[n]}</A>"
2920
done
2921
while (( lev > level[0] ))
2922
do (( lev-- ))
2923
print -r -- "</UL>"
2924
done
2925
print -r -- "</UL>"
2926
[[ ${html.menu.id} ]] && print -r -- "</DIV>"
2927
print -r -- "</BODY>"
2928
print -r -- "</HTML>"
2929
} > $frame-toc.html
2930
{
2931
ident
2932
print -r -- "<TITLE>$file frame sets</TITLE>$nl</HEAD>"
2933
print -r -- "<BASE>"
2934
print -r -- "</HEAD>"
2935
print -r -- "<FRAMESET cols=\"20%,80%\" framespacing=0 frameborder=0 border=0>"
2936
print -r -- "<FRAME src=\"$frameref-toc.html\" name=\"toc\" marginwidth=0 marginheight=0>"
2937
print -r -- "<FRAME src=\"$frameref-man.html\" name=\"man\" marginwidth=0 marginheight=0>"
2938
print -r -- "</FRAMESET>"
2939
print -r -- "</HTML>"
2940
} > $framebody
2941
else exec > $frame-temp.html || exit
2942
print -r -- "<B><FONT size=-1 face=\"${ss}\">"
2943
print -r -- "<TABLE align=center cellpadding=2 border=4 bgcolor=lightgrey><TR>"
2944
for ((n = 0; n < labels; n++))
2945
do print -r -- "<TD><A href=\"#${label[n]}\">${label[n]}</A></TD>"
2946
done
2947
print -r -- "</TR></TABLE>"
2948
print -r -- "</FONT></B>"
2949
exec > /dev/null || exit
2950
ed $framebody <<!
2951
/<!--INDEX-->/r $frame-temp.html
2952
w
2953
q
2954
!
2955
rm $frame-temp.html
2956
fi
2957
fi
2958
case $index in
2959
?*) case $index in
2960
local) exec > $frame-index.html || exit ;;
2961
global) exec > index.html || exit ;;
2962
esac
2963
unset html.FRAMESET.rows html.FRAMESET.cols
2964
ident
2965
case $framelink in
2966
'') framelink=$frame.html ;;
2967
esac
2968
print -r -- "<TITLE>$title</TITLE>$framerefs
2969
</HEAD>"
2970
if [[ ${html.frameindex} && -f ${html.frameindex} ]]
2971
then sed "s,\${INDEX},${framelink}," ${html.frameindex}
2972
else print -r -- " <FRAMESET" ${html.FRAMESET/'('@(*)')'/\1} ${html.index.top.FRAMESET/'('@(*)')'/\1} ">
2973
<FRAME" marginwidth=0 marginheight=0 ${html.FRAME/'('@(*)')'/\1} ${html.index.top.FRAME/'('@(*)')'/\1} "scrolling=no>
2974
<FRAME" marginwidth=0 marginheight=0 ${html.FRAME/'('@(*)')'/\1} src="'$framelink'" "scrolling=auto>
2975
</FRAMESET>"
2976
fi
2977
print -r -- "</HTML>"
2978
;;
2979
esac
2980
;;
2981
*) if [[ $redirect_old ]]
2982
then eval "exec 1>&$redirect_old $redirect_old>&-"
2983
fi
2984
if [[ ${html.labels} != 0 ]] && (( labels > 1 ))
2985
then if [[ ${html.labels} != +([0-9]) || ${html.labels} == 1 ]]
2986
then html.labels=7
2987
fi
2988
print -r -- "<!--LABELS-->"
2989
print -r -- "<B><FONT size=-1 face=\"${ss}\">"
2990
print -r -- "<TABLE align=center cellpadding=2 border=4 bgcolor=lightgrey width=90%><TR>"
2991
for ((n = 0; n < labels; n++))
2992
do print -r -- "<TD align=center valign=center><A href=\"#${label[n]}\">${label[n]}</A></TD>"
2993
if (( (n + 1) < labels && !( (n + 1) % ${html.labels} ) ))
2994
then print -r -- "</TR><TR>"
2995
fi
2996
done
2997
print -r -- "</TR></TABLE>"
2998
print -r -- "</FONT></B>"
2999
print -r -- "<!--/LABELS-->"
3000
fi
3001
if [[ $redirect_new ]]
3002
then eval "cat <&$redirect_new"
3003
fi
3004
;;
3005
esac
3006
case $vg in
3007
?*) frame=$vg
3008
trailer=
3009
pages=${page#0}
3010
exec > index.html
3011
title "${outline[01]//\<*([!>])\>/}"
3012
print -r -- "<FRAMESET marginheight=0 marginwidth=0 cols='135,*,66' border=0 noresize onload='goto_slide(1)'>
3013
<FRAME src=../lib/prev.html name='prev' noresize scrolling=no marginwidth=0 marginheight=0>
3014
<FRAME src=../lib/start.html name='slide' noresize scrolling=auto marginwidth=0 marginheight=0>
3015
<FRAME src=../lib/next.html name='next' noresize scrolling=no marginwidth=0 marginheight=0>
3016
</FRAMESET>
3017
</HTML>"
3018
exec > outline.html
3019
title "${title} outline"
3020
print -r -- "<BODY bgcolor='#ffffff'>
3021
${pm}<CENTER>
3022
<BR><H1><FONT color=red>outline</FONT></H1>
3023
<P>
3024
<TABLE cellspacing=1 cellpadding=1 border=1 class=box>"
3025
for ((page=1; page <= pages; page++))
3026
do print "<TR><TD><A href='javascript:goto_slide(${page#0})'><CENTER>${outline[$page]}</CENTER></A></TD></TR>"
3027
done
3028
print "</TABLE>
3029
</CENTER>
3030
</BODY>
3031
</HTML>"
3032
;;
3033
esac
3034
exit $code
3035
3036