diff options
| author | nyamatongwe <unknown> | 2001-10-18 02:03:56 +0000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2001-10-18 02:03:56 +0000 | 
| commit | 9c8738a1b441696f93f2293748a2d25f7623edae (patch) | |
| tree | 50aac6ea0e928de978d492430c651a20da0745e8 /src | |
| parent | 1645932a6f5cbaae6370c423b3654dfeb411c445 (diff) | |
| download | scintilla-mirror-9c8738a1b441696f93f2293748a2d25f7623edae.tar.gz | |
Patch from Robin to ensure non-alphabetic characters are handled correctly
in case insensitive comparisons.
Diffstat (limited to 'src')
| -rw-r--r-- | src/PropSet.cxx | 28 | 
1 files changed, 20 insertions, 8 deletions
| diff --git a/src/PropSet.cxx b/src/PropSet.cxx index 701b2a82c..73ac52343 100644 --- a/src/PropSet.cxx +++ b/src/PropSet.cxx @@ -26,13 +26,21 @@ 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) { -			char upperA = MakeUpperCase(*a); -			char upperB = MakeUpperCase(*b); -			if (upperA != upperB) -				return upperA - upperB; +			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,10 +52,14 @@ 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) { -			char upperA = MakeUpperCase(*a); -			char upperB = MakeUpperCase(*b); -			if (upperA != upperB) -				return upperA - upperB; +			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++; | 
