diff options
author | Neil <nyamatongwe@gmail.com> | 2021-01-29 20:51:34 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2021-01-29 20:51:34 +1100 |
commit | ba8b1a91525dd90f8fdcc75480f37815fecce2d2 (patch) | |
tree | 5ebce1a7d7c25aaee80e640b8cb56cc9aa5d6d34 /src/CharacterCategory.h | |
parent | f8817063200055b8b9f7b9a7a83c30100f64c903 (diff) | |
download | scintilla-mirror-ba8b1a91525dd90f8fdcc75480f37815fecce2d2.tar.gz |
Move CharacterSet and CharacterCategory from lexlib to src as in both Lexilla and Scintilla
Diffstat (limited to 'src/CharacterCategory.h')
-rw-r--r-- | src/CharacterCategory.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/CharacterCategory.h b/src/CharacterCategory.h new file mode 100644 index 000000000..cd3320dd9 --- /dev/null +++ b/src/CharacterCategory.h @@ -0,0 +1,50 @@ +// Scintilla source code edit control +/** @file CharacterCategory.h + ** Returns the Unicode general category of a character. + **/ +// Copyright 2013 by Neil Hodgson <neilh@scintilla.org> +// The License.txt file describes the conditions under which this software may be distributed. + +#ifndef CHARACTERCATEGORY_H +#define CHARACTERCATEGORY_H + +namespace Scintilla { + +enum CharacterCategory { + ccLu, ccLl, ccLt, ccLm, ccLo, + ccMn, ccMc, ccMe, + ccNd, ccNl, ccNo, + ccPc, ccPd, ccPs, ccPe, ccPi, ccPf, ccPo, + ccSm, ccSc, ccSk, ccSo, + ccZs, ccZl, ccZp, + ccCc, ccCf, ccCs, ccCo, ccCn +}; + +CharacterCategory CategoriseCharacter(int character); + +// Common definitions of allowable characters in identifiers from UAX #31. +bool IsIdStart(int character); +bool IsIdContinue(int character); +bool IsXidStart(int character); +bool IsXidContinue(int character); + +class CharacterCategoryMap { +private: + std::vector<unsigned char> dense; +public: + CharacterCategoryMap(); + CharacterCategory CategoryFor(int character) const { + if (static_cast<size_t>(character) < dense.size()) { + return static_cast<CharacterCategory>(dense[character]); + } else { + // binary search through ranges + return CategoriseCharacter(character); + } + } + int Size() const noexcept; + void Optimize(int countCharacters); +}; + +} + +#endif |