xref: /vim-8.2.3635/runtime/syntax/lua.vim (revision d4755bb0)
1" Vim syntax file
2" Language:	Lua 4.0 and Lua 5.0
3" Maintainer:	Marcus Aurelius Farias <marcus.cf 'at' bol.com.br>
4" First Author:	Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br>
5" Last Change:	2004 Aug 29
6" Options:	lua_version = 4 or 5 [default]
7"
8" For version 5.x: Clear all syntax items
9" For version 6.x: Quit when a syntax file was already loaded
10if version < 600
11  syntax clear
12elseif exists("b:current_syntax")
13  finish
14endif
15
16if !exists("lua_version")
17  let lua_version = 5
18endif
19
20syn case match
21
22" Comments
23syn keyword luaTodo		contained TODO FIXME XXX
24syn match   luaComment		"--.*$" contains=luaTodo
25if lua_version > 4
26  syn region  luaComment	matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment
27  syn region  luaInnerComment	contained transparent start="\[\[" end="\]\]"
28endif
29" First line may start with #!
30syn match   luaComment		"\%^#!.*"
31
32" catch errors caused by wrong parenthesis and wrong curly brackets or
33" keywords placed outside their respective blocks
34
35syn region  luaParen		transparent start='(' end=')' contains=ALLBUT,luaError,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
36syn match   luaError		")"
37syn match   luaError		"}"
38syn match   luaError		"\<\%(end\|else\|elseif\|then\|until\|in\)\>"
39
40
41" Function declaration
42syn region  luaFunctionBlock    transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
43
44" if then else elseif end
45syn keyword luaCond		contained else
46
47" then ... end
48syn region  luaCondEnd		contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaRepeat
49
50" elseif ... then
51syn region  luaCondElseif	contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
52
53" if ... then
54syn region  luaCondStart	transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaCondEnd skipwhite skipempty
55
56" do ... end
57syn region  luaBlock		transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
58
59" repeat ... until
60syn region  luaRepeatBlock	transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
61
62" while ... do
63syn region  luaRepeatBlock	transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaBlock skipwhite skipempty
64
65" for ... do and for ... in ... do
66syn region luaRepeatBlock	transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd nextgroup=luaBlock skipwhite skipempty
67
68" Following 'else' example. This is another item to those
69" contains=ALLBUT,... because only the 'for' luaRepeatBlock contains it.
70syn keyword luaRepeat		contained in
71
72" other keywords
73syn keyword luaStatement	return local break
74syn keyword luaOperator		and or not
75syn keyword luaConstant		nil
76if lua_version > 4
77  syn keyword luaConstant	true false
78endif
79
80" Pre processor doesn't exist since Lua 4.0
81" syn match   luaPreProc	  "^\s*$\%(debug\|nodebug\|if\|ifnot\|end\|else\|endinput\)\>"
82
83" Strings
84syn match   luaSpecial		contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}"
85syn region  luaString		start=+'+  end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial
86syn region  luaString		start=+"+  end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial
87" Nested strings
88syn region  luaString2		matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2
89
90" integer number
91syn match luaNumber		"\<[0-9]\+\>"
92" floating point number, with dot, optional exponent
93syn match luaFloat		"\<[0-9]\+\.[0-9]*\%(e[-+]\=[0-9]\+\)\=\>"
94" floating point number, starting with a dot, optional exponent
95syn match luaFloat		"\.[0-9]\+\%(e[-+]\=[0-9]\+\)\=\>"
96" floating point number, without dot, with exponent
97syn match luaFloat		"\<[0-9]\+e[-+]\=[0-9]\+\>"
98
99" tables
100syn region  luaTableBlock       transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
101
102syn keyword luaFunc	assert collectgarbage dofile error gcinfo next
103syn keyword luaFunc	print rawget rawset tonumber tostring type _VERSION
104
105if lua_version == 4
106  syn keyword luaFunc	_ALERT _ERRORMESSAGE
107  syn keyword luaFunc	call copytagmethods dostring
108  syn keyword luaFunc	foreach foreachi getglobal getn
109  syn keyword luaFunc	gettagmethod globals newtag
110  syn keyword luaFunc	setglobal settag settagmethod sort
111  syn keyword luaFunc	tag tinsert tremove
112  syn keyword luaFunc	_INPUT _OUTPUT _STDIN _STDOUT _STDERR
113  syn keyword luaFunc	openfile closefile flush seek
114  syn keyword luaFunc	setlocale execute remove rename tmpname
115  syn keyword luaFunc	getenv date clock exit
116  syn keyword luaFunc	readfrom writeto appendto read write
117  syn keyword luaFunc	PI abs sin cos tan asin
118  syn keyword luaFunc	acos atan atan2 ceil floor
119  syn keyword luaFunc	mod frexp ldexp sqrt min max log
120  syn keyword luaFunc	log10 exp deg rad random
121  syn keyword luaFunc	randomseed strlen strsub strlower strupper
122  syn keyword luaFunc	strchar strrep ascii strbyte
123  syn keyword luaFunc	format strfind gsub
124  syn keyword luaFunc	getinfo getlocal setlocal setcallhook setlinehook
125else
126  syn keyword luaFunc	_G getfenv getmetatable ipairs loadfile
127  syn keyword luaFunc	loadlib loadstring pairs pcall rawequal
128  syn keyword luaFunc	require setfenv setmetatable unpack xpcall
129  syn keyword luaFunc	LUA_PATH _LOADED _REQUIREDNAME
130  " Not sure if all these functions need to be highlighted...
131  syn match   luaFunc	/coroutine\.create/
132  syn match   luaFunc	/coroutine\.resume/
133  syn match   luaFunc	/coroutine\.status/
134  syn match   luaFunc	/coroutine\.wrap/
135  syn match   luaFunc	/coroutine\.yield/
136  syn match   luaFunc	/string\.byte/
137  syn match   luaFunc	/string\.char/
138  syn match   luaFunc	/string\.dump/
139  syn match   luaFunc	/string\.find/
140  syn match   luaFunc	/string\.len/
141  syn match   luaFunc	/string\.lower/
142  syn match   luaFunc	/string\.rep/
143  syn match   luaFunc	/string\.sub/
144  syn match   luaFunc	/string\.upper/
145  syn match   luaFunc	/string\.format/
146  syn match   luaFunc	/string\.gfind/
147  syn match   luaFunc	/string\.gsub/
148  syn match   luaFunc	/table\.concat/
149  syn match   luaFunc	/table\.foreach/
150  syn match   luaFunc	/table\.foreachi/
151  syn match   luaFunc	/table\.getn/
152  syn match   luaFunc	/table\.sort/
153  syn match   luaFunc	/table\.insert/
154  syn match   luaFunc	/table\.remove/
155  syn match   luaFunc	/table\.setn/
156  syn match   luaFunc	/math\.abs/
157  syn match   luaFunc	/math\.acos/
158  syn match   luaFunc	/math\.asin/
159  syn match   luaFunc	/math\.atan/
160  syn match   luaFunc	/math\.atan2/
161  syn match   luaFunc	/math\.ceil/
162  syn match   luaFunc	/math\.cos/
163  syn match   luaFunc	/math\.deg/
164  syn match   luaFunc	/math\.exp/
165  syn match   luaFunc	/math\.floor/
166  syn match   luaFunc	/math\.log/
167  syn match   luaFunc	/math\.log10/
168  syn match   luaFunc	/math\.max/
169  syn match   luaFunc	/math\.min/
170  syn match   luaFunc	/math\.mod/
171  syn match   luaFunc	/math\.pow/
172  syn match   luaFunc	/math\.rad/
173  syn match   luaFunc	/math\.sin/
174  syn match   luaFunc	/math\.sqrt/
175  syn match   luaFunc	/math\.tan/
176  syn match   luaFunc	/math\.frexp/
177  syn match   luaFunc	/math\.ldexp/
178  syn match   luaFunc	/math\.random/
179  syn match   luaFunc	/math\.randomseed/
180  syn match   luaFunc	/math\.pi/
181  syn match   luaFunc	/io\.stdin/
182  syn match   luaFunc	/io\.stdout/
183  syn match   luaFunc	/io\.stderr/
184  syn match   luaFunc	/io\.close/
185  syn match   luaFunc	/io\.flush/
186  syn match   luaFunc	/io\.input/
187  syn match   luaFunc	/io\.lines/
188  syn match   luaFunc	/io\.open/
189  syn match   luaFunc	/io\.output/
190  syn match   luaFunc	/io\.popen/
191  syn match   luaFunc	/io\.read/
192  syn match   luaFunc	/io\.tmpfile/
193  syn match   luaFunc	/io\.type/
194  syn match   luaFunc	/io\.write/
195  syn match   luaFunc	/os\.clock/
196  syn match   luaFunc	/os\.date/
197  syn match   luaFunc	/os\.difftime/
198  syn match   luaFunc	/os\.execute/
199  syn match   luaFunc	/os\.exit/
200  syn match   luaFunc	/os\.getenv/
201  syn match   luaFunc	/os\.remove/
202  syn match   luaFunc	/os\.rename/
203  syn match   luaFunc	/os\.setlocale/
204  syn match   luaFunc	/os\.time/
205  syn match   luaFunc	/os\.tmpname/
206  syn match   luaFunc	/debug\.debug/
207  syn match   luaFunc	/debug\.gethook/
208  syn match   luaFunc	/debug\.getinfo/
209  syn match   luaFunc	/debug\.getlocal/
210  syn match   luaFunc	/debug\.getupvalue/
211  syn match   luaFunc	/debug\.setlocal/
212  syn match   luaFunc	/debug\.setupvalue/
213  syn match   luaFunc	/debug\.sethook/
214  syn match   luaFunc	/debug\.traceback/
215endif
216
217"syncing method
218syn sync minlines=100
219
220" Define the default highlighting.
221" For version 5.7 and earlier: only when not done already
222" For version 5.8 and later: only when an item doesn't have highlighting yet
223if version >= 508 || !exists("did_lua_syntax_inits")
224  if version < 508
225    let did_lua_syntax_inits = 1
226    command -nargs=+ HiLink hi link <args>
227  else
228    command -nargs=+ HiLink hi def link <args>
229  endif
230
231  HiLink luaStatement		Statement
232  HiLink luaRepeat		Repeat
233  HiLink luaString		String
234  HiLink luaString2		String
235  HiLink luaNumber		Number
236  HiLink luaFloat		Float
237  HiLink luaOperator		Operator
238  HiLink luaConstant		Constant
239  HiLink luaCond		Conditional
240  HiLink luaFunction		Function
241  HiLink luaComment		Comment
242  HiLink luaTodo		Todo
243  HiLink luaTable		Structure
244  HiLink luaError		Error
245  HiLink luaSpecial		SpecialChar
246  " HiLink luaPreProc		PreProc
247  HiLink luaFunc		Identifier
248
249  delcommand HiLink
250endif
251
252let b:current_syntax = "lua"
253
254" vim: noet ts=8
255