blob: 627e51504a3dcf703e26e311b16c79a33ba2ac04 [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" Maintainer: Marius Piedallu van Wyk <lailoken@gmail.com>
Bram Moolenaar82be4842021-01-11 19:40:15 +01004" Last Change: 2021 Jan 02
Bram Moolenaar3a0d8092012-10-21 03:02:54 +02005" Comment: Thanks to EPI-USE Labs for all your assistance. :)
Bram Moolenaard4755bb2004-09-02 19:12:26 +00006
Bram Moolenaar9d87a372018-12-18 21:41:50 +01007" Quit when a syntax file was already loaded
Bram Moolenaar89bcfda2016-08-30 23:26:57 +02008if exists("b:current_syntax")
Bram Moolenaard4755bb2004-09-02 19:12:26 +00009 finish
10endif
11
12" Always ignore case
13syn case ignore
14
Bram Moolenaar97d62492012-11-15 21:28:22 +010015" Symbol Operators (space delimited)
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020016syn match abapSymbolOperator "\W+\W"
17syn match abapSymbolOperator "\W-\W"
18syn match abapSymbolOperator "\W/\W"
19syn match abapSymbolOperator "\W%\W"
20syn 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 "\[\]"
28syn match abapSymbolOperator "->\*\?"
29syn match abapSymbolOperator "=>"
30syn match abapSymbolOperator "[()~:,\.&$]"
Bram Moolenaard4755bb2004-09-02 19:12:26 +000031
32" Literals
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020033syn region abapCharString matchgroup=abapCharString start="'" end="'" contains=abapCharStringEscape
34syn match abapCharStringEscape contained "''"
Bram Moolenaard4755bb2004-09-02 19:12:26 +000035
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020036syn region abapString matchgroup=abapString start="`" end="`" contains=abapStringEscape
37syn match abapStringEscape contained "``"
38
39syn match abapNumber "\-\=\<\d\+\>"
Bram Moolenaard4755bb2004-09-02 19:12:26 +000040syn region abapHex matchgroup=abapHex start="X'" end="'"
41
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020042setlocal iskeyword=48-57,_,A-Z,a-z,/
Bram Moolenaard4755bb2004-09-02 19:12:26 +000043
Bram Moolenaar97d62492012-11-15 21:28:22 +010044syn match abapNamespace "\</\w\+/"
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020045
46" multi-word statements
Bram Moolenaar97d62492012-11-15 21:28:22 +010047syn match abapComplexStatement "\<\(WITH\W\+\(HEADER\W\+LINE\|FRAME\|KEY\)\|WITH\)\>"
48syn match abapComplexStatement "\<NO\W\+STANDARD\W\+PAGE\W\+HEADING\>"
49syn match abapComplexStatement "\<\(EXIT\W\+FROM\W\+STEP\W\+LOOP\|EXIT\)\>"
50syn match abapComplexStatement "\<\(BEGIN\W\+OF\W\+\(BLOCK\|LINE\)\|BEGIN\W\+OF\)\>"
51syn match abapComplexStatement "\<\(END\W\+OF\W\+\(BLOCK\|LINE\)\|END\W\+OF\)\>"
52syn match abapComplexStatement "\<NO\W\+INTERVALS\>"
53syn match abapComplexStatement "\<RESPECTING\W\+BLANKS\>"
54syn match abapComplexStatement "\<SEPARATED\W\+BY\>"
55syn match abapComplexStatement "\<USING\(\W\+EDIT\W\+MASK\)\?\>"
56syn match abapComplexStatement "\<WHERE\(\W\+LINE\)\?\>"
Bram Moolenaar9d87a372018-12-18 21:41:50 +010057syn match abapComplexStatement "\<GET\W\+\(TIME\(\W\+STAMP\)\?\(\W\+FIELD\)\?\|PF-STATUS\|BADI\|BIT\|CONNECTION\|CURSOR\|REFERENCE\W\+OF\)\>"
Bram Moolenaar97d62492012-11-15 21:28:22 +010058syn match abapComplexStatement "\<RADIOBUTTON\W\+GROUP\>"
59syn match abapComplexStatement "\<REF\W\+TO\>"
60syn match abapComplexStatement "\<\(PUBLIC\|PRIVATE\|PROTECTED\)\(\W\+SECTION\)\?\>"
61syn match abapComplexStatement "\<DELETING\W\+\(TRAILING\|LEADING\)\>"
62syn match abapComplexStatement "\<\(ALL\W\+OCCURRENCES\)\|\(\(FIRST\|LAST\)\W\+OCCURRENCE\)\>"
63syn match abapComplexStatement "\<INHERITING\W\+FROM\>"
64syn match abapComplexStatement "\<\(UP\W\+\)\?TO\>"
Bram Moolenaar3a0d8092012-10-21 03:02:54 +020065
66" hyphenated-word statements
Bram Moolenaar97d62492012-11-15 21:28:22 +010067syn match abapComplexStatement "\<LINE-COUNT\>"
68syn match abapComplexStatement "\<ADD-CORRESPONDING\>"
69syn match abapComplexStatement "\<AUTHORITY-CHECK\>"
70syn match abapComplexStatement "\<BREAK-POINT\>"
71syn match abapComplexStatement "\<CLASS-DATA\>"
72syn match abapComplexStatement "\<CLASS-METHODS\>"
73syn match abapComplexStatement "\<CLASS-METHOD\>"
74syn match abapComplexStatement "\<DIVIDE-CORRESPONDING\>"
75syn match abapComplexStatement "\<EDITOR-CALL\>"
76syn match abapComplexStatement "\<END-OF-DEFINITION\>"
77syn match abapComplexStatement "\<END-OF-PAGE\>"
78syn match abapComplexStatement "\<END-OF-SELECTION\>"
79syn match abapComplexStatement "\<FIELD-GROUPS\>"
80syn match abapComplexStatement "\<FIELD-SYMBOLS\>"
81syn match abapComplexStatement "\<FUNCTION-POOL\>"
82syn match abapComplexStatement "\<IS\W\+\(NOT\W\+\)\?\(ASSIGNED\|BOUND\|INITIAL\|SUPPLIED\)\>"
83syn match abapComplexStatement "\<MOVE-CORRESPONDING\>"
84syn match abapComplexStatement "\<MULTIPLY-CORRESPONDING\>"
85syn match abapComplexStatement "\<NEW-LINE\>"
86syn match abapComplexStatement "\<NEW-PAGE\>"
87syn match abapComplexStatement "\<NEW-SECTION\>"
88syn match abapComplexStatement "\<PRINT-CONTROL\>"
89syn match abapComplexStatement "\<RP-PROVIDE-FROM-LAST\>"
90syn match abapComplexStatement "\<SELECT-OPTIONS\>"
91syn match abapComplexStatement "\<SELECTION-SCREEN\>"
92syn match abapComplexStatement "\<START-OF-SELECTION\>"
93syn match abapComplexStatement "\<SUBTRACT-CORRESPONDING\>"
94syn match abapComplexStatement "\<SYNTAX-CHECK\>"
95syn match abapComplexStatement "\<SYNTAX-TRACE\>"
96syn match abapComplexStatement "\<TOP-OF-PAGE\>"
97syn match abapComplexStatement "\<TYPE-POOL\>"
98syn match abapComplexStatement "\<TYPE-POOLS\>"
99syn match abapComplexStatement "\<LINE-SIZE\>"
100syn match abapComplexStatement "\<LINE-COUNT\>"
101syn match abapComplexStatement "\<MESSAGE-ID\>"
102syn match abapComplexStatement "\<DISPLAY-MODE\>"
103syn match abapComplexStatement "\<READ\(-ONLY\)\?\>"
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200104
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000105" ABAP statements
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200106syn keyword abapStatement ADD ALIAS ALIASES ASSERT ASSIGN ASSIGNING AT
Bram Moolenaar97d62492012-11-15 21:28:22 +0100107syn keyword abapStatement BACK
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200108syn keyword abapStatement CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY
109syn keyword abapStatement DATA DEFINE DEFINITION DEFERRED DELETE DESCRIBE DETAIL DIVIDE DO
110syn 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
111syn keyword abapStatement FETCH FIELDS FORM FORMAT FREE FROM FUNCTION
Bram Moolenaar9d87a372018-12-18 21:41:50 +0100112syn keyword abapStatement GENERATE
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000113syn keyword abapStatement HIDE
Bram Moolenaar97d62492012-11-15 21:28:22 +0100114syn keyword abapStatement IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200115syn keyword abapStatement LEAVE LIKE LINE LOAD LOCAL LOOP
116syn keyword abapStatement MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY
117syn keyword abapStatement ON OVERLAY OPTIONAL OTHERS
118syn keyword abapStatement PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT
Bram Moolenaar97d62492012-11-15 21:28:22 +0100119syn keyword abapStatement RAISE RANGES RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURNING ROLLBACK
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200120syn keyword abapStatement SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS
121syn keyword abapStatement TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES
122syn keyword abapStatement UNASSIGN ULINE UNPACK UPDATE
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000123syn keyword abapStatement WHEN WHILE WINDOW WRITE
124
Viktor Szépedbf749b2023-10-16 09:53:37 +0200125" More statements
Bram Moolenaar97d62492012-11-15 21:28:22 +0100126syn keyword abapStatement LINES
127syn keyword abapStatement INTO GROUP BY HAVING ORDER BY SINGLE
128syn keyword abapStatement APPENDING CORRESPONDING FIELDS OF TABLE
129syn keyword abapStatement LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER ROWS CONNECTING
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000130syn keyword abapStatement OCCURS STRUCTURE OBJECT PROPERTY
131syn keyword abapStatement CASTING APPEND RAISING VALUE COLOR
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200132syn keyword abapStatement CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT
133syn keyword abapStatement ID NUMBER FOR TITLE OUTPUT
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000134
135" Special ABAP specific tables:
Bram Moolenaar52b91d82013-06-15 21:39:51 +0200136syn match abapSpecialTables "\<\(sy\|\(hrp\|p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)-"me=e-1 contained
Bram Moolenaar97d62492012-11-15 21:28:22 +0100137syn match abapStructure "\<\w\+-[^\>]"me=e-2 contains=abapSpecialTables,abapStatement,abapComplexStatement
138syn match abapField "-\w\+"ms=s+1
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000139
140" Pointer
141syn match abapSpecial "<\w\+>"
142
Bram Moolenaar97d62492012-11-15 21:28:22 +0100143" Abap common constants:
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000144syn keyword abapSpecial TRUE FALSE NULL SPACE
145
146" Includes
147syn region abapInclude start="include" end="." contains=abapComment
148
149" Types
Bram Moolenaar9d87a372018-12-18 21:41:50 +0100150syn keyword abapTypes c n i int8 p f d t x string xstring decfloat16 decfloat34
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000151
152" Atritmitic operators
153syn keyword abapOperator abs sign ceil floor trunc frac acos asin atan cos sin tan
154syn keyword abapOperator cosh sinh tanh exp log log10 sqrt
155
156" String operators
Bram Moolenaar97d62492012-11-15 21:28:22 +0100157syn keyword abapStatement strlen xstrlen charlen numofchar dbmaxlen
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000158
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000159syn keyword abapOperator EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN
160
161" An error? Not strictly... but cannot think of reason this is intended.
162syn match abapError "\.\."
163
164" Comments
165syn region abapComment start="^\*" end="$" contains=abapTodo
166syn match abapComment "\".*" contains=abapTodo
Bram Moolenaar7fc904b2006-04-13 20:37:35 +0000167syn keyword abapTodo contained TODO NOTE
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200168syn match abapTodo "\#EC\W\+\w\+"
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000169
170" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200171" Only when an item doesn't have highlighting yet
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000172
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200173hi def link abapError Error
174hi def link abapComment Comment
175hi def link abapInclude Include
176hi def link abapStatement Statement
177hi def link abapComplexStatement Statement
178hi def link abapSpecial Special
179hi def link abapNamespace Special
180hi def link abapSpecialTables Special
181hi def link abapSymbolOperator abapOperator
182hi def link abapOperator Operator
183hi def link abapCharString String
184hi def link abapString String
185hi def link abapFloat Float
186hi def link abapTypes Type
187hi def link abapSymbol Structure
188hi def link abapStructure Structure
189hi def link abapField Variable
190hi def link abapNumber Number
191hi def link abapHex Number
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000192
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000193
194let b:current_syntax = "abap"
195
Bram Moolenaar82be4842021-01-11 19:40:15 +0100196" vim: ts=8 sw=2