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