[GRASS5] [bug #2488] (grass) GRASS 5.7 WISH - improve string reading ability in g.parser

Glynn Clements glynn.clements at virgin.net
Thu Jun 17 06:53:58 EDT 2004

Hamish wrote:

> > > this bug's URL: http://intevation.de/rt/webrt?serial_num=2488
> > > Subject: GRASS 5.7 WISH - improve string reading ability in g.parser
> ..
> > > g.parser has difficulties parsing strings with spaces in them. If
> > > you enter a string with spaces, it treats each word as a separate,
> > > illegal entry for that variable.
> > 
> > I can't reproduce this behaviour with 5.3, and g.parser itself is
> > unchanged in 5.7 (although G_parser() has some changes).
> I believe this will be the long standing problem in the TclTk menus,
> which strips away all quotes from input fields.

Actually, the problem is deeper than that. You shouldn't *need* quotes
in input fields. And, unlike Bourne-shell, Tcl doesn't automatically
split variable values into words.

My guess is that something is flattening the argument list to a
string, then (implicitly) re-parsing it into a list, so embedded
spaces get treated as separators. E.g. doing:

	set list "$list $item"

(as you would in Bourne-shell), rather than using lappend.

Unlike Bourne-shell, Tcl has adequate support for preserving list
structure, by using braces where necessary. E.g.:

	set a "foo"
	set b "bar"
	set c "hello world"
	set list [list $a $b $c]
	puts $list
	=> foo bar {hello world}

In any case, I'm pretty certain that this has nothing to do with
g.parser, in the sense that it applies equally to every program which
uses G_parser(), which is almost everything.

Glynn Clements <glynn.clements at virgin.net>

More information about the grass-dev mailing list