A fix for Scintilla's case insensitive sort routine

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12051 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2001-10-18 01:27:16 +00:00
parent b8b0e4022e
commit 30dbb45440
2 changed files with 62 additions and 32 deletions

View File

@@ -26,14 +26,24 @@ static inline char MakeUpperCase(char ch) {
return static_cast<char>(ch - 'a' + 'A');
}
static inline bool IsLetter(char ch) {
return ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'));
}
int CompareCaseInsensitive(const char *a, const char *b) {
while (*a && *b) {
if (*a != *b) {
if (IsLetter(*a) && IsLetter(*b)) {
char upperA = MakeUpperCase(*a);
char upperB = MakeUpperCase(*b);
if (upperA != upperB)
return upperA - upperB;
}
else {
return *a - *b;
}
}
a++;
b++;
}
@@ -44,11 +54,16 @@ int CompareCaseInsensitive(const char *a, const char *b) {
int CompareNCaseInsensitive(const char *a, const char *b, int len) {
while (*a && *b && len) {
if (*a != *b) {
if (IsLetter(*a) && IsLetter(*b)) {
char upperA = MakeUpperCase(*a);
char upperB = MakeUpperCase(*b);
if (upperA != upperB)
return upperA - upperB;
}
else {
return *a - *b;
}
}
a++;
b++;
len--;

View File

@@ -26,14 +26,24 @@ static inline char MakeUpperCase(char ch) {
return static_cast<char>(ch - 'a' + 'A');
}
static inline bool IsLetter(char ch) {
return ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'));
}
int CompareCaseInsensitive(const char *a, const char *b) {
while (*a && *b) {
if (*a != *b) {
if (IsLetter(*a) && IsLetter(*b)) {
char upperA = MakeUpperCase(*a);
char upperB = MakeUpperCase(*b);
if (upperA != upperB)
return upperA - upperB;
}
else {
return *a - *b;
}
}
a++;
b++;
}
@@ -44,11 +54,16 @@ int CompareCaseInsensitive(const char *a, const char *b) {
int CompareNCaseInsensitive(const char *a, const char *b, int len) {
while (*a && *b && len) {
if (*a != *b) {
if (IsLetter(*a) && IsLetter(*b)) {
char upperA = MakeUpperCase(*a);
char upperB = MakeUpperCase(*b);
if (upperA != upperB)
return upperA - upperB;
}
else {
return *a - *b;
}
}
a++;
b++;
len--;