Documentation Source Text

Hex Artifact Content
Login

Artifact 7cdc15568b3dd3a28e500e3b9f672f8cb420f0c4:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  #!/usr/bin/tclsh
0010: 0a 23 0a 23 20 54 68 69 73 20 73 63 72 69 70 74  .#.# This script
0020: 20 70 72 6f 63 65 73 73 65 73 20 72 61 77 20 64   processes raw d
0030: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 73 6f 75  ocumentation sou
0040: 72 63 65 20 74 65 78 74 20 69 6e 74 6f 20 69 74  rce text into it
0050: 73 20 66 69 6e 61 6c 20 66 6f 72 6d 20 0a 23 20  s final form .# 
0060: 66 6f 72 20 64 69 73 70 6c 61 79 2e 20 20 54 68  for display.  Th
0070: 65 20 70 72 6f 63 65 73 73 69 6e 67 20 61 63 74  e processing act
0080: 69 6f 6e 73 20 61 72 65 20 64 65 73 63 72 69 62  ions are describ
0090: 65 64 20 62 65 6c 6f 77 2e 0a 23 0a 23 20 49 6e  ed below..#.# In
00a0: 76 6f 6b 65 20 74 68 69 73 20 63 6f 6d 6d 61 6e  voke this comman
00b0: 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 23 0a  d as follows:.#.
00c0: 23 20 20 20 20 20 20 20 74 63 6c 73 68 20 77 72  #       tclsh wr
00d0: 61 70 2e 74 63 6c 20 24 28 44 4f 43 29 20 24 28  ap.tcl $(DOC) $(
00e0: 53 52 43 29 20 24 28 44 45 53 54 29 20 73 6f 75  SRC) $(DEST) sou
00f0: 72 63 65 31 2e 69 6e 20 73 6f 75 72 63 65 32 2e  rce1.in source2.
0100: 69 6e 20 2e 2e 2e 0a 23 0a 23 20 54 68 65 20 24  in ....#.# The $
0110: 28 44 4f 43 29 20 61 6e 64 20 24 28 53 52 43 29  (DOC) and $(SRC)
0120: 20 76 61 6c 75 65 73 20 61 72 65 20 74 68 65 20   values are the 
0130: 6e 61 6d 65 73 20 6f 66 20 64 69 72 65 63 74 6f  names of directo
0140: 72 69 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 0a  ries containing.
0150: 23 20 74 68 65 20 64 6f 63 75 6d 65 6e 74 61 74  # the documentat
0160: 69 6f 6e 20 73 6f 75 72 63 65 20 61 6e 64 20 70  ion source and p
0170: 72 6f 67 72 61 6d 20 73 6f 75 72 63 65 2e 20 20  rogram source.  
0180: 24 28 44 45 53 54 29 20 69 73 20 74 68 65 20 6e  $(DEST) is the n
0190: 61 6d 65 20 6f 66 0a 23 20 6f 66 20 74 68 65 20  ame of.# of the 
01a0: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where 
01b0: 67 65 6e 65 72 61 74 65 64 20 48 54 4d 4c 20 69  generated HTML i
01c0: 73 20 77 72 69 74 74 65 6e 2e 20 20 73 6f 75 72  s written.  sour
01d0: 63 65 4e 2e 69 6e 20 69 73 20 74 68 65 0a 23 20  ceN.in is the.# 
01e0: 69 6e 70 75 74 20 66 69 6c 65 20 74 6f 20 62 65  input file to be
01f0: 20 70 72 6f 63 65 73 73 65 64 2e 20 20 54 68 65   processed.  The
0200: 20 6f 75 74 70 75 74 20 69 73 20 73 6f 75 72 63   output is sourc
0210: 65 4e 2e 68 74 6d 6c 20 69 6e 20 74 68 65 0a 23  eN.html in the.#
0220: 20 6c 6f 63 61 6c 20 64 69 72 65 63 74 6f 72 79   local directory
0230: 2e 0a 23 0a 23 20 43 68 61 6e 67 65 73 20 6d 61  ..#.# Changes ma
0240: 64 65 20 74 6f 20 74 68 65 20 73 6f 75 72 63 65  de to the source
0250: 20 66 69 6c 65 73 3a 0a 23 0a 23 20 20 20 20 20   files:.#.#     
0260: 2a 20 20 41 6e 20 61 70 70 72 6f 70 72 69 61 74  *  An appropriat
0270: 65 20 68 65 61 64 65 72 20 69 73 20 70 72 65 70  e header is prep
0280: 65 6e 64 65 64 20 74 6f 20 74 68 65 20 66 69 6c  ended to the fil
0290: 65 2e 20 20 0a 23 0a 23 20 20 20 20 20 2a 20 20  e.  .#.#     *  
02a0: 41 6e 79 20 3c 74 69 74 6c 65 3e 2e 2e 2e 3c 2f  Any <title>...</
02b0: 74 69 74 6c 65 3e 20 69 6e 20 74 68 65 20 69 6e  title> in the in
02c0: 70 75 74 20 69 73 20 6d 6f 76 65 64 20 69 6e 74  put is moved int
02d0: 6f 20 74 68 65 20 70 72 65 70 65 6e 64 65 64 0a  o the prepended.
02e0: 23 20 20 20 20 20 20 20 20 68 65 61 64 65 72 2e  #        header.
02f0: 0a 23 0a 23 20 20 20 20 20 2a 20 20 41 6e 20 61  .#.#     *  An a
0300: 70 70 72 6f 70 72 69 61 74 65 20 66 6f 6f 74 65  ppropriate foote
0310: 72 20 69 73 20 61 70 70 65 6e 64 65 64 2e 0a 23  r is appended..#
0320: 0a 23 20 20 20 20 20 2a 20 20 53 63 72 69 70 74  .#     *  Script
0330: 73 20 77 69 74 68 69 6e 20 3c 74 63 6c 3e 2e 2e  s within <tcl>..
0340: 2e 3c 2f 74 63 6c 3e 20 61 72 65 20 65 76 61 6c  .</tcl> are eval
0350: 75 61 74 65 64 2e 20 20 4f 75 74 70 75 74 20 74  uated.  Output t
0360: 68 61 74 0a 23 20 20 20 20 20 20 20 20 69 73 20  hat.#        is 
0370: 65 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  emitted from the
0380: 73 65 20 73 63 72 69 70 74 73 20 62 79 20 22 68  se scripts by "h
0390: 64 5f 70 75 74 73 22 20 6f 72 20 22 68 64 5f 72  d_puts" or "hd_r
03a0: 65 73 6f 6c 76 65 22 0a 23 20 20 20 20 20 20 20  esolve".#       
03b0: 20 70 72 6f 63 65 64 75 72 65 73 20 61 70 70 65   procedures appe
03c0: 61 72 73 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  ars in place of 
03d0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73 63 72  the original scr
03e0: 69 70 74 2e 0a 23 0a 23 20 20 20 20 20 2a 20 20  ipt..#.#     *  
03f0: 48 79 70 65 72 6c 69 6e 6b 73 20 77 69 74 68 69  Hyperlinks withi
0400: 6e 20 5b 2e 2e 2e 5d 20 61 72 65 20 72 65 73 6f  n [...] are reso
0410: 6c 76 65 64 2e 0a 23 0a 23 20 41 20 74 77 6f 2d  lved..#.# A two-
0420: 70 61 73 73 20 61 6c 67 6f 72 69 74 68 6d 20 69  pass algorithm i
0430: 73 20 75 73 65 64 2e 20 20 54 68 65 20 66 69 72  s used.  The fir
0440: 73 74 20 70 61 73 73 20 63 6f 6c 6c 65 63 74 73  st pass collects
0450: 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 0a 23 20   the names of.# 
0460: 68 79 70 65 72 6c 69 6e 6b 20 74 61 72 67 65 74  hyperlink target
0470: 73 2c 20 72 65 71 75 69 72 65 6d 65 6e 74 73 20  s, requirements 
0480: 74 65 78 74 2c 20 61 6e 64 20 6f 74 68 65 72 20  text, and other 
0490: 67 6c 6f 62 61 6c 20 69 6e 66 6f 72 6d 61 74 69  global informati
04a0: 6f 6e 2e 0a 23 20 54 68 65 20 73 65 63 6f 6e 64  on..# The second
04b0: 20 70 61 73 73 20 75 73 65 73 20 74 68 65 20 64   pass uses the d
04c0: 61 74 61 20 67 61 74 68 65 72 65 64 20 6f 6e 20  ata gathered on 
04d0: 74 68 65 20 66 69 72 73 74 20 70 61 73 73 20 74  the first pass t
04e0: 6f 20 67 65 6e 65 72 61 74 65 0a 23 20 74 68 65  o generate.# the
04f0: 20 66 69 6e 61 6c 20 6f 75 74 70 75 74 2e 0a 23   final output..#
0500: 0a 73 65 74 20 44 4f 43 20 5b 6c 69 6e 64 65 78  .set DOC [lindex
0510: 20 24 61 72 67 76 20 30 5d 0a 73 65 74 20 53 52   $argv 0].set SR
0520: 43 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20  C [lindex $argv 
0530: 31 5d 0a 73 65 74 20 44 45 53 54 20 5b 6c 69 6e  1].set DEST [lin
0540: 64 65 78 20 24 61 72 67 76 20 32 5d 0a 73 65 74  dex $argv 2].set
0550: 20 48 4f 4d 45 44 49 52 20 5b 70 77 64 5d 20 20   HOMEDIR [pwd]  
0560: 20 20 20 20 20 20 20 20 20 20 3b 23 20 41 6c 73            ;# Als
0570: 6f 20 72 65 6d 65 6d 62 65 72 20 6f 75 72 20 68  o remember our h
0580: 6f 6d 65 20 64 69 72 65 63 74 6f 72 79 2e 0a 0a  ome directory...
0590: 23 20 4c 6f 61 64 20 74 68 65 20 73 79 6e 74 61  # Load the synta
05a0: 78 20 64 69 61 67 72 61 6d 20 6c 69 6e 6b 61 67  x diagram linkag
05b0: 65 20 64 61 74 61 0a 23 0a 73 6f 75 72 63 65 20  e data.#.source 
05c0: 24 44 4f 43 2f 61 72 74 2f 73 79 6e 74 61 78 2f  $DOC/art/syntax/
05d0: 73 79 6e 74 61 78 5f 6c 69 6e 6b 61 67 65 2e 74  syntax_linkage.t
05e0: 63 6c 0a 0a 0a 23 20 54 68 69 73 20 69 73 20 74  cl...# This is t
05f0: 68 65 20 66 69 72 73 74 2d 70 61 73 73 20 69 6d  he first-pass im
0600: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
0610: 70 72 6f 63 65 64 75 72 65 20 74 68 61 74 20 72  procedure that r
0620: 65 6e 64 65 72 73 0a 23 20 68 79 70 65 72 6c 69  enders.# hyperli
0630: 6e 6b 73 2e 20 20 44 6f 20 6e 6f 74 20 65 76 65  nks.  Do not eve
0640: 6e 20 62 6f 74 68 65 72 20 74 72 79 69 6e 67 20  n bother trying 
0650: 74 6f 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 64  to do anything d
0660: 75 72 69 6e 67 20 74 68 65 0a 23 20 66 69 72 73  uring the.# firs
0670: 74 20 70 61 73 73 2e 20 20 57 65 20 68 61 76 65  t pass.  We have
0680: 20 74 6f 20 63 6f 6c 6c 65 63 74 20 6b 65 79 77   to collect keyw
0690: 6f 72 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ord information 
06a0: 62 65 66 6f 72 65 20 74 68 65 0a 23 20 68 79 70  before the.# hyp
06b0: 65 72 6c 69 6e 6b 73 20 61 72 65 20 6d 65 61 6e  erlinks are mean
06c0: 69 6e 67 66 75 6c 2e 20 20 0a 23 0a 70 72 6f 63  ingful.  .#.proc
06d0: 20 68 64 5f 72 65 73 6f 6c 76 65 20 7b 74 65 78   hd_resolve {tex
06e0: 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 24  t} {.  hd_puts $
06f0: 74 65 78 74 0a 7d 0a 0a 23 20 54 68 69 73 20 69  text.}..# This i
0700: 73 20 74 68 65 20 73 65 63 6f 6e 64 2d 70 61 73  s the second-pas
0710: 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  s implementation
0720: 20 6f 66 20 74 68 65 20 70 72 6f 63 65 64 75 72   of the procedur
0730: 65 20 74 68 61 74 0a 23 20 72 65 6e 64 65 72 73  e that.# renders
0740: 20 68 79 70 65 72 6c 69 6e 6b 73 2e 20 20 43 6f   hyperlinks.  Co
0750: 6e 76 65 72 74 20 61 6c 6c 20 68 79 70 65 72 6c  nvert all hyperl
0760: 69 6e 6b 73 20 69 6e 20 24 74 65 78 74 20 69 6e  inks in $text in
0770: 74 6f 20 0a 23 20 61 70 70 72 6f 70 72 69 61 74  to .# appropriat
0780: 65 20 3c 61 20 68 72 65 66 3d 22 22 3e 20 6d 61  e <a href=""> ma
0790: 72 6b 75 70 2e 0a 23 0a 23 20 4c 69 6e 6b 73 20  rkup..#.# Links 
07a0: 74 6f 20 6b 65 79 77 6f 72 64 73 20 77 69 74 68  to keywords with
07b0: 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 61 69 6e  in the same main
07c0: 20 66 69 6c 65 20 61 72 65 20 72 65 73 6f 6c 76   file are resolv
07d0: 65 64 20 75 73 69 6e 67 0a 23 20 24 3a 3a 6c 6c  ed using.# $::ll
07e0: 69 6e 6b 28 29 20 69 66 20 70 6f 73 73 69 62 6c  ink() if possibl
07f0: 65 2e 20 20 41 6c 6c 20 6f 74 68 65 72 20 6c 69  e.  All other li
0800: 6e 6b 73 20 61 6e 64 20 6c 69 6e 6b 73 20 74 68  nks and links th
0810: 61 74 20 63 6f 75 6c 64 0a 23 20 6e 6f 74 20 62  at could.# not b
0820: 65 20 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67  e resolved using
0830: 20 24 3a 3a 6c 6c 69 6e 6b 28 29 20 61 72 65 20   $::llink() are 
0840: 72 65 73 6f 6c 76 65 64 20 75 73 69 6e 67 20 24  resolved using $
0850: 3a 3a 67 6c 69 6e 6b 28 29 2e 0a 23 20 0a 70 72  ::glink()..# .pr
0860: 6f 63 20 68 64 5f 72 65 73 6f 6c 76 65 5f 32 6e  oc hd_resolve_2n
0870: 64 70 61 73 73 20 7b 74 65 78 74 7d 20 7b 0a 20  dpass {text} {. 
0880: 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5c 5b   regsub -all {\[
0890: 28 2e 2a 3f 29 5c 5d 7d 20 24 74 65 78 74 20 5c  (.*?)\]} $text \
08a0: 0a 20 20 20 20 20 20 22 5c 31 37 35 3b 20 68 64  .      "\175; hd
08b0: 5f 72 65 73 6f 6c 76 65 5f 6f 6e 65 20 5c 31 37  _resolve_one \17
08c0: 33 5c 5c 31 5c 31 37 35 3b 20 68 64 5f 70 75 74  3\\1\175; hd_put
08d0: 73 20 5c 31 37 33 22 20 74 65 78 74 0a 20 20 65  s \173" text.  e
08e0: 76 61 6c 20 22 68 64 5f 70 75 74 73 20 5c 31 37  val "hd_puts \17
08f0: 33 24 74 65 78 74 5c 31 37 35 22 0a 7d 0a 70 72  3$text\175".}.pr
0900: 6f 63 20 68 64 5f 72 65 73 6f 6c 76 65 5f 6f 6e  oc hd_resolve_on
0910: 65 20 7b 78 7d 20 7b 0a 20 20 69 66 20 7b 5b 73  e {x} {.  if {[s
0920: 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72  tring is integer
0930: 20 24 78 5d 7d 20 7b 0a 20 20 20 20 68 64 5f 70   $x]} {.    hd_p
0940: 75 74 73 20 5c 5b 24 78 5c 5d 0a 20 20 20 20 72  uts \[$x\].    r
0950: 65 74 75 72 6e 0a 20 20 7d 0a 20 20 73 65 74 20  eturn.  }.  set 
0960: 78 32 20 5b 73 70 6c 69 74 20 24 78 20 7c 5d 0a  x2 [split $x |].
0970: 20 20 73 65 74 20 6b 77 20 5b 73 74 72 69 6e 67    set kw [string
0980: 20 74 72 69 6d 20 5b 6c 69 6e 64 65 78 20 24 78   trim [lindex $x
0990: 32 20 30 5d 5d 0a 20 20 69 66 20 7b 5b 6c 6c 65  2 0]].  if {[lle
09a0: 6e 67 74 68 20 24 78 32 5d 3d 3d 31 7d 20 7b 0a  ngth $x2]==1} {.
09b0: 20 20 20 20 73 65 74 20 63 6f 6e 74 65 6e 74 20      set content 
09c0: 24 6b 77 0a 20 20 20 20 72 65 67 73 75 62 20 7b  $kw.    regsub {
09d0: 5c 28 5b 5e 29 5d 2a 5c 29 7d 20 24 63 6f 6e 74  \([^)]*\)} $cont
09e0: 65 6e 74 20 7b 7d 20 6b 77 0a 20 20 20 20 72 65  ent {} kw.    re
09f0: 67 73 75 62 20 7b 3d 2e 2a 7d 20 24 6b 77 20 7b  gsub {=.*} $kw {
0a00: 7d 20 6b 77 0a 20 20 20 20 72 65 67 73 75 62 20  } kw.    regsub 
0a10: 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 41 2d 5a 30 2d  -all {[^a-zA-Z0-
0a20: 39 5f 2e 23 2f 20 2d 5d 7d 20 24 6b 77 20 7b 7d  9_.#/ -]} $kw {}
0a30: 20 6b 77 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20   kw.  } else {. 
0a40: 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b     regsub -all {
0a50: 5b 5e 61 2d 7a 41 2d 5a 30 2d 39 5f 2e 23 2f 20  [^a-zA-Z0-9_.#/ 
0a60: 2d 5d 7d 20 24 6b 77 20 7b 7d 20 6b 77 0a 20 20  -]} $kw {} kw.  
0a70: 20 20 73 65 74 20 63 6f 6e 74 65 6e 74 20 5b 73    set content [s
0a80: 74 72 69 6e 67 20 74 72 69 6d 20 5b 6c 69 6e 64  tring trim [lind
0a90: 65 78 20 24 78 32 20 31 5d 5d 0a 20 20 7d 0a 20  ex $x2 1]].  }. 
0aa0: 20 67 6c 6f 62 61 6c 20 68 64 20 6c 6c 69 6e 6b   global hd llink
0ab0: 20 67 6c 69 6e 6b 20 62 61 63 6b 6c 69 6e 6b 0a   glink backlink.
0ac0: 20 20 69 66 20 7b 24 68 64 28 65 6e 61 62 6c 65    if {$hd(enable
0ad0: 2d 6d 61 69 6e 29 7d 20 7b 0a 20 20 20 20 73 65  -main)} {.    se
0ae0: 74 20 66 6e 20 24 68 64 28 66 6e 2d 6d 61 69 6e  t fn $hd(fn-main
0af0: 29 0a 20 20 20 20 69 66 20 7b 24 68 64 28 66 72  ).    if {$hd(fr
0b00: 61 67 6d 65 6e 74 29 21 3d 22 22 7d 20 7b 0a 20  agment)!=""} {. 
0b10: 20 20 20 20 20 73 65 74 20 73 72 63 75 72 6c 20       set srcurl 
0b20: 24 66 6e 23 24 68 64 28 66 72 61 67 6d 65 6e 74  $fn#$hd(fragment
0b30: 29 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20  ).    } else {. 
0b40: 20 20 20 20 20 73 65 74 20 73 72 63 75 72 6c 20       set srcurl 
0b50: 24 66 6e 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  $fn.    }.    if
0b60: 20 7b 5b 72 65 67 65 78 70 20 7b 5e 5b 54 74 5d   {[regexp {^[Tt]
0b70: 69 63 6b 65 74 20 23 28 5c 64 2b 29 24 7d 20 24  icket #(\d+)$} $
0b80: 6b 77 20 61 6c 6c 20 74 6b 74 69 64 5d 7d 20 7b  kw all tktid]} {
0b90: 0a 20 20 20 20 20 20 73 65 74 20 75 72 6c 20 68  .      set url h
0ba0: 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65  ttp://www.sqlite
0bb0: 2e 6f 72 67 2f 63 76 73 74 72 61 63 2f 74 6b 74  .org/cvstrac/tkt
0bc0: 76 69 65 77 3f 74 6e 3d 24 74 6b 74 69 64 0a 20  view?tn=$tktid. 
0bd0: 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77       puts -nonew
0be0: 6c 69 6e 65 20 24 68 64 28 6d 61 69 6e 29 20 5c  line $hd(main) \
0bf0: 0a 20 20 20 20 20 20 20 20 22 3c 61 20 68 72 65  .        "<a hre
0c00: 66 3d 5c 22 24 75 72 6c 5c 22 3e 24 63 6f 6e 74  f=\"$url\">$cont
0c10: 65 6e 74 3c 2f 61 3e 22 0a 20 20 20 20 7d 20 65  ent</a>".    } e
0c20: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
0c30: 73 74 73 20 6c 6c 69 6e 6b 28 24 66 6e 3a 24 6b  sts llink($fn:$k
0c40: 77 29 5d 7d 20 7b 0a 20 20 20 20 20 20 70 75 74  w)]} {.      put
0c50: 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 68 64  s -nonewline $hd
0c60: 28 6d 61 69 6e 29 20 5c 0a 20 20 20 20 20 20 20  (main) \.       
0c70: 20 22 3c 61 20 68 72 65 66 3d 5c 22 24 68 64 28   "<a href=\"$hd(
0c80: 72 6f 6f 74 70 61 74 68 2d 6d 61 69 6e 29 24 6c  rootpath-main)$l
0c90: 6c 69 6e 6b 28 24 66 6e 3a 24 6b 77 29 5c 22 3e  link($fn:$kw)\">
0ca0: 24 63 6f 6e 74 65 6e 74 3c 2f 61 3e 22 0a 20 20  $content</a>".  
0cb0: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66    } elseif {[inf
0cc0: 6f 20 65 78 69 73 74 73 20 67 6c 69 6e 6b 28 24  o exists glink($
0cd0: 6b 77 29 5d 7d 20 7b 0a 20 20 20 20 20 20 70 75  kw)]} {.      pu
0ce0: 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 68  ts -nonewline $h
0cf0: 64 28 6d 61 69 6e 29 20 5c 0a 20 20 20 20 20 20  d(main) \.      
0d00: 20 20 22 3c 61 20 68 72 65 66 3d 5c 22 24 68 64    "<a href=\"$hd
0d10: 28 72 6f 6f 74 70 61 74 68 2d 6d 61 69 6e 29 24  (rootpath-main)$
0d20: 67 6c 69 6e 6b 28 24 6b 77 29 5c 22 3e 24 63 6f  glink($kw)\">$co
0d30: 6e 74 65 6e 74 3c 2f 61 3e 22 0a 20 20 20 20 7d  ntent</a>".    }
0d40: 20 65 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70   elseif {[regexp
0d50: 20 7b 5c 2e 67 69 66 24 7d 20 24 6b 77 5d 7d 20   {\.gif$} $kw]} 
0d60: 7b 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f  {.      puts -no
0d70: 6e 65 77 6c 69 6e 65 20 24 68 64 28 6d 61 69 6e  newline $hd(main
0d80: 29 20 5c 0a 20 20 20 20 20 20 20 20 22 3c 69 6d  ) \.        "<im
0d90: 67 20 73 72 63 3d 5c 22 24 68 64 28 72 6f 6f 74  g src=\"$hd(root
0da0: 70 61 74 68 2d 6d 61 69 6e 29 69 6d 61 67 65 73  path-main)images
0db0: 2f 24 6b 77 5c 22 3e 22 0a 20 20 20 20 7d 20 65  /$kw\">".    } e
0dc0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 70 75 74 73  lse {.      puts
0dd0: 20 73 74 64 65 72 72 20 22 45 52 52 4f 52 3a 20   stderr "ERROR: 
0de0: 75 6e 6b 6e 6f 77 6e 20 68 79 70 65 72 6c 69 6e  unknown hyperlin
0df0: 6b 20 74 61 72 67 65 74 3a 20 24 6b 77 22 0a 20  k target: $kw". 
0e00: 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77       puts -nonew
0e10: 6c 69 6e 65 20 24 68 64 28 6d 61 69 6e 29 20 22  line $hd(main) "
0e20: 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 72 65  <font color=\"re
0e30: 64 5c 22 3e 24 63 6f 6e 74 65 6e 74 3c 2f 66 6f  d\">$content</fo
0e40: 6e 74 3e 22 0a 20 20 20 20 7d 0a 20 20 20 20 6c  nt>".    }.    l
0e50: 61 70 70 65 6e 64 20 62 61 63 6b 6c 69 6e 6b 28  append backlink(
0e60: 24 6b 77 29 20 24 73 72 63 75 72 6c 0a 20 20 7d  $kw) $srcurl.  }
0e70: 0a 20 20 69 66 20 7b 24 68 64 28 65 6e 61 62 6c  .  if {$hd(enabl
0e80: 65 2d 61 75 78 29 7d 20 7b 0a 20 20 20 20 69 66  e-aux)} {.    if
0e90: 20 7b 5b 72 65 67 65 78 70 20 7b 5e 5b 54 74 5d   {[regexp {^[Tt]
0ea0: 69 63 6b 65 74 20 23 28 5c 64 2b 29 24 7d 20 24  icket #(\d+)$} $
0eb0: 6b 77 20 61 6c 6c 20 74 6b 74 69 64 5d 7d 20 7b  kw all tktid]} {
0ec0: 0a 20 20 20 20 20 20 73 65 74 20 75 72 6c 20 68  .      set url h
0ed0: 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65  ttp://www.sqlite
0ee0: 2e 6f 72 67 2f 63 76 73 74 72 61 63 2f 74 6b 74  .org/cvstrac/tkt
0ef0: 76 69 65 77 3f 74 6e 3d 24 74 6b 74 69 64 0a 20  view?tn=$tktid. 
0f00: 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77       puts -nonew
0f10: 6c 69 6e 65 20 24 68 64 28 61 75 78 29 20 5c 0a  line $hd(aux) \.
0f20: 20 20 20 20 20 20 20 20 22 3c 61 20 68 72 65 66          "<a href
0f30: 3d 5c 22 24 75 72 6c 5c 22 3e 24 63 6f 6e 74 65  =\"$url\">$conte
0f40: 6e 74 3c 2f 61 3e 22 0a 20 20 20 20 7d 20 65 6c  nt</a>".    } el
0f50: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
0f60: 74 73 20 67 6c 69 6e 6b 28 24 6b 77 29 5d 7d 20  ts glink($kw)]} 
0f70: 7b 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f  {.      puts -no
0f80: 6e 65 77 6c 69 6e 65 20 24 68 64 28 61 75 78 29  newline $hd(aux)
0f90: 20 5c 0a 20 20 20 20 20 20 20 20 22 3c 61 20 68   \.        "<a h
0fa0: 72 65 66 3d 5c 22 24 68 64 28 72 6f 6f 74 70 61  ref=\"$hd(rootpa
0fb0: 74 68 2d 61 75 78 29 24 67 6c 69 6e 6b 28 24 6b  th-aux)$glink($k
0fc0: 77 29 5c 22 3e 24 63 6f 6e 74 65 6e 74 3c 2f 61  w)\">$content</a
0fd0: 3e 22 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20  >".    } elseif 
0fe0: 7b 5b 72 65 67 65 78 70 20 7b 5c 2e 67 69 66 24  {[regexp {\.gif$
0ff0: 7d 20 24 6b 77 5d 7d 20 7b 0a 20 20 20 20 20 20  } $kw]} {.      
1000: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
1010: 24 68 64 28 6d 61 69 6e 29 20 5c 0a 20 20 20 20  $hd(main) \.    
1020: 20 20 20 20 22 3c 69 6d 67 20 73 72 63 3d 5c 22      "<img src=\"
1030: 24 68 64 28 72 6f 6f 74 70 61 74 68 2d 61 75 78  $hd(rootpath-aux
1040: 29 69 6d 61 67 65 73 2f 24 6b 77 5c 22 3e 22 0a  )images/$kw\">".
1050: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
1060: 20 20 20 70 75 74 73 20 73 74 64 65 72 72 20 22     puts stderr "
1070: 45 52 52 4f 52 3a 20 75 6e 6b 6e 6f 77 6e 20 68  ERROR: unknown h
1080: 79 70 65 72 6c 69 6e 6b 20 74 61 72 67 65 74 3a  yperlink target:
1090: 20 24 6b 77 22 0a 20 20 20 20 20 20 70 75 74 73   $kw".      puts
10a0: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 68 64 28   -nonewline $hd(
10b0: 61 75 78 29 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f  aux) "<font colo
10c0: 72 3d 5c 22 72 65 64 5c 22 3e 24 63 6f 6e 74 65  r=\"red\">$conte
10d0: 6e 74 3c 2f 66 6f 6e 74 3e 22 0a 20 20 20 20 7d  nt</font>".    }
10e0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 62 61 63  .    lappend bac
10f0: 6b 6c 69 6e 6b 28 24 6b 77 29 20 24 68 64 28 66  klink($kw) $hd(f
1100: 6e 2d 61 75 78 29 0a 20 20 7d 0a 7d 0a 0a 0a 0a  n-aux).  }.}....
1110: 23 20 52 65 63 6f 72 64 20 74 68 65 20 66 61 63  # Record the fac
1120: 74 20 74 68 61 74 20 61 6c 6c 20 6b 65 79 77 6f  t that all keywo
1130: 72 64 73 20 67 69 76 65 6e 20 69 6e 20 74 68 65  rds given in the
1140: 20 61 72 67 75 6d 65 6e 74 20 6c 69 73 74 20 73   argument list s
1150: 68 6f 75 6c 64 0a 23 20 63 61 75 73 65 20 61 20  hould.# cause a 
1160: 6a 75 6d 70 20 74 6f 20 74 68 65 20 63 75 72 72  jump to the curr
1170: 65 6e 74 20 6c 6f 63 61 74 69 6f 6e 20 69 6e 20  ent location in 
1180: 74 68 65 20 63 75 72 72 65 6e 74 20 66 69 6c 65  the current file
1190: 2e 0a 23 0a 23 20 49 66 20 6f 6e 6c 79 20 74 68  ..#.# If only th
11a0: 65 20 6d 61 69 6e 20 6f 75 74 70 75 74 20 66 69  e main output fi
11b0: 6c 65 20 69 73 20 6f 70 65 6e 2c 20 74 68 65 6e  le is open, then
11c0: 20 61 6c 6c 20 72 65 66 65 72 65 6e 63 65 73 20   all references 
11d0: 74 6f 20 74 68 65 0a 23 20 6b 65 79 77 6f 72 64  to the.# keyword
11e0: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 6d 61 69   jump to the mai
11f0: 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 2e 20 20  n output file.  
1200: 49 66 20 62 6f 74 68 20 6d 61 69 6e 20 61 6e 64  If both main and
1210: 20 61 75 78 20 61 72 65 0a 23 20 6f 70 65 6e 20   aux are.# open 
1220: 74 68 65 6e 20 72 65 66 65 72 65 6e 63 65 73 20  then references 
1230: 69 6e 20 74 68 65 20 6d 61 69 6e 20 66 69 6c 65  in the main file
1240: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 6d 61 69   jump to the mai
1250: 6e 20 66 69 6c 65 20 61 6e 64 20 61 6c 6c 0a 23  n file and all.#
1260: 20 6f 74 68 65 72 20 72 65 66 65 72 65 6e 63 65   other reference
1270: 73 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 75  s jump to the au
1280: 78 69 6c 69 61 72 79 20 66 69 6c 65 2e 0a 23 0a  xiliary file..#.
1290: 23 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  # This procedure
12a0: 20 69 73 20 6f 6e 6c 79 20 61 63 74 69 76 65 20   is only active 
12b0: 64 75 72 69 6e 67 20 74 68 65 20 66 69 72 73 74  during the first
12c0: 20 70 61 73 73 20 77 68 65 6e 20 77 65 20 61 72   pass when we ar
12d0: 65 0a 23 20 63 6f 6c 6c 65 63 74 69 6e 67 20 68  e.# collecting h
12e0: 79 70 65 72 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61  yperlink informa
12f0: 74 69 6f 6e 2e 20 20 54 68 69 73 20 70 72 6f 63  tion.  This proc
1300: 65 64 75 72 65 20 69 73 20 72 65 64 65 66 69 6e  edure is redefin
1310: 65 64 20 74 6f 0a 23 20 62 65 20 61 20 6e 6f 2d  ed to.# be a no-
1320: 6f 70 20 62 65 66 6f 72 65 20 74 68 65 20 73 74  op before the st
1330: 61 72 74 20 6f 66 20 74 68 65 20 73 65 63 6f 6e  art of the secon
1340: 64 20 70 61 73 73 2e 0a 23 0a 70 72 6f 63 20 68  d pass..#.proc h
1350: 64 5f 6b 65 79 77 6f 72 64 73 20 7b 61 72 67 73  d_keywords {args
1360: 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 67 6c 69  } {.  global gli
1370: 6e 6b 20 6c 6c 69 6e 6b 20 68 64 0a 20 20 69 66  nk llink hd.  if
1380: 20 7b 24 68 64 28 66 72 61 67 6d 65 6e 74 29 3d   {$hd(fragment)=
1390: 3d 22 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 6c  =""} {.    set l
13a0: 75 72 6c 20 24 68 64 28 66 6e 2d 6d 61 69 6e 29  url $hd(fn-main)
13b0: 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
13c0: 73 65 74 20 6c 75 72 6c 20 22 23 24 68 64 28 66  set lurl "#$hd(f
13d0: 72 61 67 6d 65 6e 74 29 22 0a 20 20 7d 0a 20 20  ragment)".  }.  
13e0: 73 65 74 20 66 6e 20 24 68 64 28 66 6e 2d 6d 61  set fn $hd(fn-ma
13f0: 69 6e 29 0a 20 20 69 66 20 7b 5b 69 6e 66 6f 20  in).  if {[info 
1400: 65 78 69 73 74 73 20 68 64 28 61 75 78 29 5d 7d  exists hd(aux)]}
1410: 20 7b 0a 20 20 20 20 73 65 74 20 67 75 72 6c 20   {.    set gurl 
1420: 24 68 64 28 66 6e 2d 61 75 78 29 0a 20 20 7d 20  $hd(fn-aux).  } 
1430: 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 67  else {.    set g
1440: 75 72 6c 20 7b 7d 0a 20 20 20 20 69 66 20 7b 24  url {}.    if {$
1450: 68 64 28 66 72 61 67 6d 65 6e 74 29 21 3d 22 22  hd(fragment)!=""
1460: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 6c 75  } {.      set lu
1470: 72 6c 20 24 68 64 28 66 6e 2d 6d 61 69 6e 29 23  rl $hd(fn-main)#
1480: 24 68 64 28 66 72 61 67 6d 65 6e 74 29 0a 20 20  $hd(fragment).  
1490: 20 20 7d 0a 20 20 7d 0a 20 20 66 6f 72 65 61 63    }.  }.  foreac
14a0: 68 20 61 20 24 61 72 67 73 20 7b 0a 20 20 20 20  h a $args {.    
14b0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
14c0: 20 67 6c 69 6e 6b 28 24 61 29 5d 7d 20 7b 0a 20   glink($a)]} {. 
14d0: 20 20 20 20 20 70 75 74 73 20 73 74 64 65 72 72       puts stderr
14e0: 20 22 57 41 52 4e 49 4e 47 3a 20 64 75 70 6c 69   "WARNING: dupli
14f0: 63 61 74 65 20 6b 65 79 77 6f 72 64 20 5c 22 24  cate keyword \"$
1500: 61 5c 22 20 2d 20 24 67 6c 69 6e 6b 28 24 61 29  a\" - $glink($a)
1510: 20 61 6e 64 20 24 6c 75 72 6c 22 0a 20 20 20 20   and $lurl".    
1520: 7d 0a 20 20 20 20 69 66 20 7b 24 67 75 72 6c 3d  }.    if {$gurl=
1530: 3d 22 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  =""} {.      set
1540: 20 67 6c 69 6e 6b 28 24 61 29 20 24 6c 75 72 6c   glink($a) $lurl
1550: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  .    } else {.  
1560: 20 20 20 20 73 65 74 20 67 6c 69 6e 6b 28 24 61      set glink($a
1570: 29 20 24 67 75 72 6c 0a 20 20 20 20 20 20 73 65  ) $gurl.      se
1580: 74 20 6c 6c 69 6e 6b 28 24 66 6e 3a 24 61 29 20  t llink($fn:$a) 
1590: 24 6c 75 72 6c 0a 20 20 20 20 7d 0a 20 20 7d 0a  $lurl.    }.  }.
15a0: 7d 0a 0a 23 20 53 74 61 72 74 20 61 20 6e 65 77  }..# Start a new
15b0: 20 66 72 61 67 6d 65 6e 74 20 69 6e 20 74 68 65   fragment in the
15c0: 20 6d 61 69 6e 20 66 69 6c 65 2e 20 20 47 69 76   main file.  Giv
15d0: 65 20 74 68 65 20 6e 65 77 20 66 72 61 67 6d 65  e the new fragme
15e0: 6e 74 20 74 68 65 0a 23 20 69 6e 64 69 63 61 74  nt the.# indicat
15f0: 65 64 20 6e 61 6d 65 2e 20 20 41 6e 79 20 6b 65  ed name.  Any ke
1600: 79 77 6f 72 64 73 20 64 65 66 69 6e 65 64 20 61  ywords defined a
1610: 66 74 65 72 20 74 68 69 73 20 70 6f 69 6e 74 20  fter this point 
1620: 77 69 6c 6c 20 72 65 66 65 72 0a 23 20 74 6f 20  will refer.# to 
1630: 74 68 65 20 66 72 61 67 6d 65 6e 74 2c 20 6e 6f  the fragment, no
1640: 74 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69  t to the beginni
1650: 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a  ng of the file..
1660: 23 0a 23 20 4f 6e 6c 79 20 74 68 65 20 6d 61 69  #.# Only the mai
1670: 6e 20 66 69 6c 65 20 6d 61 79 20 68 61 76 65 20  n file may have 
1680: 66 72 61 67 6d 65 6e 74 73 2e 20 20 41 75 78 69  fragments.  Auxi
1690: 6c 69 61 72 79 20 66 69 6c 65 73 20 61 72 65 20  liary files are 
16a0: 61 73 73 75 6d 65 64 0a 23 20 74 6f 20 62 65 20  assumed.# to be 
16b0: 73 6d 61 6c 6c 20 65 6e 6f 75 67 68 20 74 68 61  small enough tha
16c0: 74 20 66 72 61 67 6d 65 6e 74 73 20 61 72 65 20  t fragments are 
16d0: 6e 6f 74 20 68 65 6c 70 66 75 6c 2e 0a 23 0a 70  not helpful..#.p
16e0: 72 6f 63 20 68 64 5f 66 72 61 67 6d 65 6e 74 20  roc hd_fragment 
16f0: 7b 6e 61 6d 65 20 61 72 67 73 7d 20 7b 0a 20 20  {name args} {.  
1700: 67 6c 6f 62 61 6c 20 68 64 0a 20 20 73 65 74 20  global hd.  set 
1710: 68 64 28 66 72 61 67 6d 65 6e 74 29 20 24 6e 61  hd(fragment) $na
1720: 6d 65 0a 20 20 70 75 74 73 20 24 68 64 28 6d 61  me.  puts $hd(ma
1730: 69 6e 29 20 22 3c 61 20 6e 61 6d 65 3d 5c 22 24  in) "<a name=\"$
1740: 6e 61 6d 65 5c 22 3e 3c 2f 61 3e 22 0a 20 20 65  name\"></a>".  e
1750: 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72 64 73 20  val hd_keywords 
1760: 24 61 72 67 73 0a 7d 0a 0a 23 20 57 72 69 74 65  $args.}..# Write
1770: 20 72 61 77 20 6f 75 74 70 75 74 20 74 6f 20 62   raw output to b
1780: 6f 74 68 20 74 68 65 20 6d 61 69 6e 20 66 69 6c  oth the main fil
1790: 65 20 61 6e 64 20 74 68 65 20 61 75 78 69 6c 69  e and the auxili
17a0: 61 72 79 2e 20 20 4f 6e 6c 79 20 77 72 69 74 65  ary.  Only write
17b0: 0a 23 20 74 6f 20 66 69 6c 65 73 20 74 68 61 74  .# to files that
17c0: 20 61 72 65 20 65 6e 61 62 6c 65 64 2e 0a 23 0a   are enabled..#.
17d0: 70 72 6f 63 20 68 64 5f 70 75 74 73 20 7b 74 65  proc hd_puts {te
17e0: 78 74 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68  xt} {.  global h
17f0: 64 0a 20 20 69 66 20 7b 24 68 64 28 65 6e 61 62  d.  if {$hd(enab
1800: 6c 65 2d 6d 61 69 6e 29 7d 20 7b 0a 20 20 20 20  le-main)} {.    
1810: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
1820: 24 68 64 28 6d 61 69 6e 29 20 24 74 65 78 74 0a  $hd(main) $text.
1830: 20 20 7d 0a 20 20 69 66 20 7b 24 68 64 28 65 6e    }.  if {$hd(en
1840: 61 62 6c 65 2d 61 75 78 29 7d 20 7b 0a 20 20 20  able-aux)} {.   
1850: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65   puts -nonewline
1860: 20 24 68 64 28 61 75 78 29 20 24 74 65 78 74 0a   $hd(aux) $text.
1870: 20 20 7d 0a 7d 0a 0a 23 20 45 6e 61 62 6c 65 20    }.}..# Enable 
1880: 6f 72 20 64 69 73 61 62 6c 65 20 74 68 65 20 6d  or disable the m
1890: 61 69 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 2e  ain output file.
18a0: 0a 23 0a 70 72 6f 63 20 68 64 5f 65 6e 61 62 6c  .#.proc hd_enabl
18b0: 65 5f 6d 61 69 6e 20 7b 62 6f 6f 6c 65 61 6e 7d  e_main {boolean}
18c0: 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68 64 0a 20   {.  global hd. 
18d0: 20 73 65 74 20 68 64 28 65 6e 61 62 6c 65 2d 6d   set hd(enable-m
18e0: 61 69 6e 29 20 24 62 6f 6f 6c 65 61 6e 0a 7d 0a  ain) $boolean.}.
18f0: 0a 23 20 45 6e 61 62 6c 65 20 6f 72 20 64 69 73  .# Enable or dis
1900: 61 62 6c 65 20 74 68 65 20 61 75 78 69 6c 69 61  able the auxilia
1910: 72 79 20 6f 75 74 70 75 74 20 66 69 6c 65 2e 0a  ry output file..
1920: 23 0a 70 72 6f 63 20 68 64 5f 65 6e 61 62 6c 65  #.proc hd_enable
1930: 5f 61 75 78 20 7b 62 6f 6f 6c 65 61 6e 7d 20 7b  _aux {boolean} {
1940: 0a 20 20 67 6c 6f 62 61 6c 20 68 64 0a 20 20 73  .  global hd.  s
1950: 65 74 20 68 64 28 65 6e 61 62 6c 65 2d 61 75 78  et hd(enable-aux
1960: 29 20 24 62 6f 6f 6c 65 61 6e 0a 7d 0a 73 65 74  ) $boolean.}.set
1970: 20 68 64 28 65 6e 61 62 6c 65 2d 61 75 78 29 20   hd(enable-aux) 
1980: 30 0a 0a 23 20 4f 70 65 6e 20 74 68 65 20 6d 61  0..# Open the ma
1990: 69 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 2e 20  in output file. 
19a0: 20 24 66 69 6c 65 6e 61 6d 65 20 69 73 20 72 65   $filename is re
19b0: 6c 61 74 69 76 65 20 74 6f 20 24 3a 3a 44 45 53  lative to $::DES
19c0: 54 2e 20 20 0a 23 0a 70 72 6f 63 20 68 64 5f 6f  T.  .#.proc hd_o
19d0: 70 65 6e 5f 6d 61 69 6e 20 7b 66 69 6c 65 6e 61  pen_main {filena
19e0: 6d 65 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68  me} {.  global h
19f0: 64 20 44 45 53 54 0a 20 20 68 64 5f 63 6c 6f 73  d DEST.  hd_clos
1a00: 65 5f 6d 61 69 6e 0a 20 20 73 65 74 20 68 64 28  e_main.  set hd(
1a10: 66 6e 2d 6d 61 69 6e 29 20 24 66 69 6c 65 6e 61  fn-main) $filena
1a20: 6d 65 0a 20 20 73 65 74 20 68 64 28 72 6f 6f 74  me.  set hd(root
1a30: 70 61 74 68 2d 6d 61 69 6e 29 20 5b 68 64 5f 72  path-main) [hd_r
1a40: 6f 6f 74 70 61 74 68 20 24 66 69 6c 65 6e 61 6d  ootpath $filenam
1a50: 65 5d 0a 20 20 73 65 74 20 68 64 28 6d 61 69 6e  e].  set hd(main
1a60: 29 20 5b 6f 70 65 6e 20 24 44 45 53 54 2f 24 66  ) [open $DEST/$f
1a70: 69 6c 65 6e 61 6d 65 20 77 5d 0a 20 20 73 65 74  ilename w].  set
1a80: 20 68 64 28 65 6e 61 62 6c 65 2d 6d 61 69 6e 29   hd(enable-main)
1a90: 20 31 0a 20 20 73 65 74 20 68 64 28 66 72 61 67   1.  set hd(frag
1aa0: 6d 65 6e 74 29 20 7b 7d 0a 7d 0a 0a 23 20 49 66  ment) {}.}..# If
1ab0: 20 24 66 69 6c 65 6e 61 6d 65 20 69 73 20 61 20   $filename is a 
1ac0: 70 61 74 68 20 66 72 6f 6d 20 24 3a 3a 44 45 53  path from $::DES
1ad0: 54 20 74 6f 20 61 20 66 69 6c 65 2c 20 72 65 74  T to a file, ret
1ae0: 75 72 6e 20 61 20 70 61 74 68 0a 23 20 66 72 6f  urn a path.# fro
1af0: 6d 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  m the directory 
1b00: 63 6f 6e 74 61 69 6e 69 6e 67 20 24 66 69 6c 65  containing $file
1b10: 6e 61 6d 65 20 62 61 63 6b 20 74 6f 20 74 68 65  name back to the
1b20: 20 64 69 72 65 63 74 6f 72 79 20 24 3a 3a 44 45   directory $::DE
1b30: 53 54 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 72 6f  ST..#.proc hd_ro
1b40: 6f 74 70 61 74 68 20 7b 66 69 6c 65 6e 61 6d 65  otpath {filename
1b50: 7d 20 7b 0a 20 20 73 65 74 20 75 70 20 7b 7d 0a  } {.  set up {}.
1b60: 20 20 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68    set n [llength
1b70: 20 5b 73 70 6c 69 74 20 24 66 69 6c 65 6e 61 6d   [split $filenam
1b80: 65 20 2f 5d 5d 0a 20 20 69 66 20 7b 24 6e 3c 3d  e /]].  if {$n<=
1b90: 31 7d 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  1} {.    return 
1ba0: 7b 7d 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  {}.  } else {.  
1bb0: 20 20 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67    return [string
1bc0: 20 72 65 70 65 61 74 20 2e 2e 2f 20 5b 65 78 70   repeat ../ [exp
1bd0: 72 20 7b 24 6e 2d 31 7d 5d 5d 0a 20 20 7d 0a 7d  r {$n-1}]].  }.}
1be0: 0a 0a 23 20 43 6c 6f 73 65 20 74 68 65 20 6d 61  ..# Close the ma
1bf0: 69 6e 20 6f 75 74 70 75 74 20 66 69 6c 65 2e 0a  in output file..
1c00: 23 0a 70 72 6f 63 20 68 64 5f 63 6c 6f 73 65 5f  #.proc hd_close_
1c10: 6d 61 69 6e 20 7b 7d 20 7b 0a 20 20 67 6c 6f 62  main {} {.  glob
1c20: 61 6c 20 68 64 0a 20 20 68 64 5f 63 6c 6f 73 65  al hd.  hd_close
1c30: 5f 61 75 78 0a 20 20 69 66 20 7b 5b 69 6e 66 6f  _aux.  if {[info
1c40: 20 65 78 69 73 74 73 20 68 64 28 6d 61 69 6e 29   exists hd(main)
1c50: 5d 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 24 68  ]} {.    puts $h
1c60: 64 28 6d 61 69 6e 29 20 24 68 64 28 66 6f 6f 74  d(main) $hd(foot
1c70: 65 72 29 0a 20 20 20 20 63 6c 6f 73 65 20 24 68  er).    close $h
1c80: 64 28 6d 61 69 6e 29 0a 20 20 20 20 75 6e 73 65  d(main).    unse
1c90: 74 20 68 64 28 6d 61 69 6e 29 0a 20 20 7d 0a 7d  t hd(main).  }.}
1ca0: 0a 0a 23 20 4f 70 65 6e 20 74 68 65 20 61 75 78  ..# Open the aux
1cb0: 69 6c 69 61 72 79 20 6f 75 74 70 75 74 20 66 69  iliary output fi
1cc0: 6c 65 2e 0a 23 0a 23 20 4d 6f 73 74 20 64 6f 63  le..#.# Most doc
1cd0: 75 6d 65 6e 74 73 20 68 61 76 65 20 6f 6e 6c 79  uments have only
1ce0: 20 61 20 6d 61 69 6e 20 66 69 6c 65 20 61 6e 64   a main file and
1cf0: 20 6e 6f 20 61 75 78 69 6c 69 61 72 79 2e 20 20   no auxiliary.  
1d00: 48 6f 77 65 76 65 72 2c 20 73 6f 6d 65 0a 23 20  However, some.# 
1d10: 6c 61 72 67 65 20 64 6f 63 75 6d 65 6e 74 73 20  large documents 
1d20: 61 72 65 20 62 72 6f 6b 65 6e 20 75 70 20 69 6e  are broken up in
1d30: 74 6f 20 73 6d 61 6c 6c 65 72 20 70 69 65 63 65  to smaller piece
1d40: 73 20 77 68 65 72 65 20 65 61 63 68 20 73 6d 61  s where each sma
1d50: 6c 6c 65 72 20 70 69 65 63 65 0a 23 20 69 73 20  ller piece.# is 
1d60: 61 6e 20 61 75 78 69 6c 69 61 72 79 20 66 69 6c  an auxiliary fil
1d70: 65 2e 20 20 54 68 65 72 65 20 77 69 6c 6c 20 74  e.  There will t
1d80: 79 70 69 63 61 6c 6c 79 20 62 65 20 65 69 74 68  ypically be eith
1d90: 65 72 20 6d 61 6e 79 20 61 75 78 69 6c 69 61 72  er many auxiliar
1da0: 79 20 66 69 6c 65 73 0a 23 20 6f 72 20 6e 6f 20  y files.# or no 
1db0: 61 75 78 69 6c 69 61 72 79 20 66 69 6c 65 73 20  auxiliary files 
1dc0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1dd0: 65 61 63 68 20 6d 61 69 6e 20 66 69 6c 65 2e 0a  each main file..
1de0: 23 0a 70 72 6f 63 20 68 64 5f 6f 70 65 6e 5f 61  #.proc hd_open_a
1df0: 75 78 20 7b 66 69 6c 65 6e 61 6d 65 7d 20 7b 0a  ux {filename} {.
1e00: 20 20 67 6c 6f 62 61 6c 20 68 64 20 44 45 53 54    global hd DEST
1e10: 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 61 75 78 0a  .  hd_close_aux.
1e20: 20 20 73 65 74 20 68 64 28 66 6e 2d 61 75 78 29    set hd(fn-aux)
1e30: 20 24 66 69 6c 65 6e 61 6d 65 0a 20 20 73 65 74   $filename.  set
1e40: 20 68 64 28 72 6f 6f 74 70 61 74 68 2d 61 75 78   hd(rootpath-aux
1e50: 29 20 5b 68 64 5f 72 6f 6f 74 70 61 74 68 20 24  ) [hd_rootpath $
1e60: 66 69 6c 65 6e 61 6d 65 5d 0a 20 20 73 65 74 20  filename].  set 
1e70: 68 64 28 61 75 78 29 20 5b 6f 70 65 6e 20 24 44  hd(aux) [open $D
1e80: 45 53 54 2f 24 66 69 6c 65 6e 61 6d 65 20 77 5d  EST/$filename w]
1e90: 0a 20 20 73 65 74 20 68 64 28 65 6e 61 62 6c 65  .  set hd(enable
1ea0: 2d 61 75 78 29 20 31 0a 7d 0a 0a 23 20 43 6c 6f  -aux) 1.}..# Clo
1eb0: 73 65 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  se the auxiliary
1ec0: 20 6f 75 74 70 75 74 20 66 69 6c 65 0a 23 0a 70   output file.#.p
1ed0: 72 6f 63 20 68 64 5f 63 6c 6f 73 65 5f 61 75 78  roc hd_close_aux
1ee0: 20 7b 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68   {} {.  global h
1ef0: 64 0a 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78  d.  if {[info ex
1f00: 69 73 74 73 20 68 64 28 61 75 78 29 5d 7d 20 7b  ists hd(aux)]} {
1f10: 0a 20 20 20 20 70 75 74 73 20 24 68 64 28 61 75  .    puts $hd(au
1f20: 78 29 20 24 68 64 28 66 6f 6f 74 65 72 29 0a 20  x) $hd(footer). 
1f30: 20 20 20 63 6c 6f 73 65 20 24 68 64 28 61 75 78     close $hd(aux
1f40: 29 0a 20 20 20 20 75 6e 73 65 74 20 68 64 28 61  ).    unset hd(a
1f50: 75 78 29 0a 20 20 20 20 73 65 74 20 68 64 28 65  ux).    set hd(e
1f60: 6e 61 62 6c 65 2d 61 75 78 29 20 30 0a 20 20 20  nable-aux) 0.   
1f70: 20 73 65 74 20 68 64 28 65 6e 61 62 6c 65 2d 6d   set hd(enable-m
1f80: 61 69 6e 29 20 31 0a 20 20 7d 0a 7d 0a 0a 0a 23  ain) 1.  }.}...#
1f90: 20 68 64 5f 70 75 74 73 69 6e 34 20 69 73 20 6c   hd_putsin4 is l
1fa0: 69 6b 65 20 70 75 74 73 20 65 78 63 65 70 74 20  ike puts except 
1fb0: 74 68 61 74 20 69 74 20 72 65 6d 6f 76 65 73 20  that it removes 
1fc0: 74 68 65 20 66 69 72 73 74 20 34 20 69 6e 64 65  the first 4 inde
1fd0: 6e 74 61 74 69 6f 6e 0a 23 20 63 68 61 72 61 63  ntation.# charac
1fe0: 74 65 72 73 20 66 72 6f 6d 20 65 61 63 68 20 6c  ters from each l
1ff0: 69 6e 65 2e 20 20 49 74 20 61 6c 73 6f 20 64 6f  ine.  It also do
2000: 65 73 20 76 61 72 69 61 62 6c 65 20 73 75 62 73  es variable subs
2010: 74 69 74 75 74 69 6f 6e 20 69 6e 0a 23 20 74 68  titution in.# th
2020: 65 20 6e 61 6d 65 73 70 61 63 65 20 6f 66 20 69  e namespace of i
2030: 74 73 20 63 61 6c 6c 69 6e 67 20 70 72 6f 63 65  ts calling proce
2040: 64 75 72 65 2e 0a 23 0a 70 72 6f 63 20 70 75 74  dure..#.proc put
2050: 73 69 6e 34 20 7b 66 64 20 74 65 78 74 7d 20 7b  sin4 {fd text} {
2060: 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 22  .  regsub -all "
2070: 5c 6e 20 20 20 20 22 20 24 74 65 78 74 20 5c 6e  \n    " $text \n
2080: 20 74 65 78 74 0a 20 20 70 75 74 73 20 24 66 64   text.  puts $fd
2090: 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73   [uplevel 1 [lis
20a0: 74 20 73 75 62 73 74 20 2d 6e 6f 62 61 63 6b 20  t subst -noback 
20b0: 2d 6e 6f 63 6f 6d 20 24 74 65 78 74 5d 5d 0a 7d  -nocom $text]].}
20c0: 0a 0a 23 20 41 20 70 72 6f 63 65 64 75 72 65 20  ..# A procedure 
20d0: 74 6f 20 77 72 69 74 65 20 74 68 65 20 63 6f 6d  to write the com
20e0: 6d 6f 6e 20 68 65 61 64 65 72 20 66 6f 75 6e 64  mon header found
20f0: 20 6f 6e 20 65 76 65 72 79 20 48 54 4d 4c 20 66   on every HTML f
2100: 69 6c 65 20 6f 6e 0a 23 20 74 68 65 20 53 51 4c  ile on.# the SQL
2110: 69 74 65 20 77 65 62 73 69 74 65 2e 0a 23 0a 70  ite website..#.p
2120: 72 6f 63 20 68 64 5f 68 65 61 64 65 72 20 7b 74  roc hd_header {t
2130: 69 74 6c 65 20 7b 73 72 63 66 69 6c 65 20 7b 7d  itle {srcfile {}
2140: 7d 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68 64  }} {.  global hd
2150: 0a 20 20 73 65 74 20 73 61 76 65 64 5f 65 6e 61  .  set saved_ena
2160: 62 6c 65 20 24 68 64 28 65 6e 61 62 6c 65 2d 6d  ble $hd(enable-m
2170: 61 69 6e 29 0a 20 20 69 66 20 7b 24 73 72 63 66  ain).  if {$srcf
2180: 69 6c 65 3d 3d 22 22 7d 20 7b 0a 20 20 20 20 73  ile==""} {.    s
2190: 65 74 20 66 64 20 24 68 64 28 61 75 78 29 0a 20  et fd $hd(aux). 
21a0: 20 20 20 73 65 74 20 70 61 74 68 20 24 68 64 28     set path $hd(
21b0: 72 6f 6f 74 70 61 74 68 2d 61 75 78 29 0a 20 20  rootpath-aux).  
21c0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74  } else {.    set
21d0: 20 66 64 20 24 68 64 28 6d 61 69 6e 29 0a 20 20   fd $hd(main).  
21e0: 20 20 73 65 74 20 70 61 74 68 20 24 68 64 28 72    set path $hd(r
21f0: 6f 6f 74 70 61 74 68 2d 6d 61 69 6e 29 0a 20 20  ootpath-main).  
2200: 7d 0a 20 20 70 75 74 73 20 24 66 64 20 7b 3c 21  }.  puts $fd {<!
2210: 44 4f 43 54 59 50 45 20 48 54 4d 4c 20 50 55 42  DOCTYPE HTML PUB
2220: 4c 49 43 20 22 2d 2f 2f 57 33 43 2f 2f 44 54 44  LIC "-//W3C//DTD
2230: 20 48 54 4d 4c 20 34 2e 30 31 2f 2f 45 4e 22 20   HTML 4.01//EN" 
2240: 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f  "http://www.w3.o
2250: 72 67 2f 54 52 2f 68 74 6d 6c 34 2f 73 74 72 69  rg/TR/html4/stri
2260: 63 74 2e 64 74 64 22 3e 7d 0a 20 20 70 75 74 73  ct.dtd">}.  puts
2270: 20 24 66 64 20 7b 3c 68 74 6d 6c 3e 3c 68 65 61   $fd {<html><hea
2280: 64 3e 7d 0a 20 20 70 75 74 73 20 24 66 64 20 22  d>}.  puts $fd "
2290: 3c 74 69 74 6c 65 3e 24 74 69 74 6c 65 3c 2f 74  <title>$title</t
22a0: 69 74 6c 65 3e 22 0a 20 20 70 75 74 73 69 6e 34  itle>".  putsin4
22b0: 20 24 66 64 20 7b 3c 73 74 79 6c 65 20 74 79 70   $fd {<style typ
22c0: 65 3d 22 74 65 78 74 2f 63 73 73 22 3e 0a 20 20  e="text/css">.  
22d0: 20 20 62 6f 64 79 20 7b 0a 20 20 20 20 20 20 20    body {.       
22e0: 20 6d 61 72 67 69 6e 3a 20 61 75 74 6f 3b 0a 20   margin: auto;. 
22f0: 20 20 20 20 20 20 20 66 6f 6e 74 2d 66 61 6d 69         font-fami
2300: 6c 79 3a 20 22 56 65 72 64 61 6e 61 22 20 22 73  ly: "Verdana" "s
2310: 61 6e 73 2d 73 65 72 69 66 22 3b 0a 20 20 20 20  ans-serif";.    
2320: 20 20 20 20 70 61 64 64 69 6e 67 3a 20 38 70 78      padding: 8px
2330: 20 31 25 3b 0a 20 20 20 20 7d 0a 20 20 20 20 0a   1%;.    }.    .
2340: 20 20 20 20 61 20 7b 20 63 6f 6c 6f 72 3a 20 23      a { color: #
2350: 34 35 37 33 35 66 20 7d 0a 20 20 20 20 61 3a 76  45735f }.    a:v
2360: 69 73 69 74 65 64 20 7b 20 63 6f 6c 6f 72 3a 20  isited { color: 
2370: 23 37 33 34 35 35 39 20 7d 0a 20 20 20 20 0a 20  #734559 }.    . 
2380: 20 20 20 2e 6c 6f 67 6f 20 7b 20 70 6f 73 69 74     .logo { posit
2390: 69 6f 6e 3a 61 62 73 6f 6c 75 74 65 3b 20 6d 61  ion:absolute; ma
23a0: 72 67 69 6e 3a 33 70 78 3b 20 7d 0a 20 20 20 20  rgin:3px; }.    
23b0: 2e 74 61 67 6c 69 6e 65 20 7b 0a 20 20 20 20 20  .tagline {.     
23c0: 20 66 6c 6f 61 74 3a 72 69 67 68 74 3b 0a 20 20   float:right;.  
23d0: 20 20 20 20 74 65 78 74 2d 61 6c 69 67 6e 3a 72      text-align:r
23e0: 69 67 68 74 3b 0a 20 20 20 20 20 20 66 6f 6e 74  ight;.      font
23f0: 2d 73 74 79 6c 65 3a 69 74 61 6c 69 63 3b 0a 20  -style:italic;. 
2400: 20 20 20 20 20 77 69 64 74 68 3a 32 34 30 70 78       width:240px
2410: 3b 0a 20 20 20 20 20 20 6d 61 72 67 69 6e 3a 31  ;.      margin:1
2420: 32 70 78 3b 0a 20 20 20 20 20 20 6d 61 72 67 69  2px;.      margi
2430: 6e 2d 74 6f 70 3a 35 38 70 78 3b 0a 20 20 20 20  n-top:58px;.    
2440: 7d 0a 20 20 20 20 0a 20 20 20 20 2e 74 6f 6f 6c  }.    .    .tool
2450: 62 61 72 20 7b 0a 20 20 20 20 20 20 66 6f 6e 74  bar {.      font
2460: 2d 76 61 72 69 61 6e 74 3a 20 73 6d 61 6c 6c 2d  -variant: small-
2470: 63 61 70 73 3b 0a 20 20 20 20 20 20 74 65 78 74  caps;.      text
2480: 2d 61 6c 69 67 6e 3a 20 63 65 6e 74 65 72 3b 0a  -align: center;.
2490: 20 20 20 20 20 20 6c 69 6e 65 2d 68 65 69 67 68        line-heigh
24a0: 74 3a 20 31 2e 36 65 6d 3b 0a 20 20 20 20 20 20  t: 1.6em;.      
24b0: 6d 61 72 67 69 6e 3a 20 30 3b 0a 20 20 20 20 20  margin: 0;.     
24c0: 20 70 61 64 64 69 6e 67 3a 31 70 78 20 38 70 78   padding:1px 8px
24d0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2e 74 6f 6f  ;.    }.    .too
24e0: 6c 62 61 72 20 61 20 7b 20 63 6f 6c 6f 72 3a 20  lbar a { color: 
24f0: 77 68 69 74 65 3b 20 74 65 78 74 2d 64 65 63 6f  white; text-deco
2500: 72 61 74 69 6f 6e 3a 20 6e 6f 6e 65 3b 20 70 61  ration: none; pa
2510: 64 64 69 6e 67 3a 20 36 70 78 20 31 32 70 78 3b  dding: 6px 12px;
2520: 20 7d 0a 20 20 20 20 2e 74 6f 6f 6c 62 61 72 20   }.    .toolbar 
2530: 61 3a 76 69 73 69 74 65 64 20 7b 20 63 6f 6c 6f  a:visited { colo
2540: 72 3a 20 77 68 69 74 65 3b 20 7d 0a 20 20 20 20  r: white; }.    
2550: 2e 74 6f 6f 6c 62 61 72 20 61 3a 68 6f 76 65 72  .toolbar a:hover
2560: 20 7b 20 63 6f 6c 6f 72 3a 20 23 38 30 61 37 39   { color: #80a79
2570: 36 3b 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20 77  6; background: w
2580: 68 69 74 65 3b 20 7d 0a 20 20 20 20 0a 20 20 20  hite; }.    .   
2590: 20 2e 63 6f 6e 74 65 6e 74 20 20 20 20 7b 20 6d   .content    { m
25a0: 61 72 67 69 6e 3a 20 35 25 3b 20 7d 0a 20 20 20  argin: 5%; }.   
25b0: 20 2e 63 6f 6e 74 65 6e 74 20 64 74 20 7b 20 66   .content dt { f
25c0: 6f 6e 74 2d 77 65 69 67 68 74 3a 62 6f 6c 64 3b  ont-weight:bold;
25d0: 20 7d 0a 20 20 20 20 2e 63 6f 6e 74 65 6e 74 20   }.    .content 
25e0: 64 64 20 7b 20 6d 61 72 67 69 6e 2d 62 6f 74 74  dd { margin-bott
25f0: 6f 6d 3a 20 32 35 70 78 3b 20 6d 61 72 67 69 6e  om: 25px; margin
2600: 2d 6c 65 66 74 3a 32 30 25 3b 20 7d 0a 20 20 20  -left:20%; }.   
2610: 20 2e 63 6f 6e 74 65 6e 74 20 75 6c 20 7b 20 70   .content ul { p
2620: 61 64 64 69 6e 67 3a 30 70 78 3b 20 70 61 64 64  adding:0px; padd
2630: 69 6e 67 2d 6c 65 66 74 3a 20 31 35 70 78 3b 20  ing-left: 15px; 
2640: 6d 61 72 67 69 6e 3a 30 70 78 3b 20 7d 0a 20 20  margin:0px; }.  
2650: 20 20 0a 20 20 20 20 2f 2a 20 72 6f 75 6e 64 65    .    /* rounde
2660: 64 20 63 6f 72 6e 65 72 73 20 2a 2f 0a 20 20 20  d corners */.   
2670: 20 2e 73 65 20 20 7b 20 62 61 63 6b 67 72 6f 75   .se  { backgrou
2680: 6e 64 3a 20 75 72 6c 28 24 7b 70 61 74 68 7d 69  nd: url(${path}i
2690: 6d 61 67 65 73 2f 73 65 2e 70 6e 67 29 20 31 30  mages/se.png) 10
26a0: 30 25 20 31 30 30 25 20 6e 6f 2d 72 65 70 65 61  0% 100% no-repea
26b0: 74 20 23 38 30 61 37 39 36 7d 0a 20 20 20 20 2e  t #80a796}.    .
26c0: 73 77 20 20 7b 20 62 61 63 6b 67 72 6f 75 6e 64  sw  { background
26d0: 3a 20 75 72 6c 28 24 7b 70 61 74 68 7d 69 6d 61  : url(${path}ima
26e0: 67 65 73 2f 73 77 2e 70 6e 67 29 20 30 25 20 31  ges/sw.png) 0% 1
26f0: 30 30 25 20 6e 6f 2d 72 65 70 65 61 74 20 7d 0a  00% no-repeat }.
2700: 20 20 20 20 2e 6e 65 20 20 7b 20 62 61 63 6b 67      .ne  { backg
2710: 72 6f 75 6e 64 3a 20 75 72 6c 28 24 7b 70 61 74  round: url(${pat
2720: 68 7d 69 6d 61 67 65 73 2f 6e 65 2e 70 6e 67 29  h}images/ne.png)
2730: 20 31 30 30 25 20 30 25 20 6e 6f 2d 72 65 70 65   100% 0% no-repe
2740: 61 74 20 7d 0a 20 20 20 20 2e 6e 77 20 20 7b 20  at }.    .nw  { 
2750: 62 61 63 6b 67 72 6f 75 6e 64 3a 20 75 72 6c 28  background: url(
2760: 24 7b 70 61 74 68 7d 69 6d 61 67 65 73 2f 6e 77  ${path}images/nw
2770: 2e 70 6e 67 29 20 30 25 20 30 25 20 6e 6f 2d 72  .png) 0% 0% no-r
2780: 65 70 65 61 74 20 7d 0a 0a 20 20 20 20 3c 2f 73  epeat }..    </s
2790: 74 79 6c 65 3e 0a 20 20 20 20 3c 6d 65 74 61 20  tyle>.    <meta 
27a0: 68 74 74 70 2d 65 71 75 69 76 3d 22 63 6f 6e 74  http-equiv="cont
27b0: 65 6e 74 2d 74 79 70 65 22 20 63 6f 6e 74 65 6e  ent-type" conten
27c0: 74 3d 22 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68  t="text/html; ch
27d0: 61 72 73 65 74 3d 55 54 46 2d 38 22 3e 0a 20 20  arset=UTF-8">.  
27e0: 7d 0a 20 20 70 75 74 73 20 24 66 64 20 7b 3c 2f  }.  puts $fd {</
27f0: 68 65 61 64 3e 7d 0a 20 20 70 75 74 73 69 6e 34  head>}.  putsin4
2800: 20 24 66 64 20 7b 3c 62 6f 64 79 3e 0a 20 20 20   $fd {<body>.   
2810: 20 3c 64 69 76 3e 3c 21 2d 2d 20 63 6f 6e 74 61   <div><!-- conta
2820: 69 6e 65 72 20 64 69 76 20 74 6f 20 73 61 74 69  iner div to sati
2830: 73 66 79 20 76 61 6c 69 64 61 74 6f 72 20 2d 2d  sfy validator --
2840: 3e 0a 20 20 20 20 0a 20 20 20 20 3c 61 20 68 72  >.    .    <a hr
2850: 65 66 3d 22 24 7b 70 61 74 68 7d 69 6e 64 65 78  ef="${path}index
2860: 2e 68 74 6d 6c 22 3e 0a 20 20 20 20 3c 69 6d 67  .html">.    <img
2870: 20 63 6c 61 73 73 3d 22 6c 6f 67 6f 22 20 73 72   class="logo" sr
2880: 63 3d 22 24 7b 70 61 74 68 7d 69 6d 61 67 65 73  c="${path}images
2890: 2f 53 51 4c 69 74 65 2e 67 69 66 22 20 61 6c 74  /SQLite.gif" alt
28a0: 3d 22 53 51 4c 69 74 65 20 4c 6f 67 6f 22 0a 20  ="SQLite Logo". 
28b0: 20 20 20 20 62 6f 72 64 65 72 3d 22 30 22 3e 3c      border="0"><
28c0: 2f 61 3e 0a 20 20 20 20 3c 64 69 76 3e 3c 21 2d  /a>.    <div><!-
28d0: 2d 20 49 45 20 68 61 63 6b 20 74 6f 20 70 72 65  - IE hack to pre
28e0: 76 65 6e 74 20 64 69 73 61 70 70 65 61 72 69 6e  vent disappearin
28f0: 67 20 6c 6f 67 6f 2d 2d 3e 3c 2f 64 69 76 3e 0a  g logo--></div>.
2900: 20 20 20 20 3c 64 69 76 20 63 6c 61 73 73 3d 22      <div class="
2910: 74 61 67 6c 69 6e 65 22 3e 53 6d 61 6c 6c 2e 20  tagline">Small. 
2920: 46 61 73 74 2e 20 52 65 6c 69 61 62 6c 65 2e 3c  Fast. Reliable.<
2930: 62 72 3e 43 68 6f 6f 73 65 20 61 6e 79 20 74 68  br>Choose any th
2940: 72 65 65 2e 3c 2f 64 69 76 3e 0a 0a 20 20 20 20  ree.</div>..    
2950: 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 31 30 30  <table width=100
2960: 25 20 73 74 79 6c 65 3d 22 63 6c 65 61 72 3a 62  % style="clear:b
2970: 6f 74 68 22 3e 3c 74 72 3e 3c 74 64 3e 0a 20 20  oth"><tr><td>.  
2980: 20 20 20 20 3c 64 69 76 20 63 6c 61 73 73 3d 22      <div class="
2990: 73 65 22 3e 3c 64 69 76 20 63 6c 61 73 73 3d 22  se"><div class="
29a0: 73 77 22 3e 3c 64 69 76 20 63 6c 61 73 73 3d 22  sw"><div class="
29b0: 6e 65 22 3e 3c 64 69 76 20 63 6c 61 73 73 3d 22  ne"><div class="
29c0: 6e 77 22 3e 0a 20 20 20 20 20 20 3c 64 69 76 20  nw">.      <div 
29d0: 63 6c 61 73 73 3d 22 74 6f 6f 6c 62 61 72 22 3e  class="toolbar">
29e0: 0a 20 20 20 20 20 20 20 20 3c 61 20 68 72 65 66  .        <a href
29f0: 3d 22 24 7b 70 61 74 68 7d 61 62 6f 75 74 2e 68  ="${path}about.h
2a00: 74 6d 6c 22 3e 41 62 6f 75 74 3c 2f 61 3e 0a 20  tml">About</a>. 
2a10: 20 20 20 20 20 20 20 3c 61 20 68 72 65 66 3d 22         <a href="
2a20: 24 7b 70 61 74 68 7d 73 69 74 65 6d 61 70 2e 68  ${path}sitemap.h
2a30: 74 6d 6c 22 3e 53 69 74 65 6d 61 70 3c 2f 61 3e  tml">Sitemap</a>
2a40: 0a 20 20 20 20 20 20 20 20 3c 61 20 68 72 65 66  .        <a href
2a50: 3d 22 24 7b 70 61 74 68 7d 64 6f 63 73 2e 68 74  ="${path}docs.ht
2a60: 6d 6c 22 3e 44 6f 63 75 6d 65 6e 74 61 74 69 6f  ml">Documentatio
2a70: 6e 3c 2f 61 3e 0a 20 20 20 20 20 20 20 20 3c 61  n</a>.        <a
2a80: 20 68 72 65 66 3d 22 24 7b 70 61 74 68 7d 64 6f   href="${path}do
2a90: 77 6e 6c 6f 61 64 2e 68 74 6d 6c 22 3e 44 6f 77  wnload.html">Dow
2aa0: 6e 6c 6f 61 64 3c 2f 61 3e 0a 20 20 20 20 20 20  nload</a>.      
2ab0: 20 20 3c 61 20 68 72 65 66 3d 22 24 7b 70 61 74    <a href="${pat
2ac0: 68 7d 63 6f 70 79 72 69 67 68 74 2e 68 74 6d 6c  h}copyright.html
2ad0: 22 3e 4c 69 63 65 6e 73 65 3c 2f 61 3e 0a 20 20  ">License</a>.  
2ae0: 20 20 20 20 20 20 3c 61 20 68 72 65 66 3d 22 24        <a href="$
2af0: 7b 70 61 74 68 7d 6e 65 77 73 2e 68 74 6d 6c 22  {path}news.html"
2b00: 3e 4e 65 77 73 3c 2f 61 3e 0a 20 20 20 20 20 20  >News</a>.      
2b10: 20 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70 3a    <a href="http:
2b20: 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67  //www.sqlite.org
2b30: 2f 63 76 73 74 72 61 63 2f 69 6e 64 65 78 22 3e  /cvstrac/index">
2b40: 44 65 76 65 6c 6f 70 65 72 73 3c 2f 61 3e 0a 20  Developers</a>. 
2b50: 20 20 20 20 20 20 20 3c 61 20 68 72 65 66 3d 22         <a href="
2b60: 24 7b 70 61 74 68 7d 73 75 70 70 6f 72 74 2e 68  ${path}support.h
2b70: 74 6d 6c 22 3e 53 75 70 70 6f 72 74 3c 2f 61 3e  tml">Support</a>
2b80: 0a 20 20 20 20 20 20 3c 2f 64 69 76 3e 3c 2f 64  .      </div></d
2b90: 69 76 3e 3c 2f 64 69 76 3e 3c 2f 64 69 76 3e 3c  iv></div></div><
2ba0: 2f 64 69 76 3e 0a 20 20 20 20 3c 2f 74 64 3e 3c  /div>.    </td><
2bb0: 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 20 20 7d  /tr></table>.  }
2bc0: 0a 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69  .  if {[file exi
2bd0: 73 74 73 20 44 52 41 46 54 5d 7d 20 7b 0a 20 20  sts DRAFT]} {.  
2be0: 20 20 70 75 74 73 69 6e 34 20 24 66 64 20 7b 0a    putsin4 $fd {.
2bf0: 20 20 20 20 20 20 3c 70 20 61 6c 69 67 6e 3d 22        <p align="
2c00: 63 65 6e 74 65 72 22 3e 3c 66 6f 6e 74 20 73 69  center"><font si
2c10: 7a 65 3d 22 36 22 20 63 6f 6c 6f 72 3d 22 72 65  ze="6" color="re
2c20: 64 22 3e 2a 2a 2a 20 44 52 41 46 54 20 2a 2a 2a  d">*** DRAFT ***
2c30: 3c 2f 66 6f 6e 74 3e 3c 2f 70 3e 0a 20 20 20 20  </font></p>.    
2c40: 7d 0a 20 20 7d 0a 20 20 69 66 20 7b 24 73 72 63  }.  }.  if {$src
2c50: 66 69 6c 65 21 3d 22 22 7d 20 7b 0a 20 20 20 20  file!=""} {.    
2c60: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
2c70: 20 44 52 41 46 54 5d 7d 20 7b 0a 20 20 20 20 20   DRAFT]} {.     
2c80: 20 73 65 74 20 68 64 28 66 6f 6f 74 65 72 29 20   set hd(footer) 
2c90: 7b 0a 20 20 20 20 20 20 20 20 3c 70 20 61 6c 69  {.        <p ali
2ca0: 67 6e 3d 22 63 65 6e 74 65 72 22 3e 3c 66 6f 6e  gn="center"><fon
2cb0: 74 20 73 69 7a 65 3d 22 36 22 20 63 6f 6c 6f 72  t size="6" color
2cc0: 3d 22 72 65 64 22 3e 2a 2a 2a 20 44 52 41 46 54  ="red">*** DRAFT
2cd0: 20 2a 2a 2a 3c 2f 66 6f 6e 74 3e 3c 2f 70 3e 0a   ***</font></p>.
2ce0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 65 6c        }.    } el
2cf0: 73 65 20 7b 0a 20 20 20 20 20 20 73 65 74 20 68  se {.      set h
2d00: 64 28 66 6f 6f 74 65 72 29 20 7b 7d 0a 20 20 20  d(footer) {}.   
2d10: 20 7d 0a 20 20 20 20 61 70 70 65 6e 64 20 68 64   }.    append hd
2d20: 28 66 6f 6f 74 65 72 29 20 22 3c 68 72 3e 3c 73  (footer) "<hr><s
2d30: 6d 61 6c 6c 3e 3c 69 3e 5c 6e 22 0a 20 20 20 20  mall><i>\n".    
2d40: 73 65 74 20 6d 74 69 6d 65 20 5b 66 69 6c 65 20  set mtime [file 
2d50: 6d 74 69 6d 65 20 24 73 72 63 66 69 6c 65 5d 0a  mtime $srcfile].
2d60: 20 20 20 20 73 65 74 20 64 61 74 65 20 5b 63 6c      set date [cl
2d70: 6f 63 6b 20 66 6f 72 6d 61 74 20 24 6d 74 69 6d  ock format $mtim
2d80: 65 20 2d 66 6f 72 6d 61 74 20 7b 25 59 2f 25 6d  e -format {%Y/%m
2d90: 2f 25 64 20 25 48 3a 25 4d 3a 25 53 20 55 54 43  /%d %H:%M:%S UTC
2da0: 7d 20 2d 67 6d 74 20 31 5d 0a 20 20 20 20 61 70  } -gmt 1].    ap
2db0: 70 65 6e 64 20 68 64 28 66 6f 6f 74 65 72 29 20  pend hd(footer) 
2dc0: 22 54 68 69 73 20 70 61 67 65 20 6c 61 73 74 20  "This page last 
2dd0: 6d 6f 64 69 66 69 65 64 20 24 64 61 74 65 5c 6e  modified $date\n
2de0: 22 0a 20 20 20 20 61 70 70 65 6e 64 20 68 64 28  ".    append hd(
2df0: 66 6f 6f 74 65 72 29 20 22 3c 2f 69 3e 3c 2f 73  footer) "</i></s
2e00: 6d 61 6c 6c 3e 3c 2f 64 69 76 3e 3c 2f 62 6f 64  mall></div></bod
2e10: 79 3e 3c 2f 68 74 6d 6c 3e 22 0a 20 20 7d 20 65  y></html>".  } e
2e20: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 68 64  lse {.    set hd
2e30: 28 65 6e 61 62 6c 65 2d 6d 61 69 6e 29 20 24 73  (enable-main) $s
2e40: 61 76 65 64 5f 65 6e 61 62 6c 65 0a 20 20 7d 0a  aved_enable.  }.
2e50: 7d 0a 0a 23 20 49 6e 73 65 72 74 20 61 20 62 75  }..# Insert a bu
2e60: 62 62 6c 65 20 73 79 6e 74 61 78 20 64 69 61 67  bble syntax diag
2e70: 72 61 6d 20 69 6e 74 6f 20 74 68 65 20 6f 75 74  ram into the out
2e80: 70 75 74 2e 0a 23 0a 70 72 6f 63 20 42 75 62 62  put..#.proc Bubb
2e90: 6c 65 44 69 61 67 72 61 6d 20 7b 6e 61 6d 65 20  leDiagram {name 
2ea0: 7b 61 6e 6f 6e 79 6d 6f 75 73 5f 66 6c 61 67 20  {anonymous_flag 
2eb0: 30 7d 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68  0}} {.  global h
2ec0: 64 0a 0a 20 20 23 69 66 20 7b 21 24 61 6e 6f 6e  d..  #if {!$anon
2ed0: 79 6d 6f 75 73 5f 66 6c 61 67 7d 20 7b 0a 20 20  ymous_flag} {.  
2ee0: 23 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 22 3c  #  hd_resolve "<
2ef0: 68 34 3e 5c 5b 24 6e 61 6d 65 3a 5c 5d 3c 2f 68  h4>\[$name:\]</h
2f00: 34 3e 22 0a 20 20 23 7d 0a 20 20 68 64 5f 72 65  4>".  #}.  hd_re
2f10: 73 6f 6c 76 65 20 22 3c 68 34 3e 5c 5b 24 6e 61  solve "<h4>\[$na
2f20: 6d 65 3a 5c 5d 3c 2f 68 34 3e 22 0a 20 20 69 66  me:\]</h4>".  if
2f30: 20 7b 24 68 64 28 65 6e 61 62 6c 65 2d 6d 61 69   {$hd(enable-mai
2f40: 6e 29 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 24  n)} {.    puts $
2f50: 68 64 28 6d 61 69 6e 29 20 22 3c 62 6c 6f 63 6b  hd(main) "<block
2f60: 71 75 6f 74 65 3e 5c 0a 20 20 20 20 20 20 20 20  quote>\.        
2f70: 3c 69 6d 67 20 73 72 63 3d 5c 22 24 68 64 28 72  <img src=\"$hd(r
2f80: 6f 6f 74 70 61 74 68 2d 6d 61 69 6e 29 69 6d 61  ootpath-main)ima
2f90: 67 65 73 2f 73 79 6e 74 61 78 2f 24 6e 61 6d 65  ges/syntax/$name
2fa0: 2e 67 69 66 5c 22 3e 3c 2f 69 6d 67 3e 5c 0a 20  .gif\"></img>\. 
2fb0: 20 20 20 20 20 20 20 3c 2f 62 6c 6f 63 6b 71 75         </blockqu
2fc0: 6f 74 65 3e 22 0a 20 20 7d 0a 20 20 69 66 20 7b  ote>".  }.  if {
2fd0: 24 68 64 28 65 6e 61 62 6c 65 2d 61 75 78 29 7d  $hd(enable-aux)}
2fe0: 20 7b 0a 20 20 20 20 70 75 74 73 20 24 68 64 28   {.    puts $hd(
2ff0: 61 75 78 29 20 22 3c 62 6c 6f 63 6b 71 75 6f 74  aux) "<blockquot
3000: 65 3e 5c 0a 20 20 20 20 20 20 20 20 3c 69 6d 67  e>\.        <img
3010: 20 73 72 63 3d 5c 22 24 68 64 28 72 6f 6f 74 70   src=\"$hd(rootp
3020: 61 74 68 2d 61 75 78 29 69 6d 61 67 65 73 2f 73  ath-aux)images/s
3030: 79 6e 74 61 78 2f 24 6e 61 6d 65 2e 67 69 66 5c  yntax/$name.gif\
3040: 22 3e 3c 2f 69 6d 67 3e 5c 0a 20 20 20 20 20 20  "></img>\.      
3050: 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 22    </blockquote>"
3060: 0a 20 20 7d 0a 7d 0a 0a 23 20 52 65 63 6f 72 64  .  }.}..# Record
3070: 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74 2e 20   a requirement. 
3080: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure 
3090: 69 73 20 61 63 74 69 76 65 20 6f 6e 6c 79 20 66  is active only f
30a0: 6f 72 20 74 68 65 20 66 69 72 73 74 0a 23 20 70  or the first.# p
30b0: 61 73 73 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ass.  This proce
30c0: 64 75 72 65 20 62 65 63 6f 6d 65 73 20 61 20 6e  dure becomes a n
30d0: 6f 2d 6f 70 20 66 6f 72 20 74 68 65 20 73 65 63  o-op for the sec
30e0: 6f 6e 64 20 70 61 73 73 2e 20 20 44 75 72 69 6e  ond pass.  Durin
30f0: 67 0a 23 20 74 68 65 20 73 65 63 6f 6e 64 20 70  g.# the second p
3100: 61 73 73 2c 20 72 65 71 75 69 72 65 6d 65 6e 74  ass, requirement
3110: 73 20 6c 69 73 74 69 6e 67 20 72 65 70 6f 72 74  s listing report
3120: 20 67 65 6e 65 72 61 74 6f 72 73 20 63 61 6e 20   generators can 
3130: 75 73 65 20 74 68 65 0a 23 20 64 61 74 61 20 61  use the.# data a
3140: 63 63 75 6d 75 6c 61 74 65 64 20 64 75 72 69 6e  ccumulated durin
3150: 67 20 74 68 65 20 66 69 72 73 74 20 70 61 73 73  g the first pass
3160: 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68   to construct th
3170: 65 69 72 20 72 65 70 6f 72 74 73 2e 0a 23 0a 23  eir reports..#.#
3180: 20 49 66 20 74 68 65 20 22 76 65 72 62 61 74 69   If the "verbati
3190: 6d 22 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74  m" argument is t
31a0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 72 65  rue, then the re
31b0: 71 75 69 72 65 6d 65 6e 74 20 74 65 78 74 20 69  quirement text i
31c0: 73 0a 23 20 72 65 6e 64 65 72 65 64 20 61 73 20  s.# rendered as 
31d0: 69 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  is.  In other wo
31e0: 72 64 73 2c 20 74 68 65 20 72 65 71 75 69 72 65  rds, the require
31f0: 6d 65 6e 74 20 74 65 78 74 20 69 73 20 61 73 73  ment text is ass
3200: 75 6d 65 64 20 74 6f 0a 23 20 62 65 20 76 61 6c  umed to.# be val
3210: 69 64 20 48 54 4d 4c 20 77 69 74 68 20 61 6c 6c  id HTML with all
3220: 20 68 79 70 65 72 6c 69 6e 6b 73 20 61 6c 72 65   hyperlinks alre
3230: 61 64 79 20 72 65 73 6f 6c 76 65 64 2e 20 20 49  ady resolved.  I
3240: 66 20 74 68 65 20 22 76 65 72 62 61 74 69 6d 22  f the "verbatim"
3250: 0a 23 20 61 72 67 75 6d 65 6e 74 20 69 73 20 66  .# argument is f
3260: 61 6c 73 65 20 28 74 68 65 20 64 65 66 61 75 6c  alse (the defaul
3270: 74 29 20 74 68 65 6e 20 74 68 65 20 72 65 71 75  t) then the requ
3280: 69 72 65 6d 65 6e 74 20 74 65 78 74 20 69 73 20  irement text is 
3290: 72 65 6e 64 65 72 65 64 0a 23 20 75 73 69 6e 67  rendered.# using
32a0: 20 68 64 5f 72 65 6e 64 65 72 20 77 68 69 63 68   hd_render which
32b0: 20 77 69 6c 6c 20 66 69 6e 64 20 61 6e 20 65 78   will find an ex
32c0: 70 61 6e 64 20 68 79 70 65 72 6c 69 6e 6b 73 20  pand hyperlinks 
32d0: 77 69 74 68 69 6e 20 74 68 65 20 74 65 78 74 2e  within the text.
32e0: 0a 23 0a 23 20 54 68 65 20 22 63 6f 6d 6d 65 6e  .#.# The "commen
32f0: 74 22 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e  t" argument is n
3300: 6f 6e 2d 62 69 6e 64 69 6e 67 20 63 6f 6d 6d 65  on-binding comme
3310: 6e 74 61 72 79 20 61 6e 64 20 65 78 70 6c 61 6e  ntary and explan
3320: 61 74 69 6f 6e 20 74 68 61 74 0a 23 20 61 63 63  ation that.# acc
3330: 6f 6d 70 61 6e 69 65 73 20 74 68 65 20 72 65 71  ompanies the req
3340: 75 69 72 65 6d 65 6e 74 2e 0a 23 0a 70 72 6f 63  uirement..#.proc
3350: 20 68 64 5f 72 65 71 75 69 72 65 6d 65 6e 74 20   hd_requirement 
3360: 7b 69 64 20 74 65 78 74 20 64 65 72 69 76 65 64  {id text derived
3370: 66 72 6f 6d 20 63 6f 6d 6d 65 6e 74 7d 20 7b 0a  from comment} {.
3380: 20 20 67 6c 6f 62 61 6c 20 41 4c 4c 52 45 51 20    global ALLREQ 
3390: 41 4c 4c 52 45 51 5f 44 45 52 49 56 45 44 46 52  ALLREQ_DERIVEDFR
33a0: 4f 4d 20 41 4c 4c 52 45 51 5f 43 4f 4d 0a 20 20  OM ALLREQ_COM.  
33b0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
33c0: 20 41 4c 4c 52 45 51 28 24 69 64 29 5d 7d 20 7b   ALLREQ($id)]} {
33d0: 0a 20 20 20 20 70 75 74 73 20 73 74 64 65 72 72  .    puts stderr
33e0: 20 22 64 75 70 6c 69 63 61 74 65 20 72 65 71 75   "duplicate requ
33f0: 69 72 65 6d 65 6e 74 20 6c 61 62 65 6c 3a 20 24  irement label: $
3400: 69 64 22 0a 20 20 7d 0a 20 20 73 65 74 20 41 4c  id".  }.  set AL
3410: 4c 52 45 51 5f 44 45 52 49 56 45 44 46 52 4f 4d  LREQ_DERIVEDFROM
3420: 28 24 69 64 29 20 24 64 65 72 69 76 65 64 66 72  ($id) $derivedfr
3430: 6f 6d 0a 20 20 73 65 74 20 41 4c 4c 52 45 51 28  om.  set ALLREQ(
3440: 24 69 64 29 20 24 74 65 78 74 0a 20 20 73 65 74  $id) $text.  set
3450: 20 41 4c 4c 52 45 51 5f 43 4f 4d 28 24 69 64 29   ALLREQ_COM($id)
3460: 20 24 63 6f 6d 6d 65 6e 74 0a 7d 0a 0a 23 20 52   $comment.}..# R
3470: 65 61 64 20 61 20 62 6c 6f 63 6b 20 6f 66 20 72  ead a block of r
3480: 65 71 75 69 72 65 6d 65 6e 74 73 20 66 72 6f 6d  equirements from
3490: 20 61 6e 20 41 53 43 49 49 20 74 65 78 74 20 66   an ASCII text f
34a0: 69 6c 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  ile.  Store the.
34b0: 23 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 62  # information ob
34c0: 74 61 69 6e 65 64 20 69 6e 20 61 20 67 6c 6f 62  tained in a glob
34d0: 61 6c 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  al variable name
34e0: 64 20 62 79 20 74 68 65 20 73 65 63 6f 6e 64 20  d by the second 
34f0: 70 61 72 61 6d 65 74 65 72 2e 0a 23 0a 70 72 6f  parameter..#.pro
3500: 63 20 68 64 5f 72 65 61 64 5f 72 65 71 75 69 72  c hd_read_requir
3510: 65 6d 65 6e 74 5f 66 69 6c 65 20 7b 66 69 6c 65  ement_file {file
3520: 6e 61 6d 65 20 76 61 72 6e 61 6d 65 7d 20 7b 0a  name varname} {.
3530: 20 20 67 6c 6f 62 61 6c 20 68 64 5f 72 65 71 5f    global hd_req_
3540: 72 64 72 0a 20 20 68 64 5f 72 65 73 65 74 5f 72  rdr.  hd_reset_r
3550: 65 71 75 69 72 65 6d 65 6e 74 5f 72 65 61 64 65  equirement_reade
3560: 72 0a 20 20 73 65 74 20 69 6e 20 5b 6f 70 65 6e  r.  set in [open
3570: 20 24 66 69 6c 65 6e 61 6d 65 5d 0a 20 20 77 68   $filename].  wh
3580: 69 6c 65 20 7b 21 5b 65 6f 66 20 24 69 6e 5d 7d  ile {![eof $in]}
3590: 20 7b 0a 20 20 20 20 73 65 74 20 6c 69 6e 65 20   {.    set line 
35a0: 5b 67 65 74 73 20 24 69 6e 5d 0a 20 20 20 20 69  [gets $in].    i
35b0: 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 28 48 4c  f {[regexp {^(HL
35c0: 52 7c 55 4e 44 45 46 7c 53 59 53 52 45 51 29 20  R|UNDEF|SYSREQ) 
35d0: 2b 28 5b 48 53 55 5d 5c 64 2b 29 20 2a 28 2e 2a  +([HSU]\d+) *(.*
35e0: 29 7d 20 24 6c 69 6e 65 20 61 6c 6c 20 74 79 70  )} $line all typ
35f0: 65 20 72 6e 20 64 66 5d 7d 20 7b 0a 20 20 20 20  e rn df]} {.    
3600: 20 20 68 64 5f 61 64 64 5f 6f 6e 65 5f 72 65 71    hd_add_one_req
3610: 75 69 72 65 6d 65 6e 74 20 24 76 61 72 6e 61 6d  uirement $varnam
3620: 65 0a 20 20 20 20 20 20 73 65 74 20 68 64 5f 72  e.      set hd_r
3630: 65 71 5f 72 64 72 28 72 6e 29 20 24 72 6e 0a 20  eq_rdr(rn) $rn. 
3640: 20 20 20 20 20 73 65 74 20 68 64 5f 72 65 71 5f       set hd_req_
3650: 72 64 72 28 64 65 72 69 76 65 64 29 20 24 64 66  rdr(derived) $df
3660: 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b  .    } elseif {[
3670: 73 74 72 69 6e 67 20 74 72 69 6d 20 24 6c 69 6e  string trim $lin
3680: 65 5d 3d 3d 22 22 7d 20 7b 0a 20 20 20 20 20 20  e]==""} {.      
3690: 69 66 20 7b 24 68 64 5f 72 65 71 5f 72 64 72 28  if {$hd_req_rdr(
36a0: 62 6f 64 79 29 3d 3d 22 22 7d 20 7b 0a 20 20 20  body)==""} {.   
36b0: 20 20 20 20 20 73 65 74 20 68 64 5f 72 65 71 5f       set hd_req_
36c0: 72 64 72 28 62 6f 64 79 29 20 24 68 64 5f 72 65  rdr(body) $hd_re
36d0: 71 5f 72 64 72 28 63 6f 6d 6d 65 6e 74 29 0a 20  q_rdr(comment). 
36e0: 20 20 20 20 20 20 20 73 65 74 20 68 64 5f 72 65         set hd_re
36f0: 71 5f 72 64 72 28 63 6f 6d 6d 65 6e 74 29 20 7b  q_rdr(comment) {
3700: 7d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  }.      } else {
3710: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append 
3720: 68 64 5f 72 65 71 5f 72 64 72 28 63 6f 6d 6d 65  hd_req_rdr(comme
3730: 6e 74 29 20 5c 6e 0a 20 20 20 20 20 20 7d 0a 20  nt) \n.      }. 
3740: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
3750: 20 20 61 70 70 65 6e 64 20 68 64 5f 72 65 71 5f    append hd_req_
3760: 72 64 72 28 63 6f 6d 6d 65 6e 74 29 20 24 6c 69  rdr(comment) $li
3770: 6e 65 5c 6e 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ne\n.    }.  }. 
3780: 20 68 64 5f 61 64 64 5f 6f 6e 65 5f 72 65 71 75   hd_add_one_requ
3790: 69 72 65 6d 65 6e 74 20 24 76 61 72 6e 61 6d 65  irement $varname
37a0: 0a 20 20 63 6c 6f 73 65 20 24 69 6e 0a 20 20 0a  .  close $in.  .
37b0: 7d 0a 70 72 6f 63 20 68 64 5f 72 65 73 65 74 5f  }.proc hd_reset_
37c0: 72 65 71 75 69 72 65 6d 65 6e 74 5f 72 65 61 64  requirement_read
37d0: 65 72 20 7b 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c  er {} {.  global
37e0: 20 68 64 5f 72 65 71 5f 72 64 72 0a 20 20 73 65   hd_req_rdr.  se
37f0: 74 20 68 64 5f 72 65 71 5f 72 64 72 28 72 6e 29  t hd_req_rdr(rn)
3800: 20 7b 7d 0a 20 20 73 65 74 20 68 64 5f 72 65 71   {}.  set hd_req
3810: 5f 72 64 72 28 63 6f 6d 6d 65 6e 74 29 20 7b 7d  _rdr(comment) {}
3820: 0a 20 20 73 65 74 20 68 64 5f 72 65 71 5f 72 64  .  set hd_req_rd
3830: 72 28 62 6f 64 79 29 20 7b 7d 0a 20 20 73 65 74  r(body) {}.  set
3840: 20 68 64 5f 72 65 71 5f 72 64 72 28 64 65 72 69   hd_req_rdr(deri
3850: 76 65 64 29 20 7b 7d 0a 7d 0a 70 72 6f 63 20 68  ved) {}.}.proc h
3860: 64 5f 61 64 64 5f 6f 6e 65 5f 72 65 71 75 69 72  d_add_one_requir
3870: 65 6d 65 6e 74 20 7b 76 61 72 6e 61 6d 65 7d 20  ement {varname} 
3880: 7b 0a 20 20 67 6c 6f 62 61 6c 20 68 64 5f 72 65  {.  global hd_re
3890: 71 5f 72 64 72 0a 20 20 73 65 74 20 72 6e 20 24  q_rdr.  set rn $
38a0: 68 64 5f 72 65 71 5f 72 64 72 28 72 6e 29 0a 20  hd_req_rdr(rn). 
38b0: 20 69 66 20 7b 24 72 6e 21 3d 22 22 7d 20 7b 0a   if {$rn!=""} {.
38c0: 20 20 20 20 69 66 20 7b 24 68 64 5f 72 65 71 5f      if {$hd_req_
38d0: 72 64 72 28 62 6f 64 79 29 3d 3d 22 22 7d 20 7b  rdr(body)==""} {
38e0: 0a 20 20 20 20 20 20 73 65 74 20 68 64 5f 72 65  .      set hd_re
38f0: 71 5f 72 64 72 28 62 6f 64 79 29 20 24 68 64 5f  q_rdr(body) $hd_
3900: 72 65 71 5f 72 64 72 28 63 6f 6d 6d 65 6e 74 29  req_rdr(comment)
3910: 0a 20 20 20 20 20 20 73 65 74 20 68 64 5f 72 65  .      set hd_re
3920: 71 5f 72 64 72 28 63 6f 6d 6d 65 6e 74 29 20 7b  q_rdr(comment) {
3930: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  }.    }.    set 
3940: 62 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24  b [string trim $
3950: 68 64 5f 72 65 71 5f 72 64 72 28 62 6f 64 79 29  hd_req_rdr(body)
3960: 5d 0a 20 20 20 20 73 65 74 20 63 20 5b 73 74 72  ].    set c [str
3970: 69 6e 67 20 74 72 69 6d 20 24 68 64 5f 72 65 71  ing trim $hd_req
3980: 5f 72 64 72 28 63 6f 6d 6d 65 6e 74 29 5d 0a 20  _rdr(comment)]. 
3990: 20 20 20 73 65 74 20 3a 3a 24 7b 76 61 72 6e 61     set ::${varna
39a0: 6d 65 7d 28 24 72 6e 29 20 5b 6c 69 73 74 20 24  me}($rn) [list $
39b0: 68 64 5f 72 65 71 5f 72 64 72 28 64 65 72 69 76  hd_req_rdr(deriv
39c0: 65 64 29 20 24 62 20 24 63 5d 0a 20 20 20 20 6c  ed) $b $c].    l
39d0: 61 70 70 65 6e 64 20 3a 3a 24 7b 76 61 72 6e 61  append ::${varna
39e0: 6d 65 7d 28 2a 29 20 24 72 6e 0a 20 20 7d 0a 20  me}(*) $rn.  }. 
39f0: 20 68 64 5f 72 65 73 65 74 5f 72 65 71 75 69 72   hd_reset_requir
3a00: 65 6d 65 6e 74 5f 72 65 61 64 65 72 0a 7d 0a 0a  ement_reader.}..
3a10: 23 20 46 69 72 73 74 20 70 61 73 73 2e 20 20 50  # First pass.  P
3a20: 72 6f 63 65 73 73 20 61 6c 6c 20 66 69 6c 65 73  rocess all files
3a30: 2e 20 20 42 75 74 20 64 6f 20 6e 6f 74 20 72 65  .  But do not re
3a40: 6e 64 65 72 20 68 79 70 65 72 6c 69 6e 6b 73 2e  nder hyperlinks.
3a50: 0a 23 20 4d 65 72 65 6c 79 20 63 6f 6c 6c 65 63  .# Merely collec
3a60: 74 20 6b 65 79 77 6f 72 64 20 69 6e 66 6f 72 6d  t keyword inform
3a70: 61 74 69 6f 6e 20 73 6f 20 74 68 61 74 20 68 79  ation so that hy
3a80: 70 65 72 6c 69 6e 6b 73 20 63 61 6e 20 62 65 0a  perlinks can be.
3a90: 23 20 63 6f 72 72 65 63 74 6c 79 20 72 65 6e 64  # correctly rend
3aa0: 65 72 65 64 20 6f 6e 20 74 68 65 20 73 65 63 6f  ered on the seco
3ab0: 6e 64 20 70 61 73 73 2e 0a 23 0a 66 6f 72 65 61  nd pass..#.forea
3ac0: 63 68 20 69 6e 66 69 6c 65 20 5b 6c 72 61 6e 67  ch infile [lrang
3ad0: 65 20 24 61 72 67 76 20 33 20 65 6e 64 5d 20 7b  e $argv 3 end] {
3ae0: 0a 20 20 63 64 20 24 48 4f 4d 45 44 49 52 0a 20  .  cd $HOMEDIR. 
3af0: 20 70 75 74 73 20 22 50 72 6f 63 65 73 73 69 6e   puts "Processin
3b00: 67 20 24 69 6e 66 69 6c 65 22 0a 20 20 73 65 74  g $infile".  set
3b10: 20 66 64 20 5b 6f 70 65 6e 20 24 69 6e 66 69 6c   fd [open $infil
3b20: 65 20 72 5d 0a 20 20 73 65 74 20 69 6e 20 5b 72  e r].  set in [r
3b30: 65 61 64 20 24 66 64 5d 0a 20 20 63 6c 6f 73 65  ead $fd].  close
3b40: 20 24 66 64 0a 20 20 73 65 74 20 74 69 74 6c 65   $fd.  set title
3b50: 20 7b 4e 6f 20 54 69 74 6c 65 7d 0a 20 20 72 65   {No Title}.  re
3b60: 67 65 78 70 20 7b 3c 74 69 74 6c 65 3e 28 5b 5e  gexp {<title>([^
3b70: 5c 6e 5d 2a 29 3c 2f 74 69 74 6c 65 3e 7d 20 24  \n]*)</title>} $
3b80: 69 6e 20 61 6c 6c 20 74 69 74 6c 65 0a 20 20 72  in all title.  r
3b90: 65 67 73 75 62 20 7b 3c 74 69 74 6c 65 3e 5b 5e  egsub {<title>[^
3ba0: 5c 6e 5d 2a 3c 2f 74 69 74 6c 65 3e 7d 20 24 69  \n]*</title>} $i
3bb0: 6e 20 7b 7d 20 69 6e 0a 20 20 73 65 74 20 6f 75  n {} in.  set ou
3bc0: 74 66 69 6c 65 20 5b 66 69 6c 65 20 72 6f 6f 74  tfile [file root
3bd0: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 69 6e 66   [file tail $inf
3be0: 69 6c 65 5d 5d 2e 68 74 6d 6c 0a 20 20 68 64 5f  ile]].html.  hd_
3bf0: 6f 70 65 6e 5f 6d 61 69 6e 20 24 6f 75 74 66 69  open_main $outfi
3c00: 6c 65 0a 20 20 68 64 5f 68 65 61 64 65 72 20 24  le.  hd_header $
3c10: 74 69 74 6c 65 20 24 69 6e 66 69 6c 65 0a 20 20  title $infile.  
3c20: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 74 63  regsub -all {<tc
3c30: 6c 3e 7d 20 24 69 6e 20 22 5c 31 37 35 3b 20 65  l>} $in "\175; e
3c40: 76 61 6c 20 5c 31 37 33 22 20 69 6e 0a 20 20 72  val \173" in.  r
3c50: 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 2f 74 63  egsub -all {</tc
3c60: 6c 3e 7d 20 24 69 6e 20 22 5c 31 37 35 3b 20 68  l>} $in "\175; h
3c70: 64 5f 70 75 74 73 20 5c 31 37 33 22 20 69 6e 0a  d_puts \173" in.
3c80: 20 20 65 76 61 6c 20 22 68 64 5f 70 75 74 73 20    eval "hd_puts 
3c90: 5c 31 37 33 24 69 6e 5c 31 37 35 22 0a 20 20 63  \173$in\175".  c
3ca0: 64 20 24 3a 3a 48 4f 4d 45 44 49 52 0a 20 20 68  d $::HOMEDIR.  h
3cb0: 64 5f 63 6c 6f 73 65 5f 6d 61 69 6e 0a 7d 0a 0a  d_close_main.}..
3cc0: 23 20 53 65 63 6f 6e 64 20 70 61 73 73 2e 20 20  # Second pass.  
3cd0: 50 72 6f 63 65 73 73 20 61 6c 6c 20 66 69 6c 65  Process all file
3ce0: 73 20 61 67 61 69 6e 2e 20 20 54 68 69 73 20 74  s again.  This t
3cf0: 69 6d 65 20 72 65 6e 64 65 72 20 68 79 70 65 72  ime render hyper
3d00: 6c 69 6e 6b 73 0a 23 20 61 63 63 6f 72 64 69 6e  links.# accordin
3d10: 67 20 74 6f 20 74 68 65 20 6b 65 79 77 6f 72 64  g to the keyword
3d20: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 6f 6c   information col
3d30: 6c 65 63 74 65 64 20 6f 6e 20 74 68 65 20 66 69  lected on the fi
3d40: 72 73 74 20 70 61 73 73 2e 0a 23 0a 70 72 6f 63  rst pass..#.proc
3d50: 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 61 72   hd_keywords {ar
3d60: 67 73 7d 20 7b 7d 0a 72 65 6e 61 6d 65 20 68 64  gs} {}.rename hd
3d70: 5f 72 65 73 6f 6c 76 65 20 7b 7d 0a 72 65 6e 61  _resolve {}.rena
3d80: 6d 65 20 68 64 5f 72 65 73 6f 6c 76 65 5f 32 6e  me hd_resolve_2n
3d90: 64 70 61 73 73 20 68 64 5f 72 65 73 6f 6c 76 65  dpass hd_resolve
3da0: 0a 70 72 6f 63 20 68 64 5f 72 65 71 75 69 72 65  .proc hd_require
3db0: 6d 65 6e 74 20 7b 61 72 67 73 7d 20 7b 7d 0a 66  ment {args} {}.f
3dc0: 6f 72 65 61 63 68 20 69 6e 66 69 6c 65 20 5b 6c  oreach infile [l
3dd0: 72 61 6e 67 65 20 24 61 72 67 76 20 33 20 65 6e  range $argv 3 en
3de0: 64 5d 20 7b 0a 20 20 63 64 20 24 48 4f 4d 45 44  d] {.  cd $HOMED
3df0: 49 52 0a 20 20 70 75 74 73 20 22 50 72 6f 63 65  IR.  puts "Proce
3e00: 73 73 69 6e 67 20 24 69 6e 66 69 6c 65 22 0a 20  ssing $infile". 
3e10: 20 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 24 69   set fd [open $i
3e20: 6e 66 69 6c 65 20 72 5d 0a 20 20 73 65 74 20 69  nfile r].  set i
3e30: 6e 20 5b 72 65 61 64 20 24 66 64 5d 0a 20 20 63  n [read $fd].  c
3e40: 6c 6f 73 65 20 24 66 64 0a 20 20 73 65 74 20 74  lose $fd.  set t
3e50: 69 74 6c 65 20 7b 4e 6f 20 54 69 74 6c 65 7d 0a  itle {No Title}.
3e60: 20 20 72 65 67 65 78 70 20 7b 3c 74 69 74 6c 65    regexp {<title
3e70: 3e 28 5b 5e 5c 6e 5d 2a 29 3c 2f 74 69 74 6c 65  >([^\n]*)</title
3e80: 3e 7d 20 24 69 6e 20 61 6c 6c 20 74 69 74 6c 65  >} $in all title
3e90: 0a 20 20 72 65 67 73 75 62 20 7b 3c 74 69 74 6c  .  regsub {<titl
3ea0: 65 3e 5b 5e 5c 6e 5d 2a 3c 2f 74 69 74 6c 65 3e  e>[^\n]*</title>
3eb0: 7d 20 24 69 6e 20 7b 7d 20 69 6e 0a 20 20 73 65  } $in {} in.  se
3ec0: 74 20 6f 75 74 66 69 6c 65 20 5b 66 69 6c 65 20  t outfile [file 
3ed0: 72 6f 6f 74 20 5b 66 69 6c 65 20 74 61 69 6c 20  root [file tail 
3ee0: 24 69 6e 66 69 6c 65 5d 5d 2e 68 74 6d 6c 0a 20  $infile]].html. 
3ef0: 20 68 64 5f 6f 70 65 6e 5f 6d 61 69 6e 20 24 6f   hd_open_main $o
3f00: 75 74 66 69 6c 65 0a 20 20 68 64 5f 68 65 61 64  utfile.  hd_head
3f10: 65 72 20 24 74 69 74 6c 65 20 24 69 6e 66 69 6c  er $title $infil
3f20: 65 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  e.  regsub -all 
3f30: 7b 3c 74 63 6c 3e 7d 20 24 69 6e 20 22 5c 31 37  {<tcl>} $in "\17
3f40: 35 3b 20 65 76 61 6c 20 5c 31 37 33 22 20 69 6e  5; eval \173" in
3f50: 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b  .  regsub -all {
3f60: 3c 2f 74 63 6c 3e 7d 20 24 69 6e 20 22 5c 31 37  </tcl>} $in "\17
3f70: 35 3b 20 68 64 5f 72 65 73 6f 6c 76 65 20 5c 31  5; hd_resolve \1
3f80: 37 33 22 20 69 6e 0a 20 20 65 76 61 6c 20 22 68  73" in.  eval "h
3f90: 64 5f 72 65 73 6f 6c 76 65 20 5c 31 37 33 24 69  d_resolve \173$i
3fa0: 6e 5c 31 37 35 22 0a 20 20 63 64 20 24 3a 3a 48  n\175".  cd $::H
3fb0: 4f 4d 45 44 49 52 0a 20 20 68 64 5f 63 6c 6f 73  OMEDIR.  hd_clos
3fc0: 65 5f 6d 61 69 6e 0a 7d 0a 0a 23 20 47 65 6e 65  e_main.}..# Gene
3fd0: 72 61 74 65 20 61 20 64 6f 63 75 6d 65 6e 74 20  rate a document 
3fe0: 73 68 6f 77 69 6e 67 20 74 68 65 20 68 79 70 65  showing the hype
3ff0: 72 6c 69 6e 6b 20 6b 65 79 77 6f 72 64 73 20 61  rlink keywords a
4000: 6e 64 20 74 68 65 69 72 0a 23 20 74 61 72 67 65  nd their.# targe
4010: 74 73 2e 0a 23 0a 68 64 5f 6f 70 65 6e 5f 6d 61  ts..#.hd_open_ma
4020: 69 6e 20 64 6f 63 5f 6b 65 79 77 6f 72 64 5f 63  in doc_keyword_c
4030: 72 6f 73 73 72 65 66 2e 68 74 6d 6c 0a 68 64 5f  rossref.html.hd_
4040: 68 65 61 64 65 72 20 7b 48 79 70 65 72 6c 69 6e  header {Hyperlin
4050: 6b 20 43 72 6f 73 73 72 65 66 65 72 65 6e 63 65  k Crossreference
4060: 7d 20 24 44 4f 43 2f 77 72 61 70 2e 74 63 6c 0a  } $DOC/wrap.tcl.
4070: 68 64 5f 70 75 74 73 20 22 3c 75 6c 3e 22 0a 66  hd_puts "<ul>".f
4080: 6f 72 65 61 63 68 20 78 20 5b 6c 73 6f 72 74 20  oreach x [lsort 
4090: 2d 64 69 63 74 20 5b 61 72 72 61 79 20 6e 61 6d  -dict [array nam
40a0: 65 73 20 67 6c 69 6e 6b 5d 5d 20 7b 0a 20 20 73  es glink]] {.  s
40b0: 65 74 20 79 20 24 67 6c 69 6e 6b 28 24 78 29 0a  et y $glink($x).
40c0: 20 20 68 64 5f 70 75 74 73 20 22 3c 6c 69 3e 24    hd_puts "<li>$
40d0: 78 20 2d 20 3c 61 20 68 72 65 66 3d 5c 22 24 79  x - <a href=\"$y
40e0: 5c 22 3e 24 79 3c 2f 61 3e 3c 2f 6c 69 3e 22 0a  \">$y</a></li>".
40f0: 20 20 6c 61 70 70 65 6e 64 20 72 65 76 67 6c 69    lappend revgli
4100: 6e 6b 28 24 79 29 20 24 78 0a 7d 0a 68 64 5f 70  nk($y) $x.}.hd_p
4110: 75 74 73 20 22 3c 2f 75 6c 3e 22 0a 68 64 5f 63  uts "</ul>".hd_c
4120: 6c 6f 73 65 5f 6d 61 69 6e 0a 68 64 5f 6f 70 65  lose_main.hd_ope
4130: 6e 5f 6d 61 69 6e 20 64 6f 63 5f 74 61 72 67 65  n_main doc_targe
4140: 74 5f 63 72 6f 73 73 72 65 66 2e 68 74 6d 6c 0a  t_crossref.html.
4150: 68 64 5f 68 65 61 64 65 72 20 7b 54 61 72 67 65  hd_header {Targe
4160: 74 20 43 72 6f 73 73 72 65 66 65 72 65 6e 63 65  t Crossreference
4170: 7d 20 24 44 4f 43 2f 77 72 61 70 2e 74 63 6c 0a  } $DOC/wrap.tcl.
4180: 68 64 5f 70 75 74 73 20 22 3c 75 6c 3e 22 0a 66  hd_puts "<ul>".f
4190: 6f 72 65 61 63 68 20 79 20 5b 6c 73 6f 72 74 20  oreach y [lsort 
41a0: 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 72 65 76  [array names rev
41b0: 67 6c 69 6e 6b 5d 5d 20 7b 0a 20 20 68 64 5f 70  glink]] {.  hd_p
41c0: 75 74 73 20 22 3c 6c 69 3e 3c 61 20 68 72 65 66  uts "<li><a href
41d0: 3d 5c 22 24 79 5c 22 3e 24 79 3c 2f 61 3e 20 2d  =\"$y\">$y</a> -
41e0: 20 5b 6c 73 6f 72 74 20 24 72 65 76 67 6c 69 6e   [lsort $revglin
41f0: 6b 28 24 79 29 5d 3c 2f 6c 69 3e 22 0a 7d 0a 68  k($y)]</li>".}.h
4200: 64 5f 70 75 74 73 20 22 3c 2f 75 6c 3e 22 0a 68  d_puts "</ul>".h
4210: 64 5f 63 6c 6f 73 65 5f 6d 61 69 6e 0a 68 64 5f  d_close_main.hd_
4220: 6f 70 65 6e 5f 6d 61 69 6e 20 64 6f 63 5f 62 61  open_main doc_ba
4230: 63 6b 6c 69 6e 6b 5f 63 72 6f 73 73 72 65 66 2e  cklink_crossref.
4240: 68 74 6d 6c 0a 68 64 5f 68 65 61 64 65 72 20 7b  html.hd_header {
4250: 42 61 63 6b 6c 69 6e 6b 20 43 72 6f 73 73 72 65  Backlink Crossre
4260: 66 65 72 65 6e 63 65 7d 20 24 44 4f 43 2f 77 72  ference} $DOC/wr
4270: 61 70 2e 74 63 6c 0a 68 64 5f 70 75 74 73 20 22  ap.tcl.hd_puts "
4280: 3c 75 6c 3e 22 0a 66 6f 72 65 61 63 68 20 6b 77  <ul>".foreach kw
4290: 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e   [lsort [array n
42a0: 61 6d 65 73 20 62 61 63 6b 6c 69 6e 6b 5d 5d 20  ames backlink]] 
42b0: 7b 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 6c 69  {.  hd_puts "<li
42c0: 3e 24 6b 77 20 2d 22 0a 20 20 73 65 74 20 70 72  >$kw -".  set pr
42d0: 65 76 20 7b 7d 0a 20 20 66 6f 72 65 61 63 68 20  ev {}.  foreach 
42e0: 72 65 66 20 5b 6c 73 6f 72 74 20 24 62 61 63 6b  ref [lsort $back
42f0: 6c 69 6e 6b 28 24 6b 77 29 5d 20 7b 0a 20 20 20  link($kw)] {.   
4300: 20 69 66 20 7b 24 72 65 66 3d 3d 24 70 72 65 76   if {$ref==$prev
4310: 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 73  } continue.    s
4320: 65 74 20 70 72 65 76 20 24 72 65 66 0a 20 20 20  et prev $ref.   
4330: 20 68 64 5f 70 75 74 73 20 22 20 20 3c 61 20 68   hd_puts "  <a h
4340: 72 65 66 3d 5c 22 24 72 65 66 5c 22 3e 24 72 65  ref=\"$ref\">$re
4350: 66 3c 2f 61 3e 22 0a 20 20 7d 0a 7d 0a 68 64 5f  f</a>".  }.}.hd_
4360: 70 75 74 73 20 22 3c 2f 75 6c 3e 22 0a 68 64 5f  puts "</ul>".hd_
4370: 63 6c 6f 73 65 5f 6d 61 69 6e 0a                 close_main.