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