1" Vim syntax file 2" Language: COBOL 3" Maintainer: Tim Pope <vimNOSPAM@tpope.info> 4" (formerly Davyd Ondrejko <vondraco@columbus.rr.com>) 5" (formerly Sitaram Chamarty <sitaram@diac.com> and 6" James Mitchell <james_mitchell@acm.org>) 7" $Id: cobol.vim,v 1.2 2007/05/05 18:23:43 vimboss Exp $ 8 9" For version 5.x: Clear all syntax items 10" For version 6.x: Quit when a syntax file was already loaded 11if version < 600 12 syntax clear 13elseif exists("b:current_syntax") 14 finish 15endif 16 17" MOST important - else most of the keywords wont work! 18if version < 600 19 set isk=@,48-57,- 20else 21 setlocal isk=@,48-57,- 22endif 23 24syn case ignore 25 26syn cluster cobolStart contains=cobolAreaA,cobolAreaB,cobolComment,cobolCompiler 27syn cluster cobolAreaA contains=cobolParagraph,cobolSection,cobolDivision 28"syn cluster cobolAreaB contains= 29syn cluster cobolAreaAB contains=cobolLine 30syn cluster cobolLine contains=cobolReserved 31syn match cobolMarker "^\%( \{,5\}[^ ]\)\@=.\{,6}" nextgroup=@cobolStart 32syn match cobolSpace "^ \{6\}" nextgroup=@cobolStart 33syn match cobolAreaA " \{1,4\}" contained nextgroup=@cobolAreaA,@cobolAreaAB 34syn match cobolAreaB " \{5,\}\|- *" contained nextgroup=@cobolAreaB,@cobolAreaAB 35syn match cobolComment "[/*C].*$" contained 36syn match cobolCompiler "$.*$" contained 37syn match cobolLine ".*$" contained contains=cobolReserved,@cobolLine 38 39syn match cobolDivision "[A-Z][A-Z0-9-]*[A-Z0-9]\s\+DIVISION\."he=e-1 contained contains=cobolDivisionName 40syn keyword cobolDivisionName contained IDENTIFICATION ENVIRONMENT DATA PROCEDURE 41syn match cobolSection "[A-Z][A-Z0-9-]*[A-Z0-9]\s\+SECTION\."he=e-1 contained contains=cobolSectionName 42syn keyword cobolSectionName contained CONFIGURATION INPUT-OUTPUT FILE WORKING-STORAGE LOCAL-STORAGE LINKAGE 43syn match cobolParagraph "\a[A-Z0-9-]*[A-Z0-9]\.\|\d[A-Z0-9-]*[A-Z]\."he=e-1 contained contains=cobolParagraphName 44syn keyword cobolParagraphName contained PROGRAM-ID SOURCE-COMPUTER OBJECT-COMPUTER SPECIAL-NAMES FILE-CONTROL I-O-CONTROL 45 46 47"syn match cobolKeys "^\a\{1,6\}" contains=cobolReserved 48syn keyword cobolReserved contained ACCEPT ACCESS ADD ADDRESS ADVANCING AFTER ALPHABET ALPHABETIC 49syn keyword cobolReserved contained ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED ALS 50syn keyword cobolReserved contained ALTERNATE AND ANY ARE AREA AREAS ASCENDING ASSIGN AT AUTHOR BEFORE BINARY 51syn keyword cobolReserved contained BLANK BLOCK BOTTOM BY CANCEL CBLL CD CF CH CHARACTER CHARACTERS CLASS 52syn keyword cobolReserved contained CLOCK-UNITS CLOSE COBOL CODE CODE-SET COLLATING COLUMN COMMA COMMON 53syn keyword cobolReserved contained COMMUNICATIONS COMPUTATIONAL COMPUTE CONTENT CONTINUE 54syn keyword cobolReserved contained CONTROL CONVERTING CORR CORRESPONDING COUNT CURRENCY DATE DATE-COMPILED 55syn keyword cobolReserved contained DATE-WRITTEN DAY DAY-OF-WEEK DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE 56syn keyword cobolReserved contained DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING DECIMAL-POINT 57syn keyword cobolReserved contained DELARATIVES DELETE DELIMITED DELIMITER DEPENDING DESCENDING DESTINATION 58syn keyword cobolReserved contained DETAIL DISABLE DISPLAY DIVIDE DIVISION DOWN DUPLICATES DYNAMIC EGI ELSE EMI 59syn keyword cobolReserved contained ENABLE END-ADD END-COMPUTE END-DELETE END-DIVIDE END-EVALUATE END-IF 60syn keyword cobolReserved contained END-MULTIPLY END-OF-PAGE END-READ END-RECEIVE END-RETURN 61syn keyword cobolReserved contained END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT END-UNSTRING 62syn keyword cobolReserved contained END-WRITE EQUAL ERROR ESI EVALUATE EVERY EXCEPTION EXIT 63syn keyword cobolReserved contained EXTEND EXTERNAL FALSE FD FILLER FINAL FIRST FOOTING FOR FROM 64syn keyword cobolReserved contained GENERATE GIVING GLOBAL GREATER GROUP HEADING HIGH-VALUE HIGH-VALUES I-O 65syn keyword cobolReserved contained IN INDEX INDEXED INDICATE INITIAL INITIALIZE 66syn keyword cobolReserved contained INITIATE INPUT INSPECT INSTALLATION INTO IS JUST 67syn keyword cobolReserved contained JUSTIFIED KEY LABEL LAST LEADING LEFT LENGTH LOCK MEMORY 68syn keyword cobolReserved contained MERGE MESSAGE MODE MODULES MOVE MULTIPLE MULTIPLY NATIVE NEGATIVE NEXT NO NOT 69syn keyword cobolReserved contained NUMBER NUMERIC NUMERIC-EDITED OCCURS OF OFF OMITTED ON OPEN 70syn keyword cobolReserved contained OPTIONAL OR ORDER ORGANIZATION OTHER OUTPUT OVERFLOW PACKED-DECIMAL PADDING 71syn keyword cobolReserved contained PAGE PAGE-COUNTER PERFORM PF PH PIC PICTURE PLUS POINTER POSITION POSITIVE 72syn keyword cobolReserved contained PRINTING PROCEDURES PROCEDD PROGRAM PURGE QUEUE QUOTES 73syn keyword cobolReserved contained RANDOM RD READ RECEIVE RECORD RECORDS REDEFINES REEL REFERENCE REFERENCES 74syn keyword cobolReserved contained RELATIVE RELEASE REMAINDER REMOVAL REPLACE REPLACING REPORT REPORTING 75syn keyword cobolReserved contained REPORTS RERUN RESERVE RESET RETURN RETURNING REVERSED REWIND REWRITE RF RH 76syn keyword cobolReserved contained RIGHT ROUNDED RUN SAME SD SEARCH SECTION SECURITY SEGMENT SEGMENT-LIMITED 77syn keyword cobolReserved contained SELECT SEND SENTENCE SEPARATE SEQUENCE SEQUENTIAL SET SIGN SIZE SORT 78syn keyword cobolReserved contained SORT-MERGE SOURCE STANDARD 79syn keyword cobolReserved contained STANDARD-1 STANDARD-2 START STATUS STOP STRING SUB-QUEUE-1 SUB-QUEUE-2 80syn keyword cobolReserved contained SUB-QUEUE-3 SUBTRACT SUM SUPPRESS SYMBOLIC SYNC SYNCHRONIZED TABLE TALLYING 81syn keyword cobolReserved contained TAPE TERMINAL TERMINATE TEST TEXT THAN THEN THROUGH THRU TIME TIMES TO TOP 82syn keyword cobolReserved contained TRAILING TRUE TYPE UNIT UNSTRING UNTIL UP UPON USAGE USE USING VALUE VALUES 83syn keyword cobolReserved contained VARYING WHEN WITH WORDS WRITE 84syn match cobolReserved contained "\<CONTAINS\>" 85syn match cobolReserved contained "\<\(IF\|INVALID\|END\|EOP\)\>" 86syn match cobolReserved contained "\<ALL\>" 87 88syn cluster cobolLine add=cobolConstant,cobolNumber,cobolPic 89syn keyword cobolConstant SPACE SPACES NULL ZERO ZEROES ZEROS LOW-VALUE LOW-VALUES 90 91syn match cobolNumber "\<-\=\d*\.\=\d\+\>" contained 92syn match cobolPic "\<S*9\+\>" contained 93syn match cobolPic "\<$*\.\=9\+\>" contained 94syn match cobolPic "\<Z*\.\=9\+\>" contained 95syn match cobolPic "\<V9\+\>" contained 96syn match cobolPic "\<9\+V\>" contained 97syn match cobolPic "\<-\+[Z9]\+\>" contained 98syn match cobolTodo "todo" contained containedin=cobolComment 99 100" For MicroFocus or other inline comments, include this line. 101" syn region cobolComment start="*>" end="$" contains=cobolTodo,cobolMarker 102 103syn match cobolBadLine "[^ D\*$/-].*" contained 104" If comment mark somehow gets into column past Column 7. 105syn match cobolBadLine "\s\+\*.*" contained 106syn cluster cobolStart add=cobolBadLine 107 108 109syn keyword cobolGoTo GO GOTO 110syn keyword cobolCopy COPY 111 112" cobolBAD: things that are BAD NEWS! 113syn keyword cobolBAD ALTER ENTER RENAMES 114 115syn cluster cobolLine add=cobolGoTo,cobolCopy,cobolBAD,cobolWatch,cobolEXECs 116 117" cobolWatch: things that are important when trying to understand a program 118syn keyword cobolWatch OCCURS DEPENDING VARYING BINARY COMP REDEFINES 119syn keyword cobolWatch REPLACING RUN 120syn match cobolWatch "COMP-[123456XN]" 121 122syn keyword cobolEXECs EXEC END-EXEC 123 124 125syn cluster cobolAreaA add=cobolDeclA 126syn cluster cobolAreaAB add=cobolDecl 127syn match cobolDeclA "\(0\=1\|77\|78\) " contained nextgroup=cobolLine 128syn match cobolDecl "[1-4]\d " contained nextgroup=cobolLine 129syn match cobolDecl "0\=[2-9] " contained nextgroup=cobolLine 130syn match cobolDecl "66 " contained nextgroup=cobolLine 131 132syn match cobolWatch "88 " contained nextgroup=cobolLine 133 134"syn match cobolBadID "\k\+-\($\|[^-A-Z0-9]\)" contained 135 136syn cluster cobolLine add=cobolCALLs,cobolString,cobolCondFlow 137syn keyword cobolCALLs CALL END-CALL CANCEL GOBACK PERFORM END-PERFORM INVOKE 138syn match cobolCALLs "EXIT \+PROGRAM" 139syn match cobolExtras /\<VALUE \+\d\+\./hs=s+6,he=e-1 140 141syn match cobolString /"[^"]*\("\|$\)/ 142syn match cobolString /'[^']*\('\|$\)/ 143 144"syn region cobolLine start="^.\{6}[ D-]" end="$" contains=ALL 145syn match cobolIndicator "\%7c[D-]" contained 146 147if exists("cobol_legacy_code") 148 syn region cobolCondFlow contains=ALLBUT,cobolLine start="\<\(IF\|INVALID\|END\|EOP\)\>" skip=/\('\|"\)[^"]\{-}\("\|'\|$\)/ end="\." keepend 149endif 150 151" many legacy sources have junk in columns 1-6: must be before others 152" Stuff after column 72 is in error - must be after all other "match" entries 153if exists("cobol_legacy_code") 154 syn match cobolBadLine "\%73c.*" containedin=ALLBUT,cobolComment 155else 156 syn match cobolBadLine "\%73c.*" containedin=ALL 157endif 158 159" Define the default highlighting. 160" For version 5.7 and earlier: only when not done already 161" For version 5.8 and later: only when an item doesn't have highlighting yet 162if version >= 508 || !exists("did_cobol_syntax_inits") 163 if version < 508 164 let did_cobol_syntax_inits = 1 165 command -nargs=+ HiLink hi link <args> 166 else 167 command -nargs=+ HiLink hi def link <args> 168 endif 169 170 HiLink cobolBAD Error 171 HiLink cobolBadID Error 172 HiLink cobolBadLine Error 173 if exists("g:cobol_legacy_code") 174 HiLink cobolMarker Comment 175 else 176 HiLink cobolMarker Error 177 endif 178 HiLink cobolCALLs Function 179 HiLink cobolComment Comment 180 HiLink cobolKeys Comment 181 HiLink cobolAreaB Special 182 HiLink cobolCompiler PreProc 183 HiLink cobolCondFlow Special 184 HiLink cobolCopy PreProc 185 HiLink cobolDeclA cobolDecl 186 HiLink cobolDecl Type 187 HiLink cobolExtras Special 188 HiLink cobolGoTo Special 189 HiLink cobolConstant Constant 190 HiLink cobolNumber Constant 191 HiLink cobolPic Constant 192 HiLink cobolReserved Statement 193 HiLink cobolDivision Label 194 HiLink cobolSection Label 195 HiLink cobolParagraph Label 196 HiLink cobolDivisionName Keyword 197 HiLink cobolSectionName Keyword 198 HiLink cobolParagraphName Keyword 199 HiLink cobolString Constant 200 HiLink cobolTodo Todo 201 HiLink cobolWatch Special 202 HiLink cobolIndicator Special 203 204 delcommand HiLink 205endif 206 207let b:current_syntax = "cobol" 208 209" vim: ts=6 nowrap 210