Update to the ConTeXt runtime files. Changes:
1. shared syntax files updated with `mtxrun --script interface --vim`
   using the latest ConTeXt LMTX.
2. fixed reference to `make` tag in the help file.
3. added `keepend` to mitigate issues with embedded Lua syntax (see
   below).
4. the latest revision date of each ConTeXt runtime file has been
   updated to the date of this commit.
The issue about embedded Lua was reported by a user:
>Take the following valid ConTeXt file:
>   \starttext
>   \ctxlua{context("Text generated from Lua.")}
>   \ctxlua{context("Another text generated from Lua.")}
>   \stoptext
>On my Vim installation (including when I start Vim with `--clean`), the
>closing bracket and curly braces on line 2 are highlighted red and the
>syntax highlighting after that is off.
>I was trying to dig a little bit into what was going on, using the
>`synID()` and `synIDattr()` functions. It appears that the closing
>bracket on line 2 is matched as a `luaParentError` instead of the end
>of the `luaParen` region. Therefore, the `luaParen` region continues
>all the way to the end of the file. The closing curly brace on line
>2 is matched as a `luaError`, the 2nd `\ctxlua` on line 3 as
>`luaParen`, etc.
>This issue doesn't occur in a plain Lua file, where the closing bracket
>is correctly matched as the end of the `luaParen` region. So it seems
>that something goes wrong when the Lua syntax file is included in the
>ConTeXt one.
By adding `keepend`, the right parenthesis for some reason is still
highlighted as a `luaParenError`, but at least the right curly brace
should correctly end the Lua block.
From what I've seen, I think it is very difficult to embed Lua syntax
properly without help from the Lua syntax file (that is, without
patching it). It has global rules such as:
   syn match  luaParenError ")"
   syn match  luaError "}"
which make it difficult, if not impossible, to contain Lua syntax
without `keepend` (and its limitations).
Signed-off-by: Lifepillar <lifepillar@lifepillar.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
		
	
		
			
				
	
	
		
			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:    2023 Dec 26
 | |
| 
 | |
| 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="\\[{}]" keepend
 | |
|       \ 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
 |