Documentation Source Text

Hex Artifact Content
Login

Artifact cf118d51e8a8c86cade6cc0a651b2977d26beceb:


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 24 28 44 45 53 54 29 20 64 69 72 65 63 74 6f   $(DEST) directo
0230: 72 79 2e 0a 23 0a 23 20 43 68 61 6e 67 65 73 20  ry..#.# Changes 
0240: 6d 61 64 65 20 74 6f 20 74 68 65 20 73 6f 75 72  made to the sour
0250: 63 65 20 66 69 6c 65 73 3a 0a 23 0a 23 20 20 20  ce files:.#.#   
0260: 20 20 2a 20 20 41 6e 20 61 70 70 72 6f 70 72 69    *  An appropri
0270: 61 74 65 20 68 65 61 64 65 72 20 28 63 6f 6e 74  ate header (cont
0280: 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 69 74  aining the SQLit
0290: 65 20 6c 6f 67 6f 20 61 6e 64 20 73 74 61 6e 64  e logo and stand
02a0: 61 72 64 0a 23 20 20 20 20 20 20 20 20 6d 65 6e  ard.#        men
02b0: 75 20 62 61 72 29 20 69 73 20 70 72 65 70 65 6e  u bar) is prepen
02c0: 64 65 64 20 74 6f 20 74 68 65 20 66 69 6c 65 2e  ded to the file.
02d0: 20 20 0a 23 0a 23 20 20 20 20 20 2a 20 20 41 6e    .#.#     *  An
02e0: 79 20 3c 74 69 74 6c 65 3e 2e 2e 2e 3c 2f 74 69  y <title>...</ti
02f0: 74 6c 65 3e 20 69 6e 20 74 68 65 20 69 6e 70 75  tle> in the inpu
0300: 74 20 69 73 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t is moved into 
0310: 74 68 65 20 70 72 65 70 65 6e 64 65 64 0a 23 20  the prepended.# 
0320: 20 20 20 20 20 20 20 68 65 61 64 65 72 2e 0a 23         header..#
0330: 0a 23 20 20 20 20 20 2a 20 20 41 6e 20 61 70 70  .#     *  An app
0340: 72 6f 70 72 69 61 74 65 20 66 6f 6f 74 65 72 20  ropriate footer 
0350: 69 73 20 61 70 70 65 6e 64 65 64 2e 0a 23 0a 23  is appended..#.#
0360: 20 20 20 20 20 2a 20 20 53 63 72 69 70 74 73 20       *  Scripts 
0370: 77 69 74 68 69 6e 20 3c 74 63 6c 3e 2e 2e 2e 3c  within <tcl>...<
0380: 2f 74 63 6c 3e 20 61 72 65 20 65 76 61 6c 75 61  /tcl> are evalua
0390: 74 65 64 2e 20 20 4f 75 74 70 75 74 20 74 68 61  ted.  Output tha
03a0: 74 0a 23 20 20 20 20 20 20 20 20 69 73 20 65 6d  t.#        is em
03b0: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 73 65  itted from these
03c0: 20 73 63 72 69 70 74 73 20 62 79 20 22 68 64 5f   scripts by "hd_
03d0: 70 75 74 73 22 20 6f 72 20 22 68 64 5f 72 65 73  puts" or "hd_res
03e0: 6f 6c 76 65 22 0a 23 20 20 20 20 20 20 20 20 70  olve".#        p
03f0: 72 6f 63 65 64 75 72 65 73 20 61 70 70 65 61 72  rocedures appear
0400: 73 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 74 68  s in place of th
0410: 65 20 6f 72 69 67 69 6e 61 6c 20 73 63 72 69 70  e original scrip
0420: 74 2e 0a 23 0a 23 20 20 20 20 20 2a 20 20 48 79  t..#.#     *  Hy
0430: 70 65 72 6c 69 6e 6b 73 20 77 69 74 68 69 6e 20  perlinks within 
0440: 5b 2e 2e 2e 5d 20 61 72 65 20 72 65 73 6f 6c 76  [...] are resolv
0450: 65 64 2e 0a 23 0a 23 20 41 20 74 77 6f 2d 70 61  ed..#.# A two-pa
0460: 73 73 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20  ss algorithm is 
0470: 75 73 65 64 2e 20 20 54 68 65 20 66 69 72 73 74  used.  The first
0480: 20 70 61 73 73 20 63 6f 6c 6c 65 63 74 73 20 74   pass collects t
0490: 68 65 20 6e 61 6d 65 73 20 6f 66 0a 23 20 68 79  he names of.# hy
04a0: 70 65 72 6c 69 6e 6b 20 74 61 72 67 65 74 73 2c  perlink targets,
04b0: 20 72 65 71 75 69 72 65 6d 65 6e 74 73 20 74 65   requirements te
04c0: 78 74 2c 20 61 6e 64 20 6f 74 68 65 72 20 67 6c  xt, and other gl
04d0: 6f 62 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  obal information
04e0: 2e 0a 23 20 54 68 65 20 73 65 63 6f 6e 64 20 70  ..# The second p
04f0: 61 73 73 20 75 73 65 73 20 74 68 65 20 64 61 74  ass uses the dat
0500: 61 20 67 61 74 68 65 72 65 64 20 6f 6e 20 74 68  a gathered on th
0510: 65 20 66 69 72 73 74 20 70 61 73 73 20 74 6f 20  e first pass to 
0520: 67 65 6e 65 72 61 74 65 0a 23 20 74 68 65 20 66  generate.# the f
0530: 69 6e 61 6c 20 6f 75 74 70 75 74 2e 0a 23 0a 73  inal output..#.s
0540: 65 74 20 44 4f 43 20 5b 6c 69 6e 64 65 78 20 24  et DOC [lindex $
0550: 61 72 67 76 20 30 5d 0a 73 65 74 20 53 52 43 20  argv 0].set SRC 
0560: 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 31 5d  [lindex $argv 1]
0570: 0a 73 65 74 20 44 45 53 54 20 5b 6c 69 6e 64 65  .set DEST [linde
0580: 78 20 24 61 72 67 76 20 32 5d 0a 73 65 74 20 48  x $argv 2].set H
0590: 4f 4d 45 44 49 52 20 5b 70 77 64 5d 20 20 20 20  OMEDIR [pwd]    
05a0: 20 20 20 20 20 20 20 20 3b 23 20 41 6c 73 6f 20          ;# Also 
05b0: 72 65 6d 65 6d 62 65 72 20 6f 75 72 20 68 6f 6d  remember our hom
05c0: 65 20 64 69 72 65 63 74 6f 72 79 2e 0a 0a 73 6f  e directory...so
05d0: 75 72 63 65 20 5b 66 69 6c 65 20 64 69 72 6e 61  urce [file dirna
05e0: 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d  me [info script]
05f0: 5d 2f 70 61 67 65 73 2f 66 61 6e 63 79 66 6f 72  ]/pages/fancyfor
0600: 6d 61 74 2e 74 63 6c 0a 0a 23 20 4f 70 65 6e 20  mat.tcl..# Open 
0610: 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62  the SQLite datab
0620: 61 73 65 2e 0a 23 0a 73 71 6c 69 74 65 33 20 64  ase..#.sqlite3 d
0630: 62 20 64 6f 63 69 6e 66 6f 2e 64 62 0a 64 62 20  b docinfo.db.db 
0640: 65 76 61 6c 20 7b 0a 20 20 42 45 47 49 4e 3b 0a  eval {.  BEGIN;.
0650: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 6c 69    DELETE FROM li
0660: 6e 6b 3b 0a 20 20 44 45 4c 45 54 45 20 46 52 4f  nk;.  DELETE FRO
0670: 4d 20 6b 65 79 77 6f 72 64 3b 0a 20 20 44 45 4c  M keyword;.  DEL
0680: 45 54 45 20 46 52 4f 4d 20 66 72 61 67 6d 65 6e  ETE FROM fragmen
0690: 74 3b 0a 20 20 44 45 4c 45 54 45 20 46 52 4f 4d  t;.  DELETE FROM
06a0: 20 70 61 67 65 3b 0a 7d 0a 0a 23 20 4c 6f 61 64   page;.}..# Load
06b0: 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
06c0: 72 61 6d 20 6c 69 6e 6b 61 67 65 20 64 61 74 61  ram linkage data
06d0: 0a 23 0a 73 6f 75 72 63 65 20 24 44 4f 43 2f 61  .#.source $DOC/a
06e0: 72 74 2f 73 79 6e 74 61 78 2f 73 79 6e 74 61 78  rt/syntax/syntax
06f0: 5f 6c 69 6e 6b 61 67 65 2e 74 63 6c 0a 0a 0a 23  _linkage.tcl...#
0700: 20 54 68 69 73 20 69 73 20 74 68 65 20 66 69 72   This is the fir
0710: 73 74 2d 70 61 73 73 20 69 6d 70 6c 65 6d 65 6e  st-pass implemen
0720: 74 61 74 69 6f 6e 20 6f 66 20 70 72 6f 63 65 64  tation of proced
0730: 75 72 65 20 74 68 61 74 20 72 65 6e 64 65 72 73  ure that renders
0740: 0a 23 20 68 79 70 65 72 6c 69 6e 6b 73 2e 20 20  .# hyperlinks.  
0750: 44 6f 20 6e 6f 74 20 65 76 65 6e 20 62 6f 74 68  Do not even both
0760: 65 72 20 74 72 79 69 6e 67 20 74 6f 20 64 6f 20  er trying to do 
0770: 61 6e 79 74 68 69 6e 67 20 64 75 72 69 6e 67 20  anything during 
0780: 74 68 65 0a 23 20 66 69 72 73 74 20 70 61 73 73  the.# first pass
0790: 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 63 6f  .  We have to co
07a0: 6c 6c 65 63 74 20 6b 65 79 77 6f 72 64 20 69 6e  llect keyword in
07b0: 66 6f 72 6d 61 74 69 6f 6e 20 62 65 66 6f 72 65  formation before
07c0: 20 74 68 65 0a 23 20 68 79 70 65 72 6c 69 6e 6b   the.# hyperlink
07d0: 73 20 61 72 65 20 6d 65 61 6e 69 6e 67 66 75 6c  s are meaningful
07e0: 2e 20 20 0a 23 0a 70 72 6f 63 20 68 64 5f 72 65  .  .#.proc hd_re
07f0: 73 6f 6c 76 65 20 7b 74 65 78 74 7d 20 7b 0a 20  solve {text} {. 
0800: 20 68 64 5f 70 75 74 73 20 24 74 65 78 74 0a 7d   hd_puts $text.}
0810: 0a 0a 23 20 54 68 69 73 20 69 73 20 74 68 65 20  ..# This is the 
0820: 73 65 63 6f 6e 64 2d 70 61 73 73 20 69 6d 70 6c  second-pass impl
0830: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
0840: 65 20 70 72 6f 63 65 64 75 72 65 20 74 68 61 74  e procedure that
0850: 0a 23 20 72 65 6e 64 65 72 73 20 68 79 70 65 72  .# renders hyper
0860: 6c 69 6e 6b 73 2e 20 20 43 6f 6e 76 65 72 74 20  links.  Convert 
0870: 61 6c 6c 20 68 79 70 65 72 6c 69 6e 6b 73 20 69  all hyperlinks i
0880: 6e 20 24 74 65 78 74 20 69 6e 74 6f 20 0a 23 20  n $text into .# 
0890: 61 70 70 72 6f 70 72 69 61 74 65 20 3c 61 20 68  appropriate <a h
08a0: 72 65 66 3d 22 22 3e 20 6d 61 72 6b 75 70 2e 0a  ref=""> markup..
08b0: 23 0a 23 20 4c 69 6e 6b 73 20 74 6f 20 6b 65 79  #.# Links to key
08c0: 77 6f 72 64 73 20 77 69 74 68 69 6e 20 74 68 65  words within the
08d0: 20 73 61 6d 65 20 6d 61 69 6e 20 66 69 6c 65 20   same main file 
08e0: 61 72 65 20 72 65 73 6f 6c 76 65 64 20 75 73 69  are resolved usi
08f0: 6e 67 0a 23 20 24 3a 3a 6c 6c 69 6e 6b 28 29 20  ng.# $::llink() 
0900: 69 66 20 70 6f 73 73 69 62 6c 65 2e 20 20 41 6c  if possible.  Al
0910: 6c 20 6f 74 68 65 72 20 6c 69 6e 6b 73 20 61 6e  l other links an
0920: 64 20 6c 69 6e 6b 73 20 74 68 61 74 20 63 6f 75  d links that cou
0930: 6c 64 0a 23 20 6e 6f 74 20 62 65 20 72 65 73 6f  ld.# not be reso
0940: 6c 76 65 64 20 75 73 69 6e 67 20 24 3a 3a 6c 6c  lved using $::ll
0950: 69 6e 6b 28 29 20 61 72 65 20 72 65 73 6f 6c 76  ink() are resolv
0960: 65 64 20 75 73 69 6e 67 20 24 3a 3a 67 6c 69 6e  ed using $::glin
0970: 6b 28 29 2e 0a 23 20 0a 70 72 6f 63 20 68 64 5f  k()..# .proc hd_
0980: 72 65 73 6f 6c 76 65 5f 32 6e 64 70 61 73 73 20  resolve_2ndpass 
0990: 7b 74 65 78 74 7d 20 7b 0a 20 20 72 65 67 73 75  {text} {.  regsu
09a0: 62 20 2d 61 6c 6c 20 7b 5c 5b 28 2e 2a 3f 29 5c  b -all {\[(.*?)\
09b0: 5d 7d 20 24 74 65 78 74 20 5c 0a 20 20 20 20 20  ]} $text \.     
09c0: 20 22 5c 31 37 35 3b 20 68 64 5f 72 65 73 6f 6c   "\175; hd_resol
09d0: 76 65 5f 6f 6e 65 20 5c 31 37 33 5c 5c 31 5c 31  ve_one \173\\1\1
09e0: 37 35 3b 20 68 64 5f 70 75 74 73 20 5c 31 37 33  75; hd_puts \173
09f0: 22 20 74 65 78 74 0a 20 20 65 76 61 6c 20 22 68  " text.  eval "h
0a00: 64 5f 70 75 74 73 20 5c 31 37 33 24 74 65 78 74  d_puts \173$text
0a10: 5c 31 37 35 22 0a 7d 0a 70 72 6f 63 20 68 64 5f  \175".}.proc hd_
0a20: 72 65 73 6f 6c 76 65 5f 6f 6e 65 20 7b 78 7d 20  resolve_one {x} 
0a30: 7b 0a 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20  {.  if {[string 
0a40: 69 73 20 69 6e 74 65 67 65 72 20 24 78 5d 7d 20  is integer $x]} 
0a50: 7b 0a 20 20 20 20 68 64 5f 70 75 74 73 20 5c 5b  {.    hd_puts \[
0a60: 24 78 5c 5d 0a 20 20 20 20 72 65 74 75 72 6e 0a  $x\].    return.
0a70: 20 20 7d 0a 20 20 73 65 74 20 78 32 20 5b 73 70    }.  set x2 [sp
0a80: 6c 69 74 20 24 78 20 7c 5d 0a 20 20 73 65 74 20  lit $x |].  set 
0a90: 6b 77 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  kw [string trim 
0aa0: 5b 6c 69 6e 64 65 78 20 24 78 32 20 30 5d 5d 0a  [lindex $x2 0]].
0ab0: 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
0ac0: 78 32 5d 3d 3d 31 7d 20 7b 0a 20 20 20 20 73 65  x2]==1} {.    se
0ad0: 74 20 63 6f 6e 74 65 6e 74 20 24 6b 77 0a 20 20  t content $kw.  
0ae0: 20 20 72 65 67 73 75 62 20 7b 5c 28 5b 5e 29 5d    regsub {\([^)]
0af0: 2a 5c 29 7d 20 24 63 6f 6e 74 65 6e 74 20 7b 7d  *\)} $content {}
0b00: 20 6b 77 0a 20 20 20 20 72 65 67 73 75 62 20 7b   kw.    regsub {
0b10: 3d 2e 2a 7d 20 24 6b 77 20 7b 7d 20 6b 77 0a 20  =.*} $kw {} kw. 
0b20: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65   } else {.    se
0b30: 74 20 63 6f 6e 74 65 6e 74 20 5b 73 74 72 69 6e  t content [strin
0b40: 67 20 74 72 69 6d 20 5b 6c 69 6e 64 65 78 20 24  g trim [lindex $
0b50: 78 32 20 31 5d 5d 0a 20 20 7d 0a 20 20 69 66 20  x2 1]].  }.  if 
0b60: 7b 21 5b 72 65 67 65 78 70 20 7b 5e 68 74 74 70  {![regexp {^http
0b70: 73 3f 3a 7d 20 24 6b 77 5d 7d 20 7b 0a 20 20 20  s?:} $kw]} {.   
0b80: 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b 5e   regsub -all {[^
0b90: 61 2d 7a 41 2d 5a 30 2d 39 5f 2e 23 2f 20 2d 5d  a-zA-Z0-9_.#/ -]
0ba0: 7d 20 24 6b 77 20 7b 7d 20 6b 77 0a 20 20 7d 0a  } $kw {} kw.  }.
0bb0: 20 20 67 6c 6f 62 61 6c 20 68 64 20 6c 6c 69 6e    global hd llin
0bc0: 6b 20 67 6c 69 6e 6b 20 62 61 63 6b 6c 69 6e 6b  k glink backlink
0bd0: 0a 20 20 69 66 20 7b 24 68 64 28 65 6e 61 62 6c  .  if {$hd(enabl
0be0: 65 2d 6d 61 69 6e 29 7d 20 7b 0a 20 20 20 20 73  e-main)} {.    s
0bf0: 65 74 20 66 6e 20 24 68 64 28 66 6e 2d 6d 61 69  et fn $hd(fn-mai
0c00: 6e 29 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65  n).    if {[rege
0c10: 78 70 20 7b 5e 68 74 74 70 73 3f 3a 7d 20 24 6b  xp {^https?:} $k
0c20: 77 5d 7d 20 7b 0a 20 20 20 20 20 20 70 75 74 73  w]} {.      puts
0c30: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 68 64 28   -nonewline $hd(
0c40: 6d 61 69 6e 29 20 5c 0a 20 20 20 20 20 20 20 20  main) \.        
0c50: 22 3c 61 20 68 72 65 66 3d 5c 22 24 6b 77 5c 22  "<a href=\"$kw\"
0c60: 3e 24 63 6f 6e 74 65 6e 74 3c 2f 61 3e 22 0a 20  >$content</a>". 
0c70: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 72 65     } elseif {[re
0c80: 67 65 78 70 20 7b 5e 5b 54 74 5d 69 63 6b 65 74  gexp {^[Tt]icket
0c90: 20 23 28 5c 64 2b 29 24 7d 20 24 6b 77 20 61 6c   #(\d+)$} $kw al
0ca0: 6c 20 74 6b 74 69 64 5d 7d 20 7b 0a 20 20 20 20  l tktid]} {.    
0cb0: 20 20 73 65 74 20 75 72 6c 20 68 74 74 70 3a 2f    set url http:/
0cc0: 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f  /www.sqlite.org/
0cd0: 63 76 73 74 72 61 63 2f 74 6b 74 76 69 65 77 3f  cvstrac/tktview?
0ce0: 74 6e 3d 24 74 6b 74 69 64 0a 20 20 20 20 20 20  tn=$tktid.      
0cf0: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
0d00: 24 68 64 28 6d 61 69 6e 29 20 5c 0a 20 20 20 20  $hd(main) \.    
0d10: 20 20 20 20 22 3c 61 20 68 72 65 66 3d 5c 22 24      "<a href=\"$
0d20: 75 72 6c 5c 22 3e 24 63 6f 6e 74 65 6e 74 3c 2f  url\">$content</
0d30: 61 3e 22 0a 20 20 20 20 7d 20 65 6c 73 65 69 66  a>".    } elseif
0d40: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6c   {[info exists l
0d50: 6c 69 6e 6b 28 24 66 6e 3a 24 6b 77 29 5d 7d 20  link($fn:$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 61 20  ) \.        "<a 
0d90: 68 72 65 66 3d 5c 22 24 68 64 28 72 6f 6f 74 70  href=\"$hd(rootp
0da0: 61 74 68 2d 6d 61 69 6e 29 24 6c 6c 69 6e 6b 28  ath-main)$llink(
0db0: 24 66 6e 3a 24 6b 77 29 5c 22 3e 24 63 6f 6e 74  $fn:$kw)\">$cont
0dc0: 65 6e 74 3c 2f 61 3e 22 0a 20 20 20 20 7d 20 65  ent</a>".    } e
0dd0: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
0de0: 73 74 73 20 67 6c 69 6e 6b 28 24 6b 77 29 5d 7d  sts glink($kw)]}
0df0: 20 7b 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e   {.      puts -n
0e00: 6f 6e 65 77 6c 69 6e 65 20 24 68 64 28 6d 61 69  onewline $hd(mai
0e10: 6e 29 20 5c 0a 20 20 20 20 20 20 20 20 22 3c 61  n) \.        "<a
0e20: 20 68 72 65 66 3d 5c 22 24 68 64 28 72 6f 6f 74   href=\"$hd(root
0e30: 70 61 74 68 2d 6d 61 69 6e 29 24 67 6c 69 6e 6b  path-main)$glink
0e40: 28 24 6b 77 29 5c 22 3e 24 63 6f 6e 74 65 6e 74  ($kw)\">$content
0e50: 3c 2f 61 3e 22 0a 20 20 20 20 7d 20 65 6c 73 65  </a>".    } else
0e60: 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5c 2e 67  if {[regexp {\.g
0e70: 69 66 24 7d 20 24 6b 77 5d 7d 20 7b 0a 20 20 20  if$} $kw]} {.   
0e80: 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69     puts -nonewli
0e90: 6e 65 20 24 68 64 28 6d 61 69 6e 29 20 5c 0a 20  ne $hd(main) \. 
0ea0: 20 20 20 20 20 20 20 22 3c 69 6d 67 20 73 72 63         "<img src
0eb0: 3d 5c 22 24 68 64 28 72 6f 6f 74 70 61 74 68 2d  =\"$hd(rootpath-
0ec0: 6d 61 69 6e 29 69 6d 61 67 65 73 2f 24 6b 77 5c  main)images/$kw\
0ed0: 22 3e 22 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  ">".    } else {
0ee0: 0a 20 20 20 20 20 20 70 75 74 73 20 73 74 64 65  .      puts stde
0ef0: 72 72 20 22 45 52 52 4f 52 3a 20 75 6e 6b 6e 6f  rr "ERROR: unkno
0f00: 77 6e 20 68 79 70 65 72 6c 69 6e 6b 20 74 61 72  wn hyperlink tar
0f10: 67 65 74 3a 20 24 6b 77 22 0a 20 20 20 20 20 20  get: $kw".      
0f20: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
0f30: 24 68 64 28 6d 61 69 6e 29 20 22 3c 66 6f 6e 74  $hd(main) "<font
0f40: 20 63 6f 6c 6f 72 3d 5c 22 72 65 64 5c 22 3e 24   color=\"red\">$
0f50: 63 6f 6e 74 65 6e 74 3c 2f 66 6f 6e 74 3e 22 0a  content</font>".
0f60: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 24 68      }.    if {$h
0f70: 64 28 66 72 61 67 6d 65 6e 74 29 21 3d 22 22 7d  d(fragment)!=""}
0f80: 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   {.      lappend
0f90: 20 62 61 63 6b 6c 69 6e 6b 28 24 6b 77 29 20 24   backlink($kw) $
0fa0: 66 6e 23 24 68 64 28 66 72 61 67 6d 65 6e 74 29  fn#$hd(fragment)
0fb0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  .    } else {.  
0fc0: 20 20 20 20 6c 61 70 70 65 6e 64 20 62 61 63 6b      lappend back
0fd0: 6c 69 6e 6b 28 24 6b 77 29 20 24 66 6e 0a 20 20  link($kw) $fn.  
0fe0: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 20 7b 24 68    }.  }.  if {$h
0ff0: 64 28 65 6e 61 62 6c 65 2d 61 75 78 29 7d 20 7b  d(enable-aux)} {
1000: 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70  .    if {[regexp
1010: 20 7b 5e 68 74 74 70 73 3f 3a 7d 20 24 6b 77 5d   {^https?:} $kw]
1020: 7d 20 7b 0a 20 20 20 20 20 20 70 75 74 73 20 2d  } {.      puts -
1030: 6e 6f 6e 65 77 6c 69 6e 65 20 24 68 64 28 61 75  nonewline $hd(au
1040: 78 29 20 5c 0a 20 20 20 20 20 20 20 20 22 3c 61  x) \.        "<a
1050: 20 68 72 65 66 3d 5c 22 24 6b 77 5c 22 3e 24 63   href=\"$kw\">$c
1060: 6f 6e 74 65 6e 74 3c 2f 61 3e 22 0a 20 20 20 20  ontent</a>".    
1070: 7d 20 65 6c 73 65 69 66 20 7b 5b 72 65 67 65 78  } elseif {[regex
1080: 70 20 7b 5e 5b 54 74 5d 69 63 6b 65 74 20 23 28  p {^[Tt]icket #(
1090: 5c 64 2b 29 24 7d 20 24 6b 77 20 61 6c 6c 20 74  \d+)$} $kw all t
10a0: 6b 74 69 64 5d 7d 20 7b 0a 20 20 20 20 20 20 73  ktid]} {.      s
10b0: 65 74 20 75 72 6c 20 68 74 74 70 3a 2f 2f 77 77  et url http://ww
10c0: 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 63 76 73  w.sqlite.org/cvs
10d0: 74 72 61 63 2f 74 6b 74 76 69 65 77 3f 74 6e 3d  trac/tktview?tn=
10e0: 24 74 6b 74 69 64 0a 20 20 20 20 20 20 70 75 74  $tktid.      put
10f0: 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 68 64  s -nonewline $hd
1100: 28 61 75 78 29 20 5c 0a 20 20 20 20 20 20 20 20  (aux) \.        
1110: 22 3c 61 20 68 72 65 66 3d 5c 22 24 75 72 6c 5c  "<a href=\"$url\
1120: 22 3e 24 63 6f 6e 74 65 6e 74 3c 2f 61 3e 22 0a  ">$content</a>".
1130: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69      } elseif {[i
1140: 6e 66 6f 20 65 78 69 73 74 73 20 67 6c 69 6e 6b  nfo exists glink
1150: 28 24 6b 77 29 5d 7d 20 7b 0a 20 20 20 20 20 20  ($kw)]} {.      
1160: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
1170: 24 68 64 28 61 75 78 29 20 5c 0a 20 20 20 20 20  $hd(aux) \.     
1180: 20 20 20 22 3c 61 20 68 72 65 66 3d 5c 22 24 68     "<a href=\"$h
1190: 64 28 72 6f 6f 74 70 61 74 68 2d 61 75 78 29 24  d(rootpath-aux)$
11a0: 67 6c 69 6e 6b 28 24 6b 77 29 5c 22 3e 24 63 6f  glink($kw)\">$co
11b0: 6e 74 65 6e 74 3c 2f 61 3e 22 0a 20 20 20 20 7d  ntent</a>".    }
11c0: 20 65 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70   elseif {[regexp
11d0: 20 7b 5c 2e 67 69 66 24 7d 20 24 6b 77 5d 7d 20   {\.gif$} $kw]} 
11e0: 7b 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f  {.      puts -no
11f0: 6e 65 77 6c 69 6e 65 20 24 68 64 28 6d 61 69 6e  newline $hd(main
1200: 29 20 5c 0a 20 20 20 20 20 20 20 20 22 3c 69 6d  ) \.        "<im
1210: 67 20 73 72 63 3d 5c 22 24 68 64 28 72 6f 6f 74  g src=\"$hd(root
1220: 70 61 74 68 2d 61 75 78 29 69 6d 61 67 65 73 2f  path-aux)images/
1230: 24 6b 77 5c 22 3e 22 0a 20 20 20 20 7d 20 65 6c  $kw\">".    } el
1240: 73 65 20 7b 0a 20 20 20 20 20 20 70 75 74 73 20  se {.      puts 
1250: 73 74 64 65 72 72 20 22 45 52 52 4f 52 3a 20 75  stderr "ERROR: u
1260: 6e 6b 6e 6f 77 6e 20 68 79 70 65 72 6c 69 6e 6b  nknown hyperlink
1270: 20 74 61 72 67 65 74 3a 20 24 6b 77 22 0a 20 20   target: $kw".  
1280: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
1290: 69 6e 65 20 24 68 64 28 61 75 78 29 20 22 3c 66  ine $hd(aux) "<f
12a0: 6f 6e 74 20 63 6f 6c 6f 72 3d 5c 22 72 65 64 5c  ont color=\"red\
12b0: 22 3e 24 63 6f 6e 74 65 6e 74 3c 2f 66 6f 6e 74  ">$content</font
12c0: 3e 22 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20  >".    }.    if 
12d0: 7b 24 68 64 28 61 75 78 2d 66 72 61 67 6d 65 6e  {$hd(aux-fragmen
12e0: 74 29 21 3d 22 22 7d 20 7b 0a 20 20 20 20 20 20  t)!=""} {.      
12f0: 6c 61 70 70 65 6e 64 20 62 61 63 6b 6c 69 6e 6b  lappend backlink
1300: 28 24 6b 77 29 20 24 68 64 28 66 6e 2d 61 75 78  ($kw) $hd(fn-aux
1310: 29 23 24 68 64 28 61 75 78 2d 66 72 61 67 6d 65  )#$hd(aux-fragme
1320: 6e 74 29 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  nt).    } else {
1330: 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 62  .      lappend b
1340: 61 63 6b 6c 69 6e 6b 28 24 6b 77 29 20 24 68 64  acklink($kw) $hd
1350: 28 66 6e 2d 61 75 78 29 0a 20 20 20 20 7d 0a 20  (fn-aux).    }. 
1360: 20 7d 0a 7d 0a 0a 0a 0a 23 20 52 65 63 6f 72 64   }.}....# Record
1370: 20 74 68 65 20 66 61 63 74 20 74 68 61 74 20 61   the fact that a
1380: 6c 6c 20 6b 65 79 77 6f 72 64 73 20 67 69 76 65  ll keywords give
1390: 6e 20 69 6e 20 74 68 65 20 61 72 67 75 6d 65 6e  n in the argumen
13a0: 74 20 6c 69 73 74 20 73 68 6f 75 6c 64 0a 23 20  t list should.# 
13b0: 63 61 75 73 65 20 61 20 6a 75 6d 70 20 74 6f 20  cause a jump to 
13c0: 74 68 65 20 63 75 72 72 65 6e 74 20 6c 6f 63 61  the current loca
13d0: 74 69 6f 6e 20 69 6e 20 74 68 65 20 63 75 72 72  tion in the curr
13e0: 65 6e 74 20 66 69 6c 65 2e 0a 23 0a 23 20 49 66  ent file..#.# If
13f0: 20 6f 6e 6c 79 20 74 68 65 20 6d 61 69 6e 20 6f   only the main o
1400: 75 74 70 75 74 20 66 69 6c 65 20 69 73 20 6f 70  utput file is op
1410: 65 6e 2c 20 74 68 65 6e 20 61 6c 6c 20 72 65 66  en, then all ref
1420: 65 72 65 6e 63 65 73 20 74 6f 20 74 68 65 0a 23  erences to the.#
1430: 20 6b 65 79 77 6f 72 64 20 6a 75 6d 70 20 74 6f   keyword jump to
1440: 20 74 68 65 20 6d 61 69 6e 20 6f 75 74 70 75 74   the main output
1450: 20 66 69 6c 65 2e 20 20 49 66 20 62 6f 74 68 20   file.  If both 
1460: 6d 61 69 6e 20 61 6e 64 20 61 75 78 20 61 72 65  main and aux are
1470: 0a 23 20 6f 70 65 6e 20 74 68 65 6e 20 72 65 66  .# open then ref
1480: 65 72 65 6e 63 65 73 20 66 72 6f 6d 20 77 69 74  erences from wit
1490: 68 69 6e 20 74 68 65 20 6d 61 69 6e 20 66 69 6c  hin the main fil
14a0: 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 6d 61  e jump to the ma
14b0: 69 6e 20 66 69 6c 65 0a 23 20 61 6e 64 20 61 6c  in file.# and al
14c0: 6c 20 6f 74 68 65 72 20 72 65 66 65 72 65 6e 63  l other referenc
14d0: 65 73 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61  es jump to the a
14e0: 75 78 69 6c 69 61 72 79 20 66 69 6c 65 2e 0a 23  uxiliary file..#
14f0: 0a 23 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  .# This procedur
1500: 65 20 69 73 20 6f 6e 6c 79 20 61 63 74 69 76 65  e is only active
1510: 20 64 75 72 69 6e 67 20 74 68 65 20 66 69 72 73   during the firs
1520: 74 20 70 61 73 73 20 77 68 65 6e 20 77 65 20 61  t pass when we a
1530: 72 65 0a 23 20 63 6f 6c 6c 65 63 74 69 6e 67 20  re.# collecting 
1540: 68 79 70 65 72 6c 69 6e 6b 20 69 6e 66 6f 72 6d  hyperlink inform
1550: 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 70 72 6f  ation.  This pro
1560: 63 65 64 75 72 65 20 69 73 20 72 65 64 65 66 69  cedure is redefi
1570: 6e 65 64 20 74 6f 0a 23 20 62 65 20 61 20 6e 6f  ned to.# be a no
1580: 2d 6f 70 20 62 65 66 6f 72 65 20 74 68 65 20 73  -op before the s
1590: 74 61 72 74 20 6f 66 20 74 68 65 20 73 65 63 6f  tart of the seco
15a0: 6e 64 20 70 61 73 73 2e 0a 23 0a 70 72 6f 63 20  nd pass..#.proc 
15b0: 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 61 72 67  hd_keywords {arg
15c0: 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 67 6c  s} {.  global gl
15d0: 69 6e 6b 20 6c 6c 69 6e 6b 20 68 64 0a 20 20 69  ink llink hd.  i
15e0: 66 20 7b 24 68 64 28 66 72 61 67 6d 65 6e 74 29  f {$hd(fragment)
15f0: 3d 3d 22 22 7d 20 7b 0a 20 20 20 20 73 65 74 20  ==""} {.    set 
1600: 6c 75 72 6c 20 24 68 64 28 66 6e 2d 6d 61 69 6e  lurl $hd(fn-main
1610: 29 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  ).  } else {.   
1620: 20 73 65 74 20 6c 75 72 6c 20 22 23 24 68 64 28   set lurl "#$hd(
1630: 66 72 61 67 6d 65 6e 74 29 22 0a 20 20 7d 0a 20  fragment)".  }. 
1640: 20 73 65 74 20 66 6e 20 24 68 64 28 66 6e 2d 6d   set fn $hd(fn-m
1650: 61 69 6e 29 0a 20 20 69 66 20 7b 5b 69 6e 66 6f  ain).  if {[info
1660: 20 65 78 69 73 74 73 20 68 64 28 61 75 78 29 5d   exists hd(aux)]
1670: 7d 20 7b 0a 20 20 20 20 73 65 74 20 67 75 72 6c  } {.    set gurl
1680: 20 24 68 64 28 66 6e 2d 61 75 78 29 0a 20 20 20   $hd(fn-aux).   
1690: 20 69 66 20 7b 24 68 64 28 61 75 78 2d 66 72 61   if {$hd(aux-fra
16a0: 67 6d 65 6e 74 29 21 3d 22 22 7d 20 7b 0a 20 20  gment)!=""} {.  
16b0: 20 20 20 20 61 70 70 65 6e 64 20 67 75 72 6c 20      append gurl 
16c0: 22 23 24 68 64 28 61 75 78 2d 66 72 61 67 6d 65  "#$hd(aux-fragme
16d0: 6e 74 29 22 0a 20 20 20 20 7d 0a 20 20 7d 20 65  nt)".    }.  } e
16e0: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 67 75  lse {.    set gu
16f0: 72 6c 20 7b 7d 0a 20 20 20 20 69 66 20 7b 24 68  rl {}.    if {$h
1700: 64 28 66 72 61 67 6d 65 6e 74 29 21 3d 22 22 7d  d(fragment)!=""}
1710: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 6c 75 72   {.      set lur
1720: 6c 20 24 68 64 28 66 6e 2d 6d 61 69 6e 29 23 24  l $hd(fn-main)#$
1730: 68 64 28 66 72 61 67 6d 65 6e 74 29 0a 20 20 20  hd(fragment).   
1740: 20 7d 0a 20 20 7d 0a 20 20 66 6f 72 65 61 63 68   }.  }.  foreach
1750: 20 61 20 24 61 72 67 73 20 7b 0a 20 20 20 20 69   a $args {.    i
1760: 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 5c 2a 7d  f {[regexp {^\*}
1770: 20 24 61 5d 7d 20 7b 0a 20 20 20 20 20 20 73 65   $a]} {.      se
1780: 74 20 76 69 73 69 62 6c 65 20 30 0a 20 20 20 20  t visible 0.    
1790: 20 20 73 65 74 20 61 20 5b 73 74 72 69 6e 67 20    set a [string 
17a0: 72 61 6e 67 65 20 24 61 20 31 20 65 6e 64 5d 0a  range $a 1 end].
17b0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
17c0: 20 20 20 73 65 74 20 76 69 73 69 62 6c 65 20 31     set visible 1
17d0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 67 73 75  .    }.    regsu
17e0: 62 20 2d 61 6c 6c 20 7b 5b 5e 61 2d 7a 41 2d 5a  b -all {[^a-zA-Z
17f0: 30 2d 39 5f 2e 23 2f 20 2d 5d 7d 20 24 61 20 7b  0-9_.#/ -]} $a {
1800: 7d 20 6b 77 0a 20 20 20 20 69 66 20 7b 5b 69 6e  } kw.    if {[in
1810: 66 6f 20 65 78 69 73 74 73 20 67 6c 69 6e 6b 28  fo exists glink(
1820: 24 6b 77 29 5d 7d 20 7b 0a 20 20 20 20 20 20 69  $kw)]} {.      i
1830: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists 
1840: 68 64 28 61 75 78 29 5d 20 26 26 20 24 67 6c 69  hd(aux)] && $gli
1850: 6e 6b 28 24 6b 77 29 3d 3d 24 68 64 28 66 6e 2d  nk($kw)==$hd(fn-
1860: 61 75 78 29 7d 20 7b 0a 20 20 20 20 20 20 20 20  aux)} {.        
1870: 64 62 20 65 76 61 6c 20 7b 44 45 4c 45 54 45 20  db eval {DELETE 
1880: 46 52 4f 4d 20 6b 65 79 77 6f 72 64 20 57 48 45  FROM keyword WHE
1890: 52 45 20 6b 77 3d 24 6b 77 7d 0a 20 20 20 20 20  RE kw=$kw}.     
18a0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
18b0: 20 20 70 75 74 73 20 73 74 64 65 72 72 20 22 57    puts stderr "W
18c0: 41 52 4e 49 4e 47 3a 20 64 75 70 6c 69 63 61 74  ARNING: duplicat
18d0: 65 20 6b 65 79 77 6f 72 64 20 5c 22 24 6b 77 5c  e keyword \"$kw\
18e0: 22 20 2d 20 24 67 6c 69 6e 6b 28 24 6b 77 29 20  " - $glink($kw) 
18f0: 61 6e 64 20 24 6c 75 72 6c 22 0a 20 20 20 20 20  and $lurl".     
1900: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20   }.    }.    if 
1910: 7b 24 67 75 72 6c 3d 3d 22 22 7d 20 7b 0a 20 20  {$gurl==""} {.  
1920: 20 20 20 20 73 65 74 20 67 6c 69 6e 6b 28 24 6b      set glink($k
1930: 77 29 20 24 6c 75 72 6c 0a 20 20 20 20 20 20 64  w) $lurl.      d
1940: 62 20 65 76 61 6c 20 7b 49 4e 53 45 52 54 20 49  b eval {INSERT I
1950: 4e 54 4f 20 6b 65 79 77 6f 72 64 28 6b 77 2c 66  NTO keyword(kw,f
1960: 72 61 67 6d 65 6e 74 2c 69 6e 64 65 78 4b 77 29  ragment,indexKw)
1970: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1980: 20 20 56 41 4c 55 45 53 28 24 61 2c 24 6c 75 72    VALUES($a,$lur
1990: 6c 2c 24 76 69 73 69 62 6c 65 29 7d 0a 20 20 20  l,$visible)}.   
19a0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
19b0: 73 65 74 20 67 6c 69 6e 6b 28 24 6b 77 29 20 24  set glink($kw) $
19c0: 67 75 72 6c 0a 20 20 20 20 20 20 73 65 74 20 6c  gurl.      set l
19d0: 6c 69 6e 6b 28 24 66 6e 3a 24 6b 77 29 20 24 6c  link($fn:$kw) $l
19e0: 75 72 6c 0a 20 20 20 20 20 20 64 62 20 65 76 61  url.      db eva
19f0: 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 6b  l {INSERT INTO k
1a00: 65 79 77 6f 72 64 28 6b 77 2c 66 72 61 67 6d 65  eyword(kw,fragme
1a10: 6e 74 2c 69 6e 64 65 78 4b 77 29 20 0a 20 20 20  nt,indexKw) .   
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 56 41 4c               VAL
1a30: 55 45 53 28 24 61 2c 24 67 75 72 6c 2c 24 76 69  UES($a,$gurl,$vi
1a40: 73 69 62 6c 65 29 7d 0a 20 20 20 20 7d 0a 20 20  sible)}.    }.  
1a50: 7d 0a 7d 0a 0a 23 20 53 74 61 72 74 20 61 20 6e  }.}..# Start a n
1a60: 65 77 20 66 72 61 67 6d 65 6e 74 20 69 6e 20 74  ew fragment in t
1a70: 68 65 20 6d 61 69 6e 20 66 69 6c 65 2e 20 20 47  he main file.  G
1a80: 69 76 65 20 74 68 65 20 6e 65 77 20 66 72 61 67  ive the new frag
1a90: 6d 65 6e 74 20 74 68 65 0a 23 20 69 6e 64 69 63  ment the.# indic
1aa0: 61 74 65 64 20 6e 61 6d 65 2e 20 20 41 6e 79 20  ated name.  Any 
1ab0: 6b 65 79 77 6f 72 64 73 20 64 65 66 69 6e 65 64  keywords defined
1ac0: 20 61 66 74 65 72 20 74 68 69 73 20 70 6f 69 6e   after this poin
1ad0: 74 20 77 69 6c 6c 20 72 65 66 65 72 0a 23 20 74  t will refer.# t
1ae0: 6f 20 74 68 65 20 66 72 61 67 6d 65 6e 74 2c 20  o the fragment, 
1af0: 6e 6f 74 20 74 6f 20 74 68 65 20 62 65 67 69 6e  not to the begin
1b00: 6e 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65  ning of the file
1b10: 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 66 72 61 67  ..#.proc hd_frag
1b20: 6d 65 6e 74 20 7b 6e 61 6d 65 20 61 72 67 73 7d  ment {name args}
1b30: 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68 64 0a 20   {.  global hd. 
1b40: 20 73 65 74 20 68 64 28 66 72 61 67 6d 65 6e 74   set hd(fragment
1b50: 29 20 24 6e 61 6d 65 0a 20 20 70 75 74 73 20 24  ) $name.  puts $
1b60: 68 64 28 6d 61 69 6e 29 20 22 3c 61 20 6e 61 6d  hd(main) "<a nam
1b70: 65 3d 5c 22 24 6e 61 6d 65 5c 22 3e 3c 2f 61 3e  e=\"$name\"></a>
1b80: 22 0a 20 20 69 66 20 7b 24 68 64 28 65 6e 61 62  ".  if {$hd(enab
1b90: 6c 65 2d 61 75 78 29 7d 20 7b 0a 20 20 20 20 70  le-aux)} {.    p
1ba0: 75 74 73 20 24 68 64 28 61 75 78 29 20 22 3c 61  uts $hd(aux) "<a
1bb0: 20 6e 61 6d 65 3d 5c 22 24 6e 61 6d 65 5c 22 3e   name=\"$name\">
1bc0: 3c 2f 61 3e 22 0a 20 20 20 20 73 65 74 20 68 64  </a>".    set hd
1bd0: 28 61 75 78 2d 66 72 61 67 6d 65 6e 74 29 20 24  (aux-fragment) $
1be0: 6e 61 6d 65 0a 20 20 7d 0a 20 20 65 76 61 6c 20  name.  }.  eval 
1bf0: 68 64 5f 6b 65 79 77 6f 72 64 73 20 24 61 72 67  hd_keywords $arg
1c00: 73 0a 7d 0a 0a 23 20 57 72 69 74 65 20 72 61 77  s.}..# Write raw
1c10: 20 6f 75 74 70 75 74 20 74 6f 20 62 6f 74 68 20   output to both 
1c20: 74 68 65 20 6d 61 69 6e 20 66 69 6c 65 20 61 6e  the main file an
1c30: 64 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 2e  d the auxiliary.
1c40: 20 20 4f 6e 6c 79 20 77 72 69 74 65 0a 23 20 74    Only write.# t
1c50: 6f 20 66 69 6c 65 73 20 74 68 61 74 20 61 72 65  o files that are
1c60: 20 65 6e 61 62 6c 65 64 2e 0a 23 0a 70 72 6f 63   enabled..#.proc
1c70: 20 68 64 5f 70 75 74 73 20 7b 74 65 78 74 7d 20   hd_puts {text} 
1c80: 7b 0a 20 20 67 6c 6f 62 61 6c 20 68 64 0a 20 20  {.  global hd.  
1c90: 69 66 20 7b 24 68 64 28 65 6e 61 62 6c 65 2d 6d  if {$hd(enable-m
1ca0: 61 69 6e 29 7d 20 7b 0a 20 20 20 20 73 65 74 20  ain)} {.    set 
1cb0: 66 6e 20 24 68 64 28 66 6e 2d 6d 61 69 6e 29 0a  fn $hd(fn-main).
1cc0: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
1cd0: 69 6e 65 20 24 68 64 28 6d 61 69 6e 29 20 24 74  ine $hd(main) $t
1ce0: 65 78 74 0a 20 20 7d 0a 20 20 69 66 20 7b 24 68  ext.  }.  if {$h
1cf0: 64 28 65 6e 61 62 6c 65 2d 61 75 78 29 7d 20 7b  d(enable-aux)} {
1d00: 0a 20 20 20 20 73 65 74 20 66 6e 20 24 68 64 28  .    set fn $hd(
1d10: 66 6e 2d 61 75 78 29 0a 20 20 20 20 70 75 74 73  fn-aux).    puts
1d20: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 68 64 28   -nonewline $hd(
1d30: 61 75 78 29 20 24 74 65 78 74 0a 20 20 7d 0a 20  aux) $text.  }. 
1d40: 20 0a 20 20 23 20 4f 75 72 20 70 61 67 65 6c 69   .  # Our pageli
1d50: 6e 6b 20 70 72 6f 63 65 73 73 69 6e 67 20 62 61  nk processing ba
1d60: 73 65 64 20 6f 66 66 20 74 68 65 20 67 6c 6f 62  sed off the glob
1d70: 61 6c 73 0a 20 20 23 20 6c 6c 69 6e 6b 2c 20 67  als.  # llink, g
1d80: 6c 69 6e 6b 2c 20 61 6e 64 20 62 61 63 6b 6c 69  link, and backli
1d90: 6e 6b 20 67 65 6e 65 72 61 74 65 64 20 64 75 72  nk generated dur
1da0: 69 6e 67 20 68 64 5f 72 65 73 6f 6c 76 65 0a 20  ing hd_resolve. 
1db0: 20 23 20 70 72 6f 63 65 73 73 69 6e 67 20 64 6f   # processing do
1dc0: 65 73 6e 27 74 20 63 61 74 63 68 20 6c 69 6e 6b  esn't catch link
1dd0: 73 20 6f 75 74 70 75 74 74 65 64 20 64 69 72 65  s outputted dire
1de0: 63 74 6c 79 0a 20 20 23 20 77 69 74 68 20 68 64  ctly.  # with hd
1df0: 5f 70 75 74 73 2e 20 20 54 68 69 73 20 63 6f 64  _puts.  This cod
1e00: 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 61 64  e attempts to ad
1e10: 64 20 74 68 6f 73 65 20 6c 69 6e 6b 73 20 74 6f  d those links to
1e20: 0a 20 20 23 20 6f 75 72 20 70 61 67 65 6c 69 6e  .  # our pagelin
1e30: 6b 20 61 72 72 61 79 2e 0a 20 20 67 6c 6f 62 61  k array..  globa
1e40: 6c 20 70 61 67 65 6c 69 6e 6b 0a 20 20 73 65 74  l pagelink.  set
1e50: 20 72 65 66 73 20 5b 72 65 67 65 78 70 20 2d 61   refs [regexp -a
1e60: 6c 6c 20 2d 69 6e 6c 69 6e 65 20 7b 68 72 65 66  ll -inline {href
1e70: 3d 5c 22 28 2e 2a 3f 29 5c 22 7d 20 24 74 65 78  =\"(.*?)\"} $tex
1e80: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 7b 68 72  t].  foreach {hr
1e90: 65 66 20 72 65 66 7d 20 24 72 65 66 73 20 7b 0a  ef ref} $refs {.
1ea0: 20 20 20 20 72 65 67 73 75 62 20 7b 23 2e 2a 7d      regsub {#.*}
1eb0: 20 24 72 65 66 20 7b 7d 20 72 65 66 32 0a 20 20   $ref {} ref2.  
1ec0: 20 20 72 65 67 73 75 62 20 7b 68 74 74 70 3a 5c    regsub {http:\
1ed0: 2f 5c 2f 77 77 77 5c 2e 73 71 6c 69 74 65 5c 2e  /\/www\.sqlite\.
1ee0: 6f 72 67 5c 2f 7d 20 24 72 65 66 32 20 7b 7d 20  org\/} $ref2 {} 
1ef0: 72 65 66 33 0a 20 20 20 20 72 65 67 73 75 62 20  ref3.    regsub 
1f00: 7b 5c 2e 5c 2e 5c 2f 7d 20 24 72 65 66 33 20 7b  {\.\.\/} $ref3 {
1f10: 7d 20 72 65 66 34 0a 20 20 20 20 69 66 20 7b 5b  } ref4.    if {[
1f20: 72 65 67 65 78 70 20 7b 5e 68 74 74 70 7d 20 24  regexp {^http} $
1f30: 72 65 66 34 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  ref4]} continue.
1f40: 20 20 20 20 69 66 20 7b 24 72 65 66 34 3d 3d 22      if {$ref4=="
1f50: 22 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20  "} continue.    
1f60: 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5c 2e 68  if {[regexp {\.h
1f70: 74 6d 6c 24 7d 20 24 72 65 66 34 5d 7d 20 7b 0a  tml$} $ref4]} {.
1f80: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 61        lappend pa
1f90: 67 65 6c 69 6e 6b 28 24 72 65 66 34 29 20 24 66  gelink($ref4) $f
1fa0: 6e 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 70 72  n.    }.  }.}.pr
1fb0: 6f 63 20 68 64 5f 70 75 74 73 6e 6c 20 7b 74 65  oc hd_putsnl {te
1fc0: 78 74 7d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20  xt} {.  hd_puts 
1fd0: 24 74 65 78 74 5c 6e 0a 7d 0a 0a 23 20 45 6e 61  $text\n.}..# Ena
1fe0: 62 6c 65 20 6f 72 20 64 69 73 61 62 6c 65 20 74  ble or disable t
1ff0: 68 65 20 6d 61 69 6e 20 6f 75 74 70 75 74 20 66  he main output f
2000: 69 6c 65 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 65  ile..#.proc hd_e
2010: 6e 61 62 6c 65 5f 6d 61 69 6e 20 7b 62 6f 6f 6c  nable_main {bool
2020: 65 61 6e 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  ean} {.  global 
2030: 68 64 0a 20 20 73 65 74 20 68 64 28 65 6e 61 62  hd.  set hd(enab
2040: 6c 65 2d 6d 61 69 6e 29 20 24 62 6f 6f 6c 65 61  le-main) $boolea
2050: 6e 0a 7d 0a 0a 23 20 45 6e 61 62 6c 65 20 6f 72  n.}..# Enable or
2060: 20 64 69 73 61 62 6c 65 20 74 68 65 20 61 75 78   disable the aux
2070: 69 6c 69 61 72 79 20 6f 75 74 70 75 74 20 66 69  iliary output fi
2080: 6c 65 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 65 6e  le..#.proc hd_en
2090: 61 62 6c 65 5f 61 75 78 20 7b 62 6f 6f 6c 65 61  able_aux {boolea
20a0: 6e 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68 64  n} {.  global hd
20b0: 0a 20 20 73 65 74 20 68 64 28 65 6e 61 62 6c 65  .  set hd(enable
20c0: 2d 61 75 78 29 20 24 62 6f 6f 6c 65 61 6e 0a 7d  -aux) $boolean.}
20d0: 0a 73 65 74 20 68 64 28 65 6e 61 62 6c 65 2d 61  .set hd(enable-a
20e0: 75 78 29 20 30 0a 0a 23 20 4f 70 65 6e 20 74 68  ux) 0..# Open th
20f0: 65 20 6d 61 69 6e 20 6f 75 74 70 75 74 20 66 69  e main output fi
2100: 6c 65 2e 20 20 24 66 69 6c 65 6e 61 6d 65 20 69  le.  $filename i
2110: 73 20 72 65 6c 61 74 69 76 65 20 74 6f 20 24 3a  s relative to $:
2120: 3a 44 45 53 54 2e 20 20 0a 23 0a 70 72 6f 63 20  :DEST.  .#.proc 
2130: 68 64 5f 6f 70 65 6e 5f 6d 61 69 6e 20 7b 66 69  hd_open_main {fi
2140: 6c 65 6e 61 6d 65 7d 20 7b 0a 20 20 67 6c 6f 62  lename} {.  glob
2150: 61 6c 20 68 64 20 44 45 53 54 0a 20 20 68 64 5f  al hd DEST.  hd_
2160: 63 6c 6f 73 65 5f 6d 61 69 6e 0a 20 20 73 65 74  close_main.  set
2170: 20 68 64 28 66 6e 2d 6d 61 69 6e 29 20 24 66 69   hd(fn-main) $fi
2180: 6c 65 6e 61 6d 65 0a 20 20 73 65 74 20 68 64 28  lename.  set hd(
2190: 72 6f 6f 74 70 61 74 68 2d 6d 61 69 6e 29 20 5b  rootpath-main) [
21a0: 68 64 5f 72 6f 6f 74 70 61 74 68 20 24 66 69 6c  hd_rootpath $fil
21b0: 65 6e 61 6d 65 5d 0a 20 20 73 65 74 20 68 64 28  ename].  set hd(
21c0: 6d 61 69 6e 29 20 5b 6f 70 65 6e 20 24 44 45 53  main) [open $DES
21d0: 54 2f 24 66 69 6c 65 6e 61 6d 65 20 77 5d 0a 20  T/$filename w]. 
21e0: 20 73 65 74 20 68 64 28 65 6e 61 62 6c 65 2d 6d   set hd(enable-m
21f0: 61 69 6e 29 20 31 0a 20 20 73 65 74 20 68 64 28  ain) 1.  set hd(
2200: 65 6e 61 62 6c 65 2d 61 75 78 29 20 30 0a 20 20  enable-aux) 0.  
2210: 73 65 74 20 68 64 28 66 72 61 67 6d 65 6e 74 29  set hd(fragment)
2220: 20 7b 7d 0a 20 20 67 6c 6f 62 61 6c 20 70 61 67   {}.  global pag
2230: 65 6c 69 6e 6b 0a 20 20 6c 61 70 70 65 6e 64 20  elink.  lappend 
2240: 70 61 67 65 6c 69 6e 6b 28 24 66 69 6c 65 6e 61  pagelink($filena
2250: 6d 65 29 20 24 66 69 6c 65 6e 61 6d 65 0a 7d 0a  me) $filename.}.
2260: 0a 23 20 49 66 20 24 66 69 6c 65 6e 61 6d 65 20  .# If $filename 
2270: 69 73 20 61 20 70 61 74 68 20 66 72 6f 6d 20 24  is a path from $
2280: 3a 3a 44 45 53 54 20 74 6f 20 61 20 66 69 6c 65  ::DEST to a file
2290: 2c 20 72 65 74 75 72 6e 20 61 20 70 61 74 68 0a  , return a path.
22a0: 23 20 66 72 6f 6d 20 74 68 65 20 64 69 72 65 63  # from the direc
22b0: 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20  tory containing 
22c0: 24 66 69 6c 65 6e 61 6d 65 20 62 61 63 6b 20 74  $filename back t
22d0: 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  o the directory 
22e0: 24 3a 3a 44 45 53 54 2e 0a 23 0a 70 72 6f 63 20  $::DEST..#.proc 
22f0: 68 64 5f 72 6f 6f 74 70 61 74 68 20 7b 66 69 6c  hd_rootpath {fil
2300: 65 6e 61 6d 65 7d 20 7b 0a 20 20 73 65 74 20 75  ename} {.  set u
2310: 70 20 7b 7d 0a 20 20 73 65 74 20 6e 20 5b 6c 6c  p {}.  set n [ll
2320: 65 6e 67 74 68 20 5b 73 70 6c 69 74 20 24 66 69  ength [split $fi
2330: 6c 65 6e 61 6d 65 20 2f 5d 5d 0a 20 20 69 66 20  lename /]].  if 
2340: 7b 24 6e 3c 3d 31 7d 20 7b 0a 20 20 20 20 72 65  {$n<=1} {.    re
2350: 74 75 72 6e 20 7b 7d 0a 20 20 7d 20 65 6c 73 65  turn {}.  } else
2360: 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 73   {.    return [s
2370: 74 72 69 6e 67 20 72 65 70 65 61 74 20 2e 2e 2f  tring repeat ../
2380: 20 5b 65 78 70 72 20 7b 24 6e 2d 31 7d 5d 5d 0a   [expr {$n-1}]].
2390: 20 20 7d 0a 7d 0a 0a 23 20 43 6c 6f 73 65 20 74    }.}..# Close t
23a0: 68 65 20 6d 61 69 6e 20 6f 75 74 70 75 74 20 66  he main output f
23b0: 69 6c 65 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 63  ile..#.proc hd_c
23c0: 6c 6f 73 65 5f 6d 61 69 6e 20 7b 7d 20 7b 0a 20  lose_main {} {. 
23d0: 20 67 6c 6f 62 61 6c 20 68 64 0a 20 20 68 64 5f   global hd.  hd_
23e0: 63 6c 6f 73 65 5f 61 75 78 0a 20 20 69 66 20 7b  close_aux.  if {
23f0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 68 64 28  [info exists hd(
2400: 6d 61 69 6e 29 5d 7d 20 7b 0a 20 20 20 20 70 75  main)]} {.    pu
2410: 74 73 20 24 68 64 28 6d 61 69 6e 29 20 24 68 64  ts $hd(main) $hd
2420: 28 66 6f 6f 74 65 72 29 0a 20 20 20 20 63 6c 6f  (footer).    clo
2430: 73 65 20 24 68 64 28 6d 61 69 6e 29 0a 20 20 20  se $hd(main).   
2440: 20 75 6e 73 65 74 20 68 64 28 6d 61 69 6e 29 0a   unset hd(main).
2450: 20 20 7d 0a 7d 0a 0a 23 20 4f 70 65 6e 20 74 68    }.}..# Open th
2460: 65 20 61 75 78 69 6c 69 61 72 79 20 6f 75 74 70  e auxiliary outp
2470: 75 74 20 66 69 6c 65 2e 0a 23 0a 23 20 4d 6f 73  ut file..#.# Mos
2480: 74 20 64 6f 63 75 6d 65 6e 74 73 20 68 61 76 65  t documents have
2490: 20 6f 6e 6c 79 20 61 20 6d 61 69 6e 20 66 69 6c   only a main fil
24a0: 65 20 61 6e 64 20 6e 6f 20 61 75 78 69 6c 69 61  e and no auxilia
24b0: 72 79 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 6f  ry.  However, so
24c0: 6d 65 0a 23 20 6c 61 72 67 65 20 64 6f 63 75 6d  me.# large docum
24d0: 65 6e 74 73 20 61 72 65 20 62 72 6f 6b 65 6e 20  ents are broken 
24e0: 75 70 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72 20  up into smaller 
24f0: 70 69 65 63 65 73 20 77 68 65 72 65 20 65 61 63  pieces where eac
2500: 68 20 73 6d 61 6c 6c 65 72 20 70 69 65 63 65 0a  h smaller piece.
2510: 23 20 69 73 20 61 6e 20 61 75 78 69 6c 69 61 72  # is an auxiliar
2520: 79 20 66 69 6c 65 2e 20 20 54 68 65 72 65 20 77  y file.  There w
2530: 69 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 62 65  ill typically be
2540: 20 65 69 74 68 65 72 20 6d 61 6e 79 20 61 75 78   either many aux
2550: 69 6c 69 61 72 79 20 66 69 6c 65 73 0a 23 20 6f  iliary files.# o
2560: 72 20 6e 6f 20 61 75 78 69 6c 69 61 72 79 20 66  r no auxiliary f
2570: 69 6c 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  iles associated 
2580: 77 69 74 68 20 65 61 63 68 20 6d 61 69 6e 20 66  with each main f
2590: 69 6c 65 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 6f  ile..#.proc hd_o
25a0: 70 65 6e 5f 61 75 78 20 7b 66 69 6c 65 6e 61 6d  pen_aux {filenam
25b0: 65 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68 64  e} {.  global hd
25c0: 20 44 45 53 54 0a 20 20 68 64 5f 63 6c 6f 73 65   DEST.  hd_close
25d0: 5f 61 75 78 0a 20 20 73 65 74 20 68 64 28 66 6e  _aux.  set hd(fn
25e0: 2d 61 75 78 29 20 24 66 69 6c 65 6e 61 6d 65 0a  -aux) $filename.
25f0: 20 20 73 65 74 20 68 64 28 72 6f 6f 74 70 61 74    set hd(rootpat
2600: 68 2d 61 75 78 29 20 5b 68 64 5f 72 6f 6f 74 70  h-aux) [hd_rootp
2610: 61 74 68 20 24 66 69 6c 65 6e 61 6d 65 5d 0a 20  ath $filename]. 
2620: 20 73 65 74 20 68 64 28 61 75 78 29 20 5b 6f 70   set hd(aux) [op
2630: 65 6e 20 24 44 45 53 54 2f 24 66 69 6c 65 6e 61  en $DEST/$filena
2640: 6d 65 20 77 5d 0a 20 20 73 65 74 20 68 64 28 65  me w].  set hd(e
2650: 6e 61 62 6c 65 2d 61 75 78 29 20 31 0a 20 20 73  nable-aux) 1.  s
2660: 65 74 20 68 64 28 61 75 78 2d 66 72 61 67 6d 65  et hd(aux-fragme
2670: 6e 74 29 20 7b 7d 0a 20 20 67 6c 6f 62 61 6c 20  nt) {}.  global 
2680: 70 61 67 65 6c 69 6e 6b 0a 20 20 6c 61 70 70 65  pagelink.  lappe
2690: 6e 64 20 70 61 67 65 6c 69 6e 6b 28 24 66 69 6c  nd pagelink($fil
26a0: 65 6e 61 6d 65 29 20 24 66 69 6c 65 6e 61 6d 65  ename) $filename
26b0: 0a 7d 0a 0a 23 20 43 6c 6f 73 65 20 74 68 65 20  .}..# Close the 
26c0: 61 75 78 69 6c 69 61 72 79 20 6f 75 74 70 75 74  auxiliary output
26d0: 20 66 69 6c 65 0a 23 0a 70 72 6f 63 20 68 64 5f   file.#.proc hd_
26e0: 63 6c 6f 73 65 5f 61 75 78 20 7b 7d 20 7b 0a 20  close_aux {} {. 
26f0: 20 67 6c 6f 62 61 6c 20 68 64 0a 20 20 69 66 20   global hd.  if 
2700: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 68 64  {[info exists hd
2710: 28 61 75 78 29 5d 7d 20 7b 0a 20 20 20 20 70 75  (aux)]} {.    pu
2720: 74 73 20 24 68 64 28 61 75 78 29 20 24 68 64 28  ts $hd(aux) $hd(
2730: 66 6f 6f 74 65 72 29 0a 20 20 20 20 63 6c 6f 73  footer).    clos
2740: 65 20 24 68 64 28 61 75 78 29 0a 20 20 20 20 75  e $hd(aux).    u
2750: 6e 73 65 74 20 68 64 28 61 75 78 29 0a 20 20 20  nset hd(aux).   
2760: 20 73 65 74 20 68 64 28 65 6e 61 62 6c 65 2d 61   set hd(enable-a
2770: 75 78 29 20 30 0a 20 20 20 20 73 65 74 20 68 64  ux) 0.    set hd
2780: 28 65 6e 61 62 6c 65 2d 6d 61 69 6e 29 20 31 0a  (enable-main) 1.
2790: 20 20 7d 0a 7d 0a 0a 0a 23 20 68 64 5f 70 75 74    }.}...# hd_put
27a0: 73 69 6e 34 20 69 73 20 6c 69 6b 65 20 70 75 74  sin4 is like put
27b0: 73 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  s except that it
27c0: 20 72 65 6d 6f 76 65 73 20 74 68 65 20 66 69 72   removes the fir
27d0: 73 74 20 34 20 69 6e 64 65 6e 74 61 74 69 6f 6e  st 4 indentation
27e0: 0a 23 20 63 68 61 72 61 63 74 65 72 73 20 66 72  .# characters fr
27f0: 6f 6d 20 65 61 63 68 20 6c 69 6e 65 2e 20 20 49  om each line.  I
2800: 74 20 61 6c 73 6f 20 64 6f 65 73 20 76 61 72 69  t also does vari
2810: 61 62 6c 65 20 73 75 62 73 74 69 74 75 74 69 6f  able substitutio
2820: 6e 20 69 6e 0a 23 20 74 68 65 20 6e 61 6d 65 73  n in.# the names
2830: 70 61 63 65 20 6f 66 20 69 74 73 20 63 61 6c 6c  pace of its call
2840: 69 6e 67 20 70 72 6f 63 65 64 75 72 65 2e 0a 23  ing procedure..#
2850: 0a 70 72 6f 63 20 70 75 74 73 69 6e 34 20 7b 66  .proc putsin4 {f
2860: 64 20 74 65 78 74 7d 20 7b 0a 20 20 72 65 67 73  d text} {.  regs
2870: 75 62 20 2d 61 6c 6c 20 22 5c 6e 20 20 20 20 22  ub -all "\n    "
2880: 20 24 74 65 78 74 20 5c 6e 20 74 65 78 74 0a 20   $text \n text. 
2890: 20 70 75 74 73 20 24 66 64 20 5b 75 70 6c 65 76   puts $fd [uplev
28a0: 65 6c 20 31 20 5b 6c 69 73 74 20 73 75 62 73 74  el 1 [list subst
28b0: 20 2d 6e 6f 62 61 63 6b 20 2d 6e 6f 63 6f 6d 20   -noback -nocom 
28c0: 24 74 65 78 74 5d 5d 0a 7d 0a 0a 23 20 41 20 70  $text]].}..# A p
28d0: 72 6f 63 65 64 75 72 65 20 74 6f 20 77 72 69 74  rocedure to writ
28e0: 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 68 65 61  e the common hea
28f0: 64 65 72 20 66 6f 75 6e 64 20 6f 6e 20 65 76 65  der found on eve
2900: 72 79 20 48 54 4d 4c 20 66 69 6c 65 20 6f 6e 0a  ry HTML file on.
2910: 23 20 74 68 65 20 53 51 4c 69 74 65 20 77 65 62  # the SQLite web
2920: 73 69 74 65 2e 0a 23 0a 23 23 23 23 23 23 23 23  site..#.########
2930: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20  #############.# 
2940: 4e 4f 54 45 3a 20 20 54 68 69 73 20 63 6f 64 65  NOTE:  This code
2950: 20 69 73 20 63 6f 70 69 65 64 20 61 6e 64 20 72   is copied and r
2960: 65 75 73 65 64 20 69 6e 20 6d 61 74 72 69 78 2e  eused in matrix.
2970: 74 63 6c 2e 20 20 57 68 65 6e 20 6d 61 6b 69 6e  tcl.  When makin
2980: 67 0a 23 20 63 68 61 6e 67 65 73 20 74 6f 20 74  g.# changes to t
2990: 68 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  his implementati
29a0: 6f 6e 2c 20 62 65 20 73 75 72 65 20 74 6f 20 61  on, be sure to a
29b0: 6c 73 6f 20 63 68 61 6e 67 65 20 6d 61 74 72 69  lso change matri
29c0: 78 2e 74 63 6c 2e 0a 23 0a 70 72 6f 63 20 68 64  x.tcl..#.proc hd
29d0: 5f 68 65 61 64 65 72 20 7b 74 69 74 6c 65 20 7b  _header {title {
29e0: 73 72 63 66 69 6c 65 20 7b 7d 7d 7d 20 7b 0a 20  srcfile {}}} {. 
29f0: 20 67 6c 6f 62 61 6c 20 68 64 0a 20 20 73 65 74   global hd.  set
2a00: 20 73 61 76 65 64 5f 65 6e 61 62 6c 65 20 24 68   saved_enable $h
2a10: 64 28 65 6e 61 62 6c 65 2d 6d 61 69 6e 29 0a 20  d(enable-main). 
2a20: 20 69 66 20 7b 24 73 72 63 66 69 6c 65 3d 3d 22   if {$srcfile=="
2a30: 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 66 64 20  "} {.    set fd 
2a40: 24 68 64 28 61 75 78 29 0a 20 20 20 20 73 65 74  $hd(aux).    set
2a50: 20 70 61 74 68 20 24 68 64 28 72 6f 6f 74 70 61   path $hd(rootpa
2a60: 74 68 2d 61 75 78 29 0a 20 20 7d 20 65 6c 73 65  th-aux).  } else
2a70: 20 7b 0a 20 20 20 20 73 65 74 20 66 64 20 24 68   {.    set fd $h
2a80: 64 28 6d 61 69 6e 29 0a 20 20 20 20 73 65 74 20  d(main).    set 
2a90: 70 61 74 68 20 24 68 64 28 72 6f 6f 74 70 61 74  path $hd(rootpat
2aa0: 68 2d 6d 61 69 6e 29 0a 20 20 7d 0a 20 20 70 75  h-main).  }.  pu
2ab0: 74 73 20 24 66 64 20 7b 3c 21 44 4f 43 54 59 50  ts $fd {<!DOCTYP
2ac0: 45 20 48 54 4d 4c 20 50 55 42 4c 49 43 20 22 2d  E HTML PUBLIC "-
2ad0: 2f 2f 57 33 43 2f 2f 44 54 44 20 48 54 4d 4c 20  //W3C//DTD HTML 
2ae0: 34 2e 30 31 2f 2f 45 4e 22 20 22 68 74 74 70 3a  4.01//EN" "http:
2af0: 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 54 52 2f  //www.w3.org/TR/
2b00: 68 74 6d 6c 34 2f 73 74 72 69 63 74 2e 64 74 64  html4/strict.dtd
2b10: 22 3e 7d 0a 20 20 70 75 74 73 20 24 66 64 20 7b  ">}.  puts $fd {
2b20: 3c 68 74 6d 6c 3e 3c 68 65 61 64 3e 7d 0a 20 20  <html><head>}.  
2b30: 70 75 74 73 20 24 66 64 20 22 3c 74 69 74 6c 65  puts $fd "<title
2b40: 3e 24 74 69 74 6c 65 3c 2f 74 69 74 6c 65 3e 22  >$title</title>"
2b50: 0a 20 20 70 75 74 73 69 6e 34 20 24 66 64 20 7b  .  putsin4 $fd {
2b60: 3c 73 74 79 6c 65 20 74 79 70 65 3d 22 74 65 78  <style type="tex
2b70: 74 2f 63 73 73 22 3e 0a 20 20 20 20 62 6f 64 79  t/css">.    body
2b80: 20 7b 0a 20 20 20 20 20 20 20 20 6d 61 72 67 69   {.        margi
2b90: 6e 3a 20 61 75 74 6f 3b 0a 20 20 20 20 20 20 20  n: auto;.       
2ba0: 20 66 6f 6e 74 2d 66 61 6d 69 6c 79 3a 20 56 65   font-family: Ve
2bb0: 72 64 61 6e 61 2c 20 73 61 6e 73 2d 73 65 72 69  rdana, sans-seri
2bc0: 66 3b 0a 20 20 20 20 20 20 20 20 70 61 64 64 69  f;.        paddi
2bd0: 6e 67 3a 20 38 70 78 20 31 25 3b 0a 20 20 20 20  ng: 8px 1%;.    
2be0: 7d 0a 20 20 20 20 0a 20 20 20 20 61 20 7b 20 63  }.    .    a { c
2bf0: 6f 6c 6f 72 3a 20 23 30 34 34 61 36 34 20 7d 0a  olor: #044a64 }.
2c00: 20 20 20 20 61 3a 76 69 73 69 74 65 64 20 7b 20      a:visited { 
2c10: 63 6f 6c 6f 72 3a 20 23 37 33 34 35 35 39 20 7d  color: #734559 }
2c20: 0a 20 20 20 20 0a 20 20 20 20 2e 6c 6f 67 6f 20  .    .    .logo 
2c30: 7b 20 70 6f 73 69 74 69 6f 6e 3a 61 62 73 6f 6c  { position:absol
2c40: 75 74 65 3b 20 6d 61 72 67 69 6e 3a 33 70 78 3b  ute; margin:3px;
2c50: 20 7d 0a 20 20 20 20 2e 74 61 67 6c 69 6e 65 20   }.    .tagline 
2c60: 7b 0a 20 20 20 20 20 20 66 6c 6f 61 74 3a 72 69  {.      float:ri
2c70: 67 68 74 3b 0a 20 20 20 20 20 20 74 65 78 74 2d  ght;.      text-
2c80: 61 6c 69 67 6e 3a 72 69 67 68 74 3b 0a 20 20 20  align:right;.   
2c90: 20 20 20 66 6f 6e 74 2d 73 74 79 6c 65 3a 69 74     font-style:it
2ca0: 61 6c 69 63 3b 0a 20 20 20 20 20 20 77 69 64 74  alic;.      widt
2cb0: 68 3a 33 30 30 70 78 3b 0a 20 20 20 20 20 20 6d  h:300px;.      m
2cc0: 61 72 67 69 6e 3a 31 32 70 78 3b 0a 20 20 20 20  argin:12px;.    
2cd0: 20 20 6d 61 72 67 69 6e 2d 74 6f 70 3a 35 38 70    margin-top:58p
2ce0: 78 3b 0a 20 20 20 20 7d 0a 20 20 20 20 0a 20 20  x;.    }.    .  
2cf0: 20 20 2e 74 6f 6f 6c 62 61 72 20 7b 0a 20 20 20    .toolbar {.   
2d00: 20 20 20 74 65 78 74 2d 61 6c 69 67 6e 3a 20 63     text-align: c
2d10: 65 6e 74 65 72 3b 0a 20 20 20 20 20 20 6c 69 6e  enter;.      lin
2d20: 65 2d 68 65 69 67 68 74 3a 20 31 2e 36 65 6d 3b  e-height: 1.6em;
2d30: 0a 20 20 20 20 20 20 6d 61 72 67 69 6e 3a 20 30  .      margin: 0
2d40: 3b 0a 20 20 20 20 20 20 70 61 64 64 69 6e 67 3a  ;.      padding:
2d50: 20 30 70 78 20 38 70 78 3b 0a 20 20 20 20 7d 0a   0px 8px;.    }.
2d60: 20 20 20 20 2e 74 6f 6f 6c 62 61 72 20 61 20 7b      .toolbar a {
2d70: 20 63 6f 6c 6f 72 3a 20 77 68 69 74 65 3b 20 74   color: white; t
2d80: 65 78 74 2d 64 65 63 6f 72 61 74 69 6f 6e 3a 20  ext-decoration: 
2d90: 6e 6f 6e 65 3b 20 70 61 64 64 69 6e 67 3a 20 36  none; padding: 6
2da0: 70 78 20 31 32 70 78 3b 20 7d 0a 20 20 20 20 2e  px 12px; }.    .
2db0: 74 6f 6f 6c 62 61 72 20 61 3a 76 69 73 69 74 65  toolbar a:visite
2dc0: 64 20 7b 20 63 6f 6c 6f 72 3a 20 77 68 69 74 65  d { color: white
2dd0: 3b 20 7d 0a 20 20 20 20 2e 74 6f 6f 6c 62 61 72  ; }.    .toolbar
2de0: 20 61 3a 68 6f 76 65 72 20 7b 20 63 6f 6c 6f 72   a:hover { color
2df0: 3a 20 23 30 34 34 61 36 34 3b 20 62 61 63 6b 67  : #044a64; backg
2e00: 72 6f 75 6e 64 3a 20 77 68 69 74 65 3b 20 7d 0a  round: white; }.
2e10: 20 20 20 20 0a 20 20 20 20 2e 63 6f 6e 74 65 6e      .    .conten
2e20: 74 20 20 20 20 7b 20 6d 61 72 67 69 6e 3a 20 35  t    { margin: 5
2e30: 25 3b 20 7d 0a 20 20 20 20 2e 63 6f 6e 74 65 6e  %; }.    .conten
2e40: 74 20 64 74 20 7b 20 66 6f 6e 74 2d 77 65 69 67  t dt { font-weig
2e50: 68 74 3a 62 6f 6c 64 3b 20 7d 0a 20 20 20 20 2e  ht:bold; }.    .
2e60: 63 6f 6e 74 65 6e 74 20 64 64 20 7b 20 6d 61 72  content dd { mar
2e70: 67 69 6e 2d 62 6f 74 74 6f 6d 3a 20 32 35 70 78  gin-bottom: 25px
2e80: 3b 20 6d 61 72 67 69 6e 2d 6c 65 66 74 3a 32 30  ; margin-left:20
2e90: 25 3b 20 7d 0a 20 20 20 20 2e 63 6f 6e 74 65 6e  %; }.    .conten
2ea0: 74 20 75 6c 20 7b 20 70 61 64 64 69 6e 67 3a 30  t ul { padding:0
2eb0: 70 78 3b 20 70 61 64 64 69 6e 67 2d 6c 65 66 74  px; padding-left
2ec0: 3a 20 31 35 70 78 3b 20 6d 61 72 67 69 6e 3a 30  : 15px; margin:0
2ed0: 70 78 3b 20 7d 0a 20 20 20 20 0a 20 20 20 20 2f  px; }.    .    /
2ee0: 2a 20 72 6f 75 6e 64 65 64 20 63 6f 72 6e 65 72  * rounded corner
2ef0: 73 20 2a 2f 0a 20 20 20 20 2e 73 65 20 20 7b 20  s */.    .se  { 
2f00: 62 61 63 6b 67 72 6f 75 6e 64 3a 20 75 72 6c 28  background: url(
2f10: 24 7b 70 61 74 68 7d 69 6d 61 67 65 73 2f 73 65  ${path}images/se
2f20: 2e 67 69 66 29 20 31 30 30 25 20 31 30 30 25 20  .gif) 100% 100% 
2f30: 6e 6f 2d 72 65 70 65 61 74 20 23 30 34 34 61 36  no-repeat #044a6
2f40: 34 7d 0a 20 20 20 20 2e 73 77 20 20 7b 20 62 61  4}.    .sw  { ba
2f50: 63 6b 67 72 6f 75 6e 64 3a 20 75 72 6c 28 24 7b  ckground: url(${
2f60: 70 61 74 68 7d 69 6d 61 67 65 73 2f 73 77 2e 67  path}images/sw.g
2f70: 69 66 29 20 30 25 20 31 30 30 25 20 6e 6f 2d 72  if) 0% 100% no-r
2f80: 65 70 65 61 74 20 7d 0a 20 20 20 20 2e 6e 65 20  epeat }.    .ne 
2f90: 20 7b 20 62 61 63 6b 67 72 6f 75 6e 64 3a 20 75   { background: u
2fa0: 72 6c 28 24 7b 70 61 74 68 7d 69 6d 61 67 65 73  rl(${path}images
2fb0: 2f 6e 65 2e 67 69 66 29 20 31 30 30 25 20 30 25  /ne.gif) 100% 0%
2fc0: 20 6e 6f 2d 72 65 70 65 61 74 20 7d 0a 20 20 20   no-repeat }.   
2fd0: 20 2e 6e 77 20 20 7b 20 62 61 63 6b 67 72 6f 75   .nw  { backgrou
2fe0: 6e 64 3a 20 75 72 6c 28 24 7b 70 61 74 68 7d 69  nd: url(${path}i
2ff0: 6d 61 67 65 73 2f 6e 77 2e 67 69 66 29 20 30 25  mages/nw.gif) 0%
3000: 20 30 25 20 6e 6f 2d 72 65 70 65 61 74 20 7d 0a   0% no-repeat }.
3010: 0a 20 20 20 20 2f 2a 20 54 68 69 6e 67 73 20 66  .    /* Things f
3020: 6f 72 20 22 66 61 6e 63 79 66 6f 72 6d 61 74 22  or "fancyformat"
3030: 20 64 6f 63 75 6d 65 6e 74 73 20 73 74 61 72 74   documents start
3040: 20 68 65 72 65 2e 20 2a 2f 0a 20 20 20 20 2e 66   here. */.    .f
3050: 61 6e 63 79 20 69 6d 67 2b 70 20 7b 66 6f 6e 74  ancy img+p {font
3060: 2d 73 74 79 6c 65 3a 69 74 61 6c 69 63 7d 0a 20  -style:italic}. 
3070: 20 20 20 2e 66 61 6e 63 79 20 2e 63 6f 64 65 62     .fancy .codeb
3080: 6c 6f 63 6b 20 69 20 7b 20 63 6f 6c 6f 72 3a 20  lock i { color: 
3090: 64 61 72 6b 62 6c 75 65 3b 20 7d 0a 20 20 20 20  darkblue; }.    
30a0: 2e 66 61 6e 63 79 20 68 31 2c 2e 66 61 6e 63 79  .fancy h1,.fancy
30b0: 20 68 32 2c 2e 66 61 6e 63 79 20 68 33 2c 2e 66   h2,.fancy h3,.f
30c0: 61 6e 63 79 20 68 34 20 7b 66 6f 6e 74 2d 77 65  ancy h4 {font-we
30d0: 69 67 68 74 3a 6e 6f 72 6d 61 6c 3b 63 6f 6c 6f  ight:normal;colo
30e0: 72 3a 23 30 34 34 61 36 34 7d 0a 20 20 20 20 2e  r:#044a64}.    .
30f0: 66 61 6e 63 79 20 68 32 20 7b 20 6d 61 72 67 69  fancy h2 { margi
3100: 6e 2d 6c 65 66 74 3a 20 31 30 70 78 20 7d 0a 20  n-left: 10px }. 
3110: 20 20 20 2e 66 61 6e 63 79 20 68 33 20 7b 20 6d     .fancy h3 { m
3120: 61 72 67 69 6e 2d 6c 65 66 74 3a 20 32 30 70 78  argin-left: 20px
3130: 20 7d 0a 20 20 20 20 2e 66 61 6e 63 79 20 68 34   }.    .fancy h4
3140: 20 7b 20 6d 61 72 67 69 6e 2d 6c 65 66 74 3a 20   { margin-left: 
3150: 33 30 70 78 20 7d 0a 20 20 20 20 2e 66 61 6e 63  30px }.    .fanc
3160: 79 20 74 68 20 7b 77 68 69 74 65 2d 73 70 61 63  y th {white-spac
3170: 65 3a 6e 6f 77 72 61 70 3b 74 65 78 74 2d 61 6c  e:nowrap;text-al
3180: 69 67 6e 3a 6c 65 66 74 3b 62 6f 72 64 65 72 2d  ign:left;border-
3190: 62 6f 74 74 6f 6d 3a 73 6f 6c 69 64 20 31 70 78  bottom:solid 1px
31a0: 20 23 34 34 34 7d 0a 20 20 20 20 2e 66 61 6e 63   #444}.    .fanc
31b0: 79 20 74 68 2c 20 2e 66 61 6e 63 79 20 74 64 20  y th, .fancy td 
31c0: 7b 70 61 64 64 69 6e 67 3a 20 30 2e 32 65 6d 20  {padding: 0.2em 
31d0: 31 65 78 3b 20 76 65 72 74 69 63 61 6c 2d 61 6c  1ex; vertical-al
31e0: 69 67 6e 3a 74 6f 70 7d 0a 20 20 20 20 2e 66 61  ign:top}.    .fa
31f0: 6e 63 79 20 23 74 6f 63 20 61 20 20 20 20 20 20  ncy #toc a      
3200: 20 20 7b 20 63 6f 6c 6f 72 3a 20 64 61 72 6b 62    { color: darkb
3210: 6c 75 65 20 3b 20 74 65 78 74 2d 64 65 63 6f 72  lue ; text-decor
3220: 61 74 69 6f 6e 3a 20 6e 6f 6e 65 20 7d 0a 20 20  ation: none }.  
3230: 20 20 2e 66 61 6e 63 79 20 2e 74 6f 64 6f 20 20    .fancy .todo  
3240: 20 20 20 20 20 20 20 7b 20 63 6f 6c 6f 72 3a 20         { color: 
3250: 23 41 41 33 33 33 33 20 3b 20 66 6f 6e 74 2d 73  #AA3333 ; font-s
3260: 74 79 6c 65 20 3a 20 69 74 61 6c 69 63 20 7d 0a  tyle : italic }.
3270: 20 20 20 20 2e 66 61 6e 63 79 20 2e 74 6f 64 6f      .fancy .todo
3280: 3a 62 65 66 6f 72 65 20 20 7b 20 63 6f 6e 74 65  :before  { conte
3290: 6e 74 3a 20 27 54 4f 44 4f 3a 27 20 7d 0a 20 20  nt: 'TODO:' }.  
32a0: 20 20 2e 66 61 6e 63 79 20 70 2e 74 6f 64 6f 20    .fancy p.todo 
32b0: 20 20 20 20 20 20 20 7b 20 62 6f 72 64 65 72 3a         { border:
32c0: 20 73 6f 6c 69 64 20 23 41 41 33 33 33 33 20 31   solid #AA3333 1
32d0: 70 78 3b 20 70 61 64 64 69 6e 67 3a 20 31 65 78  px; padding: 1ex
32e0: 20 7d 0a 20 20 20 20 2e 66 61 6e 63 79 20 69 6d   }.    .fancy im
32f0: 67 20 7b 20 64 69 73 70 6c 61 79 3a 62 6c 6f 63  g { display:bloc
3300: 6b 3b 20 7d 0a 20 20 20 20 2e 66 61 6e 63 79 20  k; }.    .fancy 
3310: 3a 6c 69 6e 6b 3a 68 6f 76 65 72 2c 20 2e 66 61  :link:hover, .fa
3320: 6e 63 79 20 3a 76 69 73 69 74 65 64 3a 68 6f 76  ncy :visited:hov
3330: 65 72 20 7b 20 62 61 63 6b 67 72 6f 75 6e 64 3a  er { background:
3340: 20 77 68 65 61 74 20 7d 0a 20 20 20 20 2e 66 61   wheat }.    .fa
3350: 6e 63 79 20 70 2c 2e 66 61 6e 63 79 20 75 6c 2c  ncy p,.fancy ul,
3360: 2e 66 61 6e 63 79 20 6f 6c 20 7b 20 6d 61 72 67  .fancy ol { marg
3370: 69 6e 3a 20 31 65 6d 20 35 65 78 20 7d 0a 20 20  in: 1em 5ex }.  
3380: 20 20 2e 66 61 6e 63 79 20 6c 69 20 70 20 7b 20    .fancy li p { 
3390: 6d 61 72 67 69 6e 3a 20 31 65 6d 20 30 20 7d 0a  margin: 1em 0 }.
33a0: 20 20 20 20 2f 2a 20 45 6e 64 20 6f 66 20 22 66      /* End of "f
33b0: 61 6e 63 79 66 6f 72 6d 61 74 22 20 73 70 65 63  ancyformat" spec
33c0: 69 66 69 63 20 72 75 6c 65 73 2e 20 2a 2f 0a 0a  ific rules. */..
33d0: 20 20 20 20 3c 2f 73 74 79 6c 65 3e 0a 20 20 20      </style>.   
33e0: 20 3c 6d 65 74 61 20 68 74 74 70 2d 65 71 75 69   <meta http-equi
33f0: 76 3d 22 63 6f 6e 74 65 6e 74 2d 74 79 70 65 22  v="content-type"
3400: 20 63 6f 6e 74 65 6e 74 3d 22 74 65 78 74 2f 68   content="text/h
3410: 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d 55 54 46  tml; charset=UTF
3420: 2d 38 22 3e 0a 20 20 7d 0a 20 20 70 75 74 73 20  -8">.  }.  puts 
3430: 24 66 64 20 7b 3c 2f 68 65 61 64 3e 7d 0a 20 20  $fd {</head>}.  
3440: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
3450: 20 44 52 41 46 54 5d 7d 20 7b 0a 20 20 20 20 73   DRAFT]} {.    s
3460: 65 74 20 74 61 67 6c 69 6e 65 20 7b 3c 66 6f 6e  et tagline {<fon
3470: 74 20 73 69 7a 65 3d 22 36 22 20 63 6f 6c 6f 72  t size="6" color
3480: 3d 22 72 65 64 22 3e 2a 2a 2a 20 44 52 41 46 54  ="red">*** DRAFT
3490: 20 2a 2a 2a 3c 2f 66 6f 6e 74 3e 7d 0a 20 20 7d   ***</font>}.  }
34a0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20   else {.    set 
34b0: 74 61 67 6c 69 6e 65 20 7b 53 6d 61 6c 6c 2e 20  tagline {Small. 
34c0: 46 61 73 74 2e 20 52 65 6c 69 61 62 6c 65 2e 3c  Fast. Reliable.<
34d0: 62 72 3e 43 68 6f 6f 73 65 20 61 6e 79 20 74 68  br>Choose any th
34e0: 72 65 65 2e 7d 0a 20 20 7d 0a 20 20 70 75 74 73  ree.}.  }.  puts
34f0: 69 6e 34 20 24 66 64 20 7b 3c 62 6f 64 79 3e 0a  in4 $fd {<body>.
3500: 20 20 20 20 3c 64 69 76 3e 3c 21 2d 2d 20 63 6f      <div><!-- co
3510: 6e 74 61 69 6e 65 72 20 64 69 76 20 74 6f 20 73  ntainer div to s
3520: 61 74 69 73 66 79 20 76 61 6c 69 64 61 74 6f 72  atisfy validator
3530: 20 2d 2d 3e 0a 20 20 20 20 0a 20 20 20 20 3c 61   -->.    .    <a
3540: 20 68 72 65 66 3d 22 24 7b 70 61 74 68 7d 69 6e   href="${path}in
3550: 64 65 78 2e 68 74 6d 6c 22 3e 0a 20 20 20 20 3c  dex.html">.    <
3560: 69 6d 67 20 63 6c 61 73 73 3d 22 6c 6f 67 6f 22  img class="logo"
3570: 20 73 72 63 3d 22 24 7b 70 61 74 68 7d 69 6d 61   src="${path}ima
3580: 67 65 73 2f 73 71 6c 69 74 65 33 37 30 5f 62 61  ges/sqlite370_ba
3590: 6e 6e 65 72 2e 67 69 66 22 20 61 6c 74 3d 22 53  nner.gif" alt="S
35a0: 51 4c 69 74 65 20 4c 6f 67 6f 22 0a 20 20 20 20  QLite Logo".    
35b0: 20 62 6f 72 64 65 72 3d 22 30 22 3e 3c 2f 61 3e   border="0"></a>
35c0: 0a 20 20 20 20 3c 64 69 76 3e 3c 21 2d 2d 20 49  .    <div><!-- I
35d0: 45 20 68 61 63 6b 20 74 6f 20 70 72 65 76 65 6e  E hack to preven
35e0: 74 20 64 69 73 61 70 70 65 61 72 69 6e 67 20 6c  t disappearing l
35f0: 6f 67 6f 2d 2d 3e 3c 2f 64 69 76 3e 0a 20 20 20  ogo--></div>.   
3600: 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 74 61 67   <div class="tag
3610: 6c 69 6e 65 22 3e 24 7b 74 61 67 6c 69 6e 65 7d  line">${tagline}
3620: 3c 2f 64 69 76 3e 0a 0a 20 20 20 20 3c 74 61 62  </div>..    <tab
3630: 6c 65 20 77 69 64 74 68 3d 31 30 30 25 20 73 74  le width=100% st
3640: 79 6c 65 3d 22 63 6c 65 61 72 3a 62 6f 74 68 22  yle="clear:both"
3650: 3e 3c 74 72 3e 3c 74 64 3e 0a 20 20 20 20 20 20  ><tr><td>.      
3660: 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 22 3e  <div class="se">
3670: 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 77 22 3e  <div class="sw">
3680: 3c 64 69 76 20 63 6c 61 73 73 3d 22 6e 65 22 3e  <div class="ne">
3690: 3c 64 69 76 20 63 6c 61 73 73 3d 22 6e 77 22 3e  <div class="nw">
36a0: 0a 20 20 20 20 20 20 3c 74 61 62 6c 65 20 77 69  .      <table wi
36b0: 64 74 68 3d 31 30 30 25 20 73 74 79 6c 65 3d 22  dth=100% style="
36c0: 70 61 64 64 69 6e 67 3a 30 3b 6d 61 72 67 69 6e  padding:0;margin
36d0: 3a 30 3b 63 65 6c 6c 2d 73 70 61 63 69 6e 67 3a  :0;cell-spacing:
36e0: 30 22 3e 3c 74 72 3e 0a 20 20 20 20 20 20 3c 74  0"><tr>.      <t
36f0: 64 20 77 69 64 74 68 3d 31 30 30 25 3e 0a 20 20  d width=100%>.  
3700: 20 20 20 20 3c 64 69 76 20 63 6c 61 73 73 3d 22      <div class="
3710: 74 6f 6f 6c 62 61 72 22 3e 0a 20 20 20 20 20 20  toolbar">.      
3720: 20 20 3c 61 20 68 72 65 66 3d 22 24 7b 70 61 74    <a href="${pat
3730: 68 7d 61 62 6f 75 74 2e 68 74 6d 6c 22 3e 41 62  h}about.html">Ab
3740: 6f 75 74 3c 2f 61 3e 0a 20 20 20 20 20 20 20 20  out</a>.        
3750: 3c 61 20 68 72 65 66 3d 22 24 7b 70 61 74 68 7d  <a href="${path}
3760: 73 69 74 65 6d 61 70 2e 68 74 6d 6c 22 3e 53 69  sitemap.html">Si
3770: 74 65 6d 61 70 3c 2f 61 3e 0a 20 20 20 20 20 20  temap</a>.      
3780: 20 20 3c 61 20 68 72 65 66 3d 22 24 7b 70 61 74    <a href="${pat
3790: 68 7d 64 6f 63 73 2e 68 74 6d 6c 22 3e 44 6f 63  h}docs.html">Doc
37a0: 75 6d 65 6e 74 61 74 69 6f 6e 3c 2f 61 3e 0a 20  umentation</a>. 
37b0: 20 20 20 20 20 20 20 3c 61 20 68 72 65 66 3d 22         <a href="
37c0: 24 7b 70 61 74 68 7d 64 6f 77 6e 6c 6f 61 64 2e  ${path}download.
37d0: 68 74 6d 6c 22 3e 44 6f 77 6e 6c 6f 61 64 3c 2f  html">Download</
37e0: 61 3e 0a 20 20 20 20 20 20 20 20 3c 61 20 68 72  a>.        <a hr
37f0: 65 66 3d 22 24 7b 70 61 74 68 7d 63 6f 70 79 72  ef="${path}copyr
3800: 69 67 68 74 2e 68 74 6d 6c 22 3e 4c 69 63 65 6e  ight.html">Licen
3810: 73 65 3c 2f 61 3e 0a 20 20 20 20 20 20 20 20 3c  se</a>.        <
3820: 61 20 68 72 65 66 3d 22 24 7b 70 61 74 68 7d 6e  a href="${path}n
3830: 65 77 73 2e 68 74 6d 6c 22 3e 4e 65 77 73 3c 2f  ews.html">News</
3840: 61 3e 0a 20 20 20 20 20 20 20 20 3c 61 20 68 72  a>.        <a hr
3850: 65 66 3d 22 24 7b 70 61 74 68 7d 73 75 70 70 6f  ef="${path}suppo
3860: 72 74 2e 68 74 6d 6c 22 3e 53 75 70 70 6f 72 74  rt.html">Support
3870: 3c 2f 61 3e 0a 20 20 20 20 20 20 3c 2f 64 69 76  </a>.      </div
3880: 3e 7d 0a 0a 20 20 69 66 20 7b 31 7d 20 7b 0a 20  >}..  if {1} {. 
3890: 20 20 20 70 75 74 73 69 6e 34 20 24 66 64 20 7b     putsin4 $fd {
38a0: 3c 73 63 72 69 70 74 3e 0a 20 20 20 20 20 20 67  <script>.      g
38b0: 4d 73 67 20 3d 20 22 53 65 61 72 63 68 20 53 51  Msg = "Search SQ
38c0: 4c 69 74 65 20 44 6f 63 73 2e 2e 2e 22 0a 20 20  Lite Docs...".  
38d0: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 65 6e 74      function ent
38e0: 65 72 73 65 61 72 63 68 28 29 20 7b 0a 20 20 20  ersearch() {.   
38f0: 20 20 20 20 20 76 61 72 20 71 20 3d 20 64 6f 63       var q = doc
3900: 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74  ument.getElement
3910: 42 79 49 64 28 22 71 22 29 3b 0a 20 20 20 20 20  ById("q");.     
3920: 20 20 20 69 66 28 20 71 2e 76 61 6c 75 65 20 3d     if( q.value =
3930: 3d 20 67 4d 73 67 20 29 20 7b 20 71 2e 76 61 6c  = gMsg ) { q.val
3940: 75 65 20 3d 20 22 22 20 7d 0a 20 20 20 20 20 20  ue = "" }.      
3950: 20 20 71 2e 73 74 79 6c 65 2e 63 6f 6c 6f 72 20    q.style.color 
3960: 3d 20 22 62 6c 61 63 6b 22 0a 20 20 20 20 20 20  = "black".      
3970: 20 20 71 2e 73 74 79 6c 65 2e 66 6f 6e 74 53 74    q.style.fontSt
3980: 79 6c 65 20 3d 20 22 6e 6f 72 6d 61 6c 22 0a 20  yle = "normal". 
3990: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 66 75 6e       }.      fun
39a0: 63 74 69 6f 6e 20 6c 65 61 76 65 73 65 61 72 63  ction leavesearc
39b0: 68 28 29 20 7b 0a 20 20 20 20 20 20 20 20 76 61  h() {.        va
39c0: 72 20 71 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 67  r q = document.g
39d0: 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 71  etElementById("q
39e0: 22 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ");.        if( 
39f0: 71 2e 76 61 6c 75 65 20 3d 3d 20 22 22 20 29 20  q.value == "" ) 
3a00: 7b 20 0a 20 20 20 20 20 20 20 20 20 20 71 2e 76  { .          q.v
3a10: 61 6c 75 65 20 3d 20 67 4d 73 67 0a 20 20 20 20  alue = gMsg.    
3a20: 20 20 20 20 20 20 71 2e 73 74 79 6c 65 2e 63 6f        q.style.co
3a30: 6c 6f 72 20 3d 20 22 23 30 34 34 61 36 34 22 0a  lor = "#044a64".
3a40: 20 20 20 20 20 20 20 20 20 20 71 2e 73 74 79 6c            q.styl
3a50: 65 2e 66 6f 6e 74 53 74 79 6c 65 20 3d 20 22 69  e.fontStyle = "i
3a60: 74 61 6c 69 63 22 0a 20 20 20 20 20 20 20 20 7d  talic".        }
3a70: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 3c 2f 73  .      }.    </s
3a80: 63 72 69 70 74 3e 7d 0a 20 20 7d 0a 20 20 69 66  cript>}.  }.  if
3a90: 20 7b 31 7d 20 7b 0a 20 20 20 20 70 75 74 73 69   {1} {.    putsi
3aa0: 6e 34 20 24 66 64 20 7b 3c 74 64 3e 0a 20 20 20  n4 $fd {<td>.   
3ab0: 20 20 20 20 20 3c 64 69 76 20 73 74 79 6c 65 3d       <div style=
3ac0: 22 70 61 64 64 69 6e 67 3a 30 20 31 65 6d 20 30  "padding:0 1em 0
3ad0: 70 78 20 30 3b 77 68 69 74 65 2d 73 70 61 63 65  px 0;white-space
3ae0: 3a 6e 6f 77 72 61 70 22 3e 0a 20 20 20 20 20 20  :nowrap">.      
3af0: 20 20 3c 66 6f 72 6d 20 6e 61 6d 65 3d 66 20 6d    <form name=f m
3b00: 65 74 68 6f 64 3d 22 47 45 54 22 20 61 63 74 69  ethod="GET" acti
3b10: 6f 6e 3d 22 68 74 74 70 3a 2f 2f 77 77 77 2e 73  on="http://www.s
3b20: 71 6c 69 74 65 2e 6f 72 67 2f 73 65 61 72 63 68  qlite.org/search
3b30: 22 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 69 6e  ">.          <in
3b40: 70 75 74 20 69 64 3d 71 20 6e 61 6d 65 3d 71 20  put id=q name=q 
3b50: 74 79 70 65 3d 74 65 78 74 0a 20 20 20 20 20 20  type=text.      
3b60: 20 20 20 20 20 6f 6e 66 6f 63 75 73 3d 22 65 6e       onfocus="en
3b70: 74 65 72 73 65 61 72 63 68 28 29 22 20 6f 6e 62  tersearch()" onb
3b80: 6c 75 72 3d 22 6c 65 61 76 65 73 65 61 72 63 68  lur="leavesearch
3b90: 28 29 22 20 73 74 79 6c 65 3d 22 77 69 64 74 68  ()" style="width
3ba0: 3a 32 34 65 78 3b 70 61 64 64 69 6e 67 3a 31 70  :24ex;padding:1p
3bb0: 78 20 31 65 78 3b 20 62 6f 72 64 65 72 3a 73 6f  x 1ex; border:so
3bc0: 6c 69 64 20 77 68 69 74 65 20 31 70 78 3b 20 66  lid white 1px; f
3bd0: 6f 6e 74 2d 73 69 7a 65 3a 30 2e 39 65 6d 20 3b  ont-size:0.9em ;
3be0: 20 66 6f 6e 74 2d 73 74 79 6c 65 3a 69 74 61 6c   font-style:ital
3bf0: 69 63 3b 63 6f 6c 6f 72 3a 23 30 34 34 61 36 34  ic;color:#044a64
3c00: 3b 22 20 76 61 6c 75 65 3d 22 53 65 61 72 63 68  ;" value="Search
3c10: 20 53 51 4c 69 74 65 20 44 6f 63 73 2e 2e 2e 22   SQLite Docs..."
3c20: 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 69 6e 70  >.          <inp
3c30: 75 74 20 74 79 70 65 3d 73 75 62 6d 69 74 20 76  ut type=submit v
3c40: 61 6c 75 65 3d 22 47 6f 22 20 73 74 79 6c 65 3d  alue="Go" style=
3c50: 22 62 6f 72 64 65 72 3a 73 6f 6c 69 64 20 77 68  "border:solid wh
3c60: 69 74 65 20 31 70 78 3b 62 61 63 6b 67 72 6f 75  ite 1px;backgrou
3c70: 6e 64 2d 63 6f 6c 6f 72 3a 23 30 34 34 61 36 34  nd-color:#044a64
3c80: 3b 63 6f 6c 6f 72 3a 77 68 69 74 65 3b 66 6f 6e  ;color:white;fon
3c90: 74 2d 73 69 7a 65 3a 30 2e 39 65 6d 3b 70 61 64  t-size:0.9em;pad
3ca0: 64 69 6e 67 3a 30 20 31 65 78 22 3e 0a 20 20 20  ding:0 1ex">.   
3cb0: 20 20 20 20 20 3c 2f 66 6f 72 6d 3e 0a 20 20 20       </form>.   
3cc0: 20 20 20 20 20 3c 2f 64 69 76 3e 0a 20 20 20 20       </div>.    
3cd0: 20 20 3c 2f 74 61 62 6c 65 3e 7d 0a 20 20 7d 0a    </table>}.  }.
3ce0: 20 20 70 75 74 73 69 6e 34 20 24 66 64 20 7b 3c    putsin4 $fd {<
3cf0: 2f 64 69 76 3e 3c 2f 64 69 76 3e 3c 2f 64 69 76  /div></div></div
3d00: 3e 3c 2f 64 69 76 3e 0a 20 20 20 20 3c 2f 74 64  ></div>.    </td
3d10: 3e 3c 2f 74 72 3e 3c 2f 74 61 62 6c 65 3e 0a 20  ></tr></table>. 
3d20: 20 20 20 3c 64 69 76 20 63 6c 61 73 73 3d 73 74     <div class=st
3d30: 61 72 74 73 65 61 72 63 68 3e 3c 2f 64 69 76 3e  artsearch></div>
3d40: 0a 20 20 7d 0a 20 20 69 66 20 7b 24 73 72 63 66  .  }.  if {$srcf
3d50: 69 6c 65 21 3d 22 22 7d 20 7b 0a 20 20 20 20 69  ile!=""} {.    i
3d60: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists 
3d70: 44 52 41 46 54 5d 7d 20 7b 0a 20 20 20 20 20 20  DRAFT]} {.      
3d80: 73 65 74 20 68 64 28 66 6f 6f 74 65 72 29 20 7b  set hd(footer) {
3d90: 0a 20 20 20 20 20 20 20 20 3c 70 20 61 6c 69 67  .        <p alig
3da0: 6e 3d 22 63 65 6e 74 65 72 22 3e 3c 66 6f 6e 74  n="center"><font
3db0: 20 73 69 7a 65 3d 22 36 22 20 63 6f 6c 6f 72 3d   size="6" color=
3dc0: 22 72 65 64 22 3e 2a 2a 2a 20 44 52 41 46 54 20  "red">*** DRAFT 
3dd0: 2a 2a 2a 3c 2f 66 6f 6e 74 3e 3c 2f 70 3e 0a 20  ***</font></p>. 
3de0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 65 6c 73       }.    } els
3df0: 65 20 7b 0a 20 20 20 20 20 20 73 65 74 20 68 64  e {.      set hd
3e00: 28 66 6f 6f 74 65 72 29 20 7b 7d 0a 20 20 20 20  (footer) {}.    
3e10: 7d 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  }.  } else {.   
3e20: 20 73 65 74 20 68 64 28 65 6e 61 62 6c 65 2d 6d   set hd(enable-m
3e30: 61 69 6e 29 20 24 73 61 76 65 64 5f 65 6e 61 62  ain) $saved_enab
3e40: 6c 65 0a 20 20 7d 0a 7d 0a 0a 23 20 49 6e 73 65  le.  }.}..# Inse
3e50: 72 74 20 61 20 62 75 62 62 6c 65 20 73 79 6e 74  rt a bubble synt
3e60: 61 78 20 64 69 61 67 72 61 6d 20 69 6e 74 6f 20  ax diagram into 
3e70: 74 68 65 20 6f 75 74 70 75 74 2e 0a 23 0a 70 72  the output..#.pr
3e80: 6f 63 20 42 75 62 62 6c 65 44 69 61 67 72 61 6d  oc BubbleDiagram
3e90: 20 7b 6e 61 6d 65 20 7b 61 6e 6f 6e 79 6d 6f 75   {name {anonymou
3ea0: 73 5f 66 6c 61 67 20 30 7d 7d 20 7b 0a 20 20 67  s_flag 0}} {.  g
3eb0: 6c 6f 62 61 6c 20 68 64 0a 0a 20 20 23 69 66 20  lobal hd..  #if 
3ec0: 7b 21 24 61 6e 6f 6e 79 6d 6f 75 73 5f 66 6c 61  {!$anonymous_fla
3ed0: 67 7d 20 7b 0a 20 20 23 20 20 68 64 5f 72 65 73  g} {.  #  hd_res
3ee0: 6f 6c 76 65 20 22 3c 68 34 3e 5c 5b 24 6e 61 6d  olve "<h4>\[$nam
3ef0: 65 3a 5c 5d 3c 2f 68 34 3e 22 0a 20 20 23 7d 0a  e:\]</h4>".  #}.
3f00: 20 20 68 64 5f 72 65 73 6f 6c 76 65 20 22 3c 68    hd_resolve "<h
3f10: 34 3e 5c 5b 24 6e 61 6d 65 3a 5c 5d 3c 2f 68 34  4>\[$name:\]</h4
3f20: 3e 22 0a 20 20 73 65 74 20 61 6c 74 20 22 61 6c  >".  set alt "al
3f30: 74 3d 5c 22 73 79 6e 74 61 78 20 64 69 61 67 72  t=\"syntax diagr
3f40: 61 6d 20 24 6e 61 6d 65 5c 22 22 0a 20 20 69 66  am $name\"".  if
3f50: 20 7b 24 68 64 28 65 6e 61 62 6c 65 2d 6d 61 69   {$hd(enable-mai
3f60: 6e 29 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 24  n)} {.    puts $
3f70: 68 64 28 6d 61 69 6e 29 20 22 3c 62 6c 6f 63 6b  hd(main) "<block
3f80: 71 75 6f 74 65 3e 5c 0a 20 20 20 20 20 20 20 20  quote>\.        
3f90: 3c 69 6d 67 20 24 61 6c 74 20 73 72 63 3d 5c 22  <img $alt src=\"
3fa0: 24 68 64 28 72 6f 6f 74 70 61 74 68 2d 6d 61 69  $hd(rootpath-mai
3fb0: 6e 29 69 6d 61 67 65 73 2f 73 79 6e 74 61 78 2f  n)images/syntax/
3fc0: 24 6e 61 6d 65 2e 67 69 66 5c 22 3e 3c 2f 69 6d  $name.gif\"></im
3fd0: 67 3e 5c 0a 20 20 20 20 20 20 20 20 3c 2f 62 6c  g>\.        </bl
3fe0: 6f 63 6b 71 75 6f 74 65 3e 22 0a 20 20 7d 0a 20  ockquote>".  }. 
3ff0: 20 69 66 20 7b 24 68 64 28 65 6e 61 62 6c 65 2d   if {$hd(enable-
4000: 61 75 78 29 7d 20 7b 0a 20 20 20 20 70 75 74 73  aux)} {.    puts
4010: 20 24 68 64 28 61 75 78 29 20 22 3c 62 6c 6f 63   $hd(aux) "<bloc
4020: 6b 71 75 6f 74 65 3e 5c 0a 20 20 20 20 20 20 20  kquote>\.       
4030: 20 3c 69 6d 67 20 24 61 6c 74 20 73 72 63 3d 5c   <img $alt src=\
4040: 22 24 68 64 28 72 6f 6f 74 70 61 74 68 2d 61 75  "$hd(rootpath-au
4050: 78 29 69 6d 61 67 65 73 2f 73 79 6e 74 61 78 2f  x)images/syntax/
4060: 24 6e 61 6d 65 2e 67 69 66 5c 22 3e 3c 2f 69 6d  $name.gif\"></im
4070: 67 3e 5c 0a 20 20 20 20 20 20 20 20 3c 2f 62 6c  g>\.        </bl
4080: 6f 63 6b 71 75 6f 74 65 3e 22 0a 20 20 7d 0a 7d  ockquote>".  }.}
4090: 0a 0a 23 20 52 65 63 6f 72 64 20 61 20 72 65 71  ..# Record a req
40a0: 75 69 72 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  uirement.  This 
40b0: 70 72 6f 63 65 64 75 72 65 20 69 73 20 61 63 74  procedure is act
40c0: 69 76 65 20 6f 6e 6c 79 20 66 6f 72 20 74 68 65  ive only for the
40d0: 20 66 69 72 73 74 0a 23 20 70 61 73 73 2e 20 20   first.# pass.  
40e0: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 62  This procedure b
40f0: 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 20 66  ecomes a no-op f
4100: 6f 72 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  or the second pa
4110: 73 73 2e 20 20 44 75 72 69 6e 67 0a 23 20 74 68  ss.  During.# th
4120: 65 20 73 65 63 6f 6e 64 20 70 61 73 73 2c 20 72  e second pass, r
4130: 65 71 75 69 72 65 6d 65 6e 74 73 20 6c 69 73 74  equirements list
4140: 69 6e 67 20 72 65 70 6f 72 74 20 67 65 6e 65 72  ing report gener
4150: 61 74 6f 72 73 20 63 61 6e 20 75 73 65 20 74 68  ators can use th
4160: 65 0a 23 20 64 61 74 61 20 61 63 63 75 6d 75 6c  e.# data accumul
4170: 61 74 65 64 20 64 75 72 69 6e 67 20 74 68 65 20  ated during the 
4180: 66 69 72 73 74 20 70 61 73 73 20 74 6f 20 63 6f  first pass to co
4190: 6e 73 74 72 75 63 74 20 74 68 65 69 72 20 72 65  nstruct their re
41a0: 70 6f 72 74 73 2e 0a 23 0a 23 20 49 66 20 74 68  ports..#.# If th
41b0: 65 20 22 76 65 72 62 61 74 69 6d 22 20 61 72 67  e "verbatim" arg
41c0: 75 6d 65 6e 74 20 69 73 20 74 72 75 65 2c 20 74  ument is true, t
41d0: 68 65 6e 20 74 68 65 20 72 65 71 75 69 72 65 6d  hen the requirem
41e0: 65 6e 74 20 74 65 78 74 20 69 73 0a 23 20 72 65  ent text is.# re
41f0: 6e 64 65 72 65 64 20 61 73 20 69 73 2e 20 20 49  ndered as is.  I
4200: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
4210: 68 65 20 72 65 71 75 69 72 65 6d 65 6e 74 20 74  he requirement t
4220: 65 78 74 20 69 73 20 61 73 73 75 6d 65 64 20 74  ext is assumed t
4230: 6f 0a 23 20 62 65 20 76 61 6c 69 64 20 48 54 4d  o.# be valid HTM
4240: 4c 20 77 69 74 68 20 61 6c 6c 20 68 79 70 65 72  L with all hyper
4250: 6c 69 6e 6b 73 20 61 6c 72 65 61 64 79 20 72 65  links already re
4260: 73 6f 6c 76 65 64 2e 20 20 49 66 20 74 68 65 20  solved.  If the 
4270: 22 76 65 72 62 61 74 69 6d 22 0a 23 20 61 72 67  "verbatim".# arg
4280: 75 6d 65 6e 74 20 69 73 20 66 61 6c 73 65 20 28  ument is false (
4290: 74 68 65 20 64 65 66 61 75 6c 74 29 20 74 68 65  the default) the
42a0: 6e 20 74 68 65 20 72 65 71 75 69 72 65 6d 65 6e  n the requiremen
42b0: 74 20 74 65 78 74 20 69 73 20 72 65 6e 64 65 72  t text is render
42c0: 65 64 0a 23 20 75 73 69 6e 67 20 68 64 5f 72 65  ed.# using hd_re
42d0: 6e 64 65 72 20 77 68 69 63 68 20 77 69 6c 6c 20  nder which will 
42e0: 66 69 6e 64 20 61 6e 20 65 78 70 61 6e 64 20 68  find an expand h
42f0: 79 70 65 72 6c 69 6e 6b 73 20 77 69 74 68 69 6e  yperlinks within
4300: 20 74 68 65 20 74 65 78 74 2e 0a 23 0a 23 20 54   the text..#.# T
4310: 68 65 20 22 63 6f 6d 6d 65 6e 74 22 20 61 72 67  he "comment" arg
4320: 75 6d 65 6e 74 20 69 73 20 6e 6f 6e 2d 62 69 6e  ument is non-bin
4330: 64 69 6e 67 20 63 6f 6d 6d 65 6e 74 61 72 79 20  ding commentary 
4340: 61 6e 64 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  and explanation 
4350: 74 68 61 74 0a 23 20 61 63 63 6f 6d 70 61 6e 69  that.# accompani
4360: 65 73 20 74 68 65 20 72 65 71 75 69 72 65 6d 65  es the requireme
4370: 6e 74 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 72 65  nt..#.proc hd_re
4380: 71 75 69 72 65 6d 65 6e 74 20 7b 69 64 20 74 65  quirement {id te
4390: 78 74 20 64 65 72 69 76 65 64 66 72 6f 6d 20 63  xt derivedfrom c
43a0: 6f 6d 6d 65 6e 74 7d 20 7b 0a 20 20 67 6c 6f 62  omment} {.  glob
43b0: 61 6c 20 41 4c 4c 52 45 51 20 41 4c 4c 52 45 51  al ALLREQ ALLREQ
43c0: 5f 44 45 52 49 56 45 44 46 52 4f 4d 20 41 4c 4c  _DERIVEDFROM ALL
43d0: 52 45 51 5f 43 4f 4d 0a 20 20 69 66 20 7b 5b 69  REQ_COM.  if {[i
43e0: 6e 66 6f 20 65 78 69 73 74 73 20 41 4c 4c 52 45  nfo exists ALLRE
43f0: 51 28 24 69 64 29 5d 7d 20 7b 0a 20 20 20 20 70  Q($id)]} {.    p
4400: 75 74 73 20 73 74 64 65 72 72 20 22 64 75 70 6c  uts stderr "dupl
4410: 69 63 61 74 65 20 72 65 71 75 69 72 65 6d 65 6e  icate requiremen
4420: 74 20 6c 61 62 65 6c 3a 20 24 69 64 22 0a 20 20  t label: $id".  
4430: 7d 0a 20 20 73 65 74 20 41 4c 4c 52 45 51 5f 44  }.  set ALLREQ_D
4440: 45 52 49 56 45 44 46 52 4f 4d 28 24 69 64 29 20  ERIVEDFROM($id) 
4450: 24 64 65 72 69 76 65 64 66 72 6f 6d 0a 20 20 73  $derivedfrom.  s
4460: 65 74 20 41 4c 4c 52 45 51 28 24 69 64 29 20 24  et ALLREQ($id) $
4470: 74 65 78 74 0a 20 20 73 65 74 20 41 4c 4c 52 45  text.  set ALLRE
4480: 51 5f 43 4f 4d 28 24 69 64 29 20 24 63 6f 6d 6d  Q_COM($id) $comm
4490: 65 6e 74 0a 7d 0a 0a 23 20 52 65 61 64 20 61 20  ent.}..# Read a 
44a0: 62 6c 6f 63 6b 20 6f 66 20 72 65 71 75 69 72 65  block of require
44b0: 6d 65 6e 74 73 20 66 72 6f 6d 20 61 6e 20 41 53  ments from an AS
44c0: 43 49 49 20 74 65 78 74 20 66 69 6c 65 2e 20 20  CII text file.  
44d0: 53 74 6f 72 65 20 74 68 65 0a 23 20 69 6e 66 6f  Store the.# info
44e0: 72 6d 61 74 69 6f 6e 20 6f 62 74 61 69 6e 65 64  rmation obtained
44f0: 20 69 6e 20 61 20 67 6c 6f 62 61 6c 20 76 61 72   in a global var
4500: 69 61 62 6c 65 20 6e 61 6d 65 64 20 62 79 20 74  iable named by t
4510: 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65  he second parame
4520: 74 65 72 2e 0a 23 0a 70 72 6f 63 20 68 64 5f 72  ter..#.proc hd_r
4530: 65 61 64 5f 72 65 71 75 69 72 65 6d 65 6e 74 5f  ead_requirement_
4540: 66 69 6c 65 20 7b 66 69 6c 65 6e 61 6d 65 20 76  file {filename v
4550: 61 72 6e 61 6d 65 7d 20 7b 0a 20 20 67 6c 6f 62  arname} {.  glob
4560: 61 6c 20 68 64 5f 72 65 71 5f 72 64 72 0a 20 20  al hd_req_rdr.  
4570: 68 64 5f 72 65 73 65 74 5f 72 65 71 75 69 72 65  hd_reset_require
4580: 6d 65 6e 74 5f 72 65 61 64 65 72 0a 20 20 73 65  ment_reader.  se
4590: 74 20 69 6e 20 5b 6f 70 65 6e 20 24 66 69 6c 65  t in [open $file
45a0: 6e 61 6d 65 5d 0a 20 20 77 68 69 6c 65 20 7b 21  name].  while {!
45b0: 5b 65 6f 66 20 24 69 6e 5d 7d 20 7b 0a 20 20 20  [eof $in]} {.   
45c0: 20 73 65 74 20 6c 69 6e 65 20 5b 67 65 74 73 20   set line [gets 
45d0: 24 69 6e 5d 0a 20 20 20 20 69 66 20 7b 5b 72 65  $in].    if {[re
45e0: 67 65 78 70 20 7b 5e 28 48 4c 52 7c 55 4e 44 45  gexp {^(HLR|UNDE
45f0: 46 7c 53 59 53 52 45 51 29 20 2b 28 5b 4c 48 53  F|SYSREQ) +([LHS
4600: 55 5d 5c 64 2b 29 20 2a 28 2e 2a 29 7d 20 24 6c  U]\d+) *(.*)} $l
4610: 69 6e 65 20 61 6c 6c 20 74 79 70 65 20 72 6e 20  ine all type rn 
4620: 64 66 5d 7d 20 7b 0a 20 20 20 20 20 20 68 64 5f  df]} {.      hd_
4630: 61 64 64 5f 6f 6e 65 5f 72 65 71 75 69 72 65 6d  add_one_requirem
4640: 65 6e 74 20 24 76 61 72 6e 61 6d 65 0a 20 20 20  ent $varname.   
4650: 20 20 20 73 65 74 20 68 64 5f 72 65 71 5f 72 64     set hd_req_rd
4660: 72 28 72 6e 29 20 24 72 6e 0a 20 20 20 20 20 20  r(rn) $rn.      
4670: 73 65 74 20 68 64 5f 72 65 71 5f 72 64 72 28 64  set hd_req_rdr(d
4680: 65 72 69 76 65 64 29 20 24 64 66 0a 20 20 20 20  erived) $df.    
4690: 7d 20 65 6c 73 65 69 66 20 7b 5b 73 74 72 69 6e  } elseif {[strin
46a0: 67 20 74 72 69 6d 20 24 6c 69 6e 65 5d 3d 3d 22  g trim $line]=="
46b0: 22 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  "} {.      if {$
46c0: 68 64 5f 72 65 71 5f 72 64 72 28 62 6f 64 79 29  hd_req_rdr(body)
46d0: 3d 3d 22 22 7d 20 7b 0a 20 20 20 20 20 20 20 20  ==""} {.        
46e0: 73 65 74 20 68 64 5f 72 65 71 5f 72 64 72 28 62  set hd_req_rdr(b
46f0: 6f 64 79 29 20 24 68 64 5f 72 65 71 5f 72 64 72  ody) $hd_req_rdr
4700: 28 63 6f 6d 6d 65 6e 74 29 0a 20 20 20 20 20 20  (comment).      
4710: 20 20 73 65 74 20 68 64 5f 72 65 71 5f 72 64 72    set hd_req_rdr
4720: 28 63 6f 6d 6d 65 6e 74 29 20 7b 7d 0a 20 20 20  (comment) {}.   
4730: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
4740: 20 20 20 20 61 70 70 65 6e 64 20 68 64 5f 72 65      append hd_re
4750: 71 5f 72 64 72 28 63 6f 6d 6d 65 6e 74 29 20 5c  q_rdr(comment) \
4760: 6e 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  n.      }.    } 
4770: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 61 70 70  else {.      app
4780: 65 6e 64 20 68 64 5f 72 65 71 5f 72 64 72 28 63  end hd_req_rdr(c
4790: 6f 6d 6d 65 6e 74 29 20 24 6c 69 6e 65 5c 6e 0a  omment) $line\n.
47a0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 68 64 5f 61      }.  }.  hd_a
47b0: 64 64 5f 6f 6e 65 5f 72 65 71 75 69 72 65 6d 65  dd_one_requireme
47c0: 6e 74 20 24 76 61 72 6e 61 6d 65 0a 20 20 63 6c  nt $varname.  cl
47d0: 6f 73 65 20 24 69 6e 0a 20 20 0a 7d 0a 70 72 6f  ose $in.  .}.pro
47e0: 63 20 68 64 5f 72 65 73 65 74 5f 72 65 71 75 69  c hd_reset_requi
47f0: 72 65 6d 65 6e 74 5f 72 65 61 64 65 72 20 7b 7d  rement_reader {}
4800: 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 68 64 5f 72   {.  global hd_r
4810: 65 71 5f 72 64 72 0a 20 20 73 65 74 20 68 64 5f  eq_rdr.  set hd_
4820: 72 65 71 5f 72 64 72 28 72 6e 29 20 7b 7d 0a 20  req_rdr(rn) {}. 
4830: 20 73 65 74 20 68 64 5f 72 65 71 5f 72 64 72 28   set hd_req_rdr(
4840: 63 6f 6d 6d 65 6e 74 29 20 7b 7d 0a 20 20 73 65  comment) {}.  se
4850: 74 20 68 64 5f 72 65 71 5f 72 64 72 28 62 6f 64  t hd_req_rdr(bod
4860: 79 29 20 7b 7d 0a 20 20 73 65 74 20 68 64 5f 72  y) {}.  set hd_r
4870: 65 71 5f 72 64 72 28 64 65 72 69 76 65 64 29 20  eq_rdr(derived) 
4880: 7b 7d 0a 7d 0a 70 72 6f 63 20 68 64 5f 61 64 64  {}.}.proc hd_add
4890: 5f 6f 6e 65 5f 72 65 71 75 69 72 65 6d 65 6e 74  _one_requirement
48a0: 20 7b 76 61 72 6e 61 6d 65 7d 20 7b 0a 20 20 67   {varname} {.  g
48b0: 6c 6f 62 61 6c 20 68 64 5f 72 65 71 5f 72 64 72  lobal hd_req_rdr
48c0: 0a 20 20 73 65 74 20 72 6e 20 24 68 64 5f 72 65  .  set rn $hd_re
48d0: 71 5f 72 64 72 28 72 6e 29 0a 20 20 69 66 20 7b  q_rdr(rn).  if {
48e0: 24 72 6e 21 3d 22 22 7d 20 7b 0a 20 20 20 20 69  $rn!=""} {.    i
48f0: 66 20 7b 24 68 64 5f 72 65 71 5f 72 64 72 28 62  f {$hd_req_rdr(b
4900: 6f 64 79 29 3d 3d 22 22 7d 20 7b 0a 20 20 20 20  ody)==""} {.    
4910: 20 20 73 65 74 20 68 64 5f 72 65 71 5f 72 64 72    set hd_req_rdr
4920: 28 62 6f 64 79 29 20 24 68 64 5f 72 65 71 5f 72  (body) $hd_req_r
4930: 64 72 28 63 6f 6d 6d 65 6e 74 29 0a 20 20 20 20  dr(comment).    
4940: 20 20 73 65 74 20 68 64 5f 72 65 71 5f 72 64 72    set hd_req_rdr
4950: 28 63 6f 6d 6d 65 6e 74 29 20 7b 7d 0a 20 20 20  (comment) {}.   
4960: 20 7d 0a 20 20 20 20 73 65 74 20 62 20 5b 73 74   }.    set b [st
4970: 72 69 6e 67 20 74 72 69 6d 20 24 68 64 5f 72 65  ring trim $hd_re
4980: 71 5f 72 64 72 28 62 6f 64 79 29 5d 0a 20 20 20  q_rdr(body)].   
4990: 20 73 65 74 20 63 20 5b 73 74 72 69 6e 67 20 74   set c [string t
49a0: 72 69 6d 20 24 68 64 5f 72 65 71 5f 72 64 72 28  rim $hd_req_rdr(
49b0: 63 6f 6d 6d 65 6e 74 29 5d 0a 20 20 20 20 73 65  comment)].    se
49c0: 74 20 3a 3a 24 7b 76 61 72 6e 61 6d 65 7d 28 24  t ::${varname}($
49d0: 72 6e 29 20 5b 6c 69 73 74 20 24 68 64 5f 72 65  rn) [list $hd_re
49e0: 71 5f 72 64 72 28 64 65 72 69 76 65 64 29 20 24  q_rdr(derived) $
49f0: 62 20 24 63 5d 0a 20 20 20 20 6c 61 70 70 65 6e  b $c].    lappen
4a00: 64 20 3a 3a 24 7b 76 61 72 6e 61 6d 65 7d 28 2a  d ::${varname}(*
4a10: 29 20 24 72 6e 0a 20 20 7d 0a 20 20 68 64 5f 72  ) $rn.  }.  hd_r
4a20: 65 73 65 74 5f 72 65 71 75 69 72 65 6d 65 6e 74  eset_requirement
4a30: 5f 72 65 61 64 65 72 0a 7d 0a 0a 23 20 46 69 72  _reader.}..# Fir
4a40: 73 74 20 70 61 73 73 2e 20 20 50 72 6f 63 65 73  st pass.  Proces
4a50: 73 20 61 6c 6c 20 66 69 6c 65 73 2e 20 20 42 75  s all files.  Bu
4a60: 74 20 64 6f 20 6e 6f 74 20 72 65 6e 64 65 72 20  t do not render 
4a70: 68 79 70 65 72 6c 69 6e 6b 73 2e 0a 23 20 4d 65  hyperlinks..# Me
4a80: 72 65 6c 79 20 63 6f 6c 6c 65 63 74 20 6b 65 79  rely collect key
4a90: 77 6f 72 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  word information
4aa0: 20 73 6f 20 74 68 61 74 20 68 79 70 65 72 6c 69   so that hyperli
4ab0: 6e 6b 73 20 63 61 6e 20 62 65 0a 23 20 63 6f 72  nks can be.# cor
4ac0: 72 65 63 74 6c 79 20 72 65 6e 64 65 72 65 64 20  rectly rendered 
4ad0: 6f 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  on the second pa
4ae0: 73 73 2e 0a 23 0a 66 6f 72 65 61 63 68 20 69 6e  ss..#.foreach in
4af0: 66 69 6c 65 20 5b 6c 72 61 6e 67 65 20 24 61 72  file [lrange $ar
4b00: 67 76 20 33 20 65 6e 64 5d 20 7b 0a 20 20 63 64  gv 3 end] {.  cd
4b10: 20 24 48 4f 4d 45 44 49 52 0a 20 20 70 75 74 73   $HOMEDIR.  puts
4b20: 20 22 50 72 6f 63 65 73 73 69 6e 67 20 24 69 6e   "Processing $in
4b30: 66 69 6c 65 22 0a 20 20 73 65 74 20 66 64 20 5b  file".  set fd [
4b40: 6f 70 65 6e 20 24 69 6e 66 69 6c 65 20 72 5d 0a  open $infile r].
4b50: 20 20 73 65 74 20 69 6e 20 5b 72 65 61 64 20 24    set in [read $
4b60: 66 64 5d 0a 20 20 63 6c 6f 73 65 20 24 66 64 0a  fd].  close $fd.
4b70: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 66 69    if {[string fi
4b80: 72 73 74 20 3c 74 61 62 6c 65 5f 6f 66 5f 63 6f  rst <table_of_co
4b90: 6e 74 65 6e 74 73 3e 20 24 69 6e 5d 3e 3d 30 7d  ntents> $in]>=0}
4ba0: 20 7b 20 73 65 74 20 69 6e 20 5b 61 64 64 74 6f   { set in [addto
4bb0: 63 20 24 69 6e 5d 20 7d 0a 20 20 73 65 74 20 74  c $in] }.  set t
4bc0: 69 74 6c 65 20 7b 4e 6f 20 54 69 74 6c 65 7d 0a  itle {No Title}.
4bd0: 20 20 72 65 67 65 78 70 20 7b 3c 74 69 74 6c 65    regexp {<title
4be0: 3e 28 5b 5e 5c 6e 5d 2a 29 3c 2f 74 69 74 6c 65  >([^\n]*)</title
4bf0: 3e 7d 20 24 69 6e 20 61 6c 6c 20 74 69 74 6c 65  >} $in all title
4c00: 0a 20 20 72 65 67 73 75 62 20 7b 3c 74 69 74 6c  .  regsub {<titl
4c10: 65 3e 5b 5e 5c 6e 5d 2a 3c 2f 74 69 74 6c 65 3e  e>[^\n]*</title>
4c20: 7d 20 24 69 6e 20 7b 7d 20 69 6e 0a 20 20 73 65  } $in {} in.  se
4c30: 74 20 6f 75 74 66 69 6c 65 20 5b 66 69 6c 65 20  t outfile [file 
4c40: 72 6f 6f 74 20 5b 66 69 6c 65 20 74 61 69 6c 20  root [file tail 
4c50: 24 69 6e 66 69 6c 65 5d 5d 2e 68 74 6d 6c 0a 20  $infile]].html. 
4c60: 20 68 64 5f 6f 70 65 6e 5f 6d 61 69 6e 20 24 6f   hd_open_main $o
4c70: 75 74 66 69 6c 65 0a 20 20 64 62 20 65 76 61 6c  utfile.  db eval
4c80: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
4c90: 54 4f 20 70 61 67 65 28 66 69 6c 65 6e 61 6d 65  TO page(filename
4ca0: 2c 70 61 67 65 74 69 74 6c 65 29 0a 20 20 20 20  ,pagetitle).    
4cb0: 56 41 4c 55 45 53 28 24 6f 75 74 66 69 6c 65 2c  VALUES($outfile,
4cc0: 24 74 69 74 6c 65 29 3b 0a 20 20 7d 0a 20 20 73  $title);.  }.  s
4cd0: 65 74 20 68 28 70 61 67 65 69 64 29 20 5b 64 62  et h(pageid) [db
4ce0: 20 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77   last_insert_row
4cf0: 69 64 5d 0a 20 20 68 64 5f 68 65 61 64 65 72 20  id].  hd_header 
4d00: 24 74 69 74 6c 65 20 24 69 6e 66 69 6c 65 0a 20  $title $infile. 
4d10: 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 74   regsub -all {<t
4d20: 63 6c 3e 7d 20 24 69 6e 20 22 5c 31 37 35 3b 20  cl>} $in "\175; 
4d30: 65 76 61 6c 20 5c 31 37 33 22 20 69 6e 0a 20 20  eval \173" in.  
4d40: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 2f 74  regsub -all {</t
4d50: 63 6c 3e 7d 20 24 69 6e 20 22 5c 31 37 35 3b 20  cl>} $in "\175; 
4d60: 68 64 5f 70 75 74 73 20 5c 31 37 33 22 20 69 6e  hd_puts \173" in
4d70: 0a 20 20 65 76 61 6c 20 22 68 64 5f 70 75 74 73  .  eval "hd_puts
4d80: 20 5c 31 37 33 24 69 6e 5c 31 37 35 22 0a 20 20   \173$in\175".  
4d90: 63 64 20 24 3a 3a 48 4f 4d 45 44 49 52 0a 20 20  cd $::HOMEDIR.  
4da0: 68 64 5f 63 6c 6f 73 65 5f 6d 61 69 6e 0a 7d 0a  hd_close_main.}.
4db0: 0a 23 20 53 65 63 6f 6e 64 20 70 61 73 73 2e 20  .# Second pass. 
4dc0: 20 50 72 6f 63 65 73 73 20 61 6c 6c 20 66 69 6c   Process all fil
4dd0: 65 73 20 61 67 61 69 6e 2e 20 20 54 68 69 73 20  es again.  This 
4de0: 74 69 6d 65 20 72 65 6e 64 65 72 20 68 79 70 65  time render hype
4df0: 72 6c 69 6e 6b 73 0a 23 20 61 63 63 6f 72 64 69  rlinks.# accordi
4e00: 6e 67 20 74 6f 20 74 68 65 20 6b 65 79 77 6f 72  ng to the keywor
4e10: 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 6f  d information co
4e20: 6c 6c 65 63 74 65 64 20 6f 6e 20 74 68 65 20 66  llected on the f
4e30: 69 72 73 74 20 70 61 73 73 2e 0a 23 0a 70 72 6f  irst pass..#.pro
4e40: 63 20 68 64 5f 6b 65 79 77 6f 72 64 73 20 7b 61  c hd_keywords {a
4e50: 72 67 73 7d 20 7b 7d 0a 72 65 6e 61 6d 65 20 68  rgs} {}.rename h
4e60: 64 5f 72 65 73 6f 6c 76 65 20 7b 7d 0a 72 65 6e  d_resolve {}.ren
4e70: 61 6d 65 20 68 64 5f 72 65 73 6f 6c 76 65 5f 32  ame hd_resolve_2
4e80: 6e 64 70 61 73 73 20 68 64 5f 72 65 73 6f 6c 76  ndpass hd_resolv
4e90: 65 0a 70 72 6f 63 20 68 64 5f 72 65 71 75 69 72  e.proc hd_requir
4ea0: 65 6d 65 6e 74 20 7b 61 72 67 73 7d 20 7b 7d 0a  ement {args} {}.
4eb0: 66 6f 72 65 61 63 68 20 69 6e 66 69 6c 65 20 5b  foreach infile [
4ec0: 6c 72 61 6e 67 65 20 24 61 72 67 76 20 33 20 65  lrange $argv 3 e
4ed0: 6e 64 5d 20 7b 0a 20 20 63 64 20 24 48 4f 4d 45  nd] {.  cd $HOME
4ee0: 44 49 52 0a 20 20 70 75 74 73 20 22 50 72 6f 63  DIR.  puts "Proc
4ef0: 65 73 73 69 6e 67 20 24 69 6e 66 69 6c 65 22 0a  essing $infile".
4f00: 20 20 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 24    set fd [open $
4f10: 69 6e 66 69 6c 65 20 72 5d 0a 20 20 73 65 74 20  infile r].  set 
4f20: 69 6e 20 5b 72 65 61 64 20 24 66 64 5d 0a 20 20  in [read $fd].  
4f30: 63 6c 6f 73 65 20 24 66 64 0a 20 20 69 66 20 7b  close $fd.  if {
4f40: 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20 3c 74  [string first <t
4f50: 61 62 6c 65 5f 6f 66 5f 63 6f 6e 74 65 6e 74 73  able_of_contents
4f60: 3e 20 24 69 6e 5d 3e 3d 30 7d 20 7b 20 73 65 74  > $in]>=0} { set
4f70: 20 69 6e 20 5b 61 64 64 74 6f 63 20 24 69 6e 5d   in [addtoc $in]
4f80: 20 7d 0a 20 20 73 65 74 20 74 69 74 6c 65 20 7b   }.  set title {
4f90: 4e 6f 20 54 69 74 6c 65 7d 0a 20 20 72 65 67 65  No Title}.  rege
4fa0: 78 70 20 7b 3c 74 69 74 6c 65 3e 28 5b 5e 5c 6e  xp {<title>([^\n
4fb0: 5d 2a 29 3c 2f 74 69 74 6c 65 3e 7d 20 24 69 6e  ]*)</title>} $in
4fc0: 20 61 6c 6c 20 74 69 74 6c 65 0a 20 20 72 65 67   all title.  reg
4fd0: 73 75 62 20 7b 3c 74 69 74 6c 65 3e 5b 5e 5c 6e  sub {<title>[^\n
4fe0: 5d 2a 3c 2f 74 69 74 6c 65 3e 7d 20 24 69 6e 20  ]*</title>} $in 
4ff0: 7b 7d 20 69 6e 0a 20 20 73 65 74 20 6f 75 74 66  {} in.  set outf
5000: 69 6c 65 20 5b 66 69 6c 65 20 72 6f 6f 74 20 5b  ile [file root [
5010: 66 69 6c 65 20 74 61 69 6c 20 24 69 6e 66 69 6c  file tail $infil
5020: 65 5d 5d 2e 68 74 6d 6c 0a 20 20 68 64 5f 6f 70  e]].html.  hd_op
5030: 65 6e 5f 6d 61 69 6e 20 24 6f 75 74 66 69 6c 65  en_main $outfile
5040: 0a 20 20 68 64 5f 68 65 61 64 65 72 20 24 74 69  .  hd_header $ti
5050: 74 6c 65 20 24 69 6e 66 69 6c 65 0a 20 20 72 65  tle $infile.  re
5060: 67 73 75 62 20 2d 61 6c 6c 20 7b 3c 74 63 6c 3e  gsub -all {<tcl>
5070: 7d 20 24 69 6e 20 22 5c 31 37 35 3b 20 65 76 61  } $in "\175; eva
5080: 6c 20 5c 31 37 33 22 20 69 6e 0a 20 20 72 65 67  l \173" in.  reg
5090: 73 75 62 20 2d 61 6c 6c 20 7b 3c 2f 74 63 6c 3e  sub -all {</tcl>
50a0: 7d 20 24 69 6e 20 22 5c 31 37 35 3b 20 68 64 5f  } $in "\175; hd_
50b0: 72 65 73 6f 6c 76 65 20 5c 31 37 33 22 20 69 6e  resolve \173" in
50c0: 0a 20 20 65 76 61 6c 20 22 68 64 5f 72 65 73 6f  .  eval "hd_reso
50d0: 6c 76 65 20 5c 31 37 33 24 69 6e 5c 31 37 35 22  lve \173$in\175"
50e0: 0a 20 20 63 64 20 24 3a 3a 48 4f 4d 45 44 49 52  .  cd $::HOMEDIR
50f0: 0a 20 20 68 64 5f 63 6c 6f 73 65 5f 6d 61 69 6e  .  hd_close_main
5100: 0a 7d 0a 0a 23 20 47 65 6e 65 72 61 74 65 20 61  .}..# Generate a
5110: 20 64 6f 63 75 6d 65 6e 74 20 73 68 6f 77 69 6e   document showin
5120: 67 20 74 68 65 20 68 79 70 65 72 6c 69 6e 6b 20  g the hyperlink 
5130: 6b 65 79 77 6f 72 64 73 20 61 6e 64 20 74 68 65  keywords and the
5140: 69 72 0a 23 20 74 61 72 67 65 74 73 2e 0a 23 0a  ir.# targets..#.
5150: 68 64 5f 6f 70 65 6e 5f 6d 61 69 6e 20 64 6f 63  hd_open_main doc
5160: 5f 6b 65 79 77 6f 72 64 5f 63 72 6f 73 73 72 65  _keyword_crossre
5170: 66 2e 68 74 6d 6c 0a 68 64 5f 68 65 61 64 65 72  f.html.hd_header
5180: 20 7b 4b 65 79 77 6f 72 64 20 43 72 6f 73 73 72   {Keyword Crossr
5190: 65 66 65 72 65 6e 63 65 7d 20 24 44 4f 43 2f 77  eference} $DOC/w
51a0: 72 61 70 2e 74 63 6c 0a 68 64 5f 70 75 74 73 20  rap.tcl.hd_puts 
51b0: 22 3c 75 6c 3e 22 0a 66 6f 72 65 61 63 68 20 78  "<ul>".foreach x
51c0: 20 5b 6c 73 6f 72 74 20 2d 64 69 63 74 20 5b 61   [lsort -dict [a
51d0: 72 72 61 79 20 6e 61 6d 65 73 20 67 6c 69 6e 6b  rray names glink
51e0: 5d 5d 20 7b 0a 20 20 73 65 74 20 79 20 24 67 6c  ]] {.  set y $gl
51f0: 69 6e 6b 28 24 78 29 0a 20 20 68 64 5f 70 75 74  ink($x).  hd_put
5200: 73 20 22 3c 6c 69 3e 24 78 20 2d 20 3c 61 20 68  s "<li>$x - <a h
5210: 72 65 66 3d 5c 22 24 79 5c 22 3e 24 79 3c 2f 61  ref=\"$y\">$y</a
5220: 3e 3c 2f 6c 69 3e 22 0a 20 20 6c 61 70 70 65 6e  ></li>".  lappen
5230: 64 20 72 65 76 67 6c 69 6e 6b 28 24 79 29 20 24  d revglink($y) $
5240: 78 0a 7d 0a 68 64 5f 70 75 74 73 20 22 3c 2f 75  x.}.hd_puts "</u
5250: 6c 3e 22 0a 68 64 5f 63 6c 6f 73 65 5f 6d 61 69  l>".hd_close_mai
5260: 6e 0a 0a 68 64 5f 6f 70 65 6e 5f 6d 61 69 6e 20  n..hd_open_main 
5270: 64 6f 63 5f 74 61 72 67 65 74 5f 63 72 6f 73 73  doc_target_cross
5280: 72 65 66 2e 68 74 6d 6c 0a 68 64 5f 68 65 61 64  ref.html.hd_head
5290: 65 72 20 7b 54 61 72 67 65 74 20 43 72 6f 73 73  er {Target Cross
52a0: 72 65 66 65 72 65 6e 63 65 7d 20 24 44 4f 43 2f  reference} $DOC/
52b0: 77 72 61 70 2e 74 63 6c 0a 68 64 5f 70 75 74 73  wrap.tcl.hd_puts
52c0: 20 22 3c 75 6c 3e 22 0a 66 6f 72 65 61 63 68 20   "<ul>".foreach 
52d0: 79 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20  y [lsort [array 
52e0: 6e 61 6d 65 73 20 72 65 76 67 6c 69 6e 6b 5d 5d  names revglink]]
52f0: 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 22 3c 6c   {.  hd_puts "<l
5300: 69 3e 3c 61 20 68 72 65 66 3d 5c 22 24 79 5c 22  i><a href=\"$y\"
5310: 3e 24 79 3c 2f 61 3e 20 2d 20 5b 6c 73 6f 72 74  >$y</a> - [lsort
5320: 20 24 72 65 76 67 6c 69 6e 6b 28 24 79 29 5d 3c   $revglink($y)]<
5330: 2f 6c 69 3e 22 0a 7d 0a 68 64 5f 70 75 74 73 20  /li>".}.hd_puts 
5340: 22 3c 2f 75 6c 3e 22 0a 68 64 5f 63 6c 6f 73 65  "</ul>".hd_close
5350: 5f 6d 61 69 6e 0a 0a 68 64 5f 6f 70 65 6e 5f 6d  _main..hd_open_m
5360: 61 69 6e 20 64 6f 63 5f 62 61 63 6b 6c 69 6e 6b  ain doc_backlink
5370: 5f 63 72 6f 73 73 72 65 66 2e 68 74 6d 6c 0a 68  _crossref.html.h
5380: 64 5f 68 65 61 64 65 72 20 7b 42 61 63 6b 6c 69  d_header {Backli
5390: 6e 6b 20 43 72 6f 73 73 72 65 66 65 72 65 6e 63  nk Crossreferenc
53a0: 65 7d 20 24 44 4f 43 2f 77 72 61 70 2e 74 63 6c  e} $DOC/wrap.tcl
53b0: 0a 68 64 5f 70 75 74 73 20 22 3c 75 6c 3e 22 0a  .hd_puts "<ul>".
53c0: 66 6f 72 65 61 63 68 20 6b 77 20 5b 6c 73 6f 72  foreach kw [lsor
53d0: 74 20 2d 6e 6f 63 61 73 65 20 5b 61 72 72 61 79  t -nocase [array
53e0: 20 6e 61 6d 65 73 20 62 61 63 6b 6c 69 6e 6b 5d   names backlink]
53f0: 5d 20 7b 0a 20 20 68 64 5f 70 75 74 73 20 22 3c  ] {.  hd_puts "<
5400: 6c 69 3e 24 6b 77 20 2d 22 0a 20 20 73 65 74 20  li>$kw -".  set 
5410: 70 72 65 76 20 7b 7d 0a 20 20 66 6f 72 65 61 63  prev {}.  foreac
5420: 68 20 72 65 66 20 5b 6c 73 6f 72 74 20 24 62 61  h ref [lsort $ba
5430: 63 6b 6c 69 6e 6b 28 24 6b 77 29 5d 20 7b 0a 20  cklink($kw)] {. 
5440: 20 20 20 69 66 20 7b 24 72 65 66 3d 3d 24 70 72     if {$ref==$pr
5450: 65 76 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20  ev} continue.   
5460: 20 73 65 74 20 70 72 65 76 20 24 72 65 66 0a 20   set prev $ref. 
5470: 20 20 20 68 64 5f 70 75 74 73 20 22 20 20 3c 61     hd_puts "  <a
5480: 20 68 72 65 66 3d 5c 22 24 72 65 66 5c 22 3e 24   href=\"$ref\">$
5490: 72 65 66 3c 2f 61 3e 22 0a 20 20 7d 0a 7d 0a 68  ref</a>".  }.}.h
54a0: 64 5f 70 75 74 73 20 22 3c 2f 75 6c 3e 22 0a 68  d_puts "</ul>".h
54b0: 64 5f 63 6c 6f 73 65 5f 6d 61 69 6e 0a 0a 68 64  d_close_main..hd
54c0: 5f 6f 70 65 6e 5f 6d 61 69 6e 20 64 6f 63 5f 70  _open_main doc_p
54d0: 61 67 65 6c 69 6e 6b 5f 63 72 6f 73 73 72 65 66  agelink_crossref
54e0: 2e 68 74 6d 6c 0a 68 64 5f 68 65 61 64 65 72 20  .html.hd_header 
54f0: 7b 50 61 67 65 6c 69 6e 6b 20 43 72 6f 73 73 72  {Pagelink Crossr
5500: 65 66 65 72 65 6e 63 65 7d 20 24 44 4f 43 2f 77  eference} $DOC/w
5510: 72 61 70 2e 74 63 6c 0a 68 64 5f 70 75 74 73 20  rap.tcl.hd_puts 
5520: 22 3c 70 3e 54 61 72 67 65 74 20 50 61 67 65 20  "<p>Target Page 
5530: 2d 20 57 68 69 63 68 20 70 61 67 65 73 20 72 65  - Which pages re
5540: 66 65 72 65 6e 63 65 20 69 74 2e 3c 2f 70 3e 22  ference it.</p>"
5550: 0a 68 64 5f 70 75 74 73 20 22 3c 70 3e 50 61 67  .hd_puts "<p>Pag
5560: 65 73 20 6d 61 74 63 68 69 6e 67 20 28 6e 65 77  es matching (new
5570: 73 7c 63 68 61 6e 67 65 73 7c 72 65 6c 65 61 73  s|changes|releas
5580: 65 6c 6f 67 7c 5c 5b 30 2d 39 5d 74 6f 5c 5b 30  elog|\[0-9]to\[0
5590: 2d 39 5d 7c 26 23 39 34 3b 64 6f 63 5f 2e 2a 5f  -9]|&#94;doc_.*_
55a0: 63 72 6f 73 73 72 65 66 29 20 61 72 65 20 73 6b  crossref) are sk
55b0: 69 70 70 65 64 2e 3c 2f 70 3e 22 0a 68 64 5f 70  ipped.</p>".hd_p
55c0: 75 74 73 20 22 3c 75 6c 3e 22 0a 66 6f 72 65 61  uts "<ul>".forea
55d0: 63 68 20 79 20 5b 6c 73 6f 72 74 20 5b 61 72 72  ch y [lsort [arr
55e0: 61 79 20 6e 61 6d 65 73 20 72 65 76 67 6c 69 6e  ay names revglin
55f0: 6b 5d 5d 20 7b 0a 20 20 72 65 67 73 75 62 20 7b  k]] {.  regsub {
5600: 23 2e 2a 7d 20 24 79 20 7b 7d 20 79 32 0a 20 20  #.*} $y {} y2.  
5610: 66 6f 72 65 61 63 68 20 6b 77 20 5b 6c 73 6f 72  foreach kw [lsor
5620: 74 20 24 72 65 76 67 6c 69 6e 6b 28 24 79 29 5d  t $revglink($y)]
5630: 20 7b 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f   {.    if {[info
5640: 20 65 78 69 73 74 73 20 62 61 63 6b 6c 69 6e 6b   exists backlink
5650: 28 24 6b 77 29 5d 7d 20 7b 0a 20 20 20 20 20 20  ($kw)]} {.      
5660: 66 6f 72 65 61 63 68 20 72 65 66 20 5b 6c 73 6f  foreach ref [lso
5670: 72 74 20 24 62 61 63 6b 6c 69 6e 6b 28 24 6b 77  rt $backlink($kw
5680: 29 5d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 67  )] {.        reg
5690: 73 75 62 20 7b 23 2e 2a 7d 20 24 72 65 66 20 7b  sub {#.*} $ref {
56a0: 7d 20 72 65 66 32 0a 20 20 20 20 20 20 20 20 6c  } ref2.        l
56b0: 61 70 70 65 6e 64 20 70 61 67 65 6c 69 6e 6b 28  append pagelink(
56c0: 24 79 32 29 20 24 72 65 66 32 0a 20 20 20 20 20  $y2) $ref2.     
56d0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 66   }.    }.  }.}.f
56e0: 6f 72 65 61 63 68 20 79 20 5b 6c 73 6f 72 74 20  oreach y [lsort 
56f0: 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 70 61 67  [array names pag
5700: 65 6c 69 6e 6b 5d 5d 20 7b 0a 20 20 69 66 20 7b  elink]] {.  if {
5710: 5b 72 65 67 65 78 70 20 7b 28 6e 65 77 73 7c 63  [regexp {(news|c
5720: 68 61 6e 67 65 73 7c 72 65 6c 65 61 73 65 6c 6f  hanges|releaselo
5730: 67 7c 5b 30 2d 39 5d 74 6f 5b 30 2d 39 5d 7c 5e  g|[0-9]to[0-9]|^
5740: 64 6f 63 5f 2e 2a 5f 63 72 6f 73 73 72 65 66 29  doc_.*_crossref)
5750: 7d 20 24 79 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  } $y]} continue.
5760: 20 20 68 64 5f 70 75 74 73 20 22 3c 6c 69 3e 3c    hd_puts "<li><
5770: 61 20 68 72 65 66 3d 5c 22 24 79 5c 22 3e 24 79  a href=\"$y\">$y
5780: 3c 2f 61 3e 20 2d 20 22 0a 20 20 73 65 74 20 70  </a> - ".  set p
5790: 72 65 76 20 7b 7d 0a 20 20 66 6f 72 65 61 63 68  rev {}.  foreach
57a0: 20 72 65 66 20 5b 6c 73 6f 72 74 20 24 70 61 67   ref [lsort $pag
57b0: 65 6c 69 6e 6b 28 24 79 29 5d 20 7b 0a 20 20 20  elink($y)] {.   
57c0: 20 69 66 20 7b 24 72 65 66 3d 3d 24 70 72 65 76   if {$ref==$prev
57d0: 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 69  } continue.    i
57e0: 66 20 7b 24 72 65 66 3d 3d 24 79 7d 20 63 6f 6e  f {$ref==$y} con
57f0: 74 69 6e 75 65 0a 20 20 20 20 69 66 20 7b 5b 72  tinue.    if {[r
5800: 65 67 65 78 70 20 7b 28 6e 65 77 73 7c 63 68 61  egexp {(news|cha
5810: 6e 67 65 73 7c 72 65 6c 65 61 73 65 6c 6f 67 7c  nges|releaselog|
5820: 5b 30 2d 39 5d 74 6f 5b 30 2d 39 5d 7c 5e 64 6f  [0-9]to[0-9]|^do
5830: 63 5f 2e 2a 5f 63 72 6f 73 73 72 65 66 29 7d 20  c_.*_crossref)} 
5840: 24 72 65 66 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  $ref]} continue.
5850: 20 20 20 20 68 64 5f 70 75 74 73 20 22 3c 61 20      hd_puts "<a 
5860: 68 72 65 66 3d 5c 22 24 72 65 66 5c 22 3e 24 72  href=\"$ref\">$r
5870: 65 66 3c 2f 61 3e 20 22 0a 20 20 20 20 73 65 74  ef</a> ".    set
5880: 20 70 72 65 76 20 24 72 65 66 0a 20 20 7d 0a 20   prev $ref.  }. 
5890: 20 68 64 5f 70 75 74 73 20 22 3c 2f 6c 69 3e 22   hd_puts "</li>"
58a0: 0a 7d 0a 68 64 5f 70 75 74 73 20 22 3c 2f 75 6c  .}.hd_puts "</ul
58b0: 3e 22 0a 68 64 5f 63 6c 6f 73 65 5f 6d 61 69 6e  >".hd_close_main
58c0: 0a 64 62 20 65 76 61 6c 20 43 4f 4d 4d 49 54 0a  .db eval COMMIT.