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 4df512b1d..72dae5f5b 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -1707,7 +1707,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
@@ -2166,6 +2166,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) {
endStyled = position;
}
diff --git a/src/Document.h b/src/Document.h
index de986ce2a..c5b078a72 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) 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 72660dd1b..4bae9b44f 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -6253,6 +6253,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();