context.vim 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. " Vim syntax file
  2. " 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
  6. if exists("b:current_syntax")
  7. finish
  8. endif
  9. runtime! syntax/plaintex.vim
  10. unlet b:current_syntax
  11. let s:cpo_save = &cpo
  12. set cpo&vim
  13. " Dictionary of (filetype, group) pairs to highlight between \startGROUP \stopGROUP.
  14. let s:context_include = get(b:, 'context_include', get(g:, 'context_include', {'xml': 'XML'}))
  15. " For backward compatibility (g:context_include used to be a List)
  16. if type(s:context_include) ==# type([])
  17. let g:context_metapost = (index(s:context_include, 'mp') != -1)
  18. let s:context_include = filter(
  19. \ {'c': 'C', 'javascript': 'JS', 'ruby': 'Ruby', 'xml': 'XML'},
  20. \ { k,_ -> index(s:context_include, k) != -1 }
  21. \ )
  22. endif
  23. syn iskeyword @,48-57,a-z,A-Z,192-255
  24. syn spell toplevel
  25. " ConTeXt options, i.e., [...] blocks
  26. syn region contextOptions matchgroup=contextDelimiter start='\[' end=']\|\ze\\stop' skip='\\\[\|\\\]' contains=ALLBUT,contextBeginEndLua,@Spell
  27. " Highlight braces
  28. syn match contextDelimiter '[{}]'
  29. " Comments
  30. syn match contextComment '\\\@<!\%(\\\\\)*\zs%.*$' display contains=initexTodo
  31. syn match contextComment '^\s*%[CDM].*$' display contains=initexTodo
  32. syn match contextBlockDelim '\\\%(start\|stop\)\a\+' contains=@NoSpell
  33. syn region contextEscaped matchgroup=contextPreProc start='\\type\%(\s*\|\n\)*\z([^A-Za-z%]\)' end='\z1'
  34. syn region contextEscaped matchgroup=contextPreProc start='\\type\=\%(\s\|\n\)*{' end='}'
  35. syn region contextEscaped matchgroup=contextPreProc start='\\type\=\%(\s*\|\n\)*<<' end='>>'
  36. syn region contextEscaped matchgroup=contextPreProc
  37. \ start='\\start\z(\a*\%(typing\|typen\)\)'
  38. \ end='\\stop\z1' contains=plaintexComment keepend
  39. syn region contextEscaped matchgroup=contextPreProc start='\\\h\+Type\%(\s\|\n\)*{' end='}'
  40. syn region contextEscaped matchgroup=contextPreProc start='\\Typed\h\+\%(\s\|\n\)*{' end='}'
  41. syn match contextBuiltin display contains=@NoSpell
  42. \ '\\\%(unprotect\|protect\|unexpanded\)\>'
  43. syn match contextPreProc '^\s*\\\%(start\|stop\)\=\%(component\|environment\|project\|product\)\>'
  44. \ contains=@NoSpell
  45. if get(b:, 'context_metapost', get(g:, 'context_metapost', 1))
  46. let b:mp_metafun_macros = 1 " Highlight MetaFun keywords
  47. syn include @mpTop syntax/mp.vim
  48. unlet b:current_syntax
  49. syn region contextMPGraphic matchgroup=contextBlockDelim
  50. \ start='\\start\z(MP\%(clip\|code\|definitions\|drawing\|environment\|extensions\|inclusions\|initializations\|page\|\)\)\>.*$'
  51. \ end='\\stop\z1'
  52. \ contains=@mpTop,@NoSpell
  53. syn region contextMPGraphic matchgroup=contextBlockDelim
  54. \ start='\\start\z(\%(\%[re]usable\|use\|unique\|static\)MPgraphic\|staticMPfigure\|uniqueMPpagegraphic\)\>.*$'
  55. \ end='\\stop\z1'
  56. \ contains=@mpTop,@NoSpell
  57. endif
  58. if get(b:, 'context_lua', get(g:, 'context_lua', 1))
  59. syn include @luaTop syntax/lua.vim
  60. unlet b:current_syntax
  61. syn region contextLuaCode matchgroup=contextBlockDelim
  62. \ start='\\startluacode\>'
  63. \ end='\\stopluacode\>' keepend
  64. \ contains=@luaTop,@NoSpell
  65. syn match contextDirectLua "\\\%(directlua\|ctxlua\)\>\%(\s*%.*$\)\="
  66. \ nextgroup=contextBeginEndLua skipwhite skipempty
  67. \ contains=initexComment
  68. syn region contextBeginEndLua matchgroup=contextSpecial
  69. \ start="{" end="}" skip="\\[{}]"
  70. \ contained contains=@luaTop,@NoSpell
  71. endif
  72. for synname in keys(s:context_include)
  73. execute 'syn include @' . synname . 'Top' 'syntax/' . synname . '.vim'
  74. unlet b:current_syntax
  75. execute 'syn region context' . s:context_include[synname] . 'Code'
  76. \ 'matchgroup=contextBlockDelim'
  77. \ 'start=+\\start' . s:context_include[synname] . '+'
  78. \ 'end=+\\stop' . s:context_include[synname] . '+'
  79. \ 'contains=@' . synname . 'Top,@NoSpell'
  80. endfor
  81. syn match contextSectioning '\\\%(start\|stop\)\=\%(\%(sub\)*section\|\%(sub\)*subject\|chapter\|part\|component\|product\|title\)\>'
  82. \ contains=@NoSpell
  83. syn match contextSpecial '\\crlf\>\|\\par\>\|-\{2,3}\||[<>/]\=|'
  84. \ contains=@NoSpell
  85. syn match contextSpecial /\\[`'"]/
  86. syn match contextSpecial +\\char\%(\d\{1,3}\|'\o\{1,3}\|"\x\{1,2}\)\>+
  87. \ contains=@NoSpell
  88. syn match contextSpecial '\^\^.'
  89. syn match contextSpecial '`\%(\\.\|\^\^.\|.\)'
  90. syn match contextStyle '\\\%(em\|ss\|hw\|cg\|mf\)\>'
  91. \ contains=@NoSpell
  92. syn match contextFont '\\\%(CAP\|Cap\|cap\|Caps\|kap\|nocap\)\>'
  93. \ contains=@NoSpell
  94. syn match contextFont '\\\%(Word\|WORD\|Words\|WORDS\)\>'
  95. \ contains=@NoSpell
  96. syn match contextFont '\\\%(vi\{1,3}\|ix\|xi\{0,2}\)\>'
  97. \ contains=@NoSpell
  98. syn match contextFont '\\\%(tf\|b[si]\|s[cl]\|os\)\%(xx\|[xabcd]\)\=\>'
  99. \ contains=@NoSpell
  100. hi def link contextOptions Typedef
  101. hi def link contextComment Comment
  102. hi def link contextBlockDelim Keyword
  103. hi def link contextBuiltin Keyword
  104. hi def link contextDelimiter Delimiter
  105. hi def link contextEscaped String
  106. hi def link contextPreProc PreProc
  107. hi def link contextSectioning PreProc
  108. hi def link contextSpecial Special
  109. hi def link contextType Type
  110. hi def link contextStyle contextType
  111. hi def link contextFont contextType
  112. hi def link contextDirectLua Keyword
  113. let b:current_syntax = "context"
  114. let &cpo = s:cpo_save
  115. unlet s:cpo_save