blob: c5bbbb472b388097ebf6df259127ef8ac3dc1d66 [file] [log] [blame]
Bram Moolenaare1f3fd12022-08-15 18:51:32 +01001vim9script
2
3# Vim syntax file
4# Language: ConTeXt typesetting engine
5# Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
6# Former Maintainers: Nikolai Weibull <now@bitwi.se>
Lifepillar0bca4a02023-12-27 18:49:50 +01007# Latest Revision: 2023 Dec 26
Bram Moolenaar42eeac32005-06-29 22:40:58 +00008
9if exists("b:current_syntax")
10 finish
11endif
12
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010013# Dictionary of (filetype, group) pairs to highlight between \startGROUP \stopGROUP.
14var context_include = get(b:, 'context_include', get(g:, 'context_include', {'xml': 'XML'}))
Bram Moolenaar57657d82006-04-21 22:12:41 +000015
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010016# Deprecation warning
17if type(context_include) ==# type([])
18 echomsg "[ConTeXt] b:context_include/g:context_include must be Dictionaries."
19 context_include = {'xml': 'XML'}
Bram Moolenaar57657d82006-04-21 22:12:41 +000020endif
Bram Moolenaar42eeac32005-06-29 22:40:58 +000021
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010022syn iskeyword @,48-57,_,!,?,a-z,A-Z,192-255
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020023
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010024syn spell toplevel
Bram Moolenaar25394022007-05-10 19:06:20 +000025
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010026runtime! syntax/shared/context-data-context.vim
27runtime! syntax/shared/context-data-interfaces.vim
28runtime! syntax/shared/context-data-tex.vim
Bram Moolenaar42eeac32005-06-29 22:40:58 +000029
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010030syn match contextCommand '\\\k\+\>' display contains=@NoSpell
31
32# ConTeXt options, i.e., [...] blocks
33syn region contextOptions matchgroup=contextDelimiter start='\[' end=']\|\ze\\stop' skip='\\\[\|\\\]' contains=TOP,@Spell
34
35# Highlight braces
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020036syn match contextDelimiter '[{}]'
37
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010038# Comments
39syn match contextComment '\%(\_^\|[^\\]\)\%(\\\\\)*\zs%.*$' display contains=contextTodo,contextMagicLine
40syn match contextComment '^\s*%[CDM].*$' display contains=contextTodo,contextMagicLine
41syn keyword contextTodo TODO FIXME XXX NOTE contained
42syn match contextMagicLine '^\s*%\s*!TEX.*$' contained
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020043
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010044syn match contextBlockDelim '\\\%(start\|stop\)\k\+' contains=@NoSpell
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020045
46syn region contextEscaped matchgroup=contextPreProc start='\\type\%(\s*\|\n\)*\z([^A-Za-z%]\)' end='\z1'
47syn region contextEscaped matchgroup=contextPreProc start='\\type\=\%(\s\|\n\)*{' end='}'
48syn region contextEscaped matchgroup=contextPreProc start='\\type\=\%(\s*\|\n\)*<<' end='>>'
Bram Moolenaar42eeac32005-06-29 22:40:58 +000049syn region contextEscaped matchgroup=contextPreProc
50 \ start='\\start\z(\a*\%(typing\|typen\)\)'
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010051 \ end='\\stop\z1' contains=contextComment keepend
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020052syn region contextEscaped matchgroup=contextPreProc start='\\\h\+Type\%(\s\|\n\)*{' end='}'
53syn region contextEscaped matchgroup=contextPreProc start='\\Typed\h\+\%(\s\|\n\)*{' end='}'
Bram Moolenaar42eeac32005-06-29 22:40:58 +000054
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010055syn match contextBuiltin '\\unexpanded\>' display contains=@NoSpell
Bram Moolenaar42eeac32005-06-29 22:40:58 +000056
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010057# \unprotect... \protect regions
58syn region contextUnprotect matchgroup=contextBuiltin start='\\unprotect' end='\\protect' contains=TOP
59syn match contextSequence '\\[a-zA-Z]*[@_!?]\+[a-zA-Z@_!?]*' contains=@NoSpell contained containedin=contextUnprotect
Bram Moolenaar57657d82006-04-21 22:12:41 +000060
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010061# Math
62syn match contextMathCmd '\\m\%(ath\%(ematics\)\=\)\=\>'
63syn region contextInlineMath matchgroup=contextMathDelim start='\$' skip='\\\\\|\\\$' end='\$'
64syn region contextDisplayMath matchgroup=contextMathDelim start='\$\$' skip='\\\\\|\\\$' end='\$\$' keepend
65syn region contextDisplayMath matchgroup=contextBlockDelim start='\\startformula' end='\\stopformula' contains=TOP
66
67# MetaFun
68b:mp_metafun = 1
69syn include @mpTop syntax/mp.vim
70unlet b:current_syntax
71
72syn region contextMPGraphic matchgroup=contextBlockDelim
73 \ start='\\start\z(MP\%(clip\|code\|definitions\|drawing\|environment\|extensions\|inclusions\|initializations\|page\|\)\)\>.*$'
74 \ end='\\stop\z1'
75 \ contains=@mpTop,@NoSpell
76syn region contextMPGraphic matchgroup=contextBlockDelim
77 \ start='\\start\z(\%(\%[re]usable\|use\|unique\|static\)MPgraphic\|staticMPfigure\|uniqueMPpagegraphic\)\>.*$'
78 \ end='\\stop\z1'
79 \ contains=@mpTop,@NoSpell
80
81# Lua
82syn include @luaTop syntax/lua.vim
83unlet b:current_syntax
84
85syn region contextLuaCode matchgroup=contextBlockDelim
86 \ start='\\startluacode\>'
87 \ end='\\stopluacode\>' keepend
88 \ contains=@luaTop,@NoSpell
89syn match contextDirectLua "\\\%(directlua\|ctxlua\)\>\%(\s*%.*$\)\="
90 \ nextgroup=contextBeginEndLua skipwhite skipempty
91 \ contains=contextComment
92syn region contextBeginEndLua matchgroup=contextSpecial
Lifepillar0bca4a02023-12-27 18:49:50 +010093 \ start="{" end="}" skip="\\[{}]" keepend
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010094 \ contained contains=@luaTop,@NoSpell
95
96for synname in keys(context_include)
97 execute 'syn include @' .. synname .. 'Top' 'syntax/' .. synname .. '.vim'
Bram Moolenaar57657d82006-04-21 22:12:41 +000098 unlet b:current_syntax
Bram Moolenaare1f3fd12022-08-15 18:51:32 +010099 execute 'syn region context' .. context_include[synname] .. 'Code'
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200100 \ 'matchgroup=contextBlockDelim'
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100101 \ 'start=+\\start' .. context_include[synname] .. '\w*+'
102 \ 'end=+\\stop' .. context_include[synname] .. '\w*+'
103 \ 'contains=@' .. synname .. 'Top,@NoSpell'
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200104endfor
105
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100106syn match contextSectioning '\\\%(start\|stop\)\=\%(\%(sub\)*section\|\%(sub\)*subject\|chapter\|part\|component\|product\|title\)\>' contains=@NoSpell
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000107
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100108syn match contextSpecial '\\par\>\|-\{2,3}\||[<>/]\=|' contains=@NoSpell
Bram Moolenaar57657d82006-04-21 22:12:41 +0000109syn match contextSpecial /\\[`'"]/
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100110syn match contextSpecial +\\char\%(\d\{1,3}\|'\o\{1,3}\|"\x\{1,2}\)\>+ contains=@NoSpell
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000111syn match contextSpecial '\^\^.'
112syn match contextSpecial '`\%(\\.\|\^\^.\|.\)'
113
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100114syn match contextStyle '\\\%(em\|ss\|hw\|cg\|mf\)\>' contains=@NoSpell
115syn match contextFont '\\\%(CAP\|Cap\|cap\|Caps\|kap\|nocap\)\>' contains=@NoSpell
116syn match contextFont '\\\%(Word\|WORD\|Words\|WORDS\)\>' contains=@NoSpell
117syn match contextFont '\\\%(vi\{1,3}\|ix\|xi\{0,2}\)\>' contains=@NoSpell
118syn match contextFont '\\\%(tf\|b[si]\|s[cl]\|os\)\%(xx\|[xabcd]\)\=\>' contains=@NoSpell
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000119
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000120hi def link contextBlockDelim Keyword
121hi def link contextBuiltin Keyword
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100122hi def link contextCommand Keyword
123hi def link contextComment Comment
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000124hi def link contextDelimiter Delimiter
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100125hi def link contextDirectLua Keyword
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200126hi def link contextEscaped String
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100127hi def link contextFont contextType
128hi def link contextKeyword Keyword
129hi def link contextInlineMath String
130hi def link contextMagicLine PreProc
131hi def link contextMathCmd Identifier
132hi def link contextMathDelim Delimiter
133hi def link contextOptions Typedef
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000134hi def link contextPreProc PreProc
135hi def link contextSectioning PreProc
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100136hi def link contextSequence Identifier
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000137hi def link contextSpecial Special
138hi def link contextStyle contextType
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100139hi def link contextTodo Todo
140hi def link contextType Type
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000141
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100142b:current_syntax = 'context'
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000143
Bram Moolenaare1f3fd12022-08-15 18:51:32 +0100144# vim: sw=2 fdm=marker