aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/ScintillaBase.cxx
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2019-12-31 20:19:24 +1100
committerNeil <nyamatongwe@gmail.com>2019-12-31 20:19:24 +1100
commit0af155eae811e515b7d4fbad8e198cdf01f6ff2f (patch)
tree39e4b88da4736d3c6556cf1b39ca2e01b9e1a789 /src/ScintillaBase.cxx
parenteed707bb9ad6da944af207a51e4a8d460d6c6846 (diff)
downloadscintilla-mirror-0af155eae811e515b7d4fbad8e198cdf01f6ff2f.tar.gz
Implement SCI_SETILEXER.
Diffstat (limited to 'src/ScintillaBase.cxx')
-rw-r--r--src/ScintillaBase.cxx43
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);
}