xref: /vim-8.2.3635/runtime/syntax/lua.vim (revision fc1421eb)
1071d4279SBram Moolenaar" Vim syntax file
28424a624SBram Moolenaar" Language:	Lua 4.0, Lua 5.0 and Lua 5.1
3*fc1421ebSBram 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*fc1421ebSBram Moolenaar" Last Change:	2006 Apr 21
68424a624SBram Moolenaar" Options:	lua_version = 4 or 5
78424a624SBram Moolenaar"		lua_subversion = 0 (4.0, 5.0) or 1 (5.1)
88424a624SBram Moolenaar"		default 5.1
98424a624SBram 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")
198424a624SBram Moolenaar  " Default is lua 5.1
20071d4279SBram Moolenaar  let lua_version = 5
218424a624SBram Moolenaar  let lua_subversion = 1
228424a624SBram Moolenaarelseif !exists("lua_subversion")
238424a624SBram Moolenaar  " lua_version exists, but lua_subversion doesn't. So, set it to 0
248424a624SBram Moolenaar  let lua_subversion = 0
25071d4279SBram Moolenaarendif
26071d4279SBram Moolenaar
27071d4279SBram Moolenaarsyn case match
28071d4279SBram Moolenaar
298424a624SBram Moolenaar" syncing method
308424a624SBram Moolenaarsyn sync minlines=100
318424a624SBram Moolenaar
32071d4279SBram Moolenaar" Comments
33071d4279SBram Moolenaarsyn keyword luaTodo             contained TODO FIXME XXX
34071d4279SBram Moolenaarsyn match   luaComment          "--.*$" contains=luaTodo
358424a624SBram 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="\]\]"
388424a624SBram Moolenaarelseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
39*fc1421ebSBram Moolenaar  " Comments in Lua 5.1: --[[ ... ]], [=[ ... ]=], [===[ ... ]===], etc.
408424a624SBram Moolenaar  syn region  luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]"
41071d4279SBram Moolenaarendif
428424a624SBram 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
94*fc1421ebSBram Moolenaarif lua_version < 5
95*fc1421ebSBram Moolenaar  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
96*fc1421ebSBram Moolenaarelseif lua_version == 5 && lua_subversion == 0
97071d4279SBram Moolenaar  syn match  luaSpecial contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}"
98071d4279SBram Moolenaar  syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2
998424a624SBram Moolenaarelseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
100*fc1421ebSBram Moolenaar  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
1018424a624SBram Moolenaar  syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]"
1028424a624SBram Moolenaarendif
103*fc1421ebSBram Moolenaarsyn region luaString  start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial
104*fc1421ebSBram Moolenaarsyn region luaString  start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial
105071d4279SBram Moolenaar
106071d4279SBram Moolenaar" integer number
107071d4279SBram Moolenaarsyn match luaNumber "\<[0-9]\+\>"
108071d4279SBram Moolenaar" floating point number, with dot, optional exponent
109d4755bb0SBram Moolenaarsyn match luaFloat  "\<[0-9]\+\.[0-9]*\%(e[-+]\=[0-9]\+\)\=\>"
110071d4279SBram Moolenaar" floating point number, starting with a dot, optional exponent
111d4755bb0SBram Moolenaarsyn match luaFloat  "\.[0-9]\+\%(e[-+]\=[0-9]\+\)\=\>"
112071d4279SBram Moolenaar" floating point number, without dot, with exponent
113071d4279SBram Moolenaarsyn match luaFloat  "\<[0-9]\+e[-+]\=[0-9]\+\>"
114071d4279SBram Moolenaar
115071d4279SBram Moolenaar" tables
116071d4279SBram Moolenaarsyn region  luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
117071d4279SBram Moolenaar
118*fc1421ebSBram Moolenaarsyn keyword luaFunc assert collectgarbage dofile error next
119071d4279SBram Moolenaarsyn keyword luaFunc print rawget rawset tonumber tostring type _VERSION
120071d4279SBram Moolenaar
121071d4279SBram Moolenaarif lua_version == 4
122*fc1421ebSBram Moolenaar  syn keyword luaFunc _ALERT _ERRORMESSAGE gcinfo
123071d4279SBram Moolenaar  syn keyword luaFunc call copytagmethods dostring
124071d4279SBram Moolenaar  syn keyword luaFunc foreach foreachi getglobal getn
125071d4279SBram Moolenaar  syn keyword luaFunc gettagmethod globals newtag
126071d4279SBram Moolenaar  syn keyword luaFunc setglobal settag settagmethod sort
127071d4279SBram Moolenaar  syn keyword luaFunc tag tinsert tremove
128071d4279SBram Moolenaar  syn keyword luaFunc _INPUT _OUTPUT _STDIN _STDOUT _STDERR
129071d4279SBram Moolenaar  syn keyword luaFunc openfile closefile flush seek
130071d4279SBram Moolenaar  syn keyword luaFunc setlocale execute remove rename tmpname
131071d4279SBram Moolenaar  syn keyword luaFunc getenv date clock exit
132071d4279SBram Moolenaar  syn keyword luaFunc readfrom writeto appendto read write
133071d4279SBram Moolenaar  syn keyword luaFunc PI abs sin cos tan asin
134071d4279SBram Moolenaar  syn keyword luaFunc acos atan atan2 ceil floor
135071d4279SBram Moolenaar  syn keyword luaFunc mod frexp ldexp sqrt min max log
136071d4279SBram Moolenaar  syn keyword luaFunc log10 exp deg rad random
137071d4279SBram Moolenaar  syn keyword luaFunc randomseed strlen strsub strlower strupper
138071d4279SBram Moolenaar  syn keyword luaFunc strchar strrep ascii strbyte
139071d4279SBram Moolenaar  syn keyword luaFunc format strfind gsub
140071d4279SBram Moolenaar  syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook
1418424a624SBram Moolenaarelseif lua_version == 5
142071d4279SBram Moolenaar  " Not sure if all these functions need to be highlighted...
1438424a624SBram Moolenaar  syn keyword luaFunc _G getfenv getmetatable ipairs loadfile
1448424a624SBram Moolenaar  syn keyword luaFunc loadstring pairs pcall rawequal
1458424a624SBram Moolenaar  syn keyword luaFunc require setfenv setmetatable unpack xpcall
1468424a624SBram Moolenaar  if lua_subversion == 0
147*fc1421ebSBram Moolenaar    syn keyword luaFunc gcinfo loadlib LUA_PATH _LOADED _REQUIREDNAME
1488424a624SBram Moolenaar  elseif lua_subversion == 1
1498424a624SBram Moolenaar    syn keyword luaFunc load module select
1508424a624SBram Moolenaar    syn match luaFunc /package\.cpath/
1518424a624SBram Moolenaar    syn match luaFunc /package\.loaded/
1528424a624SBram Moolenaar    syn match luaFunc /package\.loadlib/
1538424a624SBram Moolenaar    syn match luaFunc /package\.path/
1548424a624SBram Moolenaar    syn match luaFunc /package\.preload/
1558424a624SBram Moolenaar    syn match luaFunc /package\.seeall/
1568424a624SBram Moolenaar    syn match luaFunc /coroutine\.running/
1578424a624SBram Moolenaar  endif
158071d4279SBram Moolenaar  syn match   luaFunc /coroutine\.create/
159071d4279SBram Moolenaar  syn match   luaFunc /coroutine\.resume/
160071d4279SBram Moolenaar  syn match   luaFunc /coroutine\.status/
161071d4279SBram Moolenaar  syn match   luaFunc /coroutine\.wrap/
162071d4279SBram Moolenaar  syn match   luaFunc /coroutine\.yield/
163071d4279SBram Moolenaar  syn match   luaFunc /string\.byte/
164071d4279SBram Moolenaar  syn match   luaFunc /string\.char/
165071d4279SBram Moolenaar  syn match   luaFunc /string\.dump/
166071d4279SBram Moolenaar  syn match   luaFunc /string\.find/
167071d4279SBram Moolenaar  syn match   luaFunc /string\.len/
168071d4279SBram Moolenaar  syn match   luaFunc /string\.lower/
169071d4279SBram Moolenaar  syn match   luaFunc /string\.rep/
170071d4279SBram Moolenaar  syn match   luaFunc /string\.sub/
171071d4279SBram Moolenaar  syn match   luaFunc /string\.upper/
172071d4279SBram Moolenaar  syn match   luaFunc /string\.format/
173071d4279SBram Moolenaar  syn match   luaFunc /string\.gsub/
1748424a624SBram Moolenaar  if lua_subversion == 0
1758424a624SBram Moolenaar    syn match luaFunc /string\.gfind/
176*fc1421ebSBram Moolenaar    syn match luaFunc /table\.getn/
177*fc1421ebSBram Moolenaar    syn match luaFunc /table\.setn/
178*fc1421ebSBram Moolenaar    syn match luaFunc /table\.foreach/
179*fc1421ebSBram Moolenaar    syn match luaFunc /table\.foreachi/
1808424a624SBram Moolenaar  elseif lua_subversion == 1
1818424a624SBram Moolenaar    syn match luaFunc /string\.gmatch/
1828424a624SBram Moolenaar    syn match luaFunc /string\.match/
1838424a624SBram Moolenaar    syn match luaFunc /string\.reverse/
1848424a624SBram Moolenaar    syn match luaFunc /table\.maxn/
1858424a624SBram Moolenaar  endif
186071d4279SBram Moolenaar  syn match   luaFunc /table\.concat/
187071d4279SBram Moolenaar  syn match   luaFunc /table\.sort/
188071d4279SBram Moolenaar  syn match   luaFunc /table\.insert/
189071d4279SBram Moolenaar  syn match   luaFunc /table\.remove/
190071d4279SBram Moolenaar  syn match   luaFunc /math\.abs/
191071d4279SBram Moolenaar  syn match   luaFunc /math\.acos/
192071d4279SBram Moolenaar  syn match   luaFunc /math\.asin/
193071d4279SBram Moolenaar  syn match   luaFunc /math\.atan/
194071d4279SBram Moolenaar  syn match   luaFunc /math\.atan2/
195071d4279SBram Moolenaar  syn match   luaFunc /math\.ceil/
1968424a624SBram Moolenaar  syn match   luaFunc /math\.sin/
197071d4279SBram Moolenaar  syn match   luaFunc /math\.cos/
1988424a624SBram Moolenaar  syn match   luaFunc /math\.tan/
199071d4279SBram Moolenaar  syn match   luaFunc /math\.deg/
200071d4279SBram Moolenaar  syn match   luaFunc /math\.exp/
201071d4279SBram Moolenaar  syn match   luaFunc /math\.floor/
202071d4279SBram Moolenaar  syn match   luaFunc /math\.log/
203071d4279SBram Moolenaar  syn match   luaFunc /math\.log10/
204071d4279SBram Moolenaar  syn match   luaFunc /math\.max/
205071d4279SBram Moolenaar  syn match   luaFunc /math\.min/
2068424a624SBram Moolenaar  if lua_subversion == 0
207071d4279SBram Moolenaar    syn match luaFunc /math\.mod/
2088424a624SBram Moolenaar  elseif lua_subversion == 1
2098424a624SBram Moolenaar    syn match luaFunc /math\.fmod/
2108424a624SBram Moolenaar    syn match luaFunc /math\.modf/
2118424a624SBram Moolenaar    syn match luaFunc /math\.cosh/
2128424a624SBram Moolenaar    syn match luaFunc /math\.sinh/
2138424a624SBram Moolenaar    syn match luaFunc /math\.tanh/
2148424a624SBram Moolenaar  endif
215071d4279SBram Moolenaar  syn match   luaFunc /math\.pow/
216071d4279SBram Moolenaar  syn match   luaFunc /math\.rad/
217071d4279SBram Moolenaar  syn match   luaFunc /math\.sqrt/
218071d4279SBram Moolenaar  syn match   luaFunc /math\.frexp/
219071d4279SBram Moolenaar  syn match   luaFunc /math\.ldexp/
220071d4279SBram Moolenaar  syn match   luaFunc /math\.random/
221071d4279SBram Moolenaar  syn match   luaFunc /math\.randomseed/
222071d4279SBram Moolenaar  syn match   luaFunc /math\.pi/
223071d4279SBram Moolenaar  syn match   luaFunc /io\.stdin/
224071d4279SBram Moolenaar  syn match   luaFunc /io\.stdout/
225071d4279SBram Moolenaar  syn match   luaFunc /io\.stderr/
226071d4279SBram Moolenaar  syn match   luaFunc /io\.close/
227071d4279SBram Moolenaar  syn match   luaFunc /io\.flush/
228071d4279SBram Moolenaar  syn match   luaFunc /io\.input/
229071d4279SBram Moolenaar  syn match   luaFunc /io\.lines/
230071d4279SBram Moolenaar  syn match   luaFunc /io\.open/
231071d4279SBram Moolenaar  syn match   luaFunc /io\.output/
232071d4279SBram Moolenaar  syn match   luaFunc /io\.popen/
233071d4279SBram Moolenaar  syn match   luaFunc /io\.read/
234071d4279SBram Moolenaar  syn match   luaFunc /io\.tmpfile/
235071d4279SBram Moolenaar  syn match   luaFunc /io\.type/
236071d4279SBram Moolenaar  syn match   luaFunc /io\.write/
237071d4279SBram Moolenaar  syn match   luaFunc /os\.clock/
238071d4279SBram Moolenaar  syn match   luaFunc /os\.date/
239071d4279SBram Moolenaar  syn match   luaFunc /os\.difftime/
240071d4279SBram Moolenaar  syn match   luaFunc /os\.execute/
241071d4279SBram Moolenaar  syn match   luaFunc /os\.exit/
242071d4279SBram Moolenaar  syn match   luaFunc /os\.getenv/
243071d4279SBram Moolenaar  syn match   luaFunc /os\.remove/
244071d4279SBram Moolenaar  syn match   luaFunc /os\.rename/
245071d4279SBram Moolenaar  syn match   luaFunc /os\.setlocale/
246071d4279SBram Moolenaar  syn match   luaFunc /os\.time/
247071d4279SBram Moolenaar  syn match   luaFunc /os\.tmpname/
248071d4279SBram Moolenaar  syn match   luaFunc /debug\.debug/
249071d4279SBram Moolenaar  syn match   luaFunc /debug\.gethook/
250071d4279SBram Moolenaar  syn match   luaFunc /debug\.getinfo/
251071d4279SBram Moolenaar  syn match   luaFunc /debug\.getlocal/
252071d4279SBram Moolenaar  syn match   luaFunc /debug\.getupvalue/
253071d4279SBram Moolenaar  syn match   luaFunc /debug\.setlocal/
254071d4279SBram Moolenaar  syn match   luaFunc /debug\.setupvalue/
255071d4279SBram Moolenaar  syn match   luaFunc /debug\.sethook/
256071d4279SBram Moolenaar  syn match   luaFunc /debug\.traceback/
2578424a624SBram Moolenaar  if lua_subversion == 1
2588424a624SBram Moolenaar    syn match luaFunc /debug\.getfenv/
2598424a624SBram Moolenaar    syn match luaFunc /debug\.getmetatable/
2608424a624SBram Moolenaar    syn match luaFunc /debug\.getregistry/
2618424a624SBram Moolenaar    syn match luaFunc /debug\.setfenv/
2628424a624SBram Moolenaar    syn match luaFunc /debug\.setmetatable/
263071d4279SBram Moolenaar  endif
2648424a624SBram Moolenaarendif
265071d4279SBram Moolenaar
266071d4279SBram Moolenaar" Define the default highlighting.
267071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
268071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
269071d4279SBram Moolenaarif version >= 508 || !exists("did_lua_syntax_inits")
270071d4279SBram Moolenaar  if version < 508
271071d4279SBram Moolenaar    let did_lua_syntax_inits = 1
272071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
273071d4279SBram Moolenaar  else
274071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
275071d4279SBram Moolenaar  endif
276071d4279SBram Moolenaar
277071d4279SBram Moolenaar  HiLink luaStatement		Statement
278071d4279SBram Moolenaar  HiLink luaRepeat		Repeat
279071d4279SBram Moolenaar  HiLink luaString		String
280071d4279SBram Moolenaar  HiLink luaString2		String
281071d4279SBram Moolenaar  HiLink luaNumber		Number
282071d4279SBram Moolenaar  HiLink luaFloat		Float
283071d4279SBram Moolenaar  HiLink luaOperator		Operator
284071d4279SBram Moolenaar  HiLink luaConstant		Constant
285071d4279SBram Moolenaar  HiLink luaCond		Conditional
286071d4279SBram Moolenaar  HiLink luaFunction		Function
287071d4279SBram Moolenaar  HiLink luaComment		Comment
288071d4279SBram Moolenaar  HiLink luaTodo		Todo
289071d4279SBram Moolenaar  HiLink luaTable		Structure
290071d4279SBram Moolenaar  HiLink luaError		Error
291071d4279SBram Moolenaar  HiLink luaSpecial		SpecialChar
292071d4279SBram Moolenaar  HiLink luaFunc		Identifier
293071d4279SBram Moolenaar
294071d4279SBram Moolenaar  delcommand HiLink
295071d4279SBram Moolenaarendif
296071d4279SBram Moolenaar
297071d4279SBram Moolenaarlet b:current_syntax = "lua"
298071d4279SBram Moolenaar
2998424a624SBram Moolenaar" vim: et ts=8
300