Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Early attempts at requirements. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
ef1fcd862b871b2aa04ca06172a8e246 |
User & Date: | drh 2007-12-01 19:23:41.000 |
Context
2007-12-02
| ||
12:57 | Add the "See Also" sidebar on the About page. The "features" link goes to the Features page, not to the About page. (check-in: 53144a576e user: drh tags: trunk) | |
2007-12-01
| ||
19:23 | Early attempts at requirements. (check-in: ef1fcd862b user: drh tags: trunk) | |
2007-11-30
| ||
01:34 | Fix website typos and external hyperlink changes. (check-in: e4ae9bdfda user: drh tags: trunk) | |
Changes
Changes to pages/capi3ref.in.
1 2 3 4 5 6 | <title>C/C++ Interface For SQLite Version 3</title> <h2 class=pdf_section>C/C++ Interface For SQLite Version 3</h2> <tcl> set in [open sqlite3.h] | | | | | | | > | | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <title>C/C++ Interface For SQLite Version 3</title> <h2 class=pdf_section>C/C++ Interface For SQLite Version 3</h2> <tcl> set in [open sqlite3.h] set title {} ;# title of a section of interface definition set type {} ;# one of: constant datatype function set body {} ;# human-readable description set code {} ;# C code of the definition set phase 0 ;# Phase used by the parser set content {} ;# List of records, one record per definition set dcnt 0 ;# Number of individual declarations set lineno 0 ;# input file line number # Read sqlite3.h line by line and extract interface definition # information. # while {![eof $in]} { set line [gets $in] incr lineno if {$phase==0} { # Looking for the CAPI3REF: keyword if {[regexp {^\*\* CAPI3REF: +(.*)} $line all tx]} { set title $tx |
︙ | ︙ | |||
38 39 40 41 42 43 44 | set phase 2 } } elseif {$phase==2} { if {$line==""} { set kwlist [lsort [array names keyword]] unset -nocomplain keyword set key $type:$kwlist | < | < < < < < | > > > > > | 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | set phase 2 } } elseif {$phase==2} { if {$line==""} { set kwlist [lsort [array names keyword]] unset -nocomplain keyword set key $type:$kwlist regsub { *\{[\w.]+\}} $title {} title regsub -all { *\{[\w.]+\}} $body {} body lappend content [list $key $title $type $kwlist $body $code] set title {} set keywords {} set type {} set body {} set code {} set phase 0 set dcnt 0 } else { if {[regexp {^#define (SQLITE_[A-Z0-9_]+)} $line all kx]} { set type constant set keyword($kx) 1 incr dcnt } elseif {[regexp {^typedef .*(sqlite[0-9a-z_]+);} $line all kx]} { set type datatype set keyword($kx) 1 incr dcnt } elseif {[regexp {^[a-z].*[ *](sqlite3_[a-z0-9_]+)\(} $line all kx]} { set type function set keyword($kx) 1 incr dcnt } elseif {[regexp {^SQLITE_EXTERN .*(sqlite[0-9a-z_]+);} $line all kx]} { set type datatype set keyword($kx) 1 incr dcnt } append code $line\n } } } |
︙ | ︙ |
Added pages/requirements.in.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | <title>SQLite Requirements</title> <h2>SQLite Requirements</h2> <p>This document is a work in progress.</p> <p>The goal of this document is to provide an precise and exact definition of what SQLite does, how it works, and what to expect from SQLite for any given input. When completed, this document will become the authoritative reference for using SQLite.</p> <h3>The C/C++ Interface</h3> <table cellspacing="20" border="0"> <tcl> # Extract requirements from the sqlite3.h header file # set in [open sqlite3.h] set title {} ;# Title of an interface set body {} ;# human-readable description set code {} ;# C code of the definition set phase 0 ;# Phase used by the parser set reqlist {} ;# List of requirements, on record per requirement entry set dcnt 0 ;# Number of individual declarations set lineno 0 ;# input file line number # Split the input string $in at the first {...} marker. Store the text # before the marker in the prefixvar. Store the content of the marker # in tagvar. And store the text after the marker in tailvar. # proc split_text {in prefixvar tagvar tailvar} { if {[regexp -indices {\{[\w.]+\}} $in i]} { upvar 1 $prefixvar prefix upvar 1 $tagvar tag upvar 1 $tailvar tail foreach {front back} $i break set x0 [expr {$front-1}] set prefix [string range $in 0 $x0] set x1 [expr {$front+1}] set x2 [expr {$back-1}] set tag [string range $in $x1 $x2] set x3 [expr {$back+1}] set tail [string range $in $x3 end] return 1 } else { return 0 } } # Read sqlite3.h line by line and extract interface definition # information. # while {![eof $in]} { set line [gets $in] incr lineno if {$phase==0} { # Looking for the CAPI3REF: keyword if {[regexp {^\*\* CAPI3REF: +(.*)} $line all tx]} { set title $tx set title_lineno $lineno set phase 1 } } elseif {$phase==1} { if {[string range $line 0 1]=="**"} { set lx [string trim [string range $line 3 end]] if {[regexp {^CATEGORY: +([a-z]*)} $lx all cx]} { set type $cx } elseif {[regexp {^KEYWORDS: +(.*)} $lx all kx]} { foreach k $kx { set keyword($k) 1 } } else { append body $lx\n } } elseif {[string range $line 0 1]=="*/"} { set phase 2 } } elseif {$phase==2} { if {$line==""} { set kwlist [lsort [array names keyword]] unset -nocomplain keyword set key $type:$kwlist if {[regexp {\{([\w.]+)\}} $title all tag]} { regsub { *\{[\w.]+\}} $title {} title if {$dcnt>1} {set d declarations} {set d {a declaration}} set req "The \"sqlite3.h\" header file\ shall contain $d equivalent to the following:\ \n<blockquote><pre>\n$code</pre></blockquote>" regexp {\d+} $tag key lappend reqlist [list $key $tag sqlite3.h $title_lineno $req {}] } set x $body while {[split_text $x prefix tag suffix]} { if {![split_text $suffix req endtag tail]} { set req $suffix set x {} set ex {} } elseif {$endtag=="END"} { set ex {} set x $tail } elseif {$endtag=="EX"} { if {![split_text $tail ex end2 tail2]} { set ex $tail set x {} } elseif {$end2=="END"} { set x $tail2 } else { set x "{$end2} $tail2" } } else { set ex {} set x "{$endtag} $tail" } regsub -all {\[([^]|]+\|)?([^]]+)\]} $req {\2} req regsub -all {\s+} $req { } req set req [string trim $req] regsub -all {\[([^]|]+\|)?([^]]+)\]} $ex {\2} ex regsub -all {\s+} $ex { } ex set ex [string trim $ex] regexp {\d+} $tag key lappend reqlist [list $key $tag sqlite3.h $title_lineno $req $ex] } set title {} set keywords {} set type {} set body {} set code {} set phase 0 set dcnt 0 } else { if {[regexp {^#define (SQLITE_[A-Z0-9_]+)} $line all kx]} { set type constant set keyword($kx) 1 incr dcnt } elseif {[regexp {^typedef .*(sqlite[0-9a-z_]+);} $line all kx]} { set type datatype set keyword($kx) 1 incr dcnt } elseif {[regexp {^[a-z].*[ *](sqlite3_[a-z0-9_]+)\(} $line all kx]} { set type function set keyword($kx) 1 incr dcnt } elseif {[regexp {^SQLITE_EXTERN .*(sqlite[0-9a-z_]+);} $line all kx]} { set type datatype set keyword($kx) 1 incr dcnt } append code $line\n } } } foreach req [lsort -index 0 $reqlist] { foreach {key tag file lineno text ex} $req break puts "<tr><td valign=\"top\">$tag</td>" puts "<td valign=\"top\"><b>$text</b>" if {$ex!=""} { puts "<p>$ex</p>" } puts "</td></tr>" } </tcl> </table> |