blob: 3f719e82441f08f6b5aec9296e43a34546019c13 [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 Moolenaar6e932462014-09-09 18:48:09 +02004" Last Change: Sep 09, 2014
5" Version: 82
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
Bram Moolenaara6878372014-03-22 21:02:50 +010031"
32" 6. Please see :help latex-syntax for information on
33" syntax folding :help tex-folding
34" spell checking :help tex-nospell
35" commands and mathzones :help tex-runon
36" new command highlighting :help tex-morecommands
37" error highlighting :help tex-error
38" new math groups :help tex-math
39" new styles :help tex-style
40" using conceal mode :help tex-conceal
Bram Moolenaar071d4272004-06-13 20:20:40 +000041
42" Version Clears: {{{1
43" For version 5.x: Clear all syntax items
44" For version 6.x: Quit when a syntax file was already loaded
45if version < 600
46 syntax clear
47elseif exists("b:current_syntax")
48 finish
49endif
Bram Moolenaar15146672011-10-20 22:22:38 +020050let s:keepcpo= &cpo
51set cpo&vim
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020052scriptencoding utf-8
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
54" Define the default highlighting. {{{1
55" For version 5.7 and earlier: only when not done already
56" For version 5.8 and later: only when an item doesn't have highlighting yet
57if version >= 508 || !exists("did_tex_syntax_inits")
58 let did_tex_syntax_inits = 1
59 if version < 508
60 command -nargs=+ HiLink hi link <args>
61 else
62 command -nargs=+ HiLink hi def link <args>
63 endif
64endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +010065if exists("g:tex_no_error") && g:tex_no_error
66 let s:tex_no_error= 1
67endif
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020068
69" by default, enable all region-based highlighting
70let s:tex_fast= "bcmMprsSvV"
71if exists("g:tex_fast")
72 if type(g:tex_fast) != 1
73 " g:tex_fast exists and is not a string, so
74 " turn off all optional region-based highighting
75 let s:tex_fast= ""
76 else
77 let s:tex_fast= g:tex_fast
78 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +010079 let s:tex_no_error= 1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020080else
81 let s:tex_fast= "bcmMprsSvV"
Bram Moolenaar071d4272004-06-13 20:20:40 +000082endif
83
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020084" let user determine which classes of concealment will be supported
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020085" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020086if !exists("g:tex_conceal")
Bram Moolenaarbc488a72013-07-05 21:01:22 +020087 let s:tex_conceal= 'abdmgsS'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020088else
89 let s:tex_conceal= g:tex_conceal
90endif
Bram Moolenaar6e932462014-09-09 18:48:09 +020091if !exists("g:tex_superscripts")
92 let g:tex_superscripts= "[0-9a-zA-W.,:;+-<>/()=]"
93endif
94if !exists("g:tex_subscripts")
95 let g:tex_subscripts= "[0-9aehijklmnoprstuvx,+-/().]"
96endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020097
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000098" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000099" The user may override the normal determination by setting
100" g:tex_stylish to 1 (for "*.sty" mode)
101" or to 0 else (normal "*.tex" mode)
102" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +0100103let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000104if exists("g:tex_stylish")
105 let b:tex_stylish= g:tex_stylish
106elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +0100107 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000108 let b:tex_stylish= 1
109 else
110 let b:tex_stylish= 0
111 endif
112endif
113
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000114" handle folding {{{1
115if !exists("g:tex_fold_enabled")
116 let g:tex_fold_enabled= 0
117elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarab194812005-09-14 21:40:12 +0000118 let g:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000119 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
120endif
121if g:tex_fold_enabled && &fdm == "manual"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200122 setl fdm=syntax
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000123endif
124
Bram Moolenaaradc21822011-04-01 18:03:16 +0200125" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000126" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +0200127" One may override this iskeyword setting by providing
128" g:tex_isk
129if exists("g:tex_isk")
130 exe "setlocal isk=".g:tex_isk
Bram Moolenaar071d4272004-06-13 20:20:40 +0000131else
Bram Moolenaaradc21822011-04-01 18:03:16 +0200132 setlocal isk=48-57,a-z,A-Z,192-255
133endif
134if b:tex_stylish
135 setlocal isk+=@-@
Bram Moolenaar071d4272004-06-13 20:20:40 +0000136endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200137if exists("g:tex_nospell") && g:tex_nospell && !exists("g:tex_comment_nospell")
138 let g:tex_comment_nospell= 1
139endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000140
141" Clusters: {{{1
142" --------
Bram Moolenaard38b0552012-04-25 19:07:41 +0200143syn 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 +0100144if !exists("s:tex_no_error")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145 syn cluster texCmdGroup add=texMathError
146endif
147syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
Bram Moolenaard38b0552012-04-25 19:07:41 +0200148syn 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
149syn 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
150syn 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 +0200151if !exists("g:tex_nospell") || !g:tex_nospell
152 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
153 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
154else
155 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
156 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
157endif
Bram Moolenaara6878372014-03-22 21:02:50 +0100158syn 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,texMathZoneZ
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000159syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaar071d4272004-06-13 20:20:40 +0000160if !exists("tex_no_math")
161 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
162 syn cluster texMatchGroup add=@texMathZones
163 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
164 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 +0200165 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100166 if !exists("s:tex_no_error")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000167 syn cluster texMathMatchGroup add=texMathError
168 syn cluster texMathZoneGroup add=texMathError
169 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000170 syn cluster texMathZoneGroup add=@NoSpell
171 " following used in the \part \chapter \section \subsection \subsubsection
172 " \paragraph \subparagraph \author \title highlighting
173 syn cluster texDocGroup contains=texPartZone,@texPartGroup
174 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
175 syn cluster texChapterGroup contains=texSectionZone,texParaZone
176 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
177 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
178 syn cluster texSubSubSectionGroup contains=texParaZone
179 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200180 if has("conceal") && &enc == 'utf-8'
Bram Moolenaare0021c72010-07-28 17:25:21 +0200181 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
182 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200183 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000184endif
185
186" Try to flag {} and () mismatches: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200187if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100188 if !exists("s:tex_no_error")
189 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup,texError
190 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup,texError,@NoSpell
191 else
192 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup
193 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup
194 endif
195 if !exists("g:tex_nospell") || !g:tex_nospell
196 syn region texParen start="(" end=")" contains=@texMatchGroup,@Spell
197 else
198 syn region texParen start="(" end=")" contains=@texMatchGroup
199 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100201if !exists("s:tex_no_error")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000202 syn match texError "[}\])]"
203endif
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200204if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100205 if !exists("tex_no_math")
206 if !exists("s:tex_no_error")
207 syn match texMathError "}" contained
208 endif
209 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
210 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000211endif
212
213" TeX/LaTeX keywords: {{{1
214" Instead of trying to be All Knowing, I just match \..alphameric..
215" Note that *.tex files may not have "@" in their \commands
216if exists("g:tex_tex") || b:tex_stylish
217 syn match texStatement "\\[a-zA-Z@]\+"
218else
219 syn match texStatement "\\\a\+"
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100220 if !exists("s:tex_no_error")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221 syn match texError "\\\a*@[a-zA-Z@]*"
222 endif
223endif
224
225" TeX/LaTeX delimiters: {{{1
226syn match texDelimiter "&"
227syn match texDelimiter "\\\\"
Bram Moolenaard960d762011-09-21 19:22:10 +0200228syn match texDelimiter "[{}]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229
230" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200231syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232
233" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
234if b:tex_stylish
235 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
236 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
237else
238 syn match texAccent "\\[bcdvuH]\A"me=e-1
239 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
240endif
241syn match texAccent "\\[bcdvuH]$"
242syn match texAccent +\\[=^.\~"`']+
243syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
244syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
245
246" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200247syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200248if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100249 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
250 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@NoSpell
251endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000252
253" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200254syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200255if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100256 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
257endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000258
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000259" Preamble syntax-based folding support: {{{1
260if g:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200261 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000262endif
263
Bram Moolenaar071d4272004-06-13 20:20:40 +0000264" TeX input: {{{1
265syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100266syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000267syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
268syn match texInputCurlies "[{}]" contained
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200269if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100270 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
271endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272
273" Type Styles (LaTeX 2.09): {{{1
274syn match texTypeStyle "\\rm\>"
275syn match texTypeStyle "\\em\>"
276syn match texTypeStyle "\\bf\>"
277syn match texTypeStyle "\\it\>"
278syn match texTypeStyle "\\sl\>"
279syn match texTypeStyle "\\sf\>"
280syn match texTypeStyle "\\sc\>"
281syn match texTypeStyle "\\tt\>"
282
283" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200284if s:tex_conceal !~ 'b'
285 syn match texTypeStyle "\\textbf\>"
286 syn match texTypeStyle "\\textit\>"
287endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288syn match texTypeStyle "\\textmd\>"
289syn match texTypeStyle "\\textrm\>"
290syn match texTypeStyle "\\textsc\>"
291syn match texTypeStyle "\\textsf\>"
292syn match texTypeStyle "\\textsl\>"
293syn match texTypeStyle "\\texttt\>"
294syn match texTypeStyle "\\textup\>"
295syn match texTypeStyle "\\emph\>"
296
297syn match texTypeStyle "\\mathbb\>"
298syn match texTypeStyle "\\mathbf\>"
299syn match texTypeStyle "\\mathcal\>"
300syn match texTypeStyle "\\mathfrak\>"
301syn match texTypeStyle "\\mathit\>"
302syn match texTypeStyle "\\mathnormal\>"
303syn match texTypeStyle "\\mathrm\>"
304syn match texTypeStyle "\\mathsf\>"
305syn match texTypeStyle "\\mathtt\>"
306
307syn match texTypeStyle "\\rmfamily\>"
308syn match texTypeStyle "\\sffamily\>"
309syn match texTypeStyle "\\ttfamily\>"
310
311syn match texTypeStyle "\\itshape\>"
312syn match texTypeStyle "\\scshape\>"
313syn match texTypeStyle "\\slshape\>"
314syn match texTypeStyle "\\upshape\>"
315
316syn match texTypeStyle "\\bfseries\>"
317syn match texTypeStyle "\\mdseries\>"
318
319" Some type sizes: {{{1
320syn match texTypeSize "\\tiny\>"
321syn match texTypeSize "\\scriptsize\>"
322syn match texTypeSize "\\footnotesize\>"
323syn match texTypeSize "\\small\>"
324syn match texTypeSize "\\normalsize\>"
325syn match texTypeSize "\\large\>"
326syn match texTypeSize "\\Large\>"
327syn match texTypeSize "\\LARGE\>"
328syn match texTypeSize "\\huge\>"
329syn match texTypeSize "\\Huge\>"
330
331" Spacecodes (TeX'isms): {{{1
332" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
333syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
334syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
335
336" Sections, subsections, etc: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200337if s:tex_fast =~ 'p'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100338 if !exists("g:tex_nospell") || !g:tex_nospell
339 if g:tex_fold_enabled && has("folding")
Bram Moolenaar6e932462014-09-09 18:48:09 +0200340 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100341 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup,@Spell
342 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup,@Spell
343 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup,@Spell
Bram Moolenaar6e932462014-09-09 18:48:09 +0200344 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100345 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
346 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
347 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
348 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup,@Spell
349 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup,@Spell
350 else
Bram Moolenaar6e932462014-09-09 18:48:09 +0200351 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100352 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
353 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
354 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
Bram Moolenaar6e932462014-09-09 18:48:09 +0200355 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100356 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
357 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell
358 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell
359 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
360 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
361 endif
362 else
363 if g:tex_fold_enabled && has("folding")
Bram Moolenaar6e932462014-09-09 18:48:09 +0200364 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100365 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup
366 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup
367 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup
Bram Moolenaar6e932462014-09-09 18:48:09 +0200368 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100369 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSubSectionGroup
370 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texParaGroup
371 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup
372 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup
373 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup
374 else
Bram Moolenaar6e932462014-09-09 18:48:09 +0200375 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100376 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
377 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
378 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
Bram Moolenaar6e932462014-09-09 18:48:09 +0200379 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100380 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
381 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
382 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
383 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
384 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup
385 endif
386 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000387endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000388
Bram Moolenaard38b0552012-04-25 19:07:41 +0200389" particular support for bold and italic {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200390if s:tex_fast =~ 'b'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100391 if s:tex_conceal =~ 'b'
392 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
393 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
394 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
395 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
396 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200397endif
398
Bram Moolenaar071d4272004-06-13 20:20:40 +0000399" Bad Math (mismatched): {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200400if !exists("g:tex_no_math") && !exists("s:tex_no_error")
Bram Moolenaard960d762011-09-21 19:22:10 +0200401 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000402 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
403 syn match texBadMath "\\[\])]"
404endif
405
406" Math Zones: {{{1
407if !exists("tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000408 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000409 " Starred forms are created if starform is true. Starred
410 " forms have syntax group and synchronization groups with a
411 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
412 fun! TexNewMathZone(sfx,mathzone,starform)
413 let grpname = "texMathZone".a:sfx
414 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000415 if g:tex_fold_enabled
416 let foldcmd= " fold"
417 else
418 let foldcmd= ""
419 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000420 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200421 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100422 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
423 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
424 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
425 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100426 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000427 if a:starform
428 let grpname = "texMathZone".a:sfx.'S'
429 let syncname = "texSyncMathZone".a:sfx.'S'
430 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200431 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100432 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
433 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
434 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
435 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100436 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000437 endif
438 endfun
439
440 " Standard Math Zones: {{{2
441 call TexNewMathZone("A","align",1)
442 call TexNewMathZone("B","alignat",1)
443 call TexNewMathZone("C","displaymath",1)
444 call TexNewMathZone("D","eqnarray",1)
445 call TexNewMathZone("E","equation",1)
446 call TexNewMathZone("F","flalign",1)
447 call TexNewMathZone("G","gather",1)
448 call TexNewMathZone("H","math",1)
449 call TexNewMathZone("I","multline",1)
Bram Moolenaard960d762011-09-21 19:22:10 +0200450 call TexNewMathZone("J","subequations",0)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000451 call TexNewMathZone("K","xalignat",1)
452 call TexNewMathZone("L","xxalignat",0)
453
454 " Inline Math Zones: {{{2
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200455 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100456 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
457 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
458 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
459 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
460 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" concealends keepend contains=@texMathZoneGroup
461 else
462 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
463 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
464 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
465 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
466 endif
467 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200468 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000469
470 syn match texMathOper "[_^=]" contained
471
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200472 " Text Inside Math Zones: {{{2
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200473 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100474 if !exists("g:tex_nospell") || !g:tex_nospell
475 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
476 else
477 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
478 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200479 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200480
Bram Moolenaar071d4272004-06-13 20:20:40 +0000481 " \left..something.. and \right..something.. support: {{{2
482 syn match texMathDelimBad contained "\S"
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200483 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm'
484 syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
485 syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200486 let s:texMathDelimList=[
487 \ ['<' , '<'] ,
488 \ ['>' , '>'] ,
489 \ ['(' , '('] ,
490 \ [')' , ')'] ,
491 \ ['\[' , '['] ,
492 \ [']' , ']'] ,
493 \ ['\\{' , '{'] ,
494 \ ['\\}' , '}'] ,
495 \ ['|' , '|'] ,
496 \ ['\\|' , '‖'] ,
497 \ ['\\backslash' , '\'] ,
498 \ ['\\downarrow' , '↓'] ,
499 \ ['\\Downarrow' , '⇓'] ,
500 \ ['\\langle' , '<'] ,
501 \ ['\\lbrace' , '['] ,
502 \ ['\\lceil' , '⌈'] ,
503 \ ['\\lfloor' , '⌊'] ,
504 \ ['\\lgroup' , '⌊'] ,
505 \ ['\\lmoustache' , '⎛'] ,
506 \ ['\\rangle' , '>'] ,
507 \ ['\\rbrace' , ']'] ,
508 \ ['\\rceil' , '⌉'] ,
509 \ ['\\rfloor' , '⌋'] ,
510 \ ['\\rgroup' , '⌋'] ,
511 \ ['\\rmoustache' , '⎞'] ,
512 \ ['\\uparrow' , '↑'] ,
513 \ ['\\Uparrow' , '↑'] ,
514 \ ['\\updownarrow', '↕'] ,
515 \ ['\\Updownarrow', '⇕']]
516 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
517 for texmath in s:texMathDelimList
518 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
519 endfor
520
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200521 else
522 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200523 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
524 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
525 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
526 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
527 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
528 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
529 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
530 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200531 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000532 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
533 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000534endif
535
536" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
537syn match texSpecialChar "\\[$&%#{}_]"
538if b:tex_stylish
539 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
540else
541 syn match texSpecialChar "\\[SP@]\A"me=e-1
542endif
543syn match texSpecialChar "\\\\"
544if !exists("tex_no_math")
545 syn match texOnlyMath "[_^]"
546endif
547syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200548if s:tex_conceal !~ 'S'
549 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
550 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
551 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
552 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
553 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
554endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000555
556" Comments: {{{1
557" Normal TeX LaTeX : %....
558" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000559if !exists("g:tex_comment_nospell") || !g:tex_comment_nospell
560 syn cluster texCommentGroup contains=texTodo,@Spell
561else
562 syn cluster texCommentGroup contains=texTodo,@NoSpell
563endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000564syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000565syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000566syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100567if s:extfname == "dtx"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000568 syn match texComment "\^\^A.*$" contains=@texCommentGroup
569 syn match texComment "^%\+" contains=@texCommentGroup
570else
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000571 if g:tex_fold_enabled
572 " allows syntax-folding of 2 or more contiguous comment lines
573 " single-line comments are not folded
Bram Moolenaard38b0552012-04-25 19:07:41 +0200574 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200575 if s:tex_fast =~ 'c'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100576 syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' fold
577 syn region texNoSpell contained fold matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
578 endif
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000579 else
Bram Moolenaard38b0552012-04-25 19:07:41 +0200580 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200581 if s:tex_fast =~ 'c'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100582 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
583 endif
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000584 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000585endif
586
587" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200588" will appropriately terminate.
589" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200590if s:tex_fast =~ 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100591 if exists("g:tex_verbspell") && g:tex_verbspell
592 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
593 " listings package:
594 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
595 if version < 600
596 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
597 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200598 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100599 if b:tex_stylish
600 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
601 else
602 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
603 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200604 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100605 else
606 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
607 if version < 600
608 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
609 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200610 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100611 if b:tex_stylish
612 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
613 else
614 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
615 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200616 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100617 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000618endif
619
620" Tex Reference Zones: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200621if s:tex_fast =~ 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100622 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
623 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
624 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
625 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
626 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
627 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
628 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200629 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100630endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200631syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000632
633" Handle newcommand, newenvironment : {{{1
634syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200635if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100636 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
637 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
638 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
639endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000640syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200641if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100642 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
643 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
644 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
645endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000646
647" Definitions/Commands: {{{1
648syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
649if b:tex_stylish
650 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
651 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
652else
653 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
654 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
655endif
656syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
657syn match texDefParm contained "#\d\+"
658
659" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000660syn 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 +0000661
662" TeX String Delimiters: {{{1
663syn match texString "\(``\|''\|,,\)"
664
Bram Moolenaar5c736222010-01-06 20:54:52 +0100665" makeatletter -- makeatother sections
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100666if !exists("s:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200667 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100668 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
669 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100670 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200671 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100672 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
673 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
674 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100675endif
676
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200677" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200678if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200679
680 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200681 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200682 if s:tex_conceal =~ 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200683 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200684 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200685 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100686 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200687 \ ['angle' , '∠'],
688 \ ['approx' , '≈'],
689 \ ['ast' , '∗'],
690 \ ['asymp' , '≍'],
691 \ ['backepsilon' , '∍'],
692 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200693 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200694 \ ['barwedge' , '⊼'],
695 \ ['because' , '∵'],
696 \ ['between' , '≬'],
697 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100698 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200699 \ ['bigcup' , '∪'],
700 \ ['bigodot' , '⊙'],
701 \ ['bigoplus' , '⊕'],
702 \ ['bigotimes' , '⊗'],
703 \ ['bigsqcup' , '⊔'],
704 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100705 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200706 \ ['bigvee' , '⋁'],
707 \ ['bigwedge' , '⋀'],
708 \ ['blacksquare' , '∎'],
709 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100710 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200711 \ ['boxdot' , '⊡'],
712 \ ['boxminus' , '⊟'],
713 \ ['boxplus' , '⊞'],
714 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100715 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200716 \ ['bumpeq' , '≏'],
717 \ ['Bumpeq' , '≎'],
718 \ ['cap' , '∩'],
719 \ ['Cap' , '⋒'],
720 \ ['cdot' , '·'],
721 \ ['cdots' , '⋯'],
722 \ ['circ' , '∘'],
723 \ ['circeq' , '≗'],
724 \ ['circlearrowleft', '↺'],
725 \ ['circlearrowright', '↻'],
726 \ ['circledast' , '⊛'],
727 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200728 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200729 \ ['complement' , '∁'],
730 \ ['cong' , '≅'],
731 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200732 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200733 \ ['cup' , '∪'],
734 \ ['Cup' , '⋓'],
735 \ ['curlyeqprec' , '⋞'],
736 \ ['curlyeqsucc' , '⋟'],
737 \ ['curlyvee' , '⋎'],
738 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100739 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200740 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100741 \ ['ddagger' , '‡'],
742 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200743 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200744 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200745 \ ['div' , '÷'],
746 \ ['doteq' , '≐'],
747 \ ['doteqdot' , '≑'],
748 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100749 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200750 \ ['dotsb' , '⋯'],
751 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200752 \ ['dotsi' , '⋯'],
753 \ ['dotso' , '…'],
754 \ ['doublebarwedge' , '⩞'],
755 \ ['downarrow' , '↓'],
756 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100757 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200758 \ ['emptyset' , '∅'],
759 \ ['eqcirc' , '≖'],
760 \ ['eqsim' , '≂'],
761 \ ['eqslantgtr' , '⪖'],
762 \ ['eqslantless' , '⪕'],
763 \ ['equiv' , '≡'],
764 \ ['exists' , '∃'],
765 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200766 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200767 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100768 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200769 \ ['ge' , '≥'],
770 \ ['geq' , '≥'],
771 \ ['geqq' , '≧'],
772 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100773 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200774 \ ['gneqq' , '≩'],
775 \ ['gtrdot' , '⋗'],
776 \ ['gtreqless' , '⋛'],
777 \ ['gtrless' , '≷'],
778 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200779 \ ['hbar' , 'ℏ'],
780 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200781 \ ['hookleftarrow' , '↩'],
782 \ ['hookrightarrow' , '↪'],
783 \ ['iiint' , '∭'],
784 \ ['iint' , '∬'],
785 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200786 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200787 \ ['in' , '∈'],
788 \ ['infty' , '∞'],
789 \ ['int' , '∫'],
790 \ ['lceil' , '⌈'],
791 \ ['ldots' , '…'],
792 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100793 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200794 \ ['left(' , '('],
795 \ ['left\[' , '['],
796 \ ['left\\{' , '{'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100797 \ ['leftarrow' , '⟵'],
798 \ ['Leftarrow' , '⟸'],
799 \ ['leftarrowtail' , '↢'],
800 \ ['leftharpoondown', '↽'],
801 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100802 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100803 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200804 \ ['leftrightsquigarrow', '↭'],
805 \ ['leftthreetimes' , '⋋'],
806 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100807 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200808 \ ['leqq' , '≦'],
809 \ ['lessdot' , '⋖'],
810 \ ['lesseqgtr' , '⋚'],
811 \ ['lesssim' , '≲'],
812 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100813 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200814 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200815 \ ['lneqq' , '≨'],
816 \ ['ltimes' , '⋉'],
817 \ ['mapsto' , '↦'],
818 \ ['measuredangle' , '∡'],
819 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100820 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200821 \ ['mp' , '∓'],
822 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200823 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200824 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200825 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100826 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200827 \ ['neg' , '¬'],
828 \ ['neq' , '≠'],
829 \ ['nexists' , '∄'],
830 \ ['ngeq' , '≱'],
831 \ ['ngeqq' , '≱'],
832 \ ['ngtr' , '≯'],
833 \ ['ni' , '∋'],
834 \ ['nleftarrow' , '↚'],
835 \ ['nLeftarrow' , '⇍'],
836 \ ['nLeftrightarrow', '⇎'],
837 \ ['nleq' , '≰'],
838 \ ['nleqq' , '≰'],
839 \ ['nless' , '≮'],
840 \ ['nmid' , '∤'],
841 \ ['notin' , '∉'],
842 \ ['nprec' , '⊀'],
843 \ ['nrightarrow' , '↛'],
844 \ ['nRightarrow' , '⇏'],
845 \ ['nsim' , '≁'],
846 \ ['nsucc' , '⊁'],
847 \ ['ntriangleleft' , '⋪'],
848 \ ['ntrianglelefteq', '⋬'],
849 \ ['ntriangleright' , '⋫'],
850 \ ['ntrianglerighteq', '⋭'],
851 \ ['nvdash' , '⊬'],
852 \ ['nvDash' , '⊭'],
853 \ ['nVdash' , '⊮'],
854 \ ['nwarrow' , '↖'],
855 \ ['odot' , '⊙'],
856 \ ['oint' , '∮'],
857 \ ['ominus' , '⊖'],
858 \ ['oplus' , '⊕'],
859 \ ['oslash' , '⊘'],
860 \ ['otimes' , '⊗'],
861 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200862 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100863 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200864 \ ['partial' , '∂'],
865 \ ['perp' , '⊥'],
866 \ ['pitchfork' , '⋔'],
867 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200868 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100869 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200870 \ ['preccurlyeq' , '≼'],
871 \ ['preceq' , '⪯'],
872 \ ['precnapprox' , '⪹'],
873 \ ['precneqq' , '⪵'],
874 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200875 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200876 \ ['prod' , '∏'],
877 \ ['propto' , '∝'],
878 \ ['rceil' , '⌉'],
879 \ ['Re' , 'ℜ'],
880 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200881 \ ['right)' , ')'],
882 \ ['right]' , ']'],
883 \ ['right\\}' , '}'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100884 \ ['rightarrow' , '⟶'],
885 \ ['Rightarrow' , '⟹'],
886 \ ['rightarrowtail' , '↣'],
887 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200888 \ ['rightsquigarrow', '↝'],
889 \ ['rightthreetimes', '⋌'],
890 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200891 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200892 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200893 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200894 \ ['searrow' , '↘'],
895 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200896 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200897 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100898 \ ['simeq' , '⋍'],
899 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200900 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200901 \ ['sphericalangle' , '∢'],
902 \ ['sqcap' , '⊓'],
903 \ ['sqcup' , '⊔'],
904 \ ['sqsubset' , '⊏'],
905 \ ['sqsubseteq' , '⊑'],
906 \ ['sqsupset' , '⊐'],
907 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100908 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200909 \ ['subset' , '⊂'],
910 \ ['Subset' , '⋐'],
911 \ ['subseteq' , '⊆'],
912 \ ['subseteqq' , '⫅'],
913 \ ['subsetneq' , '⊊'],
914 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200915 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100916 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200917 \ ['succcurlyeq' , '≽'],
918 \ ['succeq' , '⪰'],
919 \ ['succnapprox' , '⪺'],
920 \ ['succneqq' , '⪶'],
921 \ ['succsim' , '≿'],
922 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100923 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200924 \ ['Supset' , '⋑'],
925 \ ['supseteq' , '⊇'],
926 \ ['supseteqq' , '⫆'],
927 \ ['supsetneq' , '⊋'],
928 \ ['supsetneqq' , '⫌'],
929 \ ['surd' , '√'],
930 \ ['swarrow' , '↙'],
931 \ ['therefore' , '∴'],
932 \ ['times' , '×'],
933 \ ['to' , '→'],
934 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200935 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200936 \ ['triangleleft' , '⊲'],
937 \ ['trianglelefteq' , '⊴'],
938 \ ['triangleq' , '≜'],
939 \ ['triangleright' , '⊳'],
940 \ ['trianglerighteq', '⊵'],
941 \ ['twoheadleftarrow', '↞'],
942 \ ['twoheadrightarrow', '↠'],
943 \ ['uparrow' , '↑'],
944 \ ['Uparrow' , '⇑'],
945 \ ['updownarrow' , '↕'],
946 \ ['Updownarrow' , '⇕'],
947 \ ['varnothing' , '∅'],
948 \ ['vartriangle' , '∆'],
949 \ ['vdash' , '⊢'],
950 \ ['vDash' , '⊨'],
951 \ ['Vdash' , '⊩'],
952 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200953 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100954 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200955 \ ['Vvdash' , '⊪'],
956 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200957 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200958 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100959" \ ['jmath' , 'X']
960" \ ['uminus' , 'X']
961" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200962 for texmath in s:texMathList
Bram Moolenaar81af9252010-12-10 20:35:50 +0100963 if texmath[0] =~ '\w$'
964 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
965 else
966 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
967 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200968 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200969
970 if &ambw == "double"
971 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
972 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
973 else
974 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
975 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
976 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200977
978 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
979 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
980 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
981 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
982 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
983 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
984 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
985 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
986 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
987 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
988 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
989 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
990 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
991 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
992 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
993 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
994 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
995 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
996 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
997 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200998 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200999
1000 " Greek {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001001 if s:tex_conceal =~ 'g'
1002 fun! s:Greek(group,pat,cchar)
1003 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
1004 endfun
1005 call s:Greek('texGreek','\\alpha\>' ,'α')
1006 call s:Greek('texGreek','\\beta\>' ,'β')
1007 call s:Greek('texGreek','\\gamma\>' ,'γ')
1008 call s:Greek('texGreek','\\delta\>' ,'δ')
1009 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
1010 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
1011 call s:Greek('texGreek','\\zeta\>' ,'ζ')
1012 call s:Greek('texGreek','\\eta\>' ,'η')
1013 call s:Greek('texGreek','\\theta\>' ,'θ')
1014 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
1015 call s:Greek('texGreek','\\kappa\>' ,'κ')
1016 call s:Greek('texGreek','\\lambda\>' ,'λ')
1017 call s:Greek('texGreek','\\mu\>' ,'μ')
1018 call s:Greek('texGreek','\\nu\>' ,'ν')
1019 call s:Greek('texGreek','\\xi\>' ,'ξ')
1020 call s:Greek('texGreek','\\pi\>' ,'π')
1021 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1022 call s:Greek('texGreek','\\rho\>' ,'ρ')
1023 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1024 call s:Greek('texGreek','\\sigma\>' ,'σ')
1025 call s:Greek('texGreek','\\varsigma\>' ,'ς')
1026 call s:Greek('texGreek','\\tau\>' ,'τ')
1027 call s:Greek('texGreek','\\upsilon\>' ,'υ')
1028 call s:Greek('texGreek','\\phi\>' ,'φ')
1029 call s:Greek('texGreek','\\varphi\>' ,'ϕ')
1030 call s:Greek('texGreek','\\chi\>' ,'χ')
1031 call s:Greek('texGreek','\\psi\>' ,'ψ')
1032 call s:Greek('texGreek','\\omega\>' ,'ω')
1033 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1034 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1035 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1036 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1037 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1038 call s:Greek('texGreek','\\Pi\>' ,'Π')
1039 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1040 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1041 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1042 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1043 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1044 delfun s:Greek
1045 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001046
1047 " Superscripts/Subscripts {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001048 if s:tex_conceal =~ 's'
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001049 if s:tex_fast =~ 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001050 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1051 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1052 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001053 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001054 if a:pat =~ '^\\' || (a:leader == '\^' && a:pat =~ g:tex_superscripts) || (a:leader == '_' && a:pat =~ g:tex_subscripts)
1055" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1056 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
1057 exe 'syn match '.a:group."s '".a:pat."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
1058 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001059 endfun
1060 call s:SuperSub('texSuperscript','\^','0','⁰')
1061 call s:SuperSub('texSuperscript','\^','1','¹')
1062 call s:SuperSub('texSuperscript','\^','2','²')
1063 call s:SuperSub('texSuperscript','\^','3','³')
1064 call s:SuperSub('texSuperscript','\^','4','⁴')
1065 call s:SuperSub('texSuperscript','\^','5','⁵')
1066 call s:SuperSub('texSuperscript','\^','6','⁶')
1067 call s:SuperSub('texSuperscript','\^','7','⁷')
1068 call s:SuperSub('texSuperscript','\^','8','⁸')
1069 call s:SuperSub('texSuperscript','\^','9','⁹')
1070 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1071 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1072 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1073 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1074 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1075 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1076 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1077 call s:SuperSub('texSuperscript','\^','h','ʰ')
1078 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1079 call s:SuperSub('texSuperscript','\^','j','ʲ')
1080 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1081 call s:SuperSub('texSuperscript','\^','l','ˡ')
1082 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1083 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1084 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1085 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1086 call s:SuperSub('texSuperscript','\^','r','ʳ')
1087 call s:SuperSub('texSuperscript','\^','s','ˢ')
1088 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1089 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1090 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1091 call s:SuperSub('texSuperscript','\^','w','ʷ')
1092 call s:SuperSub('texSuperscript','\^','x','ˣ')
1093 call s:SuperSub('texSuperscript','\^','y','ʸ')
1094 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1095 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1096 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1097 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1098 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1099 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1100 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1101 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1102 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1103 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1104 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1105 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1106 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1107 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1108 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1109 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1110 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1111 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1112 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001113 call s:SuperSub('texSuperscript','\^',',','︐')
1114 call s:SuperSub('texSuperscript','\^',':','︓')
1115 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001116 call s:SuperSub('texSuperscript','\^','+','⁺')
1117 call s:SuperSub('texSuperscript','\^','-','⁻')
1118 call s:SuperSub('texSuperscript','\^','<','˂')
1119 call s:SuperSub('texSuperscript','\^','>','˃')
1120 call s:SuperSub('texSuperscript','\^','/','ˊ')
1121 call s:SuperSub('texSuperscript','\^','(','⁽')
1122 call s:SuperSub('texSuperscript','\^',')','⁾')
1123 call s:SuperSub('texSuperscript','\^','\.','˙')
1124 call s:SuperSub('texSuperscript','\^','=','˭')
1125 call s:SuperSub('texSubscript','_','0','₀')
1126 call s:SuperSub('texSubscript','_','1','₁')
1127 call s:SuperSub('texSubscript','_','2','₂')
1128 call s:SuperSub('texSubscript','_','3','₃')
1129 call s:SuperSub('texSubscript','_','4','₄')
1130 call s:SuperSub('texSubscript','_','5','₅')
1131 call s:SuperSub('texSubscript','_','6','₆')
1132 call s:SuperSub('texSubscript','_','7','₇')
1133 call s:SuperSub('texSubscript','_','8','₈')
1134 call s:SuperSub('texSubscript','_','9','₉')
1135 call s:SuperSub('texSubscript','_','a','ₐ')
1136 call s:SuperSub('texSubscript','_','e','ₑ')
1137 call s:SuperSub('texSubscript','_','i','ᵢ')
1138 call s:SuperSub('texSubscript','_','o','ₒ')
1139 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001140 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001141 call s:SuperSub('texSubscript','_','+','₊')
1142 call s:SuperSub('texSubscript','_','-','₋')
1143 call s:SuperSub('texSubscript','_','/','ˏ')
1144 call s:SuperSub('texSubscript','_','(','₍')
1145 call s:SuperSub('texSubscript','_',')','₎')
1146 call s:SuperSub('texSubscript','_','\.','‸')
1147 call s:SuperSub('texSubscript','_','r','ᵣ')
1148 call s:SuperSub('texSubscript','_','v','ᵥ')
1149 call s:SuperSub('texSubscript','_','x','ₓ')
1150 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1151 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1152 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1153 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1154 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
1155 delfun s:SuperSub
1156 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001157
1158 " Accented characters: {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001159 if s:tex_conceal =~ 'a'
1160 if b:tex_stylish
1161 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1162 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1163 else
1164 fun! s:Accents(chr,...)
1165 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001166 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001167 if i > a:0
1168 break
1169 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001170 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001171 let i= i + 1
1172 continue
1173 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001174 if accent =~ '\a'
1175 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1176 else
1177 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1178 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001179 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001180 endfor
1181 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001182 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1183 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1184 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1185 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1186 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1187 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1188 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1189 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1190 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1191 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1192 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1193 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1194 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1195 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1196 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1197 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1198 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1199 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1200 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1201 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1202 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1203 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1204 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1205 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1206 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1207 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1208 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1209 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1210 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1211 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1212 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1213 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1214 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1215 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1216 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1217 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1218 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1219 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001220 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1221 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001222 delfun s:Accents
1223 syn match texAccent '\\aa\>' conceal cchar=å
1224 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001225 syn match texAccent '\\o\>' conceal cchar=ø
1226 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001227 syn match texLigature '\\AE\>' conceal cchar=Æ
1228 syn match texLigature '\\ae\>' conceal cchar=æ
1229 syn match texLigature '\\oe\>' conceal cchar=œ
1230 syn match texLigature '\\OE\>' conceal cchar=Œ
1231 syn match texLigature '\\ss\>' conceal cchar=ß
1232 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001233 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001234endif
1235
1236" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001237" LaTeX synchronization: {{{1
1238syn sync maxlines=200
1239syn sync minlines=50
1240
1241syn sync match texSyncStop groupthere NONE "%stopzone\>"
1242
1243" Synchronization: {{{1
1244" The $..$ and $$..$$ make for impossible sync patterns
1245" (one can't tell if a "$$" starts or stops a math zone by itself)
1246" The following grouptheres coupled with minlines above
1247" help improve the odds of good syncing.
1248if !exists("tex_no_math")
1249 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1250 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1251 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1252 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1253 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1254 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1255 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1256 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1257endif
1258
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001259" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001260" Highlighting: {{{1
1261if did_tex_syntax_inits == 1
1262 let did_tex_syntax_inits= 2
1263 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001264 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001265 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001266 HiLink texBadMath texError
1267 HiLink texMathDelimBad texError
1268 HiLink texMathError texError
1269 if !b:tex_stylish
1270 HiLink texOnlyMath texError
1271 endif
1272 endif
1273 HiLink texError Error
1274 endif
1275
Bram Moolenaard38b0552012-04-25 19:07:41 +02001276 hi texBoldStyle gui=bold cterm=bold
1277 hi texItalStyle gui=italic cterm=italic
1278 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1279 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaard960d762011-09-21 19:22:10 +02001280 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001281 HiLink texDefCmd texDef
1282 HiLink texDefName texDef
1283 HiLink texDocType texCmdName
1284 HiLink texDocTypeArgs texCmdArgs
1285 HiLink texInputFileOpt texCmdArgs
1286 HiLink texInputCurlies texDelimiter
1287 HiLink texLigature texSpecialChar
1288 if !exists("tex_no_math")
1289 HiLink texMathDelimSet1 texMathDelim
1290 HiLink texMathDelimSet2 texMathDelim
1291 HiLink texMathDelimKey texMathDelim
1292 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001293 HiLink texAccent texStatement
1294 HiLink texGreek texStatement
1295 HiLink texSuperscript texStatement
1296 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001297 HiLink texSuperscripts texSuperscript
1298 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001299 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001300 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001301 HiLink texMathZoneW texMath
1302 HiLink texMathZoneX texMath
1303 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001304 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001305 HiLink texMathZoneZ texMath
1306 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +02001307 HiLink texBeginEnd texCmdName
1308 HiLink texBeginEndName texSection
Bram Moolenaar071d4272004-06-13 20:20:40 +00001309 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001310 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001311 HiLink texTypeSize texType
1312 HiLink texTypeStyle texType
1313
1314 " Basic TeX highlighting groups
1315 HiLink texCmdArgs Number
1316 HiLink texCmdName Statement
1317 HiLink texComment Comment
1318 HiLink texDef Statement
1319 HiLink texDefParm Special
1320 HiLink texDelimiter Delimiter
1321 HiLink texInput Special
1322 HiLink texInputFile Special
1323 HiLink texLength Number
1324 HiLink texMath Special
1325 HiLink texMathDelim Statement
1326 HiLink texMathOper Operator
1327 HiLink texNewCmd Statement
1328 HiLink texNewEnv Statement
1329 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001330 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001331 HiLink texSection PreCondit
1332 HiLink texSpaceCodeChar Special
1333 HiLink texSpecialChar SpecialChar
1334 HiLink texStatement Statement
1335 HiLink texString String
1336 HiLink texTodo Todo
1337 HiLink texType Type
1338 HiLink texZone PreCondit
1339
1340 delcommand HiLink
1341endif
1342
Bram Moolenaar15146672011-10-20 22:22:38 +02001343" Cleanup: {{{1
Bram Moolenaar81af9252010-12-10 20:35:50 +01001344unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001345let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001346let &cpo = s:keepcpo
1347unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001348" vim: ts=8 fdm=marker