1071d4279SBram Moolenaar" Vim syntax file 28424a624SBram Moolenaar" Language: Lua 4.0, Lua 5.0 and Lua 5.1 3fc1421ebSBram 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*9964e468SBram Moolenaar" Last Change: 2006 Aug 10 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 34*9964e468SBram Moolenaarsyn match luaComment "--.*$" contains=luaTodo,@Spell 358424a624SBram Moolenaarif lua_version == 5 && lua_subversion == 0 36*9964e468SBram Moolenaar syn region luaComment matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell 37071d4279SBram Moolenaar syn region luaInnerComment contained transparent start="\[\[" end="\]\]" 388424a624SBram Moolenaarelseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1) 39fc1421ebSBram Moolenaar " Comments in Lua 5.1: --[[ ... ]], [=[ ... ]=], [===[ ... ]===], etc. 40*9964e468SBram Moolenaar syn region luaComment matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell 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 94fc1421ebSBram Moolenaarif lua_version < 5 95fc1421ebSBram Moolenaar syn match luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}" 96fc1421ebSBram Moolenaarelseif lua_version == 5 && lua_subversion == 0 97071d4279SBram Moolenaar syn match luaSpecial contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}" 98*9964e468SBram Moolenaar syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell 998424a624SBram Moolenaarelseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1) 100fc1421ebSBram Moolenaar syn match luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}" 101*9964e468SBram Moolenaar syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell 1028424a624SBram Moolenaarendif 103*9964e468SBram Moolenaarsyn region luaString start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial,@Spell 104*9964e468SBram Moolenaarsyn region luaString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial,@Spell 105071d4279SBram Moolenaar 106071d4279SBram Moolenaar" integer number 107*9964e468SBram Moolenaarsyn match luaNumber "\<\d\+\>" 108071d4279SBram Moolenaar" floating point number, with dot, optional exponent 109*9964e468SBram Moolenaarsyn match luaFloat "\<\d\+\.\d*\%(e[-+]\=\d\+\)\=\>" 110071d4279SBram Moolenaar" floating point number, starting with a dot, optional exponent 111*9964e468SBram Moolenaarsyn match luaFloat "\.\d\+\%(e[-+]\=\d\+\)\=\>" 112071d4279SBram Moolenaar" floating point number, without dot, with exponent 113*9964e468SBram Moolenaarsyn match luaFloat "\<\d\+e[-+]\=\d\+\>" 114*9964e468SBram Moolenaar 115*9964e468SBram Moolenaar" hex numbers 116*9964e468SBram Moolenaarif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1) 117*9964e468SBram Moolenaar syn match luaNumber "\<0x\x\+\>" 118*9964e468SBram Moolenaarendif 119071d4279SBram Moolenaar 120071d4279SBram Moolenaar" tables 121071d4279SBram Moolenaarsyn region luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement 122071d4279SBram Moolenaar 123fc1421ebSBram Moolenaarsyn keyword luaFunc assert collectgarbage dofile error next 124071d4279SBram Moolenaarsyn keyword luaFunc print rawget rawset tonumber tostring type _VERSION 125071d4279SBram Moolenaar 126071d4279SBram Moolenaarif lua_version == 4 127fc1421ebSBram Moolenaar syn keyword luaFunc _ALERT _ERRORMESSAGE gcinfo 128071d4279SBram Moolenaar syn keyword luaFunc call copytagmethods dostring 129071d4279SBram Moolenaar syn keyword luaFunc foreach foreachi getglobal getn 130071d4279SBram Moolenaar syn keyword luaFunc gettagmethod globals newtag 131071d4279SBram Moolenaar syn keyword luaFunc setglobal settag settagmethod sort 132071d4279SBram Moolenaar syn keyword luaFunc tag tinsert tremove 133071d4279SBram Moolenaar syn keyword luaFunc _INPUT _OUTPUT _STDIN _STDOUT _STDERR 134071d4279SBram Moolenaar syn keyword luaFunc openfile closefile flush seek 135071d4279SBram Moolenaar syn keyword luaFunc setlocale execute remove rename tmpname 136071d4279SBram Moolenaar syn keyword luaFunc getenv date clock exit 137071d4279SBram Moolenaar syn keyword luaFunc readfrom writeto appendto read write 138071d4279SBram Moolenaar syn keyword luaFunc PI abs sin cos tan asin 139071d4279SBram Moolenaar syn keyword luaFunc acos atan atan2 ceil floor 140071d4279SBram Moolenaar syn keyword luaFunc mod frexp ldexp sqrt min max log 141071d4279SBram Moolenaar syn keyword luaFunc log10 exp deg rad random 142071d4279SBram Moolenaar syn keyword luaFunc randomseed strlen strsub strlower strupper 143071d4279SBram Moolenaar syn keyword luaFunc strchar strrep ascii strbyte 144071d4279SBram Moolenaar syn keyword luaFunc format strfind gsub 145071d4279SBram Moolenaar syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook 1468424a624SBram Moolenaarelseif lua_version == 5 147071d4279SBram Moolenaar " Not sure if all these functions need to be highlighted... 1488424a624SBram Moolenaar syn keyword luaFunc _G getfenv getmetatable ipairs loadfile 1498424a624SBram Moolenaar syn keyword luaFunc loadstring pairs pcall rawequal 1508424a624SBram Moolenaar syn keyword luaFunc require setfenv setmetatable unpack xpcall 1518424a624SBram Moolenaar if lua_subversion == 0 152fc1421ebSBram Moolenaar syn keyword luaFunc gcinfo loadlib LUA_PATH _LOADED _REQUIREDNAME 1538424a624SBram Moolenaar elseif lua_subversion == 1 1548424a624SBram Moolenaar syn keyword luaFunc load module select 1558424a624SBram Moolenaar syn match luaFunc /package\.cpath/ 1568424a624SBram Moolenaar syn match luaFunc /package\.loaded/ 1578424a624SBram Moolenaar syn match luaFunc /package\.loadlib/ 1588424a624SBram Moolenaar syn match luaFunc /package\.path/ 1598424a624SBram Moolenaar syn match luaFunc /package\.preload/ 1608424a624SBram Moolenaar syn match luaFunc /package\.seeall/ 1618424a624SBram Moolenaar syn match luaFunc /coroutine\.running/ 1628424a624SBram Moolenaar endif 163071d4279SBram Moolenaar syn match luaFunc /coroutine\.create/ 164071d4279SBram Moolenaar syn match luaFunc /coroutine\.resume/ 165071d4279SBram Moolenaar syn match luaFunc /coroutine\.status/ 166071d4279SBram Moolenaar syn match luaFunc /coroutine\.wrap/ 167071d4279SBram Moolenaar syn match luaFunc /coroutine\.yield/ 168071d4279SBram Moolenaar syn match luaFunc /string\.byte/ 169071d4279SBram Moolenaar syn match luaFunc /string\.char/ 170071d4279SBram Moolenaar syn match luaFunc /string\.dump/ 171071d4279SBram Moolenaar syn match luaFunc /string\.find/ 172071d4279SBram Moolenaar syn match luaFunc /string\.len/ 173071d4279SBram Moolenaar syn match luaFunc /string\.lower/ 174071d4279SBram Moolenaar syn match luaFunc /string\.rep/ 175071d4279SBram Moolenaar syn match luaFunc /string\.sub/ 176071d4279SBram Moolenaar syn match luaFunc /string\.upper/ 177071d4279SBram Moolenaar syn match luaFunc /string\.format/ 178071d4279SBram Moolenaar syn match luaFunc /string\.gsub/ 1798424a624SBram Moolenaar if lua_subversion == 0 1808424a624SBram Moolenaar syn match luaFunc /string\.gfind/ 181fc1421ebSBram Moolenaar syn match luaFunc /table\.getn/ 182fc1421ebSBram Moolenaar syn match luaFunc /table\.setn/ 183fc1421ebSBram Moolenaar syn match luaFunc /table\.foreach/ 184fc1421ebSBram Moolenaar syn match luaFunc /table\.foreachi/ 1858424a624SBram Moolenaar elseif lua_subversion == 1 1868424a624SBram Moolenaar syn match luaFunc /string\.gmatch/ 1878424a624SBram Moolenaar syn match luaFunc /string\.match/ 1888424a624SBram Moolenaar syn match luaFunc /string\.reverse/ 1898424a624SBram Moolenaar syn match luaFunc /table\.maxn/ 1908424a624SBram Moolenaar endif 191071d4279SBram Moolenaar syn match luaFunc /table\.concat/ 192071d4279SBram Moolenaar syn match luaFunc /table\.sort/ 193071d4279SBram Moolenaar syn match luaFunc /table\.insert/ 194071d4279SBram Moolenaar syn match luaFunc /table\.remove/ 195071d4279SBram Moolenaar syn match luaFunc /math\.abs/ 196071d4279SBram Moolenaar syn match luaFunc /math\.acos/ 197071d4279SBram Moolenaar syn match luaFunc /math\.asin/ 198071d4279SBram Moolenaar syn match luaFunc /math\.atan/ 199071d4279SBram Moolenaar syn match luaFunc /math\.atan2/ 200071d4279SBram Moolenaar syn match luaFunc /math\.ceil/ 2018424a624SBram Moolenaar syn match luaFunc /math\.sin/ 202071d4279SBram Moolenaar syn match luaFunc /math\.cos/ 2038424a624SBram Moolenaar syn match luaFunc /math\.tan/ 204071d4279SBram Moolenaar syn match luaFunc /math\.deg/ 205071d4279SBram Moolenaar syn match luaFunc /math\.exp/ 206071d4279SBram Moolenaar syn match luaFunc /math\.floor/ 207071d4279SBram Moolenaar syn match luaFunc /math\.log/ 208071d4279SBram Moolenaar syn match luaFunc /math\.log10/ 209071d4279SBram Moolenaar syn match luaFunc /math\.max/ 210071d4279SBram Moolenaar syn match luaFunc /math\.min/ 2118424a624SBram Moolenaar if lua_subversion == 0 212071d4279SBram Moolenaar syn match luaFunc /math\.mod/ 2138424a624SBram Moolenaar elseif lua_subversion == 1 2148424a624SBram Moolenaar syn match luaFunc /math\.fmod/ 2158424a624SBram Moolenaar syn match luaFunc /math\.modf/ 2168424a624SBram Moolenaar syn match luaFunc /math\.cosh/ 2178424a624SBram Moolenaar syn match luaFunc /math\.sinh/ 2188424a624SBram Moolenaar syn match luaFunc /math\.tanh/ 2198424a624SBram Moolenaar endif 220071d4279SBram Moolenaar syn match luaFunc /math\.pow/ 221071d4279SBram Moolenaar syn match luaFunc /math\.rad/ 222071d4279SBram Moolenaar syn match luaFunc /math\.sqrt/ 223071d4279SBram Moolenaar syn match luaFunc /math\.frexp/ 224071d4279SBram Moolenaar syn match luaFunc /math\.ldexp/ 225071d4279SBram Moolenaar syn match luaFunc /math\.random/ 226071d4279SBram Moolenaar syn match luaFunc /math\.randomseed/ 227071d4279SBram Moolenaar syn match luaFunc /math\.pi/ 228071d4279SBram Moolenaar syn match luaFunc /io\.stdin/ 229071d4279SBram Moolenaar syn match luaFunc /io\.stdout/ 230071d4279SBram Moolenaar syn match luaFunc /io\.stderr/ 231071d4279SBram Moolenaar syn match luaFunc /io\.close/ 232071d4279SBram Moolenaar syn match luaFunc /io\.flush/ 233071d4279SBram Moolenaar syn match luaFunc /io\.input/ 234071d4279SBram Moolenaar syn match luaFunc /io\.lines/ 235071d4279SBram Moolenaar syn match luaFunc /io\.open/ 236071d4279SBram Moolenaar syn match luaFunc /io\.output/ 237071d4279SBram Moolenaar syn match luaFunc /io\.popen/ 238071d4279SBram Moolenaar syn match luaFunc /io\.read/ 239071d4279SBram Moolenaar syn match luaFunc /io\.tmpfile/ 240071d4279SBram Moolenaar syn match luaFunc /io\.type/ 241071d4279SBram Moolenaar syn match luaFunc /io\.write/ 242071d4279SBram Moolenaar syn match luaFunc /os\.clock/ 243071d4279SBram Moolenaar syn match luaFunc /os\.date/ 244071d4279SBram Moolenaar syn match luaFunc /os\.difftime/ 245071d4279SBram Moolenaar syn match luaFunc /os\.execute/ 246071d4279SBram Moolenaar syn match luaFunc /os\.exit/ 247071d4279SBram Moolenaar syn match luaFunc /os\.getenv/ 248071d4279SBram Moolenaar syn match luaFunc /os\.remove/ 249071d4279SBram Moolenaar syn match luaFunc /os\.rename/ 250071d4279SBram Moolenaar syn match luaFunc /os\.setlocale/ 251071d4279SBram Moolenaar syn match luaFunc /os\.time/ 252071d4279SBram Moolenaar syn match luaFunc /os\.tmpname/ 253071d4279SBram Moolenaar syn match luaFunc /debug\.debug/ 254071d4279SBram Moolenaar syn match luaFunc /debug\.gethook/ 255071d4279SBram Moolenaar syn match luaFunc /debug\.getinfo/ 256071d4279SBram Moolenaar syn match luaFunc /debug\.getlocal/ 257071d4279SBram Moolenaar syn match luaFunc /debug\.getupvalue/ 258071d4279SBram Moolenaar syn match luaFunc /debug\.setlocal/ 259071d4279SBram Moolenaar syn match luaFunc /debug\.setupvalue/ 260071d4279SBram Moolenaar syn match luaFunc /debug\.sethook/ 261071d4279SBram Moolenaar syn match luaFunc /debug\.traceback/ 2628424a624SBram Moolenaar if lua_subversion == 1 2638424a624SBram Moolenaar syn match luaFunc /debug\.getfenv/ 2648424a624SBram Moolenaar syn match luaFunc /debug\.getmetatable/ 2658424a624SBram Moolenaar syn match luaFunc /debug\.getregistry/ 2668424a624SBram Moolenaar syn match luaFunc /debug\.setfenv/ 2678424a624SBram Moolenaar syn match luaFunc /debug\.setmetatable/ 268071d4279SBram Moolenaar endif 2698424a624SBram Moolenaarendif 270071d4279SBram Moolenaar 271071d4279SBram Moolenaar" Define the default highlighting. 272071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already 273071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet 274071d4279SBram Moolenaarif version >= 508 || !exists("did_lua_syntax_inits") 275071d4279SBram Moolenaar if version < 508 276071d4279SBram Moolenaar let did_lua_syntax_inits = 1 277071d4279SBram Moolenaar command -nargs=+ HiLink hi link <args> 278071d4279SBram Moolenaar else 279071d4279SBram Moolenaar command -nargs=+ HiLink hi def link <args> 280071d4279SBram Moolenaar endif 281071d4279SBram Moolenaar 282071d4279SBram Moolenaar HiLink luaStatement Statement 283071d4279SBram Moolenaar HiLink luaRepeat Repeat 284071d4279SBram Moolenaar HiLink luaString String 285071d4279SBram Moolenaar HiLink luaString2 String 286071d4279SBram Moolenaar HiLink luaNumber Number 287071d4279SBram Moolenaar HiLink luaFloat Float 288071d4279SBram Moolenaar HiLink luaOperator Operator 289071d4279SBram Moolenaar HiLink luaConstant Constant 290071d4279SBram Moolenaar HiLink luaCond Conditional 291071d4279SBram Moolenaar HiLink luaFunction Function 292071d4279SBram Moolenaar HiLink luaComment Comment 293071d4279SBram Moolenaar HiLink luaTodo Todo 294071d4279SBram Moolenaar HiLink luaTable Structure 295071d4279SBram Moolenaar HiLink luaError Error 296071d4279SBram Moolenaar HiLink luaSpecial SpecialChar 297071d4279SBram Moolenaar HiLink luaFunc Identifier 298071d4279SBram Moolenaar 299071d4279SBram Moolenaar delcommand HiLink 300071d4279SBram Moolenaarendif 301071d4279SBram Moolenaar 302071d4279SBram Moolenaarlet b:current_syntax = "lua" 303071d4279SBram Moolenaar 3048424a624SBram Moolenaar" vim: et ts=8 305