1" Vim ABAP syntax file
2"    Language: SAP - ABAP/R4
3"    Revision: 1.0
4"  Maintainer: Marius Piedallu van Wyk <marius@e.co.za>
5" Last Change: 2006 Apr 13
6
7" For version  < 6.0: Clear all syntax items
8" For version >= 6.0: Quit when a syntax file was already loaded
9if version < 600
10  syntax clear
11elseif exists("b:current_syntax")
12  finish
13endif
14
15" Always ignore case
16syn case ignore
17
18" Symbol Operators
19syn match   abapSymbolOperator  "[+\-/=<>$]"
20syn match   abapSymbolOperator  "\*"
21syn match   abapSymbolOperator  "[<>]="
22syn match   abapSymbolOperator  "<>"
23syn match   abapSymbolOperator  "\*\*"
24syn match   abapSymbolOperator  "[()]"
25syn match   abapSymbolOperator  "[:,\.]"
26
27" Literals
28syn region  abapString matchgroup=abapString start="'" end="'" contains=abapStringEscape
29syn match   abapStringEscape contained "''"
30
31syn match   abapNumber  "-\=\<\d\+\>"
32syn region  abapHex     matchgroup=abapHex start="X'" end="'"
33
34if version >= 600
35  setlocal iskeyword=-,48-57,_,A-Z,a-z
36else
37  set iskeyword=-,48-57,_,A-Z,a-z
38endif
39
40" ABAP statements
41syn keyword abapStatement ADD ADD-CORRESPONDING ASSIGN AT AUTHORITY-CHECK
42syn keyword abapStatement BACK BREAK-POINT
43syn keyword abapStatement CALL CASE CHECK CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY
44syn keyword abapStatement DATA DEFINE DELETE DESCRIBE DETAIL DIVIDE DIVIDE-CORRESPONDING DO
45syn keyword abapStatement EDITOR-CALL ELSE ELSEIF END-OF-DEFINITION END-OF-PAGE END-OF-SELECTION ENDAT ENDCASE ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDLOOP ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDWHILE EXEC EXPORT EXPORTING EXTRACT
46syn keyword abapStatement FETCH FIELD-GROUPS FIELD-SYMBOLS FIELDS FORM FORMAT FREE FUNCTION FUNCTION-POOL
47syn keyword abapStatement GENERATE GET
48syn keyword abapStatement HIDE
49syn keyword abapStatement IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INPUT INSERT
50syn keyword abapStatement LEAVE LIKE LOAD LOCAL LOOP
51syn keyword abapStatement MESSAGE MODIFY MODULE MOVE MOVE-CORRESPONDING MULTIPLY MULTIPLY-CORRESPONDING
52syn keyword abapStatement NEW-LINE NEW-PAGE NEW-SECTION
53syn keyword abapStatement ON OVERLAY
54syn keyword abapStatement PACK PARAMETERS PERFORM POSITION PRINT-CONTROL PROGRAM PROVIDE PUT
55syn keyword abapStatement RAISE RANGES READ RECEIVE REFRESH REJECT REPLACE REPORT RESERVE RESTORE ROLLBACK RP-PROVIDE-FROM-LAST
56syn keyword abapStatement SCAN SCROLL SEARCH SELECT SELECT-OPTIONS SELECTION-SCREEN SET SHIFT SKIP SORT SPLIT START-OF-SELECTION STATICS STOP SUBMIT SUBTRACT SUBTRACT-CORRESPONDING SUM SUMMARY SUPPRESS SYNTAX-CHECK SYNTAX-TRACE
57syn keyword abapStatement TABLES TOP-OF-PAGE TRANSFER TRANSLATE TYPE TYPE-POOL TYPE-POOLS TYPES
58syn keyword abapStatement UNPACK UPDATE
59syn keyword abapStatement WHEN WHILE WINDOW WRITE
60
61" More statemets
62syn keyword abapStatement OCCURS STRUCTURE OBJECT PROPERTY
63syn keyword abapStatement CASTING APPEND RAISING VALUE COLOR
64syn keyword abapStatement LINE-SIZE LINE-COUNT MESSAGE-ID
65syn keyword abapStatement CHANGING EXCEPTIONS DEFAULT CHECKBOX COMMENT
66syn keyword abapStatement ID NUMBER FOR DISPLAY-MODE TITLE OUTPUT
67
68" More multi-word statements
69syn match   abapStatement "\(\W\|^\)\(WITH\W\+\(HEADER\W\+LINE\|FRAME\|KEY\)\|WITH\)\(\W\|$\)"ms=s+1,me=e-1
70syn match   abapStatement "\(\W\|^\)NO\W\+STANDARD\W\+PAGE\W\+HEADING\(\W\|$\)"ms=s+1,me=e-1
71syn match   abapStatement "\(\W\|^\)\(EXIT\W\+FROM\W\+STEP\W\+LOOP\|EXIT\)\(\W\|$\)"ms=s+1,me=e-1
72syn match   abapStatement "\(\W\|^\)\(BEGIN\W\+OF\W\+\(BLOCK\|LINE\)\|BEGIN\W\+OF\)\(\W\|$\)"ms=s+1,me=e-1
73syn match   abapStatement "\(\W\|^\)\(END\W\+OF\W\+\(BLOCK\|LINE\)\|END\W\+OF\)\(\W\|$\)"ms=s+1,me=e-1
74syn match   abapStatement "\(\W\|^\)IS\W\+INITIAL\(\W\|$\)"ms=s+1,me=e-1
75syn match   abapStatement "\(\W\|^\)NO\W\+INTERVALS\(\W\|$\)"ms=s+1,me=e-1
76syn match   abapStatement "\(\W\|^\)SEPARATED\W\+BY\(\W\|$\)"ms=s+1,me=e-1
77syn match   abapStatement "\(\W\|^\)\(USING\W\+\(EDIT\W\+MASK\)\|USING\)\(\W\|$\)"ms=s+1,me=e-1
78syn match   abapStatement "\(\W\|^\)\(WHERE\W\+\(LINE\)\)\(\W\|$\)"ms=s+1,me=e-1
79syn match   abapStatement "\(\W\|^\)RADIOBUTTON\W\+GROUP\(\W\|$\)"ms=s+1,me=e-1
80syn match   abapStatement "\(\W\|^\)REF\W\+TO\(\W\|$\)"ms=s+1,me=e-1
81
82" Special ABAP specific tables:
83syn match   abapSpecial       "\(\W\|^\)\(sy\|\(p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)\(\W\|$\)"ms=s+1,me=e-1
84syn match   abapSpecialTables "\(sy\|\(p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)-"me=e-1 contained
85syn match   abapSpecial       "\(\W\|^\)\w\+-\(\w\+-\w\+\|\w\+\)"ms=s+1 contains=abapSpecialTables
86
87" Pointer
88syn match   abapSpecial  "<\w\+>"
89
90" Abap constants:
91syn keyword abapSpecial  TRUE FALSE NULL SPACE
92
93" Includes
94syn region abapInclude   start="include" end="." contains=abapComment
95
96" Types
97syn keyword abapTypes    c n i p f d t x
98
99" Atritmitic operators
100syn keyword abapOperator abs sign ceil floor trunc frac acos asin atan cos sin tan
101syn keyword abapOperator cosh sinh tanh exp log log10 sqrt
102
103" String operators
104syn keyword abapOperator strlen xstrlen charlen numofchar dbmaxlen
105
106" Table operators
107syn keyword abapOperator lines
108
109" Table operators (SELECT operators)
110syn keyword abapOperator INTO FROM WHERE GROUP BY HAVING ORDER BY SINGLE
111syn keyword abapOperator APPENDING CORRESPONDING FIELDS OF TABLE
112syn keyword abapOperator LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING
113syn keyword abapOperator EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN
114
115" An error? Not strictly... but cannot think of reason this is intended.
116syn match   abapError    "\.\."
117
118" Comments
119syn region  abapComment  start="^\*" end="$" contains=abapTodo
120syn match   abapComment  "\".*" contains=abapTodo
121syn keyword abapTodo     contained TODO NOTE
122
123" Define the default highlighting.
124" For version 5.7 and earlier: only when not done already
125" For version 5.8 and later: only when an item doesn't have highlighting yet
126if version >= 508 || !exists("did_abap_syntax_inits")
127  if version < 508
128    let did_abap_syntax_inits = 1
129    command -nargs=+ HiLink hi link <args>
130  else
131    command -nargs=+ HiLink hi def link <args>
132  endif
133
134  HiLink abapError          Error
135  HiLink abapComment        Comment
136  HiLink abapInclude        Include
137  HiLink abapSpecial        Special
138  HiLink abapSpecialTables  PreProc
139  HiLink abapSymbolOperator abapOperator
140  HiLink abapOperator       Operator
141  HiLink abapStatement      Statement
142  HiLink abapString         String
143  HiLink abapFloat          Float
144  HiLink abapNumber         Number
145  HiLink abapHex            Number
146
147  delcommand HiLink
148endif
149
150let b:current_syntax = "abap"
151
152" vim: ts=8 sw=2
153
154