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