diff options
Diffstat (limited to 'src/ScintillaBase.cxx')
-rw-r--r-- | src/ScintillaBase.cxx | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index c1f3b995a..055d61f91 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -24,9 +24,7 @@ #include "ILexer.h" #include "Scintilla.h" -#ifdef SCI_LEXER #include "SciLexer.h" -#endif #include "PropSetSimple.h" #include "CharacterCategory.h" @@ -60,9 +58,7 @@ #include "AutoComplete.h" #include "ScintillaBase.h" -#ifdef SCI_LEXER #include "ExternalLexer.h" -#endif using namespace Scintilla; @@ -547,8 +543,6 @@ void ScintillaBase::RightButtonDownWithModifiers(Point pt, unsigned int curTime, Editor::RightButtonDownWithModifiers(pt, curTime, modifiers); } -#ifdef SCI_LEXER - namespace Scintilla { class LexState : public LexInterface { @@ -560,6 +554,7 @@ public: int lexLanguage; explicit LexState(Document *pdoc_); + void SetInstance(ILexer5 *instance_); // Deleted so LexState objects can not be copied. LexState(const LexState &) = delete; LexState(LexState &&) = delete; @@ -568,8 +563,10 @@ public: ~LexState() override; void SetLexer(uptr_t wParam); void SetLexerLanguage(const char *languageName); + const char *DescribeWordListSets(); void SetWordList(int n, const char *wl); + int GetIdentifier() const; const char *GetName() const; void *PrivateCall(int operation, void *pointer); const char *PropertyNames(); @@ -612,6 +609,15 @@ LexState::~LexState() { } } +void LexState::SetInstance(ILexer5 *instance_) { + if (instance) { + instance->Release(); + instance = nullptr; + } + instance = instance_; + pdoc->LexerChanged(); +} + LexState *ScintillaBase::DocumentLexState() { if (!pdoc->GetLexInterface()) { pdoc->SetLexInterface(new LexState(pdoc)); @@ -674,7 +680,15 @@ void LexState::SetWordList(int n, const char *wl) { } const char *LexState::GetName() const { - return lexCurrent ? lexCurrent->languageName : ""; + if (lexCurrent) { + return lexCurrent->languageName; + } + if (instance) { + if (instance->Version() >= lvRelease5) { + return instance->GetName(); + } + } + return ""; } void *LexState::PrivateCall(int operation, void *pointer) { @@ -832,10 +846,7 @@ const char *LexState::DescriptionOfStyle(int style) { } } -#endif - void ScintillaBase::NotifyStyleToNeeded(Sci::Position endStyleNeeded) { -#ifdef SCI_LEXER if (DocumentLexState()->lexLanguage != SCLEX_CONTAINER) { const Sci::Line lineEndStyled = pdoc->SciLineFromPosition(pdoc->GetEndStyled()); @@ -844,14 +855,11 @@ void ScintillaBase::NotifyStyleToNeeded(Sci::Position endStyleNeeded) { DocumentLexState()->Colourise(endStyled, endStyleNeeded); return; } -#endif Editor::NotifyStyleToNeeded(endStyleNeeded); } void ScintillaBase::NotifyLexerChanged(Document *, void *) { -#ifdef SCI_LEXER vs.EnsureStyle(0xff); -#endif } sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { @@ -1049,7 +1057,6 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara displayPopupMenu = static_cast<int>(wParam); break; -#ifdef SCI_LEXER case SCI_SETLEXER: DocumentLexState()->SetLexer(static_cast<int>(wParam)); break; @@ -1057,6 +1064,10 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara case SCI_GETLEXER: return DocumentLexState()->lexLanguage; + case SCI_SETILEXER: + DocumentLexState()->SetInstance(reinterpret_cast<ILexer5 *>(lParam)); + return 0; + case SCI_COLOURISE: if (DocumentLexState()->lexLanguage == SCLEX_CONTAINER) { pdoc->ModifiedAt(static_cast<Sci::Position>(wParam)); @@ -1093,9 +1104,11 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara case SCI_GETLEXERLANGUAGE: return StringResult(lParam, DocumentLexState()->GetName()); +#ifdef SCI_LEXER case SCI_LOADLEXERLIBRARY: ExternalLexerLoad(ConstCharPtrFromSPtr(lParam)); break; +#endif case SCI_PRIVATELEXERCALL: return reinterpret_cast<sptr_t>( @@ -1167,8 +1180,6 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara return StringResult(lParam, DocumentLexState()-> DescriptionOfStyle(static_cast<int>(wParam))); -#endif - default: return Editor::WndProc(iMessage, wParam, lParam); } |