You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.3 KiB
66 lines
1.3 KiB
// Scintilla source code edit control |
|
/** @file CharacterSet.cxx |
|
** Simple case functions for ASCII. |
|
** Lexer infrastructure. |
|
**/ |
|
// Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org> |
|
// The License.txt file describes the conditions under which this software may be distributed. |
|
|
|
#include <cstdlib> |
|
#include <cassert> |
|
|
|
#include <string_view> |
|
|
|
#include "CharacterSet.h" |
|
|
|
using namespace Lexilla; |
|
|
|
namespace Lexilla { |
|
|
|
int CompareCaseInsensitive(const char *a, const char *b) noexcept { |
|
while (*a && *b) { |
|
if (*a != *b) { |
|
const char upperA = MakeUpperCase(*a); |
|
const char upperB = MakeUpperCase(*b); |
|
if (upperA != upperB) |
|
return upperA - upperB; |
|
} |
|
a++; |
|
b++; |
|
} |
|
// Either *a or *b is nul |
|
return *a - *b; |
|
} |
|
|
|
bool EqualCaseInsensitive(std::string_view a, std::string_view b) noexcept { |
|
if (a.length() != b.length()) { |
|
return false; |
|
} |
|
for (size_t i = 0; i < a.length(); i++) { |
|
if (MakeUpperCase(a[i]) != MakeUpperCase(b[i])) { |
|
return false; |
|
} |
|
} |
|
return true; |
|
} |
|
|
|
int CompareNCaseInsensitive(const char *a, const char *b, size_t len) noexcept { |
|
while (*a && *b && len) { |
|
if (*a != *b) { |
|
const char upperA = MakeUpperCase(*a); |
|
const char upperB = MakeUpperCase(*b); |
|
if (upperA != upperB) |
|
return upperA - upperB; |
|
} |
|
a++; |
|
b++; |
|
len--; |
|
} |
|
if (len == 0) |
|
return 0; |
|
else |
|
// Either *a or *b is nul |
|
return *a - *b; |
|
} |
|
|
|
}
|
|
|