7396f7672d
git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@4723 ea778897-0a13-0410-b9d1-a72fbfd435f5
79 lines
1.8 KiB
C++
79 lines
1.8 KiB
C++
// Scintilla source code edit control
|
|
/** @file CharClassify.cxx
|
|
** Character classifications used by Document and RESearch.
|
|
**/
|
|
// Copyright 2006 by Neil Hodgson <neilh@scintilla.org>
|
|
// The License.txt file describes the conditions under which this software may be distributed.
|
|
|
|
#include <stdlib.h>
|
|
#include <ctype.h>
|
|
|
|
#include "CharClassify.h"
|
|
|
|
// Shut up annoying Visual C++ warnings:
|
|
#ifdef _MSC_VER
|
|
#pragma warning(disable: 4514)
|
|
#endif
|
|
|
|
CharClassify::CharClassify() {
|
|
SetDefaultCharClasses(true);
|
|
}
|
|
|
|
void CharClassify::SetDefaultCharClasses(bool includeWordClass) {
|
|
// Initialize all char classes to default values
|
|
for (int ch = 0; ch < 256; ch++) {
|
|
if (ch == '\r' || ch == '\n')
|
|
charClass[ch] = ccNewLine;
|
|
else if (ch < 0x20 || ch == ' ')
|
|
charClass[ch] = ccSpace;
|
|
else if (includeWordClass && (ch >= 0x80 || isalnum(ch) || ch == '_'))
|
|
charClass[ch] = ccWord;
|
|
else
|
|
charClass[ch] = ccPunctuation;
|
|
}
|
|
}
|
|
|
|
void CharClassify::SetCharClasses(const unsigned char *chars, cc newCharClass) {
|
|
// Apply the newCharClass to the specifed chars
|
|
if (chars) {
|
|
while (*chars) {
|
|
charClass[*chars] = static_cast<unsigned char>(newCharClass);
|
|
chars++;
|
|
}
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
a++;
|
|
b++;
|
|
}
|
|
// Either *a or *b is nul
|
|
return *a - *b;
|
|
}
|
|
|
|
int CompareNCaseInsensitive(const char *a, const char *b, size_t len) {
|
|
while (*a && *b && len) {
|
|
if (*a != *b) {
|
|
char upperA = MakeUpperCase(*a);
|
|
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;
|
|
}
|