blob: 6cb27ea4ba890982cdcff7534884a8f1290d303c [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 Moolenaarbc8801c2016-08-02 21:04:33 +02004" Last Change: Jul 05, 2016
5" Version: 98
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
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020043" quit when a syntax file was already loaded
44if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000045 finish
46endif
Bram Moolenaar15146672011-10-20 22:22:38 +020047let s:keepcpo= &cpo
48set cpo&vim
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020049scriptencoding utf-8
Bram Moolenaar071d4272004-06-13 20:20:40 +000050
51" Define the default highlighting. {{{1
52" For version 5.7 and earlier: only when not done already
53" For version 5.8 and later: only when an item doesn't have highlighting yet
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020054let did_tex_syntax_inits = 1
55command -nargs=+ HiLink hi def link <args>
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020056
57" by default, enable all region-based highlighting
58let s:tex_fast= "bcmMprsSvV"
59if exists("g:tex_fast")
60 if type(g:tex_fast) != 1
61 " g:tex_fast exists and is not a string, so
62 " turn off all optional region-based highighting
63 let s:tex_fast= ""
64 else
65 let s:tex_fast= g:tex_fast
66 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000067endif
68
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020069" let user determine which classes of concealment will be supported
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020070" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020071if !exists("g:tex_conceal")
Bram Moolenaarbc488a72013-07-05 21:01:22 +020072 let s:tex_conceal= 'abdmgsS'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020073else
74 let s:tex_conceal= g:tex_conceal
75endif
Bram Moolenaar6e932462014-09-09 18:48:09 +020076if !exists("g:tex_superscripts")
Bram Moolenaar802a0d92016-06-26 16:17:58 +020077 let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]'
Bram Moolenaar03413f42016-04-12 21:07:15 +020078else
79 let s:tex_superscripts= g:tex_superscripts
Bram Moolenaar6e932462014-09-09 18:48:09 +020080endif
81if !exists("g:tex_subscripts")
Bram Moolenaar802a0d92016-06-26 16:17:58 +020082 let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]'
Bram Moolenaar03413f42016-04-12 21:07:15 +020083else
84 let s:tex_subscripts= g:tex_subscripts
Bram Moolenaar6e932462014-09-09 18:48:09 +020085endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020086
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000087" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000088" The user may override the normal determination by setting
89" g:tex_stylish to 1 (for "*.sty" mode)
90" or to 0 else (normal "*.tex" mode)
91" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +010092let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +000093if exists("g:tex_stylish")
94 let b:tex_stylish= g:tex_stylish
95elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +010096 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +000097 let b:tex_stylish= 1
98 else
99 let b:tex_stylish= 0
100 endif
101endif
102
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000103" handle folding {{{1
104if !exists("g:tex_fold_enabled")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100105 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000106elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100107 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000108 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100109else
110 let s:tex_fold_enabled= 1
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000111endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100112if s:tex_fold_enabled && &fdm == "manual"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200113 setl fdm=syntax
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000114endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100115if s:tex_fold_enabled && has("folding")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100116 com! -nargs=* TexFold <args> fold
117else
118 com! -nargs=* TexFold <args>
119endif
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000120
Bram Moolenaaradc21822011-04-01 18:03:16 +0200121" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000122" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +0200123" One may override this iskeyword setting by providing
124" g:tex_isk
125if exists("g:tex_isk")
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200126 if b:tex_stylish && g:tex_isk !~ '@'
127 let b:tex_isk= '@,'.g:tex_isk
128 else
129 let b:tex_isk= g:tex_isk
130 endif
131elseif b:tex_stylish
132 let b:tex_isk="@,48-57,a-z,A-Z,192-255"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000133else
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200134 let b:tex_isk="48-57,a-z,A-Z,192-255"
Bram Moolenaaradc21822011-04-01 18:03:16 +0200135endif
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200136if v:version > 704 || (v:version == 704 && has("patch-7.4.1142"))
137 exe "syn iskeyword ".b:tex_isk
138else
139 exe "setl isk=".b:tex_isk
Bram Moolenaar071d4272004-06-13 20:20:40 +0000140endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100141if exists("g:tex_no_error") && g:tex_no_error
142 let s:tex_no_error= 1
143else
144 let s:tex_no_error= 0
145endif
146if exists("g:tex_comment_nospell") && g:tex_comment_nospell
147 let s:tex_comment_nospell= 1
148else
149 let s:tex_comment_nospell= 0
150endif
151if exists("g:tex_nospell") && g:tex_nospell
152 let s:tex_nospell = 1
153else
154 let s:tex_nospell = 0
Bram Moolenaard960d762011-09-21 19:22:10 +0200155endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156
157" Clusters: {{{1
158" --------
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200159syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,@texMathZones
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100160if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100161 syn cluster texCmdGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000162endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100163syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
164syn 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
165syn 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
166syn 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
167if !s:tex_nospell
168 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
169 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
Bram Moolenaard960d762011-09-21 19:22:10 +0200170else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100171 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
172 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
Bram Moolenaard960d762011-09-21 19:22:10 +0200173endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100174syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100175syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100176if !exists("g:tex_no_math")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100177 syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
178 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
179 syn cluster texMatchGroup add=@texMathZones
180 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
181 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
182 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100183 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100184 syn cluster texMathMatchGroup add=texMathError
185 syn cluster texMathZoneGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000186 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100187 syn cluster texMathZoneGroup add=@NoSpell
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000188 " following used in the \part \chapter \section \subsection \subsubsection
189 " \paragraph \subparagraph \author \title highlighting
190 syn cluster texDocGroup contains=texPartZone,@texPartGroup
191 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
192 syn cluster texChapterGroup contains=texSectionZone,texParaZone
193 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
194 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
195 syn cluster texSubSubSectionGroup contains=texParaZone
196 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200197 if has("conceal") && &enc == 'utf-8'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100198 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
199 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200200 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000201endif
202
203" Try to flag {} and () mismatches: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100204if s:tex_fast =~# 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100205 if !s:tex_no_error
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200206 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
207 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100208 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200209 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
210 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100211 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100212 if !s:tex_nospell
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200213 syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100214 else
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200215 syn region texParen start="(" end=")" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100216 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100218if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000219 syn match texError "[}\])]"
220endif
Bram Moolenaarf3913272016-02-25 00:00:01 +0100221if s:tex_fast =~# 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100222 if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100223 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100224 syn match texMathError "}" contained
225 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100226 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100227 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000228endif
229
230" TeX/LaTeX keywords: {{{1
231" Instead of trying to be All Knowing, I just match \..alphameric..
232" Note that *.tex files may not have "@" in their \commands
233if exists("g:tex_tex") || b:tex_stylish
234 syn match texStatement "\\[a-zA-Z@]\+"
235else
236 syn match texStatement "\\\a\+"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100237 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000238 syn match texError "\\\a*@[a-zA-Z@]*"
239 endif
240endif
241
242" TeX/LaTeX delimiters: {{{1
243syn match texDelimiter "&"
244syn match texDelimiter "\\\\"
245
246" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200247syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000248
249" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
250if b:tex_stylish
251 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
252 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
253else
254 syn match texAccent "\\[bcdvuH]\A"me=e-1
255 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
256endif
257syn match texAccent "\\[bcdvuH]$"
258syn match texAccent +\\[=^.\~"`']+
259syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
260syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
261
262" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200263syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaarf3913272016-02-25 00:00:01 +0100264if s:tex_fast =~# 'm'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100265 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
Bram Moolenaar802a0d92016-06-26 16:17:58 +0200266 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100267endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000268
269" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200270syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaarf3913272016-02-25 00:00:01 +0100271if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100272 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
273endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000274
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000275" Preamble syntax-based folding support: {{{1
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100276if s:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200277 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000278endif
279
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280" TeX input: {{{1
281syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100282syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000283syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
284syn match texInputCurlies "[{}]" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100285if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100286 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
287endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288
289" Type Styles (LaTeX 2.09): {{{1
290syn match texTypeStyle "\\rm\>"
291syn match texTypeStyle "\\em\>"
292syn match texTypeStyle "\\bf\>"
293syn match texTypeStyle "\\it\>"
294syn match texTypeStyle "\\sl\>"
295syn match texTypeStyle "\\sf\>"
296syn match texTypeStyle "\\sc\>"
297syn match texTypeStyle "\\tt\>"
298
299" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200300if s:tex_conceal !~# 'b'
Bram Moolenaard38b0552012-04-25 19:07:41 +0200301 syn match texTypeStyle "\\textbf\>"
302 syn match texTypeStyle "\\textit\>"
303endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000304syn match texTypeStyle "\\textmd\>"
305syn match texTypeStyle "\\textrm\>"
306syn match texTypeStyle "\\textsc\>"
307syn match texTypeStyle "\\textsf\>"
308syn match texTypeStyle "\\textsl\>"
309syn match texTypeStyle "\\texttt\>"
310syn match texTypeStyle "\\textup\>"
311syn match texTypeStyle "\\emph\>"
312
313syn match texTypeStyle "\\mathbb\>"
314syn match texTypeStyle "\\mathbf\>"
315syn match texTypeStyle "\\mathcal\>"
316syn match texTypeStyle "\\mathfrak\>"
317syn match texTypeStyle "\\mathit\>"
318syn match texTypeStyle "\\mathnormal\>"
319syn match texTypeStyle "\\mathrm\>"
320syn match texTypeStyle "\\mathsf\>"
321syn match texTypeStyle "\\mathtt\>"
322
323syn match texTypeStyle "\\rmfamily\>"
324syn match texTypeStyle "\\sffamily\>"
325syn match texTypeStyle "\\ttfamily\>"
326
327syn match texTypeStyle "\\itshape\>"
328syn match texTypeStyle "\\scshape\>"
329syn match texTypeStyle "\\slshape\>"
330syn match texTypeStyle "\\upshape\>"
331
332syn match texTypeStyle "\\bfseries\>"
333syn match texTypeStyle "\\mdseries\>"
334
335" Some type sizes: {{{1
336syn match texTypeSize "\\tiny\>"
337syn match texTypeSize "\\scriptsize\>"
338syn match texTypeSize "\\footnotesize\>"
339syn match texTypeSize "\\small\>"
340syn match texTypeSize "\\normalsize\>"
341syn match texTypeSize "\\large\>"
342syn match texTypeSize "\\Large\>"
343syn match texTypeSize "\\LARGE\>"
344syn match texTypeSize "\\huge\>"
345syn match texTypeSize "\\Huge\>"
346
347" Spacecodes (TeX'isms): {{{1
348" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
349syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
350syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
351
352" Sections, subsections, etc: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100353if s:tex_fast =~# 'p'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100354 if !s:tex_nospell
355 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
356 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
357 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
358 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
359 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
360 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
361 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell
362 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell
363 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
364 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
365 else
366 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
367 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
368 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
369 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
370 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
371 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
372 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
373 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
374 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
375 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100376 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000377endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000378
Bram Moolenaard38b0552012-04-25 19:07:41 +0200379" particular support for bold and italic {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100380if s:tex_fast =~# 'b'
381 if s:tex_conceal =~# 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200382 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200383 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
384 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
385 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
386 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
387 else
388 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
389 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
390 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
391 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200392 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100393 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200394endif
395
Bram Moolenaar071d4272004-06-13 20:20:40 +0000396" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100397if !exists("g:tex_no_math") && !s:tex_no_error
398 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000399 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
400 syn match texBadMath "\\[\])]"
401endif
402
403" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100404if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000405 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000406 " Starred forms are created if starform is true. Starred
407 " forms have syntax group and synchronization groups with a
408 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
409 fun! TexNewMathZone(sfx,mathzone,starform)
410 let grpname = "texMathZone".a:sfx
411 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100412 if s:tex_fold_enabled
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000413 let foldcmd= " fold"
414 else
415 let foldcmd= ""
416 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000417 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100418 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100419 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
420 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
421 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
422 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100423 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000424 if a:starform
425 let grpname = "texMathZone".a:sfx.'S'
426 let syncname = "texSyncMathZone".a:sfx.'S'
427 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100428 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100429 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
430 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
431 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
432 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100433 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000434 endif
435 endfun
436
437 " Standard Math Zones: {{{2
438 call TexNewMathZone("A","align",1)
439 call TexNewMathZone("B","alignat",1)
440 call TexNewMathZone("C","displaymath",1)
441 call TexNewMathZone("D","eqnarray",1)
442 call TexNewMathZone("E","equation",1)
443 call TexNewMathZone("F","flalign",1)
444 call TexNewMathZone("G","gather",1)
445 call TexNewMathZone("H","math",1)
446 call TexNewMathZone("I","multline",1)
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200447 call TexNewMathZone("J","xalignat",1)
448 call TexNewMathZone("K","xxalignat",0)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000449
450 " Inline Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100451 if s:tex_fast =~# 'M'
452 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200453 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
454 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
455 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
456 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100457 else
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200458 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
459 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100460 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200461 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100462 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200463 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200464 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000465
466 syn match texMathOper "[_^=]" contained
467
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200468 " Text Inside Math Zones: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100469 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100470 if !exists("g:tex_nospell") || !g:tex_nospell
471 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
472 else
473 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
474 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200475 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200476
Bram Moolenaar071d4272004-06-13 20:20:40 +0000477 " \left..something.. and \right..something.. support: {{{2
478 syn match texMathDelimBad contained "\S"
Bram Moolenaarf3913272016-02-25 00:00:01 +0100479 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200480 syn match texMathDelim contained "\\left\["
481 syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
482 syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200483 let s:texMathDelimList=[
484 \ ['<' , '<'] ,
485 \ ['>' , '>'] ,
486 \ ['(' , '('] ,
487 \ [')' , ')'] ,
488 \ ['\[' , '['] ,
489 \ [']' , ']'] ,
490 \ ['\\{' , '{'] ,
491 \ ['\\}' , '}'] ,
492 \ ['|' , '|'] ,
493 \ ['\\|' , '‖'] ,
494 \ ['\\backslash' , '\'] ,
495 \ ['\\downarrow' , '↓'] ,
496 \ ['\\Downarrow' , '⇓'] ,
497 \ ['\\langle' , '<'] ,
498 \ ['\\lbrace' , '['] ,
499 \ ['\\lceil' , '⌈'] ,
500 \ ['\\lfloor' , '⌊'] ,
501 \ ['\\lgroup' , '⌊'] ,
502 \ ['\\lmoustache' , '⎛'] ,
503 \ ['\\rangle' , '>'] ,
504 \ ['\\rbrace' , ']'] ,
505 \ ['\\rceil' , '⌉'] ,
506 \ ['\\rfloor' , '⌋'] ,
507 \ ['\\rgroup' , '⌋'] ,
508 \ ['\\rmoustache' , '⎞'] ,
509 \ ['\\uparrow' , '↑'] ,
510 \ ['\\Uparrow' , '↑'] ,
511 \ ['\\updownarrow', '↕'] ,
512 \ ['\\Updownarrow', '⇕']]
513 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
514 for texmath in s:texMathDelimList
515 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
516 endfor
517
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200518 else
519 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200520 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
521 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
522 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
523 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
524 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
525 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
526 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
527 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200528 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000529 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
530 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000531endif
532
533" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
534syn match texSpecialChar "\\[$&%#{}_]"
535if b:tex_stylish
536 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
537else
538 syn match texSpecialChar "\\[SP@]\A"me=e-1
539endif
540syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100541if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000542 syn match texOnlyMath "[_^]"
543endif
544syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200545if s:tex_conceal !~# 'S'
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200546 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
547 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
548 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
549 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
550 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
551endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000552
553" Comments: {{{1
554" Normal TeX LaTeX : %....
555" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100556if !s:tex_comment_nospell
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000557 syn cluster texCommentGroup contains=texTodo,@Spell
558else
559 syn cluster texCommentGroup contains=texTodo,@NoSpell
560endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000561syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000562syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000563syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100564if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100565 syn match texComment "\^\^A.*$" contains=@texCommentGroup
566 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000567else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100568 if s:tex_fold_enabled
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100569 " allows syntax-folding of 2 or more contiguous comment lines
570 " single-line comments are not folded
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100571 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100572 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100573 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
574 TexFold syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000575 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100576 else
577 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100578 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100579 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100580 endif
581 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000582endif
583
584" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200585" will appropriately terminate.
586" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaarf3913272016-02-25 00:00:01 +0100587if s:tex_fast =~# 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100588 if exists("g:tex_verbspell") && g:tex_verbspell
589 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
590 " listings package:
591 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200592 if b:tex_stylish
593 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200594 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200595 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200596 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100597 else
598 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200599 if b:tex_stylish
600 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200601 else
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200602 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200603 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100604 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000605endif
606
607" Tex Reference Zones: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100608if s:tex_fast =~# 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100609 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
610 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
611 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
612 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
613 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
614 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
615 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200616 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100617endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200618syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000619
620" Handle newcommand, newenvironment : {{{1
621syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100622if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100623 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
624 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
625 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
626endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000627syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100628if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100629 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
630 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
631 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
632endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000633
634" Definitions/Commands: {{{1
635syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
636if b:tex_stylish
637 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
638 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
639else
640 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
641 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
642endif
643syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
644syn match texDefParm contained "#\d\+"
645
646" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000647syn 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 +0000648
649" TeX String Delimiters: {{{1
650syn match texString "\(``\|''\|,,\)"
651
Bram Moolenaar5c736222010-01-06 20:54:52 +0100652" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100653if !s:tex_no_error
Bram Moolenaarf3913272016-02-25 00:00:01 +0100654 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100655 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
656 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100657 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100658 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100659 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
660 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
661 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100662endif
663
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200664" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200665if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200666
667 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200668 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaarf3913272016-02-25 00:00:01 +0100669 if s:tex_conceal =~# 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200670 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200671 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200672 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100673 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200674 \ ['angle' , '∠'],
675 \ ['approx' , '≈'],
676 \ ['ast' , '∗'],
677 \ ['asymp' , '≍'],
678 \ ['backepsilon' , '∍'],
679 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200680 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200681 \ ['barwedge' , '⊼'],
682 \ ['because' , '∵'],
683 \ ['between' , '≬'],
684 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100685 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200686 \ ['bigcup' , '∪'],
687 \ ['bigodot' , '⊙'],
688 \ ['bigoplus' , '⊕'],
689 \ ['bigotimes' , '⊗'],
690 \ ['bigsqcup' , '⊔'],
691 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100692 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200693 \ ['bigvee' , '⋁'],
694 \ ['bigwedge' , '⋀'],
695 \ ['blacksquare' , '∎'],
696 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100697 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200698 \ ['boxdot' , '⊡'],
699 \ ['boxminus' , '⊟'],
700 \ ['boxplus' , '⊞'],
701 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100702 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200703 \ ['bumpeq' , '≏'],
704 \ ['Bumpeq' , '≎'],
705 \ ['cap' , '∩'],
706 \ ['Cap' , '⋒'],
707 \ ['cdot' , '·'],
708 \ ['cdots' , '⋯'],
709 \ ['circ' , '∘'],
710 \ ['circeq' , '≗'],
711 \ ['circlearrowleft', '↺'],
712 \ ['circlearrowright', '↻'],
713 \ ['circledast' , '⊛'],
714 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200715 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200716 \ ['complement' , '∁'],
717 \ ['cong' , '≅'],
718 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200719 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200720 \ ['cup' , '∪'],
721 \ ['Cup' , '⋓'],
722 \ ['curlyeqprec' , '⋞'],
723 \ ['curlyeqsucc' , '⋟'],
724 \ ['curlyvee' , '⋎'],
725 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100726 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200727 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100728 \ ['ddagger' , '‡'],
729 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200730 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200731 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200732 \ ['div' , '÷'],
733 \ ['doteq' , '≐'],
734 \ ['doteqdot' , '≑'],
735 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100736 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200737 \ ['dotsb' , '⋯'],
738 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200739 \ ['dotsi' , '⋯'],
740 \ ['dotso' , '…'],
741 \ ['doublebarwedge' , '⩞'],
742 \ ['downarrow' , '↓'],
743 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100744 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200745 \ ['emptyset' , '∅'],
746 \ ['eqcirc' , '≖'],
747 \ ['eqsim' , '≂'],
748 \ ['eqslantgtr' , '⪖'],
749 \ ['eqslantless' , '⪕'],
750 \ ['equiv' , '≡'],
751 \ ['exists' , '∃'],
752 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200753 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200754 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100755 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200756 \ ['ge' , '≥'],
757 \ ['geq' , '≥'],
758 \ ['geqq' , '≧'],
759 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100760 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200761 \ ['gneqq' , '≩'],
762 \ ['gtrdot' , '⋗'],
763 \ ['gtreqless' , '⋛'],
764 \ ['gtrless' , '≷'],
765 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200766 \ ['hbar' , 'ℏ'],
767 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200768 \ ['hookleftarrow' , '↩'],
769 \ ['hookrightarrow' , '↪'],
770 \ ['iiint' , '∭'],
771 \ ['iint' , '∬'],
772 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200773 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200774 \ ['in' , '∈'],
775 \ ['infty' , '∞'],
776 \ ['int' , '∫'],
777 \ ['lceil' , '⌈'],
778 \ ['ldots' , '…'],
779 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100780 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200781 \ ['left(' , '('],
782 \ ['left\[' , '['],
783 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100784 \ ['leftarrow' , '←'],
785 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100786 \ ['leftarrowtail' , '↢'],
787 \ ['leftharpoondown', '↽'],
788 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100789 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100790 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200791 \ ['leftrightsquigarrow', '↭'],
792 \ ['leftthreetimes' , '⋋'],
793 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100794 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200795 \ ['leqq' , '≦'],
796 \ ['lessdot' , '⋖'],
797 \ ['lesseqgtr' , '⋚'],
798 \ ['lesssim' , '≲'],
799 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100800 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200801 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200802 \ ['lneqq' , '≨'],
803 \ ['ltimes' , '⋉'],
804 \ ['mapsto' , '↦'],
805 \ ['measuredangle' , '∡'],
806 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100807 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200808 \ ['mp' , '∓'],
809 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200810 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200811 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200812 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100813 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200814 \ ['neg' , '¬'],
815 \ ['neq' , '≠'],
816 \ ['nexists' , '∄'],
817 \ ['ngeq' , '≱'],
818 \ ['ngeqq' , '≱'],
819 \ ['ngtr' , '≯'],
820 \ ['ni' , '∋'],
821 \ ['nleftarrow' , '↚'],
822 \ ['nLeftarrow' , '⇍'],
823 \ ['nLeftrightarrow', '⇎'],
824 \ ['nleq' , '≰'],
825 \ ['nleqq' , '≰'],
826 \ ['nless' , '≮'],
827 \ ['nmid' , '∤'],
828 \ ['notin' , '∉'],
829 \ ['nprec' , '⊀'],
830 \ ['nrightarrow' , '↛'],
831 \ ['nRightarrow' , '⇏'],
832 \ ['nsim' , '≁'],
833 \ ['nsucc' , '⊁'],
834 \ ['ntriangleleft' , '⋪'],
835 \ ['ntrianglelefteq', '⋬'],
836 \ ['ntriangleright' , '⋫'],
837 \ ['ntrianglerighteq', '⋭'],
838 \ ['nvdash' , '⊬'],
839 \ ['nvDash' , '⊭'],
840 \ ['nVdash' , '⊮'],
841 \ ['nwarrow' , '↖'],
842 \ ['odot' , '⊙'],
843 \ ['oint' , '∮'],
844 \ ['ominus' , '⊖'],
845 \ ['oplus' , '⊕'],
846 \ ['oslash' , '⊘'],
847 \ ['otimes' , '⊗'],
848 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200849 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100850 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200851 \ ['partial' , '∂'],
852 \ ['perp' , '⊥'],
853 \ ['pitchfork' , '⋔'],
854 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200855 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100856 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200857 \ ['preccurlyeq' , '≼'],
858 \ ['preceq' , '⪯'],
859 \ ['precnapprox' , '⪹'],
860 \ ['precneqq' , '⪵'],
861 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200862 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200863 \ ['prod' , '∏'],
864 \ ['propto' , '∝'],
865 \ ['rceil' , '⌉'],
866 \ ['Re' , 'ℜ'],
867 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200868 \ ['right)' , ')'],
869 \ ['right]' , ']'],
870 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100871 \ ['rightarrow' , '→'],
872 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100873 \ ['rightarrowtail' , '↣'],
874 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200875 \ ['rightsquigarrow', '↝'],
876 \ ['rightthreetimes', '⋌'],
877 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200878 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200879 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200880 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200881 \ ['searrow' , '↘'],
882 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200883 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200884 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100885 \ ['simeq' , '⋍'],
886 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200887 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200888 \ ['sphericalangle' , '∢'],
889 \ ['sqcap' , '⊓'],
890 \ ['sqcup' , '⊔'],
891 \ ['sqsubset' , '⊏'],
892 \ ['sqsubseteq' , '⊑'],
893 \ ['sqsupset' , '⊐'],
894 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100895 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200896 \ ['subset' , '⊂'],
897 \ ['Subset' , '⋐'],
898 \ ['subseteq' , '⊆'],
899 \ ['subseteqq' , '⫅'],
900 \ ['subsetneq' , '⊊'],
901 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200902 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100903 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200904 \ ['succcurlyeq' , '≽'],
905 \ ['succeq' , '⪰'],
906 \ ['succnapprox' , '⪺'],
907 \ ['succneqq' , '⪶'],
908 \ ['succsim' , '≿'],
909 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100910 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200911 \ ['Supset' , '⋑'],
912 \ ['supseteq' , '⊇'],
913 \ ['supseteqq' , '⫆'],
914 \ ['supsetneq' , '⊋'],
915 \ ['supsetneqq' , '⫌'],
916 \ ['surd' , '√'],
917 \ ['swarrow' , '↙'],
918 \ ['therefore' , '∴'],
919 \ ['times' , '×'],
920 \ ['to' , '→'],
921 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200922 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200923 \ ['triangleleft' , '⊲'],
924 \ ['trianglelefteq' , '⊴'],
925 \ ['triangleq' , '≜'],
926 \ ['triangleright' , '⊳'],
927 \ ['trianglerighteq', '⊵'],
928 \ ['twoheadleftarrow', '↞'],
929 \ ['twoheadrightarrow', '↠'],
930 \ ['uparrow' , '↑'],
931 \ ['Uparrow' , '⇑'],
932 \ ['updownarrow' , '↕'],
933 \ ['Updownarrow' , '⇕'],
934 \ ['varnothing' , '∅'],
935 \ ['vartriangle' , '∆'],
936 \ ['vdash' , '⊢'],
937 \ ['vDash' , '⊨'],
938 \ ['Vdash' , '⊩'],
939 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200940 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100941 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200942 \ ['Vvdash' , '⊪'],
943 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200944 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200945 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100946" \ ['jmath' , 'X']
947" \ ['uminus' , 'X']
948" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200949 for texmath in s:texMathList
Bram Moolenaarf3913272016-02-25 00:00:01 +0100950 if texmath[0] =~# '\w$'
Bram Moolenaar81af9252010-12-10 20:35:50 +0100951 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
952 else
953 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
954 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200955 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200956
957 if &ambw == "double"
958 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
959 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
960 else
961 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
962 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
963 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200964
965 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
966 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
967 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
968 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
969 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
970 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
971 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
972 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
973 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
974 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
975 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
976 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
977 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
978 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
979 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
980 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
981 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
982 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
983 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
984 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +0100985" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200986 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200987
988 " Greek {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100989 if s:tex_conceal =~# 'g'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200990 fun! s:Greek(group,pat,cchar)
991 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
992 endfun
993 call s:Greek('texGreek','\\alpha\>' ,'α')
994 call s:Greek('texGreek','\\beta\>' ,'β')
995 call s:Greek('texGreek','\\gamma\>' ,'γ')
996 call s:Greek('texGreek','\\delta\>' ,'δ')
997 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
998 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
999 call s:Greek('texGreek','\\zeta\>' ,'ζ')
1000 call s:Greek('texGreek','\\eta\>' ,'η')
1001 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001002 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001003 call s:Greek('texGreek','\\kappa\>' ,'κ')
1004 call s:Greek('texGreek','\\lambda\>' ,'λ')
1005 call s:Greek('texGreek','\\mu\>' ,'μ')
1006 call s:Greek('texGreek','\\nu\>' ,'ν')
1007 call s:Greek('texGreek','\\xi\>' ,'ξ')
1008 call s:Greek('texGreek','\\pi\>' ,'π')
1009 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1010 call s:Greek('texGreek','\\rho\>' ,'ρ')
1011 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1012 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001013 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001014 call s:Greek('texGreek','\\tau\>' ,'τ')
1015 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001016 call s:Greek('texGreek','\\phi\>' ,'ϕ')
1017 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001018 call s:Greek('texGreek','\\chi\>' ,'χ')
1019 call s:Greek('texGreek','\\psi\>' ,'ψ')
1020 call s:Greek('texGreek','\\omega\>' ,'ω')
1021 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1022 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1023 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1024 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1025 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1026 call s:Greek('texGreek','\\Pi\>' ,'Π')
1027 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1028 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1029 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1030 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1031 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1032 delfun s:Greek
1033 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001034
1035 " Superscripts/Subscripts {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001036 if s:tex_conceal =~# 's'
1037 if s:tex_fast =~# 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001038 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1039 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1040 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001041 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001042 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar03413f42016-04-12 21:07:15 +02001043 if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001044" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1045 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001046 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +02001047 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001048 endfun
1049 call s:SuperSub('texSuperscript','\^','0','⁰')
1050 call s:SuperSub('texSuperscript','\^','1','¹')
1051 call s:SuperSub('texSuperscript','\^','2','²')
1052 call s:SuperSub('texSuperscript','\^','3','³')
1053 call s:SuperSub('texSuperscript','\^','4','⁴')
1054 call s:SuperSub('texSuperscript','\^','5','⁵')
1055 call s:SuperSub('texSuperscript','\^','6','⁶')
1056 call s:SuperSub('texSuperscript','\^','7','⁷')
1057 call s:SuperSub('texSuperscript','\^','8','⁸')
1058 call s:SuperSub('texSuperscript','\^','9','⁹')
1059 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1060 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1061 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1062 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1063 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1064 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1065 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1066 call s:SuperSub('texSuperscript','\^','h','ʰ')
1067 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1068 call s:SuperSub('texSuperscript','\^','j','ʲ')
1069 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1070 call s:SuperSub('texSuperscript','\^','l','ˡ')
1071 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1072 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1073 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1074 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1075 call s:SuperSub('texSuperscript','\^','r','ʳ')
1076 call s:SuperSub('texSuperscript','\^','s','ˢ')
1077 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1078 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1079 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1080 call s:SuperSub('texSuperscript','\^','w','ʷ')
1081 call s:SuperSub('texSuperscript','\^','x','ˣ')
1082 call s:SuperSub('texSuperscript','\^','y','ʸ')
1083 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1084 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1085 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1086 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1087 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1088 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1089 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1090 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1091 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1092 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1093 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1094 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1095 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1096 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1097 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1098 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1099 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1100 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1101 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001102 call s:SuperSub('texSuperscript','\^',',','︐')
1103 call s:SuperSub('texSuperscript','\^',':','︓')
1104 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001105 call s:SuperSub('texSuperscript','\^','+','⁺')
1106 call s:SuperSub('texSuperscript','\^','-','⁻')
1107 call s:SuperSub('texSuperscript','\^','<','˂')
1108 call s:SuperSub('texSuperscript','\^','>','˃')
1109 call s:SuperSub('texSuperscript','\^','/','ˊ')
1110 call s:SuperSub('texSuperscript','\^','(','⁽')
1111 call s:SuperSub('texSuperscript','\^',')','⁾')
1112 call s:SuperSub('texSuperscript','\^','\.','˙')
1113 call s:SuperSub('texSuperscript','\^','=','˭')
1114 call s:SuperSub('texSubscript','_','0','₀')
1115 call s:SuperSub('texSubscript','_','1','₁')
1116 call s:SuperSub('texSubscript','_','2','₂')
1117 call s:SuperSub('texSubscript','_','3','₃')
1118 call s:SuperSub('texSubscript','_','4','₄')
1119 call s:SuperSub('texSubscript','_','5','₅')
1120 call s:SuperSub('texSubscript','_','6','₆')
1121 call s:SuperSub('texSubscript','_','7','₇')
1122 call s:SuperSub('texSubscript','_','8','₈')
1123 call s:SuperSub('texSubscript','_','9','₉')
1124 call s:SuperSub('texSubscript','_','a','ₐ')
1125 call s:SuperSub('texSubscript','_','e','ₑ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001126 call s:SuperSub('texSubscript','_','h','ₕ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001127 call s:SuperSub('texSubscript','_','i','ᵢ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001128 call s:SuperSub('texSubscript','_','j','ⱼ')
1129 call s:SuperSub('texSubscript','_','k','ₖ')
1130 call s:SuperSub('texSubscript','_','l','ₗ')
1131 call s:SuperSub('texSubscript','_','m','ₘ')
1132 call s:SuperSub('texSubscript','_','n','ₙ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001133 call s:SuperSub('texSubscript','_','o','ₒ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001134 call s:SuperSub('texSubscript','_','p','ₚ')
1135 call s:SuperSub('texSubscript','_','r','ᵣ')
1136 call s:SuperSub('texSubscript','_','s','ₛ')
1137 call s:SuperSub('texSubscript','_','t','ₜ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001138 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001139 call s:SuperSub('texSubscript','_','v','ᵥ')
1140 call s:SuperSub('texSubscript','_','x','ₓ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001141 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001142 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','_','\.','‸')
1148 call s:SuperSub('texSubscript','_','r','ᵣ')
1149 call s:SuperSub('texSubscript','_','v','ᵥ')
1150 call s:SuperSub('texSubscript','_','x','ₓ')
1151 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1152 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1153 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1154 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1155 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
Bram Moolenaar802a0d92016-06-26 16:17:58 +02001156
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001157 delfun s:SuperSub
1158 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001159
1160 " Accented characters: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001161 if s:tex_conceal =~# 'a'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001162 if b:tex_stylish
1163 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1164 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1165 else
1166 fun! s:Accents(chr,...)
1167 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001168 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001169 if i > a:0
1170 break
1171 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001172 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001173 let i= i + 1
1174 continue
1175 endif
Bram Moolenaarf3913272016-02-25 00:00:01 +01001176 if accent =~# '\a'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001177 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1178 else
1179 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1180 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001181 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001182 endfor
1183 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001184 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1185 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1186 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1187 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1188 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1189 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1190 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1191 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1192 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1193 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1194 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1195 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1196 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1197 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1198 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1199 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1200 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1201 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1202 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1203 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1204 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1205 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1206 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1207 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1208 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1209 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1210 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1211 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1212 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1213 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1214 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1215 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1216 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1217 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1218 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1219 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1220 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1221 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001222 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1223 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001224 delfun s:Accents
1225 syn match texAccent '\\aa\>' conceal cchar=å
1226 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001227 syn match texAccent '\\o\>' conceal cchar=ø
1228 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001229 syn match texLigature '\\AE\>' conceal cchar=Æ
1230 syn match texLigature '\\ae\>' conceal cchar=æ
1231 syn match texLigature '\\oe\>' conceal cchar=œ
1232 syn match texLigature '\\OE\>' conceal cchar=Œ
1233 syn match texLigature '\\ss\>' conceal cchar=ß
1234 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001235 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001236endif
1237
1238" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001239" LaTeX synchronization: {{{1
1240syn sync maxlines=200
1241syn sync minlines=50
1242
1243syn sync match texSyncStop groupthere NONE "%stopzone\>"
1244
1245" Synchronization: {{{1
1246" The $..$ and $$..$$ make for impossible sync patterns
1247" (one can't tell if a "$$" starts or stops a math zone by itself)
1248" The following grouptheres coupled with minlines above
1249" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001250if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001251 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1252 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1253 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1254 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1255 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1256 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1257 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1258 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1259endif
1260
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001261" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001262" Highlighting: {{{1
1263if did_tex_syntax_inits == 1
1264 let did_tex_syntax_inits= 2
1265 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001266 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001267 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001268 HiLink texBadMath texError
1269 HiLink texMathDelimBad texError
1270 HiLink texMathError texError
1271 if !b:tex_stylish
1272 HiLink texOnlyMath texError
1273 endif
1274 endif
1275 HiLink texError Error
1276 endif
1277
Bram Moolenaard38b0552012-04-25 19:07:41 +02001278 hi texBoldStyle gui=bold cterm=bold
1279 hi texItalStyle gui=italic cterm=italic
1280 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1281 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaard960d762011-09-21 19:22:10 +02001282 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001283 HiLink texDefCmd texDef
1284 HiLink texDefName texDef
1285 HiLink texDocType texCmdName
1286 HiLink texDocTypeArgs texCmdArgs
1287 HiLink texInputFileOpt texCmdArgs
1288 HiLink texInputCurlies texDelimiter
1289 HiLink texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001290 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001291 HiLink texMathDelimSet1 texMathDelim
1292 HiLink texMathDelimSet2 texMathDelim
1293 HiLink texMathDelimKey texMathDelim
1294 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001295 HiLink texAccent texStatement
1296 HiLink texGreek texStatement
1297 HiLink texSuperscript texStatement
1298 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001299 HiLink texSuperscripts texSuperscript
1300 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001301 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001302 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001303 HiLink texMathZoneW texMath
1304 HiLink texMathZoneX texMath
1305 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001306 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001307 HiLink texMathZoneZ texMath
1308 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +02001309 HiLink texBeginEnd texCmdName
1310 HiLink texBeginEndName texSection
Bram Moolenaar071d4272004-06-13 20:20:40 +00001311 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001312 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001313 HiLink texTypeSize texType
1314 HiLink texTypeStyle texType
1315
1316 " Basic TeX highlighting groups
1317 HiLink texCmdArgs Number
1318 HiLink texCmdName Statement
1319 HiLink texComment Comment
1320 HiLink texDef Statement
1321 HiLink texDefParm Special
1322 HiLink texDelimiter Delimiter
1323 HiLink texInput Special
1324 HiLink texInputFile Special
1325 HiLink texLength Number
1326 HiLink texMath Special
1327 HiLink texMathDelim Statement
1328 HiLink texMathOper Operator
1329 HiLink texNewCmd Statement
1330 HiLink texNewEnv Statement
1331 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001332 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001333 HiLink texSection PreCondit
1334 HiLink texSpaceCodeChar Special
1335 HiLink texSpecialChar SpecialChar
1336 HiLink texStatement Statement
1337 HiLink texString String
1338 HiLink texTodo Todo
1339 HiLink texType Type
1340 HiLink texZone PreCondit
1341
1342 delcommand HiLink
1343endif
1344
Bram Moolenaar15146672011-10-20 22:22:38 +02001345" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001346delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001347unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001348let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001349let &cpo = s:keepcpo
1350unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001351" vim: ts=8 fdm=marker