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/PropSet.cxx | |
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/PropSet.cxx')
-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++; |