blob: 5315e752110395669898a2ebd50bd84f02e8c504 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaarc81e5e72007-05-05 18:24:42 +00002" Language: COBOL
3" Maintainer: Tim Pope <vimNOSPAM@tpope.info>
4" (formerly Davyd Ondrejko <vondraco@columbus.rr.com>)
Bram Moolenaar071d4272004-06-13 20:20:40 +00005" (formerly Sitaram Chamarty <sitaram@diac.com> and
6" James Mitchell <james_mitchell@acm.org>)
Bram Moolenaar5c736222010-01-06 20:54:52 +01007" $Id: cobol.vim,v 1.2 2007/05/05 18:23:43 vimboss Exp $
Bram Moolenaar071d4272004-06-13 20:20:40 +00008
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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000026syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000048syn 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000053syn keyword cobolReserved contained COMMUNICATIONS COMPUTATIONAL COMPUTE CONTENT CONTINUE
54syn keyword cobolReserved contained CONTROL CONVERTING CORR CORRESPONDING COUNT CURRENCY DATE DATE-COMPILED
Bram Moolenaar071d4272004-06-13 20:20:40 +000055syn 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000060syn keyword cobolReserved contained END-MULTIPLY END-OF-PAGE END-READ END-RECEIVE END-RETURN
Bram Moolenaar071d4272004-06-13 20:20:40 +000061syn keyword cobolReserved contained END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT END-UNSTRING
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000062syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000064syn keyword cobolReserved contained GENERATE GIVING GLOBAL GREATER GROUP HEADING HIGH-VALUE HIGH-VALUES I-O
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000065syn keyword cobolReserved contained IN INDEX INDEXED INDICATE INITIAL INITIALIZE
66syn keyword cobolReserved contained INITIATE INPUT INSPECT INSTALLATION INTO IS JUST
Bram Moolenaar071d4272004-06-13 20:20:40 +000067syn 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000069syn keyword cobolReserved contained NUMBER NUMERIC NUMERIC-EDITED OCCURS OF OFF OMITTED ON OPEN
Bram Moolenaar071d4272004-06-13 20:20:40 +000070syn 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000072syn keyword cobolReserved contained PRINTING PROCEDURES PROCEDD PROGRAM PURGE QUEUE QUOTES
Bram Moolenaar071d4272004-06-13 20:20:40 +000073syn 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000078syn keyword cobolReserved contained SORT-MERGE SOURCE STANDARD
Bram Moolenaar071d4272004-06-13 20:20:40 +000079syn 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000083syn keyword cobolReserved contained VARYING WHEN WITH WORDS WRITE
Bram Moolenaar071d4272004-06-13 20:20:40 +000084syn match cobolReserved contained "\<CONTAINS\>"
85syn match cobolReserved contained "\<\(IF\|INVALID\|END\|EOP\)\>"
86syn match cobolReserved contained "\<ALL\>"
87
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000088syn cluster cobolLine add=cobolConstant,cobolNumber,cobolPic
Bram Moolenaar071d4272004-06-13 20:20:40 +000089syn keyword cobolConstant SPACE SPACES NULL ZERO ZEROES ZEROS LOW-VALUE LOW-VALUES
90
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000091syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +000099
100" For MicroFocus or other inline comments, include this line.
101" syn region cobolComment start="*>" end="$" contains=cobolTodo,cobolMarker
102
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000103syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109syn keyword cobolGoTo GO GOTO
110syn keyword cobolCopy COPY
111
112" cobolBAD: things that are BAD NEWS!
113syn keyword cobolBAD ALTER ENTER RENAMES
114
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000115syn cluster cobolLine add=cobolGoTo,cobolCopy,cobolBAD,cobolWatch,cobolEXECs
116
Bram Moolenaar071d4272004-06-13 20:20:40 +0000117" 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000125syn 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
Bram Moolenaar071d4272004-06-13 20:20:40 +0000131
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000132syn match cobolWatch "88 " contained nextgroup=cobolLine
Bram Moolenaar071d4272004-06-13 20:20:40 +0000133
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000134"syn match cobolBadID "\k\+-\($\|[^-A-Z0-9]\)" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000135
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000136syn cluster cobolLine add=cobolCALLs,cobolString,cobolCondFlow
137syn keyword cobolCALLs CALL END-CALL CANCEL GOBACK PERFORM END-PERFORM INVOKE
Bram Moolenaar071d4272004-06-13 20:20:40 +0000138syn match cobolCALLs "EXIT \+PROGRAM"
139syn match cobolExtras /\<VALUE \+\d\+\./hs=s+6,he=e-1
140
141syn match cobolString /"[^"]*\("\|$\)/
142syn match cobolString /'[^']*\('\|$\)/
143
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000144"syn region cobolLine start="^.\{6}[ D-]" end="$" contains=ALL
145syn match cobolIndicator "\%7c[D-]" contained
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146
147if exists("cobol_legacy_code")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000148 syn region cobolCondFlow contains=ALLBUT,cobolLine start="\<\(IF\|INVALID\|END\|EOP\)\>" skip=/\('\|"\)[^"]\{-}\("\|'\|$\)/ end="\." keepend
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149endif
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")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000154 syn match cobolBadLine "\%73c.*" containedin=ALLBUT,cobolComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000155else
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000156 syn match cobolBadLine "\%73c.*" containedin=ALL
Bram Moolenaar071d4272004-06-13 20:20:40 +0000157endif
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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000173 if exists("g:cobol_legacy_code")
174 HiLink cobolMarker Comment
175 else
176 HiLink cobolMarker Error
177 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000178 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000185 HiLink cobolDeclA cobolDecl
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186 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
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000193 HiLink cobolDivision Label
194 HiLink cobolSection Label
195 HiLink cobolParagraph Label
196 HiLink cobolDivisionName Keyword
197 HiLink cobolSectionName Keyword
198 HiLink cobolParagraphName Keyword
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199 HiLink cobolString Constant
200 HiLink cobolTodo Todo
201 HiLink cobolWatch Special
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000202 HiLink cobolIndicator Special
Bram Moolenaar071d4272004-06-13 20:20:40 +0000203
204 delcommand HiLink
205endif
206
207let b:current_syntax = "cobol"
208
209" vim: ts=6 nowrap