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