xref: /vim-8.2.3635/runtime/syntax/tex.vim (revision 2547aa93)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	TeX
31d9215b9SBram Moolenaar" Maintainer:	Charles E. Campbell <[email protected]>
4*2547aa93SBram Moolenaar" Last Change:	Jun 29, 2020
5*2547aa93SBram Moolenaar" Version:	119
6ac7bd638SBram Moolenaar" URL:		http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
7071d4279SBram Moolenaar"
8071d4279SBram Moolenaar" Notes: {{{1
9071d4279SBram Moolenaar"
10071d4279SBram Moolenaar" 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
11071d4279SBram Moolenaar"    use %stopzone.
12071d4279SBram Moolenaar"
13071d4279SBram Moolenaar" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
14071d4279SBram Moolenaar"    by suitable use of %stopzone.
15071d4279SBram Moolenaar"
16071d4279SBram Moolenaar" 3. If you have a slow computer, you may wish to modify
17071d4279SBram Moolenaar"
18071d4279SBram Moolenaar"	syn sync maxlines=200
19071d4279SBram Moolenaar"	syn sync minlines=50
20071d4279SBram Moolenaar"
21071d4279SBram Moolenaar"    to values that are more to your liking.
22071d4279SBram Moolenaar"
23071d4279SBram Moolenaar" 4. There is no match-syncing for $...$ and $$...$$; hence large
24071d4279SBram Moolenaar"    equation blocks constructed that way may exhibit syncing problems.
25071d4279SBram Moolenaar"    (there's no difference between begin/end patterns)
26071d4279SBram Moolenaar"
27071d4279SBram Moolenaar" 5. If you have the variable "g:tex_no_error" defined then none of the
28071d4279SBram Moolenaar"    lexical error-checking will be done.
29071d4279SBram Moolenaar"
30071d4279SBram Moolenaar"    ie. let g:tex_no_error=1
31a6878375SBram Moolenaar"
32a6878375SBram Moolenaar" 6. Please see  :help latex-syntax  for information on
33a6878375SBram Moolenaar"      syntax folding           :help tex-folding
34a6878375SBram Moolenaar"      spell checking           :help tex-nospell
35a6878375SBram Moolenaar"      commands and mathzones   :help tex-runon
36a6878375SBram Moolenaar"      new command highlighting :help tex-morecommands
37a6878375SBram Moolenaar"      error highlighting       :help tex-error
38a6878375SBram Moolenaar"      new math groups          :help tex-math
39a6878375SBram Moolenaar"      new styles               :help tex-style
40a6878375SBram Moolenaar"      using conceal mode       :help tex-conceal
41071d4279SBram Moolenaar
42071d4279SBram Moolenaar" Version Clears: {{{1
4389bcfda6SBram Moolenaar" quit when a syntax file was already loaded
4489bcfda6SBram Moolenaarif exists("b:current_syntax")
45071d4279SBram Moolenaar  finish
46071d4279SBram Moolenaarendif
471514667aSBram Moolenaarlet s:keepcpo= &cpo
481514667aSBram Moolenaarset cpo&vim
494b22cdb0SBram Moolenaarscriptencoding utf-8
50071d4279SBram Moolenaar
51543b7ef7SBram Moolenaar" by default, enable all region-based highlighting
52543b7ef7SBram Moolenaarlet s:tex_fast= "bcmMprsSvV"
53543b7ef7SBram Moolenaarif exists("g:tex_fast")
54543b7ef7SBram Moolenaar if type(g:tex_fast) != 1
55543b7ef7SBram Moolenaar  " g:tex_fast exists and is not a string, so
56543b7ef7SBram Moolenaar  " turn off all optional region-based highighting
57543b7ef7SBram Moolenaar  let s:tex_fast= ""
58543b7ef7SBram Moolenaar else
59543b7ef7SBram Moolenaar  let s:tex_fast= g:tex_fast
60ac7bd638SBram Moolenaar endif
61071d4279SBram Moolenaarendif
62071d4279SBram Moolenaar
634b22cdb0SBram Moolenaar" let user determine which classes of concealment will be supported
647fc0c065SBram Moolenaar"   a=accents/ligatures d=delimiters m=math symbols  g=Greek  s=superscripts/subscripts
654b22cdb0SBram Moolenaarif !exists("g:tex_conceal")
66bc488a76SBram Moolenaar let s:tex_conceal= 'abdmgsS'
674b22cdb0SBram Moolenaarelse
684b22cdb0SBram Moolenaar let s:tex_conceal= g:tex_conceal
694b22cdb0SBram Moolenaarendif
706e932461SBram Moolenaarif !exists("g:tex_superscripts")
71802a0d90SBram Moolenaar let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]'
7203413f44SBram Moolenaarelse
7303413f44SBram Moolenaar let s:tex_superscripts= g:tex_superscripts
746e932461SBram Moolenaarendif
756e932461SBram Moolenaarif !exists("g:tex_subscripts")
76802a0d90SBram Moolenaar let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]'
7703413f44SBram Moolenaarelse
7803413f44SBram Moolenaar let s:tex_subscripts= g:tex_subscripts
796e932461SBram Moolenaarendif
804b22cdb0SBram Moolenaar
81f1f8bc5bSBram Moolenaar" Determine whether or not to use "*.sty" mode {{{1
82071d4279SBram Moolenaar" The user may override the normal determination by setting
83071d4279SBram Moolenaar"   g:tex_stylish to 1      (for    "*.sty" mode)
84071d4279SBram Moolenaar"    or to           0 else (normal "*.tex" mode)
85071d4279SBram Moolenaar" or on a buffer-by-buffer basis with b:tex_stylish
8681af9250SBram Moolenaarlet s:extfname=expand("%:e")
87071d4279SBram Moolenaarif exists("g:tex_stylish")
88071d4279SBram Moolenaar let b:tex_stylish= g:tex_stylish
89071d4279SBram Moolenaarelseif !exists("b:tex_stylish")
9081af9250SBram Moolenaar if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
91071d4279SBram Moolenaar  let b:tex_stylish= 1
92071d4279SBram Moolenaar else
93071d4279SBram Moolenaar  let b:tex_stylish= 0
94071d4279SBram Moolenaar endif
95071d4279SBram Moolenaarendif
96071d4279SBram Moolenaar
97f1f8bc5bSBram Moolenaar" handle folding {{{1
98f1f8bc5bSBram Moolenaarif !exists("g:tex_fold_enabled")
99b4ff518dSBram Moolenaar let s:tex_fold_enabled= 0
100f1f8bc5bSBram Moolenaarelseif g:tex_fold_enabled && !has("folding")
101b4ff518dSBram Moolenaar let s:tex_fold_enabled= 0
102f1f8bc5bSBram Moolenaar echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
103b4ff518dSBram Moolenaarelse
104b4ff518dSBram Moolenaar let s:tex_fold_enabled= 1
105f1f8bc5bSBram Moolenaarendif
106b4ff518dSBram Moolenaarif s:tex_fold_enabled && &fdm == "manual"
10700a927d6SBram Moolenaar setl fdm=syntax
108f1f8bc5bSBram Moolenaarendif
109b4ff518dSBram Moolenaarif s:tex_fold_enabled && has("folding")
110a0f849eeSBram Moolenaar com! -nargs=* TexFold <args> fold
111a0f849eeSBram Moolenaarelse
112a0f849eeSBram Moolenaar com! -nargs=* TexFold <args>
113a0f849eeSBram Moolenaarendif
114f1f8bc5bSBram Moolenaar
115adc2182cSBram Moolenaar" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
116071d4279SBram Moolenaar" but _ is the only one that causes problems.
117adc2182cSBram Moolenaar" One may override this iskeyword setting by providing
118adc2182cSBram Moolenaar" g:tex_isk
119adc2182cSBram Moolenaarif exists("g:tex_isk")
120bc8801c9SBram Moolenaar if b:tex_stylish && g:tex_isk !~ '@'
121bc8801c9SBram Moolenaar  let b:tex_isk= '@,'.g:tex_isk
122071d4279SBram Moolenaar else
123bc8801c9SBram Moolenaar  let b:tex_isk= g:tex_isk
124071d4279SBram Moolenaar endif
125bc8801c9SBram Moolenaarelseif b:tex_stylish
126bc8801c9SBram Moolenaar let b:tex_isk="@,48-57,a-z,A-Z,192-255"
127bc8801c9SBram Moolenaarelse
128bc8801c9SBram Moolenaar let b:tex_isk="48-57,a-z,A-Z,192-255"
129bc8801c9SBram Moolenaarendif
130723dd946SBram Moolenaarif (v:version == 704 && has("patch-7.4.1142")) || v:version > 704
131bc8801c9SBram Moolenaar exe "syn iskeyword ".b:tex_isk
132bc8801c9SBram Moolenaarelse
133bc8801c9SBram Moolenaar exe "setl isk=".b:tex_isk
134071d4279SBram Moolenaarendif
135b4ff518dSBram Moolenaarif exists("g:tex_no_error") && g:tex_no_error
136b4ff518dSBram Moolenaar let s:tex_no_error= 1
137b4ff518dSBram Moolenaarelse
138b4ff518dSBram Moolenaar let s:tex_no_error= 0
139b4ff518dSBram Moolenaarendif
140b4ff518dSBram Moolenaarif exists("g:tex_comment_nospell") && g:tex_comment_nospell
141b4ff518dSBram Moolenaar let s:tex_comment_nospell= 1
142b4ff518dSBram Moolenaarelse
143b4ff518dSBram Moolenaar let s:tex_comment_nospell= 0
144b4ff518dSBram Moolenaarendif
145b4ff518dSBram Moolenaarif exists("g:tex_nospell") && g:tex_nospell
146b4ff518dSBram Moolenaar let s:tex_nospell = 1
147b4ff518dSBram Moolenaarelse
148b4ff518dSBram Moolenaar let s:tex_nospell = 0
149d960d76dSBram Moolenaarendif
150*2547aa93SBram Moolenaarif exists("g:tex_matchcheck")
151*2547aa93SBram Moolenaar let s:tex_matchcheck= g:tex_matchcheck
152*2547aa93SBram Moolenaarelse
153*2547aa93SBram Moolenaar let s:tex_matchcheck= '[({[]'
154*2547aa93SBram Moolenaarendif
1551d9215b9SBram Moolenaarif exists("g:tex_excludematcher")
1561d9215b9SBram Moolenaar let s:tex_excludematcher= g:tex_excludematcher
1571d9215b9SBram Moolenaarelse
1581d9215b9SBram Moolenaar let s:tex_excludematcher= 0
1591d9215b9SBram Moolenaarendif
160071d4279SBram Moolenaar
161071d4279SBram Moolenaar" Clusters: {{{1
162071d4279SBram Moolenaar" --------
163bc8801c9SBram Moolenaarsyn 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
164a0f849eeSBram Moolenaarif !s:tex_no_error
165071d4279SBram Moolenaar syn cluster texCmdGroup		add=texMathError
166071d4279SBram Moolenaarendif
167071d4279SBram Moolenaarsyn cluster texEnvGroup			contains=texMatcher,texMathDelim,texSpecialChar,texStatement
168723dd946SBram Moolenaarsyn 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
1691d9215b9SBram Moolenaarsyn cluster texBoldGroup		contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell
1701d9215b9SBram Moolenaarsyn cluster texItalGroup		contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texEmphStyle,texItalBoldStyle,texNoSpell
1711d9215b9SBram Moolenaarif !s:tex_excludematcher
1721d9215b9SBram Moolenaar syn cluster texBoldGroup add=texMatcher
1731d9215b9SBram Moolenaar syn cluster texItalGroup add=texMatcher
1741d9215b9SBram Moolenaarendif
175b4ff518dSBram Moolenaarif !s:tex_nospell
176b730f0c7SBram Moolenaar 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
177b730f0c7SBram Moolenaar 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
178b730f0c7SBram Moolenaar 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
179d960d76dSBram Moolenaarelse
180d960d76dSBram Moolenaar 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
1816d5ad4c4SBram Moolenaar 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
182d960d76dSBram Moolenaar 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
183d960d76dSBram Moolenaarendif
1846d5ad4c4SBram Moolenaarsyn 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
185cfbc5ee4SBram Moolenaarsyn cluster texRefGroup			contains=texMatcher,texComment,texDelimiter
186e2719096SBram Moolenaarif !exists("g:tex_no_math")
1876d5ad4c4SBram Moolenaar 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
188071d4279SBram Moolenaar syn cluster texMathZones		contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
189071d4279SBram Moolenaar syn cluster texMatchGroup		add=@texMathZones
190071d4279SBram Moolenaar syn cluster texMathDelimGroup		contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
191071d4279SBram Moolenaar 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
19274cbdf03SBram Moolenaar syn cluster texMathZoneGroup		contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
193a0f849eeSBram Moolenaar if !s:tex_no_error
194071d4279SBram Moolenaar  syn cluster texMathMatchGroup		add=texMathError
195071d4279SBram Moolenaar  syn cluster texMathZoneGroup		add=texMathError
196071d4279SBram Moolenaar endif
1975b8d8fdbSBram Moolenaar syn cluster texMathZoneGroup		add=@NoSpell
1985b8d8fdbSBram Moolenaar " following used in the \part \chapter \section \subsection \subsubsection
1995b8d8fdbSBram Moolenaar " \paragraph \subparagraph \author \title highlighting
2005b8d8fdbSBram Moolenaar syn cluster texDocGroup		contains=texPartZone,@texPartGroup
2015b8d8fdbSBram Moolenaar syn cluster texPartGroup		contains=texChapterZone,texSectionZone,texParaZone
2025b8d8fdbSBram Moolenaar syn cluster texChapterGroup		contains=texSectionZone,texParaZone
2035b8d8fdbSBram Moolenaar syn cluster texSectionGroup		contains=texSubSectionZone,texParaZone
2045b8d8fdbSBram Moolenaar syn cluster texSubSectionGroup		contains=texSubSubSectionZone,texParaZone
2055b8d8fdbSBram Moolenaar syn cluster texSubSubSectionGroup	contains=texParaZone
2065b8d8fdbSBram Moolenaar syn cluster texParaGroup		contains=texSubParaZone
207b2c0350cSBram Moolenaar if has("conceal") && &enc == 'utf-8'
208e0021c79SBram Moolenaar  syn cluster texMathZoneGroup		add=texGreek,texSuperscript,texSubscript,texMathSymbol
209e0021c79SBram Moolenaar  syn cluster texMathMatchGroup		add=texGreek,texSuperscript,texSubscript,texMathSymbol
210b2c0350cSBram Moolenaar endif
211071d4279SBram Moolenaarendif
212071d4279SBram Moolenaar
213*2547aa93SBram Moolenaar" Try to flag {}, [], and () mismatches: {{{1
214f391327aSBram Moolenaarif s:tex_fast =~# 'm'
215a0f849eeSBram Moolenaar  if !s:tex_no_error
216*2547aa93SBram Moolenaar   if s:tex_matchcheck =~ '{'
217b4ff518dSBram Moolenaar    syn region texMatcher	matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"			transparent contains=@texMatchGroup,texError
2186d5ad4c4SBram Moolenaar    syn region texMatcherNM	matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"			transparent contains=@texMatchNMGroup,texError
219*2547aa93SBram Moolenaar   endif
220*2547aa93SBram Moolenaar   if s:tex_matchcheck =~ '\['
221*2547aa93SBram Moolenaar    syn region texMatcher	matchgroup=Delimiter start="\["				end="]"			transparent contains=@texMatchGroup,texError,@NoSpell
2226d5ad4c4SBram Moolenaar    syn region texMatcherNM	matchgroup=Delimiter start="\["				end="]"			transparent contains=@texMatchNMGroup,texError,@NoSpell
223*2547aa93SBram Moolenaar   endif
224071d4279SBram Moolenaar  else
225*2547aa93SBram Moolenaar   if s:tex_matchcheck =~ '{'
226b4ff518dSBram Moolenaar    syn region texMatcher	matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"			transparent contains=@texMatchGroup
2276d5ad4c4SBram Moolenaar    syn region texMatcherNM	matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"			transparent contains=@texMatchNMGroup
228*2547aa93SBram Moolenaar   endif
229*2547aa93SBram Moolenaar   if s:tex_matchcheck =~ '\['
230*2547aa93SBram Moolenaar    syn region texMatcher	matchgroup=Delimiter start="\["				end="]"			transparent contains=@texMatchGroup
2316d5ad4c4SBram Moolenaar    syn region texMatcherNM	matchgroup=Delimiter start="\["				end="]"			transparent contains=@texMatchNMGroup
232071d4279SBram Moolenaar   endif
233*2547aa93SBram Moolenaar  endif
234*2547aa93SBram Moolenaar  if s:tex_matchcheck =~ '('
235b4ff518dSBram Moolenaar   if !s:tex_nospell
236b4ff518dSBram Moolenaar    syn region texParen		start="("	end=")"								transparent contains=@texMatchGroup,@Spell
237d960d76dSBram Moolenaar   else
238b4ff518dSBram Moolenaar    syn region texParen		start="("	end=")"								transparent contains=@texMatchGroup
239d960d76dSBram Moolenaar   endif
240ac7bd638SBram Moolenaar  endif
241*2547aa93SBram Moolenaarendif
242a0f849eeSBram Moolenaarif !s:tex_no_error
243*2547aa93SBram Moolenaar if s:tex_matchcheck =~ '('
244*2547aa93SBram Moolenaar  syn match  texError		"[}\]]"
245*2547aa93SBram Moolenaar else
246071d4279SBram Moolenaar  syn match  texError		"[}\])]"
247071d4279SBram Moolenaar endif
248*2547aa93SBram Moolenaarendif
249f391327aSBram Moolenaarif s:tex_fast =~# 'M'
250e2719096SBram Moolenaar  if !exists("g:tex_no_math")
251a0f849eeSBram Moolenaar   if !s:tex_no_error
252071d4279SBram Moolenaar    syn match  texMathError	"}"	contained
253071d4279SBram Moolenaar   endif
254b4ff518dSBram Moolenaar   syn region texMathMatcher	matchgroup=Delimiter	start="{"          skip="\%(\\\\\)*\\}"     end="}" end="%stopzone\>"	contained contains=@texMathMatchGroup
255071d4279SBram Moolenaar  endif
256ac7bd638SBram Moolenaarendif
257071d4279SBram Moolenaar
258071d4279SBram Moolenaar" TeX/LaTeX keywords: {{{1
259071d4279SBram Moolenaar" Instead of trying to be All Knowing, I just match \..alphameric..
260071d4279SBram Moolenaar" Note that *.tex files may not have "@" in their \commands
261071d4279SBram Moolenaarif exists("g:tex_tex") || b:tex_stylish
262071d4279SBram Moolenaar  syn match texStatement	"\\[a-zA-Z@]\+"
263071d4279SBram Moolenaarelse
264071d4279SBram Moolenaar  syn match texStatement	"\\\a\+"
265a0f849eeSBram Moolenaar  if !s:tex_no_error
266071d4279SBram Moolenaar   syn match texError		"\\\a*@[a-zA-Z@]*"
267071d4279SBram Moolenaar  endif
268071d4279SBram Moolenaarendif
269071d4279SBram Moolenaar
270071d4279SBram Moolenaar" TeX/LaTeX delimiters: {{{1
271071d4279SBram Moolenaarsyn match texDelimiter		"&"
272071d4279SBram Moolenaarsyn match texDelimiter		"\\\\"
273071d4279SBram Moolenaar
274071d4279SBram Moolenaar" Tex/Latex Options: {{{1
275071d4279SBram Moolenaarsyn match texOption		"[^\\]\zs#\d\+\|^#\d\+"
276071d4279SBram Moolenaar
277071d4279SBram Moolenaar" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
278071d4279SBram Moolenaarif b:tex_stylish
279071d4279SBram Moolenaar  syn match texAccent		"\\[bcdvuH][^a-zA-Z@]"me=e-1
280071d4279SBram Moolenaar  syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
281071d4279SBram Moolenaarelse
282071d4279SBram Moolenaar  syn match texAccent		"\\[bcdvuH]\A"me=e-1
283071d4279SBram Moolenaar  syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
284071d4279SBram Moolenaarendif
285071d4279SBram Moolenaarsyn match texAccent		"\\[bcdvuH]$"
286071d4279SBram Moolenaarsyn match texAccent		+\\[=^.\~"`']+
287071d4279SBram Moolenaarsyn match texAccent		+\\['=t'.c^ud"vb~Hr]{\a}+
288071d4279SBram Moolenaarsyn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
289071d4279SBram Moolenaar
290b0d45e7fSBram Moolenaar
291071d4279SBram Moolenaar" \begin{}/\end{} section markers: {{{1
292d38b055aSBram Moolenaarsyn match  texBeginEnd		"\\begin\>\|\\end\>" nextgroup=texBeginEndName
293f391327aSBram Moolenaarif s:tex_fast =~# 'm'
294d38b055aSBram Moolenaar  syn region texBeginEndName		matchgroup=Delimiter	start="{"		end="}"	contained	nextgroup=texBeginEndModifier	contains=texComment
295802a0d90SBram Moolenaar  syn region texBeginEndModifier	matchgroup=Delimiter	start="\["		end="]"	contained	contains=texComment,@texMathZones,@NoSpell
296ac7bd638SBram Moolenaarendif
297071d4279SBram Moolenaar
298071d4279SBram Moolenaar" \documentclass, \documentstyle, \usepackage: {{{1
299d38b055aSBram Moolenaarsyn match  texDocType		"\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"	nextgroup=texBeginEndName,texDocTypeArgs
300f391327aSBram Moolenaarif s:tex_fast =~# 'm'
301d38b055aSBram Moolenaar  syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texBeginEndName	contains=texComment,@NoSpell
302ac7bd638SBram Moolenaarendif
303071d4279SBram Moolenaar
304a9a568caSBram Moolenaar" Preamble syntax-based folding support: {{{1
305b4ff518dSBram Moolenaarif s:tex_fold_enabled && has("folding")
306d38b055aSBram Moolenaar syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=texStyle,@texPreambleMatchGroup
307a9a568caSBram Moolenaarendif
308a9a568caSBram Moolenaar
309071d4279SBram Moolenaar" TeX input: {{{1
310071d4279SBram Moolenaarsyn match texInput		"\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7				contains=texStatement
3115c73622aSBram Moolenaarsyn match texInputFile		"\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}"	contains=texStatement,texInputCurlies,texInputFileOpt
312071d4279SBram Moolenaarsyn match texInputFile		"\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}"		contains=texStatement,texInputCurlies,texInputFileOpt
313071d4279SBram Moolenaarsyn match texInputCurlies	"[{}]"								contained
314f391327aSBram Moolenaarif s:tex_fast =~# 'm'
3155c73622aSBram Moolenaar syn region texInputFileOpt	matchgroup=Delimiter start="\[" end="\]"			contained	contains=texComment
316ac7bd638SBram Moolenaarendif
317071d4279SBram Moolenaar
318071d4279SBram Moolenaar" Type Styles (LaTeX 2.09): {{{1
319071d4279SBram Moolenaarsyn match texTypeStyle		"\\rm\>"
320071d4279SBram Moolenaarsyn match texTypeStyle		"\\em\>"
321071d4279SBram Moolenaarsyn match texTypeStyle		"\\bf\>"
322071d4279SBram Moolenaarsyn match texTypeStyle		"\\it\>"
323071d4279SBram Moolenaarsyn match texTypeStyle		"\\sl\>"
324071d4279SBram Moolenaarsyn match texTypeStyle		"\\sf\>"
325071d4279SBram Moolenaarsyn match texTypeStyle		"\\sc\>"
326071d4279SBram Moolenaarsyn match texTypeStyle		"\\tt\>"
327071d4279SBram Moolenaar
328071d4279SBram Moolenaar" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
3297db8f6f4SBram Moolenaarif s:tex_conceal !~# 'b'
330071d4279SBram Moolenaar syn match texTypeStyle		"\\textbf\>"
331071d4279SBram Moolenaar syn match texTypeStyle		"\\textit\>"
332723dd946SBram Moolenaar syn match texTypeStyle		"\\emph\>"
333d38b055aSBram Moolenaarendif
334071d4279SBram Moolenaarsyn match texTypeStyle		"\\textmd\>"
335071d4279SBram Moolenaarsyn match texTypeStyle		"\\textrm\>"
336071d4279SBram Moolenaar
337071d4279SBram Moolenaarsyn match texTypeStyle		"\\mathbb\>"
338071d4279SBram Moolenaarsyn match texTypeStyle		"\\mathbf\>"
339071d4279SBram Moolenaarsyn match texTypeStyle		"\\mathcal\>"
340071d4279SBram Moolenaarsyn match texTypeStyle		"\\mathfrak\>"
341071d4279SBram Moolenaarsyn match texTypeStyle		"\\mathit\>"
342071d4279SBram Moolenaarsyn match texTypeStyle		"\\mathnormal\>"
343071d4279SBram Moolenaarsyn match texTypeStyle		"\\mathrm\>"
344071d4279SBram Moolenaarsyn match texTypeStyle		"\\mathsf\>"
345071d4279SBram Moolenaarsyn match texTypeStyle		"\\mathtt\>"
346071d4279SBram Moolenaar
347071d4279SBram Moolenaarsyn match texTypeStyle		"\\rmfamily\>"
348071d4279SBram Moolenaarsyn match texTypeStyle		"\\sffamily\>"
349071d4279SBram Moolenaarsyn match texTypeStyle		"\\ttfamily\>"
350071d4279SBram Moolenaar
351071d4279SBram Moolenaarsyn match texTypeStyle		"\\itshape\>"
352071d4279SBram Moolenaarsyn match texTypeStyle		"\\scshape\>"
353071d4279SBram Moolenaarsyn match texTypeStyle		"\\slshape\>"
354071d4279SBram Moolenaarsyn match texTypeStyle		"\\upshape\>"
355071d4279SBram Moolenaar
356071d4279SBram Moolenaarsyn match texTypeStyle		"\\bfseries\>"
357071d4279SBram Moolenaarsyn match texTypeStyle		"\\mdseries\>"
358071d4279SBram Moolenaar
359071d4279SBram Moolenaar" Some type sizes: {{{1
360071d4279SBram Moolenaarsyn match texTypeSize		"\\tiny\>"
361071d4279SBram Moolenaarsyn match texTypeSize		"\\scriptsize\>"
362071d4279SBram Moolenaarsyn match texTypeSize		"\\footnotesize\>"
363071d4279SBram Moolenaarsyn match texTypeSize		"\\small\>"
364071d4279SBram Moolenaarsyn match texTypeSize		"\\normalsize\>"
365071d4279SBram Moolenaarsyn match texTypeSize		"\\large\>"
366071d4279SBram Moolenaarsyn match texTypeSize		"\\Large\>"
367071d4279SBram Moolenaarsyn match texTypeSize		"\\LARGE\>"
368071d4279SBram Moolenaarsyn match texTypeSize		"\\huge\>"
369071d4279SBram Moolenaarsyn match texTypeSize		"\\Huge\>"
370071d4279SBram Moolenaar
371071d4279SBram Moolenaar" Spacecodes (TeX'isms): {{{1
372071d4279SBram Moolenaar" \mathcode`\^^@="2201  \delcode`\(="028300  \sfcode`\)=0 \uccode`X=`X  \lccode`x=`x
373071d4279SBram Moolenaarsyn match texSpaceCode		"\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
374071d4279SBram Moolenaarsyn match texSpaceCodeChar    "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)"	contained
375071d4279SBram Moolenaar
376071d4279SBram Moolenaar" Sections, subsections, etc: {{{1
377f391327aSBram Moolenaarif s:tex_fast =~# 'p'
378b4ff518dSBram Moolenaar if !s:tex_nospell
379a0f849eeSBram Moolenaar  TexFold syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup,@Spell
380a0f849eeSBram Moolenaar  TexFold syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup,@Spell
381a0f849eeSBram Moolenaar  TexFold syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup,@Spell
382a0f849eeSBram Moolenaar  TexFold syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup,@Spell
383a0f849eeSBram Moolenaar  TexFold syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup,@Spell
384a0f849eeSBram Moolenaar  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
385a0f849eeSBram Moolenaar  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
386a0f849eeSBram Moolenaar  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
387a0f849eeSBram Moolenaar  TexFold syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup,@Spell
388a0f849eeSBram Moolenaar  TexFold syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup,@Spell
389293ee4d4SBram Moolenaar else
390a0f849eeSBram Moolenaar  TexFold syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup
391a0f849eeSBram Moolenaar  TexFold syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup
392a0f849eeSBram Moolenaar  TexFold syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup
393a0f849eeSBram Moolenaar  TexFold syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup
394a0f849eeSBram Moolenaar  TexFold syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup
395a0f849eeSBram Moolenaar  TexFold syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSubSectionGroup
396a0f849eeSBram Moolenaar  TexFold syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			contains=@texFoldGroup,@texParaGroup
397a0f849eeSBram Moolenaar  TexFold syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	contains=@texFoldGroup
398a0f849eeSBram Moolenaar  TexFold syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup
399a0f849eeSBram Moolenaar  TexFold syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup
400d960d76dSBram Moolenaar  endif
401ac7bd638SBram Moolenaarendif
402071d4279SBram Moolenaar
403d38b055aSBram Moolenaar" particular support for bold and italic {{{1
404f391327aSBram Moolenaarif s:tex_fast =~# 'b'
405f391327aSBram Moolenaar  if s:tex_conceal =~# 'b'
40683d1b190SBram Moolenaar   if !exists("g:tex_nospell") || !g:tex_nospell
407541f92d6SBram Moolenaar    syn region texBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texBoldGroup,@Spell
408541f92d6SBram Moolenaar    syn region texBoldItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texItalGroup,@Spell
409541f92d6SBram Moolenaar    syn region texItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texItalGroup,@Spell
410541f92d6SBram Moolenaar    syn region texItalBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texBoldGroup,@Spell
411723dd946SBram Moolenaar    syn region texEmphStyle	matchgroup=texTypeStyle start="\\emph\s*{"   matchgroup=texTypeStyle  end="}" concealends contains=@texItalGroup,@Spell
4121d9215b9SBram Moolenaar    syn region texEmphStyle	matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texBoldGroup,@Spell
4131d9215b9SBram Moolenaar    syn region texEmphStyle	matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texBoldGroup,@Spell
4141d9215b9SBram Moolenaar    syn region texEmphStyle	matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texBoldGroup,@Spell
41583d1b190SBram Moolenaar   else
416541f92d6SBram Moolenaar    syn region texBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texBoldGroup
417541f92d6SBram Moolenaar    syn region texBoldItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texItalGroup
418541f92d6SBram Moolenaar    syn region texItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texItalGroup
419541f92d6SBram Moolenaar    syn region texItalBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texBoldGroup
420723dd946SBram Moolenaar    syn region texEmphStyle	matchgroup=texTypeStyle start="\\emph\s*{"   matchgroup=texTypeStyle  end="}" concealends contains=@texItalGroup
4211d9215b9SBram Moolenaar    syn region texEmphStyle	matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texEmphGroup
4221d9215b9SBram Moolenaar    syn region texEmphStyle	matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texEmphGroup
4231d9215b9SBram Moolenaar    syn region texEmphStyle	matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle  end="}" concealends contains=@texEmphGroup
42483d1b190SBram Moolenaar   endif
425d38b055aSBram Moolenaar  endif
426ac7bd638SBram Moolenaarendif
427d38b055aSBram Moolenaar
428071d4279SBram Moolenaar" Bad Math (mismatched): {{{1
429a0f849eeSBram Moolenaarif !exists("g:tex_no_math") && !s:tex_no_error
43051ad4eaaSBram Moolenaar syn match texBadMath		"\\end\s*{\s*\(array\|[bBpvV]matrix\|split\|smallmatrix\)\s*}"
431f0b03c4eSBram Moolenaar syn match texBadMath		"\\end\s*{\s*\(displaymath\|equation\|eqnarray\|math\)\*\=\s*}"
432071d4279SBram Moolenaar syn match texBadMath		"\\[\])]"
433071d4279SBram Moolenaarendif
434071d4279SBram Moolenaar
435071d4279SBram Moolenaar" Math Zones: {{{1
436e2719096SBram Moolenaarif !exists("g:tex_no_math")
437488c6512SBram Moolenaar " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
438071d4279SBram Moolenaar "                 Starred forms are created if starform is true.  Starred
439071d4279SBram Moolenaar "                 forms have syntax group and synchronization groups with a
4406d5ad4c4SBram Moolenaar "                 "S" appended.  Handles: cluster, syntax, sync, and highlighting.
441071d4279SBram Moolenaar fun! TexNewMathZone(sfx,mathzone,starform)
442071d4279SBram Moolenaar   let grpname  = "texMathZone".a:sfx
443071d4279SBram Moolenaar   let syncname = "texSyncMathZone".a:sfx
444b4ff518dSBram Moolenaar   if s:tex_fold_enabled
4453577c6faSBram Moolenaar    let foldcmd= " fold"
4463577c6faSBram Moolenaar   else
4473577c6faSBram Moolenaar    let foldcmd= ""
4483577c6faSBram Moolenaar   endif
449071d4279SBram Moolenaar   exe "syn cluster texMathZones add=".grpname
450f391327aSBram Moolenaar   if s:tex_fast =~# 'M'
4513577c6faSBram Moolenaar    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
452071d4279SBram Moolenaar    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
453071d4279SBram Moolenaar    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
454ac7bd638SBram Moolenaar   endif
4555c73622aSBram Moolenaar   exe 'hi def link '.grpname.' texMath'
456071d4279SBram Moolenaar   if a:starform
457071d4279SBram Moolenaar    let grpname  = "texMathZone".a:sfx.'S'
458071d4279SBram Moolenaar    let syncname = "texSyncMathZone".a:sfx.'S'
459071d4279SBram Moolenaar    exe "syn cluster texMathZones add=".grpname
460f391327aSBram Moolenaar    if s:tex_fast =~# 'M'
4613577c6faSBram Moolenaar     exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
462071d4279SBram Moolenaar     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
463071d4279SBram Moolenaar     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
464ac7bd638SBram Moolenaar    endif
4655c73622aSBram Moolenaar    exe 'hi def link '.grpname.' texMath'
466071d4279SBram Moolenaar   endif
467071d4279SBram Moolenaar endfun
468071d4279SBram Moolenaar
469071d4279SBram Moolenaar " Standard Math Zones: {{{2
470f0b03c4eSBram Moolenaar call TexNewMathZone("A","displaymath",1)
471f0b03c4eSBram Moolenaar call TexNewMathZone("B","eqnarray",1)
472f0b03c4eSBram Moolenaar call TexNewMathZone("C","equation",1)
473f0b03c4eSBram Moolenaar call TexNewMathZone("D","math",1)
474071d4279SBram Moolenaar
475071d4279SBram Moolenaar " Inline Math Zones: {{{2
476f391327aSBram Moolenaar if s:tex_fast =~# 'M'
477f391327aSBram Moolenaar  if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
478e0021c79SBram Moolenaar   syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter	end="\\)\|%stopzone\>"			keepend concealends contains=@texMathZoneGroup
479e0021c79SBram Moolenaar   syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter	end="\\]\|%stopzone\>"			keepend concealends contains=@texMathZoneGroup
480e0021c79SBram Moolenaar   syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter	end="\$"	end="%stopzone\>"		concealends contains=@texMathZoneGroup
481541f92d6SBram Moolenaar   syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter	end="\$\$"	end="%stopzone\>"	keepend concealends contains=@texMathZoneGroup
482e0021c79SBram Moolenaar  else
483071d4279SBram Moolenaar   syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter	end="\\)\|%stopzone\>"			keepend contains=@texMathZoneGroup
484071d4279SBram Moolenaar   syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter	end="\\]\|%stopzone\>"			keepend contains=@texMathZoneGroup
485b4ff518dSBram Moolenaar   syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$"	matchgroup=Delimiter	end="\$"	end="%stopzone\>"		contains=@texMathZoneGroup
486071d4279SBram Moolenaar   syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter	end="\$\$"	end="%stopzone\>"	keepend	contains=@texMathZoneGroup
487e0021c79SBram Moolenaar  endif
488071d4279SBram Moolenaar  syn region texMathZoneZ	matchgroup=texStatement start="\\ensuremath\s*{"	matchgroup=texStatement	end="}"		end="%stopzone\>"	contains=@texMathZoneGroup
489ac7bd638SBram Moolenaar endif
490071d4279SBram Moolenaar
491071d4279SBram Moolenaar syn match texMathOper		"[_^=]" contained
492071d4279SBram Moolenaar
49374cbdf03SBram Moolenaar " Text Inside Math Zones: {{{2
494f391327aSBram Moolenaar if s:tex_fast =~# 'M'
495d960d76dSBram Moolenaar  if !exists("g:tex_nospell") || !g:tex_nospell
49674cbdf03SBram Moolenaar   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup,@Spell
497d960d76dSBram Moolenaar  else
498d960d76dSBram Moolenaar   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup
499d960d76dSBram Moolenaar  endif
500ac7bd638SBram Moolenaar endif
50174cbdf03SBram Moolenaar
502071d4279SBram Moolenaar " \left..something.. and \right..something.. support: {{{2
503071d4279SBram Moolenaar syn match   texMathDelimBad	contained		"\S"
504f391327aSBram Moolenaar if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
505bc8801c9SBram Moolenaar  syn match   texMathDelim	contained		"\\left\["
506bc8801c9SBram Moolenaar  syn match   texMathDelim	contained		"\\left\\{"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
507bc8801c9SBram Moolenaar  syn match   texMathDelim	contained		"\\right\\}"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
508adc2182cSBram Moolenaar  let s:texMathDelimList=[
509adc2182cSBram Moolenaar     \ ['<'            , '<'] ,
510adc2182cSBram Moolenaar     \ ['>'            , '>'] ,
511adc2182cSBram Moolenaar     \ ['('            , '('] ,
512adc2182cSBram Moolenaar     \ [')'            , ')'] ,
513adc2182cSBram Moolenaar     \ ['\['           , '['] ,
514adc2182cSBram Moolenaar     \ [']'            , ']'] ,
515adc2182cSBram Moolenaar     \ ['\\{'          , '{'] ,
516adc2182cSBram Moolenaar     \ ['\\}'          , '}'] ,
517adc2182cSBram Moolenaar     \ ['|'            , '|'] ,
518adc2182cSBram Moolenaar     \ ['\\|'          , '‖'] ,
519adc2182cSBram Moolenaar     \ ['\\backslash'  , '\'] ,
520adc2182cSBram Moolenaar     \ ['\\downarrow'  , '↓'] ,
521adc2182cSBram Moolenaar     \ ['\\Downarrow'  , '⇓'] ,
522adc2182cSBram Moolenaar     \ ['\\lbrace'     , '['] ,
523adc2182cSBram Moolenaar     \ ['\\lceil'      , '⌈'] ,
524adc2182cSBram Moolenaar     \ ['\\lfloor'     , '⌊'] ,
525adc2182cSBram Moolenaar     \ ['\\lgroup'     , '⌊'] ,
526adc2182cSBram Moolenaar     \ ['\\lmoustache' , '⎛'] ,
527adc2182cSBram Moolenaar     \ ['\\rbrace'     , ']'] ,
528adc2182cSBram Moolenaar     \ ['\\rceil'      , '⌉'] ,
529adc2182cSBram Moolenaar     \ ['\\rfloor'     , '⌋'] ,
530adc2182cSBram Moolenaar     \ ['\\rgroup'     , '⌋'] ,
531adc2182cSBram Moolenaar     \ ['\\rmoustache' , '⎞'] ,
532adc2182cSBram Moolenaar     \ ['\\uparrow'    , '↑'] ,
533adc2182cSBram Moolenaar     \ ['\\Uparrow'    , '↑'] ,
534adc2182cSBram Moolenaar     \ ['\\updownarrow', '↕'] ,
535adc2182cSBram Moolenaar     \ ['\\Updownarrow', '⇕']]
536690afe1fSBram Moolenaar  if &ambw == "double" || exists("g:tex_usedblwidth")
537690afe1fSBram Moolenaar    let s:texMathDelimList= s:texMathDelimList + [
538690afe1fSBram Moolenaar     \ ['\\langle'     , '〈'] ,
5397f2e9d7cSBram Moolenaar     \ ['\\rangle'     , '〉']]
540690afe1fSBram Moolenaar  else
541690afe1fSBram Moolenaar    let s:texMathDelimList= s:texMathDelimList + [
542690afe1fSBram Moolenaar     \ ['\\langle'     , '<'] ,
543690afe1fSBram Moolenaar     \ ['\\rangle'     , '>']]
544690afe1fSBram Moolenaar  endif
545adc2182cSBram Moolenaar  syn match texMathDelim	'\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
546adc2182cSBram Moolenaar  for texmath in s:texMathDelimList
547adc2182cSBram Moolenaar   exe "syn match texMathDelim	'\\\\[bB]igg\\=[lr]\\=".texmath[0]."'	contained conceal cchar=".texmath[1]
548adc2182cSBram Moolenaar  endfor
549adc2182cSBram Moolenaar
5504b22cdb0SBram Moolenaar else
5514b22cdb0SBram Moolenaar  syn match   texMathDelim	contained		"\\\(left\|right\)\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
552adc2182cSBram Moolenaar  syn match   texMathDelim	contained		"\\[bB]igg\=[lr]\=\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
553071d4279SBram Moolenaar  syn match   texMathDelimSet2	contained	"\\"		nextgroup=texMathDelimKey,texMathDelimBad
554071d4279SBram Moolenaar  syn match   texMathDelimSet1	contained	"[<>()[\]|/.]\|\\[{}|]"
555071d4279SBram Moolenaar  syn keyword texMathDelimKey	contained	backslash       lceil           lVert           rgroup          uparrow
556071d4279SBram Moolenaar  syn keyword texMathDelimKey	contained	downarrow       lfloor          rangle          rmoustache      Uparrow
557071d4279SBram Moolenaar  syn keyword texMathDelimKey	contained	Downarrow       lgroup          rbrace          rvert           updownarrow
558071d4279SBram Moolenaar  syn keyword texMathDelimKey	contained	langle          lmoustache      rceil           rVert           Updownarrow
559071d4279SBram Moolenaar  syn keyword texMathDelimKey	contained	lbrace          lvert           rfloor
560071d4279SBram Moolenaar endif
561adc2182cSBram Moolenaar syn match   texMathDelim	contained		"\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
562adc2182cSBram Moolenaar syn match   texMathDelim	contained		"\\lefteqn\>"
563adc2182cSBram Moolenaarendif
564071d4279SBram Moolenaar
565071d4279SBram Moolenaar" Special TeX characters  ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
566071d4279SBram Moolenaarsyn match texSpecialChar	"\\[$&%#{}_]"
567071d4279SBram Moolenaarif b:tex_stylish
568071d4279SBram Moolenaar  syn match texSpecialChar	"\\[SP@][^a-zA-Z@]"me=e-1
569071d4279SBram Moolenaarelse
570071d4279SBram Moolenaar  syn match texSpecialChar	"\\[SP@]\A"me=e-1
571071d4279SBram Moolenaarendif
572071d4279SBram Moolenaarsyn match texSpecialChar	"\\\\"
573e2719096SBram Moolenaarif !exists("g:tex_no_math")
574071d4279SBram Moolenaar syn match texOnlyMath		"[_^]"
575071d4279SBram Moolenaarendif
576071d4279SBram Moolenaarsyn match texSpecialChar	"\^\^[0-9a-f]\{2}\|\^\^\S"
5777db8f6f4SBram Moolenaarif s:tex_conceal !~# 'S'
578bc488a76SBram Moolenaar syn match texSpecialChar	'\\glq\>'	contained conceal cchar=‚
579bc488a76SBram Moolenaar syn match texSpecialChar	'\\grq\>'	contained conceal cchar=‘
580bc488a76SBram Moolenaar syn match texSpecialChar	'\\glqq\>'	contained conceal cchar=„
581bc488a76SBram Moolenaar syn match texSpecialChar	'\\grqq\>'	contained conceal cchar=“
582bc488a76SBram Moolenaar syn match texSpecialChar	'\\hyp\>'	contained conceal cchar=-
583bc488a76SBram Moolenaarendif
584071d4279SBram Moolenaar
585071d4279SBram Moolenaar" Comments: {{{1
586071d4279SBram Moolenaar"    Normal TeX LaTeX     :   %....
587071d4279SBram Moolenaar"    Documented TeX Format:  ^^A...	-and-	leading %s (only)
588b4ff518dSBram Moolenaarif !s:tex_comment_nospell
589071d4279SBram Moolenaar syn cluster texCommentGroup	contains=texTodo,@Spell
5903577c6faSBram Moolenaarelse
5913577c6faSBram Moolenaar syn cluster texCommentGroup	contains=texTodo,@NoSpell
5923577c6faSBram Moolenaarendif
593071d4279SBram Moolenaarsyn case ignore
59418144c84SBram Moolenaarsyn keyword texTodo		contained		combak	fixme	todo	xxx
595071d4279SBram Moolenaarsyn case match
59681af9250SBram Moolenaarif s:extfname == "dtx"
597071d4279SBram Moolenaar syn match texComment		"\^\^A.*$"	contains=@texCommentGroup
598071d4279SBram Moolenaar syn match texComment		"^%\+"		contains=@texCommentGroup
599071d4279SBram Moolenaarelse
600b4ff518dSBram Moolenaar if s:tex_fold_enabled
601fd2ac767SBram Moolenaar  " allows syntax-folding of 2 or more contiguous comment lines
602fd2ac767SBram Moolenaar  " single-line comments are not folded
603071d4279SBram Moolenaar  syn match  texComment	"%.*$"				contains=@texCommentGroup
604f391327aSBram Moolenaar  if s:tex_fast =~# 'c'
605b4ff518dSBram Moolenaar   TexFold syn region texComment						start="^\zs\s*%.*\_s*%"	skip="^\s*%"	end='^\ze\s*[^%]'	contains=@texCommentGroup
606a0f849eeSBram Moolenaar   TexFold syn region texNoSpell	contained	matchgroup=texComment	start="%\s*nospell\s*{"	end="%\s*nospell\s*}"			contains=@texFoldGroup,@NoSpell
607ac7bd638SBram Moolenaar  endif
608fd2ac767SBram Moolenaar else
609fd2ac767SBram Moolenaar  syn match texComment		"%.*$"			contains=@texCommentGroup
610f391327aSBram Moolenaar  if s:tex_fast =~# 'c'
611d38b055aSBram Moolenaar   syn region texNoSpell		contained	matchgroup=texComment start="%\s*nospell\s*{"	end="%\s*nospell\s*}"	contains=@texFoldGroup,@NoSpell
612fd2ac767SBram Moolenaar  endif
613071d4279SBram Moolenaar endif
614ac7bd638SBram Moolenaarendif
615071d4279SBram Moolenaar
616b0d45e7fSBram Moolenaar" %begin-include ... %end-include acts like a texDocZone for \include'd files.  Permits spell checking, for example, in such files.
617b0d45e7fSBram Moolenaarif !s:tex_nospell
618b0d45e7fSBram Moolenaar TexFold syn region texDocZone			matchgroup=texSection start='^\s*%begin-include\>'	 end='^\s*%end-include\>'											contains=@texFoldGroup,@texDocGroup,@Spell
619b0d45e7fSBram Moolenaarelse
620b0d45e7fSBram Moolenaar TexFold syn region texDocZone			matchgroup=texSection start='^\s*%begin-include\>'	 end='^\s*%end-include\>'											contains=@texFoldGroup,@texDocGroup
621b0d45e7fSBram Moolenaarendif
622b0d45e7fSBram Moolenaar
623071d4279SBram Moolenaar" Separate lines used for verb` and verb# so that the end conditions {{{1
62474cbdf03SBram Moolenaar" will appropriately terminate.
62574cbdf03SBram Moolenaar" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
626f391327aSBram Moolenaarif s:tex_fast =~# 'v'
62774cbdf03SBram Moolenaar  if exists("g:tex_verbspell") && g:tex_verbspell
6285c73622aSBram Moolenaar   syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"	contains=@Spell
629b0d45e7fSBram Moolenaar   " listings package:
63074cbdf03SBram Moolenaar   if b:tex_stylish
63174cbdf03SBram Moolenaar    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"			contains=@Spell
63274cbdf03SBram Moolenaar   else
63374cbdf03SBram Moolenaar    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"			contains=@Spell
63474cbdf03SBram Moolenaar   endif
63574cbdf03SBram Moolenaar  else
63674cbdf03SBram Moolenaar   syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"
637071d4279SBram Moolenaar   if b:tex_stylish
638071d4279SBram Moolenaar     syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"
639071d4279SBram Moolenaar   else
640071d4279SBram Moolenaar     syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"
641071d4279SBram Moolenaar   endif
642071d4279SBram Moolenaar  endif
64374cbdf03SBram Moolenaarendif
644071d4279SBram Moolenaar
645071d4279SBram Moolenaar" Tex Reference Zones: {{{1
646f391327aSBram Moolenaarif s:tex_fast =~# 'r'
647d960d76dSBram Moolenaar  syn region texZone		matchgroup=texStatement start="@samp{"			end="}\|%stopzone\>"	contains=@texRefGroup
648d960d76dSBram Moolenaar  syn region texRefZone		matchgroup=texStatement start="\\nocite{"		end="}\|%stopzone\>"	contains=@texRefGroup
649d960d76dSBram Moolenaar  syn region texRefZone		matchgroup=texStatement start="\\bibliography{"		end="}\|%stopzone\>"	contains=@texRefGroup
650d960d76dSBram Moolenaar  syn region texRefZone		matchgroup=texStatement start="\\label{"		end="}\|%stopzone\>"	contains=@texRefGroup
651d960d76dSBram Moolenaar  syn region texRefZone		matchgroup=texStatement start="\\\(page\|eq\)ref{"	end="}\|%stopzone\>"	contains=@texRefGroup
652d960d76dSBram Moolenaar  syn region texRefZone		matchgroup=texStatement start="\\v\=ref{"		end="}\|%stopzone\>"	contains=@texRefGroup
653d960d76dSBram Moolenaar  syn region texRefOption	contained	matchgroup=Delimiter start='\[' end=']'		contains=@texRefGroup,texRefZone	nextgroup=texRefOption,texCite
654d960d76dSBram Moolenaar  syn region texCite		contained	matchgroup=Delimiter start='{' end='}'		contains=@texRefGroup,texRefZone,texCite
655ac7bd638SBram Moolenaarendif
6561d9215b9SBram Moolenaarsyn match  texRefZone		'\\cite\%([tp]\*\=\)\=\>' nextgroup=texRefOption,texCite
657071d4279SBram Moolenaar
658071d4279SBram Moolenaar" Handle newcommand, newenvironment : {{{1
659071d4279SBram Moolenaarsyn match  texNewCmd				"\\newcommand\>"			nextgroup=texCmdName skipwhite skipnl
660f391327aSBram Moolenaarif s:tex_fast =~# 'V'
661071d4279SBram Moolenaar  syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
662071d4279SBram Moolenaar  syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]"		nextgroup=texCmdBody skipwhite skipnl
663071d4279SBram Moolenaar  syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]"	matchgroup=Delimiter end="}" contains=@texCmdGroup
664ac7bd638SBram Moolenaarendif
665071d4279SBram Moolenaarsyn match  texNewEnv				"\\newenvironment\>"			nextgroup=texEnvName skipwhite skipnl
666f391327aSBram Moolenaarif s:tex_fast =~# 'V'
667071d4279SBram Moolenaar  syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvBgn skipwhite skipnl
668071d4279SBram Moolenaar  syn region texEnvBgn  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
669071d4279SBram Moolenaar  syn region texEnvEnd  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		skipwhite skipnl contains=@texEnvGroup
670ac7bd638SBram Moolenaarendif
671071d4279SBram Moolenaar
672071d4279SBram Moolenaar" Definitions/Commands: {{{1
673071d4279SBram Moolenaarsyn match texDefCmd				"\\def\>"				nextgroup=texDefName skipwhite skipnl
674071d4279SBram Moolenaarif b:tex_stylish
675071d4279SBram Moolenaar  syn match texDefName contained		"\\[a-zA-Z@]\+"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
676071d4279SBram Moolenaar  syn match texDefName contained		"\\[^a-zA-Z@]"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
677071d4279SBram Moolenaarelse
678071d4279SBram Moolenaar  syn match texDefName contained		"\\\a\+"				nextgroup=texDefParms,texCmdBody skipwhite skipnl
679071d4279SBram Moolenaar  syn match texDefName contained		"\\\A"					nextgroup=texDefParms,texCmdBody skipwhite skipnl
680071d4279SBram Moolenaarendif
681071d4279SBram Moolenaarsyn match texDefParms  contained		"#[^{]*"	contains=texDefParm	nextgroup=texCmdBody skipwhite skipnl
682071d4279SBram Moolenaarsyn match  texDefParm  contained		"#\d\+"
683071d4279SBram Moolenaar
684071d4279SBram Moolenaar" TeX Lengths: {{{1
6859964e468SBram Moolenaarsyn match  texLength		"\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
686071d4279SBram Moolenaar
687071d4279SBram Moolenaar" TeX String Delimiters: {{{1
688071d4279SBram Moolenaarsyn match texString		"\(``\|''\|,,\)"
689071d4279SBram Moolenaar
6905c73622aSBram Moolenaar" makeatletter -- makeatother sections
691a0f849eeSBram Moolenaarif !s:tex_no_error
692f391327aSBram Moolenaar if s:tex_fast =~# 'S'
6935c73622aSBram Moolenaar  syn region texStyle			matchgroup=texStatement start='\\makeatletter' end='\\makeatother'	contains=@texStyleGroup contained
694ac7bd638SBram Moolenaar endif
6955c73622aSBram Moolenaar syn match  texStyleStatement		"\\[a-zA-Z@]\+"	contained
696f391327aSBram Moolenaar if s:tex_fast =~# 'S'
6975c73622aSBram Moolenaar  syn region texStyleMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texStyleGroup,texError	contained
6985c73622aSBram Moolenaar  syn region texStyleMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texStyleGroup,texError	contained
6995c73622aSBram Moolenaar endif
700ac7bd638SBram Moolenaarendif
7015c73622aSBram Moolenaar
7027fc0c065SBram Moolenaar" Conceal mode support (supports set cole=2) {{{1
703b2c0350cSBram Moolenaarif has("conceal") && &enc == 'utf-8'
704611df5b9SBram Moolenaar
705611df5b9SBram Moolenaar " Math Symbols {{{2
7067fc0c065SBram Moolenaar " (many of these symbols were contributed by Björn Winckler)
707f391327aSBram Moolenaar if s:tex_conceal =~# 'm'
7087fc0c065SBram Moolenaar  let s:texMathList=[
709adc2182cSBram Moolenaar    \ ['|'		, '‖'],
710d960d76dSBram Moolenaar    \ ['aleph'		, 'ℵ'],
7116be7f873SBram Moolenaar    \ ['amalg'		, '∐'],
7127fc0c065SBram Moolenaar    \ ['angle'		, '∠'],
7137fc0c065SBram Moolenaar    \ ['approx'		, '≈'],
7147fc0c065SBram Moolenaar    \ ['ast'		, '∗'],
7157fc0c065SBram Moolenaar    \ ['asymp'		, '≍'],
716d960d76dSBram Moolenaar    \ ['backslash'	, '∖'],
7177fc0c065SBram Moolenaar    \ ['bigcap'		, '∩'],
7186be7f873SBram Moolenaar    \ ['bigcirc'	, '○'],
7197fc0c065SBram Moolenaar    \ ['bigcup'		, '∪'],
7207fc0c065SBram Moolenaar    \ ['bigodot'	, '⊙'],
7217fc0c065SBram Moolenaar    \ ['bigoplus'	, '⊕'],
7227fc0c065SBram Moolenaar    \ ['bigotimes'	, '⊗'],
7237fc0c065SBram Moolenaar    \ ['bigsqcup'	, '⊔'],
7247fc0c065SBram Moolenaar    \ ['bigtriangledown', '∇'],
7256be7f873SBram Moolenaar    \ ['bigtriangleup'	, '∆'],
7267fc0c065SBram Moolenaar    \ ['bigvee'		, '⋁'],
7277fc0c065SBram Moolenaar    \ ['bigwedge'	, '⋀'],
7287fc0c065SBram Moolenaar    \ ['bot'		, '⊥'],
7296be7f873SBram Moolenaar    \ ['bowtie'	        , '⋈'],
7306be7f873SBram Moolenaar    \ ['bullet'	        , '•'],
7317fc0c065SBram Moolenaar    \ ['cap'		, '∩'],
7327fc0c065SBram Moolenaar    \ ['cdot'		, '·'],
7337fc0c065SBram Moolenaar    \ ['cdots'		, '⋯'],
7347fc0c065SBram Moolenaar    \ ['circ'		, '∘'],
735d960d76dSBram Moolenaar    \ ['clubsuit'	, '♣'],
7367fc0c065SBram Moolenaar    \ ['cong'		, '≅'],
7377fc0c065SBram Moolenaar    \ ['coprod'		, '∐'],
738d960d76dSBram Moolenaar    \ ['copyright'	, '©'],
7397fc0c065SBram Moolenaar    \ ['cup'		, '∪'],
7406be7f873SBram Moolenaar    \ ['dagger'	        , '†'],
7417fc0c065SBram Moolenaar    \ ['dashv'		, '⊣'],
7426be7f873SBram Moolenaar    \ ['ddagger'	, '‡'],
7436be7f873SBram Moolenaar    \ ['ddots'	        , '⋱'],
7447fc0c065SBram Moolenaar    \ ['diamond'	, '⋄'],
745d960d76dSBram Moolenaar    \ ['diamondsuit'	, '♢'],
7467fc0c065SBram Moolenaar    \ ['div'		, '÷'],
7477fc0c065SBram Moolenaar    \ ['doteq'		, '≐'],
7486be7f873SBram Moolenaar    \ ['dots'		, '…'],
7497fc0c065SBram Moolenaar    \ ['downarrow'	, '↓'],
7507fc0c065SBram Moolenaar    \ ['Downarrow'	, '⇓'],
7516be7f873SBram Moolenaar    \ ['ell'		, 'ℓ'],
7527fc0c065SBram Moolenaar    \ ['emptyset'	, '∅'],
7537fc0c065SBram Moolenaar    \ ['equiv'		, '≡'],
7547fc0c065SBram Moolenaar    \ ['exists'		, '∃'],
755d960d76dSBram Moolenaar    \ ['flat'		, '♭'],
7567fc0c065SBram Moolenaar    \ ['forall'		, '∀'],
7576be7f873SBram Moolenaar    \ ['frown'		, '⁔'],
7587fc0c065SBram Moolenaar    \ ['ge'		, '≥'],
7597fc0c065SBram Moolenaar    \ ['geq'		, '≥'],
7607fc0c065SBram Moolenaar    \ ['gets'		, '←'],
7616be7f873SBram Moolenaar    \ ['gg'		, '⟫'],
762d960d76dSBram Moolenaar    \ ['hbar'		, 'ℏ'],
763d960d76dSBram Moolenaar    \ ['heartsuit'	, '♡'],
7647fc0c065SBram Moolenaar    \ ['hookleftarrow'	, '↩'],
7657fc0c065SBram Moolenaar    \ ['hookrightarrow'	, '↪'],
766690afe1fSBram Moolenaar    \ ['iff'            , '⇔'],
7677fc0c065SBram Moolenaar    \ ['Im'		, 'ℑ'],
768d960d76dSBram Moolenaar    \ ['imath'		, 'ɩ'],
7697fc0c065SBram Moolenaar    \ ['in'		, '∈'],
7707fc0c065SBram Moolenaar    \ ['infty'		, '∞'],
7717fc0c065SBram Moolenaar    \ ['int'		, '∫'],
772690afe1fSBram Moolenaar    \ ['jmath'		, '��'],
773690afe1fSBram Moolenaar    \ ['land'		, '∧'],
7747fc0c065SBram Moolenaar    \ ['lceil'		, '⌈'],
7757fc0c065SBram Moolenaar    \ ['ldots'		, '…'],
7767fc0c065SBram Moolenaar    \ ['le'		, '≤'],
77765e0d77aSBram Moolenaar    \ ['left|'		, '|'],
778*2547aa93SBram Moolenaar    \ ['left\\|'	, '‖'],
7797fc0c065SBram Moolenaar    \ ['left('		, '('],
7807fc0c065SBram Moolenaar    \ ['left\['		, '['],
7817fc0c065SBram Moolenaar    \ ['left\\{'	, '{'],
782e2719096SBram Moolenaar    \ ['leftarrow'	, '←'],
783e2719096SBram Moolenaar    \ ['Leftarrow'	, '⇐'],
7846be7f873SBram Moolenaar    \ ['leftharpoondown', '↽'],
7856be7f873SBram Moolenaar    \ ['leftharpoonup'	, '↼'],
78697d62497SBram Moolenaar    \ ['leftrightarrow'	, '↔'],
7876be7f873SBram Moolenaar    \ ['Leftrightarrow'	, '⇔'],
7887fc0c065SBram Moolenaar    \ ['leq'		, '≤'],
7896be7f873SBram Moolenaar    \ ['leq'		, '≤'],
7907fc0c065SBram Moolenaar    \ ['lfloor'		, '⌊'],
7916be7f873SBram Moolenaar    \ ['ll'		, '≪'],
792adc2182cSBram Moolenaar    \ ['lmoustache'     , '╭'],
793690afe1fSBram Moolenaar    \ ['lor'		, '∨'],
7947fc0c065SBram Moolenaar    \ ['mapsto'		, '↦'],
7957fc0c065SBram Moolenaar    \ ['mid'		, '∣'],
7966be7f873SBram Moolenaar    \ ['models'		, '╞'],
7977fc0c065SBram Moolenaar    \ ['mp'		, '∓'],
7987fc0c065SBram Moolenaar    \ ['nabla'		, '∇'],
799d960d76dSBram Moolenaar    \ ['natural'	, '♮'],
8007fc0c065SBram Moolenaar    \ ['ne'		, '≠'],
8016be7f873SBram Moolenaar    \ ['nearrow'	, '↗'],
8027fc0c065SBram Moolenaar    \ ['neg'		, '¬'],
8037fc0c065SBram Moolenaar    \ ['neq'		, '≠'],
8047fc0c065SBram Moolenaar    \ ['ni'		, '∋'],
8057fc0c065SBram Moolenaar    \ ['notin'		, '∉'],
8067fc0c065SBram Moolenaar    \ ['nwarrow'	, '↖'],
8077fc0c065SBram Moolenaar    \ ['odot'		, '⊙'],
8087fc0c065SBram Moolenaar    \ ['oint'		, '∮'],
8097fc0c065SBram Moolenaar    \ ['ominus'		, '⊖'],
8107fc0c065SBram Moolenaar    \ ['oplus'		, '⊕'],
8117fc0c065SBram Moolenaar    \ ['oslash'		, '⊘'],
8127fc0c065SBram Moolenaar    \ ['otimes'		, '⊗'],
8137fc0c065SBram Moolenaar    \ ['owns'		, '∋'],
814d960d76dSBram Moolenaar    \ ['P'	        , '¶'],
8156be7f873SBram Moolenaar    \ ['parallel'	, '║'],
8167fc0c065SBram Moolenaar    \ ['partial'	, '∂'],
8177fc0c065SBram Moolenaar    \ ['perp'		, '⊥'],
8187fc0c065SBram Moolenaar    \ ['pm'		, '±'],
8197fc0c065SBram Moolenaar    \ ['prec'		, '≺'],
8207fc0c065SBram Moolenaar    \ ['preceq'		, '⪯'],
821d960d76dSBram Moolenaar    \ ['prime'		, '′'],
8227fc0c065SBram Moolenaar    \ ['prod'		, '∏'],
8237fc0c065SBram Moolenaar    \ ['propto'		, '∝'],
8247fc0c065SBram Moolenaar    \ ['rceil'		, '⌉'],
8257fc0c065SBram Moolenaar    \ ['Re'		, 'ℜ'],
826723dd946SBram Moolenaar    \ ['quad'		, ' '],
827723dd946SBram Moolenaar    \ ['qquad'		, ' '],
8287fc0c065SBram Moolenaar    \ ['rfloor'		, '⌋'],
82965e0d77aSBram Moolenaar    \ ['right|'		, '|'],
83065e0d77aSBram Moolenaar    \ ['right\\|'	, '‖'],
8317fc0c065SBram Moolenaar    \ ['right)'		, ')'],
8327fc0c065SBram Moolenaar    \ ['right]'		, ']'],
8337fc0c065SBram Moolenaar    \ ['right\\}'	, '}'],
834e2719096SBram Moolenaar    \ ['rightarrow'	, '→'],
835e2719096SBram Moolenaar    \ ['Rightarrow'	, '⇒'],
8366be7f873SBram Moolenaar    \ ['rightleftharpoons', '⇌'],
837adc2182cSBram Moolenaar    \ ['rmoustache'     , '╮'],
838d960d76dSBram Moolenaar    \ ['S'	        , '§'],
8397fc0c065SBram Moolenaar    \ ['searrow'	, '↘'],
8407fc0c065SBram Moolenaar    \ ['setminus'	, '∖'],
841d960d76dSBram Moolenaar    \ ['sharp'		, '♯'],
8427fc0c065SBram Moolenaar    \ ['sim'		, '∼'],
8436be7f873SBram Moolenaar    \ ['simeq'		, '⋍'],
8446be7f873SBram Moolenaar    \ ['smile'		, '‿'],
845d960d76dSBram Moolenaar    \ ['spadesuit'	, '♠'],
8467fc0c065SBram Moolenaar    \ ['sqcap'		, '⊓'],
8477fc0c065SBram Moolenaar    \ ['sqcup'		, '⊔'],
8487fc0c065SBram Moolenaar    \ ['sqsubset'	, '⊏'],
8497fc0c065SBram Moolenaar    \ ['sqsubseteq'	, '⊑'],
8507fc0c065SBram Moolenaar    \ ['sqsupset'	, '⊐'],
8517fc0c065SBram Moolenaar    \ ['sqsupseteq'	, '⊒'],
8526be7f873SBram Moolenaar    \ ['star'		, '✫'],
8537fc0c065SBram Moolenaar    \ ['subset'		, '⊂'],
8547fc0c065SBram Moolenaar    \ ['subseteq'	, '⊆'],
8557fc0c065SBram Moolenaar    \ ['succ'		, '≻'],
8567fc0c065SBram Moolenaar    \ ['succeq'		, '⪰'],
8577fc0c065SBram Moolenaar    \ ['sum'		, '∑'],
8586be7f873SBram Moolenaar    \ ['supset'		, '⊃'],
8597fc0c065SBram Moolenaar    \ ['supseteq'	, '⊇'],
8607fc0c065SBram Moolenaar    \ ['surd'		, '√'],
8617fc0c065SBram Moolenaar    \ ['swarrow'	, '↙'],
8627fc0c065SBram Moolenaar    \ ['times'		, '×'],
8637fc0c065SBram Moolenaar    \ ['to'		, '→'],
8647fc0c065SBram Moolenaar    \ ['top'		, '⊤'],
865d960d76dSBram Moolenaar    \ ['triangle'	, '∆'],
8667fc0c065SBram Moolenaar    \ ['triangleleft'	, '⊲'],
8677fc0c065SBram Moolenaar    \ ['triangleright'	, '⊳'],
8687fc0c065SBram Moolenaar    \ ['uparrow'	, '↑'],
8697fc0c065SBram Moolenaar    \ ['Uparrow'	, '⇑'],
8707fc0c065SBram Moolenaar    \ ['updownarrow'	, '↕'],
8717fc0c065SBram Moolenaar    \ ['Updownarrow'	, '⇕'],
8727fc0c065SBram Moolenaar    \ ['vdash'		, '⊢'],
8737fc0c065SBram Moolenaar    \ ['vdots'		, '⋮'],
8747fc0c065SBram Moolenaar    \ ['vee'		, '∨'],
8757fc0c065SBram Moolenaar    \ ['wedge'		, '∧'],
876d960d76dSBram Moolenaar    \ ['wp'		, '℘'],
8777fc0c065SBram Moolenaar    \ ['wr'		, '≀']]
878690afe1fSBram Moolenaar  if &ambw == "double" || exists("g:tex_usedblwidth")
879690afe1fSBram Moolenaar    let s:texMathList= s:texMathList + [
880690afe1fSBram Moolenaar    \ ['right\\rangle'	, '〉'],
881690afe1fSBram Moolenaar    \ ['left\\langle'	, '〈']]
882690afe1fSBram Moolenaar  else
883690afe1fSBram Moolenaar    let s:texMathList= s:texMathList + [
884690afe1fSBram Moolenaar    \ ['right\\rangle'	, '>'],
885690afe1fSBram Moolenaar    \ ['left\\langle'	, '<']]
886690afe1fSBram Moolenaar  endif
8877fc0c065SBram Moolenaar  for texmath in s:texMathList
888f391327aSBram Moolenaar   if texmath[0] =~# '\w$'
8897fc0c065SBram Moolenaar    exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
89081af9250SBram Moolenaar   else
89181af9250SBram Moolenaar    exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
89281af9250SBram Moolenaar   endif
8937fc0c065SBram Moolenaar  endfor
89474cbdf03SBram Moolenaar
89574cbdf03SBram Moolenaar  if &ambw == "double"
89674cbdf03SBram Moolenaar   syn match texMathSymbol '\\gg\>'			contained conceal cchar=≫
89774cbdf03SBram Moolenaar   syn match texMathSymbol '\\ll\>'			contained conceal cchar=≪
89874cbdf03SBram Moolenaar  else
89974cbdf03SBram Moolenaar   syn match texMathSymbol '\\gg\>'			contained conceal cchar=⟫
90074cbdf03SBram Moolenaar   syn match texMathSymbol '\\ll\>'			contained conceal cchar=⟪
90174cbdf03SBram Moolenaar  endif
902d960d76dSBram Moolenaar
903d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
904d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
905d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
906d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
907d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
908d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
909d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
910d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
911d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
912d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
913d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
914d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
915d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
916d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
917d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
918d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
919d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
920d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
921d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
922d960d76dSBram Moolenaar  syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
923e2719096SBram Moolenaar"  syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
92451ad4eaaSBram Moolenaar
92551ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{B}' contained conceal cchar=Ḃ
92651ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{b}' contained conceal cchar=ḃ
92751ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{D}' contained conceal cchar=Ḋ
92851ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{d}' contained conceal cchar=ḋ
92951ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{F}' contained conceal cchar=Ḟ
93051ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{f}' contained conceal cchar=ḟ
93151ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{H}' contained conceal cchar=Ḣ
93251ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{h}' contained conceal cchar=ḣ
93351ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{M}' contained conceal cchar=Ṁ
93451ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{m}' contained conceal cchar=ṁ
93551ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{N}' contained conceal cchar=Ṅ
93651ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{n}' contained conceal cchar=ṅ
93751ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{P}' contained conceal cchar=Ṗ
93851ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{p}' contained conceal cchar=ṗ
93951ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{R}' contained conceal cchar=Ṙ
94051ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{r}' contained conceal cchar=ṙ
94151ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{S}' contained conceal cchar=Ṡ
94251ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{s}' contained conceal cchar=ṡ
94351ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{T}' contained conceal cchar=Ṫ
94451ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{t}' contained conceal cchar=ṫ
94551ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{W}' contained conceal cchar=Ẇ
94651ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{w}' contained conceal cchar=ẇ
94751ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{X}' contained conceal cchar=Ẋ
94851ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{x}' contained conceal cchar=ẋ
94951ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{Y}' contained conceal cchar=Ẏ
95051ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{y}' contained conceal cchar=ẏ
95151ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{Z}' contained conceal cchar=Ż
95251ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{z}' contained conceal cchar=ż
95351ad4eaaSBram Moolenaar
95451ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{C}' contained conceal cchar=Ċ
95551ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{c}' contained conceal cchar=ċ
95651ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{E}' contained conceal cchar=Ė
95751ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{e}' contained conceal cchar=ė
95851ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{G}' contained conceal cchar=Ġ
95951ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{g}' contained conceal cchar=ġ
96051ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{I}' contained conceal cchar=İ
96151ad4eaaSBram Moolenaar
96251ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{A}' contained conceal cchar=Ȧ
96351ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{a}' contained conceal cchar=ȧ
96451ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{O}' contained conceal cchar=Ȯ
96551ad4eaaSBram Moolenaar  syn match texMathSymbol '\\dot{o}' contained conceal cchar=ȯ
9664b22cdb0SBram Moolenaar endif
967611df5b9SBram Moolenaar
968611df5b9SBram Moolenaar " Greek {{{2
969f391327aSBram Moolenaar if s:tex_conceal =~# 'g'
970611df5b9SBram Moolenaar  fun! s:Greek(group,pat,cchar)
971611df5b9SBram Moolenaar    exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
972611df5b9SBram Moolenaar  endfun
973611df5b9SBram Moolenaar  call s:Greek('texGreek','\\alpha\>'		,'α')
974611df5b9SBram Moolenaar  call s:Greek('texGreek','\\beta\>'		,'β')
975611df5b9SBram Moolenaar  call s:Greek('texGreek','\\gamma\>'		,'γ')
976611df5b9SBram Moolenaar  call s:Greek('texGreek','\\delta\>'		,'δ')
977611df5b9SBram Moolenaar  call s:Greek('texGreek','\\epsilon\>'		,'ϵ')
978611df5b9SBram Moolenaar  call s:Greek('texGreek','\\varepsilon\>'	,'ε')
979611df5b9SBram Moolenaar  call s:Greek('texGreek','\\zeta\>'		,'ζ')
980611df5b9SBram Moolenaar  call s:Greek('texGreek','\\eta\>'		,'η')
981611df5b9SBram Moolenaar  call s:Greek('texGreek','\\theta\>'		,'θ')
982611df5b9SBram Moolenaar  call s:Greek('texGreek','\\vartheta\>'	,'ϑ')
9836c1e1570SBram Moolenaar  call s:Greek('texGreek','\\iota\>'            ,'ι')
984611df5b9SBram Moolenaar  call s:Greek('texGreek','\\kappa\>'		,'κ')
985611df5b9SBram Moolenaar  call s:Greek('texGreek','\\lambda\>'		,'λ')
986611df5b9SBram Moolenaar  call s:Greek('texGreek','\\mu\>'		,'μ')
987611df5b9SBram Moolenaar  call s:Greek('texGreek','\\nu\>'		,'ν')
988611df5b9SBram Moolenaar  call s:Greek('texGreek','\\xi\>'		,'ξ')
989611df5b9SBram Moolenaar  call s:Greek('texGreek','\\pi\>'		,'π')
990611df5b9SBram Moolenaar  call s:Greek('texGreek','\\varpi\>'		,'ϖ')
991611df5b9SBram Moolenaar  call s:Greek('texGreek','\\rho\>'		,'ρ')
992611df5b9SBram Moolenaar  call s:Greek('texGreek','\\varrho\>'		,'ϱ')
993611df5b9SBram Moolenaar  call s:Greek('texGreek','\\sigma\>'		,'σ')
994611df5b9SBram Moolenaar  call s:Greek('texGreek','\\varsigma\>'	,'ς')
995611df5b9SBram Moolenaar  call s:Greek('texGreek','\\tau\>'		,'τ')
996611df5b9SBram Moolenaar  call s:Greek('texGreek','\\upsilon\>'		,'υ')
997e2719096SBram Moolenaar  call s:Greek('texGreek','\\phi\>'		,'ϕ')
998e2719096SBram Moolenaar  call s:Greek('texGreek','\\varphi\>'		,'φ')
999611df5b9SBram Moolenaar  call s:Greek('texGreek','\\chi\>'		,'χ')
1000611df5b9SBram Moolenaar  call s:Greek('texGreek','\\psi\>'		,'ψ')
1001611df5b9SBram Moolenaar  call s:Greek('texGreek','\\omega\>'		,'ω')
1002611df5b9SBram Moolenaar  call s:Greek('texGreek','\\Gamma\>'		,'Γ')
1003611df5b9SBram Moolenaar  call s:Greek('texGreek','\\Delta\>'		,'Δ')
1004611df5b9SBram Moolenaar  call s:Greek('texGreek','\\Theta\>'		,'Θ')
1005611df5b9SBram Moolenaar  call s:Greek('texGreek','\\Lambda\>'		,'Λ')
10066c1e1570SBram Moolenaar  call s:Greek('texGreek','\\Xi\>'              ,'Ξ')
1007611df5b9SBram Moolenaar  call s:Greek('texGreek','\\Pi\>'		,'Π')
1008611df5b9SBram Moolenaar  call s:Greek('texGreek','\\Sigma\>'		,'Σ')
1009611df5b9SBram Moolenaar  call s:Greek('texGreek','\\Upsilon\>'		,'Υ')
1010611df5b9SBram Moolenaar  call s:Greek('texGreek','\\Phi\>'		,'Φ')
10116c1e1570SBram Moolenaar  call s:Greek('texGreek','\\Chi\>'		,'Χ')
1012611df5b9SBram Moolenaar  call s:Greek('texGreek','\\Psi\>'		,'Ψ')
1013611df5b9SBram Moolenaar  call s:Greek('texGreek','\\Omega\>'		,'Ω')
1014e0021c79SBram Moolenaar  delfun s:Greek
10154b22cdb0SBram Moolenaar endif
1016611df5b9SBram Moolenaar
1017611df5b9SBram Moolenaar " Superscripts/Subscripts {{{2
1018f391327aSBram Moolenaar if s:tex_conceal =~# 's'
1019f391327aSBram Moolenaar  if s:tex_fast =~# 's'
1020d960d76dSBram Moolenaar   syn region texSuperscript	matchgroup=Delimiter start='\^{'	skip="\\\\\|\\[{}]" end='}'	contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1021d960d76dSBram Moolenaar   syn region texSubscript	matchgroup=Delimiter start='_{'		skip="\\\\\|\\[{}]" end='}'	contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1022ac7bd638SBram Moolenaar  endif
1023541f92d6SBram Moolenaar  " s:SuperSub:
1024611df5b9SBram Moolenaar  fun! s:SuperSub(group,leader,pat,cchar)
102503413f44SBram Moolenaar    if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
10266e932461SBram Moolenaar"     call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1027611df5b9SBram Moolenaar     exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
1028611df5b9SBram Moolenaar     exe 'syn match '.a:group."s '".a:pat        ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
10296e932461SBram Moolenaar    endif
1030611df5b9SBram Moolenaar  endfun
1031611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','0','⁰')
1032611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','1','¹')
1033611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','2','²')
1034611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','3','³')
1035611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','4','⁴')
1036611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','5','⁵')
1037611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','6','⁶')
1038611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','7','⁷')
1039611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','8','⁸')
1040611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','9','⁹')
1041611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','a','ᵃ')
1042611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','b','ᵇ')
1043611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','c','ᶜ')
1044611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','d','ᵈ')
1045611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','e','ᵉ')
1046611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','f','ᶠ')
1047611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','g','ᵍ')
1048611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','h','ʰ')
1049611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','i','ⁱ')
1050611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','j','ʲ')
1051611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','k','ᵏ')
1052611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','l','ˡ')
1053611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','m','ᵐ')
1054611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','n','ⁿ')
1055611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','o','ᵒ')
1056611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','p','ᵖ')
1057611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','r','ʳ')
1058611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','s','ˢ')
1059611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','t','ᵗ')
1060611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','u','ᵘ')
1061611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','v','ᵛ')
1062611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','w','ʷ')
1063611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','x','ˣ')
1064611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','y','ʸ')
1065611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','z','ᶻ')
1066611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','A','ᴬ')
1067611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','B','ᴮ')
1068611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','D','ᴰ')
1069611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','E','ᴱ')
1070611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','G','ᴳ')
1071611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','H','ᴴ')
1072611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','I','ᴵ')
1073611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','J','ᴶ')
1074611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','K','ᴷ')
1075611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','L','ᴸ')
1076611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','M','ᴹ')
1077611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','N','ᴺ')
1078611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','O','ᴼ')
1079611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','P','ᴾ')
1080611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','R','ᴿ')
1081611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','T','ᵀ')
1082611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','U','ᵁ')
1083388a5d4fSBram Moolenaar  call s:SuperSub('texSuperscript','\^','V','ⱽ')
1084611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','W','ᵂ')
10856be7f873SBram Moolenaar  call s:SuperSub('texSuperscript','\^',',','︐')
10866be7f873SBram Moolenaar  call s:SuperSub('texSuperscript','\^',':','︓')
10876be7f873SBram Moolenaar  call s:SuperSub('texSuperscript','\^',';','︔')
1088611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','+','⁺')
1089611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','-','⁻')
1090611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','<','˂')
1091611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','>','˃')
1092611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','/','ˊ')
1093611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','(','⁽')
1094611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^',')','⁾')
1095611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','\.','˙')
1096611df5b9SBram Moolenaar  call s:SuperSub('texSuperscript','\^','=','˭')
1097611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','0','₀')
1098611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','1','₁')
1099611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','2','₂')
1100611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','3','₃')
1101611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','4','₄')
1102611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','5','₅')
1103611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','6','₆')
1104611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','7','₇')
1105611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','8','₈')
1106611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','9','₉')
1107611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','a','ₐ')
1108611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','e','ₑ')
1109802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','h','ₕ')
1110611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','i','ᵢ')
1111802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','j','ⱼ')
1112802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','k','ₖ')
1113802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','l','ₗ')
1114802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','m','ₘ')
1115802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','n','ₙ')
1116611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','o','ₒ')
1117802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','p','ₚ')
1118802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','r','ᵣ')
1119802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','s','ₛ')
1120802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','t','ₜ')
1121611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','u','ᵤ')
1122802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','v','ᵥ')
1123802a0d90SBram Moolenaar  call s:SuperSub('texSubscript','_','x','ₓ')
11246be7f873SBram Moolenaar  call s:SuperSub('texSubscript','_',',','︐')
1125611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','+','₊')
1126611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','-','₋')
1127611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','/','ˏ')
1128611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','(','₍')
1129611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_',')','₎')
1130611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','\.','‸')
1131611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','r','ᵣ')
1132611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','v','ᵥ')
1133611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','x','ₓ')
1134611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1135611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1136611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','\\phi\>'  ,'ᵩ')
1137611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1138611df5b9SBram Moolenaar  call s:SuperSub('texSubscript','_','\\chi\>'  ,'ᵪ')
1139802a0d90SBram Moolenaar
1140e0021c79SBram Moolenaar  delfun s:SuperSub
11414b22cdb0SBram Moolenaar endif
1142611df5b9SBram Moolenaar
1143b0d45e7fSBram Moolenaar " Accented characters and Ligatures: {{{2
1144f391327aSBram Moolenaar if s:tex_conceal =~# 'a'
1145611df5b9SBram Moolenaar  if b:tex_stylish
1146611df5b9SBram Moolenaar   syn match texAccent		"\\[bcdvuH][^a-zA-Z@]"me=e-1
1147611df5b9SBram Moolenaar   syn match texLigature	"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1148b0d45e7fSBram Moolenaar   syn match texLigature	'--'
1149b0d45e7fSBram Moolenaar   syn match texLigature	'---'
1150611df5b9SBram Moolenaar  else
1151e0021c79SBram Moolenaar   fun! s:Accents(chr,...)
1152e0021c79SBram Moolenaar     let i= 1
1153a6878375SBram Moolenaar     for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
1154e0021c79SBram Moolenaar      if i > a:0
1155e0021c79SBram Moolenaar       break
1156e0021c79SBram Moolenaar      endif
11577fc0c065SBram Moolenaar      if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
1158e0021c79SBram Moolenaar       let i= i + 1
1159e0021c79SBram Moolenaar       continue
1160e0021c79SBram Moolenaar      endif
1161f391327aSBram Moolenaar      if accent =~# '\a'
11627fc0c065SBram Moolenaar       exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
11637fc0c065SBram Moolenaar      else
11647fc0c065SBram Moolenaar       exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
11657fc0c065SBram Moolenaar      endif
1166e0021c79SBram Moolenaar      let i= i + 1
1167e0021c79SBram Moolenaar     endfor
1168e0021c79SBram Moolenaar   endfun
1169a6878375SBram Moolenaar   "                  \`  \'  \^  \"  \~  \.  \=  \c  \H  \k  \r  \u  \v
1170a6878375SBram Moolenaar   call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1171a6878375SBram Moolenaar   call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1172a6878375SBram Moolenaar   call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1173a6878375SBram Moolenaar   call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1174a6878375SBram Moolenaar   call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1175a6878375SBram Moolenaar   call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1176a6878375SBram Moolenaar   call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1177a6878375SBram Moolenaar   call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1178a6878375SBram Moolenaar   call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1179a6878375SBram Moolenaar   call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1180a6878375SBram Moolenaar   call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1181a6878375SBram Moolenaar   call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1182a6878375SBram Moolenaar   call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1183a6878375SBram Moolenaar   call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1184a6878375SBram Moolenaar   call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1185a6878375SBram Moolenaar   call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1186a6878375SBram Moolenaar   call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1187a6878375SBram Moolenaar   call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1188a6878375SBram Moolenaar   call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1189a6878375SBram Moolenaar   call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1190a6878375SBram Moolenaar   call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1191a6878375SBram Moolenaar   call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1192a6878375SBram Moolenaar   call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1193a6878375SBram Moolenaar   call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1194a6878375SBram Moolenaar   call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1195a6878375SBram Moolenaar   call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1196a6878375SBram Moolenaar   call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1197a6878375SBram Moolenaar   call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1198a6878375SBram Moolenaar   call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1199a6878375SBram Moolenaar   call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1200a6878375SBram Moolenaar   call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1201a6878375SBram Moolenaar   call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1202a6878375SBram Moolenaar   call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1203a6878375SBram Moolenaar   call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1204a6878375SBram Moolenaar   call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1205a6878375SBram Moolenaar   call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1206a6878375SBram Moolenaar   call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
1207a6878375SBram Moolenaar   call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1208a6878375SBram Moolenaar   "                    \`  \'  \^  \"  \~  \.  \=  \c  \H  \k  \r  \u  \v
1209e0021c79SBram Moolenaar   delfun s:Accents
1210e0021c79SBram Moolenaar   syn match texAccent		'\\aa\>'	conceal cchar=å
1211e0021c79SBram Moolenaar   syn match texAccent		'\\AA\>'	conceal cchar=Å
1212e0021c79SBram Moolenaar   syn match texAccent		'\\o\>'		conceal cchar=ø
1213e0021c79SBram Moolenaar   syn match texAccent		'\\O\>'		conceal cchar=Ø
1214e0021c79SBram Moolenaar   syn match texLigature	'\\AE\>'	conceal cchar=Æ
1215e0021c79SBram Moolenaar   syn match texLigature	'\\ae\>'	conceal cchar=æ
1216e0021c79SBram Moolenaar   syn match texLigature	'\\oe\>'	conceal cchar=œ
1217e0021c79SBram Moolenaar   syn match texLigature	'\\OE\>'	conceal cchar=Œ
1218e0021c79SBram Moolenaar   syn match texLigature	'\\ss\>'	conceal cchar=ß
1219b0d45e7fSBram Moolenaar   syn match texLigature	'--'		conceal cchar=–
1220b0d45e7fSBram Moolenaar   syn match texLigature	'---'		conceal cchar=—
1221611df5b9SBram Moolenaar  endif
1222b2c0350cSBram Moolenaar endif
12234b22cdb0SBram Moolenaarendif
1224b2c0350cSBram Moolenaar
1225b2c0350cSBram Moolenaar" ---------------------------------------------------------------------
1226071d4279SBram Moolenaar" LaTeX synchronization: {{{1
1227071d4279SBram Moolenaarsyn sync maxlines=200
1228071d4279SBram Moolenaarsyn sync minlines=50
1229071d4279SBram Moolenaar
1230071d4279SBram Moolenaarsyn  sync match texSyncStop			groupthere NONE		"%stopzone\>"
1231071d4279SBram Moolenaar
1232071d4279SBram Moolenaar" Synchronization: {{{1
1233071d4279SBram Moolenaar" The $..$ and $$..$$ make for impossible sync patterns
1234071d4279SBram Moolenaar" (one can't tell if a "$$" starts or stops a math zone by itself)
1235071d4279SBram Moolenaar" The following grouptheres coupled with minlines above
1236071d4279SBram Moolenaar" help improve the odds of good syncing.
1237e2719096SBram Moolenaarif !exists("g:tex_no_math")
1238071d4279SBram Moolenaar syn sync match texSyncMathZoneA		groupthere NONE		"\\end{abstract}"
1239071d4279SBram Moolenaar syn sync match texSyncMathZoneA		groupthere NONE		"\\end{center}"
1240071d4279SBram Moolenaar syn sync match texSyncMathZoneA		groupthere NONE		"\\end{description}"
1241071d4279SBram Moolenaar syn sync match texSyncMathZoneA		groupthere NONE		"\\end{enumerate}"
1242071d4279SBram Moolenaar syn sync match texSyncMathZoneA		groupthere NONE		"\\end{itemize}"
1243071d4279SBram Moolenaar syn sync match texSyncMathZoneA		groupthere NONE		"\\end{table}"
1244071d4279SBram Moolenaar syn sync match texSyncMathZoneA		groupthere NONE		"\\end{tabular}"
1245071d4279SBram Moolenaar syn sync match texSyncMathZoneA		groupthere NONE		"\\\(sub\)*section\>"
1246071d4279SBram Moolenaarendif
1247071d4279SBram Moolenaar
1248b2c0350cSBram Moolenaar" ---------------------------------------------------------------------
1249071d4279SBram Moolenaar" Highlighting: {{{1
1250f37506f6SBram Moolenaar
1251f37506f6SBram Moolenaar" Define the default highlighting. {{{1
1252f37506f6SBram Moolenaarif !exists("skip_tex_syntax_inits")
1253f37506f6SBram Moolenaar
1254071d4279SBram Moolenaar  " TeX highlighting groups which should share similar highlighting
12556e932461SBram Moolenaar  if !exists("g:tex_no_error")
1256543b7ef7SBram Moolenaar   if !exists("g:tex_no_math")
1257f37506f6SBram Moolenaar    hi def link texBadMath		texError
1258f37506f6SBram Moolenaar    hi def link texMathDelimBad		texError
1259f37506f6SBram Moolenaar    hi def link texMathError		texError
1260071d4279SBram Moolenaar    if !b:tex_stylish
1261f37506f6SBram Moolenaar      hi def link texOnlyMath		texError
1262071d4279SBram Moolenaar    endif
1263071d4279SBram Moolenaar   endif
1264f37506f6SBram Moolenaar   hi def link texError			Error
1265071d4279SBram Moolenaar  endif
1266071d4279SBram Moolenaar
1267d38b055aSBram Moolenaar  hi texBoldStyle		gui=bold	cterm=bold
1268d38b055aSBram Moolenaar  hi texItalStyle		gui=italic	cterm=italic
1269d38b055aSBram Moolenaar  hi texBoldItalStyle		gui=bold,italic cterm=bold,italic
1270d38b055aSBram Moolenaar  hi texItalBoldStyle		gui=bold,italic cterm=bold,italic
1271723dd946SBram Moolenaar  hi def link texEmphStyle	texItalStyle
1272f37506f6SBram Moolenaar  hi def link texCite		texRefZone
1273f37506f6SBram Moolenaar  hi def link texDefCmd		texDef
1274f37506f6SBram Moolenaar  hi def link texDefName	texDef
1275f37506f6SBram Moolenaar  hi def link texDocType	texCmdName
1276f37506f6SBram Moolenaar  hi def link texDocTypeArgs	texCmdArgs
1277f37506f6SBram Moolenaar  hi def link texInputFileOpt	texCmdArgs
1278f37506f6SBram Moolenaar  hi def link texInputCurlies	texDelimiter
1279f37506f6SBram Moolenaar  hi def link texLigature	texSpecialChar
1280e2719096SBram Moolenaar  if !exists("g:tex_no_math")
1281f37506f6SBram Moolenaar   hi def link texMathDelimSet1	texMathDelim
1282f37506f6SBram Moolenaar   hi def link texMathDelimSet2	texMathDelim
1283f37506f6SBram Moolenaar   hi def link texMathDelimKey	texMathDelim
1284f37506f6SBram Moolenaar   hi def link texMathMatcher	texMath
1285f37506f6SBram Moolenaar   hi def link texAccent	texStatement
1286f37506f6SBram Moolenaar   hi def link texGreek		texStatement
1287f37506f6SBram Moolenaar   hi def link texSuperscript	texStatement
1288f37506f6SBram Moolenaar   hi def link texSubscript	texStatement
1289f37506f6SBram Moolenaar   hi def link texSuperscripts 	texSuperscript
1290f37506f6SBram Moolenaar   hi def link texSubscripts 	texSubscript
1291f37506f6SBram Moolenaar   hi def link texMathSymbol	texStatement
1292f37506f6SBram Moolenaar   hi def link texMathZoneV	texMath
1293f37506f6SBram Moolenaar   hi def link texMathZoneW	texMath
1294f37506f6SBram Moolenaar   hi def link texMathZoneX	texMath
1295f37506f6SBram Moolenaar   hi def link texMathZoneY	texMath
1296f37506f6SBram Moolenaar   hi def link texMathZoneV	texMath
1297f37506f6SBram Moolenaar   hi def link texMathZoneZ	texMath
1298071d4279SBram Moolenaar  endif
1299f37506f6SBram Moolenaar  hi def link texBeginEnd	texCmdName
1300f37506f6SBram Moolenaar  hi def link texBeginEndName	texSection
1301f37506f6SBram Moolenaar  hi def link texSpaceCode	texStatement
1302f37506f6SBram Moolenaar  hi def link texStyleStatement	texStatement
1303f37506f6SBram Moolenaar  hi def link texTypeSize	texType
1304f37506f6SBram Moolenaar  hi def link texTypeStyle	texType
1305071d4279SBram Moolenaar
1306071d4279SBram Moolenaar   " Basic TeX highlighting groups
1307f37506f6SBram Moolenaar  hi def link texCmdArgs	Number
1308f37506f6SBram Moolenaar  hi def link texCmdName	Statement
1309f37506f6SBram Moolenaar  hi def link texComment	Comment
1310f37506f6SBram Moolenaar  hi def link texDef		Statement
1311f37506f6SBram Moolenaar  hi def link texDefParm	Special
1312f37506f6SBram Moolenaar  hi def link texDelimiter	Delimiter
1313f37506f6SBram Moolenaar  hi def link texInput		Special
1314f37506f6SBram Moolenaar  hi def link texInputFile	Special
1315f37506f6SBram Moolenaar  hi def link texLength		Number
1316f37506f6SBram Moolenaar  hi def link texMath		Special
1317f37506f6SBram Moolenaar  hi def link texMathDelim	Statement
1318f37506f6SBram Moolenaar  hi def link texMathOper	Operator
1319f37506f6SBram Moolenaar  hi def link texNewCmd		Statement
1320f37506f6SBram Moolenaar  hi def link texNewEnv		Statement
1321f37506f6SBram Moolenaar  hi def link texOption		Number
1322f37506f6SBram Moolenaar  hi def link texRefZone	Special
1323f37506f6SBram Moolenaar  hi def link texSection	PreCondit
1324f37506f6SBram Moolenaar  hi def link texSpaceCodeChar	Special
1325f37506f6SBram Moolenaar  hi def link texSpecialChar	SpecialChar
1326f37506f6SBram Moolenaar  hi def link texStatement	Statement
1327f37506f6SBram Moolenaar  hi def link texString		String
1328f37506f6SBram Moolenaar  hi def link texTodo		Todo
1329f37506f6SBram Moolenaar  hi def link texType		Type
1330f37506f6SBram Moolenaar  hi def link texZone		PreCondit
1331071d4279SBram Moolenaar
1332071d4279SBram Moolenaarendif
1333071d4279SBram Moolenaar
13341514667aSBram Moolenaar" Cleanup: {{{1
1335a0f849eeSBram Moolenaardelc TexFold
133681af9250SBram Moolenaarunlet s:extfname
1337071d4279SBram Moolenaarlet   b:current_syntax = "tex"
13381514667aSBram Moolenaarlet &cpo               = s:keepcpo
13391514667aSBram Moolenaarunlet s:keepcpo
1340e90ee31cSBram Moolenaar" vim: ts=8 fdm=marker
1341