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
DefaultLexer(const char * languageName_,int language_,const LexicalClass * lexClasses_,size_t nClasses_)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
~DefaultLexer()35 DefaultLexer::~DefaultLexer() {
36 }
37
Release()38 void SCI_METHOD DefaultLexer::Release() {
39 delete this;
40 }
41
Version() const42 int SCI_METHOD DefaultLexer::Version() const {
43 return lvRelease5;
44 }
45
PropertyNames()46 const char * SCI_METHOD DefaultLexer::PropertyNames() {
47 return "";
48 }
49
PropertyType(const char *)50 int SCI_METHOD DefaultLexer::PropertyType(const char *) {
51 return SC_TYPE_BOOLEAN;
52 }
53
DescribeProperty(const char *)54 const char * SCI_METHOD DefaultLexer::DescribeProperty(const char *) {
55 return "";
56 }
57
PropertySet(const char *,const char *)58 Sci_Position SCI_METHOD DefaultLexer::PropertySet(const char *, const char *) {
59 return -1;
60 }
61
DescribeWordListSets()62 const char * SCI_METHOD DefaultLexer::DescribeWordListSets() {
63 return "";
64 }
65
WordListSet(int,const char *)66 Sci_Position SCI_METHOD DefaultLexer::WordListSet(int, const char *) {
67 return -1;
68 }
69
Fold(Sci_PositionU,Sci_Position,int,IDocument *)70 void SCI_METHOD DefaultLexer::Fold(Sci_PositionU, Sci_Position, int, IDocument *) {
71 }
72
PrivateCall(int,void *)73 void * SCI_METHOD DefaultLexer::PrivateCall(int, void *) {
74 return nullptr;
75 }
76
LineEndTypesSupported()77 int SCI_METHOD DefaultLexer::LineEndTypesSupported() {
78 return SC_LINE_END_TYPE_DEFAULT;
79 }
80
AllocateSubStyles(int,int)81 int SCI_METHOD DefaultLexer::AllocateSubStyles(int, int) {
82 return -1;
83 }
84
SubStylesStart(int)85 int SCI_METHOD DefaultLexer::SubStylesStart(int) {
86 return -1;
87 }
88
SubStylesLength(int)89 int SCI_METHOD DefaultLexer::SubStylesLength(int) {
90 return 0;
91 }
92
StyleFromSubStyle(int subStyle)93 int SCI_METHOD DefaultLexer::StyleFromSubStyle(int subStyle) {
94 return subStyle;
95 }
96
PrimaryStyleFromStyle(int style)97 int SCI_METHOD DefaultLexer::PrimaryStyleFromStyle(int style) {
98 return style;
99 }
100
FreeSubStyles()101 void SCI_METHOD DefaultLexer::FreeSubStyles() {
102 }
103
SetIdentifiers(int,const char *)104 void SCI_METHOD DefaultLexer::SetIdentifiers(int, const char *) {
105 }
106
DistanceToSecondaryStyles()107 int SCI_METHOD DefaultLexer::DistanceToSecondaryStyles() {
108 return 0;
109 }
110
GetSubStyleBases()111 const char * SCI_METHOD DefaultLexer::GetSubStyleBases() {
112 return styleSubable;
113 }
114
NamedStyles()115 int SCI_METHOD DefaultLexer::NamedStyles() {
116 return static_cast<int>(nClasses);
117 }
118
NameOfStyle(int style)119 const char * SCI_METHOD DefaultLexer::NameOfStyle(int style) {
120 return (style < NamedStyles()) ? lexClasses[style].name : "";
121 }
122
TagsOfStyle(int style)123 const char * SCI_METHOD DefaultLexer::TagsOfStyle(int style) {
124 return (style < NamedStyles()) ? lexClasses[style].tags : "";
125 }
126
DescriptionOfStyle(int style)127 const char * SCI_METHOD DefaultLexer::DescriptionOfStyle(int style) {
128 return (style < NamedStyles()) ? lexClasses[style].description : "";
129 }
130
131 // ILexer5 methods
GetName()132 const char * SCI_METHOD DefaultLexer::GetName() {
133 return languageName;
134 }
135
GetIdentifier()136 int SCI_METHOD DefaultLexer::GetIdentifier() {
137 return language;
138 }
139
140