blob: a324304f9fe113ce899b4fa83782200438c25cb8 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: TeX
Bram Moolenaar488c6512005-08-11 20:09:58 +00003" Maintainer: Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
Bram Moolenaar6be7f872012-01-20 21:08:56 +01004" Last Change: Jan 10, 2012
5" Version: 72
Bram Moolenaar488c6512005-08-11 20:09:58 +00006" URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
Bram Moolenaar071d4272004-06-13 20:20:40 +00007"
8" Notes: {{{1
9"
10" 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
11" use %stopzone.
12"
13" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
14" by suitable use of %stopzone.
15"
16" 3. If you have a slow computer, you may wish to modify
17"
18" syn sync maxlines=200
19" syn sync minlines=50
20"
21" to values that are more to your liking.
22"
23" 4. There is no match-syncing for $...$ and $$...$$; hence large
24" equation blocks constructed that way may exhibit syncing problems.
25" (there's no difference between begin/end patterns)
26"
27" 5. If you have the variable "g:tex_no_error" defined then none of the
28" lexical error-checking will be done.
29"
30" ie. let g:tex_no_error=1
31
32" Version Clears: {{{1
33" For version 5.x: Clear all syntax items
34" For version 6.x: Quit when a syntax file was already loaded
35if version < 600
36 syntax clear
37elseif exists("b:current_syntax")
38 finish
39endif
Bram Moolenaar15146672011-10-20 22:22:38 +020040let s:keepcpo= &cpo
41set cpo&vim
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020042scriptencoding utf-8
Bram Moolenaar071d4272004-06-13 20:20:40 +000043
44" Define the default highlighting. {{{1
45" For version 5.7 and earlier: only when not done already
46" For version 5.8 and later: only when an item doesn't have highlighting yet
47if version >= 508 || !exists("did_tex_syntax_inits")
48 let did_tex_syntax_inits = 1
49 if version < 508
50 command -nargs=+ HiLink hi link <args>
51 else
52 command -nargs=+ HiLink hi def link <args>
53 endif
54endif
55if exists("g:tex_tex") && !exists("g:tex_no_error")
56 let g:tex_no_error= 1
57endif
58
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020059" let user determine which classes of concealment will be supported
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020060" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020061if !exists("g:tex_conceal")
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020062 let s:tex_conceal= 'admgs'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020063else
64 let s:tex_conceal= g:tex_conceal
65endif
66
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000067" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000068" The user may override the normal determination by setting
69" g:tex_stylish to 1 (for "*.sty" mode)
70" or to 0 else (normal "*.tex" mode)
71" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +010072let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +000073if exists("g:tex_stylish")
74 let b:tex_stylish= g:tex_stylish
75elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +010076 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +000077 let b:tex_stylish= 1
78 else
79 let b:tex_stylish= 0
80 endif
81endif
82
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000083" handle folding {{{1
84if !exists("g:tex_fold_enabled")
85 let g:tex_fold_enabled= 0
86elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarab194812005-09-14 21:40:12 +000087 let g:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000088 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
89endif
90if g:tex_fold_enabled && &fdm == "manual"
Bram Moolenaar00a927d2010-05-14 23:24:24 +020091 setl fdm=syntax
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000092endif
93
Bram Moolenaaradc21822011-04-01 18:03:16 +020094" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000095" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +020096" One may override this iskeyword setting by providing
97" g:tex_isk
98if exists("g:tex_isk")
99 exe "setlocal isk=".g:tex_isk
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100else
Bram Moolenaaradc21822011-04-01 18:03:16 +0200101 setlocal isk=48-57,a-z,A-Z,192-255
102endif
103if b:tex_stylish
104 setlocal isk+=@-@
Bram Moolenaar071d4272004-06-13 20:20:40 +0000105endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200106if exists("g:tex_nospell") && g:tex_nospell && !exists("g:tex_comment_nospell")
107 let g:tex_comment_nospell= 1
108endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109
110" Clusters: {{{1
111" --------
112syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSectionMarker,texSectionName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
113if !exists("g:tex_no_error")
114 syn cluster texCmdGroup add=texMathError
115endif
116syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
Bram Moolenaar488c6512005-08-11 20:09:58 +0000117syn 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,texSectionMarker,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract
Bram Moolenaard960d762011-09-21 19:22:10 +0200118if !exists("g:tex_nospell") || !g:tex_nospell
119 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
120 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
121else
122 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
123 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
124endif
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000125syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaar071d4272004-06-13 20:20:40 +0000126if !exists("tex_no_math")
127 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
128 syn cluster texMatchGroup add=@texMathZones
129 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
130 syn cluster texMathMatchGroup contains=@texMathZones,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathMatcher,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200131 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaar071d4272004-06-13 20:20:40 +0000132 if !exists("g:tex_no_error")
133 syn cluster texMathMatchGroup add=texMathError
134 syn cluster texMathZoneGroup add=texMathError
135 endif
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000136 syn cluster texMathZoneGroup add=@NoSpell
137 " following used in the \part \chapter \section \subsection \subsubsection
138 " \paragraph \subparagraph \author \title highlighting
139 syn cluster texDocGroup contains=texPartZone,@texPartGroup
140 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
141 syn cluster texChapterGroup contains=texSectionZone,texParaZone
142 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
143 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
144 syn cluster texSubSubSectionGroup contains=texParaZone
145 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200146 if has("conceal") && &enc == 'utf-8'
Bram Moolenaare0021c72010-07-28 17:25:21 +0200147 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
148 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200149 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150endif
151
152" Try to flag {} and () mismatches: {{{1
153if !exists("g:tex_no_error")
154 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup,texError
155 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup,texError
156else
157 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup
158 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup
159endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200160if !exists("g:tex_nospell") || !g:tex_nospell
161 syn region texParen start="(" end=")" contains=@texMatchGroup,@Spell
162else
163 syn region texParen start="(" end=")" contains=@texMatchGroup
164endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165if !exists("g:tex_no_error")
166 syn match texError "[}\])]"
167endif
168if !exists("tex_no_math")
169 if !exists("g:tex_no_error")
170 syn match texMathError "}" contained
171 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200172 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
173" syn region texMathMatcher matchgroup=Unique start="[^\\]\zs{" skip="\\\\\|\\[{}]" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000174endif
175
176" TeX/LaTeX keywords: {{{1
177" Instead of trying to be All Knowing, I just match \..alphameric..
178" Note that *.tex files may not have "@" in their \commands
179if exists("g:tex_tex") || b:tex_stylish
180 syn match texStatement "\\[a-zA-Z@]\+"
181else
182 syn match texStatement "\\\a\+"
183 if !exists("g:tex_no_error")
184 syn match texError "\\\a*@[a-zA-Z@]*"
185 endif
186endif
187
188" TeX/LaTeX delimiters: {{{1
189syn match texDelimiter "&"
190syn match texDelimiter "\\\\"
Bram Moolenaard960d762011-09-21 19:22:10 +0200191syn match texDelimiter "[{}]"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000192
193" Tex/Latex Options: {{{1
194syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
195
196" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
197if b:tex_stylish
198 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
199 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
200else
201 syn match texAccent "\\[bcdvuH]\A"me=e-1
202 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
203endif
204syn match texAccent "\\[bcdvuH]$"
205syn match texAccent +\\[=^.\~"`']+
206syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
207syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
208
209" \begin{}/\end{} section markers: {{{1
210syn match texSectionMarker "\\begin\>\|\\end\>" nextgroup=texSectionName
Bram Moolenaar5c736222010-01-06 20:54:52 +0100211syn region texSectionName matchgroup=Delimiter start="{" end="}" contained nextgroup=texSectionModifier contains=texComment
212syn region texSectionModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000213
214" \documentclass, \documentstyle, \usepackage: {{{1
215syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texSectionName,texDocTypeArgs
Bram Moolenaar5c736222010-01-06 20:54:52 +0100216syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texSectionName contains=texComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000218" Preamble syntax-based folding support: {{{1
219if g:tex_fold_enabled && has("folding")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100220 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000221endif
222
Bram Moolenaar071d4272004-06-13 20:20:40 +0000223" TeX input: {{{1
224syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100225syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000226syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
227syn match texInputCurlies "[{}]" contained
Bram Moolenaar5c736222010-01-06 20:54:52 +0100228syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229
230" Type Styles (LaTeX 2.09): {{{1
231syn match texTypeStyle "\\rm\>"
232syn match texTypeStyle "\\em\>"
233syn match texTypeStyle "\\bf\>"
234syn match texTypeStyle "\\it\>"
235syn match texTypeStyle "\\sl\>"
236syn match texTypeStyle "\\sf\>"
237syn match texTypeStyle "\\sc\>"
238syn match texTypeStyle "\\tt\>"
239
240" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
241syn match texTypeStyle "\\textbf\>"
242syn match texTypeStyle "\\textit\>"
243syn match texTypeStyle "\\textmd\>"
244syn match texTypeStyle "\\textrm\>"
245syn match texTypeStyle "\\textsc\>"
246syn match texTypeStyle "\\textsf\>"
247syn match texTypeStyle "\\textsl\>"
248syn match texTypeStyle "\\texttt\>"
249syn match texTypeStyle "\\textup\>"
250syn match texTypeStyle "\\emph\>"
251
252syn match texTypeStyle "\\mathbb\>"
253syn match texTypeStyle "\\mathbf\>"
254syn match texTypeStyle "\\mathcal\>"
255syn match texTypeStyle "\\mathfrak\>"
256syn match texTypeStyle "\\mathit\>"
257syn match texTypeStyle "\\mathnormal\>"
258syn match texTypeStyle "\\mathrm\>"
259syn match texTypeStyle "\\mathsf\>"
260syn match texTypeStyle "\\mathtt\>"
261
262syn match texTypeStyle "\\rmfamily\>"
263syn match texTypeStyle "\\sffamily\>"
264syn match texTypeStyle "\\ttfamily\>"
265
266syn match texTypeStyle "\\itshape\>"
267syn match texTypeStyle "\\scshape\>"
268syn match texTypeStyle "\\slshape\>"
269syn match texTypeStyle "\\upshape\>"
270
271syn match texTypeStyle "\\bfseries\>"
272syn match texTypeStyle "\\mdseries\>"
273
274" Some type sizes: {{{1
275syn match texTypeSize "\\tiny\>"
276syn match texTypeSize "\\scriptsize\>"
277syn match texTypeSize "\\footnotesize\>"
278syn match texTypeSize "\\small\>"
279syn match texTypeSize "\\normalsize\>"
280syn match texTypeSize "\\large\>"
281syn match texTypeSize "\\Large\>"
282syn match texTypeSize "\\LARGE\>"
283syn match texTypeSize "\\huge\>"
284syn match texTypeSize "\\Huge\>"
285
286" Spacecodes (TeX'isms): {{{1
287" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
288syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
289syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
290
291" Sections, subsections, etc: {{{1
Bram Moolenaard960d762011-09-21 19:22:10 +0200292if !exists("g:tex_nospell") || !g:tex_nospell
293 if g:tex_fold_enabled && has("folding")
294 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup,@Spell
295 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup,@Spell
296 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup,@Spell
297 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup,@Spell
298 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
299 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
300 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texParaGroup,@Spell
301 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@Spell
302 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup,@Spell
303 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup,@Spell
304 else
305 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
306 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
307 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
308 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
309 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
310 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
311 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell
312 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell
313 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
314 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
315 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000316else
Bram Moolenaard960d762011-09-21 19:22:10 +0200317 if g:tex_fold_enabled && has("folding")
318 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup
319 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texPartGroup
320 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texChapterGroup
321 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSectionGroup
322 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSectionGroup
323 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texSubSubSectionGroup
324 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup,@texParaGroup
325 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' fold contains=@texFoldGroup
326 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup
327 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup
328 else
329 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
330 syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
331 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
332 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
333 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
334 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
335 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
336 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
337 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
338 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup
339 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000340endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000341
342" Bad Math (mismatched): {{{1
343if !exists("tex_no_math")
Bram Moolenaard960d762011-09-21 19:22:10 +0200344 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000345 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
346 syn match texBadMath "\\[\])]"
347endif
348
349" Math Zones: {{{1
350if !exists("tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000351 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000352 " Starred forms are created if starform is true. Starred
353 " forms have syntax group and synchronization groups with a
354 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
355 fun! TexNewMathZone(sfx,mathzone,starform)
356 let grpname = "texMathZone".a:sfx
357 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000358 if g:tex_fold_enabled
359 let foldcmd= " fold"
360 else
361 let foldcmd= ""
362 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000363 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000364 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
Bram Moolenaar071d4272004-06-13 20:20:40 +0000365 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
366 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
Bram Moolenaar5c736222010-01-06 20:54:52 +0100367 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000368 if a:starform
369 let grpname = "texMathZone".a:sfx.'S'
370 let syncname = "texSyncMathZone".a:sfx.'S'
371 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000372 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
Bram Moolenaar071d4272004-06-13 20:20:40 +0000373 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
374 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
Bram Moolenaar5c736222010-01-06 20:54:52 +0100375 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000376 endif
377 endfun
378
379 " Standard Math Zones: {{{2
380 call TexNewMathZone("A","align",1)
381 call TexNewMathZone("B","alignat",1)
382 call TexNewMathZone("C","displaymath",1)
383 call TexNewMathZone("D","eqnarray",1)
384 call TexNewMathZone("E","equation",1)
385 call TexNewMathZone("F","flalign",1)
386 call TexNewMathZone("G","gather",1)
387 call TexNewMathZone("H","math",1)
388 call TexNewMathZone("I","multline",1)
Bram Moolenaard960d762011-09-21 19:22:10 +0200389 call TexNewMathZone("J","subequations",0)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000390 call TexNewMathZone("K","xalignat",1)
391 call TexNewMathZone("L","xxalignat",0)
392
393 " Inline Math Zones: {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200394 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
Bram Moolenaare0021c72010-07-28 17:25:21 +0200395 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
396 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
397 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
398 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" concealends keepend contains=@texMathZoneGroup
399 else
400 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
401 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
402 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
403 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
404 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200405 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000406
407 syn match texMathOper "[_^=]" contained
408
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200409 " Text Inside Math Zones: {{{2
Bram Moolenaard960d762011-09-21 19:22:10 +0200410 if !exists("g:tex_nospell") || !g:tex_nospell
411 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
412 else
413 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
414 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200415
Bram Moolenaar071d4272004-06-13 20:20:40 +0000416 " \left..something.. and \right..something.. support: {{{2
417 syn match texMathDelimBad contained "\S"
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200418 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm'
419 syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
420 syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200421 let s:texMathDelimList=[
422 \ ['<' , '<'] ,
423 \ ['>' , '>'] ,
424 \ ['(' , '('] ,
425 \ [')' , ')'] ,
426 \ ['\[' , '['] ,
427 \ [']' , ']'] ,
428 \ ['\\{' , '{'] ,
429 \ ['\\}' , '}'] ,
430 \ ['|' , '|'] ,
431 \ ['\\|' , '‖'] ,
432 \ ['\\backslash' , '\'] ,
433 \ ['\\downarrow' , '↓'] ,
434 \ ['\\Downarrow' , '⇓'] ,
435 \ ['\\langle' , '<'] ,
436 \ ['\\lbrace' , '['] ,
437 \ ['\\lceil' , '⌈'] ,
438 \ ['\\lfloor' , '⌊'] ,
439 \ ['\\lgroup' , '⌊'] ,
440 \ ['\\lmoustache' , '⎛'] ,
441 \ ['\\rangle' , '>'] ,
442 \ ['\\rbrace' , ']'] ,
443 \ ['\\rceil' , '⌉'] ,
444 \ ['\\rfloor' , '⌋'] ,
445 \ ['\\rgroup' , '⌋'] ,
446 \ ['\\rmoustache' , '⎞'] ,
447 \ ['\\uparrow' , '↑'] ,
448 \ ['\\Uparrow' , '↑'] ,
449 \ ['\\updownarrow', '↕'] ,
450 \ ['\\Updownarrow', '⇕']]
451 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
452 for texmath in s:texMathDelimList
453 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
454 endfor
455
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200456 else
457 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200458 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
459 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
460 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
461 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
462 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
463 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
464 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
465 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200466 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000467 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
468 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000469endif
470
471" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
472syn match texSpecialChar "\\[$&%#{}_]"
473if b:tex_stylish
474 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
475else
476 syn match texSpecialChar "\\[SP@]\A"me=e-1
477endif
478syn match texSpecialChar "\\\\"
479if !exists("tex_no_math")
480 syn match texOnlyMath "[_^]"
481endif
482syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
483
484" Comments: {{{1
485" Normal TeX LaTeX : %....
486" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000487if !exists("g:tex_comment_nospell") || !g:tex_comment_nospell
488 syn cluster texCommentGroup contains=texTodo,@Spell
489else
490 syn cluster texCommentGroup contains=texTodo,@NoSpell
491endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000492syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000493syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000494syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100495if s:extfname == "dtx"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000496 syn match texComment "\^\^A.*$" contains=@texCommentGroup
497 syn match texComment "^%\+" contains=@texCommentGroup
498else
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000499 if g:tex_fold_enabled
500 " allows syntax-folding of 2 or more contiguous comment lines
501 " single-line comments are not folded
502 syn match texComment "%.*$" contains=@texCommentGroup
503 syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' fold
504 else
505 syn match texComment "%.*$" contains=@texCommentGroup
506 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000507endif
508
509" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200510" will appropriately terminate.
511" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
512if exists("g:tex_verbspell") && g:tex_verbspell
513 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
514 " listings package:
515 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
516 " moreverb package:
517 syn region texZone start="\\begin{verbatimtab}" end="\\end{verbatimtab}\|%stopzone\>" contains=@Spell
518 syn region texZone start="\\begin{verbatimwrite}" end="\\end{verbatimwrite}\|%stopzone\>" contains=@Spell
519 syn region texZone start="\\begin{boxedverbatim}" end="\\end{boxedverbatim}\|%stopzone\>" contains=@Spell
520 if version < 600
521 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
522 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
523 else
524 if b:tex_stylish
525 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
526 else
527 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
528 endif
529 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000530else
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200531 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
532 " listings package:
533 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>"
534 " moreverb package:
535 syn region texZone start="\\begin{verbatimtab}" end="\\end{verbatimtab}\|%stopzone\>"
536 syn region texZone start="\\begin{verbatimwrite}" end="\\end{verbatimwrite}\|%stopzone\>"
537 syn region texZone start="\\begin{boxedverbatim}" end="\\end{boxedverbatim}\|%stopzone\>"
538 if version < 600
539 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
540 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
541 else
542 if b:tex_stylish
543 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
544 else
545 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
546 endif
547 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000548endif
549
550" Tex Reference Zones: {{{1
Bram Moolenaard960d762011-09-21 19:22:10 +0200551syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
552syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
553syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
554syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
555syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
556syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
557syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
558syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
559syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000560
561" Handle newcommand, newenvironment : {{{1
562syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
563syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
564syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
565syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
566syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
567syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
568syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
569syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
570
571" Definitions/Commands: {{{1
572syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
573if b:tex_stylish
574 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
575 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
576else
577 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
578 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
579endif
580syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
581syn match texDefParm contained "#\d\+"
582
583" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000584syn 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 +0000585
586" TeX String Delimiters: {{{1
587syn match texString "\(``\|''\|,,\)"
588
Bram Moolenaar5c736222010-01-06 20:54:52 +0100589" makeatletter -- makeatother sections
590if !exists("g:tex_no_error")
591 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
592 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
593 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
594 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
595endif
596
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200597" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200598if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200599
600 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200601 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200602 if s:tex_conceal =~ 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200603 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200604 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200605 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100606 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200607 \ ['angle' , '∠'],
608 \ ['approx' , '≈'],
609 \ ['ast' , '∗'],
610 \ ['asymp' , '≍'],
611 \ ['backepsilon' , '∍'],
612 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200613 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200614 \ ['barwedge' , '⊼'],
615 \ ['because' , '∵'],
616 \ ['between' , '≬'],
617 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100618 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200619 \ ['bigcup' , '∪'],
620 \ ['bigodot' , '⊙'],
621 \ ['bigoplus' , '⊕'],
622 \ ['bigotimes' , '⊗'],
623 \ ['bigsqcup' , '⊔'],
624 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100625 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200626 \ ['bigvee' , '⋁'],
627 \ ['bigwedge' , '⋀'],
628 \ ['blacksquare' , '∎'],
629 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100630 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200631 \ ['boxdot' , '⊡'],
632 \ ['boxminus' , '⊟'],
633 \ ['boxplus' , '⊞'],
634 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100635 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200636 \ ['bumpeq' , '≏'],
637 \ ['Bumpeq' , '≎'],
638 \ ['cap' , '∩'],
639 \ ['Cap' , '⋒'],
640 \ ['cdot' , '·'],
641 \ ['cdots' , '⋯'],
642 \ ['circ' , '∘'],
643 \ ['circeq' , '≗'],
644 \ ['circlearrowleft', '↺'],
645 \ ['circlearrowright', '↻'],
646 \ ['circledast' , '⊛'],
647 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200648 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200649 \ ['complement' , '∁'],
650 \ ['cong' , '≅'],
651 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200652 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200653 \ ['cup' , '∪'],
654 \ ['Cup' , '⋓'],
655 \ ['curlyeqprec' , '⋞'],
656 \ ['curlyeqsucc' , '⋟'],
657 \ ['curlyvee' , '⋎'],
658 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100659 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200660 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100661 \ ['ddagger' , '‡'],
662 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200663 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200664 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200665 \ ['div' , '÷'],
666 \ ['doteq' , '≐'],
667 \ ['doteqdot' , '≑'],
668 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100669 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200670 \ ['dotsb' , '⋯'],
671 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200672 \ ['dotsi' , '⋯'],
673 \ ['dotso' , '…'],
674 \ ['doublebarwedge' , '⩞'],
675 \ ['downarrow' , '↓'],
676 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100677 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200678 \ ['emptyset' , '∅'],
679 \ ['eqcirc' , '≖'],
680 \ ['eqsim' , '≂'],
681 \ ['eqslantgtr' , '⪖'],
682 \ ['eqslantless' , '⪕'],
683 \ ['equiv' , '≡'],
684 \ ['exists' , '∃'],
685 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200686 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200687 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100688 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200689 \ ['ge' , '≥'],
690 \ ['geq' , '≥'],
691 \ ['geqq' , '≧'],
692 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100693 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200694 \ ['gneqq' , '≩'],
695 \ ['gtrdot' , '⋗'],
696 \ ['gtreqless' , '⋛'],
697 \ ['gtrless' , '≷'],
698 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200699 \ ['hbar' , 'ℏ'],
700 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200701 \ ['hookleftarrow' , '↩'],
702 \ ['hookrightarrow' , '↪'],
703 \ ['iiint' , '∭'],
704 \ ['iint' , '∬'],
705 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200706 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200707 \ ['in' , '∈'],
708 \ ['infty' , '∞'],
709 \ ['int' , '∫'],
710 \ ['lceil' , '⌈'],
711 \ ['ldots' , '…'],
712 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100713 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200714 \ ['left(' , '('],
715 \ ['left\[' , '['],
716 \ ['left\\{' , '{'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100717 \ ['leftarrow' , '⟵'],
718 \ ['Leftarrow' , '⟸'],
719 \ ['leftarrowtail' , '↢'],
720 \ ['leftharpoondown', '↽'],
721 \ ['leftharpoonup' , '↼'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200722 \ ['leftrightarrow' , '⇔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100723 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200724 \ ['leftrightsquigarrow', '↭'],
725 \ ['leftthreetimes' , '⋋'],
726 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100727 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200728 \ ['leqq' , '≦'],
729 \ ['lessdot' , '⋖'],
730 \ ['lesseqgtr' , '⋚'],
731 \ ['lesssim' , '≲'],
732 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100733 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200734 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200735 \ ['lneqq' , '≨'],
736 \ ['ltimes' , '⋉'],
737 \ ['mapsto' , '↦'],
738 \ ['measuredangle' , '∡'],
739 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100740 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200741 \ ['mp' , '∓'],
742 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200743 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200744 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200745 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100746 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200747 \ ['neg' , '¬'],
748 \ ['neq' , '≠'],
749 \ ['nexists' , '∄'],
750 \ ['ngeq' , '≱'],
751 \ ['ngeqq' , '≱'],
752 \ ['ngtr' , '≯'],
753 \ ['ni' , '∋'],
754 \ ['nleftarrow' , '↚'],
755 \ ['nLeftarrow' , '⇍'],
756 \ ['nLeftrightarrow', '⇎'],
757 \ ['nleq' , '≰'],
758 \ ['nleqq' , '≰'],
759 \ ['nless' , '≮'],
760 \ ['nmid' , '∤'],
761 \ ['notin' , '∉'],
762 \ ['nprec' , '⊀'],
763 \ ['nrightarrow' , '↛'],
764 \ ['nRightarrow' , '⇏'],
765 \ ['nsim' , '≁'],
766 \ ['nsucc' , '⊁'],
767 \ ['ntriangleleft' , '⋪'],
768 \ ['ntrianglelefteq', '⋬'],
769 \ ['ntriangleright' , '⋫'],
770 \ ['ntrianglerighteq', '⋭'],
771 \ ['nvdash' , '⊬'],
772 \ ['nvDash' , '⊭'],
773 \ ['nVdash' , '⊮'],
774 \ ['nwarrow' , '↖'],
775 \ ['odot' , '⊙'],
776 \ ['oint' , '∮'],
777 \ ['ominus' , '⊖'],
778 \ ['oplus' , '⊕'],
779 \ ['oslash' , '⊘'],
780 \ ['otimes' , '⊗'],
781 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200782 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100783 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200784 \ ['partial' , '∂'],
785 \ ['perp' , '⊥'],
786 \ ['pitchfork' , '⋔'],
787 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200788 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100789 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200790 \ ['preccurlyeq' , '≼'],
791 \ ['preceq' , '⪯'],
792 \ ['precnapprox' , '⪹'],
793 \ ['precneqq' , '⪵'],
794 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200795 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200796 \ ['prod' , '∏'],
797 \ ['propto' , '∝'],
798 \ ['rceil' , '⌉'],
799 \ ['Re' , 'ℜ'],
800 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200801 \ ['right)' , ')'],
802 \ ['right]' , ']'],
803 \ ['right\\}' , '}'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100804 \ ['rightarrow' , '⟶'],
805 \ ['Rightarrow' , '⟹'],
806 \ ['rightarrowtail' , '↣'],
807 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200808 \ ['rightsquigarrow', '↝'],
809 \ ['rightthreetimes', '⋌'],
810 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200811 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200812 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200813 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200814 \ ['searrow' , '↘'],
815 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200816 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200817 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100818 \ ['simeq' , '⋍'],
819 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200820 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200821 \ ['sphericalangle' , '∢'],
822 \ ['sqcap' , '⊓'],
823 \ ['sqcup' , '⊔'],
824 \ ['sqsubset' , '⊏'],
825 \ ['sqsubseteq' , '⊑'],
826 \ ['sqsupset' , '⊐'],
827 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100828 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200829 \ ['subset' , '⊂'],
830 \ ['Subset' , '⋐'],
831 \ ['subseteq' , '⊆'],
832 \ ['subseteqq' , '⫅'],
833 \ ['subsetneq' , '⊊'],
834 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200835 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100836 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200837 \ ['succcurlyeq' , '≽'],
838 \ ['succeq' , '⪰'],
839 \ ['succnapprox' , '⪺'],
840 \ ['succneqq' , '⪶'],
841 \ ['succsim' , '≿'],
842 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100843 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200844 \ ['Supset' , '⋑'],
845 \ ['supseteq' , '⊇'],
846 \ ['supseteqq' , '⫆'],
847 \ ['supsetneq' , '⊋'],
848 \ ['supsetneqq' , '⫌'],
849 \ ['surd' , '√'],
850 \ ['swarrow' , '↙'],
851 \ ['therefore' , '∴'],
852 \ ['times' , '×'],
853 \ ['to' , '→'],
854 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200855 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200856 \ ['triangleleft' , '⊲'],
857 \ ['trianglelefteq' , '⊴'],
858 \ ['triangleq' , '≜'],
859 \ ['triangleright' , '⊳'],
860 \ ['trianglerighteq', '⊵'],
861 \ ['twoheadleftarrow', '↞'],
862 \ ['twoheadrightarrow', '↠'],
863 \ ['uparrow' , '↑'],
864 \ ['Uparrow' , '⇑'],
865 \ ['updownarrow' , '↕'],
866 \ ['Updownarrow' , '⇕'],
867 \ ['varnothing' , '∅'],
868 \ ['vartriangle' , '∆'],
869 \ ['vdash' , '⊢'],
870 \ ['vDash' , '⊨'],
871 \ ['Vdash' , '⊩'],
872 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200873 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100874 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200875 \ ['Vvdash' , '⊪'],
876 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200877 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200878 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100879" \ ['jmath' , 'X']
880" \ ['uminus' , 'X']
881" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200882 for texmath in s:texMathList
Bram Moolenaar81af9252010-12-10 20:35:50 +0100883 if texmath[0] =~ '\w$'
884 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
885 else
886 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
887 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200888 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200889
890 if &ambw == "double"
891 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
892 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
893 else
894 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
895 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
896 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200897
898 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
899 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
900 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
901 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
902 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
903 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
904 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
905 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
906 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
907 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
908 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
909 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
910 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
911 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
912 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
913 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
914 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
915 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
916 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
917 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200918 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200919
920 " Greek {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200921 if s:tex_conceal =~ 'g'
922 fun! s:Greek(group,pat,cchar)
923 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
924 endfun
925 call s:Greek('texGreek','\\alpha\>' ,'α')
926 call s:Greek('texGreek','\\beta\>' ,'β')
927 call s:Greek('texGreek','\\gamma\>' ,'γ')
928 call s:Greek('texGreek','\\delta\>' ,'δ')
929 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
930 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
931 call s:Greek('texGreek','\\zeta\>' ,'ζ')
932 call s:Greek('texGreek','\\eta\>' ,'η')
933 call s:Greek('texGreek','\\theta\>' ,'θ')
934 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
935 call s:Greek('texGreek','\\kappa\>' ,'κ')
936 call s:Greek('texGreek','\\lambda\>' ,'λ')
937 call s:Greek('texGreek','\\mu\>' ,'μ')
938 call s:Greek('texGreek','\\nu\>' ,'ν')
939 call s:Greek('texGreek','\\xi\>' ,'ξ')
940 call s:Greek('texGreek','\\pi\>' ,'π')
941 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
942 call s:Greek('texGreek','\\rho\>' ,'ρ')
943 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
944 call s:Greek('texGreek','\\sigma\>' ,'σ')
945 call s:Greek('texGreek','\\varsigma\>' ,'ς')
946 call s:Greek('texGreek','\\tau\>' ,'τ')
947 call s:Greek('texGreek','\\upsilon\>' ,'υ')
948 call s:Greek('texGreek','\\phi\>' ,'φ')
949 call s:Greek('texGreek','\\varphi\>' ,'ϕ')
950 call s:Greek('texGreek','\\chi\>' ,'χ')
951 call s:Greek('texGreek','\\psi\>' ,'ψ')
952 call s:Greek('texGreek','\\omega\>' ,'ω')
953 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
954 call s:Greek('texGreek','\\Delta\>' ,'Δ')
955 call s:Greek('texGreek','\\Theta\>' ,'Θ')
956 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
957 call s:Greek('texGreek','\\Xi\>' ,'Χ')
958 call s:Greek('texGreek','\\Pi\>' ,'Π')
959 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
960 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
961 call s:Greek('texGreek','\\Phi\>' ,'Φ')
962 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
963 call s:Greek('texGreek','\\Omega\>' ,'Ω')
964 delfun s:Greek
965 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200966
967 " Superscripts/Subscripts {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200968 if s:tex_conceal =~ 's'
Bram Moolenaard960d762011-09-21 19:22:10 +0200969 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
970 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200971 fun! s:SuperSub(group,leader,pat,cchar)
972 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
973 exe 'syn match '.a:group."s '".a:pat."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
974 endfun
975 call s:SuperSub('texSuperscript','\^','0','⁰')
976 call s:SuperSub('texSuperscript','\^','1','¹')
977 call s:SuperSub('texSuperscript','\^','2','²')
978 call s:SuperSub('texSuperscript','\^','3','³')
979 call s:SuperSub('texSuperscript','\^','4','⁴')
980 call s:SuperSub('texSuperscript','\^','5','⁵')
981 call s:SuperSub('texSuperscript','\^','6','⁶')
982 call s:SuperSub('texSuperscript','\^','7','⁷')
983 call s:SuperSub('texSuperscript','\^','8','⁸')
984 call s:SuperSub('texSuperscript','\^','9','⁹')
985 call s:SuperSub('texSuperscript','\^','a','ᵃ')
986 call s:SuperSub('texSuperscript','\^','b','ᵇ')
987 call s:SuperSub('texSuperscript','\^','c','ᶜ')
988 call s:SuperSub('texSuperscript','\^','d','ᵈ')
989 call s:SuperSub('texSuperscript','\^','e','ᵉ')
990 call s:SuperSub('texSuperscript','\^','f','ᶠ')
991 call s:SuperSub('texSuperscript','\^','g','ᵍ')
992 call s:SuperSub('texSuperscript','\^','h','ʰ')
993 call s:SuperSub('texSuperscript','\^','i','ⁱ')
994 call s:SuperSub('texSuperscript','\^','j','ʲ')
995 call s:SuperSub('texSuperscript','\^','k','ᵏ')
996 call s:SuperSub('texSuperscript','\^','l','ˡ')
997 call s:SuperSub('texSuperscript','\^','m','ᵐ')
998 call s:SuperSub('texSuperscript','\^','n','ⁿ')
999 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1000 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1001 call s:SuperSub('texSuperscript','\^','r','ʳ')
1002 call s:SuperSub('texSuperscript','\^','s','ˢ')
1003 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1004 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1005 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1006 call s:SuperSub('texSuperscript','\^','w','ʷ')
1007 call s:SuperSub('texSuperscript','\^','x','ˣ')
1008 call s:SuperSub('texSuperscript','\^','y','ʸ')
1009 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1010 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1011 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1012 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1013 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1014 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1015 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1016 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1017 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1018 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1019 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1020 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1021 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1022 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1023 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1024 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1025 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1026 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1027 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001028 call s:SuperSub('texSuperscript','\^',',','︐')
1029 call s:SuperSub('texSuperscript','\^',':','︓')
1030 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001031 call s:SuperSub('texSuperscript','\^','+','⁺')
1032 call s:SuperSub('texSuperscript','\^','-','⁻')
1033 call s:SuperSub('texSuperscript','\^','<','˂')
1034 call s:SuperSub('texSuperscript','\^','>','˃')
1035 call s:SuperSub('texSuperscript','\^','/','ˊ')
1036 call s:SuperSub('texSuperscript','\^','(','⁽')
1037 call s:SuperSub('texSuperscript','\^',')','⁾')
1038 call s:SuperSub('texSuperscript','\^','\.','˙')
1039 call s:SuperSub('texSuperscript','\^','=','˭')
1040 call s:SuperSub('texSubscript','_','0','₀')
1041 call s:SuperSub('texSubscript','_','1','₁')
1042 call s:SuperSub('texSubscript','_','2','₂')
1043 call s:SuperSub('texSubscript','_','3','₃')
1044 call s:SuperSub('texSubscript','_','4','₄')
1045 call s:SuperSub('texSubscript','_','5','₅')
1046 call s:SuperSub('texSubscript','_','6','₆')
1047 call s:SuperSub('texSubscript','_','7','₇')
1048 call s:SuperSub('texSubscript','_','8','₈')
1049 call s:SuperSub('texSubscript','_','9','₉')
1050 call s:SuperSub('texSubscript','_','a','ₐ')
1051 call s:SuperSub('texSubscript','_','e','ₑ')
1052 call s:SuperSub('texSubscript','_','i','ᵢ')
1053 call s:SuperSub('texSubscript','_','o','ₒ')
1054 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001055 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001056 call s:SuperSub('texSubscript','_','+','₊')
1057 call s:SuperSub('texSubscript','_','-','₋')
1058 call s:SuperSub('texSubscript','_','/','ˏ')
1059 call s:SuperSub('texSubscript','_','(','₍')
1060 call s:SuperSub('texSubscript','_',')','₎')
1061 call s:SuperSub('texSubscript','_','\.','‸')
1062 call s:SuperSub('texSubscript','_','r','ᵣ')
1063 call s:SuperSub('texSubscript','_','v','ᵥ')
1064 call s:SuperSub('texSubscript','_','x','ₓ')
1065 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1066 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1067 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1068 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1069 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
1070 delfun s:SuperSub
1071 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001072
1073 " Accented characters: {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001074 if s:tex_conceal =~ 'a'
1075 if b:tex_stylish
1076 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1077 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1078 else
1079 fun! s:Accents(chr,...)
1080 let i= 1
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001081 for accent in ["`","\\'","^",'"','\~','\.',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001082 if i > a:0
1083 break
1084 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001085 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001086 let i= i + 1
1087 continue
1088 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001089 if accent =~ '\a'
1090 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1091 else
1092 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1093 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001094 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001095 endfor
1096 endfun
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001097 " \` \' \^ \" \~ \. \c \H \k \r \u \v
Bram Moolenaard960d762011-09-21 19:22:10 +02001098 call s:Accents('a','à','á','â','ä','ã','ȧ',' ',' ','ą','å','ă','ă')
1099 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ',' ',' ','Ą','Å','Ă','Ă')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001100 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ','ç',' ',' ',' ',' ','č')
1101 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ','Ç',' ',' ',' ',' ','Č')
1102 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1103 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1104 call s:Accents('e','è','é','ê','ë','ẽ','ė','ȩ',' ','ę',' ','ĕ','ě')
1105 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ȩ',' ','Ę',' ','Ĕ','Ě')
Bram Moolenaard960d762011-09-21 19:22:10 +02001106 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ','ģ',' ',' ',' ','ğ',' ')
1107 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ','Ģ',' ',' ',' ','Ğ',' ')
1108 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1109 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001110 call s:Accents('i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ')
1111 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ',' ',' ',' ',' ','Ĭ',' ')
Bram Moolenaard960d762011-09-21 19:22:10 +02001112 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1113 call s:Accents('k',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ',' ')
1114 call s:Accents('K',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ',' ')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001115 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1116 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1117 call s:Accents('n',' ','ń',' ',' ','ñ',' ','ņ',' ',' ',' ',' ','ň')
1118 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ','Ņ',' ',' ',' ',' ','Ň')
1119 call s:Accents('o','ò','ó','ô','ö','õ','ȯ',' ','ő','ǫ',' ','ŏ',' ')
1120 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ',' ','Ő','Ǫ',' ','Ŏ',' ')
1121 call s:Accents('r',' ','ŕ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1122 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
Bram Moolenaard960d762011-09-21 19:22:10 +02001123 call s:Accents('s',' ','ś','ŝ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001124 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1125 call s:Accents('t',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1126 call s:Accents('T',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
Bram Moolenaard960d762011-09-21 19:22:10 +02001127 call s:Accents('u','ù','ú','û','ü','ũ',' ',' ','ű','ų','ů','ŭ','ǔ')
1128 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ',' ','Ű','Ų','Ů','Ŭ','Ǔ')
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001129 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1130 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1131 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ')
1132 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ')
1133 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ','ž')
1134 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ','Ž')
1135 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ')
1136 " \` \' \^ \" \~ \. \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001137 delfun s:Accents
1138 syn match texAccent '\\aa\>' conceal cchar=å
1139 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001140 syn match texAccent '\\o\>' conceal cchar=ø
1141 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001142 syn match texLigature '\\AE\>' conceal cchar=Æ
1143 syn match texLigature '\\ae\>' conceal cchar=æ
1144 syn match texLigature '\\oe\>' conceal cchar=œ
1145 syn match texLigature '\\OE\>' conceal cchar=Œ
1146 syn match texLigature '\\ss\>' conceal cchar=ß
1147 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001148 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001149endif
1150
1151" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001152" LaTeX synchronization: {{{1
1153syn sync maxlines=200
1154syn sync minlines=50
1155
1156syn sync match texSyncStop groupthere NONE "%stopzone\>"
1157
1158" Synchronization: {{{1
1159" The $..$ and $$..$$ make for impossible sync patterns
1160" (one can't tell if a "$$" starts or stops a math zone by itself)
1161" The following grouptheres coupled with minlines above
1162" help improve the odds of good syncing.
1163if !exists("tex_no_math")
1164 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1165 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1166 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1167 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1168 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1169 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1170 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1171 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1172endif
1173
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001174" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001175" Highlighting: {{{1
1176if did_tex_syntax_inits == 1
1177 let did_tex_syntax_inits= 2
1178 " TeX highlighting groups which should share similar highlighting
1179 if !exists("g:tex_no_error")
1180 if !exists("tex_no_math")
1181 HiLink texBadMath texError
1182 HiLink texMathDelimBad texError
1183 HiLink texMathError texError
1184 if !b:tex_stylish
1185 HiLink texOnlyMath texError
1186 endif
1187 endif
1188 HiLink texError Error
1189 endif
1190
Bram Moolenaard960d762011-09-21 19:22:10 +02001191 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001192 HiLink texDefCmd texDef
1193 HiLink texDefName texDef
1194 HiLink texDocType texCmdName
1195 HiLink texDocTypeArgs texCmdArgs
1196 HiLink texInputFileOpt texCmdArgs
1197 HiLink texInputCurlies texDelimiter
1198 HiLink texLigature texSpecialChar
1199 if !exists("tex_no_math")
1200 HiLink texMathDelimSet1 texMathDelim
1201 HiLink texMathDelimSet2 texMathDelim
1202 HiLink texMathDelimKey texMathDelim
1203 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001204 HiLink texAccent texStatement
1205 HiLink texGreek texStatement
1206 HiLink texSuperscript texStatement
1207 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001208 HiLink texSuperscripts texSuperscript
1209 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001210 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001211 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001212 HiLink texMathZoneW texMath
1213 HiLink texMathZoneX texMath
1214 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001215 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001216 HiLink texMathZoneZ texMath
1217 endif
1218 HiLink texSectionMarker texCmdName
1219 HiLink texSectionName texSection
1220 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001221 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001222 HiLink texTypeSize texType
1223 HiLink texTypeStyle texType
1224
1225 " Basic TeX highlighting groups
1226 HiLink texCmdArgs Number
1227 HiLink texCmdName Statement
1228 HiLink texComment Comment
1229 HiLink texDef Statement
1230 HiLink texDefParm Special
1231 HiLink texDelimiter Delimiter
1232 HiLink texInput Special
1233 HiLink texInputFile Special
1234 HiLink texLength Number
1235 HiLink texMath Special
1236 HiLink texMathDelim Statement
1237 HiLink texMathOper Operator
1238 HiLink texNewCmd Statement
1239 HiLink texNewEnv Statement
1240 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001241 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001242 HiLink texSection PreCondit
1243 HiLink texSpaceCodeChar Special
1244 HiLink texSpecialChar SpecialChar
1245 HiLink texStatement Statement
1246 HiLink texString String
1247 HiLink texTodo Todo
1248 HiLink texType Type
1249 HiLink texZone PreCondit
1250
1251 delcommand HiLink
1252endif
1253
Bram Moolenaar15146672011-10-20 22:22:38 +02001254" Cleanup: {{{1
Bram Moolenaar81af9252010-12-10 20:35:50 +01001255unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001256let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001257let &cpo = s:keepcpo
1258unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001259" vim: ts=8 fdm=marker