Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Sat, 27 Apr 2019 13:21:36 UTC Commit: 44c26adbc35a6f5e3b6d84945b78634d7550e86b https://github.com/geany/geany/commit/44c26adbc35a6f5e3b6d84945b78634d7550e8...
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).