Add instrumentation to track down local issues in symbol library file code.
This commit is contained in:
parent
147c839857
commit
c11ded24cd
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 CERN
|
* Copyright (C) 2012 CERN
|
||||||
* Copyright (C) 1992-2020 KiCad Developers, see change_log.txt for contributors.
|
* Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Wayne Stambaugh <stambaughw@verizon.net>
|
* @author Wayne Stambaugh <stambaughw@gmail.com>
|
||||||
* @file base_units.cpp
|
* @file base_units.cpp
|
||||||
* @brief Code to handle objects that require both schematic and board internal units.
|
* @brief Code to handle objects that require both schematic and board internal units.
|
||||||
* @note This file is an ugly hack to solve the problem of formatting the base units
|
* @note This file is an ugly hack to solve the problem of formatting the base units
|
||||||
|
@ -109,7 +109,9 @@ double To_User_Unit( EDA_UNITS aUnit, double aValue )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert a value to a string using double notation.
|
/**
|
||||||
|
* Convert a value to a string using double notation.
|
||||||
|
*
|
||||||
* For readability, the mantissa has 0, 1, 3 or 4 digits, depending on units
|
* For readability, the mantissa has 0, 1, 3 or 4 digits, depending on units
|
||||||
* for unit = inch the mantissa has 3 digits (Eeschema) or 4 digits
|
* for unit = inch the mantissa has 3 digits (Eeschema) or 4 digits
|
||||||
* for unit = mil the mantissa has 0 digits (Eeschema) or 1 digits
|
* for unit = mil the mantissa has 0 digits (Eeschema) or 1 digits
|
||||||
|
@ -208,7 +210,9 @@ wxString MessageTextFromValue( EDA_UNITS aUnits, double aValue, bool aAddUnitLab
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Convert a value to a string using double notation.
|
/**
|
||||||
|
* Convert a value to a string using double notation.
|
||||||
|
*
|
||||||
* For readability, the mantissa has 3 or more digits,
|
* For readability, the mantissa has 3 or more digits,
|
||||||
* the trailing 0 are removed if the mantissa has more than 3 digits
|
* the trailing 0 are removed if the mantissa has more than 3 digits
|
||||||
* and some trailing 0
|
* and some trailing 0
|
||||||
|
@ -218,7 +222,8 @@ wxString MessageTextFromValue( EDA_UNITS aUnits, double aValue, bool aAddUnitLab
|
||||||
* otherwise the actual value is rounded when read from dialog and converted
|
* otherwise the actual value is rounded when read from dialog and converted
|
||||||
* in internal units, and therefore modified.
|
* in internal units, and therefore modified.
|
||||||
*/
|
*/
|
||||||
wxString StringFromValue( EDA_UNITS aUnits, double aValue, bool aAddUnitSymbol, EDA_DATA_TYPE aType )
|
wxString StringFromValue( EDA_UNITS aUnits, double aValue, bool aAddUnitSymbol,
|
||||||
|
EDA_DATA_TYPE aType )
|
||||||
{
|
{
|
||||||
double value_to_print = aValue;
|
double value_to_print = aValue;
|
||||||
|
|
||||||
|
@ -240,8 +245,7 @@ wxString StringFromValue( EDA_UNITS aUnits, double aValue, bool aAddUnitSymbol,
|
||||||
#if defined( EESCHEMA )
|
#if defined( EESCHEMA )
|
||||||
wxString stringValue = wxString::Format( wxT( "%.3f" ), value_to_print );
|
wxString stringValue = wxString::Format( wxT( "%.3f" ), value_to_print );
|
||||||
|
|
||||||
// Strip trailing zeros. However, keep at least 3 digits in mantissa
|
// Strip trailing zeros. However, keep at least 3 digits in mantissa for readability.
|
||||||
// For readability
|
|
||||||
StripTrailingZeros( stringValue, 3 );
|
StripTrailingZeros( stringValue, 3 );
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -368,7 +372,8 @@ double DoubleValueFromString( EDA_UNITS aUnits, const wxString& aTextValue, EDA_
|
||||||
// Check the optional unit designator (2 ch significant)
|
// Check the optional unit designator (2 ch significant)
|
||||||
wxString unit( buf.Mid( brk_point ).Strip( wxString::leading ).Left( 2 ).Lower() );
|
wxString unit( buf.Mid( brk_point ).Strip( wxString::leading ).Left( 2 ).Lower() );
|
||||||
|
|
||||||
if( aUnits == EDA_UNITS::MILLIMETRES || aUnits == EDA_UNITS::MILS || aUnits == EDA_UNITS::INCHES )
|
if( aUnits == EDA_UNITS::MILLIMETRES || aUnits == EDA_UNITS::MILS
|
||||||
|
|| aUnits == EDA_UNITS::INCHES )
|
||||||
{
|
{
|
||||||
if( unit == wxT( "mm" ) )
|
if( unit == wxT( "mm" ) )
|
||||||
{
|
{
|
||||||
|
@ -451,15 +456,13 @@ long long int ValueFromString( EDA_UNITS aUnits, const wxString& aTextValue, EDA
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function AngleToStringDegrees
|
* A helper to convert \a aAngle in deci-degrees to a string in degrees.
|
||||||
* is a helper to convert the \a double \a aAngle (in internal unit)
|
|
||||||
* to a string in degrees
|
|
||||||
*/
|
*/
|
||||||
wxString AngleToStringDegrees( double aAngle )
|
wxString AngleToStringDegrees( double aAngle )
|
||||||
{
|
{
|
||||||
wxString text;
|
wxString text;
|
||||||
|
|
||||||
text.Printf( wxT( "%.3f" ), aAngle/10.0 );
|
text.Printf( wxT( "%.3f" ), aAngle / 10.0 );
|
||||||
StripTrailingZeros( text, 1 );
|
StripTrailingZeros( text, 1 );
|
||||||
|
|
||||||
return text;
|
return text;
|
||||||
|
@ -539,6 +542,9 @@ std::string FormatInternalUnits( int aValue )
|
||||||
{
|
{
|
||||||
len = snprintf( buf, sizeof(buf), "%.10f", engUnits );
|
len = snprintf( buf, sizeof(buf), "%.10f", engUnits );
|
||||||
|
|
||||||
|
// Make sure snprintf() didn't fail and the locale numeric separator is correct.
|
||||||
|
wxCHECK( len >= 0 && len < 50 && strchr( buf, ',' ) == NULL, std::string( "" ) );
|
||||||
|
|
||||||
while( --len > 0 && buf[len] == '0' )
|
while( --len > 0 && buf[len] == '0' )
|
||||||
buf[len] = '\0';
|
buf[len] = '\0';
|
||||||
|
|
||||||
|
@ -550,6 +556,9 @@ std::string FormatInternalUnits( int aValue )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
len = snprintf( buf, sizeof(buf), "%.10g", engUnits );
|
len = snprintf( buf, sizeof(buf), "%.10g", engUnits );
|
||||||
|
|
||||||
|
// Make sure snprintf() didn't fail and the locale numeric separator is correct.
|
||||||
|
wxCHECK( len >= 0 && len < 50 && strchr( buf, ',' ) == NULL , std::string( "" ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
return std::string( buf, len );
|
return std::string( buf, len );
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2020 CERN
|
* Copyright (C) 2020 CERN
|
||||||
|
* Copyright (C) 2021 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* @author Wayne Stambaugh <stambaughw@gmail.com>
|
* @author Wayne Stambaugh <stambaughw@gmail.com>
|
||||||
*
|
*
|
||||||
|
@ -393,6 +394,17 @@ LIB_ITEM* SCH_SEXPR_PARSER::ParseDrawItem()
|
||||||
double SCH_SEXPR_PARSER::parseDouble()
|
double SCH_SEXPR_PARSER::parseDouble()
|
||||||
{
|
{
|
||||||
char* tmp;
|
char* tmp;
|
||||||
|
wxString error;
|
||||||
|
|
||||||
|
// In case the file got saved with the wrong locale.
|
||||||
|
if( strchr( CurText(), ',' ) != NULL )
|
||||||
|
{
|
||||||
|
error.Printf( _( "Floating point number with incorrect local in\nfile: \"%s\"\n"
|
||||||
|
"line: %d\noffset: %d" ),
|
||||||
|
CurSource().c_str(), CurLineNumber(), CurOffset() );
|
||||||
|
|
||||||
|
THROW_IO_ERROR( error );
|
||||||
|
}
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
|
||||||
|
@ -400,7 +412,6 @@ double SCH_SEXPR_PARSER::parseDouble()
|
||||||
|
|
||||||
if( errno )
|
if( errno )
|
||||||
{
|
{
|
||||||
wxString error;
|
|
||||||
error.Printf( _( "Invalid floating point number in\nfile: \"%s\"\nline: %d\noffset: %d" ),
|
error.Printf( _( "Invalid floating point number in\nfile: \"%s\"\nline: %d\noffset: %d" ),
|
||||||
CurSource().c_str(), CurLineNumber(), CurOffset() );
|
CurSource().c_str(), CurLineNumber(), CurOffset() );
|
||||||
|
|
||||||
|
@ -409,7 +420,6 @@ double SCH_SEXPR_PARSER::parseDouble()
|
||||||
|
|
||||||
if( CurText() == tmp )
|
if( CurText() == tmp )
|
||||||
{
|
{
|
||||||
wxString error;
|
|
||||||
error.Printf( _( "Missing floating point number in\nfile: \"%s\"\nline: %d\noffset: %d" ),
|
error.Printf( _( "Missing floating point number in\nfile: \"%s\"\nline: %d\noffset: %d" ),
|
||||||
CurSource().c_str(), CurLineNumber(), CurOffset() );
|
CurSource().c_str(), CurLineNumber(), CurOffset() );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue