forked from aniani/vim
		
	
		
			
				
	
	
		
			145 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
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
 |