blob: 5af5882a564bb76cbf66554dfa4b111fd073086b [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 Moolenaar7db8f6f2016-03-29 23:12:46 +02004" Last Change: Mar 07, 2016
5" Version: 93
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 Moolenaar543b7ef2013-06-01 14:50:56 +020065
66" by default, enable all region-based highlighting
67let s:tex_fast= "bcmMprsSvV"
68if exists("g:tex_fast")
69 if type(g:tex_fast) != 1
70 " g:tex_fast exists and is not a string, so
71 " turn off all optional region-based highighting
72 let s:tex_fast= ""
73 else
74 let s:tex_fast= g:tex_fast
75 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000076endif
77
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020078" let user determine which classes of concealment will be supported
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020079" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020080if !exists("g:tex_conceal")
Bram Moolenaarbc488a72013-07-05 21:01:22 +020081 let s:tex_conceal= 'abdmgsS'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020082else
83 let s:tex_conceal= g:tex_conceal
84endif
Bram Moolenaar6e932462014-09-09 18:48:09 +020085if !exists("g:tex_superscripts")
86 let g:tex_superscripts= "[0-9a-zA-W.,:;+-<>/()=]"
87endif
88if !exists("g:tex_subscripts")
89 let g:tex_subscripts= "[0-9aehijklmnoprstuvx,+-/().]"
90endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020091
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000092" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000093" The user may override the normal determination by setting
94" g:tex_stylish to 1 (for "*.sty" mode)
95" or to 0 else (normal "*.tex" mode)
96" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +010097let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +000098if exists("g:tex_stylish")
99 let b:tex_stylish= g:tex_stylish
100elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +0100101 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102 let b:tex_stylish= 1
103 else
104 let b:tex_stylish= 0
105 endif
106endif
107
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000108" handle folding {{{1
109if !exists("g:tex_fold_enabled")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100110 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000111elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100112 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000113 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 +0100114else
115 let s:tex_fold_enabled= 1
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000116endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100117if s:tex_fold_enabled && &fdm == "manual"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200118 setl fdm=syntax
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000119endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100120if s:tex_fold_enabled && has("folding")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100121 com! -nargs=* TexFold <args> fold
122else
123 com! -nargs=* TexFold <args>
124endif
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000125
Bram Moolenaaradc21822011-04-01 18:03:16 +0200126" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +0200128" One may override this iskeyword setting by providing
129" g:tex_isk
130if exists("g:tex_isk")
131 exe "setlocal isk=".g:tex_isk
Bram Moolenaar13d5aee2016-01-21 23:36:05 +0100132elseif !has("patch-7.4.1141")
133 setl isk=48-57,a-z,A-Z,192-255
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134else
Bram Moolenaar13d5aee2016-01-21 23:36:05 +0100135 syn iskeyword 48-57,a-z,A-Z,192-255
Bram Moolenaaradc21822011-04-01 18:03:16 +0200136endif
137if b:tex_stylish
138 setlocal isk+=@-@
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100140if exists("g:tex_no_error") && g:tex_no_error
141 let s:tex_no_error= 1
142else
143 let s:tex_no_error= 0
144endif
145if exists("g:tex_comment_nospell") && g:tex_comment_nospell
146 let s:tex_comment_nospell= 1
147else
148 let s:tex_comment_nospell= 0
149endif
150if exists("g:tex_nospell") && g:tex_nospell
151 let s:tex_nospell = 1
152else
153 let s:tex_nospell = 0
Bram Moolenaard960d762011-09-21 19:22:10 +0200154endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000155
156" Clusters: {{{1
157" --------
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100158syn 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 Moolenaara0f849e2015-10-30 14:37:44 +0100159if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100160 syn cluster texCmdGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100162syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
163syn 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
164syn 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
165syn 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
166if !s:tex_nospell
167 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
168 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 +0200169else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100170 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
171 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 +0200172endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100173syn 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 +0100174syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100175if !exists("g:tex_no_math")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100176 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
177 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
178 syn cluster texMatchGroup add=@texMathZones
179 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
180 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
181 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100182 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100183 syn cluster texMathMatchGroup add=texMathError
184 syn cluster texMathZoneGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100186 syn cluster texMathZoneGroup add=@NoSpell
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000187 " following used in the \part \chapter \section \subsection \subsubsection
188 " \paragraph \subparagraph \author \title highlighting
189 syn cluster texDocGroup contains=texPartZone,@texPartGroup
190 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
191 syn cluster texChapterGroup contains=texSectionZone,texParaZone
192 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
193 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
194 syn cluster texSubSubSectionGroup contains=texParaZone
195 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200196 if has("conceal") && &enc == 'utf-8'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100197 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
198 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200199 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200endif
201
202" Try to flag {} and () mismatches: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100203if s:tex_fast =~# 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100204 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100205 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
206 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100207 else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100208 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
209 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100210 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100211 if !s:tex_nospell
212 syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100213 else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100214 syn region texParen start="(" end=")" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100215 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100217if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000218 syn match texError "[}\])]"
219endif
Bram Moolenaarf3913272016-02-25 00:00:01 +0100220if s:tex_fast =~# 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100221 if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100222 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100223 syn match texMathError "}" contained
224 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100225 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100226 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000227endif
228
229" TeX/LaTeX keywords: {{{1
230" Instead of trying to be All Knowing, I just match \..alphameric..
231" Note that *.tex files may not have "@" in their \commands
232if exists("g:tex_tex") || b:tex_stylish
233 syn match texStatement "\\[a-zA-Z@]\+"
234else
235 syn match texStatement "\\\a\+"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100236 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000237 syn match texError "\\\a*@[a-zA-Z@]*"
238 endif
239endif
240
241" TeX/LaTeX delimiters: {{{1
242syn match texDelimiter "&"
243syn match texDelimiter "\\\\"
244
245" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200246syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000247
248" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
249if b:tex_stylish
250 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
251 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
252else
253 syn match texAccent "\\[bcdvuH]\A"me=e-1
254 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
255endif
256syn match texAccent "\\[bcdvuH]$"
257syn match texAccent +\\[=^.\~"`']+
258syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
259syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
260
261" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200262syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaarf3913272016-02-25 00:00:01 +0100263if s:tex_fast =~# 'm'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100264 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100265 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@NoSpell
266endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000267
268" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200269syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaarf3913272016-02-25 00:00:01 +0100270if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100271 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
272endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000274" Preamble syntax-based folding support: {{{1
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100275if s:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200276 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000277endif
278
Bram Moolenaar071d4272004-06-13 20:20:40 +0000279" TeX input: {{{1
280syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100281syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000282syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
283syn match texInputCurlies "[{}]" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100284if s:tex_fast =~# 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100285 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
286endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000287
288" Type Styles (LaTeX 2.09): {{{1
289syn match texTypeStyle "\\rm\>"
290syn match texTypeStyle "\\em\>"
291syn match texTypeStyle "\\bf\>"
292syn match texTypeStyle "\\it\>"
293syn match texTypeStyle "\\sl\>"
294syn match texTypeStyle "\\sf\>"
295syn match texTypeStyle "\\sc\>"
296syn match texTypeStyle "\\tt\>"
297
298" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200299if s:tex_conceal !~# 'b'
Bram Moolenaard38b0552012-04-25 19:07:41 +0200300 syn match texTypeStyle "\\textbf\>"
301 syn match texTypeStyle "\\textit\>"
302endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000303syn match texTypeStyle "\\textmd\>"
304syn match texTypeStyle "\\textrm\>"
305syn match texTypeStyle "\\textsc\>"
306syn match texTypeStyle "\\textsf\>"
307syn match texTypeStyle "\\textsl\>"
308syn match texTypeStyle "\\texttt\>"
309syn match texTypeStyle "\\textup\>"
310syn match texTypeStyle "\\emph\>"
311
312syn match texTypeStyle "\\mathbb\>"
313syn match texTypeStyle "\\mathbf\>"
314syn match texTypeStyle "\\mathcal\>"
315syn match texTypeStyle "\\mathfrak\>"
316syn match texTypeStyle "\\mathit\>"
317syn match texTypeStyle "\\mathnormal\>"
318syn match texTypeStyle "\\mathrm\>"
319syn match texTypeStyle "\\mathsf\>"
320syn match texTypeStyle "\\mathtt\>"
321
322syn match texTypeStyle "\\rmfamily\>"
323syn match texTypeStyle "\\sffamily\>"
324syn match texTypeStyle "\\ttfamily\>"
325
326syn match texTypeStyle "\\itshape\>"
327syn match texTypeStyle "\\scshape\>"
328syn match texTypeStyle "\\slshape\>"
329syn match texTypeStyle "\\upshape\>"
330
331syn match texTypeStyle "\\bfseries\>"
332syn match texTypeStyle "\\mdseries\>"
333
334" Some type sizes: {{{1
335syn match texTypeSize "\\tiny\>"
336syn match texTypeSize "\\scriptsize\>"
337syn match texTypeSize "\\footnotesize\>"
338syn match texTypeSize "\\small\>"
339syn match texTypeSize "\\normalsize\>"
340syn match texTypeSize "\\large\>"
341syn match texTypeSize "\\Large\>"
342syn match texTypeSize "\\LARGE\>"
343syn match texTypeSize "\\huge\>"
344syn match texTypeSize "\\Huge\>"
345
346" Spacecodes (TeX'isms): {{{1
347" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
348syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
349syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
350
351" Sections, subsections, etc: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100352if s:tex_fast =~# 'p'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100353 if !s:tex_nospell
354 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
355 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
356 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
357 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
358 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
359 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
360 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
361 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
362 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
363 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
364 else
365 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
366 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
367 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
368 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
369 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
370 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
371 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
372 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
373 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
374 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 +0100375 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000376endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000377
Bram Moolenaard38b0552012-04-25 19:07:41 +0200378" particular support for bold and italic {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100379if s:tex_fast =~# 'b'
380 if s:tex_conceal =~# 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200381 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200382 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
383 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
384 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
385 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
386 else
387 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
388 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
389 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
390 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200391 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100392 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200393endif
394
Bram Moolenaar071d4272004-06-13 20:20:40 +0000395" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100396if !exists("g:tex_no_math") && !s:tex_no_error
397 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
399 syn match texBadMath "\\[\])]"
400endif
401
402" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100403if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000404 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000405 " Starred forms are created if starform is true. Starred
406 " forms have syntax group and synchronization groups with a
407 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
408 fun! TexNewMathZone(sfx,mathzone,starform)
409 let grpname = "texMathZone".a:sfx
410 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100411 if s:tex_fold_enabled
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000412 let foldcmd= " fold"
413 else
414 let foldcmd= ""
415 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000416 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100417 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100418 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
419 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
420 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
421 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100422 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000423 if a:starform
424 let grpname = "texMathZone".a:sfx.'S'
425 let syncname = "texSyncMathZone".a:sfx.'S'
426 exe "syn cluster texMathZones add=".grpname
Bram Moolenaarf3913272016-02-25 00:00:01 +0100427 if s:tex_fast =~# 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100428 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
429 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
430 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
431 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100432 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000433 endif
434 endfun
435
436 " Standard Math Zones: {{{2
437 call TexNewMathZone("A","align",1)
438 call TexNewMathZone("B","alignat",1)
439 call TexNewMathZone("C","displaymath",1)
440 call TexNewMathZone("D","eqnarray",1)
441 call TexNewMathZone("E","equation",1)
442 call TexNewMathZone("F","flalign",1)
443 call TexNewMathZone("G","gather",1)
444 call TexNewMathZone("H","math",1)
445 call TexNewMathZone("I","multline",1)
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100446 call TexNewMathZone("J","subequations",0)
447 call TexNewMathZone("K","xalignat",1)
448 call TexNewMathZone("L","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 Moolenaar4b22cdb2010-08-02 22:12:46 +0200480 syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
481 syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200482 let s:texMathDelimList=[
483 \ ['<' , '<'] ,
484 \ ['>' , '>'] ,
485 \ ['(' , '('] ,
486 \ [')' , ')'] ,
487 \ ['\[' , '['] ,
488 \ [']' , ']'] ,
489 \ ['\\{' , '{'] ,
490 \ ['\\}' , '}'] ,
491 \ ['|' , '|'] ,
492 \ ['\\|' , '‖'] ,
493 \ ['\\backslash' , '\'] ,
494 \ ['\\downarrow' , '↓'] ,
495 \ ['\\Downarrow' , '⇓'] ,
496 \ ['\\langle' , '<'] ,
497 \ ['\\lbrace' , '['] ,
498 \ ['\\lceil' , '⌈'] ,
499 \ ['\\lfloor' , '⌊'] ,
500 \ ['\\lgroup' , '⌊'] ,
501 \ ['\\lmoustache' , '⎛'] ,
502 \ ['\\rangle' , '>'] ,
503 \ ['\\rbrace' , ']'] ,
504 \ ['\\rceil' , '⌉'] ,
505 \ ['\\rfloor' , '⌋'] ,
506 \ ['\\rgroup' , '⌋'] ,
507 \ ['\\rmoustache' , '⎞'] ,
508 \ ['\\uparrow' , '↑'] ,
509 \ ['\\Uparrow' , '↑'] ,
510 \ ['\\updownarrow', '↕'] ,
511 \ ['\\Updownarrow', '⇕']]
512 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
513 for texmath in s:texMathDelimList
514 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
515 endfor
516
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200517 else
518 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200519 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
520 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
521 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
522 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
523 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
524 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
525 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
526 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200527 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000528 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
529 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000530endif
531
532" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
533syn match texSpecialChar "\\[$&%#{}_]"
534if b:tex_stylish
535 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
536else
537 syn match texSpecialChar "\\[SP@]\A"me=e-1
538endif
539syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100540if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000541 syn match texOnlyMath "[_^]"
542endif
543syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200544if s:tex_conceal !~# 'S'
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200545 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
546 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
547 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
548 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
549 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
550endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000551
552" Comments: {{{1
553" Normal TeX LaTeX : %....
554" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100555if !s:tex_comment_nospell
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000556 syn cluster texCommentGroup contains=texTodo,@Spell
557else
558 syn cluster texCommentGroup contains=texTodo,@NoSpell
559endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000560syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000561syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000562syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100563if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100564 syn match texComment "\^\^A.*$" contains=@texCommentGroup
565 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000566else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100567 if s:tex_fold_enabled
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100568 " allows syntax-folding of 2 or more contiguous comment lines
569 " single-line comments are not folded
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100570 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100571 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100572 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
573 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 +0000574 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100575 else
576 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaarf3913272016-02-25 00:00:01 +0100577 if s:tex_fast =~# 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100578 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100579 endif
580 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000581endif
582
583" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200584" will appropriately terminate.
585" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaarf3913272016-02-25 00:00:01 +0100586if s:tex_fast =~# 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100587 if exists("g:tex_verbspell") && g:tex_verbspell
588 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
589 " listings package:
590 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
591 if version < 600
592 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
593 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200594 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100595 if b:tex_stylish
596 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
597 else
598 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
599 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200600 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100601 else
602 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
603 if version < 600
604 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
605 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200606 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100607 if b:tex_stylish
608 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
609 else
610 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
611 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200612 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100613 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000614endif
615
616" Tex Reference Zones: {{{1
Bram Moolenaarf3913272016-02-25 00:00:01 +0100617if s:tex_fast =~# 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100618 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
619 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
620 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
621 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
622 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
623 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
624 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200625 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100626endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200627syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000628
629" Handle newcommand, newenvironment : {{{1
630syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100631if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100632 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
633 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
634 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
635endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000636syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaarf3913272016-02-25 00:00:01 +0100637if s:tex_fast =~# 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100638 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
639 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
640 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
641endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000642
643" Definitions/Commands: {{{1
644syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
645if b:tex_stylish
646 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
647 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
648else
649 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
650 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
651endif
652syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
653syn match texDefParm contained "#\d\+"
654
655" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000656syn 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 +0000657
658" TeX String Delimiters: {{{1
659syn match texString "\(``\|''\|,,\)"
660
Bram Moolenaar5c736222010-01-06 20:54:52 +0100661" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100662if !s:tex_no_error
Bram Moolenaarf3913272016-02-25 00:00:01 +0100663 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100664 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
665 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100666 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaarf3913272016-02-25 00:00:01 +0100667 if s:tex_fast =~# 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100668 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
669 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
670 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100671endif
672
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200673" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200674if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200675
676 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200677 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaarf3913272016-02-25 00:00:01 +0100678 if s:tex_conceal =~# 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200679 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200680 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200681 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100682 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200683 \ ['angle' , '∠'],
684 \ ['approx' , '≈'],
685 \ ['ast' , '∗'],
686 \ ['asymp' , '≍'],
687 \ ['backepsilon' , '∍'],
688 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200689 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200690 \ ['barwedge' , '⊼'],
691 \ ['because' , '∵'],
692 \ ['between' , '≬'],
693 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100694 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200695 \ ['bigcup' , '∪'],
696 \ ['bigodot' , '⊙'],
697 \ ['bigoplus' , '⊕'],
698 \ ['bigotimes' , '⊗'],
699 \ ['bigsqcup' , '⊔'],
700 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100701 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200702 \ ['bigvee' , '⋁'],
703 \ ['bigwedge' , '⋀'],
704 \ ['blacksquare' , '∎'],
705 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100706 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200707 \ ['boxdot' , '⊡'],
708 \ ['boxminus' , '⊟'],
709 \ ['boxplus' , '⊞'],
710 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100711 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200712 \ ['bumpeq' , '≏'],
713 \ ['Bumpeq' , '≎'],
714 \ ['cap' , '∩'],
715 \ ['Cap' , '⋒'],
716 \ ['cdot' , '·'],
717 \ ['cdots' , '⋯'],
718 \ ['circ' , '∘'],
719 \ ['circeq' , '≗'],
720 \ ['circlearrowleft', '↺'],
721 \ ['circlearrowright', '↻'],
722 \ ['circledast' , '⊛'],
723 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200724 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200725 \ ['complement' , '∁'],
726 \ ['cong' , '≅'],
727 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200728 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200729 \ ['cup' , '∪'],
730 \ ['Cup' , '⋓'],
731 \ ['curlyeqprec' , '⋞'],
732 \ ['curlyeqsucc' , '⋟'],
733 \ ['curlyvee' , '⋎'],
734 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100735 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200736 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100737 \ ['ddagger' , '‡'],
738 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200739 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200740 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200741 \ ['div' , '÷'],
742 \ ['doteq' , '≐'],
743 \ ['doteqdot' , '≑'],
744 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100745 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200746 \ ['dotsb' , '⋯'],
747 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200748 \ ['dotsi' , '⋯'],
749 \ ['dotso' , '…'],
750 \ ['doublebarwedge' , '⩞'],
751 \ ['downarrow' , '↓'],
752 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100753 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200754 \ ['emptyset' , '∅'],
755 \ ['eqcirc' , '≖'],
756 \ ['eqsim' , '≂'],
757 \ ['eqslantgtr' , '⪖'],
758 \ ['eqslantless' , '⪕'],
759 \ ['equiv' , '≡'],
760 \ ['exists' , '∃'],
761 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200762 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200763 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100764 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200765 \ ['ge' , '≥'],
766 \ ['geq' , '≥'],
767 \ ['geqq' , '≧'],
768 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100769 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200770 \ ['gneqq' , '≩'],
771 \ ['gtrdot' , '⋗'],
772 \ ['gtreqless' , '⋛'],
773 \ ['gtrless' , '≷'],
774 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200775 \ ['hbar' , 'ℏ'],
776 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200777 \ ['hookleftarrow' , '↩'],
778 \ ['hookrightarrow' , '↪'],
779 \ ['iiint' , '∭'],
780 \ ['iint' , '∬'],
781 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200782 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200783 \ ['in' , '∈'],
784 \ ['infty' , '∞'],
785 \ ['int' , '∫'],
786 \ ['lceil' , '⌈'],
787 \ ['ldots' , '…'],
788 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100789 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200790 \ ['left(' , '('],
791 \ ['left\[' , '['],
792 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100793 \ ['leftarrow' , '←'],
794 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100795 \ ['leftarrowtail' , '↢'],
796 \ ['leftharpoondown', '↽'],
797 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100798 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100799 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200800 \ ['leftrightsquigarrow', '↭'],
801 \ ['leftthreetimes' , '⋋'],
802 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100803 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200804 \ ['leqq' , '≦'],
805 \ ['lessdot' , '⋖'],
806 \ ['lesseqgtr' , '⋚'],
807 \ ['lesssim' , '≲'],
808 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100809 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200810 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200811 \ ['lneqq' , '≨'],
812 \ ['ltimes' , '⋉'],
813 \ ['mapsto' , '↦'],
814 \ ['measuredangle' , '∡'],
815 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100816 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200817 \ ['mp' , '∓'],
818 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200819 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200820 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200821 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100822 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200823 \ ['neg' , '¬'],
824 \ ['neq' , '≠'],
825 \ ['nexists' , '∄'],
826 \ ['ngeq' , '≱'],
827 \ ['ngeqq' , '≱'],
828 \ ['ngtr' , '≯'],
829 \ ['ni' , '∋'],
830 \ ['nleftarrow' , '↚'],
831 \ ['nLeftarrow' , '⇍'],
832 \ ['nLeftrightarrow', '⇎'],
833 \ ['nleq' , '≰'],
834 \ ['nleqq' , '≰'],
835 \ ['nless' , '≮'],
836 \ ['nmid' , '∤'],
837 \ ['notin' , '∉'],
838 \ ['nprec' , '⊀'],
839 \ ['nrightarrow' , '↛'],
840 \ ['nRightarrow' , '⇏'],
841 \ ['nsim' , '≁'],
842 \ ['nsucc' , '⊁'],
843 \ ['ntriangleleft' , '⋪'],
844 \ ['ntrianglelefteq', '⋬'],
845 \ ['ntriangleright' , '⋫'],
846 \ ['ntrianglerighteq', '⋭'],
847 \ ['nvdash' , '⊬'],
848 \ ['nvDash' , '⊭'],
849 \ ['nVdash' , '⊮'],
850 \ ['nwarrow' , '↖'],
851 \ ['odot' , '⊙'],
852 \ ['oint' , '∮'],
853 \ ['ominus' , '⊖'],
854 \ ['oplus' , '⊕'],
855 \ ['oslash' , '⊘'],
856 \ ['otimes' , '⊗'],
857 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200858 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100859 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200860 \ ['partial' , '∂'],
861 \ ['perp' , '⊥'],
862 \ ['pitchfork' , '⋔'],
863 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200864 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100865 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200866 \ ['preccurlyeq' , '≼'],
867 \ ['preceq' , '⪯'],
868 \ ['precnapprox' , '⪹'],
869 \ ['precneqq' , '⪵'],
870 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200871 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200872 \ ['prod' , '∏'],
873 \ ['propto' , '∝'],
874 \ ['rceil' , '⌉'],
875 \ ['Re' , 'ℜ'],
876 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200877 \ ['right)' , ')'],
878 \ ['right]' , ']'],
879 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100880 \ ['rightarrow' , '→'],
881 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100882 \ ['rightarrowtail' , '↣'],
883 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200884 \ ['rightsquigarrow', '↝'],
885 \ ['rightthreetimes', '⋌'],
886 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200887 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200888 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200889 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200890 \ ['searrow' , '↘'],
891 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200892 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200893 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100894 \ ['simeq' , '⋍'],
895 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200896 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200897 \ ['sphericalangle' , '∢'],
898 \ ['sqcap' , '⊓'],
899 \ ['sqcup' , '⊔'],
900 \ ['sqsubset' , '⊏'],
901 \ ['sqsubseteq' , '⊑'],
902 \ ['sqsupset' , '⊐'],
903 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100904 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200905 \ ['subset' , '⊂'],
906 \ ['Subset' , '⋐'],
907 \ ['subseteq' , '⊆'],
908 \ ['subseteqq' , '⫅'],
909 \ ['subsetneq' , '⊊'],
910 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200911 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100912 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200913 \ ['succcurlyeq' , '≽'],
914 \ ['succeq' , '⪰'],
915 \ ['succnapprox' , '⪺'],
916 \ ['succneqq' , '⪶'],
917 \ ['succsim' , '≿'],
918 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100919 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200920 \ ['Supset' , '⋑'],
921 \ ['supseteq' , '⊇'],
922 \ ['supseteqq' , '⫆'],
923 \ ['supsetneq' , '⊋'],
924 \ ['supsetneqq' , '⫌'],
925 \ ['surd' , '√'],
926 \ ['swarrow' , '↙'],
927 \ ['therefore' , '∴'],
928 \ ['times' , '×'],
929 \ ['to' , '→'],
930 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200931 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200932 \ ['triangleleft' , '⊲'],
933 \ ['trianglelefteq' , '⊴'],
934 \ ['triangleq' , '≜'],
935 \ ['triangleright' , '⊳'],
936 \ ['trianglerighteq', '⊵'],
937 \ ['twoheadleftarrow', '↞'],
938 \ ['twoheadrightarrow', '↠'],
939 \ ['uparrow' , '↑'],
940 \ ['Uparrow' , '⇑'],
941 \ ['updownarrow' , '↕'],
942 \ ['Updownarrow' , '⇕'],
943 \ ['varnothing' , '∅'],
944 \ ['vartriangle' , '∆'],
945 \ ['vdash' , '⊢'],
946 \ ['vDash' , '⊨'],
947 \ ['Vdash' , '⊩'],
948 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200949 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100950 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200951 \ ['Vvdash' , '⊪'],
952 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200953 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200954 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100955" \ ['jmath' , 'X']
956" \ ['uminus' , 'X']
957" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200958 for texmath in s:texMathList
Bram Moolenaarf3913272016-02-25 00:00:01 +0100959 if texmath[0] =~# '\w$'
Bram Moolenaar81af9252010-12-10 20:35:50 +0100960 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
961 else
962 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
963 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200964 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200965
966 if &ambw == "double"
967 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
968 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
969 else
970 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
971 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
972 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200973
974 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
975 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
976 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
977 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
978 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
979 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
980 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
981 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
982 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
983 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
984 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
985 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
986 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
987 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
988 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
989 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
990 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
991 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
992 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
993 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +0100994" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200995 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200996
997 " Greek {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +0100998 if s:tex_conceal =~# 'g'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200999 fun! s:Greek(group,pat,cchar)
1000 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
1001 endfun
1002 call s:Greek('texGreek','\\alpha\>' ,'α')
1003 call s:Greek('texGreek','\\beta\>' ,'β')
1004 call s:Greek('texGreek','\\gamma\>' ,'γ')
1005 call s:Greek('texGreek','\\delta\>' ,'δ')
1006 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
1007 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
1008 call s:Greek('texGreek','\\zeta\>' ,'ζ')
1009 call s:Greek('texGreek','\\eta\>' ,'η')
1010 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001011 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001012 call s:Greek('texGreek','\\kappa\>' ,'κ')
1013 call s:Greek('texGreek','\\lambda\>' ,'λ')
1014 call s:Greek('texGreek','\\mu\>' ,'μ')
1015 call s:Greek('texGreek','\\nu\>' ,'ν')
1016 call s:Greek('texGreek','\\xi\>' ,'ξ')
1017 call s:Greek('texGreek','\\pi\>' ,'π')
1018 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1019 call s:Greek('texGreek','\\rho\>' ,'ρ')
1020 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1021 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001022 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001023 call s:Greek('texGreek','\\tau\>' ,'τ')
1024 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001025 call s:Greek('texGreek','\\phi\>' ,'ϕ')
1026 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001027 call s:Greek('texGreek','\\chi\>' ,'χ')
1028 call s:Greek('texGreek','\\psi\>' ,'ψ')
1029 call s:Greek('texGreek','\\omega\>' ,'ω')
1030 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1031 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1032 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1033 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1034 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1035 call s:Greek('texGreek','\\Pi\>' ,'Π')
1036 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1037 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1038 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1039 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1040 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1041 delfun s:Greek
1042 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001043
1044 " Superscripts/Subscripts {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001045 if s:tex_conceal =~# 's'
1046 if s:tex_fast =~# 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001047 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1048 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1049 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001050 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001051 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaarf3913272016-02-25 00:00:01 +01001052 if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# g:tex_superscripts) || (a:leader == '_' && a:pat =~# g:tex_subscripts)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001053" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1054 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001055 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +02001056 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001057 endfun
1058 call s:SuperSub('texSuperscript','\^','0','⁰')
1059 call s:SuperSub('texSuperscript','\^','1','¹')
1060 call s:SuperSub('texSuperscript','\^','2','²')
1061 call s:SuperSub('texSuperscript','\^','3','³')
1062 call s:SuperSub('texSuperscript','\^','4','⁴')
1063 call s:SuperSub('texSuperscript','\^','5','⁵')
1064 call s:SuperSub('texSuperscript','\^','6','⁶')
1065 call s:SuperSub('texSuperscript','\^','7','⁷')
1066 call s:SuperSub('texSuperscript','\^','8','⁸')
1067 call s:SuperSub('texSuperscript','\^','9','⁹')
1068 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1069 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1070 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1071 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1072 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1073 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1074 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1075 call s:SuperSub('texSuperscript','\^','h','ʰ')
1076 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1077 call s:SuperSub('texSuperscript','\^','j','ʲ')
1078 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1079 call s:SuperSub('texSuperscript','\^','l','ˡ')
1080 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1081 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1082 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1083 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1084 call s:SuperSub('texSuperscript','\^','r','ʳ')
1085 call s:SuperSub('texSuperscript','\^','s','ˢ')
1086 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1087 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1088 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1089 call s:SuperSub('texSuperscript','\^','w','ʷ')
1090 call s:SuperSub('texSuperscript','\^','x','ˣ')
1091 call s:SuperSub('texSuperscript','\^','y','ʸ')
1092 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1093 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1094 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1095 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1096 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1097 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1098 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1099 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1100 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1101 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1102 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1103 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1104 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1105 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1106 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1107 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1108 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1109 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1110 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001111 call s:SuperSub('texSuperscript','\^',',','︐')
1112 call s:SuperSub('texSuperscript','\^',':','︓')
1113 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001114 call s:SuperSub('texSuperscript','\^','+','⁺')
1115 call s:SuperSub('texSuperscript','\^','-','⁻')
1116 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('texSubscript','_','0','₀')
1124 call s:SuperSub('texSubscript','_','1','₁')
1125 call s:SuperSub('texSubscript','_','2','₂')
1126 call s:SuperSub('texSubscript','_','3','₃')
1127 call s:SuperSub('texSubscript','_','4','₄')
1128 call s:SuperSub('texSubscript','_','5','₅')
1129 call s:SuperSub('texSubscript','_','6','₆')
1130 call s:SuperSub('texSubscript','_','7','₇')
1131 call s:SuperSub('texSubscript','_','8','₈')
1132 call s:SuperSub('texSubscript','_','9','₉')
1133 call s:SuperSub('texSubscript','_','a','ₐ')
1134 call s:SuperSub('texSubscript','_','e','ₑ')
1135 call s:SuperSub('texSubscript','_','i','ᵢ')
1136 call s:SuperSub('texSubscript','_','o','ₒ')
1137 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001138 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001139 call s:SuperSub('texSubscript','_','+','₊')
1140 call s:SuperSub('texSubscript','_','-','₋')
1141 call s:SuperSub('texSubscript','_','/','ˏ')
1142 call s:SuperSub('texSubscript','_','(','₍')
1143 call s:SuperSub('texSubscript','_',')','₎')
1144 call s:SuperSub('texSubscript','_','\.','‸')
1145 call s:SuperSub('texSubscript','_','r','ᵣ')
1146 call s:SuperSub('texSubscript','_','v','ᵥ')
1147 call s:SuperSub('texSubscript','_','x','ₓ')
1148 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1149 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1150 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1151 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1152 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
1153 delfun s:SuperSub
1154 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001155
1156 " Accented characters: {{{2
Bram Moolenaarf3913272016-02-25 00:00:01 +01001157 if s:tex_conceal =~# 'a'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001158 if b:tex_stylish
1159 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1160 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1161 else
1162 fun! s:Accents(chr,...)
1163 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001164 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001165 if i > a:0
1166 break
1167 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001168 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001169 let i= i + 1
1170 continue
1171 endif
Bram Moolenaarf3913272016-02-25 00:00:01 +01001172 if accent =~# '\a'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001173 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1174 else
1175 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1176 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001177 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001178 endfor
1179 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001180 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1181 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1182 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1183 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1184 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1185 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1186 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1187 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1188 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1189 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1190 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1191 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1192 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1193 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1194 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1195 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1196 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1197 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1198 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1199 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1200 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1201 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1202 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1203 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1204 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1205 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1206 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1207 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1208 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1209 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1210 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1211 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1212 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1213 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1214 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1215 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1216 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1217 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001218 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1219 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001220 delfun s:Accents
1221 syn match texAccent '\\aa\>' conceal cchar=å
1222 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001223 syn match texAccent '\\o\>' conceal cchar=ø
1224 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001225 syn match texLigature '\\AE\>' conceal cchar=Æ
1226 syn match texLigature '\\ae\>' conceal cchar=æ
1227 syn match texLigature '\\oe\>' conceal cchar=œ
1228 syn match texLigature '\\OE\>' conceal cchar=Œ
1229 syn match texLigature '\\ss\>' conceal cchar=ß
1230 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001231 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001232endif
1233
1234" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001235" LaTeX synchronization: {{{1
1236syn sync maxlines=200
1237syn sync minlines=50
1238
1239syn sync match texSyncStop groupthere NONE "%stopzone\>"
1240
1241" Synchronization: {{{1
1242" The $..$ and $$..$$ make for impossible sync patterns
1243" (one can't tell if a "$$" starts or stops a math zone by itself)
1244" The following grouptheres coupled with minlines above
1245" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001246if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001247 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1248 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1249 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1250 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1251 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1252 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1253 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1254 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1255endif
1256
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001257" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001258" Highlighting: {{{1
1259if did_tex_syntax_inits == 1
1260 let did_tex_syntax_inits= 2
1261 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001262 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001263 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001264 HiLink texBadMath texError
1265 HiLink texMathDelimBad texError
1266 HiLink texMathError texError
1267 if !b:tex_stylish
1268 HiLink texOnlyMath texError
1269 endif
1270 endif
1271 HiLink texError Error
1272 endif
1273
Bram Moolenaard38b0552012-04-25 19:07:41 +02001274 hi texBoldStyle gui=bold cterm=bold
1275 hi texItalStyle gui=italic cterm=italic
1276 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1277 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaard960d762011-09-21 19:22:10 +02001278 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001279 HiLink texDefCmd texDef
1280 HiLink texDefName texDef
1281 HiLink texDocType texCmdName
1282 HiLink texDocTypeArgs texCmdArgs
1283 HiLink texInputFileOpt texCmdArgs
1284 HiLink texInputCurlies texDelimiter
1285 HiLink texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001286 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001287 HiLink texMathDelimSet1 texMathDelim
1288 HiLink texMathDelimSet2 texMathDelim
1289 HiLink texMathDelimKey texMathDelim
1290 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001291 HiLink texAccent texStatement
1292 HiLink texGreek texStatement
1293 HiLink texSuperscript texStatement
1294 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001295 HiLink texSuperscripts texSuperscript
1296 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001297 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001298 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001299 HiLink texMathZoneW texMath
1300 HiLink texMathZoneX texMath
1301 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001302 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001303 HiLink texMathZoneZ texMath
1304 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +02001305 HiLink texBeginEnd texCmdName
1306 HiLink texBeginEndName texSection
Bram Moolenaar071d4272004-06-13 20:20:40 +00001307 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001308 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001309 HiLink texTypeSize texType
1310 HiLink texTypeStyle texType
1311
1312 " Basic TeX highlighting groups
1313 HiLink texCmdArgs Number
1314 HiLink texCmdName Statement
1315 HiLink texComment Comment
1316 HiLink texDef Statement
1317 HiLink texDefParm Special
1318 HiLink texDelimiter Delimiter
1319 HiLink texInput Special
1320 HiLink texInputFile Special
1321 HiLink texLength Number
1322 HiLink texMath Special
1323 HiLink texMathDelim Statement
1324 HiLink texMathOper Operator
1325 HiLink texNewCmd Statement
1326 HiLink texNewEnv Statement
1327 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001328 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001329 HiLink texSection PreCondit
1330 HiLink texSpaceCodeChar Special
1331 HiLink texSpecialChar SpecialChar
1332 HiLink texStatement Statement
1333 HiLink texString String
1334 HiLink texTodo Todo
1335 HiLink texType Type
1336 HiLink texZone PreCondit
1337
1338 delcommand HiLink
1339endif
1340
Bram Moolenaar15146672011-10-20 22:22:38 +02001341" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001342delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001343unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001344let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001345let &cpo = s:keepcpo
1346unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001347" vim: ts=8 fdm=marker