Skip to content

Commit 50373fa

Browse files
committed
Define distinct style constants for COBOL SCE_COBOL_* replacing the COBOL lexers reuse of
the SCE_C_* constants defined for the cpp lexer. The values are the same to provide binary compatibility. Related to #284.
1 parent 464cb58 commit 50373fa

File tree

3 files changed

+71
-45
lines changed

3 files changed

+71
-45
lines changed

include/LexicalStyles.iface

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,12 +179,10 @@ val SCE_P_FTRIPLEDOUBLE=19
179179
val SCE_P_ATTRIBUTE=20
180180
# Lexical states for SCLEX_CPP
181181
# Lexical states for SCLEX_BULLANT
182-
# Lexical states for SCLEX_COBOL
183182
# Lexical states for SCLEX_TACL
184183
# Lexical states for SCLEX_TAL
185184
lex Cpp=SCLEX_CPP SCE_C_
186185
lex BullAnt=SCLEX_BULLANT SCE_C_
187-
lex COBOL=SCLEX_COBOL SCE_C_
188186
lex TACL=SCLEX_TACL SCE_C_
189187
lex TAL=SCLEX_TAL SCE_C_
190188
val SCE_C_DEFAULT=0
@@ -215,6 +213,21 @@ val SCE_C_PREPROCESSORCOMMENTDOC=24
215213
val SCE_C_USERLITERAL=25
216214
val SCE_C_TASKMARKER=26
217215
val SCE_C_ESCAPESEQUENCE=27
216+
# Lexical states for SCLEX_COBOL
217+
lex COBOL=SCLEX_COBOL SCE_COBOL_
218+
val SCE_COBOL_DEFAULT=0
219+
val SCE_COBOL_COMMENT=1
220+
val SCE_COBOL_COMMENTLINE=2
221+
val SCE_COBOL_COMMENTDOC=3
222+
val SCE_COBOL_NUMBER=4
223+
val SCE_COBOL_WORD=5
224+
val SCE_COBOL_STRING=6
225+
val SCE_COBOL_CHARACTER=7
226+
val SCE_COBOL_UUID=8
227+
val SCE_COBOL_PREPROCESSOR=9
228+
val SCE_COBOL_OPERATOR=10
229+
val SCE_COBOL_IDENTIFIER=11
230+
val SCE_COBOL_WORD2=16
218231
# Lexical states for SCLEX_D
219232
lex D=SCLEX_D SCE_D_
220233
val SCE_D_DEFAULT=0

include/SciLexer.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,19 @@
203203
#define SCE_C_USERLITERAL 25
204204
#define SCE_C_TASKMARKER 26
205205
#define SCE_C_ESCAPESEQUENCE 27
206+
#define SCE_COBOL_DEFAULT 0
207+
#define SCE_COBOL_COMMENT 1
208+
#define SCE_COBOL_COMMENTLINE 2
209+
#define SCE_COBOL_COMMENTDOC 3
210+
#define SCE_COBOL_NUMBER 4
211+
#define SCE_COBOL_WORD 5
212+
#define SCE_COBOL_STRING 6
213+
#define SCE_COBOL_CHARACTER 7
214+
#define SCE_COBOL_UUID 8
215+
#define SCE_COBOL_PREPROCESSOR 9
216+
#define SCE_COBOL_OPERATOR 10
217+
#define SCE_COBOL_IDENTIFIER 11
218+
#define SCE_COBOL_WORD2 16
206219
#define SCE_D_DEFAULT 0
207220
#define SCE_D_COMMENT 1
208221
#define SCE_D_COMMENTLINE 2

