vim9script # Vim syntax file # Language: ConTeXt typesetting engine # Maintainer: Nicola Vitacolonna # Former Maintainers: Nikolai Weibull # Latest Revision: 2022 Aug 12 if exists("b:current_syntax") finish endif # Dictionary of (filetype, group) pairs to highlight between \startGROUP \stopGROUP. var context_include = get(b:, 'context_include', get(g:, 'context_include', {'xml': 'XML'})) # Deprecation warning if type(context_include) ==# type([]) echomsg "[ConTeXt] b:context_include/g:context_include must be Dictionaries." context_include = {'xml': 'XML'} endif syn iskeyword @,48-57,_,!,?,a-z,A-Z,192-255 syn spell toplevel runtime! syntax/shared/context-data-context.vim runtime! syntax/shared/context-data-interfaces.vim runtime! syntax/shared/context-data-tex.vim syn match contextCommand '\\\k\+\>' display contains=@NoSpell # ConTeXt options, i.e., [...] blocks syn region contextOptions matchgroup=contextDelimiter start='\[' end=']\|\ze\\stop' skip='\\\[\|\\\]' contains=TOP,@Spell # Highlight braces syn match contextDelimiter '[{}]' # Comments syn match contextComment '\%(\_^\|[^\\]\)\%(\\\\\)*\zs%.*$' display contains=contextTodo,contextMagicLine syn match contextComment '^\s*%[CDM].*$' display contains=contextTodo,contextMagicLine syn keyword contextTodo TODO FIXME XXX NOTE contained syn match contextMagicLine '^\s*%\s*!TEX.*$' contained syn match contextBlockDelim '\\\%(start\|stop\)\k\+' contains=@NoSpell syn region contextEscaped matchgroup=contextPreProc start='\\type\%(\s*\|\n\)*\z([^A-Za-z%]\)' end='\z1' syn region contextEscaped matchgroup=contextPreProc start='\\type\=\%(\s\|\n\)*{' end='}' syn region contextEscaped matchgroup=contextPreProc start='\\type\=\%(\s*\|\n\)*<<' end='>>' syn region contextEscaped matchgroup=contextPreProc \ start='\\start\z(\a*\%(typing\|typen\)\)' \ end='\\stop\z1' contains=contextComment keepend syn region contextEscaped matchgroup=contextPreProc start='\\\h\+Type\%(\s\|\n\)*{' end='}' syn region contextEscaped matchgroup=contextPreProc start='\\Typed\h\+\%(\s\|\n\)*{' end='}' syn match contextBuiltin '\\unexpanded\>' display contains=@NoSpell # \unprotect... \protect regions syn region contextUnprotect matchgroup=contextBuiltin start='\\unprotect' end='\\protect' contains=TOP syn match contextSequence '\\[a-zA-Z]*[@_!?]\+[a-zA-Z@_!?]*' contains=@NoSpell contained containedin=contextUnprotect # Math syn match contextMathCmd '\\m\%(ath\%(ematics\)\=\)\=\>' syn region contextInlineMath matchgroup=contextMathDelim start='\$' skip='\\\\\|\\\$' end='\$' syn region contextDisplayMath matchgroup=contextMathDelim start='\$\$' skip='\\\\\|\\\$' end='\$\$' keepend syn region contextDisplayMath matchgroup=contextBlockDelim start='\\startformula' end='\\stopformula' contains=TOP # MetaFun b:mp_metafun = 1 syn include @mpTop syntax/mp.vim unlet b:current_syntax syn region contextMPGraphic matchgroup=contextBlockDelim \ start='\\start\z(MP\%(clip\|code\|definitions\|drawing\|environment\|extensions\|inclusions\|initializations\|page\|\)\)\>.*$' \ end='\\stop\z1' \ contains=@mpTop,@NoSpell syn region contextMPGraphic matchgroup=contextBlockDelim \ start='\\start\z(\%(\%[re]usable\|use\|unique\|static\)MPgraphic\|staticMPfigure\|uniqueMPpagegraphic\)\>.*$' \ end='\\stop\z1' \ contains=@mpTop,@NoSpell # Lua syn include @luaTop syntax/lua.vim unlet b:current_syntax syn region contextLuaCode matchgroup=contextBlockDelim \ start='\\startluacode\>' \ end='\\stopluacode\>' keepend \ contains=@luaTop,@NoSpell syn match contextDirectLua "\\\%(directlua\|ctxlua\)\>\%(\s*%.*$\)\=" \ nextgroup=contextBeginEndLua skipwhite skipempty \ contains=contextComment syn region contextBeginEndLua matchgroup=contextSpecial \ start="{" end="}" skip="\\[{}]" \ contained contains=@luaTop,@NoSpell for synname in keys(context_include) execute 'syn include @' .. synname .. 'Top' 'syntax/' .. synname .. '.vim' unlet b:current_syntax execute 'syn region context' .. context_include[synname] .. 'Code' \ 'matchgroup=contextBlockDelim' \ 'start=+\\start' .. context_include[synname] .. '\w*+' \ 'end=+\\stop' .. context_include[synname] .. '\w*+' \ 'contains=@' .. synname .. 'Top,@NoSpell' endfor syn match contextSectioning '\\\%(start\|stop\)\=\%(\%(sub\)*section\|\%(sub\)*subject\|chapter\|part\|component\|product\|title\)\>' contains=@NoSpell syn match contextSpecial '\\par\>\|-\{2,3}\||[<>/]\=|' contains=@NoSpell syn match contextSpecial /\\[`'"]/ syn match contextSpecial +\\char\%(\d\{1,3}\|'\o\{1,3}\|"\x\{1,2}\)\>+ contains=@NoSpell syn match contextSpecial '\^\^.' syn match contextSpecial '`\%(\\.\|\^\^.\|.\)' syn match contextStyle '\\\%(em\|ss\|hw\|cg\|mf\)\>' contains=@NoSpell syn match contextFont '\\\%(CAP\|Cap\|cap\|Caps\|kap\|nocap\)\>' contains=@NoSpell syn match contextFont '\\\%(Word\|WORD\|Words\|WORDS\)\>' contains=@NoSpell syn match contextFont '\\\%(vi\{1,3}\|ix\|xi\{0,2}\)\>' contains=@NoSpell syn match contextFont '\\\%(tf\|b[si]\|s[cl]\|os\)\%(xx\|[xabcd]\)\=\>' contains=@NoSpell hi def link contextBlockDelim Keyword hi def link contextBuiltin Keyword hi def link contextCommand Keyword hi def link contextComment Comment hi def link contextDelimiter Delimiter hi def link contextDirectLua Keyword hi def link contextEscaped String hi def link contextFont contextType hi def link contextKeyword Keyword hi def link contextInlineMath String hi def link contextMagicLine PreProc hi def link contextMathCmd Identifier hi def link contextMathDelim Delimiter hi def link contextOptions Typedef hi def link contextPreProc PreProc hi def link contextSectioning PreProc hi def link contextSequence Identifier hi def link contextSpecial Special hi def link contextStyle contextType hi def link contextTodo Todo hi def link contextType Type b:current_syntax = 'context' # vim: sw=2 fdm=marker