From f3b646fd6f6070072d9b4ec958815b74a8a333f2 Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Fri, 1 Jan 2021 17:26:26 +0100 Subject: Move tex to after, closes #650 --- after/compiler/tex.vim | 71 +++ after/ftplugin/tex.vim | 50 ++ after/indent/tex.vim | 427 +++++++++++++++ after/syntax/tex.vim | 1344 ++++++++++++++++++++++++++++++++++++++++++++++++ compiler/tex.vim | 71 --- ftplugin/tex.vim | 50 -- indent/tex.vim | 427 --------------- packages.yaml | 1 + scripts/build | 6 +- syntax/tex.vim | 1344 ------------------------------------------------ 10 files changed, 1898 insertions(+), 1893 deletions(-) create mode 100644 after/compiler/tex.vim create mode 100644 after/ftplugin/tex.vim create mode 100644 after/indent/tex.vim create mode 100644 after/syntax/tex.vim delete mode 100644 compiler/tex.vim delete mode 100644 ftplugin/tex.vim delete mode 100644 indent/tex.vim delete mode 100644 syntax/tex.vim diff --git a/after/compiler/tex.vim b/after/compiler/tex.vim new file mode 100644 index 00000000..bfe5b2a5 --- /dev/null +++ b/after/compiler/tex.vim @@ -0,0 +1,71 @@ +if has_key(g:polyglot_is_disabled, 'tex') + finish +endif + +" Vim compiler file +" Compiler: TeX +" Maintainer: Artem Chuprina +" Last Change: 2012 Apr 30 + +if exists("current_compiler") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal +endif + +" If makefile exists and we are not asked to ignore it, we use standard make +" (do not redefine makeprg) +if exists('b:tex_ignore_makefile') || exists('g:tex_ignore_makefile') || + \(!filereadable('Makefile') && !filereadable('makefile')) + " If buffer-local variable 'tex_flavor' exists, it defines TeX flavor, + " otherwize the same for global variable with same name, else it will be + " LaTeX + if exists("b:tex_flavor") + let current_compiler = b:tex_flavor + elseif exists("g:tex_flavor") + let current_compiler = g:tex_flavor + else + let current_compiler = "latex" + endif + let &l:makeprg=current_compiler.' -interaction=nonstopmode' +else + let current_compiler = 'make' +endif + +" Value errorformat are taken from vim help, see :help errorformat-LaTeX, with +" addition from Srinath Avadhanula +CompilerSet errorformat=%E!\ LaTeX\ %trror:\ %m, + \%E!\ %m, + \%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#, + \%+W%.%#\ at\ lines\ %l--%*\\d, + \%WLaTeX\ %.%#Warning:\ %m, + \%Cl.%l\ %m, + \%+C\ \ %m., + \%+C%.%#-%.%#, + \%+C%.%#[]%.%#, + \%+C[]%.%#, + \%+C%.%#%[{}\\]%.%#, + \%+C<%.%#>%.%#, + \%C\ \ %m, + \%-GSee\ the\ LaTeX%m, + \%-GType\ \ H\ %m, + \%-G\ ...%.%#, + \%-G%.%#\ (C)\ %.%#, + \%-G(see\ the\ transcript%.%#), + \%-G\\s%#, + \%+O(%*[^()])%r, + \%+O%*[^()](%*[^()])%r, + \%+P(%f%r, + \%+P\ %\\=(%f%r, + \%+P%*[^()](%f%r, + \%+P[%\\d%[^()]%#(%f%r, + \%+Q)%r, + \%+Q%*[^()])%r, + \%+Q[%\\d%*[^()])%r + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/after/ftplugin/tex.vim b/after/ftplugin/tex.vim new file mode 100644 index 00000000..0fcb47a8 --- /dev/null +++ b/after/ftplugin/tex.vim @@ -0,0 +1,50 @@ +if has_key(g:polyglot_is_disabled, 'tex') + finish +endif + +" LaTeX filetype plugin +" Language: LaTeX (ft=tex) +" Maintainer: Benji Fisher, Ph.D. +" Version: 1.4 +" Last Change: Wed 19 Apr 2006 +" URL: http://www.vim.org/script.php?script_id=411 + +" Only do this when not done yet for this buffer. +if exists("b:did_ftplugin") + finish +endif + +" Start with plain TeX. This will also define b:did_ftplugin . +source $VIMRUNTIME/ftplugin/plaintex.vim + +" Avoid problems if running in 'compatible' mode. +let s:save_cpo = &cpo +set cpo&vim + +let b:undo_ftplugin .= "| setl inex<" + +" Allow "[d" to be used to find a macro definition: +" Recognize plain TeX \def as well as LaTeX \newcommand and \renewcommand . +" I may as well add the AMS-LaTeX DeclareMathOperator as well. +let &l:define .= '\|\\\(re\)\=new\(boolean\|command\|counter\|environment\|font' + \ . '\|if\|length\|savebox\|theorem\(style\)\=\)\s*\*\=\s*{\=' + \ . '\|DeclareMathOperator\s*{\=\s*' + +" Tell Vim how to recognize LaTeX \include{foo} and plain \input bar : +let &l:include .= '\|\\include{' +" On some file systems, "{" and "}" are inluded in 'isfname'. In case the +" TeX file has \include{fname} (LaTeX only), strip everything except "fname". +let &l:includeexpr = "substitute(v:fname, '^.\\{-}{\\|}.*', '', 'g')" + +" The following lines enable the macros/matchit.vim plugin for +" extended matching with the % key. +" ftplugin/plaintex.vim already defines b:match_skip and b:match_ignorecase +" and matches \(, \), \[, \], \{, and \} . +if exists("loaded_matchit") + let b:match_words .= ',\\begin\s*\({\a\+\*\=}\):\\end\s*\1' +endif " exists("loaded_matchit") + +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim:sts=2:sw=2: diff --git a/after/indent/tex.vim b/after/indent/tex.vim new file mode 100644 index 00000000..4cd17b84 --- /dev/null +++ b/after/indent/tex.vim @@ -0,0 +1,427 @@ +if has_key(g:polyglot_is_disabled, 'tex') + finish +endif + +" Vim indent file +" Language: LaTeX +" Maintainer: Yichao Zhou +" Created: Sat, 16 Feb 2002 16:50:19 +0100 +" Version: 1.0.0 +" Please email me if you found something I can do. Comments, bug report and +" feature request are welcome. + +" Last Update: {{{ +" 25th Sep 2002, by LH : +" (*) better support for the option +" (*) use some regex instead of several '||'. +" Oct 9th, 2003, by JT: +" (*) don't change indentation of lines starting with '%' +" 2005/06/15, Moshe Kaminsky +" (*) New variables: +" g:tex_items, g:tex_itemize_env, g:tex_noindent_env +" 2011/3/6, by Yichao Zhou +" (*) Don't change indentation of lines starting with '%' +" I don't see any code with '%' and it doesn't work properly +" so I add some code. +" (*) New features: Add smartindent-like indent for "{}" and "[]". +" (*) New variables: g:tex_indent_brace +" 2011/9/25, by Yichao Zhou +" (*) Bug fix: smartindent-like indent for "[]" +" (*) New features: Align with "&". +" (*) New variable: g:tex_indent_and. +" 2011/10/23 by Yichao Zhou +" (*) Bug fix: improve the smartindent-like indent for "{}" and +" "[]". +" 2012/02/27 by Yichao Zhou +" (*) Bug fix: support default folding marker. +" (*) Indent with "&" is not very handy. Make it not enable by +" default. +" 2012/03/06 by Yichao Zhou +" (*) Modify "&" behavior and make it default again. Now "&" +" won't align when there are more then one "&" in the previous +" line. +" (*) Add indent "\left(" and "\right)" +" (*) Trust user when in "verbatim" and "lstlisting" +" 2012/03/11 by Yichao Zhou +" (*) Modify "&" so that only indent when current line start with +" "&". +" 2012/03/12 by Yichao Zhou +" (*) Modify indentkeys. +" 2012/03/18 by Yichao Zhou +" (*) Add &cpo +" 2013/05/02 by Yichao Zhou +" (*) Fix problem about GetTeXIndent checker. Thank Albert Netymk +" for reporting this. +" 2014/06/23 by Yichao Zhou +" (*) Remove the feature g:tex_indent_and because it is buggy. +" (*) If there is not any obvious indentation hints, we do not +" alert our user's current indentation. +" (*) g:tex_indent_brace now only works if the open brace is the +" last character of that line. +" 2014/08/03 by Yichao Zhou +" (*) Indent current line if last line has larger indentation +" 2016/11/08 by Yichao Zhou +" (*) Fix problems for \[ and \]. Thanks Bruno for reporting. +" 2017/04/30 by Yichao Zhou +" (*) Fix a bug between g:tex_noindent_env and g:tex_indent_items +" Now g:tex_noindent_env='document\|verbatim\|itemize' (Emacs +" style) is supported. Thanks Miles Wheeler for reporting. +" 2018/02/07 by Yichao Zhou +" (*) Make indentation more smart in the normal mode +" 2020/04/26 by Yichao Zhou +" (*) Fix a bug related to \[ & \]. Thanks Manuel Boni for +" reporting. +" +" }}} + +" Document: {{{ +" +" For proper latex experience, please put +" let g:tex_flavor = "latex" +" into your vimrc. +" +" * g:tex_indent_brace +" +" If this variable is unset or non-zero, it will use smartindent-like style +" for "{}" and "[]". Now this only works if the open brace is the last +" character of that line. +" +" % Example 1 +" \usetikzlibrary{ +" external +" } +" +" % Example 2 +" \tikzexternalize[ +" prefix=tikz] +" +" * g:tex_indent_items +" +" If this variable is set, item-environments are indented like Emacs does +" it, i.e., continuation lines are indented with a shiftwidth. +" +" set unset +" ------------------------------------------------------ +" \begin{itemize} \begin{itemize} +" \item blablabla \item blablabla +" bla bla bla bla bla bla +" \item blablabla \item blablabla +" bla bla bla bla bla bla +" \end{itemize} \end{itemize} +" +" +" * g:tex_items +" +" A list of tokens to be considered as commands for the beginning of an item +" command. The tokens should be separated with '\|'. The initial '\' should +" be escaped. The default is '\\bibitem\|\\item'. +" +" * g:tex_itemize_env +" +" A list of environment names, separated with '\|', where the items (item +" commands matching g:tex_items) may appear. The default is +" 'itemize\|description\|enumerate\|thebibliography'. +" +" * g:tex_noindent_env +" +" A list of environment names. separated with '\|', where no indentation is +" required. The default is 'document\|verbatim'. +" }}} + +" Only define the function once +if exists("b:did_indent") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Define global variable {{{ + +let b:did_indent = 1 + +if !exists("g:tex_indent_items") + let g:tex_indent_items = 1 +endif +if !exists("g:tex_indent_brace") + let g:tex_indent_brace = 1 +endif +if !exists("g:tex_max_scan_line") + let g:tex_max_scan_line = 60 +endif +if g:tex_indent_items + if !exists("g:tex_itemize_env") + let g:tex_itemize_env = 'itemize\|description\|enumerate\|thebibliography' + endif + if !exists('g:tex_items') + let g:tex_items = '\\bibitem\|\\item' + endif +else + let g:tex_items = '' +endif + +if !exists("g:tex_noindent_env") + let g:tex_noindent_env = 'document\|verbatim\|lstlisting' +endif "}}} + +" VIM Setting " {{{ +setlocal autoindent +setlocal nosmartindent +setlocal indentexpr=GetTeXIndent() +setlocal indentkeys& +exec 'setlocal indentkeys+=[,(,{,),},],\&' . substitute(g:tex_items, '^\|\(\\|\)', ',=', 'g') +let g:tex_items = '^\s*' . substitute(g:tex_items, '^\(\^\\s\*\)*', '', '') +" }}} + +function! GetTeXIndent() " {{{ + " Find a non-blank line above the current line. + let lnum = prevnonblank(v:lnum - 1) + let cnum = v:lnum + + " Comment line is not what we need. + while lnum != 0 && getline(lnum) =~ '^\s*%' + let lnum = prevnonblank(lnum - 1) + endwhile + + " At the start of the file use zero indent. + if lnum == 0 + return 0 + endif + + let line = substitute(getline(lnum), '\s*%.*', '','g') " last line + let cline = substitute(getline(v:lnum), '\s*%.*', '', 'g') " current line + + let ccol = 1 + while cline[ccol] =~ '\s' + let ccol += 1 + endwhile + + " We are in verbatim, so do what our user what. + if synIDattr(synID(v:lnum, ccol, 1), "name") == "texZone" + if empty(cline) + return indent(lnum) + else + return indent(v:lnum) + endif + endif + + if lnum == 0 + return 0 + endif + + let ind = indent(lnum) + let stay = 1 + + " New code for comment: retain the indent of current line + if cline =~ '^\s*%' + return indent(v:lnum) + endif + + " Add a 'shiftwidth' after beginning of environments. + " Don't add it for \begin{document} and \begin{verbatim} + " if line =~ '^\s*\\begin{\(.*\)}' && line !~ 'verbatim' + " LH modification : \begin does not always start a line + " ZYC modification : \end after \begin won't cause wrong indent anymore + if line =~ '\\begin{.*}' + if line !~ g:tex_noindent_env + let ind = ind + shiftwidth() + let stay = 0 + endif + + if g:tex_indent_items + " Add another sw for item-environments + if line =~ g:tex_itemize_env + let ind = ind + shiftwidth() + let stay = 0 + endif + endif + endif + + if cline =~ '\\end{.*}' + let retn = s:GetEndIndentation(v:lnum) + if retn != -1 + return retn + endif + end + " Subtract a 'shiftwidth' when an environment ends + if cline =~ '\\end{.*}' + \ && cline !~ g:tex_noindent_env + \ && cline !~ '\\begin{.*}.*\\end{.*}' + if g:tex_indent_items + " Remove another sw for item-environments + if cline =~ g:tex_itemize_env + let ind = ind - shiftwidth() + let stay = 0 + endif + endif + + let ind = ind - shiftwidth() + let stay = 0 + endif + + if g:tex_indent_brace + if line =~ '[[{]$' + let ind += shiftwidth() + let stay = 0 + endif + + if cline =~ '^\s*\\\?[\]}]' && s:CheckPairedIsLastCharacter(v:lnum, ccol) + let ind -= shiftwidth() + let stay = 0 + endif + + if line !~ '^\s*\\\?[\]}]' + for i in range(1, strlen(line)-1) + let char = line[i] + if char == ']' || char == '}' + if s:CheckPairedIsLastCharacter(lnum, i) + let ind -= shiftwidth() + let stay = 0 + endif + endif + endfor + endif + endif + + " Special treatment for 'item' + " ---------------------------- + + if g:tex_indent_items + " '\item' or '\bibitem' itself: + if cline =~ g:tex_items + let ind = ind - shiftwidth() + let stay = 0 + endif + " lines following to '\item' are intented once again: + if line =~ g:tex_items + let ind = ind + shiftwidth() + let stay = 0 + endif + endif + + if stay && mode() == 'i' + " If there is no obvious indentation hint, and indentation is triggered + " in insert mode, we trust our user. + if empty(cline) + return ind + else + return max([indent(v:lnum), s:GetLastBeginIndentation(v:lnum)]) + endif + else + return ind + endif +endfunction "}}} + +function! s:GetLastBeginIndentation(lnum) " {{{ + let matchend = 1 + for lnum in range(a:lnum-1, max([a:lnum - g:tex_max_scan_line, 1]), -1) + let line = getline(lnum) + if line =~ '\\end{.*}' + let matchend += 1 + endif + if line =~ '\\begin{.*}' + let matchend -= 1 + endif + if matchend == 0 + if line =~ g:tex_noindent_env + return indent(lnum) + endif + if line =~ g:tex_itemize_env + return indent(lnum) + 2 * shiftwidth() + endif + return indent(lnum) + shiftwidth() + endif + endfor + return -1 +endfunction + +function! s:GetEndIndentation(lnum) " {{{ + if getline(a:lnum) =~ '\\begin{.*}.*\\end{.*}' + return -1 + endif + + let min_indent = 100 + let matchend = 1 + for lnum in range(a:lnum-1, max([a:lnum-g:tex_max_scan_line, 1]), -1) + let line = getline(lnum) + if line =~ '\\end{.*}' + let matchend += 1 + endif + if line =~ '\\begin{.*}' + let matchend -= 1 + endif + if matchend == 0 + return indent(lnum) + endif + if !empty(line) + let min_indent = min([min_indent, indent(lnum)]) + endif + endfor + return min_indent - shiftwidth() +endfunction + +" Most of the code is from matchparen.vim +function! s:CheckPairedIsLastCharacter(lnum, col) "{{{ + let c_lnum = a:lnum + let c_col = a:col+1 + + let line = getline(c_lnum) + if line[c_col-1] == '\' + let c_col = c_col + 1 + endif + let c = line[c_col-1] + + let plist = split(&matchpairs, '.\zs[:,]') + let i = index(plist, c) + if i < 0 + return 0 + endif + + " Figure out the arguments for searchpairpos(). + if i % 2 == 0 + let s_flags = 'nW' + let c2 = plist[i + 1] + else + let s_flags = 'nbW' + let c2 = c + let c = plist[i - 1] + endif + if c == '[' + let c = '\[' + let c2 = '\]' + endif + + " Find the match. When it was just before the cursor move it there for a + " moment. + let save_cursor = winsaveview() + call cursor(c_lnum, c_col) + + " When not in a string or comment ignore matches inside them. + " We match "escape" for special items, such as lispEscapeSpecial. + let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' . + \ '=~? "string\\|character\\|singlequote\\|escape\\|comment"' + execute 'if' s_skip '| let s_skip = 0 | endif' + + let stopline = max([0, c_lnum - g:tex_max_scan_line]) + + " Limit the search time to 300 msec to avoid a hang on very long lines. + " This fails when a timeout is not supported. + try + let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, 100) + catch /E118/ + endtry + + call winrestview(save_cursor) + + if m_lnum > 0 + let line = getline(m_lnum) + return strlen(line) == m_col + endif + + return 0 +endfunction "}}} + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: set sw=4 textwidth=80: diff --git a/after/syntax/tex.vim b/after/syntax/tex.vim new file mode 100644 index 00000000..8a30dc30 --- /dev/null +++ b/after/syntax/tex.vim @@ -0,0 +1,1344 @@ +if has_key(g:polyglot_is_disabled, 'tex') + finish +endif + +" Vim syntax file +" Language: TeX +" Maintainer: Charles E. Campbell +" Last Change: Jun 29, 2020 +" Version: 119 +" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX +" +" Notes: {{{1 +" +" 1. If you have a \begin{verbatim} that appears to overrun its boundaries, +" use %stopzone. +" +" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped +" by suitable use of %stopzone. +" +" 3. If you have a slow computer, you may wish to modify +" +" syn sync maxlines=200 +" syn sync minlines=50 +" +" to values that are more to your liking. +" +" 4. There is no match-syncing for $...$ and $$...$$; hence large +" equation blocks constructed that way may exhibit syncing problems. +" (there's no difference between begin/end patterns) +" +" 5. If you have the variable "g:tex_no_error" defined then none of the +" lexical error-checking will be done. +" +" ie. let g:tex_no_error=1 +" +" 6. Please see :help latex-syntax for information on +" syntax folding :help tex-folding +" spell checking :help tex-nospell +" commands and mathzones :help tex-runon +" new command highlighting :help tex-morecommands +" error highlighting :help tex-error +" new math groups :help tex-math +" new styles :help tex-style +" using conceal mode :help tex-conceal + +" Version Clears: {{{1 +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim +scriptencoding utf-8 + +" by default, enable all region-based highlighting +let s:tex_fast= "bcmMprsSvV" +if exists("g:tex_fast") + if type(g:tex_fast) != 1 + " g:tex_fast exists and is not a string, so + " turn off all optional region-based highighting + let s:tex_fast= "" + else + let s:tex_fast= g:tex_fast + endif +endif + +" let user determine which classes of concealment will be supported +" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts +if !exists("g:tex_conceal") + let s:tex_conceal= 'abdmgsS' +else + let s:tex_conceal= g:tex_conceal +endif +if !exists("g:tex_superscripts") + let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]' +else + let s:tex_superscripts= g:tex_superscripts +endif +if !exists("g:tex_subscripts") + let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]' +else + let s:tex_subscripts= g:tex_subscripts +endif + +" Determine whether or not to use "*.sty" mode {{{1 +" The user may override the normal determination by setting +" g:tex_stylish to 1 (for "*.sty" mode) +" or to 0 else (normal "*.tex" mode) +" or on a buffer-by-buffer basis with b:tex_stylish +let s:extfname=expand("%:e") +if exists("g:tex_stylish") + let b:tex_stylish= g:tex_stylish +elseif !exists("b:tex_stylish") + if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx" + let b:tex_stylish= 1 + else + let b:tex_stylish= 0 + endif +endif + +" handle folding {{{1 +if !exists("g:tex_fold_enabled") + let s:tex_fold_enabled= 0 +elseif g:tex_fold_enabled && !has("folding") + let s:tex_fold_enabled= 0 + echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support" +else + let s:tex_fold_enabled= 1 +endif +if s:tex_fold_enabled && &fdm == "manual" + setl fdm=syntax +endif +if s:tex_fold_enabled && has("folding") + com! -nargs=* TexFold fold +else + com! -nargs=* TexFold +endif + +" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1 +" but _ is the only one that causes problems. +" One may override this iskeyword setting by providing +" g:tex_isk +if exists("g:tex_isk") + if b:tex_stylish && g:tex_isk !~ '@' + let b:tex_isk= '@,'.g:tex_isk + else + let b:tex_isk= g:tex_isk + endif +elseif b:tex_stylish + let b:tex_isk="@,48-57,a-z,A-Z,192-255" +else + let b:tex_isk="48-57,a-z,A-Z,192-255" +endif +if (v:version == 704 && has("patch-7.4.1142")) || v:version > 704 + exe "syn iskeyword ".b:tex_isk +else + exe "setl isk=".b:tex_isk +endif +if exists("g:tex_no_error") && g:tex_no_error + let s:tex_no_error= 1 +else + let s:tex_no_error= 0 +endif +if exists("g:tex_comment_nospell") && g:tex_comment_nospell + let s:tex_comment_nospell= 1 +else + let s:tex_comment_nospell= 0 +endif +if exists("g:tex_nospell") && g:tex_nospell + let s:tex_nospell = 1 +else + let s:tex_nospell = 0 +endif +if exists("g:tex_matchcheck") + let s:tex_matchcheck= g:tex_matchcheck +else + let s:tex_matchcheck= '[({[]' +endif +if exists("g:tex_excludematcher") + let s:tex_excludematcher= g:tex_excludematcher +else + let s:tex_excludematcher= 0 +endif + +" Clusters: {{{1 +" -------- +syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,@texMathZones +if !s:tex_no_error + syn cluster texCmdGroup add=texMathError +endif +syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement +syn cluster texFoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texEmphStyle,texNoSpell +syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell +syn cluster texItalGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texEmphStyle,texItalBoldStyle,texNoSpell +if !s:tex_excludematcher + syn cluster texBoldGroup add=texMatcher + syn cluster texItalGroup add=texMatcher +endif +if !s:tex_nospell + syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell + syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell + syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher,@Spell +else + syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption + syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption + syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher +endif +syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ +syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter +if !exists("g:tex_no_math") + syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ + syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ + syn cluster texMatchGroup add=@texMathZones + syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2 + syn cluster texMathMatchGroup contains=@texMathZones,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathMatcher,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone + syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle + if !s:tex_no_error + syn cluster texMathMatchGroup add=texMathError + syn cluster texMathZoneGroup add=texMathError + endif + syn cluster texMathZoneGroup add=@NoSpell + " following used in the \part \chapter \section \subsection \subsubsection + " \paragraph \subparagraph \author \title highlighting + syn cluster texDocGroup contains=texPartZone,@texPartGroup + syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone + syn cluster texChapterGroup contains=texSectionZone,texParaZone + syn cluster texSectionGroup contains=texSubSectionZone,texParaZone + syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone + syn cluster texSubSubSectionGroup contains=texParaZone + syn cluster texParaGroup contains=texSubParaZone + if has("conceal") && &enc == 'utf-8' + syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol + syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol + endif +endif + +" Try to flag {}, [], and () mismatches: {{{1 +if s:tex_fast =~# 'm' + if !s:tex_no_error + if s:tex_matchcheck =~ '{' + syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError + syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError + endif + if s:tex_matchcheck =~ '\[' + syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell + syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell + endif + else + if s:tex_matchcheck =~ '{' + syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup + syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup + endif + if s:tex_matchcheck =~ '\[' + syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup + syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup + endif + endif + if s:tex_matchcheck =~ '(' + if !s:tex_nospell + syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell + else + syn region texParen start="(" end=")" transparent contains=@texMatchGroup + endif + endif +endif +if !s:tex_no_error + if s:tex_matchcheck =~ '(' + syn match texError "[}\]]" + else + syn match texError "[}\])]" + endif +endif +if s:tex_fast =~# 'M' + if !exists("g:tex_no_math") + if !s:tex_no_error + syn match texMathError "}" contained + endif + syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup + endif +endif + +" TeX/LaTeX keywords: {{{1 +" Instead of trying to be All Knowing, I just match \..alphameric.. +" Note that *.tex files may not have "@" in their \commands +if exists("g:tex_tex") || b:tex_stylish + syn match texStatement "\\[a-zA-Z@]\+" +else + syn match texStatement "\\\a\+" + if !s:tex_no_error + syn match texError "\\\a*@[a-zA-Z@]*" + endif +endif + +" TeX/LaTeX delimiters: {{{1 +syn match texDelimiter "&" +syn match texDelimiter "\\\\" + +" Tex/Latex Options: {{{1 +syn match texOption "[^\\]\zs#\d\+\|^#\d\+" + +" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1 +if b:tex_stylish + syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1 + syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1 +else + syn match texAccent "\\[bcdvuH]\A"me=e-1 + syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1 +endif +syn match texAccent "\\[bcdvuH]$" +syn match texAccent +\\[=^.\~"`']+ +syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+ +syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$" + + +" \begin{}/\end{} section markers: {{{1 +syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName +if s:tex_fast =~# 'm' + syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment + syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell +endif + +" \documentclass, \documentstyle, \usepackage: {{{1 +syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs +if s:tex_fast =~# 'm' + syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell +endif + +" Preamble syntax-based folding support: {{{1 +if s:tex_fold_enabled && has("folding") + syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup +endif + +" TeX input: {{{1 +syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement +syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt +syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt +syn match texInputCurlies "[{}]" contained +if s:tex_fast =~# 'm' + syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment +endif + +" Type Styles (LaTeX 2.09): {{{1 +syn match texTypeStyle "\\rm\>" +syn match texTypeStyle "\\em\>" +syn match texTypeStyle "\\bf\>" +syn match texTypeStyle "\\it\>" +syn match texTypeStyle "\\sl\>" +syn match texTypeStyle "\\sf\>" +syn match texTypeStyle "\\sc\>" +syn match texTypeStyle "\\tt\>" + +" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1 +if s:tex_conceal !~# 'b' + syn match texTypeStyle "\\textbf\>" + syn match texTypeStyle "\\textit\>" + syn match texTypeStyle "\\emph\>" +endif +syn match texTypeStyle "\\textmd\>" +syn match texTypeStyle "\\textrm\>" + +syn match texTypeStyle "\\mathbb\>" +syn match texTypeStyle "\\mathbf\>" +syn match texTypeStyle "\\mathcal\>" +syn match texTypeStyle "\\mathfrak\>" +syn match texTypeStyle "\\mathit\>" +syn match texTypeStyle "\\mathnormal\>" +syn match texTypeStyle "\\mathrm\>" +syn match texTypeStyle "\\mathsf\>" +syn match texTypeStyle "\\mathtt\>" + +syn match texTypeStyle "\\rmfamily\>" +syn match texTypeStyle "\\sffamily\>" +syn match texTypeStyle "\\ttfamily\>" + +syn match texTypeStyle "\\itshape\>" +syn match texTypeStyle "\\scshape\>" +syn match texTypeStyle "\\slshape\>" +syn match texTypeStyle "\\upshape\>" + +syn match texTypeStyle "\\bfseries\>" +syn match texTypeStyle "\\mdseries\>" + +" Some type sizes: {{{1 +syn match texTypeSize "\\tiny\>" +syn match texTypeSize "\\scriptsize\>" +syn match texTypeSize "\\footnotesize\>" +syn match texTypeSize "\\small\>" +syn match texTypeSize "\\normalsize\>" +syn match texTypeSize "\\large\>" +syn match texTypeSize "\\Large\>" +syn match texTypeSize "\\LARGE\>" +syn match texTypeSize "\\huge\>" +syn match texTypeSize "\\Huge\>" + +" Spacecodes (TeX'isms): {{{1 +" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x +syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar +syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained + +" Sections, subsections, etc: {{{1 +if s:tex_fast =~# 'p' + if !s:tex_nospell + TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell + TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell + TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell + TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell + TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell + TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell + TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell + TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell + TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell + TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell + else + TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup + TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup + TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup + TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup + TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup + TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup + TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup + TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup + TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup + TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup + endif +endif + +" particular support for bold and italic {{{1 +if s:tex_fast =~# 'b' + if s:tex_conceal =~# 'b' + if !exists("g:tex_nospell") || !g:tex_nospell + syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell + syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell + syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell + syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell + syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell + syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell + syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell + syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell + else + syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup + syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup + syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup + syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup + syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup + syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup + syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup + syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup + endif + endif +endif + +" Bad Math (mismatched): {{{1 +if !exists("g:tex_no_math") && !s:tex_no_error + syn match texBadMath "\\end\s*{\s*\(array\|[bBpvV]matrix\|split\|smallmatrix\)\s*}" + syn match texBadMath "\\end\s*{\s*\(displaymath\|equation\|eqnarray\|math\)\*\=\s*}" + syn match texBadMath "\\[\])]" +endif + +" Math Zones: {{{1 +if !exists("g:tex_no_math") + " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2 + " Starred forms are created if starform is true. Starred + " forms have syntax group and synchronization groups with a + " "S" appended. Handles: cluster, syntax, sync, and highlighting. + fun! TexNewMathZone(sfx,mathzone,starform) + let grpname = "texMathZone".a:sfx + let syncname = "texSyncMathZone".a:sfx + if s:tex_fold_enabled + let foldcmd= " fold" + else + let foldcmd= "" + endif + exe "syn cluster texMathZones add=".grpname + if s:tex_fast =~# 'M' + exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd + exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' + exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' + endif + exe 'hi def link '.grpname.' texMath' + if a:starform + let grpname = "texMathZone".a:sfx.'S' + let syncname = "texSyncMathZone".a:sfx.'S' + exe "syn cluster texMathZones add=".grpname + if s:tex_fast =~# 'M' + exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd + exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' + exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' + endif + exe 'hi def link '.grpname.' texMath' + endif + endfun + + " Standard Math Zones: {{{2 + call TexNewMathZone("A","displaymath",1) + call TexNewMathZone("B","eqnarray",1) + call TexNewMathZone("C","equation",1) + call TexNewMathZone("D","math",1) + + " Inline Math Zones: {{{2 + if s:tex_fast =~# 'M' + if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd' + syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup + syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup + syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup + syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup + else + syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup + syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup + syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup + syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup + endif + syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup + endif + + syn match texMathOper "[_^=]" contained + + " Text Inside Math Zones: {{{2 + if s:tex_fast =~# 'M' + if !exists("g:tex_nospell") || !g:tex_nospell + syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell + else + syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup + endif + endif + + " \left..something.. and \right..something.. support: {{{2 + syn match texMathDelimBad contained "\S" + if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm' + syn match texMathDelim contained "\\left\[" + syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={ + syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=} + let s:texMathDelimList=[ + \ ['<' , '<'] , + \ ['>' , '>'] , + \ ['(' , '('] , + \ [')' , ')'] , + \ ['\[' , '['] , + \ [']' , ']'] , + \ ['\\{' , '{'] , + \ ['\\}' , '}'] , + \ ['|' , '|'] , + \ ['\\|' , '‖'] , + \ ['\\backslash' , '\'] , + \ ['\\downarrow' , '↓'] , + \ ['\\Downarrow' , '⇓'] , + \ ['\\lbrace' , '['] , + \ ['\\lceil' , '⌈'] , + \ ['\\lfloor' , '⌊'] , + \ ['\\lgroup' , '⌊'] , + \ ['\\lmoustache' , '⎛'] , + \ ['\\rbrace' , ']'] , + \ ['\\rceil' , '⌉'] , + \ ['\\rfloor' , '⌋'] , + \ ['\\rgroup' , '⌋'] , + \ ['\\rmoustache' , '⎞'] , + \ ['\\uparrow' , '↑'] , + \ ['\\Uparrow' , '↑'] , + \ ['\\updownarrow', '↕'] , + \ ['\\Updownarrow', '⇕']] + if &ambw == "double" || exists("g:tex_usedblwidth") + let s:texMathDelimList= s:texMathDelimList + [ + \ ['\\langle' , '〈'] , + \ ['\\rangle' , '〉']] + else + let s:texMathDelimList= s:texMathDelimList + [ + \ ['\\langle' , '<'] , + \ ['\\rangle' , '>']] + endif + syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad + for texmath in s:texMathDelimList + exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1] + endfor + + else + syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad + syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad + syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad + syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]" + syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow + syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow + syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow + syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow + syn keyword texMathDelimKey contained lbrace lvert rfloor + endif + syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>" + syn match texMathDelim contained "\\lefteqn\>" +endif + +" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1 +syn match texSpecialChar "\\[$&%#{}_]" +if b:tex_stylish + syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1 +else + syn match texSpecialChar "\\[SP@]\A"me=e-1 +endif +syn match texSpecialChar "\\\\" +if !exists("g:tex_no_math") + syn match texOnlyMath "[_^]" +endif +syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S" +if s:tex_conceal !~# 'S' + syn match texSpecialChar '\\glq\>' contained conceal cchar=‚ + syn match texSpecialChar '\\grq\>' contained conceal cchar=‘ + syn match texSpecialChar '\\glqq\>' contained conceal cchar=„ + syn match texSpecialChar '\\grqq\>' contained conceal cchar=“ + syn match texSpecialChar '\\hyp\>' contained conceal cchar=- +endif + +" Comments: {{{1 +" Normal TeX LaTeX : %.... +" Documented TeX Format: ^^A... -and- leading %s (only) +if !s:tex_comment_nospell + syn cluster texCommentGroup contains=texTodo,@Spell +else + syn cluster texCommentGroup contains=texTodo,@NoSpell +endif +syn case ignore +syn keyword texTodo contained combak fixme todo xxx +syn case match +if s:extfname == "dtx" + syn match texComment "\^\^A.*$" contains=@texCommentGroup + syn match texComment "^%\+" contains=@texCommentGroup +else + if s:tex_fold_enabled + " allows syntax-folding of 2 or more contiguous comment lines + " single-line comments are not folded + syn match texComment "%.*$" contains=@texCommentGroup + if s:tex_fast =~# 'c' + TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup + TexFold syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell + endif + else + syn match texComment "%.*$" contains=@texCommentGroup + if s:tex_fast =~# 'c' + syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell + endif + endif +endif + +" %begin-include ... %end-include acts like a texDocZone for \include'd files. Permits spell checking, for example, in such files. +if !s:tex_nospell + TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup,@Spell +else + TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup +endif + +" Separate lines used for verb` and verb# so that the end conditions {{{1 +" will appropriately terminate. +" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there. +if s:tex_fast =~# 'v' + if exists("g:tex_verbspell") && g:tex_verbspell + syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell + " listings package: + if b:tex_stylish + syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell + else + syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell + endif + else + syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" + if b:tex_stylish + syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" + else + syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" + endif + endif +endif + +" Tex Reference Zones: {{{1 +if s:tex_fast =~# 'r' + syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup + syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite + syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite +endif +syn match texRefZone '\\cite\%([tp]\*\=\)\=\>' nextgroup=texRefOption,texCite + +" Handle newcommand, newenvironment : {{{1 +syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl +if s:tex_fast =~# 'V' + syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl + syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl + syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup +endif +syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl +if s:tex_fast =~# 'V' + syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl + syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup + syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup +endif + +" Definitions/Commands: {{{1 +syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl +if b:tex_stylish + syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl + syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl +else + syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl + syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl +endif +syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl +syn match texDefParm contained "#\d\+" + +" TeX Lengths: {{{1 +syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>" + +" TeX String Delimiters: {{{1 +syn match texString "\(``\|''\|,,\)" + +" makeatletter -- makeatother sections +if !s:tex_no_error + if s:tex_fast =~# 'S' + syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained + endif + syn match texStyleStatement "\\[a-zA-Z@]\+" contained + if s:tex_fast =~# 'S' + syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained + syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained + endif +endif + +" Conceal mode support (supports set cole=2) {{{1 +if has("conceal") && &enc == 'utf-8' + + " Math Symbols {{{2 + " (many of these symbols were contributed by Björn Winckler) + if s:tex_conceal =~# 'm' + let s:texMathList=[ + \ ['|' , '‖'], + \ ['aleph' , 'ℵ'], + \ ['amalg' , '∐'], + \ ['angle' , '∠'], + \ ['approx' , '≈'], + \ ['ast' , '∗'], + \ ['asymp' , '≍'], + \ ['backslash' , '∖'], + \ ['bigcap' , '∩'], + \ ['bigcirc' , '○'], + \ ['bigcup' , '∪'], + \ ['bigodot' , '⊙'], + \ ['bigoplus' , '⊕'], + \ ['bigotimes' , '⊗'], + \ ['bigsqcup' , '⊔'], + \ ['bigtriangledown', '∇'], + \ ['bigtriangleup' , '∆'], + \ ['bigvee' , '⋁'], + \ ['bigwedge' , '⋀'], + \ ['bot' , '⊥'], + \ ['bowtie' , '⋈'], + \ ['bullet' , '•'], + \ ['cap' , '∩'], + \ ['cdot' , '·'], + \ ['cdots' , '⋯'], + \ ['circ' , '∘'], + \ ['clubsuit' , '♣'], + \ ['cong' , '≅'], + \ ['coprod' , '∐'], + \ ['copyright' , '©'], + \ ['cup' , '∪'], + \ ['dagger' , '†'], + \ ['dashv' , '⊣'], + \ ['ddagger' , '‡'], + \ ['ddots' , '⋱'], + \ ['diamond' , '⋄'], + \ ['diamondsuit' , '♢'], + \ ['div' , '÷'], + \ ['doteq' , '≐'], + \ ['dots' , '…'], + \ ['downarrow' , '↓'], + \ ['Downarrow' , '⇓'], + \ ['ell' , 'ℓ'], + \ ['emptyset' , '∅'], + \ ['equiv' , '≡'], + \ ['exists' , '∃'], + \ ['flat' , '♭'], + \ ['forall' , '∀'], + \ ['frown' , '⁔'], + \ ['ge' , '≥'], + \ ['geq' , '≥'], + \ ['gets' , '←'], + \ ['gg' , '⟫'], + \ ['hbar' , 'ℏ'], + \ ['heartsuit' , '♡'], + \ ['hookleftarrow' , '↩'], + \ ['hookrightarrow' , '↪'], + \ ['iff' , '⇔'], + \ ['Im' , 'ℑ'], + \ ['imath' , 'ɩ'], + \ ['in' , '∈'], + \ ['infty' , '∞'], + \ ['int' , '∫'], + \ ['jmath' , '𝚥'], + \ ['land' , '∧'], + \ ['lceil' , '⌈'], + \ ['ldots' , '…'], + \ ['le' , '≤'], + \ ['left|' , '|'], + \ ['left\\|' , '‖'], + \ ['left(' , '('], + \ ['left\[' , '['], + \ ['left\\{' , '{'], + \ ['leftarrow' , '←'], + \ ['Leftarrow' , '⇐'], + \ ['leftharpoondown', '↽'], + \ ['leftharpoonup' , '↼'], + \ ['leftrightarrow' , '↔'], + \ ['Leftrightarrow' , '⇔'], + \ ['leq' , '≤'], + \ ['leq' , '≤'], + \ ['lfloor' , '⌊'], + \ ['ll' , '≪'], + \ ['lmoustache' , '╭'], + \ ['lor' , '∨'], + \ ['mapsto' , '↦'], + \ ['mid' , '∣'], + \ ['models' , '╞'], + \ ['mp' , '∓'], + \ ['nabla' , '∇'], + \ ['natural' , '♮'], + \ ['ne' , '≠'], + \ ['nearrow' , '↗'], + \ ['neg' , '¬'], + \ ['neq' , '≠'], + \ ['ni' , '∋'], + \ ['notin' , '∉'], + \ ['nwarrow' , '↖'], + \ ['odot' , '⊙'], + \ ['oint' , '∮'], + \ ['ominus' , '⊖'], + \ ['oplus' , '⊕'], + \ ['oslash' , '⊘'], + \ ['otimes' , '⊗'], + \ ['owns' , '∋'], + \ ['P' , '¶'], + \ ['parallel' , '║'], + \ ['partial' , '∂'], + \ ['perp' , '⊥'], + \ ['pm' , '±'], + \ ['prec' , '≺'], + \ ['preceq' , '⪯'], + \ ['prime' , '′'], + \ ['prod' , '∏'], + \ ['propto' , '∝'], + \ ['rceil' , '⌉'], + \ ['Re' , 'ℜ'], + \ ['quad' , ' '], + \ ['qquad' , ' '], + \ ['rfloor' , '⌋'], + \ ['right|' , '|'], + \ ['right\\|' , '‖'], + \ ['right)' , ')'], + \ ['right]' , ']'], + \ ['right\\}' , '}'], + \ ['rightarrow' , '→'], + \ ['Rightarrow' , '⇒'], + \ ['rightleftharpoons', '⇌'], + \ ['rmoustache' , '╮'], + \ ['S' , '§'], + \ ['searrow' , '↘'], + \ ['setminus' , '∖'], + \ ['sharp' , '♯'], + \ ['sim' , '∼'], + \ ['simeq' , '⋍'], + \ ['smile' , '‿'], + \ ['spadesuit' , '♠'], + \ ['sqcap' , '⊓'], + \ ['sqcup' , '⊔'], + \ ['sqsubset' , '⊏'], + \ ['sqsubseteq' , '⊑'], + \ ['sqsupset' , '⊐'], + \ ['sqsupseteq' , '⊒'], + \ ['star' , '✫'], + \ ['subset' , '⊂'], + \ ['subseteq' , '⊆'], + \ ['succ' , '≻'], + \ ['succeq' , '⪰'], + \ ['sum' , '∑'], + \ ['supset' , '⊃'], + \ ['supseteq' , '⊇'], + \ ['surd' , '√'], + \ ['swarrow' , '↙'], + \ ['times' , '×'], + \ ['to' , '→'], + \ ['top' , '⊤'], + \ ['triangle' , '∆'], + \ ['triangleleft' , '⊲'], + \ ['triangleright' , '⊳'], + \ ['uparrow' , '↑'], + \ ['Uparrow' , '⇑'], + \ ['updownarrow' , '↕'], + \ ['Updownarrow' , '⇕'], + \ ['vdash' , '⊢'], + \ ['vdots' , '⋮'], + \ ['vee' , '∨'], + \ ['wedge' , '∧'], + \ ['wp' , '℘'], + \ ['wr' , '≀']] + if &ambw == "double" || exists("g:tex_usedblwidth") + let s:texMathList= s:texMathList + [ + \ ['right\\rangle' , '〉'], + \ ['left\\langle' , '〈']] + else + let s:texMathList= s:texMathList + [ + \ ['right\\rangle' , '>'], + \ ['left\\langle' , '<']] + endif + for texmath in s:texMathList + if texmath[0] =~# '\w$' + exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1] + else + exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1] + endif + endfor + + if &ambw == "double" + syn match texMathSymbol '\\gg\>' contained conceal cchar=≫ + syn match texMathSymbol '\\ll\>' contained conceal cchar=≪ + else + syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫ + syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪ + endif + + syn match texMathSymbol '\\hat{a}' contained conceal cchar=â + syn match texMathSymbol '\\hat{A}' contained conceal cchar= + syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ + syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ + syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê + syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê + syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ + syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ + syn match texMathSymbol '\\hat{i}' contained conceal cchar=î + syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î + syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô + syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô + syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ + syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ + syn match texMathSymbol '\\hat{u}' contained conceal cchar=û + syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û + syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ + syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ + syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ + syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ +" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅ + + syn match texMathSymbol '\\dot{B}' contained conceal cchar=Ḃ + syn match texMathSymbol '\\dot{b}' contained conceal cchar=ḃ + syn match texMathSymbol '\\dot{D}' contained conceal cchar=Ḋ + syn match texMathSymbol '\\dot{d}' contained conceal cchar=ḋ + syn match texMathSymbol '\\dot{F}' contained conceal cchar=Ḟ + syn match texMathSymbol '\\dot{f}' contained conceal cchar=ḟ + syn match texMathSymbol '\\dot{H}' contained conceal cchar=Ḣ + syn match texMathSymbol '\\dot{h}' contained conceal cchar=ḣ + syn match texMathSymbol '\\dot{M}' contained conceal cchar=Ṁ + syn match texMathSymbol '\\dot{m}' contained conceal cchar=ṁ + syn match texMathSymbol '\\dot{N}' contained conceal cchar=Ṅ + syn match texMathSymbol '\\dot{n}' contained conceal cchar=ṅ + syn match texMathSymbol '\\dot{P}' contained conceal cchar=Ṗ + syn match texMathSymbol '\\dot{p}' contained conceal cchar=ṗ + syn match texMathSymbol '\\dot{R}' contained conceal cchar=Ṙ + syn match texMathSymbol '\\dot{r}' contained conceal cchar=ṙ + syn match texMathSymbol '\\dot{S}' contained conceal cchar=Ṡ + syn match texMathSymbol '\\dot{s}' contained conceal cchar=ṡ + syn match texMathSymbol '\\dot{T}' contained conceal cchar=Ṫ + syn match texMathSymbol '\\dot{t}' contained conceal cchar=ṫ + syn match texMathSymbol '\\dot{W}' contained conceal cchar=Ẇ + syn match texMathSymbol '\\dot{w}' contained conceal cchar=ẇ + syn match texMathSymbol '\\dot{X}' contained conceal cchar=Ẋ + syn match texMathSymbol '\\dot{x}' contained conceal cchar=ẋ + syn match texMathSymbol '\\dot{Y}' contained conceal cchar=Ẏ + syn match texMathSymbol '\\dot{y}' contained conceal cchar=ẏ + syn match texMathSymbol '\\dot{Z}' contained conceal cchar=Ż + syn match texMathSymbol '\\dot{z}' contained conceal cchar=ż + + syn match texMathSymbol '\\dot{C}' contained conceal cchar=Ċ + syn match texMathSymbol '\\dot{c}' contained conceal cchar=ċ + syn match texMathSymbol '\\dot{E}' contained conceal cchar=Ė + syn match texMathSymbol '\\dot{e}' contained conceal cchar=ė + syn match texMathSymbol '\\dot{G}' contained conceal cchar=Ġ + syn match texMathSymbol '\\dot{g}' contained conceal cchar=ġ + syn match texMathSymbol '\\dot{I}' contained conceal cchar=İ + + syn match texMathSymbol '\\dot{A}' contained conceal cchar=Ȧ + syn match texMathSymbol '\\dot{a}' contained conceal cchar=ȧ + syn match texMathSymbol '\\dot{O}' contained conceal cchar=Ȯ + syn match texMathSymbol '\\dot{o}' contained conceal cchar=ȯ + endif + + " Greek {{{2 + if s:tex_conceal =~# 'g' + fun! s:Greek(group,pat,cchar) + exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar + endfun + call s:Greek('texGreek','\\alpha\>' ,'α') + call s:Greek('texGreek','\\beta\>' ,'β') + call s:Greek('texGreek','\\gamma\>' ,'γ') + call s:Greek('texGreek','\\delta\>' ,'δ') + call s:Greek('texGreek','\\epsilon\>' ,'ϵ') + call s:Greek('texGreek','\\varepsilon\>' ,'ε') + call s:Greek('texGreek','\\zeta\>' ,'ζ') + call s:Greek('texGreek','\\eta\>' ,'η') + call s:Greek('texGreek','\\theta\>' ,'θ') + call s:Greek('texGreek','\\vartheta\>' ,'ϑ') + call s:Greek('texGreek','\\iota\>' ,'ι') + call s:Greek('texGreek','\\kappa\>' ,'κ') + call s:Greek('texGreek','\\lambda\>' ,'λ') + call s:Greek('texGreek','\\mu\>' ,'μ') + call s:Greek('texGreek','\\nu\>' ,'ν') + call s:Greek('texGreek','\\xi\>' ,'ξ') + call s:Greek('texGreek','\\pi\>' ,'π') + call s:Greek('texGreek','\\varpi\>' ,'ϖ') + call s:Greek('texGreek','\\rho\>' ,'ρ') + call s:Greek('texGreek','\\varrho\>' ,'ϱ') + call s:Greek('texGreek','\\sigma\>' ,'σ') + call s:Greek('texGreek','\\varsigma\>' ,'ς') + call s:Greek('texGreek','\\tau\>' ,'τ') + call s:Greek('texGreek','\\upsilon\>' ,'υ') + call s:Greek('texGreek','\\phi\>' ,'ϕ') + call s:Greek('texGreek','\\varphi\>' ,'φ') + call s:Greek('texGreek','\\chi\>' ,'χ') + call s:Greek('texGreek','\\psi\>' ,'ψ') + call s:Greek('texGreek','\\omega\>' ,'ω') + call s:Greek('texGreek','\\Gamma\>' ,'Γ') + call s:Greek('texGreek','\\Delta\>' ,'Δ') + call s:Greek('texGreek','\\Theta\>' ,'Θ') + call s:Greek('texGreek','\\Lambda\>' ,'Λ') + call s:Greek('texGreek','\\Xi\>' ,'Ξ') + call s:Greek('texGreek','\\Pi\>' ,'Π') + call s:Greek('texGreek','\\Sigma\>' ,'Σ') + call s:Greek('texGreek','\\Upsilon\>' ,'Υ') + call s:Greek('texGreek','\\Phi\>' ,'Φ') + call s:Greek('texGreek','\\Chi\>' ,'Χ') + call s:Greek('texGreek','\\Psi\>' ,'Ψ') + call s:Greek('texGreek','\\Omega\>' ,'Ω') + delfun s:Greek + endif + + " Superscripts/Subscripts {{{2 + if s:tex_conceal =~# 's' + if s:tex_fast =~# 's' + syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher + syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher + endif + " s:SuperSub: + fun! s:SuperSub(group,leader,pat,cchar) + if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts) +" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">") + exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar + exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s' + endif + endfun + call s:SuperSub('texSuperscript','\^','0','⁰') + call s:SuperSub('texSuperscript','\^','1','¹') + call s:SuperSub('texSuperscript','\^','2','²') + call s:SuperSub('texSuperscript','\^','3','³') + call s:SuperSub('texSuperscript','\^','4','⁴') + call s:SuperSub('texSuperscript','\^','5','⁵') + call s:SuperSub('texSuperscript','\^','6','⁶') + call s:SuperSub('texSuperscript','\^','7','⁷') + call s:SuperSub('texSuperscript','\^','8','⁸') + call s:SuperSub('texSuperscript','\^','9','⁹') + call s:SuperSub('texSuperscript','\^','a','ᵃ') + call s:SuperSub('texSuperscript','\^','b','ᵇ') + call s:SuperSub('texSuperscript','\^','c','ᶜ') + call s:SuperSub('texSuperscript','\^','d','ᵈ') + call s:SuperSub('texSuperscript','\^','e','ᵉ') + call s:SuperSub('texSuperscript','\^','f','ᶠ') + call s:SuperSub('texSuperscript','\^','g','ᵍ') + call s:SuperSub('texSuperscript','\^','h','ʰ') + call s:SuperSub('texSuperscript','\^','i','ⁱ') + call s:SuperSub('texSuperscript','\^','j','ʲ') + call s:SuperSub('texSuperscript','\^','k','ᵏ') + call s:SuperSub('texSuperscript','\^','l','ˡ') + call s:SuperSub('texSuperscript','\^','m','ᵐ') + call s:SuperSub('texSuperscript','\^','n','ⁿ') + call s:SuperSub('texSuperscript','\^','o','ᵒ') + call s:SuperSub('texSuperscript','\^','p','ᵖ') + call s:SuperSub('texSuperscript','\^','r','ʳ') + call s:SuperSub('texSuperscript','\^','s','ˢ') + call s:SuperSub('texSuperscript','\^','t','ᵗ') + call s:SuperSub('texSuperscript','\^','u','ᵘ') + call s:SuperSub('texSuperscript','\^','v','ᵛ') + call s:SuperSub('texSuperscript','\^','w','ʷ') + call s:SuperSub('texSuperscript','\^','x','ˣ') + call s:SuperSub('texSuperscript','\^','y','ʸ') + call s:SuperSub('texSuperscript','\^','z','ᶻ') + call s:SuperSub('texSuperscript','\^','A','ᴬ') + call s:SuperSub('texSuperscript','\^','B','ᴮ') + call s:SuperSub('texSuperscript','\^','D','ᴰ') + call s:SuperSub('texSuperscript','\^','E','ᴱ') + call s:SuperSub('texSuperscript','\^','G','ᴳ') + call s:SuperSub('texSuperscript','\^','H','ᴴ') + call s:SuperSub('texSuperscript','\^','I','ᴵ') + call s:SuperSub('texSuperscript','\^','J','ᴶ') + call s:SuperSub('texSuperscript','\^','K','ᴷ') + call s:SuperSub('texSuperscript','\^','L','ᴸ') + call s:SuperSub('texSuperscript','\^','M','ᴹ') + call s:SuperSub('texSuperscript','\^','N','ᴺ') + call s:SuperSub('texSuperscript','\^','O','ᴼ') + call s:SuperSub('texSuperscript','\^','P','ᴾ') + call s:SuperSub('texSuperscript','\^','R','ᴿ') + call s:SuperSub('texSuperscript','\^','T','ᵀ') + call s:SuperSub('texSuperscript','\^','U','ᵁ') + call s:SuperSub('texSuperscript','\^','V','ⱽ') + call s:SuperSub('texSuperscript','\^','W','ᵂ') + call s:SuperSub('texSuperscript','\^',',','︐') + call s:SuperSub('texSuperscript','\^',':','︓') + call s:SuperSub('texSuperscript','\^',';','︔') + call s:SuperSub('texSuperscript','\^','+','⁺') + call s:SuperSub('texSuperscript','\^','-','⁻') + call s:SuperSub('texSuperscript','\^','<','˂') + call s:SuperSub('texSuperscript','\^','>','˃') + call s:SuperSub('texSuperscript','\^','/','ˊ') + call s:SuperSub('texSuperscript','\^','(','⁽') + call s:SuperSub('texSuperscript','\^',')','⁾') + call s:SuperSub('texSuperscript','\^','\.','˙') + call s:SuperSub('texSuperscript','\^','=','˭') + call s:SuperSub('texSubscript','_','0','₀') + call s:SuperSub('texSubscript','_','1','₁') + call s:SuperSub('texSubscript','_','2','₂') + call s:SuperSub('texSubscript','_','3','₃') + call s:SuperSub('texSubscript','_','4','₄') + call s:SuperSub('texSubscript','_','5','₅') + call s:SuperSub('texSubscript','_','6','₆') + call s:SuperSub('texSubscript','_','7','₇') + call s:SuperSub('texSubscript','_','8','₈') + call s:SuperSub('texSubscript','_','9','₉') + call s:SuperSub('texSubscript','_','a','ₐ') + call s:SuperSub('texSubscript','_','e','ₑ') + call s:SuperSub('texSubscript','_','h','ₕ') + call s:SuperSub('texSubscript','_','i','ᵢ') + call s:SuperSub('texSubscript','_','j','ⱼ') + call s:SuperSub('texSubscript','_','k','ₖ') + call s:SuperSub('texSubscript','_','l','ₗ') + call s:SuperSub('texSubscript','_','m','ₘ') + call s:SuperSub('texSubscript','_','n','ₙ') + call s:SuperSub('texSubscript','_','o','ₒ') + call s:SuperSub('texSubscript','_','p','ₚ') + call s:SuperSub('texSubscript','_','r','ᵣ') + call s:SuperSub('texSubscript','_','s','ₛ') + call s:SuperSub('texSubscript','_','t','ₜ') + call s:SuperSub('texSubscript','_','u','ᵤ') + call s:SuperSub('texSubscript','_','v','ᵥ') + call s:SuperSub('texSubscript','_','x','ₓ') + call s:SuperSub('texSubscript','_',',','︐') + call s:SuperSub('texSubscript','_','+','₊') + call s:SuperSub('texSubscript','_','-','₋') + call s:SuperSub('texSubscript','_','/','ˏ') + call s:SuperSub('texSubscript','_','(','₍') + call s:SuperSub('texSubscript','_',')','₎') + call s:SuperSub('texSubscript','_','\.','‸') + call s:SuperSub('texSubscript','_','r','ᵣ') + call s:SuperSub('texSubscript','_','v','ᵥ') + call s:SuperSub('texSubscript','_','x','ₓ') + call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ') + call s:SuperSub('texSubscript','_','\\delta\>','ᵨ') + call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ') + call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ') + call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ') + + delfun s:SuperSub + endif + + " Accented characters and Ligatures: {{{2 + if s:tex_conceal =~# 'a' + if b:tex_stylish + syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1 + syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1 + syn match texLigature '--' + syn match texLigature '---' + else + fun! s:Accents(chr,...) + let i= 1 + for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"] + if i > a:0 + break + endif + if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?' + let i= i + 1 + continue + endif + if accent =~# '\a' + exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i} + else + exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i} + endif + let i= i + 1 + endfor + endfun + " \` \' \^ \" \~ \. \= \c \H \k \r \u \v + call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ') + call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ') + call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č') + call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č') + call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď') + call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď') + call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě') + call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě') + call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ') + call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ') + call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ') + call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ') + call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ') + call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ') + call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ') + call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ') + call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ') + call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ') + call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ') + call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň') + call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň') + call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ') + call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ') + call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř') + call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř') + call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š') + call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š') + call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť') + call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť') + call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ') + call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ') + call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ') + call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ') + call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ') + call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ') + call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž') + call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž') + call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ') + " \` \' \^ \" \~ \. \= \c \H \k \r \u \v + delfun s:Accents + syn match texAccent '\\aa\>' conceal cchar=å + syn match texAccent '\\AA\>' conceal cchar=Å + syn match texAccent '\\o\>' conceal cchar=ø + syn match texAccent '\\O\>' conceal cchar=Ø + syn match texLigature '\\AE\>' conceal cchar=Æ + syn match texLigature '\\ae\>' conceal cchar=æ + syn match texLigature '\\oe\>' conceal cchar=œ + syn match texLigature '\\OE\>' conceal cchar=Œ + syn match texLigature '\\ss\>' conceal cchar=ß + syn match texLigature '--' conceal cchar=– + syn match texLigature '---' conceal cchar=— + endif + endif +endif + +" --------------------------------------------------------------------- +" LaTeX synchronization: {{{1 +syn sync maxlines=200 +syn sync minlines=50 + +syn sync match texSyncStop groupthere NONE "%stopzone\>" + +" Synchronization: {{{1 +" The $..$ and $$..$$ make for impossible sync patterns +" (one can't tell if a "$$" starts or stops a math zone by itself) +" The following grouptheres coupled with minlines above +" help improve the odds of good syncing. +if !exists("g:tex_no_math") + syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{center}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{description}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{table}" + syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}" + syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>" +endif + +" --------------------------------------------------------------------- +" Highlighting: {{{1 + +" Define the default highlighting. {{{1 +if !exists("skip_tex_syntax_inits") + + " TeX highlighting groups which should share similar highlighting + if !exists("g:tex_no_error") + if !exists("g:tex_no_math") + hi def link texBadMath texError + hi def link texMathDelimBad texError + hi def link texMathError texError + if !b:tex_stylish + hi def link texOnlyMath texError + endif + endif + hi def link texError Error + endif + + hi texBoldStyle gui=bold cterm=bold + hi texItalStyle gui=italic cterm=italic + hi texBoldItalStyle gui=bold,italic cterm=bold,italic + hi texItalBoldStyle gui=bold,italic cterm=bold,italic + hi def link texEmphStyle texItalStyle + hi def link texCite texRefZone + hi def link texDefCmd texDef + hi def link texDefName texDef + hi def link texDocType texCmdName + hi def link texDocTypeArgs texCmdArgs + hi def link texInputFileOpt texCmdArgs + hi def link texInputCurlies texDelimiter + hi def link texLigature texSpecialChar + if !exists("g:tex_no_math") + hi def link texMathDelimSet1 texMathDelim + hi def link texMathDelimSet2 texMathDelim + hi def link texMathDelimKey texMathDelim + hi def link texMathMatcher texMath + hi def link texAccent texStatement + hi def link texGreek texStatement + hi def link texSuperscript texStatement + hi def link texSubscript texStatement + hi def link texSuperscripts texSuperscript + hi def link texSubscripts texSubscript + hi def link texMathSymbol texStatement + hi def link texMathZoneV texMath + hi def link texMathZoneW texMath + hi def link texMathZoneX texMath + hi def link texMathZoneY texMath + hi def link texMathZoneV texMath + hi def link texMathZoneZ texMath + endif + hi def link texBeginEnd texCmdName + hi def link texBeginEndName texSection + hi def link texSpaceCode texStatement + hi def link texStyleStatement texStatement + hi def link texTypeSize texType + hi def link texTypeStyle texType + + " Basic TeX highlighting groups + hi def link texCmdArgs Number + hi def link texCmdName Statement + hi def link texComment Comment + hi def link texDef Statement + hi def link texDefParm Special + hi def link texDelimiter Delimiter + hi def link texInput Special + hi def link texInputFile Special + hi def link texLength Number + hi def link texMath Special + hi def link texMathDelim Statement + hi def link texMathOper Operator + hi def link texNewCmd Statement + hi def link texNewEnv Statement + hi def link texOption Number + hi def link texRefZone Special + hi def link texSection PreCondit + hi def link texSpaceCodeChar Special + hi def link texSpecialChar SpecialChar + hi def link texStatement Statement + hi def link texString String + hi def link texTodo Todo + hi def link texType Type + hi def link texZone PreCondit + +endif + +" Cleanup: {{{1 +delc TexFold +unlet s:extfname +let b:current_syntax = "tex" +let &cpo = s:keepcpo +unlet s:keepcpo +" vim: ts=8 fdm=marker diff --git a/compiler/tex.vim b/compiler/tex.vim deleted file mode 100644 index bfe5b2a5..00000000 --- a/compiler/tex.vim +++ /dev/null @@ -1,71 +0,0 @@ -if has_key(g:polyglot_is_disabled, 'tex') - finish -endif - -" Vim compiler file -" Compiler: TeX -" Maintainer: Artem Chuprina -" Last Change: 2012 Apr 30 - -if exists("current_compiler") - finish -endif -let s:keepcpo= &cpo -set cpo&vim - -if exists(":CompilerSet") != 2 " older Vim always used :setlocal - command -nargs=* CompilerSet setlocal -endif - -" If makefile exists and we are not asked to ignore it, we use standard make -" (do not redefine makeprg) -if exists('b:tex_ignore_makefile') || exists('g:tex_ignore_makefile') || - \(!filereadable('Makefile') && !filereadable('makefile')) - " If buffer-local variable 'tex_flavor' exists, it defines TeX flavor, - " otherwize the same for global variable with same name, else it will be - " LaTeX - if exists("b:tex_flavor") - let current_compiler = b:tex_flavor - elseif exists("g:tex_flavor") - let current_compiler = g:tex_flavor - else - let current_compiler = "latex" - endif - let &l:makeprg=current_compiler.' -interaction=nonstopmode' -else - let current_compiler = 'make' -endif - -" Value errorformat are taken from vim help, see :help errorformat-LaTeX, with -" addition from Srinath Avadhanula -CompilerSet errorformat=%E!\ LaTeX\ %trror:\ %m, - \%E!\ %m, - \%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#, - \%+W%.%#\ at\ lines\ %l--%*\\d, - \%WLaTeX\ %.%#Warning:\ %m, - \%Cl.%l\ %m, - \%+C\ \ %m., - \%+C%.%#-%.%#, - \%+C%.%#[]%.%#, - \%+C[]%.%#, - \%+C%.%#%[{}\\]%.%#, - \%+C<%.%#>%.%#, - \%C\ \ %m, - \%-GSee\ the\ LaTeX%m, - \%-GType\ \ H\ %m, - \%-G\ ...%.%#, - \%-G%.%#\ (C)\ %.%#, - \%-G(see\ the\ transcript%.%#), - \%-G\\s%#, - \%+O(%*[^()])%r, - \%+O%*[^()](%*[^()])%r, - \%+P(%f%r, - \%+P\ %\\=(%f%r, - \%+P%*[^()](%f%r, - \%+P[%\\d%[^()]%#(%f%r, - \%+Q)%r, - \%+Q%*[^()])%r, - \%+Q[%\\d%*[^()])%r - -let &cpo = s:keepcpo -unlet s:keepcpo diff --git a/ftplugin/tex.vim b/ftplugin/tex.vim deleted file mode 100644 index 0fcb47a8..00000000 --- a/ftplugin/tex.vim +++ /dev/null @@ -1,50 +0,0 @@ -if has_key(g:polyglot_is_disabled, 'tex') - finish -endif - -" LaTeX filetype plugin -" Language: LaTeX (ft=tex) -" Maintainer: Benji Fisher, Ph.D. -" Version: 1.4 -" Last Change: Wed 19 Apr 2006 -" URL: http://www.vim.org/script.php?script_id=411 - -" Only do this when not done yet for this buffer. -if exists("b:did_ftplugin") - finish -endif - -" Start with plain TeX. This will also define b:did_ftplugin . -source $VIMRUNTIME/ftplugin/plaintex.vim - -" Avoid problems if running in 'compatible' mode. -let s:save_cpo = &cpo -set cpo&vim - -let b:undo_ftplugin .= "| setl inex<" - -" Allow "[d" to be used to find a macro definition: -" Recognize plain TeX \def as well as LaTeX \newcommand and \renewcommand . -" I may as well add the AMS-LaTeX DeclareMathOperator as well. -let &l:define .= '\|\\\(re\)\=new\(boolean\|command\|counter\|environment\|font' - \ . '\|if\|length\|savebox\|theorem\(style\)\=\)\s*\*\=\s*{\=' - \ . '\|DeclareMathOperator\s*{\=\s*' - -" Tell Vim how to recognize LaTeX \include{foo} and plain \input bar : -let &l:include .= '\|\\include{' -" On some file systems, "{" and "}" are inluded in 'isfname'. In case the -" TeX file has \include{fname} (LaTeX only), strip everything except "fname". -let &l:includeexpr = "substitute(v:fname, '^.\\{-}{\\|}.*', '', 'g')" - -" The following lines enable the macros/matchit.vim plugin for -" extended matching with the % key. -" ftplugin/plaintex.vim already defines b:match_skip and b:match_ignorecase -" and matches \(, \), \[, \], \{, and \} . -if exists("loaded_matchit") - let b:match_words .= ',\\begin\s*\({\a\+\*\=}\):\\end\s*\1' -endif " exists("loaded_matchit") - -let &cpo = s:save_cpo -unlet s:save_cpo - -" vim:sts=2:sw=2: diff --git a/indent/tex.vim b/indent/tex.vim deleted file mode 100644 index 4cd17b84..00000000 --- a/indent/tex.vim +++ /dev/null @@ -1,427 +0,0 @@ -if has_key(g:polyglot_is_disabled, 'tex') - finish -endif - -" Vim indent file -" Language: LaTeX -" Maintainer: Yichao Zhou -" Created: Sat, 16 Feb 2002 16:50:19 +0100 -" Version: 1.0.0 -" Please email me if you found something I can do. Comments, bug report and -" feature request are welcome. - -" Last Update: {{{ -" 25th Sep 2002, by LH : -" (*) better support for the option -" (*) use some regex instead of several '||'. -" Oct 9th, 2003, by JT: -" (*) don't change indentation of lines starting with '%' -" 2005/06/15, Moshe Kaminsky -" (*) New variables: -" g:tex_items, g:tex_itemize_env, g:tex_noindent_env -" 2011/3/6, by Yichao Zhou -" (*) Don't change indentation of lines starting with '%' -" I don't see any code with '%' and it doesn't work properly -" so I add some code. -" (*) New features: Add smartindent-like indent for "{}" and "[]". -" (*) New variables: g:tex_indent_brace -" 2011/9/25, by Yichao Zhou -" (*) Bug fix: smartindent-like indent for "[]" -" (*) New features: Align with "&". -" (*) New variable: g:tex_indent_and. -" 2011/10/23 by Yichao Zhou -" (*) Bug fix: improve the smartindent-like indent for "{}" and -" "[]". -" 2012/02/27 by Yichao Zhou -" (*) Bug fix: support default folding marker. -" (*) Indent with "&" is not very handy. Make it not enable by -" default. -" 2012/03/06 by Yichao Zhou -" (*) Modify "&" behavior and make it default again. Now "&" -" won't align when there are more then one "&" in the previous -" line. -" (*) Add indent "\left(" and "\right)" -" (*) Trust user when in "verbatim" and "lstlisting" -" 2012/03/11 by Yichao Zhou -" (*) Modify "&" so that only indent when current line start with -" "&". -" 2012/03/12 by Yichao Zhou -" (*) Modify indentkeys. -" 2012/03/18 by Yichao Zhou -" (*) Add &cpo -" 2013/05/02 by Yichao Zhou -" (*) Fix problem about GetTeXIndent checker. Thank Albert Netymk -" for reporting this. -" 2014/06/23 by Yichao Zhou -" (*) Remove the feature g:tex_indent_and because it is buggy. -" (*) If there is not any obvious indentation hints, we do not -" alert our user's current indentation. -" (*) g:tex_indent_brace now only works if the open brace is the -" last character of that line. -" 2014/08/03 by Yichao Zhou -" (*) Indent current line if last line has larger indentation -" 2016/11/08 by Yichao Zhou -" (*) Fix problems for \[ and \]. Thanks Bruno for reporting. -" 2017/04/30 by Yichao Zhou -" (*) Fix a bug between g:tex_noindent_env and g:tex_indent_items -" Now g:tex_noindent_env='document\|verbatim\|itemize' (Emacs -" style) is supported. Thanks Miles Wheeler for reporting. -" 2018/02/07 by Yichao Zhou -" (*) Make indentation more smart in the normal mode -" 2020/04/26 by Yichao Zhou -" (*) Fix a bug related to \[ & \]. Thanks Manuel Boni for -" reporting. -" -" }}} - -" Document: {{{ -" -" For proper latex experience, please put -" let g:tex_flavor = "latex" -" into your vimrc. -" -" * g:tex_indent_brace -" -" If this variable is unset or non-zero, it will use smartindent-like style -" for "{}" and "[]". Now this only works if the open brace is the last -" character of that line. -" -" % Example 1 -" \usetikzlibrary{ -" external -" } -" -" % Example 2 -" \tikzexternalize[ -" prefix=tikz] -" -" * g:tex_indent_items -" -" If this variable is set, item-environments are indented like Emacs does -" it, i.e., continuation lines are indented with a shiftwidth. -" -" set unset -" ------------------------------------------------------ -" \begin{itemize} \begin{itemize} -" \item blablabla \item blablabla -" bla bla bla bla bla bla -" \item blablabla \item blablabla -" bla bla bla bla bla bla -" \end{itemize} \end{itemize} -" -" -" * g:tex_items -" -" A list of tokens to be considered as commands for the beginning of an item -" command. The tokens should be separated with '\|'. The initial '\' should -" be escaped. The default is '\\bibitem\|\\item'. -" -" * g:tex_itemize_env -" -" A list of environment names, separated with '\|', where the items (item -" commands matching g:tex_items) may appear. The default is -" 'itemize\|description\|enumerate\|thebibliography'. -" -" * g:tex_noindent_env -" -" A list of environment names. separated with '\|', where no indentation is -" required. The default is 'document\|verbatim'. -" }}} - -" Only define the function once -if exists("b:did_indent") - finish -endif - -let s:cpo_save = &cpo -set cpo&vim - -" Define global variable {{{ - -let b:did_indent = 1 - -if !exists("g:tex_indent_items") - let g:tex_indent_items = 1 -endif -if !exists("g:tex_indent_brace") - let g:tex_indent_brace = 1 -endif -if !exists("g:tex_max_scan_line") - let g:tex_max_scan_line = 60 -endif -if g:tex_indent_items - if !exists("g:tex_itemize_env") - let g:tex_itemize_env = 'itemize\|description\|enumerate\|thebibliography' - endif - if !exists('g:tex_items') - let g:tex_items = '\\bibitem\|\\item' - endif -else - let g:tex_items = '' -endif - -if !exists("g:tex_noindent_env") - let g:tex_noindent_env = 'document\|verbatim\|lstlisting' -endif "}}} - -" VIM Setting " {{{ -setlocal autoindent -setlocal nosmartindent -setlocal indentexpr=GetTeXIndent() -setlocal indentkeys& -exec 'setlocal indentkeys+=[,(,{,),},],\&' . substitute(g:tex_items, '^\|\(\\|\)', ',=', 'g') -let g:tex_items = '^\s*' . substitute(g:tex_items, '^\(\^\\s\*\)*', '', '') -" }}} - -function! GetTeXIndent() " {{{ - " Find a non-blank line above the current line. - let lnum = prevnonblank(v:lnum - 1) - let cnum = v:lnum - - " Comment line is not what we need. - while lnum != 0 && getline(lnum) =~ '^\s*%' - let lnum = prevnonblank(lnum - 1) - endwhile - - " At the start of the file use zero indent. - if lnum == 0 - return 0 - endif - - let line = substitute(getline(lnum), '\s*%.*', '','g') " last line - let cline = substitute(getline(v:lnum), '\s*%.*', '', 'g') " current line - - let ccol = 1 - while cline[ccol] =~ '\s' - let ccol += 1 - endwhile - - " We are in verbatim, so do what our user what. - if synIDattr(synID(v:lnum, ccol, 1), "name") == "texZone" - if empty(cline) - return indent(lnum) - else - return indent(v:lnum) - endif - endif - - if lnum == 0 - return 0 - endif - - let ind = indent(lnum) - let stay = 1 - - " New code for comment: retain the indent of current line - if cline =~ '^\s*%' - return indent(v:lnum) - endif - - " Add a 'shiftwidth' after beginning of environments. - " Don't add it for \begin{document} and \begin{verbatim} - " if line =~ '^\s*\\begin{\(.*\)}' && line !~ 'verbatim' - " LH modification : \begin does not always start a line - " ZYC modification : \end after \begin won't cause wrong indent anymore - if line =~ '\\begin{.*}' - if line !~ g:tex_noindent_env - let ind = ind + shiftwidth() - let stay = 0 - endif - - if g:tex_indent_items - " Add another sw for item-environments - if line =~ g:tex_itemize_env - let ind = ind + shiftwidth() - let stay = 0 - endif - endif - endif - - if cline =~ '\\end{.*}' - let retn = s:GetEndIndentation(v:lnum) - if retn != -1 - return retn - endif - end - " Subtract a 'shiftwidth' when an environment ends - if cline =~ '\\end{.*}' - \ && cline !~ g:tex_noindent_env - \ && cline !~ '\\begin{.*}.*\\end{.*}' - if g:tex_indent_items - " Remove another sw for item-environments - if cline =~ g:tex_itemize_env - let ind = ind - shiftwidth() - let stay = 0 - endif - endif - - let ind = ind - shiftwidth() - let stay = 0 - endif - - if g:tex_indent_brace - if line =~ '[[{]$' - let ind += shiftwidth() - let stay = 0 - endif - - if cline =~ '^\s*\\\?[\]}]' && s:CheckPairedIsLastCharacter(v:lnum, ccol) - let ind -= shiftwidth() - let stay = 0 - endif - - if line !~ '^\s*\\\?[\]}]' - for i in range(1, strlen(line)-1) - let char = line[i] - if char == ']' || char == '}' - if s:CheckPairedIsLastCharacter(lnum, i) - let ind -= shiftwidth() - let stay = 0 - endif - endif - endfor - endif - endif - - " Special treatment for 'item' - " ---------------------------- - - if g:tex_indent_items - " '\item' or '\bibitem' itself: - if cline =~ g:tex_items - let ind = ind - shiftwidth() - let stay = 0 - endif - " lines following to '\item' are intented once again: - if line =~ g:tex_items - let ind = ind + shiftwidth() - let stay = 0 - endif - endif - - if stay && mode() == 'i' - " If there is no obvious indentation hint, and indentation is triggered - " in insert mode, we trust our user. - if empty(cline) - return ind - else - return max([indent(v:lnum), s:GetLastBeginIndentation(v:lnum)]) - endif - else - return ind - endif -endfunction "}}} - -function! s:GetLastBeginIndentation(lnum) " {{{ - let matchend = 1 - for lnum in range(a:lnum-1, max([a:lnum - g:tex_max_scan_line, 1]), -1) - let line = getline(lnum) - if line =~ '\\end{.*}' - let matchend += 1 - endif - if line =~ '\\begin{.*}' - let matchend -= 1 - endif - if matchend == 0 - if line =~ g:tex_noindent_env - return indent(lnum) - endif - if line =~ g:tex_itemize_env - return indent(lnum) + 2 * shiftwidth() - endif - return indent(lnum) + shiftwidth() - endif - endfor - return -1 -endfunction - -function! s:GetEndIndentation(lnum) " {{{ - if getline(a:lnum) =~ '\\begin{.*}.*\\end{.*}' - return -1 - endif - - let min_indent = 100 - let matchend = 1 - for lnum in range(a:lnum-1, max([a:lnum-g:tex_max_scan_line, 1]), -1) - let line = getline(lnum) - if line =~ '\\end{.*}' - let matchend += 1 - endif - if line =~ '\\begin{.*}' - let matchend -= 1 - endif - if matchend == 0 - return indent(lnum) - endif - if !empty(line) - let min_indent = min([min_indent, indent(lnum)]) - endif - endfor - return min_indent - shiftwidth() -endfunction - -" Most of the code is from matchparen.vim -function! s:CheckPairedIsLastCharacter(lnum, col) "{{{ - let c_lnum = a:lnum - let c_col = a:col+1 - - let line = getline(c_lnum) - if line[c_col-1] == '\' - let c_col = c_col + 1 - endif - let c = line[c_col-1] - - let plist = split(&matchpairs, '.\zs[:,]') - let i = index(plist, c) - if i < 0 - return 0 - endif - - " Figure out the arguments for searchpairpos(). - if i % 2 == 0 - let s_flags = 'nW' - let c2 = plist[i + 1] - else - let s_flags = 'nbW' - let c2 = c - let c = plist[i - 1] - endif - if c == '[' - let c = '\[' - let c2 = '\]' - endif - - " Find the match. When it was just before the cursor move it there for a - " moment. - let save_cursor = winsaveview() - call cursor(c_lnum, c_col) - - " When not in a string or comment ignore matches inside them. - " We match "escape" for special items, such as lispEscapeSpecial. - let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' . - \ '=~? "string\\|character\\|singlequote\\|escape\\|comment"' - execute 'if' s_skip '| let s_skip = 0 | endif' - - let stopline = max([0, c_lnum - g:tex_max_scan_line]) - - " Limit the search time to 300 msec to avoid a hang on very long lines. - " This fails when a timeout is not supported. - try - let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, 100) - catch /E118/ - endtry - - call winrestview(save_cursor) - - if m_lnum > 0 - let line = getline(m_lnum) - return strlen(line) == m_col - endif - - return 0 -endfunction "}}} - -let &cpo = s:cpo_save -unlet s:cpo_save - -" vim: set sw=4 textwidth=80: diff --git a/packages.yaml b/packages.yaml index 682fdf3b..5103de98 100644 --- a/packages.yaml +++ b/packages.yaml @@ -4966,6 +4966,7 @@ filetypes: name: tex remote: vim/vim:runtime glob: "**/tex.vim" +extract_in_after: true filetypes: - name: tex patterns: diff --git a/scripts/build b/scripts/build index 496198f8..0ffa2039 100755 --- a/scripts/build +++ b/scripts/build @@ -517,7 +517,11 @@ def extract(packages) globs.each do |glob| Dir.glob("#{subdir}/#{glob}", base: subtree).each do |p| next unless File.file?("#{subtree}#{p}") - copy_file(package["name"], "#{subtree}#{p}", p) + target = p + if package["extract_in_after"] == true + target = "after/#{target}" + end + copy_file(package["name"], "#{subtree}#{p}", target) end end elsif File.exist?(subpath) diff --git a/syntax/tex.vim b/syntax/tex.vim deleted file mode 100644 index 8a30dc30..00000000 --- a/syntax/tex.vim +++ /dev/null @@ -1,1344 +0,0 @@ -if has_key(g:polyglot_is_disabled, 'tex') - finish -endif - -" Vim syntax file -" Language: TeX -" Maintainer: Charles E. Campbell -" Last Change: Jun 29, 2020 -" Version: 119 -" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX -" -" Notes: {{{1 -" -" 1. If you have a \begin{verbatim} that appears to overrun its boundaries, -" use %stopzone. -" -" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped -" by suitable use of %stopzone. -" -" 3. If you have a slow computer, you may wish to modify -" -" syn sync maxlines=200 -" syn sync minlines=50 -" -" to values that are more to your liking. -" -" 4. There is no match-syncing for $...$ and $$...$$; hence large -" equation blocks constructed that way may exhibit syncing problems. -" (there's no difference between begin/end patterns) -" -" 5. If you have the variable "g:tex_no_error" defined then none of the -" lexical error-checking will be done. -" -" ie. let g:tex_no_error=1 -" -" 6. Please see :help latex-syntax for information on -" syntax folding :help tex-folding -" spell checking :help tex-nospell -" commands and mathzones :help tex-runon -" new command highlighting :help tex-morecommands -" error highlighting :help tex-error -" new math groups :help tex-math -" new styles :help tex-style -" using conceal mode :help tex-conceal - -" Version Clears: {{{1 -" quit when a syntax file was already loaded -if exists("b:current_syntax") - finish -endif -let s:keepcpo= &cpo -set cpo&vim -scriptencoding utf-8 - -" by default, enable all region-based highlighting -let s:tex_fast= "bcmMprsSvV" -if exists("g:tex_fast") - if type(g:tex_fast) != 1 - " g:tex_fast exists and is not a string, so - " turn off all optional region-based highighting - let s:tex_fast= "" - else - let s:tex_fast= g:tex_fast - endif -endif - -" let user determine which classes of concealment will be supported -" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts -if !exists("g:tex_conceal") - let s:tex_conceal= 'abdmgsS' -else - let s:tex_conceal= g:tex_conceal -endif -if !exists("g:tex_superscripts") - let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]' -else - let s:tex_superscripts= g:tex_superscripts -endif -if !exists("g:tex_subscripts") - let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]' -else - let s:tex_subscripts= g:tex_subscripts -endif - -" Determine whether or not to use "*.sty" mode {{{1 -" The user may override the normal determination by setting -" g:tex_stylish to 1 (for "*.sty" mode) -" or to 0 else (normal "*.tex" mode) -" or on a buffer-by-buffer basis with b:tex_stylish -let s:extfname=expand("%:e") -if exists("g:tex_stylish") - let b:tex_stylish= g:tex_stylish -elseif !exists("b:tex_stylish") - if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx" - let b:tex_stylish= 1 - else - let b:tex_stylish= 0 - endif -endif - -" handle folding {{{1 -if !exists("g:tex_fold_enabled") - let s:tex_fold_enabled= 0 -elseif g:tex_fold_enabled && !has("folding") - let s:tex_fold_enabled= 0 - echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support" -else - let s:tex_fold_enabled= 1 -endif -if s:tex_fold_enabled && &fdm == "manual" - setl fdm=syntax -endif -if s:tex_fold_enabled && has("folding") - com! -nargs=* TexFold fold -else - com! -nargs=* TexFold -endif - -" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1 -" but _ is the only one that causes problems. -" One may override this iskeyword setting by providing -" g:tex_isk -if exists("g:tex_isk") - if b:tex_stylish && g:tex_isk !~ '@' - let b:tex_isk= '@,'.g:tex_isk - else - let b:tex_isk= g:tex_isk - endif -elseif b:tex_stylish - let b:tex_isk="@,48-57,a-z,A-Z,192-255" -else - let b:tex_isk="48-57,a-z,A-Z,192-255" -endif -if (v:version == 704 && has("patch-7.4.1142")) || v:version > 704 - exe "syn iskeyword ".b:tex_isk -else - exe "setl isk=".b:tex_isk -endif -if exists("g:tex_no_error") && g:tex_no_error - let s:tex_no_error= 1 -else - let s:tex_no_error= 0 -endif -if exists("g:tex_comment_nospell") && g:tex_comment_nospell - let s:tex_comment_nospell= 1 -else - let s:tex_comment_nospell= 0 -endif -if exists("g:tex_nospell") && g:tex_nospell - let s:tex_nospell = 1 -else - let s:tex_nospell = 0 -endif -if exists("g:tex_matchcheck") - let s:tex_matchcheck= g:tex_matchcheck -else - let s:tex_matchcheck= '[({[]' -endif -if exists("g:tex_excludematcher") - let s:tex_excludematcher= g:tex_excludematcher -else - let s:tex_excludematcher= 0 -endif - -" Clusters: {{{1 -" -------- -syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,@texMathZones -if !s:tex_no_error - syn cluster texCmdGroup add=texMathError -endif -syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement -syn cluster texFoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texEmphStyle,texNoSpell -syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell -syn cluster texItalGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texEmphStyle,texItalBoldStyle,texNoSpell -if !s:tex_excludematcher - syn cluster texBoldGroup add=texMatcher - syn cluster texItalGroup add=texMatcher -endif -if !s:tex_nospell - syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell - syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell - syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher,@Spell -else - syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption - syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption - syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher -endif -syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ -syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter -if !exists("g:tex_no_math") - syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ - syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ - syn cluster texMatchGroup add=@texMathZones - syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2 - syn cluster texMathMatchGroup contains=@texMathZones,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathMatcher,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone - syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle - if !s:tex_no_error - syn cluster texMathMatchGroup add=texMathError - syn cluster texMathZoneGroup add=texMathError - endif - syn cluster texMathZoneGroup add=@NoSpell - " following used in the \part \chapter \section \subsection \subsubsection - " \paragraph \subparagraph \author \title highlighting - syn cluster texDocGroup contains=texPartZone,@texPartGroup - syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone - syn cluster texChapterGroup contains=texSectionZone,texParaZone - syn cluster texSectionGroup contains=texSubSectionZone,texParaZone - syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone - syn cluster texSubSubSectionGroup contains=texParaZone - syn cluster texParaGroup contains=texSubParaZone - if has("conceal") && &enc == 'utf-8' - syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol - syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol - endif -endif - -" Try to flag {}, [], and () mismatches: {{{1 -if s:tex_fast =~# 'm' - if !s:tex_no_error - if s:tex_matchcheck =~ '{' - syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError - syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError - endif - if s:tex_matchcheck =~ '\[' - syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell - syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell - endif - else - if s:tex_matchcheck =~ '{' - syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup - syn region texMatcherNM matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup - endif - if s:tex_matchcheck =~ '\[' - syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup - syn region texMatcherNM matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchNMGroup - endif - endif - if s:tex_matchcheck =~ '(' - if !s:tex_nospell - syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell - else - syn region texParen start="(" end=")" transparent contains=@texMatchGroup - endif - endif -endif -if !s:tex_no_error - if s:tex_matchcheck =~ '(' - syn match texError "[}\]]" - else - syn match texError "[}\])]" - endif -endif -if s:tex_fast =~# 'M' - if !exists("g:tex_no_math") - if !s:tex_no_error - syn match texMathError "}" contained - endif - syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup - endif -endif - -" TeX/LaTeX keywords: {{{1 -" Instead of trying to be All Knowing, I just match \..alphameric.. -" Note that *.tex files may not have "@" in their \commands -if exists("g:tex_tex") || b:tex_stylish - syn match texStatement "\\[a-zA-Z@]\+" -else - syn match texStatement "\\\a\+" - if !s:tex_no_error - syn match texError "\\\a*@[a-zA-Z@]*" - endif -endif - -" TeX/LaTeX delimiters: {{{1 -syn match texDelimiter "&" -syn match texDelimiter "\\\\" - -" Tex/Latex Options: {{{1 -syn match texOption "[^\\]\zs#\d\+\|^#\d\+" - -" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1 -if b:tex_stylish - syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1 - syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1 -else - syn match texAccent "\\[bcdvuH]\A"me=e-1 - syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1 -endif -syn match texAccent "\\[bcdvuH]$" -syn match texAccent +\\[=^.\~"`']+ -syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+ -syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$" - - -" \begin{}/\end{} section markers: {{{1 -syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName -if s:tex_fast =~# 'm' - syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment - syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell -endif - -" \documentclass, \documentstyle, \usepackage: {{{1 -syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs -if s:tex_fast =~# 'm' - syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell -endif - -" Preamble syntax-based folding support: {{{1 -if s:tex_fold_enabled && has("folding") - syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup -endif - -" TeX input: {{{1 -syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement -syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt -syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt -syn match texInputCurlies "[{}]" contained -if s:tex_fast =~# 'm' - syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment -endif - -" Type Styles (LaTeX 2.09): {{{1 -syn match texTypeStyle "\\rm\>" -syn match texTypeStyle "\\em\>" -syn match texTypeStyle "\\bf\>" -syn match texTypeStyle "\\it\>" -syn match texTypeStyle "\\sl\>" -syn match texTypeStyle "\\sf\>" -syn match texTypeStyle "\\sc\>" -syn match texTypeStyle "\\tt\>" - -" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1 -if s:tex_conceal !~# 'b' - syn match texTypeStyle "\\textbf\>" - syn match texTypeStyle "\\textit\>" - syn match texTypeStyle "\\emph\>" -endif -syn match texTypeStyle "\\textmd\>" -syn match texTypeStyle "\\textrm\>" - -syn match texTypeStyle "\\mathbb\>" -syn match texTypeStyle "\\mathbf\>" -syn match texTypeStyle "\\mathcal\>" -syn match texTypeStyle "\\mathfrak\>" -syn match texTypeStyle "\\mathit\>" -syn match texTypeStyle "\\mathnormal\>" -syn match texTypeStyle "\\mathrm\>" -syn match texTypeStyle "\\mathsf\>" -syn match texTypeStyle "\\mathtt\>" - -syn match texTypeStyle "\\rmfamily\>" -syn match texTypeStyle "\\sffamily\>" -syn match texTypeStyle "\\ttfamily\>" - -syn match texTypeStyle "\\itshape\>" -syn match texTypeStyle "\\scshape\>" -syn match texTypeStyle "\\slshape\>" -syn match texTypeStyle "\\upshape\>" - -syn match texTypeStyle "\\bfseries\>" -syn match texTypeStyle "\\mdseries\>" - -" Some type sizes: {{{1 -syn match texTypeSize "\\tiny\>" -syn match texTypeSize "\\scriptsize\>" -syn match texTypeSize "\\footnotesize\>" -syn match texTypeSize "\\small\>" -syn match texTypeSize "\\normalsize\>" -syn match texTypeSize "\\large\>" -syn match texTypeSize "\\Large\>" -syn match texTypeSize "\\LARGE\>" -syn match texTypeSize "\\huge\>" -syn match texTypeSize "\\Huge\>" - -" Spacecodes (TeX'isms): {{{1 -" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x -syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar -syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained - -" Sections, subsections, etc: {{{1 -if s:tex_fast =~# 'p' - if !s:tex_nospell - TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell - TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell - TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell - TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell - TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell - TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell - TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell - TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell - TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell - TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell - else - TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup - TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup - TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup - TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup - TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup - TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup - TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup - TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup - TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup - TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup - endif -endif - -" particular support for bold and italic {{{1 -if s:tex_fast =~# 'b' - if s:tex_conceal =~# 'b' - if !exists("g:tex_nospell") || !g:tex_nospell - syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell - syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell - syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell - syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell - syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell - syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell - syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell - syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell - else - syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup - syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup - syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup - syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup - syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup - syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup - syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup - syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup - endif - endif -endif - -" Bad Math (mismatched): {{{1 -if !exists("g:tex_no_math") && !s:tex_no_error - syn match texBadMath "\\end\s*{\s*\(array\|[bBpvV]matrix\|split\|smallmatrix\)\s*}" - syn match texBadMath "\\end\s*{\s*\(displaymath\|equation\|eqnarray\|math\)\*\=\s*}" - syn match texBadMath "\\[\])]" -endif - -" Math Zones: {{{1 -if !exists("g:tex_no_math") - " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2 - " Starred forms are created if starform is true. Starred - " forms have syntax group and synchronization groups with a - " "S" appended. Handles: cluster, syntax, sync, and highlighting. - fun! TexNewMathZone(sfx,mathzone,starform) - let grpname = "texMathZone".a:sfx - let syncname = "texSyncMathZone".a:sfx - if s:tex_fold_enabled - let foldcmd= " fold" - else - let foldcmd= "" - endif - exe "syn cluster texMathZones add=".grpname - if s:tex_fast =~# 'M' - exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd - exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' - exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' - endif - exe 'hi def link '.grpname.' texMath' - if a:starform - let grpname = "texMathZone".a:sfx.'S' - let syncname = "texSyncMathZone".a:sfx.'S' - exe "syn cluster texMathZones add=".grpname - if s:tex_fast =~# 'M' - exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd - exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' - exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"' - endif - exe 'hi def link '.grpname.' texMath' - endif - endfun - - " Standard Math Zones: {{{2 - call TexNewMathZone("A","displaymath",1) - call TexNewMathZone("B","eqnarray",1) - call TexNewMathZone("C","equation",1) - call TexNewMathZone("D","math",1) - - " Inline Math Zones: {{{2 - if s:tex_fast =~# 'M' - if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd' - syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup - syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup - syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup - syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup - else - syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup - syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup - syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup - syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup - endif - syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup - endif - - syn match texMathOper "[_^=]" contained - - " Text Inside Math Zones: {{{2 - if s:tex_fast =~# 'M' - if !exists("g:tex_nospell") || !g:tex_nospell - syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell - else - syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup - endif - endif - - " \left..something.. and \right..something.. support: {{{2 - syn match texMathDelimBad contained "\S" - if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm' - syn match texMathDelim contained "\\left\[" - syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={ - syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=} - let s:texMathDelimList=[ - \ ['<' , '<'] , - \ ['>' , '>'] , - \ ['(' , '('] , - \ [')' , ')'] , - \ ['\[' , '['] , - \ [']' , ']'] , - \ ['\\{' , '{'] , - \ ['\\}' , '}'] , - \ ['|' , '|'] , - \ ['\\|' , '‖'] , - \ ['\\backslash' , '\'] , - \ ['\\downarrow' , '↓'] , - \ ['\\Downarrow' , '⇓'] , - \ ['\\lbrace' , '['] , - \ ['\\lceil' , '⌈'] , - \ ['\\lfloor' , '⌊'] , - \ ['\\lgroup' , '⌊'] , - \ ['\\lmoustache' , '⎛'] , - \ ['\\rbrace' , ']'] , - \ ['\\rceil' , '⌉'] , - \ ['\\rfloor' , '⌋'] , - \ ['\\rgroup' , '⌋'] , - \ ['\\rmoustache' , '⎞'] , - \ ['\\uparrow' , '↑'] , - \ ['\\Uparrow' , '↑'] , - \ ['\\updownarrow', '↕'] , - \ ['\\Updownarrow', '⇕']] - if &ambw == "double" || exists("g:tex_usedblwidth") - let s:texMathDelimList= s:texMathDelimList + [ - \ ['\\langle' , '〈'] , - \ ['\\rangle' , '〉']] - else - let s:texMathDelimList= s:texMathDelimList + [ - \ ['\\langle' , '<'] , - \ ['\\rangle' , '>']] - endif - syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad - for texmath in s:texMathDelimList - exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1] - endfor - - else - syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad - syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad - syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad - syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]" - syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow - syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow - syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow - syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow - syn keyword texMathDelimKey contained lbrace lvert rfloor - endif - syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>" - syn match texMathDelim contained "\\lefteqn\>" -endif - -" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1 -syn match texSpecialChar "\\[$&%#{}_]" -if b:tex_stylish - syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1 -else - syn match texSpecialChar "\\[SP@]\A"me=e-1 -endif -syn match texSpecialChar "\\\\" -if !exists("g:tex_no_math") - syn match texOnlyMath "[_^]" -endif -syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S" -if s:tex_conceal !~# 'S' - syn match texSpecialChar '\\glq\>' contained conceal cchar=‚ - syn match texSpecialChar '\\grq\>' contained conceal cchar=‘ - syn match texSpecialChar '\\glqq\>' contained conceal cchar=„ - syn match texSpecialChar '\\grqq\>' contained conceal cchar=“ - syn match texSpecialChar '\\hyp\>' contained conceal cchar=- -endif - -" Comments: {{{1 -" Normal TeX LaTeX : %.... -" Documented TeX Format: ^^A... -and- leading %s (only) -if !s:tex_comment_nospell - syn cluster texCommentGroup contains=texTodo,@Spell -else - syn cluster texCommentGroup contains=texTodo,@NoSpell -endif -syn case ignore -syn keyword texTodo contained combak fixme todo xxx -syn case match -if s:extfname == "dtx" - syn match texComment "\^\^A.*$" contains=@texCommentGroup - syn match texComment "^%\+" contains=@texCommentGroup -else - if s:tex_fold_enabled - " allows syntax-folding of 2 or more contiguous comment lines - " single-line comments are not folded - syn match texComment "%.*$" contains=@texCommentGroup - if s:tex_fast =~# 'c' - TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup - TexFold syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell - endif - else - syn match texComment "%.*$" contains=@texCommentGroup - if s:tex_fast =~# 'c' - syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell - endif - endif -endif - -" %begin-include ... %end-include acts like a texDocZone for \include'd files. Permits spell checking, for example, in such files. -if !s:tex_nospell - TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup,@Spell -else - TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup -endif - -" Separate lines used for verb` and verb# so that the end conditions {{{1 -" will appropriately terminate. -" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there. -if s:tex_fast =~# 'v' - if exists("g:tex_verbspell") && g:tex_verbspell - syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell - " listings package: - if b:tex_stylish - syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell - else - syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell - endif - else - syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" - if b:tex_stylish - syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" - else - syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" - endif - endif -endif - -" Tex Reference Zones: {{{1 -if s:tex_fast =~# 'r' - syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup - syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup - syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup - syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup - syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup - syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup - syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite - syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite -endif -syn match texRefZone '\\cite\%([tp]\*\=\)\=\>' nextgroup=texRefOption,texCite - -" Handle newcommand, newenvironment : {{{1 -syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl -if s:tex_fast =~# 'V' - syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl - syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl - syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup -endif -syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl -if s:tex_fast =~# 'V' - syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl - syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup - syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup -endif - -" Definitions/Commands: {{{1 -syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl -if b:tex_stylish - syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl - syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl -else - syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl - syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl -endif -syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl -syn match texDefParm contained "#\d\+" - -" TeX Lengths: {{{1 -syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>" - -" TeX String Delimiters: {{{1 -syn match texString "\(``\|''\|,,\)" - -" makeatletter -- makeatother sections -if !s:tex_no_error - if s:tex_fast =~# 'S' - syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained - endif - syn match texStyleStatement "\\[a-zA-Z@]\+" contained - if s:tex_fast =~# 'S' - syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained - syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained - endif -endif - -" Conceal mode support (supports set cole=2) {{{1 -if has("conceal") && &enc == 'utf-8' - - " Math Symbols {{{2 - " (many of these symbols were contributed by Björn Winckler) - if s:tex_conceal =~# 'm' - let s:texMathList=[ - \ ['|' , '‖'], - \ ['aleph' , 'ℵ'], - \ ['amalg' , '∐'], - \ ['angle' , '∠'], - \ ['approx' , '≈'], - \ ['ast' , '∗'], - \ ['asymp' , '≍'], - \ ['backslash' , '∖'], - \ ['bigcap' , '∩'], - \ ['bigcirc' , '○'], - \ ['bigcup' , '∪'], - \ ['bigodot' , '⊙'], - \ ['bigoplus' , '⊕'], - \ ['bigotimes' , '⊗'], - \ ['bigsqcup' , '⊔'], - \ ['bigtriangledown', '∇'], - \ ['bigtriangleup' , '∆'], - \ ['bigvee' , '⋁'], - \ ['bigwedge' , '⋀'], - \ ['bot' , '⊥'], - \ ['bowtie' , '⋈'], - \ ['bullet' , '•'], - \ ['cap' , '∩'], - \ ['cdot' , '·'], - \ ['cdots' , '⋯'], - \ ['circ' , '∘'], - \ ['clubsuit' , '♣'], - \ ['cong' , '≅'], - \ ['coprod' , '∐'], - \ ['copyright' , '©'], - \ ['cup' , '∪'], - \ ['dagger' , '†'], - \ ['dashv' , '⊣'], - \ ['ddagger' , '‡'], - \ ['ddots' , '⋱'], - \ ['diamond' , '⋄'], - \ ['diamondsuit' , '♢'], - \ ['div' , '÷'], - \ ['doteq' , '≐'], - \ ['dots' , '…'], - \ ['downarrow' , '↓'], - \ ['Downarrow' , '⇓'], - \ ['ell' , 'ℓ'], - \ ['emptyset' , '∅'], - \ ['equiv' , '≡'], - \ ['exists' , '∃'], - \ ['flat' , '♭'], - \ ['forall' , '∀'], - \ ['frown' , '⁔'], - \ ['ge' , '≥'], - \ ['geq' , '≥'], - \ ['gets' , '←'], - \ ['gg' , '⟫'], - \ ['hbar' , 'ℏ'], - \ ['heartsuit' , '♡'], - \ ['hookleftarrow' , '↩'], - \ ['hookrightarrow' , '↪'], - \ ['iff' , '⇔'], - \ ['Im' , 'ℑ'], - \ ['imath' , 'ɩ'], - \ ['in' , '∈'], - \ ['infty' , '∞'], - \ ['int' , '∫'], - \ ['jmath' , '𝚥'], - \ ['land' , '∧'], - \ ['lceil' , '⌈'], - \ ['ldots' , '…'], - \ ['le' , '≤'], - \ ['left|' , '|'], - \ ['left\\|' , '‖'], - \ ['left(' , '('], - \ ['left\[' , '['], - \ ['left\\{' , '{'], - \ ['leftarrow' , '←'], - \ ['Leftarrow' , '⇐'], - \ ['leftharpoondown', '↽'], - \ ['leftharpoonup' , '↼'], - \ ['leftrightarrow' , '↔'], - \ ['Leftrightarrow' , '⇔'], - \ ['leq' , '≤'], - \ ['leq' , '≤'], - \ ['lfloor' , '⌊'], - \ ['ll' , '≪'], - \ ['lmoustache' , '╭'], - \ ['lor' , '∨'], - \ ['mapsto' , '↦'], - \ ['mid' , '∣'], - \ ['models' , '╞'], - \ ['mp' , '∓'], - \ ['nabla' , '∇'], - \ ['natural' , '♮'], - \ ['ne' , '≠'], - \ ['nearrow' , '↗'], - \ ['neg' , '¬'], - \ ['neq' , '≠'], - \ ['ni' , '∋'], - \ ['notin' , '∉'], - \ ['nwarrow' , '↖'], - \ ['odot' , '⊙'], - \ ['oint' , '∮'], - \ ['ominus' , '⊖'], - \ ['oplus' , '⊕'], - \ ['oslash' , '⊘'], - \ ['otimes' , '⊗'], - \ ['owns' , '∋'], - \ ['P' , '¶'], - \ ['parallel' , '║'], - \ ['partial' , '∂'], - \ ['perp' , '⊥'], - \ ['pm' , '±'], - \ ['prec' , '≺'], - \ ['preceq' , '⪯'], - \ ['prime' , '′'], - \ ['prod' , '∏'], - \ ['propto' , '∝'], - \ ['rceil' , '⌉'], - \ ['Re' , 'ℜ'], - \ ['quad' , ' '], - \ ['qquad' , ' '], - \ ['rfloor' , '⌋'], - \ ['right|' , '|'], - \ ['right\\|' , '‖'], - \ ['right)' , ')'], - \ ['right]' , ']'], - \ ['right\\}' , '}'], - \ ['rightarrow' , '→'], - \ ['Rightarrow' , '⇒'], - \ ['rightleftharpoons', '⇌'], - \ ['rmoustache' , '╮'], - \ ['S' , '§'], - \ ['searrow' , '↘'], - \ ['setminus' , '∖'], - \ ['sharp' , '♯'], - \ ['sim' , '∼'], - \ ['simeq' , '⋍'], - \ ['smile' , '‿'], - \ ['spadesuit' , '♠'], - \ ['sqcap' , '⊓'], - \ ['sqcup' , '⊔'], - \ ['sqsubset' , '⊏'], - \ ['sqsubseteq' , '⊑'], - \ ['sqsupset' , '⊐'], - \ ['sqsupseteq' , '⊒'], - \ ['star' , '✫'], - \ ['subset' , '⊂'], - \ ['subseteq' , '⊆'], - \ ['succ' , '≻'], - \ ['succeq' , '⪰'], - \ ['sum' , '∑'], - \ ['supset' , '⊃'], - \ ['supseteq' , '⊇'], - \ ['surd' , '√'], - \ ['swarrow' , '↙'], - \ ['times' , '×'], - \ ['to' , '→'], - \ ['top' , '⊤'], - \ ['triangle' , '∆'], - \ ['triangleleft' , '⊲'], - \ ['triangleright' , '⊳'], - \ ['uparrow' , '↑'], - \ ['Uparrow' , '⇑'], - \ ['updownarrow' , '↕'], - \ ['Updownarrow' , '⇕'], - \ ['vdash' , '⊢'], - \ ['vdots' , '⋮'], - \ ['vee' , '∨'], - \ ['wedge' , '∧'], - \ ['wp' , '℘'], - \ ['wr' , '≀']] - if &ambw == "double" || exists("g:tex_usedblwidth") - let s:texMathList= s:texMathList + [ - \ ['right\\rangle' , '〉'], - \ ['left\\langle' , '〈']] - else - let s:texMathList= s:texMathList + [ - \ ['right\\rangle' , '>'], - \ ['left\\langle' , '<']] - endif - for texmath in s:texMathList - if texmath[0] =~# '\w$' - exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1] - else - exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1] - endif - endfor - - if &ambw == "double" - syn match texMathSymbol '\\gg\>' contained conceal cchar=≫ - syn match texMathSymbol '\\ll\>' contained conceal cchar=≪ - else - syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫ - syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪ - endif - - syn match texMathSymbol '\\hat{a}' contained conceal cchar=â - syn match texMathSymbol '\\hat{A}' contained conceal cchar= - syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ - syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ - syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê - syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê - syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ - syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ - syn match texMathSymbol '\\hat{i}' contained conceal cchar=î - syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î - syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô - syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô - syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ - syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ - syn match texMathSymbol '\\hat{u}' contained conceal cchar=û - syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û - syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ - syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ - syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ - syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ -" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅ - - syn match texMathSymbol '\\dot{B}' contained conceal cchar=Ḃ - syn match texMathSymbol '\\dot{b}' contained conceal cchar=ḃ - syn match texMathSymbol '\\dot{D}' contained conceal cchar=Ḋ - syn match texMathSymbol '\\dot{d}' contained conceal cchar=ḋ - syn match texMathSymbol '\\dot{F}' contained conceal cchar=Ḟ - syn match texMathSymbol '\\dot{f}' contained conceal cchar=ḟ - syn match texMathSymbol '\\dot{H}' contained conceal cchar=Ḣ - syn match texMathSymbol '\\dot{h}' contained conceal cchar=ḣ - syn match texMathSymbol '\\dot{M}' contained conceal cchar=Ṁ - syn match texMathSymbol '\\dot{m}' contained conceal cchar=ṁ - syn match texMathSymbol '\\dot{N}' contained conceal cchar=Ṅ - syn match texMathSymbol '\\dot{n}' contained conceal cchar=ṅ - syn match texMathSymbol '\\dot{P}' contained conceal cchar=Ṗ - syn match texMathSymbol '\\dot{p}' contained conceal cchar=ṗ - syn match texMathSymbol '\\dot{R}' contained conceal cchar=Ṙ - syn match texMathSymbol '\\dot{r}' contained conceal cchar=ṙ - syn match texMathSymbol '\\dot{S}' contained conceal cchar=Ṡ - syn match texMathSymbol '\\dot{s}' contained conceal cchar=ṡ - syn match texMathSymbol '\\dot{T}' contained conceal cchar=Ṫ - syn match texMathSymbol '\\dot{t}' contained conceal cchar=ṫ - syn match texMathSymbol '\\dot{W}' contained conceal cchar=Ẇ - syn match texMathSymbol '\\dot{w}' contained conceal cchar=ẇ - syn match texMathSymbol '\\dot{X}' contained conceal cchar=Ẋ - syn match texMathSymbol '\\dot{x}' contained conceal cchar=ẋ - syn match texMathSymbol '\\dot{Y}' contained conceal cchar=Ẏ - syn match texMathSymbol '\\dot{y}' contained conceal cchar=ẏ - syn match texMathSymbol '\\dot{Z}' contained conceal cchar=Ż - syn match texMathSymbol '\\dot{z}' contained conceal cchar=ż - - syn match texMathSymbol '\\dot{C}' contained conceal cchar=Ċ - syn match texMathSymbol '\\dot{c}' contained conceal cchar=ċ - syn match texMathSymbol '\\dot{E}' contained conceal cchar=Ė - syn match texMathSymbol '\\dot{e}' contained conceal cchar=ė - syn match texMathSymbol '\\dot{G}' contained conceal cchar=Ġ - syn match texMathSymbol '\\dot{g}' contained conceal cchar=ġ - syn match texMathSymbol '\\dot{I}' contained conceal cchar=İ - - syn match texMathSymbol '\\dot{A}' contained conceal cchar=Ȧ - syn match texMathSymbol '\\dot{a}' contained conceal cchar=ȧ - syn match texMathSymbol '\\dot{O}' contained conceal cchar=Ȯ - syn match texMathSymbol '\\dot{o}' contained conceal cchar=ȯ - endif - - " Greek {{{2 - if s:tex_conceal =~# 'g' - fun! s:Greek(group,pat,cchar) - exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar - endfun - call s:Greek('texGreek','\\alpha\>' ,'α') - call s:Greek('texGreek','\\beta\>' ,'β') - call s:Greek('texGreek','\\gamma\>' ,'γ') - call s:Greek('texGreek','\\delta\>' ,'δ') - call s:Greek('texGreek','\\epsilon\>' ,'ϵ') - call s:Greek('texGreek','\\varepsilon\>' ,'ε') - call s:Greek('texGreek','\\zeta\>' ,'ζ') - call s:Greek('texGreek','\\eta\>' ,'η') - call s:Greek('texGreek','\\theta\>' ,'θ') - call s:Greek('texGreek','\\vartheta\>' ,'ϑ') - call s:Greek('texGreek','\\iota\>' ,'ι') - call s:Greek('texGreek','\\kappa\>' ,'κ') - call s:Greek('texGreek','\\lambda\>' ,'λ') - call s:Greek('texGreek','\\mu\>' ,'μ') - call s:Greek('texGreek','\\nu\>' ,'ν') - call s:Greek('texGreek','\\xi\>' ,'ξ') - call s:Greek('texGreek','\\pi\>' ,'π') - call s:Greek('texGreek','\\varpi\>' ,'ϖ') - call s:Greek('texGreek','\\rho\>' ,'ρ') - call s:Greek('texGreek','\\varrho\>' ,'ϱ') - call s:Greek('texGreek','\\sigma\>' ,'σ') - call s:Greek('texGreek','\\varsigma\>' ,'ς') - call s:Greek('texGreek','\\tau\>' ,'τ') - call s:Greek('texGreek','\\upsilon\>' ,'υ') - call s:Greek('texGreek','\\phi\>' ,'ϕ') - call s:Greek('texGreek','\\varphi\>' ,'φ') - call s:Greek('texGreek','\\chi\>' ,'χ') - call s:Greek('texGreek','\\psi\>' ,'ψ') - call s:Greek('texGreek','\\omega\>' ,'ω') - call s:Greek('texGreek','\\Gamma\>' ,'Γ') - call s:Greek('texGreek','\\Delta\>' ,'Δ') - call s:Greek('texGreek','\\Theta\>' ,'Θ') - call s:Greek('texGreek','\\Lambda\>' ,'Λ') - call s:Greek('texGreek','\\Xi\>' ,'Ξ') - call s:Greek('texGreek','\\Pi\>' ,'Π') - call s:Greek('texGreek','\\Sigma\>' ,'Σ') - call s:Greek('texGreek','\\Upsilon\>' ,'Υ') - call s:Greek('texGreek','\\Phi\>' ,'Φ') - call s:Greek('texGreek','\\Chi\>' ,'Χ') - call s:Greek('texGreek','\\Psi\>' ,'Ψ') - call s:Greek('texGreek','\\Omega\>' ,'Ω') - delfun s:Greek - endif - - " Superscripts/Subscripts {{{2 - if s:tex_conceal =~# 's' - if s:tex_fast =~# 's' - syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher - syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher - endif - " s:SuperSub: - fun! s:SuperSub(group,leader,pat,cchar) - if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts) -" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">") - exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar - exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s' - endif - endfun - call s:SuperSub('texSuperscript','\^','0','⁰') - call s:SuperSub('texSuperscript','\^','1','¹') - call s:SuperSub('texSuperscript','\^','2','²') - call s:SuperSub('texSuperscript','\^','3','³') - call s:SuperSub('texSuperscript','\^','4','⁴') - call s:SuperSub('texSuperscript','\^','5','⁵') - call s:SuperSub('texSuperscript','\^','6','⁶') - call s:SuperSub('texSuperscript','\^','7','⁷') - call s:SuperSub('texSuperscript','\^','8','⁸') - call s:SuperSub('texSuperscript','\^','9','⁹') - call s:SuperSub('texSuperscript','\^','a','ᵃ') - call s:SuperSub('texSuperscript','\^','b','ᵇ') - call s:SuperSub('texSuperscript','\^','c','ᶜ') - call s:SuperSub('texSuperscript','\^','d','ᵈ') - call s:SuperSub('texSuperscript','\^','e','ᵉ') - call s:SuperSub('texSuperscript','\^','f','ᶠ') - call s:SuperSub('texSuperscript','\^','g','ᵍ') - call s:SuperSub('texSuperscript','\^','h','ʰ') - call s:SuperSub('texSuperscript','\^','i','ⁱ') - call s:SuperSub('texSuperscript','\^','j','ʲ') - call s:SuperSub('texSuperscript','\^','k','ᵏ') - call s:SuperSub('texSuperscript','\^','l','ˡ') - call s:SuperSub('texSuperscript','\^','m','ᵐ') - call s:SuperSub('texSuperscript','\^','n','ⁿ') - call s:SuperSub('texSuperscript','\^','o','ᵒ') - call s:SuperSub('texSuperscript','\^','p','ᵖ') - call s:SuperSub('texSuperscript','\^','r','ʳ') - call s:SuperSub('texSuperscript','\^','s','ˢ') - call s:SuperSub('texSuperscript','\^','t','ᵗ') - call s:SuperSub('texSuperscript','\^','u','ᵘ') - call s:SuperSub('texSuperscript','\^','v','ᵛ') - call s:SuperSub('texSuperscript','\^','w','ʷ') - call s:SuperSub('texSuperscript','\^','x','ˣ') - call s:SuperSub('texSuperscript','\^','y','ʸ') - call s:SuperSub('texSuperscript','\^','z','ᶻ') - call s:SuperSub('texSuperscript','\^','A','ᴬ') - call s:SuperSub('texSuperscript','\^','B','ᴮ') - call s:SuperSub('texSuperscript','\^','D','ᴰ') - call s:SuperSub('texSuperscript','\^','E','ᴱ') - call s:SuperSub('texSuperscript','\^','G','ᴳ') - call s:SuperSub('texSuperscript','\^','H','ᴴ') - call s:SuperSub('texSuperscript','\^','I','ᴵ') - call s:SuperSub('texSuperscript','\^','J','ᴶ') - call s:SuperSub('texSuperscript','\^','K','ᴷ') - call s:SuperSub('texSuperscript','\^','L','ᴸ') - call s:SuperSub('texSuperscript','\^','M','ᴹ') - call s:SuperSub('texSuperscript','\^','N','ᴺ') - call s:SuperSub('texSuperscript','\^','O','ᴼ') - call s:SuperSub('texSuperscript','\^','P','ᴾ') - call s:SuperSub('texSuperscript','\^','R','ᴿ') - call s:SuperSub('texSuperscript','\^','T','ᵀ') - call s:SuperSub('texSuperscript','\^','U','ᵁ') - call s:SuperSub('texSuperscript','\^','V','ⱽ') - call s:SuperSub('texSuperscript','\^','W','ᵂ') - call s:SuperSub('texSuperscript','\^',',','︐') - call s:SuperSub('texSuperscript','\^',':','︓') - call s:SuperSub('texSuperscript','\^',';','︔') - call s:SuperSub('texSuperscript','\^','+','⁺') - call s:SuperSub('texSuperscript','\^','-','⁻') - call s:SuperSub('texSuperscript','\^','<','˂') - call s:SuperSub('texSuperscript','\^','>','˃') - call s:SuperSub('texSuperscript','\^','/','ˊ') - call s:SuperSub('texSuperscript','\^','(','⁽') - call s:SuperSub('texSuperscript','\^',')','⁾') - call s:SuperSub('texSuperscript','\^','\.','˙') - call s:SuperSub('texSuperscript','\^','=','˭') - call s:SuperSub('texSubscript','_','0','₀') - call s:SuperSub('texSubscript','_','1','₁') - call s:SuperSub('texSubscript','_','2','₂') - call s:SuperSub('texSubscript','_','3','₃') - call s:SuperSub('texSubscript','_','4','₄') - call s:SuperSub('texSubscript','_','5','₅') - call s:SuperSub('texSubscript','_','6','₆') - call s:SuperSub('texSubscript','_','7','₇') - call s:SuperSub('texSubscript','_','8','₈') - call s:SuperSub('texSubscript','_','9','₉') - call s:SuperSub('texSubscript','_','a','ₐ') - call s:SuperSub('texSubscript','_','e','ₑ') - call s:SuperSub('texSubscript','_','h','ₕ') - call s:SuperSub('texSubscript','_','i','ᵢ') - call s:SuperSub('texSubscript','_','j','ⱼ') - call s:SuperSub('texSubscript','_','k','ₖ') - call s:SuperSub('texSubscript','_','l','ₗ') - call s:SuperSub('texSubscript','_','m','ₘ') - call s:SuperSub('texSubscript','_','n','ₙ') - call s:SuperSub('texSubscript','_','o','ₒ') - call s:SuperSub('texSubscript','_','p','ₚ') - call s:SuperSub('texSubscript','_','r','ᵣ') - call s:SuperSub('texSubscript','_','s','ₛ') - call s:SuperSub('texSubscript','_','t','ₜ') - call s:SuperSub('texSubscript','_','u','ᵤ') - call s:SuperSub('texSubscript','_','v','ᵥ') - call s:SuperSub('texSubscript','_','x','ₓ') - call s:SuperSub('texSubscript','_',',','︐') - call s:SuperSub('texSubscript','_','+','₊') - call s:SuperSub('texSubscript','_','-','₋') - call s:SuperSub('texSubscript','_','/','ˏ') - call s:SuperSub('texSubscript','_','(','₍') - call s:SuperSub('texSubscript','_',')','₎') - call s:SuperSub('texSubscript','_','\.','‸') - call s:SuperSub('texSubscript','_','r','ᵣ') - call s:SuperSub('texSubscript','_','v','ᵥ') - call s:SuperSub('texSubscript','_','x','ₓ') - call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ') - call s:SuperSub('texSubscript','_','\\delta\>','ᵨ') - call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ') - call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ') - call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ') - - delfun s:SuperSub - endif - - " Accented characters and Ligatures: {{{2 - if s:tex_conceal =~# 'a' - if b:tex_stylish - syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1 - syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1 - syn match texLigature '--' - syn match texLigature '---' - else - fun! s:Accents(chr,...) - let i= 1 - for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"] - if i > a:0 - break - endif - if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?' - let i= i + 1 - continue - endif - if accent =~# '\a' - exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i} - else - exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i} - endif - let i= i + 1 - endfor - endfun - " \` \' \^ \" \~ \. \= \c \H \k \r \u \v - call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ') - call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ') - call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č') - call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č') - call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď') - call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď') - call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě') - call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě') - call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ') - call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ') - call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ') - call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ') - call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ') - call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ') - call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ') - call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ') - call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ') - call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ') - call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ') - call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň') - call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň') - call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ') - call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ') - call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř') - call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř') - call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š') - call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š') - call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť') - call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť') - call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ') - call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ') - call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ') - call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ') - call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ') - call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ') - call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž') - call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž') - call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ') - " \` \' \^ \" \~ \. \= \c \H \k \r \u \v - delfun s:Accents - syn match texAccent '\\aa\>' conceal cchar=å - syn match texAccent '\\AA\>' conceal cchar=Å - syn match texAccent '\\o\>' conceal cchar=ø - syn match texAccent '\\O\>' conceal cchar=Ø - syn match texLigature '\\AE\>' conceal cchar=Æ - syn match texLigature '\\ae\>' conceal cchar=æ - syn match texLigature '\\oe\>' conceal cchar=œ - syn match texLigature '\\OE\>' conceal cchar=Œ - syn match texLigature '\\ss\>' conceal cchar=ß - syn match texLigature '--' conceal cchar=– - syn match texLigature '---' conceal cchar=— - endif - endif -endif - -" --------------------------------------------------------------------- -" LaTeX synchronization: {{{1 -syn sync maxlines=200 -syn sync minlines=50 - -syn sync match texSyncStop groupthere NONE "%stopzone\>" - -" Synchronization: {{{1 -" The $..$ and $$..$$ make for impossible sync patterns -" (one can't tell if a "$$" starts or stops a math zone by itself) -" The following grouptheres coupled with minlines above -" help improve the odds of good syncing. -if !exists("g:tex_no_math") - syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}" - syn sync match texSyncMathZoneA groupthere NONE "\\end{center}" - syn sync match texSyncMathZoneA groupthere NONE "\\end{description}" - syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}" - syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}" - syn sync match texSyncMathZoneA groupthere NONE "\\end{table}" - syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}" - syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>" -endif - -" --------------------------------------------------------------------- -" Highlighting: {{{1 - -" Define the default highlighting. {{{1 -if !exists("skip_tex_syntax_inits") - - " TeX highlighting groups which should share similar highlighting - if !exists("g:tex_no_error") - if !exists("g:tex_no_math") - hi def link texBadMath texError - hi def link texMathDelimBad texError - hi def link texMathError texError - if !b:tex_stylish - hi def link texOnlyMath texError - endif - endif - hi def link texError Error - endif - - hi texBoldStyle gui=bold cterm=bold - hi texItalStyle gui=italic cterm=italic - hi texBoldItalStyle gui=bold,italic cterm=bold,italic - hi texItalBoldStyle gui=bold,italic cterm=bold,italic - hi def link texEmphStyle texItalStyle - hi def link texCite texRefZone - hi def link texDefCmd texDef - hi def link texDefName texDef - hi def link texDocType texCmdName - hi def link texDocTypeArgs texCmdArgs - hi def link texInputFileOpt texCmdArgs - hi def link texInputCurlies texDelimiter - hi def link texLigature texSpecialChar - if !exists("g:tex_no_math") - hi def link texMathDelimSet1 texMathDelim - hi def link texMathDelimSet2 texMathDelim - hi def link texMathDelimKey texMathDelim - hi def link texMathMatcher texMath - hi def link texAccent texStatement - hi def link texGreek texStatement - hi def link texSuperscript texStatement - hi def link texSubscript texStatement - hi def link texSuperscripts texSuperscript - hi def link texSubscripts texSubscript - hi def link texMathSymbol texStatement - hi def link texMathZoneV texMath - hi def link texMathZoneW texMath - hi def link texMathZoneX texMath - hi def link texMathZoneY texMath - hi def link texMathZoneV texMath - hi def link texMathZoneZ texMath - endif - hi def link texBeginEnd texCmdName - hi def link texBeginEndName texSection - hi def link texSpaceCode texStatement - hi def link texStyleStatement texStatement - hi def link texTypeSize texType - hi def link texTypeStyle texType - - " Basic TeX highlighting groups - hi def link texCmdArgs Number - hi def link texCmdName Statement - hi def link texComment Comment - hi def link texDef Statement - hi def link texDefParm Special - hi def link texDelimiter Delimiter - hi def link texInput Special - hi def link texInputFile Special - hi def link texLength Number - hi def link texMath Special - hi def link texMathDelim Statement - hi def link texMathOper Operator - hi def link texNewCmd Statement - hi def link texNewEnv Statement - hi def link texOption Number - hi def link texRefZone Special - hi def link texSection PreCondit - hi def link texSpaceCodeChar Special - hi def link texSpecialChar SpecialChar - hi def link texStatement Statement - hi def link texString String - hi def link texTodo Todo - hi def link texType Type - hi def link texZone PreCondit - -endif - -" Cleanup: {{{1 -delc TexFold -unlet s:extfname -let b:current_syntax = "tex" -let &cpo = s:keepcpo -unlet s:keepcpo -" vim: ts=8 fdm=marker -- cgit v1.2.3