1" Vim syntax file 2" Language: ConTeXt typesetting engine 3" Maintainer: Nicola Vitacolonna <[email protected]> 4" Former Maintainers: Nikolai Weibull <[email protected]> 5" Latest Revision: 2016 Oct 16 6 7if exists("b:current_syntax") 8 finish 9endif 10 11runtime! syntax/plaintex.vim 12unlet b:current_syntax 13 14let s:cpo_save = &cpo 15set cpo&vim 16 17" Dictionary of (filetype, group) pairs to highlight between \startGROUP \stopGROUP. 18let s:context_include = get(b:, 'context_include', get(g:, 'context_include', {'xml': 'XML'})) 19 20" For backward compatibility (g:context_include used to be a List) 21if type(s:context_include) ==# type([]) 22 let g:context_metapost = (index(s:context_include, 'mp') != -1) 23 let s:context_include = filter( 24 \ {'c': 'C', 'javascript': 'JS', 'ruby': 'Ruby', 'xml': 'XML'}, 25 \ { k,_ -> index(s:context_include, k) != -1 } 26 \ ) 27endif 28 29syn iskeyword @,48-57,a-z,A-Z,192-255 30 31syn spell toplevel 32 33" ConTeXt options, i.e., [...] blocks 34syn region contextOptions matchgroup=contextDelimiter start='\[' end=']\|\ze\\stop' skip='\\\[\|\\\]' contains=ALLBUT,contextBeginEndLua,@Spell 35 36" Highlight braces 37syn match contextDelimiter '[{}]' 38 39" Comments 40syn match contextComment '\\\@<!\%(\\\\\)*\zs%.*$' display contains=initexTodo 41syn match contextComment '^\s*%[CDM].*$' display contains=initexTodo 42 43syn match contextBlockDelim '\\\%(start\|stop\)\a\+' contains=@NoSpell 44 45syn region contextEscaped matchgroup=contextPreProc start='\\type\%(\s*\|\n\)*\z([^A-Za-z%]\)' end='\z1' 46syn region contextEscaped matchgroup=contextPreProc start='\\type\=\%(\s\|\n\)*{' end='}' 47syn region contextEscaped matchgroup=contextPreProc start='\\type\=\%(\s*\|\n\)*<<' end='>>' 48syn region contextEscaped matchgroup=contextPreProc 49 \ start='\\start\z(\a*\%(typing\|typen\)\)' 50 \ end='\\stop\z1' contains=plaintexComment keepend 51syn region contextEscaped matchgroup=contextPreProc start='\\\h\+Type\%(\s\|\n\)*{' end='}' 52syn region contextEscaped matchgroup=contextPreProc start='\\Typed\h\+\%(\s\|\n\)*{' end='}' 53 54syn match contextBuiltin display contains=@NoSpell 55 \ '\\\%(unprotect\|protect\|unexpanded\)\>' 56 57syn match contextPreProc '^\s*\\\%(start\|stop\)\=\%(component\|environment\|project\|product\)\>' 58 \ contains=@NoSpell 59 60if get(b:, 'context_metapost', get(g:, 'context_metapost', 1)) 61 let b:mp_metafun_macros = 1 " Highlight MetaFun keywords 62 syn include @mpTop syntax/mp.vim 63 unlet b:current_syntax 64 65 syn region contextMPGraphic matchgroup=contextBlockDelim 66 \ start='\\start\z(MP\%(clip\|code\|definitions\|drawing\|environment\|extensions\|inclusions\|initializations\|page\|\)\)\>.*$' 67 \ end='\\stop\z1' 68 \ contains=@mpTop,@NoSpell 69 syn region contextMPGraphic matchgroup=contextBlockDelim 70 \ start='\\start\z(\%(\%[re]usable\|use\|unique\|static\)MPgraphic\|staticMPfigure\|uniqueMPpagegraphic\)\>.*$' 71 \ end='\\stop\z1' 72 \ contains=@mpTop,@NoSpell 73endif 74 75if get(b:, 'context_lua', get(g:, 'context_lua', 1)) 76 syn include @luaTop syntax/lua.vim 77 unlet b:current_syntax 78 79 syn region contextLuaCode matchgroup=contextBlockDelim 80 \ start='\\startluacode\>' 81 \ end='\\stopluacode\>' keepend 82 \ contains=@luaTop,@NoSpell 83 84 syn match contextDirectLua "\\\%(directlua\|ctxlua\)\>\%(\s*%.*$\)\=" 85 \ nextgroup=contextBeginEndLua skipwhite skipempty 86 \ contains=initexComment 87 syn region contextBeginEndLua matchgroup=contextSpecial 88 \ start="{" end="}" skip="\\[{}]" 89 \ contained contains=@luaTop,@NoSpell 90endif 91 92for synname in keys(s:context_include) 93 execute 'syn include @' . synname . 'Top' 'syntax/' . synname . '.vim' 94 unlet b:current_syntax 95 execute 'syn region context' . s:context_include[synname] . 'Code' 96 \ 'matchgroup=contextBlockDelim' 97 \ 'start=+\\start' . s:context_include[synname] . '+' 98 \ 'end=+\\stop' . s:context_include[synname] . '+' 99 \ 'contains=@' . synname . 'Top,@NoSpell' 100endfor 101 102syn match contextSectioning '\\\%(start\|stop\)\=\%(\%(sub\)*section\|\%(sub\)*subject\|chapter\|part\|component\|product\|title\)\>' 103 \ contains=@NoSpell 104 105syn match contextSpecial '\\crlf\>\|\\par\>\|-\{2,3}\||[<>/]\=|' 106 \ contains=@NoSpell 107syn match contextSpecial /\\[`'"]/ 108syn match contextSpecial +\\char\%(\d\{1,3}\|'\o\{1,3}\|"\x\{1,2}\)\>+ 109 \ contains=@NoSpell 110syn match contextSpecial '\^\^.' 111syn match contextSpecial '`\%(\\.\|\^\^.\|.\)' 112 113syn match contextStyle '\\\%(em\|ss\|hw\|cg\|mf\)\>' 114 \ contains=@NoSpell 115syn match contextFont '\\\%(CAP\|Cap\|cap\|Caps\|kap\|nocap\)\>' 116 \ contains=@NoSpell 117syn match contextFont '\\\%(Word\|WORD\|Words\|WORDS\)\>' 118 \ contains=@NoSpell 119syn match contextFont '\\\%(vi\{1,3}\|ix\|xi\{0,2}\)\>' 120 \ contains=@NoSpell 121syn match contextFont '\\\%(tf\|b[si]\|s[cl]\|os\)\%(xx\|[xabcd]\)\=\>' 122 \ contains=@NoSpell 123 124hi def link contextOptions Typedef 125hi def link contextComment Comment 126hi def link contextBlockDelim Keyword 127hi def link contextBuiltin Keyword 128hi def link contextDelimiter Delimiter 129hi def link contextEscaped String 130hi def link contextPreProc PreProc 131hi def link contextSectioning PreProc 132hi def link contextSpecial Special 133hi def link contextType Type 134hi def link contextStyle contextType 135hi def link contextFont contextType 136hi def link contextDirectLua Keyword 137 138let b:current_syntax = "context" 139 140let &cpo = s:cpo_save 141unlet s:cpo_save 142