1 // Scintilla source code edit control 2 /** @file DefaultLexer.cxx 3 ** A lexer base class that provides reasonable default behaviour. 4 **/ 5 // Copyright 2017 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 #include <cstring> 11 12 #include "ILexer.h" 13 #include "Scintilla.h" 14 #include "SciLexer.h" 15 16 #include "PropSetSimple.h" 17 #include "WordList.h" 18 #include "LexAccessor.h" 19 #include "Accessor.h" 20 #include "LexerModule.h" 21 #include "DefaultLexer.h" 22 23 using namespace Scintilla; 24 25 static const char styleSubable[] = { 0 }; 26 27 DefaultLexer::DefaultLexer(const char *languageName_, int language_, 28 const LexicalClass *lexClasses_, size_t nClasses_) : 29 languageName(languageName_), 30 language(language_), 31 lexClasses(lexClasses_), 32 nClasses(nClasses_) { 33 } 34 35 DefaultLexer::~DefaultLexer() { 36 } 37 38 void SCI_METHOD DefaultLexer::Release() { 39 delete this; 40 } 41 42 int SCI_METHOD DefaultLexer::Version() const { 43 return lvRelease5; 44 } 45 46 const char * SCI_METHOD DefaultLexer::PropertyNames() { 47 return ""; 48 } 49 50 int SCI_METHOD DefaultLexer::PropertyType(const char *) { 51 return SC_TYPE_BOOLEAN; 52 } 53 54 const char * SCI_METHOD DefaultLexer::DescribeProperty(const char *) { 55 return ""; 56 } 57 58 Sci_Position SCI_METHOD DefaultLexer::PropertySet(const char *, const char *) { 59 return -1; 60 } 61 62 const char * SCI_METHOD DefaultLexer::DescribeWordListSets() { 63 return ""; 64 } 65 66 Sci_Position SCI_METHOD DefaultLexer::WordListSet(int, const char *) { 67 return -1; 68 } 69 70 void SCI_METHOD DefaultLexer::Fold(Sci_PositionU, Sci_Position, int, IDocument *) { 71 } 72 73 void * SCI_METHOD DefaultLexer::PrivateCall(int, void *) { 74 return nullptr; 75 } 76 77 int SCI_METHOD DefaultLexer::LineEndTypesSupported() { 78 return SC_LINE_END_TYPE_DEFAULT; 79 } 80 81 int SCI_METHOD DefaultLexer::AllocateSubStyles(int, int) { 82 return -1; 83 } 84 85 int SCI_METHOD DefaultLexer::SubStylesStart(int) { 86 return -1; 87 } 88 89 int SCI_METHOD DefaultLexer::SubStylesLength(int) { 90 return 0; 91 } 92 93 int SCI_METHOD DefaultLexer::StyleFromSubStyle(int subStyle) { 94 return subStyle; 95 } 96 97 int SCI_METHOD DefaultLexer::PrimaryStyleFromStyle(int style) { 98 return style; 99 } 100 101 void SCI_METHOD DefaultLexer::FreeSubStyles() { 102 } 103 104 void SCI_METHOD DefaultLexer::SetIdentifiers(int, const char *) { 105 } 106 107 int SCI_METHOD DefaultLexer::DistanceToSecondaryStyles() { 108 return 0; 109 } 110 111 const char * SCI_METHOD DefaultLexer::GetSubStyleBases() { 112 return styleSubable; 113 } 114 115 int SCI_METHOD DefaultLexer::NamedStyles() { 116 return static_cast<int>(nClasses); 117 } 118 119 const char * SCI_METHOD DefaultLexer::NameOfStyle(int style) { 120 return (style < NamedStyles()) ? lexClasses[style].name : ""; 121 } 122 123 const char * SCI_METHOD DefaultLexer::TagsOfStyle(int style) { 124 return (style < NamedStyles()) ? lexClasses[style].tags : ""; 125 } 126 127 const char * SCI_METHOD DefaultLexer::DescriptionOfStyle(int style) { 128 return (style < NamedStyles()) ? lexClasses[style].description : ""; 129 } 130 131 // ILexer5 methods 132 const char * SCI_METHOD DefaultLexer::GetName() { 133 return languageName; 134 } 135 136 int SCI_METHOD DefaultLexer::GetIdentifier() { 137 return language; 138 } 139 140