diff options
Diffstat (limited to '')
| -rw-r--r-- | syntax/fennel.vim | 287 | 
1 files changed, 287 insertions, 0 deletions
| diff --git a/syntax/fennel.vim b/syntax/fennel.vim new file mode 100644 index 00000000..ec6f8084 --- /dev/null +++ b/syntax/fennel.vim @@ -0,0 +1,287 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'fennel') == -1 + +" Vim syntax file +" Language: FENNEL +" Maintainer: Calvin Rose + +if exists("b:current_syntax") +    finish +endif + +let s:cpo_sav = &cpo +set cpo&vim + +if has("folding") && exists("g:fennel_fold") && g:fennel_fold > 0 +    setlocal foldmethod=syntax +endif + +syntax keyword FennelCommentTodo contained FIXME XXX TODO FIXME: XXX: TODO: + +" FENNEL comments +syn match FennelComment ";.*$" contains=FennelCommentTodo,@Spell + +syntax match FennelStringEscape '\v\\%([abfnrtv'"\\]|x[[0-9a-fA-F]]\{2}|25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9])' contained +syntax region FennelString matchgroup=FennelStringDelimiter start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=FennelStringEscape,@Spell +syntax region FennelString matchgroup=FennelStringDelimiter start=/'/ skip=/\\\\\|\\'/ end=/'/ contains=FennelStringEscape,@Spell + +syn keyword FennelConstant nil + +syn keyword FennelBoolean true +syn keyword FennelBoolean false + +" Fennel special forms +syn keyword FennelSpecialForm # +syn keyword FennelSpecialForm % +syn keyword FennelSpecialForm * +syn keyword FennelSpecialForm + +syn keyword FennelSpecialForm - +syn keyword FennelSpecialForm -> +syn keyword FennelSpecialForm ->> +syn keyword FennelSpecialForm -?> +syn keyword FennelSpecialForm -?>> +syn keyword FennelSpecialForm . +syn keyword FennelSpecialForm .. +syn keyword FennelSpecialForm / +syn keyword FennelSpecialForm // +syn keyword FennelSpecialForm : +syn keyword FennelSpecialForm < +syn keyword FennelSpecialForm <= +syn keyword FennelSpecialForm = +syn keyword FennelSpecialForm > +syn keyword FennelSpecialForm >= +syn keyword FennelSpecialForm ^ +syn keyword FennelSpecialForm and +syn keyword FennelSpecialForm comment +syn keyword FennelSpecialForm do +syn keyword FennelSpecialForm doc +syn keyword FennelSpecialForm doto +syn keyword FennelSpecialForm each +syn keyword FennelSpecialForm eval-compiler +syn keyword FennelSpecialForm fn +syn keyword FennelSpecialForm for +syn keyword FennelSpecialForm global +syn keyword FennelSpecialForm hashfn +syn keyword FennelSpecialForm if +syn keyword FennelSpecialForm include +syn keyword FennelSpecialForm lambda +syn keyword FennelSpecialForm length +syn keyword FennelSpecialForm let +syn keyword FennelSpecialForm local +syn keyword FennelSpecialForm lua +syn keyword FennelSpecialForm macro +syn keyword FennelSpecialForm macros +syn keyword FennelSpecialForm match +syn keyword FennelSpecialForm not +syn keyword FennelSpecialForm not= +syn keyword FennelSpecialForm or +syn keyword FennelSpecialForm partial +syn keyword FennelSpecialForm quote +syn keyword FennelSpecialForm require-macros +syn keyword FennelSpecialForm set +syn keyword FennelSpecialForm set-forcibly! +syn keyword FennelSpecialForm tset +syn keyword FennelSpecialForm values +syn keyword FennelSpecialForm var +syn keyword FennelSpecialForm when +syn keyword FennelSpecialForm while +syn keyword FennelSpecialForm ~= +syn keyword FennelSpecialForm λ + +" Lua keywords +syntax keyword LuaSpecialValue +	\ _G +	\ _VERSION +	\ assert +	\ collectgarbage +	\ dofile +	\ error +	\ getmetatable +	\ ipairs +	\ load +	\ loadfile +	\ next +	\ pairs +	\ pcall +	\ print +	\ rawequal +	\ rawget +	\ rawlen +	\ rawset +	\ require +	\ select +	\ setmetatable +	\ tonumber +	\ tostring +	\ type +	\ xpcall +	\ coroutine +	\ coroutine.create +	\ coroutine.isyieldable +	\ coroutine.resume +	\ coroutine.running +	\ coroutine.status +	\ coroutine.wrap +	\ coroutine.yield +	\ debug +	\ debug.debug +	\ debug.gethook +	\ debug.getinfo +	\ debug.getlocal +	\ debug.getmetatable +	\ debug.getregistry +	\ debug.getupvalue +	\ debug.getuservalue +	\ debug.sethook +	\ debug.setlocal +	\ debug.setmetatable +	\ debug.setupvalue +	\ debug.setuservalue +	\ debug.traceback +	\ debug.upvalueid +	\ debug.upvaluejoin +	\ io +	\ io.close +	\ io.flush +	\ io.input +	\ io.lines +	\ io.open +	\ io.output +	\ io.popen +	\ io.read +	\ io.stderr +	\ io.stdin +	\ io.stdout +	\ io.tmpfile +	\ io.type +	\ io.write +	\ math +	\ math.abs +	\ math.acos +	\ math.asin +	\ math.atan +	\ math.ceil +	\ math.cos +	\ math.deg +	\ math.exp +	\ math.floor +	\ math.fmod +	\ math.huge +	\ math.log +	\ math.max +	\ math.maxinteger +	\ math.min +	\ math.mininteger +	\ math.modf +	\ math.pi +	\ math.rad +	\ math.random +	\ math.randomseed +	\ math.sin +	\ math.sqrt +	\ math.tan +	\ math.tointeger +	\ math.type +	\ math.ult +	\ os +	\ os.clock +	\ os.date +	\ os.difftime +	\ os.execute +	\ os.exit +	\ os.getenv +	\ os.remove +	\ os.rename +	\ os.setlocale +	\ os.time +	\ os.tmpname +	\ package +	\ package.config +	\ package.cpath +	\ package.loaded +	\ package.loadlib +	\ package.path +	\ package.preload +	\ package.searchers +	\ package.searchpath +	\ string +	\ string.byte +	\ string.char +	\ string.dump +	\ string.find +	\ string.format +	\ string.gmatch +	\ string.gsub +	\ string.len +	\ string.lower +	\ string.match +	\ string.pack +	\ string.packsize +	\ string.rep +	\ string.reverse +	\ string.sub +	\ string.unpack +	\ string.upper +	\ table +	\ table.concat +	\ table.insert +	\ table.move +	\ table.pack +	\ table.remove +	\ table.sort +	\ table.unpack +	\ utf8 +	\ utf8.char +	\ utf8.charpattern +	\ utf8.codepoint +	\ utf8.codes +	\ utf8.len +	\ utf8.offset + +" Fennel Symbols +let s:symcharnodig = '\!\$%\&\#\*\+\-./:<=>?A-Z^_a-z|\x80-\U10FFFF' +let s:symchar = '0-9' . s:symcharnodig +execute 'syn match FennelSymbol "\v<%([' . s:symcharnodig . '])%([' . s:symchar . '])*>"' +execute 'syn match FennelKeyword "\v<:%([' . s:symchar . '])*>"' +unlet! s:symchar s:symcharnodig + +syn match FennelQuote "`" +syn match FennelQuote "@" + +" FENNEL numbers +syntax match FennelNumber "\v\c<[-+]?\d*\.?\d*%([eE][-+]?\d+)?>" +syntax match FennelNumber "\v\c<[-+]?0x[0-9A-F]*\.?[0-9A-F]*>" + +" Grammar root +syntax cluster FennelTop contains=@Spell,FennelComment,FennelConstant,FennelQuote,FennelKeyword,LuaSpecialValue,FennelSymbol,FennelNumber,FennelString,FennelList,FennelArray,FennelTable,FennelSpecialForm,FennelBoolean + +syntax region FennelList matchgroup=FennelParen start="("  end=")" contains=@FennelTop fold +syntax region FennelArray matchgroup=FennelParen start="\[" end="]" contains=@FennelTop fold +syntax region FennelTable matchgroup=FennelParen start="{"  end="}" contains=@FennelTop fold + +" Highlight superfluous closing parens, brackets and braces. +syntax match FennelError "]\|}\|)" + +syntax sync fromstart + +" Highlighting +hi def link FennelComment Comment +hi def link FennelSymbol Identifier +hi def link FennelNumber Number +hi def link FennelConstant Constant +hi def link FennelKeyword Keyword +hi def link FennelSpecialForm Special +hi def link LuaSpecialValue Special +hi def link FennelString String +hi def link FennelBuffer String +hi def link FennelStringDelimiter String +hi def link FennelBoolean Boolean + +hi def link FennelQuote SpecialChar +hi def link FennelParen Delimiter + +let b:current_syntax = "fennel" + +let &cpo = s:cpo_sav +unlet! s:cpo_sav + +endif | 
