| vim9script |
| |
| # Vim syntax file |
| # Language: ConTeXt typesetting engine |
| # Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com> |
| # Former Maintainers: Nikolai Weibull <now@bitwi.se> |
| # 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 |