1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Lua 4.0 and Lua 5.0 3*d4755bb0SBram Moolenaar" Maintainer: Marcus Aurelius Farias <marcus.cf 'at' bol.com.br> 4*d4755bb0SBram Moolenaar" First Author: Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br> 5*d4755bb0SBram Moolenaar" Last Change: 2004 Aug 29 6071d4279SBram Moolenaar" Options: lua_version = 4 or 5 [default] 7071d4279SBram Moolenaar" 8071d4279SBram Moolenaar" For version 5.x: Clear all syntax items 9071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded 10071d4279SBram Moolenaarif version < 600 11071d4279SBram Moolenaar syntax clear 12071d4279SBram Moolenaarelseif exists("b:current_syntax") 13071d4279SBram Moolenaar finish 14071d4279SBram Moolenaarendif 15071d4279SBram Moolenaar 16071d4279SBram Moolenaarif !exists("lua_version") 17071d4279SBram Moolenaar let lua_version = 5 18071d4279SBram Moolenaarendif 19071d4279SBram Moolenaar 20071d4279SBram Moolenaarsyn case match 21071d4279SBram Moolenaar 22071d4279SBram Moolenaar" Comments 23071d4279SBram Moolenaarsyn keyword luaTodo contained TODO FIXME XXX 24071d4279SBram Moolenaarsyn match luaComment "--.*$" contains=luaTodo 25071d4279SBram Moolenaarif lua_version > 4 26071d4279SBram Moolenaar syn region luaComment matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment 27071d4279SBram Moolenaar syn region luaInnerComment contained transparent start="\[\[" end="\]\]" 28071d4279SBram Moolenaarendif 29071d4279SBram Moolenaar" First line may start with #! 30071d4279SBram Moolenaarsyn match luaComment "\%^#!.*" 31071d4279SBram Moolenaar 32071d4279SBram Moolenaar" catch errors caused by wrong parenthesis and wrong curly brackets or 33071d4279SBram Moolenaar" keywords placed outside their respective blocks 34071d4279SBram Moolenaar 35071d4279SBram Moolenaarsyn region luaParen transparent start='(' end=')' contains=ALLBUT,luaError,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement 36071d4279SBram Moolenaarsyn match luaError ")" 37071d4279SBram Moolenaarsyn match luaError "}" 38*d4755bb0SBram Moolenaarsyn match luaError "\<\%(end\|else\|elseif\|then\|until\|in\)\>" 39071d4279SBram Moolenaar 40071d4279SBram Moolenaar 41071d4279SBram Moolenaar" Function declaration 42071d4279SBram Moolenaarsyn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat 43071d4279SBram Moolenaar 44071d4279SBram Moolenaar" if then else elseif end 45071d4279SBram Moolenaarsyn keyword luaCond contained else 46071d4279SBram Moolenaar 47071d4279SBram Moolenaar" then ... end 48071d4279SBram Moolenaarsyn region luaCondEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaRepeat 49071d4279SBram Moolenaar 50071d4279SBram Moolenaar" elseif ... then 51071d4279SBram Moolenaarsyn region luaCondElseif contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat 52071d4279SBram Moolenaar 53071d4279SBram Moolenaar" if ... then 54071d4279SBram 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 55071d4279SBram Moolenaar 56071d4279SBram Moolenaar" do ... end 57071d4279SBram Moolenaarsyn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat 58071d4279SBram Moolenaar 59071d4279SBram Moolenaar" repeat ... until 60071d4279SBram Moolenaarsyn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat 61071d4279SBram Moolenaar 62071d4279SBram Moolenaar" while ... do 63071d4279SBram 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 64071d4279SBram Moolenaar 65071d4279SBram Moolenaar" for ... do and for ... in ... do 66071d4279SBram Moolenaarsyn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd nextgroup=luaBlock skipwhite skipempty 67071d4279SBram Moolenaar 68071d4279SBram Moolenaar" Following 'else' example. This is another item to those 69071d4279SBram Moolenaar" contains=ALLBUT,... because only the 'for' luaRepeatBlock contains it. 70071d4279SBram Moolenaarsyn keyword luaRepeat contained in 71071d4279SBram Moolenaar 72071d4279SBram Moolenaar" other keywords 73071d4279SBram Moolenaarsyn keyword luaStatement return local break 74071d4279SBram Moolenaarsyn keyword luaOperator and or not 75071d4279SBram Moolenaarsyn keyword luaConstant nil 76071d4279SBram Moolenaarif lua_version > 4 77071d4279SBram Moolenaar syn keyword luaConstant true false 78071d4279SBram Moolenaarendif 79071d4279SBram Moolenaar 80071d4279SBram Moolenaar" Pre processor doesn't exist since Lua 4.0 81*d4755bb0SBram Moolenaar" syn match luaPreProc "^\s*$\%(debug\|nodebug\|if\|ifnot\|end\|else\|endinput\)\>" 82071d4279SBram Moolenaar 83071d4279SBram Moolenaar" Strings 84071d4279SBram Moolenaarsyn match luaSpecial contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}" 85071d4279SBram Moolenaarsyn region luaString start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial 86071d4279SBram Moolenaarsyn region luaString start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial 87071d4279SBram Moolenaar" Nested strings 88071d4279SBram Moolenaarsyn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2 89071d4279SBram Moolenaar 90071d4279SBram Moolenaar" integer number 91071d4279SBram Moolenaarsyn match luaNumber "\<[0-9]\+\>" 92071d4279SBram Moolenaar" floating point number, with dot, optional exponent 93*d4755bb0SBram Moolenaarsyn match luaFloat "\<[0-9]\+\.[0-9]*\%(e[-+]\=[0-9]\+\)\=\>" 94071d4279SBram Moolenaar" floating point number, starting with a dot, optional exponent 95*d4755bb0SBram Moolenaarsyn match luaFloat "\.[0-9]\+\%(e[-+]\=[0-9]\+\)\=\>" 96071d4279SBram Moolenaar" floating point number, without dot, with exponent 97071d4279SBram Moolenaarsyn match luaFloat "\<[0-9]\+e[-+]\=[0-9]\+\>" 98071d4279SBram Moolenaar 99071d4279SBram Moolenaar" tables 100071d4279SBram Moolenaarsyn region luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement 101071d4279SBram Moolenaar 102071d4279SBram Moolenaarsyn keyword luaFunc assert collectgarbage dofile error gcinfo next 103071d4279SBram Moolenaarsyn keyword luaFunc print rawget rawset tonumber tostring type _VERSION 104071d4279SBram Moolenaar 105071d4279SBram Moolenaarif lua_version == 4 106071d4279SBram Moolenaar syn keyword luaFunc _ALERT _ERRORMESSAGE 107071d4279SBram Moolenaar syn keyword luaFunc call copytagmethods dostring 108071d4279SBram Moolenaar syn keyword luaFunc foreach foreachi getglobal getn 109071d4279SBram Moolenaar syn keyword luaFunc gettagmethod globals newtag 110071d4279SBram Moolenaar syn keyword luaFunc setglobal settag settagmethod sort 111071d4279SBram Moolenaar syn keyword luaFunc tag tinsert tremove 112071d4279SBram Moolenaar syn keyword luaFunc _INPUT _OUTPUT _STDIN _STDOUT _STDERR 113071d4279SBram Moolenaar syn keyword luaFunc openfile closefile flush seek 114071d4279SBram Moolenaar syn keyword luaFunc setlocale execute remove rename tmpname 115071d4279SBram Moolenaar syn keyword luaFunc getenv date clock exit 116071d4279SBram Moolenaar syn keyword luaFunc readfrom writeto appendto read write 117071d4279SBram Moolenaar syn keyword luaFunc PI abs sin cos tan asin 118071d4279SBram Moolenaar syn keyword luaFunc acos atan atan2 ceil floor 119071d4279SBram Moolenaar syn keyword luaFunc mod frexp ldexp sqrt min max log 120071d4279SBram Moolenaar syn keyword luaFunc log10 exp deg rad random 121071d4279SBram Moolenaar syn keyword luaFunc randomseed strlen strsub strlower strupper 122071d4279SBram Moolenaar syn keyword luaFunc strchar strrep ascii strbyte 123071d4279SBram Moolenaar syn keyword luaFunc format strfind gsub 124071d4279SBram Moolenaar syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook 125071d4279SBram Moolenaarelse 126071d4279SBram Moolenaar syn keyword luaFunc _G getfenv getmetatable ipairs loadfile 127071d4279SBram Moolenaar syn keyword luaFunc loadlib loadstring pairs pcall rawequal 128071d4279SBram Moolenaar syn keyword luaFunc require setfenv setmetatable unpack xpcall 129071d4279SBram Moolenaar syn keyword luaFunc LUA_PATH _LOADED _REQUIREDNAME 130071d4279SBram Moolenaar " Not sure if all these functions need to be highlighted... 131071d4279SBram Moolenaar syn match luaFunc /coroutine\.create/ 132071d4279SBram Moolenaar syn match luaFunc /coroutine\.resume/ 133071d4279SBram Moolenaar syn match luaFunc /coroutine\.status/ 134071d4279SBram Moolenaar syn match luaFunc /coroutine\.wrap/ 135071d4279SBram Moolenaar syn match luaFunc /coroutine\.yield/ 136071d4279SBram Moolenaar syn match luaFunc /string\.byte/ 137071d4279SBram Moolenaar syn match luaFunc /string\.char/ 138071d4279SBram Moolenaar syn match luaFunc /string\.dump/ 139071d4279SBram Moolenaar syn match luaFunc /string\.find/ 140071d4279SBram Moolenaar syn match luaFunc /string\.len/ 141071d4279SBram Moolenaar syn match luaFunc /string\.lower/ 142071d4279SBram Moolenaar syn match luaFunc /string\.rep/ 143071d4279SBram Moolenaar syn match luaFunc /string\.sub/ 144071d4279SBram Moolenaar syn match luaFunc /string\.upper/ 145071d4279SBram Moolenaar syn match luaFunc /string\.format/ 146071d4279SBram Moolenaar syn match luaFunc /string\.gfind/ 147071d4279SBram Moolenaar syn match luaFunc /string\.gsub/ 148071d4279SBram Moolenaar syn match luaFunc /table\.concat/ 149071d4279SBram Moolenaar syn match luaFunc /table\.foreach/ 150071d4279SBram Moolenaar syn match luaFunc /table\.foreachi/ 151071d4279SBram Moolenaar syn match luaFunc /table\.getn/ 152071d4279SBram Moolenaar syn match luaFunc /table\.sort/ 153071d4279SBram Moolenaar syn match luaFunc /table\.insert/ 154071d4279SBram Moolenaar syn match luaFunc /table\.remove/ 155071d4279SBram Moolenaar syn match luaFunc /table\.setn/ 156071d4279SBram Moolenaar syn match luaFunc /math\.abs/ 157071d4279SBram Moolenaar syn match luaFunc /math\.acos/ 158071d4279SBram Moolenaar syn match luaFunc /math\.asin/ 159071d4279SBram Moolenaar syn match luaFunc /math\.atan/ 160071d4279SBram Moolenaar syn match luaFunc /math\.atan2/ 161071d4279SBram Moolenaar syn match luaFunc /math\.ceil/ 162071d4279SBram Moolenaar syn match luaFunc /math\.cos/ 163071d4279SBram Moolenaar syn match luaFunc /math\.deg/ 164071d4279SBram Moolenaar syn match luaFunc /math\.exp/ 165071d4279SBram Moolenaar syn match luaFunc /math\.floor/ 166071d4279SBram Moolenaar syn match luaFunc /math\.log/ 167071d4279SBram Moolenaar syn match luaFunc /math\.log10/ 168071d4279SBram Moolenaar syn match luaFunc /math\.max/ 169071d4279SBram Moolenaar syn match luaFunc /math\.min/ 170071d4279SBram Moolenaar syn match luaFunc /math\.mod/ 171071d4279SBram Moolenaar syn match luaFunc /math\.pow/ 172071d4279SBram Moolenaar syn match luaFunc /math\.rad/ 173071d4279SBram Moolenaar syn match luaFunc /math\.sin/ 174071d4279SBram Moolenaar syn match luaFunc /math\.sqrt/ 175071d4279SBram Moolenaar syn match luaFunc /math\.tan/ 176071d4279SBram Moolenaar syn match luaFunc /math\.frexp/ 177071d4279SBram Moolenaar syn match luaFunc /math\.ldexp/ 178071d4279SBram Moolenaar syn match luaFunc /math\.random/ 179071d4279SBram Moolenaar syn match luaFunc /math\.randomseed/ 180071d4279SBram Moolenaar syn match luaFunc /math\.pi/ 181071d4279SBram Moolenaar syn match luaFunc /io\.stdin/ 182071d4279SBram Moolenaar syn match luaFunc /io\.stdout/ 183071d4279SBram Moolenaar syn match luaFunc /io\.stderr/ 184071d4279SBram Moolenaar syn match luaFunc /io\.close/ 185071d4279SBram Moolenaar syn match luaFunc /io\.flush/ 186071d4279SBram Moolenaar syn match luaFunc /io\.input/ 187071d4279SBram Moolenaar syn match luaFunc /io\.lines/ 188071d4279SBram Moolenaar syn match luaFunc /io\.open/ 189071d4279SBram Moolenaar syn match luaFunc /io\.output/ 190071d4279SBram Moolenaar syn match luaFunc /io\.popen/ 191071d4279SBram Moolenaar syn match luaFunc /io\.read/ 192071d4279SBram Moolenaar syn match luaFunc /io\.tmpfile/ 193071d4279SBram Moolenaar syn match luaFunc /io\.type/ 194071d4279SBram Moolenaar syn match luaFunc /io\.write/ 195071d4279SBram Moolenaar syn match luaFunc /os\.clock/ 196071d4279SBram Moolenaar syn match luaFunc /os\.date/ 197071d4279SBram Moolenaar syn match luaFunc /os\.difftime/ 198071d4279SBram Moolenaar syn match luaFunc /os\.execute/ 199071d4279SBram Moolenaar syn match luaFunc /os\.exit/ 200071d4279SBram Moolenaar syn match luaFunc /os\.getenv/ 201071d4279SBram Moolenaar syn match luaFunc /os\.remove/ 202071d4279SBram Moolenaar syn match luaFunc /os\.rename/ 203071d4279SBram Moolenaar syn match luaFunc /os\.setlocale/ 204071d4279SBram Moolenaar syn match luaFunc /os\.time/ 205071d4279SBram Moolenaar syn match luaFunc /os\.tmpname/ 206071d4279SBram Moolenaar syn match luaFunc /debug\.debug/ 207071d4279SBram Moolenaar syn match luaFunc /debug\.gethook/ 208071d4279SBram Moolenaar syn match luaFunc /debug\.getinfo/ 209071d4279SBram Moolenaar syn match luaFunc /debug\.getlocal/ 210071d4279SBram Moolenaar syn match luaFunc /debug\.getupvalue/ 211071d4279SBram Moolenaar syn match luaFunc /debug\.setlocal/ 212071d4279SBram Moolenaar syn match luaFunc /debug\.setupvalue/ 213071d4279SBram Moolenaar syn match luaFunc /debug\.sethook/ 214071d4279SBram Moolenaar syn match luaFunc /debug\.traceback/ 215071d4279SBram Moolenaarendif 216071d4279SBram Moolenaar 217071d4279SBram Moolenaar"syncing method 218071d4279SBram Moolenaarsyn sync minlines=100 219071d4279SBram Moolenaar 220071d4279SBram Moolenaar" Define the default highlighting. 221071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already 222071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet 223071d4279SBram Moolenaarif version >= 508 || !exists("did_lua_syntax_inits") 224071d4279SBram Moolenaar if version < 508 225071d4279SBram Moolenaar let did_lua_syntax_inits = 1 226071d4279SBram Moolenaar command -nargs=+ HiLink hi link <args> 227071d4279SBram Moolenaar else 228071d4279SBram Moolenaar command -nargs=+ HiLink hi def link <args> 229071d4279SBram Moolenaar endif 230071d4279SBram Moolenaar 231071d4279SBram Moolenaar HiLink luaStatement Statement 232071d4279SBram Moolenaar HiLink luaRepeat Repeat 233071d4279SBram Moolenaar HiLink luaString String 234071d4279SBram Moolenaar HiLink luaString2 String 235071d4279SBram Moolenaar HiLink luaNumber Number 236071d4279SBram Moolenaar HiLink luaFloat Float 237071d4279SBram Moolenaar HiLink luaOperator Operator 238071d4279SBram Moolenaar HiLink luaConstant Constant 239071d4279SBram Moolenaar HiLink luaCond Conditional 240071d4279SBram Moolenaar HiLink luaFunction Function 241071d4279SBram Moolenaar HiLink luaComment Comment 242071d4279SBram Moolenaar HiLink luaTodo Todo 243071d4279SBram Moolenaar HiLink luaTable Structure 244071d4279SBram Moolenaar HiLink luaError Error 245071d4279SBram Moolenaar HiLink luaSpecial SpecialChar 246071d4279SBram Moolenaar " HiLink luaPreProc PreProc 247071d4279SBram Moolenaar HiLink luaFunc Identifier 248071d4279SBram Moolenaar 249071d4279SBram Moolenaar delcommand HiLink 250071d4279SBram Moolenaarendif 251071d4279SBram Moolenaar 252071d4279SBram Moolenaarlet b:current_syntax = "lua" 253071d4279SBram Moolenaar 254071d4279SBram Moolenaar" vim: noet ts=8 255