1 // Scintilla source code edit control
2 /** @file LexerBase.cxx
3 ** A simple lexer with no state.
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.
13 #include "Scintilla.h"
16 #include "PropSetSimple.h"
18 #include "LexAccessor.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
];
39 keyWordLists
[numWordLists
] = 0;
42 void SCI_METHOD
LexerBase::Release() {
46 int SCI_METHOD
LexerBase::Version() const {
50 const char * SCI_METHOD
LexerBase::PropertyNames() {
54 int SCI_METHOD
LexerBase::PropertyType(const char *) {
55 return SC_TYPE_BOOLEAN
;
58 const char * SCI_METHOD
LexerBase::DescribeProperty(const char *) {
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) {
72 const char * SCI_METHOD
LexerBase::DescribeWordListSets() {
76 Sci_Position SCI_METHOD
LexerBase::WordListSet(int n
, const char *wl
) {
77 if (n
< numWordLists
) {
80 if (*keyWordLists
[n
] != wlNew
) {
81 keyWordLists
[n
]->Set(wl
);
88 void * SCI_METHOD
LexerBase::PrivateCall(int, void *) {
92 int SCI_METHOD
LexerBase::LineEndTypesSupported() {
93 return SC_LINE_END_TYPE_DEFAULT
;
96 int SCI_METHOD
LexerBase::AllocateSubStyles(int, int) {
100 int SCI_METHOD
LexerBase::SubStylesStart(int) {
104 int SCI_METHOD
LexerBase::SubStylesLength(int) {
108 int SCI_METHOD
LexerBase::StyleFromSubStyle(int subStyle
) {
112 int SCI_METHOD
LexerBase::PrimaryStyleFromStyle(int style
) {
116 void SCI_METHOD
LexerBase::FreeSubStyles() {
119 void SCI_METHOD
LexerBase::SetIdentifiers(int, const char *) {
122 int SCI_METHOD
LexerBase::DistanceToSecondaryStyles() {
126 const char * SCI_METHOD
LexerBase::GetSubStyleBases() {
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
: "";