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