diff options
Diffstat (limited to 'src/ScintillaBase.cxx')
| -rw-r--r-- | src/ScintillaBase.cxx | 31 | 
1 files changed, 29 insertions, 2 deletions
| diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index fd2bef184..4eb0cf7a0 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -38,6 +38,7 @@ ScintillaBase::ScintillaBase() {  	listType = 0;  #ifdef SCI_LEXER  	lexLanguage = SCLEX_CONTAINER; +	lexCurrent = 0;  	for (int wl = 0;wl < numWordLists;wl++)  		keyWordLists[wl] = new WordList;  #endif @@ -338,6 +339,22 @@ void ScintillaBase::ButtonDown(Point pt, unsigned int curTime, bool shift, bool  }  #ifdef SCI_LEXER +void ScintillaBase::SetLexer(uptr_t wParam) { +	lexLanguage = wParam; +	lexCurrent = LexerModule::Find(lexLanguage); +	if (!lexCurrent) +		lexCurrent = LexerModule::Find(SCLEX_NULL); +} + +void ScintillaBase::SetLexerLanguage(const char *languageName) { +	lexLanguage = SCLEX_CONTAINER; +	lexCurrent = LexerModule::Find(languageName); +	if (!lexCurrent) +		lexCurrent = LexerModule::Find(SCLEX_NULL); +	if (lexCurrent) +		lexLanguage = lexCurrent->GetLanguage(); +} +  void ScintillaBase::Colourise(int start, int end) {  	int lengthDoc = pdoc->Length();  	if (end == -1) @@ -352,8 +369,12 @@ void ScintillaBase::Colourise(int start, int end) {  		styleStart = styler.StyleAt(start - 1);  	styler.SetCodePage(pdoc->dbcsCodePage); -	LexerModule::Colourise(start, len, styleStart, lexLanguage, keyWordLists, styler); -	styler.Flush(); +	if (lexCurrent) {	// Should always succeed as null lexer should always be available +		lexCurrent->Lex(start, len, styleStart, keyWordLists, styler); +		styler.Flush(); +		lexCurrent->Fold(start, len, styleStart, keyWordLists, styler); +		styler.Flush(); +	}  }  #endif @@ -482,6 +503,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara  #ifdef SCI_LEXER  	case SCI_SETLEXER: +		SetLexer(wParam);  		lexLanguage = wParam;  		break; @@ -504,6 +526,11 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara  			keyWordLists[wParam]->Set(reinterpret_cast<const char *>(lParam));  		}  		break; + +	case SCI_SETLEXERLANGUAGE: +		SetLexerLanguage(reinterpret_cast<const char *>(lParam)); +		break; +  #endif  	default: | 