lexers/LexCOBOL.cxx

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -92,31 +92,31 @@ int classifyWordCOBOL(Sci_PositionU start, Sci_PositionU end, /*WordList &keywor
9292
s[1] = '\0';
9393
getRange(start, end, styler, s, sizeof(s));
9494

95-
int chAttr = SCE_C_IDENTIFIER;
95+
int chAttr = SCE_COBOL_IDENTIFIER;
9696
if (isdigit(s[0]) || (s[0] == '.') || (s[0] == 'v')) {
97-
chAttr = SCE_C_NUMBER;
97+
chAttr = SCE_COBOL_NUMBER;
9898
char *p = s + 1;
9999
while (*p) {
100100
if ((!isdigit(*p) && (*p) != 'v') && isCOBOLwordchar(*p)) {
101-
chAttr = SCE_C_IDENTIFIER;
101+
chAttr = SCE_COBOL_IDENTIFIER;
102102
break;
103103
}
104104
++p;
105105
}
106106
}
107-
if (chAttr == SCE_C_IDENTIFIER) {
107+
if (chAttr == SCE_COBOL_IDENTIFIER) {
108108
WordList& a_keywords = *keywordlists[0];
109109
WordList& b_keywords = *keywordlists[1];
110110
WordList& c_keywords = *keywordlists[2];
111111

112112
if (a_keywords.InList(s)) {
113-
chAttr = SCE_C_WORD;
113+
chAttr = SCE_COBOL_WORD;
114114
}
115115
else if (b_keywords.InList(s)) {
116-
chAttr = SCE_C_WORD2;
116+
chAttr = SCE_COBOL_WORD2;
117117
}
118118
else if (c_keywords.InList(s)) {
119-
chAttr = SCE_C_UUID;
119+
chAttr = SCE_COBOL_UUID;
120120
}
121121
}
122122
if (*bAarea) {
@@ -150,8 +150,8 @@ void ColouriseCOBOLDoc(Sci_PositionU startPos, Sci_Position length, int initStyl
150150
styler.StartAt(startPos);
151151

152152
int state = initStyle;
153-
if (state == SCE_C_CHARACTER) // Does not leak onto next line
154-
state = SCE_C_DEFAULT;
153+
if (state == SCE_COBOL_CHARACTER) // Does not leak onto next line
154+
state = SCE_COBOL_DEFAULT;
155155
char chPrev = ' ';
156156
char chNext = styler[startPos];
157157
Sci_PositionU lengthDoc = startPos + length;
@@ -190,9 +190,9 @@ void ColouriseCOBOLDoc(Sci_PositionU startPos, Sci_Position length, int initStyl
190190
// Trigger on CR only (Mac style) or either on LF from CR+LF (Dos/Win) or on LF alone (Unix)
191191
// Avoid triggering two times on Dos/Win
192192
// End of line
193-
if (state == SCE_C_CHARACTER) {
193+
if (state == SCE_COBOL_CHARACTER) {
194194
ColourTo(styler, i, state);
195-
state = SCE_C_DEFAULT;
195+
state = SCE_COBOL_DEFAULT;
196196
}
197197
styler.SetLineState(currentLine, nContainment);
198198
currentLine++;
@@ -208,44 +208,44 @@ void ColouriseCOBOLDoc(Sci_PositionU startPos, Sci_Position length, int initStyl
208208
continue;
209209
}
210210

211-
if (state == SCE_C_DEFAULT) {
211+
if (state == SCE_COBOL_DEFAULT) {
212212
if (isCOBOLwordstart(ch) || (ch == '$' && IsASCII(chNext) && isalpha(chNext))) {
213213
ColourTo(styler, i-1, state);
214-
state = SCE_C_IDENTIFIER;
214+
state = SCE_COBOL_IDENTIFIER;
215215
} else if (column == 6 && (ch == '*' || ch == '/')) {
216216
// Cobol comment line: asterisk in column 7.
217217
ColourTo(styler, i-1, state);
218-
state = SCE_C_COMMENTLINE;
218+
state = SCE_COBOL_COMMENTLINE;
219219
} else if (ch == '*' && chNext == '>') {
220220
// Cobol inline comment: asterisk, followed by greater than.
221221
ColourTo(styler, i-1, state);
222-
state = SCE_C_COMMENTLINE;
222+
state = SCE_COBOL_COMMENTLINE;
223223
} else if (column == 0 && ch == '*' && chNext != '*') {
224224
ColourTo(styler, i-1, state);
225-
state = SCE_C_COMMENTLINE;
225+
state = SCE_COBOL_COMMENTLINE;
226226
} else if (column == 0 && ch == '/' && chNext != '*') {
227227
ColourTo(styler, i-1, state);
228-
state = SCE_C_COMMENTLINE;
228+
state = SCE_COBOL_COMMENTLINE;
229229
} else if (column == 0 && ch == '*' && chNext == '*') {
230230
ColourTo(styler, i-1, state);
231-
state = SCE_C_COMMENTDOC;
231+
state = SCE_COBOL_COMMENTDOC;
232232
} else if (column == 0 && ch == '/' && chNext == '*') {
233233
ColourTo(styler, i-1, state);
234-
state = SCE_C_COMMENTDOC;
234+
state = SCE_COBOL_COMMENTDOC;
235235
} else if (ch == '"') {
236236
ColourTo(styler, i-1, state);
237-
state = SCE_C_STRING;
237+
state = SCE_COBOL_STRING;
238238
} else if (ch == '\'') {
239239
ColourTo(styler, i-1, state);
240-
state = SCE_C_CHARACTER;
240+
state = SCE_COBOL_CHARACTER;
241241
} else if (ch == '?' && column == 0) {
242242
ColourTo(styler, i-1, state);
243-
state = SCE_C_PREPROCESSOR;
243+
state = SCE_COBOL_PREPROCESSOR;
244244
} else if (isCOBOLoperator(ch)) {
245245
ColourTo(styler, i-1, state);
246-
ColourTo(styler, i, SCE_C_OPERATOR);
246+
ColourTo(styler, i, SCE_COBOL_OPERATOR);
247247
}
248-
} else if (state == SCE_C_IDENTIFIER) {
248+
} else if (state == SCE_COBOL_IDENTIFIER) {
249249
if (!isCOBOLwordchar(ch)) {
250250
int lStateChange = classifyWordCOBOL(styler.GetStartSegment(), i - 1, keywordlists, styler, nContainment, &bAarea);
251251

@@ -254,55 +254,55 @@ void ColouriseCOBOLDoc(Sci_PositionU startPos, Sci_Position length, int initStyl
254254
nContainment = lStateChange;
255255
}
256256

257-
state = SCE_C_DEFAULT;
257+
state = SCE_COBOL_DEFAULT;
258258
chNext = styler.SafeGetCharAt(i + 1);
259259
if (column == 6 && (ch == '*' || ch == '/')) {
260-
state = SCE_C_COMMENTLINE;
260+
state = SCE_COBOL_COMMENTLINE;
261261
} else if (ch == '"') {
262-
state = SCE_C_STRING;
262+
state = SCE_COBOL_STRING;
263263
} else if (ch == '\'') {
264-
state = SCE_C_CHARACTER;
264+
state = SCE_COBOL_CHARACTER;
265265
} else if (isCOBOLoperator(ch)) {
266-
ColourTo(styler, i, SCE_C_OPERATOR);
266+
ColourTo(styler, i, SCE_COBOL_OPERATOR);
267267
}
268268
}
269269
} else {
270-
if (state == SCE_C_PREPROCESSOR) {
270+
if (state == SCE_COBOL_PREPROCESSOR) {
271271
if ((ch == '\r' || ch == '\n') && !(chPrev == '\\' || chPrev == '\r')) {
272272
ColourTo(styler, i-1, state);
273-
state = SCE_C_DEFAULT;
273+
state = SCE_COBOL_DEFAULT;
274274
}
275-
} else if (state == SCE_C_COMMENT) {
275+
} else if (state == SCE_COBOL_COMMENT) {
276276
if (ch == '\r' || ch == '\n') {
277277
ColourTo(styler, i-1, state);
278-
state = SCE_C_DEFAULT;
278+
state = SCE_COBOL_DEFAULT;
279279
}
280-
} else if (state == SCE_C_COMMENTDOC) {
280+
} else if (state == SCE_COBOL_COMMENTDOC) {
281281
if (ch == '\r' || ch == '\n') {
282282
if (((i > styler.GetStartSegment() + 2) || (
283-
(initStyle == SCE_C_COMMENTDOC) &&
283+
(initStyle == SCE_COBOL_COMMENTDOC) &&
284284
(styler.GetStartSegment() == static_cast<Sci_PositionU>(startPos))))) {
285285
ColourTo(styler, i-1, state);
286-
state = SCE_C_DEFAULT;
286+
state = SCE_COBOL_DEFAULT;
287287
}
288288
}
289-
} else if (state == SCE_C_COMMENTLINE) {
289+
} else if (state == SCE_COBOL_COMMENTLINE) {
290290
if (ch == '\r' || ch == '\n') {
291291
ColourTo(styler, i-1, state);
292-
state = SCE_C_DEFAULT;
292+
state = SCE_COBOL_DEFAULT;
293293
}
294-
} else if (state == SCE_C_STRING) {
294+
} else if (state == SCE_COBOL_STRING) {
295295
if (ch == '"') {
296296
ColourTo(styler, i, state);
297-
state = SCE_C_DEFAULT;
297+
state = SCE_COBOL_DEFAULT;
298298
} else if (ch == '\r' || ch == '\n') {
299299
ColourTo(styler, i-1, state);
300-
state = SCE_C_DEFAULT;
300+
state = SCE_COBOL_DEFAULT;
301301
}
302-
} else if (state == SCE_C_CHARACTER) {
302+
} else if (state == SCE_COBOL_CHARACTER) {
303303
if (ch == '\'') {
304304
ColourTo(styler, i, state);
305-
state = SCE_C_DEFAULT;
305+
state = SCE_COBOL_DEFAULT;
306306
}
307307
}
308308
}

0 commit comments

Comments
 (0)