xref: /vim-8.2.3635/runtime/syntax/lua.vim (revision 8424a624)
1071d4279SBram Moolenaar" Vim syntax file
2*8424a624SBram Moolenaar" Language:	Lua 4.0, Lua 5.0 and Lua 5.1
3d4755bb0SBram Moolenaar" Maintainer:	Marcus Aurelius Farias <marcus.cf 'at' bol.com.br>
4d4755bb0SBram Moolenaar" First Author:	Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br>
5*8424a624SBram Moolenaar" Last Change:	2006 Apr. 19
6*8424a624SBram Moolenaar" Options:	lua_version = 4 or 5
7*8424a624SBram Moolenaar"		lua_subversion = 0 (4.0, 5.0) or 1 (5.1)
8*8424a624SBram Moolenaar"		default 5.1
9*8424a624SBram Moolenaar
10071d4279SBram Moolenaar" For version 5.x: Clear all syntax items
11071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded
12071d4279SBram Moolenaarif version < 600
13071d4279SBram Moolenaar  syntax clear
14071d4279SBram Moolenaarelseif exists("b:current_syntax")
15071d4279SBram Moolenaar  finish
16071d4279SBram Moolenaarendif
17071d4279SBram Moolenaar
18071d4279SBram Moolenaarif !exists("lua_version")
19*8424a624SBram Moolenaar  " Default is lua 5.1
20071d4279SBram Moolenaar  let lua_version = 5
21*8424a624SBram Moolenaar  let lua_subversion = 1
22*8424a624SBram Moolenaarelseif !exists("lua_subversion")
23*8424a624SBram Moolenaar  " lua_version exists, but lua_subversion doesn't. So, set it to 0
24*8424a624SBram Moolenaar  let lua_subversion = 0
25071d4279SBram Moolenaarendif
26071d4279SBram Moolenaar
27071d4279SBram Moolenaarsyn case match
28071d4279SBram Moolenaar
29*8424a624SBram Moolenaar" syncing method
30*8424a624SBram Moolenaarsyn sync minlines=100
31*8424a624SBram Moolenaar
32071d4279SBram Moolenaar" Comments
33071d4279SBram Moolenaarsyn keyword luaTodo             contained TODO FIXME XXX
34071d4279SBram Moolenaarsyn match   luaComment          "--.*$" contains=luaTodo
35*8424a624SBram Moolenaarif lua_version == 5 && lua_subversion == 0
36071d4279SBram Moolenaar  syn region  luaComment        matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment
37071d4279SBram Moolenaar  syn region  luaInnerComment   contained transparent start="\[\[" end="\]\]"
38*8424a624SBram Moolenaarelseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
39*8424a624SBram Moolenaar  " Comments in Lua 5.1: [[ ... ]], [=[ ... ]=], [===[ ... ]===], etc.
40*8424a624SBram Moolenaar  syn region  luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]"
41071d4279SBram Moolenaarendif
42*8424a624SBram Moolenaar
43071d4279SBram Moolenaar" First line may start with #!
44071d4279SBram Moolenaarsyn match luaComment "\%^#!.*"
45071d4279SBram Moolenaar
46071d4279SBram Moolenaar" catch errors caused by wrong parenthesis and wrong curly brackets or
47071d4279SBram Moolenaar" keywords placed outside their respective blocks
48071d4279SBram Moolenaar
49071d4279SBram Moolenaarsyn region luaParen transparent start='(' end=')' contains=ALLBUT,luaError,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
50071d4279SBram Moolenaarsyn match  luaError ")"
51071d4279SBram Moolenaarsyn match  luaError "}"
52d4755bb0SBram Moolenaarsyn match  luaError "\<\%(end\|else\|elseif\|then\|until\|in\)\>"
53071d4279SBram Moolenaar
54071d4279SBram Moolenaar" Function declaration
55071d4279SBram Moolenaarsyn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
56071d4279SBram Moolenaar
57071d4279SBram Moolenaar" if then else elseif end
58071d4279SBram Moolenaarsyn keyword luaCond contained else
59071d4279SBram Moolenaar
60071d4279SBram Moolenaar" then ... end
61071d4279SBram Moolenaarsyn region luaCondEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaRepeat
62071d4279SBram Moolenaar
63071d4279SBram Moolenaar" elseif ... then
64071d4279SBram Moolenaarsyn region luaCondElseif contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
65071d4279SBram Moolenaar
66071d4279SBram Moolenaar" if ... then
67071d4279SBram Moolenaarsyn region luaCondStart transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaCondEnd skipwhite skipempty
68071d4279SBram Moolenaar
69071d4279SBram Moolenaar" do ... end
70071d4279SBram Moolenaarsyn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
71071d4279SBram Moolenaar
72071d4279SBram Moolenaar" repeat ... until
73071d4279SBram Moolenaarsyn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
74071d4279SBram Moolenaar
75071d4279SBram Moolenaar" while ... do
76071d4279SBram Moolenaarsyn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaBlock skipwhite skipempty
77071d4279SBram Moolenaar
78071d4279SBram Moolenaar" for ... do and for ... in ... do
79071d4279SBram Moolenaarsyn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd nextgroup=luaBlock skipwhite skipempty
80071d4279SBram Moolenaar
81071d4279SBram Moolenaar" Following 'else' example. This is another item to those
82071d4279SBram Moolenaar" contains=ALLBUT,... because only the 'for' luaRepeatBlock contains it.
83071d4279SBram Moolenaarsyn keyword luaRepeat contained in
84071d4279SBram Moolenaar
85071d4279SBram Moolenaar" other keywords
86071d4279SBram Moolenaarsyn keyword luaStatement return local break
87071d4279SBram Moolenaarsyn keyword luaOperator  and or not
88071d4279SBram Moolenaarsyn keyword luaConstant  nil
89071d4279SBram Moolenaarif lua_version > 4
90071d4279SBram Moolenaar  syn keyword luaConstant true false
91071d4279SBram Moolenaarendif
92071d4279SBram Moolenaar
93071d4279SBram Moolenaar" Strings
94071d4279SBram Moolenaarsyn match  luaSpecial contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}"
95071d4279SBram Moolenaarsyn region luaString  start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial
96071d4279SBram Moolenaarsyn region luaString  start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial
97071d4279SBram Moolenaar" Nested strings
98*8424a624SBram Moolenaarif (lua_version == 5 && lua_subversion == 0) || lua_version < 5
99071d4279SBram Moolenaar  syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2
100*8424a624SBram Moolenaarelseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
101*8424a624SBram Moolenaar  syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]"
102*8424a624SBram Moolenaarendif
103071d4279SBram Moolenaar
104071d4279SBram Moolenaar" integer number
105071d4279SBram Moolenaarsyn match luaNumber "\<[0-9]\+\>"
106071d4279SBram Moolenaar" floating point number, with dot, optional exponent
107d4755bb0SBram Moolenaarsyn match luaFloat  "\<[0-9]\+\.[0-9]*\%(e[-+]\=[0-9]\+\)\=\>"
108071d4279SBram Moolenaar" floating point number, starting with a dot, optional exponent
109d4755bb0SBram Moolenaarsyn match luaFloat  "\.[0-9]\+\%(e[-+]\=[0-9]\+\)\=\>"
110071d4279SBram Moolenaar" floating point number, without dot, with exponent
111071d4279SBram Moolenaarsyn match luaFloat  "\<[0-9]\+e[-+]\=[0-9]\+\>"
112071d4279SBram Moolenaar
113071d4279SBram Moolenaar" tables
114071d4279SBram Moolenaarsyn region  luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
115071d4279SBram Moolenaar
116071d4279SBram Moolenaarsyn keyword luaFunc assert collectgarbage dofile error gcinfo next
117071d4279SBram Moolenaarsyn keyword luaFunc print rawget rawset tonumber tostring type _VERSION
118071d4279SBram Moolenaar
119071d4279SBram Moolenaarif lua_version == 4
120071d4279SBram Moolenaar  syn keyword luaFunc _ALERT _ERRORMESSAGE
121071d4279SBram Moolenaar  syn keyword luaFunc call copytagmethods dostring
122071d4279SBram Moolenaar  syn keyword luaFunc foreach foreachi getglobal getn
123071d4279SBram Moolenaar  syn keyword luaFunc gettagmethod globals newtag
124071d4279SBram Moolenaar  syn keyword luaFunc setglobal settag settagmethod sort
125071d4279SBram Moolenaar  syn keyword luaFunc tag tinsert tremove
126071d4279SBram Moolenaar  syn keyword luaFunc _INPUT _OUTPUT _STDIN _STDOUT _STDERR
127071d4279SBram Moolenaar  syn keyword luaFunc openfile closefile flush seek
128071d4279SBram Moolenaar  syn keyword luaFunc setlocale execute remove rename tmpname
129071d4279SBram Moolenaar  syn keyword luaFunc getenv date clock exit
130071d4279SBram Moolenaar  syn keyword luaFunc readfrom writeto appendto read write
131071d4279SBram Moolenaar  syn keyword luaFunc PI abs sin cos tan asin
132071d4279SBram Moolenaar  syn keyword luaFunc acos atan atan2 ceil floor
133071d4279SBram Moolenaar  syn keyword luaFunc mod frexp ldexp sqrt min max log
134071d4279SBram Moolenaar  syn keyword luaFunc log10 exp deg rad random
135071d4279SBram Moolenaar  syn keyword luaFunc randomseed strlen strsub strlower strupper
136071d4279SBram Moolenaar  syn keyword luaFunc strchar strrep ascii strbyte
137071d4279SBram Moolenaar  syn keyword luaFunc format strfind gsub
138071d4279SBram Moolenaar  syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook
139*8424a624SBram Moolenaarelseif lua_version == 5
140071d4279SBram Moolenaar  " Not sure if all these functions need to be highlighted...
141*8424a624SBram Moolenaar  syn keyword luaFunc _G getfenv getmetatable ipairs loadfile
142*8424a624SBram Moolenaar  syn keyword luaFunc loadstring pairs pcall rawequal
143*8424a624SBram Moolenaar  syn keyword luaFunc require setfenv setmetatable unpack xpcall
144*8424a624SBram Moolenaar  if lua_subversion == 0
145*8424a624SBram Moolenaar    syn keyword luaFunc loadlib LUA_PATH _LOADED _REQUIREDNAME
146*8424a624SBram Moolenaar  elseif lua_subversion == 1
147*8424a624SBram Moolenaar    syn keyword luaFunc load module select
148*8424a624SBram Moolenaar    syn match luaFunc /package\.cpath/
149*8424a624SBram Moolenaar    syn match luaFunc /package\.loaded/
150*8424a624SBram Moolenaar    syn match luaFunc /package\.loadlib/
151*8424a624SBram Moolenaar    syn match luaFunc /package\.path/
152*8424a624SBram Moolenaar    syn match luaFunc /package\.preload/
153*8424a624SBram Moolenaar    syn match luaFunc /package\.seeall/
154*8424a624SBram Moolenaar    syn match luaFunc /coroutine\.running/
155*8424a624SBram Moolenaar  endif
156071d4279SBram Moolenaar  syn match   luaFunc /coroutine\.create/
157071d4279SBram Moolenaar  syn match   luaFunc /coroutine\.resume/
158071d4279SBram Moolenaar  syn match   luaFunc /coroutine\.status/
159071d4279SBram Moolenaar  syn match   luaFunc /coroutine\.wrap/
160071d4279SBram Moolenaar  syn match   luaFunc /coroutine\.yield/
161071d4279SBram Moolenaar  syn match   luaFunc /string\.byte/
162071d4279SBram Moolenaar  syn match   luaFunc /string\.char/
163071d4279SBram Moolenaar  syn match   luaFunc /string\.dump/
164071d4279SBram Moolenaar  syn match   luaFunc /string\.find/
165071d4279SBram Moolenaar  syn match   luaFunc /string\.len/
166071d4279SBram Moolenaar  syn match   luaFunc /string\.lower/
167071d4279SBram Moolenaar  syn match   luaFunc /string\.rep/
168071d4279SBram Moolenaar  syn match   luaFunc /string\.sub/
169071d4279SBram Moolenaar  syn match   luaFunc /string\.upper/
170071d4279SBram Moolenaar  syn match   luaFunc /string\.format/
171071d4279SBram Moolenaar  syn match   luaFunc /string\.gsub/
172*8424a624SBram Moolenaar  if lua_subversion == 0
173*8424a624SBram Moolenaar    syn match luaFunc /string\.gfind/
174*8424a624SBram Moolenaar  elseif lua_subversion == 1
175*8424a624SBram Moolenaar    syn match luaFunc /string\.gmatch/
176*8424a624SBram Moolenaar    syn match luaFunc /string\.match/
177*8424a624SBram Moolenaar    syn match luaFunc /string\.reverse/
178*8424a624SBram Moolenaar    syn match luaFunc /table\.maxn/
179*8424a624SBram Moolenaar  endif
180071d4279SBram Moolenaar  syn match   luaFunc /table\.concat/
181071d4279SBram Moolenaar  syn match   luaFunc /table\.foreach/
182071d4279SBram Moolenaar  syn match   luaFunc /table\.foreachi/
183071d4279SBram Moolenaar  syn match   luaFunc /table\.getn/
184071d4279SBram Moolenaar  syn match   luaFunc /table\.sort/
185071d4279SBram Moolenaar  syn match   luaFunc /table\.insert/
186071d4279SBram Moolenaar  syn match   luaFunc /table\.remove/
187071d4279SBram Moolenaar  syn match   luaFunc /table\.setn/
188071d4279SBram Moolenaar  syn match   luaFunc /math\.abs/
189071d4279SBram Moolenaar  syn match   luaFunc /math\.acos/
190071d4279SBram Moolenaar  syn match   luaFunc /math\.asin/
191071d4279SBram Moolenaar  syn match   luaFunc /math\.atan/
192071d4279SBram Moolenaar  syn match   luaFunc /math\.atan2/
193071d4279SBram Moolenaar  syn match   luaFunc /math\.ceil/
194*8424a624SBram Moolenaar  syn match   luaFunc /math\.sin/
195071d4279SBram Moolenaar  syn match   luaFunc /math\.cos/
196*8424a624SBram Moolenaar  syn match   luaFunc /math\.tan/
197071d4279SBram Moolenaar  syn match   luaFunc /math\.deg/
198071d4279SBram Moolenaar  syn match   luaFunc /math\.exp/
199071d4279SBram Moolenaar  syn match   luaFunc /math\.floor/
200071d4279SBram Moolenaar  syn match   luaFunc /math\.log/
201071d4279SBram Moolenaar  syn match   luaFunc /math\.log10/
202071d4279SBram Moolenaar  syn match   luaFunc /math\.max/
203071d4279SBram Moolenaar  syn match   luaFunc /math\.min/
204*8424a624SBram Moolenaar  if lua_subversion == 0
205071d4279SBram Moolenaar    syn match luaFunc /math\.mod/
206*8424a624SBram Moolenaar  elseif lua_subversion == 1
207*8424a624SBram Moolenaar    syn match luaFunc /math\.fmod/
208*8424a624SBram Moolenaar    syn match luaFunc /math\.modf/
209*8424a624SBram Moolenaar    syn match luaFunc /math\.cosh/
210*8424a624SBram Moolenaar    syn match luaFunc /math\.sinh/
211*8424a624SBram Moolenaar    syn match luaFunc /math\.tanh/
212*8424a624SBram Moolenaar  endif
213071d4279SBram Moolenaar  syn match   luaFunc /math\.pow/
214071d4279SBram Moolenaar  syn match   luaFunc /math\.rad/
215071d4279SBram Moolenaar  syn match   luaFunc /math\.sqrt/
216071d4279SBram Moolenaar  syn match   luaFunc /math\.frexp/
217071d4279SBram Moolenaar  syn match   luaFunc /math\.ldexp/
218071d4279SBram Moolenaar  syn match   luaFunc /math\.random/
219071d4279SBram Moolenaar  syn match   luaFunc /math\.randomseed/
220071d4279SBram Moolenaar  syn match   luaFunc /math\.pi/
221071d4279SBram Moolenaar  syn match   luaFunc /io\.stdin/
222071d4279SBram Moolenaar  syn match   luaFunc /io\.stdout/
223071d4279SBram Moolenaar  syn match   luaFunc /io\.stderr/
224071d4279SBram Moolenaar  syn match   luaFunc /io\.close/
225071d4279SBram Moolenaar  syn match   luaFunc /io\.flush/
226071d4279SBram Moolenaar  syn match   luaFunc /io\.input/
227071d4279SBram Moolenaar  syn match   luaFunc /io\.lines/
228071d4279SBram Moolenaar  syn match   luaFunc /io\.open/
229071d4279SBram Moolenaar  syn match   luaFunc /io\.output/
230071d4279SBram Moolenaar  syn match   luaFunc /io\.popen/
231071d4279SBram Moolenaar  syn match   luaFunc /io\.read/
232071d4279SBram Moolenaar  syn match   luaFunc /io\.tmpfile/
233071d4279SBram Moolenaar  syn match   luaFunc /io\.type/
234071d4279SBram Moolenaar  syn match   luaFunc /io\.write/
235071d4279SBram Moolenaar  syn match   luaFunc /os\.clock/
236071d4279SBram Moolenaar  syn match   luaFunc /os\.date/
237071d4279SBram Moolenaar  syn match   luaFunc /os\.difftime/
238071d4279SBram Moolenaar  syn match   luaFunc /os\.execute/
239071d4279SBram Moolenaar  syn match   luaFunc /os\.exit/
240071d4279SBram Moolenaar  syn match   luaFunc /os\.getenv/
241071d4279SBram Moolenaar  syn match   luaFunc /os\.remove/
242071d4279SBram Moolenaar  syn match   luaFunc /os\.rename/
243071d4279SBram Moolenaar  syn match   luaFunc /os\.setlocale/
244071d4279SBram Moolenaar  syn match   luaFunc /os\.time/
245071d4279SBram Moolenaar  syn match   luaFunc /os\.tmpname/
246071d4279SBram Moolenaar  syn match   luaFunc /debug\.debug/
247071d4279SBram Moolenaar  syn match   luaFunc /debug\.gethook/
248071d4279SBram Moolenaar  syn match   luaFunc /debug\.getinfo/
249071d4279SBram Moolenaar  syn match   luaFunc /debug\.getlocal/
250071d4279SBram Moolenaar  syn match   luaFunc /debug\.getupvalue/
251071d4279SBram Moolenaar  syn match   luaFunc /debug\.setlocal/
252071d4279SBram Moolenaar  syn match   luaFunc /debug\.setupvalue/
253071d4279SBram Moolenaar  syn match   luaFunc /debug\.sethook/
254071d4279SBram Moolenaar  syn match   luaFunc /debug\.traceback/
255*8424a624SBram Moolenaar  if lua_subversion == 1
256*8424a624SBram Moolenaar    syn match luaFunc /debug\.getfenv/
257*8424a624SBram Moolenaar    syn match luaFunc /debug\.getmetatable/
258*8424a624SBram Moolenaar    syn match luaFunc /debug\.getregistry/
259*8424a624SBram Moolenaar    syn match luaFunc /debug\.setfenv/
260*8424a624SBram Moolenaar    syn match luaFunc /debug\.setmetatable/
261071d4279SBram Moolenaar  endif
262*8424a624SBram Moolenaarendif
263071d4279SBram Moolenaar
264071d4279SBram Moolenaar" Define the default highlighting.
265071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
266071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
267071d4279SBram Moolenaarif version >= 508 || !exists("did_lua_syntax_inits")
268071d4279SBram Moolenaar  if version < 508
269071d4279SBram Moolenaar    let did_lua_syntax_inits = 1
270071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
271071d4279SBram Moolenaar  else
272071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
273071d4279SBram Moolenaar  endif
274071d4279SBram Moolenaar
275071d4279SBram Moolenaar  HiLink luaStatement		Statement
276071d4279SBram Moolenaar  HiLink luaRepeat		Repeat
277071d4279SBram Moolenaar  HiLink luaString		String
278071d4279SBram Moolenaar  HiLink luaString2		String
279071d4279SBram Moolenaar  HiLink luaNumber		Number
280071d4279SBram Moolenaar  HiLink luaFloat		Float
281071d4279SBram Moolenaar  HiLink luaOperator		Operator
282071d4279SBram Moolenaar  HiLink luaConstant		Constant
283071d4279SBram Moolenaar  HiLink luaCond		Conditional
284071d4279SBram Moolenaar  HiLink luaFunction		Function
285071d4279SBram Moolenaar  HiLink luaComment		Comment
286071d4279SBram Moolenaar  HiLink luaTodo		Todo
287071d4279SBram Moolenaar  HiLink luaTable		Structure
288071d4279SBram Moolenaar  HiLink luaError		Error
289071d4279SBram Moolenaar  HiLink luaSpecial		SpecialChar
290071d4279SBram Moolenaar  HiLink luaFunc		Identifier
291071d4279SBram Moolenaar
292071d4279SBram Moolenaar  delcommand HiLink
293071d4279SBram Moolenaarendif
294071d4279SBram Moolenaar
295071d4279SBram Moolenaarlet b:current_syntax = "lua"
296071d4279SBram Moolenaar
297*8424a624SBram Moolenaar" vim: et ts=8
298