@@ -1,378 +1,423 @@
1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # -----------------------------------------------------------------------------
2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Tool packages. Parsing RCS files.
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #
4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Some of the information in RCS files is skipped over, most
5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # importantly the actual delta texts. The users of this parser need
6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # only the meta-data about when revisions were added, the tree
7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # (branching) structure, commit messages.
8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #
9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # The parser is based on Recursive Descent.
10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # -----------------------------------------------------------------------------
12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Requirements
13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- package require Tcl 8.4
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- package require fileutil ; # Tcllib (cat)
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- package require vc::tools::log ; # User feedback
17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- namespace eval ::vc::rcs::parser {
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- namespace import ::vc::tools::log
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- log register rcs
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # -----------------------------------------------------------------------------
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # API
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # vc::rcs::parser::process file
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Parses the rcs file and returns a dictionary containing the meta
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # data. The following keys are used
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Key Meaning
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # --- -------
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # 'head' head revision
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # 'branch' ?
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # 'symbol' dict (symbol -> revision)
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # 'lock' dict (symbol -> revision)
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # 'comment' file comment
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # 'expand' ?
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # 'date' dict (revision -> date)
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # 'author' dict (revision -> author)
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # 'state' dict (revision -> state)
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # 'parent' dict (revision -> parent revision)
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # 'commit' dict (revision -> commit message)
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # The state 'dead' has special meaning, the user should know that.
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # -----------------------------------------------------------------------------
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # API Implementation
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::configure {key value} {
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- variable cache
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- switch -exact -- $key {
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- -cache {
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set cache $value
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- default {
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return -code error "Unknown switch $key, expected one of -cache"
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::process {path} {
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- variable cache
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {!$cache} {
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return [Process $path]
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set cachefile [Cache $path]
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [file exists $cachefile] &&
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ([file mtime $cachefile] > [file mtime $path])
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- } {
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Use preparsed data if not invalidated by changes to the
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # archive they are derived from.
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- write 4 rcs {Load preparsed data block}
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return [fileutil::cat -encoding binary $cachefile]
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set res [Process $path]
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Save parse result for quick pickup by future runs.
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fileutil::writeFile $cachefile $res
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return $res
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # -----------------------------------------------------------------------------
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Process {path} {
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set data [fileutil::cat -encoding binary $path]
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- array set res {}
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set res(size) [file size $path]
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set res(done) 0
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set res(nsize) [string length $res(size)]
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Admin
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Deltas
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Description
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DeltaTexts
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Remove parser state
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- catch {unset res(id)}
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- catch {unset res(lastval)}
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unset res(size)
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unset res(nsize)
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unset res(done)
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return [array get res]
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Cache {path} {
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return ${path},,preparsed
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # -----------------------------------------------------------------------------
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Internal - Recursive Descent functions implementing the syntax.
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Admin {} {
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Head ; Branch ; Access ; Symbols ; Locks ; Strict ; Comment ; Expand
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Deltas {} {
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while {[Num 0]} { IsIdent ; Date ; Author ; State ; Branches ; NextRev }
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Description {} {
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal desc
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- String 1
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Def desc
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::DeltaTexts {} {
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while {[Num 0]} { IsIdent ; Log ; Text }
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Head {} {
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal head ; Num 1 ; Literal \;
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Def head
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Branch {} {
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {![Literal branch 0]} return ; Num 1 ; Literal \;
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Def branch
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Access {} {
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal access ; Literal \;
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Symbols {} {
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal symbols
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while {[Ident]} { Num 1 ; Map symbol }
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal \;
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Locks {} {
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal locks
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while {[Ident]} { Num 1 ; Map lock }
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal \;
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Strict {} {
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {![Literal strict 0]} return ; Literal \;
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Comment {} {
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {![Literal comment 0]} return ;
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {![String 0]} return ;
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal \;
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Def comment
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Expand {} {
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {![Literal expand 0]} return ;
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {![String 0]} return ;
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal \;
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Def expand
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Date {} {
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal date ; Num 1 ; Literal \;
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- foreach {yr mo dy h m s} [split $res(lastval) .] break
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {$yr < 100} {incr yr 1900}
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set res(lastval) [join [list $yr $mo $dy $h $m $s] .]
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Map date
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Author {} {
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal author ; Skip ; Literal \; ; Map author
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::State {} {
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal state ; Skip ; Literal \; ; Map state
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Branches {} {
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal branches ; Skip ; Literal \;
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::NextRev {} {
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal next ; Skip ; Literal \; ; Map parent
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Log {} {
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal log ; String 1 ; Map commit
244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Text {} {
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Literal text ; String 1
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # -----------------------------------------------------------------------------
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Internal - Lexicographical commands and data aquisition preparation
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Ident {} {
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #puts I@?<[string range $data 0 10]...>
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {[regexp -indices -- {^\s*;\s*} $data]} {
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- } elseif {![regexp -indices -- {^\s*([^:]*)\s*:\s*} $data match val]} {
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Get $val ; IsIdent
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Next
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Literal {name {required 1}} {
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {![regexp -indices -- "^\\s*$name\\s*" $data match]} {
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {$required} {
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return -code error "Expected '$name' @ '[string range $data 0 30]...'"
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Next
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::String {{required 1}} {
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {![regexp -indices -- {^\s*@(([^@]*(@@)*)*)@\s*} $data match val]} {
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {$required} {
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return -code error "Expected string @ '[string range $data 0 30]...'"
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Get $val
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Next
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Num {required} {
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {![regexp -indices -- {^\s*((\d|\.)+)\s*} $data match val]} {
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {$required} {
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return -code error "Expected id @ '[string range $data 0 30]...'"
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Get $val
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Next
311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1
312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Skip {} {
315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- regexp -indices -- {^\s*([^;]*)\s*} $data match val
317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Get $val
318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Next
319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # -----------------------------------------------------------------------------
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Internal - Data aquisition
324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Def {key} {
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set res($key) $res(lastval)
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unset res(lastval)
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Map {key} {
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- lappend res($key) $res(id) $res(lastval)
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #puts Map($res(id))=($res(lastval))
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unset res(lastval)
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #unset res(id);#Keep id for additional mappings.
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::IsIdent {} {
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set res(id) $res(lastval)
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unset res(lastval)
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Get {val} {
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 data data res res
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- foreach {s e} $val break
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set res(lastval) [string range $data $s $e]
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #puts G|$res(lastval)
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- proc ::vc::rcs::parser::Next {} {
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- upvar 1 match match data data res res
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- foreach {s e} $match break ; incr e
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set data [string range $data $e end]
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set res(done) [expr {$res(size) - [string length $data]}]
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- progress 2 rcs $res(done) $res(size)
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # -----------------------------------------------------------------------------
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- namespace eval ::vc::rcs::parser {
369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- variable cache 0 ; # No result caching by default.
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- namespace export process configure
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # -----------------------------------------------------------------------------
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # Ready
1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## -*- tcl -*-
2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## ############# #####################
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Copyright (c) 2007 Andreas Kupries.
4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #
5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # This software is licensed as described in the file LICENSE, which
6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # you should have received as part of this distribution.
7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #
8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # This software consists of voluntary contributions made by many
9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # individuals. For exact contribution history, see the revision
10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # history and logs, available at http://fossil-scm.hwaci.com/fossil
11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## ############# #####################
12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # A tool package, provides a parser for RCS archive files. This parser
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # is implemented via recursive descent. It is not only given a file to
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # process, but also a 'sink', an object it calls out to at important
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # places of the parsing process to either signal an event and/or
17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # convey gathered information to it. The sink is responsible for the
18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # actual processing of the data in whatever way it desires.
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## ############# #####################
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Requirements
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require Tcl 8.4 ; # Required runtime.
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require snit ; # OO system.
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require fileutil ; # File utilities.
26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require vc::tools::log ; # User feedback.
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require struct::list ; # Advanced list ops.
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## ############# #####################
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ##
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ snit::type ::vc::rcs::parser {
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Public API
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typemethod process {path sink} {
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Initialize $path $sink
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Call begin
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Admin ; Deltas ; Description ; DeltaTexts
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Call done
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Internal methods, recursive descent, syntactical processing
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Admin {} {
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Head ; PrincipalBranch ; Access ; Symbols
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Locks ; Strictness ; FileComment ; Expand
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Call admindone
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Head {} {
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral head
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredNumber -> head
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Call sethead $head
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc PrincipalBranch {} {
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![OptionalLiteral branch]} return
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredNumber -> branch
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Call setprincipalbranch $branch
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Access {} {
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral access ;
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Symbols {} {
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set d {}
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral symbols
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while {[Ident -> symbol]} {
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredNumber -> rev
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # TODO: distinguish branch/tag symbols, transform revision
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # numbers into canonical form.
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend d $symbol $rev
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Call setsymbols $d
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Locks {} {
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Not saving locks.
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral locks
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while {[Ident -> symbol]} {
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredNumber -> l
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Strictness {} {
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Not saving strictness
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![OptionalLiteral strict]} return
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc FileComment {} {
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![OptionalLiteral comment]} return
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![OptionalString -> c]} return
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Call setcomment $c
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Expand {} {
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Not saving expanded keywords
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![OptionalLiteral expand]} return
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![OptionalString -> dummy]} return
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Deltas {} {
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while {[OptionalNumber -> rev]} {
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Date -> d
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Author -> a
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ State -> s
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Branches -> b
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ NextRev -> n
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Call def $rev $d $a $s $n $b
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Date {_ dv} {
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $dv d
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral date
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredNumber -> d
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct::list assign [split $d .] year month day hour min sec
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$year < 100} {incr year 1900}
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set d [clock scan "${year}-${month}-${day} ${hour}:${min}:${sec}"]
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Author {_ av} {
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $av a
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral author
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Anything -> a
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc State {_ sv} {
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $sv s
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral state
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Anything -> s
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Branches {_ bv} {
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $bv b
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral branches
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Anything -> b
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc NextRev {_ nv} {
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $nv n
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral next
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Anything -> n
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Semicolon
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Description {} {
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 data data res res
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral desc
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredString -> d
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Call setdesc $d
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc DeltaTexts {} {
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while {[OptionalNumber -> rev]} {
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral log
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredString -> cmsg
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredLiteral text
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RequiredStringRange -> delta
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Call extend $rev $cmsg $delta
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Internal methods, lexiographical processing
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Semicolon {} {
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set ok [regexp -start $mypos -indices -- {\A\s*;\s*} $mydata match]
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {!$ok} { Expected ';' }
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SkipOver match
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc RequiredLiteral {name} {
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set pattern "\\A\\s*$name\\s*"
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set ok [regexp -start $mypos -indices -- $pattern $mydata match]
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {!$ok} { Expected '$name' }
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SkipOver match
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc OptionalLiteral {name} {
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set pattern "\\A\\s*$name\\s*"
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set ok [regexp -start $mypos -indices -- $pattern $mydata match]
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {!$ok} { return 0 }
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SkipOver match
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc RequiredNumber {_ v} {
247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $v value
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set pattern {\A\s*((\d|\.)+)\s*}
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set ok [regexp -start $mypos -indices -- $pattern $mydata match v]
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {!$ok} { Expected id }
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Extract $v -> value
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SkipOver match
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc OptionalNumber {_ v} {
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $v value
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set pattern {\A\s*((\d|\.)+)\s*}
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set ok [regexp -start $mypos -indices -- $pattern $mydata match v]
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {!$ok} { return 0 }
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Extract $v -> value
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SkipOver match
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc RequiredString {_ v} {
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $v value
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set ok [regexp -start $mypos -indices -- {\A\s*@(([^@]*(@@)*)*)@\s*} $mydata match v]
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {!$ok} { Expected string }
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Extract $v -> value
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set value [string map {@@ @} $value]
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SkipOver match
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc RequiredStringRange {_ v} {
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $v value
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set ok [regexp -start $mypos -indices -- {\A\s*@(([^@]*(@@)*)*)@\s*} $mydata match value]
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {!$ok} { Expected string }
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SkipOver match
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc OptionalString {_ v} {
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $v value
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set ok [regexp -start $mypos -indices -- {\A\s*@(([^@]*(@@)*)*)@\s*} $mydata match v]
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {!$ok} { return 0 }
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Extract $v -> value
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set value [string map {@@ @} $value]
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SkipOver match
311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Ident {_ v} {
315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $v value
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set ok [regexp -start $mypos -indices -- {\A\s*;\s*} $mydata]
320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$ok} { return 0 }
321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set ok [regexp -start $mypos -indices -- {\A\s*([^:]*)\s*:\s*} $mydata match v]
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {!$ok} { return 0 }
324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Extract $v -> value
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SkipOver match
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Anything {_ v} {
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $v value
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ regexp -start $mypos -indices -- {\A\s*([^;]*)\s*} $mydata match v
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Extract $v -> value
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SkipOver match
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Internal methods, input handling
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Extract {range _ v} {
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $v value
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct::list assign $range s e
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set value [string range $mydata $s $e]
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc SkipOver {mv} {
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Note: The indices are absolute!, not relative to the start
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # location.
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $mv match
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mysize
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct::list assign $match s e
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts "<$s $e> [info level -1]"
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set mypos $e
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ incr mypos
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log progress 2 rcs $mypos $mysize
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts $mypos/$mysize
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Expected {x} {
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata
373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set e $mypos ; incr e 30
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -code error "Expected $x @ '[string range $mydata $mypos $e]...'"
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Setup, callbacks.
380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Initialize {path sink} {
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mypos 0
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mydata [fileutil::cat -encoding binary $path]
384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mysize [file size $path]
385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mysink $sink
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc Call {args} {
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ::variable mysink
391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set cmd $mysink
392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach a $args { lappend cmd $a }
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eval $cmd
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Configuration
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typevariable mydata {} ; # Rcs archive contents to process
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typevariable mysize 0 ; # Length of contents
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typevariable mysink {} ; # Sink to report to
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pragma -hasinstances no ; # singleton
405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pragma -hastypeinfo no ; # no introspection
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pragma -hastypedestroy no ; # immortal
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## #############
409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace eval ::vc::rcs {
412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace export parser
413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace eval parser {
414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace import ::vc::tools::log
415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log register rcs
416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # # ## ### ##### ######## ############# #####################
420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ## Ready
376 421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
377 422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package provide vc::rcs::parser 1.0
378 423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
379 424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!