[geany/geany] 44c26a: Merge pull request #2128 from b4n/ctags/new-cobol-parser
Colomban Wendling
git-noreply at xxxxx
Sat Apr 27 13:21:36 UTC 2019
Branch: refs/heads/master
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Sat, 27 Apr 2019 13:21:36 UTC
Commit: 44c26adbc35a6f5e3b6d84945b78634d7550e86b
https://github.com/geany/geany/commit/44c26adbc35a6f5e3b6d84945b78634d7550e86b
Log Message:
-----------
Merge pull request #2128 from b4n/ctags/new-cobol-parser
COBOL: Import new upstream candidate parser
Modified Paths:
--------------
ctags/parsers/cobol.c
src/symbols.c
src/tagmanager/tm_parser.c
tests/ctags/Makefile.am
tests/ctags/cobol/helloworld.cbl
tests/ctags/cobol/helloworld.cbl.tags
tests/ctags/cobol/helloworld2.cbl
tests/ctags/cobol/helloworld2.cbl.tags
tests/ctags/cobol/levels.cbl
tests/ctags/cobol/levels.cbl.tags
tests/ctags/cobol/quoted-program-id.cbl
tests/ctags/cobol/quoted-program-id.cbl.tags
tests/ctags/cobol/simple.cbl
tests/ctags/cobol/simple.cbl.tags
tests/ctags/simple.cbl.tags
Modified: ctags/parsers/cobol.c
520 lines changed, 497 insertions(+), 23 deletions(-)
===================================================================
@@ -8,42 +8,516 @@
* files.
*/
+/* Some references:
+ * - https://www.cs.vu.nl/grammarware/browsable/cobol/
+ * - https://www.cs.vu.nl/grammarware/browsable/vs-cobol-ii/
+ * - https://open-cobol.sourceforge.io/guides/grammar.pdf
+ * - http://mapage.noos.fr/~bpinon/a_cobol_parser.htm
+ * - https://en.wikipedia.org/wiki/COBOL
+ */
+
/*
* INCLUDE FILES
*/
#include "general.h" /* must always come first */
+#include "debug.h"
+#include "entry.h"
+#include "keyword.h"
+#include "nestlevel.h"
#include "parse.h"
+#include "read.h"
#include "routines.h"
-static tagRegexTable cobolTagRegexTable[] = {
- {"^[ \t]*[0-9]+[ \t]+([A-Z0-9][A-Z0-9-]*)[ \t]+("
- "BLANK|OCCURS|IS|JUST|PIC|REDEFINES|RENAMES|SIGN|SYNC|USAGE|VALUE"
- ")", "\\1",
- "d,data,data items", "i", NULL},
- {"^[ \t]*[FSR]D[ \t]+([A-Z0-9][A-Z0-9-]*)\\.", "\\1",
- "f,file,file descriptions (FD, SD, RD)", "i", NULL},
- {"^[ \t]*[0-9]+[ \t]+([A-Z0-9][A-Z0-9-]*)\\.", "\\1",
- "g,group,group items", "i", NULL},
- {"^[ \t]*([A-Z0-9][A-Z0-9-]*)\\.", "\\1",
- "p,paragraph,paragraphs", "i", NULL},
- {"^[ \t]*PROGRAM-ID\\.[ \t]+([A-Z0-9][A-Z0-9-]*)\\.", "\\1",
- "P,program,program ids", "i", NULL},
- {"^[ \t]*([A-Z0-9][A-Z0-9-]*)[ \t]+SECTION\\.", "\\1",
- "s,section,sections", "i", NULL},
+typedef enum {
+ K_FILE,
+ K_GROUP,
+ K_PROGRAM,
+ K_SECTION,
+ K_DIVISION,
+ K_PARAGRAPH,
+ K_DATA,
+ K_SOURCEFILE,
+} cobolKind;
+
+typedef enum {
+ COBOL_SOURCEFILE_COPIED,
+} cobolSourcefileRole;
+
+static roleDefinition CobolSourcefileRoles [] = {
+ { true, "copied", "copied in source file" },
};
-/*
-* FUNCTION DEFINITIONS
-*/
+static kindDefinition CobolKinds[] = {
+ { true, 'f', "fd", "file descriptions (FD, SD, RD)" },
+ { true, 'g', "group", "group items" },
+ { true, 'P', "program", "program ids" },
+ { true, 's', "section", "sections" },
+ { true, 'D', "division", "divisions" },
+ { true, 'p', "paragraph", "paragraphs" },
+ { true, 'd', "data", "data items" },
+ { true, 'S', "sourcefile", "source code file",
+ .referenceOnly = true, ATTACH_ROLES(CobolSourcefileRoles)},
+};
+
+static langType Lang_cobol;
+
+enum {
+ KEYWORD_FD,
+ KEYWORD_SD,
+ KEYWORD_RD,
+ KEYWORD_SECTION,
+ KEYWORD_DIVISION,
+ KEYWORD_CONTINUE,
+ KEYWORD_END_EXEC,
+ KEYWORD_FILLER,
+ KEYWORD_BLANK,
+ KEYWORD_OCCURS,
+ KEYWORD_IS,
+ KEYWORD_JUST,
+ KEYWORD_PIC,
+ KEYWORD_REDEFINES,
+ KEYWORD_RENAMES,
+ KEYWORD_SIGN,
+ KEYWORD_SYNC,
+ KEYWORD_USAGE,
+ KEYWORD_VALUE,
+ KEYWORD_PROGRAM_ID,
+ KEYWORD_EXIT,
+ KEYWORD_COPY,
+};
+
+static const keywordTable cobolKeywordTable[] = {
+#define DEFINE_KEYWORD(n) { #n, KEYWORD_##n }
+ DEFINE_KEYWORD (FD),
+ DEFINE_KEYWORD (SD),
+ DEFINE_KEYWORD (RD),
+ DEFINE_KEYWORD (SECTION),
+ DEFINE_KEYWORD (DIVISION),
+ DEFINE_KEYWORD (CONTINUE),
+ { "END-EXEC", KEYWORD_END_EXEC },
+ DEFINE_KEYWORD (EXIT),
+ DEFINE_KEYWORD (FILLER),
+ DEFINE_KEYWORD (BLANK),
+ DEFINE_KEYWORD (OCCURS),
+ DEFINE_KEYWORD (IS),
+ DEFINE_KEYWORD (JUST),
+ DEFINE_KEYWORD (PIC),
+ { "PICTURE", KEYWORD_PIC },
+ DEFINE_KEYWORD (REDEFINES),
+ DEFINE_KEYWORD (RENAMES),
+ DEFINE_KEYWORD (SIGN),
+ DEFINE_KEYWORD (SYNC),
+ DEFINE_KEYWORD (USAGE),
+ DEFINE_KEYWORD (VALUE),
+ { "VALUES", KEYWORD_VALUE },
+ { "PROGRAM-ID", KEYWORD_PROGRAM_ID },
+ DEFINE_KEYWORD (COPY),
+};
+
+#define INDICATOR_COLUMN 7
+#define PROGRAM_NAME_AREA_COLUMN 73
+
+#define isIdentifierChar(c) (isalnum(c) || (c) == '-')
+#define isQuote(c) ((c) == '\'' || (c) == '"')
+
+typedef enum {
+ /* Fixed: program starts at column 8, ends at column 72 */
+ FORMAT_FIXED = 0x1,
+ /* Free: program starts at column 1, no specific end */
+ FORMAT_FREE = 0x2,
+ /* Variable: program starts at column 8, no specific end */
+ FORMAT_VARIABLE = FORMAT_FIXED | FORMAT_FREE
+} CobolFormat;
+
+static struct {
+ vString *line;
+ unsigned long int lineNumber;
+ MIOPos filePosition;
+ const char *nextLine;
+ CobolFormat format;
+} CblInputState;
+
+static void cblppInit (const CobolFormat format)
+{
+ CblInputState.line = vStringNew ();
+ CblInputState.lineNumber = 0;
+ CblInputState.nextLine = NULL;
+ CblInputState.format = format;
+}
+
+static void cblppDeinit (void)
+{
+ vStringDelete (CblInputState.line);
+}
+
+static const char *cblppGetColumn (const char *line,
+ const unsigned int column)
+{
+ unsigned int col = 0;
+
+ for (; *line; line++)
+ {
+ col += (*line == '\t') ? 8 : 1;
+ if (col >= column)
+ return line;
+ }
+
+ return NULL;
+}
+
+static void cblppAppendLine (vString *buffer,
+ const char *line)
+{
+ if (CblInputState.format & FORMAT_FIXED)
+ {
+ const char *indicator = cblppGetColumn (line, INDICATOR_COLUMN);
+
+ if (indicator && *indicator && *indicator != '*' && *indicator != '/')
+ {
+ const char *lineStart = indicator + 1;
+ const char *lineEnd = cblppGetColumn (line, PROGRAM_NAME_AREA_COLUMN);
+
+ if (*indicator == '-')
+ {
+ vStringStripTrailing (buffer);
+ while (isspace (*lineStart))
+ lineStart++;
+ }
+
+ if (CblInputState.format == FORMAT_FIXED)
+ vStringNCatS (buffer, lineStart, lineEnd - lineStart);
+ else
+ vStringCatS (buffer, lineStart);
+ }
+ }
+ else if (line[0] != '*' && line[0] != '/')
+ vStringCatS (buffer, line);
+}
+
+/* TODO: skip *> comments */
+static const char *cblppGetLine (void)
+{
+ const char *line;
+
+ if (CblInputState.nextLine)
+ {
+ line = CblInputState.nextLine;
+ CblInputState.nextLine = NULL;
+ }
+ else
+ line = (const char *) readLineFromInputFile ();
+
+ CblInputState.lineNumber = getInputLineNumber ();
+ CblInputState.filePosition = getInputFilePosition ();
+
+ if (!line)
+ return NULL;
+
+ vStringClear (CblInputState.line);
+ cblppAppendLine (CblInputState.line, line);
+
+ /* check for continuation lines */
+ if (CblInputState.format & FORMAT_FIXED)
+ {
+ while (true)
+ {
+ const char *indicator;
+ line = (const char *) readLineFromInputFile ();
+ if (! line)
+ break;
+ indicator = cblppGetColumn (line, INDICATOR_COLUMN);
+ if (indicator && *indicator == '-')
+ cblppAppendLine (CblInputState.line, line);
+ else
+ break;
+ }
+
+ CblInputState.nextLine = line;
+ }
+
+ return vStringValue (CblInputState.line);
+}
+
+static void initCOBOLRefTagEntry (tagEntryInfo *e, const char *name,
+ const cobolKind kind, const int role)
+{
+ initRefTagEntry (e, name, kind, role);
+ e->lineNumber = CblInputState.lineNumber;
+ e->filePosition = CblInputState.filePosition;
+}
+
+static void initCOBOLTagEntry (tagEntryInfo *e, const char *name, const cobolKind kind)
+{
+ initCOBOLRefTagEntry (e, name, kind, ROLE_INDEX_DEFINITION);
+}
+
+static int makeCOBOLRefTag (const char *name, const cobolKind kind, const int role)
+{
+ if (CobolKinds[kind].enabled)
+ {
+ tagEntryInfo e;
+
+ initCOBOLRefTagEntry (&e, name, kind, role);
+
+ return makeTagEntry (&e);
+ }
+
+ return CORK_NIL;
+}
+
+static int makeCOBOLTag (const char *name, const cobolKind kind)
+{
+ return makeCOBOLRefTag (name, kind, ROLE_INDEX_DEFINITION);
+}
+
+#define CBL_NL(nl) (*((unsigned int *) (nestingLevelGetUserData (nl))))
+
+static NestingLevel *popNestingLevelsToLevelNumber (NestingLevels *levels, const unsigned int levelNumber)
+{
+ NestingLevel *nl;
+
+ while (true)
+ {
+ nl = nestingLevelsGetCurrent (levels);
+ if (! nl || CBL_NL (nl) < levelNumber)
+ break;
+ nestingLevelsPop (levels);
+ }
+
+ return nl;
+}
+
+static bool isNumeric (const char *nptr, unsigned long int *num)
+{
+ char *endptr;
+ unsigned long int v;
+
+ v = strtoul (nptr, &endptr, 10);
+ if (nptr != endptr && *endptr == 0)
+ {
+ if (num)
+ *num = v;
+ return true;
+ }
+ return false;
+}
+
+static void findCOBOLTags (const CobolFormat format)
+{
+ NestingLevels *levels;
+ const char *line;
+
+ cblppInit (format);
+
+ levels = nestingLevelsNew (sizeof (unsigned int));
+
+ while ((line = cblppGetLine ()) != NULL)
+ {
+ char word[64];
+ int keyword;
+ unsigned long int levelNumber;
+
+#define READ_WHILE(word, cond) \
+ do { \
+ unsigned int i; \
+ for (i = 0; i < (ARRAY_SIZE (word) - 1) && *line && (cond); line++) \
+ word[i++] = *line; \
+ word[i] = 0; \
+ } while (0)
+#define READ_LITERAL(word) \
+ do { \
+ const char READ_LITERAL__q = isQuote (*line) ? *line++ : 0; \
+ READ_WHILE (word, (READ_LITERAL__q && READ_LITERAL__q != *line) || \
+ isIdentifierChar (*line)); \
+ if (READ_LITERAL__q && READ_LITERAL__q == *line) \
+ line++; \
+ keyword = lookupCaseKeyword (word, Lang_cobol); \
+ } while (0)
+#define READ_WORD(word, keyword) \
+ do { \
+ READ_WHILE (word, isIdentifierChar (*line)); \
+ keyword = lookupCaseKeyword (word, Lang_cobol); \
+ } while (0)
+#define READ_KEYWORD(keyword) \
+ do { \
+ char READ_KEYWORD__word[64]; \
+ READ_WORD (READ_KEYWORD__word, keyword); \
+ } while (0)
+#define SKIP_SPACES() do { while (isspace (*line)) line++; } while (0)
+
+ SKIP_SPACES ();
+ READ_WORD (word, keyword);
+ SKIP_SPACES ();
+
+ switch (keyword)
+ {
+ case KEYWORD_FD:
+ case KEYWORD_SD:
+ case KEYWORD_RD:
+ READ_WORD (word, keyword);
+ SKIP_SPACES ();
+ if (*word && *line == '.')
+ makeCOBOLTag (word, K_FILE);
+ break;
+
+ case KEYWORD_PROGRAM_ID:
+ if (*line == '.')
+ {
+ line++;
+ SKIP_SPACES ();
+ }
+ READ_LITERAL (word);
+ if (*word)
+ makeCOBOLTag (word, K_PROGRAM);
+ break;
+
+ case KEYWORD_COPY:
+ READ_WORD (word, keyword); // FIXME: also allow LITERAL
+ if (*word)
+ makeCOBOLRefTag (word, K_SOURCEFILE, COBOL_SOURCEFILE_COPIED);
+ break;
+
+ case KEYWORD_CONTINUE:
+ case KEYWORD_END_EXEC:
+ case KEYWORD_EXIT:
+ case KEYWORD_FILLER:
+ /* nothing, just ignore those in following cases */;
+ break;
+
+ default:
+ if (isNumeric (word, &levelNumber))
+ {
+ READ_WORD (word, keyword);
+ SKIP_SPACES ();
+
+ if (*word && keyword != KEYWORD_FILLER)
+ {
+ int kind = KIND_GHOST_INDEX;
+
+ if (*line == '.')
+ kind = K_GROUP;
+ else
+ {
+ int keyword2;
+
+ READ_KEYWORD (keyword2);
+ switch (keyword2)
+ {
+ case KEYWORD_BLANK:
+ case KEYWORD_OCCURS:
+ case KEYWORD_IS:
+ case KEYWORD_JUST:
+ case KEYWORD_PIC:
+ case KEYWORD_REDEFINES:
+ case KEYWORD_RENAMES:
+ case KEYWORD_SIGN:
+ case KEYWORD_SYNC:
+ case KEYWORD_USAGE:
+ case KEYWORD_VALUE:
+ kind = K_DATA;
+ }
+ }
+
+ if (kind != KIND_GHOST_INDEX)
+ {
+ NestingLevel *nl;
+ tagEntryInfo entry;
+ int r;
+ unsigned int nestingLevelNumber;
+
+ /* for nesting purposes, level 77 is identical to 1,
+ * and 66 to 2 */
+ switch (levelNumber)
+ {
+ default: nestingLevelNumber = levelNumber; break;
+ case 77: nestingLevelNumber = 1; break;
+ case 66: nestingLevelNumber = 2; break;
+ }
+
+ nl = popNestingLevelsToLevelNumber (levels, nestingLevelNumber);
+ initCOBOLTagEntry (&entry, word, kind);
+ if (nl && CBL_NL (nl) < nestingLevelNumber)
+ entry.extensionFields.scopeIndex = nl->corkIndex;
+ r = makeTagEntry (&entry);
+ if (levelNumber < 50 /* exclude special levels */)
+ {
+ nl = nestingLevelsPush (levels, r);
+ CBL_NL (nl) = levelNumber;
+ }
+ }
+ }
+ }
+ else if (*word && *line == '.')
+ makeCOBOLTag (word, K_PARAGRAPH);
+ else
+ {
+ int keyword2;
+
+ READ_KEYWORD (keyword2);
+ SKIP_SPACES ();
+
+ if (keyword2 == KEYWORD_DIVISION && *line == '.')
+ makeCOBOLTag (word, K_DIVISION);
+ else if (keyword2 == KEYWORD_SECTION && *line == '.')
+ makeCOBOLTag (word, K_SECTION);
+ }
+ }
+ }
+
+ nestingLevelsFree (levels);
+ cblppDeinit ();
+}
+
+static void findCOBOLFixedTags (void)
+{
+ findCOBOLTags (FORMAT_FIXED);
+}
+
+static void findCOBOLFreeTags (void)
+{
+ findCOBOLTags (FORMAT_FREE);
+}
+
+static void findCOBOLVariableTags (void)
+{
+ findCOBOLTags (FORMAT_VARIABLE);
+}
+
+static void initializeCobolParser (langType language)
+{
+ Lang_cobol = language;
+}
+
+static parserDefinition* commonCobolParserDefinition (const char *name,
+ simpleParser parser)
+{
+ parserDefinition* def = parserNew (name);
+ def->initialize = initializeCobolParser;
+ def->parser = parser;
+ def->kindTable = CobolKinds;
+ def->kindCount = ARRAY_SIZE(CobolKinds);
+ def->keywordTable = cobolKeywordTable;
+ def->keywordCount = ARRAY_SIZE(cobolKeywordTable);
+ def->useCork = true;
+ return def;
+}
extern parserDefinition* CobolParser (void)
{
static const char *const extensions [] = {
- "cbl", "cob", "cpy", "CBL", "COB", NULL };
- parserDefinition* def = parserNew ("Cobol");
+ "cbl", "cob", "CBL", "COB", NULL };
+ parserDefinition* def = commonCobolParserDefinition ("Cobol",
+ findCOBOLFixedTags);
def->extensions = extensions;
- def->tagRegexTable = cobolTagRegexTable;
- def->tagRegexCount = ARRAY_SIZE (cobolTagRegexTable);
- def->method = METHOD_NOT_CRAFTED|METHOD_REGEX;
return def;
}
+
+extern parserDefinition* CobolFreeParser (void)
+{
+ return commonCobolParserDefinition ("CobolFree", findCOBOLFreeTags);
+}
+
+extern parserDefinition* CobolVariableParser (void)
+{
+ return commonCobolParserDefinition ("CobolVariable", findCOBOLVariableTags);
+}
Modified: src/symbols.c
2 lines changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -490,10 +490,12 @@ static void add_top_level_items(GeanyDocument *doc)
tag_list_add_groups(tag_store,
&tv_iters.tag_class, _("Program"), ICON_CLASS,
&tv_iters.tag_function, _("File"), ICON_METHOD,
+ &tv_iters.tag_interface, _("Divisions"), ICON_NAMESPACE,
&tv_iters.tag_namespace, _("Sections"), ICON_NAMESPACE,
&tv_iters.tag_macro, _("Paragraph"), ICON_OTHER,
&tv_iters.tag_struct, _("Group"), ICON_STRUCT,
&tv_iters.tag_variable, _("Data"), ICON_VAR,
+ &tv_iters.tag_externvar, _("Copies"), ICON_NAMESPACE,
NULL);
break;
case GEANY_FILETYPES_CONF:
Modified: src/tagmanager/tm_parser.c
3 lines changed, 3 insertions(+), 0 deletions(-)
===================================================================
@@ -423,11 +423,13 @@ static TMParserMapEntry map_R[] = {
static TMParserMapEntry map_COBOL[] = {
{'d', tm_tag_variable_t},
+ {'D', tm_tag_interface_t},
{'f', tm_tag_function_t},
{'g', tm_tag_struct_t},
{'p', tm_tag_macro_t},
{'P', tm_tag_class_t},
{'s', tm_tag_namespace_t},
+ {'S', tm_tag_externvar_t},
};
static TMParserMapEntry map_OBJC[] = {
@@ -768,6 +770,7 @@ gboolean tm_parser_has_full_context(TMParserType lang)
case TM_PARSER_C:
case TM_PARSER_CPP:
case TM_PARSER_CSHARP:
+ case TM_PARSER_COBOL:
case TM_PARSER_D:
case TM_PARSER_FERITE:
case TM_PARSER_GLSL:
Modified: tests/ctags/Makefile.am
8 lines changed, 5 insertions(+), 3 deletions(-)
===================================================================
@@ -1,9 +1,6 @@
dist_check_SCRIPTS = runner.sh
-# Disabled tests:
-# simple.cbl
-
NULL =
test_sources = \
1795612.js \
@@ -117,6 +114,11 @@ test_sources = \
case_sensitivity.php \
char-selector.f90 \
classes.php \
+ cobol/helloworld.cbl \
+ cobol/helloworld2.cbl \
+ cobol/levels.cbl \
+ cobol/quoted-program-id.cbl \
+ cobol/simple.cbl \
common.f \
complex-return.js \
continuation.f90 \
Modified: tests/ctags/cobol/helloworld.cbl
14 lines changed, 14 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,14 @@
+ 00000* VALIDATION OF BASE COBOL INSTALL 00050000
+ 01000 IDENTIFICATION DIVISION. 00060000
+ 01100 PROGRAM-ID. 'HELLO'. 00070000
+ 02000 ENVIRONMENT DIVISION. 00080000
+ 02100 CONFIGURATION SECTION. 00090000
+ 02110 SOURCE-COMPUTER. GNULINUX. 00100000
+ 02120 OBJECT-COMPUTER. HERCULES. 00110000
+ 02200 SPECIAL-NAMES. 00120000
+ 02210 CONSOLE IS CONSL. 00130000
+ 03000 DATA DIVISION. 00140000
+ 04000 PROCEDURE DIVISION. 00150000
+ 04100 00-MAIN. 00160000
+ 04110 DISPLAY 'HELLO, WORLD' UPON CONSL. 00170000
+ 04900 STOP RUN. 00180000
Modified: tests/ctags/cobol/helloworld.cbl.tags
11 lines changed, 11 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,11 @@
+# format=tagmanager
+00-MAIN�65536�0
+CONFIGURATION�256�0
+DATA�32�0
+ENVIRONMENT�32�0
+HELLO�1�0
+IDENTIFICATION�32�0
+OBJECT-COMPUTER�65536�0
+PROCEDURE�32�0
+SOURCE-COMPUTER�65536�0
+SPECIAL-NAMES�65536�0
Modified: tests/ctags/cobol/helloworld2.cbl
19 lines changed, 19 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,19 @@
+ 00000* VALIDATION OF BASE COBOL INSTALL
+ IDENTIFICATION DIVISION.
+ 01100 PROGRAM-ID. 'HELLO WORLD'.
+ 02000 ENVIRONMENT DIV
+ -ISION.
+ 02100 CONFIGURATION SECTION.
+ 02110 SOURCE-COMPUTER. GNULINUX.
+ 02120 OBJECT-COMPUTER. HERCULES.
+ 02200 SPECIAL
+ --NAMES.
+ 02210 CONSOLE IS CONSL.
+ 03000 DATA DIVISION.
+ 04000 PROCEDUR
+ - E DIVISION.
+ 04100 00-MAIN.
+ 04110 DISPLAY
+ 'HELLO, WORLD'
+ UPON CONSL.
+ 04900 STOP RUN.
Modified: tests/ctags/cobol/helloworld2.cbl.tags
11 lines changed, 11 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,11 @@
+# format=tagmanager
+00-MAIN�65536�0
+CONFIGURATION�256�0
+DATA�32�0
+ENVIRONMENT�32�0
+HELLO WORLD�1�0
+IDENTIFICATION�32�0
+OBJECT-COMPUTER�65536�0
+PROCEDURE�32�0
+SOURCE-COMPUTER�65536�0
+SPECIAL-NAMES�65536�0
Modified: tests/ctags/cobol/levels.cbl
27 lines changed, 27 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,27 @@
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. Test-Items.
+
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 RECORD1.
+ 05 ITEM1 PIC X(1).
+ 05 ITEM2 PIC A(1).
+ 88 ODD VALUES 1, 3, 5, 7, 9.
+ 88 EVEN VALUES 2, 4, 6, 8.
+ 05 ITEM3 PIC X(6).
+ 66 RDITEM4 RENAMES ITEM1 THRU ITEM2.
+ 66 RDITEM5 RENAMES ITEM1 THROUGH ITEM3.
+ 77 STDLN1 PIC A(4).
+ 01 REC2.
+ 02 G1.
+ 05 ITEM1 PICTURE X(10).
+ 05 ITEM2 PIC X(10).
+ 66 OTHERNAME1 RENAMES ITEM1 IN REC2.
+ 66 OTHERNAME2 RENAMES G1.
+
+ PROCEDURE DIVISION.
+ MAIN-PROCEDURE.
+ DISPLAY "Hello world".
+ DISPLAY OTHERNAME2.
+ STOP RUN.
+ END PROGRAM Test-Items.
Modified: tests/ctags/cobol/levels.cbl.tags
22 lines changed, 22 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,22 @@
+# format=tagmanager
+DATA�32�0
+EVEN�16384�RECORD1.ITEM2�0
+G1�2048�REC2�0
+IDENTIFICATION�32�0
+ITEM1�16384�REC2.G1�0
+ITEM1�16384�RECORD1�0
+ITEM2�16384�REC2.G1�0
+ITEM2�16384�RECORD1�0
+ITEM3�16384�RECORD1�0
+MAIN-PROCEDURE�65536�0
+ODD�16384�RECORD1.ITEM2�0
+OTHERNAME1�16384�REC2�0
+OTHERNAME2�16384�REC2�0
+PROCEDURE�32�0
+RDITEM4�16384�RECORD1�0
+RDITEM5�16384�RECORD1�0
+REC2�2048�0
+RECORD1�2048�0
+STDLN1�16384�0
+Test-Items�1�0
+WORKING-STORAGE�256�0
Modified: tests/ctags/cobol/quoted-program-id.cbl
7 lines changed, 7 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,7 @@
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. 'Test program name'.
+ PROCEDURE DIVISION.
+ MAIN.
+ DISPLAY 'This is a test program'.
+ STOP RUN.
+ END PROGRAM 'Test program name'.
Modified: tests/ctags/cobol/quoted-program-id.cbl.tags
5 lines changed, 5 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,5 @@
+# format=tagmanager
+IDENTIFICATION�32�0
+MAIN�65536�0
+PROCEDURE�32�0
+Test program name�1�0
Modified: tests/ctags/cobol/simple.cbl
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online
Modified: tests/ctags/cobol/simple.cbl.tags
22 lines changed, 22 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,22 @@
+# format=tagmanager
+AUTHOR�65536�0
+Begin�65536�0
+DATA�32�0
+DW-DAYS-IN-MONTH�16384�Group-Name.Data-Item1.DW-DAYS-IN-MONTHS�0
+DW-DAYS-IN-MONTHS�16384�Group-Name.Data-Item1�0
+Data-Item1�16384�Group-Name�0
+ENVIRONMENT�32�0
+FILE�256�0
+FILE-CONTROL�65536�0
+File-Data-Item�16384�File-Group-Name�0
+File-Group-Name�2048�0
+File-Name�16�0
+Group-Name�2048�0
+IDENTIFICATION�32�0
+INPUT-OUPUT�256�0
+PROCEDURE�32�0
+Program-Name�1�0
+SH-WORK-MMDDYYYY�16384�Group-Name.Data-Item1�0
+SH-WORK-MMDDYYYY-2�16384�Group-Name.Data-Item1�0
+Subprogram-Name�65536�0
+WORKING-STORAGE�256�0
Modified: tests/ctags/simple.cbl.tags
19 lines changed, 0 insertions(+), 19 deletions(-)
===================================================================
@@ -1,19 +0,0 @@
-# format=tagmanager
-AUTHOR�65536�0
-Begin�65536�0
-DW-DAYS-IN-MONTH�16384�0
-DW-DAYS-IN-MONTHS�16384�0
-Data-Item1�16384�0
-FILE�256�0
-FILE-CONTROL�65536�0
-File-Data-Item�16384�0
-File-Group-Name�2048�0
-File-Name�16�0
-Group-Name�2048�0
-INPUT-OUPUT�256�0
-PROGRAM-ID�65536�0
-Program-Name�1�0
-SH-WORK-MMDDYYYY�16384�0
-SH-WORK-MMDDYYYY-2�16384�0
-Subprogram-Name�65536�0
-WORKING-STORAGE�256�0
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list