aboutsummaryrefslogtreecommitdiff
path: root/runtime/syntax/tex.vim
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2014-07-11 04:05:51 +0000
committerJustin M. Keyes <justinkz@gmail.com>2014-07-29 02:12:31 +0000
commita98a6996c291b3e300d27b791eded9eed333d677 (patch)
tree51d92f6cac128f938cd0aaa9a8dd0ce7a83d63a9 /runtime/syntax/tex.vim
parent66bc13163398786c88e20b7cdd61c66978b4d3fb (diff)
downloadrneovim-a98a6996c291b3e300d27b791eded9eed333d677.tar.gz
rneovim-a98a6996c291b3e300d27b791eded9eed333d677.tar.bz2
rneovim-a98a6996c291b3e300d27b791eded9eed333d677.zip
re-integrate runtime/ vim-patch:0 #938
Vim runtime files based on 7.4.384 / hg changeset 7090d7f160f7 Excluding: Amiga icons (*.info, icons/) doc/hangulin.txt tutor/ spell/ lang/ (only used for menu translations) macros/maze/, macros/hanoi/, macros/life/, macros/urm/ These were used to test vi compatibility. termcap "Demonstration of a termcap file (for the Amiga and Archimedes)" Helped-by: Rich Wareham <rjw57@cam.ac.uk> Helped-by: John <john.schmidt.h@gmail.com> Helped-by: Yann <yann@yann-salaun.com> Helped-by: Christophe Badoit <c.badoit@lesiteimmo.com> Helped-by: drasill <github@tof2k.com> Helped-by: Tae Sandoval Murgan <taecilla@gmail.com> Helped-by: Lowe Thiderman <lowe.thiderman@gmail.com>
Diffstat (limited to 'runtime/syntax/tex.vim')
-rw-r--r--runtime/syntax/tex.vim1339
1 files changed, 1339 insertions, 0 deletions
diff --git a/runtime/syntax/tex.vim b/runtime/syntax/tex.vim
new file mode 100644
index 0000000000..31114bc093
--- /dev/null
+++ b/runtime/syntax/tex.vim
@@ -0,0 +1,1339 @@
+" Vim syntax file
+" Language: TeX
+" Maintainer: Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
+" Last Change: Mar 20, 2014
+" Version: 81
+" 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
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+let s:keepcpo= &cpo
+set cpo&vim
+scriptencoding utf-8
+
+" Define the default highlighting. {{{1
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_tex_syntax_inits")
+ let did_tex_syntax_inits = 1
+ if version < 508
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+endif
+if exists("g:tex_no_error") && g:tex_no_error
+ let s:tex_no_error= 1
+endif
+
+" 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
+ let s:tex_no_error= 1
+else
+ let s:tex_fast= "bcmMprsSvV"
+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
+
+" 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 g:tex_fold_enabled= 0
+elseif g:tex_fold_enabled && !has("folding")
+ let g:tex_fold_enabled= 0
+ echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
+endif
+if g:tex_fold_enabled && &fdm == "manual"
+ setl fdm=syntax
+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")
+ exe "setlocal isk=".g:tex_isk
+else
+ setlocal isk=48-57,a-z,A-Z,192-255
+endif
+if b:tex_stylish
+ setlocal isk+=@-@
+endif
+if exists("g:tex_nospell") && g:tex_nospell && !exists("g:tex_comment_nospell")
+ let g:tex_comment_nospell= 1
+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
+if !exists("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,texNoSpell
+syn cluster texBoldGroup 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,texBoldItalStyle,texNoSpell
+syn cluster texItalGroup 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,texItalStyle,texItalBoldStyle,texNoSpell
+if !exists("g:tex_nospell") || !g: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,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,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
+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 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,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
+syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
+if !exists("tex_no_math")
+ 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 !exists("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 !exists("s:tex_no_error")
+ syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup,texError
+ syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup,texError,@NoSpell
+ else
+ syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup
+ syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup
+ endif
+ if !exists("g:tex_nospell") || !g:tex_nospell
+ syn region texParen start="(" end=")" contains=@texMatchGroup,@Spell
+ else
+ syn region texParen start="(" end=")" contains=@texMatchGroup
+ endif
+endif
+if !exists("s:tex_no_error")
+ syn match texError "[}\])]"
+endif
+if s:tex_fast =~ 'M'
+ if !exists("tex_no_math")
+ if !exists("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 !exists("s:tex_no_error")
+ syn match texError "\\\a*@[a-zA-Z@]*"
+ endif
+endif
+
+" TeX/LaTeX delimiters: {{{1
+syn match texDelimiter "&"
+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,@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 g: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\>"
+endif
+syn match texTypeStyle "\\textmd\>"
+syn match texTypeStyle "\\textrm\>"
+syn match texTypeStyle "\\textsc\>"
+syn match texTypeStyle "\\textsf\>"
+syn match texTypeStyle "\\textsl\>"
+syn match texTypeStyle "\\texttt\>"
+syn match texTypeStyle "\\textup\>"
+syn match texTypeStyle "\\emph\>"
+
+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 !exists("g:tex_nospell") || !g:tex_nospell
+ if g:tex_fold_enabled && has("folding")
+ syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup,@Spell
+ syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup,@Spell
+ syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup,@Spell
+ syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup,@Spell
+ syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
+ syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
+ syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texParaGroup,@Spell
+ syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@Spell
+ syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup,@Spell
+ syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup,@Spell
+ else
+ syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
+ syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
+ syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
+ syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
+ syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
+ syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
+ syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell
+ syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell
+ syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
+ syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
+ endif
+ else
+ if g:tex_fold_enabled && has("folding")
+ syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup
+ syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup
+ syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup
+ syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup
+ syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup
+ syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSubSectionGroup
+ syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texParaGroup
+ syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup
+ syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup
+ syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup
+ else
+ syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
+ syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
+ syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
+ syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
+ syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
+ syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
+ syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
+ syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
+ syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
+ syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup
+ endif
+ endif
+endif
+
+" particular support for bold and italic {{{1
+if s:tex_fast =~ 'b'
+ if s:tex_conceal =~ 'b'
+ syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
+ syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
+ syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
+ syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
+ endif
+endif
+
+" Bad Math (mismatched): {{{1
+if !exists("g:tex_no_math") && !exists("s:tex_no_error")
+ syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
+ syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
+ syn match texBadMath "\\[\])]"
+endif
+
+" Math Zones: {{{1
+if !exists("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 HiLink.
+ fun! TexNewMathZone(sfx,mathzone,starform)
+ let grpname = "texMathZone".a:sfx
+ let syncname = "texSyncMathZone".a:sfx
+ if g: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","align",1)
+ call TexNewMathZone("B","alignat",1)
+ call TexNewMathZone("C","displaymath",1)
+ call TexNewMathZone("D","eqnarray",1)
+ call TexNewMathZone("E","equation",1)
+ call TexNewMathZone("F","flalign",1)
+ call TexNewMathZone("G","gather",1)
+ call TexNewMathZone("H","math",1)
+ call TexNewMathZone("I","multline",1)
+ call TexNewMathZone("J","subequations",0)
+ call TexNewMathZone("K","xalignat",1)
+ call TexNewMathZone("L","xxalignat",0)
+
+ " 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\>" concealends keepend 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\\{\>" 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' , '⇓'] ,
+ \ ['\\langle' , '<'] ,
+ \ ['\\lbrace' , '['] ,
+ \ ['\\lceil' , '⌈'] ,
+ \ ['\\lfloor' , '⌊'] ,
+ \ ['\\lgroup' , '⌊'] ,
+ \ ['\\lmoustache' , '⎛'] ,
+ \ ['\\rangle' , '>'] ,
+ \ ['\\rbrace' , ']'] ,
+ \ ['\\rceil' , '⌉'] ,
+ \ ['\\rfloor' , '⌋'] ,
+ \ ['\\rgroup' , '⌋'] ,
+ \ ['\\rmoustache' , '⎞'] ,
+ \ ['\\uparrow' , '↑'] ,
+ \ ['\\Uparrow' , '↑'] ,
+ \ ['\\updownarrow', '↕'] ,
+ \ ['\\Updownarrow', '⇕']]
+ 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("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 !exists("g:tex_comment_nospell") || !g: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 g: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'
+ syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' fold
+ syn region texNoSpell contained fold 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
+
+" 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:
+ syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
+ if version < 600
+ syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
+ syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
+ else
+ 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
+ endif
+ else
+ syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
+ if version < 600
+ syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
+ syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
+ else
+ 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
+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 !exists("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' , '≍'],
+ \ ['backepsilon' , '∍'],
+ \ ['backsimeq' , '≃'],
+ \ ['backslash' , '∖'],
+ \ ['barwedge' , '⊼'],
+ \ ['because' , '∵'],
+ \ ['between' , '≬'],
+ \ ['bigcap' , '∩'],
+ \ ['bigcirc' , '○'],
+ \ ['bigcup' , '∪'],
+ \ ['bigodot' , '⊙'],
+ \ ['bigoplus' , '⊕'],
+ \ ['bigotimes' , '⊗'],
+ \ ['bigsqcup' , '⊔'],
+ \ ['bigtriangledown', '∇'],
+ \ ['bigtriangleup' , '∆'],
+ \ ['bigvee' , '⋁'],
+ \ ['bigwedge' , '⋀'],
+ \ ['blacksquare' , '∎'],
+ \ ['bot' , '⊥'],
+ \ ['bowtie' , '⋈'],
+ \ ['boxdot' , '⊡'],
+ \ ['boxminus' , '⊟'],
+ \ ['boxplus' , '⊞'],
+ \ ['boxtimes' , '⊠'],
+ \ ['bullet' , '•'],
+ \ ['bumpeq' , '≏'],
+ \ ['Bumpeq' , '≎'],
+ \ ['cap' , '∩'],
+ \ ['Cap' , '⋒'],
+ \ ['cdot' , '·'],
+ \ ['cdots' , '⋯'],
+ \ ['circ' , '∘'],
+ \ ['circeq' , '≗'],
+ \ ['circlearrowleft', '↺'],
+ \ ['circlearrowright', '↻'],
+ \ ['circledast' , '⊛'],
+ \ ['circledcirc' , '⊚'],
+ \ ['clubsuit' , '♣'],
+ \ ['complement' , '∁'],
+ \ ['cong' , '≅'],
+ \ ['coprod' , '∐'],
+ \ ['copyright' , '©'],
+ \ ['cup' , '∪'],
+ \ ['Cup' , '⋓'],
+ \ ['curlyeqprec' , '⋞'],
+ \ ['curlyeqsucc' , '⋟'],
+ \ ['curlyvee' , '⋎'],
+ \ ['curlywedge' , '⋏'],
+ \ ['dagger' , '†'],
+ \ ['dashv' , '⊣'],
+ \ ['ddagger' , '‡'],
+ \ ['ddots' , '⋱'],
+ \ ['diamond' , '⋄'],
+ \ ['diamondsuit' , '♢'],
+ \ ['div' , '÷'],
+ \ ['doteq' , '≐'],
+ \ ['doteqdot' , '≑'],
+ \ ['dotplus' , '∔'],
+ \ ['dots' , '…'],
+ \ ['dotsb' , '⋯'],
+ \ ['dotsc' , '…'],
+ \ ['dotsi' , '⋯'],
+ \ ['dotso' , '…'],
+ \ ['doublebarwedge' , '⩞'],
+ \ ['downarrow' , '↓'],
+ \ ['Downarrow' , '⇓'],
+ \ ['ell' , 'ℓ'],
+ \ ['emptyset' , '∅'],
+ \ ['eqcirc' , '≖'],
+ \ ['eqsim' , '≂'],
+ \ ['eqslantgtr' , '⪖'],
+ \ ['eqslantless' , '⪕'],
+ \ ['equiv' , '≡'],
+ \ ['exists' , '∃'],
+ \ ['fallingdotseq' , '≒'],
+ \ ['flat' , '♭'],
+ \ ['forall' , '∀'],
+ \ ['frown' , '⁔'],
+ \ ['ge' , '≥'],
+ \ ['geq' , '≥'],
+ \ ['geqq' , '≧'],
+ \ ['gets' , '←'],
+ \ ['gg' , '⟫'],
+ \ ['gneqq' , '≩'],
+ \ ['gtrdot' , '⋗'],
+ \ ['gtreqless' , '⋛'],
+ \ ['gtrless' , '≷'],
+ \ ['gtrsim' , '≳'],
+ \ ['hbar' , 'ℏ'],
+ \ ['heartsuit' , '♡'],
+ \ ['hookleftarrow' , '↩'],
+ \ ['hookrightarrow' , '↪'],
+ \ ['iiint' , '∭'],
+ \ ['iint' , '∬'],
+ \ ['Im' , 'ℑ'],
+ \ ['imath' , 'ɩ'],
+ \ ['in' , '∈'],
+ \ ['infty' , '∞'],
+ \ ['int' , '∫'],
+ \ ['lceil' , '⌈'],
+ \ ['ldots' , '…'],
+ \ ['le' , '≤'],
+ \ ['leadsto' , '↝'],
+ \ ['left(' , '('],
+ \ ['left\[' , '['],
+ \ ['left\\{' , '{'],
+ \ ['leftarrow' , '⟵'],
+ \ ['Leftarrow' , '⟸'],
+ \ ['leftarrowtail' , '↢'],
+ \ ['leftharpoondown', '↽'],
+ \ ['leftharpoonup' , '↼'],
+ \ ['leftrightarrow' , '↔'],
+ \ ['Leftrightarrow' , '⇔'],
+ \ ['leftrightsquigarrow', '↭'],
+ \ ['leftthreetimes' , '⋋'],
+ \ ['leq' , '≤'],
+ \ ['leq' , '≤'],
+ \ ['leqq' , '≦'],
+ \ ['lessdot' , '⋖'],
+ \ ['lesseqgtr' , '⋚'],
+ \ ['lesssim' , '≲'],
+ \ ['lfloor' , '⌊'],
+ \ ['ll' , '≪'],
+ \ ['lmoustache' , '╭'],
+ \ ['lneqq' , '≨'],
+ \ ['ltimes' , '⋉'],
+ \ ['mapsto' , '↦'],
+ \ ['measuredangle' , '∡'],
+ \ ['mid' , '∣'],
+ \ ['models' , '╞'],
+ \ ['mp' , '∓'],
+ \ ['nabla' , '∇'],
+ \ ['natural' , '♮'],
+ \ ['ncong' , '≇'],
+ \ ['ne' , '≠'],
+ \ ['nearrow' , '↗'],
+ \ ['neg' , '¬'],
+ \ ['neq' , '≠'],
+ \ ['nexists' , '∄'],
+ \ ['ngeq' , '≱'],
+ \ ['ngeqq' , '≱'],
+ \ ['ngtr' , '≯'],
+ \ ['ni' , '∋'],
+ \ ['nleftarrow' , '↚'],
+ \ ['nLeftarrow' , '⇍'],
+ \ ['nLeftrightarrow', '⇎'],
+ \ ['nleq' , '≰'],
+ \ ['nleqq' , '≰'],
+ \ ['nless' , '≮'],
+ \ ['nmid' , '∤'],
+ \ ['notin' , '∉'],
+ \ ['nprec' , '⊀'],
+ \ ['nrightarrow' , '↛'],
+ \ ['nRightarrow' , '⇏'],
+ \ ['nsim' , '≁'],
+ \ ['nsucc' , '⊁'],
+ \ ['ntriangleleft' , '⋪'],
+ \ ['ntrianglelefteq', '⋬'],
+ \ ['ntriangleright' , '⋫'],
+ \ ['ntrianglerighteq', '⋭'],
+ \ ['nvdash' , '⊬'],
+ \ ['nvDash' , '⊭'],
+ \ ['nVdash' , '⊮'],
+ \ ['nwarrow' , '↖'],
+ \ ['odot' , '⊙'],
+ \ ['oint' , '∮'],
+ \ ['ominus' , '⊖'],
+ \ ['oplus' , '⊕'],
+ \ ['oslash' , '⊘'],
+ \ ['otimes' , '⊗'],
+ \ ['owns' , '∋'],
+ \ ['P' , '¶'],
+ \ ['parallel' , '║'],
+ \ ['partial' , '∂'],
+ \ ['perp' , '⊥'],
+ \ ['pitchfork' , '⋔'],
+ \ ['pm' , '±'],
+ \ ['prec' , '≺'],
+ \ ['precapprox' , '⪷'],
+ \ ['preccurlyeq' , '≼'],
+ \ ['preceq' , '⪯'],
+ \ ['precnapprox' , '⪹'],
+ \ ['precneqq' , '⪵'],
+ \ ['precsim' , '≾'],
+ \ ['prime' , '′'],
+ \ ['prod' , '∏'],
+ \ ['propto' , '∝'],
+ \ ['rceil' , '⌉'],
+ \ ['Re' , 'ℜ'],
+ \ ['rfloor' , '⌋'],
+ \ ['right)' , ')'],
+ \ ['right]' , ']'],
+ \ ['right\\}' , '}'],
+ \ ['rightarrow' , '⟶'],
+ \ ['Rightarrow' , '⟹'],
+ \ ['rightarrowtail' , '↣'],
+ \ ['rightleftharpoons', '⇌'],
+ \ ['rightsquigarrow', '↝'],
+ \ ['rightthreetimes', '⋌'],
+ \ ['risingdotseq' , '≓'],
+ \ ['rmoustache' , '╮'],
+ \ ['rtimes' , '⋊'],
+ \ ['S' , '§'],
+ \ ['searrow' , '↘'],
+ \ ['setminus' , '∖'],
+ \ ['sharp' , '♯'],
+ \ ['sim' , '∼'],
+ \ ['simeq' , '⋍'],
+ \ ['smile' , '‿'],
+ \ ['spadesuit' , '♠'],
+ \ ['sphericalangle' , '∢'],
+ \ ['sqcap' , '⊓'],
+ \ ['sqcup' , '⊔'],
+ \ ['sqsubset' , '⊏'],
+ \ ['sqsubseteq' , '⊑'],
+ \ ['sqsupset' , '⊐'],
+ \ ['sqsupseteq' , '⊒'],
+ \ ['star' , '✫'],
+ \ ['subset' , '⊂'],
+ \ ['Subset' , '⋐'],
+ \ ['subseteq' , '⊆'],
+ \ ['subseteqq' , '⫅'],
+ \ ['subsetneq' , '⊊'],
+ \ ['subsetneqq' , '⫋'],
+ \ ['succ' , '≻'],
+ \ ['succapprox' , '⪸'],
+ \ ['succcurlyeq' , '≽'],
+ \ ['succeq' , '⪰'],
+ \ ['succnapprox' , '⪺'],
+ \ ['succneqq' , '⪶'],
+ \ ['succsim' , '≿'],
+ \ ['sum' , '∑'],
+ \ ['supset' , '⊃'],
+ \ ['Supset' , '⋑'],
+ \ ['supseteq' , '⊇'],
+ \ ['supseteqq' , '⫆'],
+ \ ['supsetneq' , '⊋'],
+ \ ['supsetneqq' , '⫌'],
+ \ ['surd' , '√'],
+ \ ['swarrow' , '↙'],
+ \ ['therefore' , '∴'],
+ \ ['times' , '×'],
+ \ ['to' , '→'],
+ \ ['top' , '⊤'],
+ \ ['triangle' , '∆'],
+ \ ['triangleleft' , '⊲'],
+ \ ['trianglelefteq' , '⊴'],
+ \ ['triangleq' , '≜'],
+ \ ['triangleright' , '⊳'],
+ \ ['trianglerighteq', '⊵'],
+ \ ['twoheadleftarrow', '↞'],
+ \ ['twoheadrightarrow', '↠'],
+ \ ['uparrow' , '↑'],
+ \ ['Uparrow' , '⇑'],
+ \ ['updownarrow' , '↕'],
+ \ ['Updownarrow' , '⇕'],
+ \ ['varnothing' , '∅'],
+ \ ['vartriangle' , '∆'],
+ \ ['vdash' , '⊢'],
+ \ ['vDash' , '⊨'],
+ \ ['Vdash' , '⊩'],
+ \ ['vdots' , '⋮'],
+ \ ['vee' , '∨'],
+ \ ['veebar' , '⊻'],
+ \ ['Vvdash' , '⊪'],
+ \ ['wedge' , '∧'],
+ \ ['wp' , '℘'],
+ \ ['wr' , '≀']]
+" \ ['jmath' , 'X']
+" \ ['uminus' , 'X']
+" \ ['uplus' , 'X']
+ 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=Ŷ
+ 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','\\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','\\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
+ fun! s:SuperSub(group,leader,pat,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'
+ 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','\^','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','_','i','ᵢ')
+ call s:SuperSub('texSubscript','_','o','ₒ')
+ call s:SuperSub('texSubscript','_','u','ᵤ')
+ 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: {{{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
+ 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=ß
+ 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("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
+if did_tex_syntax_inits == 1
+ let did_tex_syntax_inits= 2
+ " TeX highlighting groups which should share similar highlighting
+ if !exists("s:tex_no_error")
+ if !exists("g:tex_no_math")
+ HiLink texBadMath texError
+ HiLink texMathDelimBad texError
+ HiLink texMathError texError
+ if !b:tex_stylish
+ HiLink texOnlyMath texError
+ endif
+ endif
+ HiLink 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
+ HiLink texCite texRefZone
+ HiLink texDefCmd texDef
+ HiLink texDefName texDef
+ HiLink texDocType texCmdName
+ HiLink texDocTypeArgs texCmdArgs
+ HiLink texInputFileOpt texCmdArgs
+ HiLink texInputCurlies texDelimiter
+ HiLink texLigature texSpecialChar
+ if !exists("tex_no_math")
+ HiLink texMathDelimSet1 texMathDelim
+ HiLink texMathDelimSet2 texMathDelim
+ HiLink texMathDelimKey texMathDelim
+ HiLink texMathMatcher texMath
+ HiLink texAccent texStatement
+ HiLink texGreek texStatement
+ HiLink texSuperscript texStatement
+ HiLink texSubscript texStatement
+ HiLink texSuperscripts texSuperscript
+ HiLink texSubscripts texSubscript
+ HiLink texMathSymbol texStatement
+ HiLink texMathZoneV texMath
+ HiLink texMathZoneW texMath
+ HiLink texMathZoneX texMath
+ HiLink texMathZoneY texMath
+ HiLink texMathZoneV texMath
+ HiLink texMathZoneZ texMath
+ endif
+ HiLink texBeginEnd texCmdName
+ HiLink texBeginEndName texSection
+ HiLink texSpaceCode texStatement
+ HiLink texStyleStatement texStatement
+ HiLink texTypeSize texType
+ HiLink texTypeStyle texType
+
+ " Basic TeX highlighting groups
+ HiLink texCmdArgs Number
+ HiLink texCmdName Statement
+ HiLink texComment Comment
+ HiLink texDef Statement
+ HiLink texDefParm Special
+ HiLink texDelimiter Delimiter
+ HiLink texInput Special
+ HiLink texInputFile Special
+ HiLink texLength Number
+ HiLink texMath Special
+ HiLink texMathDelim Statement
+ HiLink texMathOper Operator
+ HiLink texNewCmd Statement
+ HiLink texNewEnv Statement
+ HiLink texOption Number
+ HiLink texRefZone Special
+ HiLink texSection PreCondit
+ HiLink texSpaceCodeChar Special
+ HiLink texSpecialChar SpecialChar
+ HiLink texStatement Statement
+ HiLink texString String
+ HiLink texTodo Todo
+ HiLink texType Type
+ HiLink texZone PreCondit
+
+ delcommand HiLink
+endif
+
+" Cleanup: {{{1
+unlet s:extfname
+let b:current_syntax = "tex"
+let &cpo = s:keepcpo
+unlet s:keepcpo
+" vim: ts=8 fdm=marker