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