kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #10478
Re: [BUG] tilda in eeschema library files
On 05/24/2013 04:25 PM, Dick Hollenbeck wrote:
> On 05/22/2013 04:34 PM, Dick Hollenbeck wrote:
>> I think a bug was introduced recently that is putting tilda characters into library files.
>>
>> If a field such as Footprint is blank in the eeschema library part editor, it gets put
>> into the library now with "~" rather than being omitted. Even if you restart eeschema,
>> come back and delete the ~ character, save the part again into the library, you find the
>> filed with the ~ in there again.
>>
>> Somebody broke something.
>>
>> I have not filed a bug report, but can if this does not ring a bell.
>>
>> Dick
>>
>
>
> Blank fields are not round tripping. They come back with a damn tilda in them.
>
> Somebody broke something!
>
>
>
I got annoyed because it took so long to find, and this bug simply should never have
happened. It is bull crap.
You only saw the problem if you saved a component with a blank datasheet into your
library. Then exited eeschema. Then restarted it. Then when loading the component back
into the library editor and showing the text fields, you was a ~ for any blank field.
Fixed in 4166.
Library component fields will now be saved, when blank, as "" rather than as "~".
Main diff attached.
Library files will automatically get fixed upon first write, "~" -> ""
=== modified file 'eeschema/lib_field.cpp'
--- eeschema/lib_field.cpp 2013-05-18 09:38:23 +0000
+++ eeschema/lib_field.cpp 2013-05-24 23:56:13 +0000
@@ -100,8 +100,14 @@
else if( m_VJustify == GR_TEXT_VJUSTIFY_TOP )
vjustify = 'T';
+ /* Dick 24-May-2013:
+ What the hell is this?. There was no comment here.
+ Hell no. You don't want this in the *.lib files, it is crap. Fields get read
+ back in and they have a tilda in them.
+
if( text.IsEmpty() )
text = wxT( "~" );
+ */
aFormatter.Print( 0, "F%d %s %d %d %d %c %c %c %c%c%c",
m_id,
@@ -136,7 +142,9 @@
char textVisible;
char textHJustify;
char textVJustify[256];
+
char* line = (char*) aLineReader;
+ char* limit = line + aLineReader.Length();
if( sscanf( line + 1, "%d", &m_id ) != 1 || m_id < 0 )
{
@@ -144,23 +152,20 @@
return false;
}
- /* Search the beginning of the data. */
- while( *line != 0 )
- line++;
-
- while( *line == 0 )
- line++;
-
- while( *line && (*line != '"') )
+ // Caller did a strtok(), which inserts a nul, so next few bytes are ugly:
+ // digit(s), a nul, some whitespace, then a double quote.
+ while( line < limit && *line != '"' )
line++;
- if( *line == 0 )
+ if( line == limit )
return false;
line += ReadDelimitedText( &m_Text, line );
- if( *line == 0 )
- return false;
+ // Doctor the *.lib file field which has a "~" in blank fields. New saves will
+ // not save like this, and eventually these two lines can be removed.
+ if( m_Text.size()==1 && m_Text[0]==wxChar( '~' ) )
+ m_Text.clear();
memset( textVJustify, 0, sizeof( textVJustify ) );
References