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