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