Artifact
51715ac9a0c6f00f39b2b953ef6e3192eaf4b13718a33cba67069be555b6b16c :
File
tools/tcltk-man2html-utils.tcl
— part of check-in
[0ce8e13e17]
at
2023-05-24 15:22:00
on branch core-8-branch
— Fix regular expression in previous commit
(user:
jan.nijtmans
size: 44378)
[more...]
0000: 23 23 0a 23 23 20 55 74 69 6c 69 74 79 20 66 75 ##.## Utility fu
0010: 6e 63 74 69 6f 6e 73 20 66 6f 72 20 4d 61 6e 2d nctions for Man-
0020: 3e 48 54 4d 4c 20 63 6f 6e 76 65 72 74 65 72 2e >HTML converter.
0030: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 73 65 Note that these
0040: 0a 23 23 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 .## functions ar
0050: 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 69 e specifically i
0060: 6e 74 65 6e 64 65 64 20 74 6f 20 77 6f 72 6b 20 ntended to work
0070: 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74 20 with the format
0080: 61 73 20 75 73 65 64 0a 23 23 20 62 79 20 54 63 as used.## by Tc
0090: 6c 20 61 6e 64 20 54 6b 3b 20 74 68 65 79 20 64 l and Tk; they d
00a0: 6f 20 6e 6f 74 20 63 6f 70 65 20 77 69 74 68 20 o not cope with
00b0: 61 72 62 69 74 72 61 72 79 20 6e 72 6f 66 66 20 arbitrary nroff
00c0: 6d 61 72 6b 75 70 2e 0a 23 23 0a 23 23 20 43 6f markup..##.## Co
00d0: 70 79 72 69 67 68 74 20 c2 a9 20 31 39 39 35 2d pyright © 1995-
00e0: 31 39 39 37 20 52 6f 67 65 72 20 45 2e 20 43 72 1997 Roger E. Cr
00f0: 69 74 63 68 6c 6f 77 20 4a 72 0a 23 23 20 43 6f itchlow Jr.## Co
0100: 70 79 72 69 67 68 74 20 c2 a9 20 32 30 30 34 2d pyright © 2004-
0110: 32 30 31 31 20 44 6f 6e 61 6c 20 4b 2e 20 46 65 2011 Donal K. Fe
0120: 6c 6c 6f 77 73 0a 0a 73 65 74 20 3a 3a 6d 61 6e llows..set ::man
0130: 75 61 6c 28 72 65 70 6f 72 74 2d 6c 65 76 65 6c ual(report-level
0140: 29 20 31 0a 0a 70 72 6f 63 20 6d 61 6e 65 72 72 ) 1..proc manerr
0150: 6f 72 20 7b 6d 73 67 7d 20 7b 0a 20 20 20 20 67 or {msg} {. g
0160: 6c 6f 62 61 6c 20 6d 61 6e 75 61 6c 0a 20 20 20 lobal manual.
0170: 20 73 65 74 20 6e 61 6d 65 20 7b 7d 0a 20 20 20 set name {}.
0180: 20 73 65 74 20 73 75 62 6a 20 7b 7d 0a 20 20 20 set subj {}.
0190: 20 73 65 74 20 70 72 6f 63 6e 61 6d 65 20 5b 6c set procname [l
01a0: 69 6e 64 65 78 20 5b 69 6e 66 6f 20 6c 65 76 65 index [info leve
01b0: 6c 20 2d 31 5d 20 30 5d 0a 20 20 20 20 69 66 20 l -1] 0]. if
01c0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 61 {[info exists ma
01d0: 6e 75 61 6c 28 6e 61 6d 65 29 5d 7d 20 7b 0a 09 nual(name)]} {..
01e0: 73 65 74 20 6e 61 6d 65 20 24 6d 61 6e 75 61 6c set name $manual
01f0: 28 6e 61 6d 65 29 0a 20 20 20 20 7d 0a 20 20 20 (name). }.
0200: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist
0210: 73 20 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f 6e s manual(section
0220: 29 5d 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 )] && [string le
0230: 6e 67 74 68 20 24 6d 61 6e 75 61 6c 28 73 65 63 ngth $manual(sec
0240: 74 69 6f 6e 29 5d 7d 20 7b 0a 09 70 75 74 73 20 tion)]} {..puts
0250: 73 74 64 65 72 72 20 22 24 6e 61 6d 65 3a 20 24 stderr "$name: $
0260: 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f 6e 29 3a manual(section):
0270: 20 24 70 72 6f 63 6e 61 6d 65 3a 20 24 6d 73 67 $procname: $msg
0280: 22 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 ". } else {..
0290: 70 75 74 73 20 73 74 64 65 72 72 20 22 24 6e 61 puts stderr "$na
02a0: 6d 65 3a 20 24 70 72 6f 63 6e 61 6d 65 3a 20 24 me: $procname: $
02b0: 6d 73 67 22 0a 20 20 20 20 7d 0a 7d 0a 0a 70 72 msg". }.}..pr
02c0: 6f 63 20 6d 61 6e 72 65 70 6f 72 74 20 7b 6c 65 oc manreport {le
02d0: 76 65 6c 20 6d 73 67 7d 20 7b 0a 20 20 20 20 67 vel msg} {. g
02e0: 6c 6f 62 61 6c 20 6d 61 6e 75 61 6c 0a 20 20 20 lobal manual.
02f0: 20 69 66 20 7b 24 6c 65 76 65 6c 20 3c 20 24 6d if {$level < $m
0300: 61 6e 75 61 6c 28 72 65 70 6f 72 74 2d 6c 65 76 anual(report-lev
0310: 65 6c 29 7d 20 7b 0a 09 75 70 6c 65 76 65 6c 20 el)} {..uplevel
0320: 31 20 5b 6c 69 73 74 20 6d 61 6e 65 72 72 6f 72 1 [list manerror
0330: 20 24 6d 73 67 5d 0a 20 20 20 20 7d 0a 7d 0a 0a $msg]. }.}..
0340: 70 72 6f 63 20 66 61 74 61 6c 20 7b 6d 73 67 7d proc fatal {msg}
0350: 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 6d 61 {. global ma
0360: 6e 75 61 6c 0a 20 20 20 20 75 70 6c 65 76 65 6c nual. uplevel
0370: 20 31 20 5b 6c 69 73 74 20 6d 61 6e 65 72 72 6f 1 [list manerro
0380: 72 20 24 6d 73 67 5d 0a 20 20 20 20 65 78 69 74 r $msg]. exit
0390: 20 31 0a 7d 0a 0c 0a 23 23 0a 23 23 20 74 65 6d 1.}...##.## tem
03a0: 70 6c 61 74 69 6e 67 0a 23 23 0a 70 72 6f 63 20 plating.##.proc
03b0: 69 6e 64 65 78 66 69 6c 65 20 7b 7d 20 7b 0a 20 indexfile {} {.
03c0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi
03d0: 73 74 73 20 3a 3a 54 41 52 47 45 54 5d 20 26 26 sts ::TARGET] &&
03e0: 20 24 3a 3a 54 41 52 47 45 54 20 65 71 20 22 64 $::TARGET eq "d
03f0: 65 76 73 69 74 65 22 7d 20 7b 0a 09 72 65 74 75 evsite"} {..retu
0400: 72 6e 20 22 69 6e 64 65 78 2e 74 6d 6c 22 0a 20 rn "index.tml".
0410: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 72 65 74 } else {..ret
0420: 75 72 6e 20 22 69 6e 64 65 78 2e 68 74 6d 6c 22 urn "index.html"
0430: 0a 20 20 20 20 7d 0a 7d 0a 0a 70 72 6f 63 20 63 . }.}..proc c
0440: 6f 70 79 72 69 67 68 74 20 7b 63 6f 70 79 72 69 opyright {copyri
0450: 67 68 74 20 7b 6c 65 76 65 6c 20 7b 7d 7d 7d 20 ght {level {}}}
0460: 7b 0a 20 20 20 20 23 20 57 65 20 64 6f 6e 27 74 {. # We don't
0470: 20 61 63 74 75 61 6c 6c 79 20 67 65 6e 65 72 61 actually genera
0480: 74 65 20 61 20 73 65 70 61 72 61 74 65 20 63 6f te a separate co
0490: 70 79 72 69 67 68 74 20 70 61 67 65 20 61 6e 79 pyright page any
04a0: 6d 6f 72 65 0a 20 20 20 20 23 73 65 74 20 70 61 more. #set pa
04b0: 67 65 20 22 24 7b 6c 65 76 65 6c 7d 63 6f 70 79 ge "${level}copy
04c0: 72 69 67 68 74 2e 68 74 6d 6c 22 0a 20 20 20 20 right.html".
04d0: 23 72 65 74 75 72 6e 20 22 3c 61 20 68 72 65 66 #return "<a href
04e0: 3d 5c 22 24 70 61 67 65 5c 22 3e 43 6f 70 79 72 =\"$page\">Copyr
04f0: 69 67 68 74 3c 2f 61 3e 20 26 63 6f 70 79 3b 20 ight</a> ©
0500: 5b 68 74 6d 6c 69 7a 65 2d 74 65 78 74 20 5b 6c [htmlize-text [l
0510: 72 61 6e 67 65 20 24 63 6f 70 79 72 69 67 68 74 range $copyright
0520: 20 32 20 65 6e 64 5d 5d 22 0a 20 20 20 20 23 20 2 end]]". #
0530: 6f 62 66 75 73 63 61 74 65 20 61 6e 79 20 65 6d obfuscate any em
0540: 61 69 6c 20 61 64 64 72 65 73 73 65 73 20 74 68 ail addresses th
0550: 61 74 20 6d 61 79 20 61 70 70 65 61 72 20 69 6e at may appear in
0560: 20 6e 61 6d 65 0a 20 20 20 20 73 65 74 20 77 68 name. set wh
0570: 6f 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 40 o [string map {@
0580: 20 28 61 74 29 7d 20 5b 6c 72 61 6e 67 65 20 24 (at)} [lrange $
0590: 63 6f 70 79 72 69 67 68 74 20 32 20 65 6e 64 5d copyright 2 end]
05a0: 5d 0a 20 20 20 20 72 65 74 75 72 6e 20 22 43 6f ]. return "Co
05b0: 70 79 72 69 67 68 74 20 26 63 6f 70 79 3b 20 5b pyright © [
05c0: 68 74 6d 6c 69 7a 65 2d 74 65 78 74 20 24 77 68 htmlize-text $wh
05d0: 6f 5d 22 0a 7d 0a 0a 70 72 6f 63 20 63 6f 70 79 o]".}..proc copy
05e0: 6f 75 74 20 7b 63 6f 70 79 72 69 67 68 74 73 20 out {copyrights
05f0: 7b 6c 65 76 65 6c 20 7b 7d 7d 7d 20 7b 0a 20 20 {level {}}} {.
0600: 20 20 73 65 74 20 63 6f 75 6e 74 20 30 0a 20 20 set count 0.
0610: 20 20 73 65 74 20 6f 75 74 20 22 3c 64 69 76 20 set out "<div
0620: 63 6c 61 73 73 3d 5c 22 63 6f 70 79 5c 22 3e 22 class=\"copy\">"
0630: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 63 20 24 . foreach c $
0640: 63 6f 70 79 72 69 67 68 74 73 20 7b 0a 09 69 66 copyrights {..if
0650: 20 7b 24 63 6f 75 6e 74 20 3e 20 30 7d 20 7b 0a {$count > 0} {.
0660: 09 20 20 20 20 61 70 70 65 6e 64 20 6f 75 74 20 . append out
0670: 3c 62 72 3e 0a 09 7d 0a 09 61 70 70 65 6e 64 20 <br>..}..append
0680: 6f 75 74 20 22 5b 63 6f 70 79 72 69 67 68 74 20 out "[copyright
0690: 24 63 20 24 6c 65 76 65 6c 5d 5c 6e 22 0a 09 69 $c $level]\n"..i
06a0: 6e 63 72 20 63 6f 75 6e 74 0a 20 20 20 20 7d 0a ncr count. }.
06b0: 20 20 20 20 61 70 70 65 6e 64 20 6f 75 74 20 22 append out "
06c0: 3c 2f 64 69 76 3e 22 0a 20 20 20 20 72 65 74 75 </div>". retu
06d0: 72 6e 20 24 6f 75 74 0a 7d 0a 0a 70 72 6f 63 20 rn $out.}..proc
06e0: 43 53 53 20 7b 7b 6c 65 76 65 6c 20 22 22 7d 7d CSS {{level ""}}
06f0: 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 22 3c {. return "<
0700: 6c 69 6e 6b 20 72 65 6c 3d 5c 22 73 74 79 6c 65 link rel=\"style
0710: 73 68 65 65 74 5c 22 20 68 72 65 66 3d 5c 22 24 sheet\" href=\"$
0720: 7b 6c 65 76 65 6c 7d 24 3a 3a 43 53 53 46 49 4c {level}$::CSSFIL
0730: 45 5c 22 20 74 79 70 65 3d 5c 22 74 65 78 74 2f E\" type=\"text/
0740: 63 73 73 5c 22 20 6d 65 64 69 61 3d 5c 22 61 6c css\" media=\"al
0750: 6c 5c 22 3e 5c 6e 22 0a 7d 0a 0a 70 72 6f 63 20 l\">\n".}..proc
0760: 68 74 6d 6c 68 65 61 64 20 7b 74 69 74 6c 65 20 htmlhead {title
0770: 68 65 61 64 65 72 20 61 72 67 73 7d 20 7b 0a 20 header args} {.
0780: 20 20 20 73 65 74 20 6c 65 76 65 6c 20 22 22 0a set level "".
0790: 20 20 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20 if {[lindex
07a0: 24 61 72 67 73 20 65 6e 64 5d 20 65 71 20 22 2e $args end] eq ".
07b0: 2e 2f 5b 69 6e 64 65 78 66 69 6c 65 5d 22 7d 20 ./[indexfile]"}
07c0: 7b 0a 09 23 20 58 58 58 20 68 61 63 6b 20 2d 20 {..# XXX hack -
07d0: 61 73 73 75 6d 65 20 73 61 6d 65 20 6c 65 76 65 assume same leve
07e0: 6c 20 66 6f 72 20 43 53 53 20 66 69 6c 65 0a 09 l for CSS file..
07f0: 73 65 74 20 6c 65 76 65 6c 20 22 2e 2e 2f 22 0a set level "../".
0800: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 6f 75 }. set ou
0810: 74 20 22 3c 21 44 4f 43 54 59 50 45 20 68 74 6d t "<!DOCTYPE htm
0820: 6c 3e 5c 6e 3c 68 74 6d 6c 20 6c 61 6e 67 3d 5c l>\n<html lang=\
0830: 22 65 6e 5c 22 3e 5c 6e 3c 68 65 61 64 3e 3c 6d "en\">\n<head><m
0840: 65 74 61 20 63 68 61 72 73 65 74 3d 5c 22 75 74 eta charset=\"ut
0850: 66 2d 38 5c 22 3e 3c 74 69 74 6c 65 3e 24 74 69 f-8\"><title>$ti
0860: 74 6c 65 3c 2f 74 69 74 6c 65 3e 5c 6e 5b 43 53 tle</title>\n[CS
0870: 53 20 24 6c 65 76 65 6c 5d 3c 2f 68 65 61 64 3e S $level]</head>
0880: 5c 6e 22 0a 20 20 20 20 66 6f 72 65 61 63 68 20 \n". foreach
0890: 7b 75 70 74 69 74 6c 65 20 75 72 6c 7d 20 24 61 {uptitle url} $a
08a0: 72 67 73 20 7b 0a 09 73 65 74 20 68 65 61 64 65 rgs {..set heade
08b0: 72 20 22 3c 61 20 68 72 65 66 3d 5c 22 24 75 72 r "<a href=\"$ur
08c0: 6c 5c 22 3e 24 75 70 74 69 74 6c 65 3c 2f 61 3e l\">$uptitle</a>
08d0: 20 3c 73 6d 61 6c 6c 3e 26 67 74 3b 3c 2f 73 6d <small>></sm
08e0: 61 6c 6c 3e 20 24 68 65 61 64 65 72 22 0a 20 20 all> $header".
08f0: 20 20 7d 0a 20 20 20 20 61 70 70 65 6e 64 20 6f }. append o
0900: 75 74 20 22 3c 62 6f 64 79 3e 3c 68 32 3e 24 68 ut "<body><h2>$h
0910: 65 61 64 65 72 3c 2f 68 32 3e 22 0a 20 20 20 20 eader</h2>".
0920: 67 6c 6f 62 61 6c 20 6d 61 6e 75 61 6c 0a 20 20 global manual.
0930: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis
0940: 74 73 20 6d 61 6e 75 61 6c 28 73 75 62 68 65 61 ts manual(subhea
0950: 64 65 72 29 5d 7d 20 7b 0a 09 73 65 74 20 73 75 der)]} {..set su
0960: 62 73 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 7b bs {}..foreach {
0970: 6e 61 6d 65 20 73 75 62 64 69 72 7d 20 24 6d 61 name subdir} $ma
0980: 6e 75 61 6c 28 73 75 62 68 65 61 64 65 72 29 20 nual(subheader)
0990: 7b 0a 09 20 20 20 20 69 66 20 7b 24 6e 61 6d 65 {.. if {$name
09a0: 20 65 71 20 24 74 69 74 6c 65 7d 20 7b 0a 09 09 eq $title} {...
09b0: 6c 61 70 70 65 6e 64 20 73 75 62 73 20 24 6e 61 lappend subs $na
09c0: 6d 65 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b me.. } else {
09d0: 0a 09 09 6c 61 70 70 65 6e 64 20 73 75 62 73 20 ...lappend subs
09e0: 22 3c 61 20 68 72 65 66 3d 5c 22 24 7b 6c 65 76 "<a href=\"${lev
09f0: 65 6c 7d 24 73 75 62 64 69 72 2f 5b 69 6e 64 65 el}$subdir/[inde
0a00: 78 66 69 6c 65 5d 5c 22 3e 24 6e 61 6d 65 3c 2f xfile]\">$name</
0a10: 61 3e 22 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 61 a>".. }..}..a
0a20: 70 70 65 6e 64 20 6f 75 74 20 22 5c 6e 3c 68 33 ppend out "\n<h3
0a30: 3e 5b 6a 6f 69 6e 20 24 73 75 62 73 20 7b 20 7c >[join $subs { |
0a40: 20 7d 5d 3c 2f 68 33 3e 22 0a 20 20 20 20 7d 0a }]</h3>". }.
0a50: 20 20 20 20 72 65 74 75 72 6e 20 24 6f 75 74 0a return $out.
0a60: 7d 0a 0c 0a 23 23 0a 23 23 20 70 61 72 73 69 6e }...##.## parsin
0a70: 67 0a 23 23 0a 70 72 6f 63 20 75 6e 71 75 6f 74 g.##.proc unquot
0a80: 65 20 61 72 67 20 7b 0a 20 20 20 20 72 65 74 75 e arg {. retu
0a90: 72 6e 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b rn [string map [
0aa0: 6c 69 73 74 20 5c 22 20 7b 7d 5d 20 24 61 72 67 list \" {}] $arg
0ab0: 5d 0a 7d 0a 0a 70 72 6f 63 20 70 61 72 73 65 2d ].}..proc parse-
0ac0: 64 69 72 65 63 74 69 76 65 20 7b 6c 69 6e 65 20 directive {line
0ad0: 63 6f 64 65 6e 61 6d 65 20 72 65 73 74 6e 61 6d codename restnam
0ae0: 65 7d 20 7b 0a 20 20 20 20 75 70 76 61 72 20 31 e} {. upvar 1
0af0: 20 24 63 6f 64 65 6e 61 6d 65 20 63 6f 64 65 20 $codename code
0b00: 24 72 65 73 74 6e 61 6d 65 20 72 65 73 74 0a 20 $restname rest.
0b10: 20 20 20 72 65 74 75 72 6e 20 5b 72 65 67 65 78 return [regex
0b20: 70 20 7b 5e 28 5c 2e 5b 2e 61 2d 7a 41 2d 5a 30 p {^(\.[.a-zA-Z0
0b30: 2d 39 5d 2a 29 20 2a 28 2e 2a 29 7d 20 24 6c 69 -9]*) *(.*)} $li
0b40: 6e 65 20 61 6c 6c 20 63 6f 64 65 20 72 65 73 74 ne all code rest
0b50: 5d 0a 7d 0a 0a 70 72 6f 63 20 6e 6f 73 70 61 63 ].}..proc nospac
0b60: 65 2d 74 65 78 74 20 7b 74 65 78 74 7d 20 7b 0a e-text {text} {.
0b70: 20 20 20 20 72 65 74 75 72 6e 20 5b 72 65 67 73 return [regs
0b80: 75 62 20 2d 61 6c 6c 20 22 20 22 20 24 74 65 78 ub -all " " $tex
0b90: 74 20 5f 5d 0a 7d 0a 0a 70 72 6f 63 20 68 74 6d t _].}..proc htm
0ba0: 6c 69 7a 65 2d 74 65 78 74 20 7b 74 65 78 74 20 lize-text {text
0bb0: 7b 63 68 61 72 6d 61 70 20 7b 7d 7d 7d 20 7b 0a {charmap {}}} {.
0bc0: 20 20 20 20 23 20 63 6f 6e 74 61 69 6e 73 20 73 # contains s
0bd0: 6f 6d 65 20 65 78 74 72 61 73 20 66 6f 72 20 75 ome extras for u
0be0: 73 65 20 69 6e 20 6e 72 6f 66 66 2d 3e 68 74 6d se in nroff->htm
0bf0: 6c 20 70 72 6f 63 65 73 73 69 6e 67 0a 20 20 20 l processing.
0c00: 20 23 20 62 75 69 6c 64 20 6f 6e 20 74 68 65 20 # build on the
0c10: 6c 69 73 74 20 70 61 73 73 65 64 20 69 6e 2c 20 list passed in,
0c20: 69 66 20 61 6e 79 0a 20 20 20 20 6c 61 70 70 65 if any. lappe
0c30: 6e 64 20 63 68 61 72 6d 61 70 20 5c 0a 09 22 26 nd charmap \.."&
0c40: 6e 64 61 73 68 3b 22 20 22 26 6e 64 61 73 68 3b ndash;" "–
0c50: 22 20 5c 0a 09 7b 26 7d 09 7b 26 61 6d 70 3b 7d " \..{&}.{&}
0c60: 20 5c 0a 09 7b 5c 5c 7d 09 22 26 23 39 32 3b 22 \..{\\}."\"
0c70: 20 5c 0a 09 7b 5c 65 7d 09 22 26 23 39 32 3b 22 \..{\e}."\"
0c80: 20 5c 0a 09 7b 5c 20 7d 09 7b 26 6e 62 73 70 3b \..{\ }.{
0c90: 7d 20 5c 0a 09 7b 5c 7c 7d 09 7b 26 6e 62 73 70 } \..{\|}.{ 
0ca0: 3b 7d 20 5c 0a 09 7b 5c 30 7d 09 7b 20 7d 20 5c ;} \..{\0}.{ } \
0cb0: 0a 09 5c 22 09 7b 26 71 75 6f 74 3b 7d 20 5c 0a ..\".{"} \.
0cc0: 09 7b 3c 7d 09 7b 26 6c 74 3b 7d 20 5c 0a 09 7b .{<}.{<} \..{
0cd0: 3e 7d 09 7b 26 67 74 3b 7d 20 5c 0a 09 5c 75 32 >}.{>} \..\u2
0ce0: 30 31 43 20 22 26 6c 64 71 75 6f 3b 22 20 5c 0a 01C "“" \.
0cf0: 09 5c 75 32 30 31 44 20 22 26 72 64 71 75 6f 3b .\u201D "”
0d00: 22 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 73 ".. return [s
0d10: 74 72 69 6e 67 20 6d 61 70 20 24 63 68 61 72 6d tring map $charm
0d20: 61 70 20 24 74 65 78 74 5d 0a 7d 0a 0a 70 72 6f ap $text].}..pro
0d30: 63 20 70 72 6f 63 65 73 73 2d 74 65 78 74 20 7b c process-text {
0d40: 74 65 78 74 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 text} {. glob
0d50: 61 6c 20 6d 61 6e 75 61 6c 0a 20 20 20 20 23 20 al manual. #
0d60: 70 72 65 70 72 6f 63 65 73 73 20 74 65 78 74 3b preprocess text;
0d70: 20 6e 6f 74 65 20 74 68 61 74 20 74 68 69 73 20 note that this
0d80: 69 73 20 61 6e 20 69 6e 63 6f 6d 70 6c 65 74 65 is an incomplete
0d90: 20 6d 61 70 2c 20 61 6e 64 20 77 69 6c 6c 20 70 map, and will p
0da0: 72 6f 62 61 62 6c 79 0a 20 20 20 20 23 20 6e 65 robably. # ne
0db0: 65 64 20 74 6f 20 68 61 76 65 20 74 68 69 6e 67 ed to have thing
0dc0: 73 20 61 64 64 65 64 20 74 6f 20 69 74 20 61 73 s added to it as
0dd0: 20 74 68 65 20 6d 61 6e 75 61 6c 73 20 65 78 70 the manuals exp
0de0: 61 6e 64 20 74 6f 20 75 73 65 20 74 68 65 6d 2e and to use them.
0df0: 0a 20 20 20 20 73 65 74 20 63 68 61 72 6d 61 70 . set charmap
0e00: 20 5b 6c 69 73 74 20 5c 0a 09 20 20 20 20 7b 5c [list \.. {\
0e10: 26 7d 09 22 5c 74 22 20 5c 0a 09 20 20 20 20 7b &}."\t" \.. {
0e20: 5c 25 7d 09 7b 7d 20 5c 0a 09 20 20 20 20 22 5c \%}.{} \.. "\
0e30: 5c 5c 6e 22 09 22 5c 6e 22 20 5c 0a 09 20 20 20 \\n"."\n" \..
0e40: 20 7b 5c 28 72 21 7d 09 22 26 69 65 78 63 6c 3b {\(r!}."¡
0e50: 22 20 5c 0a 09 20 20 20 20 7b 5c 28 63 74 7d 09 " \.. {\(ct}.
0e60: 22 26 63 65 6e 74 3b 22 20 5c 0a 09 20 20 20 20 "¢" \..
0e70: 7b 5c 28 50 6f 7d 09 22 26 70 6f 75 6e 64 3b 22 {\(Po}."£"
0e80: 20 5c 0a 09 20 20 20 20 7b 5c 28 43 73 7d 09 22 \.. {\(Cs}."
0e90: 26 63 75 72 72 65 6e 3b 22 20 5c 0a 09 20 20 20 ¤" \..
0ea0: 20 7b 5c 28 59 65 7d 09 22 26 79 65 6e 3b 22 20 {\(Ye}."¥"
0eb0: 5c 0a 09 20 20 20 20 7b 5c 28 62 62 7d 09 22 26 \.. {\(bb}."&
0ec0: 62 72 76 62 61 72 3b 22 20 5c 0a 09 20 20 20 20 brvbar;" \..
0ed0: 7b 5c 28 73 63 7d 09 22 26 73 65 63 74 3b 22 20 {\(sc}."§"
0ee0: 5c 0a 09 20 20 20 20 7b 5c 28 61 64 7d 09 22 26 \.. {\(ad}."&
0ef0: 64 69 65 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 die;" \.. {\(
0f00: 63 6f 7d 09 22 26 63 6f 70 79 3b 22 20 5c 0a 09 co}."©" \..
0f10: 20 20 20 20 7b 5c 28 4f 66 7d 09 22 26 6f 72 64 {\(Of}."&ord
0f20: 66 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 46 6f f;" \.. {\(Fo
0f30: 7d 09 22 26 6c 61 71 75 6f 3b 22 20 5c 0a 09 20 }."«" \..
0f40: 20 20 20 7b 5c 28 6e 6f 7d 09 22 26 6e 6f 74 3b {\(no}."¬
0f50: 22 20 5c 0a 09 20 20 20 20 7b 5c 28 72 67 7d 09 " \.. {\(rg}.
0f60: 22 26 72 65 67 3b 22 20 5c 0a 09 20 20 20 20 7b "®" \.. {
0f70: 5c 28 61 2d 7d 09 22 26 6d 61 63 72 3b 22 20 5c \(a-}."¯" \
0f80: 0a 09 20 20 20 20 7b 5c 28 64 65 7d 09 22 26 64 .. {\(de}."&d
0f90: 65 67 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 2b eg;" \.. {\(+
0fa0: 2d 7d 09 22 26 70 6c 75 73 6d 6e 3b 22 20 5c 0a -}."±" \.
0fb0: 09 20 20 20 20 7b 5c 28 53 32 7d 09 22 26 73 75 . {\(S2}."&su
0fc0: 70 32 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 53 p2;" \.. {\(S
0fd0: 33 7d 09 22 26 73 75 70 33 3b 22 20 5c 0a 09 20 3}."³" \..
0fe0: 20 20 20 7b 5c 28 61 61 7d 09 22 26 61 63 75 74 {\(aa}."&acut
0ff0: 65 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 6d 63 e;" \.. {\(mc
1000: 7d 09 22 26 6d 69 63 72 6f 3b 22 20 5c 0a 09 20 }."µ" \..
1010: 20 20 20 7b 5c 28 70 73 7d 09 22 26 70 61 72 61 {\(ps}."¶
1020: 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 70 63 7d ;" \.. {\(pc}
1030: 09 22 26 6d 69 64 64 6f 74 3b 22 20 5c 0a 09 20 ."·" \..
1040: 20 20 20 7b 5c 28 61 63 7d 09 22 26 63 65 64 69 {\(ac}."&cedi
1050: 6c 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 53 31 l;" \.. {\(S1
1060: 7d 09 22 26 73 75 70 31 3b 22 20 5c 0a 09 20 20 }."¹" \..
1070: 20 20 7b 5c 28 4f 6d 7d 09 22 26 6f 72 64 6d 3b {\(Om}."º
1080: 22 20 5c 0a 09 20 20 20 20 7b 5c 28 46 63 7d 09 " \.. {\(Fc}.
1090: 22 26 72 61 71 75 6f 3b 22 20 5c 0a 09 20 20 20 "»" \..
10a0: 20 7b 5c 28 31 34 7d 09 22 26 66 72 61 63 31 34 {\(14}."¼
10b0: 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 31 32 7d ;" \.. {\(12}
10c0: 09 22 26 66 72 61 63 31 32 3b 22 20 5c 0a 09 20 ."½" \..
10d0: 20 20 20 7b 5c 28 33 34 7d 09 22 26 66 72 61 63 {\(34}."&frac
10e0: 33 34 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 72 34;" \.. {\(r
10f0: 3f 7d 09 22 26 69 71 75 65 73 74 3b 22 20 5c 0a ?}."¿" \.
1100: 09 20 20 20 20 7b 5c 28 41 45 7d 09 22 26 41 45 . {\(AE}."&AE
1110: 6c 69 67 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 lig;" \.. {\(
1120: 2d 44 7d 09 22 26 45 54 48 3b 22 20 5c 0a 09 20 -D}."Ð" \..
1130: 20 20 20 7b 5c 28 6d 75 7d 09 22 26 74 69 6d 65 {\(mu}."&time
1140: 73 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 54 50 s;" \.. {\(TP
1150: 7d 09 22 26 54 48 4f 52 4e 3b 22 20 5c 0a 09 20 }."Þ" \..
1160: 20 20 20 7b 5c 28 73 73 7d 09 22 26 73 7a 6c 69 {\(ss}."&szli
1170: 67 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 61 65 g;" \.. {\(ae
1180: 7d 09 22 26 61 65 6c 69 67 3b 22 20 5c 0a 09 20 }."æ" \..
1190: 20 20 20 7b 5c 28 53 64 7d 09 22 26 65 74 68 3b {\(Sd}."ð
11a0: 22 20 5c 0a 09 20 20 20 20 7b 5c 28 64 69 7d 09 " \.. {\(di}.
11b0: 22 26 64 69 76 69 64 65 3b 22 20 5c 0a 09 20 20 "÷" \..
11c0: 20 20 7b 5c 28 54 70 7d 09 22 26 74 68 6f 72 6e {\(Tp}."þ
11d0: 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 65 6d 7d ;" \.. {\(em}
11e0: 09 22 26 6d 64 61 73 68 3b 22 20 5c 0a 09 20 20 ."—" \..
11f0: 20 20 7b 5c 28 65 6e 7d 09 22 26 6e 64 61 73 68 {\(en}."&ndash
1200: 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 66 6d 7d ;" \.. {\(fm}
1210: 09 22 26 70 72 69 6d 65 3b 22 20 5c 0a 09 20 20 ."′" \..
1220: 20 20 7b 5c 28 6d 69 7d 09 22 26 6d 69 6e 75 73 {\(mi}."&minus
1230: 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 2e 69 7d ;" \.. {\(.i}
1240: 09 22 26 69 6d 61 74 68 3b 22 20 5c 0a 09 20 20 ."ı" \..
1250: 20 20 7b 5c 28 2e 6a 7d 09 22 26 6a 6d 61 74 68 {\(.j}."&jmath
1260: 3b 22 20 5c 0a 09 20 20 20 20 7b 5c 28 46 6e 7d ;" \.. {\(Fn}
1270: 09 22 26 66 6e 6f 66 3b 22 20 5c 0a 09 20 20 20 ."ƒ" \..
1280: 20 7b 5c 28 4f 45 7d 09 22 26 4f 45 6c 69 67 3b {\(OE}."Œ
1290: 22 20 5c 0a 09 20 20 20 20 7b 5c 28 6f 65 7d 09 " \.. {\(oe}.
12a0: 22 26 6f 65 6c 69 67 3b 22 20 5c 0a 09 20 20 20 "œ" \..
12b0: 20 7b 5c 28 49 4a 7d 09 22 26 49 4a 6c 69 67 3b {\(IJ}."IJ
12c0: 22 20 5c 0a 09 20 20 20 20 7b 5c 28 69 6a 7d 09 " \.. {\(ij}.
12d0: 22 26 69 6a 6c 69 67 3b 22 20 5c 0a 09 20 20 20 "ij" \..
12e0: 20 7b 5c 28 3c 2d 7d 09 22 3c 66 6f 6e 74 20 73 {\(<-}."<font s
12f0: 69 7a 65 3d 5c 22 2b 31 5c 22 3e 26 6c 61 72 72 ize=\"+1\">&larr
1300: 3b 3c 2f 66 6f 6e 74 3e 22 20 5c 0a 09 20 20 20 ;</font>" \..
1310: 20 7b 5c 28 2d 3e 7d 09 22 3c 66 6f 6e 74 20 73 {\(->}."<font s
1320: 69 7a 65 3d 5c 22 2b 31 5c 22 3e 26 72 61 72 72 ize=\"+1\">&rarr
1330: 3b 3c 2f 66 6f 6e 74 3e 22 20 5c 0a 09 20 20 20 ;</font>" \..
1340: 20 7b 5c 28 65 75 7d 09 22 26 65 75 72 6f 3b 22 {\(eu}."€"
1350: 20 5c 0a 09 20 20 20 20 7b 5c 66 50 7d 09 7b 5c \.. {\fP}.{\
1360: 66 52 7d 20 5c 0a 09 20 20 20 20 7b 5c 2e 7d 09 fR} \.. {\.}.
1370: 2e 20 5c 0a 09 20 20 20 20 7b 5c 28 62 75 7d 09 . \.. {\(bu}.
1380: 22 26 62 75 6c 6c 3b 22 20 5c 0a 09 20 20 20 20 "•" \..
1390: 7b 5c 2a 28 71 6f 7d 09 22 26 6f 63 69 72 63 3b {\*(qo}."ô
13a0: 22 20 5c 0a 09 20 20 20 20 5d 0a 20 20 20 20 23 " \.. ]. #
13b0: 20 54 68 69 73 20 6d 69 67 68 74 20 6d 61 6b 65 This might make
13c0: 20 61 20 66 65 77 20 69 6e 76 61 6c 69 64 20 6d a few invalid m
13d0: 61 70 70 69 6e 67 73 2c 20 62 75 74 20 77 65 20 appings, but we
13e0: 64 6f 6e 27 74 20 75 73 65 20 74 68 65 6d 0a 20 don't use them.
13f0: 20 20 20 66 6f 72 65 61 63 68 20 63 20 7b 61 20 foreach c {a
1400: 63 20 65 20 67 20 69 20 6c 20 6e 20 6f 20 73 20 c e g i l n o s
1410: 74 20 75 20 79 20 7a 20 41 20 43 20 45 20 47 20 t u y z A C E G
1420: 49 20 4c 20 4e 20 4f 20 53 20 54 20 55 20 59 20 I L N O S T U Y
1430: 5a 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 70 Z} {..foreach {p
1440: 72 65 66 69 78 20 73 75 66 66 69 78 7d 20 7b 0a refix suffix} {.
1450: 09 20 20 20 20 6f 20 72 69 6e 67 20 2f 20 73 6c . o ring / sl
1460: 61 73 68 20 3a 20 75 6d 6c 20 27 20 61 63 75 74 ash : uml ' acut
1470: 65 20 5e 20 63 69 72 63 20 60 20 67 72 61 76 65 e ^ circ ` grave
1480: 20 7e 20 74 69 6c 64 65 20 2c 20 63 65 64 69 6c ~ tilde , cedil
1490: 20 76 20 63 61 72 6f 6e 0a 09 7d 20 7b 0a 09 20 v caron..} {..
14a0: 20 20 20 6c 61 70 70 65 6e 64 20 63 68 61 72 6d lappend charm
14b0: 61 70 20 22 5c 5c 5c 5b 24 7b 70 72 65 66 69 78 ap "\\\[${prefix
14c0: 7d 24 7b 63 7d 5c 5d 22 20 22 26 24 7b 63 7d 24 }${c}\]" "&${c}$
14d0: 7b 73 75 66 66 69 78 7d 3b 22 0a 09 20 20 20 20 {suffix};"..
14e0: 6c 61 70 70 65 6e 64 20 63 68 61 72 6d 61 70 20 lappend charmap
14f0: 22 5c 5c 28 24 7b 70 72 65 66 69 78 7d 24 7b 63 "\\(${prefix}${c
1500: 7d 22 20 22 26 24 7b 63 7d 24 7b 73 75 66 66 69 }" "&${c}${suffi
1510: 78 7d 3b 22 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 x};"..}. }.
1520: 20 20 6c 61 70 70 65 6e 64 20 63 68 61 72 6d 61 lappend charma
1530: 70 20 7b 5c 2d 5c 7c 5c 2d 7d 20 2d 2d 20 20 20 p {\-\|\-} --
1540: 20 20 20 20 20 3b 20 23 20 74 77 6f 20 68 79 70 ; # two hyp
1550: 68 65 6e 73 0a 20 20 20 20 6c 61 70 70 65 6e 64 hens. lappend
1560: 20 63 68 61 72 6d 61 70 20 7b 5c 2d 7d 20 2d 20 charmap {\-} -
1570: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 ; #
1580: 61 20 68 79 70 68 65 6e 0a 0a 20 20 20 20 73 65 a hyphen.. se
1590: 74 20 74 65 78 74 20 5b 68 74 6d 6c 69 7a 65 2d t text [htmlize-
15a0: 74 65 78 74 20 24 74 65 78 74 20 24 63 68 61 72 text $text $char
15b0: 6d 61 70 5d 0a 20 20 20 20 23 20 47 65 6e 65 72 map]. # Gener
15c0: 61 6c 20 71 75 6f 74 65 64 20 65 6e 74 69 74 79 al quoted entity
15d0: 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c . regsub -all
15e0: 20 7b 5c 5c 4e 27 28 5c 64 2b 29 27 7d 20 24 74 {\\N'(\d+)'} $t
15f0: 65 78 74 20 22 5c 5c 26 23 5c 5c 31 3b 22 20 74 ext "\\&#\\1;" t
1600: 65 78 74 0a 20 20 20 20 77 68 69 6c 65 20 7b 5b ext. while {[
1610: 73 74 72 69 6e 67 20 66 69 72 73 74 20 22 5c 5c string first "\\
1620: 22 20 24 74 65 78 74 5d 20 3e 3d 20 30 7d 20 7b " $text] >= 0} {
1630: 0a 09 23 20 43 20 52 0a 09 69 66 20 7b 5b 72 65 ..# C R..if {[re
1640: 67 73 75 62 20 7b 5e 28 5b 5e 5c 5c 5d 2a 29 5c gsub {^([^\\]*)\
1650: 5c 66 43 28 5b 5e 5c 5c 5d 2a 29 5c 5c 66 52 28 \fC([^\\]*)\\fR(
1660: 2e 2a 29 24 7d 20 24 74 65 78 74 20 5c 0a 09 09 .*)$} $text \...
1670: 7b 5c 31 3c 74 74 3e 5c 32 3c 2f 74 74 3e 5c 33 {\1<tt>\2</tt>\3
1680: 7d 20 74 65 78 74 5d 7d 20 63 6f 6e 74 69 6e 75 } text]} continu
1690: 65 0a 09 23 20 42 20 52 0a 09 69 66 20 7b 5b 72 e..# B R..if {[r
16a0: 65 67 73 75 62 20 7b 5e 28 5b 5e 5c 5c 5d 2a 29 egsub {^([^\\]*)
16b0: 5c 5c 66 42 28 5b 5e 5c 5c 5d 2a 29 5c 5c 66 52 \\fB([^\\]*)\\fR
16c0: 28 2e 2a 29 24 7d 20 24 74 65 78 74 20 5c 0a 09 (.*)$} $text \..
16d0: 09 7b 5c 31 3c 62 3e 5c 32 3c 2f 62 3e 5c 33 7d .{\1<b>\2</b>\3}
16e0: 20 74 65 78 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 text]} continue
16f0: 0a 09 23 20 42 20 49 0a 09 69 66 20 7b 5b 72 65 ..# B I..if {[re
1700: 67 73 75 62 20 7b 5e 28 5b 5e 5c 5c 5d 2a 29 5c gsub {^([^\\]*)\
1710: 5c 66 42 28 5b 5e 5c 5c 5d 2a 29 5c 5c 66 49 28 \fB([^\\]*)\\fI(
1720: 2e 2a 29 24 7d 20 24 74 65 78 74 20 5c 0a 09 09 .*)$} $text \...
1730: 7b 5c 31 3c 62 3e 5c 32 3c 2f 62 3e 5c 5c 66 49 {\1<b>\2</b>\\fI
1740: 5c 33 7d 20 74 65 78 74 5d 7d 20 63 6f 6e 74 69 \3} text]} conti
1750: 6e 75 65 0a 09 23 20 49 20 52 0a 09 69 66 20 7b nue..# I R..if {
1760: 5b 72 65 67 73 75 62 20 7b 5e 28 5b 5e 5c 5c 5d [regsub {^([^\\]
1770: 2a 29 5c 5c 66 49 28 5b 5e 5c 5c 5d 2a 29 5c 5c *)\\fI([^\\]*)\\
1780: 66 52 28 2e 2a 29 24 7d 20 24 74 65 78 74 20 5c fR(.*)$} $text \
1790: 0a 09 09 7b 5c 31 3c 69 3e 5c 32 3c 2f 69 3e 5c ...{\1<i>\2</i>\
17a0: 33 7d 20 74 65 78 74 5d 7d 20 63 6f 6e 74 69 6e 3} text]} contin
17b0: 75 65 0a 09 23 20 49 20 42 0a 09 69 66 20 7b 5b ue..# I B..if {[
17c0: 72 65 67 73 75 62 20 7b 5e 28 5b 5e 5c 5c 5d 2a regsub {^([^\\]*
17d0: 29 5c 5c 66 49 28 5b 5e 5c 5c 5d 2a 29 5c 5c 66 )\\fI([^\\]*)\\f
17e0: 42 28 2e 2a 29 24 7d 20 24 74 65 78 74 20 5c 0a B(.*)$} $text \.
17f0: 09 09 7b 5c 31 3c 69 3e 5c 32 3c 2f 69 3e 5c 5c ..{\1<i>\2</i>\\
1800: 66 42 5c 33 7d 20 74 65 78 74 5d 7d 20 63 6f 6e fB\3} text]} con
1810: 74 69 6e 75 65 0a 09 23 20 42 20 42 2c 20 49 20 tinue..# B B, I
1820: 49 2c 20 52 20 52 0a 09 69 66 20 7b 0a 09 20 20 I, R R..if {..
1830: 20 20 5b 72 65 67 73 75 62 20 7b 5e 28 5b 5e 5c [regsub {^([^\
1840: 5c 5d 2a 29 5c 5c 66 42 28 5b 5e 5c 5c 5d 2a 29 \]*)\\fB([^\\]*)
1850: 5c 5c 66 42 28 2e 2a 29 24 7d 20 24 74 65 78 74 \\fB(.*)$} $text
1860: 20 5c 0a 09 09 7b 5c 31 5c 5c 66 42 5c 32 5c 33 \...{\1\\fB\2\3
1870: 7d 20 6e 74 65 78 74 5d 0a 09 20 20 20 20 7c 7c } ntext].. ||
1880: 20 5b 72 65 67 73 75 62 20 7b 5e 28 5b 5e 5c 5c [regsub {^([^\\
1890: 5d 2a 29 5c 5c 66 49 28 5b 5e 5c 5c 5d 2a 29 5c ]*)\\fI([^\\]*)\
18a0: 5c 66 49 28 2e 2a 29 24 7d 20 24 74 65 78 74 20 \fI(.*)$} $text
18b0: 5c 0a 09 09 20 20 20 20 7b 5c 31 5c 5c 66 49 5c \... {\1\\fI\
18c0: 32 5c 33 7d 20 6e 74 65 78 74 5d 0a 09 20 20 20 2\3} ntext]..
18d0: 20 7c 7c 20 5b 72 65 67 73 75 62 20 7b 5e 28 5b || [regsub {^([
18e0: 5e 5c 5c 5d 2a 29 5c 5c 66 52 28 5b 5e 5c 5c 5d ^\\]*)\\fR([^\\]
18f0: 2a 29 5c 5c 66 52 28 2e 2a 29 24 7d 20 24 74 65 *)\\fR(.*)$} $te
1900: 78 74 20 5c 0a 09 09 20 20 20 20 7b 5c 31 5c 5c xt \... {\1\\
1910: 66 52 5c 32 5c 33 7d 20 6e 74 65 78 74 5d 0a 09 fR\2\3} ntext]..
1920: 7d 20 7b 0a 09 20 20 20 20 6d 61 6e 65 72 72 6f } {.. manerro
1930: 72 20 22 69 6d 70 6f 74 65 6e 74 20 66 6f 6e 74 r "impotent font
1940: 20 63 68 61 6e 67 65 3a 20 24 74 65 78 74 22 0a change: $text".
1950: 09 20 20 20 20 73 65 74 20 74 65 78 74 20 24 6e . set text $n
1960: 74 65 78 74 0a 09 20 20 20 20 63 6f 6e 74 69 6e text.. contin
1970: 75 65 0a 09 7d 0a 09 23 20 75 6e 72 65 63 6f 67 ue..}..# unrecog
1980: 6e 69 7a 65 64 0a 09 6d 61 6e 65 72 72 6f 72 20 nized..manerror
1990: 22 75 6e 63 61 75 67 68 74 20 62 61 63 6b 73 6c "uncaught backsl
19a0: 61 73 68 3a 20 24 74 65 78 74 22 0a 09 73 65 74 ash: $text"..set
19b0: 20 74 65 78 74 20 5b 73 74 72 69 6e 67 20 6d 61 text [string ma
19c0: 70 20 5b 6c 69 73 74 20 22 5c 5c 22 20 22 26 23 p [list "\\" "&#
19d0: 39 32 3b 22 5d 20 24 74 65 78 74 5d 0a 20 20 20 92;"] $text].
19e0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 24 74 }. return $t
19f0: 65 78 74 0a 7d 0a 0c 0a 23 23 0a 23 23 20 70 61 ext.}...##.## pa
1a00: 73 73 20 32 20 74 65 78 74 20 69 6e 70 75 74 20 ss 2 text input
1a10: 61 6e 64 20 6d 61 74 63 68 69 6e 67 0a 23 23 0a and matching.##.
1a20: 70 72 6f 63 20 6f 70 65 6e 2d 74 65 78 74 20 7b proc open-text {
1a30: 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 6d } {. global m
1a40: 61 6e 75 61 6c 0a 20 20 20 20 73 65 74 20 6d 61 anual. set ma
1a50: 6e 75 61 6c 28 74 65 78 74 2d 6c 65 6e 67 74 68 nual(text-length
1a60: 29 20 5b 6c 6c 65 6e 67 74 68 20 24 6d 61 6e 75 ) [llength $manu
1a70: 61 6c 28 74 65 78 74 29 5d 0a 20 20 20 20 73 65 al(text)]. se
1a80: 74 20 6d 61 6e 75 61 6c 28 74 65 78 74 2d 70 6f t manual(text-po
1a90: 69 6e 74 65 72 29 20 30 0a 7d 0a 0a 70 72 6f 63 inter) 0.}..proc
1aa0: 20 6d 6f 72 65 2d 74 65 78 74 20 7b 7d 20 7b 0a more-text {} {.
1ab0: 20 20 20 20 67 6c 6f 62 61 6c 20 6d 61 6e 75 61 global manua
1ac0: 6c 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 l. return [ex
1ad0: 70 72 20 7b 24 6d 61 6e 75 61 6c 28 74 65 78 74 pr {$manual(text
1ae0: 2d 70 6f 69 6e 74 65 72 29 20 3c 20 24 6d 61 6e -pointer) < $man
1af0: 75 61 6c 28 74 65 78 74 2d 6c 65 6e 67 74 68 29 ual(text-length)
1b00: 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 6e 65 78 74 2d }].}..proc next-
1b10: 74 65 78 74 20 7b 7d 20 7b 0a 20 20 20 20 67 6c text {} {. gl
1b20: 6f 62 61 6c 20 6d 61 6e 75 61 6c 0a 20 20 20 20 obal manual.
1b30: 69 66 20 7b 5b 6d 6f 72 65 2d 74 65 78 74 5d 7d if {[more-text]}
1b40: 20 7b 0a 09 73 65 74 20 74 65 78 74 20 5b 6c 69 {..set text [li
1b50: 6e 64 65 78 20 24 6d 61 6e 75 61 6c 28 74 65 78 ndex $manual(tex
1b60: 74 29 20 24 6d 61 6e 75 61 6c 28 74 65 78 74 2d t) $manual(text-
1b70: 70 6f 69 6e 74 65 72 29 5d 0a 09 69 6e 63 72 20 pointer)]..incr
1b80: 6d 61 6e 75 61 6c 28 74 65 78 74 2d 70 6f 69 6e manual(text-poin
1b90: 74 65 72 29 0a 09 72 65 74 75 72 6e 20 24 74 65 ter)..return $te
1ba0: 78 74 0a 20 20 20 20 7d 0a 20 20 20 20 6d 61 6e xt. }. man
1bb0: 65 72 72 6f 72 20 22 72 65 61 64 20 70 61 73 74 error "read past
1bc0: 20 65 6e 64 20 6f 66 20 74 65 78 74 22 0a 20 20 end of text".
1bd0: 20 20 65 72 72 6f 72 20 22 66 61 74 61 6c 22 0a error "fatal".
1be0: 7d 0a 0a 70 72 6f 63 20 69 73 2d 61 2d 64 69 72 }..proc is-a-dir
1bf0: 65 63 74 69 76 65 20 7b 6c 69 6e 65 7d 20 7b 0a ective {line} {.
1c00: 20 20 20 20 72 65 74 75 72 6e 20 5b 73 74 72 69 return [stri
1c10: 6e 67 20 6d 61 74 63 68 20 2e 2a 20 24 6c 69 6e ng match .* $lin
1c20: 65 5d 0a 7d 0a 0a 70 72 6f 63 20 73 70 6c 69 74 e].}..proc split
1c30: 2d 64 69 72 65 63 74 69 76 65 20 7b 6c 69 6e 65 -directive {line
1c40: 20 6f 70 6e 61 6d 65 20 72 65 73 74 6e 61 6d 65 opname restname
1c50: 7d 20 7b 0a 20 20 20 20 75 70 76 61 72 20 31 20 } {. upvar 1
1c60: 24 6f 70 6e 61 6d 65 20 6f 70 20 24 72 65 73 74 $opname op $rest
1c70: 6e 61 6d 65 20 72 65 73 74 0a 20 20 20 20 73 65 name rest. se
1c80: 74 20 6f 70 20 5b 73 74 72 69 6e 67 20 72 61 6e t op [string ran
1c90: 67 65 20 24 6c 69 6e 65 20 30 20 32 5d 0a 20 20 ge $line 0 2].
1ca0: 20 20 73 65 74 20 72 65 73 74 20 5b 73 74 72 69 set rest [stri
1cb0: 6e 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67 20 ng trim [string
1cc0: 72 61 6e 67 65 20 24 6c 69 6e 65 20 33 20 65 6e range $line 3 en
1cd0: 64 5d 5d 0a 7d 0a 0a 70 72 6f 63 20 6e 65 78 74 d]].}..proc next
1ce0: 2d 6f 70 2d 69 73 20 7b 6f 70 20 72 65 73 74 6e -op-is {op restn
1cf0: 61 6d 65 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 ame} {. globa
1d00: 6c 20 6d 61 6e 75 61 6c 0a 20 20 20 20 75 70 76 l manual. upv
1d10: 61 72 20 31 20 24 72 65 73 74 6e 61 6d 65 20 72 ar 1 $restname r
1d20: 65 73 74 0a 20 20 20 20 69 66 20 7b 5b 6d 6f 72 est. if {[mor
1d30: 65 2d 74 65 78 74 5d 7d 20 7b 0a 09 73 65 74 20 e-text]} {..set
1d40: 74 65 78 74 20 5b 6c 69 6e 64 65 78 20 24 6d 61 text [lindex $ma
1d50: 6e 75 61 6c 28 74 65 78 74 29 20 24 6d 61 6e 75 nual(text) $manu
1d60: 61 6c 28 74 65 78 74 2d 70 6f 69 6e 74 65 72 29 al(text-pointer)
1d70: 5d 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 65 ]..if {[string e
1d80: 71 75 61 6c 20 2d 6c 65 6e 67 74 68 20 33 20 24 qual -length 3 $
1d90: 74 65 78 74 20 24 6f 70 5d 7d 20 7b 0a 09 20 20 text $op]} {..
1da0: 20 20 73 65 74 20 72 65 73 74 20 5b 73 74 72 69 set rest [stri
1db0: 6e 67 20 72 61 6e 67 65 20 24 74 65 78 74 20 34 ng range $text 4
1dc0: 20 65 6e 64 5d 0a 09 20 20 20 20 69 6e 63 72 20 end].. incr
1dd0: 6d 61 6e 75 61 6c 28 74 65 78 74 2d 70 6f 69 6e manual(text-poin
1de0: 74 65 72 29 0a 09 20 20 20 20 72 65 74 75 72 6e ter).. return
1df0: 20 31 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 1..}. }.
1e00: 72 65 74 75 72 6e 20 30 0a 7d 0a 0a 70 72 6f 63 return 0.}..proc
1e10: 20 62 61 63 6b 75 70 2d 74 65 78 74 20 7b 6e 7d backup-text {n}
1e20: 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 6d 61 {. global ma
1e30: 6e 75 61 6c 0a 20 20 20 20 69 66 20 7b 24 6d 61 nual. if {$ma
1e40: 6e 75 61 6c 28 74 65 78 74 2d 70 6f 69 6e 74 65 nual(text-pointe
1e50: 72 29 2d 24 6e 20 3e 3d 20 30 7d 20 7b 0a 09 69 r)-$n >= 0} {..i
1e60: 6e 63 72 20 6d 61 6e 75 61 6c 28 74 65 78 74 2d ncr manual(text-
1e70: 70 6f 69 6e 74 65 72 29 20 2d 24 6e 0a 20 20 20 pointer) -$n.
1e80: 20 7d 0a 7d 0a 0a 70 72 6f 63 20 6d 61 74 63 68 }.}..proc match
1e90: 2d 74 65 78 74 20 61 72 67 73 20 7b 0a 20 20 20 -text args {.
1ea0: 20 67 6c 6f 62 61 6c 20 6d 61 6e 75 61 6c 0a 20 global manual.
1eb0: 20 20 20 73 65 74 20 6e 61 72 67 73 20 5b 6c 6c set nargs [ll
1ec0: 65 6e 67 74 68 20 24 61 72 67 73 5d 0a 20 20 20 ength $args].
1ed0: 20 69 66 20 7b 24 6d 61 6e 75 61 6c 28 74 65 78 if {$manual(tex
1ee0: 74 2d 70 6f 69 6e 74 65 72 29 20 2b 20 24 6e 61 t-pointer) + $na
1ef0: 72 67 73 20 3e 20 24 6d 61 6e 75 61 6c 28 74 65 rgs > $manual(te
1f00: 78 74 2d 6c 65 6e 67 74 68 29 7d 20 7b 0a 09 72 xt-length)} {..r
1f10: 65 74 75 72 6e 20 30 0a 20 20 20 20 7d 0a 20 20 eturn 0. }.
1f20: 20 20 73 65 74 20 6e 62 61 63 6b 20 30 0a 20 20 set nback 0.
1f30: 20 20 66 6f 72 65 61 63 68 20 61 72 67 20 24 61 foreach arg $a
1f40: 72 67 73 20 7b 0a 09 69 66 20 7b 21 5b 6d 6f 72 rgs {..if {![mor
1f50: 65 2d 74 65 78 74 5d 7d 20 7b 0a 09 20 20 20 20 e-text]} {..
1f60: 62 61 63 6b 75 70 2d 74 65 78 74 20 24 6e 62 61 backup-text $nba
1f70: 63 6b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 30 ck.. return 0
1f80: 0a 09 7d 0a 09 73 65 74 20 61 72 67 20 5b 73 74 ..}..set arg [st
1f90: 72 69 6e 67 20 74 72 69 6d 20 24 61 72 67 5d 0a ring trim $arg].
1fa0: 09 73 65 74 20 74 61 72 67 20 5b 73 74 72 69 6e .set targ [strin
1fb0: 67 20 74 72 69 6d 20 5b 6c 69 6e 64 65 78 20 24 g trim [lindex $
1fc0: 6d 61 6e 75 61 6c 28 74 65 78 74 29 20 24 6d 61 manual(text) $ma
1fd0: 6e 75 61 6c 28 74 65 78 74 2d 70 6f 69 6e 74 65 nual(text-pointe
1fe0: 72 29 5d 5d 0a 09 69 66 20 7b 24 61 72 67 20 65 r)]]..if {$arg e
1ff0: 71 20 24 74 61 72 67 7d 20 7b 0a 09 20 20 20 20 q $targ} {..
2000: 69 6e 63 72 20 6e 62 61 63 6b 0a 09 20 20 20 20 incr nback..
2010: 69 6e 63 72 20 6d 61 6e 75 61 6c 28 74 65 78 74 incr manual(text
2020: 2d 70 6f 69 6e 74 65 72 29 0a 09 20 20 20 20 63 -pointer).. c
2030: 6f 6e 74 69 6e 75 65 0a 09 7d 0a 09 69 66 20 7b ontinue..}..if {
2040: 5b 72 65 67 65 78 70 20 7b 5e 40 28 5c 77 2b 29 [regexp {^@(\w+)
2050: 24 7d 20 24 61 72 67 20 61 6c 6c 20 6e 61 6d 65 $} $arg all name
2060: 5d 7d 20 7b 0a 09 20 20 20 20 75 70 76 61 72 20 ]} {.. upvar
2070: 31 20 24 6e 61 6d 65 20 76 61 72 0a 09 20 20 20 1 $name var..
2080: 20 73 65 74 20 76 61 72 20 24 74 61 72 67 0a 09 set var $targ..
2090: 20 20 20 20 69 6e 63 72 20 6e 62 61 63 6b 0a 09 incr nback..
20a0: 20 20 20 20 69 6e 63 72 20 6d 61 6e 75 61 6c 28 incr manual(
20b0: 74 65 78 74 2d 70 6f 69 6e 74 65 72 29 0a 09 20 text-pointer)..
20c0: 20 20 20 63 6f 6e 74 69 6e 75 65 0a 09 7d 0a 09 continue..}..
20d0: 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 6e 6f 63 if {[regexp -noc
20e0: 61 73 65 20 7b 5e 28 5c 2e 5b 41 2d 5a 5d 5b 41 ase {^(\.[A-Z][A
20f0: 2d 5a 5d 29 40 28 5c 77 2b 29 24 7d 20 24 61 72 -Z])@(\w+)$} $ar
2100: 67 20 61 6c 6c 20 6f 70 20 6e 61 6d 65 5d 5c 0a g all op name]\.
2110: 09 09 26 26 20 5b 73 74 72 69 6e 67 20 65 71 75 ..&& [string equ
2120: 61 6c 20 24 6f 70 20 5b 6c 69 6e 64 65 78 20 24 al $op [lindex $
2130: 74 61 72 67 20 30 5d 5d 7d 20 7b 0a 09 20 20 20 targ 0]]} {..
2140: 20 75 70 76 61 72 20 31 20 24 6e 61 6d 65 20 76 upvar 1 $name v
2150: 61 72 0a 09 20 20 20 20 73 65 74 20 76 61 72 20 ar.. set var
2160: 5b 6c 72 61 6e 67 65 20 24 74 61 72 67 20 31 20 [lrange $targ 1
2170: 65 6e 64 5d 0a 09 20 20 20 20 69 6e 63 72 20 6e end].. incr n
2180: 62 61 63 6b 0a 09 20 20 20 20 69 6e 63 72 20 6d back.. incr m
2190: 61 6e 75 61 6c 28 74 65 78 74 2d 70 6f 69 6e 74 anual(text-point
21a0: 65 72 29 0a 09 20 20 20 20 63 6f 6e 74 69 6e 75 er).. continu
21b0: 65 0a 09 7d 0a 09 62 61 63 6b 75 70 2d 74 65 78 e..}..backup-tex
21c0: 74 20 24 6e 62 61 63 6b 0a 09 72 65 74 75 72 6e t $nback..return
21d0: 20 30 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 0. }. ret
21e0: 75 72 6e 20 31 0a 7d 0a 0a 70 72 6f 63 20 65 78 urn 1.}..proc ex
21f0: 70 61 6e 64 2d 6e 65 78 74 2d 74 65 78 74 20 7b pand-next-text {
2200: 6e 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 n} {. global
2210: 6d 61 6e 75 61 6c 0a 20 20 20 20 72 65 74 75 72 manual. retur
2220: 6e 20 5b 6a 6f 69 6e 20 5b 6c 72 61 6e 67 65 20 n [join [lrange
2230: 24 6d 61 6e 75 61 6c 28 74 65 78 74 29 20 24 6d $manual(text) $m
2240: 61 6e 75 61 6c 28 74 65 78 74 2d 70 6f 69 6e 74 anual(text-point
2250: 65 72 29 20 5c 0a 09 20 20 20 20 5b 65 78 70 72 er) \.. [expr
2260: 20 7b 24 6d 61 6e 75 61 6c 28 74 65 78 74 2d 70 {$manual(text-p
2270: 6f 69 6e 74 65 72 29 2b 24 6e 2d 31 7d 5d 5d 20 ointer)+$n-1}]]
2280: 5c 6e 5c 6e 5d 0a 7d 0a 0a 23 23 0a 23 23 20 70 \n\n].}..##.## p
2290: 61 73 73 20 32 20 6f 75 74 70 75 74 0a 23 23 0a ass 2 output.##.
22a0: 70 72 6f 63 20 6d 61 6e 2d 70 75 74 73 20 7b 74 proc man-puts {t
22b0: 65 78 74 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 ext} {. globa
22c0: 6c 20 6d 61 6e 75 61 6c 0a 20 20 20 20 6c 61 70 l manual. lap
22d0: 70 65 6e 64 20 6d 61 6e 75 61 6c 28 6f 75 74 70 pend manual(outp
22e0: 75 74 2d 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d ut-$manual(wing-
22f0: 66 69 6c 65 29 2d 24 6d 61 6e 75 61 6c 28 6e 61 file)-$manual(na
2300: 6d 65 29 29 20 24 74 65 78 74 0a 7d 0a 0c 0a 23 me)) $text.}...#
2310: 23 0a 23 23 20 62 75 69 6c 64 20 68 79 70 65 72 #.## build hyper
2320: 74 65 78 74 20 6c 69 6e 6b 73 20 74 6f 20 74 61 text links to ta
2330: 62 6c 65 73 20 6f 66 20 63 6f 6e 74 65 6e 74 73 bles of contents
2340: 0a 23 23 0a 70 72 6f 63 20 6c 6f 6e 67 2d 74 6f .##.proc long-to
2350: 63 20 7b 74 65 78 74 7d 20 7b 0a 20 20 20 20 67 c {text} {. g
2360: 6c 6f 62 61 6c 20 6d 61 6e 75 61 6c 0a 20 20 20 lobal manual.
2370: 20 73 65 74 20 68 65 72 65 20 4d 5b 69 6e 63 72 set here M[incr
2380: 20 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f 6e 2d manual(section-
2390: 74 6f 63 2d 6e 29 5d 0a 20 20 20 20 73 65 74 20 toc-n)]. set
23a0: 6d 61 6e 75 61 6c 28 24 6d 61 6e 75 61 6c 28 6e manual($manual(n
23b0: 61 6d 65 29 2d 69 64 2d 24 74 65 78 74 29 20 24 ame)-id-$text) $
23c0: 68 65 72 65 0a 20 20 20 20 73 65 74 20 74 68 65 here. set the
23d0: 72 65 20 4c 5b 69 6e 63 72 20 6d 61 6e 75 61 6c re L[incr manual
23e0: 28 6c 6f 6e 67 2d 74 6f 63 2d 6e 29 5d 0a 20 20 (long-toc-n)].
23f0: 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 6c lappend manual
2400: 28 73 65 63 74 69 6f 6e 2d 74 6f 63 29 20 5c 0a (section-toc) \.
2410: 09 20 20 20 20 22 3c 64 64 3e 3c 61 20 68 72 65 . "<dd><a hre
2420: 66 3d 5c 22 24 6d 61 6e 75 61 6c 28 6e 61 6d 65 f=\"$manual(name
2430: 29 2e 68 74 6d 6c 23 24 68 65 72 65 5c 22 20 6e ).html#$here\" n
2440: 61 6d 65 3d 5c 22 5b 6e 6f 73 70 61 63 65 2d 74 ame=\"[nospace-t
2450: 65 78 74 20 24 74 68 65 72 65 5d 5c 22 20 69 64 ext $there]\" id
2460: 3d 5c 22 5b 6e 6f 73 70 61 63 65 2d 74 65 78 74 =\"[nospace-text
2470: 20 24 74 68 65 72 65 5d 5c 22 3e 24 74 65 78 74 $there]\">$text
2480: 3c 2f 61 3e 22 0a 20 20 20 20 72 65 74 75 72 6e </a>". return
2490: 20 22 3c 61 20 6e 61 6d 65 3d 5c 22 5b 6e 6f 73 "<a name=\"[nos
24a0: 70 61 63 65 2d 74 65 78 74 20 24 68 65 72 65 5d pace-text $here]
24b0: 5c 22 20 69 64 3d 5c 22 5b 6e 6f 73 70 61 63 65 \" id=\"[nospace
24c0: 2d 74 65 78 74 20 24 68 65 72 65 5d 5c 22 3e 24 -text $here]\">$
24d0: 74 65 78 74 3c 2f 61 3e 22 0a 7d 0a 0a 70 72 6f text</a>".}..pro
24e0: 63 20 6f 70 74 69 6f 6e 2d 74 6f 63 20 7b 6e 61 c option-toc {na
24f0: 6d 65 20 63 6c 61 73 73 20 73 77 69 74 63 68 7d me class switch}
2500: 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 6d 61 {. global ma
2510: 6e 75 61 6c 0a 20 20 20 20 23 20 53 70 65 63 69 nual. # Speci
2520: 61 6c 20 63 61 73 65 20 68 61 6e 64 6c 69 6e 67 al case handling
2530: 2c 20 6f 68 20 77 65 20 68 61 74 65 20 69 74 20 , oh we hate it
2540: 62 75 74 20 6d 75 73 74 20 64 6f 20 69 74 0a 20 but must do it.
2550: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d if {[string m
2560: 61 74 63 68 20 22 2a 4f 50 54 49 4f 4e 53 22 20 atch "*OPTIONS"
2570: 24 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f 6e 29 $manual(section)
2580: 5d 7d 20 7b 0a 09 69 66 20 7b 24 6d 61 6e 75 61 ]} {..if {$manua
2590: 6c 28 6e 61 6d 65 29 20 6e 65 20 22 74 74 6b 5f l(name) ne "ttk_
25a0: 77 69 64 67 65 74 22 20 26 26 20 28 24 6d 61 6e widget" && ($man
25b0: 75 61 6c 28 6e 61 6d 65 29 20 6e 65 20 22 74 74 ual(name) ne "tt
25c0: 6b 5f 65 6e 74 72 79 22 20 7c 7c 0a 09 09 21 5b k_entry" ||...![
25d0: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 76 61 6c string match val
25e0: 69 64 61 74 65 2a 20 24 6e 61 6d 65 5d 29 7d 20 idate* $name])}
25f0: 7b 0a 09 20 20 20 20 23 20 6c 69 6e 6b 20 74 68 {.. # link th
2600: 65 20 64 65 66 69 6e 65 64 20 6f 70 74 69 6f 6e e defined option
2610: 20 69 6e 74 6f 20 74 68 65 20 6c 6f 6e 67 20 74 into the long t
2620: 61 62 6c 65 20 6f 66 20 63 6f 6e 74 65 6e 74 73 able of contents
2630: 0a 09 20 20 20 20 73 65 74 20 6c 69 6e 6b 20 5b .. set link [
2640: 6c 6f 6e 67 2d 74 6f 63 20 22 24 73 77 69 74 63 long-toc "$switc
2650: 68 2c 20 24 6e 61 6d 65 2c 20 24 63 6c 61 73 73 h, $name, $class
2660: 22 5d 0a 09 20 20 20 20 72 65 67 73 75 62 20 2d "].. regsub -
2670: 2d 20 22 24 73 77 69 74 63 68 2c 20 24 6e 61 6d - "$switch, $nam
2680: 65 2c 20 24 63 6c 61 73 73 22 20 24 6c 69 6e 6b e, $class" $link
2690: 20 22 24 73 77 69 74 63 68 22 20 6c 69 6e 6b 0a "$switch" link.
26a0: 09 20 20 20 20 72 65 74 75 72 6e 20 24 6c 69 6e . return $lin
26b0: 6b 0a 09 7d 0a 20 20 20 20 7d 20 65 6c 73 65 69 k..}. } elsei
26c0: 66 20 7b 22 24 6d 61 6e 75 61 6c 28 6e 61 6d 65 f {"$manual(name
26d0: 29 3a 24 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f ):$manual(sectio
26e0: 6e 29 22 20 6e 65 20 22 6f 70 74 69 6f 6e 73 3a n)" ne "options:
26f0: 44 45 53 43 52 49 50 54 49 4f 4e 22 7d 20 7b 0a DESCRIPTION"} {.
2700: 09 65 72 72 6f 72 20 22 6f 70 74 69 6f 6e 2d 74 .error "option-t
2710: 6f 63 20 69 6e 20 24 6d 61 6e 75 61 6c 28 6e 61 oc in $manual(na
2720: 6d 65 29 20 73 65 63 74 69 6f 6e 20 24 6d 61 6e me) section $man
2730: 75 61 6c 28 73 65 63 74 69 6f 6e 29 22 0a 20 20 ual(section)".
2740: 20 20 7d 0a 0a 20 20 20 20 23 20 6c 69 6e 6b 20 }.. # link
2750: 74 68 65 20 64 65 66 69 6e 65 64 20 73 74 61 6e the defined stan
2760: 64 61 72 64 20 6f 70 74 69 6f 6e 20 74 6f 20 74 dard option to t
2770: 68 65 20 6c 6f 6e 67 20 74 61 62 6c 65 20 6f 66 he long table of
2780: 20 63 6f 6e 74 65 6e 74 73 20 61 6e 64 20 6d 61 contents and ma
2790: 6b 65 0a 20 20 20 20 23 20 61 20 74 61 72 67 65 ke. # a targe
27a0: 74 20 66 6f 72 20 74 68 65 20 73 74 61 6e 64 61 t for the standa
27b0: 72 64 20 6f 70 74 69 6f 6e 20 72 65 66 65 72 65 rd option refere
27c0: 6e 63 65 73 20 66 72 6f 6d 20 6f 74 68 65 72 20 nces from other
27d0: 6d 61 6e 20 70 61 67 65 73 2e 0a 0a 20 20 20 20 man pages...
27e0: 73 65 74 20 66 69 72 73 74 20 5b 6c 69 6e 64 65 set first [linde
27f0: 78 20 24 73 77 69 74 63 68 20 30 5d 0a 20 20 20 x $switch 0].
2800: 20 73 65 74 20 68 65 72 65 20 4d 24 66 69 72 73 set here M$firs
2810: 74 0a 20 20 20 20 73 65 74 20 74 68 65 72 65 20 t. set there
2820: 4c 5b 69 6e 63 72 20 6d 61 6e 75 61 6c 28 6c 6f L[incr manual(lo
2830: 6e 67 2d 74 6f 63 2d 6e 29 5d 0a 20 20 20 20 73 ng-toc-n)]. s
2840: 65 74 20 6d 61 6e 75 61 6c 28 73 74 61 6e 64 61 et manual(standa
2850: 72 64 2d 6f 70 74 69 6f 6e 2d 24 6d 61 6e 75 61 rd-option-$manua
2860: 6c 28 6e 61 6d 65 29 2d 24 66 69 72 73 74 29 20 l(name)-$first)
2870: 5c 0a 09 22 3c 61 20 68 72 65 66 3d 5c 22 24 6d \.."<a href=\"$m
2880: 61 6e 75 61 6c 28 6e 61 6d 65 29 2e 68 74 6d 6c anual(name).html
2890: 23 24 68 65 72 65 5c 22 3e 24 73 77 69 74 63 68 #$here\">$switch
28a0: 2c 20 24 6e 61 6d 65 2c 20 24 63 6c 61 73 73 3c , $name, $class<
28b0: 2f 61 3e 22 0a 20 20 20 20 6c 61 70 70 65 6e 64 /a>". lappend
28c0: 20 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f 6e 2d manual(section-
28d0: 74 6f 63 29 20 5c 0a 09 22 3c 64 64 3e 3c 61 20 toc) \.."<dd><a
28e0: 68 72 65 66 3d 5c 22 24 6d 61 6e 75 61 6c 28 6e href=\"$manual(n
28f0: 61 6d 65 29 2e 68 74 6d 6c 23 24 68 65 72 65 5c ame).html#$here\
2900: 22 20 6e 61 6d 65 3d 5c 22 5b 6e 6f 73 70 61 63 " name=\"[nospac
2910: 65 2d 74 65 78 74 20 24 74 68 65 72 65 5d 5c 22 e-text $there]\"
2920: 20 69 64 3d 5c 22 5b 6e 6f 73 70 61 63 65 2d 74 id=\"[nospace-t
2930: 65 78 74 20 24 74 68 65 72 65 5d 5c 22 3e 24 73 ext $there]\">$s
2940: 77 69 74 63 68 2c 20 24 6e 61 6d 65 2c 20 24 63 witch, $name, $c
2950: 6c 61 73 73 3c 2f 61 3e 22 0a 20 20 20 20 72 65 lass</a>". re
2960: 74 75 72 6e 20 22 3c 61 20 6e 61 6d 65 3d 5c 22 turn "<a name=\"
2970: 5b 6e 6f 73 70 61 63 65 2d 74 65 78 74 20 24 68 [nospace-text $h
2980: 65 72 65 5d 5c 22 20 69 64 3d 5c 22 5b 6e 6f 73 ere]\" id=\"[nos
2990: 70 61 63 65 2d 74 65 78 74 20 24 68 65 72 65 5d pace-text $here]
29a0: 5c 22 3e 24 73 77 69 74 63 68 3c 2f 61 3e 22 0a \">$switch</a>".
29b0: 7d 0a 0a 70 72 6f 63 20 73 74 64 2d 6f 70 74 69 }..proc std-opti
29c0: 6f 6e 2d 74 6f 63 20 7b 6e 61 6d 65 20 70 61 67 on-toc {name pag
29d0: 65 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 e} {. global
29e0: 6d 61 6e 75 61 6c 0a 20 20 20 20 69 66 20 7b 5b manual. if {[
29f0: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 61 6e 75 info exists manu
2a00: 61 6c 28 73 74 61 6e 64 61 72 64 2d 6f 70 74 69 al(standard-opti
2a10: 6f 6e 2d 24 70 61 67 65 2d 24 6e 61 6d 65 29 5d on-$page-$name)]
2a20: 7d 20 7b 0a 09 6c 61 70 70 65 6e 64 20 6d 61 6e } {..lappend man
2a30: 75 61 6c 28 73 65 63 74 69 6f 6e 2d 74 6f 63 29 ual(section-toc)
2a40: 20 3c 64 64 3e 24 6d 61 6e 75 61 6c 28 73 74 61 <dd>$manual(sta
2a50: 6e 64 61 72 64 2d 6f 70 74 69 6f 6e 2d 24 70 61 ndard-option-$pa
2a60: 67 65 2d 24 6e 61 6d 65 29 0a 09 72 65 74 75 72 ge-$name)..retur
2a70: 6e 20 24 6d 61 6e 75 61 6c 28 73 74 61 6e 64 61 n $manual(standa
2a80: 72 64 2d 6f 70 74 69 6f 6e 2d 24 70 61 67 65 2d rd-option-$page-
2a90: 24 6e 61 6d 65 29 0a 20 20 20 20 7d 0a 20 20 20 $name). }.
2aa0: 20 6d 61 6e 65 72 72 6f 72 20 22 6d 69 73 73 69 manerror "missi
2ab0: 6e 67 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 ng reference to
2ac0: 5c 22 24 6e 61 6d 65 5c 22 20 69 6e 20 24 70 61 \"$name\" in $pa
2ad0: 67 65 2e 6e 22 0a 20 20 20 20 73 65 74 20 68 65 ge.n". set he
2ae0: 72 65 20 4d 5b 69 6e 63 72 20 6d 61 6e 75 61 6c re M[incr manual
2af0: 28 73 65 63 74 69 6f 6e 2d 74 6f 63 2d 6e 29 5d (section-toc-n)]
2b00: 0a 20 20 20 20 73 65 74 20 74 68 65 72 65 20 4c . set there L
2b10: 5b 69 6e 63 72 20 6d 61 6e 75 61 6c 28 6c 6f 6e [incr manual(lon
2b20: 67 2d 74 6f 63 2d 6e 29 5d 0a 20 20 20 20 73 65 g-toc-n)]. se
2b30: 74 20 6f 74 68 65 72 20 4d 24 6e 61 6d 65 0a 20 t other M$name.
2b40: 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 lappend manua
2b50: 6c 28 73 65 63 74 69 6f 6e 2d 74 6f 63 29 20 22 l(section-toc) "
2b60: 3c 64 64 3e 3c 61 20 68 72 65 66 3d 5c 22 24 70 <dd><a href=\"$p
2b70: 61 67 65 2e 68 74 6d 6c 23 24 6f 74 68 65 72 5c age.html#$other\
2b80: 22 3e 24 6e 61 6d 65 3c 2f 61 3e 22 0a 20 20 20 ">$name</a>".
2b90: 20 72 65 74 75 72 6e 20 22 3c 61 20 68 72 65 66 return "<a href
2ba0: 3d 5c 22 24 70 61 67 65 2e 68 74 6d 6c 23 24 6f =\"$page.html#$o
2bb0: 74 68 65 72 5c 22 3e 24 6e 61 6d 65 3c 2f 61 3e ther\">$name</a>
2bc0: 22 0a 7d 0a 0c 0a 23 23 0a 23 23 20 70 72 6f 63 ".}...##.## proc
2bd0: 65 73 73 20 74 68 65 20 77 69 64 67 65 74 20 6f ess the widget o
2be0: 70 74 69 6f 6e 20 73 65 63 74 69 6f 6e 0a 23 23 ption section.##
2bf0: 20 69 6e 20 77 69 64 67 65 74 20 61 6e 64 20 6f in widget and o
2c00: 70 74 69 6f 6e 73 20 6d 61 6e 20 70 61 67 65 73 ptions man pages
2c10: 0a 23 23 0a 70 72 6f 63 20 6f 75 74 70 75 74 2d .##.proc output-
2c20: 77 69 64 67 65 74 2d 6f 70 74 69 6f 6e 73 20 7b widget-options {
2c30: 72 65 73 74 7d 20 7b 0a 20 20 20 20 67 6c 6f 62 rest} {. glob
2c40: 61 6c 20 6d 61 6e 75 61 6c 0a 20 20 20 20 6d 61 al manual. ma
2c50: 6e 2d 70 75 74 73 20 3c 64 6c 3e 0a 20 20 20 20 n-puts <dl>.
2c60: 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 6c 28 73 lappend manual(s
2c70: 65 63 74 69 6f 6e 2d 74 6f 63 29 20 3c 64 6c 3e ection-toc) <dl>
2c80: 0a 20 20 20 20 62 61 63 6b 75 70 2d 74 65 78 74 . backup-text
2c90: 20 31 0a 20 20 20 20 73 65 74 20 70 61 72 61 20 1. set para
2ca0: 7b 7d 0a 20 20 20 20 77 68 69 6c 65 20 7b 5b 6e {}. while {[n
2cb0: 65 78 74 2d 6f 70 2d 69 73 20 2e 4f 50 20 72 65 ext-op-is .OP re
2cc0: 73 74 5d 7d 20 7b 0a 09 73 77 69 74 63 68 20 2d st]} {..switch -
2cd0: 65 78 61 63 74 20 2d 2d 20 5b 6c 6c 65 6e 67 74 exact -- [llengt
2ce0: 68 20 24 72 65 73 74 5d 20 7b 0a 09 20 20 20 20 h $rest] {..
2cf0: 33 20 7b 0a 09 09 6c 61 73 73 69 67 6e 20 24 72 3 {...lassign $r
2d00: 65 73 74 20 73 77 69 74 63 68 20 6e 61 6d 65 20 est switch name
2d10: 63 6c 61 73 73 0a 09 20 20 20 20 7d 0a 09 20 20 class.. }..
2d20: 20 20 35 20 7b 0a 09 09 73 65 74 20 73 77 69 74 5 {...set swit
2d30: 63 68 20 5b 6c 72 61 6e 67 65 20 24 72 65 73 74 ch [lrange $rest
2d40: 20 30 20 32 5d 0a 09 09 73 65 74 20 6e 61 6d 65 0 2]...set name
2d50: 20 5b 6c 69 6e 64 65 78 20 24 72 65 73 74 20 33 [lindex $rest 3
2d60: 5d 0a 09 09 73 65 74 20 63 6c 61 73 73 20 5b 6c ]...set class [l
2d70: 69 6e 64 65 78 20 24 72 65 73 74 20 34 5d 0a 09 index $rest 4]..
2d80: 20 20 20 20 7d 0a 09 20 20 20 20 64 65 66 61 75 }.. defau
2d90: 6c 74 20 7b 0a 09 09 66 61 74 61 6c 20 22 62 61 lt {...fatal "ba
2da0: 64 20 2e 4f 50 20 24 72 65 73 74 22 0a 09 20 20 d .OP $rest"..
2db0: 20 20 7d 0a 09 7d 0a 09 69 66 20 7b 21 5b 72 65 }..}..if {![re
2dc0: 67 65 78 70 20 7b 5e 28 3c 2e 3e 29 28 5b 2d 5c gexp {^(<.>)([-\
2dd0: 77 20 5d 2b 29 28 3c 2f 2e 3e 29 24 7d 20 24 73 w ]+)(</.>)$} $s
2de0: 77 69 74 63 68 20 5c 0a 09 09 61 6c 6c 20 6f 73 witch \...all os
2df0: 77 69 74 63 68 20 73 77 69 74 63 68 20 63 73 77 witch switch csw
2e00: 69 74 63 68 5d 7d 20 7b 0a 09 20 20 20 20 69 66 itch]} {.. if
2e10: 20 7b 21 5b 72 65 67 65 78 70 20 7b 5e 28 3c 2e {![regexp {^(<.
2e20: 3e 29 28 5b 2d 5c 77 20 5d 2b 29 20 6f 72 20 28 >)([-\w ]+) or (
2e30: 5b 2d 5c 77 20 5d 2b 29 28 3c 2f 2e 3e 29 24 7d [-\w ]+)(</.>)$}
2e40: 20 24 73 77 69 74 63 68 20 5c 0a 09 09 20 20 20 $switch \...
2e50: 20 61 6c 6c 20 6f 73 77 69 74 63 68 20 73 77 69 all oswitch swi
2e60: 74 63 68 31 20 73 77 69 74 63 68 32 20 63 73 77 tch1 switch2 csw
2e70: 69 74 63 68 5d 7d 20 7b 0a 09 09 65 72 72 6f 72 itch]} {...error
2e80: 20 22 6e 6f 74 20 53 77 69 74 63 68 3a 20 24 73 "not Switch: $s
2e90: 77 69 74 63 68 22 0a 09 20 20 20 20 7d 0a 09 20 witch".. }..
2ea0: 20 20 20 73 65 74 20 73 77 69 74 63 68 20 22 24 set switch "$
2eb0: 73 77 69 74 63 68 31 24 63 73 77 69 74 63 68 20 switch1$cswitch
2ec0: 6f 72 20 24 6f 73 77 69 74 63 68 24 73 77 69 74 or $oswitch$swit
2ed0: 63 68 32 22 0a 09 7d 0a 09 69 66 20 7b 21 5b 72 ch2"..}..if {![r
2ee0: 65 67 65 78 70 20 7b 5e 28 3c 2e 3e 29 28 5b 5c egexp {^(<.>)([\
2ef0: 77 5d 2a 29 28 3c 2f 2e 3e 29 24 7d 20 24 6e 61 w]*)(</.>)$} $na
2f00: 6d 65 20 61 6c 6c 20 6f 6e 61 6d 65 20 6e 61 6d me all oname nam
2f10: 65 20 63 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 e cname]} {..
2f20: 20 65 72 72 6f 72 20 22 6e 6f 74 20 4e 61 6d 65 error "not Name
2f30: 3a 20 24 6e 61 6d 65 22 0a 09 7d 0a 09 69 66 20 : $name"..}..if
2f40: 7b 21 5b 72 65 67 65 78 70 20 7b 5e 28 3c 2e 3e {![regexp {^(<.>
2f50: 29 28 5b 5c 77 5d 2a 29 28 3c 2f 2e 3e 29 24 7d )([\w]*)(</.>)$}
2f60: 20 24 63 6c 61 73 73 20 61 6c 6c 20 6f 63 6c 61 $class all ocla
2f70: 73 73 20 63 6c 61 73 73 20 63 63 6c 61 73 73 5d ss class cclass]
2f80: 7d 20 7b 0a 09 20 20 20 20 65 72 72 6f 72 20 22 } {.. error "
2f90: 6e 6f 74 20 43 6c 61 73 73 3a 20 24 63 6c 61 73 not Class: $clas
2fa0: 73 22 0a 09 7d 0a 09 6d 61 6e 2d 70 75 74 73 20 s"..}..man-puts
2fb0: 22 24 70 61 72 61 3c 64 74 3e 43 6f 6d 6d 61 6e "$para<dt>Comman
2fc0: 64 2d 4c 69 6e 65 20 4e 61 6d 65 3a 20 24 6f 73 d-Line Name: $os
2fd0: 77 69 74 63 68 5b 6f 70 74 69 6f 6e 2d 74 6f 63 witch[option-toc
2fe0: 20 24 6e 61 6d 65 20 24 63 6c 61 73 73 20 24 73 $name $class $s
2ff0: 77 69 74 63 68 5d 24 63 73 77 69 74 63 68 22 0a witch]$cswitch".
3000: 09 6d 61 6e 2d 70 75 74 73 20 22 3c 64 74 3e 44 .man-puts "<dt>D
3010: 61 74 61 62 61 73 65 20 4e 61 6d 65 3a 20 24 6f atabase Name: $o
3020: 6e 61 6d 65 24 6e 61 6d 65 24 63 6e 61 6d 65 22 name$name$cname"
3030: 0a 09 6d 61 6e 2d 70 75 74 73 20 22 3c 64 74 3e ..man-puts "<dt>
3040: 44 61 74 61 62 61 73 65 20 43 6c 61 73 73 3a 20 Database Class:
3050: 24 6f 63 6c 61 73 73 24 63 6c 61 73 73 24 63 63 $oclass$class$cc
3060: 6c 61 73 73 22 0a 09 6d 61 6e 2d 70 75 74 73 20 lass"..man-puts
3070: 3c 64 64 3e 5b 6e 65 78 74 2d 74 65 78 74 5d 0a <dd>[next-text].
3080: 09 73 65 74 20 70 61 72 61 20 3c 70 3e 0a 0a 09 .set para <p>...
3090: 69 66 20 7b 5b 6e 65 78 74 2d 6f 70 2d 69 73 20 if {[next-op-is
30a0: 2e 52 53 20 72 65 73 74 5d 7d 20 7b 0a 09 20 20 .RS rest]} {..
30b0: 20 20 77 68 69 6c 65 20 7b 5b 6d 6f 72 65 2d 74 while {[more-t
30c0: 65 78 74 5d 7d 20 7b 0a 09 09 73 65 74 20 6c 69 ext]} {...set li
30d0: 6e 65 20 5b 6e 65 78 74 2d 74 65 78 74 5d 0a 09 ne [next-text]..
30e0: 09 69 66 20 7b 5b 69 73 2d 61 2d 64 69 72 65 63 .if {[is-a-direc
30f0: 74 69 76 65 20 24 6c 69 6e 65 5d 7d 20 7b 0a 09 tive $line]} {..
3100: 09 20 20 20 20 73 70 6c 69 74 2d 64 69 72 65 63 . split-direc
3110: 74 69 76 65 20 24 6c 69 6e 65 20 63 6f 64 65 20 tive $line code
3120: 72 65 73 74 0a 09 09 20 20 20 20 73 77 69 74 63 rest... switc
3130: 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 63 6f 64 h -exact -- $cod
3140: 65 20 7b 0a 09 09 09 2e 52 45 20 7b 0a 09 09 09 e {.....RE {....
3150: 20 20 20 20 62 72 65 61 6b 0a 09 09 09 7d 0a 09 break....}..
3160: 09 09 2e 53 48 20 2d 20 2e 53 53 20 7b 0a 09 09 ...SH - .SS {...
3170: 09 20 20 20 20 6d 61 6e 65 72 72 6f 72 20 22 75 . manerror "u
3180: 6e 62 61 6c 61 6e 63 65 64 20 2e 52 53 20 61 74 nbalanced .RS at
3190: 20 73 65 63 74 69 6f 6e 20 65 6e 64 22 0a 09 09 section end"...
31a0: 09 20 20 20 20 62 61 63 6b 75 70 2d 74 65 78 74 . backup-text
31b0: 20 31 0a 09 09 09 20 20 20 20 62 72 65 61 6b 0a 1.... break.
31c0: 09 09 09 7d 0a 09 09 09 64 65 66 61 75 6c 74 20 ...}....default
31d0: 7b 0a 09 09 09 20 20 20 20 6f 75 74 70 75 74 2d {.... output-
31e0: 64 69 72 65 63 74 69 76 65 20 24 6c 69 6e 65 0a directive $line.
31f0: 09 09 09 7d 0a 09 09 20 20 20 20 7d 0a 09 09 7d ...}... }...}
3200: 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 6d 61 else {... ma
3210: 6e 2d 70 75 74 73 20 24 6c 69 6e 65 0a 09 09 7d n-puts $line...}
3220: 0a 09 20 20 20 20 7d 0a 09 7d 0a 20 20 20 20 7d .. }..}. }
3230: 0a 20 20 20 20 6d 61 6e 2d 70 75 74 73 20 3c 2f . man-puts </
3240: 64 6c 3e 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 dl>. lappend
3250: 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f 6e 2d 74 manual(section-t
3260: 6f 63 29 20 3c 2f 64 6c 3e 0a 7d 0a 0c 0a 23 23 oc) </dl>.}...##
3270: 0a 23 23 20 70 72 6f 63 65 73 73 20 2e 52 53 20 .## process .RS
3280: 6c 69 73 74 73 0a 23 23 0a 70 72 6f 63 20 6f 75 lists.##.proc ou
3290: 74 70 75 74 2d 52 53 2d 6c 69 73 74 20 7b 7d 20 tput-RS-list {}
32a0: 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 6d 61 6e {. global man
32b0: 75 61 6c 0a 20 20 20 20 69 66 20 7b 5b 6e 65 78 ual. if {[nex
32c0: 74 2d 6f 70 2d 69 73 20 2e 49 50 20 72 65 73 74 t-op-is .IP rest
32d0: 5d 7d 20 7b 0a 09 6f 75 74 70 75 74 2d 49 50 2d ]} {..output-IP-
32e0: 6c 69 73 74 20 2e 52 53 20 2e 49 50 20 24 72 65 list .RS .IP $re
32f0: 73 74 0a 09 69 66 20 7b 5b 6d 61 74 63 68 2d 74 st..if {[match-t
3300: 65 78 74 20 2e 52 45 20 2e 73 70 20 2e 52 53 20 ext .RE .sp .RS
3310: 40 72 65 73 74 20 2e 49 50 20 40 72 65 73 74 32 @rest .IP @rest2
3320: 5d 7d 20 7b 0a 09 20 20 20 20 6d 61 6e 2d 70 75 ]} {.. man-pu
3330: 74 73 20 3c 70 3e 24 72 65 73 74 0a 09 20 20 20 ts <p>$rest..
3340: 20 6f 75 74 70 75 74 2d 49 50 2d 6c 69 73 74 20 output-IP-list
3350: 2e 52 53 20 2e 49 50 20 24 72 65 73 74 32 0a 09 .RS .IP $rest2..
3360: 7d 0a 09 69 66 20 7b 5b 6d 61 74 63 68 2d 74 65 }..if {[match-te
3370: 78 74 20 2e 52 45 20 2e 73 70 20 2e 52 53 20 40 xt .RE .sp .RS @
3380: 72 65 73 74 20 2e 52 45 5d 7d 20 7b 0a 09 20 20 rest .RE]} {..
3390: 20 20 6d 61 6e 2d 70 75 74 73 20 3c 70 3e 24 72 man-puts <p>$r
33a0: 65 73 74 0a 09 20 20 20 20 72 65 74 75 72 6e 0a est.. return.
33b0: 09 7d 0a 09 69 66 20 7b 5b 6e 65 78 74 2d 6f 70 .}..if {[next-op
33c0: 2d 69 73 20 2e 52 45 20 72 65 73 74 5d 7d 20 7b -is .RE rest]} {
33d0: 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a .. return..}.
33e0: 20 20 20 20 7d 0a 20 20 20 20 6d 61 6e 2d 70 75 }. man-pu
33f0: 74 73 20 3c 64 6c 3e 3c 64 64 3e 0a 20 20 20 20 ts <dl><dd>.
3400: 77 68 69 6c 65 20 7b 5b 6d 6f 72 65 2d 74 65 78 while {[more-tex
3410: 74 5d 7d 20 7b 0a 09 73 65 74 20 6c 69 6e 65 20 t]} {..set line
3420: 5b 6e 65 78 74 2d 74 65 78 74 5d 0a 09 69 66 20 [next-text]..if
3430: 7b 5b 69 73 2d 61 2d 64 69 72 65 63 74 69 76 65 {[is-a-directive
3440: 20 24 6c 69 6e 65 5d 7d 20 7b 0a 09 20 20 20 20 $line]} {..
3450: 73 70 6c 69 74 2d 64 69 72 65 63 74 69 76 65 20 split-directive
3460: 24 6c 69 6e 65 20 63 6f 64 65 20 72 65 73 74 0a $line code rest.
3470: 09 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 . switch -exa
3480: 63 74 20 2d 2d 20 24 63 6f 64 65 20 7b 0a 09 09 ct -- $code {...
3490: 2e 52 45 20 7b 0a 09 09 20 20 20 20 62 72 65 61 .RE {... brea
34a0: 6b 0a 09 09 7d 0a 09 09 2e 53 48 20 2d 20 2e 53 k...}....SH - .S
34b0: 53 20 7b 0a 09 09 20 20 20 20 6d 61 6e 65 72 72 S {... manerr
34c0: 6f 72 20 22 75 6e 62 61 6c 61 6e 63 65 64 20 2e or "unbalanced .
34d0: 52 53 20 61 74 20 73 65 63 74 69 6f 6e 20 65 6e RS at section en
34e0: 64 22 0a 09 09 20 20 20 20 62 61 63 6b 75 70 2d d"... backup-
34f0: 74 65 78 74 20 31 0a 09 09 20 20 20 20 62 72 65 text 1... bre
3500: 61 6b 0a 09 09 7d 0a 09 09 64 65 66 61 75 6c 74 ak...}...default
3510: 20 7b 0a 09 09 20 20 20 20 6f 75 74 70 75 74 2d {... output-
3520: 64 69 72 65 63 74 69 76 65 20 24 6c 69 6e 65 0a directive $line.
3530: 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c ..}.. }..} el
3540: 73 65 20 7b 0a 09 20 20 20 20 6d 61 6e 2d 70 75 se {.. man-pu
3550: 74 73 20 24 6c 69 6e 65 0a 09 7d 0a 20 20 20 20 ts $line..}.
3560: 7d 0a 20 20 20 20 6d 61 6e 2d 70 75 74 73 20 3c }. man-puts <
3570: 2f 64 6c 3e 0a 7d 0a 0c 0a 23 23 0a 23 23 20 70 /dl>.}...##.## p
3580: 72 6f 63 65 73 73 20 2e 49 50 20 6c 69 73 74 73 rocess .IP lists
3590: 20 77 68 69 63 68 20 6d 61 79 20 62 65 20 70 6c which may be pl
35a0: 61 69 6e 20 69 6e 64 65 6e 74 73 2c 0a 23 23 20 ain indents,.##
35b0: 6e 75 6d 65 72 69 63 20 6c 69 73 74 73 2c 20 6f numeric lists, o
35c0: 72 20 64 65 66 69 6e 69 74 69 6f 6e 20 6c 69 73 r definition lis
35d0: 74 73 0a 23 23 0a 70 72 6f 63 20 6f 75 74 70 75 ts.##.proc outpu
35e0: 74 2d 49 50 2d 6c 69 73 74 20 7b 63 6f 6e 74 65 t-IP-list {conte
35f0: 78 74 20 63 6f 64 65 20 72 65 73 74 7d 20 7b 0a xt code rest} {.
3600: 20 20 20 20 67 6c 6f 62 61 6c 20 6d 61 6e 75 61 global manua
3610: 6c 0a 20 20 20 20 69 66 20 7b 21 5b 73 74 72 69 l. if {![stri
3620: 6e 67 20 6c 65 6e 67 74 68 20 24 72 65 73 74 5d ng length $rest]
3630: 7d 20 7b 0a 09 23 20 62 6c 61 6e 6b 20 6c 61 62 } {..# blank lab
3640: 65 6c 2c 20 70 6c 61 69 6e 20 69 6e 64 65 6e 74 el, plain indent
3650: 2c 20 6e 6f 20 63 6f 6e 74 65 6e 74 73 20 65 6e , no contents en
3660: 74 72 79 0a 09 6d 61 6e 2d 70 75 74 73 20 3c 64 try..man-puts <d
3670: 6c 3e 3c 64 64 3e 0a 09 77 68 69 6c 65 20 7b 5b l><dd>..while {[
3680: 6d 6f 72 65 2d 74 65 78 74 5d 7d 20 7b 0a 09 20 more-text]} {..
3690: 20 20 20 73 65 74 20 6c 69 6e 65 20 5b 6e 65 78 set line [nex
36a0: 74 2d 74 65 78 74 5d 0a 09 20 20 20 20 69 66 20 t-text].. if
36b0: 7b 5b 69 73 2d 61 2d 64 69 72 65 63 74 69 76 65 {[is-a-directive
36c0: 20 24 6c 69 6e 65 5d 7d 20 7b 0a 09 09 73 70 6c $line]} {...spl
36d0: 69 74 2d 64 69 72 65 63 74 69 76 65 20 24 6c 69 it-directive $li
36e0: 6e 65 20 63 6f 64 65 20 72 65 73 74 0a 09 09 69 ne code rest...i
36f0: 66 20 7b 24 63 6f 64 65 20 65 71 20 22 2e 49 50 f {$code eq ".IP
3700: 22 20 26 26 20 24 72 65 73 74 20 65 71 20 7b 7d " && $rest eq {}
3710: 7d 20 7b 0a 09 09 20 20 20 20 6d 61 6e 2d 70 75 } {... man-pu
3720: 74 73 20 22 3c 70 3e 22 0a 09 09 20 20 20 20 63 ts "<p>"... c
3730: 6f 6e 74 69 6e 75 65 0a 09 09 7d 0a 09 09 69 66 ontinue...}...if
3740: 20 7b 24 63 6f 64 65 20 69 6e 20 7b 2e 62 72 20 {$code in {.br
3750: 2e 44 53 20 2e 52 53 7d 7d 20 7b 0a 09 09 20 20 .DS .RS}} {...
3760: 20 20 6f 75 74 70 75 74 2d 64 69 72 65 63 74 69 output-directi
3770: 76 65 20 24 6c 69 6e 65 0a 09 09 7d 20 65 6c 73 ve $line...} els
3780: 65 20 7b 0a 09 09 20 20 20 20 62 61 63 6b 75 70 e {... backup
3790: 2d 74 65 78 74 20 31 0a 09 09 20 20 20 20 62 72 -text 1... br
37a0: 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 eak...}.. } e
37b0: 6c 73 65 20 7b 0a 09 09 6d 61 6e 2d 70 75 74 73 lse {...man-puts
37c0: 20 24 6c 69 6e 65 0a 09 20 20 20 20 7d 0a 09 7d $line.. }..}
37d0: 0a 09 6d 61 6e 2d 70 75 74 73 20 3c 2f 64 6c 3e ..man-puts </dl>
37e0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 23 . } else {..#
37f0: 20 6c 61 62 65 6c 6c 65 64 20 6c 69 73 74 2c 20 labelled list,
3800: 6d 61 6b 65 20 63 6f 6e 74 65 6e 74 73 0a 09 69 make contents..i
3810: 66 20 7b 24 63 6f 6e 74 65 78 74 20 6e 65 20 22 f {$context ne "
3820: 2e 53 48 22 20 26 26 20 24 63 6f 6e 74 65 78 74 .SH" && $context
3830: 20 6e 65 20 22 2e 53 53 22 7d 20 7b 0a 09 20 20 ne ".SS"} {..
3840: 20 20 6d 61 6e 2d 70 75 74 73 20 3c 70 3e 0a 09 man-puts <p>..
3850: 7d 0a 09 73 65 74 20 64 6c 20 22 3c 64 6c 20 63 }..set dl "<dl c
3860: 6c 61 73 73 3d 5c 22 5b 73 74 72 69 6e 67 20 74 lass=\"[string t
3870: 6f 6c 6f 77 65 72 20 24 6d 61 6e 75 61 6c 28 73 olower $manual(s
3880: 65 63 74 69 6f 6e 29 5d 5c 22 3e 22 0a 09 73 65 ection)]\">"..se
3890: 74 20 65 6e 64 64 6c 20 22 3c 2f 64 6c 3e 22 0a t enddl "</dl>".
38a0: 09 69 66 20 7b 24 63 6f 64 65 20 65 71 20 22 2e .if {$code eq ".
38b0: 49 50 22 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b IP"} {.. if {
38c0: 5b 72 65 67 65 78 70 20 7b 5e 5c 5b 5b 5c 64 61 [regexp {^\[[\da
38d0: 2d 66 5d 2b 5c 5d 7c 5c 28 3f 5b 5c 64 61 2d 66 -f]+\]|\(?[\da-f
38e0: 5d 2b 5c 29 24 7d 20 24 72 65 73 74 5d 7d 20 7b ]+\)$} $rest]} {
38f0: 0a 09 09 73 65 74 20 64 6c 20 22 3c 6f 6c 20 63 ...set dl "<ol c
3900: 6c 61 73 73 3d 5c 22 5b 73 74 72 69 6e 67 20 74 lass=\"[string t
3910: 6f 6c 6f 77 65 72 20 24 6d 61 6e 75 61 6c 28 73 olower $manual(s
3920: 65 63 74 69 6f 6e 29 5d 5c 22 3e 22 0a 09 09 73 ection)]\">"...s
3930: 65 74 20 65 6e 64 64 6c 20 22 3c 2f 6f 6c 3e 22 et enddl "</ol>"
3940: 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b .. } elseif {
3950: 22 26 62 75 6c 6c 3b 22 20 65 71 20 24 72 65 73 "•" eq $res
3960: 74 7d 20 7b 0a 09 09 73 65 74 20 64 6c 20 22 3c t} {...set dl "<
3970: 75 6c 20 63 6c 61 73 73 3d 5c 22 5b 73 74 72 69 ul class=\"[stri
3980: 6e 67 20 74 6f 6c 6f 77 65 72 20 24 6d 61 6e 75 ng tolower $manu
3990: 61 6c 28 73 65 63 74 69 6f 6e 29 5d 5c 22 3e 22 al(section)]\">"
39a0: 0a 09 09 73 65 74 20 65 6e 64 64 6c 20 22 3c 2f ...set enddl "</
39b0: 75 6c 3e 22 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 ul>".. }..}..
39c0: 6d 61 6e 2d 70 75 74 73 20 24 64 6c 0a 09 6c 61 man-puts $dl..la
39d0: 70 70 65 6e 64 20 6d 61 6e 75 61 6c 28 73 65 63 ppend manual(sec
39e0: 74 69 6f 6e 2d 74 6f 63 29 20 24 64 6c 0a 09 62 tion-toc) $dl..b
39f0: 61 63 6b 75 70 2d 74 65 78 74 20 31 0a 09 73 65 ackup-text 1..se
3a00: 74 20 61 63 63 65 70 74 5f 52 45 20 30 0a 09 73 t accept_RE 0..s
3a10: 65 74 20 70 61 72 61 20 7b 7d 0a 09 77 68 69 6c et para {}..whil
3a20: 65 20 7b 5b 6d 6f 72 65 2d 74 65 78 74 5d 7d 20 e {[more-text]}
3a30: 7b 0a 09 20 20 20 20 73 65 74 20 6c 69 6e 65 20 {.. set line
3a40: 5b 6e 65 78 74 2d 74 65 78 74 5d 0a 09 20 20 20 [next-text]..
3a50: 20 69 66 20 7b 5b 69 73 2d 61 2d 64 69 72 65 63 if {[is-a-direc
3a60: 74 69 76 65 20 24 6c 69 6e 65 5d 7d 20 7b 0a 09 tive $line]} {..
3a70: 09 73 70 6c 69 74 2d 64 69 72 65 63 74 69 76 65 .split-directive
3a80: 20 24 6c 69 6e 65 20 63 6f 64 65 20 72 65 73 74 $line code rest
3a90: 0a 09 09 73 77 69 74 63 68 20 2d 65 78 61 63 74 ...switch -exact
3aa0: 20 2d 2d 20 24 63 6f 64 65 20 7b 0a 09 09 20 20 -- $code {...
3ab0: 20 20 2e 49 50 20 7b 0a 09 09 09 69 66 20 7b 24 .IP {....if {$
3ac0: 61 63 63 65 70 74 5f 52 45 7d 20 7b 0a 09 09 09 accept_RE} {....
3ad0: 20 20 20 20 6f 75 74 70 75 74 2d 49 50 2d 6c 69 output-IP-li
3ae0: 73 74 20 2e 49 50 20 24 63 6f 64 65 20 24 72 65 st .IP $code $re
3af0: 73 74 0a 09 09 09 20 20 20 20 63 6f 6e 74 69 6e st.... contin
3b00: 75 65 0a 09 09 09 7d 0a 09 09 09 69 66 20 7b 24 ue....}....if {$
3b10: 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f 6e 29 20 manual(section)
3b20: 65 71 20 22 41 52 47 55 4d 45 4e 54 53 22 7d 20 eq "ARGUMENTS"}
3b30: 7b 0a 09 09 09 20 20 20 20 6d 61 6e 2d 70 75 74 {.... man-put
3b40: 73 20 22 24 70 61 72 61 3c 64 74 3e 24 72 65 73 s "$para<dt>$res
3b50: 74 3c 64 64 3e 22 0a 09 09 09 7d 20 65 6c 73 65 t<dd>"....} else
3b60: 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 5c 5b if {[regexp {^\[
3b70: 28 5b 5c 64 61 2d 66 5d 2b 29 5c 5d 24 7d 20 24 ([\da-f]+)\]$} $
3b80: 72 65 73 74 20 2d 3e 20 76 61 6c 75 65 5d 7d 20 rest -> value]}
3b90: 7b 0a 09 09 09 20 20 20 20 6d 61 6e 2d 70 75 74 {.... man-put
3ba0: 73 20 22 24 70 61 72 61 3c 6c 69 20 76 61 6c 75 s "$para<li valu
3bb0: 65 3d 5c 22 24 76 61 6c 75 65 5c 22 3e 22 0a 09 e=\"$value\">"..
3bc0: 09 09 7d 20 65 6c 73 65 69 66 20 7b 5b 72 65 67 ..} elseif {[reg
3bd0: 65 78 70 20 7b 5e 5c 28 3f 28 5b 5c 64 61 2d 66 exp {^\(?([\da-f
3be0: 5d 2b 29 5c 29 24 7d 20 24 72 65 73 74 20 2d 3e ]+)\)$} $rest ->
3bf0: 20 76 61 6c 75 65 5d 7d 20 7b 0a 09 09 09 20 20 value]} {....
3c00: 20 20 6d 61 6e 2d 70 75 74 73 20 22 24 70 61 72 man-puts "$par
3c10: 61 3c 6c 69 20 76 61 6c 75 65 3d 5c 22 24 76 61 a<li value=\"$va
3c20: 6c 75 65 5c 22 3e 22 0a 09 09 09 7d 20 65 6c 73 lue\">"....} els
3c30: 65 69 66 20 7b 22 26 62 75 6c 6c 3b 22 20 65 71 eif {"•" eq
3c40: 20 24 72 65 73 74 7d 20 7b 0a 09 09 09 20 20 20 $rest} {....
3c50: 20 6d 61 6e 2d 70 75 74 73 20 22 24 70 61 72 61 man-puts "$para
3c60: 3c 6c 69 3e 22 0a 09 09 09 7d 20 65 6c 73 65 20 <li>"....} else
3c70: 7b 0a 09 09 09 20 20 20 20 6d 61 6e 2d 70 75 74 {.... man-put
3c80: 73 20 22 24 70 61 72 61 3c 64 74 3e 5b 6c 6f 6e s "$para<dt>[lon
3c90: 67 2d 74 6f 63 20 24 72 65 73 74 5d 3c 64 64 3e g-toc $rest]<dd>
3ca0: 22 0a 09 09 09 7d 0a 09 09 20 20 20 20 7d 0a 09 "....}... }..
3cb0: 09 20 20 20 20 2e 73 70 20 2d 20 2e 62 72 20 2d . .sp - .br -
3cc0: 20 2e 44 53 20 2d 20 2e 43 53 20 7b 0a 09 09 09 .DS - .CS {....
3cd0: 6f 75 74 70 75 74 2d 64 69 72 65 63 74 69 76 65 output-directive
3ce0: 20 24 6c 69 6e 65 0a 09 09 20 20 20 20 7d 0a 09 $line... }..
3cf0: 09 20 20 20 20 2e 52 53 20 7b 0a 09 09 09 69 66 . .RS {....if
3d00: 20 7b 5b 6d 61 74 63 68 2d 74 65 78 74 20 2e 52 {[match-text .R
3d10: 53 5d 7d 20 7b 0a 09 09 09 20 20 20 20 6f 75 74 S]} {.... out
3d20: 70 75 74 2d 64 69 72 65 63 74 69 76 65 20 24 6c put-directive $l
3d30: 69 6e 65 0a 09 09 09 20 20 20 20 69 6e 63 72 20 ine.... incr
3d40: 61 63 63 65 70 74 5f 52 45 20 31 0a 09 09 09 7d accept_RE 1....}
3d50: 20 65 6c 73 65 69 66 20 7b 5b 6d 61 74 63 68 2d elseif {[match-
3d60: 74 65 78 74 20 2e 43 53 5d 7d 20 7b 0a 09 09 09 text .CS]} {....
3d70: 20 20 20 20 6f 75 74 70 75 74 2d 64 69 72 65 63 output-direc
3d80: 74 69 76 65 20 2e 43 53 0a 09 09 09 20 20 20 20 tive .CS....
3d90: 69 6e 63 72 20 61 63 63 65 70 74 5f 52 45 20 31 incr accept_RE 1
3da0: 0a 09 09 09 7d 20 65 6c 73 65 69 66 20 7b 5b 6d ....} elseif {[m
3db0: 61 74 63 68 2d 74 65 78 74 20 2e 50 50 5d 7d 20 atch-text .PP]}
3dc0: 7b 0a 09 09 09 20 20 20 20 6f 75 74 70 75 74 2d {.... output-
3dd0: 64 69 72 65 63 74 69 76 65 20 2e 50 50 0a 09 09 directive .PP...
3de0: 09 20 20 20 20 69 6e 63 72 20 61 63 63 65 70 74 . incr accept
3df0: 5f 52 45 20 31 0a 09 09 09 7d 20 65 6c 73 65 69 _RE 1....} elsei
3e00: 66 20 7b 5b 6d 61 74 63 68 2d 74 65 78 74 20 2e f {[match-text .
3e10: 44 53 5d 7d 20 7b 0a 09 09 09 20 20 20 20 6f 75 DS]} {.... ou
3e20: 74 70 75 74 2d 64 69 72 65 63 74 69 76 65 20 2e tput-directive .
3e30: 44 53 0a 09 09 09 20 20 20 20 69 6e 63 72 20 61 DS.... incr a
3e40: 63 63 65 70 74 5f 52 45 20 31 0a 09 09 09 7d 20 ccept_RE 1....}
3e50: 65 6c 73 65 20 7b 0a 09 09 09 20 20 20 20 6f 75 else {.... ou
3e60: 74 70 75 74 2d 64 69 72 65 63 74 69 76 65 20 24 tput-directive $
3e70: 6c 69 6e 65 0a 09 09 09 7d 0a 09 09 20 20 20 20 line....}...
3e80: 7d 0a 09 09 20 20 20 20 2e 50 50 20 7b 0a 09 09 }... .PP {...
3e90: 09 69 66 20 7b 5b 6d 61 74 63 68 2d 74 65 78 74 .if {[match-text
3ea0: 20 40 72 65 73 74 31 20 2e 62 72 20 40 72 65 73 @rest1 .br @res
3eb0: 74 32 20 2e 52 53 5d 7d 20 7b 0a 09 09 09 20 20 t2 .RS]} {....
3ec0: 20 20 23 20 79 65 74 20 61 6e 6f 74 68 65 72 20 # yet another
3ed0: 6e 72 6f 66 66 20 6b 6c 75 64 67 65 20 61 73 20 nroff kludge as
3ee0: 61 62 6f 76 65 0a 09 09 09 20 20 20 20 6d 61 6e above.... man
3ef0: 2d 70 75 74 73 20 22 24 70 61 72 61 3c 64 74 3e -puts "$para<dt>
3f00: 5b 6c 6f 6e 67 2d 74 6f 63 20 24 72 65 73 74 31 [long-toc $rest1
3f10: 5d 22 0a 09 09 09 20 20 20 20 6d 61 6e 2d 70 75 ]".... man-pu
3f20: 74 73 20 22 3c 64 74 3e 5b 6c 6f 6e 67 2d 74 6f ts "<dt>[long-to
3f30: 63 20 24 72 65 73 74 32 5d 3c 64 64 3e 22 0a 09 c $rest2]<dd>"..
3f40: 09 09 20 20 20 20 69 6e 63 72 20 61 63 63 65 70 .. incr accep
3f50: 74 5f 52 45 20 31 0a 09 09 09 7d 20 65 6c 73 65 t_RE 1....} else
3f60: 69 66 20 7b 5b 6d 61 74 63 68 2d 74 65 78 74 20 if {[match-text
3f70: 40 72 65 73 74 20 2e 52 45 5d 7d 20 7b 0a 09 09 @rest .RE]} {...
3f80: 09 20 20 20 20 23 20 67 61 64 2c 20 74 68 69 73 . # gad, this
3f90: 20 69 73 20 67 65 74 74 69 6e 67 20 72 69 64 69 is getting ridi
3fa0: 63 75 6c 6f 75 73 0a 09 09 09 20 20 20 20 69 66 culous.... if
3fb0: 20 7b 21 24 61 63 63 65 70 74 5f 52 45 7d 20 7b {!$accept_RE} {
3fc0: 0a 09 09 09 09 6d 61 6e 2d 70 75 74 73 20 22 24 .....man-puts "$
3fd0: 65 6e 64 64 6c 3c 70 3e 24 72 65 73 74 24 64 6c enddl<p>$rest$dl
3fe0: 22 0a 09 09 09 09 62 61 63 6b 75 70 2d 74 65 78 ".....backup-tex
3ff0: 74 20 31 0a 09 09 09 09 73 65 74 20 70 61 72 61 t 1.....set para
4000: 20 7b 7d 0a 09 09 09 09 62 72 65 61 6b 0a 09 09 {}.....break...
4010: 09 20 20 20 20 7d 0a 09 09 09 20 20 20 20 6d 61 . }.... ma
4020: 6e 2d 70 75 74 73 20 22 3c 70 3e 24 72 65 73 74 n-puts "<p>$rest
4030: 22 0a 09 09 09 20 20 20 20 69 6e 63 72 20 61 63 ".... incr ac
4040: 63 65 70 74 5f 52 45 20 2d 31 0a 09 09 09 7d 20 cept_RE -1....}
4050: 65 6c 73 65 69 66 20 7b 24 61 63 63 65 70 74 5f elseif {$accept_
4060: 52 45 7d 20 7b 0a 09 09 09 20 20 20 20 6f 75 74 RE} {.... out
4070: 70 75 74 2d 64 69 72 65 63 74 69 76 65 20 24 6c put-directive $l
4080: 69 6e 65 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a ine....} else {.
4090: 09 09 09 20 20 20 20 62 61 63 6b 75 70 2d 74 65 ... backup-te
40a0: 78 74 20 31 0a 09 09 09 20 20 20 20 62 72 65 61 xt 1.... brea
40b0: 6b 0a 09 09 09 7d 0a 09 09 20 20 20 20 7d 0a 09 k....}... }..
40c0: 09 20 20 20 20 2e 52 45 20 7b 0a 09 09 09 69 66 . .RE {....if
40d0: 20 7b 21 24 61 63 63 65 70 74 5f 52 45 7d 20 7b {!$accept_RE} {
40e0: 0a 09 09 09 20 20 20 20 62 61 63 6b 75 70 2d 74 .... backup-t
40f0: 65 78 74 20 31 0a 09 09 09 20 20 20 20 62 72 65 ext 1.... bre
4100: 61 6b 0a 09 09 09 7d 0a 09 09 09 69 6e 63 72 20 ak....}....incr
4110: 61 63 63 65 70 74 5f 52 45 20 2d 31 0a 09 09 20 accept_RE -1...
4120: 20 20 20 7d 0a 09 09 20 20 20 20 64 65 66 61 75 }... defau
4130: 6c 74 20 7b 0a 09 09 09 62 61 63 6b 75 70 2d 74 lt {....backup-t
4140: 65 78 74 20 31 0a 09 09 09 62 72 65 61 6b 0a 09 ext 1....break..
4150: 09 20 20 20 20 7d 0a 09 09 7d 0a 09 20 20 20 20 . }...}..
4160: 7d 20 65 6c 73 65 20 7b 0a 09 09 6d 61 6e 2d 70 } else {...man-p
4170: 75 74 73 20 24 6c 69 6e 65 0a 09 20 20 20 20 7d uts $line.. }
4180: 0a 09 20 20 20 20 73 65 74 20 70 61 72 61 20 3c .. set para <
4190: 70 3e 0a 09 7d 0a 09 6d 61 6e 2d 70 75 74 73 20 p>..}..man-puts
41a0: 22 24 70 61 72 61 24 65 6e 64 64 6c 22 0a 09 6c "$para$enddl"..l
41b0: 61 70 70 65 6e 64 20 6d 61 6e 75 61 6c 28 73 65 append manual(se
41c0: 63 74 69 6f 6e 2d 74 6f 63 29 20 24 65 6e 64 64 ction-toc) $endd
41d0: 6c 0a 09 69 66 20 7b 24 61 63 63 65 70 74 5f 52 l..if {$accept_R
41e0: 45 7d 20 7b 0a 09 20 20 20 20 6d 61 6e 65 72 72 E} {.. manerr
41f0: 6f 72 20 22 6d 69 73 73 69 6e 67 20 2e 52 45 20 or "missing .RE
4200: 69 6e 20 6f 75 74 70 75 74 2d 49 50 2d 6c 69 73 in output-IP-lis
4210: 74 22 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0c 0a t"..}. }.}...
4220: 23 23 0a 23 23 20 68 61 6e 64 6c 65 20 74 68 65 ##.## handle the
4230: 20 4e 41 4d 45 20 73 65 63 74 69 6f 6e 20 6c 69 NAME section li
4240: 6e 65 73 0a 23 23 20 74 68 65 72 65 27 73 20 6f nes.## there's o
4250: 6e 6c 79 20 6f 6e 65 20 6c 69 6e 65 20 69 6e 20 nly one line in
4260: 74 68 65 20 4e 41 4d 45 20 73 65 63 74 69 6f 6e the NAME section
4270: 2c 0a 23 23 20 63 6f 6e 73 69 73 74 69 6e 67 20 ,.## consisting
4280: 6f 66 20 61 20 63 6f 6d 6d 61 20 73 65 70 61 72 of a comma separ
4290: 61 74 65 64 20 6c 69 73 74 20 6f 66 20 6e 61 6d ated list of nam
42a0: 65 73 2c 0a 23 23 20 66 6f 6c 6c 6f 77 65 64 20 es,.## followed
42b0: 62 79 20 61 20 68 79 70 68 65 6e 20 61 6e 64 20 by a hyphen and
42c0: 61 20 73 68 6f 72 74 20 64 65 73 63 72 69 70 74 a short descript
42d0: 69 6f 6e 2e 0a 23 23 0a 70 72 6f 63 20 6f 75 74 ion..##.proc out
42e0: 70 75 74 2d 6e 61 6d 65 20 7b 6c 69 6e 65 7d 20 put-name {line}
42f0: 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 6d 61 6e {. global man
4300: 75 61 6c 0a 20 20 20 20 23 20 73 70 6c 69 74 20 ual. # split
4310: 6e 61 6d 65 20 6c 69 6e 65 20 69 6e 74 6f 20 70 name line into p
4320: 69 65 63 65 73 0a 20 20 20 20 72 65 67 65 78 70 ieces. regexp
4330: 20 7b 5e 28 5b 5e 2d 5d 2b 29 20 2d 20 28 2e 2a {^([^-]+) - (.*
4340: 29 24 7d 20 5b 72 65 67 73 75 62 20 2d 61 6c 6c )$} [regsub -all
4350: 20 7b 5b 20 5c 6e 5c 72 5c 74 5d 2b 7d 20 24 6c {[ \n\r\t]+} $l
4360: 69 6e 65 20 22 20 22 5d 20 2d 3e 20 68 65 61 64 ine " "] -> head
4370: 20 74 61 69 6c 0a 20 20 20 20 23 20 6f 75 74 70 tail. # outp
4380: 75 74 20 6c 69 6e 65 20 74 6f 20 6d 61 6e 75 61 ut line to manua
4390: 6c 20 70 61 67 65 20 75 6e 74 6f 75 63 68 65 64 l page untouched
43a0: 0a 20 20 20 20 6d 61 6e 2d 70 75 74 73 20 22 24 . man-puts "$
43b0: 68 65 61 64 20 26 6d 64 61 73 68 3b 20 24 74 61 head — $ta
43c0: 69 6c 22 0a 20 20 20 20 23 20 6f 75 74 70 75 74 il". # output
43d0: 20 6c 69 6e 65 20 74 6f 20 6c 6f 6e 67 20 74 61 line to long ta
43e0: 62 6c 65 20 6f 66 20 63 6f 6e 74 65 6e 74 73 0a ble of contents.
43f0: 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e 75 lappend manu
4400: 61 6c 28 73 65 63 74 69 6f 6e 2d 74 6f 63 29 20 al(section-toc)
4410: 22 3c 64 6c 3e 3c 64 64 3e 24 68 65 61 64 20 26 "<dl><dd>$head &
4420: 6d 64 61 73 68 3b 20 24 74 61 69 6c 3c 2f 64 64 mdash; $tail</dd
4430: 3e 3c 2f 64 6c 3e 22 0a 20 20 20 20 23 20 73 65 ></dl>". # se
4440: 70 61 72 61 74 65 20 6f 75 74 20 74 68 65 20 6e parate out the n
4450: 61 6d 65 73 20 66 6f 72 20 66 75 74 75 72 65 20 ames for future
4460: 72 65 66 65 72 65 6e 63 65 0a 20 20 20 20 66 6f reference. fo
4470: 72 65 61 63 68 20 6e 61 6d 65 20 5b 73 70 6c 69 reach name [spli
4480: 74 20 24 68 65 61 64 20 2c 5d 20 7b 0a 09 73 65 t $head ,] {..se
4490: 74 20 6e 61 6d 65 20 5b 73 74 72 69 6e 67 20 74 t name [string t
44a0: 72 69 6d 20 24 6e 61 6d 65 5d 0a 09 69 66 20 7b rim $name]..if {
44b0: 5b 6c 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 20 [llength $name]
44c0: 3e 20 31 7d 20 7b 0a 09 20 20 20 20 6d 61 6e 65 > 1} {.. mane
44d0: 72 72 6f 72 20 22 6e 61 6d 65 20 68 61 73 20 61 rror "name has a
44e0: 20 73 70 61 63 65 3a 20 7b 24 6e 61 6d 65 7d 5c space: {$name}\
44f0: 6e 66 72 6f 6d 3a 20 24 6c 69 6e 65 22 0a 09 7d nfrom: $line"..}
4500: 0a 09 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 6c ..lappend manual
4510: 28 77 69 6e 67 2d 74 6f 63 29 20 24 6e 61 6d 65 (wing-toc) $name
4520: 0a 09 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 6c ..lappend manual
4530: 28 6e 61 6d 65 2d 24 6e 61 6d 65 29 20 24 6d 61 (name-$name) $ma
4540: 6e 75 61 6c 28 77 69 6e 67 2d 66 69 6c 65 29 2f nual(wing-file)/
4550: 24 6d 61 6e 75 61 6c 28 6e 61 6d 65 29 0a 20 20 $manual(name).
4560: 20 20 7d 0a 20 20 20 20 73 65 74 20 6d 61 6e 75 }. set manu
4570: 61 6c 28 74 6f 6f 6c 74 69 70 2d 24 6d 61 6e 75 al(tooltip-$manu
4580: 61 6c 28 77 69 6e 67 2d 66 69 6c 65 29 2f 24 6d al(wing-file)/$m
4590: 61 6e 75 61 6c 28 6e 61 6d 65 29 2e 68 74 6d 6c anual(name).html
45a0: 29 20 24 6c 69 6e 65 0a 7d 0a 0c 0a 23 23 0a 23 ) $line.}...##.#
45b0: 23 20 62 75 69 6c 64 20 61 20 63 72 6f 73 73 2d # build a cross-
45c0: 72 65 66 65 72 65 6e 63 65 20 6c 69 6e 6b 20 69 reference link i
45d0: 66 20 61 70 70 72 6f 70 72 69 61 74 65 0a 23 23 f appropriate.##
45e0: 0a 70 72 6f 63 20 63 72 6f 73 73 2d 72 65 66 65 .proc cross-refe
45f0: 72 65 6e 63 65 20 7b 72 65 66 7d 20 7b 0a 20 20 rence {ref} {.
4600: 20 20 67 6c 6f 62 61 6c 20 6d 61 6e 75 61 6c 20 global manual
4610: 72 65 6d 61 70 5f 6c 69 6e 6b 5f 74 61 72 67 65 remap_link_targe
4620: 74 0a 20 20 20 20 67 6c 6f 62 61 6c 20 65 6e 73 t. global ens
4630: 65 6d 62 6c 65 5f 63 6f 6d 6d 61 6e 64 73 20 65 emble_commands e
4640: 78 63 6c 75 64 65 5f 72 65 66 73 5f 6d 61 70 20 xclude_refs_map
4650: 65 78 63 6c 75 64 65 5f 77 68 65 6e 5f 66 6f 6c exclude_when_fol
4660: 6c 6f 77 65 64 5f 62 79 5f 6d 61 70 0a 20 20 20 lowed_by_map.
4670: 20 73 65 74 20 6d 61 6e 6e 61 6d 65 20 24 6d 61 set manname $ma
4680: 6e 75 61 6c 28 6e 61 6d 65 29 0a 20 20 20 20 73 nual(name). s
4690: 65 74 20 6d 61 6e 74 61 69 6c 20 24 6d 61 6e 75 et mantail $manu
46a0: 61 6c 28 74 61 69 6c 29 0a 20 20 20 20 69 66 20 al(tail). if
46b0: 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 {[string match "
46c0: 54 63 6c 5f 2a 22 20 24 72 65 66 5d 20 7c 7c 20 Tcl_*" $ref] ||
46d0: 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 54 [string match "T
46e0: 6b 5f 2a 22 20 24 72 65 66 5d 20 7c 7c 20 5b 73 k_*" $ref] || [s
46f0: 74 72 69 6e 67 20 6d 61 74 63 68 20 22 54 74 6b tring match "Ttk
4700: 5f 2a 22 20 24 72 65 66 5d 20 7c 7c 20 5b 73 74 _*" $ref] || [st
4710: 72 69 6e 67 20 6d 61 74 63 68 20 22 49 74 63 6c ring match "Itcl
4720: 5f 2a 22 20 24 72 65 66 5d 20 7c 7c 20 5b 73 74 _*" $ref] || [st
4730: 72 69 6e 67 20 6d 61 74 63 68 20 22 54 64 62 63 ring match "Tdbc
4740: 5f 2a 22 20 24 72 65 66 5d 7d 20 7b 0a 09 72 65 _*" $ref]} {..re
4750: 67 65 78 70 20 7b 5e 5c 77 2b 7d 20 24 72 65 66 gexp {^\w+} $ref
4760: 20 6c 72 65 66 0a 09 23 23 0a 09 23 23 20 61 70 lref..##..## ap
4770: 70 6c 79 20 61 20 6c 69 6e 6b 20 72 65 6d 61 70 ply a link remap
4780: 70 69 6e 67 20 69 66 20 61 76 61 69 6c 61 62 6c ping if availabl
4790: 65 0a 09 23 23 0a 09 69 66 20 7b 5b 69 6e 66 6f e..##..if {[info
47a0: 20 65 78 69 73 74 73 20 72 65 6d 61 70 5f 6c 69 exists remap_li
47b0: 6e 6b 5f 74 61 72 67 65 74 28 24 6c 72 65 66 29 nk_target($lref)
47c0: 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6c 72 ]} {.. set lr
47d0: 65 66 20 24 72 65 6d 61 70 5f 6c 69 6e 6b 5f 74 ef $remap_link_t
47e0: 61 72 67 65 74 28 24 6c 72 65 66 29 0a 09 7d 0a arget($lref)..}.
47f0: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 72 } elseif {$r
4800: 65 66 20 65 71 20 22 54 63 6c 22 7d 20 7b 0a 09 ef eq "Tcl"} {..
4810: 73 65 74 20 6c 72 65 66 20 24 72 65 66 0a 20 20 set lref $ref.
4820: 20 20 7d 20 65 6c 73 65 69 66 20 7b 0a 09 5b 72 } elseif {..[r
4830: 65 67 65 78 70 20 7b 5e 5b 41 2d 5a 30 2d 39 20 egexp {^[A-Z0-9
4840: 3f 21 5d 2b 24 7d 20 24 72 65 66 5d 0a 09 26 26 ?!]+$} $ref]..&&
4850: 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 61 [info exists ma
4860: 6e 75 61 6c 28 24 6d 61 6e 6e 61 6d 65 2d 69 64 nual($manname-id
4870: 2d 24 72 65 66 29 5d 0a 20 20 20 20 7d 20 7b 0a -$ref)]. } {.
4880: 09 72 65 74 75 72 6e 20 22 3c 61 20 68 72 65 66 .return "<a href
4890: 3d 5c 22 23 24 6d 61 6e 75 61 6c 28 24 6d 61 6e =\"#$manual($man
48a0: 6e 61 6d 65 2d 69 64 2d 24 72 65 66 29 5c 22 3e name-id-$ref)\">
48b0: 24 72 65 66 3c 2f 61 3e 22 0a 20 20 20 20 7d 20 $ref</a>". }
48c0: 65 6c 73 65 20 7b 0a 09 73 65 74 20 6c 72 65 66 else {..set lref
48d0: 20 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77 65 72 [string tolower
48e0: 20 24 72 65 66 5d 0a 09 23 23 0a 09 23 23 20 61 $ref]..##..## a
48f0: 70 70 6c 79 20 61 20 6c 69 6e 6b 20 72 65 6d 61 pply a link rema
4900: 70 70 69 6e 67 20 69 66 20 61 76 61 69 6c 61 62 pping if availab
4910: 6c 65 0a 09 23 23 0a 09 69 66 20 7b 5b 69 6e 66 le..##..if {[inf
4920: 6f 20 65 78 69 73 74 73 20 72 65 6d 61 70 5f 6c o exists remap_l
4930: 69 6e 6b 5f 74 61 72 67 65 74 28 24 6c 72 65 66 ink_target($lref
4940: 29 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6c )]} {.. set l
4950: 72 65 66 20 24 72 65 6d 61 70 5f 6c 69 6e 6b 5f ref $remap_link_
4960: 74 61 72 67 65 74 28 24 6c 72 65 66 29 0a 09 7d target($lref)..}
4970: 0a 20 20 20 20 7d 0a 20 20 20 20 23 23 0a 20 20 . }. ##.
4980: 20 20 23 23 20 6e 6f 74 68 69 6e 67 20 74 6f 20 ## nothing to
4990: 72 65 66 65 72 65 6e 63 65 0a 20 20 20 20 23 23 reference. ##
49a0: 0a 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 . if {![info
49b0: 65 78 69 73 74 73 20 6d 61 6e 75 61 6c 28 6e 61 exists manual(na
49c0: 6d 65 2d 24 6c 72 65 66 29 5d 7d 20 7b 0a 09 66 me-$lref)]} {..f
49d0: 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 65 6e 73 oreach name $ens
49e0: 65 6d 62 6c 65 5f 63 6f 6d 6d 61 6e 64 73 20 7b emble_commands {
49f0: 0a 09 20 20 20 20 69 66 20 7b 0a 09 09 5b 72 65 .. if {...[re
4a00: 67 65 78 70 20 22 5e 24 6e 61 6d 65 20 5c 5b 61 gexp "^$name \[a
4a10: 2d 7a 30 2d 39 5d 2a 5c 24 22 20 24 6c 72 65 66 -z0-9]*\$" $lref
4a20: 5d 20 26 26 0a 09 09 5b 69 6e 66 6f 20 65 78 69 ] &&...[info exi
4a30: 73 74 73 20 6d 61 6e 75 61 6c 28 6e 61 6d 65 2d sts manual(name-
4a40: 24 6e 61 6d 65 29 5d 20 26 26 0a 09 09 24 6d 61 $name)] &&...$ma
4a50: 6e 74 61 69 6c 20 6e 65 20 22 24 6e 61 6d 65 2e ntail ne "$name.
4a60: 6e 22 20 26 26 0a 09 09 28 21 5b 69 6e 66 6f 20 n" &&...(![info
4a70: 65 78 69 73 74 73 20 65 78 63 6c 75 64 65 5f 72 exists exclude_r
4a80: 65 66 73 5f 6d 61 70 28 24 6d 61 6e 74 61 69 6c efs_map($mantail
4a90: 29 5d 20 7c 7c 0a 09 09 24 6d 61 6e 75 61 6c 28 )] ||...$manual(
4aa0: 6e 61 6d 65 2d 24 6e 61 6d 65 29 20 6e 69 20 24 name-$name) ni $
4ab0: 65 78 63 6c 75 64 65 5f 72 65 66 73 5f 6d 61 70 exclude_refs_map
4ac0: 28 24 6d 61 6e 74 61 69 6c 29 29 0a 09 20 20 20 ($mantail))..
4ad0: 20 7d 20 7b 0a 09 09 72 65 74 75 72 6e 20 22 3c } {...return "<
4ae0: 61 20 68 72 65 66 3d 5c 22 2e 2e 2f 24 6d 61 6e a href=\"../$man
4af0: 75 61 6c 28 6e 61 6d 65 2d 24 6e 61 6d 65 29 2e ual(name-$name).
4b00: 68 74 6d 6c 5c 22 3e 24 72 65 66 3c 2f 61 3e 22 html\">$ref</a>"
4b10: 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 69 66 20 7b .. }..}..if {
4b20: 24 6c 72 65 66 20 69 6e 20 7b 65 6e 64 7d 7d 20 $lref in {end}}
4b30: 7b 0a 09 20 20 20 20 23 20 6e 6f 20 67 6f 6f 64 {.. # no good
4b40: 20 70 6c 61 63 65 20 74 6f 20 73 65 6e 64 20 74 place to send t
4b50: 68 69 73 20 74 63 6c 20 74 6f 6b 65 6e 3f 0a 09 his tcl token?..
4b60: 7d 0a 09 72 65 74 75 72 6e 20 24 72 65 66 0a 20 }..return $ref.
4b70: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 6d 61 6e }. set man
4b80: 72 65 66 20 24 6d 61 6e 75 61 6c 28 6e 61 6d 65 ref $manual(name
4b90: 2d 24 6c 72 65 66 29 0a 20 20 20 20 23 23 0a 20 -$lref). ##.
4ba0: 20 20 20 23 23 20 77 6f 75 6c 64 20 62 65 20 61 ## would be a
4bb0: 20 73 65 6c 66 20 72 65 66 65 72 65 6e 63 65 0a self reference.
4bc0: 20 20 20 20 23 23 0a 20 20 20 20 66 6f 72 65 61 ##. forea
4bd0: 63 68 20 6e 61 6d 65 20 24 6d 61 6e 72 65 66 20 ch name $manref
4be0: 7b 0a 09 69 66 20 7b 22 24 6d 61 6e 75 61 6c 28 {..if {"$manual(
4bf0: 77 69 6e 67 2d 66 69 6c 65 29 2f 24 6d 61 6e 6e wing-file)/$mann
4c00: 61 6d 65 22 20 69 6e 20 24 6e 61 6d 65 7d 20 7b ame" in $name} {
4c10: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 .. return $re
4c20: 66 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 23 f..}. }. #
4c30: 23 0a 20 20 20 20 23 23 20 6d 75 6c 74 69 70 6c #. ## multipl
4c40: 65 20 63 68 6f 69 63 65 73 20 66 6f 72 20 72 65 e choices for re
4c50: 66 65 72 65 6e 63 65 0a 20 20 20 20 23 23 0a 20 ference. ##.
4c60: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength
4c70: 24 6d 61 6e 72 65 66 5d 20 3e 20 31 7d 20 7b 0a $manref] > 1} {.
4c80: 09 73 65 74 20 74 63 6c 5f 69 20 5b 6c 73 65 61 .set tcl_i [lsea
4c90: 72 63 68 20 2d 67 6c 6f 62 20 24 6d 61 6e 72 65 rch -glob $manre
4ca0: 66 20 2a 54 63 6c 43 6d 64 2a 5d 0a 09 69 66 20 f *TclCmd*]..if
4cb0: 7b 24 74 63 6c 5f 69 20 3e 3d 20 30 20 26 26 20 {$tcl_i >= 0 &&
4cc0: 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d 66 69 6c $manual(wing-fil
4cd0: 65 29 20 65 71 20 22 54 63 6c 43 6d 64 22 0a 09 e) eq "TclCmd"..
4ce0: 09 7c 7c 20 24 6d 61 6e 75 61 6c 28 77 69 6e 67 .|| $manual(wing
4cf0: 2d 66 69 6c 65 29 20 65 71 20 22 54 63 6c 4c 69 -file) eq "TclLi
4d00: 62 22 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 74 b"} {.. set t
4d10: 63 6c 5f 72 65 66 20 5b 6c 69 6e 64 65 78 20 24 cl_ref [lindex $
4d20: 6d 61 6e 72 65 66 20 24 74 63 6c 5f 69 5d 0a 09 manref $tcl_i]..
4d30: 20 20 20 20 72 65 74 75 72 6e 20 22 3c 61 20 68 return "<a h
4d40: 72 65 66 3d 5c 22 2e 2e 2f 24 74 63 6c 5f 72 65 ref=\"../$tcl_re
4d50: 66 2e 68 74 6d 6c 5c 22 3e 24 72 65 66 3c 2f 61 f.html\">$ref</a
4d60: 3e 22 0a 09 7d 0a 09 73 65 74 20 74 6b 5f 69 20 >"..}..set tk_i
4d70: 5b 6c 73 65 61 72 63 68 20 2d 67 6c 6f 62 20 24 [lsearch -glob $
4d80: 6d 61 6e 72 65 66 20 2a 54 6b 43 6d 64 2a 5d 0a manref *TkCmd*].
4d90: 09 69 66 20 7b 24 74 6b 5f 69 20 3e 3d 20 30 20 .if {$tk_i >= 0
4da0: 26 26 20 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d && $manual(wing-
4db0: 66 69 6c 65 29 20 65 71 20 22 54 6b 43 6d 64 22 file) eq "TkCmd"
4dc0: 0a 09 09 7c 7c 20 24 6d 61 6e 75 61 6c 28 77 69 ...|| $manual(wi
4dd0: 6e 67 2d 66 69 6c 65 29 20 65 71 20 22 54 6b 4c ng-file) eq "TkL
4de0: 69 62 22 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 ib"} {.. set
4df0: 74 6b 5f 72 65 66 20 5b 6c 69 6e 64 65 78 20 24 tk_ref [lindex $
4e00: 6d 61 6e 72 65 66 20 24 74 6b 5f 69 5d 0a 09 20 manref $tk_i]..
4e10: 20 20 20 72 65 74 75 72 6e 20 22 3c 61 20 68 72 return "<a hr
4e20: 65 66 3d 5c 22 2e 2e 2f 24 74 6b 5f 72 65 66 2e ef=\"../$tk_ref.
4e30: 68 74 6d 6c 5c 22 3e 24 72 65 66 3c 2f 61 3e 22 html\">$ref</a>"
4e40: 0a 09 7d 0a 09 69 66 20 7b 24 6c 72 65 66 20 65 ..}..if {$lref e
4e50: 71 20 22 65 78 69 74 22 20 26 26 20 24 6d 61 6e q "exit" && $man
4e60: 74 61 69 6c 20 65 71 20 22 74 63 6c 73 68 2e 31 tail eq "tclsh.1
4e70: 22 20 26 26 20 24 74 63 6c 5f 69 20 3e 3d 20 30 " && $tcl_i >= 0
4e80: 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 74 63 6c } {.. set tcl
4e90: 5f 72 65 66 20 5b 6c 69 6e 64 65 78 20 24 6d 61 _ref [lindex $ma
4ea0: 6e 72 65 66 20 24 74 63 6c 5f 69 5d 0a 09 20 20 nref $tcl_i]..
4eb0: 20 20 72 65 74 75 72 6e 20 22 3c 61 20 68 72 65 return "<a hre
4ec0: 66 3d 5c 22 2e 2e 2f 24 74 63 6c 5f 72 65 66 2e f=\"../$tcl_ref.
4ed0: 68 74 6d 6c 5c 22 3e 24 72 65 66 3c 2f 61 3e 22 html\">$ref</a>"
4ee0: 0a 09 7d 0a 09 70 75 74 73 20 73 74 64 65 72 72 ..}..puts stderr
4ef0: 20 22 6d 75 6c 74 69 70 6c 65 20 63 72 6f 73 73 "multiple cross
4f00: 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 24 72 reference to $r
4f10: 65 66 20 69 6e 20 24 6d 61 6e 72 65 66 20 66 72 ef in $manref fr
4f20: 6f 6d 20 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d om $manual(wing-
4f30: 66 69 6c 65 29 2f 24 6d 61 6e 74 61 69 6c 22 0a file)/$mantail".
4f40: 09 72 65 74 75 72 6e 20 24 72 65 66 0a 20 20 20 .return $ref.
4f50: 20 7d 0a 20 20 20 20 23 23 0a 20 20 20 20 23 23 }. ##. ##
4f60: 20 65 78 63 65 70 74 69 6f 6e 73 2c 20 73 69 67 exceptions, sig
4f70: 68 2c 20 74 6f 20 74 68 65 20 72 75 6c 65 0a 20 h, to the rule.
4f80: 20 20 20 23 23 0a 20 20 20 20 69 66 20 7b 5b 69 ##. if {[i
4f90: 6e 66 6f 20 65 78 69 73 74 73 20 65 78 63 6c 75 nfo exists exclu
4fa0: 64 65 5f 77 68 65 6e 5f 66 6f 6c 6c 6f 77 65 64 de_when_followed
4fb0: 5f 62 79 5f 6d 61 70 28 24 6d 61 6e 74 61 69 6c _by_map($mantail
4fc0: 29 5d 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 74 )]} {..upvar 1 t
4fd0: 65 78 74 20 74 61 69 6c 0a 09 73 65 74 20 66 6f ext tail..set fo
4fe0: 6c 6c 6f 77 69 6e 67 5f 77 6f 72 64 20 5b 6c 69 llowing_word [li
4ff0: 6e 64 65 78 20 5b 72 65 67 65 78 70 20 2d 69 6e ndex [regexp -in
5000: 6c 69 6e 65 20 7b 5c 53 2b 7d 20 24 74 61 69 6c line {\S+} $tail
5010: 5d 20 30 5d 0a 09 66 6f 72 65 61 63 68 20 7b 74 ] 0]..foreach {t
5020: 68 69 73 20 74 68 61 74 7d 20 24 65 78 63 6c 75 his that} $exclu
5030: 64 65 5f 77 68 65 6e 5f 66 6f 6c 6c 6f 77 65 64 de_when_followed
5040: 5f 62 79 5f 6d 61 70 28 24 6d 61 6e 74 61 69 6c _by_map($mantail
5050: 29 20 7b 0a 09 20 20 20 20 23 20 6f 6e 6c 79 20 ) {.. # only
5060: 61 20 72 65 66 20 69 66 20 24 74 68 69 73 20 69 a ref if $this i
5070: 73 20 6e 6f 74 20 66 6f 6c 6c 6f 77 65 64 20 62 s not followed b
5080: 79 20 24 74 68 61 74 0a 09 20 20 20 20 69 66 20 y $that.. if
5090: 7b 24 6c 72 65 66 20 65 71 20 24 74 68 69 73 20 {$lref eq $this
50a0: 26 26 20 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 && [string match
50b0: 20 24 74 68 61 74 2a 20 24 66 6f 6c 6c 6f 77 69 $that* $followi
50c0: 6e 67 5f 77 6f 72 64 5d 7d 20 7b 0a 09 09 72 65 ng_word]} {...re
50d0: 74 75 72 6e 20 24 72 65 66 0a 09 20 20 20 20 7d turn $ref.. }
50e0: 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 ..}. }. if
50f0: 20 7b 0a 09 5b 69 6e 66 6f 20 65 78 69 73 74 73 {..[info exists
5100: 20 65 78 63 6c 75 64 65 5f 72 65 66 73 5f 6d 61 exclude_refs_ma
5110: 70 28 24 6d 61 6e 74 61 69 6c 29 5d 0a 09 26 26 p($mantail)]..&&
5120: 20 24 6c 72 65 66 20 69 6e 20 24 65 78 63 6c 75 $lref in $exclu
5130: 64 65 5f 72 65 66 73 5f 6d 61 70 28 24 6d 61 6e de_refs_map($man
5140: 74 61 69 6c 29 0a 20 20 20 20 7d 20 7b 0a 09 72 tail). } {..r
5150: 65 74 75 72 6e 20 24 72 65 66 0a 20 20 20 20 7d eturn $ref. }
5160: 0a 20 20 20 20 23 23 0a 20 20 20 20 23 23 20 72 . ##. ## r
5170: 65 74 75 72 6e 20 74 68 65 20 63 72 6f 73 73 20 eturn the cross
5180: 72 65 66 65 72 65 6e 63 65 0a 20 20 20 20 23 23 reference. ##
5190: 0a 20 20 20 20 72 65 74 75 72 6e 20 22 3c 61 20 . return "<a
51a0: 68 72 65 66 3d 5c 22 2e 2e 2f 24 6d 61 6e 72 65 href=\"../$manre
51b0: 66 2e 68 74 6d 6c 5c 22 3e 24 72 65 66 3c 2f 61 f.html\">$ref</a
51c0: 3e 22 0a 7d 0a 0c 0a 23 23 0a 23 23 20 72 65 66 >".}...##.## ref
51d0: 65 72 65 6e 63 65 20 67 65 6e 65 72 61 74 69 6f erence generatio
51e0: 6e 20 65 72 72 6f 72 73 0a 23 23 0a 70 72 6f 63 n errors.##.proc
51f0: 20 72 65 66 65 72 65 6e 63 65 2d 65 72 72 6f 72 reference-error
5200: 20 7b 6d 73 67 20 74 65 78 74 7d 20 7b 0a 20 20 {msg text} {.
5210: 20 20 67 6c 6f 62 61 6c 20 6d 61 6e 75 61 6c 0a global manual.
5220: 20 20 20 20 70 75 74 73 20 73 74 64 65 72 72 20 puts stderr
5230: 22 24 6d 61 6e 75 61 6c 28 74 61 69 6c 29 3a 20 "$manual(tail):
5240: 24 6d 73 67 3a 20 7b 24 74 65 78 74 7d 22 0a 20 $msg: {$text}".
5250: 20 20 20 72 65 74 75 72 6e 20 24 74 65 78 74 0a return $text.
5260: 7d 0a 0c 0a 23 23 0a 23 23 20 69 6e 73 65 72 74 }...##.## insert
5270: 20 61 73 20 6d 61 6e 79 20 63 72 6f 73 73 20 72 as many cross r
5280: 65 66 65 72 65 6e 63 65 73 20 69 6e 74 6f 20 74 eferences into t
5290: 68 69 73 20 74 65 78 74 20 73 74 72 69 6e 67 20 his text string
52a0: 61 73 20 61 72 65 20 61 70 70 72 6f 70 72 69 61 as are appropria
52b0: 74 65 0a 23 23 0a 70 72 6f 63 20 69 6e 73 65 72 te.##.proc inser
52c0: 74 2d 63 72 6f 73 73 2d 72 65 66 65 72 65 6e 63 t-cross-referenc
52d0: 65 73 20 7b 74 65 78 74 7d 20 7b 0a 20 20 20 20 es {text} {.
52e0: 67 6c 6f 62 61 6c 20 6d 61 6e 75 61 6c 0a 20 20 global manual.
52f0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 22 22 0a set result "".
5300: 0a 20 20 20 20 77 68 69 6c 65 20 31 20 7b 0a 09 . while 1 {..
5310: 23 23 0a 09 23 23 20 77 65 20 69 64 65 6e 74 69 ##..## we identi
5320: 66 79 20 63 72 6f 73 73 20 72 65 66 65 72 65 6e fy cross referen
5330: 63 65 73 20 62 79 3a 0a 09 23 23 20 20 20 20 20 ces by:..##
5340: 60 60 71 75 6f 74 61 74 69 6f 6e 27 27 0a 09 23 ``quotation''..#
5350: 23 20 20 20 20 3c 62 3e 65 6d 62 6f 6c 64 65 6e # <b>embolden
5360: 69 6e 67 3c 2f 62 3e 0a 09 23 23 20 20 20 20 54 ing</b>..## T
5370: 63 6c 5f 20 70 72 65 66 69 78 0a 09 23 23 20 20 cl_ prefix..##
5380: 20 20 54 6b 5f 20 70 72 65 66 69 78 0a 09 23 23 Tk_ prefix..##
5390: 09 20 20 5b 61 2d 7a 41 2d 5a 30 2d 39 5d 2b 20 . [a-zA-Z0-9]+
53a0: 6d 61 6e 75 61 6c 20 65 6e 74 72 79 0a 09 23 23 manual entry..##
53b0: 20 61 6e 64 20 77 65 20 61 76 6f 69 64 20 6d 65 and we avoid me
53c0: 73 73 69 6e 67 20 77 69 74 68 20 61 6c 72 65 61 ssing with alrea
53d0: 64 79 20 61 6e 63 68 6f 72 65 64 20 74 65 78 74 dy anchored text
53e0: 0a 09 23 23 0a 09 23 23 0a 09 23 23 20 66 69 6e ..##..##..## fin
53f0: 64 20 77 68 65 72 65 20 65 61 63 68 20 69 74 65 d where each ite
5400: 6d 20 6c 69 76 65 73 20 2d 20 45 58 50 45 4e 53 m lives - EXPENS
5410: 49 56 45 20 2d 20 61 6e 64 20 61 63 63 75 6d 75 IVE - and accumu
5420: 6c 61 74 65 20 61 20 6c 69 73 74 0a 09 23 23 0a late a list..##.
5430: 09 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 .unset -nocompla
5440: 69 6e 20 6f 66 66 73 65 74 73 0a 09 66 6f 72 65 in offsets..fore
5450: 61 63 68 20 7b 6e 61 6d 65 20 70 61 74 74 65 72 ach {name patter
5460: 6e 7d 20 7b 0a 09 20 20 20 20 61 6e 63 68 6f 72 n} {.. anchor
5470: 20 20 20 20 20 7b 3c 61 20 7d 09 65 6e 64 2d 61 {<a }.end-a
5480: 6e 63 68 6f 72 20 7b 3c 2f 61 3e 7d 0a 09 20 20 nchor {</a>}..
5490: 20 20 71 75 6f 74 65 20 20 20 20 20 20 7b 60 60 quote {``
54a0: 7d 09 65 6e 64 2d 71 75 6f 74 65 20 20 7b 27 27 }.end-quote {''
54b0: 7d 0a 09 20 20 20 20 62 6f 6c 64 20 20 20 20 20 }.. bold
54c0: 20 20 7b 3c 62 3e 7d 09 65 6e 64 2d 62 6f 6c 64 {<b>}.end-bold
54d0: 20 20 20 7b 3c 2f 62 3e 7d 0a 09 20 20 20 20 63 {</b>}.. c
54e0: 2e 74 63 6c 20 20 20 20 20 20 7b 54 63 6c 5f 7d .tcl {Tcl_}
54f0: 0a 09 20 20 20 20 63 2e 74 6b 20 20 20 20 20 20 .. c.tk
5500: 20 7b 54 6b 5f 7d 0a 09 20 20 20 20 63 2e 74 74 {Tk_}.. c.tt
5510: 6b 20 20 20 20 20 20 7b 54 74 6b 5f 7d 0a 09 20 k {Ttk_}..
5520: 20 20 20 63 2e 74 64 62 63 20 20 20 20 20 7b 54 c.tdbc {T
5530: 64 62 63 5f 7d 0a 09 20 20 20 20 63 2e 69 74 63 dbc_}.. c.itc
5540: 6c 20 20 20 20 20 7b 49 74 63 6c 5f 7d 0a 09 20 l {Itcl_}..
5550: 20 20 20 54 63 6c 31 20 20 20 20 20 20 20 7b 54 Tcl1 {T
5560: 63 6c 20 6d 61 6e 75 61 6c 20 65 6e 74 72 79 7d cl manual entry}
5570: 0a 09 20 20 20 20 54 63 6c 32 20 20 20 20 20 20 .. Tcl2
5580: 20 7b 54 63 6c 20 6f 76 65 72 76 69 65 77 20 6d {Tcl overview m
5590: 61 6e 75 61 6c 20 65 6e 74 72 79 7d 0a 09 20 20 anual entry}..
55a0: 20 20 75 72 6c 09 20 20 20 20 20 20 20 7b 68 74 url. {ht
55b0: 74 70 3a 2f 2f 7d 0a 09 7d 20 7b 0a 09 20 20 20 tp://}..} {..
55c0: 20 73 65 74 20 6f 20 5b 73 74 72 69 6e 67 20 66 set o [string f
55d0: 69 72 73 74 20 24 70 61 74 74 65 72 6e 20 24 74 irst $pattern $t
55e0: 65 78 74 5d 0a 09 20 20 20 20 69 66 20 7b 5b 73 ext].. if {[s
55f0: 65 74 20 6f 66 66 73 65 74 28 24 6e 61 6d 65 29 et offset($name)
5600: 20 24 6f 5d 20 3e 3d 20 30 7d 20 7b 0a 09 09 73 $o] >= 0} {...s
5610: 65 74 20 69 6e 76 65 72 74 28 24 6f 29 20 24 6e et invert($o) $n
5620: 61 6d 65 0a 09 09 6c 61 70 70 65 6e 64 20 6f 66 ame...lappend of
5630: 66 73 65 74 73 20 24 6f 0a 09 20 20 20 20 7d 0a fsets $o.. }.
5640: 09 7d 0a 09 23 23 0a 09 23 23 20 69 66 20 6e 6f .}..##..## if no
5650: 74 68 69 6e 67 2c 20 74 68 65 6e 20 77 65 27 72 thing, then we'r
5660: 65 20 64 6f 6e 65 2e 0a 09 23 23 0a 09 69 66 20 e done...##..if
5670: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6f {![info exists o
5680: 66 66 73 65 74 73 5d 7d 20 7b 0a 09 20 20 20 20 ffsets]} {..
5690: 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 20 72 return [append r
56a0: 65 73 75 6c 74 20 24 74 65 78 74 5d 0a 09 7d 0a esult $text]..}.
56b0: 09 23 23 0a 09 23 23 20 73 6f 72 74 20 74 68 65 .##..## sort the
56c0: 20 6f 66 66 73 65 74 73 0a 09 23 23 0a 09 73 65 offsets..##..se
56d0: 74 20 6f 66 66 73 65 74 73 20 5b 6c 73 6f 72 74 t offsets [lsort
56e0: 20 2d 69 6e 74 65 67 65 72 20 24 6f 66 66 73 65 -integer $offse
56f0: 74 73 5d 0a 09 23 23 0a 09 23 23 20 73 65 65 20 ts]..##..## see
5700: 77 68 69 63 68 20 77 65 20 77 61 6e 74 20 74 6f which we want to
5710: 20 75 73 65 0a 09 23 23 0a 09 73 77 69 74 63 68 use..##..switch
5720: 20 2d 65 78 61 63 74 20 2d 2d 20 24 69 6e 76 65 -exact -- $inve
5730: 72 74 28 5b 6c 69 6e 64 65 78 20 24 6f 66 66 73 rt([lindex $offs
5740: 65 74 73 20 30 5d 29 20 7b 0a 09 20 20 20 20 61 ets 0]) {.. a
5750: 6e 63 68 6f 72 20 7b 0a 09 09 69 66 20 7b 24 6f nchor {...if {$o
5760: 66 66 73 65 74 28 65 6e 64 2d 61 6e 63 68 6f 72 ffset(end-anchor
5770: 29 20 3c 20 30 7d 20 7b 0a 09 09 20 20 20 20 72 ) < 0} {... r
5780: 65 74 75 72 6e 20 5b 72 65 66 65 72 65 6e 63 65 eturn [reference
5790: 2d 65 72 72 6f 72 20 7b 4d 69 73 73 69 6e 67 20 -error {Missing
57a0: 65 6e 64 20 61 6e 63 68 6f 72 7d 20 24 74 65 78 end anchor} $tex
57b0: 74 5d 0a 09 09 7d 0a 09 09 61 70 70 65 6e 64 20 t]...}...append
57c0: 72 65 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 72 result [string r
57d0: 61 6e 67 65 20 24 74 65 78 74 20 30 20 24 6f 66 ange $text 0 $of
57e0: 66 73 65 74 28 65 6e 64 2d 61 6e 63 68 6f 72 29 fset(end-anchor)
57f0: 5d 0a 09 09 73 65 74 20 74 65 78 74 20 5b 73 74 ]...set text [st
5800: 72 69 6e 67 20 72 61 6e 67 65 20 24 74 65 78 74 ring range $text
5810: 5b 73 65 74 20 74 65 78 74 20 22 22 5d 20 5c 0a [set text ""] \.
5820: 09 09 09 20 20 20 20 20 20 5b 65 78 70 72 20 7b ... [expr {
5830: 24 6f 66 66 73 65 74 28 65 6e 64 2d 61 6e 63 68 $offset(end-anch
5840: 6f 72 29 2b 31 7d 5d 20 65 6e 64 5d 0a 09 09 63 or)+1}] end]...c
5850: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 7d 0a 09 ontinue.. }..
5860: 20 20 20 20 71 75 6f 74 65 20 7b 0a 09 09 69 66 quote {...if
5870: 20 7b 24 6f 66 66 73 65 74 28 65 6e 64 2d 71 75 {$offset(end-qu
5880: 6f 74 65 29 20 3c 20 30 7d 20 7b 0a 09 09 20 20 ote) < 0} {...
5890: 20 20 72 65 74 75 72 6e 20 5b 72 65 66 65 72 65 return [refere
58a0: 6e 63 65 2d 65 72 72 6f 72 20 22 4d 69 73 73 69 nce-error "Missi
58b0: 6e 67 20 65 6e 64 20 71 75 6f 74 65 22 20 24 74 ng end quote" $t
58c0: 65 78 74 5d 0a 09 09 7d 0a 09 09 69 66 20 7b 24 ext]...}...if {$
58d0: 69 6e 76 65 72 74 28 5b 6c 69 6e 64 65 78 20 24 invert([lindex $
58e0: 6f 66 66 73 65 74 73 20 31 5d 29 20 69 6e 20 7b offsets 1]) in {
58f0: 74 63 6c 20 74 6b 20 74 74 6b 7d 7d 20 7b 0a 09 tcl tk ttk}} {..
5900: 09 20 20 20 20 73 65 74 20 6f 66 66 73 65 74 73 . set offsets
5910: 20 5b 6c 72 65 70 6c 61 63 65 20 24 6f 66 66 73 [lreplace $offs
5920: 65 74 73 20 31 20 31 5d 0a 09 09 7d 0a 09 09 73 ets 1 1]...}...s
5930: 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 witch -exact --
5940: 24 69 6e 76 65 72 74 28 5b 6c 69 6e 64 65 78 20 $invert([lindex
5950: 24 6f 66 66 73 65 74 73 20 31 5d 29 20 7b 0a 09 $offsets 1]) {..
5960: 09 20 20 20 20 65 6e 64 2d 71 75 6f 74 65 20 7b . end-quote {
5970: 0a 09 09 09 69 66 20 7b 24 6f 66 66 73 65 74 28 ....if {$offset(
5980: 71 75 6f 74 65 29 20 3e 20 30 7d 20 7b 0a 09 09 quote) > 0} {...
5990: 09 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 . append resu
59a0: 6c 74 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 lt [string range
59b0: 20 24 74 65 78 74 20 30 20 5b 65 78 70 72 20 7b $text 0 [expr {
59c0: 24 6f 66 66 73 65 74 28 71 75 6f 74 65 29 2d 31 $offset(quote)-1
59d0: 7d 5d 5d 0a 09 09 09 7d 0a 09 09 09 73 65 74 20 }]]....}....set
59e0: 62 6f 64 79 20 5b 73 74 72 69 6e 67 20 72 61 6e body [string ran
59f0: 67 65 20 24 74 65 78 74 20 5b 65 78 70 72 20 7b ge $text [expr {
5a00: 24 6f 66 66 73 65 74 28 71 75 6f 74 65 29 2b 32 $offset(quote)+2
5a10: 7d 5d 20 5c 0a 09 09 09 09 20 20 20 20 20 20 5b }] \..... [
5a20: 65 78 70 72 20 7b 24 6f 66 66 73 65 74 28 65 6e expr {$offset(en
5a30: 64 2d 71 75 6f 74 65 29 2d 31 7d 5d 5d 0a 09 09 d-quote)-1}]]...
5a40: 09 73 65 74 20 74 65 78 74 20 5b 73 74 72 69 6e .set text [strin
5a50: 67 20 72 61 6e 67 65 20 24 74 65 78 74 5b 73 65 g range $text[se
5a60: 74 20 74 65 78 74 20 22 22 5d 20 5c 0a 09 09 09 t text ""] \....
5a70: 09 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 6f . [expr {$o
5a80: 66 66 73 65 74 28 65 6e 64 2d 71 75 6f 74 65 29 ffset(end-quote)
5a90: 2b 32 7d 5d 20 65 6e 64 5d 0a 09 09 09 61 70 70 +2}] end]....app
5aa0: 65 6e 64 20 72 65 73 75 6c 74 20 60 60 20 5b 63 end result `` [c
5ab0: 72 6f 73 73 2d 72 65 66 65 72 65 6e 63 65 20 24 ross-reference $
5ac0: 62 6f 64 79 5d 20 27 27 0a 09 09 09 63 6f 6e 74 body] ''....cont
5ad0: 69 6e 75 65 0a 09 09 20 20 20 20 7d 0a 09 09 20 inue... }...
5ae0: 20 20 20 62 6f 6c 64 20 2d 20 61 6e 63 68 6f 72 bold - anchor
5af0: 20 7b 0a 09 09 09 61 70 70 65 6e 64 20 72 65 73 {....append res
5b00: 75 6c 74 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 ult [string rang
5b10: 65 20 24 74 65 78 74 20 5c 0a 09 09 09 09 20 20 e $text \.....
5b20: 20 20 20 20 30 20 5b 65 78 70 72 20 7b 24 6f 66 0 [expr {$of
5b30: 66 73 65 74 28 65 6e 64 2d 71 75 6f 74 65 29 2b fset(end-quote)+
5b40: 31 7d 5d 5d 0a 09 09 09 73 65 74 20 74 65 78 74 1}]]....set text
5b50: 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 [string range $
5b60: 74 65 78 74 5b 73 65 74 20 74 65 78 74 20 22 22 text[set text ""
5b70: 5d 20 5c 0a 09 09 09 09 20 20 20 20 20 20 5b 65 ] \..... [e
5b80: 78 70 72 20 7b 24 6f 66 66 73 65 74 28 65 6e 64 xpr {$offset(end
5b90: 2d 71 75 6f 74 65 29 2b 32 7d 5d 20 65 6e 64 5d -quote)+2}] end]
5ba0: 0a 09 09 09 63 6f 6e 74 69 6e 75 65 0a 09 09 20 ....continue...
5bb0: 20 20 20 7d 0a 09 09 7d 0a 09 09 72 65 74 75 72 }...}...retur
5bc0: 6e 20 5b 72 65 66 65 72 65 6e 63 65 2d 65 72 72 n [reference-err
5bd0: 6f 72 20 22 55 6e 63 61 75 67 68 74 20 71 75 6f or "Uncaught quo
5be0: 74 65 20 63 61 73 65 22 20 24 74 65 78 74 5d 0a te case" $text].
5bf0: 09 20 20 20 20 7d 0a 09 20 20 20 20 62 6f 6c 64 . }.. bold
5c00: 20 7b 0a 09 09 69 66 20 7b 24 6f 66 66 73 65 74 {...if {$offset
5c10: 28 65 6e 64 2d 62 6f 6c 64 29 20 3c 20 30 7d 20 (end-bold) < 0}
5c20: 7b 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20 5b {... return [
5c30: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 74 append result $t
5c40: 65 78 74 5d 0a 09 09 7d 0a 09 09 69 66 20 7b 5b ext]...}...if {[
5c50: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 63 2e string match "c.
5c60: 2a 22 20 24 69 6e 76 65 72 74 28 5b 6c 69 6e 64 *" $invert([lind
5c70: 65 78 20 24 6f 66 66 73 65 74 73 20 31 5d 29 5d ex $offsets 1])]
5c80: 7d 20 7b 0a 09 09 20 20 20 20 73 65 74 20 6f 66 } {... set of
5c90: 66 73 65 74 73 20 5b 6c 72 65 70 6c 61 63 65 20 fsets [lreplace
5ca0: 24 6f 66 66 73 65 74 73 20 31 20 31 5d 0a 09 09 $offsets 1 1]...
5cb0: 7d 0a 09 09 73 77 69 74 63 68 20 2d 65 78 61 63 }...switch -exac
5cc0: 74 20 2d 2d 20 24 69 6e 76 65 72 74 28 5b 6c 69 t -- $invert([li
5cd0: 6e 64 65 78 20 24 6f 66 66 73 65 74 73 20 31 5d ndex $offsets 1]
5ce0: 29 20 7b 0a 09 09 20 20 20 20 75 72 6c 20 2d 20 ) {... url -
5cf0: 65 6e 64 2d 62 6f 6c 64 20 7b 0a 09 09 09 69 66 end-bold {....if
5d00: 20 7b 24 6f 66 66 73 65 74 28 62 6f 6c 64 29 20 {$offset(bold)
5d10: 3e 20 30 7d 20 7b 0a 09 09 09 20 20 20 20 61 70 > 0} {.... ap
5d20: 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 0a 09 09 pend result \...
5d30: 09 09 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 ..[string range
5d40: 24 74 65 78 74 20 30 20 5b 65 78 70 72 20 7b 24 $text 0 [expr {$
5d50: 6f 66 66 73 65 74 28 62 6f 6c 64 29 2d 31 7d 5d offset(bold)-1}]
5d60: 5d 0a 09 09 09 7d 0a 09 09 09 73 65 74 20 62 6f ]....}....set bo
5d70: 64 79 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 dy [string range
5d80: 20 24 74 65 78 74 20 5b 65 78 70 72 20 7b 24 6f $text [expr {$o
5d90: 66 66 73 65 74 28 62 6f 6c 64 29 2b 33 7d 5d 20 ffset(bold)+3}]
5da0: 5c 0a 09 09 09 09 20 20 20 20 20 20 5b 65 78 70 \..... [exp
5db0: 72 20 7b 24 6f 66 66 73 65 74 28 65 6e 64 2d 62 r {$offset(end-b
5dc0: 6f 6c 64 29 2d 31 7d 5d 5d 0a 09 09 09 73 65 74 old)-1}]]....set
5dd0: 20 74 65 78 74 20 5b 73 74 72 69 6e 67 20 72 61 text [string ra
5de0: 6e 67 65 20 24 74 65 78 74 5b 73 65 74 20 74 65 nge $text[set te
5df0: 78 74 20 22 22 5d 20 5c 0a 09 09 09 09 20 20 20 xt ""] \.....
5e00: 20 20 20 5b 65 78 70 72 20 7b 24 6f 66 66 73 65 [expr {$offse
5e10: 74 28 65 6e 64 2d 62 6f 6c 64 29 2b 34 7d 5d 20 t(end-bold)+4}]
5e20: 65 6e 64 5d 0a 09 09 09 72 65 67 73 75 62 20 7b end]....regsub {
5e30: 68 74 74 70 3a 2f 2f 5b 5c 77 2f 2e 2d 5d 2b 7d http://[\w/.-]+}
5e40: 20 24 62 6f 64 79 20 7b 3c 61 20 68 72 65 66 3d $body {<a href=
5e50: 22 26 22 3e 26 3c 2f 61 3e 7d 20 62 6f 64 79 0a "&">&</a>} body.
5e60: 09 09 09 61 70 70 65 6e 64 20 72 65 73 75 6c 74 ...append result
5e70: 20 3c 62 3e 20 5b 63 72 6f 73 73 2d 72 65 66 65 <b> [cross-refe
5e80: 72 65 6e 63 65 20 24 62 6f 64 79 5d 20 3c 2f 62 rence $body] </b
5e90: 3e 0a 09 09 09 63 6f 6e 74 69 6e 75 65 0a 09 09 >....continue...
5ea0: 20 20 20 20 7d 0a 09 09 20 20 20 20 61 6e 63 68 }... anch
5eb0: 6f 72 20 7b 0a 09 09 09 61 70 70 65 6e 64 20 72 or {....append r
5ec0: 65 73 75 6c 74 20 5c 0a 09 09 09 20 20 20 20 5b esult \.... [
5ed0: 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 74 65 string range $te
5ee0: 78 74 20 30 20 5b 65 78 70 72 20 7b 24 6f 66 66 xt 0 [expr {$off
5ef0: 73 65 74 28 65 6e 64 2d 62 6f 6c 64 29 2b 33 7d set(end-bold)+3}
5f00: 5d 5d 0a 09 09 09 73 65 74 20 74 65 78 74 20 5b ]]....set text [
5f10: 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 74 65 string range $te
5f20: 78 74 5b 73 65 74 20 74 65 78 74 20 22 22 5d 20 xt[set text ""]
5f30: 5c 0a 09 09 09 09 20 20 20 20 20 20 5b 65 78 70 \..... [exp
5f40: 72 20 7b 24 6f 66 66 73 65 74 28 65 6e 64 2d 62 r {$offset(end-b
5f50: 6f 6c 64 29 2b 34 7d 5d 20 65 6e 64 5d 0a 09 09 old)+4}] end]...
5f60: 09 63 6f 6e 74 69 6e 75 65 0a 09 09 20 20 20 20 .continue...
5f70: 7d 0a 09 09 20 20 20 20 64 65 66 61 75 6c 74 20 }... default
5f80: 7b 0a 09 09 09 72 65 74 75 72 6e 20 5b 72 65 66 {....return [ref
5f90: 65 72 65 6e 63 65 2d 65 72 72 6f 72 20 22 55 6e erence-error "Un
5fa0: 63 61 75 67 68 74 20 62 6f 6c 64 20 63 61 73 65 caught bold case
5fb0: 22 20 24 74 65 78 74 5d 0a 09 09 20 20 20 20 7d " $text]... }
5fc0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20 20 20 ...}.. }..
5fd0: 20 63 2e 74 6b 20 2d 20 63 2e 74 74 6b 20 2d 20 c.tk - c.ttk -
5fe0: 63 2e 74 63 6c 20 2d 20 63 2e 74 64 62 63 20 2d c.tcl - c.tdbc -
5ff0: 20 63 2e 69 74 63 6c 20 7b 0a 09 09 69 66 20 7b c.itcl {...if {
6000: 5b 6c 69 6e 64 65 78 20 24 6f 66 66 73 65 74 73 [lindex $offsets
6010: 20 30 5d 20 3e 20 30 7d 20 7b 0a 09 09 20 20 20 0] > 0} {...
6020: 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b append result [
6030: 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 74 65 string range $te
6040: 78 74 20 30 20 5c 0a 09 09 09 20 20 20 5b 65 78 xt 0 \.... [ex
6050: 70 72 20 7b 5b 6c 69 6e 64 65 78 20 24 6f 66 66 pr {[lindex $off
6060: 73 65 74 73 20 30 5d 2d 31 7d 5d 5d 0a 09 09 7d sets 0]-1}]]...}
6070: 0a 09 09 72 65 67 65 78 70 20 2d 69 6e 64 69 63 ...regexp -indic
6080: 65 73 20 2d 73 74 61 72 74 20 5b 6c 69 6e 64 65 es -start [linde
6090: 78 20 24 6f 66 66 73 65 74 73 20 30 5d 20 7b 5c x $offsets 0] {\
60a0: 77 2b 7d 20 24 74 65 78 74 20 72 61 6e 67 65 0a w+} $text range.
60b0: 09 09 73 65 74 20 62 6f 64 79 20 5b 73 74 72 69 ..set body [stri
60c0: 6e 67 20 72 61 6e 67 65 20 24 74 65 78 74 20 7b ng range $text {
60d0: 2a 7d 24 72 61 6e 67 65 5d 0a 09 09 73 65 74 20 *}$range]...set
60e0: 74 65 78 74 20 5b 73 74 72 69 6e 67 20 72 61 6e text [string ran
60f0: 67 65 20 24 74 65 78 74 5b 73 65 74 20 74 65 78 ge $text[set tex
6100: 74 20 22 22 5d 20 5c 0a 09 09 09 20 20 20 20 20 t ""] \....
6110: 20 5b 65 78 70 72 20 7b 5b 6c 69 6e 64 65 78 20 [expr {[lindex
6120: 24 72 61 6e 67 65 20 31 5d 2b 31 7d 5d 20 65 6e $range 1]+1}] en
6130: 64 5d 0a 09 09 61 70 70 65 6e 64 20 72 65 73 75 d]...append resu
6140: 6c 74 20 5b 63 72 6f 73 73 2d 72 65 66 65 72 65 lt [cross-refere
6150: 6e 63 65 20 24 62 6f 64 79 5d 0a 09 09 63 6f 6e nce $body]...con
6160: 74 69 6e 75 65 0a 09 20 20 20 20 7d 0a 09 20 20 tinue.. }..
6170: 20 20 54 63 6c 31 20 2d 20 54 63 6c 32 20 7b 0a Tcl1 - Tcl2 {.
6180: 09 09 73 65 74 20 6f 66 66 20 5b 6c 69 6e 64 65 ..set off [linde
6190: 78 20 24 6f 66 66 73 65 74 73 20 30 5d 0a 09 09 x $offsets 0]...
61a0: 69 66 20 7b 24 6f 66 66 20 3e 20 30 7d 20 7b 0a if {$off > 0} {.
61b0: 09 09 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 .. append res
61c0: 75 6c 74 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 ult [string rang
61d0: 65 20 24 74 65 78 74 20 30 20 5b 65 78 70 72 20 e $text 0 [expr
61e0: 7b 24 6f 66 66 2d 31 7d 5d 5d 0a 09 09 7d 0a 09 {$off-1}]]...}..
61f0: 09 73 65 74 20 74 65 78 74 20 5b 73 74 72 69 6e .set text [strin
6200: 67 20 72 61 6e 67 65 20 24 74 65 78 74 5b 73 65 g range $text[se
6210: 74 20 74 65 78 74 20 22 22 5d 20 5b 65 78 70 72 t text ""] [expr
6220: 20 7b 24 6f 66 66 2b 33 7d 5d 20 65 6e 64 5d 0a {$off+3}] end].
6230: 09 09 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 ..append result
6240: 5b 63 72 6f 73 73 2d 72 65 66 65 72 65 6e 63 65 [cross-reference
6250: 20 54 63 6c 5d 0a 09 09 63 6f 6e 74 69 6e 75 65 Tcl]...continue
6260: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75 72 6c .. }.. url
6270: 20 7b 0a 09 09 73 65 74 20 6f 66 66 20 5b 6c 69 {...set off [li
6280: 6e 64 65 78 20 24 6f 66 66 73 65 74 73 20 30 5d ndex $offsets 0]
6290: 0a 09 09 69 66 20 7b 24 6f 66 66 20 3e 20 30 7d ...if {$off > 0}
62a0: 20 7b 0a 09 09 20 20 20 20 61 70 70 65 6e 64 20 {... append
62b0: 72 65 73 75 6c 74 20 5b 73 74 72 69 6e 67 20 72 result [string r
62c0: 61 6e 67 65 20 24 74 65 78 74 20 30 20 5b 65 78 ange $text 0 [ex
62d0: 70 72 20 7b 24 6f 66 66 2d 31 7d 5d 5d 0a 09 09 pr {$off-1}]]...
62e0: 7d 0a 09 09 72 65 67 65 78 70 20 2d 69 6e 64 69 }...regexp -indi
62f0: 63 65 73 20 2d 73 74 61 72 74 20 24 6f 66 66 20 ces -start $off
6300: 7b 68 74 74 70 3a 2f 2f 5b 5c 77 2f 2e 2d 5d 2b {http://[\w/.-]+
6310: 7d 20 24 74 65 78 74 20 72 61 6e 67 65 0a 09 09 } $text range...
6320: 73 65 74 20 75 72 6c 20 5b 73 74 72 69 6e 67 20 set url [string
6330: 72 61 6e 67 65 20 24 74 65 78 74 20 7b 2a 7d 24 range $text {*}$
6340: 72 61 6e 67 65 5d 0a 09 09 61 70 70 65 6e 64 20 range]...append
6350: 72 65 73 75 6c 74 20 22 3c 61 20 68 72 65 66 3d result "<a href=
6360: 5c 22 5b 73 74 72 69 6e 67 20 74 72 69 6d 72 69 \"[string trimri
6370: 67 68 74 20 24 75 72 6c 20 2e 5d 5c 22 3e 24 75 ght $url .]\">$u
6380: 72 6c 3c 2f 61 3e 22 0a 09 09 73 65 74 20 74 65 rl</a>"...set te
6390: 78 74 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 xt [string range
63a0: 20 24 74 65 78 74 5b 73 65 74 20 74 65 78 74 20 $text[set text
63b0: 22 22 5d 20 5c 0a 09 09 09 20 20 20 20 20 20 5b ""] \.... [
63c0: 65 78 70 72 20 7b 5b 6c 69 6e 64 65 78 20 24 72 expr {[lindex $r
63d0: 61 6e 67 65 20 31 5d 2b 31 7d 5d 20 65 6e 64 5d ange 1]+1}] end]
63e0: 0a 09 09 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 ...continue..
63f0: 20 7d 0a 09 20 20 20 20 65 6e 64 2d 61 6e 63 68 }.. end-anch
6400: 6f 72 20 2d 20 65 6e 64 2d 62 6f 6c 64 20 2d 20 or - end-bold -
6410: 65 6e 64 2d 71 75 6f 74 65 20 7b 0a 09 09 72 65 end-quote {...re
6420: 74 75 72 6e 20 5b 72 65 66 65 72 65 6e 63 65 2d turn [reference-
6430: 65 72 72 6f 72 20 22 4f 75 74 20 6f 66 20 70 6c error "Out of pl
6440: 61 63 65 20 24 69 6e 76 65 72 74 28 5b 6c 69 6e ace $invert([lin
6450: 64 65 78 20 24 6f 66 66 73 65 74 73 20 30 5d 29 dex $offsets 0])
6460: 22 20 24 74 65 78 74 5d 0a 09 20 20 20 20 7d 0a " $text].. }.
6470: 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0c 0a 23 23 0a .}. }.}...##.
6480: 23 23 20 70 72 6f 63 65 73 73 20 66 6f 72 6d 61 ## process forma
6490: 74 74 69 6e 67 20 64 69 72 65 63 74 69 76 65 73 tting directives
64a0: 0a 23 23 0a 70 72 6f 63 20 6f 75 74 70 75 74 2d .##.proc output-
64b0: 64 69 72 65 63 74 69 76 65 20 7b 6c 69 6e 65 7d directive {line}
64c0: 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 6d 61 {. global ma
64d0: 6e 75 61 6c 0a 20 20 20 20 23 20 70 72 6f 63 65 nual. # proce
64e0: 73 73 20 66 6f 72 6d 61 74 20 64 69 72 65 63 74 ss format direct
64f0: 69 76 65 0a 20 20 20 20 73 70 6c 69 74 2d 64 69 ive. split-di
6500: 72 65 63 74 69 76 65 20 24 6c 69 6e 65 20 63 6f rective $line co
6510: 64 65 20 72 65 73 74 0a 20 20 20 20 73 77 69 74 de rest. swit
6520: 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 63 6f ch -exact -- $co
6530: 64 65 20 7b 0a 09 2e 42 53 20 2d 20 2e 42 45 20 de {...BS - .BE
6540: 7b 0a 09 20 20 20 20 23 20 6d 61 6e 2d 70 75 74 {.. # man-put
6550: 73 20 3c 68 72 3e 0a 09 7d 0a 09 2e 53 48 20 2d s <hr>..}...SH -
6560: 20 2e 53 53 20 7b 0a 09 20 20 20 20 23 20 64 72 .SS {.. # dr
6570: 61 69 6e 20 61 6e 79 20 6f 70 65 6e 20 6c 69 73 ain any open lis
6580: 74 73 0a 09 20 20 20 20 23 20 61 6e 6e 6f 75 6e ts.. # announ
6590: 63 65 20 74 68 65 20 73 75 62 6a 65 63 74 0a 09 ce the subject..
65a0: 20 20 20 20 73 65 74 20 6d 61 6e 75 61 6c 28 73 set manual(s
65b0: 65 63 74 69 6f 6e 29 20 24 72 65 73 74 0a 09 20 ection) $rest..
65c0: 20 20 20 23 20 73 74 61 72 74 20 6f 75 72 20 6f # start our o
65d0: 77 6e 20 73 74 61 63 6b 20 6f 66 20 73 74 75 66 wn stack of stuf
65e0: 66 0a 09 20 20 20 20 73 65 74 20 6d 61 6e 75 61 f.. set manua
65f0: 6c 28 24 6d 61 6e 75 61 6c 28 6e 61 6d 65 29 2d l($manual(name)-
6600: 24 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f 6e 29 $manual(section)
6610: 29 20 7b 7d 0a 09 20 20 20 20 6c 61 70 70 65 6e ) {}.. lappen
6620: 64 20 6d 61 6e 75 61 6c 28 68 61 73 2d 24 6d 61 d manual(has-$ma
6630: 6e 75 61 6c 28 73 65 63 74 69 6f 6e 29 29 20 24 nual(section)) $
6640: 6d 61 6e 75 61 6c 28 6e 61 6d 65 29 0a 09 20 20 manual(name)..
6650: 20 20 69 66 20 7b 24 63 6f 64 65 20 6e 65 20 22 if {$code ne "
6660: 2e 53 53 22 7d 20 7b 0a 09 09 6d 61 6e 2d 70 75 .SS"} {...man-pu
6670: 74 73 20 22 3c 68 33 3e 5b 6c 6f 6e 67 2d 74 6f ts "<h3>[long-to
6680: 63 20 24 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f c $manual(sectio
6690: 6e 29 5d 3c 2f 68 33 3e 22 0a 09 20 20 20 20 7d n)]</h3>".. }
66a0: 20 65 6c 73 65 20 7b 0a 09 09 6d 61 6e 2d 70 75 else {...man-pu
66b0: 74 73 20 22 3c 68 34 3e 5b 6c 6f 6e 67 2d 74 6f ts "<h4>[long-to
66c0: 63 20 24 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f c $manual(sectio
66d0: 6e 29 5d 3c 2f 68 34 3e 22 0a 09 20 20 20 20 7d n)]</h4>".. }
66e0: 0a 09 20 20 20 20 23 20 73 6f 6d 65 20 73 65 63 .. # some sec
66f0: 74 69 6f 6e 73 20 63 61 6e 20 73 69 6d 70 6c 79 tions can simply
6700: 20 66 72 65 65 20 77 68 65 65 6c 20 74 68 65 69 free wheel thei
6710: 72 20 77 61 79 20 74 68 72 6f 75 67 68 20 74 68 r way through th
6720: 65 20 74 65 78 74 0a 09 20 20 20 20 23 20 73 6f e text.. # so
6730: 6d 65 20 73 65 63 74 69 6f 6e 73 20 63 61 6e 20 me sections can
6740: 62 65 20 70 72 6f 63 65 73 73 65 64 20 69 6e 20 be processed in
6750: 74 68 65 69 72 20 6f 77 6e 20 6c 6f 6f 70 73 0a their own loops.
6760: 09 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 . switch -exa
6770: 63 74 20 2d 2d 20 5b 73 74 72 69 6e 67 20 69 6e ct -- [string in
6780: 64 65 78 20 24 63 6f 64 65 20 65 6e 64 5d 3a 24 dex $code end]:$
6790: 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f 6e 29 20 manual(section)
67a0: 7b 0a 09 09 48 3a 4e 41 4d 45 20 7b 0a 09 09 20 {...H:NAME {...
67b0: 20 20 20 73 65 74 20 6e 61 6d 65 73 20 7b 7d 0a set names {}.
67c0: 09 09 20 20 20 20 77 68 69 6c 65 20 7b 31 7d 20 .. while {1}
67d0: 7b 0a 09 09 09 73 65 74 20 6c 69 6e 65 20 5b 6e {....set line [n
67e0: 65 78 74 2d 74 65 78 74 5d 0a 09 09 09 69 66 20 ext-text]....if
67f0: 7b 5b 69 73 2d 61 2d 64 69 72 65 63 74 69 76 65 {[is-a-directive
6800: 20 24 6c 69 6e 65 5d 7d 20 7b 0a 09 09 09 20 20 $line]} {....
6810: 20 20 62 61 63 6b 75 70 2d 74 65 78 74 20 31 0a backup-text 1.
6820: 09 09 09 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e ... if {[llen
6830: 67 74 68 20 24 6e 61 6d 65 73 5d 7d 20 7b 0a 09 gth $names]} {..
6840: 09 09 09 6f 75 74 70 75 74 2d 6e 61 6d 65 20 5b ...output-name [
6850: 6a 6f 69 6e 20 24 6e 61 6d 65 73 20 7b 20 7d 5d join $names { }]
6860: 0a 09 09 09 20 20 20 20 7d 0a 09 09 09 20 20 20 .... }....
6870: 20 72 65 74 75 72 6e 0a 09 09 09 7d 0a 09 09 09 return....}....
6880: 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 5b 73 lappend names [s
6890: 74 72 69 6e 67 20 74 72 69 6d 20 24 6c 69 6e 65 tring trim $line
68a0: 5d 0a 09 09 20 20 20 20 7d 0a 09 09 7d 0a 09 09 ]... }...}...
68b0: 48 3a 53 59 4e 4f 50 53 49 53 20 7b 0a 09 09 20 H:SYNOPSIS {...
68c0: 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 lappend manua
68d0: 6c 28 73 65 63 74 69 6f 6e 2d 74 6f 63 29 20 3c l(section-toc) <
68e0: 64 6c 3e 0a 09 09 20 20 20 20 77 68 69 6c 65 20 dl>... while
68f0: 7b 31 7d 20 7b 0a 09 09 09 69 66 20 7b 0a 09 09 {1} {....if {...
6900: 09 20 20 20 20 5b 6e 65 78 74 2d 6f 70 2d 69 73 . [next-op-is
6910: 20 2e 6e 66 20 72 65 73 74 5d 0a 09 09 09 20 20 .nf rest]....
6920: 20 20 7c 7c 20 5b 6e 65 78 74 2d 6f 70 2d 69 73 || [next-op-is
6930: 20 2e 62 72 20 72 65 73 74 5d 0a 09 09 09 20 20 .br rest]....
6940: 20 20 7c 7c 20 5b 6e 65 78 74 2d 6f 70 2d 69 73 || [next-op-is
6950: 20 2e 66 69 20 72 65 73 74 5d 0a 09 09 09 7d 20 .fi rest]....}
6960: 7b 0a 09 09 09 20 20 20 20 63 6f 6e 74 69 6e 75 {.... continu
6970: 65 0a 09 09 09 7d 0a 09 09 09 69 66 20 7b 0a 09 e....}....if {..
6980: 09 09 20 20 20 20 5b 6e 65 78 74 2d 6f 70 2d 69 .. [next-op-i
6990: 73 20 2e 53 48 20 72 65 73 74 5d 0a 09 09 09 20 s .SH rest]....
69a0: 20 20 20 7c 7c 20 5b 6e 65 78 74 2d 6f 70 2d 69 || [next-op-i
69b0: 73 20 2e 53 53 20 72 65 73 74 5d 0a 09 09 09 20 s .SS rest]....
69c0: 20 20 20 7c 7c 20 5b 6e 65 78 74 2d 6f 70 2d 69 || [next-op-i
69d0: 73 20 2e 42 45 20 72 65 73 74 5d 0a 09 09 09 20 s .BE rest]....
69e0: 20 20 20 7c 7c 20 5b 6e 65 78 74 2d 6f 70 2d 69 || [next-op-i
69f0: 73 20 2e 53 4f 20 72 65 73 74 5d 0a 09 09 09 7d s .SO rest]....}
6a00: 20 7b 0a 09 09 09 20 20 20 20 62 61 63 6b 75 70 {.... backup
6a10: 2d 74 65 78 74 20 31 0a 09 09 09 20 20 20 20 62 -text 1.... b
6a20: 72 65 61 6b 0a 09 09 09 7d 0a 09 09 09 69 66 20 reak....}....if
6a30: 7b 5b 6e 65 78 74 2d 6f 70 2d 69 73 20 2e 73 70 {[next-op-is .sp
6a40: 20 72 65 73 74 5d 7d 20 7b 0a 09 09 09 20 20 20 rest]} {....
6a50: 20 23 6d 61 6e 2d 70 75 74 73 20 3c 70 3e 0a 09 #man-puts <p>..
6a60: 09 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 09 .. continue..
6a70: 09 09 7d 0a 09 09 09 73 65 74 20 6d 6f 72 65 20 ..}....set more
6a80: 5b 6e 65 78 74 2d 74 65 78 74 5d 0a 09 09 09 69 [next-text]....i
6a90: 66 20 7b 5b 69 73 2d 61 2d 64 69 72 65 63 74 69 f {[is-a-directi
6aa0: 76 65 20 24 6d 6f 72 65 5d 7d 20 7b 0a 09 09 09 ve $more]} {....
6ab0: 20 20 20 20 6d 61 6e 65 72 72 6f 72 20 22 69 6e manerror "in
6ac0: 20 53 59 4e 4f 50 53 49 53 20 66 6f 75 6e 64 20 SYNOPSIS found
6ad0: 24 6d 6f 72 65 22 0a 09 09 09 20 20 20 20 62 61 $more".... ba
6ae0: 63 6b 75 70 2d 74 65 78 74 20 31 0a 09 09 09 20 ckup-text 1....
6af0: 20 20 20 62 72 65 61 6b 0a 09 09 09 7d 0a 09 09 break....}...
6b00: 09 66 6f 72 65 61 63 68 20 6d 6f 72 65 20 5b 73 .foreach more [s
6b10: 70 6c 69 74 20 24 6d 6f 72 65 20 5c 6e 5d 20 7b plit $more \n] {
6b20: 0a 09 09 09 20 20 20 20 72 65 67 65 78 70 20 7b .... regexp {
6b30: 5e 28 5c 73 2a 29 28 2e 2a 29 7d 20 24 6d 6f 72 ^(\s*)(.*)} $mor
6b40: 65 20 2d 3e 20 73 70 61 63 65 73 20 6d 6f 72 65 e -> spaces more
6b50: 0a 09 09 09 20 20 20 20 73 65 74 20 73 70 61 63 .... set spac
6b60: 65 73 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b es [string map {
6b70: 22 20 22 20 22 26 6e 62 73 70 3b 22 7d 20 24 73 " " " "} $s
6b80: 70 61 63 65 73 5d 0a 09 09 09 20 20 20 20 69 66 paces].... if
6b90: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length
6ba0: 20 24 73 70 61 63 65 73 5d 7d 20 7b 0a 09 09 09 $spaces]} {....
6bb0: 09 73 65 74 20 73 70 61 63 65 73 20 3c 74 74 3e .set spaces <tt>
6bc0: 24 73 70 61 63 65 73 3c 2f 74 74 3e 0a 09 09 09 $spaces</tt>....
6bd0: 20 20 20 20 7d 0a 09 09 09 20 20 20 20 6d 61 6e }.... man
6be0: 2d 70 75 74 73 20 24 73 70 61 63 65 73 24 6d 6f -puts $spaces$mo
6bf0: 72 65 3c 62 72 3e 0a 09 09 09 20 20 20 20 69 66 re<br>.... if
6c00: 20 7b 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d 66 {$manual(wing-f
6c10: 69 6c 65 29 20 69 6e 20 7b 54 63 6c 4c 69 62 20 ile) in {TclLib
6c20: 54 6b 4c 69 62 7d 7d 20 7b 0a 09 09 09 09 6c 61 TkLib}} {.....la
6c30: 70 70 65 6e 64 20 6d 61 6e 75 61 6c 28 73 65 63 ppend manual(sec
6c40: 74 69 6f 6e 2d 74 6f 63 29 20 3c 64 64 3e 24 6d tion-toc) <dd>$m
6c50: 6f 72 65 0a 09 09 09 20 20 20 20 7d 0a 09 09 09 ore.... }....
6c60: 7d 0a 09 09 20 20 20 20 7d 0a 09 09 20 20 20 20 }... }...
6c70: 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 6c 28 73 lappend manual(s
6c80: 65 63 74 69 6f 6e 2d 74 6f 63 29 20 3c 2f 64 6c ection-toc) </dl
6c90: 3e 0a 09 09 20 20 20 20 72 65 74 75 72 6e 0a 09 >... return..
6ca0: 09 7d 0a 09 09 7b 48 3a 53 45 45 20 41 4c 53 4f .}...{H:SEE ALSO
6cb0: 7d 20 7b 0a 09 09 20 20 20 20 77 68 69 6c 65 20 } {... while
6cc0: 7b 5b 6d 6f 72 65 2d 74 65 78 74 5d 7d 20 7b 0a {[more-text]} {.
6cd0: 09 09 09 69 66 20 7b 5b 6e 65 78 74 2d 6f 70 2d ...if {[next-op-
6ce0: 69 73 20 2e 53 48 20 72 65 73 74 5d 20 7c 7c 20 is .SH rest] ||
6cf0: 5b 6e 65 78 74 2d 6f 70 2d 69 73 20 2e 53 53 20 [next-op-is .SS
6d00: 72 65 73 74 5d 7d 20 7b 0a 09 09 09 20 20 20 20 rest]} {....
6d10: 62 61 63 6b 75 70 2d 74 65 78 74 20 31 0a 09 09 backup-text 1...
6d20: 09 20 20 20 20 72 65 74 75 72 6e 0a 09 09 09 7d . return....}
6d30: 0a 09 09 09 73 65 74 20 6d 6f 72 65 20 5b 6e 65 ....set more [ne
6d40: 78 74 2d 74 65 78 74 5d 0a 09 09 09 69 66 20 7b xt-text]....if {
6d50: 5b 69 73 2d 61 2d 64 69 72 65 63 74 69 76 65 20 [is-a-directive
6d60: 24 6d 6f 72 65 5d 7d 20 7b 0a 09 09 09 20 20 20 $more]} {....
6d70: 20 6d 61 6e 65 72 72 6f 72 20 22 24 6d 6f 72 65 manerror "$more
6d80: 22 0a 09 09 09 20 20 20 20 62 61 63 6b 75 70 2d ".... backup-
6d90: 74 65 78 74 20 31 0a 09 09 09 20 20 20 20 72 65 text 1.... re
6da0: 74 75 72 6e 0a 09 09 09 7d 0a 09 09 09 73 65 74 turn....}....set
6db0: 20 6e 6d 6f 72 65 20 7b 7d 0a 09 09 09 66 6f 72 nmore {}....for
6dc0: 65 61 63 68 20 63 72 20 5b 73 70 6c 69 74 20 24 each cr [split $
6dd0: 6d 6f 72 65 20 2c 5d 20 7b 0a 09 09 09 20 20 20 more ,] {....
6de0: 20 73 65 74 20 63 72 20 5b 73 74 72 69 6e 67 20 set cr [string
6df0: 74 72 69 6d 20 24 63 72 5d 0a 09 09 09 20 20 20 trim $cr]....
6e00: 20 69 66 20 7b 21 5b 72 65 67 65 78 70 20 7b 5e if {![regexp {^
6e10: 3c 62 3e 2e 2a 3c 2f 62 3e 24 7d 20 24 63 72 5d <b>.*</b>$} $cr]
6e20: 7d 20 7b 0a 09 09 09 09 73 65 74 20 63 72 20 3c } {.....set cr <
6e30: 62 3e 24 63 72 3c 2f 62 3e 0a 09 09 09 20 20 20 b>$cr</b>....
6e40: 20 7d 0a 09 09 09 20 20 20 20 69 66 20 7b 5b 72 }.... if {[r
6e50: 65 67 65 78 70 20 7b 5e 3c 62 3e 28 2e 2a 29 5c egexp {^<b>(.*)\
6e60: 28 5b 31 33 6e 5d 5c 29 3c 2f 62 3e 24 7d 20 24 ([13n]\)</b>$} $
6e70: 63 72 20 61 6c 6c 20 6e 61 6d 65 5d 7d 20 7b 0a cr all name]} {.
6e80: 09 09 09 09 73 65 74 20 63 72 20 3c 62 3e 24 6e ....set cr <b>$n
6e90: 61 6d 65 3c 2f 62 3e 0a 09 09 09 20 20 20 20 7d ame</b>.... }
6ea0: 0a 09 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 .... lappend
6eb0: 6e 6d 6f 72 65 20 24 63 72 0a 09 09 09 7d 0a 09 nmore $cr....}..
6ec0: 09 09 6d 61 6e 2d 70 75 74 73 20 5b 6a 6f 69 6e ..man-puts [join
6ed0: 20 24 6e 6d 6f 72 65 20 7b 2c 20 7d 5d 0a 09 09 $nmore {, }]...
6ee0: 20 20 20 20 7d 0a 09 09 20 20 20 20 72 65 74 75 }... retu
6ef0: 72 6e 0a 09 09 7d 0a 09 09 48 3a 4b 45 59 57 4f rn...}...H:KEYWO
6f00: 52 44 53 20 7b 0a 09 09 20 20 20 20 77 68 69 6c RDS {... whil
6f10: 65 20 7b 5b 6d 6f 72 65 2d 74 65 78 74 5d 7d 20 e {[more-text]}
6f20: 7b 0a 09 09 09 69 66 20 7b 5b 6e 65 78 74 2d 6f {....if {[next-o
6f30: 70 2d 69 73 20 2e 53 48 20 72 65 73 74 5d 20 7c p-is .SH rest] |
6f40: 7c 20 5b 6e 65 78 74 2d 6f 70 2d 69 73 20 2e 53 | [next-op-is .S
6f50: 53 20 72 65 73 74 5d 7d 20 7b 0a 09 09 09 20 20 S rest]} {....
6f60: 20 20 62 61 63 6b 75 70 2d 74 65 78 74 20 31 0a backup-text 1.
6f70: 09 09 09 20 20 20 20 72 65 74 75 72 6e 0a 09 09 ... return...
6f80: 09 7d 0a 09 09 09 73 65 74 20 6d 6f 72 65 20 5b .}....set more [
6f90: 6e 65 78 74 2d 74 65 78 74 5d 0a 09 09 09 69 66 next-text]....if
6fa0: 20 7b 5b 69 73 2d 61 2d 64 69 72 65 63 74 69 76 {[is-a-directiv
6fb0: 65 20 24 6d 6f 72 65 5d 7d 20 7b 0a 09 09 09 20 e $more]} {....
6fc0: 20 20 20 6d 61 6e 65 72 72 6f 72 20 22 24 6d 6f manerror "$mo
6fd0: 72 65 22 0a 09 09 09 20 20 20 20 62 61 63 6b 75 re".... backu
6fe0: 70 2d 74 65 78 74 20 31 0a 09 09 09 20 20 20 20 p-text 1....
6ff0: 72 65 74 75 72 6e 0a 09 09 09 7d 0a 09 09 09 73 return....}....s
7000: 65 74 20 6b 65 79 73 20 7b 7d 0a 09 09 09 66 6f et keys {}....fo
7010: 72 65 61 63 68 20 6b 65 79 20 5b 73 70 6c 69 74 reach key [split
7020: 20 24 6d 6f 72 65 20 2c 5d 20 7b 0a 09 09 09 20 $more ,] {....
7030: 20 20 20 73 65 74 20 6b 65 79 20 5b 73 74 72 69 set key [stri
7040: 6e 67 20 74 72 69 6d 20 24 6b 65 79 5d 0a 09 09 ng trim $key]...
7050: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e . lappend man
7060: 75 61 6c 28 6b 65 79 77 6f 72 64 2d 24 6b 65 79 ual(keyword-$key
7070: 29 20 5b 6c 69 73 74 20 24 6d 61 6e 75 61 6c 28 ) [list $manual(
7080: 6e 61 6d 65 29 20 5c 0a 09 09 09 09 20 20 20 20 name) \.....
7090: 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d 66 69 6c $manual(wing-fil
70a0: 65 29 2f 24 6d 61 6e 75 61 6c 28 6e 61 6d 65 29 e)/$manual(name)
70b0: 2e 68 74 6d 6c 5d 0a 09 09 09 20 20 20 20 73 65 .html].... se
70c0: 74 20 69 6e 69 74 69 61 6c 20 5b 73 74 72 69 6e t initial [strin
70d0: 67 20 74 6f 75 70 70 65 72 20 5b 73 74 72 69 6e g toupper [strin
70e0: 67 20 69 6e 64 65 78 20 24 6b 65 79 20 30 5d 5d g index $key 0]]
70f0: 0a 09 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 .... lappend
7100: 6b 65 79 73 20 22 3c 61 20 68 72 65 66 3d 5c 22 keys "<a href=\"
7110: 2e 2e 2f 4b 65 79 77 6f 72 64 73 2f 24 69 6e 69 ../Keywords/$ini
7120: 74 69 61 6c 2e 68 74 6d 6c 5c 23 24 6b 65 79 5c tial.html\#$key\
7130: 22 3e 24 6b 65 79 3c 2f 61 3e 22 0a 09 09 09 7d ">$key</a>"....}
7140: 0a 09 09 09 6d 61 6e 2d 70 75 74 73 20 5b 6a 6f ....man-puts [jo
7150: 69 6e 20 24 6b 65 79 73 20 7b 2c 20 7d 5d 0a 09 in $keys {, }]..
7160: 09 20 20 20 20 7d 0a 09 09 20 20 20 20 72 65 74 . }... ret
7170: 75 72 6e 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 urn...}.. }..
7180: 20 20 20 20 69 66 20 7b 5b 6e 65 78 74 2d 6f 70 if {[next-op
7190: 2d 69 73 20 2e 49 50 20 72 65 73 74 5d 7d 20 7b -is .IP rest]} {
71a0: 0a 09 09 6f 75 74 70 75 74 2d 49 50 2d 6c 69 73 ...output-IP-lis
71b0: 74 20 24 63 6f 64 65 20 2e 49 50 20 24 72 65 73 t $code .IP $res
71c0: 74 0a 09 09 72 65 74 75 72 6e 0a 09 20 20 20 20 t...return..
71d0: 7d 0a 09 20 20 20 20 69 66 20 7b 5b 6e 65 78 74 }.. if {[next
71e0: 2d 6f 70 2d 69 73 20 2e 50 50 20 72 65 73 74 5d -op-is .PP rest]
71f0: 7d 20 7b 0a 09 09 72 65 74 75 72 6e 0a 09 20 20 } {...return..
7200: 20 20 7d 0a 09 20 20 20 20 72 65 74 75 72 6e 0a }.. return.
7210: 09 7d 0a 09 2e 53 4f 20 7b 0a 09 20 20 20 20 23 .}...SO {.. #
7220: 20 57 68 65 6e 20 74 68 65 72 65 27 73 20 61 20 When there's a
7230: 73 65 71 75 65 6e 63 65 20 6f 66 20 6d 75 6c 74 sequence of mult
7240: 69 70 6c 65 20 2e 53 4f 20 63 68 75 6e 6b 73 2c iple .SO chunks,
7250: 20 70 72 6f 63 65 73 73 20 69 6e 74 6f 20 6f 6e process into on
7260: 65 0a 09 20 20 20 20 73 65 74 20 6f 70 74 73 6c e.. set optsl
7270: 69 73 74 20 7b 7d 0a 09 20 20 20 20 77 68 69 6c ist {}.. whil
7280: 65 20 31 20 7b 0a 09 09 69 66 20 7b 5b 6d 61 74 e 1 {...if {[mat
7290: 63 68 2d 74 65 78 74 20 40 73 74 75 66 66 20 2e ch-text @stuff .
72a0: 53 45 5d 7d 20 7b 0a 09 09 20 20 20 20 66 6f 72 SE]} {... for
72b0: 65 61 63 68 20 6f 70 74 20 5b 73 70 6c 69 74 20 each opt [split
72c0: 24 73 74 75 66 66 20 5c 6e 5c 74 5d 20 7b 0a 09 $stuff \n\t] {..
72d0: 09 09 6c 61 70 70 65 6e 64 20 6f 70 74 73 6c 69 ..lappend optsli
72e0: 73 74 20 5b 6c 69 73 74 20 24 6f 70 74 20 24 72 st [list $opt $r
72f0: 65 73 74 5d 0a 09 09 20 20 20 20 7d 0a 09 09 7d est]... }...}
7300: 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 6d 61 else {... ma
7310: 6e 65 72 72 6f 72 20 22 75 6e 65 78 70 65 63 74 nerror "unexpect
7320: 65 64 20 2e 53 4f 20 66 6f 72 6d 61 74 3a 5c 6e ed .SO format:\n
7330: 5b 65 78 70 61 6e 64 2d 6e 65 78 74 2d 74 65 78 [expand-next-tex
7340: 74 20 32 5d 22 0a 09 09 7d 0a 09 09 69 66 20 7b t 2]"...}...if {
7350: 21 5b 6e 65 78 74 2d 6f 70 2d 69 73 20 2e 53 4f ![next-op-is .SO
7360: 20 72 65 73 74 5d 7d 20 7b 0a 09 09 20 20 20 20 rest]} {...
7370: 62 72 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d break...}.. }
7380: 0a 09 20 20 20 20 6f 75 74 70 75 74 2d 64 69 72 .. output-dir
7390: 65 63 74 69 76 65 20 7b 2e 53 48 20 53 54 41 4e ective {.SH STAN
73a0: 44 41 52 44 20 4f 50 54 49 4f 4e 53 7d 0a 09 20 DARD OPTIONS}..
73b0: 20 20 20 6d 61 6e 2d 70 75 74 73 20 3c 64 6c 3e man-puts <dl>
73c0: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 .. lappend ma
73d0: 6e 75 61 6c 28 73 65 63 74 69 6f 6e 2d 74 6f 63 nual(section-toc
73e0: 29 20 3c 64 6c 3e 0a 09 20 20 20 20 66 6f 72 65 ) <dl>.. fore
73f0: 61 63 68 20 6f 70 74 69 6f 6e 70 61 69 72 20 5b ach optionpair [
7400: 6c 73 6f 72 74 20 2d 64 69 63 74 69 6f 6e 61 72 lsort -dictionar
7410: 79 20 2d 69 6e 64 65 78 20 30 20 24 6f 70 74 73 y -index 0 $opts
7420: 6c 69 73 74 5d 20 7b 0a 09 09 6c 61 73 73 69 67 list] {...lassig
7430: 6e 20 24 6f 70 74 69 6f 6e 70 61 69 72 20 6f 70 n $optionpair op
7440: 74 69 6f 6e 20 74 61 72 67 65 74 50 61 67 65 0a tion targetPage.
7450: 09 09 6d 61 6e 2d 70 75 74 73 20 22 3c 64 74 3e ..man-puts "<dt>
7460: 3c 62 3e 5b 73 74 64 2d 6f 70 74 69 6f 6e 2d 74 <b>[std-option-t
7470: 6f 63 20 24 6f 70 74 69 6f 6e 20 24 74 61 72 67 oc $option $targ
7480: 65 74 50 61 67 65 5d 3c 2f 62 3e 22 0a 09 20 20 etPage]</b>"..
7490: 20 20 7d 0a 09 20 20 20 20 6d 61 6e 2d 70 75 74 }.. man-put
74a0: 73 20 3c 2f 64 6c 3e 0a 09 20 20 20 20 6c 61 70 s </dl>.. lap
74b0: 70 65 6e 64 20 6d 61 6e 75 61 6c 28 73 65 63 74 pend manual(sect
74c0: 69 6f 6e 2d 74 6f 63 29 20 3c 2f 64 6c 3e 0a 09 ion-toc) </dl>..
74d0: 7d 0a 09 2e 4f 50 20 7b 0a 09 20 20 20 20 6f 75 }...OP {.. ou
74e0: 74 70 75 74 2d 77 69 64 67 65 74 2d 6f 70 74 69 tput-widget-opti
74f0: 6f 6e 73 20 24 72 65 73 74 0a 09 20 20 20 20 72 ons $rest.. r
7500: 65 74 75 72 6e 0a 09 7d 0a 09 2e 49 50 20 7b 0a eturn..}...IP {.
7510: 09 20 20 20 20 6f 75 74 70 75 74 2d 49 50 2d 6c . output-IP-l
7520: 69 73 74 20 2e 49 50 20 2e 49 50 20 24 72 65 73 ist .IP .IP $res
7530: 74 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d t.. return..}
7540: 0a 09 2e 50 50 20 2d 20 2e 73 70 20 7b 0a 09 20 ...PP - .sp {..
7550: 20 20 20 6d 61 6e 2d 70 75 74 73 20 3c 70 3e 0a man-puts <p>.
7560: 09 7d 0a 09 2e 52 53 20 7b 0a 09 20 20 20 20 6f .}...RS {.. o
7570: 75 74 70 75 74 2d 52 53 2d 6c 69 73 74 0a 09 20 utput-RS-list..
7580: 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 09 2e 62 return..}...b
7590: 72 20 7b 0a 09 20 20 20 20 6d 61 6e 2d 70 75 74 r {.. man-put
75a0: 73 20 3c 62 72 3e 0a 09 20 20 20 20 72 65 74 75 s <br>.. retu
75b0: 72 6e 0a 09 7d 0a 09 2e 44 53 20 7b 0a 09 20 20 rn..}...DS {..
75c0: 20 20 69 66 20 7b 5b 6e 65 78 74 2d 6f 70 2d 69 if {[next-op-i
75d0: 73 20 2e 74 61 20 72 65 73 74 5d 7d 20 7b 0a 09 s .ta rest]} {..
75e0: 09 23 20 73 6b 69 70 20 74 68 65 20 6c 65 61 64 .# skip the lead
75f0: 69 6e 67 20 2e 74 61 20 64 69 72 65 63 74 69 76 ing .ta directiv
7600: 65 20 69 66 20 69 74 20 69 73 20 74 68 65 72 65 e if it is there
7610: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20 .. }.. if
7620: 7b 5b 6d 61 74 63 68 2d 74 65 78 74 20 40 73 74 {[match-text @st
7630: 75 66 66 20 2e 44 45 5d 7d 20 7b 0a 09 09 73 65 uff .DE]} {...se
7640: 74 20 74 64 20 22 3c 74 64 3e 3c 70 20 63 6c 61 t td "<td><p cla
7650: 73 73 3d 5c 22 74 61 62 6c 65 63 65 6c 6c 5c 22 ss=\"tablecell\"
7660: 3e 22 0a 09 09 73 65 74 20 62 6f 64 79 54 65 78 >"...set bodyTex
7670: 74 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c t [string map [l
7680: 69 73 74 20 5c 6e 20 3c 74 72 3e 24 74 64 20 5c ist \n <tr>$td \
7690: 74 20 24 74 64 5d 20 5c 6e 24 73 74 75 66 66 5d t $td] \n$stuff]
76a0: 0a 09 09 6d 61 6e 2d 70 75 74 73 20 22 3c 64 6c ...man-puts "<dl
76b0: 3e 3c 64 64 3e 3c 74 61 62 6c 65 20 62 6f 72 64 ><dd><table bord
76c0: 65 72 3d 5c 22 30 5c 22 3e 24 62 6f 64 79 54 65 er=\"0\">$bodyTe
76d0: 78 74 3c 2f 74 61 62 6c 65 3e 3c 2f 64 6c 3e 22 xt</table></dl>"
76e0: 0a 09 09 23 6d 61 6e 2d 70 75 74 73 20 3c 70 72 ...#man-puts <pr
76f0: 65 3e 24 73 74 75 66 66 3c 2f 70 72 65 3e 0a 09 e>$stuff</pre>..
7700: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6d } elseif {[m
7710: 61 74 63 68 2d 74 65 78 74 20 2e 66 69 20 40 75 atch-text .fi @u
7720: 6c 31 20 40 75 6c 32 20 2e 6e 66 20 40 73 74 75 l1 @ul2 .nf @stu
7730: 66 66 20 2e 44 45 5d 7d 20 7b 0a 09 09 6d 61 6e ff .DE]} {...man
7740: 2d 70 75 74 73 20 22 3c 70 72 65 3e 5b 6c 69 6e -puts "<pre>[lin
7750: 64 65 78 20 24 75 6c 31 20 31 5d 5b 6c 69 6e 64 dex $ul1 1][lind
7760: 65 78 20 24 75 6c 32 20 31 5d 5c 6e 24 73 74 75 ex $ul2 1]\n$stu
7770: 66 66 3c 2f 70 72 65 3e 22 0a 09 20 20 20 20 7d ff</pre>".. }
7780: 20 65 6c 73 65 20 7b 0a 09 09 6d 61 6e 65 72 72 else {...manerr
7790: 6f 72 20 22 75 6e 65 78 70 65 63 74 65 64 20 2e or "unexpected .
77a0: 44 53 20 66 6f 72 6d 61 74 3a 5c 6e 5b 65 78 70 DS format:\n[exp
77b0: 61 6e 64 2d 6e 65 78 74 2d 74 65 78 74 20 32 5d and-next-text 2]
77c0: 22 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 72 65 ".. }.. re
77d0: 74 75 72 6e 0a 09 7d 0a 09 2e 43 53 20 7b 0a 09 turn..}...CS {..
77e0: 20 20 20 20 69 66 20 7b 5b 6e 65 78 74 2d 6f 70 if {[next-op
77f0: 2d 69 73 20 2e 74 61 20 72 65 73 74 5d 7d 20 7b -is .ta rest]} {
7800: 0a 09 09 23 20 3f 3f 3f 0a 09 20 20 20 20 7d 0a ...# ???.. }.
7810: 09 20 20 20 20 69 66 20 7b 5b 6d 61 74 63 68 2d . if {[match-
7820: 74 65 78 74 20 40 73 74 75 66 66 20 2e 43 45 5d text @stuff .CE]
7830: 7d 20 7b 0a 09 09 6d 61 6e 2d 70 75 74 73 20 3c } {...man-puts <
7840: 70 72 65 3e 24 73 74 75 66 66 3c 2f 70 72 65 3e pre>$stuff</pre>
7850: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 .. } else {..
7860: 09 6d 61 6e 65 72 72 6f 72 20 22 75 6e 65 78 70 .manerror "unexp
7870: 65 63 74 65 64 20 2e 43 53 20 66 6f 72 6d 61 74 ected .CS format
7880: 3a 5c 6e 5b 65 78 70 61 6e 64 2d 6e 65 78 74 2d :\n[expand-next-
7890: 74 65 78 74 20 32 5d 22 0a 09 20 20 20 20 7d 0a text 2]".. }.
78a0: 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 09 . return..}..
78b0: 2e 6e 66 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b .nf {.. if {[
78c0: 6d 61 74 63 68 2d 74 65 78 74 20 40 6d 6f 72 65 match-text @more
78d0: 20 2e 66 69 5d 7d 20 7b 0a 09 09 66 6f 72 65 61 .fi]} {...forea
78e0: 63 68 20 6d 6f 72 65 20 5b 73 70 6c 69 74 20 24 ch more [split $
78f0: 6d 6f 72 65 20 5c 6e 5d 20 7b 0a 09 09 20 20 20 more \n] {...
7900: 20 6d 61 6e 2d 70 75 74 73 20 24 6d 6f 72 65 3c man-puts $more<
7910: 62 72 3e 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 br>...}.. } e
7920: 6c 73 65 69 66 20 7b 5b 6d 61 74 63 68 2d 74 65 lseif {[match-te
7930: 78 74 20 2e 52 53 20 40 6d 6f 72 65 20 2e 52 45 xt .RS @more .RE
7940: 20 2e 66 69 5d 7d 20 7b 0a 09 09 6d 61 6e 2d 70 .fi]} {...man-p
7950: 75 74 73 20 3c 64 6c 3e 3c 64 64 3e 0a 09 09 66 uts <dl><dd>...f
7960: 6f 72 65 61 63 68 20 6d 6f 72 65 20 5b 73 70 6c oreach more [spl
7970: 69 74 20 24 6d 6f 72 65 20 5c 6e 5d 20 7b 0a 09 it $more \n] {..
7980: 09 20 20 20 20 6d 61 6e 2d 70 75 74 73 20 24 6d . man-puts $m
7990: 6f 72 65 3c 62 72 3e 0a 09 09 7d 0a 09 09 6d 61 ore<br>...}...ma
79a0: 6e 2d 70 75 74 73 20 3c 2f 64 6c 3e 0a 09 20 20 n-puts </dl>..
79b0: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6d 61 74 } elseif {[mat
79c0: 63 68 2d 74 65 78 74 20 2e 52 53 20 40 6d 6f 72 ch-text .RS @mor
79d0: 65 20 2e 52 53 20 40 6d 6f 72 65 32 20 2e 52 45 e .RS @more2 .RE
79e0: 20 2e 52 45 20 2e 66 69 5d 7d 20 7b 0a 09 09 6d .RE .fi]} {...m
79f0: 61 6e 2d 70 75 74 73 20 3c 64 6c 3e 3c 64 64 3e an-puts <dl><dd>
7a00: 0a 09 09 66 6f 72 65 61 63 68 20 6d 6f 72 65 20 ...foreach more
7a10: 5b 73 70 6c 69 74 20 24 6d 6f 72 65 20 5c 6e 5d [split $more \n]
7a20: 20 7b 0a 09 09 20 20 20 20 6d 61 6e 2d 70 75 74 {... man-put
7a30: 73 20 24 6d 6f 72 65 3c 62 72 3e 0a 09 09 7d 0a s $more<br>...}.
7a40: 09 09 6d 61 6e 2d 70 75 74 73 20 3c 64 6c 3e 3c ..man-puts <dl><
7a50: 64 64 3e 0a 09 09 66 6f 72 65 61 63 68 20 6d 6f dd>...foreach mo
7a60: 72 65 32 20 5b 73 70 6c 69 74 20 24 6d 6f 72 65 re2 [split $more
7a70: 32 20 5c 6e 5d 20 7b 0a 09 09 20 20 20 20 6d 61 2 \n] {... ma
7a80: 6e 2d 70 75 74 73 20 24 6d 6f 72 65 32 3c 62 72 n-puts $more2<br
7a90: 3e 0a 09 09 7d 0a 09 09 6d 61 6e 2d 70 75 74 73 >...}...man-puts
7aa0: 20 3c 2f 64 6c 3e 3c 2f 64 6c 3e 0a 09 20 20 20 </dl></dl>..
7ab0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6d 61 74 63 } elseif {[matc
7ac0: 68 2d 74 65 78 74 20 2e 52 53 20 40 6d 6f 72 65 h-text .RS @more
7ad0: 20 2e 52 53 20 40 6d 6f 72 65 32 20 2e 52 45 20 .RS @more2 .RE
7ae0: 40 6d 6f 72 65 33 20 2e 52 45 20 2e 66 69 5d 7d @more3 .RE .fi]}
7af0: 20 7b 0a 09 09 6d 61 6e 2d 70 75 74 73 20 3c 64 {...man-puts <d
7b00: 6c 3e 3c 64 64 3e 0a 09 09 66 6f 72 65 61 63 68 l><dd>...foreach
7b10: 20 6d 6f 72 65 20 5b 73 70 6c 69 74 20 24 6d 6f more [split $mo
7b20: 72 65 20 5c 6e 5d 20 7b 0a 09 09 20 20 20 20 6d re \n] {... m
7b30: 61 6e 2d 70 75 74 73 20 24 6d 6f 72 65 3c 62 72 an-puts $more<br
7b40: 3e 0a 09 09 7d 0a 09 09 6d 61 6e 2d 70 75 74 73 >...}...man-puts
7b50: 20 3c 64 6c 3e 3c 64 64 3e 0a 09 09 66 6f 72 65 <dl><dd>...fore
7b60: 61 63 68 20 6d 6f 72 65 32 20 5b 73 70 6c 69 74 ach more2 [split
7b70: 20 24 6d 6f 72 65 32 20 5c 6e 5d 20 7b 0a 09 09 $more2 \n] {...
7b80: 20 20 20 20 6d 61 6e 2d 70 75 74 73 20 24 6d 6f man-puts $mo
7b90: 72 65 32 3c 62 72 3e 0a 09 09 7d 0a 09 09 6d 61 re2<br>...}...ma
7ba0: 6e 2d 70 75 74 73 20 3c 2f 64 6c 3e 3c 64 64 3e n-puts </dl><dd>
7bb0: 0a 09 09 66 6f 72 65 61 63 68 20 6d 6f 72 65 33 ...foreach more3
7bc0: 20 5b 73 70 6c 69 74 20 24 6d 6f 72 65 33 20 5c [split $more3 \
7bd0: 6e 5d 20 7b 0a 09 09 20 20 20 20 6d 61 6e 2d 70 n] {... man-p
7be0: 75 74 73 20 24 6d 6f 72 65 33 3c 62 72 3e 0a 09 uts $more3<br>..
7bf0: 09 7d 0a 09 09 6d 61 6e 2d 70 75 74 73 20 3c 2f .}...man-puts </
7c00: 64 6c 3e 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 dl>.. } elsei
7c10: 66 20 7b 5b 6d 61 74 63 68 2d 74 65 78 74 20 2e f {[match-text .
7c20: 73 70 20 2e 52 53 20 40 6d 6f 72 65 20 2e 52 53 sp .RS @more .RS
7c30: 20 40 6d 6f 72 65 32 20 2e 73 70 20 2e 52 45 20 @more2 .sp .RE
7c40: 2e 52 45 20 2e 66 69 5d 7d 20 7b 0a 09 09 6d 61 .RE .fi]} {...ma
7c50: 6e 2d 70 75 74 73 20 3c 70 3e 3c 64 6c 3e 3c 64 n-puts <p><dl><d
7c60: 64 3e 0a 09 09 66 6f 72 65 61 63 68 20 6d 6f 72 d>...foreach mor
7c70: 65 20 5b 73 70 6c 69 74 20 24 6d 6f 72 65 20 5c e [split $more \
7c80: 6e 5d 20 7b 0a 09 09 20 20 20 20 6d 61 6e 2d 70 n] {... man-p
7c90: 75 74 73 20 24 6d 6f 72 65 3c 62 72 3e 0a 09 09 uts $more<br>...
7ca0: 7d 0a 09 09 6d 61 6e 2d 70 75 74 73 20 3c 64 6c }...man-puts <dl
7cb0: 3e 3c 64 64 3e 0a 09 09 66 6f 72 65 61 63 68 20 ><dd>...foreach
7cc0: 6d 6f 72 65 32 20 5b 73 70 6c 69 74 20 24 6d 6f more2 [split $mo
7cd0: 72 65 32 20 5c 6e 5d 20 7b 0a 09 09 20 20 20 20 re2 \n] {...
7ce0: 6d 61 6e 2d 70 75 74 73 20 24 6d 6f 72 65 32 3c man-puts $more2<
7cf0: 62 72 3e 0a 09 09 7d 0a 09 09 6d 61 6e 2d 70 75 br>...}...man-pu
7d00: 74 73 20 3c 2f 64 6c 3e 3c 2f 64 6c 3e 3c 70 3e ts </dl></dl><p>
7d10: 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b .. } elseif {
7d20: 5b 6d 61 74 63 68 2d 74 65 78 74 20 2e 52 53 20 [match-text .RS
7d30: 2e 73 70 20 40 6d 6f 72 65 20 2e 73 70 20 2e 52 .sp @more .sp .R
7d40: 45 20 2e 66 69 5d 7d 20 7b 0a 09 09 6d 61 6e 2d E .fi]} {...man-
7d50: 70 75 74 73 20 3c 70 3e 3c 64 6c 3e 3c 64 64 3e puts <p><dl><dd>
7d60: 0a 09 09 66 6f 72 65 61 63 68 20 6d 6f 72 65 20 ...foreach more
7d70: 5b 73 70 6c 69 74 20 24 6d 6f 72 65 20 5c 6e 5d [split $more \n]
7d80: 20 7b 0a 09 09 20 20 20 20 6d 61 6e 2d 70 75 74 {... man-put
7d90: 73 20 24 6d 6f 72 65 3c 62 72 3e 0a 09 09 7d 0a s $more<br>...}.
7da0: 09 09 6d 61 6e 2d 70 75 74 73 20 3c 2f 64 6c 3e ..man-puts </dl>
7db0: 3c 70 3e 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 <p>.. } else
7dc0: 7b 0a 09 09 6d 61 6e 65 72 72 6f 72 20 22 69 67 {...manerror "ig
7dd0: 6e 6f 72 69 6e 67 20 24 6c 69 6e 65 22 0a 09 20 noring $line"..
7de0: 20 20 20 7d 0a 09 7d 0a 09 2e 52 45 20 2d 20 2e }..}...RE - .
7df0: 44 45 20 2d 20 2e 43 45 20 7b 0a 09 20 20 20 20 DE - .CE {..
7e00: 6d 61 6e 65 72 72 6f 72 20 22 75 6e 65 78 70 65 manerror "unexpe
7e10: 63 74 65 64 20 24 63 6f 64 65 22 0a 09 20 20 20 cted $code"..
7e20: 20 72 65 74 75 72 6e 0a 09 7d 0a 09 2e 74 61 20 return..}...ta
7e30: 2d 20 2e 66 69 20 2d 20 2e 6e 61 20 2d 20 2e 61 - .fi - .na - .a
7e40: 64 20 2d 20 2e 55 4c 20 2d 20 2e 69 65 20 2d 20 d - .UL - .ie -
7e50: 2e 65 6c 20 2d 20 2e 6e 65 20 7b 0a 09 20 20 20 .el - .ne {..
7e60: 20 6d 61 6e 65 72 72 6f 72 20 22 69 67 6e 6f 72 manerror "ignor
7e70: 69 6e 67 20 24 6c 69 6e 65 22 0a 09 7d 0a 09 64 ing $line"..}..d
7e80: 65 66 61 75 6c 74 20 7b 0a 09 20 20 20 20 6d 61 efault {.. ma
7e90: 6e 65 72 72 6f 72 20 22 75 6e 72 65 63 6f 67 6e nerror "unrecogn
7ea0: 69 7a 65 64 20 66 6f 72 6d 61 74 20 64 69 72 65 ized format dire
7eb0: 63 74 69 76 65 3a 20 24 6c 69 6e 65 22 0a 09 7d ctive: $line"..}
7ec0: 0a 20 20 20 20 7d 0a 7d 0a 0c 0a 23 23 0a 23 23 . }.}...##.##
7ed0: 20 6d 65 72 67 65 20 63 6f 70 79 72 69 67 68 74 merge copyright
7ee0: 20 6c 69 73 74 69 6e 67 73 0a 23 23 0a 70 72 6f listings.##.pro
7ef0: 63 20 6d 65 72 67 65 2d 63 6f 70 79 72 69 67 68 c merge-copyrigh
7f00: 74 73 20 7b 6c 31 20 6c 32 7d 20 7b 0a 20 20 20 ts {l1 l2} {.
7f10: 20 73 65 74 20 6d 65 72 67 65 20 7b 7d 0a 20 20 set merge {}.
7f20: 20 20 73 65 74 20 72 65 31 20 7b 5e 43 6f 70 79 set re1 {^Copy
7f30: 72 69 67 68 74 20 2b 28 3f 3a 5c 28 63 5c 29 7c right +(?:\(c\)|
7f40: 5c 5c 5c 28 63 6f 7c c2 a9 7c 26 63 6f 70 79 3b \\\(co|©|©
7f50: 29 20 2b 28 5c 77 2e 2a 3f 29 28 3f 3a 61 6c 6c ) +(\w.*?)(?:all
7f60: 20 72 69 67 68 74 73 20 72 65 73 65 72 76 65 64 rights reserved
7f70: 29 3f 28 3f 3a 5c 2e 20 29 2a 24 7d 0a 20 20 20 )?(?:\. )*$}.
7f80: 20 73 65 74 20 72 65 32 20 7b 5e 28 5c 64 2b 29 set re2 {^(\d+)
7f90: 20 2b 28 3f 3a 62 79 20 2b 29 3f 28 5c 77 2e 2a +(?:by +)?(\w.*
7fa0: 29 24 7d 20 20 20 20 20 20 20 20 20 3b 23 20 64 )$} ;# d
7fb0: 61 74 65 20 77 68 6f 0a 20 20 20 20 73 65 74 20 ate who. set
7fc0: 72 65 33 20 7b 5e 28 5c 64 2b 29 2d 28 5c 64 2b re3 {^(\d+)-(\d+
7fd0: 29 20 2b 28 3f 3a 62 79 20 2b 29 3f 28 5c 77 2e ) +(?:by +)?(\w.
7fe0: 2a 29 24 7d 20 20 20 3b 23 20 66 72 6f 6d 20 74 *)$} ;# from t
7ff0: 6f 20 77 68 6f 0a 20 20 20 20 73 65 74 20 72 65 o who. set re
8000: 34 20 7b 5e 28 5c 64 2b 29 2c 20 2a 28 5c 64 2b 4 {^(\d+), *(\d+
8010: 29 20 2b 28 3f 3a 62 79 20 2b 29 3f 28 5c 77 2e ) +(?:by +)?(\w.
8020: 2a 29 24 7d 20 3b 23 20 64 61 74 65 31 20 64 61 *)$} ;# date1 da
8030: 74 65 32 20 77 68 6f 0a 20 20 20 20 66 6f 72 65 te2 who. fore
8040: 61 63 68 20 63 6f 70 79 72 69 67 68 74 20 5b 63 ach copyright [c
8050: 6f 6e 63 61 74 20 24 6c 31 20 24 6c 32 5d 20 7b oncat $l1 $l2] {
8060: 0a 09 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 6e ..if {[regexp -n
8070: 6f 63 61 73 65 20 2d 2d 20 24 72 65 31 20 24 63 ocase -- $re1 $c
8080: 6f 70 79 72 69 67 68 74 20 2d 3e 20 69 6e 66 6f opyright -> info
8090: 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 69 6e ]} {.. set in
80a0: 66 6f 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 72 fo [string trimr
80b0: 69 67 68 74 20 24 69 6e 66 6f 20 22 2e 20 22 5d ight $info ". "]
80c0: 20 3b 20 23 20 72 65 6d 6f 76 65 20 65 78 74 72 ; # remove extr
80d0: 61 20 70 65 72 69 6f 64 0a 09 20 20 20 20 69 66 a period.. if
80e0: 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 24 72 65 {[regexp -- $re
80f0: 32 20 24 69 6e 66 6f 20 2d 3e 20 64 61 74 65 20 2 $info -> date
8100: 77 68 6f 5d 7d 20 7b 0a 09 09 6c 61 70 70 65 6e who]} {...lappen
8110: 64 20 64 61 74 65 73 28 24 77 68 6f 29 20 24 64 d dates($who) $d
8120: 61 74 65 0a 09 09 63 6f 6e 74 69 6e 75 65 0a 09 ate...continue..
8130: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 72 } elseif {[r
8140: 65 67 65 78 70 20 2d 2d 20 24 72 65 33 20 24 69 egexp -- $re3 $i
8150: 6e 66 6f 20 2d 3e 20 66 72 6f 6d 20 74 6f 20 77 nfo -> from to w
8160: 68 6f 5d 7d 20 7b 0a 09 09 66 6f 72 20 7b 73 65 ho]} {...for {se
8170: 74 20 64 61 74 65 20 24 66 72 6f 6d 7d 20 7b 24 t date $from} {$
8180: 64 61 74 65 20 3c 3d 20 24 74 6f 7d 20 7b 69 6e date <= $to} {in
8190: 63 72 20 64 61 74 65 7d 20 7b 0a 09 09 20 20 20 cr date} {...
81a0: 20 6c 61 70 70 65 6e 64 20 64 61 74 65 73 28 24 lappend dates($
81b0: 77 68 6f 29 20 24 64 61 74 65 0a 09 09 7d 0a 09 who) $date...}..
81c0: 09 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 7d .continue.. }
81d0: 20 65 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70 elseif {[regexp
81e0: 20 2d 2d 20 24 72 65 33 20 24 69 6e 66 6f 20 2d -- $re3 $info -
81f0: 3e 20 64 61 74 65 31 20 64 61 74 65 32 20 77 68 > date1 date2 wh
8200: 6f 5d 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 o]} {...lappend
8210: 64 61 74 65 73 28 24 77 68 6f 29 20 24 64 61 74 dates($who) $dat
8220: 65 31 20 24 64 61 74 65 32 0a 09 09 63 6f 6e 74 e1 $date2...cont
8230: 69 6e 75 65 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 inue.. }..}..
8240: 70 75 74 73 20 22 6f 6f 70 73 3a 20 24 63 6f 70 puts "oops: $cop
8250: 79 72 69 67 68 74 22 0a 20 20 20 20 7d 0a 20 20 yright". }.
8260: 20 20 66 6f 72 65 61 63 68 20 77 68 6f 20 5b 61 foreach who [a
8270: 72 72 61 79 20 6e 61 6d 65 73 20 64 61 74 65 73 rray names dates
8280: 5d 20 7b 0a 09 73 65 74 20 6c 69 73 74 20 5b 6c ] {..set list [l
8290: 73 6f 72 74 20 2d 64 69 63 74 69 6f 6e 61 72 79 sort -dictionary
82a0: 20 24 64 61 74 65 73 28 24 77 68 6f 29 5d 0a 09 $dates($who)]..
82b0: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 if {[llength $li
82c0: 73 74 5d 20 3d 3d 20 31 20 7c 7c 20 5b 6c 69 6e st] == 1 || [lin
82d0: 64 65 78 20 24 6c 69 73 74 20 30 5d 20 65 71 20 dex $list 0] eq
82e0: 5b 6c 72 61 6e 67 65 20 24 6c 69 73 74 20 65 6e [lrange $list en
82f0: 64 20 65 6e 64 5d 7d 20 7b 0a 09 20 20 20 20 6c d end]} {.. l
8300: 61 70 70 65 6e 64 20 6d 65 72 67 65 20 22 43 6f append merge "Co
8310: 70 79 72 69 67 68 74 20 26 63 6f 70 79 3b 20 5b pyright © [
8320: 6c 69 6e 64 65 78 20 24 6c 69 73 74 20 30 5d 20 lindex $list 0]
8330: 24 77 68 6f 22 0a 09 7d 20 65 6c 73 65 20 7b 0a $who"..} else {.
8340: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 65 72 . lappend mer
8350: 67 65 20 22 43 6f 70 79 72 69 67 68 74 20 26 63 ge "Copyright &c
8360: 6f 70 79 3b 20 5b 6c 69 6e 64 65 78 20 24 6c 69 opy; [lindex $li
8370: 73 74 20 30 5d 2d 5b 6c 72 61 6e 67 65 20 24 6c st 0]-[lrange $l
8380: 69 73 74 20 65 6e 64 20 65 6e 64 5d 20 24 77 68 ist end end] $wh
8390: 6f 22 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 o"..}. }.
83a0: 72 65 74 75 72 6e 20 5b 6c 73 6f 72 74 20 2d 64 return [lsort -d
83b0: 69 63 74 69 6f 6e 61 72 79 20 24 6d 65 72 67 65 ictionary $merge
83c0: 5d 0a 7d 0a 0c 0a 23 23 0a 23 23 20 66 6f 72 65 ].}...##.## fore
83d0: 61 63 68 20 6f 66 20 74 68 65 20 6d 61 6e 20 70 ach of the man p
83e0: 61 67 65 73 20 69 6e 20 74 68 65 20 73 65 63 74 ages in the sect
83f0: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 62 79 ion specified by
8400: 0a 23 23 20 73 65 63 74 69 6f 6e 44 65 73 63 72 .## sectionDescr
8410: 69 70 74 6f 72 2c 20 63 6f 6e 76 65 72 74 20 6d iptor, convert m
8420: 61 6e 70 61 67 65 73 20 69 6e 74 6f 20 68 79 70 anpages into hyp
8430: 65 72 74 65 78 74 20 69 6e 0a 23 23 20 74 68 65 ertext in.## the
8440: 20 64 69 72 65 63 74 6f 72 79 20 73 70 65 63 69 directory speci
8450: 66 69 65 64 20 62 79 20 6f 75 74 70 75 74 44 69 fied by outputDi
8460: 72 2e 0a 23 23 0a 70 72 6f 63 20 6d 61 6b 65 2d r..##.proc make-
8470: 6d 61 6e 70 61 67 65 2d 73 65 63 74 69 6f 6e 20 manpage-section
8480: 7b 6f 75 74 70 75 74 44 69 72 20 73 65 63 74 69 {outputDir secti
8490: 6f 6e 44 65 73 63 72 69 70 74 6f 72 7d 20 7b 0a onDescriptor} {.
84a0: 20 20 20 20 67 6c 6f 62 61 6c 20 6d 61 6e 75 61 global manua
84b0: 6c 20 6f 76 65 72 61 6c 6c 5f 74 69 74 6c 65 20 l overall_title
84c0: 74 63 6c 74 6b 64 65 73 63 20 76 65 72 62 6f 73 tcltkdesc verbos
84d0: 65 0a 20 20 20 20 67 6c 6f 62 61 6c 20 65 78 63 e. global exc
84e0: 6c 75 64 65 64 5f 70 61 67 65 73 20 66 6f 72 63 luded_pages forc
84f0: 65 64 5f 69 6e 64 65 78 5f 70 61 67 65 73 20 70 ed_index_pages p
8500: 72 6f 63 65 73 73 5f 66 69 72 73 74 5f 70 61 74 rocess_first_pat
8510: 74 65 72 6e 73 0a 0a 20 20 20 20 73 65 74 20 4c terns.. set L
8520: 51 20 5c 75 32 30 31 43 0a 20 20 20 20 73 65 74 Q \u201C. set
8530: 20 52 51 20 5c 75 32 30 31 44 0a 0a 20 20 20 20 RQ \u201D..
8540: 6c 61 73 73 69 67 6e 20 24 73 65 63 74 69 6f 6e lassign $section
8550: 44 65 73 63 72 69 70 74 6f 72 20 5c 0a 09 6d 61 Descriptor \..ma
8560: 6e 75 61 6c 28 77 69 6e 67 2d 67 6c 6f 62 29 20 nual(wing-glob)
8570: 5c 0a 09 6d 61 6e 75 61 6c 28 77 69 6e 67 2d 6e \..manual(wing-n
8580: 61 6d 65 29 20 5c 0a 09 6d 61 6e 75 61 6c 28 77 ame) \..manual(w
8590: 69 6e 67 2d 66 69 6c 65 29 20 5c 0a 09 6d 61 6e ing-file) \..man
85a0: 75 61 6c 28 77 69 6e 67 2d 64 65 73 63 72 69 70 ual(wing-descrip
85b0: 74 69 6f 6e 29 0a 20 20 20 20 73 65 74 20 6d 61 tion). set ma
85c0: 6e 75 61 6c 28 77 69 6e 67 2d 63 6f 70 79 72 69 nual(wing-copyri
85d0: 67 68 74 73 29 20 7b 7d 0a 20 20 20 20 6d 61 6b ghts) {}. mak
85e0: 65 64 69 72 68 69 65 72 20 24 6f 75 74 70 75 74 edirhier $output
85f0: 44 69 72 2f 24 6d 61 6e 75 61 6c 28 77 69 6e 67 Dir/$manual(wing
8600: 2d 66 69 6c 65 29 0a 20 20 20 20 73 65 74 20 6d -file). set m
8610: 61 6e 75 61 6c 28 77 69 6e 67 2d 74 6f 63 2d 66 anual(wing-toc-f
8620: 70 29 20 5b 6f 70 65 6e 20 24 6f 75 74 70 75 74 p) [open $output
8630: 44 69 72 2f 24 6d 61 6e 75 61 6c 28 77 69 6e 67 Dir/$manual(wing
8640: 2d 66 69 6c 65 29 2f 5b 69 6e 64 65 78 66 69 6c -file)/[indexfil
8650: 65 5d 20 77 5d 0a 20 20 20 20 66 63 6f 6e 66 69 e] w]. fconfi
8660: 67 75 72 65 20 24 6d 61 6e 75 61 6c 28 77 69 6e gure $manual(win
8670: 67 2d 74 6f 63 2d 66 70 29 20 2d 74 72 61 6e 73 g-toc-fp) -trans
8680: 6c 61 74 69 6f 6e 20 6c 66 20 2d 65 6e 63 6f 64 lation lf -encod
8690: 69 6e 67 20 75 74 66 2d 38 0a 20 20 20 20 23 20 ing utf-8. #
86a0: 77 68 69 73 74 6c 65 0a 20 20 20 20 70 75 74 73 whistle. puts
86b0: 20 73 74 64 65 72 72 20 22 73 63 61 6e 6e 69 6e stderr "scannin
86c0: 67 20 73 65 63 74 69 6f 6e 20 24 6d 61 6e 75 61 g section $manua
86d0: 6c 28 77 69 6e 67 2d 6e 61 6d 65 29 22 0a 20 20 l(wing-name)".
86e0: 20 20 23 20 70 75 74 20 74 68 65 20 65 6e 74 72 # put the entr
86f0: 79 20 66 6f 72 20 74 68 69 73 20 73 65 63 74 69 y for this secti
8700: 6f 6e 20 69 6e 74 6f 20 74 68 65 20 73 68 6f 72 on into the shor
8710: 74 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 74 65 t table of conte
8720: 6e 74 73 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 nts. if {[reg
8730: 65 78 70 20 7b 5e 28 2e 2b 29 2c 20 76 65 72 73 exp {^(.+), vers
8740: 69 6f 6e 20 28 2e 2b 29 24 7d 20 24 6d 61 6e 75 ion (.+)$} $manu
8750: 61 6c 28 77 69 6e 67 2d 6e 61 6d 65 29 20 2d 3e al(wing-name) ->
8760: 20 6e 61 6d 65 20 76 65 72 73 69 6f 6e 5d 7d 20 name version]}
8770: 7b 0a 09 70 75 74 73 20 24 6d 61 6e 75 61 6c 28 {..puts $manual(
8780: 73 68 6f 72 74 2d 74 6f 63 2d 66 70 29 20 22 3c short-toc-fp) "<
8790: 64 74 3e 3c 61 20 68 72 65 66 3d 5c 22 24 6d 61 dt><a href=\"$ma
87a0: 6e 75 61 6c 28 77 69 6e 67 2d 66 69 6c 65 29 2f nual(wing-file)/
87b0: 5b 69 6e 64 65 78 66 69 6c 65 5d 5c 22 20 74 69 [indexfile]\" ti
87c0: 74 6c 65 3d 5c 22 76 65 72 73 69 6f 6e 20 24 76 tle=\"version $v
87d0: 65 72 73 69 6f 6e 5c 22 3e 24 6e 61 6d 65 3c 2f ersion\">$name</
87e0: 61 3e 3c 2f 64 74 3e 3c 64 64 3e 24 6d 61 6e 75 a></dt><dd>$manu
87f0: 61 6c 28 77 69 6e 67 2d 64 65 73 63 72 69 70 74 al(wing-descript
8800: 69 6f 6e 29 3c 2f 64 64 3e 22 0a 20 20 20 20 7d ion)</dd>". }
8810: 20 65 6c 73 65 20 7b 0a 09 70 75 74 73 20 24 6d else {..puts $m
8820: 61 6e 75 61 6c 28 73 68 6f 72 74 2d 74 6f 63 2d anual(short-toc-
8830: 66 70 29 20 22 3c 64 74 3e 3c 61 20 68 72 65 66 fp) "<dt><a href
8840: 3d 5c 22 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d =\"$manual(wing-
8850: 66 69 6c 65 29 2f 5b 69 6e 64 65 78 66 69 6c 65 file)/[indexfile
8860: 5d 5c 22 3e 24 6d 61 6e 75 61 6c 28 77 69 6e 67 ]\">$manual(wing
8870: 2d 6e 61 6d 65 29 3c 2f 61 3e 3c 2f 64 74 3e 3c -name)</a></dt><
8880: 64 64 3e 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d dd>$manual(wing-
8890: 64 65 73 63 72 69 70 74 69 6f 6e 29 3c 2f 64 64 description)</dd
88a0: 3e 22 0a 20 20 20 20 7d 0a 20 20 20 20 23 20 69 >". }. # i
88b0: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 77 69 nitialize the wi
88c0: 6e 67 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 74 ng table of cont
88d0: 65 6e 74 73 0a 20 20 20 20 70 75 74 73 20 24 6d ents. puts $m
88e0: 61 6e 75 61 6c 28 77 69 6e 67 2d 74 6f 63 2d 66 anual(wing-toc-f
88f0: 70 29 20 5b 68 74 6d 6c 68 65 61 64 20 24 6d 61 p) [htmlhead $ma
8900: 6e 75 61 6c 28 77 69 6e 67 2d 6e 61 6d 65 29 20 nual(wing-name)
8910: 5c 0a 09 20 20 20 20 24 6d 61 6e 75 61 6c 28 77 \.. $manual(w
8920: 69 6e 67 2d 6e 61 6d 65 29 20 24 6f 76 65 72 61 ing-name) $overa
8930: 6c 6c 5f 74 69 74 6c 65 20 22 2e 2e 2f 5b 69 6e ll_title "../[in
8940: 64 65 78 66 69 6c 65 5d 22 5d 0a 20 20 20 20 23 dexfile]"]. #
8950: 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 initialize the
8960: 73 68 6f 72 74 20 74 61 62 6c 65 20 6f 66 20 63 short table of c
8970: 6f 6e 74 65 6e 74 73 20 66 6f 72 20 74 68 69 73 ontents for this
8980: 20 73 65 63 74 69 6f 6e 0a 20 20 20 20 73 65 74 section. set
8990: 20 6d 61 6e 75 61 6c 28 77 69 6e 67 2d 74 6f 63 manual(wing-toc
89a0: 29 20 7b 7d 0a 20 20 20 20 23 20 69 6e 69 74 69 ) {}. # initi
89b0: 61 6c 69 7a 65 20 74 68 65 20 6d 61 6e 20 64 69 alize the man di
89c0: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 69 73 rectory for this
89d0: 20 73 65 63 74 69 6f 6e 0a 20 20 20 20 6d 61 6b section. mak
89e0: 65 64 69 72 68 69 65 72 20 24 6f 75 74 70 75 74 edirhier $output
89f0: 44 69 72 2f 24 6d 61 6e 75 61 6c 28 77 69 6e 67 Dir/$manual(wing
8a00: 2d 66 69 6c 65 29 0a 20 20 20 20 23 20 69 6e 69 -file). # ini
8a10: 74 69 61 6c 69 7a 65 20 74 68 65 20 6c 6f 6e 67 tialize the long
8a20: 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 74 65 6e table of conten
8a30: 74 73 20 66 6f 72 20 74 68 69 73 20 73 65 63 74 ts for this sect
8a40: 69 6f 6e 0a 20 20 20 20 73 65 74 20 6d 61 6e 75 ion. set manu
8a50: 61 6c 28 6c 6f 6e 67 2d 74 6f 63 2d 6e 29 20 31 al(long-toc-n) 1
8a60: 0a 20 20 20 20 23 20 67 65 74 20 74 68 65 20 6d . # get the m
8a70: 61 6e 75 61 6c 20 70 61 67 65 73 20 66 6f 72 20 anual pages for
8a80: 74 68 69 73 20 73 65 63 74 69 6f 6e 0a 20 20 20 this section.
8a90: 20 73 65 74 20 6d 61 6e 75 61 6c 28 70 61 67 65 set manual(page
8aa0: 73 29 20 5b 6c 73 6f 72 74 20 2d 64 69 63 74 69 s) [lsort -dicti
8ab0: 6f 6e 61 72 79 20 5b 67 6c 6f 62 20 2d 6e 6f 63 onary [glob -noc
8ac0: 6f 6d 70 6c 61 69 6e 20 24 6d 61 6e 75 61 6c 28 omplain $manual(
8ad0: 77 69 6e 67 2d 67 6c 6f 62 29 5d 5d 0a 20 20 20 wing-glob)]].
8ae0: 20 23 20 53 6f 6d 65 20 70 61 67 65 73 20 68 61 # Some pages ha
8af0: 76 65 20 74 6f 20 67 6f 20 66 69 72 73 74 20 73 ve to go first s
8b00: 6f 20 74 68 61 74 20 74 68 65 69 72 20 6c 69 6e o that their lin
8b10: 6b 73 20 6f 76 65 72 72 69 64 65 20 6f 74 68 65 ks override othe
8b20: 72 73 0a 20 20 20 20 66 6f 72 65 61 63 68 20 70 rs. foreach p
8b30: 61 74 20 24 70 72 6f 63 65 73 73 5f 66 69 72 73 at $process_firs
8b40: 74 5f 70 61 74 74 65 72 6e 73 20 7b 0a 09 73 65 t_patterns {..se
8b50: 74 20 6e 20 5b 6c 73 65 61 72 63 68 20 2d 67 6c t n [lsearch -gl
8b60: 6f 62 20 24 6d 61 6e 75 61 6c 28 70 61 67 65 73 ob $manual(pages
8b70: 29 20 24 70 61 74 5d 0a 09 69 66 20 7b 24 6e 20 ) $pat]..if {$n
8b80: 3e 3d 20 30 7d 20 7b 0a 09 20 20 20 20 73 65 74 >= 0} {.. set
8b90: 20 66 20 5b 6c 69 6e 64 65 78 20 24 6d 61 6e 75 f [lindex $manu
8ba0: 61 6c 28 70 61 67 65 73 29 20 24 6e 5d 0a 09 20 al(pages) $n]..
8bb0: 20 20 20 70 75 74 73 20 73 74 64 65 72 72 20 22 puts stderr "
8bc0: 73 68 75 66 66 6c 69 6e 67 20 5b 66 69 6c 65 20 shuffling [file
8bd0: 74 61 69 6c 20 24 66 5d 20 74 6f 20 66 72 6f 6e tail $f] to fron
8be0: 74 20 6f 66 20 70 72 6f 63 65 73 73 69 6e 67 20 t of processing
8bf0: 71 75 65 75 65 22 0a 09 20 20 20 20 73 65 74 20 queue".. set
8c00: 6d 61 6e 75 61 6c 28 70 61 67 65 73 29 20 5c 0a manual(pages) \.
8c10: 09 09 5b 6c 69 6e 73 65 72 74 20 5b 6c 72 65 70 ..[linsert [lrep
8c20: 6c 61 63 65 20 24 6d 61 6e 75 61 6c 28 70 61 67 lace $manual(pag
8c30: 65 73 29 20 24 6e 20 24 6e 5d 20 30 20 24 66 5d es) $n $n] 0 $f]
8c40: 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 23 20 ..}. }. #
8c50: 73 65 74 20 6d 61 6e 75 61 6c 28 70 61 67 65 73 set manual(pages
8c60: 29 20 5b 6c 72 61 6e 67 65 20 24 6d 61 6e 75 61 ) [lrange $manua
8c70: 6c 28 70 61 67 65 73 29 20 30 20 35 5d 0a 20 20 l(pages) 0 5].
8c80: 20 20 66 6f 72 65 61 63 68 20 6d 61 6e 75 61 6c foreach manual
8c90: 5f 70 61 67 65 20 24 6d 61 6e 75 61 6c 28 70 61 _page $manual(pa
8ca0: 67 65 73 29 20 7b 0a 09 73 65 74 20 6d 61 6e 75 ges) {..set manu
8cb0: 61 6c 28 70 61 67 65 29 20 5b 66 69 6c 65 20 6e al(page) [file n
8cc0: 6f 72 6d 61 6c 69 7a 65 20 24 6d 61 6e 75 61 6c ormalize $manual
8cd0: 5f 70 61 67 65 5d 0a 09 23 20 77 68 69 73 74 6c _page]..# whistl
8ce0: 65 0a 09 69 66 20 7b 24 76 65 72 62 6f 73 65 7d e..if {$verbose}
8cf0: 20 7b 0a 09 20 20 20 20 70 75 74 73 20 73 74 64 {.. puts std
8d00: 65 72 72 20 22 73 63 61 6e 6e 69 6e 67 20 70 61 err "scanning pa
8d10: 67 65 20 24 6d 61 6e 75 61 6c 28 70 61 67 65 29 ge $manual(page)
8d20: 22 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 "..} else {..
8d30: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 puts -nonewline
8d40: 20 73 74 64 65 72 72 20 2e 0a 09 7d 0a 09 73 65 stderr ...}..se
8d50: 74 20 6d 61 6e 75 61 6c 28 74 61 69 6c 29 20 5b t manual(tail) [
8d60: 66 69 6c 65 20 74 61 69 6c 20 24 6d 61 6e 75 61 file tail $manua
8d70: 6c 28 70 61 67 65 29 5d 0a 09 73 65 74 20 6d 61 l(page)]..set ma
8d80: 6e 75 61 6c 28 6e 61 6d 65 29 20 5b 66 69 6c 65 nual(name) [file
8d90: 20 72 6f 6f 74 20 24 6d 61 6e 75 61 6c 28 74 61 root $manual(ta
8da0: 69 6c 29 5d 0a 09 73 65 74 20 6d 61 6e 75 61 6c il)]..set manual
8db0: 28 73 65 63 74 69 6f 6e 29 20 7b 7d 0a 09 69 66 (section) {}..if
8dc0: 20 7b 24 6d 61 6e 75 61 6c 28 6e 61 6d 65 29 20 {$manual(name)
8dd0: 69 6e 20 24 65 78 63 6c 75 64 65 64 5f 70 61 67 in $excluded_pag
8de0: 65 73 7d 20 7b 0a 09 20 20 20 20 23 20 6f 62 73 es} {.. # obs
8df0: 6f 6c 65 74 65 0a 09 20 20 20 20 69 66 20 7b 21 olete.. if {!
8e00: 24 76 65 72 62 6f 73 65 7d 20 7b 0a 09 09 70 75 $verbose} {...pu
8e10: 74 73 20 73 74 64 65 72 72 20 22 22 0a 09 20 20 ts stderr ""..
8e20: 20 20 7d 0a 09 20 20 20 20 6d 61 6e 65 72 72 6f }.. manerro
8e30: 72 20 22 64 69 73 63 61 72 64 69 6e 67 20 24 6d r "discarding $m
8e40: 61 6e 75 61 6c 28 6e 61 6d 65 29 22 0a 09 20 20 anual(name)"..
8e50: 20 20 63 6f 6e 74 69 6e 75 65 0a 09 7d 0a 09 73 continue..}..s
8e60: 65 74 20 6d 61 6e 75 61 6c 28 69 6e 66 70 29 20 et manual(infp)
8e70: 5b 6f 70 65 6e 20 24 6d 61 6e 75 61 6c 28 70 61 [open $manual(pa
8e80: 67 65 29 5d 0a 09 66 63 6f 6e 66 69 67 75 72 65 ge)]..fconfigure
8e90: 20 24 6d 61 6e 75 61 6c 28 69 6e 66 70 29 20 2d $manual(infp) -
8ea0: 65 6e 63 6f 64 69 6e 67 20 75 74 66 2d 38 0a 09 encoding utf-8..
8eb0: 73 65 74 20 6d 61 6e 75 61 6c 28 74 65 78 74 29 set manual(text)
8ec0: 20 7b 7d 0a 09 73 65 74 20 6d 61 6e 75 61 6c 28 {}..set manual(
8ed0: 70 61 72 74 69 61 6c 2d 74 65 78 74 29 20 7b 7d partial-text) {}
8ee0: 0a 09 66 6f 72 65 61 63 68 20 70 20 7b 2e 52 53 ..foreach p {.RS
8ef0: 20 2e 44 53 20 2e 43 53 20 2e 53 4f 7d 20 7b 0a .DS .CS .SO} {.
8f00: 09 20 20 20 20 73 65 74 20 6d 61 6e 75 61 6c 28 . set manual(
8f10: 24 70 29 20 30 0a 09 7d 0a 09 73 65 74 20 6d 61 $p) 0..}..set ma
8f20: 6e 75 61 6c 28 73 74 61 63 6b 29 20 7b 7d 0a 09 nual(stack) {}..
8f30: 73 65 74 20 6d 61 6e 75 61 6c 28 73 65 63 74 69 set manual(secti
8f40: 6f 6e 29 20 7b 7d 0a 09 73 65 74 20 6d 61 6e 75 on) {}..set manu
8f50: 61 6c 28 73 65 63 74 69 6f 6e 2d 74 6f 63 29 20 al(section-toc)
8f60: 7b 7d 0a 09 73 65 74 20 6d 61 6e 75 61 6c 28 73 {}..set manual(s
8f70: 65 63 74 69 6f 6e 2d 74 6f 63 2d 6e 29 20 31 0a ection-toc-n) 1.
8f80: 09 73 65 74 20 6d 61 6e 75 61 6c 28 63 6f 70 79 .set manual(copy
8f90: 72 69 67 68 74 73 29 20 7b 7d 0a 09 6c 61 70 70 rights) {}..lapp
8fa0: 65 6e 64 20 6d 61 6e 75 61 6c 28 61 6c 6c 2d 70 end manual(all-p
8fb0: 61 67 65 73 29 20 24 6d 61 6e 75 61 6c 28 77 69 ages) $manual(wi
8fc0: 6e 67 2d 66 69 6c 65 29 2f 24 6d 61 6e 75 61 6c ng-file)/$manual
8fd0: 28 74 61 69 6c 29 0a 09 6c 61 70 70 65 6e 64 20 (tail)..lappend
8fe0: 6d 61 6e 75 61 6c 28 61 6c 6c 2d 70 61 67 65 2d manual(all-page-
8ff0: 64 6f 6d 61 69 6e 73 29 20 24 6d 61 6e 75 61 6c domains) $manual
9000: 28 77 69 6e 67 2d 6e 61 6d 65 29 0a 09 6d 61 6e (wing-name)..man
9010: 72 65 70 6f 72 74 20 31 30 30 20 24 6d 61 6e 75 report 100 $manu
9020: 61 6c 28 6e 61 6d 65 29 0a 09 77 68 69 6c 65 20 al(name)..while
9030: 7b 5b 67 65 74 73 20 24 6d 61 6e 75 61 6c 28 69 {[gets $manual(i
9040: 6e 66 70 29 20 6c 69 6e 65 5d 20 3e 3d 20 30 7d nfp) line] >= 0}
9050: 20 7b 0a 09 20 20 20 20 6d 61 6e 72 65 70 6f 72 {.. manrepor
9060: 74 20 31 30 30 20 24 6c 69 6e 65 0a 09 20 20 20 t 100 $line..
9070: 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 5b if {[regexp {^[
9080: 60 27 5d 5b 2f 5c 5c 5d 7d 20 24 6c 69 6e 65 5d `'][/\\]} $line]
9090: 7d 20 7b 0a 09 09 69 66 20 7b 5b 72 65 67 65 78 } {...if {[regex
90a0: 70 20 7b 43 6f 70 79 72 69 67 68 74 20 28 3f 3a p {Copyright (?:
90b0: 5c 28 63 5c 29 7c 5c 5c 5c 28 63 6f 29 2e 2a 24 \(c\)|\\\(co).*$
90c0: 7d 20 24 6c 69 6e 65 20 63 6f 70 79 72 69 67 68 } $line copyrigh
90d0: 74 5d 7d 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 t]} {... lapp
90e0: 65 6e 64 20 6d 61 6e 75 61 6c 28 63 6f 70 79 72 end manual(copyr
90f0: 69 67 68 74 73 29 20 24 63 6f 70 79 72 69 67 68 ights) $copyrigh
9100: 74 0a 09 09 7d 0a 09 09 23 20 63 6f 6d 6d 65 6e t...}...# commen
9110: 74 0a 09 09 63 6f 6e 74 69 6e 75 65 0a 09 20 20 t...continue..
9120: 20 20 7d 0a 09 20 20 20 20 69 66 20 7b 22 24 6c }.. if {"$l
9130: 69 6e 65 22 20 65 71 20 7b 27 7d 7d 20 7b 0a 09 ine" eq {'}} {..
9140: 09 23 20 63 6f 6d 6d 65 6e 74 0a 09 09 63 6f 6e .# comment...con
9150: 74 69 6e 75 65 0a 09 20 20 20 20 7d 0a 09 20 20 tinue.. }..
9160: 20 20 69 66 20 7b 21 5b 70 61 72 73 65 2d 64 69 if {![parse-di
9170: 72 65 63 74 69 76 65 20 24 6c 69 6e 65 20 63 6f rective $line co
9180: 64 65 20 72 65 73 74 5d 7d 20 7b 0a 09 09 61 64 de rest]} {...ad
9190: 64 62 75 66 66 65 72 20 24 6c 69 6e 65 0a 09 09 dbuffer $line...
91a0: 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 7d 0a continue.. }.
91b0: 09 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 . switch -exa
91c0: 63 74 20 2d 2d 20 24 63 6f 64 65 20 7b 0a 09 09 ct -- $code {...
91d0: 2e 69 66 20 2d 20 2e 6e 72 20 2d 20 2e 74 69 20 .if - .nr - .ti
91e0: 2d 20 2e 69 6e 20 2d 20 2e 69 65 20 2d 20 2e 65 - .in - .ie - .e
91f0: 6c 20 2d 0a 09 09 2e 61 64 20 2d 20 2e 6e 61 20 l -....ad - .na
9200: 2d 20 2e 73 6f 20 2d 20 2e 6e 65 20 2d 20 2e 41 - .so - .ne - .A
9210: 53 20 2d 20 2e 48 53 20 2d 20 2e 56 45 20 2d 20 S - .HS - .VE -
9220: 2e 56 53 20 2d 20 2e 20 7b 0a 09 09 20 20 20 20 .VS - . {...
9230: 23 20 69 67 6e 6f 72 65 0a 09 09 20 20 20 20 63 # ignore... c
9240: 6f 6e 74 69 6e 75 65 0a 09 09 7d 0a 09 20 20 20 ontinue...}..
9250: 20 7d 0a 09 20 20 20 20 73 77 69 74 63 68 20 2d }.. switch -
9260: 65 78 61 63 74 20 2d 2d 20 24 63 6f 64 65 20 7b exact -- $code {
9270: 0a 09 09 2e 53 48 20 2d 20 2e 53 53 20 7b 0a 09 ....SH - .SS {..
9280: 09 20 20 20 20 66 6c 75 73 68 62 75 66 66 65 72 . flushbuffer
9290: 0a 09 09 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e ... if {[llen
92a0: 67 74 68 20 24 72 65 73 74 5d 20 3d 3d 20 30 7d gth $rest] == 0}
92b0: 20 7b 0a 09 09 09 67 65 74 73 20 24 6d 61 6e 75 {....gets $manu
92c0: 61 6c 28 69 6e 66 70 29 20 72 65 73 74 0a 09 09 al(infp) rest...
92d0: 20 20 20 20 7d 0a 09 09 20 20 20 20 6c 61 70 70 }... lapp
92e0: 65 6e 64 20 6d 61 6e 75 61 6c 28 74 65 78 74 29 end manual(text)
92f0: 20 22 24 63 6f 64 65 20 5b 75 6e 71 75 6f 74 65 "$code [unquote
9300: 20 24 72 65 73 74 5d 22 0a 09 09 7d 0a 09 09 2e $rest]"...}....
9310: 54 48 20 7b 0a 09 09 20 20 20 20 66 6c 75 73 68 TH {... flush
9320: 62 75 66 66 65 72 0a 09 09 20 20 20 20 6c 61 70 buffer... lap
9330: 70 65 6e 64 20 6d 61 6e 75 61 6c 28 74 65 78 74 pend manual(text
9340: 29 20 22 24 63 6f 64 65 20 5b 75 6e 71 75 6f 74 ) "$code [unquot
9350: 65 20 24 72 65 73 74 5d 22 0a 09 09 7d 0a 09 09 e $rest]"...}...
9360: 2e 51 57 20 7b 0a 09 09 20 20 20 20 6c 61 73 73 .QW {... lass
9370: 69 67 6e 20 5b 72 65 67 65 78 70 20 2d 61 6c 6c ign [regexp -all
9380: 20 2d 69 6e 6c 69 6e 65 20 7b 5c 22 28 3f 3a 5b -inline {\"(?:[
9390: 5e 22 22 5d 2b 29 5c 22 7c 5c 53 2b 7d 20 24 72 ^""]+)\"|\S+} $r
93a0: 65 73 74 5d 20 5c 0a 09 09 09 69 6e 51 75 6f 74 est] \....inQuot
93b0: 65 20 61 66 74 65 72 77 61 72 64 73 0a 09 09 20 e afterwards...
93c0: 20 20 20 61 64 64 62 75 66 66 65 72 20 24 4c 51 addbuffer $LQ
93d0: 20 5b 75 6e 71 75 6f 74 65 20 24 69 6e 51 75 6f [unquote $inQuo
93e0: 74 65 5d 20 24 52 51 20 5b 75 6e 71 75 6f 74 65 te] $RQ [unquote
93f0: 20 24 61 66 74 65 72 77 61 72 64 73 5d 0a 09 09 $afterwards]...
9400: 7d 0a 09 09 2e 50 51 20 7b 0a 09 09 20 20 20 20 }....PQ {...
9410: 6c 61 73 73 69 67 6e 20 5b 72 65 67 65 78 70 20 lassign [regexp
9420: 2d 61 6c 6c 20 2d 69 6e 6c 69 6e 65 20 7b 5c 22 -all -inline {\"
9430: 28 3f 3a 5b 5e 22 22 5d 2b 29 5c 22 7c 5c 53 2b (?:[^""]+)\"|\S+
9440: 7d 20 24 72 65 73 74 5d 20 5c 0a 09 09 09 69 6e } $rest] \....in
9450: 51 75 6f 74 65 20 70 75 6e 63 74 75 61 74 69 6f Quote punctuatio
9460: 6e 20 61 66 74 65 72 77 61 72 64 73 0a 09 09 20 n afterwards...
9470: 20 20 20 61 64 64 62 75 66 66 65 72 20 28 20 24 addbuffer ( $
9480: 4c 51 20 5b 75 6e 71 75 6f 74 65 20 24 69 6e 51 LQ [unquote $inQ
9490: 75 6f 74 65 5d 20 24 52 51 20 5c 0a 09 09 09 20 uote] $RQ \....
94a0: 20 20 20 5b 75 6e 71 75 6f 74 65 20 24 70 75 6e [unquote $pun
94b0: 63 74 75 61 74 69 6f 6e 5d 20 29 20 5b 75 6e 71 ctuation] ) [unq
94c0: 75 6f 74 65 20 24 61 66 74 65 72 77 61 72 64 73 uote $afterwards
94d0: 5d 0a 09 09 7d 0a 09 09 2e 51 52 20 7b 0a 09 09 ]...}....QR {...
94e0: 20 20 20 20 6c 61 73 73 69 67 6e 20 5b 72 65 67 lassign [reg
94f0: 65 78 70 20 2d 61 6c 6c 20 2d 69 6e 6c 69 6e 65 exp -all -inline
9500: 20 7b 5c 22 28 3f 3a 5b 5e 22 22 5d 2b 29 5c 22 {\"(?:[^""]+)\"
9510: 7c 5c 53 2b 7d 20 24 72 65 73 74 5d 20 5c 0a 09 |\S+} $rest] \..
9520: 09 09 72 61 6e 67 65 46 72 6f 6d 20 72 61 6e 67 ..rangeFrom rang
9530: 65 54 6f 20 61 66 74 65 72 77 61 72 64 73 0a 09 eTo afterwards..
9540: 09 20 20 20 20 61 64 64 62 75 66 66 65 72 20 24 . addbuffer $
9550: 4c 51 20 5b 75 6e 71 75 6f 74 65 20 24 72 61 6e LQ [unquote $ran
9560: 67 65 46 72 6f 6d 5d 20 22 26 6e 64 61 73 68 3b geFrom] "–
9570: 22 20 5c 0a 09 09 09 20 20 20 20 5b 75 6e 71 75 " \.... [unqu
9580: 6f 74 65 20 24 72 61 6e 67 65 54 6f 5d 20 24 52 ote $rangeTo] $R
9590: 51 20 5b 75 6e 71 75 6f 74 65 20 24 61 66 74 65 Q [unquote $afte
95a0: 72 77 61 72 64 73 5d 0a 09 09 7d 0a 09 09 2e 4d rwards]...}....M
95b0: 54 20 7b 0a 09 09 20 20 20 20 61 64 64 62 75 66 T {... addbuf
95c0: 66 65 72 20 24 4c 51 24 52 51 0a 09 09 7d 0a 09 fer $LQ$RQ...}..
95d0: 09 2e 48 53 20 2d 20 2e 55 4c 20 2d 20 2e 74 61 ..HS - .UL - .ta
95e0: 20 7b 0a 09 09 20 20 20 20 66 6c 75 73 68 62 75 {... flushbu
95f0: 66 66 65 72 0a 09 09 20 20 20 20 6c 61 70 70 65 ffer... lappe
9600: 6e 64 20 6d 61 6e 75 61 6c 28 74 65 78 74 29 20 nd manual(text)
9610: 22 24 63 6f 64 65 20 5b 75 6e 71 75 6f 74 65 20 "$code [unquote
9620: 24 72 65 73 74 5d 22 0a 09 09 7d 0a 09 09 2e 42 $rest]"...}....B
9630: 53 20 2d 20 2e 42 45 20 2d 20 2e 62 72 20 2d 20 S - .BE - .br -
9640: 2e 66 69 20 2d 20 2e 73 70 20 2d 20 2e 6e 66 20 .fi - .sp - .nf
9650: 7b 0a 09 09 20 20 20 20 66 6c 75 73 68 62 75 66 {... flushbuf
9660: 66 65 72 0a 09 09 20 20 20 20 69 66 20 7b 24 72 fer... if {$r
9670: 65 73 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 09 est ne ""} {....
9680: 69 66 20 7b 21 24 76 65 72 62 6f 73 65 7d 20 7b if {!$verbose} {
9690: 0a 09 09 09 20 20 20 20 70 75 74 73 20 73 74 64 .... puts std
96a0: 65 72 72 20 22 22 0a 09 09 09 7d 0a 09 09 09 6d err ""....}....m
96b0: 61 6e 65 72 72 6f 72 20 22 75 6e 65 78 70 65 63 anerror "unexpec
96c0: 74 65 64 20 61 72 67 75 6d 65 6e 74 3a 20 24 6c ted argument: $l
96d0: 69 6e 65 22 0a 09 09 20 20 20 20 7d 0a 09 09 20 ine"... }...
96e0: 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 lappend manua
96f0: 6c 28 74 65 78 74 29 20 24 63 6f 64 65 0a 09 09 l(text) $code...
9700: 7d 0a 09 09 2e 41 50 20 7b 0a 09 09 20 20 20 20 }....AP {...
9710: 66 6c 75 73 68 62 75 66 66 65 72 0a 09 09 20 20 flushbuffer...
9720: 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 6c lappend manual
9730: 28 74 65 78 74 29 20 5b 63 6f 6e 63 61 74 20 2e (text) [concat .
9740: 49 50 20 5b 70 72 6f 63 65 73 73 2d 74 65 78 74 IP [process-text
9750: 20 5c 0a 09 09 09 20 20 20 20 22 5b 6c 69 6e 64 \.... "[lind
9760: 65 78 20 24 72 65 73 74 20 30 5d 20 5c 5c 66 42 ex $rest 0] \\fB
9770: 5b 6c 69 6e 64 65 78 20 24 72 65 73 74 20 31 5d [lindex $rest 1]
9780: 5c 5c 66 52 20 28 5b 6c 69 6e 64 65 78 20 24 72 \\fR ([lindex $r
9790: 65 73 74 20 32 5d 29 22 5d 5d 0a 09 09 7d 0a 09 est 2])"]]...}..
97a0: 09 2e 49 50 20 7b 0a 09 09 20 20 20 20 66 6c 75 ..IP {... flu
97b0: 73 68 62 75 66 66 65 72 0a 09 09 20 20 20 20 72 shbuffer... r
97c0: 65 67 65 78 70 20 7b 5e 28 2e 2a 29 20 2b 5c 64 egexp {^(.*) +\d
97d0: 2b 24 7d 20 24 72 65 73 74 20 61 6c 6c 20 72 65 +$} $rest all re
97e0: 73 74 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 st... lappend
97f0: 20 6d 61 6e 75 61 6c 28 74 65 78 74 29 20 22 2e manual(text) ".
9800: 49 50 20 5b 70 72 6f 63 65 73 73 2d 74 65 78 74 IP [process-text
9810: 20 5c 0a 09 09 09 20 20 20 20 5b 75 6e 71 75 6f \.... [unquo
9820: 74 65 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 te [string trim
9830: 24 72 65 73 74 5d 5d 5d 22 0a 09 09 7d 0a 09 09 $rest]]]"...}...
9840: 2e 54 50 20 7b 0a 09 09 20 20 20 20 66 6c 75 73 .TP {... flus
9850: 68 62 75 66 66 65 72 0a 09 09 20 20 20 20 77 68 hbuffer... wh
9860: 69 6c 65 20 7b 5b 69 73 2d 61 2d 64 69 72 65 63 ile {[is-a-direc
9870: 74 69 76 65 20 5b 73 65 74 20 6e 65 78 74 20 5b tive [set next [
9880: 67 65 74 73 20 24 6d 61 6e 75 61 6c 28 69 6e 66 gets $manual(inf
9890: 70 29 5d 5d 5d 7d 20 7b 0a 09 09 09 69 66 20 7b p)]]]} {....if {
98a0: 21 24 76 65 72 62 6f 73 65 7d 20 7b 0a 09 09 09 !$verbose} {....
98b0: 20 20 20 20 70 75 74 73 20 73 74 64 65 72 72 20 puts stderr
98c0: 22 22 0a 09 09 09 7d 0a 09 09 09 6d 61 6e 65 72 ""....}....maner
98d0: 72 6f 72 20 22 69 67 6e 6f 72 69 6e 67 20 24 6e ror "ignoring $n
98e0: 65 78 74 20 61 66 74 65 72 20 2e 54 50 22 0a 09 ext after .TP"..
98f0: 09 20 20 20 20 7d 0a 09 09 20 20 20 20 69 66 20 . }... if
9900: 7b 22 24 6e 65 78 74 22 20 6e 65 20 7b 27 7d 7d {"$next" ne {'}}
9910: 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 6d 61 {....lappend ma
9920: 6e 75 61 6c 28 74 65 78 74 29 20 22 2e 49 50 20 nual(text) ".IP
9930: 5b 70 72 6f 63 65 73 73 2d 74 65 78 74 20 24 6e [process-text $n
9940: 65 78 74 5d 22 0a 09 09 20 20 20 20 7d 0a 09 09 ext]"... }...
9950: 7d 0a 09 09 2e 4f 50 20 7b 0a 09 09 20 20 20 20 }....OP {...
9960: 66 6c 75 73 68 62 75 66 66 65 72 0a 09 09 20 20 flushbuffer...
9970: 20 20 6c 61 73 73 69 67 6e 20 24 72 65 73 74 20 lassign $rest
9980: 63 6d 64 4e 61 6d 65 20 64 62 4e 61 6d 65 20 64 cmdName dbName d
9990: 62 43 6c 61 73 73 0a 09 09 20 20 20 20 6c 61 70 bClass... lap
99a0: 70 65 6e 64 20 6d 61 6e 75 61 6c 28 74 65 78 74 pend manual(text
99b0: 29 20 5b 63 6f 6e 63 61 74 20 2e 4f 50 20 5b 70 ) [concat .OP [p
99c0: 72 6f 63 65 73 73 2d 74 65 78 74 20 5c 0a 09 09 rocess-text \...
99d0: 09 20 20 20 20 22 5c 5c 66 42 24 63 6d 64 4e 61 . "\\fB$cmdNa
99e0: 6d 65 5c 5c 66 52 20 5c 5c 66 42 24 64 62 4e 61 me\\fR \\fB$dbNa
99f0: 6d 65 5c 5c 66 52 20 5c 5c 66 42 24 64 62 43 6c me\\fR \\fB$dbCl
9a00: 61 73 73 5c 5c 66 52 22 5d 5d 0a 09 09 7d 0a 09 ass\\fR"]]...}..
9a10: 09 2e 50 50 20 2d 20 2e 4c 50 20 7b 0a 09 09 20 ..PP - .LP {...
9a20: 20 20 20 66 6c 75 73 68 62 75 66 66 65 72 0a 09 flushbuffer..
9a30: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e . lappend man
9a40: 75 61 6c 28 74 65 78 74 29 20 7b 2e 50 50 7d 0a ual(text) {.PP}.
9a50: 09 09 7d 0a 09 09 2e 52 53 20 7b 0a 09 09 20 20 ..}....RS {...
9a60: 20 20 66 6c 75 73 68 62 75 66 66 65 72 0a 09 09 flushbuffer...
9a70: 20 20 20 20 69 6e 63 72 20 6d 61 6e 75 61 6c 28 incr manual(
9a80: 2e 52 53 29 0a 09 09 20 20 20 20 6c 61 70 70 65 .RS)... lappe
9a90: 6e 64 20 6d 61 6e 75 61 6c 28 74 65 78 74 29 20 nd manual(text)
9aa0: 24 63 6f 64 65 0a 09 09 7d 0a 09 09 2e 52 45 20 $code...}....RE
9ab0: 7b 0a 09 09 20 20 20 20 66 6c 75 73 68 62 75 66 {... flushbuf
9ac0: 66 65 72 0a 09 09 20 20 20 20 69 6e 63 72 20 6d fer... incr m
9ad0: 61 6e 75 61 6c 28 2e 52 53 29 20 2d 31 0a 09 09 anual(.RS) -1...
9ae0: 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e 75 lappend manu
9af0: 61 6c 28 74 65 78 74 29 20 24 63 6f 64 65 0a 09 al(text) $code..
9b00: 09 7d 0a 09 09 2e 53 4f 20 7b 0a 09 09 20 20 20 .}....SO {...
9b10: 20 66 6c 75 73 68 62 75 66 66 65 72 0a 09 09 20 flushbuffer...
9b20: 20 20 20 69 6e 63 72 20 6d 61 6e 75 61 6c 28 2e incr manual(.
9b30: 53 4f 29 0a 09 09 20 20 20 20 69 66 20 7b 5b 6c SO)... if {[l
9b40: 6c 65 6e 67 74 68 20 24 72 65 73 74 5d 20 3d 3d length $rest] ==
9b50: 20 30 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 0} {....lappend
9b60: 20 6d 61 6e 75 61 6c 28 74 65 78 74 29 20 22 24 manual(text) "$
9b70: 63 6f 64 65 20 6f 70 74 69 6f 6e 73 22 0a 09 09 code options"...
9b80: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 09 } else {....
9b90: 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 6c 28 74 lappend manual(t
9ba0: 65 78 74 29 20 22 24 63 6f 64 65 20 5b 75 6e 71 ext) "$code [unq
9bb0: 75 6f 74 65 20 24 72 65 73 74 5d 22 0a 09 09 20 uote $rest]"...
9bc0: 20 20 20 7d 0a 09 09 7d 0a 09 09 2e 53 45 20 7b }...}....SE {
9bd0: 0a 09 09 20 20 20 20 66 6c 75 73 68 62 75 66 66 ... flushbuff
9be0: 65 72 0a 09 09 20 20 20 20 69 6e 63 72 20 6d 61 er... incr ma
9bf0: 6e 75 61 6c 28 2e 53 4f 29 20 2d 31 0a 09 09 20 nual(.SO) -1...
9c00: 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 lappend manua
9c10: 6c 28 74 65 78 74 29 20 24 63 6f 64 65 0a 09 09 l(text) $code...
9c20: 7d 0a 09 09 2e 44 53 20 7b 0a 09 09 20 20 20 20 }....DS {...
9c30: 66 6c 75 73 68 62 75 66 66 65 72 0a 09 09 20 20 flushbuffer...
9c40: 20 20 69 6e 63 72 20 6d 61 6e 75 61 6c 28 2e 44 incr manual(.D
9c50: 53 29 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 S)... lappend
9c60: 20 6d 61 6e 75 61 6c 28 74 65 78 74 29 20 24 63 manual(text) $c
9c70: 6f 64 65 0a 09 09 7d 0a 09 09 2e 44 45 20 7b 0a ode...}....DE {.
9c80: 09 09 20 20 20 20 66 6c 75 73 68 62 75 66 66 65 .. flushbuffe
9c90: 72 0a 09 09 20 20 20 20 69 6e 63 72 20 6d 61 6e r... incr man
9ca0: 75 61 6c 28 2e 44 53 29 20 2d 31 0a 09 09 20 20 ual(.DS) -1...
9cb0: 20 20 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 6c lappend manual
9cc0: 28 74 65 78 74 29 20 24 63 6f 64 65 0a 09 09 7d (text) $code...}
9cd0: 0a 09 09 2e 43 53 20 7b 0a 09 09 20 20 20 20 66 ....CS {... f
9ce0: 6c 75 73 68 62 75 66 66 65 72 0a 09 09 20 20 20 lushbuffer...
9cf0: 20 69 6e 63 72 20 6d 61 6e 75 61 6c 28 2e 43 53 incr manual(.CS
9d00: 29 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 )... lappend
9d10: 6d 61 6e 75 61 6c 28 74 65 78 74 29 20 24 63 6f manual(text) $co
9d20: 64 65 0a 09 09 7d 0a 09 09 2e 43 45 20 7b 0a 09 de...}....CE {..
9d30: 09 20 20 20 20 66 6c 75 73 68 62 75 66 66 65 72 . flushbuffer
9d40: 0a 09 09 20 20 20 20 69 6e 63 72 20 6d 61 6e 75 ... incr manu
9d50: 61 6c 28 2e 43 53 29 20 2d 31 0a 09 09 20 20 20 al(.CS) -1...
9d60: 20 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 6c 28 lappend manual(
9d70: 74 65 78 74 29 20 24 63 6f 64 65 0a 09 09 7d 0a text) $code...}.
9d80: 09 09 2e 64 65 20 7b 0a 09 09 20 20 20 20 77 68 ...de {... wh
9d90: 69 6c 65 20 7b 5b 67 65 74 73 20 24 6d 61 6e 75 ile {[gets $manu
9da0: 61 6c 28 69 6e 66 70 29 20 6c 69 6e 65 5d 20 3e al(infp) line] >
9db0: 3d 20 30 7d 20 7b 0a 09 09 09 69 66 20 7b 5b 73 = 0} {....if {[s
9dc0: 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2e 2e 2a tring match "..*
9dd0: 22 20 24 6c 69 6e 65 5d 7d 20 7b 0a 09 09 09 20 " $line]} {....
9de0: 20 20 20 62 72 65 61 6b 0a 09 09 09 7d 0a 09 09 break....}...
9df0: 20 20 20 20 7d 0a 09 09 7d 0a 09 09 2e 2e 20 7b }...}..... {
9e00: 0a 09 09 20 20 20 20 69 66 20 7b 21 24 76 65 72 ... if {!$ver
9e10: 62 6f 73 65 7d 20 7b 0a 09 09 09 70 75 74 73 20 bose} {....puts
9e20: 73 74 64 65 72 72 20 22 22 0a 09 09 20 20 20 20 stderr ""...
9e30: 7d 0a 09 09 20 20 20 20 65 72 72 6f 72 20 22 66 }... error "f
9e40: 6f 75 6e 64 20 2e 2e 20 6f 75 74 73 69 64 65 20 ound .. outside
9e50: 6f 66 20 2e 64 65 22 0a 09 09 7d 0a 09 09 64 65 of .de"...}...de
9e60: 66 61 75 6c 74 20 7b 0a 09 09 20 20 20 20 69 66 fault {... if
9e70: 20 7b 21 24 76 65 72 62 6f 73 65 7d 20 7b 0a 09 {!$verbose} {..
9e80: 09 09 70 75 74 73 20 73 74 64 65 72 72 20 22 22 ..puts stderr ""
9e90: 0a 09 09 20 20 20 20 7d 0a 09 09 20 20 20 20 66 ... }... f
9ea0: 6c 75 73 68 62 75 66 66 65 72 0a 09 09 20 20 20 lushbuffer...
9eb0: 20 6d 61 6e 65 72 72 6f 72 20 22 75 6e 72 65 63 manerror "unrec
9ec0: 6f 67 6e 69 7a 65 64 20 66 6f 72 6d 61 74 20 64 ognized format d
9ed0: 69 72 65 63 74 69 76 65 3a 20 24 6c 69 6e 65 22 irective: $line"
9ee0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 ...}.. }..}..
9ef0: 66 6c 75 73 68 62 75 66 66 65 72 0a 09 63 6c 6f flushbuffer..clo
9f00: 73 65 20 24 6d 61 6e 75 61 6c 28 69 6e 66 70 29 se $manual(infp)
9f10: 0a 09 23 20 66 69 78 75 70 73 0a 09 69 66 20 7b ..# fixups..if {
9f20: 24 6d 61 6e 75 61 6c 28 2e 52 53 29 20 21 3d 20 $manual(.RS) !=
9f30: 30 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 24 0} {.. if {!$
9f40: 76 65 72 62 6f 73 65 7d 20 7b 0a 09 09 70 75 74 verbose} {...put
9f50: 73 20 73 74 64 65 72 72 20 22 22 0a 09 20 20 20 s stderr ""..
9f60: 20 7d 0a 09 20 20 20 20 70 75 74 73 20 22 75 6e }.. puts "un
9f70: 62 61 6c 61 6e 63 65 64 20 2e 52 53 20 2e 52 45 balanced .RS .RE
9f80: 22 0a 09 7d 0a 09 69 66 20 7b 24 6d 61 6e 75 61 "..}..if {$manua
9f90: 6c 28 2e 44 53 29 20 21 3d 20 30 7d 20 7b 0a 09 l(.DS) != 0} {..
9fa0: 20 20 20 20 69 66 20 7b 21 24 76 65 72 62 6f 73 if {!$verbos
9fb0: 65 7d 20 7b 0a 09 09 70 75 74 73 20 73 74 64 65 e} {...puts stde
9fc0: 72 72 20 22 22 0a 09 20 20 20 20 7d 0a 09 20 20 rr "".. }..
9fd0: 20 20 70 75 74 73 20 22 75 6e 62 61 6c 61 6e 63 puts "unbalanc
9fe0: 65 64 20 2e 44 53 20 2e 44 45 22 0a 09 7d 0a 09 ed .DS .DE"..}..
9ff0: 69 66 20 7b 24 6d 61 6e 75 61 6c 28 2e 43 53 29 if {$manual(.CS)
a000: 20 21 3d 20 30 7d 20 7b 0a 09 20 20 20 20 69 66 != 0} {.. if
a010: 20 7b 21 24 76 65 72 62 6f 73 65 7d 20 7b 0a 09 {!$verbose} {..
a020: 09 70 75 74 73 20 73 74 64 65 72 72 20 22 22 0a .puts stderr "".
a030: 09 20 20 20 20 7d 0a 09 20 20 20 20 70 75 74 73 . }.. puts
a040: 20 22 75 6e 62 61 6c 61 6e 63 65 64 20 2e 43 53 "unbalanced .CS
a050: 20 2e 43 45 22 0a 09 7d 0a 09 69 66 20 7b 24 6d .CE"..}..if {$m
a060: 61 6e 75 61 6c 28 2e 53 4f 29 20 21 3d 20 30 7d anual(.SO) != 0}
a070: 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 24 76 65 {.. if {!$ve
a080: 72 62 6f 73 65 7d 20 7b 0a 09 09 70 75 74 73 20 rbose} {...puts
a090: 73 74 64 65 72 72 20 22 22 0a 09 20 20 20 20 7d stderr "".. }
a0a0: 0a 09 20 20 20 20 70 75 74 73 20 22 75 6e 62 61 .. puts "unba
a0b0: 6c 61 6e 63 65 64 20 2e 53 4f 20 2e 53 45 22 0a lanced .SO .SE".
a0c0: 09 7d 0a 09 23 20 6f 75 74 70 75 74 20 63 6f 6e .}..# output con
a0d0: 76 65 72 73 69 6f 6e 0a 09 6f 70 65 6e 2d 74 65 version..open-te
a0e0: 78 74 0a 09 73 65 74 20 68 61 73 65 72 72 6f 72 xt..set haserror
a0f0: 20 30 0a 09 69 66 20 7b 5b 6e 65 78 74 2d 6f 70 0..if {[next-op
a100: 2d 69 73 20 2e 48 53 20 72 65 73 74 5d 7d 20 7b -is .HS rest]} {
a110: 0a 09 20 20 20 20 73 65 74 20 6d 61 6e 75 61 6c .. set manual
a120: 28 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d 66 69 ($manual(wing-fi
a130: 6c 65 29 2d 24 6d 61 6e 75 61 6c 28 6e 61 6d 65 le)-$manual(name
a140: 29 2d 74 69 74 6c 65 29 20 5c 0a 09 09 22 5b 6a )-title) \..."[j
a150: 6f 69 6e 20 5b 6c 72 61 6e 67 65 20 24 72 65 73 oin [lrange $res
a160: 74 20 31 20 65 6e 64 5d 20 7b 20 7d 5d 20 5b 6c t 1 end] { }] [l
a170: 69 6e 64 65 78 20 24 72 65 73 74 20 30 5d 20 6d index $rest 0] m
a180: 61 6e 75 61 6c 20 70 61 67 65 22 0a 09 7d 20 65 anual page"..} e
a190: 6c 73 65 69 66 20 7b 5b 6e 65 78 74 2d 6f 70 2d lseif {[next-op-
a1a0: 69 73 20 2e 54 48 20 72 65 73 74 5d 7d 20 7b 0a is .TH rest]} {.
a1b0: 09 20 20 20 20 73 65 74 20 6d 61 6e 75 61 6c 28 . set manual(
a1c0: 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d 66 69 6c $manual(wing-fil
a1d0: 65 29 2d 24 6d 61 6e 75 61 6c 28 6e 61 6d 65 29 e)-$manual(name)
a1e0: 2d 74 69 74 6c 65 29 20 5c 0a 09 09 22 5b 6c 69 -title) \..."[li
a1f0: 6e 64 65 78 20 24 72 65 73 74 20 30 5d 20 6d 61 ndex $rest 0] ma
a200: 6e 75 61 6c 20 70 61 67 65 20 2d 20 5b 6a 6f 69 nual page - [joi
a210: 6e 20 5b 6c 72 61 6e 67 65 20 24 72 65 73 74 20 n [lrange $rest
a220: 34 20 65 6e 64 5d 20 7b 20 7d 5d 22 0a 09 7d 20 4 end] { }]"..}
a230: 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 74 20 else {.. set
a240: 68 61 73 65 72 72 6f 72 20 31 0a 09 20 20 20 20 haserror 1..
a250: 69 66 20 7b 21 24 76 65 72 62 6f 73 65 7d 20 7b if {!$verbose} {
a260: 0a 09 09 70 75 74 73 20 73 74 64 65 72 72 20 22 ...puts stderr "
a270: 22 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 6d 61 ".. }.. ma
a280: 6e 65 72 72 6f 72 20 22 6e 6f 20 2e 48 53 20 6f nerror "no .HS o
a290: 72 20 2e 54 48 20 72 65 63 6f 72 64 20 66 6f 75 r .TH record fou
a2a0: 6e 64 22 0a 09 7d 0a 09 69 66 20 7b 21 24 68 61 nd"..}..if {!$ha
a2b0: 73 65 72 72 6f 72 7d 20 7b 0a 09 20 20 20 20 77 serror} {.. w
a2c0: 68 69 6c 65 20 7b 5b 6d 6f 72 65 2d 74 65 78 74 hile {[more-text
a2d0: 5d 7d 20 7b 0a 09 09 73 65 74 20 6c 69 6e 65 20 ]} {...set line
a2e0: 5b 6e 65 78 74 2d 74 65 78 74 5d 0a 09 09 69 66 [next-text]...if
a2f0: 20 7b 5b 69 73 2d 61 2d 64 69 72 65 63 74 69 76 {[is-a-directiv
a300: 65 20 24 6c 69 6e 65 5d 7d 20 7b 0a 09 09 20 20 e $line]} {...
a310: 20 20 6f 75 74 70 75 74 2d 64 69 72 65 63 74 69 output-directi
a320: 76 65 20 24 6c 69 6e 65 0a 09 09 7d 20 65 6c 73 ve $line...} els
a330: 65 20 7b 0a 09 09 20 20 20 20 6d 61 6e 2d 70 75 e {... man-pu
a340: 74 73 20 24 6c 69 6e 65 0a 09 09 7d 0a 09 20 20 ts $line...}..
a350: 20 20 7d 0a 09 20 20 20 20 6d 61 6e 2d 70 75 74 }.. man-put
a360: 73 20 5b 63 6f 70 79 6f 75 74 20 24 6d 61 6e 75 s [copyout $manu
a370: 61 6c 28 63 6f 70 79 72 69 67 68 74 73 29 20 22 al(copyrights) "
a380: 2e 2e 2f 22 5d 0a 09 20 20 20 20 73 65 74 20 6d ../"].. set m
a390: 61 6e 75 61 6c 28 77 69 6e 67 2d 63 6f 70 79 72 anual(wing-copyr
a3a0: 69 67 68 74 73 29 20 5b 6d 65 72 67 65 2d 63 6f ights) [merge-co
a3b0: 70 79 72 69 67 68 74 73 20 5c 0a 09 09 20 20 20 pyrights \...
a3c0: 20 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d 63 6f $manual(wing-co
a3d0: 70 79 72 69 67 68 74 73 29 20 24 6d 61 6e 75 61 pyrights) $manua
a3e0: 6c 28 63 6f 70 79 72 69 67 68 74 73 29 5d 0a 09 l(copyrights)]..
a3f0: 7d 0a 09 23 0a 09 23 20 6d 61 6b 65 20 74 68 65 }..#..# make the
a400: 20 6c 6f 6e 67 20 74 61 62 6c 65 20 6f 66 20 63 long table of c
a410: 6f 6e 74 65 6e 74 73 20 66 6f 72 20 74 68 69 73 ontents for this
a420: 20 70 61 67 65 0a 09 23 0a 09 73 65 74 20 6d 61 page..#..set ma
a430: 6e 75 61 6c 28 74 6f 63 2d 24 6d 61 6e 75 61 6c nual(toc-$manual
a440: 28 77 69 6e 67 2d 66 69 6c 65 29 2d 24 6d 61 6e (wing-file)-$man
a450: 75 61 6c 28 6e 61 6d 65 29 29 20 5c 0a 09 20 20 ual(name)) \..
a460: 20 20 5b 63 6f 6e 63 61 74 20 3c 64 6c 3e 20 24 [concat <dl> $
a470: 6d 61 6e 75 61 6c 28 73 65 63 74 69 6f 6e 2d 74 manual(section-t
a480: 6f 63 29 20 3c 2f 64 6c 3e 5d 0a 20 20 20 20 7d oc) </dl>]. }
a490: 0a 20 20 20 20 69 66 20 7b 21 24 76 65 72 62 6f . if {!$verbo
a4a0: 73 65 7d 20 7b 0a 09 70 75 74 73 20 73 74 64 65 se} {..puts stde
a4b0: 72 72 20 22 22 0a 20 20 20 20 7d 0a 0a 20 20 20 rr "". }..
a4c0: 20 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 if {![llength $
a4d0: 6d 61 6e 75 61 6c 28 77 69 6e 67 2d 74 6f 63 29 manual(wing-toc)
a4e0: 5d 7d 20 7b 0a 09 66 61 74 61 6c 20 22 6e 6f 74 ]} {..fatal "not
a4f0: 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 74 65 6e table of conten
a500: 74 73 2e 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ts.". }..
a510: 23 0a 20 20 20 20 23 20 6d 61 6b 65 20 74 68 65 #. # make the
a520: 20 77 69 6e 67 20 74 61 62 6c 65 20 6f 66 20 63 wing table of c
a530: 6f 6e 74 65 6e 74 73 20 66 6f 72 20 74 68 65 20 ontents for the
a540: 73 65 63 74 69 6f 6e 0a 20 20 20 20 23 0a 20 20 section. #.
a550: 20 20 73 65 74 20 77 69 64 74 68 20 30 0a 20 20 set width 0.
a560: 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 foreach name $
a570: 6d 61 6e 75 61 6c 28 77 69 6e 67 2d 74 6f 63 29 manual(wing-toc)
a580: 20 7b 0a 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 {..if {[string
a590: 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 length $name] >
a5a0: 24 77 69 64 74 68 7d 20 7b 0a 09 20 20 20 20 73 $width} {.. s
a5b0: 65 74 20 77 69 64 74 68 20 5b 73 74 72 69 6e 67 et width [string
a5c0: 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 0a 09 length $name]..
a5d0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 }. }. set
a5e0: 70 65 72 6c 69 6e 65 20 5b 65 78 70 72 20 7b 31 perline [expr {1
a5f0: 31 38 20 2f 20 24 77 69 64 74 68 7d 5d 0a 20 20 18 / $width}].
a600: 20 20 73 65 74 20 6e 72 6f 77 73 20 5b 65 78 70 set nrows [exp
a610: 72 20 7b 28 5b 6c 6c 65 6e 67 74 68 20 24 6d 61 r {([llength $ma
a620: 6e 75 61 6c 28 77 69 6e 67 2d 74 6f 63 29 5d 2b nual(wing-toc)]+
a630: 24 70 65 72 6c 69 6e 65 29 2f 24 70 65 72 6c 69 $perline)/$perli
a640: 6e 65 7d 5d 0a 20 20 20 20 73 65 74 20 6e 20 30 ne}]. set n 0
a650: 0a 20 20 20 20 63 61 74 63 68 20 7b 75 6e 73 65 . catch {unse
a660: 74 20 72 6f 77 73 7d 0a 20 20 20 20 66 6f 72 65 t rows}. fore
a670: 61 63 68 20 6e 61 6d 65 20 5b 6c 73 6f 72 74 20 ach name [lsort
a680: 2d 64 69 63 74 69 6f 6e 61 72 79 20 24 6d 61 6e -dictionary $man
a690: 75 61 6c 28 77 69 6e 67 2d 74 6f 63 29 5d 20 7b ual(wing-toc)] {
a6a0: 0a 09 73 65 74 20 74 61 69 6c 20 24 6d 61 6e 75 ..set tail $manu
a6b0: 61 6c 28 6e 61 6d 65 2d 24 6e 61 6d 65 29 0a 09 al(name-$name)..
a6c0: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 74 61 if {[llength $ta
a6d0: 69 6c 5d 20 3e 20 31 7d 20 7b 0a 09 20 20 20 20 il] > 1} {..
a6e0: 6d 61 6e 65 72 72 6f 72 20 22 24 6e 61 6d 65 20 manerror "$name
a6f0: 69 73 20 64 65 66 69 6e 65 64 20 69 6e 20 6d 6f is defined in mo
a700: 72 65 20 74 68 61 6e 20 6f 6e 65 20 66 69 6c 65 re than one file
a710: 3a 20 24 74 61 69 6c 22 0a 09 20 20 20 20 73 65 : $tail".. se
a720: 74 20 74 61 69 6c 20 5b 6c 69 6e 64 65 78 20 24 t tail [lindex $
a730: 74 61 69 6c 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 tail [expr {[lle
a740: 6e 67 74 68 20 24 74 61 69 6c 5d 2d 31 7d 5d 5d ngth $tail]-1}]]
a750: 0a 09 7d 0a 09 73 65 74 20 74 61 69 6c 20 5b 66 ..}..set tail [f
a760: 69 6c 65 20 74 61 69 6c 20 24 74 61 69 6c 5d 0a ile tail $tail].
a770: 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 .if {[info exist
a780: 73 20 6d 61 6e 75 61 6c 28 74 6f 6f 6c 74 69 70 s manual(tooltip
a790: 2d 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d 66 69 -$manual(wing-fi
a7a0: 6c 65 29 2f 24 74 61 69 6c 2e 68 74 6d 6c 29 5d le)/$tail.html)]
a7b0: 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 74 6f 6f } {.. set too
a7c0: 6c 74 69 70 20 24 6d 61 6e 75 61 6c 28 74 6f 6f ltip $manual(too
a7d0: 6c 74 69 70 2d 24 6d 61 6e 75 61 6c 28 77 69 6e ltip-$manual(win
a7e0: 67 2d 66 69 6c 65 29 2f 24 74 61 69 6c 2e 68 74 g-file)/$tail.ht
a7f0: 6d 6c 29 0a 09 20 20 20 20 73 65 74 20 74 6f 6f ml).. set too
a800: 6c 74 69 70 20 5b 73 74 72 69 6e 67 20 6d 61 70 ltip [string map
a810: 20 7b 5b 20 7b 5c 5b 7d 20 5d 20 7b 5c 5d 7d 20 {[ {\[} ] {\]}
a820: 24 20 7b 5c 24 7d 20 5c 5c 20 5c 5c 5c 5c 7d 20 $ {\$} \\ \\\\}
a830: 24 74 6f 6f 6c 74 69 70 5d 0a 09 20 20 20 20 72 $tooltip].. r
a840: 65 67 73 75 62 20 7b 5e 5b 5e 2d 5d 2b 2d 5c 73 egsub {^[^-]+-\s
a850: 2a 28 2e 29 7d 20 24 74 6f 6f 6c 74 69 70 20 7b *(.)} $tooltip {
a860: 5b 73 74 72 69 6e 67 20 74 6f 74 69 74 6c 65 20 [string totitle
a870: 5c 31 5d 7d 20 74 6f 6f 6c 74 69 70 0a 09 20 20 \1]} tooltip..
a880: 20 20 61 70 70 65 6e 64 20 72 6f 77 73 28 5b 65 append rows([e
a890: 78 70 72 20 7b 24 6e 25 24 6e 72 6f 77 73 7d 5d xpr {$n%$nrows}]
a8a0: 29 20 5c 0a 09 09 22 3c 74 64 3e 20 3c 61 20 68 ) \..."<td> <a h
a8b0: 72 65 66 3d 5c 22 24 74 61 69 6c 2e 68 74 6d 6c ref=\"$tail.html
a8c0: 5c 22 20 74 69 74 6c 65 3d 5c 22 5b 73 75 62 73 \" title=\"[subs
a8d0: 74 20 24 74 6f 6f 6c 74 69 70 5d 5c 22 3e 24 6e t $tooltip]\">$n
a8e0: 61 6d 65 3c 2f 61 3e 20 3c 2f 74 64 3e 22 0a 09 ame</a> </td>"..
a8f0: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 61 70 } else {.. ap
a900: 70 65 6e 64 20 72 6f 77 73 28 5b 65 78 70 72 20 pend rows([expr
a910: 7b 24 6e 25 24 6e 72 6f 77 73 7d 5d 29 20 5c 0a {$n%$nrows}]) \.
a920: 09 09 22 3c 74 64 3e 20 3c 61 20 68 72 65 66 3d .."<td> <a href=
a930: 5c 22 24 74 61 69 6c 2e 68 74 6d 6c 5c 22 3e 24 \"$tail.html\">$
a940: 6e 61 6d 65 3c 2f 61 3e 20 3c 2f 74 64 3e 22 0a name</a> </td>".
a950: 09 7d 0a 09 69 6e 63 72 20 6e 0a 20 20 20 20 7d .}..incr n. }
a960: 0a 20 20 20 20 70 75 74 73 20 24 6d 61 6e 75 61 . puts $manua
a970: 6c 28 77 69 6e 67 2d 74 6f 63 2d 66 70 29 20 3c l(wing-toc-fp) <
a980: 74 61 62 6c 65 3e 0a 20 20 20 20 66 6f 72 65 61 table>. forea
a990: 63 68 20 72 6f 77 20 5b 6c 73 6f 72 74 20 2d 69 ch row [lsort -i
a9a0: 6e 74 65 67 65 72 20 5b 61 72 72 61 79 20 6e 61 nteger [array na
a9b0: 6d 65 73 20 72 6f 77 73 5d 5d 20 7b 0a 09 70 75 mes rows]] {..pu
a9c0: 74 73 20 24 6d 61 6e 75 61 6c 28 77 69 6e 67 2d ts $manual(wing-
a9d0: 74 6f 63 2d 66 70 29 20 3c 74 72 3e 24 72 6f 77 toc-fp) <tr>$row
a9e0: 73 28 24 72 6f 77 29 3c 2f 74 72 3e 0a 20 20 20 s($row)</tr>.
a9f0: 20 7d 0a 20 20 20 20 70 75 74 73 20 24 6d 61 6e }. puts $man
aa00: 75 61 6c 28 77 69 6e 67 2d 74 6f 63 2d 66 70 29 ual(wing-toc-fp)
aa10: 20 3c 2f 74 61 62 6c 65 3e 0a 0a 20 20 20 20 23 </table>.. #
aa20: 0a 20 20 20 20 23 20 69 6e 73 65 72 74 20 77 69 . # insert wi
aa30: 6e 67 20 63 6f 70 79 72 69 67 68 74 73 0a 20 20 ng copyrights.
aa40: 20 20 23 0a 20 20 20 20 70 75 74 73 20 24 6d 61 #. puts $ma
aa50: 6e 75 61 6c 28 77 69 6e 67 2d 74 6f 63 2d 66 70 nual(wing-toc-fp
aa60: 29 20 5b 63 6f 70 79 6f 75 74 20 24 6d 61 6e 75 ) [copyout $manu
aa70: 61 6c 28 77 69 6e 67 2d 63 6f 70 79 72 69 67 68 al(wing-copyrigh
aa80: 74 73 29 20 22 2e 2e 2f 22 5d 0a 20 20 20 20 70 ts) "../"]. p
aa90: 75 74 73 20 24 6d 61 6e 75 61 6c 28 77 69 6e 67 uts $manual(wing
aaa0: 2d 74 6f 63 2d 66 70 29 20 22 3c 2f 62 6f 64 79 -toc-fp) "</body
aab0: 3e 3c 2f 68 74 6d 6c 3e 22 0a 20 20 20 20 63 6c ></html>". cl
aac0: 6f 73 65 20 24 6d 61 6e 75 61 6c 28 77 69 6e 67 ose $manual(wing
aad0: 2d 74 6f 63 2d 66 70 29 0a 20 20 20 20 73 65 74 -toc-fp). set
aae0: 20 6d 61 6e 75 61 6c 28 6d 65 72 67 65 2d 63 6f manual(merge-co
aaf0: 70 79 72 69 67 68 74 73 29 20 5c 0a 09 5b 6d 65 pyrights) \..[me
ab00: 72 67 65 2d 63 6f 70 79 72 69 67 68 74 73 20 24 rge-copyrights $
ab10: 6d 61 6e 75 61 6c 28 6d 65 72 67 65 2d 63 6f 70 manual(merge-cop
ab20: 79 72 69 67 68 74 73 29 20 24 6d 61 6e 75 61 6c yrights) $manual
ab30: 28 77 69 6e 67 2d 63 6f 70 79 72 69 67 68 74 73 (wing-copyrights
ab40: 29 5d 0a 7d 0a 0c 0a 70 72 6f 63 20 6d 61 6b 65 )].}...proc make
ab50: 64 69 72 68 69 65 72 20 7b 64 69 72 7d 20 7b 0a dirhier {dir} {.
ab60: 20 20 20 20 74 72 79 20 7b 0a 09 69 66 20 7b 21 try {..if {!
ab70: 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 [file isdirector
ab80: 79 20 24 64 69 72 5d 7d 20 7b 0a 09 20 20 20 20 y $dir]} {..
ab90: 66 69 6c 65 20 6d 6b 64 69 72 20 24 64 69 72 0a file mkdir $dir.
aba0: 09 7d 0a 20 20 20 20 7d 20 6f 6e 20 65 72 72 6f .}. } on erro
abb0: 72 20 6d 73 67 20 7b 0a 09 72 65 74 75 72 6e 20 r msg {..return
abc0: 2d 63 6f 64 65 20 65 72 72 6f 72 20 22 63 61 6e -code error "can
abd0: 6e 6f 74 20 63 72 65 61 74 65 20 64 69 72 65 63 not create direc
abe0: 74 6f 72 79 20 24 64 69 72 3a 20 24 6d 73 67 22 tory $dir: $msg"
abf0: 0a 20 20 20 20 7d 0a 7d 0a 0a 70 72 6f 63 20 61 . }.}..proc a
ac00: 64 64 62 75 66 66 65 72 20 7b 61 72 67 73 7d 20 ddbuffer {args}
ac10: 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 6d 61 6e {. global man
ac20: 75 61 6c 0a 20 20 20 20 69 66 20 7b 24 6d 61 6e ual. if {$man
ac30: 75 61 6c 28 70 61 72 74 69 61 6c 2d 74 65 78 74 ual(partial-text
ac40: 29 20 6e 65 20 22 22 7d 20 7b 0a 09 61 70 70 65 ) ne ""} {..appe
ac50: 6e 64 20 6d 61 6e 75 61 6c 28 70 61 72 74 69 61 nd manual(partia
ac60: 6c 2d 74 65 78 74 29 20 5c 6e 0a 20 20 20 20 7d l-text) \n. }
ac70: 0a 20 20 20 20 61 70 70 65 6e 64 20 6d 61 6e 75 . append manu
ac80: 61 6c 28 70 61 72 74 69 61 6c 2d 74 65 78 74 29 al(partial-text)
ac90: 20 5b 6a 6f 69 6e 20 24 61 72 67 73 20 22 22 5d [join $args ""]
aca0: 0a 7d 0a 70 72 6f 63 20 66 6c 75 73 68 62 75 66 .}.proc flushbuf
acb0: 66 65 72 20 7b 7d 20 7b 0a 20 20 20 20 67 6c 6f fer {} {. glo
acc0: 62 61 6c 20 6d 61 6e 75 61 6c 0a 20 20 20 20 69 bal manual. i
acd0: 66 20 7b 24 6d 61 6e 75 61 6c 28 70 61 72 74 69 f {$manual(parti
ace0: 61 6c 2d 74 65 78 74 29 20 6e 65 20 22 22 7d 20 al-text) ne ""}
acf0: 7b 0a 09 6c 61 70 70 65 6e 64 20 6d 61 6e 75 61 {..lappend manua
ad00: 6c 28 74 65 78 74 29 20 5b 70 72 6f 63 65 73 73 l(text) [process
ad10: 2d 74 65 78 74 20 24 6d 61 6e 75 61 6c 28 70 61 -text $manual(pa
ad20: 72 74 69 61 6c 2d 74 65 78 74 29 5d 0a 09 73 65 rtial-text)]..se
ad30: 74 20 6d 61 6e 75 61 6c 28 70 61 72 74 69 61 6c t manual(partial
ad40: 2d 74 65 78 74 29 20 22 22 0a 20 20 20 20 7d 0a -text) "". }.
ad50: 7d 0a 0a 72 65 74 75 72 6e 0a }..return.