Documentation Source Text

Hex Artifact Content
Login

Artifact 4776b5a018a2d09292ebd872470157dc4f861f9d:


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 20 2d 5d 7d 20 24 6b 77 20 7b 7d 20  9_.# -]} $kw {} 
0a30: 6b 77 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  kw.  } else {.  
0a40: 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b    regsub -all {[
0a50: 5e 61 2d 7a 41 2d 5a 30 2d 39 5f 2e 23 20 2d 5d  ^a-zA-Z0-9_.# -]
0a60: 7d 20 24 6b 77 20 7b 7d 20 6b 77 0a 20 20 20 20  } $kw {} kw.    
0a70: 73 65 74 20 63 6f 6e 74 65 6e 74 20 5b 73 74 72  set content [str
0a80: 69 6e 67 20 74 72 69 6d 20 5b 6c 69 6e 64 65 78  ing trim [lindex
0a90: 20 24 78 32 20 31 5d 5d 0a 20 20 7d 0a 20 20 67   $x2 1]].  }.  g
0aa0: 6c 6f 62 61 6c 20 68 64 20 6c 6c 69 6e 6b 20 67  lobal hd llink g
0ab0: 6c 69 6e 6b 0a 20 20 69 66 20 7b 24 68 64 28 65  link.  if {$hd(e
0ac0: 6e 61 62 6c 65 2d 6d 61 69 6e 29 7d 20 7b 0a 20  nable-main)} {. 
0ad0: 20 20 20 73 65 74 20 66 6e 20 24 68 64 28 66 6e     set fn $hd(fn
0ae0: 2d 6d 61 69 6e 29 0a 20 20 20 20 69 66 20 7b 5b  -main).    if {[
0af0: 72 65 67 65 78 70 20 7b 5e 5b 54 74 5d 69 63 6b  regexp {^[Tt]ick
0b00: 65 74 20 23 28 5c 64 2b 29 24 7d 20 24 6b 77 20  et #(\d+)$} $kw 
0b10: 61 6c 6c 20 74 6b 74 69 64 5d 7d 20 7b 0a 20 20  all tktid]} {.  
0b20: 20 20 20 20 73 65 74 20 75 72 6c 20 68 74 74 70      set url http
0b30: 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
0b40: 67 2f 63 76 73 74 72 61 63 2f 74 6b 74 76 69 65  g/cvstrac/tktvie
0b50: 77 3f 74 6e 3d 24 74 6b 74 69 64 0a 20 20 20 20  w?tn=$tktid.    
0b60: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
0b70: 65 20 24 68 64 28 6d 61 69 6e 29 20 5c 0a 20 20  e $hd(main) \.  
0b80: 20 20 20 20 20 20 22 3c 61 20 68 72 65 66 3d 5c        "<a href=\
0b90: 22 24 75 72 6c 5c 22 3e 24 63 6f 6e 74 65 6e 74  "$url\">$content
0ba0: 3c 2f 61 3e 22 0a 20 20 20 20 7d 20 65 6c 73 65  </a>".    } else
0bb0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
0bc0: 20 6c 6c 69 6e 6b 28 24 66 6e 3a 24 6b 77 29 5d   llink($fn:$kw)]
0bd0: 7d 20 7b 0a 20 20 20 20 20 20 70 75 74 73 20 2d  } {.      puts -
0be0: 6e 6f 6e 65 77 6c 69 6e 65 20 24 68 64 28 6d 61  nonewline $hd(ma
0bf0: 69 6e 29 20 5c 0a 20 20 20 20 20 20 20 20 22 3c  in) \.        "<
0c00: 61 20 68 72 65 66 3d 5c 22 24 68 64 28 72 6f 6f  a href=\"$hd(roo
0c10: 74 70 61 74 68 2d 6d 61 69 6e 29 24 6c 6c 69 6e  tpath-main)$llin
0c20: 6b 28 24 66 6e 3a 24 6b 77 29 5c 22 3e 24 63 6f  k($fn:$kw)\">$co
0c30: 6e 74 65 6e 74 3c 2f 61 3e 22 0a 20 20 20 20 7d  ntent</a>".    }
0c40: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
0c50: 78 69 73 74 73 20 67 6c 69 6e 6b 28 24 6b 77 29  xists glink($kw)
0c60: 5d 7d 20 7b 0a 20 20 20 20 20 20 70 75 74 73 20  ]} {.      puts 
0c70: 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 68 64 28 6d  -nonewline $hd(m
0c80: 61 69 6e 29 20 5c 0a 20 20 20 20 20 20 20 20 22  ain) \.        "
0c90: 3c 61 20 68 72 65 66 3d 5c 22 24 68 64 28 72 6f  <a href=\"$hd(ro
0ca0: 6f 74 70 61 74 68 2d 6d 61 69 6e 29 24 67 6c 69  otpath-main)$gli
0cb0: 6e 6b 28 24 6b 77 29 5c 22 3e 24 63 6f 6e 74 65  nk($kw)\">$conte
0cc0: 6e 74 3c 2f 61 3e 22 0a 20 20 20 20 7d 20 65 6c  nt</a>".    } el
0cd0: 73 65 20 7b 0a 20 20 20 20 20 20 70 75 74 73 20  se {.      puts 
0ce0: 73 74 64 65 72 72 20 22 45 52 52 4f 52 3a 20 75  stderr "ERROR: u
0cf0: 6e 6b 6e 6f 77 6e 20 68 79 70 65 72 6c 69 6e 6b  nknown hyperlink
0d00: 20 74 61 72 67 65 74 3a 20 24 6b 77 22 0a 20 20   target: $kw".  
0d10: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
0d20: 69 6e 65 20 24 68 64 28 6d 61 69 6e 29 20 22 3c  ine $hd(main) "<
0d30: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 72 65 64  font color=\"red
0d40: 5c 22 3e 24 63 6f 6e 74 65 6e 74 3c 2f 66 6f 6e  \">$content</fon
0d50: 74 3e 22 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  t>".    }.  }.  
0d60: 69 66 20 7b 24 68 64 28 65 6e 61 62 6c 65 2d 61  if {$hd(enable-a
0d70: 75 78 29 7d 20 7b 0a 20 20 20 20 69 66 20 7b 5b  ux)} {.    if {[
0d80: 72 65 67 65 78 70 20 7b 5e 5b 54 74 5d 69 63 6b  regexp {^[Tt]ick
0d90: 65 74 20 23 28 5c 64 2b 29 24 7d 20 24 6b 77 20  et #(\d+)$} $kw 
0da0: 61 6c 6c 20 74 6b 74 69 64 5d 7d 20 7b 0a 20 20  all tktid]} {.  
0db0: 20 20 20 20 73 65 74 20 75 72 6c 20 68 74 74 70      set url http
0dc0: 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72  ://www.sqlite.or
0dd0: 67 2f 63 76 73 74 72 61 63 2f 74 6b 74 76 69 65  g/cvstrac/tktvie
0de0: 77 3f 74 6e 3d 24 74 6b 74 69 64 0a 20 20 20 20  w?tn=$tktid.    
0df0: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
0e00: 65 20 24 68 64 28 61 75 78 29 20 5c 0a 20 20 20  e $hd(aux) \.   
0e10: 20 20 20 20 20 22 3c 61 20 68 72 65 66 3d 5c 22       "<a href=\"
0e20: 24 75 72 6c 5c 22 3e 24 63 6f 6e 74 65 6e 74 3c  $url\">$content<
0e30: 2f 61 3e 22 0a 20 20 20 20 7d 20 65 6c 73 65 69  /a>".    } elsei
0e40: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists 
0e50: 67 6c 69 6e 6b 28 24 6b 77 29 5d 7d 20 7b 0a 20  glink($kw)]} {. 
0e60: 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77       puts -nonew
0e70: 6c 69 6e 65 20 24 68 64 28 61 75 78 29 20 5c 0a  line $hd(aux) \.
0e80: 20 20 20 20 20 20 20 20 22 3c 61 20 68 72 65 66          "<a href
0e90: 3d 5c 22 24 68 64 28 72 6f 6f 74 70 61 74 68 2d  =\"$hd(rootpath-
0ea0: 61 75 78 29 24 67 6c 69 6e 6b 28 24 6b 77 29 5c  aux)$glink($kw)\
0eb0: 22 3e 24 63 6f 6e 74 65 6e 74 3c 2f 61 3e 22 0a  ">$content</a>".
0ec0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
0ed0: 20 20 20 70 75 74 73 20 73 74 64 65 72 72 20 22     puts stderr "
0ee0: 45 52 52 4f 52 3a 20 75 6e 6b 6e 6f 77 6e 20 68  ERROR: unknown h
0ef0: 79 70 65 72 6c 69 6e 6b 20 74 61 72 67 65 74 3a  yperlink target:
0f00: 20 24 6b 77 22 0a 20 20 20 20 20 20 70 75 74 73   $kw".      puts
0f10: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 68 64 28   -nonewline $hd(
0f20: 61 75 78 29 20 22 3c 66 6f 6e 74 20 63 6f 6c 6f  aux) "<font colo
0f30: 72 3d 5c 22 72 65 64 5c 22 3e 24 63 6f 6e 74 65  r=\"red\">$conte
0f40: 6e 74 3c 2f 66 6f 6e 74 3e 22 0a 20 20 20 20 7d  nt</font>".    }
0f50: 0a 20 20 7d 0a 7d 0a 0a 0a 0a 23 20 52 65 63 6f  .  }.}....# Reco
0f60: 72 64 20 74 68 65 20 66 61 63 74 20 74 68 61 74  rd the fact that
0f70: 20 61 6c 6c 20 6b 65 79 77 6f 72 64 73 20 67 69   all keywords gi
0f80: 76 65 6e 20 69 6e 20 74 68 65 20 61 72 67 75 6d  ven in the argum
0f90: 65 6e 74 20 6c 69 73 74 20 73 68 6f 75 6c 64 0a  ent list should.
0fa0: 23 20 63 61 75 73 65 20 61 20 6a 75 6d 70 20 74  # cause a jump t
0fb0: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 6f  o the current lo
0fc0: 63 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 63 75  cation in the cu
0fd0: 72 72 65 6e 74 20 66 69 6c 65 2e 0a 23 0a 23 20  rrent file..#.# 
0fe0: 49 66 20 6f 6e 6c 79 20 74 68 65 20 6d 61 69 6e  If only the main
0ff0: 20 6f 75 74 70 75 74 20 66 69 6c 65 20 69 73 20   output file is 
1000: 6f 70 65 6e 2c 20 74 68 65 6e 20 61 6c 6c 20 72  open, then all r
1010: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 65  eferences to the
1020: 0a 23 20 6b 65 79 77 6f 72 64 20 6a 75 6d 70 20  .# keyword jump 
1030: 74 6f 20 74 68 65 20 6d 61 69 6e 20 6f 75 74 70  to the main outp
1040: 75 74 20 66 69 6c 65 2e 20 20 49 66 20 62 6f 74  ut file.  If bot
1050: 68 20 6d 61 69 6e 20 61 6e 64 20 61 75 78 20 61  h main and aux a
1060: 72 65 0a 23 20 6f 70 65 6e 20 74 68 65 6e 20 72  re.# open then r
1070: 65 66 65 72 65 6e 63 65 73 20 69 6e 20 74 68 65  eferences in the
1080: 20 6d 61 69 6e 20 66 69 6c 65 20 6a 75 6d 70 20   main file jump 
1090: 74 6f 20 74 68 65 20 6d 61 69 6e 20 66 69 6c 65  to the main file
10a0: 20 61 6e 64 20 61 6c 6c 0a 23 20 6f 74 68 65 72   and all.# other
10b0: 20 72 65 66 65 72 65 6e 63 65 73 20 6a 75 6d 70   references jump
10c0: 20 74 6f 20 74 68 65 20 61 75 78 69 6c 69 61 72   to the auxiliar
10d0: 79 20 66 69 6c 65 2e 0a 23 0a 23 20 54 68 69 73  y file..#.# This
10e0: 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6f 6e   procedure is on
10f0: 6c 79 20 61 63 74 69 76 65 20 64 75 72 69 6e 67  ly active during
1100: 20 74 68 65 20 66 69 72 73 74 20 70 61 73 73 20   the first pass 
1110: 77 68 65 6e 20 77 65 20 61 72 65 0a 23 20 63 6f  when we are.# co
1120: 6c 6c 65 63 74 69 6e 67 20 68 79 70 65 72 6c 69  llecting hyperli
1130: 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  nk information. 
1140: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure 
1150: 69 73 20 72 65 64 65 66 69 6e 65 64 20 74 6f 0a  is redefined to.
1160: 23 20 62 65 20 61 20 6e 6f 2d 6f 70 20 62 65 66  # be a no-op bef
1170: 6f 72 65 20 74 68 65 20 73 74 61 72 74 20 6f 66  ore the start of
1180: 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 73 73   the second pass
1190: 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 6b 65 79 77  ..#.proc hd_keyw
11a0: 6f 72 64 73 20 7b 61 72 67 73 7d 20 7b 0a 20 20  ords {args} {.  
11b0: 67 6c 6f 62 61 6c 20 67 6c 69 6e 6b 20 6c 6c 69  global glink lli
11c0: 6e 6b 20 68 64 0a 20 20 69 66 20 7b 24 68 64 28  nk hd.  if {$hd(
11d0: 66 72 61 67 6d 65 6e 74 29 3d 3d 22 22 7d 20 7b  fragment)==""} {
11e0: 0a 20 20 20 20 73 65 74 20 6c 75 72 6c 20 24 68  .    set lurl $h
11f0: 64 28 66 6e 2d 6d 61 69 6e 29 0a 20 20 7d 20 65  d(fn-main).  } e
1200: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 6c 75  lse {.    set lu
1210: 72 6c 20 22 23 24 68 64 28 66 72 61 67 6d 65 6e  rl "#$hd(fragmen
1220: 74 29 22 0a 20 20 7d 0a 20 20 73 65 74 20 66 6e  t)".  }.  set fn
1230: 20 24 68 64 28 66 6e 2d 6d 61 69 6e 29 0a 20 20   $hd(fn-main).  
1240: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
1250: 20 68 64 28 61 75 78 29 5d 7d 20 7b 0a 20 20 20   hd(aux)]} {.   
1260: 20 73 65 74 20 67 75 72 6c 20 24 68 64 28 66 6e   set gurl $hd(fn
1270: 2d 61 75 78 29 0a 20 20 7d 20 65 6c 73 65 20 7b  -aux).  } else {
1280: 0a 20 20 20 20 73 65 74 20 67 75 72 6c 20 7b 7d  .    set gurl {}
1290: 0a 20 20 20 20 69 66 20 7b 24 68 64 28 66 72 61  .    if {$hd(fra
12a0: 67 6d 65 6e 74 29 21 3d 22 22 7d 20 7b 0a 20 20  gment)!=""} {.  
12b0: 20 20 20 20 73 65 74 20 6c 75 72 6c 20 24 68 64      set lurl $hd
12c0: 28 66 6e 2d 6d 61 69 6e 29 23 24 68 64 28 66 72  (fn-main)#$hd(fr
12d0: 61 67 6d 65 6e 74 29 0a 20 20 20 20 7d 0a 20 20  agment).    }.  
12e0: 7d 0a 20 20 66 6f 72 65 61 63 68 20 61 20 24 61  }.  foreach a $a
12f0: 72 67 73 20 7b 0a 20 20 20 20 69 66 20 7b 5b 69  rgs {.    if {[i
1300: 6e 66 6f 20 65 78 69 73 74 73 20 67 6c 69 6e 6b  nfo exists glink
1310: 28 24 61 29 5d 7d 20 7b 0a 20 20 20 20 20 20 70  ($a)]} {.      p
1320: 75 74 73 20 73 74 64 65 72 72 20 22 57 41 52 4e  uts stderr "WARN
1330: 49 4e 47 3a 20 64 75 70 6c 69 63 61 74 65 20 6b  ING: duplicate k
1340: 65 79 77 6f 72 64 20 5c 22 24 61 5c 22 22 0a 20  eyword \"$a\"". 
1350: 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 24 67 75     }.    if {$gu
1360: 72 6c 3d 3d 22 22 7d 20 7b 0a 20 20 20 20 20 20  rl==""} {.      
1370: 73 65 74 20 67 6c 69 6e 6b 28 24 61 29 20 24 6c  set glink($a) $l
1380: 75 72 6c 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  url.    } else {
1390: 0a 20 20 20 20 20 20 73 65 74 20 67 6c 69 6e 6b  .      set glink
13a0: 28 24 61 29 20 24 67 75 72 6c 0a 20 20 20 20 20  ($a) $gurl.     
13b0: 20 73 65 74 20 6c 6c 69 6e 6b 28 24 66 6e 3a 24   set llink($fn:$
13c0: 61 29 20 24 6c 75 72 6c 0a 20 20 20 20 7d 0a 20  a) $lurl.    }. 
13d0: 20 7d 0a 7d 0a 0a 23 20 53 74 61 72 74 20 61 20   }.}..# Start a 
13e0: 6e 65 77 20 66 72 61 67 6d 65 6e 74 20 69 6e 20  new fragment in 
13f0: 74 68 65 20 6d 61 69 6e 20 66 69 6c 65 2e 20 20  the main file.  
1400: 47 69 76 65 20 74 68 65 20 6e 65 77 20 66 72 61  Give the new fra
1410: 67 6d 65 6e 74 20 74 68 65 0a 23 20 69 6e 64 69  gment the.# indi
1420: 63 61 74 65 64 20 6e 61 6d 65 2e 20 20 41 6e 79  cated name.  Any
1430: 20 6b 65 79 77 6f 72 64 73 20 64 65 66 69 6e 65   keywords define
1440: 64 20 61 66 74 65 72 20 74 68 69 73 20 70 6f 69  d after this poi
1450: 6e 74 20 77 69 6c 6c 20 72 65 66 65 72 0a 23 20  nt will refer.# 
1460: 74 6f 20 74 68 65 20 66 72 61 67 6d 65 6e 74 2c  to the fragment,
1470: 20 6e 6f 74 20 74 6f 20 74 68 65 20 62 65 67 69   not to the begi
1480: 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c  nning of the fil
1490: 65 2e 0a 23 0a 23 20 4f 6e 6c 79 20 74 68 65 20  e..#.# Only the 
14a0: 6d 61 69 6e 20 66 69 6c 65 20 6d 61 79 20 68 61  main file may ha
14b0: 76 65 20 66 72 61 67 6d 65 6e 74 73 2e 20 20 41  ve fragments.  A
14c0: 75 78 69 6c 69 61 72 79 20 66 69 6c 65 73 20 61  uxiliary files a
14d0: 72 65 20 61 73 73 75 6d 65 64 0a 23 20 74 6f 20  re assumed.# to 
14e0: 62 65 20 73 6d 61 6c 6c 20 65 6e 6f 75 67 68 20  be small enough 
14f0: 74 68 61 74 20 66 72 61 67 6d 65 6e 74 73 20 61  that fragments a
1500: 72 65 20 6e 6f 74 20 68 65 6c 70 66 75 6c 2e 0a  re not helpful..
1510: 23 0a 70 72 6f 63 20 68 64 5f 66 72 61 67 6d 65  #.proc hd_fragme
1520: 6e 74 20 7b 6e 61 6d 65 20 61 72 67 73 7d 20 7b  nt {name args} {
1530: 0a 20 20 67 6c 6f 62 61 6c 20 68 64 0a 20 20 73  .  global hd.  s
1540: 65 74 20 68 64 28 66 72 61 67 6d 65 6e 74 29 20  et hd(fragment) 
1550: 24 6e 61 6d 65 0a 20 20 70 75 74 73 20 24 68 64  $name.  puts $hd
1560: 28 6d 61 69 6e 29 20 22 3c 61 20 6e 61 6d 65 3d  (main) "<a name=
1570: 5c 22 24 6e 61 6d 65 5c 22 3e 3c 2f 61 3e 22 0a  \"$name\"></a>".
1580: 20 20 65 76 61 6c 20 68 64 5f 6b 65 79 77 6f 72    eval hd_keywor
1590: 64 73 20 24 61 72 67 73 0a 7d 0a 0a 23 20 57 72  ds $args.}..# Wr
15a0: 69 74 65 20 72 61 77 20 6f 75 74 70 75 74 20 74  ite raw output t
15b0: 6f 20 62 6f 74 68 20 74 68 65 20 6d 61 69 6e 20  o both the main 
15c0: 66 69 6c 65 20 61 6e 64 20 74 68 65 20 61 75 78  file and the aux
15d0: 69 6c 69 61 72 79 2e 20 20 4f 6e 6c 79 20 77 72  iliary.  Only wr
15e0: 69 74 65 0a 23 20 74 6f 20 66 69 6c 65 73 20 74  ite.# to files t
15f0: 68 61 74 20 61 72 65 20 65 6e 61 62 6c 65 64 2e  hat are enabled.
1600: 0a 23 0a 70 72 6f 63 20 68 64 5f 70 75 74 73 20  .#.proc hd_puts 
1610: 7b 74 65 78 74 7d 20 7b 0a 20 20 67 6c 6f 62 61  {text} {.  globa
1620: 6c 20 68 64 0a 20 20 69 66 20 7b 24 68 64 28 65  l hd.  if {$hd(e
1630: 6e 61 62 6c 65 2d 6d 61 69 6e 29 7d 20 7b 0a 20  nable-main)} {. 
1640: 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69     puts -nonewli
1650: 6e 65 20 24 68 64 28 6d 61 69 6e 29 20 24 74 65  ne $hd(main) $te
1660: 78 74 0a 20 20 7d 0a 20 20 69 66 20 7b 24 68 64  xt.  }.  if {$hd
1670: 28 65 6e 61 62 6c 65 2d 61 75 78 29 7d 20 7b 0a  (enable-aux)} {.
1680: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
1690: 69 6e 65 20 24 68 64 28 61 75 78 29 20 24 74 65  ine $hd(aux) $te
16a0: 78 74 0a 20 20 7d 0a 7d 0a 0a 23 20 45 6e 61 62  xt.  }.}..# Enab
16b0: 6c 65 20 6f 72 20 64 69 73 61 62 6c 65 20 74 68  le or disable th
16c0: 65 20 6d 61 69 6e 20 6f 75 74 70 75 74 20 66 69  e main output fi
16d0: 6c 65 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 65 6e  le..#.proc hd_en
16e0: 61 62 6c 65 5f 6d 61 69 6e 20 7b 62 6f 6f 6c 65  able_main {boole
16f0: 61 6e 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68  an} {.  global h
1700: 64 0a 20 20 73 65 74 20 68 64 28 65 6e 61 62 6c  d.  set hd(enabl
1710: 65 2d 6d 61 69 6e 29 20 24 62 6f 6f 6c 65 61 6e  e-main) $boolean
1720: 0a 7d 0a 0a 23 20 45 6e 61 62 6c 65 20 6f 72 20  .}..# Enable or 
1730: 64 69 73 61 62 6c 65 20 74 68 65 20 61 75 78 69  disable the auxi
1740: 6c 69 61 72 79 20 6f 75 74 70 75 74 20 66 69 6c  liary output fil
1750: 65 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 65 6e 61  e..#.proc hd_ena
1760: 62 6c 65 5f 61 75 78 20 7b 62 6f 6f 6c 65 61 6e  ble_aux {boolean
1770: 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68 64 0a  } {.  global hd.
1780: 20 20 73 65 74 20 68 64 28 65 6e 61 62 6c 65 2d    set hd(enable-
1790: 61 75 78 29 20 24 62 6f 6f 6c 65 61 6e 0a 7d 0a  aux) $boolean.}.
17a0: 73 65 74 20 68 64 28 65 6e 61 62 6c 65 2d 61 75  set hd(enable-au
17b0: 78 29 20 30 0a 0a 23 20 4f 70 65 6e 20 74 68 65  x) 0..# Open the
17c0: 20 6d 61 69 6e 20 6f 75 74 70 75 74 20 66 69 6c   main output fil
17d0: 65 2e 20 20 24 66 69 6c 65 6e 61 6d 65 20 69 73  e.  $filename is
17e0: 20 72 65 6c 61 74 69 76 65 20 74 6f 20 24 3a 3a   relative to $::
17f0: 44 45 53 54 2e 20 20 0a 23 0a 70 72 6f 63 20 68  DEST.  .#.proc h
1800: 64 5f 6f 70 65 6e 5f 6d 61 69 6e 20 7b 66 69 6c  d_open_main {fil
1810: 65 6e 61 6d 65 7d 20 7b 0a 20 20 67 6c 6f 62 61  ename} {.  globa
1820: 6c 20 68 64 20 44 45 53 54 0a 20 20 68 64 5f 63  l hd DEST.  hd_c
1830: 6c 6f 73 65 5f 6d 61 69 6e 0a 20 20 73 65 74 20  lose_main.  set 
1840: 68 64 28 66 6e 2d 6d 61 69 6e 29 20 24 66 69 6c  hd(fn-main) $fil
1850: 65 6e 61 6d 65 0a 20 20 73 65 74 20 68 64 28 72  ename.  set hd(r
1860: 6f 6f 74 70 61 74 68 2d 6d 61 69 6e 29 20 5b 68  ootpath-main) [h
1870: 64 5f 72 6f 6f 74 70 61 74 68 20 24 66 69 6c 65  d_rootpath $file
1880: 6e 61 6d 65 5d 0a 20 20 73 65 74 20 68 64 28 6d  name].  set hd(m
1890: 61 69 6e 29 20 5b 6f 70 65 6e 20 24 44 45 53 54  ain) [open $DEST
18a0: 2f 24 66 69 6c 65 6e 61 6d 65 20 77 5d 0a 20 20  /$filename w].  
18b0: 73 65 74 20 68 64 28 65 6e 61 62 6c 65 2d 6d 61  set hd(enable-ma
18c0: 69 6e 29 20 31 0a 20 20 73 65 74 20 68 64 28 66  in) 1.  set hd(f
18d0: 72 61 67 6d 65 6e 74 29 20 7b 7d 0a 7d 0a 0a 23  ragment) {}.}..#
18e0: 20 49 66 20 24 66 69 6c 65 6e 61 6d 65 20 69 73   If $filename is
18f0: 20 61 20 70 61 74 68 20 66 72 6f 6d 20 24 3a 3a   a path from $::
1900: 44 45 53 54 20 74 6f 20 61 20 66 69 6c 65 2c 20  DEST to a file, 
1910: 72 65 74 75 72 6e 20 61 20 70 61 74 68 0a 23 20  return a path.# 
1920: 66 72 6f 6d 20 74 68 65 20 64 69 72 65 63 74 6f  from the directo
1930: 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 24 66  ry containing $f
1940: 69 6c 65 6e 61 6d 65 20 62 61 63 6b 20 74 6f 20  ilename back to 
1950: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 24 3a  the directory $:
1960: 3a 44 45 53 54 2e 0a 23 0a 70 72 6f 63 20 68 64  :DEST..#.proc hd
1970: 5f 72 6f 6f 74 70 61 74 68 20 7b 66 69 6c 65 6e  _rootpath {filen
1980: 61 6d 65 7d 20 7b 0a 20 20 73 65 74 20 75 70 20  ame} {.  set up 
1990: 7b 7d 0a 20 20 73 65 74 20 6e 20 5b 6c 6c 65 6e  {}.  set n [llen
19a0: 67 74 68 20 5b 73 70 6c 69 74 20 24 66 69 6c 65  gth [split $file
19b0: 6e 61 6d 65 20 2f 5d 5d 0a 20 20 69 66 20 7b 24  name /]].  if {$
19c0: 6e 3c 3d 31 7d 20 7b 0a 20 20 20 20 72 65 74 75  n<=1} {.    retu
19d0: 72 6e 20 7b 7d 0a 20 20 7d 20 65 6c 73 65 20 7b  rn {}.  } else {
19e0: 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 73 74 72  .    return [str
19f0: 69 6e 67 20 72 65 70 65 61 74 20 2e 2e 2f 20 5b  ing repeat ../ [
1a00: 65 78 70 72 20 7b 24 6e 2d 31 7d 5d 5d 0a 20 20  expr {$n-1}]].  
1a10: 7d 0a 7d 0a 0a 23 20 43 6c 6f 73 65 20 74 68 65  }.}..# Close the
1a20: 20 6d 61 69 6e 20 6f 75 74 70 75 74 20 66 69 6c   main output fil
1a30: 65 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 63 6c 6f  e..#.proc hd_clo
1a40: 73 65 5f 6d 61 69 6e 20 7b 7d 20 7b 0a 20 20 67  se_main {} {.  g
1a50: 6c 6f 62 61 6c 20 68 64 0a 20 20 68 64 5f 63 6c  lobal hd.  hd_cl
1a60: 6f 73 65 5f 61 75 78 0a 20 20 69 66 20 7b 5b 69  ose_aux.  if {[i
1a70: 6e 66 6f 20 65 78 69 73 74 73 20 68 64 28 6d 61  nfo exists hd(ma
1a80: 69 6e 29 5d 7d 20 7b 0a 20 20 20 20 70 75 74 73  in)]} {.    puts
1a90: 20 24 68 64 28 6d 61 69 6e 29 20 24 68 64 28 66   $hd(main) $hd(f
1aa0: 6f 6f 74 65 72 29 0a 20 20 20 20 63 6c 6f 73 65  ooter).    close
1ab0: 20 24 68 64 28 6d 61 69 6e 29 0a 20 20 20 20 75   $hd(main).    u
1ac0: 6e 73 65 74 20 68 64 28 6d 61 69 6e 29 0a 20 20  nset hd(main).  
1ad0: 7d 0a 7d 0a 0a 23 20 4f 70 65 6e 20 74 68 65 20  }.}..# Open the 
1ae0: 61 75 78 69 6c 69 61 72 79 20 6f 75 74 70 75 74  auxiliary output
1af0: 20 66 69 6c 65 2e 0a 23 0a 23 20 4d 6f 73 74 20   file..#.# Most 
1b00: 64 6f 63 75 6d 65 6e 74 73 20 68 61 76 65 20 6f  documents have o
1b10: 6e 6c 79 20 61 20 6d 61 69 6e 20 66 69 6c 65 20  nly a main file 
1b20: 61 6e 64 20 6e 6f 20 61 75 78 69 6c 69 61 72 79  and no auxiliary
1b30: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 6f 6d 65  .  However, some
1b40: 0a 23 20 6c 61 72 67 65 20 64 6f 63 75 6d 65 6e  .# large documen
1b50: 74 73 20 61 72 65 20 62 72 6f 6b 65 6e 20 75 70  ts are broken up
1b60: 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72 20 70 69   into smaller pi
1b70: 65 63 65 73 20 77 68 65 72 65 20 65 61 63 68 20  eces where each 
1b80: 73 6d 61 6c 6c 65 72 20 70 69 65 63 65 0a 23 20  smaller piece.# 
1b90: 69 73 20 61 6e 20 61 75 78 69 6c 69 61 72 79 20  is an auxiliary 
1ba0: 66 69 6c 65 2e 20 20 54 68 65 72 65 20 77 69 6c  file.  There wil
1bb0: 6c 20 74 79 70 69 63 61 6c 6c 79 20 62 65 20 65  l typically be e
1bc0: 69 74 68 65 72 20 6d 61 6e 79 20 61 75 78 69 6c  ither many auxil
1bd0: 69 61 72 79 20 66 69 6c 65 73 0a 23 20 6f 72 20  iary files.# or 
1be0: 6e 6f 20 61 75 78 69 6c 69 61 72 79 20 66 69 6c  no auxiliary fil
1bf0: 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
1c00: 74 68 20 65 61 63 68 20 6d 61 69 6e 20 66 69 6c  th each main fil
1c10: 65 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 6f 70 65  e..#.proc hd_ope
1c20: 6e 5f 61 75 78 20 7b 66 69 6c 65 6e 61 6d 65 7d  n_aux {filename}
1c30: 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68 64 20 44   {.  global hd D
1c40: 45 53 54 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 61  EST.  hd_close_a
1c50: 75 78 0a 20 20 73 65 74 20 68 64 28 66 6e 2d 61  ux.  set hd(fn-a
1c60: 75 78 29 20 24 66 69 6c 65 6e 61 6d 65 0a 20 20  ux) $filename.  
1c70: 73 65 74 20 68 64 28 72 6f 6f 74 70 61 74 68 2d  set hd(rootpath-
1c80: 61 75 78 29 20 5b 68 64 5f 72 6f 6f 74 70 61 74  aux) [hd_rootpat
1c90: 68 20 24 66 69 6c 65 6e 61 6d 65 5d 0a 20 20 73  h $filename].  s
1ca0: 65 74 20 68 64 28 61 75 78 29 20 5b 6f 70 65 6e  et hd(aux) [open
1cb0: 20 24 44 45 53 54 2f 24 66 69 6c 65 6e 61 6d 65   $DEST/$filename
1cc0: 20 77 5d 0a 20 20 73 65 74 20 68 64 28 65 6e 61   w].  set hd(ena
1cd0: 62 6c 65 2d 61 75 78 29 20 31 0a 7d 0a 0a 23 20  ble-aux) 1.}..# 
1ce0: 43 6c 6f 73 65 20 74 68 65 20 61 75 78 69 6c 69  Close the auxili
1cf0: 61 72 79 20 6f 75 74 70 75 74 20 66 69 6c 65 0a  ary output file.
1d00: 23 0a 70 72 6f 63 20 68 64 5f 63 6c 6f 73 65 5f  #.proc hd_close_
1d10: 61 75 78 20 7b 7d 20 7b 0a 20 20 67 6c 6f 62 61  aux {} {.  globa
1d20: 6c 20 68 64 0a 20 20 69 66 20 7b 5b 69 6e 66 6f  l hd.  if {[info
1d30: 20 65 78 69 73 74 73 20 68 64 28 61 75 78 29 5d   exists hd(aux)]
1d40: 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 24 68 64  } {.    puts $hd
1d50: 28 61 75 78 29 20 24 68 64 28 66 6f 6f 74 65 72  (aux) $hd(footer
1d60: 29 0a 20 20 20 20 63 6c 6f 73 65 20 24 68 64 28  ).    close $hd(
1d70: 61 75 78 29 0a 20 20 20 20 75 6e 73 65 74 20 68  aux).    unset h
1d80: 64 28 61 75 78 29 0a 20 20 20 20 73 65 74 20 68  d(aux).    set h
1d90: 64 28 65 6e 61 62 6c 65 2d 61 75 78 29 20 30 0a  d(enable-aux) 0.
1da0: 20 20 20 20 73 65 74 20 68 64 28 65 6e 61 62 6c      set hd(enabl
1db0: 65 2d 6d 61 69 6e 29 20 31 0a 20 20 7d 0a 7d 0a  e-main) 1.  }.}.
1dc0: 0a 0a 23 20 68 64 5f 70 75 74 73 69 6e 34 20 69  ..# hd_putsin4 i
1dd0: 73 20 6c 69 6b 65 20 70 75 74 73 20 65 78 63 65  s like puts exce
1de0: 70 74 20 74 68 61 74 20 69 74 20 72 65 6d 6f 76  pt that it remov
1df0: 65 73 20 74 68 65 20 66 69 72 73 74 20 34 20 69  es the first 4 i
1e00: 6e 64 65 6e 74 61 74 69 6f 6e 0a 23 20 63 68 61  ndentation.# cha
1e10: 72 61 63 74 65 72 73 20 66 72 6f 6d 20 65 61 63  racters from eac
1e20: 68 20 6c 69 6e 65 2e 20 20 49 74 20 61 6c 73 6f  h line.  It also
1e30: 20 64 6f 65 73 20 76 61 72 69 61 62 6c 65 20 73   does variable s
1e40: 75 62 73 74 69 74 75 74 69 6f 6e 20 69 6e 0a 23  ubstitution in.#
1e50: 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 20 6f   the namespace o
1e60: 66 20 69 74 73 20 63 61 6c 6c 69 6e 67 20 70 72  f its calling pr
1e70: 6f 63 65 64 75 72 65 2e 0a 23 0a 70 72 6f 63 20  ocedure..#.proc 
1e80: 70 75 74 73 69 6e 34 20 7b 66 64 20 74 65 78 74  putsin4 {fd text
1e90: 7d 20 7b 0a 20 20 72 65 67 73 75 62 20 2d 61 6c  } {.  regsub -al
1ea0: 6c 20 22 5c 6e 20 20 20 20 22 20 24 74 65 78 74  l "\n    " $text
1eb0: 20 5c 6e 20 74 65 78 74 0a 20 20 70 75 74 73 20   \n text.  puts 
1ec0: 24 66 64 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b  $fd [uplevel 1 [
1ed0: 6c 69 73 74 20 73 75 62 73 74 20 2d 6e 6f 62 61  list subst -noba
1ee0: 63 6b 20 2d 6e 6f 63 6f 6d 20 24 74 65 78 74 5d  ck -nocom $text]
1ef0: 5d 0a 7d 0a 0a 23 20 41 20 70 72 6f 63 65 64 75  ].}..# A procedu
1f00: 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  re to write the 
1f10: 63 6f 6d 6d 6f 6e 20 68 65 61 64 65 72 20 66 6f  common header fo
1f20: 75 6e 64 20 6f 6e 20 65 76 65 72 79 20 48 54 4d  und on every HTM
1f30: 4c 20 66 69 6c 65 20 6f 6e 0a 23 20 74 68 65 20  L file on.# the 
1f40: 53 51 4c 69 74 65 20 77 65 62 73 69 74 65 2e 0a  SQLite website..
1f50: 23 0a 70 72 6f 63 20 68 64 5f 68 65 61 64 65 72  #.proc hd_header
1f60: 20 7b 74 69 74 6c 65 20 7b 73 72 63 66 69 6c 65   {title {srcfile
1f70: 20 7b 7d 7d 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c   {}}} {.  global
1f80: 20 68 64 0a 20 20 73 65 74 20 73 61 76 65 64 5f   hd.  set saved_
1f90: 65 6e 61 62 6c 65 20 24 68 64 28 65 6e 61 62 6c  enable $hd(enabl
1fa0: 65 2d 6d 61 69 6e 29 0a 20 20 69 66 20 7b 24 73  e-main).  if {$s
1fb0: 72 63 66 69 6c 65 3d 3d 22 22 7d 20 7b 0a 20 20  rcfile==""} {.  
1fc0: 20 20 73 65 74 20 66 64 20 24 68 64 28 61 75 78    set fd $hd(aux
1fd0: 29 0a 20 20 20 20 73 65 74 20 70 61 74 68 20 24  ).    set path $
1fe0: 68 64 28 72 6f 6f 74 70 61 74 68 2d 61 75 78 29  hd(rootpath-aux)
1ff0: 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
2000: 73 65 74 20 66 64 20 24 68 64 28 6d 61 69 6e 29  set fd $hd(main)
2010: 0a 20 20 20 20 73 65 74 20 70 61 74 68 20 24 68  .    set path $h
2020: 64 28 72 6f 6f 74 70 61 74 68 2d 6d 61 69 6e 29  d(rootpath-main)
2030: 0a 20 20 7d 0a 20 20 70 75 74 73 20 24 66 64 20  .  }.  puts $fd 
2040: 7b 3c 21 44 4f 43 54 59 50 45 20 48 54 4d 4c 20  {<!DOCTYPE HTML 
2050: 50 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 2f 2f  PUBLIC "-//W3C//
2060: 44 54 44 20 48 54 4d 4c 20 34 2e 30 31 2f 2f 45  DTD HTML 4.01//E
2070: 4e 22 20 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77  N" "http://www.w
2080: 33 2e 6f 72 67 2f 54 52 2f 68 74 6d 6c 34 2f 73  3.org/TR/html4/s
2090: 74 72 69 63 74 2e 64 74 64 22 3e 7d 0a 20 20 70  trict.dtd">}.  p
20a0: 75 74 73 20 24 66 64 20 7b 3c 68 74 6d 6c 3e 3c  uts $fd {<html><
20b0: 68 65 61 64 3e 7d 0a 20 20 70 75 74 73 20 24 66  head>}.  puts $f
20c0: 64 20 22 3c 74 69 74 6c 65 3e 24 74 69 74 6c 65  d "<title>$title
20d0: 3c 2f 74 69 74 6c 65 3e 22 0a 20 20 70 75 74 73  </title>".  puts
20e0: 69 6e 34 20 24 66 64 20 7b 3c 73 74 79 6c 65 20  in4 $fd {<style 
20f0: 74 79 70 65 3d 22 74 65 78 74 2f 63 73 73 22 3e  type="text/css">
2100: 0a 20 20 20 20 62 6f 64 79 20 7b 0a 20 20 20 20  .    body {.    
2110: 20 20 20 20 6d 61 72 67 69 6e 3a 20 61 75 74 6f      margin: auto
2120: 3b 0a 20 20 20 20 20 20 20 20 66 6f 6e 74 2d 66  ;.        font-f
2130: 61 6d 69 6c 79 3a 20 22 56 65 72 64 61 6e 61 22  amily: "Verdana"
2140: 20 22 73 61 6e 73 2d 73 65 72 69 66 22 3b 0a 20   "sans-serif";. 
2150: 20 20 20 20 20 20 20 70 61 64 64 69 6e 67 3a 20         padding: 
2160: 38 70 78 20 31 25 3b 0a 20 20 20 20 7d 0a 20 20  8px 1%;.    }.  
2170: 20 20 0a 20 20 20 20 61 20 7b 20 63 6f 6c 6f 72    .    a { color
2180: 3a 20 23 34 35 37 33 35 66 20 7d 0a 20 20 20 20  : #45735f }.    
2190: 61 3a 76 69 73 69 74 65 64 20 7b 20 63 6f 6c 6f  a:visited { colo
21a0: 72 3a 20 23 37 33 34 35 35 39 20 7d 0a 20 20 20  r: #734559 }.   
21b0: 20 0a 20 20 20 20 2e 6c 6f 67 6f 20 7b 20 70 6f   .    .logo { po
21c0: 73 69 74 69 6f 6e 3a 61 62 73 6f 6c 75 74 65 3b  sition:absolute;
21d0: 20 6d 61 72 67 69 6e 3a 33 70 78 3b 20 7d 0a 20   margin:3px; }. 
21e0: 20 20 20 2e 74 61 67 6c 69 6e 65 20 7b 0a 20 20     .tagline {.  
21f0: 20 20 20 20 66 6c 6f 61 74 3a 72 69 67 68 74 3b      float:right;
2200: 0a 20 20 20 20 20 20 74 65 78 74 2d 61 6c 69 67  .      text-alig
2210: 6e 3a 72 69 67 68 74 3b 0a 20 20 20 20 20 20 66  n:right;.      f
2220: 6f 6e 74 2d 73 74 79 6c 65 3a 69 74 61 6c 69 63  ont-style:italic
2230: 3b 0a 20 20 20 20 20 20 77 69 64 74 68 3a 32 34  ;.      width:24
2240: 30 70 78 3b 0a 20 20 20 20 20 20 6d 61 72 67 69  0px;.      margi
2250: 6e 3a 31 32 70 78 3b 0a 20 20 20 20 20 20 6d 61  n:12px;.      ma
2260: 72 67 69 6e 2d 74 6f 70 3a 35 38 70 78 3b 0a 20  rgin-top:58px;. 
2270: 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 2e 74     }.    .    .t
2280: 6f 6f 6c 62 61 72 20 7b 0a 20 20 20 20 20 20 66  oolbar {.      f
2290: 6f 6e 74 2d 76 61 72 69 61 6e 74 3a 20 73 6d 61  ont-variant: sma
22a0: 6c 6c 2d 63 61 70 73 3b 0a 20 20 20 20 20 20 74  ll-caps;.      t
22b0: 65 78 74 2d 61 6c 69 67 6e 3a 20 63 65 6e 74 65  ext-align: cente
22c0: 72 3b 0a 20 20 20 20 20 20 6c 69 6e 65 2d 68 65  r;.      line-he
22d0: 69 67 68 74 3a 20 31 2e 36 65 6d 3b 0a 20 20 20  ight: 1.6em;.   
22e0: 20 20 20 6d 61 72 67 69 6e 3a 20 30 3b 0a 20 20     margin: 0;.  
22f0: 20 20 20 20 70 61 64 64 69 6e 67 3a 31 70 78 20      padding:1px 
2300: 38 70 78 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2e  8px;.    }.    .
2310: 74 6f 6f 6c 62 61 72 20 61 20 7b 20 63 6f 6c 6f  toolbar a { colo
2320: 72 3a 20 77 68 69 74 65 3b 20 74 65 78 74 2d 64  r: white; text-d
2330: 65 63 6f 72 61 74 69 6f 6e 3a 20 6e 6f 6e 65 3b  ecoration: none;
2340: 20 70 61 64 64 69 6e 67 3a 20 36 70 78 20 31 32   padding: 6px 12
2350: 70 78 3b 20 7d 0a 20 20 20 20 2e 74 6f 6f 6c 62  px; }.    .toolb
2360: 61 72 20 61 3a 76 69 73 69 74 65 64 20 7b 20 63  ar a:visited { c
2370: 6f 6c 6f 72 3a 20 77 68 69 74 65 3b 20 7d 0a 20  olor: white; }. 
2380: 20 20 20 2e 74 6f 6f 6c 62 61 72 20 61 3a 68 6f     .toolbar a:ho
2390: 76 65 72 20 7b 20 63 6f 6c 6f 72 3a 20 23 38 30  ver { color: #80
23a0: 61 37 39 36 3b 20 62 61 63 6b 67 72 6f 75 6e 64  a796; background
23b0: 3a 20 77 68 69 74 65 3b 20 7d 0a 20 20 20 20 0a  : white; }.    .
23c0: 20 20 20 20 2e 63 6f 6e 74 65 6e 74 20 20 20 20      .content    
23d0: 7b 20 6d 61 72 67 69 6e 3a 20 35 25 3b 20 7d 0a  { margin: 5%; }.
23e0: 20 20 20 20 2e 63 6f 6e 74 65 6e 74 20 64 74 20      .content dt 
23f0: 7b 20 66 6f 6e 74 2d 77 65 69 67 68 74 3a 62 6f  { font-weight:bo
2400: 6c 64 3b 20 7d 0a 20 20 20 20 2e 63 6f 6e 74 65  ld; }.    .conte
2410: 6e 74 20 64 64 20 7b 20 6d 61 72 67 69 6e 2d 62  nt dd { margin-b
2420: 6f 74 74 6f 6d 3a 20 32 35 70 78 3b 20 6d 61 72  ottom: 25px; mar
2430: 67 69 6e 2d 6c 65 66 74 3a 32 30 25 3b 20 7d 0a  gin-left:20%; }.
2440: 20 20 20 20 2e 63 6f 6e 74 65 6e 74 20 75 6c 20      .content ul 
2450: 7b 20 70 61 64 64 69 6e 67 3a 30 70 78 3b 20 70  { padding:0px; p
2460: 61 64 64 69 6e 67 2d 6c 65 66 74 3a 20 31 35 70  adding-left: 15p
2470: 78 3b 20 6d 61 72 67 69 6e 3a 30 70 78 3b 20 7d  x; margin:0px; }
2480: 0a 20 20 20 20 0a 20 20 20 20 2f 2a 20 72 6f 75  .    .    /* rou
2490: 6e 64 65 64 20 63 6f 72 6e 65 72 73 20 2a 2f 0a  nded corners */.
24a0: 20 20 20 20 2e 73 65 20 20 7b 20 62 61 63 6b 67      .se  { backg
24b0: 72 6f 75 6e 64 3a 20 75 72 6c 28 24 7b 70 61 74  round: url(${pat
24c0: 68 7d 69 6d 61 67 65 73 2f 73 65 2e 70 6e 67 29  h}images/se.png)
24d0: 20 31 30 30 25 20 31 30 30 25 20 6e 6f 2d 72 65   100% 100% no-re
24e0: 70 65 61 74 20 23 38 30 61 37 39 36 7d 0a 20 20  peat #80a796}.  
24f0: 20 20 2e 73 77 20 20 7b 20 62 61 63 6b 67 72 6f    .sw  { backgro
2500: 75 6e 64 3a 20 75 72 6c 28 24 7b 70 61 74 68 7d  und: url(${path}
2510: 69 6d 61 67 65 73 2f 73 77 2e 70 6e 67 29 20 30  images/sw.png) 0
2520: 25 20 31 30 30 25 20 6e 6f 2d 72 65 70 65 61 74  % 100% no-repeat
2530: 20 7d 0a 20 20 20 20 2e 6e 65 20 20 7b 20 62 61   }.    .ne  { ba
2540: 63 6b 67 72 6f 75 6e 64 3a 20 75 72 6c 28 24 7b  ckground: url(${
2550: 70 61 74 68 7d 69 6d 61 67 65 73 2f 6e 65 2e 70  path}images/ne.p
2560: 6e 67 29 20 31 30 30 25 20 30 25 20 6e 6f 2d 72  ng) 100% 0% no-r
2570: 65 70 65 61 74 20 7d 0a 20 20 20 20 2e 6e 77 20  epeat }.    .nw 
2580: 20 7b 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20 75   { background: u
2590: 72 6c 28 24 7b 70 61 74 68 7d 69 6d 61 67 65 73  rl(${path}images
25a0: 2f 6e 77 2e 70 6e 67 29 20 30 25 20 30 25 20 6e  /nw.png) 0% 0% n
25b0: 6f 2d 72 65 70 65 61 74 20 7d 0a 0a 20 20 20 20  o-repeat }..    
25c0: 3c 2f 73 74 79 6c 65 3e 0a 20 20 20 20 3c 6d 65  </style>.    <me
25d0: 74 61 20 68 74 74 70 2d 65 71 75 69 76 3d 22 63  ta http-equiv="c
25e0: 6f 6e 74 65 6e 74 2d 74 79 70 65 22 20 63 6f 6e  ontent-type" con
25f0: 74 65 6e 74 3d 22 74 65 78 74 2f 68 74 6d 6c 3b  tent="text/html;
2600: 20 63 68 61 72 73 65 74 3d 55 54 46 2d 38 22 3e   charset=UTF-8">
2610: 0a 20 20 7d 0a 20 20 70 75 74 73 20 24 66 64 20  .  }.  puts $fd 
2620: 7b 3c 2f 68 65 61 64 3e 7d 0a 20 20 70 75 74 73  {</head>}.  puts
2630: 69 6e 34 20 24 66 64 20 7b 3c 62 6f 64 79 3e 0a  in4 $fd {<body>.
2640: 20 20 20 20 3c 64 69 76 3e 3c 21 2d 2d 20 63 6f      <div><!-- co
2650: 6e 74 61 69 6e 65 72 20 64 69 76 20 74 6f 20 73  ntainer div to s
2660: 61 74 69 73 66 79 20 76 61 6c 69 64 61 74 6f 72  atisfy validator
2670: 20 2d 2d 3e 0a 20 20 20 20 0a 20 20 20 20 3c 61   -->.    .    <a
2680: 20 68 72 65 66 3d 22 24 7b 70 61 74 68 7d 69 6e   href="${path}in
2690: 64 65 78 2e 68 74 6d 6c 22 3e 0a 20 20 20 20 3c  dex.html">.    <
26a0: 69 6d 67 20 63 6c 61 73 73 3d 22 6c 6f 67 6f 22  img class="logo"
26b0: 20 73 72 63 3d 22 24 7b 70 61 74 68 7d 69 6d 61   src="${path}ima
26c0: 67 65 73 2f 53 51 4c 69 74 65 2e 67 69 66 22 20  ges/SQLite.gif" 
26d0: 61 6c 74 3d 22 53 51 4c 69 74 65 20 4c 6f 67 6f  alt="SQLite Logo
26e0: 22 0a 20 20 20 20 20 62 6f 72 64 65 72 3d 22 30  ".     border="0
26f0: 22 3e 3c 2f 61 3e 0a 20 20 20 20 3c 64 69 76 3e  "></a>.    <div>
2700: 3c 21 2d 2d 20 49 45 20 68 61 63 6b 20 74 6f 20  <!-- IE hack to 
2710: 70 72 65 76 65 6e 74 20 64 69 73 61 70 70 65 61  prevent disappea
2720: 72 69 6e 67 20 6c 6f 67 6f 2d 2d 3e 3c 2f 64 69  ring logo--></di
2730: 76 3e 0a 20 20 20 20 3c 64 69 76 20 63 6c 61 73  v>.    <div clas
2740: 73 3d 22 74 61 67 6c 69 6e 65 22 3e 53 6d 61 6c  s="tagline">Smal
2750: 6c 2e 20 46 61 73 74 2e 20 52 65 6c 69 61 62 6c  l. Fast. Reliabl
2760: 65 2e 3c 62 72 3e 43 68 6f 6f 73 65 20 61 6e 79  e.<br>Choose any
2770: 20 74 68 72 65 65 2e 3c 2f 64 69 76 3e 0a 0a 20   three.</div>.. 
2780: 20 20 20 3c 74 61 62 6c 65 20 77 69 64 74 68 3d     <table width=
2790: 31 30 30 25 20 73 74 79 6c 65 3d 22 63 6c 65 61  100% style="clea
27a0: 72 3a 62 6f 74 68 22 3e 3c 74 72 3e 3c 74 64 3e  r:both"><tr><td>
27b0: 0a 20 20 20 20 20 20 3c 64 69 76 20 63 6c 61 73  .      <div clas
27c0: 73 3d 22 73 65 22 3e 3c 64 69 76 20 63 6c 61 73  s="se"><div clas
27d0: 73 3d 22 73 77 22 3e 3c 64 69 76 20 63 6c 61 73  s="sw"><div clas
27e0: 73 3d 22 6e 65 22 3e 3c 64 69 76 20 63 6c 61 73  s="ne"><div clas
27f0: 73 3d 22 6e 77 22 3e 0a 20 20 20 20 20 20 3c 64  s="nw">.      <d
2800: 69 76 20 63 6c 61 73 73 3d 22 74 6f 6f 6c 62 61  iv class="toolba
2810: 72 22 3e 0a 20 20 20 20 20 20 20 20 3c 61 20 68  r">.        <a h
2820: 72 65 66 3d 22 24 7b 70 61 74 68 7d 61 62 6f 75  ref="${path}abou
2830: 74 2e 68 74 6d 6c 22 3e 41 62 6f 75 74 3c 2f 61  t.html">About</a
2840: 3e 0a 20 20 20 20 20 20 20 20 3c 61 20 68 72 65  >.        <a hre
2850: 66 3d 22 24 7b 70 61 74 68 7d 73 69 74 65 6d 61  f="${path}sitema
2860: 70 2e 68 74 6d 6c 22 3e 53 69 74 65 6d 61 70 3c  p.html">Sitemap<
2870: 2f 61 3e 0a 20 20 20 20 20 20 20 20 3c 61 20 68  /a>.        <a h
2880: 72 65 66 3d 22 24 7b 70 61 74 68 7d 64 6f 63 73  ref="${path}docs
2890: 2e 68 74 6d 6c 22 3e 44 6f 63 75 6d 65 6e 74 61  .html">Documenta
28a0: 74 69 6f 6e 3c 2f 61 3e 0a 20 20 20 20 20 20 20  tion</a>.       
28b0: 20 3c 61 20 68 72 65 66 3d 22 24 7b 70 61 74 68   <a href="${path
28c0: 7d 64 6f 77 6e 6c 6f 61 64 2e 68 74 6d 6c 22 3e  }download.html">
28d0: 44 6f 77 6e 6c 6f 61 64 3c 2f 61 3e 0a 20 20 20  Download</a>.   
28e0: 20 20 20 20 20 3c 61 20 68 72 65 66 3d 22 24 7b       <a href="${
28f0: 70 61 74 68 7d 63 6f 70 79 72 69 67 68 74 2e 68  path}copyright.h
2900: 74 6d 6c 22 3e 4c 69 63 65 6e 73 65 3c 2f 61 3e  tml">License</a>
2910: 0a 20 20 20 20 20 20 20 20 3c 61 20 68 72 65 66  .        <a href
2920: 3d 22 24 7b 70 61 74 68 7d 6e 65 77 73 2e 68 74  ="${path}news.ht
2930: 6d 6c 22 3e 4e 65 77 73 3c 2f 61 3e 0a 20 20 20  ml">News</a>.   
2940: 20 20 20 20 20 3c 61 20 68 72 65 66 3d 22 68 74       <a href="ht
2950: 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
2960: 6f 72 67 2f 63 76 73 74 72 61 63 2f 69 6e 64 65  org/cvstrac/inde
2970: 78 22 3e 44 65 76 65 6c 6f 70 65 72 73 3c 2f 61  x">Developers</a
2980: 3e 0a 20 20 20 20 20 20 20 20 3c 61 20 68 72 65  >.        <a hre
2990: 66 3d 22 24 7b 70 61 74 68 7d 73 75 70 70 6f 72  f="${path}suppor
29a0: 74 2e 68 74 6d 6c 22 3e 53 75 70 70 6f 72 74 3c  t.html">Support<
29b0: 2f 61 3e 0a 20 20 20 20 20 20 3c 2f 64 69 76 3e  /a>.      </div>
29c0: 3c 2f 64 69 76 3e 3c 2f 64 69 76 3e 3c 2f 64 69  </div></div></di
29d0: 76 3e 3c 2f 64 69 76 3e 0a 20 20 20 20 3c 2f 74  v></div>.    </t
29e0: 64 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a  d></tr></table>.
29f0: 20 20 7d 0a 20 20 69 66 20 7b 5b 66 69 6c 65 20    }.  if {[file 
2a00: 65 78 69 73 74 73 20 44 52 41 46 54 5d 7d 20 7b  exists DRAFT]} {
2a10: 0a 20 20 20 20 70 75 74 73 69 6e 34 20 24 66 64  .    putsin4 $fd
2a20: 20 7b 0a 20 20 20 20 20 20 3c 70 20 61 6c 69 67   {.      <p alig
2a30: 6e 3d 22 63 65 6e 74 65 72 22 3e 3c 66 6f 6e 74  n="center"><font
2a40: 20 73 69 7a 65 3d 22 36 22 20 63 6f 6c 6f 72 3d   size="6" color=
2a50: 22 72 65 64 22 3e 2a 2a 2a 20 44 52 41 46 54 20  "red">*** DRAFT 
2a60: 2a 2a 2a 3c 2f 66 6f 6e 74 3e 3c 2f 70 3e 0a 20  ***</font></p>. 
2a70: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 20 7b 24     }.  }.  if {$
2a80: 73 72 63 66 69 6c 65 21 3d 22 22 7d 20 7b 0a 20  srcfile!=""} {. 
2a90: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
2aa0: 73 74 73 20 44 52 41 46 54 5d 7d 20 7b 0a 20 20  sts DRAFT]} {.  
2ab0: 20 20 20 20 73 65 74 20 68 64 28 66 6f 6f 74 65      set hd(foote
2ac0: 72 29 20 7b 0a 20 20 20 20 20 20 20 20 3c 70 20  r) {.        <p 
2ad0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 3e 3c  align="center"><
2ae0: 66 6f 6e 74 20 73 69 7a 65 3d 22 36 22 20 63 6f  font size="6" co
2af0: 6c 6f 72 3d 22 72 65 64 22 3e 2a 2a 2a 20 44 52  lor="red">*** DR
2b00: 41 46 54 20 2a 2a 2a 3c 2f 66 6f 6e 74 3e 3c 2f  AFT ***</font></
2b10: 70 3e 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  p>.      }.    }
2b20: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 73 65   else {.      se
2b30: 74 20 68 64 28 66 6f 6f 74 65 72 29 20 7b 7d 0a  t hd(footer) {}.
2b40: 20 20 20 20 7d 0a 20 20 20 20 61 70 70 65 6e 64      }.    append
2b50: 20 68 64 28 66 6f 6f 74 65 72 29 20 22 3c 68 72   hd(footer) "<hr
2b60: 3e 3c 73 6d 61 6c 6c 3e 3c 69 3e 5c 6e 22 0a 20  ><small><i>\n". 
2b70: 20 20 20 73 65 74 20 6d 74 69 6d 65 20 5b 66 69     set mtime [fi
2b80: 6c 65 20 6d 74 69 6d 65 20 24 73 72 63 66 69 6c  le mtime $srcfil
2b90: 65 5d 0a 20 20 20 20 73 65 74 20 64 61 74 65 20  e].    set date 
2ba0: 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 24 6d  [clock format $m
2bb0: 74 69 6d 65 20 2d 66 6f 72 6d 61 74 20 7b 25 59  time -format {%Y
2bc0: 2f 25 6d 2f 25 64 20 25 48 3a 25 4d 3a 25 53 20  /%m/%d %H:%M:%S 
2bd0: 55 54 43 7d 20 2d 67 6d 74 20 31 5d 0a 20 20 20  UTC} -gmt 1].   
2be0: 20 61 70 70 65 6e 64 20 68 64 28 66 6f 6f 74 65   append hd(foote
2bf0: 72 29 20 22 54 68 69 73 20 70 61 67 65 20 6c 61  r) "This page la
2c00: 73 74 20 6d 6f 64 69 66 69 65 64 20 24 64 61 74  st modified $dat
2c10: 65 5c 6e 22 0a 20 20 20 20 61 70 70 65 6e 64 20  e\n".    append 
2c20: 68 64 28 66 6f 6f 74 65 72 29 20 22 3c 2f 69 3e  hd(footer) "</i>
2c30: 3c 2f 73 6d 61 6c 6c 3e 3c 2f 64 69 76 3e 3c 2f  </small></div></
2c40: 62 6f 64 79 3e 3c 2f 68 74 6d 6c 3e 22 0a 20 20  body></html>".  
2c50: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74  } else {.    set
2c60: 20 68 64 28 65 6e 61 62 6c 65 2d 6d 61 69 6e 29   hd(enable-main)
2c70: 20 24 73 61 76 65 64 5f 65 6e 61 62 6c 65 0a 20   $saved_enable. 
2c80: 20 7d 0a 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c   }.}..# The foll
2c90: 6f 77 69 6e 67 20 70 72 6f 63 20 69 73 20 75 73  owing proc is us
2ca0: 65 64 20 74 6f 20 65 6e 73 75 72 65 20 63 6f 6e  ed to ensure con
2cb0: 73 69 73 74 65 6e 74 20 66 6f 72 6d 61 74 74 69  sistent formatti
2cc0: 6e 67 20 69 6e 20 74 68 65 20 0a 23 20 48 54 4d  ng in the .# HTM
2cd0: 4c 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 6c  L generated by l
2ce0: 61 6e 67 2e 74 63 6c 20 61 6e 64 20 70 72 61 67  ang.tcl and prag
2cf0: 6d 61 2e 74 63 6c 2e 0a 23 0a 70 72 6f 63 20 53  ma.tcl..#.proc S
2d00: 79 6e 74 61 78 20 7b 61 72 67 73 7d 20 7b 0a 20  yntax {args} {. 
2d10: 20 68 64 5f 70 75 74 73 20 7b 3c 74 61 62 6c 65   hd_puts {<table
2d20: 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30   cellpadding="10
2d30: 22 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e 7d  " width="100%">}
2d40: 0a 20 20 66 6f 72 65 61 63 68 20 7b 72 75 6c 65  .  foreach {rule
2d50: 20 62 6f 64 79 7d 20 24 61 72 67 73 20 7b 0a 20   body} $args {. 
2d60: 20 20 20 68 64 5f 70 75 74 73 20 22 3c 74 72 3e     hd_puts "<tr>
2d70: 3c 74 64 20 61 6c 69 67 6e 3d 5c 22 72 69 67 68  <td align=\"righ
2d80: 74 5c 22 20 76 61 6c 69 67 6e 3d 5c 22 74 6f 70  t\" valign=\"top
2d90: 5c 22 3e 22 0a 20 20 20 20 68 64 5f 70 75 74 73  \">".    hd_puts
2da0: 20 22 3c 69 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72   "<i><font color
2db0: 3d 5c 22 23 66 66 33 34 33 34 5c 22 3e 24 72 75  =\"#ff3434\">$ru
2dc0: 6c 65 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e 26 6e 62  le</font></i>&nb
2dd0: 73 70 3b 3a 3a 3d 3c 2f 74 64 3e 22 0a 20 20 20  sp;::=</td>".   
2de0: 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 3c 20 24   regsub -all < $
2df0: 62 6f 64 79 20 7b 25 4c 54 7d 20 62 6f 64 79 0a  body {%LT} body.
2e00: 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20      regsub -all 
2e10: 3e 20 24 62 6f 64 79 20 7b 25 47 54 7d 20 62 6f  > $body {%GT} bo
2e20: 64 79 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61  dy.    regsub -a
2e30: 6c 6c 20 25 4c 54 20 24 62 6f 64 79 20 7b 3c 2f  ll %LT $body {</
2e40: 66 6f 6e 74 3e 3c 2f 62 3e 3c 69 3e 3c 66 6f 6e  font></b><i><fon
2e50: 74 20 63 6f 6c 6f 72 3d 22 23 66 66 33 34 33 34  t color="#ff3434
2e60: 22 3e 7d 20 62 6f 64 79 0a 20 20 20 20 72 65 67  ">} body.    reg
2e70: 73 75 62 20 2d 61 6c 6c 20 25 47 54 20 24 62 6f  sub -all %GT $bo
2e80: 64 79 20 7b 3c 2f 66 6f 6e 74 3e 3c 2f 69 3e 3c  dy {</font></i><
2e90: 62 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23  b><font color="#
2ea0: 32 63 32 63 66 30 22 3e 7d 20 62 6f 64 79 0a 20  2c2cf0">} body. 
2eb0: 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b     regsub -all {
2ec0: 5b 5d 7c 5b 2a 3f 5d 7d 20 24 62 6f 64 79 20 7b  []|[*?]} $body {
2ed0: 3c 2f 66 6f 6e 74 3e 3c 2f 62 3e 26 3c 62 3e 3c  </font></b>&<b><
2ee0: 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32 63 32  font color="#2c2
2ef0: 63 66 30 22 3e 7d 20 62 6f 64 79 0a 20 20 20 20  cf0">} body.    
2f00: 72 65 67 73 75 62 20 2d 61 6c 6c 20 22 5c 6e 22  regsub -all "\n"
2f10: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 62   [string trim $b
2f20: 6f 64 79 5d 20 22 3c 62 72 3e 5c 6e 22 20 62 6f  ody] "<br>\n" bo
2f30: 64 79 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61  dy.    regsub -a
2f40: 6c 6c 20 22 5c 6e 20 20 2a 22 20 24 62 6f 64 79  ll "\n  *" $body
2f50: 20 22 5c 6e 5c 5c 26 6e 62 73 70 3b 5c 5c 26 6e   "\n\\&nbsp;\\&n
2f60: 62 73 70 3b 5c 5c 26 6e 62 73 70 3b 5c 5c 26 6e  bsp;\\&nbsp;\\&n
2f70: 62 73 70 3b 22 20 62 6f 64 79 0a 20 20 20 20 72  bsp;" body.    r
2f80: 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 7c 2c 2e  egsub -all {[|,.
2f90: 2a 28 29 5d 7d 20 24 62 6f 64 79 20 7b 3c 62 69  *()]} $body {<bi
2fa0: 67 3e 26 3c 2f 62 69 67 3e 7d 20 62 6f 64 79 0a  g>&</big>} body.
2fb0: 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20      regsub -all 
2fc0: 7b 20 3d 20 7d 20 24 62 6f 64 79 20 7b 20 3c 62  { = } $body { <b
2fd0: 69 67 3e 3d 3c 2f 62 69 67 3e 20 7d 20 62 6f 64  ig>=</big> } bod
2fe0: 79 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c  y.    regsub -al
2ff0: 6c 20 7b 53 54 41 52 7d 20 24 62 6f 64 79 20 7b  l {STAR} $body {
3000: 3c 62 69 67 3e 2a 3c 2f 62 69 67 3e 7d 20 62 6f  <big>*</big>} bo
3010: 64 79 0a 20 20 20 20 23 23 20 54 68 65 73 65 20  dy.    ## These 
3020: 6d 65 74 61 63 68 61 72 61 63 74 65 72 73 20 6d  metacharacters m
3030: 75 73 74 20 62 65 20 68 61 6e 64 6c 65 64 20 74  ust be handled t
3040: 6f 20 75 6e 64 6f 20 62 65 69 6e 67 0a 20 20 20  o undo being.   
3050: 20 23 23 20 74 72 65 61 74 65 64 20 61 73 20 53   ## treated as S
3060: 51 4c 20 70 75 6e 63 74 75 61 74 69 6f 6e 20 63  QL punctuation c
3070: 68 61 72 61 63 74 65 72 73 20 61 62 6f 76 65 2e  haracters above.
3080: 0a 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  .    regsub -all
3090: 20 7b 52 50 50 4c 55 53 7d 20 24 62 6f 64 79 20   {RPPLUS} $body 
30a0: 7b 3c 2f 66 6f 6e 74 3e 3c 2f 62 3e 29 2b 3c 62  {</font></b>)+<b
30b0: 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32  ><font color="#2
30c0: 63 32 63 66 30 22 3e 7d 20 62 6f 64 79 0a 20 20  c2cf0">} body.  
30d0: 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 4c    regsub -all {L
30e0: 50 7d 20 24 62 6f 64 79 20 7b 3c 2f 66 6f 6e 74  P} $body {</font
30f0: 3e 3c 2f 62 3e 28 3c 62 3e 3c 66 6f 6e 74 20 63  ></b>(<b><font c
3100: 6f 6c 6f 72 3d 22 23 32 63 32 63 66 30 22 3e 7d  olor="#2c2cf0">}
3110: 20 62 6f 64 79 0a 20 20 20 20 72 65 67 73 75 62   body.    regsub
3120: 20 2d 61 6c 6c 20 7b 52 50 7d 20 24 62 6f 64 79   -all {RP} $body
3130: 20 7b 3c 2f 66 6f 6e 74 3e 3c 2f 62 3e 29 3c 62   {</font></b>)<b
3140: 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d 22 23 32  ><font color="#2
3150: 63 32 63 66 30 22 3e 7d 20 62 6f 64 79 0a 20 20  c2cf0">} body.  
3160: 20 20 23 23 20 50 6c 61 63 65 20 74 68 65 20 6c    ## Place the l
3170: 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 6f 66  eft-hand side of
3180: 20 74 68 65 20 72 75 6c 65 20 69 6e 20 74 68 65   the rule in the
3190: 20 32 6e 64 20 74 61 62 6c 65 20 63 6f 6c 75 6d   2nd table colum
31a0: 6e 2e 0a 20 20 20 20 68 64 5f 70 75 74 73 20 22  n..    hd_puts "
31b0: 3c 74 64 20 77 69 64 74 68 3d 5c 22 39 30 25 5c  <td width=\"90%\
31c0: 22 3e 22 0a 20 20 20 20 68 64 5f 70 75 74 73 20  ">".    hd_puts 
31d0: 22 3c 62 3e 3c 66 6f 6e 74 20 63 6f 6c 6f 72 3d  "<b><font color=
31e0: 5c 22 23 32 63 32 63 66 30 5c 22 3e 24 62 6f 64  \"#2c2cf0\">$bod
31f0: 79 3c 2f 66 6f 6e 74 3e 3c 2f 62 3e 3c 2f 74 64  y</font></b></td
3200: 3e 3c 2f 74 72 3e 22 0a 20 20 7d 0a 20 20 68 64  ></tr>".  }.  hd
3210: 5f 70 75 74 73 20 7b 3c 2f 74 61 62 6c 65 3e 7d  _puts {</table>}
3220: 0a 7d 0a 0a 23 20 49 6e 73 65 72 74 20 61 20 62  .}..# Insert a b
3230: 75 62 62 6c 65 20 73 79 6e 74 61 78 20 64 69 61  ubble syntax dia
3240: 67 72 61 6d 20 69 6e 74 6f 20 74 68 65 20 6f 75  gram into the ou
3250: 74 70 75 74 2e 0a 23 0a 70 72 6f 63 20 42 75 62  tput..#.proc Bub
3260: 62 6c 65 44 69 61 67 72 61 6d 20 7b 6e 61 6d 65  bleDiagram {name
3270: 20 7b 61 6e 6f 6e 79 6d 6f 75 73 5f 66 6c 61 67   {anonymous_flag
3280: 20 30 7d 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20   0}} {.  global 
3290: 68 64 0a 0a 20 20 23 69 66 20 7b 21 24 61 6e 6f  hd..  #if {!$ano
32a0: 6e 79 6d 6f 75 73 5f 66 6c 61 67 7d 20 7b 0a 20  nymous_flag} {. 
32b0: 20 23 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 22   #  hd_resolve "
32c0: 3c 68 34 3e 5c 5b 24 6e 61 6d 65 3a 5c 5d 3c 2f  <h4>\[$name:\]</
32d0: 68 34 3e 22 0a 20 20 23 7d 0a 20 20 68 64 5f 72  h4>".  #}.  hd_r
32e0: 65 73 6f 6c 76 65 20 22 3c 68 34 3e 5c 5b 24 6e  esolve "<h4>\[$n
32f0: 61 6d 65 3a 5c 5d 3c 2f 68 34 3e 22 0a 20 20 69  ame:\]</h4>".  i
3300: 66 20 7b 24 68 64 28 65 6e 61 62 6c 65 2d 6d 61  f {$hd(enable-ma
3310: 69 6e 29 7d 20 7b 0a 20 20 20 20 70 75 74 73 20  in)} {.    puts 
3320: 24 68 64 28 6d 61 69 6e 29 20 22 3c 62 6c 6f 63  $hd(main) "<bloc
3330: 6b 71 75 6f 74 65 3e 5c 0a 20 20 20 20 20 20 20  kquote>\.       
3340: 20 3c 69 6d 67 20 73 72 63 3d 5c 22 24 68 64 28   <img src=\"$hd(
3350: 72 6f 6f 74 70 61 74 68 2d 6d 61 69 6e 29 69 6d  rootpath-main)im
3360: 61 67 65 73 2f 73 79 6e 74 61 78 2f 24 6e 61 6d  ages/syntax/$nam
3370: 65 2e 67 69 66 5c 22 3e 3c 2f 69 6d 67 3e 5c 0a  e.gif\"></img>\.
3380: 20 20 20 20 20 20 20 20 3c 2f 62 6c 6f 63 6b 71          </blockq
3390: 75 6f 74 65 3e 22 0a 20 20 7d 0a 20 20 69 66 20  uote>".  }.  if 
33a0: 7b 24 68 64 28 65 6e 61 62 6c 65 2d 61 75 78 29  {$hd(enable-aux)
33b0: 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 24 68 64  } {.    puts $hd
33c0: 28 61 75 78 29 20 22 3c 62 6c 6f 63 6b 71 75 6f  (aux) "<blockquo
33d0: 74 65 3e 5c 0a 20 20 20 20 20 20 20 20 3c 69 6d  te>\.        <im
33e0: 67 20 73 72 63 3d 5c 22 24 68 64 28 72 6f 6f 74  g src=\"$hd(root
33f0: 70 61 74 68 2d 61 75 78 29 69 6d 61 67 65 73 2f  path-aux)images/
3400: 73 79 6e 74 61 78 2f 24 6e 61 6d 65 2e 67 69 66  syntax/$name.gif
3410: 5c 22 3e 3c 2f 69 6d 67 3e 5c 0a 20 20 20 20 20  \"></img>\.     
3420: 20 20 20 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e     </blockquote>
3430: 22 0a 20 20 7d 0a 7d 0a 0a 23 20 52 65 63 6f 72  ".  }.}..# Recor
3440: 64 20 61 20 72 65 71 75 69 72 65 6d 65 6e 74 2e  d a requirement.
3450: 20 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65    This procedure
3460: 20 69 73 20 61 63 74 69 76 65 20 6f 6e 6c 79 20   is active only 
3470: 66 6f 72 20 74 68 65 20 66 69 72 73 74 0a 23 20  for the first.# 
3480: 70 61 73 73 2e 20 20 54 68 69 73 20 70 72 6f 63  pass.  This proc
3490: 65 64 75 72 65 20 62 65 63 6f 6d 65 73 20 61 20  edure becomes a 
34a0: 6e 6f 2d 6f 70 20 66 6f 72 20 74 68 65 20 73 65  no-op for the se
34b0: 63 6f 6e 64 20 70 61 73 73 2e 20 20 44 75 72 69  cond pass.  Duri
34c0: 6e 67 0a 23 20 74 68 65 20 73 65 63 6f 6e 64 20  ng.# the second 
34d0: 70 61 73 73 2c 20 72 65 71 75 69 72 65 6d 65 6e  pass, requiremen
34e0: 74 73 20 6c 69 73 74 69 6e 67 20 72 65 70 6f 72  ts listing repor
34f0: 74 20 67 65 6e 65 72 61 74 6f 72 73 20 63 61 6e  t generators can
3500: 20 75 73 65 20 74 68 65 0a 23 20 64 61 74 61 20   use the.# data 
3510: 61 63 63 75 6d 75 6c 61 74 65 64 20 64 75 72 69  accumulated duri
3520: 6e 67 20 74 68 65 20 66 69 72 73 74 20 70 61 73  ng the first pas
3530: 73 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74  s to construct t
3540: 68 65 69 72 20 72 65 70 6f 72 74 73 2e 0a 23 0a  heir reports..#.
3550: 23 20 49 66 20 74 68 65 20 22 76 65 72 62 61 74  # If the "verbat
3560: 69 6d 22 20 61 72 67 75 6d 65 6e 74 20 69 73 20  im" argument is 
3570: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 72  true, then the r
3580: 65 71 75 69 72 65 6d 65 6e 74 20 74 65 78 74 20  equirement text 
3590: 69 73 0a 23 20 72 65 6e 64 65 72 65 64 20 61 73  is.# rendered as
35a0: 20 69 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77   is.  In other w
35b0: 6f 72 64 73 2c 20 74 68 65 20 72 65 71 75 69 72  ords, the requir
35c0: 65 6d 65 6e 74 20 74 65 78 74 20 69 73 20 61 73  ement text is as
35d0: 73 75 6d 65 64 20 74 6f 0a 23 20 62 65 20 76 61  sumed to.# be va
35e0: 6c 69 64 20 48 54 4d 4c 20 77 69 74 68 20 61 6c  lid HTML with al
35f0: 6c 20 68 79 70 65 72 6c 69 6e 6b 73 20 61 6c 72  l hyperlinks alr
3600: 65 61 64 79 20 72 65 73 6f 6c 76 65 64 2e 20 20  eady resolved.  
3610: 49 66 20 74 68 65 20 22 76 65 72 62 61 74 69 6d  If the "verbatim
3620: 22 0a 23 20 61 72 67 75 6d 65 6e 74 20 69 73 20  ".# argument is 
3630: 66 61 6c 73 65 20 28 74 68 65 20 64 65 66 61 75  false (the defau
3640: 6c 74 29 20 74 68 65 6e 20 74 68 65 20 72 65 71  lt) then the req
3650: 75 69 72 65 6d 65 6e 74 20 74 65 78 74 20 69 73  uirement text is
3660: 20 72 65 6e 64 65 72 65 64 0a 23 20 75 73 69 6e   rendered.# usin
3670: 67 20 68 64 5f 72 65 6e 64 65 72 20 77 68 69 63  g hd_render whic
3680: 68 20 77 69 6c 6c 20 66 69 6e 64 20 61 6e 20 65  h will find an e
3690: 78 70 61 6e 64 20 68 79 70 65 72 6c 69 6e 6b 73  xpand hyperlinks
36a0: 20 77 69 74 68 69 6e 20 74 68 65 20 74 65 78 74   within the text
36b0: 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 72 65 71 75  ..#.proc hd_requ
36c0: 69 72 65 6d 65 6e 74 20 7b 69 64 20 74 65 78 74  irement {id text
36d0: 20 7b 76 65 72 62 61 74 69 6d 20 30 7d 7d 20 7b   {verbatim 0}} {
36e0: 0a 20 20 67 6c 6f 62 61 6c 20 41 4c 4c 52 45 51  .  global ALLREQ
36f0: 20 41 4c 4c 52 45 51 5f 56 45 52 42 41 54 49 4d   ALLREQ_VERBATIM
3700: 20 41 4c 4c 52 45 51 5f 44 45 52 49 56 45 44 46   ALLREQ_DERIVEDF
3710: 52 4f 4d 0a 20 20 69 66 20 7b 5b 69 6e 66 6f 20  ROM.  if {[info 
3720: 65 78 69 73 74 73 20 41 4c 4c 52 45 51 28 24 69  exists ALLREQ($i
3730: 64 29 5d 7d 20 7b 0a 20 20 20 20 70 75 74 73 20  d)]} {.    puts 
3740: 73 74 64 65 72 72 20 22 64 75 70 6c 69 63 61 74  stderr "duplicat
3750: 65 20 72 65 71 75 69 72 65 6d 65 6e 74 20 6c 61  e requirement la
3760: 62 65 6c 3a 20 24 69 64 22 0a 20 20 7d 0a 20 20  bel: $id".  }.  
3770: 73 65 74 20 41 4c 4c 52 45 51 5f 44 45 52 49 56  set ALLREQ_DERIV
3780: 45 44 46 52 4f 4d 28 24 69 64 29 20 7b 7d 0a 20  EDFROM($id) {}. 
3790: 20 77 68 69 6c 65 20 7b 5b 72 65 67 65 78 70 20   while {[regexp 
37a0: 7b 3c 28 5b 41 48 4c 53 5d 5c 64 5c 64 5c 64 5c  {<([AHLS]\d\d\d\
37b0: 64 5c 64 29 3e 7d 20 24 74 65 78 74 20 61 6c 6c  d\d)>} $text all
37c0: 20 64 66 5d 7d 20 7b 0a 20 20 20 20 72 65 67 73   df]} {.    regs
37d0: 75 62 20 7b 3c 5b 41 48 4c 53 5d 5c 64 5c 64 5c  ub {<[AHLS]\d\d\
37e0: 64 5c 64 5c 64 3e 20 2a 7d 20 24 74 65 78 74 20  d\d\d> *} $text 
37f0: 7b 7d 20 74 65 78 74 0a 20 20 20 20 6c 61 70 70  {} text.    lapp
3800: 65 6e 64 20 41 4c 4c 52 45 51 5f 44 45 52 49 56  end ALLREQ_DERIV
3810: 45 44 46 52 4f 4d 28 24 69 64 29 20 24 64 66 0a  EDFROM($id) $df.
3820: 20 20 7d 0a 20 20 73 65 74 20 41 4c 4c 52 45 51    }.  set ALLREQ
3830: 28 24 69 64 29 20 24 74 65 78 74 0a 20 20 73 65  ($id) $text.  se
3840: 74 20 41 4c 4c 52 45 51 5f 56 45 52 42 41 54 49  t ALLREQ_VERBATI
3850: 4d 28 24 69 64 29 20 24 76 65 72 62 61 74 69 6d  M($id) $verbatim
3860: 0a 7d 0a 0a 0a 23 20 46 69 72 73 74 20 70 61 73  .}...# First pas
3870: 73 2e 20 20 50 72 6f 63 65 73 73 20 61 6c 6c 20  s.  Process all 
3880: 66 69 6c 65 73 2e 20 20 42 75 74 20 64 6f 20 6e  files.  But do n
3890: 6f 74 20 72 65 6e 64 65 72 20 68 79 70 65 72 6c  ot render hyperl
38a0: 69 6e 6b 73 2e 0a 23 20 4d 65 72 65 6c 79 20 63  inks..# Merely c
38b0: 6f 6c 6c 65 63 74 20 6b 65 79 77 6f 72 64 20 69  ollect keyword i
38c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 6f 20 74 68  nformation so th
38d0: 61 74 20 68 79 70 65 72 6c 69 6e 6b 73 20 63 61  at hyperlinks ca
38e0: 6e 20 62 65 0a 23 20 63 6f 72 72 65 63 74 6c 79  n be.# correctly
38f0: 20 72 65 6e 64 65 72 65 64 20 6f 6e 20 74 68 65   rendered on the
3900: 20 73 65 63 6f 6e 64 20 70 61 73 73 2e 0a 23 0a   second pass..#.
3910: 66 6f 72 65 61 63 68 20 69 6e 66 69 6c 65 20 5b  foreach infile [
3920: 6c 72 61 6e 67 65 20 24 61 72 67 76 20 33 20 65  lrange $argv 3 e
3930: 6e 64 5d 20 7b 0a 20 20 63 64 20 24 48 4f 4d 45  nd] {.  cd $HOME
3940: 44 49 52 0a 20 20 70 75 74 73 20 22 50 72 6f 63  DIR.  puts "Proc
3950: 65 73 73 69 6e 67 20 24 69 6e 66 69 6c 65 22 0a  essing $infile".
3960: 20 20 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 24    set fd [open $
3970: 69 6e 66 69 6c 65 20 72 5d 0a 20 20 73 65 74 20  infile r].  set 
3980: 69 6e 20 5b 72 65 61 64 20 24 66 64 5d 0a 20 20  in [read $fd].  
3990: 63 6c 6f 73 65 20 24 66 64 0a 20 20 73 65 74 20  close $fd.  set 
39a0: 74 69 74 6c 65 20 7b 4e 6f 20 54 69 74 6c 65 7d  title {No Title}
39b0: 0a 20 20 72 65 67 65 78 70 20 7b 3c 74 69 74 6c  .  regexp {<titl
39c0: 65 3e 28 5b 5e 5c 6e 5d 2a 29 3c 2f 74 69 74 6c  e>([^\n]*)</titl
39d0: 65 3e 7d 20 24 69 6e 20 61 6c 6c 20 74 69 74 6c  e>} $in all titl
39e0: 65 0a 20 20 72 65 67 73 75 62 20 7b 3c 74 69 74  e.  regsub {<tit
39f0: 6c 65 3e 5b 5e 5c 6e 5d 2a 3c 2f 74 69 74 6c 65  le>[^\n]*</title
3a00: 3e 7d 20 24 69 6e 20 7b 7d 20 69 6e 0a 20 20 73  >} $in {} in.  s
3a10: 65 74 20 6f 75 74 66 69 6c 65 20 5b 66 69 6c 65  et outfile [file
3a20: 20 72 6f 6f 74 20 5b 66 69 6c 65 20 74 61 69 6c   root [file tail
3a30: 20 24 69 6e 66 69 6c 65 5d 5d 2e 68 74 6d 6c 0a   $infile]].html.
3a40: 20 20 68 64 5f 6f 70 65 6e 5f 6d 61 69 6e 20 24    hd_open_main $
3a50: 6f 75 74 66 69 6c 65 0a 20 20 68 64 5f 68 65 61  outfile.  hd_hea
3a60: 64 65 72 20 24 74 69 74 6c 65 20 24 69 6e 66 69  der $title $infi
3a70: 6c 65 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  le.  regsub -all
3a80: 20 7b 3c 74 63 6c 3e 7d 20 24 69 6e 20 22 5c 31   {<tcl>} $in "\1
3a90: 37 35 3b 20 65 76 61 6c 20 5c 31 37 33 22 20 69  75; eval \173" i
3aa0: 6e 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20  n.  regsub -all 
3ab0: 7b 3c 2f 74 63 6c 3e 7d 20 24 69 6e 20 22 5c 31  {</tcl>} $in "\1
3ac0: 37 35 3b 20 68 64 5f 70 75 74 73 20 5c 31 37 33  75; hd_puts \173
3ad0: 22 20 69 6e 0a 20 20 65 76 61 6c 20 22 68 64 5f  " in.  eval "hd_
3ae0: 70 75 74 73 20 5c 31 37 33 24 69 6e 5c 31 37 35  puts \173$in\175
3af0: 22 0a 20 20 63 64 20 24 3a 3a 48 4f 4d 45 44 49  ".  cd $::HOMEDI
3b00: 52 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61 69  R.  hd_close_mai
3b10: 6e 0a 7d 0a 0a 23 20 53 65 63 6f 6e 64 20 70 61  n.}..# Second pa
3b20: 73 73 2e 20 20 50 72 6f 63 65 73 73 20 61 6c 6c  ss.  Process all
3b30: 20 66 69 6c 65 73 20 61 67 61 69 6e 2e 20 20 54   files again.  T
3b40: 68 69 73 20 74 69 6d 65 20 72 65 6e 64 65 72 20  his time render 
3b50: 68 79 70 65 72 6c 69 6e 6b 73 0a 23 20 61 63 63  hyperlinks.# acc
3b60: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 6b 65  ording to the ke
3b70: 79 77 6f 72 64 20 69 6e 66 6f 72 6d 61 74 69 6f  yword informatio
3b80: 6e 20 63 6f 6c 6c 65 63 74 65 64 20 6f 6e 20 74  n collected on t
3b90: 68 65 20 66 69 72 73 74 20 70 61 73 73 2e 0a 23  he first pass..#
3ba0: 0a 70 72 6f 63 20 68 64 5f 6b 65 79 77 6f 72 64  .proc hd_keyword
3bb0: 73 20 7b 61 72 67 73 7d 20 7b 7d 0a 72 65 6e 61  s {args} {}.rena
3bc0: 6d 65 20 68 64 5f 72 65 73 6f 6c 76 65 20 7b 7d  me hd_resolve {}
3bd0: 0a 72 65 6e 61 6d 65 20 68 64 5f 72 65 73 6f 6c  .rename hd_resol
3be0: 76 65 5f 32 6e 64 70 61 73 73 20 68 64 5f 72 65  ve_2ndpass hd_re
3bf0: 73 6f 6c 76 65 0a 70 72 6f 63 20 68 64 5f 72 65  solve.proc hd_re
3c00: 71 75 69 72 65 6d 65 6e 74 20 7b 61 72 67 73 7d  quirement {args}
3c10: 20 7b 7d 0a 66 6f 72 65 61 63 68 20 69 6e 66 69   {}.foreach infi
3c20: 6c 65 20 5b 6c 72 61 6e 67 65 20 24 61 72 67 76  le [lrange $argv
3c30: 20 33 20 65 6e 64 5d 20 7b 0a 20 20 63 64 20 24   3 end] {.  cd $
3c40: 48 4f 4d 45 44 49 52 0a 20 20 70 75 74 73 20 22  HOMEDIR.  puts "
3c50: 50 72 6f 63 65 73 73 69 6e 67 20 24 69 6e 66 69  Processing $infi
3c60: 6c 65 22 0a 20 20 73 65 74 20 66 64 20 5b 6f 70  le".  set fd [op
3c70: 65 6e 20 24 69 6e 66 69 6c 65 20 72 5d 0a 20 20  en $infile r].  
3c80: 73 65 74 20 69 6e 20 5b 72 65 61 64 20 24 66 64  set in [read $fd
3c90: 5d 0a 20 20 63 6c 6f 73 65 20 24 66 64 0a 20 20  ].  close $fd.  
3ca0: 73 65 74 20 74 69 74 6c 65 20 7b 4e 6f 20 54 69  set title {No Ti
3cb0: 74 6c 65 7d 0a 20 20 72 65 67 65 78 70 20 7b 3c  tle}.  regexp {<
3cc0: 74 69 74 6c 65 3e 28 5b 5e 5c 6e 5d 2a 29 3c 2f  title>([^\n]*)</
3cd0: 74 69 74 6c 65 3e 7d 20 24 69 6e 20 61 6c 6c 20  title>} $in all 
3ce0: 74 69 74 6c 65 0a 20 20 72 65 67 73 75 62 20 7b  title.  regsub {
3cf0: 3c 74 69 74 6c 65 3e 5b 5e 5c 6e 5d 2a 3c 2f 74  <title>[^\n]*</t
3d00: 69 74 6c 65 3e 7d 20 24 69 6e 20 7b 7d 20 69 6e  itle>} $in {} in
3d10: 0a 20 20 73 65 74 20 6f 75 74 66 69 6c 65 20 5b  .  set outfile [
3d20: 66 69 6c 65 20 72 6f 6f 74 20 5b 66 69 6c 65 20  file root [file 
3d30: 74 61 69 6c 20 24 69 6e 66 69 6c 65 5d 5d 2e 68  tail $infile]].h
3d40: 74 6d 6c 0a 20 20 68 64 5f 6f 70 65 6e 5f 6d 61  tml.  hd_open_ma
3d50: 69 6e 20 24 6f 75 74 66 69 6c 65 0a 20 20 68 64  in $outfile.  hd
3d60: 5f 68 65 61 64 65 72 20 24 74 69 74 6c 65 20 24  _header $title $
3d70: 69 6e 66 69 6c 65 0a 20 20 72 65 67 73 75 62 20  infile.  regsub 
3d80: 2d 61 6c 6c 20 7b 3c 74 63 6c 3e 7d 20 24 69 6e  -all {<tcl>} $in
3d90: 20 22 5c 31 37 35 3b 20 65 76 61 6c 20 5c 31 37   "\175; eval \17
3da0: 33 22 20 69 6e 0a 20 20 72 65 67 73 75 62 20 2d  3" in.  regsub -
3db0: 61 6c 6c 20 7b 3c 2f 74 63 6c 3e 7d 20 24 69 6e  all {</tcl>} $in
3dc0: 20 22 5c 31 37 35 3b 20 68 64 5f 72 65 73 6f 6c   "\175; hd_resol
3dd0: 76 65 20 5c 31 37 33 22 20 69 6e 0a 20 20 65 76  ve \173" in.  ev
3de0: 61 6c 20 22 68 64 5f 72 65 73 6f 6c 76 65 20 5c  al "hd_resolve \
3df0: 31 37 33 24 69 6e 5c 31 37 35 22 0a 20 20 63 64  173$in\175".  cd
3e00: 20 24 3a 3a 48 4f 4d 45 44 49 52 0a 20 20 68 64   $::HOMEDIR.  hd
3e10: 5f 63 6c 6f 73 65 5f 6d 61 69 6e 0a 7d 0a 0a 23  _close_main.}..#
3e20: 20 47 65 6e 65 72 61 74 65 20 61 20 64 6f 63 75   Generate a docu
3e30: 6d 65 6e 74 20 73 68 6f 77 69 6e 67 20 74 68 65  ment showing the
3e40: 20 68 79 70 65 72 6c 69 6e 6b 20 6b 65 79 77 6f   hyperlink keywo
3e50: 72 64 73 20 61 6e 64 20 74 68 65 69 72 0a 23 20  rds and their.# 
3e60: 74 61 72 67 65 74 73 2e 0a 23 0a 68 64 5f 6f 70  targets..#.hd_op
3e70: 65 6e 5f 6d 61 69 6e 20 64 6f 63 5f 6b 65 79 77  en_main doc_keyw
3e80: 6f 72 64 5f 63 72 6f 73 73 72 65 66 2e 68 74 6d  ord_crossref.htm
3e90: 6c 0a 68 64 5f 68 65 61 64 65 72 20 7b 48 79 70  l.hd_header {Hyp
3ea0: 65 72 6c 69 6e 6b 20 43 72 6f 73 73 72 65 66 65  erlink Crossrefe
3eb0: 72 65 6e 63 65 7d 20 24 44 4f 43 2f 77 72 61 70  rence} $DOC/wrap
3ec0: 2e 74 63 6c 0a 68 64 5f 70 75 74 73 20 22 3c 75  .tcl.hd_puts "<u
3ed0: 6c 3e 22 0a 66 6f 72 65 61 63 68 20 78 20 5b 6c  l>".foreach x [l
3ee0: 73 6f 72 74 20 2d 64 69 63 74 20 5b 61 72 72 61  sort -dict [arra
3ef0: 79 20 6e 61 6d 65 73 20 67 6c 69 6e 6b 5d 5d 20  y names glink]] 
3f00: 7b 0a 20 20 73 65 74 20 79 20 24 67 6c 69 6e 6b  {.  set y $glink
3f10: 28 24 78 29 0a 20 20 68 64 5f 70 75 74 73 20 22  ($x).  hd_puts "
3f20: 3c 6c 69 3e 24 78 20 2d 20 3c 61 20 68 72 65 66  <li>$x - <a href
3f30: 3d 5c 22 24 79 5c 22 3e 24 79 3c 2f 61 3e 3c 2f  =\"$y\">$y</a></
3f40: 6c 69 3e 22 0a 20 20 6c 61 70 70 65 6e 64 20 72  li>".  lappend r
3f50: 65 76 67 6c 69 6e 6b 28 24 79 29 20 24 78 0a 7d  evglink($y) $x.}
3f60: 0a 68 64 5f 70 75 74 73 20 22 3c 2f 75 6c 3e 3c  .hd_puts "</ul><
3f70: 68 72 3e 3c 75 6c 3e 22 0a 66 6f 72 65 61 63 68  hr><ul>".foreach
3f80: 20 79 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79   y [lsort [array
3f90: 20 6e 61 6d 65 73 20 72 65 76 67 6c 69 6e 6b 5d   names revglink]
3fa0: 5d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 22 3c  ] {.  hd_puts "<
3fb0: 6c 69 3e 3c 61 20 68 72 65 66 3d 5c 22 24 79 5c  li><a href=\"$y\
3fc0: 22 3e 24 79 3c 2f 61 3e 20 2d 20 5b 6c 73 6f 72  ">$y</a> - [lsor
3fd0: 74 20 24 72 65 76 67 6c 69 6e 6b 28 24 79 29 5d  t $revglink($y)]
3fe0: 3c 2f 6c 69 3e 22 0a 7d 0a 68 64 5f 70 75 74 73  </li>".}.hd_puts
3ff0: 20 22 3c 2f 75 6c 3e 22 0a 68 64 5f 63 6c 6f 73   "</ul>".hd_clos
4000: 65 5f 6d 61 69 6e 0a                             e_main.