blob: 7bb28159869d514973c60f5cbca57016e3e5c63b [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 Moolenaarbc488a72013-07-05 21:01:22 +02004" Last Change: Jun 24, 2013
5" Version: 79
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 Moolenaarbc488a72013-07-05 21:01:22 +020077 let s:tex_conceal= 'abdmgsS'
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"
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200532if s:tex_conceal !~ 'S'
533 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
534 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
535 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
536 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
537 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
538endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000539
540" Comments: {{{1
541" Normal TeX LaTeX : %....
542" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000543if !exists("g:tex_comment_nospell") || !g:tex_comment_nospell
544 syn cluster texCommentGroup contains=texTodo,@Spell
545else
546 syn cluster texCommentGroup contains=texTodo,@NoSpell
547endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000548syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000549syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000550syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100551if s:extfname == "dtx"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000552 syn match texComment "\^\^A.*$" contains=@texCommentGroup
553 syn match texComment "^%\+" contains=@texCommentGroup
554else
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000555 if g:tex_fold_enabled
556 " allows syntax-folding of 2 or more contiguous comment lines
557 " single-line comments are not folded
Bram Moolenaard38b0552012-04-25 19:07:41 +0200558 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200559 if s:tex_fast =~ 'c'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100560 syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' fold
561 syn region texNoSpell contained fold matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
562 endif
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000563 else
Bram Moolenaard38b0552012-04-25 19:07:41 +0200564 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200565 if s:tex_fast =~ 'c'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100566 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
567 endif
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000568 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000569endif
570
571" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200572" will appropriately terminate.
573" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200574if s:tex_fast =~ 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100575 if exists("g:tex_verbspell") && g:tex_verbspell
576 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
577 " listings package:
578 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
579 if version < 600
580 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
581 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200582 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100583 if b:tex_stylish
584 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
585 else
586 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
587 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200588 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100589 else
590 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
591 if version < 600
592 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
593 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200594 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100595 if b:tex_stylish
596 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
597 else
598 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
599 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200600 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100601 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000602endif
603
604" Tex Reference Zones: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200605if s:tex_fast =~ 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100606 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
607 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
608 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
609 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
610 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
611 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
612 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
613 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
614endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200615syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000616
617" Handle newcommand, newenvironment : {{{1
618syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200619if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100620 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
621 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
622 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
623endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000624syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200625if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100626 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
627 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
628 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
629endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000630
631" Definitions/Commands: {{{1
632syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
633if b:tex_stylish
634 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
635 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
636else
637 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
638 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
639endif
640syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
641syn match texDefParm contained "#\d\+"
642
643" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000644syn 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 +0000645
646" TeX String Delimiters: {{{1
647syn match texString "\(``\|''\|,,\)"
648
Bram Moolenaar5c736222010-01-06 20:54:52 +0100649" makeatletter -- makeatother sections
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100650if !exists("s:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200651 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100652 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
653 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100654 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200655 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100656 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
657 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
658 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100659endif
660
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200661" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200662if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200663
664 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200665 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200666 if s:tex_conceal =~ 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200667 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200668 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200669 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100670 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200671 \ ['angle' , '∠'],
672 \ ['approx' , '≈'],
673 \ ['ast' , '∗'],
674 \ ['asymp' , '≍'],
675 \ ['backepsilon' , '∍'],
676 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200677 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200678 \ ['barwedge' , '⊼'],
679 \ ['because' , '∵'],
680 \ ['between' , '≬'],
681 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100682 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200683 \ ['bigcup' , '∪'],
684 \ ['bigodot' , '⊙'],
685 \ ['bigoplus' , '⊕'],
686 \ ['bigotimes' , '⊗'],
687 \ ['bigsqcup' , '⊔'],
688 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100689 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200690 \ ['bigvee' , '⋁'],
691 \ ['bigwedge' , '⋀'],
692 \ ['blacksquare' , '∎'],
693 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100694 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200695 \ ['boxdot' , '⊡'],
696 \ ['boxminus' , '⊟'],
697 \ ['boxplus' , '⊞'],
698 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100699 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200700 \ ['bumpeq' , '≏'],
701 \ ['Bumpeq' , '≎'],
702 \ ['cap' , '∩'],
703 \ ['Cap' , '⋒'],
704 \ ['cdot' , '·'],
705 \ ['cdots' , '⋯'],
706 \ ['circ' , '∘'],
707 \ ['circeq' , '≗'],
708 \ ['circlearrowleft', '↺'],
709 \ ['circlearrowright', '↻'],
710 \ ['circledast' , '⊛'],
711 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200712 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200713 \ ['complement' , '∁'],
714 \ ['cong' , '≅'],
715 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200716 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200717 \ ['cup' , '∪'],
718 \ ['Cup' , '⋓'],
719 \ ['curlyeqprec' , '⋞'],
720 \ ['curlyeqsucc' , '⋟'],
721 \ ['curlyvee' , '⋎'],
722 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100723 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200724 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100725 \ ['ddagger' , '‡'],
726 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200727 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200728 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200729 \ ['div' , '÷'],
730 \ ['doteq' , '≐'],
731 \ ['doteqdot' , '≑'],
732 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100733 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200734 \ ['dotsb' , '⋯'],
735 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200736 \ ['dotsi' , '⋯'],
737 \ ['dotso' , '…'],
738 \ ['doublebarwedge' , '⩞'],
739 \ ['downarrow' , '↓'],
740 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100741 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200742 \ ['emptyset' , '∅'],
743 \ ['eqcirc' , '≖'],
744 \ ['eqsim' , '≂'],
745 \ ['eqslantgtr' , '⪖'],
746 \ ['eqslantless' , '⪕'],
747 \ ['equiv' , '≡'],
748 \ ['exists' , '∃'],
749 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200750 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200751 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100752 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200753 \ ['ge' , '≥'],
754 \ ['geq' , '≥'],
755 \ ['geqq' , '≧'],
756 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100757 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200758 \ ['gneqq' , '≩'],
759 \ ['gtrdot' , '⋗'],
760 \ ['gtreqless' , '⋛'],
761 \ ['gtrless' , '≷'],
762 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200763 \ ['hbar' , 'ℏ'],
764 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200765 \ ['hookleftarrow' , '↩'],
766 \ ['hookrightarrow' , '↪'],
767 \ ['iiint' , '∭'],
768 \ ['iint' , '∬'],
769 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200770 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200771 \ ['in' , '∈'],
772 \ ['infty' , '∞'],
773 \ ['int' , '∫'],
774 \ ['lceil' , '⌈'],
775 \ ['ldots' , '…'],
776 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100777 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200778 \ ['left(' , '('],
779 \ ['left\[' , '['],
780 \ ['left\\{' , '{'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100781 \ ['leftarrow' , '⟵'],
782 \ ['Leftarrow' , '⟸'],
783 \ ['leftarrowtail' , '↢'],
784 \ ['leftharpoondown', '↽'],
785 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100786 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100787 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200788 \ ['leftrightsquigarrow', '↭'],
789 \ ['leftthreetimes' , '⋋'],
790 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100791 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200792 \ ['leqq' , '≦'],
793 \ ['lessdot' , '⋖'],
794 \ ['lesseqgtr' , '⋚'],
795 \ ['lesssim' , '≲'],
796 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100797 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200798 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200799 \ ['lneqq' , '≨'],
800 \ ['ltimes' , '⋉'],
801 \ ['mapsto' , '↦'],
802 \ ['measuredangle' , '∡'],
803 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100804 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200805 \ ['mp' , '∓'],
806 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200807 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200808 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200809 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100810 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200811 \ ['neg' , '¬'],
812 \ ['neq' , '≠'],
813 \ ['nexists' , '∄'],
814 \ ['ngeq' , '≱'],
815 \ ['ngeqq' , '≱'],
816 \ ['ngtr' , '≯'],
817 \ ['ni' , '∋'],
818 \ ['nleftarrow' , '↚'],
819 \ ['nLeftarrow' , '⇍'],
820 \ ['nLeftrightarrow', '⇎'],
821 \ ['nleq' , '≰'],
822 \ ['nleqq' , '≰'],
823 \ ['nless' , '≮'],
824 \ ['nmid' , '∤'],
825 \ ['notin' , '∉'],
826 \ ['nprec' , '⊀'],
827 \ ['nrightarrow' , '↛'],
828 \ ['nRightarrow' , '⇏'],
829 \ ['nsim' , '≁'],
830 \ ['nsucc' , '⊁'],
831 \ ['ntriangleleft' , '⋪'],
832 \ ['ntrianglelefteq', '⋬'],
833 \ ['ntriangleright' , '⋫'],
834 \ ['ntrianglerighteq', '⋭'],
835 \ ['nvdash' , '⊬'],
836 \ ['nvDash' , '⊭'],
837 \ ['nVdash' , '⊮'],
838 \ ['nwarrow' , '↖'],
839 \ ['odot' , '⊙'],
840 \ ['oint' , '∮'],
841 \ ['ominus' , '⊖'],
842 \ ['oplus' , '⊕'],
843 \ ['oslash' , '⊘'],
844 \ ['otimes' , '⊗'],
845 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200846 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100847 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200848 \ ['partial' , '∂'],
849 \ ['perp' , '⊥'],
850 \ ['pitchfork' , '⋔'],
851 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200852 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100853 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200854 \ ['preccurlyeq' , '≼'],
855 \ ['preceq' , '⪯'],
856 \ ['precnapprox' , '⪹'],
857 \ ['precneqq' , '⪵'],
858 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200859 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200860 \ ['prod' , '∏'],
861 \ ['propto' , '∝'],
862 \ ['rceil' , '⌉'],
863 \ ['Re' , 'ℜ'],
864 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200865 \ ['right)' , ')'],
866 \ ['right]' , ']'],
867 \ ['right\\}' , '}'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100868 \ ['rightarrow' , '⟶'],
869 \ ['Rightarrow' , '⟹'],
870 \ ['rightarrowtail' , '↣'],
871 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200872 \ ['rightsquigarrow', '↝'],
873 \ ['rightthreetimes', '⋌'],
874 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200875 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200876 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200877 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200878 \ ['searrow' , '↘'],
879 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200880 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200881 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100882 \ ['simeq' , '⋍'],
883 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200884 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200885 \ ['sphericalangle' , '∢'],
886 \ ['sqcap' , '⊓'],
887 \ ['sqcup' , '⊔'],
888 \ ['sqsubset' , '⊏'],
889 \ ['sqsubseteq' , '⊑'],
890 \ ['sqsupset' , '⊐'],
891 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100892 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200893 \ ['subset' , '⊂'],
894 \ ['Subset' , '⋐'],
895 \ ['subseteq' , '⊆'],
896 \ ['subseteqq' , '⫅'],
897 \ ['subsetneq' , '⊊'],
898 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200899 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100900 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200901 \ ['succcurlyeq' , '≽'],
902 \ ['succeq' , '⪰'],
903 \ ['succnapprox' , '⪺'],
904 \ ['succneqq' , '⪶'],
905 \ ['succsim' , '≿'],
906 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100907 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200908 \ ['Supset' , '⋑'],
909 \ ['supseteq' , '⊇'],
910 \ ['supseteqq' , '⫆'],
911 \ ['supsetneq' , '⊋'],
912 \ ['supsetneqq' , '⫌'],
913 \ ['surd' , '√'],
914 \ ['swarrow' , '↙'],
915 \ ['therefore' , '∴'],
916 \ ['times' , '×'],
917 \ ['to' , '→'],
918 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200919 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200920 \ ['triangleleft' , '⊲'],
921 \ ['trianglelefteq' , '⊴'],
922 \ ['triangleq' , '≜'],
923 \ ['triangleright' , '⊳'],
924 \ ['trianglerighteq', '⊵'],
925 \ ['twoheadleftarrow', '↞'],
926 \ ['twoheadrightarrow', '↠'],
927 \ ['uparrow' , '↑'],
928 \ ['Uparrow' , '⇑'],
929 \ ['updownarrow' , '↕'],
930 \ ['Updownarrow' , '⇕'],
931 \ ['varnothing' , '∅'],
932 \ ['vartriangle' , '∆'],
933 \ ['vdash' , '⊢'],
934 \ ['vDash' , '⊨'],
935 \ ['Vdash' , '⊩'],
936 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200937 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100938 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200939 \ ['Vvdash' , '⊪'],
940 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200941 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200942 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100943" \ ['jmath' , 'X']
944" \ ['uminus' , 'X']
945" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200946 for texmath in s:texMathList
Bram Moolenaar81af9252010-12-10 20:35:50 +0100947 if texmath[0] =~ '\w$'
948 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
949 else
950 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
951 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200952 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200953
954 if &ambw == "double"
955 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
956 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
957 else
958 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
959 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
960 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200961
962 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
963 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
964 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
965 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
966 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
967 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
968 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
969 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
970 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
971 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
972 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
973 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
974 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
975 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
976 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
977 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
978 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
979 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
980 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
981 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200982 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200983
984 " Greek {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200985 if s:tex_conceal =~ 'g'
986 fun! s:Greek(group,pat,cchar)
987 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
988 endfun
989 call s:Greek('texGreek','\\alpha\>' ,'α')
990 call s:Greek('texGreek','\\beta\>' ,'β')
991 call s:Greek('texGreek','\\gamma\>' ,'γ')
992 call s:Greek('texGreek','\\delta\>' ,'δ')
993 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
994 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
995 call s:Greek('texGreek','\\zeta\>' ,'ζ')
996 call s:Greek('texGreek','\\eta\>' ,'η')
997 call s:Greek('texGreek','\\theta\>' ,'θ')
998 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
999 call s:Greek('texGreek','\\kappa\>' ,'κ')
1000 call s:Greek('texGreek','\\lambda\>' ,'λ')
1001 call s:Greek('texGreek','\\mu\>' ,'μ')
1002 call s:Greek('texGreek','\\nu\>' ,'ν')
1003 call s:Greek('texGreek','\\xi\>' ,'ξ')
1004 call s:Greek('texGreek','\\pi\>' ,'π')
1005 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1006 call s:Greek('texGreek','\\rho\>' ,'ρ')
1007 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1008 call s:Greek('texGreek','\\sigma\>' ,'σ')
1009 call s:Greek('texGreek','\\varsigma\>' ,'ς')
1010 call s:Greek('texGreek','\\tau\>' ,'τ')
1011 call s:Greek('texGreek','\\upsilon\>' ,'υ')
1012 call s:Greek('texGreek','\\phi\>' ,'φ')
1013 call s:Greek('texGreek','\\varphi\>' ,'ϕ')
1014 call s:Greek('texGreek','\\chi\>' ,'χ')
1015 call s:Greek('texGreek','\\psi\>' ,'ψ')
1016 call s:Greek('texGreek','\\omega\>' ,'ω')
1017 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1018 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1019 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1020 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1021 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1022 call s:Greek('texGreek','\\Pi\>' ,'Π')
1023 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1024 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1025 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1026 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1027 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1028 delfun s:Greek
1029 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001030
1031 " Superscripts/Subscripts {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001032 if s:tex_conceal =~ 's'
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001033 if s:tex_fast =~ 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001034 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1035 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1036 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001037 fun! s:SuperSub(group,leader,pat,cchar)
1038 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
1039 exe 'syn match '.a:group."s '".a:pat."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
1040 endfun
1041 call s:SuperSub('texSuperscript','\^','0','⁰')
1042 call s:SuperSub('texSuperscript','\^','1','¹')
1043 call s:SuperSub('texSuperscript','\^','2','²')
1044 call s:SuperSub('texSuperscript','\^','3','³')
1045 call s:SuperSub('texSuperscript','\^','4','⁴')
1046 call s:SuperSub('texSuperscript','\^','5','⁵')
1047 call s:SuperSub('texSuperscript','\^','6','⁶')
1048 call s:SuperSub('texSuperscript','\^','7','⁷')
1049 call s:SuperSub('texSuperscript','\^','8','⁸')
1050 call s:SuperSub('texSuperscript','\^','9','⁹')
1051 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1052 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1053 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1054 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1055 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1056 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1057 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1058 call s:SuperSub('texSuperscript','\^','h','ʰ')
1059 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1060 call s:SuperSub('texSuperscript','\^','j','ʲ')
1061 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1062 call s:SuperSub('texSuperscript','\^','l','ˡ')
1063 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1064 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1065 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1066 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1067 call s:SuperSub('texSuperscript','\^','r','ʳ')
1068 call s:SuperSub('texSuperscript','\^','s','ˢ')
1069 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1070 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1071 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1072 call s:SuperSub('texSuperscript','\^','w','ʷ')
1073 call s:SuperSub('texSuperscript','\^','x','ˣ')
1074 call s:SuperSub('texSuperscript','\^','y','ʸ')
1075 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1076 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1077 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1078 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1079 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1080 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1081 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1082 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1083 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1084 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1085 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1086 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1087 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1088 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1089 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1090 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1091 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1092 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1093 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001094 call s:SuperSub('texSuperscript','\^',',','︐')
1095 call s:SuperSub('texSuperscript','\^',':','︓')
1096 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001097 call s:SuperSub('texSuperscript','\^','+','⁺')
1098 call s:SuperSub('texSuperscript','\^','-','⁻')
1099 call s:SuperSub('texSuperscript','\^','<','˂')
1100 call s:SuperSub('texSuperscript','\^','>','˃')
1101 call s:SuperSub('texSuperscript','\^','/','ˊ')
1102 call s:SuperSub('texSuperscript','\^','(','⁽')
1103 call s:SuperSub('texSuperscript','\^',')','⁾')
1104 call s:SuperSub('texSuperscript','\^','\.','˙')
1105 call s:SuperSub('texSuperscript','\^','=','˭')
1106 call s:SuperSub('texSubscript','_','0','₀')
1107 call s:SuperSub('texSubscript','_','1','₁')
1108 call s:SuperSub('texSubscript','_','2','₂')
1109 call s:SuperSub('texSubscript','_','3','₃')
1110 call s:SuperSub('texSubscript','_','4','₄')
1111 call s:SuperSub('texSubscript','_','5','₅')
1112 call s:SuperSub('texSubscript','_','6','₆')
1113 call s:SuperSub('texSubscript','_','7','₇')
1114 call s:SuperSub('texSubscript','_','8','₈')
1115 call s:SuperSub('texSubscript','_','9','₉')
1116 call s:SuperSub('texSubscript','_','a','ₐ')
1117 call s:SuperSub('texSubscript','_','e','ₑ')
1118 call s:SuperSub('texSubscript','_','i','ᵢ')
1119 call s:SuperSub('texSubscript','_','o','ₒ')
1120 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001121 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001122 call s:SuperSub('texSubscript','_','+','₊')
1123 call s:SuperSub('texSubscript','_','-','₋')
1124 call s:SuperSub('texSubscript','_','/','ˏ')
1125 call s:SuperSub('texSubscript','_','(','₍')
1126 call s:SuperSub('texSubscript','_',')','₎')
1127 call s:SuperSub('texSubscript','_','\.','‸')
1128 call s:SuperSub('texSubscript','_','r','ᵣ')
1129 call s:SuperSub('texSubscript','_','v','ᵥ')
1130 call s:SuperSub('texSubscript','_','x','ₓ')
1131 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1132 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1133 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1134 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1135 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
1136 delfun s:SuperSub
1137 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001138
1139 " Accented characters: {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001140 if s:tex_conceal =~ 'a'
1141 if b:tex_stylish
1142 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1143 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1144 else
1145 fun! s:Accents(chr,...)
1146 let i= 1
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001147 for accent in ["`","\\'","^",'"','\~','\.',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001148 if i > a:0
1149 break
1150 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001151 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001152 let i= i + 1
1153 continue
1154 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001155 if accent =~ '\a'
1156 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1157 else
1158 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1159 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001160 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001161 endfor
1162 endfun
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001163 " \` \' \^ \" \~ \. \c \H \k \r \u \v
Bram Moolenaard960d762011-09-21 19:22:10 +02001164 call s:Accents('a','à','á','â','ä','ã','ȧ',' ',' ','ą','å','ă','ă')
1165 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ',' ',' ','Ą','Å','Ă','Ă')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001166 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ','ç',' ',' ',' ',' ','č')
1167 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ','Ç',' ',' ',' ',' ','Č')
1168 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1169 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1170 call s:Accents('e','è','é','ê','ë','ẽ','ė','ȩ',' ','ę',' ','ĕ','ě')
1171 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ȩ',' ','Ę',' ','Ĕ','Ě')
Bram Moolenaard960d762011-09-21 19:22:10 +02001172 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ','ģ',' ',' ',' ','ğ',' ')
1173 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ','Ģ',' ',' ',' ','Ğ',' ')
1174 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1175 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001176 call s:Accents('i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ')
1177 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ',' ',' ',' ',' ','Ĭ',' ')
Bram Moolenaard960d762011-09-21 19:22:10 +02001178 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1179 call s:Accents('k',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ',' ')
1180 call s:Accents('K',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ',' ')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001181 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1182 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1183 call s:Accents('n',' ','ń',' ',' ','ñ',' ','ņ',' ',' ',' ',' ','ň')
1184 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ','Ņ',' ',' ',' ',' ','Ň')
1185 call s:Accents('o','ò','ó','ô','ö','õ','ȯ',' ','ő','ǫ',' ','ŏ',' ')
1186 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ',' ','Ő','Ǫ',' ','Ŏ',' ')
1187 call s:Accents('r',' ','ŕ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1188 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
Bram Moolenaard960d762011-09-21 19:22:10 +02001189 call s:Accents('s',' ','ś','ŝ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001190 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1191 call s:Accents('t',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1192 call s:Accents('T',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
Bram Moolenaard960d762011-09-21 19:22:10 +02001193 call s:Accents('u','ù','ú','û','ü','ũ',' ',' ','ű','ų','ů','ŭ','ǔ')
1194 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ',' ','Ű','Ų','Ů','Ŭ','Ǔ')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001195 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1196 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1197 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ')
1198 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ')
1199 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ','ž')
1200 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ','Ž')
1201 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ')
1202 " \` \' \^ \" \~ \. \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001203 delfun s:Accents
1204 syn match texAccent '\\aa\>' conceal cchar=å
1205 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001206 syn match texAccent '\\o\>' conceal cchar=ø
1207 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001208 syn match texLigature '\\AE\>' conceal cchar=Æ
1209 syn match texLigature '\\ae\>' conceal cchar=æ
1210 syn match texLigature '\\oe\>' conceal cchar=œ
1211 syn match texLigature '\\OE\>' conceal cchar=Œ
1212 syn match texLigature '\\ss\>' conceal cchar=ß
1213 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001214 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001215endif
1216
1217" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001218" LaTeX synchronization: {{{1
1219syn sync maxlines=200
1220syn sync minlines=50
1221
1222syn sync match texSyncStop groupthere NONE "%stopzone\>"
1223
1224" Synchronization: {{{1
1225" The $..$ and $$..$$ make for impossible sync patterns
1226" (one can't tell if a "$$" starts or stops a math zone by itself)
1227" The following grouptheres coupled with minlines above
1228" help improve the odds of good syncing.
1229if !exists("tex_no_math")
1230 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1231 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1232 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1233 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1234 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1235 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1236 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1237 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1238endif
1239
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001240" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001241" Highlighting: {{{1
1242if did_tex_syntax_inits == 1
1243 let did_tex_syntax_inits= 2
1244 " TeX highlighting groups which should share similar highlighting
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001245 if !exists("s:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001246 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001247 HiLink texBadMath texError
1248 HiLink texMathDelimBad texError
1249 HiLink texMathError texError
1250 if !b:tex_stylish
1251 HiLink texOnlyMath texError
1252 endif
1253 endif
1254 HiLink texError Error
1255 endif
1256
Bram Moolenaard38b0552012-04-25 19:07:41 +02001257 hi texBoldStyle gui=bold cterm=bold
1258 hi texItalStyle gui=italic cterm=italic
1259 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1260 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaard960d762011-09-21 19:22:10 +02001261 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001262 HiLink texDefCmd texDef
1263 HiLink texDefName texDef
1264 HiLink texDocType texCmdName
1265 HiLink texDocTypeArgs texCmdArgs
1266 HiLink texInputFileOpt texCmdArgs
1267 HiLink texInputCurlies texDelimiter
1268 HiLink texLigature texSpecialChar
1269 if !exists("tex_no_math")
1270 HiLink texMathDelimSet1 texMathDelim
1271 HiLink texMathDelimSet2 texMathDelim
1272 HiLink texMathDelimKey texMathDelim
1273 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001274 HiLink texAccent texStatement
1275 HiLink texGreek texStatement
1276 HiLink texSuperscript texStatement
1277 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001278 HiLink texSuperscripts texSuperscript
1279 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001280 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001281 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001282 HiLink texMathZoneW texMath
1283 HiLink texMathZoneX texMath
1284 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001285 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001286 HiLink texMathZoneZ texMath
1287 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +02001288 HiLink texBeginEnd texCmdName
1289 HiLink texBeginEndName texSection
Bram Moolenaar071d4272004-06-13 20:20:40 +00001290 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001291 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001292 HiLink texTypeSize texType
1293 HiLink texTypeStyle texType
1294
1295 " Basic TeX highlighting groups
1296 HiLink texCmdArgs Number
1297 HiLink texCmdName Statement
1298 HiLink texComment Comment
1299 HiLink texDef Statement
1300 HiLink texDefParm Special
1301 HiLink texDelimiter Delimiter
1302 HiLink texInput Special
1303 HiLink texInputFile Special
1304 HiLink texLength Number
1305 HiLink texMath Special
1306 HiLink texMathDelim Statement
1307 HiLink texMathOper Operator
1308 HiLink texNewCmd Statement
1309 HiLink texNewEnv Statement
1310 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001311 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001312 HiLink texSection PreCondit
1313 HiLink texSpaceCodeChar Special
1314 HiLink texSpecialChar SpecialChar
1315 HiLink texStatement Statement
1316 HiLink texString String
1317 HiLink texTodo Todo
1318 HiLink texType Type
1319 HiLink texZone PreCondit
1320
1321 delcommand HiLink
1322endif
1323
Bram Moolenaar15146672011-10-20 22:22:38 +02001324" Cleanup: {{{1
Bram Moolenaar81af9252010-12-10 20:35:50 +01001325unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001326let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001327let &cpo = s:keepcpo
1328unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001329" vim: ts=8 fdm=marker