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