@@ -15,11 +15,11 @@
15 15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require fileutil ; # Tcllib (cat)
16 16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::tools::log ; # User feedback
17 17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
18 18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace eval ::vc::rcs::parser {
19 19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
vc::tools::log::system rcs
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- namespace import ::vc::tools::log::progress
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace import ::vc::tools::log::*
21 21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
22 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
23 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# -----------------------------------------------------------------------------
24 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# API
25 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -44,12 +44,47 @@
44 44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#
45 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# The state 'dead' has special meaning, the user should know that.
46 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
47 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# -----------------------------------------------------------------------------
48 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!
+ }
49 62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
50 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!
+ set cache [Cache $path]
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [file exists $cache] &&
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ([file mtime $cache] > [file mtime $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!
+ # Use preparsed data if not invalidated by changes to the
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # archive they are derived from.
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ write 4 rcs {Load preparsed data block}
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return [fileutil::cat -encoding binary $cache]
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set res [Process $path]
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Save parse result for quick pickup by future runs.
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fileutil::writeFile $cache $res
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $res
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # -----------------------------------------------------------------------------
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::rcs::parser::Process {path} {
51 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set data [fileutil::cat -encoding binary $path]
52 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
array set res {}
53 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set res(size) [file size $path]
54 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set res(done) 0
55 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set res(nsize) [string length $res(size)]
@@ -66,10 +101,14 @@
66 101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unset res(nsize)
67 102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unset res(done)
68 103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69 104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return [array get res]
70 105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::rcs::parser::Cache {path} {
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return ${path},,preparsed
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
71 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72 111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# -----------------------------------------------------------------------------
73 112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Internal - Recursive Descent functions implementing the syntax.
74 113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75 114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc ::vc::rcs::parser::Admin {} {
@@ -316,14 +355,18 @@
316 355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
317 356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
progress 2 rcs $res(done) $res(size)
318 357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
319 358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
320 359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # -----------------------------------------------------------------------------
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
321 362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace eval ::vc::rcs::parser {
322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- namespace export process
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable cache 0 ; # No result caching by default.
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace export process configure
323 366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
324 367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
325 368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# -----------------------------------------------------------------------------
326 369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Ready
327 370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
328 371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package provide vc::rcs::parser 1.0
329 372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
330 373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!