diff options
Diffstat (limited to 'autoload/vimtex/syntax')
32 files changed, 1430 insertions, 0 deletions
| diff --git a/autoload/vimtex/syntax/load.vim b/autoload/vimtex/syntax/load.vim new file mode 100644 index 00000000..d1b8b09b --- /dev/null +++ b/autoload/vimtex/syntax/load.vim @@ -0,0 +1,82 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#load#general() abort " {{{1 +  " I don't see why we can't match Math zones in the MatchNMGroup +  if !exists('g:tex_no_math') +    syntax cluster texMatchNMGroup add=@texMathZones +  endif + +  " Todo elements +  syntax match texStatement '\\todo\w*' contains=texTodo +  syntax match texTodo '\\todo\w*' + +  " Fix strange mistake in main syntax file where \usepackage is added to the +  " texInputFile group +  syntax match texDocType /\\usepackage\>/ +        \ nextgroup=texBeginEndName,texDocTypeArgs + +  " Improve support for italic font, bold font and some conceals +  if get(g:, 'tex_fast', 'b') =~# 'b' +    let s:conceal = (has('conceal') && get(g:, 'tex_conceal', 'b') =~# 'b') +          \ ? 'concealends' : '' + +    for [s:style, s:group, s:commands] in [ +          \ ['texItalStyle', 'texItalGroup', ['emph', 'textit']], +          \ ['texBoldStyle', 'texBoldGroup', ['textbf']], +          \] +      for s:cmd in s:commands +        execute 'syntax region' s:style 'matchgroup=texTypeStyle' +              \ 'start="\\' . s:cmd . '\s*{" end="}"' +              \ 'contains=@Spell,@' . s:group +              \ s:conceal +      endfor +      execute 'syntax cluster texMatchGroup add=' . s:style +    endfor +  endif + +  " Allow arguments in newenvironments +  syntax region texEnvName contained matchgroup=Delimiter +        \ start="{"rs=s+1  end="}" +        \ nextgroup=texEnvBgn,texEnvArgs contained skipwhite skipnl +  syntax region texEnvArgs contained matchgroup=Delimiter +        \ start="\["rs=s+1 end="]" +        \ nextgroup=texEnvBgn,texEnvArgs skipwhite skipnl +  syntax cluster texEnvGroup add=texDefParm,texNewEnv,texComment + +  " Add support for \renewenvironment and \renewcommand +  syntax match texNewEnv "\\renewenvironment\>" +        \ nextgroup=texEnvName skipwhite skipnl +  syntax match texNewCmd "\\renewcommand\>" +        \ nextgroup=texCmdName skipwhite skipnl + +  " Match nested DefParms +  syntax match texDefParmNested contained "##\+\d\+" +  highlight def link texDefParmNested Identifier +  syntax cluster texEnvGroup add=texDefParmNested +  syntax cluster texCmdGroup add=texDefParmNested +endfunction + +" }}}1 +function! vimtex#syntax#load#packages() abort " {{{1 +  try +    call vimtex#syntax#p#{b:vimtex.documentclass}#load() +  catch /E117:/ +  endtry + +  for l:pkg in map(keys(b:vimtex.packages), "substitute(v:val, '-', '_', 'g')") +    try +      call vimtex#syntax#p#{l:pkg}#load() +    catch /E117:/ +    endtry +  endfor +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/misc.vim b/autoload/vimtex/syntax/misc.vim new file mode 100644 index 00000000..633a1d75 --- /dev/null +++ b/autoload/vimtex/syntax/misc.vim @@ -0,0 +1,92 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#misc#add_to_section_clusters(group) abort " {{{1 +  for l:cluster in [ +        \ 'texPartGroup', +        \ 'texChapterGroup', +        \ 'texSectionGroup', +        \ 'texSubSectionGroup', +        \ 'texSubSubSectionGroup', +        \ 'texParaGroup', +        \] +    execute printf('syntax cluster %s add=%s', l:cluster, a:group) +  endfor + +  execute printf('syntax cluster texVimtexGlobal add=%s', a:group) +endfunction + +" }}}1 +function! vimtex#syntax#misc#include(name) abort " {{{1 +  let l:inc_name = 'vimtex_nested_' . a:name + +  if !has_key(s:included, l:inc_name) +    let s:included[l:inc_name] = s:include(l:inc_name, a:name) +  endif + +  return s:included[l:inc_name] ? l:inc_name : '' +endfunction + +" }}}1 +function! vimtex#syntax#misc#include_reset() abort " {{{1 +  let s:included = {'vimtex_nested_tex': 0} +endfunction + +let s:included = {'vimtex_nested_tex': 0} + +" }}}1 +function! vimtex#syntax#misc#new_math_zone(sfx, mathzone, starred) abort " {{{1 +  " This function is based on Charles E. Campbell's amsmath.vba file 2018-06-29 + +  if get(g:, 'tex_fast', 'M') !~# 'M' | return | endif + +  let foldcmd = get(g:, 'tex_fold_enabled') ? ' fold' : '' + +  let grp = 'texMathZone' . a:sfx +  execute 'syntax cluster texMathZones add=' . grp +  execute 'syntax region ' . grp +        \ . ' start=''\\begin\s*{\s*' . a:mathzone . '\s*}''' +        \ . ' end=''\\end\s*{\s*' . a:mathzone . '\s*}''' +        \ . foldcmd . ' keepend contains=@texMathZoneGroup' +  execute 'highlight def link '.grp.' texMath' + +  if a:starred +    let grp .= 'S' +    execute 'syntax cluster texMathZones add=' . grp +    execute 'syntax region ' . grp +          \ . ' start=''\\begin\s*{\s*' . a:mathzone . '\*\s*}''' +          \ . ' end=''\\end\s*{\s*' . a:mathzone . '\*\s*}''' +          \ . foldcmd . ' keepend contains=@texMathZoneGroup' +    execute 'highlight def link '.grp.' texMath' +  endif + +  execute 'syntax match texBadMath ''\\end\s*{\s*' . a:mathzone . '\*\=\s*}''' +endfunction + +" }}}1 + +function! s:include(cluster, name) abort " {{{1 +  let l:name = get(g:vimtex_syntax_nested.aliases, a:name, a:name) +  let l:path = 'syntax/' . l:name . '.vim' + +  if empty(globpath(&runtimepath, l:path)) | return 0 | endif + +  unlet b:current_syntax +  execute 'syntax include @' . a:cluster l:path +  let b:current_syntax = 'tex' + +  for l:ignored_group in get(g:vimtex_syntax_nested.ignored, l:name, []) +    execute 'syntax cluster' a:cluster 'remove=' . l:ignored_group +  endfor + +  return 1 +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/amsmath.vim b/autoload/vimtex/syntax/p/amsmath.vim new file mode 100644 index 00000000..d202d140 --- /dev/null +++ b/autoload/vimtex/syntax/p/amsmath.vim @@ -0,0 +1,47 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +scriptencoding utf-8 + +function! vimtex#syntax#p#amsmath#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'amsmath') | return | endif +  let b:vimtex_syntax.amsmath = 1 + +  " Allow subequations (fixes #1019) +  " - This should be temporary, as it seems subequations is erroneously part of +  "   texBadMath from Charles Campbell's syntax plugin. +  syntax match texBeginEnd +        \ "\(\\begin\>\|\\end\>\)\ze{subequations}" +        \ nextgroup=texBeginEndName + +  call vimtex#syntax#misc#new_math_zone('AmsA', 'align', 1) +  call vimtex#syntax#misc#new_math_zone('AmsB', 'alignat', 1) +  call vimtex#syntax#misc#new_math_zone('AmsD', 'flalign', 1) +  call vimtex#syntax#misc#new_math_zone('AmsC', 'gather', 1) +  call vimtex#syntax#misc#new_math_zone('AmsD', 'multline', 1) +  call vimtex#syntax#misc#new_math_zone('AmsE', 'xalignat', 1) +  call vimtex#syntax#misc#new_math_zone('AmsF', 'xxalignat', 0) +  call vimtex#syntax#misc#new_math_zone('AmsG', 'mathpar', 1) + +  " Amsmath [lr][vV]ert  (Holger Mitschke) +  if has('conceal') && &enc ==# 'utf-8' && get(g:, 'tex_conceal', 'd') =~# 'd' +    for l:texmath in [ +          \ ['\\lvert', '|'] , +          \ ['\\rvert', '|'] , +          \ ['\\lVert', '‖'] , +          \ ['\\rVert', '‖'] , +          \ ] +        execute "syntax match texMathDelim '\\\\[bB]igg\\=[lr]\\=" +              \ . l:texmath[0] . "' contained conceal cchar=" . l:texmath[1] +    endfor +  endif +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/array.vim b/autoload/vimtex/syntax/p/array.vim new file mode 100644 index 00000000..bc45e79b --- /dev/null +++ b/autoload/vimtex/syntax/p/array.vim @@ -0,0 +1,35 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#array#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'array') | return | endif +  let b:vimtex_syntax.array = 1 + +  call vimtex#syntax#p#tabularx#load() +  if !get(g:, 'tex_fast', 'M') =~# 'M' | return | endif + +  " +  " The following code changes inline math so as to support the column +  " specifiers [0], e.g. +  " +  "   \begin{tabular}{*{3}{>{$}c<{$}}} +  " +  " [0]: https://en.wikibooks.org/wiki/LaTeX/Tables#Column_specification_using_.3E.7B.5Ccmd.7D_and_.3C.7B.5Ccmd.7D +  " + +  syntax clear texMathZoneX +  if has('conceal') && &enc ==# 'utf-8' && get(g:, 'tex_conceal', 'd') =~# 'd' +    syntax region texMathZoneX matchgroup=Delimiter start="\([<>]{\)\@<!\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup +  else +    syntax region texMathZoneX matchgroup=Delimiter start="\([<>]{\)\@<!\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup +  endif +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/asymptote.vim b/autoload/vimtex/syntax/p/asymptote.vim new file mode 100644 index 00000000..137c3890 --- /dev/null +++ b/autoload/vimtex/syntax/p/asymptote.vim @@ -0,0 +1,34 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#asymptote#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'asymptote') | return | endif +  let b:vimtex_syntax.asymptote = 1 + +  call vimtex#syntax#misc#add_to_section_clusters('texZoneAsymptote') + +  if !empty(vimtex#syntax#misc#include('asy')) +    syntax region texZoneAsymptote +          \ start='\\begin{asy\z(def\)\?}'rs=s +          \ end='\\end{asy\z1}'re=e +          \ keepend +          \ transparent +          \ contains=texBeginEnd,@vimtex_nested_asy +  else +    syntax region texZoneAsymptote +          \ start='\\begin{asy\z(def\)\?}'rs=s +          \ end='\\end{asy\z1}'re=e +          \ keepend +          \ contains=texBeginEnd +    highlight def link texZoneAsymptote texZone +  endif +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/beamer.vim b/autoload/vimtex/syntax/p/beamer.vim new file mode 100644 index 00000000..341c229c --- /dev/null +++ b/autoload/vimtex/syntax/p/beamer.vim @@ -0,0 +1,32 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#beamer#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'beamer') | return | endif +  let b:vimtex_syntax.beamer = 1 + +  syntax match texBeamerDelimiter '<\|>' contained +  syntax match texBeamerOpt '<[^>]*>' contained contains=texBeamerDelimiter + +  syntax match texStatementBeamer '\\only\(<[^>]*>\)\?' contains=texBeamerOpt +  syntax match texStatementBeamer '\\item<[^>]*>' contains=texBeamerOpt + +  syntax match texInputFile +        \ '\\includegraphics<[^>]*>\(\[.\{-}\]\)\=\s*{.\{-}}' +        \ contains=texStatement,texBeamerOpt,texInputCurlies,texInputFileOpt + +  call vimtex#syntax#misc#add_to_section_clusters('texStatementBeamer') + +  highlight link texStatementBeamer texStatement +  highlight link texBeamerOpt Identifier +  highlight link texBeamerDelimiter Delimiter +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/biblatex.vim b/autoload/vimtex/syntax/p/biblatex.vim new file mode 100644 index 00000000..1c620d6c --- /dev/null +++ b/autoload/vimtex/syntax/p/biblatex.vim @@ -0,0 +1,84 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#biblatex#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'biblatex') | return | endif +  let b:vimtex_syntax.biblatex = 1 + +  if get(g:, 'tex_fast', 'r') !~# 'r' | return | endif + +  for l:pattern in [ +        \ 'bibentry', +        \ 'cite[pt]?\*?', +        \ 'citeal[tp]\*?', +        \ 'cite(num|text|url)', +        \ '[Cc]ite%(title|author|year(par)?|date)\*?', +        \ '[Pp]arencite\*?', +        \ 'foot%(full)?cite%(text)?', +        \ 'fullcite', +        \ '[Tt]extcite', +        \ '[Ss]martcite', +        \ 'supercite', +        \ '[Aa]utocite\*?', +        \ '[Ppf]?[Nn]otecite', +        \ '%(text|block)cquote\*?', +        \] +    execute 'syntax match texStatement' +          \ '/\v\\' . l:pattern . '\ze\s*%(\[|\{)/' +          \ 'nextgroup=texRefOption,texCite' +  endfor + +  for l:pattern in [ +        \ '[Cc]ites', +        \ '[Pp]arencites', +        \ 'footcite%(s|texts)', +        \ '[Tt]extcites', +        \ '[Ss]martcites', +        \ 'supercites', +        \ '[Aa]utocites', +        \ '[pPfFsStTaA]?[Vv]olcites?', +        \ 'cite%(field|list|name)', +        \] +    execute 'syntax match texStatement' +          \ '/\v\\' . l:pattern . '\ze\s*%(\[|\{)/' +          \ 'nextgroup=texRefOptions,texCites' +  endfor + +  for l:pattern in [ +        \ '%(foreign|hyphen)textcquote\*?', +        \ '%(foreign|hyphen)blockcquote', +        \ 'hybridblockcquote', +        \] +    execute 'syntax match texStatement' +          \ '/\v\\' . l:pattern . '\ze\s*%(\[|\{)/' +          \ 'nextgroup=texQuoteLang' +  endfor + +  syntax region texRefOptions contained matchgroup=Delimiter +        \ start='\[' end=']' +        \ contains=@texRefGroup,texRefZone +        \ nextgroup=texRefOptions,texCites + +  syntax region texCites contained matchgroup=Delimiter +        \ start='{' end='}' +        \ contains=@texRefGroup,texRefZone,texCites +        \ nextgroup=texRefOptions,texCites + +  syntax region texQuoteLang contained matchgroup=Delimiter +        \ start='{' end='}' +        \ transparent +        \ contains=@texMatchGroup +        \ nextgroup=texRefOption,texCite + +  highlight def link texRefOptions texRefOption +  highlight def link texCites texCite +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/breqn.vim b/autoload/vimtex/syntax/p/breqn.vim new file mode 100644 index 00000000..ab81db2f --- /dev/null +++ b/autoload/vimtex/syntax/p/breqn.vim @@ -0,0 +1,23 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +scriptencoding utf-8 + +function! vimtex#syntax#p#breqn#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'breqn') | return | endif +  let b:vimtex_syntax.breqn = 1 + +  call vimtex#syntax#misc#new_math_zone('BreqnA', 'dmath', 1) +  call vimtex#syntax#misc#new_math_zone('BreqnB', 'dseries', 1) +  call vimtex#syntax#misc#new_math_zone('BreqnC', 'dgroup', 1) +  call vimtex#syntax#misc#new_math_zone('BreqnD', 'darray', 1) +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/cases.vim b/autoload/vimtex/syntax/p/cases.vim new file mode 100644 index 00000000..383cd8a7 --- /dev/null +++ b/autoload/vimtex/syntax/p/cases.vim @@ -0,0 +1,20 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +scriptencoding utf-8 + +function! vimtex#syntax#p#cases#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'cases') | return | endif +  let b:vimtex_syntax.cases = 1 + +  call VimtexNewMathZone('E', '\(sub\)\?numcases', 0) +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/cleveref.vim b/autoload/vimtex/syntax/p/cleveref.vim new file mode 100644 index 00000000..1066e4ab --- /dev/null +++ b/autoload/vimtex/syntax/p/cleveref.vim @@ -0,0 +1,44 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#cleveref#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'cleveref') | return | endif +  let b:vimtex_syntax.cleveref = 1 +  if get(g:, 'tex_fast', 'r') !~# 'r' | return | endif + +  syntax match texStatement '\\\(\(label\)\?c\(page\)\?\|C\|auto\)ref\>' +        \ nextgroup=texCRefZone + +  " \crefrange, \cpagerefrange (these commands expect two arguments) +  syntax match texStatement '\\c\(page\)\?refrange\>' +        \ nextgroup=texCRefZoneRange skipwhite skipnl + +  " \label[xxx]{asd} +  syntax match texStatement '\\label\[.\{-}\]' +        \ nextgroup=texCRefZone skipwhite skipnl +        \ contains=texCRefLabelOpts + +  syntax region texCRefZone contained matchgroup=Delimiter +        \ start="{" end="}" +        \ contains=@texRefGroup,texRefZone +  syntax region texCRefZoneRange contained matchgroup=Delimiter +        \ start="{" end="}" +        \ contains=@texRefGroup,texRefZone +        \ nextgroup=texCRefZone skipwhite skipnl +  syntax region texCRefLabelOpts contained matchgroup=Delimiter +        \ start='\[' end=']' +        \ contains=@texRefGroup,texRefZone + +  highlight link texCRefZone      texRefZone +  highlight link texCRefZoneRange texRefZone +  highlight link texCRefLabelOpts texCmdArgs +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/csquotes.vim b/autoload/vimtex/syntax/p/csquotes.vim new file mode 100644 index 00000000..1bcfb740 --- /dev/null +++ b/autoload/vimtex/syntax/p/csquotes.vim @@ -0,0 +1,18 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#csquotes#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'csquotes') | return | endif +  let b:vimtex_syntax.csquotes = 1 + +  call vimtex#syntax#p#biblatex#load() +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/dot2texi.vim b/autoload/vimtex/syntax/p/dot2texi.vim new file mode 100644 index 00000000..881c2397 --- /dev/null +++ b/autoload/vimtex/syntax/p/dot2texi.vim @@ -0,0 +1,25 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#dot2texi#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'dot2texi') | return | endif +  let b:vimtex_syntax.dot2texi = 1 + +  call vimtex#syntax#misc#include('dot') +  call vimtex#syntax#misc#add_to_section_clusters('texZoneDot') +  syntax region texZoneDot +        \ start="\\begin{dot2tex}"rs=s +        \ end="\\end{dot2tex}"re=e +        \ keepend +        \ transparent +        \ contains=texBeginEnd,@vimtex_nested_dot +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/glossaries.vim b/autoload/vimtex/syntax/p/glossaries.vim new file mode 100644 index 00000000..259919cb --- /dev/null +++ b/autoload/vimtex/syntax/p/glossaries.vim @@ -0,0 +1,20 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +scriptencoding utf-8 + +function! vimtex#syntax#p#glossaries#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'glossaries') | return | endif +  let b:vimtex_syntax.glossaries = 1 + +  " Currently nothing here +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/glossaries_extra.vim b/autoload/vimtex/syntax/p/glossaries_extra.vim new file mode 100644 index 00000000..4a6d29f2 --- /dev/null +++ b/autoload/vimtex/syntax/p/glossaries_extra.vim @@ -0,0 +1,21 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +scriptencoding utf-8 + +function! vimtex#syntax#p#glossaries_extra#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'glossaries_extra') | return | endif +  let b:vimtex_syntax.glossaries_extra = 1 + +  " Load amsmath +  call vimtex#syntax#p#glossaries#load() +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/gnuplottex.vim b/autoload/vimtex/syntax/p/gnuplottex.vim new file mode 100644 index 00000000..7ecaee54 --- /dev/null +++ b/autoload/vimtex/syntax/p/gnuplottex.vim @@ -0,0 +1,25 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#gnuplottex#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'gnuplottex') | return | endif +  let b:vimtex_syntax.gnuplottex = 1 + +  call vimtex#syntax#misc#include('gnuplot') +  call vimtex#syntax#misc#add_to_section_clusters('texZoneGnuplot') +  syntax region texZoneGnuplot +        \ start='\\begin{gnuplot}\(\_s*\[\_[\]]\{-}\]\)\?'rs=s +        \ end='\\end{gnuplot}'re=e +        \ keepend +        \ transparent +        \ contains=texBeginEnd,texBeginEndModifier,@vimtex_nested_gnuplot +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/hyperref.vim b/autoload/vimtex/syntax/p/hyperref.vim new file mode 100644 index 00000000..2eb1cf19 --- /dev/null +++ b/autoload/vimtex/syntax/p/hyperref.vim @@ -0,0 +1,35 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#hyperref#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'hyperref') | return | endif +  let b:vimtex_syntax.hyperref = 1 + +  syntax match texStatement '\\url\ze[^\ta-zA-Z]' nextgroup=texUrlVerb +  syntax region texUrlVerb matchgroup=Delimiter +        \ start='\z([^\ta-zA-Z]\)' end='\z1' contained + +  syntax match texStatement '\\url\ze\s*{' nextgroup=texUrl +  syntax region texUrl     matchgroup=Delimiter start='{' end='}' contained + +  syntax match texStatement '\\href' nextgroup=texHref +  syntax region texHref matchgroup=Delimiter start='{' end='}' contained +        \ nextgroup=texMatcher + +  syntax match texStatement '\\hyperref' nextgroup=texHyperref +  syntax region texHyperref matchgroup=Delimiter start='\[' end='\]' contained + +  highlight link texUrl          Function +  highlight link texUrlVerb      texUrl +  highlight link texHref         texUrl +  highlight link texHyperref     texRefZone +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/listings.vim b/autoload/vimtex/syntax/p/listings.vim new file mode 100644 index 00000000..81c7da24 --- /dev/null +++ b/autoload/vimtex/syntax/p/listings.vim @@ -0,0 +1,75 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#listings#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'listings') | return | endif +  let b:vimtex_syntax.listings = s:get_nested_languages() + +  " First some general support +  syntax match texInputFile +        \ "\\lstinputlisting\s*\(\[.\{-}\]\)\={.\{-}}" +        \ contains=texStatement,texInputCurlies,texInputFileOpt +  syntax match texZone "\\lstinline\s*\(\[.\{-}\]\)\={.\{-}}" + +  " Set all listings environments to listings +  syntax cluster texFoldGroup add=texZoneListings +  syntax region texZoneListings +        \ start="\\begin{lstlisting}\(\_s*\[\_[^\]]\{-}\]\)\?"rs=s +        \ end="\\end{lstlisting}\|%stopzone\>"re=e +        \ keepend +        \ contains=texBeginEnd + +  " Next add nested syntax support for desired languages +  for l:nested in b:vimtex_syntax.listings +    let l:cluster = vimtex#syntax#misc#include(l:nested) +    if empty(l:cluster) | continue | endif + +    let l:group_main = 'texZoneListings' . toupper(l:nested[0]) . l:nested[1:] +    let l:group_lstset = l:group_main . 'Lstset' +    let l:group_contained = l:group_main . 'Contained' +    execute 'syntax cluster texFoldGroup add=' . l:group_main +    execute 'syntax cluster texFoldGroup add=' . l:group_lstset + +    execute 'syntax region' l:group_main +          \ 'start="\c\\begin{lstlisting}\s*' +          \ . '\[\_[^\]]\{-}language=' . l:nested . '\%(\s*,\_[^\]]\{-}\)\?\]"rs=s' +          \ 'end="\\end{lstlisting}"re=e' +          \ 'keepend' +          \ 'transparent' +          \ 'contains=texBeginEnd,@' . l:cluster + +    execute 'syntax match' l:group_lstset +          \ '"\c\\lstset{.*language=' . l:nested . '\%(\s*,\|}\)"' +          \ 'transparent' +          \ 'contains=texStatement,texMatcher' +          \ 'skipwhite skipempty' +          \ 'nextgroup=' . l:group_contained + +    execute 'syntax region' l:group_contained +          \ 'start="\\begin{lstlisting}"rs=s' +          \ 'end="\\end{lstlisting}"re=e' +          \ 'keepend' +          \ 'transparent' +          \ 'containedin=' . l:group_lstset +          \ 'contains=texStatement,texBeginEnd,@' . l:cluster +  endfor + +  highlight link texZoneListings texZone +endfunction + +" }}}1 + +function! s:get_nested_languages() abort " {{{1 +  return map( +        \ filter(getline(1, '$'), "v:val =~# 'language='"), +        \ 'matchstr(v:val, ''language=\zs\w\+'')') +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/luacode.vim b/autoload/vimtex/syntax/p/luacode.vim new file mode 100644 index 00000000..5e00c690 --- /dev/null +++ b/autoload/vimtex/syntax/p/luacode.vim @@ -0,0 +1,31 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#luacode#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'luacode') | return | endif +  let b:vimtex_syntax.luacode = 1 + +  call vimtex#syntax#misc#include('lua') +  call vimtex#syntax#misc#add_to_section_clusters('texZoneLua') +  syntax region texZoneLua +        \ start='\\begin{luacode\*\?}'rs=s +        \ end='\\end{luacode\*\?}'re=e +        \ keepend +        \ transparent +        \ contains=texBeginEnd,@vimtex_nested_lua +  syntax match texStatement '\\\(directlua\|luadirect\)' nextgroup=texZoneLuaArg +  syntax region texZoneLuaArg matchgroup=Delimiter +        \ start='{' +        \ end='}' +        \ contained +        \ contains=@vimtex_nested_lua +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/markdown.vim b/autoload/vimtex/syntax/p/markdown.vim new file mode 100644 index 00000000..6b7a6ad6 --- /dev/null +++ b/autoload/vimtex/syntax/p/markdown.vim @@ -0,0 +1,43 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#markdown#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'markdown') | return | endif +  let b:vimtex_syntax.markdown = 1 + +  call vimtex#syntax#misc#add_to_section_clusters('texZoneMarkdown') +  call vimtex#syntax#misc#include('markdown') + +  " Don't quite know why this is necessary, but it is +  syntax match texBeginEnd +        \ '\(\\begin\>\|\\end\>\)\ze{markdown}' +        \ nextgroup=texBeginEndName + +  syntax region texZoneMarkdown +        \ start='\\begin{markdown}'rs=s +        \ end='\\end{markdown}'re=e +        \ keepend +        \ transparent +        \ contains=@texFoldGroup,@texDocGroup,@vimtex_nested_markdown + +  " Input files +  syntax match texInputFile /\\markdownInput\>/ +        \ contains=texStatement +        \ nextgroup=texInputFileArg +  syntax region texInputFileArg +        \ matchgroup=texInputCurlies +        \ start="{" end="}" +        \ contained +        \ contains=texComment + +  highlight default link texInputFileArg texInputFile +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/mathtools.vim b/autoload/vimtex/syntax/p/mathtools.vim new file mode 100644 index 00000000..24f7080a --- /dev/null +++ b/autoload/vimtex/syntax/p/mathtools.vim @@ -0,0 +1,21 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +scriptencoding utf-8 + +function! vimtex#syntax#p#mathtools#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'mathtools') | return | endif +  let b:vimtex_syntax.mathtools = 1 + +  " Load amsmath +  call vimtex#syntax#p#amsmath#load() +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/minted.vim b/autoload/vimtex/syntax/p/minted.vim new file mode 100644 index 00000000..02793c34 --- /dev/null +++ b/autoload/vimtex/syntax/p/minted.vim @@ -0,0 +1,256 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#minted#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'minted') | return | endif +  let b:vimtex_syntax.minted = 1 + +  " Parse minted macros in the current project +  call s:parse_minted_constructs() + +  " Match minted language names +  syntax region texMintedName matchgroup=Delimiter start="{" end="}" contained +  syntax region texMintedNameOpt matchgroup=Delimiter start="\[" end="\]" contained + +  " Match boundaries of minted environments +  syntax match texMintedBounds '\\end{minted}' +        \ contained +        \ contains=texBeginEnd +  syntax match texMintedBounds '\\begin{minted}' +        \ contained +        \ contains=texBeginEnd +        \ nextgroup=texMintedBoundsOpts,texMintedName +  syntax region texMintedBoundsOpts matchgroup=Delimiter +        \ start="\[" end="\]" +        \ contained +        \ nextgroup=texMintedName + +  " Match starred custom minted environments with options +  syntax match texMintedStarred "\\begin{\w\+\*}" +        \ contained +        \ contains=texBeginEnd +        \ nextgroup=texMintedStarredOpts +  syntax region texMintedStarredOpts matchgroup=Delimiter +        \ start='{' +        \ end='}' +        \ contained +        \ containedin=texMintedStarred + +  " Match \newminted type macros +  syntax match texStatement '\\newmint\%(ed\|inline\)\?' nextgroup=texMintedName,texMintedNameOpt + +  " Match "unknown" environments +  call vimtex#syntax#misc#add_to_section_clusters('texZoneMinted') +  syntax region texZoneMinted +        \ start="\\begin{minted}\%(\_s*\[\_[^\]]\{-}\]\)\?\_s*{\w\+}"rs=s +        \ end="\\end{minted}"re=e +        \ keepend +        \ contains=texMintedBounds.* + +  " Match "unknown" commands +  syntax match texArgMinted "{\w\+}" +        \ contained +        \ contains=texMintedName +        \ nextgroup=texZoneMintedCmd +  syntax region texZoneMintedCmd matchgroup=Delimiter +        \ start='\z([|+/]\)' +        \ end='\z1' +        \ contained +  syntax region texZoneMintedCmd matchgroup=Delimiter +        \ start='{' +        \ end='}' +        \ contained + +  " Next add nested syntax support for desired languages +  for [l:nested, l:config] in items(b:vimtex.syntax.minted) +    let l:cluster = vimtex#syntax#misc#include(l:nested) + +    let l:name = 'Minted' . toupper(l:nested[0]) . l:nested[1:] +    let l:group_main = 'texZone' . l:name +    let l:group_arg = 'texArg' . l:name +    let l:group_arg_zone = 'texArgZone' . l:name +    call vimtex#syntax#misc#add_to_section_clusters(l:group_main) + +    if empty(l:cluster) +      let l:transparent = '' +      let l:contains_env = '' +      let l:contains_macro = '' +      execute 'highlight link' l:group_main 'texZoneMinted' +      execute 'highlight link' l:group_arg_zone 'texZoneMinted' +    else +      let l:transparent = 'transparent' +      let l:contains_env = ',@' . l:cluster +      let l:contains_macro = 'contains=@' . l:cluster +    endif + +    " Match minted environment +    execute 'syntax region' l:group_main +          \ 'start="\\begin{minted}\%(\_s*\[\_[^\]]\{-}\]\)\?\_s*{' . l:nested . '}"rs=s' +          \ 'end="\\end{minted}"re=e' +          \ 'keepend' +          \ l:transparent +          \ 'contains=texMintedBounds.*' . l:contains_env + +    " Match custom environment names +    for l:env in get(l:config, 'environments', []) +      execute 'syntax region' l:group_main +            \ 'start="\\begin{\z(' . l:env . '\*\?\)}"rs=s' +            \ 'end="\\end{\z1}"re=e' +            \ 'keepend' +            \ l:transparent +            \ 'contains=texMintedStarred,texBeginEnd' . l:contains_env +    endfor + +    " Match minted macros +    " - \mint[]{lang}|...| +    " - \mint[]{lang}{...} +    " - \mintinline[]{lang}|...| +    " - \mintinline[]{lang}{...} +    execute 'syntax match' l:group_arg '''{' . l:nested . '}''' +          \ 'contained' +          \ 'contains=texMintedName' +          \ 'nextgroup=' . l:group_arg_zone +    execute 'syntax region' l:group_arg_zone +          \ 'matchgroup=Delimiter' +          \ 'start=''\z([|+/]\)''' +          \ 'end=''\z1''' +          \ 'contained' +          \ l:contains_macro +    execute 'syntax region' l:group_arg_zone +          \ 'matchgroup=Delimiter' +          \ 'start=''{''' +          \ 'end=''}''' +          \ 'contained' +          \ l:contains_macro + +    " Match minted custom macros +    for l:cmd in sort(get(l:config, 'commands', [])) +      execute printf('syntax match texStatement ''\\%s'' nextgroup=%s', +            \ l:cmd, l:group_arg_zone) +    endfor +  endfor + +  " Main matcher for the minted statements/commands +  " - Note: This comes last to allow the nextgroup pattern +  syntax match texStatement '\\mint\(inline\)\?' nextgroup=texArgOptMinted,texArgMinted.* +  syntax region texArgOptMinted matchgroup=Delimiter +        \ start='\[' +        \ end='\]' +        \ contained +        \ nextgroup=texArgMinted.* + +  highlight link texZoneMinted texZone +  highlight link texZoneMintedCmd texZone +  highlight link texMintedName texInputFileOpt +  highlight link texMintedNameOpt texMintedName +endfunction + +" }}}1 + +function! s:parse_minted_constructs() abort " {{{1 +  if has_key(b:vimtex.syntax, 'minted') | return | endif + +  let l:db = deepcopy(s:db) +  let b:vimtex.syntax.minted = l:db.data + +  let l:in_multi = 0 +  for l:line in vimtex#parser#tex(b:vimtex.tex, {'detailed': 0}) +    " Multiline minted environments +    if l:in_multi +      let l:lang = matchstr(l:line, '\]\s*{\zs\w\+\ze}') +      if !empty(l:lang) +        call l:db.register(l:lang) +        let l:in_multi = 0 +      endif +      continue +    endif +    if l:line =~# '\\begin{minted}\s*\[[^\]]*$' +      let l:in_multi = 1 +      continue +    endif + +    " Single line minted environments +    let l:lang = matchstr(l:line, '\\begin{minted}\%(\s*\[\[^\]]*\]\)\?\s*{\zs\w\+\ze}') +    if !empty(l:lang) +      call l:db.register(l:lang) +      continue +    endif + +    " Simple minted commands +    let l:lang = matchstr(l:line, '\\mint\%(\s*\[[^\]]*\]\)\?\s*{\zs\w\+\ze}') +    if !empty(l:lang) +      call l:db.register(l:lang) +      continue +    endif + +    " Custom environments: +    " - \newminted{lang}{opts} -> langcode +    " - \newminted[envname]{lang}{opts} -> envname +    let l:matches = matchlist(l:line, +          \ '\\newminted\%(\s*\[\([^\]]*\)\]\)\?\s*{\([a-zA-Z-]\+\)}') +    if !empty(l:matches) +      call l:db.register(l:matches[2]) +      call l:db.add_environment(!empty(l:matches[1]) +            \ ? l:matches[1] +            \ : l:matches[2] . 'code') +      continue +    endif + +    " Custom macros: +    " - \newmint(inline){lang}{opts} -> \lang(inline) +    " - \newmint(inline)[macroname]{lang}{opts} -> \macroname +    let l:matches = matchlist(l:line, +          \ '\\newmint\(inline\)\?\%(\s*\[\([^\]]*\)\]\)\?\s*{\([a-zA-Z-]\+\)}') +    if !empty(l:matches) +      call l:db.register(l:matches[3]) +      call l:db.add_macro(!empty(l:matches[2]) +            \ ? l:matches[2] +            \ : l:matches[3] . l:matches[1]) +      continue +    endif +  endfor +endfunction + +" }}}1 + + +let s:db = { +      \ 'data' : {}, +      \} + +function! s:db.register(lang) abort dict " {{{1 +  " Avoid dashes in langnames +  let l:lang = substitute(a:lang, '-', '', 'g') + +  if !has_key(self.data, l:lang) +    let self.data[l:lang] = { +          \ 'environments' : [], +          \ 'commands' : [], +          \} +  endif + +  let self.cur = self.data[l:lang] +endfunction + +" }}}1 +function! s:db.add_environment(envname) abort dict " {{{1 +  if index(self.cur.environments, a:envname) < 0 +    let self.cur.environments += [a:envname] +  endif +endfunction + +" }}}1 +function! s:db.add_macro(macroname) abort dict " {{{1 +  if index(self.cur.commands, a:macroname) < 0 +    let self.cur.commands += [a:macroname] +  endif +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/moreverb.vim b/autoload/vimtex/syntax/p/moreverb.vim new file mode 100644 index 00000000..f6bb8f8c --- /dev/null +++ b/autoload/vimtex/syntax/p/moreverb.vim @@ -0,0 +1,26 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#moreverb#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'moreverb') | return | endif +  let b:vimtex_syntax.moreverb = 1 + +  if exists('g:tex_verbspell') +    syntax region texZone start="\\begin{verbatimtab}"   end="\\end{verbatimtab}\|%stopzone\>"   contains=@Spell +    syntax region texZone start="\\begin{verbatimwrite}" end="\\end{verbatimwrite}\|%stopzone\>" contains=@Spell +    syntax region texZone start="\\begin{boxedverbatim}" end="\\end{boxedverbatim}\|%stopzone\>" contains=@Spell +  else +    syntax region texZone start="\\begin{verbatimtab}"   end="\\end{verbatimtab}\|%stopzone\>" +    syntax region texZone start="\\begin{verbatimwrite}" end="\\end{verbatimwrite}\|%stopzone\>" +    syntax region texZone start="\\begin{boxedverbatim}" end="\\end{boxedverbatim}\|%stopzone\>" +  endif +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/natbib.vim b/autoload/vimtex/syntax/p/natbib.vim new file mode 100644 index 00000000..f28e2a94 --- /dev/null +++ b/autoload/vimtex/syntax/p/natbib.vim @@ -0,0 +1,18 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#natbib#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'natbib') | return | endif +  let b:vimtex_syntax.natbib = 1 + +  call vimtex#syntax#p#biblatex#load() +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/pdfpages.vim b/autoload/vimtex/syntax/p/pdfpages.vim new file mode 100644 index 00000000..ddd390d5 --- /dev/null +++ b/autoload/vimtex/syntax/p/pdfpages.vim @@ -0,0 +1,33 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#pdfpages#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'pdfpages') | return | endif +  let b:vimtex_syntax.pdfpages = 1 + +  syntax match texInputFile /\\includepdf\>/ +        \ contains=texStatement +        \ nextgroup=texInputFileOpt,texInputFileArg +  syntax region texInputFileOpt +        \ matchgroup=Delimiter +        \ start="\[" end="\]" +        \ contained +        \ contains=texComment,@NoSpell +        \ nextgroup=texInputFileArg +  syntax region texInputFileArg +        \ matchgroup=texInputCurlies +        \ start="{" end="}" +        \ contained +        \ contains=texComment + +  highlight default link texInputFileArg texInputFile +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/pgfplots.vim b/autoload/vimtex/syntax/p/pgfplots.vim new file mode 100644 index 00000000..15b0fe4a --- /dev/null +++ b/autoload/vimtex/syntax/p/pgfplots.vim @@ -0,0 +1,38 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#pgfplots#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'pgfplots') | return | endif +  let b:vimtex_syntax.pgfplots = 1 + +  " Load Tikz first +  call vimtex#syntax#p#tikz#load() + +  " Add texAxisStatement to Tikz cluster +  syntax cluster texTikz add=texAxisStatement + +  " Match pgfplotsset and axis environments +  syntax match texTikzSet /\\pgfplotsset\>/ +        \ contains=texStatement skipwhite nextgroup=texTikzOptsCurly +  syntax match texTikzEnv /\v\\begin\{%(log)*axis}/ +        \ contains=texBeginEnd nextgroup=texTikzOpts skipwhite +  syntax match texTikzEnv /\v\\begin\{groupplot}/ +        \ contains=texBeginEnd nextgroup=texTikzOpts skipwhite + +  " Match some custom pgfplots macros +  syntax match texAxisStatement /\\addplot3\>/ +        \ contained skipwhite nextgroup=texTikzOpts +  syntax match texAxisStatement /\\nextgroupplot\>/ +        \ contained skipwhite nextgroup=texTikzOpts + +  highlight def link texAxisStatement texStatement +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/pythontex.vim b/autoload/vimtex/syntax/p/pythontex.vim new file mode 100644 index 00000000..e58c3747 --- /dev/null +++ b/autoload/vimtex/syntax/p/pythontex.vim @@ -0,0 +1,40 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#pythontex#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'pythontex') | return | endif +  let b:vimtex_syntax.pythontex = 1 + +  call vimtex#syntax#misc#include('python') + +  syntax match texStatement /\\py[bsc]\?/ contained nextgroup=texPythontexArg +  syntax region texPythontexArg matchgroup=Delimiter +        \ start='{' end='}' +        \ contained contains=@vimtex_nested_python +  syntax region texPythontexArg matchgroup=Delimiter +        \ start='\z([#@]\)' end='\z1' +        \ contained contains=@vimtex_nested_python + +  call vimtex#syntax#misc#add_to_section_clusters('texZonePythontex') +  syntax region texZonePythontex +        \ start='\\begin{pyblock}'rs=s +        \ end='\\end{pyblock}'re=e +        \ keepend +        \ transparent +        \ contains=texBeginEnd,@vimtex_nested_python +  syntax region texZonePythontex +        \ start='\\begin{pycode}'rs=s +        \ end='\\end{pycode}'re=e +        \ keepend +        \ transparent +        \ contains=texBeginEnd,@vimtex_nested_python +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/subfile.vim b/autoload/vimtex/syntax/p/subfile.vim new file mode 100644 index 00000000..9192f09e --- /dev/null +++ b/autoload/vimtex/syntax/p/subfile.vim @@ -0,0 +1,19 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#subfile#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'subfile') | return | endif +  let b:vimtex_syntax.subfile = 1 + +  syntax match texInputFile /\\subfile\s*\%(\[.\{-}\]\)\=\s*{.\{-}}/ +        \ contains=texStatement,texInputCurlies,texInputFileOpt +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/tabularx.vim b/autoload/vimtex/syntax/p/tabularx.vim new file mode 100644 index 00000000..0ff623c2 --- /dev/null +++ b/autoload/vimtex/syntax/p/tabularx.vim @@ -0,0 +1,77 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#tabularx#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'tabularx') | return | endif +  let b:vimtex_syntax.tabularx = 1 + +  call vimtex#syntax#misc#add_to_section_clusters('texTabular') + +  syntax match texTabular '\\begin{tabular}\_[^{]\{-}\ze{' +        \ contains=texBeginEnd +        \ nextgroup=texTabularArg +        \ contained +  syntax region texTabularArg matchgroup=Delimiter +        \ start='{' end='}' +        \ contained + +  syntax match texTabularCol /[lcr]/ +        \ containedin=texTabularArg +        \ contained +  syntax match texTabularCol /[pmb]/ +        \ containedin=texTabularArg +        \ nextgroup=texTabularLength +        \ contained +  syntax match texTabularCol /\*/ +        \ containedin=texTabularArg +        \ nextgroup=texTabularMulti +        \ contained +  syntax region texTabularMulti matchgroup=Delimiter +        \ start='{' end='}' +        \ containedin=texTabularArg +        \ nextgroup=texTabularArg +        \ contained + +  syntax match texTabularAtSep /@/ +        \ containedin=texTabularArg +        \ nextgroup=texTabularLength +        \ contained +  syntax match texTabularVertline /||\?/ +        \ containedin=texTabularArg +        \ contained +  syntax match texTabularPostPre /[<>]/ +        \ containedin=texTabularArg +        \ nextgroup=texTabularPostPreArg +        \ contained + +  syntax region texTabularPostPreArg matchgroup=Delimiter +        \ start='{' end='}' +        \ containedin=texTabularArg +        \ contains=texLength,texStatement,texMathDelimSingle +        \ contained + +  syntax region texTabularLength matchgroup=Delimiter +        \ start='{' end='}' +        \ containedin=texTabularArg +        \ contains=texLength,texStatement +        \ contained + +  syntax match texMathDelimSingle /\$\$\?/ +        \ containedin=texTabularPostPreArg +        \ contained + +  highlight def link texTabularCol        Directory +  highlight def link texTabularAtSep      Type +  highlight def link texTabularVertline   Type +  highlight def link texTabularPostPre    Type +  highlight def link texMathDelimSingle   Delimiter +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/tikz.vim b/autoload/vimtex/syntax/p/tikz.vim new file mode 100644 index 00000000..fe0d7089 --- /dev/null +++ b/autoload/vimtex/syntax/p/tikz.vim @@ -0,0 +1,47 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#tikz#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'tikz') | return | endif +  let b:vimtex_syntax.tikz = 1 + +  call vimtex#syntax#misc#add_to_section_clusters('texTikzSet') +  call vimtex#syntax#misc#add_to_section_clusters('texTikzpicture') + +  " Define clusters +  syntax cluster texTikz contains=texTikzEnv,texBeginEnd,texStatement,texTikzSemicolon,texComment,@texVimtexGlobal +  syntax cluster texTikzOS contains=texTikzOptsCurly,texTikzEqual,texMathZoneX,texTypeSize,texStatement,texLength,texComment + +  " Define tikz option groups +  syntax match texTikzSet /\\tikzset\>/ +        \ contains=texStatement skipwhite nextgroup=texTikzOptsCurly +  syntax region texTikzOpts matchgroup=Delimiter +        \ start='\[' end='\]' contained contains=@texTikzOS +  syntax region texTikzOptsCurly matchgroup=Delimiter +        \ start='{'  end='}'  contained contains=@texTikzOS + +  syntax region texTikzpicture +        \ start='\\begin{tikzpicture}'rs=s +        \ end='\\end{tikzpicture}'re=e +        \ keepend +        \ transparent +        \ contains=@texTikz +  syntax match texTikzEnv /\v\\begin\{tikzpicture\}/ +        \ contains=texBeginEnd nextgroup=texTikzOpts skipwhite + +  syntax match texTikzEqual /=/ contained +  syntax match texTikzSemicolon /;/ contained + +  highlight def link texTikzEqual Operator +  highlight def link texTikzSemicolon Delimiter +endfunction + +" }}}1 + + +endif diff --git a/autoload/vimtex/syntax/p/url.vim b/autoload/vimtex/syntax/p/url.vim new file mode 100644 index 00000000..a944cae9 --- /dev/null +++ b/autoload/vimtex/syntax/p/url.vim @@ -0,0 +1,18 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#url#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'url') | return | endif +  let b:vimtex_syntax.url = 1 + +  call vimtex#syntax#p#hyperref#load() +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/varioref.vim b/autoload/vimtex/syntax/p/varioref.vim new file mode 100644 index 00000000..020162d9 --- /dev/null +++ b/autoload/vimtex/syntax/p/varioref.vim @@ -0,0 +1,25 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#varioref#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'varioref') | return | endif +  let b:vimtex_syntax.varioref = 1 +  if get(g:, 'tex_fast', 'r') !~# 'r' | return | endif + +  syntax match texStatement '\\Vref\>' nextgroup=texVarioRefZone + +  syntax region texVarioRefZone contained matchgroup=Delimiter +        \ start="{" end="}" +        \ contains=@texRefGroup,texRefZone + +  highlight link texVarioRefZone texRefZone +endfunction + +" }}}1 + +endif diff --git a/autoload/vimtex/syntax/p/wiki.vim b/autoload/vimtex/syntax/p/wiki.vim new file mode 100644 index 00000000..46edf7b7 --- /dev/null +++ b/autoload/vimtex/syntax/p/wiki.vim @@ -0,0 +1,26 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'latex') == -1 + +" vimtex - LaTeX plugin for Vim +" +" Maintainer: Karl Yngve Lervåg +" Email:      karl.yngve@gmail.com +" + +function! vimtex#syntax#p#wiki#load() abort " {{{1 +  if has_key(b:vimtex_syntax, 'wiki') | return | endif +  let b:vimtex_syntax.wiki = 1 + +  call vimtex#syntax#misc#add_to_section_clusters('texZoneWiki') +  call vimtex#syntax#misc#include('markdown') + +  syntax region texZoneWiki +        \ start='\\wikimarkup\>' +        \ end='\\nowikimarkup\>'re=e +        \ keepend +        \ transparent +        \ contains=@vimtex_nested_markdown,@texFoldGroup,@texDocGroup +endfunction + +" }}}1 + +endif | 
