Merge branch 'hack/autopaste'
[vim-kana.git] / runtime / syntax / tex.vim
blob442cdf232e58a04d58ac055c95b863e9eb718a12
1 " Vim syntax file
2 " Language:     TeX
3 " Maintainer:   Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
4 " Last Change:  Feb 27, 2007
5 " Version:      37
6 " URL:          http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
8 " Notes: {{{1
10 " 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
11 "    use %stopzone.
13 " 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
14 "    by suitable use of %stopzone.
16 " 3. If you have a slow computer, you may wish to modify
18 "       syn sync maxlines=200
19 "       syn sync minlines=50
21 "    to values that are more to your liking.
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)
27 " 5. If you have the variable "g:tex_no_error" defined then none of the
28 "    lexical error-checking will be done.
30 "    ie. let g:tex_no_error=1
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
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
56 " Determine whether or not to use "*.sty" mode {{{1
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
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")
76  let g:tex_fold_enabled= 0
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
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
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
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
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
106 syn cluster texRefGroup         contains=texMatcher,texComment,texDelimiter
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
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
127 endif
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
137 syn region texParen             start="("                                               end=")"         contains=@texMatchGroup,@Spell
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
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
160 " TeX/LaTeX delimiters: {{{1
161 syn match texDelimiter          "&"
162 syn match texDelimiter          "\\\\"
164 " Tex/Latex Options: {{{1
165 syn match texOption     "[^\\]\zs#\d\+\|^#\d\+"
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\)$"
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
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
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
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
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\>"
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\>"
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\>"
233 syn match texTypeStyle          "\\rmfamily\>"
234 syn match texTypeStyle          "\\sffamily\>"
235 syn match texTypeStyle          "\\ttfamily\>"
237 syn match texTypeStyle          "\\itshape\>"
238 syn match texTypeStyle          "\\scshape\>"
239 syn match texTypeStyle          "\\slshape\>"
240 syn match texTypeStyle          "\\upshape\>"
242 syn match texTypeStyle          "\\bfseries\>"
243 syn match texTypeStyle          "\\mdseries\>"
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\>"
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
262 " Sections, subsections, etc: {{{1
263 if g:tex_fold_enabled && has("folding")
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
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
274 else
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
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
285 endif
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
294 " Math Zones: {{{1
295 if !exists("tex_no_math")
296  " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
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
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)
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
340  syn match texMathOper          "[_^=]" contained
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
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"
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
374 syn keyword texTodo             contained               combak  fixme   todo    xxx
375 syn case match
376 if b:extfname == "dtx"
377   syn match texComment          "\^\^A.*$"      contains=@texCommentGroup
378   syn match texComment          "^%\+"          contains=@texCommentGroup
379 else
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
388 endif
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.
393 syn region texZone              start="\\begin{verbatim}"               end="\\end{verbatim}\|%stopzone\>"      contains=@Spell
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
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
411 " Tex Reference Zones: {{{1
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
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
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
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\+"
444 " TeX Lengths: {{{1
445 syn match  texLength            "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
447 " TeX String Delimiters: {{{1
448 syn match texString             "\(``\|''\|,,\)"
450 " LaTeX synchronization: {{{1
451 syn sync maxlines=200
452 syn sync minlines=50
454 syn  sync match texSyncStop                     groupthere NONE         "%stopzone\>"
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
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
488   HiLink texCite                texRefZone
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
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
538   delcommand HiLink
539 endif
541 " Current Syntax: {{{1
542 unlet b:extfname
543 let   b:current_syntax = "tex"
544 " vim: ts=8 fdm=marker