File geany2.1_cobol.patch of Package geany
--- ctags/parsers/cobol.c.save 2025-07-04 05:31:37.000000000 -0400
+++ ctags/parsers/cobol.c 2025-07-07 07:56:52.813095825 -0400
@@ -84,6 +84,7 @@
KEYWORD_PROGRAM_ID,
KEYWORD_EXIT,
KEYWORD_COPY,
+ KEYWORD_BINARY,
};
static const keywordTable cobolKeywordTable[] = {
@@ -95,6 +96,14 @@
DEFINE_KEYWORD (DIVISION),
DEFINE_KEYWORD (CONTINUE),
{ "END-EXEC", KEYWORD_END_EXEC },
+ { "AUTHOR", KEYWORD_CONTINUE },
+ { "FILE-CONTROL", KEYWORD_CONTINUE },
+ { "I-O-CONTROL", KEYWORD_CONTINUE },
+ { "OBJECT-COMPUTER", KEYWORD_CONTINUE },
+ { "SOURCE-COMPUTER", KEYWORD_CONTINUE },
+ { "DATE-COMPILED", KEYWORD_CONTINUE },
+ { "DATE-WRITTEN", KEYWORD_CONTINUE },
+ { "SPECIAL-NAMES", KEYWORD_CONTINUE },
DEFINE_KEYWORD (EXIT),
DEFINE_KEYWORD (FILLER),
DEFINE_KEYWORD (BLANK),
@@ -112,6 +121,14 @@
{ "VALUES", KEYWORD_VALUE },
{ "PROGRAM-ID", KEYWORD_PROGRAM_ID },
DEFINE_KEYWORD (COPY),
+ DEFINE_KEYWORD (BINARY),
+ { "SIGNED-INT", KEYWORD_BINARY },
+ { "SIGNED-SHORT", KEYWORD_BINARY },
+ { "SIGNED-LONG", KEYWORD_BINARY },
+ { "UNSIGNED-INT", KEYWORD_BINARY },
+ { "UNSIGNED-SHORT", KEYWORD_BINARY },
+ { "UNSIGNED-LONG", KEYWORD_BINARY },
+ { "POINTER", KEYWORD_BINARY },
};
#define INDICATOR_COLUMN 7
@@ -306,8 +323,15 @@
NestingLevels *levels;
const char *line;
+ int col_max;
+
cblppInit (format);
+ if (format & FORMAT_FREE)
+ col_max=5;
+ else
+ col_max=4;
+
levels = nestingLevelsNew (sizeof (unsigned int));
while ((line = cblppGetLine ()) != NULL)
@@ -315,7 +339,8 @@
char word[64];
int keyword;
unsigned long int levelNumber;
-
+ int col_num=0;
+
#define READ_WHILE(word, cond) \
do { \
unsigned int i; \
@@ -342,10 +367,11 @@
char READ_KEYWORD__word[64]; \
READ_WORD (READ_KEYWORD__word, keyword); \
} while (0)
+#define SKIP_SPACES0() do { while (isspace (*line)) {line++;col_num++;} } while (0)
#define SKIP_SPACES() \
do { while (isspace ((unsigned char) *line)) line++; } while (0)
- SKIP_SPACES ();
+ SKIP_SPACES0 ();
READ_WORD (word, keyword);
SKIP_SPACES ();
@@ -356,7 +382,7 @@
case KEYWORD_RD:
READ_WORD (word, keyword);
SKIP_SPACES ();
- if (*word && *line == '.')
+ if (*word)
makeCOBOLTag (word, K_FILE);
break;
@@ -414,6 +440,7 @@
case KEYWORD_SYNC:
case KEYWORD_USAGE:
case KEYWORD_VALUE:
+ case KEYWORD_BINARY:
kind = K_DATA;
}
}
@@ -447,7 +474,7 @@
}
}
}
- else if (*word && *line == '.')
+ else if (*word && *line == '.' && col_num < col_max)
makeCOBOLTag (word, K_PARAGRAPH);
else
{
@@ -506,8 +533,8 @@
{
static const char *const extensions [] = {
"cbl", "cob", "CBL", "COB", NULL };
- parserDefinition* def = commonCobolParserDefinition ("Cobol",
- findCOBOLFixedTags);
+ parserDefinition* def = commonCobolParserDefinition ("CobolFree",
+ findCOBOLFreeTags);
def->extensions = extensions;
return def;
}