aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Document.cxx10
-rw-r--r--src/Document.h3
-rw-r--r--src/Editor.cxx7
3 files changed, 19 insertions, 1 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index 4aad2e370..dd11ae42d 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -1710,7 +1710,7 @@ CharClassify::cc Document::WordCharacterClass(unsigned int ch) const {
if (dbcsCodePage && (!UTF8IsAscii(ch))) {
if (SC_CP_UTF8 == dbcsCodePage) {
// Use hard coded Unicode class
- const CharacterCategory cc = CategoriseCharacter(ch);
+ const CharacterCategory cc = charMap.CategoryFor(ch);
switch (cc) {
// Separator, Line/Paragraph
@@ -2169,6 +2169,14 @@ int Document::GetCharsOfClass(CharClassify::cc characterClass, unsigned char *bu
return charClass.GetCharsOfClass(characterClass, buffer);
}
+void Document::SetCharacterCategoryOptimization(int countCharacters) {
+ charMap.Optimize(countCharacters);
+}
+
+int Document::CharacterCategoryOptimization() const noexcept {
+ return charMap.Size();
+}
+
void SCI_METHOD Document::StartStyling(Sci_Position position, char) {
endStyled = position;
}
diff --git a/src/Document.h b/src/Document.h
index f97e1393f..adbdc3413 100644
--- a/src/Document.h
+++ b/src/Document.h
@@ -230,6 +230,7 @@ private:
int refCount;
CellBuffer cb;
CharClassify charClass;
+ CharacterCategoryMap charMap;
std::unique_ptr<CaseFolder> pcf;
Sci::Position endStyled;
int styleClock;
@@ -444,6 +445,8 @@ public:
void SetDefaultCharClasses(bool includeWordClass);
void SetCharClasses(const unsigned char *chars, CharClassify::cc newCharClass);
int GetCharsOfClass(CharClassify::cc characterClass, unsigned char *buffer) const;
+ void SetCharacterCategoryOptimization(int countCharacters);
+ int CharacterCategoryOptimization() const noexcept;
void SCI_METHOD StartStyling(Sci_Position position, char mask) override;
bool SCI_METHOD SetStyleFor(Sci_Position length, char style) override;
bool SCI_METHOD SetStyles(Sci_Position length, const char *styles) override;
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 75c5d14a0..a9df59f96 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -6249,6 +6249,13 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
pdoc->SetDefaultCharClasses(true);
break;
+ case SCI_SETCHARACTERCATEGORYOPTIMIZATION:
+ pdoc->SetCharacterCategoryOptimization(static_cast<int>(wParam));
+ break;
+
+ case SCI_GETCHARACTERCATEGORYOPTIMIZATION:
+ return pdoc->CharacterCategoryOptimization();
+
case SCI_GETLENGTH:
return pdoc->Length();