7
|
1 " Vim syntax file
|
|
2 " Language: TeX
|
477
|
3 " Maintainer: Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
|
1121
|
4 " Last Change: Feb 27, 2007
|
|
5 " Version: 37
|
477
|
6 " URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
|
7
|
7 "
|
|
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
|
|
35 if version < 600
|
|
36 syntax clear
|
|
37 elseif exists("b:current_syntax")
|
|
38 finish
|
|
39 endif
|
|
40
|
|
41 " Define the default highlighting. {{{1
|
|
42 " For version 5.7 and earlier: only when not done already
|
|
43 " For version 5.8 and later: only when an item doesn't have highlighting yet
|
|
44 if version >= 508 || !exists("did_tex_syntax_inits")
|
|
45 let did_tex_syntax_inits = 1
|
|
46 if version < 508
|
|
47 command -nargs=+ HiLink hi link <args>
|
|
48 else
|
|
49 command -nargs=+ HiLink hi def link <args>
|
|
50 endif
|
|
51 endif
|
|
52 if exists("g:tex_tex") && !exists("g:tex_no_error")
|
|
53 let g:tex_no_error= 1
|
|
54 endif
|
|
55
|
190
|
56 " Determine whether or not to use "*.sty" mode {{{1
|
7
|
57 " The user may override the normal determination by setting
|
|
58 " g:tex_stylish to 1 (for "*.sty" mode)
|
|
59 " or to 0 else (normal "*.tex" mode)
|
|
60 " or on a buffer-by-buffer basis with b:tex_stylish
|
|
61 let b:extfname=expand("%:e")
|
|
62 if exists("g:tex_stylish")
|
|
63 let b:tex_stylish= g:tex_stylish
|
|
64 elseif !exists("b:tex_stylish")
|
|
65 if b:extfname == "sty" || b:extfname == "cls" || b:extfname == "clo" || b:extfname == "dtx" || b:extfname == "ltx"
|
|
66 let b:tex_stylish= 1
|
|
67 else
|
|
68 let b:tex_stylish= 0
|
|
69 endif
|
|
70 endif
|
|
71
|
190
|
72 " handle folding {{{1
|
|
73 if !exists("g:tex_fold_enabled")
|
|
74 let g:tex_fold_enabled= 0
|
|
75 elseif g:tex_fold_enabled && !has("folding")
|
527
|
76 let g:tex_fold_enabled= 0
|
190
|
77 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
|
|
78 endif
|
|
79 if g:tex_fold_enabled && &fdm == "manual"
|
|
80 set fdm=syntax
|
|
81 endif
|
|
82
|
7
|
83 " (La)TeX keywords: only use the letters a-zA-Z {{{1
|
|
84 " but _ is the only one that causes problems.
|
|
85 if version < 600
|
|
86 set isk-=_
|
|
87 if b:tex_stylish
|
|
88 set isk+=@
|
|
89 endif
|
|
90 else
|
|
91 setlocal isk-=_
|
|
92 if b:tex_stylish
|
|
93 setlocal isk+=@
|
|
94 endif
|
|
95 endif
|
|
96
|
|
97 " Clusters: {{{1
|
|
98 " --------
|
|
99 syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSectionMarker,texSectionName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
|
|
100 if !exists("g:tex_no_error")
|
|
101 syn cluster texCmdGroup add=texMathError
|
|
102 endif
|
|
103 syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
|
477
|
104 syn 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
|
482
|
105 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
|
12
|
106 syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
|
7
|
107 if !exists("tex_no_math")
|
|
108 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
|
|
109 syn cluster texMatchGroup add=@texMathZones
|
|
110 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
|
|
111 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
|
|
112 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
|
|
113 if !exists("g:tex_no_error")
|
|
114 syn cluster texMathMatchGroup add=texMathError
|
|
115 syn cluster texMathZoneGroup add=texMathError
|
|
116 endif
|
482
|
117 syn cluster texMathZoneGroup add=@NoSpell
|
|
118 " following used in the \part \chapter \section \subsection \subsubsection
|
|
119 " \paragraph \subparagraph \author \title highlighting
|
|
120 syn cluster texDocGroup contains=texPartZone,@texPartGroup
|
|
121 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
|
|
122 syn cluster texChapterGroup contains=texSectionZone,texParaZone
|
|
123 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
|
|
124 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
|
|
125 syn cluster texSubSubSectionGroup contains=texParaZone
|
|
126 syn cluster texParaGroup contains=texSubParaZone
|
7
|
127 endif
|
|
128
|
|
129 " Try to flag {} and () mismatches: {{{1
|
|
130 if !exists("g:tex_no_error")
|
|
131 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup,texError
|
|
132 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup,texError
|
|
133 else
|
|
134 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup
|
|
135 syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup
|
|
136 endif
|
36
|
137 syn region texParen start="(" end=")" contains=@texMatchGroup,@Spell
|
7
|
138 if !exists("g:tex_no_error")
|
|
139 syn match texError "[}\])]"
|
|
140 endif
|
|
141 if !exists("tex_no_math")
|
|
142 if !exists("g:tex_no_error")
|
|
143 syn match texMathError "}" contained
|
|
144 endif
|
|
145 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
|
|
146 endif
|
|
147
|
|
148 " TeX/LaTeX keywords: {{{1
|
|
149 " Instead of trying to be All Knowing, I just match \..alphameric..
|
|
150 " Note that *.tex files may not have "@" in their \commands
|
|
151 if exists("g:tex_tex") || b:tex_stylish
|
|
152 syn match texStatement "\\[a-zA-Z@]\+"
|
|
153 else
|
|
154 syn match texStatement "\\\a\+"
|
|
155 if !exists("g:tex_no_error")
|
|
156 syn match texError "\\\a*@[a-zA-Z@]*"
|
|
157 endif
|
|
158 endif
|
|
159
|
|
160 " TeX/LaTeX delimiters: {{{1
|
|
161 syn match texDelimiter "&"
|
|
162 syn match texDelimiter "\\\\"
|
|
163
|
|
164 " Tex/Latex Options: {{{1
|
|
165 syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
|
|
166
|
|
167 " texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
|
|
168 if b:tex_stylish
|
|
169 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
|
|
170 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
|
|
171 else
|
|
172 syn match texAccent "\\[bcdvuH]\A"me=e-1
|
|
173 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
|
|
174 endif
|
|
175 syn match texAccent "\\[bcdvuH]$"
|
|
176 syn match texAccent +\\[=^.\~"`']+
|
|
177 syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
|
|
178 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
|
|
179
|
|
180 " \begin{}/\end{} section markers: {{{1
|
|
181 syn match texSectionMarker "\\begin\>\|\\end\>" nextgroup=texSectionName
|
|
182 syn region texSectionName matchgroup=Delimiter start="{" end="}" contained nextgroup=texSectionModifier
|
|
183 syn region texSectionModifier matchgroup=Delimiter start="\[" end="]" contained
|
|
184
|
|
185 " \documentclass, \documentstyle, \usepackage: {{{1
|
|
186 syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texSectionName,texDocTypeArgs
|
|
187 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texSectionName
|
|
188
|
760
|
189 " Preamble syntax-based folding support: {{{1
|
|
190 if g:tex_fold_enabled && has("folding")
|
|
191 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=@texMatchGroup
|
|
192 endif
|
|
193
|
7
|
194 " TeX input: {{{1
|
|
195 syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
|
|
196 syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies
|
|
197 syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
|
|
198 syn match texInputCurlies "[{}]" contained
|
|
199 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained
|
|
200
|
|
201 " Type Styles (LaTeX 2.09): {{{1
|
|
202 syn match texTypeStyle "\\rm\>"
|
|
203 syn match texTypeStyle "\\em\>"
|
|
204 syn match texTypeStyle "\\bf\>"
|
|
205 syn match texTypeStyle "\\it\>"
|
|
206 syn match texTypeStyle "\\sl\>"
|
|
207 syn match texTypeStyle "\\sf\>"
|
|
208 syn match texTypeStyle "\\sc\>"
|
|
209 syn match texTypeStyle "\\tt\>"
|
|
210
|
|
211 " Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
|
|
212 syn match texTypeStyle "\\textbf\>"
|
|
213 syn match texTypeStyle "\\textit\>"
|
|
214 syn match texTypeStyle "\\textmd\>"
|
|
215 syn match texTypeStyle "\\textrm\>"
|
|
216 syn match texTypeStyle "\\textsc\>"
|
|
217 syn match texTypeStyle "\\textsf\>"
|
|
218 syn match texTypeStyle "\\textsl\>"
|
|
219 syn match texTypeStyle "\\texttt\>"
|
|
220 syn match texTypeStyle "\\textup\>"
|
|
221 syn match texTypeStyle "\\emph\>"
|
|
222
|
|
223 syn match texTypeStyle "\\mathbb\>"
|
|
224 syn match texTypeStyle "\\mathbf\>"
|
|
225 syn match texTypeStyle "\\mathcal\>"
|
|
226 syn match texTypeStyle "\\mathfrak\>"
|
|
227 syn match texTypeStyle "\\mathit\>"
|
|
228 syn match texTypeStyle "\\mathnormal\>"
|
|
229 syn match texTypeStyle "\\mathrm\>"
|
|
230 syn match texTypeStyle "\\mathsf\>"
|
|
231 syn match texTypeStyle "\\mathtt\>"
|
|
232
|
|
233 syn match texTypeStyle "\\rmfamily\>"
|
|
234 syn match texTypeStyle "\\sffamily\>"
|
|
235 syn match texTypeStyle "\\ttfamily\>"
|
|
236
|
|
237 syn match texTypeStyle "\\itshape\>"
|
|
238 syn match texTypeStyle "\\scshape\>"
|
|
239 syn match texTypeStyle "\\slshape\>"
|
|
240 syn match texTypeStyle "\\upshape\>"
|
|
241
|
|
242 syn match texTypeStyle "\\bfseries\>"
|
|
243 syn match texTypeStyle "\\mdseries\>"
|
|
244
|
|
245 " Some type sizes: {{{1
|
|
246 syn match texTypeSize "\\tiny\>"
|
|
247 syn match texTypeSize "\\scriptsize\>"
|
|
248 syn match texTypeSize "\\footnotesize\>"
|
|
249 syn match texTypeSize "\\small\>"
|
|
250 syn match texTypeSize "\\normalsize\>"
|
|
251 syn match texTypeSize "\\large\>"
|
|
252 syn match texTypeSize "\\Large\>"
|
|
253 syn match texTypeSize "\\LARGE\>"
|
|
254 syn match texTypeSize "\\huge\>"
|
|
255 syn match texTypeSize "\\Huge\>"
|
|
256
|
|
257 " Spacecodes (TeX'isms): {{{1
|
|
258 " \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
|
|
259 syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
|
|
260 syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
|
|
261
|
|
262 " Sections, subsections, etc: {{{1
|
190
|
263 if g:tex_fold_enabled && has("folding")
|
1121
|
264 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' fold contains=@texFoldGroup,@texDocGroup,@Spell
|
|
265 syn region texPartZone matchgroup=texSection start='\\part\>' end='\n\ze\s*\\part\>' fold contains=@texFoldGroup,@texPartGroup,@Spell
|
|
266 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\n\ze\s*\\chapter\>' fold contains=@texFoldGroup,@texChapterGroup,@Spell
|
|
267 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\n\ze\s*\\section\>' fold contains=@texFoldGroup,@texSectionGroup,@Spell
|
|
268 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\n\ze\s*\\subsection\>' fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
|
|
269 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\n\ze\s*\\subsubsection\>' fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
|
|
270 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\n\ze\s*\\paragraph\>' fold contains=@texFoldGroup,@texParaGroup,@Spell
|
|
271 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\n\ze\s*\\subparagraph\>' fold contains=@texFoldGroup,@Spell
|
482
|
272 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' fold contains=@texFoldGroup,@Spell
|
|
273 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' fold contains=@texFoldGroup,@Spell
|
36
|
274 else
|
1121
|
275 syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
|
|
276 syn region texPartZone matchgroup=texSection start='\\part\>' end='\n\ze\s*\\part\>' contains=@texFoldGroup,@texPartGroup,@Spell
|
|
277 syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\n\ze\s*\\chapter\>' contains=@texFoldGroup,@texChapterGroup,@Spell
|
|
278 syn region texSectionZone matchgroup=texSection start='\\section\>' end='\n\ze\s*\\section\>' contains=@texFoldGroup,@texSectionGroup,@Spell
|
|
279 syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\n\ze\s*\\subsection\>' contains=@texFoldGroup,@texSubSectionGroup,@Spell
|
|
280 syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\n\ze\s*\\subsubsection\>' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
|
|
281 syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\n\ze\s*\\paragraph\>' contains=@texFoldGroup,@texParaGroup,@Spell
|
|
282 syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\n\ze\s*\\subparagraph\>' contains=@texFoldGroup,@Spell
|
482
|
283 syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
|
|
284 syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
|
36
|
285 endif
|
7
|
286
|
|
287 " Bad Math (mismatched): {{{1
|
|
288 if !exists("tex_no_math")
|
|
289 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
|
|
290 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
|
|
291 syn match texBadMath "\\[\])]"
|
|
292 endif
|
|
293
|
|
294 " Math Zones: {{{1
|
|
295 if !exists("tex_no_math")
|
477
|
296 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
|
7
|
297 " Starred forms are created if starform is true. Starred
|
|
298 " forms have syntax group and synchronization groups with a
|
|
299 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
|
|
300 fun! TexNewMathZone(sfx,mathzone,starform)
|
|
301 let grpname = "texMathZone".a:sfx
|
|
302 let syncname = "texSyncMathZone".a:sfx
|
|
303 exe "syn cluster texMathZones add=".grpname
|
|
304 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'
|
|
305 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
|
|
306 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
|
|
307 exe 'HiLink '.grpname.' texMath'
|
|
308 if a:starform
|
|
309 let grpname = "texMathZone".a:sfx.'S'
|
|
310 let syncname = "texSyncMathZone".a:sfx.'S'
|
|
311 exe "syn cluster texMathZones add=".grpname
|
|
312 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'
|
|
313 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
|
|
314 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
|
|
315 exe 'HiLink '.grpname.' texMath'
|
|
316 endif
|
|
317 endfun
|
|
318
|
|
319 " Standard Math Zones: {{{2
|
|
320 call TexNewMathZone("A","align",1)
|
|
321 call TexNewMathZone("B","alignat",1)
|
|
322 call TexNewMathZone("C","displaymath",1)
|
|
323 call TexNewMathZone("D","eqnarray",1)
|
|
324 call TexNewMathZone("E","equation",1)
|
|
325 call TexNewMathZone("F","flalign",1)
|
|
326 call TexNewMathZone("G","gather",1)
|
|
327 call TexNewMathZone("H","math",1)
|
|
328 call TexNewMathZone("I","multline",1)
|
|
329 call TexNewMathZone("J","subequations",0)
|
|
330 call TexNewMathZone("K","xalignat",1)
|
|
331 call TexNewMathZone("L","xxalignat",0)
|
|
332
|
|
333 " Inline Math Zones: {{{2
|
|
334 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
|
|
335 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
|
|
336 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
|
|
337 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
|
|
338 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
|
|
339
|
|
340 syn match texMathOper "[_^=]" contained
|
|
341
|
|
342 " \left..something.. and \right..something.. support: {{{2
|
|
343 syn match texMathDelimBad contained "\S"
|
|
344 syn match texMathDelim contained "\\\(left\|right\|[bB]igg\=[lr]\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
|
|
345 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
|
|
346 syn match texMathDelim contained "\\lefteqn\>"
|
|
347 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
|
|
348 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
|
|
349 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
|
|
350 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
|
|
351 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
|
|
352 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
|
|
353 syn keyword texMathDelimKey contained lbrace lvert rfloor
|
|
354 endif
|
|
355
|
|
356 " Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
|
|
357 syn match texSpecialChar "\\[$&%#{}_]"
|
|
358 if b:tex_stylish
|
|
359 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
|
|
360 else
|
|
361 syn match texSpecialChar "\\[SP@]\A"me=e-1
|
|
362 endif
|
|
363 syn match texSpecialChar "\\\\"
|
|
364 if !exists("tex_no_math")
|
|
365 syn match texOnlyMath "[_^]"
|
|
366 endif
|
|
367 syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
|
|
368
|
|
369 " Comments: {{{1
|
|
370 " Normal TeX LaTeX : %....
|
|
371 " Documented TeX Format: ^^A... -and- leading %s (only)
|
|
372 syn cluster texCommentGroup contains=texTodo,@Spell
|
|
373 syn case ignore
|
827
|
374 syn keyword texTodo contained combak fixme todo xxx
|
7
|
375 syn case match
|
|
376 if b:extfname == "dtx"
|
|
377 syn match texComment "\^\^A.*$" contains=@texCommentGroup
|
|
378 syn match texComment "^%\+" contains=@texCommentGroup
|
|
379 else
|
699
|
380 if g:tex_fold_enabled
|
|
381 " allows syntax-folding of 2 or more contiguous comment lines
|
|
382 " single-line comments are not folded
|
|
383 syn match texComment "%.*$" contains=@texCommentGroup
|
|
384 syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' fold
|
|
385 else
|
|
386 syn match texComment "%.*$" contains=@texCommentGroup
|
|
387 endif
|
7
|
388 endif
|
|
389
|
|
390 " Separate lines used for verb` and verb# so that the end conditions {{{1
|
|
391 " will appropriately terminate. Ideally vim would let me save a
|
|
392 " character from the start pattern and re-use it in the end-pattern.
|
482
|
393 syn region texZone start="\\begin{verbatim}" end="\\end{verbatim}\|%stopzone\>" contains=@Spell
|
836
|
394 " listings package:
|
|
395 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
|
|
396 " moreverb package:
|
|
397 syn region texZone start="\\begin{verbatimtab}" end="\\end{verbatimtab}\|%stopzone\>" contains=@Spell
|
|
398 syn region texZone start="\\begin{verbatimwrite}" end="\\end{verbatimwrite}\|%stopzone\>" contains=@Spell
|
|
399 syn region texZone start="\\begin{boxedverbatim}" end="\\end{boxedverbatim}\|%stopzone\>" contains=@Spell
|
7
|
400 if version < 600
|
|
401 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
|
|
402 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
|
|
403 else
|
|
404 if b:tex_stylish
|
|
405 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
|
|
406 else
|
|
407 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
|
|
408 endif
|
|
409 endif
|
|
410
|
|
411 " Tex Reference Zones: {{{1
|
12
|
412 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
413 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
414 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
415 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
416 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
417 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
|
587
|
418 syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
|
|
419 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup nextgroup=texRefOption,texCite
|
|
420 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup
|
7
|
421
|
|
422 " Handle newcommand, newenvironment : {{{1
|
|
423 syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
|
|
424 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
|
|
425 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
|
|
426 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
|
|
427 syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
|
|
428 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
|
|
429 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
|
|
430 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
|
|
431
|
|
432 " Definitions/Commands: {{{1
|
|
433 syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
|
|
434 if b:tex_stylish
|
|
435 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
|
|
436 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
|
|
437 else
|
|
438 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
|
|
439 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
|
|
440 endif
|
|
441 syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
|
|
442 syn match texDefParm contained "#\d\+"
|
|
443
|
|
444 " TeX Lengths: {{{1
|
1121
|
445 syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
|
7
|
446
|
|
447 " TeX String Delimiters: {{{1
|
|
448 syn match texString "\(``\|''\|,,\)"
|
|
449
|
|
450 " LaTeX synchronization: {{{1
|
|
451 syn sync maxlines=200
|
|
452 syn sync minlines=50
|
|
453
|
|
454 syn sync match texSyncStop groupthere NONE "%stopzone\>"
|
|
455
|
|
456 " Synchronization: {{{1
|
|
457 " The $..$ and $$..$$ make for impossible sync patterns
|
|
458 " (one can't tell if a "$$" starts or stops a math zone by itself)
|
|
459 " The following grouptheres coupled with minlines above
|
|
460 " help improve the odds of good syncing.
|
|
461 if !exists("tex_no_math")
|
|
462 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
|
|
463 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
|
|
464 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
|
|
465 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
|
|
466 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
|
|
467 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
|
|
468 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
|
|
469 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
|
|
470 endif
|
|
471
|
|
472 " Highlighting: {{{1
|
|
473 if did_tex_syntax_inits == 1
|
|
474 let did_tex_syntax_inits= 2
|
|
475 " TeX highlighting groups which should share similar highlighting
|
|
476 if !exists("g:tex_no_error")
|
|
477 if !exists("tex_no_math")
|
|
478 HiLink texBadMath texError
|
|
479 HiLink texMathDelimBad texError
|
|
480 HiLink texMathError texError
|
|
481 if !b:tex_stylish
|
|
482 HiLink texOnlyMath texError
|
|
483 endif
|
|
484 endif
|
|
485 HiLink texError Error
|
|
486 endif
|
|
487
|
587
|
488 HiLink texCite texRefZone
|
7
|
489 HiLink texDefCmd texDef
|
|
490 HiLink texDefName texDef
|
|
491 HiLink texDocType texCmdName
|
|
492 HiLink texDocTypeArgs texCmdArgs
|
|
493 HiLink texInputFileOpt texCmdArgs
|
|
494 HiLink texInputCurlies texDelimiter
|
|
495 HiLink texLigature texSpecialChar
|
|
496 if !exists("tex_no_math")
|
|
497 HiLink texMathDelimSet1 texMathDelim
|
|
498 HiLink texMathDelimSet2 texMathDelim
|
|
499 HiLink texMathDelimKey texMathDelim
|
|
500 HiLink texMathMatcher texMath
|
|
501 HiLink texMathZoneW texMath
|
|
502 HiLink texMathZoneX texMath
|
|
503 HiLink texMathZoneY texMath
|
|
504 HiLink texMathZoneZ texMath
|
|
505 endif
|
|
506 HiLink texSectionMarker texCmdName
|
|
507 HiLink texSectionName texSection
|
|
508 HiLink texSpaceCode texStatement
|
|
509 HiLink texTypeSize texType
|
|
510 HiLink texTypeStyle texType
|
|
511
|
|
512 " Basic TeX highlighting groups
|
|
513 HiLink texCmdArgs Number
|
|
514 HiLink texCmdName Statement
|
|
515 HiLink texComment Comment
|
|
516 HiLink texDef Statement
|
|
517 HiLink texDefParm Special
|
|
518 HiLink texDelimiter Delimiter
|
|
519 HiLink texInput Special
|
|
520 HiLink texInputFile Special
|
|
521 HiLink texLength Number
|
|
522 HiLink texMath Special
|
|
523 HiLink texMathDelim Statement
|
|
524 HiLink texMathOper Operator
|
|
525 HiLink texNewCmd Statement
|
|
526 HiLink texNewEnv Statement
|
|
527 HiLink texOption Number
|
|
528 HiLink texRefZone Special
|
|
529 HiLink texSection PreCondit
|
|
530 HiLink texSpaceCodeChar Special
|
|
531 HiLink texSpecialChar SpecialChar
|
|
532 HiLink texStatement Statement
|
|
533 HiLink texString String
|
|
534 HiLink texTodo Todo
|
|
535 HiLink texType Type
|
|
536 HiLink texZone PreCondit
|
|
537
|
|
538 delcommand HiLink
|
|
539 endif
|
|
540
|
|
541 " Current Syntax: {{{1
|
|
542 unlet b:extfname
|
|
543 let b:current_syntax = "tex"
|
|
544 " vim: ts=8 fdm=marker
|