diff options
author | Neil <nyamatongwe@gmail.com> | 2021-04-27 10:04:57 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2021-04-27 10:04:57 +1000 |
commit | 13b6f88d9b4710e1c51b36a97c3b45a6441a7820 (patch) | |
tree | a8f7b3fa0e91986f4d0a8125a705df771ddb5f83 /src/CharacterCategoryMap.h | |
parent | dd48a3b8b049ab42ac16108b428e947135f82877 (diff) | |
download | scintilla-mirror-13b6f88d9b4710e1c51b36a97c3b45a6441a7820.tar.gz |
Rename CharacterSet and CharacterCategory modules in Scintilla to CharacterType
and CharacterCategoryMap to avoid clashes with Lexilla when building an
executable that includes both.
Diffstat (limited to 'src/CharacterCategoryMap.h')
-rw-r--r-- | src/CharacterCategoryMap.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/CharacterCategoryMap.h b/src/CharacterCategoryMap.h new file mode 100644 index 000000000..35706eda7 --- /dev/null +++ b/src/CharacterCategoryMap.h @@ -0,0 +1,52 @@ +// Scintilla source code edit control +/** @file CharacterCategoryMap.h + ** Returns the Unicode general category of a character. + ** Similar code to Lexilla's lexilla/lexlib/CharacterCategory.h but renamed + ** to avoid problems with builds that statically include both Scintilla and Lexilla. + **/ +// Copyright 2013 by Neil Hodgson <neilh@scintilla.org> +// The License.txt file describes the conditions under which this software may be distributed. + +#ifndef CHARACTERCATEGORYMAP_H +#define CHARACTERCATEGORYMAP_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 |