1 // Scintilla source code edit control 2 /** @file LexerSimple.cxx 3 ** A simple lexer with no state. 4 **/ 5 // Copyright 1998-2010 by Neil Hodgson <[email protected]> 6 // The License.txt file describes the conditions under which this software may be distributed. 7 8 #include <cstdlib> 9 #include <cassert> 10 11 #include <string> 12 13 #include "ILexer.h" 14 #include "Scintilla.h" 15 #include "SciLexer.h" 16 17 #include "PropSetSimple.h" 18 #include "WordList.h" 19 #include "LexAccessor.h" 20 #include "Accessor.h" 21 #include "LexerModule.h" 22 #include "LexerBase.h" 23 #include "LexerSimple.h" 24 25 using namespace Scintilla; 26 27 LexerSimple::LexerSimple(const LexerModule *module_) : 28 LexerBase(module_->LexClasses(), module_->NamedStyles()), 29 module(module_) { 30 for (int wl = 0; wl < module->GetNumWordLists(); wl++) { 31 if (!wordLists.empty()) 32 wordLists += "\n"; 33 wordLists += module->GetWordListDescription(wl); 34 } 35 } 36 37 const char * SCI_METHOD LexerSimple::DescribeWordListSets() { 38 return wordLists.c_str(); 39 } 40 41 void SCI_METHOD LexerSimple::Lex(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) { 42 Accessor astyler(pAccess, &props); 43 module->Lex(startPos, lengthDoc, initStyle, keyWordLists, astyler); 44 astyler.Flush(); 45 } 46 47 void SCI_METHOD LexerSimple::Fold(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) { 48 if (props.GetInt("fold")) { 49 Accessor astyler(pAccess, &props); 50 module->Fold(startPos, lengthDoc, initStyle, keyWordLists, astyler); 51 astyler.Flush(); 52 } 53 } 54 55 const char * SCI_METHOD LexerSimple::GetName() { 56 return module->languageName; 57 } 58 59 int SCI_METHOD LexerSimple::GetIdentifier() { 60 return module->GetLanguage(); 61 } 62