CMcC 2008Sep1 was looking for a way to read configuration into dicts and such.I wanted something like subst to perform variable and functional substitution, but which guaranteed the resultant form would be list-like, if the input was. I also wanted the ability to intersperse comments in the configuration structure. What I really wanted was a tcl-like little-language for configuration.The following proc ignores lines which are commented like tcl source, and substitutes [] and $-forms. Its output is a list of fully substituted tcl-like words. It may be nested.Caveat: The little language isn't completely coherent and consistent, in that the characters ; and # always have special literal significance as commencing comments. I'm prepared to tolerate that inflexibility in exchange for speed and ease of parsing, but it may not suit you.
proc rc {text} {
set accum ""
set result {}
foreach line [split $text \n] {
set line [string trim $line]
if {$line eq ""} continue
lassign [split $line {\#;}] line
append accum " " [string trim $line]
if {$accum ne "" && [info complete $accum]} {
set pass [uplevel 1 list $accum]
lappend result {*}$pass
set accum ""
}
}
return $result
}Lars H: Have you considered using an empty interpreter instead?CMcC yes, and it may well be worth doing, however I want to be able to invoke a fairly wide range of functions and grab variable values from the config.Additionally, it doesn't buy you much, as you must still feed the stuff a 'complete' line at a time, and presumably prepend a set to each line, or something.Lars H: Defining just the unknown of the empty interpreter to be an alias to lappend result in the master goes a long way towards achieving the above, I think. Concretely it comes out as interp create -safe empty
empty eval {namespace delete ::}
empty alias unknown lappend result
proc rc {text} {
set result {}
empty eval $text
return $result
}but perhaps I'm missing something. It would clarify things if you gave a concrete example of the kind of data rc is supposed to parse, and what the parsed results look like.
