blob: 57d5a7cd05680a7609237861f3ff8c52746b7785 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: TeX
Bram Moolenaar97d62492012-11-15 21:28:22 +01003" Maintainer: Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
Bram Moolenaarac7bd632013-03-19 11:35:58 +01004" Last Change: Mar 11, 2013
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02005" Version: 78
Bram Moolenaarac7bd632013-03-19 11:35:58 +01006" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
Bram Moolenaar071d4272004-06-13 20:20:40 +00007"
8" Notes: {{{1
9"
10" 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
11" use %stopzone.
12"
13" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
14" by suitable use of %stopzone.
15"
16" 3. If you have a slow computer, you may wish to modify
17"
18" syn sync maxlines=200
19" syn sync minlines=50
20"
21" to values that are more to your liking.
22"
23" 4. There is no match-syncing for $...$ and $$...$$; hence large
24" equation blocks constructed that way may exhibit syncing problems.
25" (there's no difference between begin/end patterns)
26"
27" 5. If you have the variable "g:tex_no_error" defined then none of the
28" lexical error-checking will be done.
29"
30" ie. let g:tex_no_error=1
31
32" Version Clears: {{{1
33" For version 5.x: Clear all syntax items
34" For version 6.x: Quit when a syntax file was already loaded
35if version < 600
36 syntax clear
37elseif exists("b:current_syntax")
38 finish
39endif
Bram Moolenaar15146672011-10-20 22:22:38 +020040let s:keepcpo= &cpo
41set cpo&vim
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020042scriptencoding utf-8
Bram Moolenaar071d4272004-06-13 20:20:40 +000043
44" Define the default highlighting. {{{1
45" For version 5.7 and earlier: only when not done already
46" For version 5.8 and later: only when an item doesn't have highlighting yet
47if version >= 508 || !exists("did_tex_syntax_inits")
48 let did_tex_syntax_inits = 1
49 if version < 508
50 command -nargs=+ HiLink hi link <args>
51 else
52 command -nargs=+ HiLink hi def link <args>
53 endif
54endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +010055if exists("g:tex_no_error") && g:tex_no_error
56 let s:tex_no_error= 1
57endif
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020058
59" by default, enable all region-based highlighting
60let s:tex_fast= "bcmMprsSvV"
61if exists("g:tex_fast")
62 if type(g:tex_fast) != 1
63 " g:tex_fast exists and is not a string, so
64 " turn off all optional region-based highighting
65 let s:tex_fast= ""
66 else
67 let s:tex_fast= g:tex_fast
68 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +010069 let s:tex_no_error= 1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020070else
71 let s:tex_fast= "bcmMprsSvV"
Bram Moolenaar071d4272004-06-13 20:20:40 +000072endif
73
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020074" let user determine which classes of concealment will be supported
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020075" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020076if !exists("g:tex_conceal")
Bram Moolenaard38b0552012-04-25 19:07:41 +020077 let s:tex_conceal= 'abdmgs'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020078else
79 let s:tex_conceal= g:tex_conceal
80endif
81
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000082" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000083" The user may override the normal determination by setting
84" g:tex_stylish to 1 (for "*.sty" mode)
85" or to 0 else (normal "*.tex" mode)
86" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +010087let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +000088if exists("g:tex_stylish")
89 let b:tex_stylish= g:tex_stylish
90elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +010091 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +000092 let b:tex_stylish= 1
93 else
94 let b:tex_stylish= 0
95 endif
96endif
97
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000098" handle folding {{{1
99if !exists("g:tex_fold_enabled")
100 let g:tex_fold_enabled= 0
101elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarab194812005-09-14 21:40:12 +0000102 let g:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000103 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
104endif
105if g:tex_fold_enabled && &fdm == "manual"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200106 setl fdm=syntax
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000107endif
108
Bram Moolenaaradc21822011-04-01 18:03:16 +0200109" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000110" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +0200111" One may override this iskeyword setting by providing
112" g:tex_isk
113if exists("g:tex_isk")
114 exe "setlocal isk=".g:tex_isk
Bram Moolenaar071d4272004-06-13 20:20:40 +0000115else
Bram Moolenaaradc21822011-04-01 18:03:16 +0200116 setlocal isk=48-57,a-z,A-Z,192-255
117endif
118if b:tex_stylish
119 setlocal isk+=@-@
Bram Moolenaar071d4272004-06-13 20:20:40 +0000120endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200121if exists("g:tex_nospell") && g:tex_nospell && !exists("g:tex_comment_nospell")
122 let g:tex_comment_nospell= 1
123endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000124
125" Clusters: {{{1
126" --------
Bram Moolenaard38b0552012-04-25 19:07:41 +0200127syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100128if !exists("s:tex_no_error")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129 syn cluster texCmdGroup add=texMathError
130endif
131syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
Bram Moolenaard38b0552012-04-25 19:07:41 +0200132syn cluster texFoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texNoSpell
133syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell
134syn cluster texItalGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texItalBoldStyle,texNoSpell
Bram Moolenaard960d762011-09-21 19:22:10 +0200135if !exists("g:tex_nospell") || !g:tex_nospell
136 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell
137 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
138else
139 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
140 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
141endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200142syn cluster texPreambleMatchGroup 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
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000143syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144if !exists("tex_no_math")
145 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
146 syn cluster texMatchGroup add=@texMathZones
147 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
148 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
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200149 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100150 if !exists("s:tex_no_error")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151 syn cluster texMathMatchGroup add=texMathError
152 syn cluster texMathZoneGroup add=texMathError
153 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000154 syn cluster texMathZoneGroup add=@NoSpell
155 " following used in the \part \chapter \section \subsection \subsubsection
156 " \paragraph \subparagraph \author \title highlighting
157 syn cluster texDocGroup contains=texPartZone,@texPartGroup
158 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
159 syn cluster texChapterGroup contains=texSectionZone,texParaZone
160 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
161 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
162 syn cluster texSubSubSectionGroup contains=texParaZone
163 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200164 if has("conceal") && &enc == 'utf-8'
Bram Moolenaare0021c72010-07-28 17:25:21 +0200165 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
166 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200167 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168endif
169
170" Try to flag {} and () mismatches: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200171if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100172 if !exists("s:tex_no_error")
173 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup,texError
174 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup,texError,@NoSpell
175 else
176 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup
177 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup
178 endif
179 if !exists("g:tex_nospell") || !g:tex_nospell
180 syn region texParen start="(" end=")" contains=@texMatchGroup,@Spell
181 else
182 syn region texParen start="(" end=")" contains=@texMatchGroup
183 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000184endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100185if !exists("s:tex_no_error")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186 syn match texError "[}\])]"
187endif
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200188if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100189 if !exists("tex_no_math")
190 if !exists("s:tex_no_error")
191 syn match texMathError "}" contained
192 endif
193 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
194 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195endif
196
197" TeX/LaTeX keywords: {{{1
198" Instead of trying to be All Knowing, I just match \..alphameric..
199" Note that *.tex files may not have "@" in their \commands
200if exists("g:tex_tex") || b:tex_stylish
201 syn match texStatement "\\[a-zA-Z@]\+"
202else
203 syn match texStatement "\\\a\+"
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100204 if !exists("s:tex_no_error")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205 syn match texError "\\\a*@[a-zA-Z@]*"
206 endif
207endif
208
209" TeX/LaTeX delimiters: {{{1
210syn match texDelimiter "&"
211syn match texDelimiter "\\\\"
Bram Moolenaard960d762011-09-21 19:22:10 +0200212syn match texDelimiter "[{}]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213
214" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200215syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216
217" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
218if b:tex_stylish
219 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
220 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
221else
222 syn match texAccent "\\[bcdvuH]\A"me=e-1
223 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
224endif
225syn match texAccent "\\[bcdvuH]$"
226syn match texAccent +\\[=^.\~"`']+
227syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
228syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
229
230" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200231syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200232if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100233 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
234 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@NoSpell
235endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000236
237" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200238syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200239if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100240 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
241endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000242
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000243" Preamble syntax-based folding support: {{{1
244if g:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200245 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000246endif
247
Bram Moolenaar071d4272004-06-13 20:20:40 +0000248" TeX input: {{{1
249syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100250syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000251syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
252syn match texInputCurlies "[{}]" contained
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200253if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100254 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
255endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000256
257" Type Styles (LaTeX 2.09): {{{1
258syn match texTypeStyle "\\rm\>"
259syn match texTypeStyle "\\em\>"
260syn match texTypeStyle "\\bf\>"
261syn match texTypeStyle "\\it\>"
262syn match texTypeStyle "\\sl\>"
263syn match texTypeStyle "\\sf\>"
264syn match texTypeStyle "\\sc\>"
265syn match texTypeStyle "\\tt\>"
266
267" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200268if s:tex_conceal !~ 'b'
269 syn match texTypeStyle "\\textbf\>"
270 syn match texTypeStyle "\\textit\>"
271endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272syn match texTypeStyle "\\textmd\>"
273syn match texTypeStyle "\\textrm\>"
274syn match texTypeStyle "\\textsc\>"
275syn match texTypeStyle "\\textsf\>"
276syn match texTypeStyle "\\textsl\>"
277syn match texTypeStyle "\\texttt\>"
278syn match texTypeStyle "\\textup\>"
279syn match texTypeStyle "\\emph\>"
280
281syn match texTypeStyle "\\mathbb\>"
282syn match texTypeStyle "\\mathbf\>"
283syn match texTypeStyle "\\mathcal\>"
284syn match texTypeStyle "\\mathfrak\>"
285syn match texTypeStyle "\\mathit\>"
286syn match texTypeStyle "\\mathnormal\>"
287syn match texTypeStyle "\\mathrm\>"
288syn match texTypeStyle "\\mathsf\>"
289syn match texTypeStyle "\\mathtt\>"
290
291syn match texTypeStyle "\\rmfamily\>"
292syn match texTypeStyle "\\sffamily\>"
293syn match texTypeStyle "\\ttfamily\>"
294
295syn match texTypeStyle "\\itshape\>"
296syn match texTypeStyle "\\scshape\>"
297syn match texTypeStyle "\\slshape\>"
298syn match texTypeStyle "\\upshape\>"
299
300syn match texTypeStyle "\\bfseries\>"
301syn match texTypeStyle "\\mdseries\>"
302
303" Some type sizes: {{{1
304syn match texTypeSize "\\tiny\>"
305syn match texTypeSize "\\scriptsize\>"
306syn match texTypeSize "\\footnotesize\>"
307syn match texTypeSize "\\small\>"
308syn match texTypeSize "\\normalsize\>"
309syn match texTypeSize "\\large\>"
310syn match texTypeSize "\\Large\>"
311syn match texTypeSize "\\LARGE\>"
312syn match texTypeSize "\\huge\>"
313syn match texTypeSize "\\Huge\>"
314
315" Spacecodes (TeX'isms): {{{1
316" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
317syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
318syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
319
320" Sections, subsections, etc: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200321if s:tex_fast =~ 'p'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100322 if !exists("g:tex_nospell") || !g:tex_nospell
323 if g:tex_fold_enabled && has("folding")
324 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup,@Spell
325 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup,@Spell
326 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup,@Spell
327 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup,@Spell
328 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
329 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
330 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texParaGroup,@Spell
331 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@Spell
332 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup,@Spell
333 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup,@Spell
334 else
335 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
336 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
337 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
338 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
339 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
340 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
341 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell
342 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell
343 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
344 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
345 endif
346 else
347 if g:tex_fold_enabled && has("folding")
348 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup
349 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup
350 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup
351 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup
352 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup
353 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSubSectionGroup
354 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texParaGroup
355 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup
356 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup
357 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup
358 else
359 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
360 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
361 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
362 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
363 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
364 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
365 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
366 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
367 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
368 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup
369 endif
370 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000371endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000372
Bram Moolenaard38b0552012-04-25 19:07:41 +0200373" particular support for bold and italic {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200374if s:tex_fast =~ 'b'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100375 if s:tex_conceal =~ 'b'
376 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
377 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
378 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
379 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
380 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200381endif
382
Bram Moolenaar071d4272004-06-13 20:20:40 +0000383" Bad Math (mismatched): {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200384if !exists("g:tex_no_math") && !exists("s:tex_no_error")
Bram Moolenaard960d762011-09-21 19:22:10 +0200385 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000386 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
387 syn match texBadMath "\\[\])]"
388endif
389
390" Math Zones: {{{1
391if !exists("tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000392 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393 " Starred forms are created if starform is true. Starred
394 " forms have syntax group and synchronization groups with a
395 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
396 fun! TexNewMathZone(sfx,mathzone,starform)
397 let grpname = "texMathZone".a:sfx
398 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000399 if g:tex_fold_enabled
400 let foldcmd= " fold"
401 else
402 let foldcmd= ""
403 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000404 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200405 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100406 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
407 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
408 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
409 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100410 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000411 if a:starform
412 let grpname = "texMathZone".a:sfx.'S'
413 let syncname = "texSyncMathZone".a:sfx.'S'
414 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200415 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100416 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
417 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
418 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
419 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100420 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000421 endif
422 endfun
423
424 " Standard Math Zones: {{{2
425 call TexNewMathZone("A","align",1)
426 call TexNewMathZone("B","alignat",1)
427 call TexNewMathZone("C","displaymath",1)
428 call TexNewMathZone("D","eqnarray",1)
429 call TexNewMathZone("E","equation",1)
430 call TexNewMathZone("F","flalign",1)
431 call TexNewMathZone("G","gather",1)
432 call TexNewMathZone("H","math",1)
433 call TexNewMathZone("I","multline",1)
Bram Moolenaard960d762011-09-21 19:22:10 +0200434 call TexNewMathZone("J","subequations",0)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000435 call TexNewMathZone("K","xalignat",1)
436 call TexNewMathZone("L","xxalignat",0)
437
438 " Inline Math Zones: {{{2
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200439 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100440 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
441 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
442 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
443 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
444 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" concealends keepend contains=@texMathZoneGroup
445 else
446 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
447 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
448 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
449 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
450 endif
451 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200452 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000453
454 syn match texMathOper "[_^=]" contained
455
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200456 " Text Inside Math Zones: {{{2
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200457 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100458 if !exists("g:tex_nospell") || !g:tex_nospell
459 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
460 else
461 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
462 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200463 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200464
Bram Moolenaar071d4272004-06-13 20:20:40 +0000465 " \left..something.. and \right..something.. support: {{{2
466 syn match texMathDelimBad contained "\S"
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200467 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm'
468 syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
469 syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200470 let s:texMathDelimList=[
471 \ ['<' , '<'] ,
472 \ ['>' , '>'] ,
473 \ ['(' , '('] ,
474 \ [')' , ')'] ,
475 \ ['\[' , '['] ,
476 \ [']' , ']'] ,
477 \ ['\\{' , '{'] ,
478 \ ['\\}' , '}'] ,
479 \ ['|' , '|'] ,
480 \ ['\\|' , '‖'] ,
481 \ ['\\backslash' , '\'] ,
482 \ ['\\downarrow' , '↓'] ,
483 \ ['\\Downarrow' , '⇓'] ,
484 \ ['\\langle' , '<'] ,
485 \ ['\\lbrace' , '['] ,
486 \ ['\\lceil' , '⌈'] ,
487 \ ['\\lfloor' , '⌊'] ,
488 \ ['\\lgroup' , '⌊'] ,
489 \ ['\\lmoustache' , '⎛'] ,
490 \ ['\\rangle' , '>'] ,
491 \ ['\\rbrace' , ']'] ,
492 \ ['\\rceil' , '⌉'] ,
493 \ ['\\rfloor' , '⌋'] ,
494 \ ['\\rgroup' , '⌋'] ,
495 \ ['\\rmoustache' , '⎞'] ,
496 \ ['\\uparrow' , '↑'] ,
497 \ ['\\Uparrow' , '↑'] ,
498 \ ['\\updownarrow', '↕'] ,
499 \ ['\\Updownarrow', '⇕']]
500 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
501 for texmath in s:texMathDelimList
502 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
503 endfor
504
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200505 else
506 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200507 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
508 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
509 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
510 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
511 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
512 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
513 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
514 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200515 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000516 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
517 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000518endif
519
520" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
521syn match texSpecialChar "\\[$&%#{}_]"
522if b:tex_stylish
523 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
524else
525 syn match texSpecialChar "\\[SP@]\A"me=e-1
526endif
527syn match texSpecialChar "\\\\"
528if !exists("tex_no_math")
529 syn match texOnlyMath "[_^]"
530endif
531syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
532
533" Comments: {{{1
534" Normal TeX LaTeX : %....
535" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000536if !exists("g:tex_comment_nospell") || !g:tex_comment_nospell
537 syn cluster texCommentGroup contains=texTodo,@Spell
538else
539 syn cluster texCommentGroup contains=texTodo,@NoSpell
540endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000541syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000542syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000543syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100544if s:extfname == "dtx"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000545 syn match texComment "\^\^A.*$" contains=@texCommentGroup
546 syn match texComment "^%\+" contains=@texCommentGroup
547else
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000548 if g:tex_fold_enabled
549 " allows syntax-folding of 2 or more contiguous comment lines
550 " single-line comments are not folded
Bram Moolenaard38b0552012-04-25 19:07:41 +0200551 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200552 if s:tex_fast =~ 'c'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100553 syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' fold
554 syn region texNoSpell contained fold matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
555 endif
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000556 else
Bram Moolenaard38b0552012-04-25 19:07:41 +0200557 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200558 if s:tex_fast =~ 'c'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100559 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
560 endif
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000561 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000562endif
563
564" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200565" will appropriately terminate.
566" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200567if s:tex_fast =~ 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100568 if exists("g:tex_verbspell") && g:tex_verbspell
569 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
570 " listings package:
571 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
572 if version < 600
573 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
574 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200575 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100576 if b:tex_stylish
577 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
578 else
579 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
580 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200581 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100582 else
583 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
584 if version < 600
585 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
586 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200587 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100588 if b:tex_stylish
589 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
590 else
591 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
592 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200593 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100594 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000595endif
596
597" Tex Reference Zones: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200598if s:tex_fast =~ 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100599 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
600 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
601 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
602 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
603 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
604 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
605 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
606 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
607endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200608syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000609
610" Handle newcommand, newenvironment : {{{1
611syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200612if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100613 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
614 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
615 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
616endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000617syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200618if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100619 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
620 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
621 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
622endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000623
624" Definitions/Commands: {{{1
625syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
626if b:tex_stylish
627 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
628 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
629else
630 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
631 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
632endif
633syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
634syn match texDefParm contained "#\d\+"
635
636" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000637syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000638
639" TeX String Delimiters: {{{1
640syn match texString "\(``\|''\|,,\)"
641
Bram Moolenaar5c736222010-01-06 20:54:52 +0100642" makeatletter -- makeatother sections
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100643if !exists("s:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200644 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100645 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
646 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100647 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200648 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100649 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
650 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
651 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100652endif
653
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200654" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200655if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200656
657 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200658 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200659 if s:tex_conceal =~ 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200660 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200661 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200662 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100663 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200664 \ ['angle' , '∠'],
665 \ ['approx' , '≈'],
666 \ ['ast' , '∗'],
667 \ ['asymp' , '≍'],
668 \ ['backepsilon' , '∍'],
669 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200670 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200671 \ ['barwedge' , '⊼'],
672 \ ['because' , '∵'],
673 \ ['between' , '≬'],
674 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100675 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200676 \ ['bigcup' , '∪'],
677 \ ['bigodot' , '⊙'],
678 \ ['bigoplus' , '⊕'],
679 \ ['bigotimes' , '⊗'],
680 \ ['bigsqcup' , '⊔'],
681 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100682 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200683 \ ['bigvee' , '⋁'],
684 \ ['bigwedge' , '⋀'],
685 \ ['blacksquare' , '∎'],
686 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100687 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200688 \ ['boxdot' , '⊡'],
689 \ ['boxminus' , '⊟'],
690 \ ['boxplus' , '⊞'],
691 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100692 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200693 \ ['bumpeq' , '≏'],
694 \ ['Bumpeq' , '≎'],
695 \ ['cap' , '∩'],
696 \ ['Cap' , '⋒'],
697 \ ['cdot' , '·'],
698 \ ['cdots' , '⋯'],
699 \ ['circ' , '∘'],
700 \ ['circeq' , '≗'],
701 \ ['circlearrowleft', '↺'],
702 \ ['circlearrowright', '↻'],
703 \ ['circledast' , '⊛'],
704 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200705 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200706 \ ['complement' , '∁'],
707 \ ['cong' , '≅'],
708 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200709 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200710 \ ['cup' , '∪'],
711 \ ['Cup' , '⋓'],
712 \ ['curlyeqprec' , '⋞'],
713 \ ['curlyeqsucc' , '⋟'],
714 \ ['curlyvee' , '⋎'],
715 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100716 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200717 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100718 \ ['ddagger' , '‡'],
719 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200720 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200721 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200722 \ ['div' , '÷'],
723 \ ['doteq' , '≐'],
724 \ ['doteqdot' , '≑'],
725 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100726 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200727 \ ['dotsb' , '⋯'],
728 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200729 \ ['dotsi' , '⋯'],
730 \ ['dotso' , '…'],
731 \ ['doublebarwedge' , '⩞'],
732 \ ['downarrow' , '↓'],
733 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100734 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200735 \ ['emptyset' , '∅'],
736 \ ['eqcirc' , '≖'],
737 \ ['eqsim' , '≂'],
738 \ ['eqslantgtr' , '⪖'],
739 \ ['eqslantless' , '⪕'],
740 \ ['equiv' , '≡'],
741 \ ['exists' , '∃'],
742 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200743 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200744 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100745 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200746 \ ['ge' , '≥'],
747 \ ['geq' , '≥'],
748 \ ['geqq' , '≧'],
749 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100750 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200751 \ ['gneqq' , '≩'],
752 \ ['gtrdot' , '⋗'],
753 \ ['gtreqless' , '⋛'],
754 \ ['gtrless' , '≷'],
755 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200756 \ ['hbar' , 'ℏ'],
757 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200758 \ ['hookleftarrow' , '↩'],
759 \ ['hookrightarrow' , '↪'],
760 \ ['iiint' , '∭'],
761 \ ['iint' , '∬'],
762 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200763 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200764 \ ['in' , '∈'],
765 \ ['infty' , '∞'],
766 \ ['int' , '∫'],
767 \ ['lceil' , '⌈'],
768 \ ['ldots' , '…'],
769 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100770 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200771 \ ['left(' , '('],
772 \ ['left\[' , '['],
773 \ ['left\\{' , '{'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100774 \ ['leftarrow' , '⟵'],
775 \ ['Leftarrow' , '⟸'],
776 \ ['leftarrowtail' , '↢'],
777 \ ['leftharpoondown', '↽'],
778 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100779 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100780 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200781 \ ['leftrightsquigarrow', '↭'],
782 \ ['leftthreetimes' , '⋋'],
783 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100784 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200785 \ ['leqq' , '≦'],
786 \ ['lessdot' , '⋖'],
787 \ ['lesseqgtr' , '⋚'],
788 \ ['lesssim' , '≲'],
789 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100790 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200791 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200792 \ ['lneqq' , '≨'],
793 \ ['ltimes' , '⋉'],
794 \ ['mapsto' , '↦'],
795 \ ['measuredangle' , '∡'],
796 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100797 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200798 \ ['mp' , '∓'],
799 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200800 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200801 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200802 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100803 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200804 \ ['neg' , '¬'],
805 \ ['neq' , '≠'],
806 \ ['nexists' , '∄'],
807 \ ['ngeq' , '≱'],
808 \ ['ngeqq' , '≱'],
809 \ ['ngtr' , '≯'],
810 \ ['ni' , '∋'],
811 \ ['nleftarrow' , '↚'],
812 \ ['nLeftarrow' , '⇍'],
813 \ ['nLeftrightarrow', '⇎'],
814 \ ['nleq' , '≰'],
815 \ ['nleqq' , '≰'],
816 \ ['nless' , '≮'],
817 \ ['nmid' , '∤'],
818 \ ['notin' , '∉'],
819 \ ['nprec' , '⊀'],
820 \ ['nrightarrow' , '↛'],
821 \ ['nRightarrow' , '⇏'],
822 \ ['nsim' , '≁'],
823 \ ['nsucc' , '⊁'],
824 \ ['ntriangleleft' , '⋪'],
825 \ ['ntrianglelefteq', '⋬'],
826 \ ['ntriangleright' , '⋫'],
827 \ ['ntrianglerighteq', '⋭'],
828 \ ['nvdash' , '⊬'],
829 \ ['nvDash' , '⊭'],
830 \ ['nVdash' , '⊮'],
831 \ ['nwarrow' , '↖'],
832 \ ['odot' , '⊙'],
833 \ ['oint' , '∮'],
834 \ ['ominus' , '⊖'],
835 \ ['oplus' , '⊕'],
836 \ ['oslash' , '⊘'],
837 \ ['otimes' , '⊗'],
838 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200839 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100840 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200841 \ ['partial' , '∂'],
842 \ ['perp' , '⊥'],
843 \ ['pitchfork' , '⋔'],
844 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200845 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100846 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200847 \ ['preccurlyeq' , '≼'],
848 \ ['preceq' , '⪯'],
849 \ ['precnapprox' , '⪹'],
850 \ ['precneqq' , '⪵'],
851 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200852 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200853 \ ['prod' , '∏'],
854 \ ['propto' , '∝'],
855 \ ['rceil' , '⌉'],
856 \ ['Re' , 'ℜ'],
857 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200858 \ ['right)' , ')'],
859 \ ['right]' , ']'],
860 \ ['right\\}' , '}'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100861 \ ['rightarrow' , '⟶'],
862 \ ['Rightarrow' , '⟹'],
863 \ ['rightarrowtail' , '↣'],
864 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200865 \ ['rightsquigarrow', '↝'],
866 \ ['rightthreetimes', '⋌'],
867 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200868 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200869 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200870 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200871 \ ['searrow' , '↘'],
872 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200873 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200874 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100875 \ ['simeq' , '⋍'],
876 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200877 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200878 \ ['sphericalangle' , '∢'],
879 \ ['sqcap' , '⊓'],
880 \ ['sqcup' , '⊔'],
881 \ ['sqsubset' , '⊏'],
882 \ ['sqsubseteq' , '⊑'],
883 \ ['sqsupset' , '⊐'],
884 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100885 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200886 \ ['subset' , '⊂'],
887 \ ['Subset' , '⋐'],
888 \ ['subseteq' , '⊆'],
889 \ ['subseteqq' , '⫅'],
890 \ ['subsetneq' , '⊊'],
891 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200892 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100893 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200894 \ ['succcurlyeq' , '≽'],
895 \ ['succeq' , '⪰'],
896 \ ['succnapprox' , '⪺'],
897 \ ['succneqq' , '⪶'],
898 \ ['succsim' , '≿'],
899 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100900 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200901 \ ['Supset' , '⋑'],
902 \ ['supseteq' , '⊇'],
903 \ ['supseteqq' , '⫆'],
904 \ ['supsetneq' , '⊋'],
905 \ ['supsetneqq' , '⫌'],
906 \ ['surd' , '√'],
907 \ ['swarrow' , '↙'],
908 \ ['therefore' , '∴'],
909 \ ['times' , '×'],
910 \ ['to' , '→'],
911 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200912 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200913 \ ['triangleleft' , '⊲'],
914 \ ['trianglelefteq' , '⊴'],
915 \ ['triangleq' , '≜'],
916 \ ['triangleright' , '⊳'],
917 \ ['trianglerighteq', '⊵'],
918 \ ['twoheadleftarrow', '↞'],
919 \ ['twoheadrightarrow', '↠'],
920 \ ['uparrow' , '↑'],
921 \ ['Uparrow' , '⇑'],
922 \ ['updownarrow' , '↕'],
923 \ ['Updownarrow' , '⇕'],
924 \ ['varnothing' , '∅'],
925 \ ['vartriangle' , '∆'],
926 \ ['vdash' , '⊢'],
927 \ ['vDash' , '⊨'],
928 \ ['Vdash' , '⊩'],
929 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200930 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100931 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200932 \ ['Vvdash' , '⊪'],
933 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200934 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200935 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100936" \ ['jmath' , 'X']
937" \ ['uminus' , 'X']
938" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200939 for texmath in s:texMathList
Bram Moolenaar81af9252010-12-10 20:35:50 +0100940 if texmath[0] =~ '\w$'
941 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
942 else
943 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
944 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200945 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200946
947 if &ambw == "double"
948 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
949 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
950 else
951 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
952 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
953 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200954
955 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
956 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
957 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
958 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
959 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
960 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
961 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
962 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
963 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
964 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
965 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
966 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
967 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
968 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
969 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
970 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
971 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
972 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
973 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
974 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200975 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200976
977 " Greek {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200978 if s:tex_conceal =~ 'g'
979 fun! s:Greek(group,pat,cchar)
980 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
981 endfun
982 call s:Greek('texGreek','\\alpha\>' ,'α')
983 call s:Greek('texGreek','\\beta\>' ,'β')
984 call s:Greek('texGreek','\\gamma\>' ,'γ')
985 call s:Greek('texGreek','\\delta\>' ,'δ')
986 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
987 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
988 call s:Greek('texGreek','\\zeta\>' ,'ζ')
989 call s:Greek('texGreek','\\eta\>' ,'η')
990 call s:Greek('texGreek','\\theta\>' ,'θ')
991 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
992 call s:Greek('texGreek','\\kappa\>' ,'κ')
993 call s:Greek('texGreek','\\lambda\>' ,'λ')
994 call s:Greek('texGreek','\\mu\>' ,'μ')
995 call s:Greek('texGreek','\\nu\>' ,'ν')
996 call s:Greek('texGreek','\\xi\>' ,'ξ')
997 call s:Greek('texGreek','\\pi\>' ,'π')
998 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
999 call s:Greek('texGreek','\\rho\>' ,'ρ')
1000 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1001 call s:Greek('texGreek','\\sigma\>' ,'σ')
1002 call s:Greek('texGreek','\\varsigma\>' ,'ς')
1003 call s:Greek('texGreek','\\tau\>' ,'τ')
1004 call s:Greek('texGreek','\\upsilon\>' ,'υ')
1005 call s:Greek('texGreek','\\phi\>' ,'φ')
1006 call s:Greek('texGreek','\\varphi\>' ,'ϕ')
1007 call s:Greek('texGreek','\\chi\>' ,'χ')
1008 call s:Greek('texGreek','\\psi\>' ,'ψ')
1009 call s:Greek('texGreek','\\omega\>' ,'ω')
1010 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1011 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1012 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1013 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1014 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1015 call s:Greek('texGreek','\\Pi\>' ,'Π')
1016 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1017 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1018 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1019 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1020 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1021 delfun s:Greek
1022 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001023
1024 " Superscripts/Subscripts {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001025 if s:tex_conceal =~ 's'
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001026 if s:tex_fast =~ 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001027 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1028 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1029 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001030 fun! s:SuperSub(group,leader,pat,cchar)
1031 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
1032 exe 'syn match '.a:group."s '".a:pat."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
1033 endfun
1034 call s:SuperSub('texSuperscript','\^','0','⁰')
1035 call s:SuperSub('texSuperscript','\^','1','¹')
1036 call s:SuperSub('texSuperscript','\^','2','²')
1037 call s:SuperSub('texSuperscript','\^','3','³')
1038 call s:SuperSub('texSuperscript','\^','4','⁴')
1039 call s:SuperSub('texSuperscript','\^','5','⁵')
1040 call s:SuperSub('texSuperscript','\^','6','⁶')
1041 call s:SuperSub('texSuperscript','\^','7','⁷')
1042 call s:SuperSub('texSuperscript','\^','8','⁸')
1043 call s:SuperSub('texSuperscript','\^','9','⁹')
1044 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1045 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1046 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1047 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1048 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1049 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1050 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1051 call s:SuperSub('texSuperscript','\^','h','ʰ')
1052 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1053 call s:SuperSub('texSuperscript','\^','j','ʲ')
1054 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1055 call s:SuperSub('texSuperscript','\^','l','ˡ')
1056 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1057 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1058 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1059 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1060 call s:SuperSub('texSuperscript','\^','r','ʳ')
1061 call s:SuperSub('texSuperscript','\^','s','ˢ')
1062 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1063 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1064 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1065 call s:SuperSub('texSuperscript','\^','w','ʷ')
1066 call s:SuperSub('texSuperscript','\^','x','ˣ')
1067 call s:SuperSub('texSuperscript','\^','y','ʸ')
1068 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1069 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1070 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1071 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1072 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1073 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1074 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1075 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1076 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1077 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1078 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1079 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1080 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1081 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1082 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1083 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1084 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1085 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1086 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001087 call s:SuperSub('texSuperscript','\^',',','︐')
1088 call s:SuperSub('texSuperscript','\^',':','︓')
1089 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001090 call s:SuperSub('texSuperscript','\^','+','⁺')
1091 call s:SuperSub('texSuperscript','\^','-','⁻')
1092 call s:SuperSub('texSuperscript','\^','<','˂')
1093 call s:SuperSub('texSuperscript','\^','>','˃')
1094 call s:SuperSub('texSuperscript','\^','/','ˊ')
1095 call s:SuperSub('texSuperscript','\^','(','⁽')
1096 call s:SuperSub('texSuperscript','\^',')','⁾')
1097 call s:SuperSub('texSuperscript','\^','\.','˙')
1098 call s:SuperSub('texSuperscript','\^','=','˭')
1099 call s:SuperSub('texSubscript','_','0','₀')
1100 call s:SuperSub('texSubscript','_','1','₁')
1101 call s:SuperSub('texSubscript','_','2','₂')
1102 call s:SuperSub('texSubscript','_','3','₃')
1103 call s:SuperSub('texSubscript','_','4','₄')
1104 call s:SuperSub('texSubscript','_','5','₅')
1105 call s:SuperSub('texSubscript','_','6','₆')
1106 call s:SuperSub('texSubscript','_','7','₇')
1107 call s:SuperSub('texSubscript','_','8','₈')
1108 call s:SuperSub('texSubscript','_','9','₉')
1109 call s:SuperSub('texSubscript','_','a','ₐ')
1110 call s:SuperSub('texSubscript','_','e','ₑ')
1111 call s:SuperSub('texSubscript','_','i','ᵢ')
1112 call s:SuperSub('texSubscript','_','o','ₒ')
1113 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001114 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001115 call s:SuperSub('texSubscript','_','+','₊')
1116 call s:SuperSub('texSubscript','_','-','₋')
1117 call s:SuperSub('texSubscript','_','/','ˏ')
1118 call s:SuperSub('texSubscript','_','(','₍')
1119 call s:SuperSub('texSubscript','_',')','₎')
1120 call s:SuperSub('texSubscript','_','\.','‸')
1121 call s:SuperSub('texSubscript','_','r','ᵣ')
1122 call s:SuperSub('texSubscript','_','v','ᵥ')
1123 call s:SuperSub('texSubscript','_','x','ₓ')
1124 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1125 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1126 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1127 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1128 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
1129 delfun s:SuperSub
1130 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001131
1132 " Accented characters: {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001133 if s:tex_conceal =~ 'a'
1134 if b:tex_stylish
1135 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1136 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1137 else
1138 fun! s:Accents(chr,...)
1139 let i= 1
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001140 for accent in ["`","\\'","^",'"','\~','\.',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001141 if i > a:0
1142 break
1143 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001144 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001145 let i= i + 1
1146 continue
1147 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001148 if accent =~ '\a'
1149 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1150 else
1151 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1152 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001153 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001154 endfor
1155 endfun
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001156 " \` \' \^ \" \~ \. \c \H \k \r \u \v
Bram Moolenaard960d762011-09-21 19:22:10 +02001157 call s:Accents('a','à','á','â','ä','ã','ȧ',' ',' ','ą','å','ă','ă')
1158 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ',' ',' ','Ą','Å','Ă','Ă')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001159 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ','ç',' ',' ',' ',' ','č')
1160 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ','Ç',' ',' ',' ',' ','Č')
1161 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1162 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1163 call s:Accents('e','è','é','ê','ë','ẽ','ė','ȩ',' ','ę',' ','ĕ','ě')
1164 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ȩ',' ','Ę',' ','Ĕ','Ě')
Bram Moolenaard960d762011-09-21 19:22:10 +02001165 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ','ģ',' ',' ',' ','ğ',' ')
1166 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ','Ģ',' ',' ',' ','Ğ',' ')
1167 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1168 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001169 call s:Accents('i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ')
1170 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ',' ',' ',' ',' ','Ĭ',' ')
Bram Moolenaard960d762011-09-21 19:22:10 +02001171 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1172 call s:Accents('k',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ',' ')
1173 call s:Accents('K',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ',' ')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001174 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1175 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1176 call s:Accents('n',' ','ń',' ',' ','ñ',' ','ņ',' ',' ',' ',' ','ň')
1177 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ','Ņ',' ',' ',' ',' ','Ň')
1178 call s:Accents('o','ò','ó','ô','ö','õ','ȯ',' ','ő','ǫ',' ','ŏ',' ')
1179 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ',' ','Ő','Ǫ',' ','Ŏ',' ')
1180 call s:Accents('r',' ','ŕ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1181 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
Bram Moolenaard960d762011-09-21 19:22:10 +02001182 call s:Accents('s',' ','ś','ŝ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001183 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1184 call s:Accents('t',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1185 call s:Accents('T',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
Bram Moolenaard960d762011-09-21 19:22:10 +02001186 call s:Accents('u','ù','ú','û','ü','ũ',' ',' ','ű','ų','ů','ŭ','ǔ')
1187 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ',' ','Ű','Ų','Ů','Ŭ','Ǔ')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001188 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1189 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1190 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ')
1191 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ')
1192 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ','ž')
1193 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ','Ž')
1194 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ')
1195 " \` \' \^ \" \~ \. \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001196 delfun s:Accents
1197 syn match texAccent '\\aa\>' conceal cchar=å
1198 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001199 syn match texAccent '\\o\>' conceal cchar=ø
1200 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001201 syn match texLigature '\\AE\>' conceal cchar=Æ
1202 syn match texLigature '\\ae\>' conceal cchar=æ
1203 syn match texLigature '\\oe\>' conceal cchar=œ
1204 syn match texLigature '\\OE\>' conceal cchar=Œ
1205 syn match texLigature '\\ss\>' conceal cchar=ß
1206 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001207 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001208endif
1209
1210" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001211" LaTeX synchronization: {{{1
1212syn sync maxlines=200
1213syn sync minlines=50
1214
1215syn sync match texSyncStop groupthere NONE "%stopzone\>"
1216
1217" Synchronization: {{{1
1218" The $..$ and $$..$$ make for impossible sync patterns
1219" (one can't tell if a "$$" starts or stops a math zone by itself)
1220" The following grouptheres coupled with minlines above
1221" help improve the odds of good syncing.
1222if !exists("tex_no_math")
1223 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1224 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1225 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1226 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1227 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1228 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1229 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1230 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1231endif
1232
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001233" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001234" Highlighting: {{{1
1235if did_tex_syntax_inits == 1
1236 let did_tex_syntax_inits= 2
1237 " TeX highlighting groups which should share similar highlighting
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001238 if !exists("s:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001239 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001240 HiLink texBadMath texError
1241 HiLink texMathDelimBad texError
1242 HiLink texMathError texError
1243 if !b:tex_stylish
1244 HiLink texOnlyMath texError
1245 endif
1246 endif
1247 HiLink texError Error
1248 endif
1249
Bram Moolenaard38b0552012-04-25 19:07:41 +02001250 hi texBoldStyle gui=bold cterm=bold
1251 hi texItalStyle gui=italic cterm=italic
1252 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1253 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaard960d762011-09-21 19:22:10 +02001254 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001255 HiLink texDefCmd texDef
1256 HiLink texDefName texDef
1257 HiLink texDocType texCmdName
1258 HiLink texDocTypeArgs texCmdArgs
1259 HiLink texInputFileOpt texCmdArgs
1260 HiLink texInputCurlies texDelimiter
1261 HiLink texLigature texSpecialChar
1262 if !exists("tex_no_math")
1263 HiLink texMathDelimSet1 texMathDelim
1264 HiLink texMathDelimSet2 texMathDelim
1265 HiLink texMathDelimKey texMathDelim
1266 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001267 HiLink texAccent texStatement
1268 HiLink texGreek texStatement
1269 HiLink texSuperscript texStatement
1270 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001271 HiLink texSuperscripts texSuperscript
1272 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001273 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001274 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001275 HiLink texMathZoneW texMath
1276 HiLink texMathZoneX texMath
1277 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001278 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001279 HiLink texMathZoneZ texMath
1280 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +02001281 HiLink texBeginEnd texCmdName
1282 HiLink texBeginEndName texSection
Bram Moolenaar071d4272004-06-13 20:20:40 +00001283 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001284 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001285 HiLink texTypeSize texType
1286 HiLink texTypeStyle texType
1287
1288 " Basic TeX highlighting groups
1289 HiLink texCmdArgs Number
1290 HiLink texCmdName Statement
1291 HiLink texComment Comment
1292 HiLink texDef Statement
1293 HiLink texDefParm Special
1294 HiLink texDelimiter Delimiter
1295 HiLink texInput Special
1296 HiLink texInputFile Special
1297 HiLink texLength Number
1298 HiLink texMath Special
1299 HiLink texMathDelim Statement
1300 HiLink texMathOper Operator
1301 HiLink texNewCmd Statement
1302 HiLink texNewEnv Statement
1303 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001304 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001305 HiLink texSection PreCondit
1306 HiLink texSpaceCodeChar Special
1307 HiLink texSpecialChar SpecialChar
1308 HiLink texStatement Statement
1309 HiLink texString String
1310 HiLink texTodo Todo
1311 HiLink texType Type
1312 HiLink texZone PreCondit
1313
1314 delcommand HiLink
1315endif
1316
Bram Moolenaar15146672011-10-20 22:22:38 +02001317" Cleanup: {{{1
Bram Moolenaar81af9252010-12-10 20:35:50 +01001318unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001319let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001320let &cpo = s:keepcpo
1321unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001322" vim: ts=8 fdm=marker