blob: 8f7306d9dd0116bd5e5eaeb3ac5ed682d6fed276 [file] [log] [blame]
Bram Moolenaard4755bb2004-09-02 19:12:26 +00001" Vim ABAP syntax file
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00002" Language: SAP - ABAP/R4
Bram Moolenaar3a0d8092012-10-21 03:02:54 +02003" Revision: 2.0
4" Maintainer: Marius Piedallu van Wyk <lailoken@gmail.com>
5" Last Change: 2012 Oct 12
6" Comment: Thanks to EPI-USE Labs for all your assistance. :)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00007
Bram Moolenaar7fc904b2006-04-13 20:37:35 +00008" For version < 6.0: Clear all syntax items
9" For version >= 6.0: Quit when a syntax file was already loaded
Bram Moolenaard4755bb2004-09-02 19:12:26 +000010if version < 600
11 syntax clear
12elseif exists("b:current_syntax")
13 finish
14endif
15
16" Always ignore case
17syn case ignore
18
19" Symbol Operators
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020020syn match abapSymbolOperator "\W+\W"
21syn match abapSymbolOperator "\W-\W"
22syn match abapSymbolOperator "\W/\W"
23syn match abapSymbolOperator "\W%\W"
24syn match abapSymbolOperator "\W=\W"
25syn match abapSymbolOperator "\W<\W"
26syn match abapSymbolOperator "\W>\W"
27syn match abapSymbolOperator "\W\*\W"
28syn match abapSymbolOperator "\W[<>]=\W"
29syn match abapSymbolOperator "\W<>\W"
30syn match abapSymbolOperator "\W\*\*\W"
31syn match abapSymbolOperator "\[\]"
32syn match abapSymbolOperator "->\*\?"
33syn match abapSymbolOperator "=>"
34syn match abapSymbolOperator "[()~:,\.&$]"
Bram Moolenaard4755bb2004-09-02 19:12:26 +000035
36" Literals
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020037syn region abapCharString matchgroup=abapCharString start="'" end="'" contains=abapCharStringEscape
38syn match abapCharStringEscape contained "''"
Bram Moolenaard4755bb2004-09-02 19:12:26 +000039
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020040syn region abapString matchgroup=abapString start="`" end="`" contains=abapStringEscape
41syn match abapStringEscape contained "``"
42
43syn match abapNumber "\-\=\<\d\+\>"
Bram Moolenaard4755bb2004-09-02 19:12:26 +000044syn region abapHex matchgroup=abapHex start="X'" end="'"
45
46if version >= 600
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020047 setlocal iskeyword=48-57,_,A-Z,a-z,/
Bram Moolenaard4755bb2004-09-02 19:12:26 +000048else
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020049 set iskeyword=48-57,_,A-Z,a-z,/
Bram Moolenaard4755bb2004-09-02 19:12:26 +000050endif
51
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020052syn match abapNamespace "/\w\+/"
53
54" multi-word statements
55syn match abapComplexStatement "\(WITH\W\+\(HEADER\W\+LINE\|FRAME\|KEY\)\|WITH\)"
56syn match abapComplexStatement "NO\W\+STANDARD\W\+PAGE\W\+HEADING"
57syn match abapComplexStatement "\(EXIT\W\+FROM\W\+STEP\W\+LOOP\|EXIT\)"
58syn match abapComplexStatement "\(BEGIN\W\+OF\W\+\(BLOCK\|LINE\)\|BEGIN\W\+OF\)"
59syn match abapComplexStatement "\(END\W\+OF\W\+\(BLOCK\|LINE\)\|END\W\+OF\)"
60syn match abapComplexStatement "NO\W\+INTERVALS"
61syn match abapComplexStatement "RESPECTING\W\+BLANKS"
62syn match abapComplexStatement "SEPARATED\W\+BY"
63syn match abapComplexStatement "\(USING\W\+\(EDIT\W\+MASK\)\|USING\)"
64syn match abapComplexStatement "\(WHERE\W\+\(LINE\)\)"
65syn match abapComplexStatement "RADIOBUTTON\W\+GROUP"
66syn match abapComplexStatement "REF\W\+TO"
67syn match abapComplexStatement "\(PUBLIC\|PRIVATE\|PROTECTED\)\(\W\+SECTION\)\?"
68syn match abapComplexStatement "DELETING\W\+\(TRAILING\|LEADING\)"
69syn match abapComplexStatement "\(ALL\W\+OCCURRENCES\)\|\(\(FIRST\|LAST\)\W\+OCCURRENCE\)"
70syn match abapComplexStatement "INHERITING\W\+FROM"
71
72" hyphenated-word statements
73syn match abapComplexStatement "LINE-COUNT"
74syn match abapComplexStatement "ADD-CORRESPONDING"
75syn match abapComplexStatement "AUTHORITY-CHECK"
76syn match abapComplexStatement "BREAK-POINT"
77syn match abapComplexStatement "CLASS-DATA"
78syn match abapComplexStatement "CLASS-METHODS"
79syn match abapComplexStatement "CLASS-METHOD"
80syn match abapComplexStatement "DIVIDE-CORRESPONDING"
81syn match abapComplexStatement "EDITOR-CALL"
82syn match abapComplexStatement "END-OF-DEFINITION"
83syn match abapComplexStatement "END-OF-PAGE"
84syn match abapComplexStatement "END-OF-SELECTION"
85syn match abapComplexStatement "FIELD-GROUPS"
86syn match abapComplexStatement "FIELD-SYMBOLS"
87syn match abapComplexStatement "FUNCTION-POOL"
88syn match abapComplexStatement "MOVE-CORRESPONDING"
89syn match abapComplexStatement "MULTIPLY-CORRESPONDING"
90syn match abapComplexStatement "NEW-LINE"
91syn match abapComplexStatement "NEW-PAGE"
92syn match abapComplexStatement "NEW-SECTION"
93syn match abapComplexStatement "PRINT-CONTROL"
94syn match abapComplexStatement "RP-PROVIDE-FROM-LAST"
95syn match abapComplexStatement "SELECT-OPTIONS"
96syn match abapComplexStatement "SELECTION-SCREEN"
97syn match abapComplexStatement "START-OF-SELECTION"
98syn match abapComplexStatement "SUBTRACT-CORRESPONDING"
99syn match abapComplexStatement "SYNTAX-CHECK"
100syn match abapComplexStatement "SYNTAX-TRACE"
101syn match abapComplexStatement "TOP-OF-PAGE"
102syn match abapComplexStatement "TYPE-POOL"
103syn match abapComplexStatement "TYPE-POOLS"
104syn match abapComplexStatement "LINE-SIZE"
105syn match abapComplexStatement "LINE-COUNT"
106syn match abapComplexStatement "MESSAGE-ID"
107syn match abapComplexStatement "DISPLAY-MODE"
108syn match abapComplexStatement "READ\(-ONLY\)\?"
109
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000110" ABAP statements
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200111syn keyword abapStatement ADD ALIAS ALIASES ASSERT ASSIGN ASSIGNING AT
112syn keyword abapStatement BACK BOUND
113syn keyword abapStatement CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY
114syn keyword abapStatement DATA DEFINE DEFINITION DEFERRED DELETE DESCRIBE DETAIL DIVIDE DO
115syn keyword abapStatement ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT
116syn keyword abapStatement FETCH FIELDS FORM FORMAT FREE FROM FUNCTION
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000117syn keyword abapStatement GENERATE GET
118syn keyword abapStatement HIDE
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200119syn keyword abapStatement IF IMPORT IMPORTING INDEX INFOTYPES INITIAL INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION IS
120syn keyword abapStatement LEAVE LIKE LINE LOAD LOCAL LOOP
121syn keyword abapStatement MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY
122syn keyword abapStatement ON OVERLAY OPTIONAL OTHERS
123syn keyword abapStatement PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT
124syn keyword abapStatement RAISE RANGES RECEIVE REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURNING ROLLBACK
125syn keyword abapStatement SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS
126syn keyword abapStatement TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES
127syn keyword abapStatement UNASSIGN ULINE UNPACK UPDATE
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000128syn keyword abapStatement WHEN WHILE WINDOW WRITE
129
130" More statemets
131syn keyword abapStatement OCCURS STRUCTURE OBJECT PROPERTY
132syn keyword abapStatement CASTING APPEND RAISING VALUE COLOR
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200133syn keyword abapStatement CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT
134syn keyword abapStatement ID NUMBER FOR TITLE OUTPUT
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000135
136" Special ABAP specific tables:
137syn match abapSpecial "\(\W\|^\)\(sy\|\(p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)\(\W\|$\)"ms=s+1,me=e-1
138syn match abapSpecialTables "\(sy\|\(p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)-"me=e-1 contained
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200139syn match abapSpecial "\(\W\|^\)\w\+-\(\w\+-\w\+\|\w\+\)"ms=s+1 contains=abapSpecialTables,abapStatement,abapComplexStatement
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000140
141" Pointer
142syn match abapSpecial "<\w\+>"
143
144" Abap constants:
145syn keyword abapSpecial TRUE FALSE NULL SPACE
146
147" Includes
148syn region abapInclude start="include" end="." contains=abapComment
149
150" Types
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200151syn keyword abapTypes c n i p f d t x string xstring decfloat16 decfloat34
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000152
153" Atritmitic operators
154syn keyword abapOperator abs sign ceil floor trunc frac acos asin atan cos sin tan
155syn keyword abapOperator cosh sinh tanh exp log log10 sqrt
156
157" String operators
158syn keyword abapOperator strlen xstrlen charlen numofchar dbmaxlen
159
160" Table operators
161syn keyword abapOperator lines
162
163" Table operators (SELECT operators)
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200164syn keyword abapOperator INTO WHERE GROUP BY HAVING ORDER BY SINGLE
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000165syn keyword abapOperator APPENDING CORRESPONDING FIELDS OF TABLE
166syn keyword abapOperator LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING
167syn keyword abapOperator EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN
168
169" An error? Not strictly... but cannot think of reason this is intended.
170syn match abapError "\.\."
171
172" Comments
173syn region abapComment start="^\*" end="$" contains=abapTodo
174syn match abapComment "\".*" contains=abapTodo
Bram Moolenaar7fc904b2006-04-13 20:37:35 +0000175syn keyword abapTodo contained TODO NOTE
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200176syn match abapTodo "\#EC\W\+\w\+"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000177
178" Define the default highlighting.
179" For version 5.7 and earlier: only when not done already
180" For version 5.8 and later: only when an item doesn't have highlighting yet
181if version >= 508 || !exists("did_abap_syntax_inits")
182 if version < 508
183 let did_abap_syntax_inits = 1
184 command -nargs=+ HiLink hi link <args>
185 else
186 command -nargs=+ HiLink hi def link <args>
187 endif
188
189 HiLink abapError Error
Bram Moolenaar7fc904b2006-04-13 20:37:35 +0000190 HiLink abapComment Comment
191 HiLink abapInclude Include
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200192 HiLink abapStatement Statement
193 HiLink abapComplexStatement Statement
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000194 HiLink abapSpecial Special
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200195 HiLink abapNamespace Special
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000196 HiLink abapSpecialTables PreProc
Bram Moolenaar7fc904b2006-04-13 20:37:35 +0000197 HiLink abapSymbolOperator abapOperator
198 HiLink abapOperator Operator
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200199 HiLink abapCharString String
Bram Moolenaar7fc904b2006-04-13 20:37:35 +0000200 HiLink abapString String
201 HiLink abapFloat Float
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200202 HiLink abapTypes Type
203 HiLink abapSymbol Structure
Bram Moolenaar7fc904b2006-04-13 20:37:35 +0000204 HiLink abapNumber Number
205 HiLink abapHex Number
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000206
207 delcommand HiLink
208endif
209
210let b:current_syntax = "abap"
211
212" vim: ts=8 sw=2
Bram Moolenaar7fc904b2006-04-13 20:37:35 +0000213