Update Scintilla to 4.0.4
[TortoiseGit.git] / ext / scintilla / lexlib / LexerBase.cxx
blob3588d44d101f7a4ff4b4744f0a3a28418cb4b19c
1 // Scintilla source code edit control
2 /** @file LexerBase.cxx
3 ** A simple lexer with no state.
4 **/
5 // Copyright 1998-2010 by Neil Hodgson <neilh@scintilla.org>
6 // The License.txt file describes the conditions under which this software may be distributed.
8 #include <cstdlib>
9 #include <cassert>
10 #include <cstring>
12 #include "ILexer.h"
13 #include "Scintilla.h"
14 #include "SciLexer.h"
16 #include "PropSetSimple.h"
17 #include "WordList.h"
18 #include "LexAccessor.h"
19 #include "Accessor.h"
20 #include "LexerModule.h"
21 #include "LexerBase.h"
23 using namespace Scintilla;
25 static const char styleSubable[] = { 0 };
27 LexerBase::LexerBase(const LexicalClass *lexClasses_, size_t nClasses_) :
28 lexClasses(lexClasses_), nClasses(nClasses_) {
29 for (int wl = 0; wl < numWordLists; wl++)
30 keyWordLists[wl] = new WordList;
31 keyWordLists[numWordLists] = 0;
34 LexerBase::~LexerBase() {
35 for (int wl = 0; wl < numWordLists; wl++) {
36 delete keyWordLists[wl];
37 keyWordLists[wl] = 0;
39 keyWordLists[numWordLists] = 0;
42 void SCI_METHOD LexerBase::Release() {
43 delete this;
46 int SCI_METHOD LexerBase::Version() const {
47 return lvRelease4;
50 const char * SCI_METHOD LexerBase::PropertyNames() {
51 return "";
54 int SCI_METHOD LexerBase::PropertyType(const char *) {
55 return SC_TYPE_BOOLEAN;
58 const char * SCI_METHOD LexerBase::DescribeProperty(const char *) {
59 return "";
62 Sci_Position SCI_METHOD LexerBase::PropertySet(const char *key, const char *val) {
63 const char *valOld = props.Get(key);
64 if (strcmp(val, valOld) != 0) {
65 props.Set(key, val);
66 return 0;
67 } else {
68 return -1;
72 const char * SCI_METHOD LexerBase::DescribeWordListSets() {
73 return "";
76 Sci_Position SCI_METHOD LexerBase::WordListSet(int n, const char *wl) {
77 if (n < numWordLists) {
78 WordList wlNew;
79 wlNew.Set(wl);
80 if (*keyWordLists[n] != wlNew) {
81 keyWordLists[n]->Set(wl);
82 return 0;
85 return -1;
88 void * SCI_METHOD LexerBase::PrivateCall(int, void *) {
89 return nullptr;
92 int SCI_METHOD LexerBase::LineEndTypesSupported() {
93 return SC_LINE_END_TYPE_DEFAULT;
96 int SCI_METHOD LexerBase::AllocateSubStyles(int, int) {
97 return -1;
100 int SCI_METHOD LexerBase::SubStylesStart(int) {
101 return -1;
104 int SCI_METHOD LexerBase::SubStylesLength(int) {
105 return 0;
108 int SCI_METHOD LexerBase::StyleFromSubStyle(int subStyle) {
109 return subStyle;
112 int SCI_METHOD LexerBase::PrimaryStyleFromStyle(int style) {
113 return style;
116 void SCI_METHOD LexerBase::FreeSubStyles() {
119 void SCI_METHOD LexerBase::SetIdentifiers(int, const char *) {
122 int SCI_METHOD LexerBase::DistanceToSecondaryStyles() {
123 return 0;
126 const char * SCI_METHOD LexerBase::GetSubStyleBases() {
127 return styleSubable;
130 int SCI_METHOD LexerBase::NamedStyles() {
131 return static_cast<int>(nClasses);
134 const char * SCI_METHOD LexerBase::NameOfStyle(int style) {
135 return (style < NamedStyles()) ? lexClasses[style].name : "";
138 const char * SCI_METHOD LexerBase::TagsOfStyle(int style) {
139 return (style < NamedStyles()) ? lexClasses[style].tags : "";
142 const char * SCI_METHOD LexerBase::DescriptionOfStyle(int style) {
143 return (style < NamedStyles()) ? lexClasses[style].description : "";