It's a CLI utility that trims Tcl source files off comments and whitespaces.
By this, you can get a working Tcl code stripped of needless stuff and, as a side effect, of some Tcl's freaks (the most notorious are "supposed comments" inside list and switch commands).
Also, the trimmed code:
- performs a bit faster
- needs less a disk volume
- if necessary, impedes modifications
MIT.
The utility is run using the following syntax:
tclsh trim.tcl [-i idir|ifile] [-o odir] [-r] [-f] [-n] [--] [app args]
where:
idir - a directory of files to process (by default idir=./)
ifile - a file listing .tcl files (#-comments are ignored)
odir - a directory of resulting files (by default odir=../bin)
app - an application to be executed after trimming
args - optional arguments of the app
The -i (--input) can be multiple, -o (--output) can not.
If -r (--recursive) is set, the input directories are processed
recursively. By default, they are processed non-recursively.
If -f (--force) is set, the existing output file(s) will be rewritten.
By default, the trim.tcl doesn't rewrite the existing file(s).
If -n (or --no) is set, no real changes made, supposed changes shown only.
The trim.tcl by no means changes the input file(s).
Example:
tclsh trim.tcl -i ./lib -o ./bin tclsh ./bin/main.tcl arg1 "arg 2"
The trim.tcl sets the following limitations for the code processed:
1. In general, multi-line strings should be double-quoted (not braced),
because the braced strings would be trimmed. But there are two important
exceptions: when set and variable commands use a braced string, it
is not trimmed, e.g.
set str1 "
Correct" ;# equals to set str1 "\n Correct"
set str1 {
Correct} ;# equals to set str1 "\n Correct"
variable str2 "
Correct" ;# equals to variable str2 "\n Correct"
variable str2 {
Correct} ;# equals to variable str2 "\n Correct"
puts "
Correct" ;# equals to puts "\n Correct"
puts {
NOT CORRECT} ;# equals to puts "NOT CORRECT"
2. Comments after "{" should begin with ";#", e.g.
while {true} { ;# infinite cycle
}
3. List and switch commands can contain comments which are not
considered to be meaningful items, e.g.
switch $option {
# it's a comment (and the error in standard Tcl switch)
-opt1 {
puts "-opt1 processed"
}
# ...
}
The 1st limitation is rarely encountered and easily overcome with \n escape sequences.
The last two limitations are actually the advantages of the utility.
The 2nd requires a bit more discipline of coders.
The 3rd eliminates Tcl comment freaks, incl. unmatched braces.
The trim.tcl and trim_test.tcl set examples of this in action:
tclsh trim.tcl -f -o trimmed
tclsh trim_test.tcl -f -o trimmed
tclsh trimmed/trim.tcl -f -o trimmed
tclsh trimmed/trim_test.tcl -f -o trimmed