Update Scintilla to version 3.10.4
[geany-mirror.git] / scintilla / lexlib / CharacterCategory.h
blobd1ac391526d637544e484c88dbb0b8f037971f86
1 // Scintilla source code edit control
2 /** @file CharacterCategory.h
3 ** Returns the Unicode general category of a character.
4 **/
5 // Copyright 2013 by Neil Hodgson <neilh@scintilla.org>
6 // The License.txt file describes the conditions under which this software may be distributed.
8 #ifndef CHARACTERCATEGORY_H
9 #define CHARACTERCATEGORY_H
11 namespace Scintilla {
13 enum CharacterCategory {
14 ccLu, ccLl, ccLt, ccLm, ccLo,
15 ccMn, ccMc, ccMe,
16 ccNd, ccNl, ccNo,
17 ccPc, ccPd, ccPs, ccPe, ccPi, ccPf, ccPo,
18 ccSm, ccSc, ccSk, ccSo,
19 ccZs, ccZl, ccZp,
20 ccCc, ccCf, ccCs, ccCo, ccCn
23 CharacterCategory CategoriseCharacter(int character);
25 // Common definitions of allowable characters in identifiers from UAX #31.
26 bool IsIdStart(int character);
27 bool IsIdContinue(int character);
28 bool IsXidStart(int character);
29 bool IsXidContinue(int character);
31 class CharacterCategoryMap {
32 private:
33 std::vector<unsigned char> dense;
34 public:
35 CharacterCategoryMap() noexcept;
36 CharacterCategory CategoryFor(int character) const {
37 if (static_cast<size_t>(character) < dense.size()) {
38 return static_cast<CharacterCategory>(dense[character]);
39 } else {
40 // binary search through ranges
41 return CategoriseCharacter(character);
44 int Size() const noexcept;
45 void Optimize(int countCharacters);
50 #endif