blob: f313c14e7af7de45079d225e44f963ea623fcc41 [file] [log] [blame]
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00001" Vim syntax file
Bram Moolenaarb6b046b2011-12-30 13:11:27 +01002" Language: Lua 4.0, Lua 5.0, Lua 5.1 and Lua 5.2
3" Maintainer: Marcus Aurelius Farias <masserahguard-lua 'at' yahoo com>
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00004" First Author: Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br>
Bram Moolenaar9b451252012-08-15 17:43:31 +02005" Last Change: 2012 Aug 12
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00006" Options: lua_version = 4 or 5
Bram Moolenaarb6b046b2011-12-30 13:11:27 +01007" lua_subversion = 0 (4.0, 5.0) or 1 (5.1) or 2 (5.2)
8" default 5.2
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00009
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020010" quit when a syntax file was already loaded
11if exists("b:current_syntax")
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000012 finish
13endif
14
Bram Moolenaar5dc62522012-02-13 00:05:22 +010015let s:cpo_save = &cpo
16set cpo&vim
17
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000018if !exists("lua_version")
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010019 " Default is lua 5.2
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000020 let lua_version = 5
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010021 let lua_subversion = 2
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000022elseif !exists("lua_subversion")
23 " lua_version exists, but lua_subversion doesn't. So, set it to 0
24 let lua_subversion = 0
25endif
26
27syn case match
28
29" syncing method
30syn sync minlines=100
31
32" Comments
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010033syn keyword luaTodo contained TODO FIXME XXX
34syn match luaComment "--.*$" contains=luaTodo,@Spell
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000035if lua_version == 5 && lua_subversion == 0
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010036 syn region luaComment matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell
37 syn region luaInnerComment contained transparent start="\[\[" end="\]\]"
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000038elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
39 " Comments in Lua 5.1: --[[ ... ]], [=[ ... ]=], [===[ ... ]===], etc.
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010040 syn region luaComment matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000041endif
42
43" First line may start with #!
44syn match luaComment "\%^#!.*"
45
46" catch errors caused by wrong parenthesis and wrong curly brackets or
47" keywords placed outside their respective blocks
Bram Moolenaar9b451252012-08-15 17:43:31 +020048syn region luaParen transparent start='(' end=')' contains=ALLBUT,luaParenError,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaBlock,luaLoopBlock,luaIn,luaStatement
49syn region luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaBraceError,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaBlock,luaLoopBlock,luaIn,luaStatement
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000050
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010051syn match luaParenError ")"
Bram Moolenaar9b451252012-08-15 17:43:31 +020052syn match luaBraceError "}"
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000053syn match luaError "\<\%(end\|else\|elseif\|then\|until\|in\)\>"
54
Bram Moolenaar9b451252012-08-15 17:43:31 +020055" function ... end
56syn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000057
58" if ... then
Bram Moolenaar9b451252012-08-15 17:43:31 +020059syn region luaIfThen transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4 contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaIn nextgroup=luaThenEnd skipwhite skipempty
60
61" then ... end
62syn region luaThenEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaThenEnd,luaIn
63
64" elseif ... then
65syn region luaElseifThen contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
66
67" else
68syn keyword luaElse contained else
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000069
70" do ... end
Bram Moolenaar9b451252012-08-15 17:43:31 +020071syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
72
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000073" repeat ... until
Bram Moolenaar9b451252012-08-15 17:43:31 +020074syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000075
76" while ... do
Bram Moolenaar9b451252012-08-15 17:43:31 +020077syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaIn nextgroup=luaBlock skipwhite skipempty
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000078
79" for ... do and for ... in ... do
Bram Moolenaar9b451252012-08-15 17:43:31 +020080syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd nextgroup=luaBlock skipwhite skipempty
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000081
Bram Moolenaar9b451252012-08-15 17:43:31 +020082syn keyword luaIn contained in
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000083
84" other keywords
85syn keyword luaStatement return local break
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010086if lua_version > 5 || (lua_version == 5 && lua_subversion >= 2)
87 syn keyword luaStatement goto
88 syn match luaLabel "::\I\i*::"
89endif
90syn keyword luaOperator and or not
91syn keyword luaConstant nil
Bram Moolenaarfc1421e2006-04-20 22:17:20 +000092if lua_version > 4
93 syn keyword luaConstant true false
94endif
95
96" Strings
97if lua_version < 5
Bram Moolenaarb6b046b2011-12-30 13:11:27 +010098 syn match luaSpecial contained "\\[\\abfnrtv\'\"]\|\\[[:digit:]]\{,3}"
99elseif lua_version == 5
100 if lua_subversion == 0
101 syn match luaSpecial contained #\\[\\abfnrtv'"[\]]\|\\[[:digit:]]\{,3}#
102 syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell
103 else
104 if lua_subversion == 1
105 syn match luaSpecial contained #\\[\\abfnrtv'"]\|\\[[:digit:]]\{,3}#
106 else " Lua 5.2
107 syn match luaSpecial contained #\\[\\abfnrtvz'"]\|\\x[[:xdigit:]]\{2}\|\\[[:digit:]]\{,3}#
108 endif
109 syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell
110 endif
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000111endif
Bram Moolenaar9964e462007-05-05 17:54:07 +0000112syn region luaString start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial,@Spell
113syn region luaString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial,@Spell
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000114
115" integer number
Bram Moolenaar9964e462007-05-05 17:54:07 +0000116syn match luaNumber "\<\d\+\>"
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000117" floating point number, with dot, optional exponent
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100118syn match luaNumber "\<\d\+\.\d*\%([eE][-+]\=\d\+\)\=\>"
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000119" floating point number, starting with a dot, optional exponent
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100120syn match luaNumber "\.\d\+\%([eE][-+]\=\d\+\)\=\>"
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000121" floating point number, without dot, with exponent
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100122syn match luaNumber "\<\d\+[eE][-+]\=\d\+\>"
Bram Moolenaar9964e462007-05-05 17:54:07 +0000123
124" hex numbers
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100125if lua_version >= 5
126 if lua_subversion == 1
127 syn match luaNumber "\<0[xX]\x\+\>"
128 elseif lua_subversion >= 2
129 syn match luaNumber "\<0[xX][[:xdigit:].]\+\%([pP][-+]\=\d\+\)\=\>"
130 endif
Bram Moolenaar9964e462007-05-05 17:54:07 +0000131endif
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000132
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000133syn keyword luaFunc assert collectgarbage dofile error next
134syn keyword luaFunc print rawget rawset tonumber tostring type _VERSION
135
136if lua_version == 4
137 syn keyword luaFunc _ALERT _ERRORMESSAGE gcinfo
138 syn keyword luaFunc call copytagmethods dostring
139 syn keyword luaFunc foreach foreachi getglobal getn
140 syn keyword luaFunc gettagmethod globals newtag
141 syn keyword luaFunc setglobal settag settagmethod sort
142 syn keyword luaFunc tag tinsert tremove
143 syn keyword luaFunc _INPUT _OUTPUT _STDIN _STDOUT _STDERR
144 syn keyword luaFunc openfile closefile flush seek
145 syn keyword luaFunc setlocale execute remove rename tmpname
146 syn keyword luaFunc getenv date clock exit
147 syn keyword luaFunc readfrom writeto appendto read write
148 syn keyword luaFunc PI abs sin cos tan asin
149 syn keyword luaFunc acos atan atan2 ceil floor
150 syn keyword luaFunc mod frexp ldexp sqrt min max log
151 syn keyword luaFunc log10 exp deg rad random
152 syn keyword luaFunc randomseed strlen strsub strlower strupper
153 syn keyword luaFunc strchar strrep ascii strbyte
154 syn keyword luaFunc format strfind gsub
155 syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook
156elseif lua_version == 5
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100157 syn keyword luaFunc getmetatable setmetatable
158 syn keyword luaFunc ipairs pairs
159 syn keyword luaFunc pcall xpcall
160 syn keyword luaFunc _G loadfile rawequal require
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000161 if lua_subversion == 0
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100162 syn keyword luaFunc getfenv setfenv
163 syn keyword luaFunc loadstring unpack
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000164 syn keyword luaFunc gcinfo loadlib LUA_PATH _LOADED _REQUIREDNAME
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100165 else
166 syn keyword luaFunc load select
167 syn match luaFunc /\<package\.cpath\>/
168 syn match luaFunc /\<package\.loaded\>/
169 syn match luaFunc /\<package\.loadlib\>/
170 syn match luaFunc /\<package\.path\>/
171 if lua_subversion == 1
172 syn keyword luaFunc getfenv setfenv
173 syn keyword luaFunc loadstring module unpack
174 syn match luaFunc /\<package\.loaders\>/
175 syn match luaFunc /\<package\.preload\>/
176 syn match luaFunc /\<package\.seeall\>/
177 elseif lua_subversion == 2
178 syn keyword luaFunc _ENV rawlen
179 syn match luaFunc /\<package\.config\>/
180 syn match luaFunc /\<package\.preload\>/
181 syn match luaFunc /\<package\.searchers\>/
182 syn match luaFunc /\<package\.searchpath\>/
183 syn match luaFunc /\<bit32\.arshift\>/
184 syn match luaFunc /\<bit32\.band\>/
185 syn match luaFunc /\<bit32\.bnot\>/
186 syn match luaFunc /\<bit32\.bor\>/
187 syn match luaFunc /\<bit32\.btest\>/
188 syn match luaFunc /\<bit32\.bxor\>/
189 syn match luaFunc /\<bit32\.extract\>/
190 syn match luaFunc /\<bit32\.lrotate\>/
191 syn match luaFunc /\<bit32\.lshift\>/
192 syn match luaFunc /\<bit32\.replace\>/
193 syn match luaFunc /\<bit32\.rrotate\>/
194 syn match luaFunc /\<bit32\.rshift\>/
195 endif
196 syn match luaFunc /\<coroutine\.running\>/
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000197 endif
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100198 syn match luaFunc /\<coroutine\.create\>/
199 syn match luaFunc /\<coroutine\.resume\>/
200 syn match luaFunc /\<coroutine\.status\>/
201 syn match luaFunc /\<coroutine\.wrap\>/
202 syn match luaFunc /\<coroutine\.yield\>/
203 syn match luaFunc /\<string\.byte\>/
204 syn match luaFunc /\<string\.char\>/
205 syn match luaFunc /\<string\.dump\>/
206 syn match luaFunc /\<string\.find\>/
207 syn match luaFunc /\<string\.format\>/
208 syn match luaFunc /\<string\.gsub\>/
209 syn match luaFunc /\<string\.len\>/
210 syn match luaFunc /\<string\.lower\>/
211 syn match luaFunc /\<string\.rep\>/
212 syn match luaFunc /\<string\.sub\>/
213 syn match luaFunc /\<string\.upper\>/
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000214 if lua_subversion == 0
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100215 syn match luaFunc /\<string\.gfind\>/
216 else
217 syn match luaFunc /\<string\.gmatch\>/
218 syn match luaFunc /\<string\.match\>/
219 syn match luaFunc /\<string\.reverse\>/
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000220 endif
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000221 if lua_subversion == 0
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100222 syn match luaFunc /\<table\.getn\>/
223 syn match luaFunc /\<table\.setn\>/
224 syn match luaFunc /\<table\.foreach\>/
225 syn match luaFunc /\<table\.foreachi\>/
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000226 elseif lua_subversion == 1
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100227 syn match luaFunc /\<table\.maxn\>/
228 elseif lua_subversion == 2
229 syn match luaFunc /\<table\.pack\>/
230 syn match luaFunc /\<table\.unpack\>/
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000231 endif
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100232 syn match luaFunc /\<table\.concat\>/
233 syn match luaFunc /\<table\.sort\>/
234 syn match luaFunc /\<table\.insert\>/
235 syn match luaFunc /\<table\.remove\>/
236 syn match luaFunc /\<math\.abs\>/
237 syn match luaFunc /\<math\.acos\>/
238 syn match luaFunc /\<math\.asin\>/
239 syn match luaFunc /\<math\.atan\>/
240 syn match luaFunc /\<math\.atan2\>/
241 syn match luaFunc /\<math\.ceil\>/
242 syn match luaFunc /\<math\.sin\>/
243 syn match luaFunc /\<math\.cos\>/
244 syn match luaFunc /\<math\.tan\>/
245 syn match luaFunc /\<math\.deg\>/
246 syn match luaFunc /\<math\.exp\>/
247 syn match luaFunc /\<math\.floor\>/
248 syn match luaFunc /\<math\.log\>/
249 syn match luaFunc /\<math\.max\>/
250 syn match luaFunc /\<math\.min\>/
251 if lua_subversion == 0
252 syn match luaFunc /\<math\.mod\>/
253 syn match luaFunc /\<math\.log10\>/
254 else
255 if lua_subversion == 1
256 syn match luaFunc /\<math\.log10\>/
257 endif
258 syn match luaFunc /\<math\.huge\>/
259 syn match luaFunc /\<math\.fmod\>/
260 syn match luaFunc /\<math\.modf\>/
261 syn match luaFunc /\<math\.cosh\>/
262 syn match luaFunc /\<math\.sinh\>/
263 syn match luaFunc /\<math\.tanh\>/
264 endif
265 syn match luaFunc /\<math\.pow\>/
266 syn match luaFunc /\<math\.rad\>/
267 syn match luaFunc /\<math\.sqrt\>/
268 syn match luaFunc /\<math\.frexp\>/
269 syn match luaFunc /\<math\.ldexp\>/
270 syn match luaFunc /\<math\.random\>/
271 syn match luaFunc /\<math\.randomseed\>/
272 syn match luaFunc /\<math\.pi\>/
273 syn match luaFunc /\<io\.close\>/
274 syn match luaFunc /\<io\.flush\>/
275 syn match luaFunc /\<io\.input\>/
276 syn match luaFunc /\<io\.lines\>/
277 syn match luaFunc /\<io\.open\>/
278 syn match luaFunc /\<io\.output\>/
279 syn match luaFunc /\<io\.popen\>/
280 syn match luaFunc /\<io\.read\>/
281 syn match luaFunc /\<io\.stderr\>/
282 syn match luaFunc /\<io\.stdin\>/
283 syn match luaFunc /\<io\.stdout\>/
284 syn match luaFunc /\<io\.tmpfile\>/
285 syn match luaFunc /\<io\.type\>/
286 syn match luaFunc /\<io\.write\>/
287 syn match luaFunc /\<os\.clock\>/
288 syn match luaFunc /\<os\.date\>/
289 syn match luaFunc /\<os\.difftime\>/
290 syn match luaFunc /\<os\.execute\>/
291 syn match luaFunc /\<os\.exit\>/
292 syn match luaFunc /\<os\.getenv\>/
293 syn match luaFunc /\<os\.remove\>/
294 syn match luaFunc /\<os\.rename\>/
295 syn match luaFunc /\<os\.setlocale\>/
296 syn match luaFunc /\<os\.time\>/
297 syn match luaFunc /\<os\.tmpname\>/
298 syn match luaFunc /\<debug\.debug\>/
299 syn match luaFunc /\<debug\.gethook\>/
300 syn match luaFunc /\<debug\.getinfo\>/
301 syn match luaFunc /\<debug\.getlocal\>/
302 syn match luaFunc /\<debug\.getupvalue\>/
303 syn match luaFunc /\<debug\.setlocal\>/
304 syn match luaFunc /\<debug\.setupvalue\>/
305 syn match luaFunc /\<debug\.sethook\>/
306 syn match luaFunc /\<debug\.traceback\>/
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000307 if lua_subversion == 1
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100308 syn match luaFunc /\<debug\.getfenv\>/
309 syn match luaFunc /\<debug\.setfenv\>/
310 syn match luaFunc /\<debug\.getmetatable\>/
311 syn match luaFunc /\<debug\.setmetatable\>/
312 syn match luaFunc /\<debug\.getregistry\>/
313 elseif lua_subversion == 2
314 syn match luaFunc /\<debug\.getmetatable\>/
315 syn match luaFunc /\<debug\.setmetatable\>/
316 syn match luaFunc /\<debug\.getregistry\>/
317 syn match luaFunc /\<debug\.getuservalue\>/
318 syn match luaFunc /\<debug\.setuservalue\>/
319 syn match luaFunc /\<debug\.upvalueid\>/
320 syn match luaFunc /\<debug\.upvaluejoin\>/
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000321 endif
322endif
323
324" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200325" Only when an item doesn't have highlighting yet
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000326
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200327hi def link luaStatement Statement
328hi def link luaRepeat Repeat
329hi def link luaFor Repeat
330hi def link luaString String
331hi def link luaString2 String
332hi def link luaNumber Number
333hi def link luaOperator Operator
334hi def link luaIn Operator
335hi def link luaConstant Constant
336hi def link luaCond Conditional
337hi def link luaElse Conditional
338hi def link luaFunction Function
339hi def link luaComment Comment
340hi def link luaTodo Todo
341hi def link luaTable Structure
342hi def link luaError Error
343hi def link luaParenError Error
344hi def link luaBraceError Error
345hi def link luaSpecial SpecialChar
346hi def link luaFunc Identifier
347hi def link luaLabel Label
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000348
Bram Moolenaarfc1421e2006-04-20 22:17:20 +0000349
350let b:current_syntax = "lua"
351
Bram Moolenaar5dc62522012-02-13 00:05:22 +0100352let &cpo = s:cpo_save
353unlet s:cpo_save
Bram Moolenaarb6b046b2011-12-30 13:11:27 +0100354" vim: et ts=8 sw=2