xref: /vim-8.2.3635/runtime/syntax/context.vim (revision 5f1920ad)
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