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 <neilh@scintilla.org>
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 lvIdentity;
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 // ILexerWithIdentity 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