| 
									
										
										
										
											2024-07-02 23:47:26 +08:00
										 |  |  | // Scintilla source code edit control
 | 
					
						
							|  |  |  | /** @file LexerSimple.cxx
 | 
					
						
							|  |  |  |  ** A simple lexer with no state. | 
					
						
							|  |  |  |  **/ | 
					
						
							|  |  |  | // Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
 | 
					
						
							|  |  |  | // The License.txt file describes the conditions under which this software may be distributed.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <cstdlib>
 | 
					
						
							|  |  |  | #include <cassert>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <string>
 | 
					
						
							|  |  |  | #include <string_view>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "ILexer.h"
 | 
					
						
							|  |  |  | #include "Scintilla.h"
 | 
					
						
							|  |  |  | #include "SciLexer.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "PropSetSimple.h"
 | 
					
						
							|  |  |  | #include "WordList.h"
 | 
					
						
							|  |  |  | #include "LexAccessor.h"
 | 
					
						
							|  |  |  | #include "Accessor.h"
 | 
					
						
							|  |  |  | #include "LexerModule.h"
 | 
					
						
							|  |  |  | #include "LexerBase.h"
 | 
					
						
							|  |  |  | #include "LexerSimple.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace Lexilla; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | LexerSimple::LexerSimple(const LexerModule *module_) : | 
					
						
							|  |  |  | 	LexerBase(module_->LexClasses(), module_->NamedStyles()), | 
					
						
							| 
									
										
										
										
											2024-09-04 19:01:58 +08:00
										 |  |  | 	lexerModule(module_) { | 
					
						
							|  |  |  | 	for (int wl = 0; wl < lexerModule->GetNumWordLists(); wl++) { | 
					
						
							| 
									
										
										
										
											2024-07-02 23:47:26 +08:00
										 |  |  | 		if (!wordLists.empty()) | 
					
						
							|  |  |  | 			wordLists += "\n"; | 
					
						
							| 
									
										
										
										
											2024-09-04 19:01:58 +08:00
										 |  |  | 		wordLists += lexerModule->GetWordListDescription(wl); | 
					
						
							| 
									
										
										
										
											2024-07-02 23:47:26 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const char * SCI_METHOD LexerSimple::DescribeWordListSets() { | 
					
						
							|  |  |  | 	return wordLists.c_str(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void SCI_METHOD LexerSimple::Lex(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, Scintilla::IDocument *pAccess) { | 
					
						
							|  |  |  | 	Accessor astyler(pAccess, &props); | 
					
						
							| 
									
										
										
										
											2024-09-04 19:01:58 +08:00
										 |  |  | 	lexerModule->Lex(startPos, lengthDoc, initStyle, keyWordLists, astyler); | 
					
						
							| 
									
										
										
										
											2024-07-02 23:47:26 +08:00
										 |  |  | 	astyler.Flush(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void SCI_METHOD LexerSimple::Fold(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, Scintilla::IDocument *pAccess) { | 
					
						
							|  |  |  | 	if (props.GetInt("fold")) { | 
					
						
							|  |  |  | 		Accessor astyler(pAccess, &props); | 
					
						
							| 
									
										
										
										
											2024-09-04 19:01:58 +08:00
										 |  |  | 		lexerModule->Fold(startPos, lengthDoc, initStyle, keyWordLists, astyler); | 
					
						
							| 
									
										
										
										
											2024-07-02 23:47:26 +08:00
										 |  |  | 		astyler.Flush(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const char * SCI_METHOD LexerSimple::GetName() { | 
					
						
							| 
									
										
										
										
											2024-09-04 19:01:58 +08:00
										 |  |  | 	return lexerModule->languageName; | 
					
						
							| 
									
										
										
										
											2024-07-02 23:47:26 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int SCI_METHOD LexerSimple::GetIdentifier() { | 
					
						
							| 
									
										
										
										
											2024-09-04 19:01:58 +08:00
										 |  |  | 	return lexerModule->GetLanguage(); | 
					
						
							| 
									
										
										
										
											2024-07-02 23:47:26 +08:00
										 |  |  | } |