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