Ales, Karel, et al, Thanks, Ales, for the information. I am glad that I am wrong, and that the bug is a gattrib bug and not a libgeda bug. I will fix gattrib so it does the right thing. Perhaps this bug-fix can be a side-show during our upcoming Free Dog get-together this coming Thursday?
Oh, dear, me! I need to make the Free Dog announcement! Stuart > > Hi Stuart and Karel, > > > [snip] > >Libgeda handles attributes in the following way. An attribute is a > >text string of form "foo=bar", stored as a single entity in the linked > >list of graphical objects which represent your schematic. In this > > I tried entering "package=ceramic 50V, rm=5mm" and it worked > fine in gschem. > > > >case, "foo" is the attribute name, and "bar" is the attribute value. > >An attribute is not different from ordinary annotation text, except > >that it has the "=" sign separating the attribute name from the > >attribute value. The "=" sign is what distinguishes an attribute from > >normal text. > > Mostly agree with the above, except that it only applies to > the first = in a text string. After the first =, the value of the > attribute can be literally anything, including an infinite number of ='s. > Unfortunately the current file format document does not spell this > out explicitly. The master attribute doc does say something a little > bit more: > > http://geda.seul.org/wiki/geda:master_attributes_list#what_are_attributes > > Attributes in the gEDA/gaf system are nothing more than text > items which take on the form: name=value. Name can be anything > just as long as it doesnt contain a equals sign. Value can also > be anything just as long as it is something (vs nothing). name= > (without a value part) is not a valid attribute. Also, there > cannot be any spaces immediately before or after the equals sign. > > I will update these documents to explicitly cover the case where you have > name=blah where blah can be value, name2=value2 and so on. > > [snip] > >it finds an attribute (or a string) with an unexpected number of "=" > >signs in it. In your case, it found the second "=" sign, and dropped > >it and everything after it when it stored the result. > > > > I think this is a bug in gattrib unfortunately. :-( > > Instead of using: > > u_basic_breakup_string(string, '=', 0) > or > u_basic_breakup_string(string, '=', 1) > > to break up name=value attributes, gattrib should be using: > > char *name = NULL; > char *value = NULL; > int status; > > > status = o_attrib_get_name_value(string, &name, &value); > if (status == 0) > { > /* ... do useful work with name and value ... */ > } > else > { > /* invalid attribute */ > } > if (name) free (name); > if (value) free (value); > > to break up attributes into name/value pairs. Obviously this is not > easy to find in libgeda (that's my fault and my responsibility), but it > is the official way of doing the parsing. > > Do you want me to file a bug on this Stuart? All questions to me. > Thanks. > > -Ales > >
