aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/CharacterCategoryMap.h
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2021-04-27 10:04:57 +1000
committerNeil <nyamatongwe@gmail.com>2021-04-27 10:04:57 +1000
commit13b6f88d9b4710e1c51b36a97c3b45a6441a7820 (patch)
treea8f7b3fa0e91986f4d0a8125a705df771ddb5f83 /src/CharacterCategoryMap.h
parentdd48a3b8b049ab42ac16108b428e947135f82877 (diff)
downloadscintilla-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.h52
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