blob: b29f256baacde091197949d1499942302b09dd13 [file] [log] [blame]
Bram Moolenaar42eeac32005-06-29 22:40:58 +00001" Vim syntax file
Bram Moolenaar46fceaa2016-10-23 21:21:08 +02002" Language: ConTeXt typesetting engine
3" Maintainer: Nicola Vitacolonna <nvitacolonna@gmail.com>
4" Former Maintainers: Nikolai Weibull <now@bitwi.se>
5" Latest Revision: 2016 Oct 16
Bram Moolenaar42eeac32005-06-29 22:40:58 +00006
7if exists("b:current_syntax")
8 finish
9endif
10
Bram Moolenaar57657d82006-04-21 22:12:41 +000011runtime! syntax/plaintex.vim
Bram Moolenaar25394022007-05-10 19:06:20 +000012unlet b:current_syntax
Bram Moolenaar57657d82006-04-21 22:12:41 +000013
Bram Moolenaar42eeac32005-06-29 22:40:58 +000014let s:cpo_save = &cpo
15set cpo&vim
16
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020017" 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 \ )
Bram Moolenaar57657d82006-04-21 22:12:41 +000027endif
Bram Moolenaar42eeac32005-06-29 22:40:58 +000028
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020029syn iskeyword @,48-57,a-z,A-Z,192-255
30
Bram Moolenaar25394022007-05-10 19:06:20 +000031syn spell toplevel
32
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020033" ConTeXt options, i.e., [...] blocks
34syn region contextOptions matchgroup=contextDelimiter start='\[' end=']\|\ze\\stop' skip='\\\[\|\\\]' contains=ALLBUT,contextBeginEndLua,@Spell
Bram Moolenaar42eeac32005-06-29 22:40:58 +000035
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020036" 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='>>'
Bram Moolenaar42eeac32005-06-29 22:40:58 +000048syn region contextEscaped matchgroup=contextPreProc
49 \ start='\\start\z(\a*\%(typing\|typen\)\)'
Bram Moolenaar25394022007-05-10 19:06:20 +000050 \ end='\\stop\z1' contains=plaintexComment keepend
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020051syn region contextEscaped matchgroup=contextPreProc start='\\\h\+Type\%(\s\|\n\)*{' end='}'
52syn region contextEscaped matchgroup=contextPreProc start='\\Typed\h\+\%(\s\|\n\)*{' end='}'
Bram Moolenaar42eeac32005-06-29 22:40:58 +000053
Bram Moolenaar57657d82006-04-21 22:12:41 +000054syn match contextBuiltin display contains=@NoSpell
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020055 \ '\\\%(unprotect\|protect\|unexpanded\)\>'
Bram Moolenaar42eeac32005-06-29 22:40:58 +000056
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020057syn match contextPreProc '^\s*\\\%(start\|stop\)\=\%(component\|environment\|project\|product\)\>'
Bram Moolenaar42eeac32005-06-29 22:40:58 +000058 \ contains=@NoSpell
Bram Moolenaar57657d82006-04-21 22:12:41 +000059
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020060if get(b:, 'context_metapost', get(g:, 'context_metapost', 1))
61 let b:mp_metafun_macros = 1 " Highlight MetaFun keywords
Bram Moolenaar57657d82006-04-21 22:12:41 +000062 syn include @mpTop syntax/mp.vim
63 unlet b:current_syntax
64
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020065 syn region contextMPGraphic matchgroup=contextBlockDelim
66 \ start='\\start\z(MP\%(clip\|code\|definitions\|drawing\|environment\|extensions\|inclusions\|initializations\|page\|\)\)\>.*$'
Bram Moolenaar57657d82006-04-21 22:12:41 +000067 \ end='\\stop\z1'
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020068 \ 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
Bram Moolenaar57657d82006-04-21 22:12:41 +000073endif
74
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020075if get(b:, 'context_lua', get(g:, 'context_lua', 1))
76 syn include @luaTop syntax/lua.vim
77 unlet b:current_syntax
Bram Moolenaar57657d82006-04-21 22:12:41 +000078
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020079 syn region contextLuaCode matchgroup=contextBlockDelim
80 \ start='\\startluacode\>'
81 \ end='\\stopluacode\>' keepend
82 \ contains=@luaTop,@NoSpell
Bram Moolenaar42eeac32005-06-29 22:40:58 +000083
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020084 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
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000104
105syn match contextSpecial '\\crlf\>\|\\par\>\|-\{2,3}\||[<>/]\=|'
106 \ contains=@NoSpell
Bram Moolenaar57657d82006-04-21 22:12:41 +0000107syn match contextSpecial /\\[`'"]/
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000108syn match contextSpecial +\\char\%(\d\{1,3}\|'\o\{1,3}\|"\x\{1,2}\)\>+
109 \ contains=@NoSpell
110syn match contextSpecial '\^\^.'
111syn match contextSpecial '`\%(\\.\|\^\^.\|.\)'
112
Bram Moolenaar57657d82006-04-21 22:12:41 +0000113syn match contextStyle '\\\%(em\|ss\|hw\|cg\|mf\)\>'
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000114 \ 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
Bram Moolenaar57657d82006-04-21 22:12:41 +0000121syn match contextFont '\\\%(tf\|b[si]\|s[cl]\|os\)\%(xx\|[xabcd]\)\=\>'
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000122 \ contains=@NoSpell
123
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200124hi def link contextOptions Typedef
125hi def link contextComment Comment
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000126hi def link contextBlockDelim Keyword
127hi def link contextBuiltin Keyword
128hi def link contextDelimiter Delimiter
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200129hi def link contextEscaped String
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000130hi def link contextPreProc PreProc
131hi def link contextSectioning PreProc
132hi def link contextSpecial Special
Bram Moolenaar57657d82006-04-21 22:12:41 +0000133hi def link contextType Type
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000134hi def link contextStyle contextType
135hi def link contextFont contextType
Bram Moolenaar46fceaa2016-10-23 21:21:08 +0200136hi def link contextDirectLua Keyword
Bram Moolenaar42eeac32005-06-29 22:40:58 +0000137
138let b:current_syntax = "context"
139
140let &cpo = s:cpo_save
141unlet s:cpo_save