Documentation Source Text

Hex Artifact Content
Login

Artifact 9dd1031554fa8bfc441328a4a5a2f0553e86a7a6:


0000: 23 21 74 63 6c 73 68 0a 23 0a 23 20 52 75 6e 20  #!tclsh.#.# Run 
0010: 74 68 69 73 20 73 63 72 69 70 74 20 74 6f 20 63  this script to c
0020: 72 65 61 74 65 20 74 77 6f 20 64 61 74 61 62 61  reate two databa
0030: 73 65 20 66 69 6c 65 73 20 22 64 6f 63 69 6e 66  se files "docinf
0040: 6f 2e 64 62 22 20 61 6e 64 20 22 68 69 73 74 6f  o.db" and "histo
0050: 72 69 63 61 6c 2e 64 62 22 0a 23 20 77 69 74 68  rical.db".# with
0060: 20 61 70 70 72 6f 70 72 69 61 74 65 20 73 63 68   appropriate sch
0070: 65 6d 61 73 2e 0a 23 0a 73 71 6c 69 74 65 33 20  emas..#.sqlite3 
0080: 64 62 20 64 6f 63 69 6e 66 6f 2e 64 62 0a 64 62  db docinfo.db.db
0090: 20 65 76 61 6c 20 7b 0a 20 20 42 45 47 49 4e 3b   eval {.  BEGIN;
00a0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 45 76 65 72  ..  /*.  ** Ever
00b0: 79 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 6f  y page in the do
00c0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 73 65 74 20  cumentation set 
00d0: 69 73 20 61 20 72 6f 77 20 69 6e 20 74 68 65 20  is a row in the 
00e0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 3a  following table:
00f0: 0a 20 20 2a 2f 0a 20 20 43 52 45 41 54 45 20 54  .  */.  CREATE T
0100: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53  ABLE IF NOT EXIS
0110: 54 53 20 70 61 67 65 28 0a 20 20 20 20 70 61 67  TS page(.    pag
0120: 65 69 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d  eid INTEGER PRIM
0130: 41 52 59 20 4b 45 59 2c 20 20 20 20 20 20 20 20  ARY KEY,        
0140: 20 20 20 2d 2d 20 49 44 20 66 6f 72 20 69 6e 74     -- ID for int
0150: 65 72 6e 61 6c 20 75 73 65 20 6f 6e 6c 79 0a 20  ernal use only. 
0160: 20 20 20 70 61 67 65 74 69 74 6c 65 20 54 45 58     pagetitle TEX
0170: 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  T,              
0180: 20 20 20 20 20 20 20 20 20 2d 2d 20 42 72 69 65           -- Brie
0190: 66 20 74 69 74 6c 65 20 6f 66 20 74 68 65 20 70  f title of the p
01a0: 61 67 65 0a 20 20 20 20 70 61 67 65 61 62 73 74  age.    pageabst
01b0: 72 61 63 74 20 54 45 58 54 2c 20 20 20 20 20 20  ract TEXT,      
01c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
01d0: 20 56 65 72 62 6f 73 65 20 74 69 74 6c 65 20 6f   Verbose title o
01e0: 66 20 74 68 65 20 70 61 67 65 0a 20 20 20 20 66  f the page.    f
01f0: 69 6c 65 6e 61 6d 65 20 54 45 58 54 20 55 4e 49  ilename TEXT UNI
0200: 51 55 45 20 4e 4f 54 20 4e 55 4c 4c 2c 20 20 20  QUE NOT NULL,   
0210: 20 20 20 20 20 2d 2d 20 4e 61 6d 65 20 6f 66 20       -- Name of 
0220: 74 68 65 20 48 54 4d 4c 20 66 69 6c 65 0a 20 20  the HTML file.  
0230: 20 20 70 61 72 65 6e 74 20 49 4e 54 45 47 45 52    parent INTEGER
0240: 20 52 45 46 45 52 45 4e 43 45 53 20 70 61 67 65   REFERENCES page
0250: 20 20 20 20 20 20 20 20 2d 2d 20 41 67 67 72 65          -- Aggre
0260: 67 61 74 65 20 70 61 67 65 2e 20 20 55 73 75 61  gate page.  Usua
0270: 6c 6c 79 20 4e 55 4c 4c 0a 20 20 29 3b 0a 20 20  lly NULL.  );.  
0280: 43 52 45 41 54 45 20 49 4e 44 45 58 20 49 46 20  CREATE INDEX IF 
0290: 4e 4f 54 20 45 58 49 53 54 53 20 70 61 67 65 5f  NOT EXISTS page_
02a0: 70 61 72 65 6e 74 20 4f 4e 20 70 61 67 65 28 70  parent ON page(p
02b0: 61 72 65 6e 74 29 3b 0a 0a 20 20 2f 2a 0a 20 20  arent);..  /*.  
02c0: 2a 2a 20 41 6c 74 65 72 6e 61 74 69 76 65 20 74  ** Alternative t
02d0: 69 74 6c 65 73 20 66 6f 72 20 70 61 67 65 73 0a  itles for pages.
02e0: 20 20 2a 2f 0a 20 20 43 52 45 41 54 45 20 54 41    */.  CREATE TA
02f0: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
0300: 53 20 61 6c 74 74 69 74 6c 65 28 0a 20 20 20 20  S alttitle(.    
0310: 61 6c 74 74 69 74 6c 65 20 54 45 58 54 2c 20 20  alttitle TEXT,  
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 2d 2d 20 41 6c 74 65 72 6e 61 74 69      -- Alternati
0340: 76 65 20 74 69 74 6c 65 0a 20 20 20 20 70 61 67  ve title.    pag
0350: 65 69 64 20 49 4e 54 45 47 45 52 20 52 45 46 45  eid INTEGER REFE
0360: 52 45 4e 43 45 53 20 70 61 67 65 20 20 20 20 20  RENCES page     
0370: 20 2d 2d 20 54 68 65 20 70 61 67 65 20 77 69 74   -- The page wit
0380: 68 20 74 68 65 20 61 6c 74 65 72 6e 61 74 69 76  h the alternativ
0390: 65 20 74 69 74 6c 65 0a 20 20 29 3b 0a 20 20 0a  e title.  );.  .
03a0: 20 20 2f 2a 0a 20 20 2a 2a 20 45 61 63 68 20 70    /*.  ** Each p
03b0: 61 67 65 20 68 61 73 20 6f 6e 65 20 6f 72 20 6d  age has one or m
03c0: 6f 72 65 20 66 72 61 67 6d 65 6e 74 73 2e 20 20  ore fragments.  
03d0: 54 68 65 20 66 69 72 73 74 20 66 72 61 67 6d 65  The first fragme
03e0: 6e 74 20 68 61 73 0a 20 20 2a 2a 20 61 20 4e 55  nt has.  ** a NU
03f0: 4c 4c 20 6e 61 6d 65 2e 20 20 41 6c 6c 20 6f 74  LL name.  All ot
0400: 68 65 72 20 66 72 61 67 6d 65 6e 74 73 20 61 72  her fragments ar
0410: 65 20 6e 61 6d 65 64 2e 0a 20 20 2a 2f 0a 20 20  e named..  */.  
0420: 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20  CREATE TABLE IF 
0430: 4e 4f 54 20 45 58 49 53 54 53 20 66 72 61 67 6d  NOT EXISTS fragm
0440: 65 6e 74 28 0a 20 20 20 20 66 72 61 67 69 64 20  ent(.    fragid 
0450: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
0460: 4b 45 59 2c 20 20 20 20 20 20 20 20 20 20 20 20  KEY,            
0470: 20 20 20 2d 2d 20 49 44 20 66 6f 72 20 69 6e 74     -- ID for int
0480: 65 72 6e 61 6c 20 75 73 65 20 6f 6e 6c 79 0a 20  ernal use only. 
0490: 20 20 20 70 61 67 65 69 64 20 49 4e 54 45 47 45     pageid INTEGE
04a0: 52 20 4e 4f 54 20 4e 55 4c 4c 20 52 45 46 45 52  R NOT NULL REFER
04b0: 45 4e 43 45 53 20 70 61 67 65 2c 20 20 2d 2d 20  ENCES page,  -- 
04c0: 50 61 72 74 20 6f 66 20 74 68 69 73 20 70 61 67  Part of this pag
04d0: 65 0a 20 20 20 20 66 72 61 67 6e 61 6d 65 20 54  e.    fragname T
04e0: 45 58 54 20 4e 4f 54 20 4e 55 4c 4c 2c 20 20 20  EXT NOT NULL,   
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 2d 2d 20 4e 61 6d 65 20 6f 72 20 4e 55 4c 4c 20  -- Name or NULL 
0510: 66 6f 72 20 6d 61 69 6e 20 66 72 61 67 6d 65 6e  for main fragmen
0520: 74 0a 20 20 20 20 66 72 61 67 74 69 74 6c 65 20  t.    fragtitle 
0530: 54 45 58 54 20 20 20 20 20 20 20 20 20 20 20 20  TEXT            
0540: 20 20 20 20 2d 2d 20 4f 70 74 69 6f 6e 61 6c 20      -- Optional 
0550: 74 69 74 6c 65 20 66 6f 72 20 74 68 69 73 20 66  title for this f
0560: 72 61 67 6d 65 6e 74 0a 20 20 29 3b 0a 20 20 43  ragment.  );.  C
0570: 52 45 41 54 45 20 49 4e 44 45 58 20 49 46 20 4e  REATE INDEX IF N
0580: 4f 54 20 45 58 49 53 54 53 20 66 72 61 67 6d 65  OT EXISTS fragme
0590: 6e 74 5f 70 61 67 65 69 64 20 4f 4e 20 66 72 61  nt_pageid ON fra
05a0: 67 6d 65 6e 74 28 70 61 67 65 69 64 29 3b 0a 20  gment(pageid);. 
05b0: 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 4b 65 79 77   .  /*.  ** Keyw
05c0: 6f 72 64 73 20 75 73 65 64 20 74 6f 20 69 64 65  ords used to ide
05d0: 6e 74 69 66 79 20 6c 69 6e 6b 20 74 61 72 67 65  ntify link targe
05e0: 74 73 2e 0a 20 20 2a 2f 0a 20 20 43 52 45 41 54  ts..  */.  CREAT
05f0: 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45  E TABLE IF NOT E
0600: 58 49 53 54 53 20 6b 65 79 77 6f 72 64 28 0a 20  XISTS keyword(. 
0610: 20 20 20 6b 77 69 64 20 49 4e 54 45 47 45 52 20     kwid INTEGER 
0620: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 20 20 20  PRIMARY KEY,    
0630: 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 49              -- I
0640: 44 20 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20  D  for internal 
0650: 75 73 65 20 6f 6e 6c 79 0a 20 20 20 20 6b 77 20  use only.    kw 
0660: 54 45 58 54 20 55 4e 49 51 55 45 20 4e 4f 54 20  TEXT UNIQUE NOT 
0670: 4e 55 4c 4c 20 43 4f 4c 4c 41 54 45 20 6e 6f 63  NULL COLLATE noc
0680: 61 73 65 2c 20 20 2d 2d 20 54 68 65 20 6b 65 79  ase,  -- The key
0690: 77 6f 72 64 20 6f 72 20 6b 65 79 70 68 72 61 73  word or keyphras
06a0: 65 0a 20 20 20 20 69 6e 64 65 78 4b 77 20 42 4f  e.    indexKw BO
06b0: 4f 4c 45 41 4e 20 4e 4f 54 20 4e 55 4c 4c 2c 20  OLEAN NOT NULL, 
06c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
06d0: 2d 20 53 68 6f 77 20 69 6e 20 74 68 65 20 6b 65  - Show in the ke
06e0: 79 77 6f 72 64 20 64 6f 63 20 69 6e 64 65 78 0a  yword doc index.
06f0: 20 20 20 20 66 72 61 67 6d 65 6e 74 20 54 45 58      fragment TEX
0700: 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  T               
0710: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20               -- 
0720: 46 72 61 67 6d 65 6e 74 20 6b 65 79 77 6f 72 64  Fragment keyword
0730: 20 72 65 66 65 72 73 20 74 6f 0a 20 20 29 3b 0a   refers to.  );.
0740: 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 45 61 63    .  /*.  ** Eac
0750: 68 20 72 6f 77 20 69 6e 20 74 68 69 73 20 74 61  h row in this ta
0760: 62 6c 65 20 72 65 63 6f 72 64 73 20 61 20 68 79  ble records a hy
0770: 70 65 72 6c 69 6e 6b 20 74 6f 20 61 20 6b 65 79  perlink to a key
0780: 77 6f 72 64 2e 20 20 54 68 65 0a 20 20 2a 2a 20  word.  The.  ** 
0790: 73 6f 75 72 63 65 20 61 6e 64 20 64 65 73 74 69  source and desti
07a0: 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 68 79  nation of the hy
07b0: 70 65 72 6c 69 6e 6b 20 61 72 65 20 72 65 63 6f  perlink are reco
07c0: 72 64 65 64 2e 0a 20 20 2a 2f 0a 20 20 43 52 45  rded..  */.  CRE
07d0: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  ATE TABLE IF NOT
07e0: 20 45 58 49 53 54 53 20 6c 69 6e 6b 28 0a 20 20   EXISTS link(.  
07f0: 20 20 66 72 6f 6d 66 72 61 67 20 49 4e 54 45 47    fromfrag INTEG
0800: 45 52 20 52 45 46 45 52 45 4e 43 45 53 20 66 72  ER REFERENCES fr
0810: 61 67 6d 65 6e 74 2c 20 2d 2d 20 46 72 6f 6d 20  agment, -- From 
0820: 74 68 69 73 20 66 72 61 67 6d 65 6e 74 0a 20 20  this fragment.  
0830: 20 20 74 6f 6b 77 20 49 4e 54 45 47 45 52 20 52    tokw INTEGER R
0840: 45 46 45 52 45 4e 43 45 53 20 6b 65 79 77 6f 72  EFERENCES keywor
0850: 64 20 20 20 20 20 20 20 2d 2d 20 54 6f 20 74 68  d       -- To th
0860: 69 73 20 6b 65 79 77 6f 72 64 0a 20 20 29 3b 0a  is keyword.  );.
0870: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 49    CREATE INDEX I
0880: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 6c 69 6e  F NOT EXISTS lin
0890: 6b 5f 66 72 6f 6d 20 4f 4e 20 6c 69 6e 6b 28 66  k_from ON link(f
08a0: 72 6f 6d 66 72 61 67 29 3b 0a 20 20 43 52 45 41  romfrag);.  CREA
08b0: 54 45 20 49 4e 44 45 58 20 49 46 20 4e 4f 54 20  TE INDEX IF NOT 
08c0: 45 58 49 53 54 53 20 6c 69 6e 6b 5f 74 6f 20 4f  EXISTS link_to O
08d0: 4e 20 6c 69 6e 6b 28 74 6f 6b 77 29 3b 0a 20 20  N link(tokw);.  
08e0: 0a 20 20 0a 20 20 2f 2a 20 52 65 71 75 69 72 65  .  .  /* Require
08f0: 6d 65 6e 74 73 20 6f 72 20 54 65 73 74 61 62 6c  ments or Testabl
0900: 65 20 53 74 61 74 65 6d 65 6e 74 73 20 4f 66 20  e Statements Of 
0910: 54 72 75 74 68 20 28 54 73 6f 74 73 29 2e 0a 20  Truth (Tsots).. 
0920: 20 2a 2a 20 54 68 65 73 65 20 61 72 65 20 65 78   ** These are ex
0930: 74 72 61 63 74 73 20 66 72 6f 6d 20 74 68 65 20  tracts from the 
0940: 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 74 68  documentation th
0950: 61 74 20 64 65 66 69 6e 65 20 77 68 61 74 0a 20  at define what. 
0960: 20 2a 2a 20 74 68 65 20 70 72 6f 64 75 63 74 20   ** the product 
0970: 64 6f 65 73 20 61 6e 64 20 68 6f 77 20 69 74 20  does and how it 
0980: 70 65 72 66 6f 72 6d 73 2e 0a 20 20 2a 2f 0a 20  performs..  */. 
0990: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46   CREATE TABLE IF
09a0: 20 4e 4f 54 20 45 58 49 53 54 53 20 72 65 71 75   NOT EXISTS requ
09b0: 69 72 65 6d 65 6e 74 28 0a 20 20 20 20 72 69 64  irement(.    rid
09c0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
09d0: 20 4b 45 59 2c 20 2d 2d 20 52 65 71 75 69 72 65   KEY, -- Require
09e0: 6d 65 6e 74 20 49 44 20 66 6f 72 20 69 6e 74 65  ment ID for inte
09f0: 72 6e 61 6c 20 75 73 65 20 6f 6e 6c 79 0a 20 20  rnal use only.  
0a00: 20 20 72 65 71 6e 6f 20 54 45 58 54 20 55 4e 49    reqno TEXT UNI
0a10: 51 55 45 2c 20 20 20 20 20 20 20 2d 2d 20 45 78  QUE,       -- Ex
0a20: 3a 20 52 2d 31 32 33 34 35 2d 36 37 38 39 30 2d  : R-12345-67890-
0a30: 2e 2e 2e 0a 20 20 20 20 72 65 71 69 6d 61 67 65  ....    reqimage
0a40: 20 42 4f 4f 4c 45 41 4e 2c 20 20 20 20 20 20 20   BOOLEAN,       
0a50: 20 2d 2d 20 54 72 75 65 20 66 6f 72 20 61 6e 20   -- True for an 
0a60: 69 6d 61 67 65 20 72 65 71 75 69 72 65 6d 65 6e  image requiremen
0a70: 74 0a 20 20 20 20 72 65 71 74 65 78 74 20 54 45  t.    reqtext TE
0a80: 58 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 2d  XT,            -
0a90: 2d 20 4e 6f 72 6d 61 6c 69 7a 65 64 20 74 65 78  - Normalized tex
0aa0: 74 20 6f 66 20 72 65 71 75 69 72 65 6d 65 6e 74  t of requirement
0ab0: 20 6f 72 20 69 6d 61 67 65 20 66 69 6c 65 6e 61   or image filena
0ac0: 6d 65 0a 20 20 20 20 6f 72 69 67 74 65 78 74 20  me.    origtext 
0ad0: 54 45 58 54 2c 20 20 20 20 20 20 20 20 20 20 20  TEXT,           
0ae0: 2d 2d 20 4f 72 69 67 69 6e 61 6c 2c 20 75 6e 6e  -- Original, unn
0af0: 6f 72 6d 61 6c 69 7a 65 64 20 74 65 78 74 0a 20  ormalized text. 
0b00: 20 20 20 73 72 63 66 69 6c 65 20 54 45 58 54 2c     srcfile TEXT,
0b10: 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 44              -- D
0b20: 6f 63 75 6d 65 6e 74 20 66 72 6f 6d 20 77 68 69  ocument from whi
0b30: 63 68 20 66 69 72 73 74 20 65 78 74 72 61 63 74  ch first extract
0b40: 65 64 0a 20 20 20 20 73 72 63 73 65 71 20 49 4e  ed.    srcseq IN
0b50: 54 45 47 45 52 2c 20 20 20 20 20 20 20 20 20 20  TEGER,          
0b60: 2d 2d 20 53 65 71 75 65 6e 63 65 20 77 69 74 68  -- Sequence with
0b70: 69 6e 20 74 68 65 20 73 61 6d 65 20 64 6f 63 75  in the same docu
0b80: 6d 65 6e 74 0a 20 20 20 20 55 4e 49 51 55 45 28  ment.    UNIQUE(
0b90: 73 72 63 66 69 6c 65 2c 73 72 63 73 65 71 29 0a  srcfile,srcseq).
0ba0: 20 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 73    );..  /* The s
0bb0: 6f 75 72 63 65 20 74 65 78 74 20 66 6f 72 20 61  ource text for a
0bc0: 20 72 65 71 75 69 72 65 6d 65 6e 74 2e 20 20 53   requirement.  S
0bd0: 6f 6d 65 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ome requirements
0be0: 20 28 65 73 70 65 63 69 61 6c 6c 79 0a 20 20 2a   (especially.  *
0bf0: 2a 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  * syntax diagram
0c00: 20 69 6d 61 67 65 73 29 20 63 61 6e 20 6f 63 63   images) can occ
0c10: 75 72 20 69 6e 20 6d 75 6c 74 69 70 6c 65 20 70  ur in multiple p
0c20: 6c 61 63 65 73 2e 0a 20 20 2a 2f 0a 20 20 43 52  laces..  */.  CR
0c30: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f  EATE TABLE IF NO
0c40: 54 20 45 58 49 53 54 53 20 72 65 71 73 72 63 28  T EXISTS reqsrc(
0c50: 0a 20 20 20 20 73 72 63 66 69 6c 65 20 54 45 58  .    srcfile TEX
0c60: 54 2c 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d  T,            --
0c70: 20 44 6f 63 75 6d 65 6e 74 20 66 72 6f 6d 20 77   Document from w
0c80: 68 69 63 68 20 65 78 74 72 61 63 74 65 64 0a 20  hich extracted. 
0c90: 20 20 20 73 72 63 73 65 71 20 49 4e 54 45 47 45     srcseq INTEGE
0ca0: 52 2c 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53  R,          -- S
0cb0: 65 71 75 65 6e 63 65 20 77 69 74 68 69 6e 20 74  equence within t
0cc0: 68 65 20 73 61 6d 65 20 64 6f 63 75 6d 65 6e 74  he same document
0cd0: 0a 20 20 20 20 72 65 71 6e 6f 20 54 45 58 54 2c  .    reqno TEXT,
0ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
0cf0: 20 54 68 65 20 72 65 71 75 69 72 65 6d 65 6e 74   The requirement
0d00: 20 74 68 61 74 20 69 73 20 72 65 70 65 61 74 65   that is repeate
0d10: 64 0a 20 20 20 20 50 52 49 4d 41 52 59 20 4b 45  d.    PRIMARY KE
0d20: 59 28 73 72 63 66 69 6c 65 2c 73 72 63 73 65 71  Y(srcfile,srcseq
0d30: 29 0a 20 20 29 20 57 49 54 48 4f 55 54 20 52 4f  ).  ) WITHOUT RO
0d40: 57 49 44 3b 0a 0a 20 20 2f 2a 20 49 6d 61 67 65  WID;..  /* Image
0d50: 20 72 65 71 75 69 72 65 6d 65 6e 74 73 20 63 61   requirements ca
0d60: 6e 20 61 70 70 65 61 72 73 20 61 74 20 6d 75 6c  n appears at mul
0d70: 74 69 70 6c 65 20 70 6c 61 63 65 73 20 69 6e 20  tiple places in 
0d80: 74 68 65 0a 20 20 0a 20 20 2f 2a 20 45 76 69 64  the.  .  /* Evid
0d90: 65 6e 63 65 20 6f 66 20 66 75 6c 66 69 6c 6c 6d  ence of fulfillm
0da0: 65 6e 74 20 6f 66 20 61 20 72 65 71 75 69 72 65  ent of a require
0db0: 6d 65 6e 74 20 69 73 20 72 65 63 6f 72 64 65 64  ment is recorded
0dc0: 20 69 6e 20 74 68 69 73 0a 20 20 2a 2a 20 74 61   in this.  ** ta
0dd0: 62 6c 65 2e 0a 20 20 2a 2f 0a 20 20 43 52 45 41  ble..  */.  CREA
0de0: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
0df0: 45 58 49 53 54 53 20 65 76 69 64 65 6e 63 65 28  EXISTS evidence(
0e00: 0a 20 20 20 20 72 65 71 6e 6f 20 54 45 58 54 2c  .    reqno TEXT,
0e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d                --
0e20: 20 50 72 65 66 69 78 20 6f 66 20 61 20 72 65 71   Prefix of a req
0e30: 75 69 72 65 6d 65 6e 74 20 6e 75 6d 62 65 72 0a  uirement number.
0e40: 20 20 20 20 72 65 71 74 65 78 74 20 54 45 58 54      reqtext TEXT
0e50: 2c 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20  ,            -- 
0e60: 4e 6f 72 6d 61 6c 69 7a 65 64 20 72 65 71 75 69  Normalized requi
0e70: 72 65 6d 65 6e 74 20 74 65 78 74 20 74 61 6b 65  rement text take
0e80: 6e 20 66 72 6f 6d 20 73 6f 75 72 63 65 0a 20 20  n from source.  
0e90: 20 20 65 76 74 79 70 65 20 54 45 58 54 2c 20 20    evtype TEXT,  
0ea0: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 65 76             -- ev
0eb0: 69 64 65 6e 63 65 2c 20 69 6d 70 6c 65 6d 65 6e  idence, implemen
0ec0: 74 61 74 69 6f 6e 2c 20 61 73 73 65 72 74 2c 20  tation, assert, 
0ed0: 74 65 73 74 63 61 73 65 0a 20 20 20 20 73 72 63  testcase.    src
0ee0: 63 6c 61 73 73 20 54 45 58 54 2c 20 20 20 20 20  class TEXT,     
0ef0: 20 20 20 20 20 20 2d 2d 20 73 6f 75 72 63 65 20        -- source 
0f00: 63 6c 61 73 73 3a 20 20 74 63 6c 2c 20 74 68 33  class:  tcl, th3
0f10: 2c 20 73 72 63 0a 20 20 20 20 73 72 63 63 61 74  , src.    srccat
0f20: 20 54 45 58 54 2c 20 20 20 20 20 20 20 20 20 20   TEXT,          
0f30: 20 20 20 2d 2d 20 73 6f 75 72 63 65 20 63 61 74     -- source cat
0f40: 65 67 6f 72 79 2e 20 20 45 78 3a 20 74 63 6c 2c  egory.  Ex: tcl,
0f50: 20 74 68 33 2f 63 6f 76 31 0a 20 20 20 20 73 72   th3/cov1.    sr
0f60: 63 66 69 6c 65 20 54 45 58 54 2c 20 20 20 20 20  cfile TEXT,     
0f70: 20 20 20 20 20 20 20 2d 2d 20 64 6f 63 75 6d 65         -- docume
0f80: 6e 74 20 66 72 6f 6d 20 77 68 69 63 68 20 65 76  nt from which ev
0f90: 69 64 65 6e 63 65 20 65 78 74 72 61 63 74 65 64  idence extracted
0fa0: 0a 20 20 20 20 73 72 63 6c 69 6e 65 20 49 4e 54  .    srcline INT
0fb0: 45 47 45 52 2c 20 20 20 20 20 20 20 20 20 2d 2d  EGER,         --
0fc0: 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 69 6e 20   line number in 
0fd0: 73 6f 75 72 63 65 20 64 6f 63 75 6d 65 6e 74 0a  source document.
0fe0: 20 20 20 20 75 72 6c 20 54 45 58 54 2c 20 20 20      url TEXT,   
0ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20               -- 
1000: 55 52 4c 20 26 20 66 72 61 67 6d 65 6e 74 20 6f  URL & fragment o
1010: 66 20 68 74 6d 6c 69 7a 65 64 20 65 76 69 64 65  f htmlized evide
1020: 6e 63 65 0a 20 20 20 20 55 4e 49 51 55 45 28 73  nce.    UNIQUE(s
1030: 72 63 66 69 6c 65 2c 20 73 72 63 6c 69 6e 65 2c  rcfile, srcline,
1040: 20 73 72 63 63 61 74 29 0a 20 20 29 3b 0a 20 20   srccat).  );.  
1050: 43 52 45 41 54 45 20 49 4e 44 45 58 20 49 46 20  CREATE INDEX IF 
1060: 4e 4f 54 20 45 58 49 53 54 53 20 65 76 5f 72 65  NOT EXISTS ev_re
1070: 71 6e 6f 20 4f 4e 20 65 76 69 64 65 6e 63 65 28  qno ON evidence(
1080: 72 65 71 6e 6f 29 3b 0a 20 20 43 4f 4d 4d 49 54  reqno);.  COMMIT
1090: 3b 0a 7d 0a 64 62 20 65 76 61 6c 20 7b 0a 20 20  ;.}.db eval {.  
10a0: 41 54 54 41 43 48 20 27 68 69 73 74 6f 72 79 2e  ATTACH 'history.
10b0: 64 62 27 20 41 53 20 68 69 73 74 6f 72 79 3b 0a  db' AS history;.
10c0: 20 20 42 45 47 49 4e 3b 0a 20 20 43 52 45 41 54    BEGIN;.  CREAT
10d0: 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45  E TABLE IF NOT E
10e0: 58 49 53 54 53 20 68 69 73 74 6f 72 79 2e 61 6c  XISTS history.al
10f0: 6c 72 65 71 28 0a 20 20 20 20 72 65 71 6e 6f 20  lreq(.    reqno 
1100: 54 45 58 54 20 50 52 49 4d 41 52 59 20 4b 45 59  TEXT PRIMARY KEY
1110: 2c 20 20 2d 2d 20 45 78 3a 20 52 2d 31 32 33 34  ,  -- Ex: R-1234
1120: 35 2d 36 37 38 39 30 2d 2e 2e 2e 0a 20 20 20 20  5-67890-....    
1130: 72 65 71 69 6d 61 67 65 20 42 4f 4f 4c 45 41 4e  reqimage BOOLEAN
1140: 2c 20 20 20 20 20 20 20 20 2d 2d 20 54 72 75 65  ,        -- True
1150: 20 66 6f 72 20 61 6e 20 69 6d 61 67 65 20 72 65   for an image re
1160: 71 75 69 72 65 6d 65 6e 74 0a 20 20 20 20 72 65  quirement.    re
1170: 71 74 65 78 74 20 54 45 58 54 2c 20 20 20 20 20  qtext TEXT,     
1180: 20 20 20 20 20 20 20 2d 2d 20 4e 6f 72 6d 61 6c         -- Normal
1190: 69 7a 65 64 20 74 65 78 74 20 6f 66 20 72 65 71  ized text of req
11a0: 75 69 72 65 6d 65 6e 74 20 6f 72 20 69 6d 61 67  uirement or imag
11b0: 65 20 66 69 6c 65 6e 61 6d 65 0a 20 20 20 20 73  e filename.    s
11c0: 72 63 66 69 6c 65 20 54 45 58 54 20 20 20 20 20  rcfile TEXT     
11d0: 20 20 20 20 20 20 20 20 2d 2d 20 44 6f 63 75 6d          -- Docum
11e0: 65 6e 74 20 66 72 6f 6d 20 77 68 69 63 68 20 65  ent from which e
11f0: 78 74 72 61 63 74 65 64 0a 20 20 29 3b 0a 20 20  xtracted.  );.  
1200: 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 68 69 73  REPLACE INTO his
1210: 74 6f 72 79 2e 61 6c 6c 72 65 71 0a 20 20 20 20  tory.allreq.    
1220: 53 45 4c 45 43 54 20 72 65 71 6e 6f 2c 20 72 65  SELECT reqno, re
1230: 71 69 6d 61 67 65 2c 20 72 65 71 74 65 78 74 2c  qimage, reqtext,
1240: 20 73 72 63 66 69 6c 65 20 46 52 4f 4d 20 72 65   srcfile FROM re
1250: 71 75 69 72 65 6d 65 6e 74 3b 0a 20 20 43 4f 4d  quirement;.  COM
1260: 4d 49 54 3b 0a 7d 0a 64 62 20 63 6c 6f 73 65 0a  MIT;.}.db close.