Tcl Source Code

Hex Artifact Content
Login

Artifact 51715ac9a0c6f00f39b2b953ef6e3192eaf4b13718a33cba67069be555b6b16c:


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> &copy; 
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 &copy; [
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>&gt;</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;" "&ndash;
0c50: 22 20 5c 0a 09 7b 26 7d 09 7b 26 61 6d 70 3b 7d  " \..{&}.{&amp;}
0c60: 20 5c 0a 09 7b 5c 5c 7d 09 22 26 23 39 32 3b 22   \..{\\}."&#92;"
0c70: 20 5c 0a 09 7b 5c 65 7d 09 22 26 23 39 32 3b 22   \..{\e}."&#92;"
0c80: 20 5c 0a 09 7b 5c 20 7d 09 7b 26 6e 62 73 70 3b   \..{\ }.{&nbsp;
0c90: 7d 20 5c 0a 09 7b 5c 7c 7d 09 7b 26 6e 62 73 70  } \..{\|}.{&nbsp
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  ..\".{&quot;} \.
0cc0: 09 7b 3c 7d 09 7b 26 6c 74 3b 7d 20 5c 0a 09 7b  .{<}.{&lt;} \..{
0cd0: 3e 7d 09 7b 26 67 74 3b 7d 20 5c 0a 09 5c 75 32  >}.{&gt;} \..\u2
0ce0: 30 31 43 20 22 26 6c 64 71 75 6f 3b 22 20 5c 0a  01C "&ldquo;" \.
0cf0: 09 5c 75 32 30 31 44 20 22 26 72 64 71 75 6f 3b  .\u201D "&rdquo;
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!}."&iexcl;
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  "&cent;" \..    
0e70: 7b 5c 28 50 6f 7d 09 22 26 70 6f 75 6e 64 3b 22  {\(Po}."&pound;"
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  &curren;" \..   
0ea0: 20 7b 5c 28 59 65 7d 09 22 26 79 65 6e 3b 22 20   {\(Ye}."&yen;" 
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}."&sect;" 
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}."&copy;" \..
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  }."&laquo;" \.. 
0f40: 20 20 20 7b 5c 28 6e 6f 7d 09 22 26 6e 6f 74 3b     {\(no}."&not;
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  "&reg;" \..    {
0f70: 5c 28 61 2d 7d 09 22 26 6d 61 63 72 3b 22 20 5c  \(a-}."&macr;" \
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  -}."&plusmn;" \.
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}."&sup3;" \.. 
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  }."&micro;" \.. 
1010: 20 20 20 7b 5c 28 70 73 7d 09 22 26 70 61 72 61     {\(ps}."&para
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  ."&middot;" \.. 
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  }."&sup1;" \..  
1070: 20 20 7b 5c 28 4f 6d 7d 09 22 26 6f 72 64 6d 3b    {\(Om}."&ordm;
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  "&raquo;" \..   
10a0: 20 7b 5c 28 31 34 7d 09 22 26 66 72 61 63 31 34   {\(14}."&frac14
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  ."&frac12;" \.. 
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  ?}."&iquest;" \.
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}."&ETH;" \.. 
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  }."&THORN;" \.. 
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  }."&aelig;" \.. 
1190: 20 20 20 7b 5c 28 53 64 7d 09 22 26 65 74 68 3b     {\(Sd}."&eth;
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  "&divide;" \..  
11c0: 20 20 7b 5c 28 54 70 7d 09 22 26 74 68 6f 72 6e    {\(Tp}."&thorn
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  ."&mdash;" \..  
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  ."&prime;" \..  
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  ."&imath;" \..  
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  ."&fnof;" \..   
1280: 20 7b 5c 28 4f 45 7d 09 22 26 4f 45 6c 69 67 3b   {\(OE}."&OElig;
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  "&oelig;" \..   
12b0: 20 7b 5c 28 49 4a 7d 09 22 26 49 4a 6c 69 67 3b   {\(IJ}."&IJlig;
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  "&ijlig;" \..   
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}."&euro;"
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  "&bull;" \..    
1390: 7b 5c 2a 28 71 6f 7d 09 22 26 6f 63 69 72 63 3b  {\*(qo}."&ocirc;
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  "&bull;" 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 {"&bull;" 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 &mdash; $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  " " "&nbsp;"} $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|©|&copy;
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 &copy; [
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] "&ndash;
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.