Minor fixes, dead code removal, and coding policy fixes.

* Use version of DateAndTime that returns a wxString and delete the
  version that takes a char* as it is no longer required.
* Merge StrNumICmp() and StrLenNumICmp() into StrLenNumCmp() to create a
  single function for comparing strings with integers and remove a lot
  of duplicate code.
* Remove unused strupper from string.cpp.
* Use wxArrayString for sorting the EDA_LIST_DIALOG contents.
This commit is contained in:
Wayne Stambaugh
2011-11-08 11:37:25 -05:00
parent b88505dd85
commit cd0b231656
42 changed files with 497 additions and 585 deletions
+67 -155
View File
@@ -1,7 +1,7 @@
/*********************************************/
/* string.cpp */
/* some useful functions to handle strings */
/*********************************************/
/**
* @file string.cpp
* @brief Some useful functions to handle strings.
*/
#include "fctsys.h"
#include "macros.h"
@@ -30,6 +30,7 @@ int ReadDelimitedText( wxString* aDest, const char* aSource )
if( cc == '\\' )
{
cc = *aSource++;
if( !cc )
break;
@@ -40,7 +41,9 @@ int ReadDelimitedText( wxString* aDest, const char* aSource )
utf8 += cc;
}
else
{
utf8 += cc;
}
}
}
@@ -50,7 +53,7 @@ int ReadDelimitedText( wxString* aDest, const char* aSource )
}
int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize )
int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize )
{
if( aDestSize <= 0 )
return 0;
@@ -75,6 +78,7 @@ int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize )
if( cc == '\\' )
{
cc = *aSource++;
if( !cc )
break;
@@ -86,7 +90,9 @@ int ReadDelimitedText( char* aDest, const char* aSource, int aDestSize )
*aDest++ = cc;
}
else
{
*aDest++ = cc;
}
}
}
@@ -118,7 +124,9 @@ std::string EscapedUTF8( const wxString& aString )
ret += '\\';
}
else
{
ret += *it;
}
}
ret += '"';
@@ -127,9 +135,6 @@ std::string EscapedUTF8( const wxString& aString )
}
/* Remove leading and training spaces, tabs and end of line chars in text
* return a pointer on the first n char in text
*/
char* StrPurge( char* text )
{
static const char whitespace[] = " \t\n\r\f\v";
@@ -149,168 +154,96 @@ char* StrPurge( char* text )
}
/* Read lines from File
* Skip void lines and comments (starting by #)
* return the first non void line.
* increments *LineNum for each line
*/
char* GetLine( FILE* File, char* Line, int* LineNum, int SizeLine )
{
do {
do {
if( fgets( Line, SizeLine, File ) == NULL )
return NULL;
if( LineNum )
*LineNum += 1;
} while( Line[0] == '#' || Line[0] == '\n' || Line[0] == '\r'
|| Line[0] == 0 );
} while( Line[0] == '#' || Line[0] == '\n' || Line[0] == '\r' || Line[0] == 0 );
strtok( Line, "\n\r" );
return Line;
}
/* return in aBuffer the date and time
* time is the local time.
*/
char* DateAndTime( char* aBuffer )
{
wxString datetime;
datetime = DateAndTime();
strcpy( aBuffer, TO_UTF8( datetime ) );
return aBuffer;
}
/* return the date and time in a wxString
* note: does the same thing than strftime()
* time is the local time.
*/
wxString DateAndTime()
{
wxString Line;
wxDateTime datetime = wxDateTime::Now();
datetime.SetCountry( wxDateTime::Country_Default );
Line = datetime.Format( wxDefaultDateTimeFormat, wxDateTime::Local );
return Line;
return datetime.Format( wxDefaultDateTimeFormat, wxDateTime::Local );
}
/*
* sort() function
* Same as strncmp() but numbers in strings
* are compared according to the value, not the ascii value of each digit
*/
int StrLenNumCmp( const wxChar* str1, const wxChar* str2, int NbMax )
int StrNumCmp( const wxChar* aString1, const wxChar* aString2, int aLength, bool aIgnoreCase )
{
int i;
int nb1 = 0, nb2 = 0;
if( ( str1 == NULL ) || ( str2 == NULL ) )
if( ( aString1 == NULL ) || ( aString2 == NULL ) )
return 0;
for( i = 0; i < NbMax; i++ )
for( i = 0; i < aLength; i++ )
{
if( isdigit( *str1 ) && isdigit( *str2 ) ) /* digit found */
if( isdigit( *aString1 ) && isdigit( *aString2 ) ) /* digit found */
{
nb1 = 0; nb2 = 0;
while( isdigit( *str1 ) )
nb1 = 0;
nb2 = 0;
while( isdigit( *aString1 ) )
{
nb1 = nb1 * 10 + *str1 - '0'; str1++;
nb1 = nb1 * 10 + *aString1 - '0';
aString1++;
}
while( isdigit( *str2 ) )
while( isdigit( *aString2 ) )
{
nb2 = nb2 * 10 + *str2 - '0'; str2++;
nb2 = nb2 * 10 + *aString2 - '0';
aString2++;
}
if( nb1 < nb2 )
return -1;
if( nb1 > nb2 )
return 1;
}
if( *str1 < *str2 )
return -1;
if( *str1 > *str2 )
return 1;
if( ( *str1 == 0 ) && ( *str2 == 0 ) )
return 0;
str1++; str2++;
if( aIgnoreCase )
{
if( toupper( *aString1 ) < toupper( *aString2 ) )
return -1;
if( toupper( *aString1 ) > toupper( *aString2 ) )
return 1;
if( ( *aString1 == 0 ) && ( *aString2 == 0 ) )
return 0;
}
else
{
if( *aString1 < *aString2 )
return -1;
if( *aString1 > *aString2 )
return 1;
if( ( *aString1 == 0 ) && ( *aString2 == 0 ) )
return 0;
}
aString1++;
aString2++;
}
return 0;
}
/*
* sort() function
* Same as stricmp() but numbers in strings
* are compared according to the value, not the ascii value of each digit
*/
int StrNumICmp( const wxChar* str1, const wxChar* str2 )
{
return StrLenNumICmp( str1, str2, 32735 );
}
/*
* sort() function
* Same as strnicmp() but numbers in strings
* are compared according to the value, not the ascii value of each digit
*/
int StrLenNumICmp( const wxChar* str1, const wxChar* str2, int NbMax )
{
int i;
int nb1 = 0, nb2 = 0;
if( ( str1 == NULL ) || ( str2 == NULL ) )
return 0;
for( i = 0; i < NbMax; i++ )
{
if( isdigit( *str1 ) && isdigit( *str2 ) ) /* find number */
{
nb1 = 0; nb2 = 0;
while( isdigit( *str1 ) )
{
nb1 = nb1 * 10 + *str1 - '0'; str1++;
}
while( isdigit( *str2 ) )
{
nb2 = nb2 * 10 + *str2 - '0'; str2++;
}
if( nb1 < nb2 )
return -1;
if( nb1 > nb2 )
return 1;
}
if( toupper( *str1 ) < toupper( *str2 ) )
return -1;
if( toupper( *str1 ) > toupper( *str2 ) )
return 1;
if( (*str1 == 0 ) && ( *str2 == 0 ) )
return 0;
str1++; str2++;
}
return 0;
}
/* compare a string to a pattern
* ( usual chars * and ? allowed).
* if case_sensitive == true, comparison is case sensitive
* return true if match else false
*/
bool WildCompareString( const wxString& pattern, const wxString& string_to_tst,
bool case_sensitive )
{
@@ -336,7 +269,8 @@ bool WildCompareString( const wxString& pattern, const wxString& string_to_tst,
while( ( *string ) && ( *wild != '*' ) )
{
if( ( *wild != *string ) && ( *wild != '?' ) )
return FALSE;
return false;
wild++; string++;
}
@@ -370,16 +304,13 @@ bool WildCompareString( const wxString& pattern, const wxString& string_to_tst,
}
/* Converts a string used to compensate for internalization of printf().
* Generated floats with a comma instead of point.
* Obsolete: use SetLocaleTo_C_standard instead
*/
char* to_point( char* Text )
{
char* line = Text;
if( Text == NULL )
return NULL;
for( ; *Text != 0; Text++ )
{
if( *Text == ',' )
@@ -390,27 +321,6 @@ char* to_point( char* Text )
}
/* Convert string to upper case.
* Returns pointer to the converted string.
*/
char* strupper( char* Text )
{
char* code = Text;
if( Text )
{
while( *code )
{
if( ( *code >= 'a' ) && ( *code <= 'z' ) )
*code += 'A' - 'a';
code++;
}
}
return Text;
}
int RefDesStringCompare( const wxString& strFWord, const wxString& strSWord )
{
// The different sections of the first string
@@ -422,10 +332,8 @@ int RefDesStringCompare( const wxString& strFWord, const wxString& strSWord )
int isEqual = 0; // The numerical results of a string compare
int iReturn = 0; // The variable that is being returned
long lFirstDigit = 0; /* The converted middle section of the first
*string */
long lSecondDigit = 0; /* The converted middle section of the second
*string */
long lFirstDigit = 0; // The converted middle section of the first string
long lSecondDigit = 0; // The converted middle section of the second string
// Split the two strings into separate parts
SplitString( strFWord, &strFWordBeg, &strFWordMid, &strFWordEnd );
@@ -482,6 +390,7 @@ int SplitString( wxString strToSplit,
// Starting at the end of the string look for the first digit
int ii;
for( ii = (strToSplit.length() - 1); ii >= 0; ii-- )
{
if( isdigit( strToSplit[ii] ) )
@@ -490,7 +399,9 @@ int SplitString( wxString strToSplit,
// If there were no digits then just set the single string
if( ii < 0 )
{
*strBeginning = strToSplit;
}
else
{
// Since there is at least one digit this is the trailing string
@@ -498,6 +409,7 @@ int SplitString( wxString strToSplit,
// Go to the end of the digits
int position = ii + 1;
for( ; ii >= 0; ii-- )
{
if( !isdigit( strToSplit[ii] ) )
@@ -509,7 +421,7 @@ int SplitString( wxString strToSplit,
*strDigits = strToSplit.substr( 0, position );
/* We were only looking for the last set of digits everything else is
*part of the preamble */
* part of the preamble */
else
{
*strDigits = strToSplit.substr( ii + 1, position - ii - 1 );