aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/PropSet.cxx
diff options
context:
space:
mode:
authornyamatongwe <unknown>2001-10-18 02:03:56 +0000
committernyamatongwe <unknown>2001-10-18 02:03:56 +0000
commit9c8738a1b441696f93f2293748a2d25f7623edae (patch)
tree50aac6ea0e928de978d492430c651a20da0745e8 /src/PropSet.cxx
parent1645932a6f5cbaae6370c423b3654dfeb411c445 (diff)
downloadscintilla-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.cxx28
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++;