xref: /vim-8.2.3635/runtime/syntax/tex.vim (revision 51ad4eaa)
1" Vim syntax file
2" Language:	TeX
3" Maintainer:	Charles E. Campbell <[email protected]>
4" Last Change:	Mar 30, 2018
5" Version:	109
6" URL:		http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
7"
8" Notes: {{{1
9"
10" 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
11"    use %stopzone.
12"
13" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
14"    by suitable use of %stopzone.
15"
16" 3. If you have a slow computer, you may wish to modify
17"
18"	syn sync maxlines=200
19"	syn sync minlines=50
20"
21"    to values that are more to your liking.
22"
23" 4. There is no match-syncing for $...$ and $$...$$; hence large
24"    equation blocks constructed that way may exhibit syncing problems.
25"    (there's no difference between begin/end patterns)
26"
27" 5. If you have the variable "g:tex_no_error" defined then none of the
28"    lexical error-checking will be done.
29"
30"    ie. let g:tex_no_error=1
31"
32" 6. Please see  :help latex-syntax  for information on
33"      syntax folding           :help tex-folding
34"      spell checking           :help tex-nospell
35"      commands and mathzones   :help tex-runon
36"      new command highlighting :help tex-morecommands
37"      error highlighting       :help tex-error
38"      new math groups          :help tex-math
39"      new styles               :help tex-style
40"      using conceal mode       :help tex-conceal
41
42" Version Clears: {{{1
43" quit when a syntax file was already loaded
44if exists("b:current_syntax")
45  finish
46endif
47let s:keepcpo= &cpo
48set cpo&vim
49scriptencoding utf-8
50
51" by default, enable all region-based highlighting
52let s:tex_fast= "bcmMprsSvV"
53if exists("g:tex_fast")
54 if type(g:tex_fast) != 1
55  " g:tex_fast exists and is not a string, so
56  " turn off all optional region-based highighting
57  let s:tex_fast= ""
58 else
59  let s:tex_fast= g:tex_fast
60 endif
61endif
62
63" let user determine which classes of concealment will be supported
64"   a=accents/ligatures d=delimiters m=math symbols  g=Greek  s=superscripts/subscripts
65if !exists("g:tex_conceal")
66 let s:tex_conceal= 'abdmgsS'
67else
68 let s:tex_conceal= g:tex_conceal
69endif
70if !exists("g:tex_superscripts")
71 let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]'
72else
73 let s:tex_superscripts= g:tex_superscripts
74endif
75if !exists("g:tex_subscripts")
76 let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]'
77else
78 let s:tex_subscripts= g:tex_subscripts
79endif
80
81" Determine whether or not to use "*.sty" mode {{{1
82" The user may override the normal determination by setting
83"   g:tex_stylish to 1      (for    "*.sty" mode)
84"    or to           0 else (normal "*.tex" mode)
85" or on a buffer-by-buffer basis with b:tex_stylish
86let s:extfname=expand("%:e")
87if exists("g:tex_stylish")
88 let b:tex_stylish= g:tex_stylish
89elseif !exists("b:tex_stylish")
90 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
91  let b:tex_stylish= 1
92 else
93  let b:tex_stylish= 0
94 endif
95endif
96
97" handle folding {{{1
98if !exists("g:tex_fold_enabled")
99 let s:tex_fold_enabled= 0
100elseif g:tex_fold_enabled && !has("folding")
101 let s:tex_fold_enabled= 0
102 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
103else
104 let s:tex_fold_enabled= 1
105endif
106if s:tex_fold_enabled && &fdm == "manual"
107 setl fdm=syntax
108endif
109if s:tex_fold_enabled && has("folding")
110 com! -nargs=* TexFold <args> fold
111else
112 com! -nargs=* TexFold <args>
113endif
114
115" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
116" but _ is the only one that causes problems.
117" One may override this iskeyword setting by providing
118" g:tex_isk
119if exists("g:tex_isk")
120 if b:tex_stylish && g:tex_isk !~ '@'
121  let b:tex_isk= '@,'.g:tex_isk
122 else
123  let b:tex_isk= g:tex_isk
124 endif
125elseif b:tex_stylish
126 let b:tex_isk="@,48-57,a-z,A-Z,192-255"
127else
128 let b:tex_isk="48-57,a-z,A-Z,192-255"
129endif
130if v:version > 704 || (v:version == 704 && has("patch-7.4.1142"))
131 exe "syn iskeyword ".b:tex_isk
132else
133 exe "setl isk=".b:tex_isk
134endif
135if exists("g:tex_no_error") && g:tex_no_error
136 let s:tex_no_error= 1
137else
138 let s:tex_no_error= 0
139endif
140if exists("g:tex_comment_nospell") && g:tex_comment_nospell
141 let s:tex_comment_nospell= 1
142else
143 let s:tex_comment_nospell= 0
144endif
145if exists("g:tex_nospell") && g:tex_nospell
146 let s:tex_nospell = 1
147else
148 let s:tex_nospell = 0
149endif
150
151" Clusters: {{{1
152" --------
153syn 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
154if !s:tex_no_error
155 syn cluster texCmdGroup		add=texMathError
156endif
157syn cluster texEnvGroup			contains=texMatcher,texMathDelim,texSpecialChar,texStatement
158syn 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
159syn 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
160syn 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
161if !s:tex_nospell
162 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
163 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,@Spell
164 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
165else
166 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
167 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
168 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
169endif
170syn 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
171syn cluster texRefGroup			contains=texMatcher,texComment,texDelimiter
172if !exists("g:tex_no_math")
173 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
174 syn cluster texMathZones		contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
175 syn cluster texMatchGroup		add=@texMathZones
176 syn cluster texMathDelimGroup		contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
177 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
178 syn cluster texMathZoneGroup		contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
179 if !s:tex_no_error
180  syn cluster texMathMatchGroup		add=texMathError
181  syn cluster texMathZoneGroup		add=texMathError
182 endif
183 syn cluster texMathZoneGroup		add=@NoSpell
184 " following used in the \part \chapter \section \subsection \subsubsection
185 " \paragraph \subparagraph \author \title highlighting
186 syn cluster texDocGroup		contains=texPartZone,@texPartGroup
187 syn cluster texPartGroup		contains=texChapterZone,texSectionZone,texParaZone
188 syn cluster texChapterGroup		contains=texSectionZone,texParaZone
189 syn cluster texSectionGroup		contains=texSubSectionZone,texParaZone
190 syn cluster texSubSectionGroup		contains=texSubSubSectionZone,texParaZone
191 syn cluster texSubSubSectionGroup	contains=texParaZone
192 syn cluster texParaGroup		contains=texSubParaZone
193 if has("conceal") && &enc == 'utf-8'
194  syn cluster texMathZoneGroup		add=texGreek,texSuperscript,texSubscript,texMathSymbol
195  syn cluster texMathMatchGroup		add=texGreek,texSuperscript,texSubscript,texMathSymbol
196 endif
197endif
198
199" Try to flag {} and () mismatches: {{{1
200if s:tex_fast =~# 'm'
201  if !s:tex_no_error
202   syn region texMatcher	matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"			transparent contains=@texMatchGroup,texError
203   syn region texMatcher	matchgroup=Delimiter start="\["				end="]"			transparent contains=@texMatchGroup,texError,@NoSpell
204   syn region texMatcherNM	matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"			transparent contains=@texMatchNMGroup,texError
205   syn region texMatcherNM	matchgroup=Delimiter start="\["				end="]"			transparent contains=@texMatchNMGroup,texError,@NoSpell
206  else
207   syn region texMatcher	matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"			transparent contains=@texMatchGroup
208   syn region texMatcher	matchgroup=Delimiter start="\["				end="]"			transparent contains=@texMatchGroup
209   syn region texMatcherNM	matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"			transparent contains=@texMatchNMGroup
210   syn region texMatcherNM	matchgroup=Delimiter start="\["				end="]"			transparent contains=@texMatchNMGroup
211  endif
212  if !s:tex_nospell
213   syn region texParen		start="("	end=")"								transparent contains=@texMatchGroup,@Spell
214  else
215   syn region texParen		start="("	end=")"								transparent contains=@texMatchGroup
216  endif
217endif
218if !s:tex_no_error
219 syn match  texError		"[}\])]"
220endif
221if s:tex_fast =~# 'M'
222  if !exists("g:tex_no_math")
223   if !s:tex_no_error
224    syn match  texMathError	"}"	contained
225   endif
226   syn region texMathMatcher	matchgroup=Delimiter	start="{"          skip="\%(\\\\\)*\\}"     end="}" end="%stopzone\>"	contained contains=@texMathMatchGroup
227  endif
228endif
229
230" TeX/LaTeX keywords: {{{1
231" Instead of trying to be All Knowing, I just match \..alphameric..
232" Note that *.tex files may not have "@" in their \commands
233if exists("g:tex_tex") || b:tex_stylish
234  syn match texStatement	"\\[a-zA-Z@]\+"
235else
236  syn match texStatement	"\\\a\+"
237  if !s:tex_no_error
238   syn match texError		"\\\a*@[a-zA-Z@]*"
239  endif
240endif
241
242" TeX/LaTeX delimiters: {{{1
243syn match texDelimiter		"&"
244syn match texDelimiter		"\\\\"
245
246" Tex/Latex Options: {{{1
247syn match texOption		"[^\\]\zs#\d\+\|^#\d\+"
248
249" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
250if b:tex_stylish
251  syn match texAccent		"\\[bcdvuH][^a-zA-Z@]"me=e-1
252  syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
253else
254  syn match texAccent		"\\[bcdvuH]\A"me=e-1
255  syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
256endif
257syn match texAccent		"\\[bcdvuH]$"
258syn match texAccent		+\\[=^.\~"`']+
259syn match texAccent		+\\['=t'.c^ud"vb~Hr]{\a}+
260syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
261
262
263" \begin{}/\end{} section markers: {{{1
264syn match  texBeginEnd		"\\begin\>\|\\end\>" nextgroup=texBeginEndName
265if s:tex_fast =~# 'm'
266  syn region texBeginEndName		matchgroup=Delimiter	start="{"		end="}"	contained	nextgroup=texBeginEndModifier	contains=texComment
267  syn region texBeginEndModifier	matchgroup=Delimiter	start="\["		end="]"	contained	contains=texComment,@texMathZones,@NoSpell
268endif
269
270" \documentclass, \documentstyle, \usepackage: {{{1
271syn match  texDocType		"\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"	nextgroup=texBeginEndName,texDocTypeArgs
272if s:tex_fast =~# 'm'
273  syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texBeginEndName	contains=texComment,@NoSpell
274endif
275
276" Preamble syntax-based folding support: {{{1
277if s:tex_fold_enabled && has("folding")
278 syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=texStyle,@texPreambleMatchGroup
279endif
280
281" TeX input: {{{1
282syn match texInput		"\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7				contains=texStatement
283syn match texInputFile		"\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}"	contains=texStatement,texInputCurlies,texInputFileOpt
284syn match texInputFile		"\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}"		contains=texStatement,texInputCurlies,texInputFileOpt
285syn match texInputCurlies	"[{}]"								contained
286if s:tex_fast =~# 'm'
287 syn region texInputFileOpt	matchgroup=Delimiter start="\[" end="\]"			contained	contains=texComment
288endif
289
290" Type Styles (LaTeX 2.09): {{{1
291syn match texTypeStyle		"\\rm\>"
292syn match texTypeStyle		"\\em\>"
293syn match texTypeStyle		"\\bf\>"
294syn match texTypeStyle		"\\it\>"
295syn match texTypeStyle		"\\sl\>"
296syn match texTypeStyle		"\\sf\>"
297syn match texTypeStyle		"\\sc\>"
298syn match texTypeStyle		"\\tt\>"
299
300" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
301if s:tex_conceal !~# 'b'
302 syn match texTypeStyle		"\\textbf\>"
303 syn match texTypeStyle		"\\textit\>"
304endif
305syn match texTypeStyle		"\\textmd\>"
306syn match texTypeStyle		"\\textrm\>"
307syn match texTypeStyle		"\\textsc\>"
308syn match texTypeStyle		"\\textsf\>"
309syn match texTypeStyle		"\\textsl\>"
310syn match texTypeStyle		"\\texttt\>"
311syn match texTypeStyle		"\\textup\>"
312syn match texTypeStyle		"\\emph\>"
313
314syn match texTypeStyle		"\\mathbb\>"
315syn match texTypeStyle		"\\mathbf\>"
316syn match texTypeStyle		"\\mathcal\>"
317syn match texTypeStyle		"\\mathfrak\>"
318syn match texTypeStyle		"\\mathit\>"
319syn match texTypeStyle		"\\mathnormal\>"
320syn match texTypeStyle		"\\mathrm\>"
321syn match texTypeStyle		"\\mathsf\>"
322syn match texTypeStyle		"\\mathtt\>"
323
324syn match texTypeStyle		"\\rmfamily\>"
325syn match texTypeStyle		"\\sffamily\>"
326syn match texTypeStyle		"\\ttfamily\>"
327
328syn match texTypeStyle		"\\itshape\>"
329syn match texTypeStyle		"\\scshape\>"
330syn match texTypeStyle		"\\slshape\>"
331syn match texTypeStyle		"\\upshape\>"
332
333syn match texTypeStyle		"\\bfseries\>"
334syn match texTypeStyle		"\\mdseries\>"
335
336" Some type sizes: {{{1
337syn match texTypeSize		"\\tiny\>"
338syn match texTypeSize		"\\scriptsize\>"
339syn match texTypeSize		"\\footnotesize\>"
340syn match texTypeSize		"\\small\>"
341syn match texTypeSize		"\\normalsize\>"
342syn match texTypeSize		"\\large\>"
343syn match texTypeSize		"\\Large\>"
344syn match texTypeSize		"\\LARGE\>"
345syn match texTypeSize		"\\huge\>"
346syn match texTypeSize		"\\Huge\>"
347
348" Spacecodes (TeX'isms): {{{1
349" \mathcode`\^^@="2201  \delcode`\(="028300  \sfcode`\)=0 \uccode`X=`X  \lccode`x=`x
350syn match texSpaceCode		"\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
351syn match texSpaceCodeChar    "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)"	contained
352
353" Sections, subsections, etc: {{{1
354if s:tex_fast =~# 'p'
355 if !s:tex_nospell
356  TexFold syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup,@Spell
357  TexFold syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup,@Spell
358  TexFold syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup,@Spell
359  TexFold syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup,@Spell
360  TexFold syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup,@Spell
361  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
362  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
363  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
364  TexFold syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup,@Spell
365  TexFold syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup,@Spell
366 else
367  TexFold syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup
368  TexFold syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup
369  TexFold syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup
370  TexFold syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup
371  TexFold syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup
372  TexFold syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSubSectionGroup
373  TexFold syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			contains=@texFoldGroup,@texParaGroup
374  TexFold syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	contains=@texFoldGroup
375  TexFold syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup
376  TexFold syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup
377  endif
378endif
379
380" particular support for bold and italic {{{1
381if s:tex_fast =~# 'b'
382  if s:tex_conceal =~# 'b'
383   if !exists("g:tex_nospell") || !g:tex_nospell
384    syn region texBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texBoldGroup,@Spell
385    syn region texBoldItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texItalGroup,@Spell
386    syn region texItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texItalGroup,@Spell
387    syn region texItalBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texBoldGroup,@Spell
388   else
389    syn region texBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texBoldGroup
390    syn region texBoldItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texItalGroup
391    syn region texItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texItalGroup
392    syn region texItalBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texBoldGroup
393   endif
394  endif
395endif
396
397" Bad Math (mismatched): {{{1
398if !exists("g:tex_no_math") && !s:tex_no_error
399 syn match texBadMath		"\\end\s*{\s*\(array\|[bBpvV]matrix\|split\|smallmatrix\)\s*}"
400 syn match texBadMath		"\\end\s*{\s*\(displaymath\|equation\|eqnarray\|math\)\*\=\s*}"
401 syn match texBadMath		"\\[\])]"
402endif
403
404" Math Zones: {{{1
405if !exists("g:tex_no_math")
406 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
407 "                 Starred forms are created if starform is true.  Starred
408 "                 forms have syntax group and synchronization groups with a
409 "                 "S" appended.  Handles: cluster, syntax, sync, and highlighting.
410 fun! TexNewMathZone(sfx,mathzone,starform)
411   let grpname  = "texMathZone".a:sfx
412   let syncname = "texSyncMathZone".a:sfx
413   if s:tex_fold_enabled
414    let foldcmd= " fold"
415   else
416    let foldcmd= ""
417   endif
418   exe "syn cluster texMathZones add=".grpname
419   if s:tex_fast =~# 'M'
420    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
421    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
422    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
423   endif
424   exe 'hi def link '.grpname.' texMath'
425   if a:starform
426    let grpname  = "texMathZone".a:sfx.'S'
427    let syncname = "texSyncMathZone".a:sfx.'S'
428    exe "syn cluster texMathZones add=".grpname
429    if s:tex_fast =~# 'M'
430     exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
431     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
432     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
433    endif
434    exe 'hi def link '.grpname.' texMath'
435   endif
436 endfun
437
438 " Standard Math Zones: {{{2
439 call TexNewMathZone("A","displaymath",1)
440 call TexNewMathZone("B","eqnarray",1)
441 call TexNewMathZone("C","equation",1)
442 call TexNewMathZone("D","math",1)
443
444 " Inline Math Zones: {{{2
445 if s:tex_fast =~# 'M'
446  if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
447   syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter	end="\\)\|%stopzone\>"			keepend concealends contains=@texMathZoneGroup
448   syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter	end="\\]\|%stopzone\>"			keepend concealends contains=@texMathZoneGroup
449   syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter	end="\$"	end="%stopzone\>"		concealends contains=@texMathZoneGroup
450   syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter	end="\$\$"	end="%stopzone\>"	keepend concealends contains=@texMathZoneGroup
451  else
452   syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter	end="\\)\|%stopzone\>"			keepend contains=@texMathZoneGroup
453   syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter	end="\\]\|%stopzone\>"			keepend contains=@texMathZoneGroup
454   syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$"	matchgroup=Delimiter	end="\$"	end="%stopzone\>"		contains=@texMathZoneGroup
455   syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter	end="\$\$"	end="%stopzone\>"	keepend	contains=@texMathZoneGroup
456  endif
457  syn region texMathZoneZ	matchgroup=texStatement start="\\ensuremath\s*{"	matchgroup=texStatement	end="}"		end="%stopzone\>"	contains=@texMathZoneGroup
458 endif
459
460 syn match texMathOper		"[_^=]" contained
461
462 " Text Inside Math Zones: {{{2
463 if s:tex_fast =~# 'M'
464  if !exists("g:tex_nospell") || !g:tex_nospell
465   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup,@Spell
466  else
467   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup
468  endif
469 endif
470
471 " \left..something.. and \right..something.. support: {{{2
472 syn match   texMathDelimBad	contained		"\S"
473 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
474  syn match   texMathDelim	contained		"\\left\["
475  syn match   texMathDelim	contained		"\\left\\{"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
476  syn match   texMathDelim	contained		"\\right\\}"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
477  let s:texMathDelimList=[
478     \ ['<'            , '<'] ,
479     \ ['>'            , '>'] ,
480     \ ['('            , '('] ,
481     \ [')'            , ')'] ,
482     \ ['\['           , '['] ,
483     \ [']'            , ']'] ,
484     \ ['\\{'          , '{'] ,
485     \ ['\\}'          , '}'] ,
486     \ ['|'            , '|'] ,
487     \ ['\\|'          , '‖'] ,
488     \ ['\\backslash'  , '\'] ,
489     \ ['\\downarrow'  , '↓'] ,
490     \ ['\\Downarrow'  , '⇓'] ,
491     \ ['\\lbrace'     , '['] ,
492     \ ['\\lceil'      , '⌈'] ,
493     \ ['\\lfloor'     , '⌊'] ,
494     \ ['\\lgroup'     , '⌊'] ,
495     \ ['\\lmoustache' , '⎛'] ,
496     \ ['\\rbrace'     , ']'] ,
497     \ ['\\rceil'      , '⌉'] ,
498     \ ['\\rfloor'     , '⌋'] ,
499     \ ['\\rgroup'     , '⌋'] ,
500     \ ['\\rmoustache' , '⎞'] ,
501     \ ['\\uparrow'    , '↑'] ,
502     \ ['\\Uparrow'    , '↑'] ,
503     \ ['\\updownarrow', '↕'] ,
504     \ ['\\Updownarrow', '⇕']]
505  if &ambw == "double" || exists("g:tex_usedblwidth")
506    let s:texMathDelimList= s:texMathDelimList + [
507     \ ['\\langle'     , '〈'] ,
508     \ ['\\rangle'     , '〉']]
509  else
510    let s:texMathDelimList= s:texMathDelimList + [
511     \ ['\\langle'     , '<'] ,
512     \ ['\\rangle'     , '>']]
513  endif
514  syn match texMathDelim	'\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
515  for texmath in s:texMathDelimList
516   exe "syn match texMathDelim	'\\\\[bB]igg\\=[lr]\\=".texmath[0]."'	contained conceal cchar=".texmath[1]
517  endfor
518
519 else
520  syn match   texMathDelim	contained		"\\\(left\|right\)\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
521  syn match   texMathDelim	contained		"\\[bB]igg\=[lr]\=\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
522  syn match   texMathDelimSet2	contained	"\\"		nextgroup=texMathDelimKey,texMathDelimBad
523  syn match   texMathDelimSet1	contained	"[<>()[\]|/.]\|\\[{}|]"
524  syn keyword texMathDelimKey	contained	backslash       lceil           lVert           rgroup          uparrow
525  syn keyword texMathDelimKey	contained	downarrow       lfloor          rangle          rmoustache      Uparrow
526  syn keyword texMathDelimKey	contained	Downarrow       lgroup          rbrace          rvert           updownarrow
527  syn keyword texMathDelimKey	contained	langle          lmoustache      rceil           rVert           Updownarrow
528  syn keyword texMathDelimKey	contained	lbrace          lvert           rfloor
529 endif
530 syn match   texMathDelim	contained		"\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
531 syn match   texMathDelim	contained		"\\lefteqn\>"
532endif
533
534" Special TeX characters  ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
535syn match texSpecialChar	"\\[$&%#{}_]"
536if b:tex_stylish
537  syn match texSpecialChar	"\\[SP@][^a-zA-Z@]"me=e-1
538else
539  syn match texSpecialChar	"\\[SP@]\A"me=e-1
540endif
541syn match texSpecialChar	"\\\\"
542if !exists("g:tex_no_math")
543 syn match texOnlyMath		"[_^]"
544endif
545syn match texSpecialChar	"\^\^[0-9a-f]\{2}\|\^\^\S"
546if s:tex_conceal !~# 'S'
547 syn match texSpecialChar	'\\glq\>'	contained conceal cchar=‚
548 syn match texSpecialChar	'\\grq\>'	contained conceal cchar=‘
549 syn match texSpecialChar	'\\glqq\>'	contained conceal cchar=„
550 syn match texSpecialChar	'\\grqq\>'	contained conceal cchar=“
551 syn match texSpecialChar	'\\hyp\>'	contained conceal cchar=-
552endif
553
554" Comments: {{{1
555"    Normal TeX LaTeX     :   %....
556"    Documented TeX Format:  ^^A...	-and-	leading %s (only)
557if !s:tex_comment_nospell
558 syn cluster texCommentGroup	contains=texTodo,@Spell
559else
560 syn cluster texCommentGroup	contains=texTodo,@NoSpell
561endif
562syn case ignore
563syn keyword texTodo		contained		combak	fixme	todo	xxx
564syn case match
565if s:extfname == "dtx"
566 syn match texComment		"\^\^A.*$"	contains=@texCommentGroup
567 syn match texComment		"^%\+"		contains=@texCommentGroup
568else
569 if s:tex_fold_enabled
570  " allows syntax-folding of 2 or more contiguous comment lines
571  " single-line comments are not folded
572  syn match  texComment	"%.*$"				contains=@texCommentGroup
573  if s:tex_fast =~# 'c'
574   TexFold syn region texComment						start="^\zs\s*%.*\_s*%"	skip="^\s*%"	end='^\ze\s*[^%]'	contains=@texCommentGroup
575   TexFold syn region texNoSpell	contained	matchgroup=texComment	start="%\s*nospell\s*{"	end="%\s*nospell\s*}"			contains=@texFoldGroup,@NoSpell
576  endif
577 else
578  syn match texComment		"%.*$"			contains=@texCommentGroup
579  if s:tex_fast =~# 'c'
580   syn region texNoSpell		contained	matchgroup=texComment start="%\s*nospell\s*{"	end="%\s*nospell\s*}"	contains=@texFoldGroup,@NoSpell
581  endif
582 endif
583endif
584
585" %begin-include ... %end-include acts like a texDocZone for \include'd files.  Permits spell checking, for example, in such files.
586if !s:tex_nospell
587 TexFold syn region texDocZone			matchgroup=texSection start='^\s*%begin-include\>'	 end='^\s*%end-include\>'											contains=@texFoldGroup,@texDocGroup,@Spell
588else
589 TexFold syn region texDocZone			matchgroup=texSection start='^\s*%begin-include\>'	 end='^\s*%end-include\>'											contains=@texFoldGroup,@texDocGroup
590endif
591
592" Separate lines used for verb` and verb# so that the end conditions {{{1
593" will appropriately terminate.
594" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
595if s:tex_fast =~# 'v'
596  if exists("g:tex_verbspell") && g:tex_verbspell
597   syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"	contains=@Spell
598   " listings package:
599   syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"	contains=@Spell
600   if b:tex_stylish
601    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"			contains=@Spell
602   else
603    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"			contains=@Spell
604   endif
605  else
606   syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"
607   if b:tex_stylish
608     syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"
609   else
610     syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"
611   endif
612  endif
613endif
614
615" Tex Reference Zones: {{{1
616if s:tex_fast =~# 'r'
617  syn region texZone		matchgroup=texStatement start="@samp{"			end="}\|%stopzone\>"	contains=@texRefGroup
618  syn region texRefZone		matchgroup=texStatement start="\\nocite{"		end="}\|%stopzone\>"	contains=@texRefGroup
619  syn region texRefZone		matchgroup=texStatement start="\\bibliography{"		end="}\|%stopzone\>"	contains=@texRefGroup
620  syn region texRefZone		matchgroup=texStatement start="\\label{"		end="}\|%stopzone\>"	contains=@texRefGroup
621  syn region texRefZone		matchgroup=texStatement start="\\\(page\|eq\)ref{"	end="}\|%stopzone\>"	contains=@texRefGroup
622  syn region texRefZone		matchgroup=texStatement start="\\v\=ref{"		end="}\|%stopzone\>"	contains=@texRefGroup
623  syn region texRefOption	contained	matchgroup=Delimiter start='\[' end=']'		contains=@texRefGroup,texRefZone	nextgroup=texRefOption,texCite
624  syn region texCite		contained	matchgroup=Delimiter start='{' end='}'		contains=@texRefGroup,texRefZone,texCite
625endif
626syn match  texRefZone		'\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
627
628" Handle newcommand, newenvironment : {{{1
629syn match  texNewCmd				"\\newcommand\>"			nextgroup=texCmdName skipwhite skipnl
630if s:tex_fast =~# 'V'
631  syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
632  syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]"		nextgroup=texCmdBody skipwhite skipnl
633  syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]"	matchgroup=Delimiter end="}" contains=@texCmdGroup
634endif
635syn match  texNewEnv				"\\newenvironment\>"			nextgroup=texEnvName skipwhite skipnl
636if s:tex_fast =~# 'V'
637  syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvBgn skipwhite skipnl
638  syn region texEnvBgn  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
639  syn region texEnvEnd  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		skipwhite skipnl contains=@texEnvGroup
640endif
641
642" Definitions/Commands: {{{1
643syn match texDefCmd				"\\def\>"				nextgroup=texDefName skipwhite skipnl
644if b:tex_stylish
645  syn match texDefName contained		"\\[a-zA-Z@]\+"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
646  syn match texDefName contained		"\\[^a-zA-Z@]"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
647else
648  syn match texDefName contained		"\\\a\+"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
649  syn match texDefName contained		"\\\A"					nextgroup=texDefParms,texCmdBody skipwhite skipnl
650endif
651syn match texDefParms  contained		"#[^{]*"	contains=texDefParm	nextgroup=texCmdBody skipwhite skipnl
652syn match  texDefParm  contained		"#\d\+"
653
654" TeX Lengths: {{{1
655syn match  texLength		"\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
656
657" TeX String Delimiters: {{{1
658syn match texString		"\(``\|''\|,,\)"
659
660" makeatletter -- makeatother sections
661if !s:tex_no_error
662 if s:tex_fast =~# 'S'
663  syn region texStyle			matchgroup=texStatement start='\\makeatletter' end='\\makeatother'	contains=@texStyleGroup contained
664 endif
665 syn match  texStyleStatement		"\\[a-zA-Z@]\+"	contained
666 if s:tex_fast =~# 'S'
667  syn region texStyleMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texStyleGroup,texError	contained
668  syn region texStyleMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texStyleGroup,texError	contained
669 endif
670endif
671
672" Conceal mode support (supports set cole=2) {{{1
673if has("conceal") && &enc == 'utf-8'
674
675 " Math Symbols {{{2
676 " (many of these symbols were contributed by Björn Winckler)
677 if s:tex_conceal =~# 'm'
678  let s:texMathList=[
679    \ ['|'		, '‖'],
680    \ ['aleph'		, 'ℵ'],
681    \ ['amalg'		, '∐'],
682    \ ['angle'		, '∠'],
683    \ ['approx'		, '≈'],
684    \ ['ast'		, '∗'],
685    \ ['asymp'		, '≍'],
686    \ ['backepsilon'	, '∍'],
687    \ ['backsimeq'	, '≃'],
688    \ ['backslash'	, '∖'],
689    \ ['barwedge'	, '⊼'],
690    \ ['because'	, '∵'],
691    \ ['beth'           , 'ܒ'],
692    \ ['between'	, '≬'],
693    \ ['bigcap'		, '∩'],
694    \ ['bigcirc'	, '○'],
695    \ ['bigcup'		, '∪'],
696    \ ['bigodot'	, '⊙'],
697    \ ['bigoplus'	, '⊕'],
698    \ ['bigotimes'	, '⊗'],
699    \ ['bigsqcup'	, '⊔'],
700    \ ['bigtriangledown', '∇'],
701    \ ['bigtriangleup'	, '∆'],
702    \ ['bigvee'		, '⋁'],
703    \ ['bigwedge'	, '⋀'],
704    \ ['blacksquare'	, '∎'],
705    \ ['bot'		, '⊥'],
706    \ ['bowtie'	        , '⋈'],
707    \ ['boxdot'		, '⊡'],
708    \ ['boxminus'	, '⊟'],
709    \ ['boxplus'	, '⊞'],
710    \ ['boxtimes'	, '⊠'],
711    \ ['Box'            , '☐'],
712    \ ['bullet'	        , '•'],
713    \ ['bumpeq'		, '≏'],
714    \ ['Bumpeq'		, '≎'],
715    \ ['cap'		, '∩'],
716    \ ['Cap'		, '⋒'],
717    \ ['cdot'		, '·'],
718    \ ['cdots'		, '⋯'],
719    \ ['circ'		, '∘'],
720    \ ['circeq'		, '≗'],
721    \ ['circlearrowleft', '↺'],
722    \ ['circlearrowright', '↻'],
723    \ ['circledast'	, '⊛'],
724    \ ['circledcirc'	, '⊚'],
725    \ ['clubsuit'	, '♣'],
726    \ ['complement'	, '∁'],
727    \ ['cong'		, '≅'],
728    \ ['coprod'		, '∐'],
729    \ ['copyright'	, '©'],
730    \ ['cup'		, '∪'],
731    \ ['Cup'		, '⋓'],
732    \ ['curlyeqprec'	, '⋞'],
733    \ ['curlyeqsucc'	, '⋟'],
734    \ ['curlyvee'	, '⋎'],
735    \ ['curlywedge'	, '⋏'],
736    \ ['dagger'	        , '†'],
737    \ ['dashv'		, '⊣'],
738    \ ['ddagger'	, '‡'],
739    \ ['ddots'	        , '⋱'],
740    \ ['diamond'	, '⋄'],
741    \ ['diamondsuit'	, '♢'],
742    \ ['div'		, '÷'],
743    \ ['doteq'		, '≐'],
744    \ ['doteqdot'	, '≑'],
745    \ ['dotplus'	, '∔'],
746    \ ['dots'		, '…'],
747    \ ['dotsb'		, '⋯'],
748    \ ['dotsc'		, '…'],
749    \ ['dotsi'		, '⋯'],
750    \ ['dotso'		, '…'],
751    \ ['doublebarwedge'	, '⩞'],
752    \ ['downarrow'	, '↓'],
753    \ ['Downarrow'	, '⇓'],
754    \ ['ell'		, 'ℓ'],
755    \ ['emptyset'	, '∅'],
756    \ ['eqcirc'		, '≖'],
757    \ ['eqsim'		, '≂'],
758    \ ['eqslantgtr'	, '⪖'],
759    \ ['eqslantless'	, '⪕'],
760    \ ['equiv'		, '≡'],
761    \ ['eth'            , 'ð'],
762    \ ['exists'		, '∃'],
763    \ ['fallingdotseq'	, '≒'],
764    \ ['flat'		, '♭'],
765    \ ['forall'		, '∀'],
766    \ ['frown'		, '⁔'],
767    \ ['ge'		, '≥'],
768    \ ['geq'		, '≥'],
769    \ ['geqq'		, '≧'],
770    \ ['gets'		, '←'],
771    \ ['gimel'          , 'ℷ'],
772    \ ['gg'		, '⟫'],
773    \ ['gneqq'		, '≩'],
774    \ ['gtrdot'		, '⋗'],
775    \ ['gtreqless'	, '⋛'],
776    \ ['gtrless'	, '≷'],
777    \ ['gtrsim'		, '≳'],
778    \ ['hbar'		, 'ℏ'],
779    \ ['heartsuit'	, '♡'],
780    \ ['hookleftarrow'	, '↩'],
781    \ ['hookrightarrow'	, '↪'],
782    \ ['iff'            , '⇔'],
783    \ ['iiint'		, '∭'],
784    \ ['iint'		, '∬'],
785    \ ['Im'		, 'ℑ'],
786    \ ['imath'		, 'ɩ'],
787    \ ['implies'	, '⇒'],
788    \ ['in'		, '∈'],
789    \ ['infty'		, '∞'],
790    \ ['int'		, '∫'],
791    \ ['jmath'		, '��'],
792    \ ['land'		, '∧'],
793    \ ['lceil'		, '⌈'],
794    \ ['ldots'		, '…'],
795    \ ['le'		, '≤'],
796    \ ['leadsto'	, '↝'],
797    \ ['left('		, '('],
798    \ ['left\['		, '['],
799    \ ['left\\{'	, '{'],
800    \ ['leftarrow'	, '←'],
801    \ ['Leftarrow'	, '⇐'],
802    \ ['leftarrowtail'	, '↢'],
803    \ ['leftharpoondown', '↽'],
804    \ ['leftharpoonup'	, '↼'],
805    \ ['leftrightarrow'	, '↔'],
806    \ ['Leftrightarrow'	, '⇔'],
807    \ ['leftrightsquigarrow', '↭'],
808    \ ['leftthreetimes'	, '⋋'],
809    \ ['leq'		, '≤'],
810    \ ['leq'		, '≤'],
811    \ ['leqq'		, '≦'],
812    \ ['lessdot'	, '⋖'],
813    \ ['lesseqgtr'	, '⋚'],
814    \ ['lesssim'	, '≲'],
815    \ ['lfloor'		, '⌊'],
816    \ ['ll'		, '≪'],
817    \ ['lmoustache'     , '╭'],
818    \ ['lneqq'		, '≨'],
819    \ ['lor'		, '∨'],
820    \ ['ltimes'		, '⋉'],
821    \ ['mapsto'		, '↦'],
822    \ ['measuredangle'	, '∡'],
823    \ ['mid'		, '∣'],
824    \ ['models'		, '╞'],
825    \ ['mp'		, '∓'],
826    \ ['nabla'		, '∇'],
827    \ ['natural'	, '♮'],
828    \ ['ncong'		, '≇'],
829    \ ['ne'		, '≠'],
830    \ ['nearrow'	, '↗'],
831    \ ['neg'		, '¬'],
832    \ ['neq'		, '≠'],
833    \ ['nexists'	, '∄'],
834    \ ['ngeq'		, '≱'],
835    \ ['ngeqq'		, '≱'],
836    \ ['ngtr'		, '≯'],
837    \ ['ni'		, '∋'],
838    \ ['nleftarrow'	, '↚'],
839    \ ['nLeftarrow'	, '⇍'],
840    \ ['nLeftrightarrow', '⇎'],
841    \ ['nleq'		, '≰'],
842    \ ['nleqq'		, '≰'],
843    \ ['nless'		, '≮'],
844    \ ['nmid'		, '∤'],
845    \ ['notin'		, '∉'],
846    \ ['nparallel'      , '∦'],
847    \ ['nprec'		, '⊀'],
848    \ ['nrightarrow'	, '↛'],
849    \ ['nRightarrow'	, '⇏'],
850    \ ['nsim'		, '≁'],
851    \ ['nsucc'		, '⊁'],
852    \ ['ntriangleleft'	, '⋪'],
853    \ ['ntrianglelefteq', '⋬'],
854    \ ['ntriangleright'	, '⋫'],
855    \ ['ntrianglerighteq', '⋭'],
856    \ ['nvdash'		, '⊬'],
857    \ ['nvDash'		, '⊭'],
858    \ ['nVdash'		, '⊮'],
859    \ ['nwarrow'	, '↖'],
860    \ ['odot'		, '⊙'],
861    \ ['oint'		, '∮'],
862    \ ['ominus'		, '⊖'],
863    \ ['oplus'		, '⊕'],
864    \ ['oslash'		, '⊘'],
865    \ ['otimes'		, '⊗'],
866    \ ['owns'		, '∋'],
867    \ ['P'	        , '¶'],
868    \ ['parallel'	, '║'],
869    \ ['partial'	, '∂'],
870    \ ['perp'		, '⊥'],
871    \ ['pitchfork'	, '⋔'],
872    \ ['pm'		, '±'],
873    \ ['prec'		, '≺'],
874    \ ['precapprox'	, '⪷'],
875    \ ['preccurlyeq'	, '≼'],
876    \ ['preceq'		, '⪯'],
877    \ ['precnapprox'	, '⪹'],
878    \ ['precneqq'	, '⪵'],
879    \ ['precsim'	, '≾'],
880    \ ['prime'		, '′'],
881    \ ['prod'		, '∏'],
882    \ ['propto'		, '∝'],
883    \ ['rceil'		, '⌉'],
884    \ ['Re'		, 'ℜ'],
885    \ ['rfloor'		, '⌋'],
886    \ ['right)'		, ')'],
887    \ ['right]'		, ']'],
888    \ ['right\\}'	, '}'],
889    \ ['rightarrow'	, '→'],
890    \ ['Rightarrow'	, '⇒'],
891    \ ['rightarrowtail'	, '↣'],
892    \ ['rightleftharpoons', '⇌'],
893    \ ['rightsquigarrow', '↝'],
894    \ ['rightthreetimes', '⋌'],
895    \ ['risingdotseq'	, '≓'],
896    \ ['rmoustache'     , '╮'],
897    \ ['rtimes'		, '⋊'],
898    \ ['S'	        , '§'],
899    \ ['searrow'	, '↘'],
900    \ ['setminus'	, '∖'],
901    \ ['sharp'		, '♯'],
902    \ ['sim'		, '∼'],
903    \ ['simeq'		, '⋍'],
904    \ ['smile'		, '‿'],
905    \ ['spadesuit'	, '♠'],
906    \ ['sphericalangle'	, '∢'],
907    \ ['sqcap'		, '⊓'],
908    \ ['sqcup'		, '⊔'],
909    \ ['sqsubset'	, '⊏'],
910    \ ['sqsubseteq'	, '⊑'],
911    \ ['sqsupset'	, '⊐'],
912    \ ['sqsupseteq'	, '⊒'],
913    \ ['star'		, '✫'],
914    \ ['subset'		, '⊂'],
915    \ ['Subset'		, '⋐'],
916    \ ['subseteq'	, '⊆'],
917    \ ['subseteqq'	, '⫅'],
918    \ ['subsetneq'	, '⊊'],
919    \ ['subsetneqq'	, '⫋'],
920    \ ['succ'		, '≻'],
921    \ ['succapprox'	, '⪸'],
922    \ ['succcurlyeq'	, '≽'],
923    \ ['succeq'		, '⪰'],
924    \ ['succnapprox'	, '⪺'],
925    \ ['succneqq'	, '⪶'],
926    \ ['succsim'	, '≿'],
927    \ ['sum'		, '∑'],
928    \ ['supset'		, '⊃'],
929    \ ['Supset'		, '⋑'],
930    \ ['supseteq'	, '⊇'],
931    \ ['supseteqq'	, '⫆'],
932    \ ['supsetneq'	, '⊋'],
933    \ ['supsetneqq'	, '⫌'],
934    \ ['surd'		, '√'],
935    \ ['swarrow'	, '↙'],
936    \ ['therefore'	, '∴'],
937    \ ['times'		, '×'],
938    \ ['to'		, '→'],
939    \ ['top'		, '⊤'],
940    \ ['triangle'	, '∆'],
941    \ ['triangleleft'	, '⊲'],
942    \ ['trianglelefteq'	, '⊴'],
943    \ ['triangleq'	, '≜'],
944    \ ['triangleright'	, '⊳'],
945    \ ['trianglerighteq', '⊵'],
946    \ ['twoheadleftarrow', '↞'],
947    \ ['twoheadrightarrow', '↠'],
948    \ ['ulcorner'       , '⌜'],
949    \ ['uparrow'	, '↑'],
950    \ ['Uparrow'	, '⇑'],
951    \ ['updownarrow'	, '↕'],
952    \ ['Updownarrow'	, '⇕'],
953    \ ['urcorner'       , '⌝'],
954    \ ['varnothing'	, '∅'],
955    \ ['vartriangle'	, '∆'],
956    \ ['vdash'		, '⊢'],
957    \ ['vDash'		, '⊨'],
958    \ ['Vdash'		, '⊩'],
959    \ ['vdots'		, '⋮'],
960    \ ['vee'		, '∨'],
961    \ ['veebar'		, '⊻'],
962    \ ['Vvdash'		, '⊪'],
963    \ ['wedge'		, '∧'],
964    \ ['wp'		, '℘'],
965    \ ['wr'		, '≀']]
966"    \ ['jmath'		, 'X']
967"    \ ['uminus'	, 'X']
968"    \ ['uplus'		, 'X']
969  if &ambw == "double" || exists("g:tex_usedblwidth")
970    let s:texMathList= s:texMathList + [
971    \ ['right\\rangle'	, '〉'],
972    \ ['left\\langle'	, '〈']]
973  else
974    let s:texMathList= s:texMathList + [
975    \ ['right\\rangle'	, '>'],
976    \ ['left\\langle'	, '<']]
977  endif
978  for texmath in s:texMathList
979   if texmath[0] =~# '\w$'
980    exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
981   else
982    exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
983   endif
984  endfor
985
986  if &ambw == "double"
987   syn match texMathSymbol '\\gg\>'			contained conceal cchar=≫
988   syn match texMathSymbol '\\ll\>'			contained conceal cchar=≪
989  else
990   syn match texMathSymbol '\\gg\>'			contained conceal cchar=⟫
991   syn match texMathSymbol '\\ll\>'			contained conceal cchar=⟪
992  endif
993
994  syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
995  syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
996  syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
997  syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
998  syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
999  syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
1000  syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
1001  syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
1002  syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
1003  syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
1004  syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
1005  syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
1006  syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
1007  syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
1008  syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
1009  syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
1010  syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
1011  syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
1012  syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
1013  syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
1014"  syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
1015
1016  syn match texMathSymbol '\\dot{B}' contained conceal cchar=Ḃ
1017  syn match texMathSymbol '\\dot{b}' contained conceal cchar=ḃ
1018  syn match texMathSymbol '\\dot{D}' contained conceal cchar=Ḋ
1019  syn match texMathSymbol '\\dot{d}' contained conceal cchar=ḋ
1020  syn match texMathSymbol '\\dot{F}' contained conceal cchar=Ḟ
1021  syn match texMathSymbol '\\dot{f}' contained conceal cchar=ḟ
1022  syn match texMathSymbol '\\dot{H}' contained conceal cchar=Ḣ
1023  syn match texMathSymbol '\\dot{h}' contained conceal cchar=ḣ
1024  syn match texMathSymbol '\\dot{M}' contained conceal cchar=Ṁ
1025  syn match texMathSymbol '\\dot{m}' contained conceal cchar=ṁ
1026  syn match texMathSymbol '\\dot{N}' contained conceal cchar=Ṅ
1027  syn match texMathSymbol '\\dot{n}' contained conceal cchar=ṅ
1028  syn match texMathSymbol '\\dot{P}' contained conceal cchar=Ṗ
1029  syn match texMathSymbol '\\dot{p}' contained conceal cchar=ṗ
1030  syn match texMathSymbol '\\dot{R}' contained conceal cchar=Ṙ
1031  syn match texMathSymbol '\\dot{r}' contained conceal cchar=ṙ
1032  syn match texMathSymbol '\\dot{S}' contained conceal cchar=Ṡ
1033  syn match texMathSymbol '\\dot{s}' contained conceal cchar=ṡ
1034  syn match texMathSymbol '\\dot{T}' contained conceal cchar=Ṫ
1035  syn match texMathSymbol '\\dot{t}' contained conceal cchar=ṫ
1036  syn match texMathSymbol '\\dot{W}' contained conceal cchar=Ẇ
1037  syn match texMathSymbol '\\dot{w}' contained conceal cchar=ẇ
1038  syn match texMathSymbol '\\dot{X}' contained conceal cchar=Ẋ
1039  syn match texMathSymbol '\\dot{x}' contained conceal cchar=ẋ
1040  syn match texMathSymbol '\\dot{Y}' contained conceal cchar=Ẏ
1041  syn match texMathSymbol '\\dot{y}' contained conceal cchar=ẏ
1042  syn match texMathSymbol '\\dot{Z}' contained conceal cchar=Ż
1043  syn match texMathSymbol '\\dot{z}' contained conceal cchar=ż
1044
1045  syn match texMathSymbol '\\dot{C}' contained conceal cchar=Ċ
1046  syn match texMathSymbol '\\dot{c}' contained conceal cchar=ċ
1047  syn match texMathSymbol '\\dot{E}' contained conceal cchar=Ė
1048  syn match texMathSymbol '\\dot{e}' contained conceal cchar=ė
1049  syn match texMathSymbol '\\dot{G}' contained conceal cchar=Ġ
1050  syn match texMathSymbol '\\dot{g}' contained conceal cchar=ġ
1051  syn match texMathSymbol '\\dot{I}' contained conceal cchar=İ
1052
1053  syn match texMathSymbol '\\dot{A}' contained conceal cchar=Ȧ
1054  syn match texMathSymbol '\\dot{a}' contained conceal cchar=ȧ
1055  syn match texMathSymbol '\\dot{O}' contained conceal cchar=Ȯ
1056  syn match texMathSymbol '\\dot{o}' contained conceal cchar=ȯ
1057 endif
1058
1059 " Greek {{{2
1060 if s:tex_conceal =~# 'g'
1061  fun! s:Greek(group,pat,cchar)
1062    exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
1063  endfun
1064  call s:Greek('texGreek','\\alpha\>'		,'α')
1065  call s:Greek('texGreek','\\beta\>'		,'β')
1066  call s:Greek('texGreek','\\gamma\>'		,'γ')
1067  call s:Greek('texGreek','\\delta\>'		,'δ')
1068  call s:Greek('texGreek','\\epsilon\>'		,'ϵ')
1069  call s:Greek('texGreek','\\varepsilon\>'	,'ε')
1070  call s:Greek('texGreek','\\zeta\>'		,'ζ')
1071  call s:Greek('texGreek','\\eta\>'		,'η')
1072  call s:Greek('texGreek','\\theta\>'		,'θ')
1073  call s:Greek('texGreek','\\vartheta\>'	,'ϑ')
1074  call s:Greek('texGreek','\\kappa\>'		,'κ')
1075  call s:Greek('texGreek','\\lambda\>'		,'λ')
1076  call s:Greek('texGreek','\\mu\>'		,'μ')
1077  call s:Greek('texGreek','\\nu\>'		,'ν')
1078  call s:Greek('texGreek','\\xi\>'		,'ξ')
1079  call s:Greek('texGreek','\\pi\>'		,'π')
1080  call s:Greek('texGreek','\\varpi\>'		,'ϖ')
1081  call s:Greek('texGreek','\\rho\>'		,'ρ')
1082  call s:Greek('texGreek','\\varrho\>'		,'ϱ')
1083  call s:Greek('texGreek','\\sigma\>'		,'σ')
1084  call s:Greek('texGreek','\\varsigma\>'	,'ς')
1085  call s:Greek('texGreek','\\tau\>'		,'τ')
1086  call s:Greek('texGreek','\\upsilon\>'		,'υ')
1087  call s:Greek('texGreek','\\phi\>'		,'ϕ')
1088  call s:Greek('texGreek','\\varphi\>'		,'φ')
1089  call s:Greek('texGreek','\\chi\>'		,'χ')
1090  call s:Greek('texGreek','\\psi\>'		,'ψ')
1091  call s:Greek('texGreek','\\omega\>'		,'ω')
1092  call s:Greek('texGreek','\\Gamma\>'		,'Γ')
1093  call s:Greek('texGreek','\\Delta\>'		,'Δ')
1094  call s:Greek('texGreek','\\Theta\>'		,'Θ')
1095  call s:Greek('texGreek','\\Lambda\>'		,'Λ')
1096  call s:Greek('texGreek','\\Xi\>'		,'Χ')
1097  call s:Greek('texGreek','\\Pi\>'		,'Π')
1098  call s:Greek('texGreek','\\Sigma\>'		,'Σ')
1099  call s:Greek('texGreek','\\Upsilon\>'		,'Υ')
1100  call s:Greek('texGreek','\\Phi\>'		,'Φ')
1101  call s:Greek('texGreek','\\Psi\>'		,'Ψ')
1102  call s:Greek('texGreek','\\Omega\>'		,'Ω')
1103  delfun s:Greek
1104 endif
1105
1106 " Superscripts/Subscripts {{{2
1107 if s:tex_conceal =~# 's'
1108  if s:tex_fast =~# 's'
1109   syn region texSuperscript	matchgroup=Delimiter start='\^{'	skip="\\\\\|\\[{}]" end='}'	contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1110   syn region texSubscript	matchgroup=Delimiter start='_{'		skip="\\\\\|\\[{}]" end='}'	contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1111  endif
1112  " s:SuperSub:
1113  fun! s:SuperSub(group,leader,pat,cchar)
1114    if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
1115"     call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1116     exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
1117     exe 'syn match '.a:group."s '".a:pat        ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
1118    endif
1119  endfun
1120  call s:SuperSub('texSuperscript','\^','0','⁰')
1121  call s:SuperSub('texSuperscript','\^','1','¹')
1122  call s:SuperSub('texSuperscript','\^','2','²')
1123  call s:SuperSub('texSuperscript','\^','3','³')
1124  call s:SuperSub('texSuperscript','\^','4','⁴')
1125  call s:SuperSub('texSuperscript','\^','5','⁵')
1126  call s:SuperSub('texSuperscript','\^','6','⁶')
1127  call s:SuperSub('texSuperscript','\^','7','⁷')
1128  call s:SuperSub('texSuperscript','\^','8','⁸')
1129  call s:SuperSub('texSuperscript','\^','9','⁹')
1130  call s:SuperSub('texSuperscript','\^','a','ᵃ')
1131  call s:SuperSub('texSuperscript','\^','b','ᵇ')
1132  call s:SuperSub('texSuperscript','\^','c','ᶜ')
1133  call s:SuperSub('texSuperscript','\^','d','ᵈ')
1134  call s:SuperSub('texSuperscript','\^','e','ᵉ')
1135  call s:SuperSub('texSuperscript','\^','f','ᶠ')
1136  call s:SuperSub('texSuperscript','\^','g','ᵍ')
1137  call s:SuperSub('texSuperscript','\^','h','ʰ')
1138  call s:SuperSub('texSuperscript','\^','i','ⁱ')
1139  call s:SuperSub('texSuperscript','\^','j','ʲ')
1140  call s:SuperSub('texSuperscript','\^','k','ᵏ')
1141  call s:SuperSub('texSuperscript','\^','l','ˡ')
1142  call s:SuperSub('texSuperscript','\^','m','ᵐ')
1143  call s:SuperSub('texSuperscript','\^','n','ⁿ')
1144  call s:SuperSub('texSuperscript','\^','o','ᵒ')
1145  call s:SuperSub('texSuperscript','\^','p','ᵖ')
1146  call s:SuperSub('texSuperscript','\^','r','ʳ')
1147  call s:SuperSub('texSuperscript','\^','s','ˢ')
1148  call s:SuperSub('texSuperscript','\^','t','ᵗ')
1149  call s:SuperSub('texSuperscript','\^','u','ᵘ')
1150  call s:SuperSub('texSuperscript','\^','v','ᵛ')
1151  call s:SuperSub('texSuperscript','\^','w','ʷ')
1152  call s:SuperSub('texSuperscript','\^','x','ˣ')
1153  call s:SuperSub('texSuperscript','\^','y','ʸ')
1154  call s:SuperSub('texSuperscript','\^','z','ᶻ')
1155  call s:SuperSub('texSuperscript','\^','A','ᴬ')
1156  call s:SuperSub('texSuperscript','\^','B','ᴮ')
1157  call s:SuperSub('texSuperscript','\^','D','ᴰ')
1158  call s:SuperSub('texSuperscript','\^','E','ᴱ')
1159  call s:SuperSub('texSuperscript','\^','G','ᴳ')
1160  call s:SuperSub('texSuperscript','\^','H','ᴴ')
1161  call s:SuperSub('texSuperscript','\^','I','ᴵ')
1162  call s:SuperSub('texSuperscript','\^','J','ᴶ')
1163  call s:SuperSub('texSuperscript','\^','K','ᴷ')
1164  call s:SuperSub('texSuperscript','\^','L','ᴸ')
1165  call s:SuperSub('texSuperscript','\^','M','ᴹ')
1166  call s:SuperSub('texSuperscript','\^','N','ᴺ')
1167  call s:SuperSub('texSuperscript','\^','O','ᴼ')
1168  call s:SuperSub('texSuperscript','\^','P','ᴾ')
1169  call s:SuperSub('texSuperscript','\^','R','ᴿ')
1170  call s:SuperSub('texSuperscript','\^','T','ᵀ')
1171  call s:SuperSub('texSuperscript','\^','U','ᵁ')
1172  call s:SuperSub('texSuperscript','\^','W','ᵂ')
1173  call s:SuperSub('texSuperscript','\^',',','︐')
1174  call s:SuperSub('texSuperscript','\^',':','︓')
1175  call s:SuperSub('texSuperscript','\^',';','︔')
1176  call s:SuperSub('texSuperscript','\^','+','⁺')
1177  call s:SuperSub('texSuperscript','\^','-','⁻')
1178  call s:SuperSub('texSuperscript','\^','<','˂')
1179  call s:SuperSub('texSuperscript','\^','>','˃')
1180  call s:SuperSub('texSuperscript','\^','/','ˊ')
1181  call s:SuperSub('texSuperscript','\^','(','⁽')
1182  call s:SuperSub('texSuperscript','\^',')','⁾')
1183  call s:SuperSub('texSuperscript','\^','\.','˙')
1184  call s:SuperSub('texSuperscript','\^','=','˭')
1185  call s:SuperSub('texSubscript','_','0','₀')
1186  call s:SuperSub('texSubscript','_','1','₁')
1187  call s:SuperSub('texSubscript','_','2','₂')
1188  call s:SuperSub('texSubscript','_','3','₃')
1189  call s:SuperSub('texSubscript','_','4','₄')
1190  call s:SuperSub('texSubscript','_','5','₅')
1191  call s:SuperSub('texSubscript','_','6','₆')
1192  call s:SuperSub('texSubscript','_','7','₇')
1193  call s:SuperSub('texSubscript','_','8','₈')
1194  call s:SuperSub('texSubscript','_','9','₉')
1195  call s:SuperSub('texSubscript','_','a','ₐ')
1196  call s:SuperSub('texSubscript','_','e','ₑ')
1197  call s:SuperSub('texSubscript','_','h','ₕ')
1198  call s:SuperSub('texSubscript','_','i','ᵢ')
1199  call s:SuperSub('texSubscript','_','j','ⱼ')
1200  call s:SuperSub('texSubscript','_','k','ₖ')
1201  call s:SuperSub('texSubscript','_','l','ₗ')
1202  call s:SuperSub('texSubscript','_','m','ₘ')
1203  call s:SuperSub('texSubscript','_','n','ₙ')
1204  call s:SuperSub('texSubscript','_','o','ₒ')
1205  call s:SuperSub('texSubscript','_','p','ₚ')
1206  call s:SuperSub('texSubscript','_','r','ᵣ')
1207  call s:SuperSub('texSubscript','_','s','ₛ')
1208  call s:SuperSub('texSubscript','_','t','ₜ')
1209  call s:SuperSub('texSubscript','_','u','ᵤ')
1210  call s:SuperSub('texSubscript','_','v','ᵥ')
1211  call s:SuperSub('texSubscript','_','x','ₓ')
1212  call s:SuperSub('texSubscript','_',',','︐')
1213  call s:SuperSub('texSubscript','_','+','₊')
1214  call s:SuperSub('texSubscript','_','-','₋')
1215  call s:SuperSub('texSubscript','_','/','ˏ')
1216  call s:SuperSub('texSubscript','_','(','₍')
1217  call s:SuperSub('texSubscript','_',')','₎')
1218  call s:SuperSub('texSubscript','_','\.','‸')
1219  call s:SuperSub('texSubscript','_','r','ᵣ')
1220  call s:SuperSub('texSubscript','_','v','ᵥ')
1221  call s:SuperSub('texSubscript','_','x','ₓ')
1222  call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1223  call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1224  call s:SuperSub('texSubscript','_','\\phi\>'  ,'ᵩ')
1225  call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1226  call s:SuperSub('texSubscript','_','\\chi\>'  ,'ᵪ')
1227
1228  delfun s:SuperSub
1229 endif
1230
1231 " Accented characters and Ligatures: {{{2
1232 if s:tex_conceal =~# 'a'
1233  if b:tex_stylish
1234   syn match texAccent		"\\[bcdvuH][^a-zA-Z@]"me=e-1
1235   syn match texLigature	"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1236   syn match texLigature	'--'
1237   syn match texLigature	'---'
1238  else
1239   fun! s:Accents(chr,...)
1240     let i= 1
1241     for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
1242      if i > a:0
1243       break
1244      endif
1245      if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
1246       let i= i + 1
1247       continue
1248      endif
1249      if accent =~# '\a'
1250       exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1251      else
1252       exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1253      endif
1254      let i= i + 1
1255     endfor
1256   endfun
1257   "                  \`  \'  \^  \"  \~  \.  \=  \c  \H  \k  \r  \u  \v
1258   call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1259   call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1260   call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1261   call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1262   call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1263   call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1264   call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1265   call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1266   call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1267   call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1268   call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1269   call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1270   call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1271   call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1272   call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1273   call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1274   call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1275   call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1276   call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1277   call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1278   call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1279   call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1280   call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1281   call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1282   call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1283   call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1284   call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1285   call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1286   call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1287   call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1288   call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1289   call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1290   call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1291   call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1292   call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1293   call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1294   call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
1295   call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1296   "                    \`  \'  \^  \"  \~  \.  \=  \c  \H  \k  \r  \u  \v
1297   delfun s:Accents
1298   syn match texAccent		'\\aa\>'	conceal cchar=å
1299   syn match texAccent		'\\AA\>'	conceal cchar=Å
1300   syn match texAccent		'\\o\>'		conceal cchar=ø
1301   syn match texAccent		'\\O\>'		conceal cchar=Ø
1302   syn match texLigature	'\\AE\>'	conceal cchar=Æ
1303   syn match texLigature	'\\ae\>'	conceal cchar=æ
1304   syn match texLigature	'\\oe\>'	conceal cchar=œ
1305   syn match texLigature	'\\OE\>'	conceal cchar=Œ
1306   syn match texLigature	'\\ss\>'	conceal cchar=ß
1307   syn match texLigature	'--'		conceal cchar=–
1308   syn match texLigature	'---'		conceal cchar=—
1309  endif
1310 endif
1311endif
1312
1313" ---------------------------------------------------------------------
1314" LaTeX synchronization: {{{1
1315syn sync maxlines=200
1316syn sync minlines=50
1317
1318syn  sync match texSyncStop			groupthere NONE		"%stopzone\>"
1319
1320" Synchronization: {{{1
1321" The $..$ and $$..$$ make for impossible sync patterns
1322" (one can't tell if a "$$" starts or stops a math zone by itself)
1323" The following grouptheres coupled with minlines above
1324" help improve the odds of good syncing.
1325if !exists("g:tex_no_math")
1326 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{abstract}"
1327 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{center}"
1328 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{description}"
1329 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{enumerate}"
1330 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{itemize}"
1331 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{table}"
1332 syn sync match texSyncMathZoneA		groupthere NONE		"\\end{tabular}"
1333 syn sync match texSyncMathZoneA		groupthere NONE		"\\\(sub\)*section\>"
1334endif
1335
1336" ---------------------------------------------------------------------
1337" Highlighting: {{{1
1338
1339" Define the default highlighting. {{{1
1340if !exists("skip_tex_syntax_inits")
1341
1342  " TeX highlighting groups which should share similar highlighting
1343  if !exists("g:tex_no_error")
1344   if !exists("g:tex_no_math")
1345    hi def link texBadMath		texError
1346    hi def link texMathDelimBad		texError
1347    hi def link texMathError		texError
1348    if !b:tex_stylish
1349      hi def link texOnlyMath		texError
1350    endif
1351   endif
1352   hi def link texError			Error
1353  endif
1354
1355  hi texBoldStyle		gui=bold	cterm=bold
1356  hi texItalStyle		gui=italic	cterm=italic
1357  hi texBoldItalStyle		gui=bold,italic cterm=bold,italic
1358  hi texItalBoldStyle		gui=bold,italic cterm=bold,italic
1359  hi def link texCite		texRefZone
1360  hi def link texDefCmd		texDef
1361  hi def link texDefName	texDef
1362  hi def link texDocType	texCmdName
1363  hi def link texDocTypeArgs	texCmdArgs
1364  hi def link texInputFileOpt	texCmdArgs
1365  hi def link texInputCurlies	texDelimiter
1366  hi def link texLigature	texSpecialChar
1367  if !exists("g:tex_no_math")
1368   hi def link texMathDelimSet1	texMathDelim
1369   hi def link texMathDelimSet2	texMathDelim
1370   hi def link texMathDelimKey	texMathDelim
1371   hi def link texMathMatcher	texMath
1372   hi def link texAccent	texStatement
1373   hi def link texGreek		texStatement
1374   hi def link texSuperscript	texStatement
1375   hi def link texSubscript	texStatement
1376   hi def link texSuperscripts 	texSuperscript
1377   hi def link texSubscripts 	texSubscript
1378   hi def link texMathSymbol	texStatement
1379   hi def link texMathZoneV	texMath
1380   hi def link texMathZoneW	texMath
1381   hi def link texMathZoneX	texMath
1382   hi def link texMathZoneY	texMath
1383   hi def link texMathZoneV	texMath
1384   hi def link texMathZoneZ	texMath
1385  endif
1386  hi def link texBeginEnd	texCmdName
1387  hi def link texBeginEndName	texSection
1388  hi def link texSpaceCode	texStatement
1389  hi def link texStyleStatement	texStatement
1390  hi def link texTypeSize	texType
1391  hi def link texTypeStyle	texType
1392
1393   " Basic TeX highlighting groups
1394  hi def link texCmdArgs	Number
1395  hi def link texCmdName	Statement
1396  hi def link texComment	Comment
1397  hi def link texDef		Statement
1398  hi def link texDefParm	Special
1399  hi def link texDelimiter	Delimiter
1400  hi def link texInput		Special
1401  hi def link texInputFile	Special
1402  hi def link texLength		Number
1403  hi def link texMath		Special
1404  hi def link texMathDelim	Statement
1405  hi def link texMathOper	Operator
1406  hi def link texNewCmd		Statement
1407  hi def link texNewEnv		Statement
1408  hi def link texOption		Number
1409  hi def link texRefZone	Special
1410  hi def link texSection	PreCondit
1411  hi def link texSpaceCodeChar	Special
1412  hi def link texSpecialChar	SpecialChar
1413  hi def link texStatement	Statement
1414  hi def link texString		String
1415  hi def link texTodo		Todo
1416  hi def link texType		Type
1417  hi def link texZone		PreCondit
1418
1419endif
1420
1421" Cleanup: {{{1
1422delc TexFold
1423unlet s:extfname
1424let   b:current_syntax = "tex"
1425let &cpo               = s:keepcpo
1426unlet s:keepcpo
1427" vim: ts=8 fdm=marker
1428