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.
13 #include "CharacterType.h"
14 #include "CharClassify.h"
16 using namespace Scintilla::Internal
;
18 CharClassify::CharClassify() : charClass
{} {
19 SetDefaultCharClasses(true);
22 void CharClassify::SetDefaultCharClasses(bool includeWordClass
) {
23 // Initialize all char classes to default values
24 for (int ch
= 0; ch
< maxChar
; ch
++) {
25 if (ch
== '\r' || ch
== '\n')
26 charClass
[ch
] = CharacterClass::newLine
;
27 else if (IsControl(ch
) || ch
== ' ')
28 charClass
[ch
] = CharacterClass::space
;
29 else if (includeWordClass
&& (ch
>= 0x80 || IsAlphaNumeric(ch
) || ch
== '_'))
30 charClass
[ch
] = CharacterClass::word
;
32 charClass
[ch
] = CharacterClass::punctuation
;
36 void CharClassify::SetCharClasses(const unsigned char *chars
, CharacterClass newCharClass
) {
37 // Apply the newCharClass to the specified chars
40 charClass
[*chars
] = newCharClass
;
46 int CharClassify::GetCharsOfClass(CharacterClass characterClass
, unsigned char *buffer
) const noexcept
{
47 // Get characters belonging to the given char class; return the number
48 // of characters (if the buffer is NULL, don't write to it).
50 for (int ch
= maxChar
- 1; ch
>= 0; --ch
) {
51 if (charClass
[ch
] == characterClass
) {
54 *buffer
= static_cast<unsigned char>(ch
);