]>
git.saurik.com Git - wxWidgets.git/blob - src/stc/scintilla/src/KeyWords.cxx
1 // Scintilla source code edit control
3 ** Colourise for particular languages.
5 // Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
6 // The License.txt file describes the conditions under which this software may be distributed.
19 #include "Scintilla.h"
22 LexerModule
*LexerModule::base
= 0;
23 int LexerModule::nextLanguage
= SCLEX_AUTOMATIC
+1;
25 LexerModule::LexerModule(int language_
, LexerFunction fnLexer_
,
26 const char *languageName_
, LexerFunction fnFolder_
) :
28 languageName(languageName_
),
33 if (language
== SCLEX_AUTOMATIC
) {
34 language
= nextLanguage
;
39 LexerModule
*LexerModule::Find(int language
) {
40 LexerModule
*lm
= base
;
42 if (lm
->language
== language
) {
50 LexerModule
*LexerModule::Find(const char *languageName
) {
52 LexerModule
*lm
= base
;
54 if (lm
->languageName
&& 0 == strcmp(lm
->languageName
, languageName
)) {
63 void LexerModule::Lex(unsigned int startPos
, int lengthDoc
, int initStyle
,
64 WordList
*keywordlists
[], Accessor
&styler
) {
66 fnLexer(startPos
, lengthDoc
, initStyle
, keywordlists
, styler
);
69 void LexerModule::Fold(unsigned int startPos
, int lengthDoc
, int initStyle
,
70 WordList
*keywordlists
[], Accessor
&styler
) {
72 int lineCurrent
= styler
.GetLine(startPos
);
73 // Move back one line in case deletion wrecked current line fold state
74 if (lineCurrent
> 0) {
76 int newStartPos
= styler
.LineStart(lineCurrent
);
77 lengthDoc
+= startPos
- newStartPos
;
78 startPos
= newStartPos
;
81 initStyle
= styler
.StyleAt(startPos
- 1);
84 fnFolder(startPos
, lengthDoc
, initStyle
, keywordlists
, styler
);
88 static void ColouriseNullDoc(unsigned int startPos
, int length
, int, WordList
*[],
90 // Null language means all style bytes are 0 so just mark the end - no need to fill in.
92 styler
.StartAt(startPos
+ length
- 1);
93 styler
.StartSegment(startPos
+ length
- 1);
94 styler
.ColourTo(startPos
+ length
- 1, 0);
98 LexerModule
lmNull(SCLEX_NULL
, ColouriseNullDoc
, "null");
102 // The following code forces a reference to all of the Scintilla lexers.
103 // If we don't do something like this, then the linker tends to "optimize"
104 // them away. (eric@sourcegear.com)
106 // Taken from wxWindow's stc.cpp. Walter.
108 int wxForceScintillaLexers(void) {
109 extern LexerModule lmAda
;
110 extern LexerModule lmAVE
;
111 extern LexerModule lmBatch
;
112 extern LexerModule lmConf
;
113 extern LexerModule lmCPP
;
114 extern LexerModule lmDiff
;
115 extern LexerModule lmEiffel
;
116 extern LexerModule lmEiffelkw
;
117 extern LexerModule lmErrorList
;
118 extern LexerModule lmHTML
;
119 extern LexerModule lmLatex
;
120 extern LexerModule lmLISP
;
121 extern LexerModule lmLua
;
122 extern LexerModule lmMake
;
123 extern LexerModule lmPascal
;
124 extern LexerModule lmPerl
;
125 extern LexerModule lmProps
;
126 extern LexerModule lmPython
;
127 extern LexerModule lmRuby
;
128 extern LexerModule lmSQL
;
129 extern LexerModule lmVB
;
130 extern LexerModule lmXML
;