1
// Scintilla source code edit control
2
/** @file CharClassify.cxx
3
** Character classifications used by Document and RESearch.
5
// Copyright 2006 by Neil Hodgson <neilh@scintilla.org>
6
// The License.txt file describes the conditions under which this software may be distributed.
11
#include "CharClassify.h"
13
// Shut up annoying Visual C++ warnings:
15
#pragma warning(disable: 4514)
18
CharClassify::CharClassify() {
19
SetDefaultCharClasses(true);
22
void CharClassify::SetDefaultCharClasses(bool includeWordClass) {
23
// Initialize all char classes to default values
24
for (int ch = 0; ch < 256; ch++) {
25
if (ch == '\r' || ch == '\n')
26
charClass[ch] = ccNewLine;
27
else if (ch < 0x20 || ch == ' ')
28
charClass[ch] = ccSpace;
29
else if (includeWordClass && (ch >= 0x80 || isalnum(ch) || ch == '_'))
30
charClass[ch] = ccWord;
32
charClass[ch] = ccPunctuation;
36
void CharClassify::SetCharClasses(const unsigned char *chars, cc newCharClass) {
37
// Apply the newCharClass to the specifed chars
40
charClass[*chars] = static_cast<unsigned char>(newCharClass);
46
int CompareCaseInsensitive(const char *a, const char *b) {
49
char upperA = MakeUpperCase(*a);
50
char upperB = MakeUpperCase(*b);
52
return upperA - upperB;
57
// Either *a or *b is nul
61
int CompareNCaseInsensitive(const char *a, const char *b, size_t len) {
62
while (*a && *b && len) {
64
char upperA = MakeUpperCase(*a);
65
char upperB = MakeUpperCase(*b);
67
return upperA - upperB;
76
// Either *a or *b is nul