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;
 }
openSUSE Build Service is sponsored by