diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Document.cxx | 10 | ||||
-rw-r--r-- | src/Document.h | 3 | ||||
-rw-r--r-- | src/Editor.cxx | 7 |
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(); |