mirror of
https://github.com/vim/vim
synced 2025-03-16 14:57:52 +01:00
481 lines
20 KiB
VimL
481 lines
20 KiB
VimL
" Vim syntax file
|
|
" Language: TeX
|
|
" Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
|
|
" Last Change: Jun 15, 2004
|
|
" Version: 25
|
|
" URL: http://www.erols.com/astronaut/vim/index.html#vimlinks_syntax
|
|
"
|
|
" Notes: {{{1
|
|
"
|
|
" 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
|
|
" use %stopzone.
|
|
"
|
|
" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
|
|
" by suitable use of %stopzone.
|
|
"
|
|
" 3. If you have a slow computer, you may wish to modify
|
|
"
|
|
" syn sync maxlines=200
|
|
" syn sync minlines=50
|
|
"
|
|
" to values that are more to your liking.
|
|
"
|
|
" 4. There is no match-syncing for $...$ and $$...$$; hence large
|
|
" equation blocks constructed that way may exhibit syncing problems.
|
|
" (there's no difference between begin/end patterns)
|
|
"
|
|
" 5. If you have the variable "g:tex_no_error" defined then none of the
|
|
" lexical error-checking will be done.
|
|
"
|
|
" ie. let g:tex_no_error=1
|
|
|
|
" Version Clears: {{{1
|
|
" For version 5.x: Clear all syntax items
|
|
" For version 6.x: Quit when a syntax file was already loaded
|
|
if version < 600
|
|
syntax clear
|
|
elseif exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
|
|
" Define the default highlighting. {{{1
|
|
" For version 5.7 and earlier: only when not done already
|
|
" For version 5.8 and later: only when an item doesn't have highlighting yet
|
|
if version >= 508 || !exists("did_tex_syntax_inits")
|
|
let did_tex_syntax_inits = 1
|
|
if version < 508
|
|
command -nargs=+ HiLink hi link <args>
|
|
else
|
|
command -nargs=+ HiLink hi def link <args>
|
|
endif
|
|
endif
|
|
if exists("g:tex_tex") && !exists("g:tex_no_error")
|
|
let g:tex_no_error= 1
|
|
endif
|
|
|
|
" Determine whether or not to use "*.sty" mode
|
|
" The user may override the normal determination by setting
|
|
" g:tex_stylish to 1 (for "*.sty" mode)
|
|
" or to 0 else (normal "*.tex" mode)
|
|
" or on a buffer-by-buffer basis with b:tex_stylish
|
|
let b:extfname=expand("%:e")
|
|
if exists("g:tex_stylish")
|
|
let b:tex_stylish= g:tex_stylish
|
|
elseif !exists("b:tex_stylish")
|
|
if b:extfname == "sty" || b:extfname == "cls" || b:extfname == "clo" || b:extfname == "dtx" || b:extfname == "ltx"
|
|
let b:tex_stylish= 1
|
|
else
|
|
let b:tex_stylish= 0
|
|
endif
|
|
endif
|
|
|
|
" (La)TeX keywords: only use the letters a-zA-Z {{{1
|
|
" but _ is the only one that causes problems.
|
|
if version < 600
|
|
set isk-=_
|
|
if b:tex_stylish
|
|
set isk+=@
|
|
endif
|
|
else
|
|
setlocal isk-=_
|
|
if b:tex_stylish
|
|
setlocal isk+=@
|
|
endif
|
|
endif
|
|
|
|
" Clusters: {{{1
|
|
" --------
|
|
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
|
|
if !exists("g:tex_no_error")
|
|
syn cluster texCmdGroup add=texMathError
|
|
endif
|
|
syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
|
|
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
|
|
syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
|
|
if !exists("tex_no_math")
|
|
syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
|
|
syn cluster texMatchGroup add=@texMathZones
|
|
syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
|
|
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
|
|
syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
|
|
if !exists("g:tex_no_error")
|
|
syn cluster texMathMatchGroup add=texMathError
|
|
syn cluster texMathZoneGroup add=texMathError
|
|
endif
|
|
endif
|
|
|
|
" Try to flag {} and () mismatches: {{{1
|
|
if !exists("g:tex_no_error")
|
|
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup,texError
|
|
syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup,texError
|
|
else
|
|
syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texMatchGroup
|
|
syn region texMatcher matchgroup=Delimiter start="\[" end="]" contains=@texMatchGroup
|
|
endif
|
|
syn region texParen start="(" end=")" contains=@texMatchGroup
|
|
if !exists("g:tex_no_error")
|
|
syn match texError "[}\])]"
|
|
endif
|
|
if !exists("tex_no_math")
|
|
if !exists("g:tex_no_error")
|
|
syn match texMathError "}" contained
|
|
endif
|
|
syn region texMathMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
|
|
endif
|
|
|
|
" TeX/LaTeX keywords: {{{1
|
|
" Instead of trying to be All Knowing, I just match \..alphameric..
|
|
" Note that *.tex files may not have "@" in their \commands
|
|
if exists("g:tex_tex") || b:tex_stylish
|
|
syn match texStatement "\\[a-zA-Z@]\+"
|
|
else
|
|
syn match texStatement "\\\a\+"
|
|
if !exists("g:tex_no_error")
|
|
syn match texError "\\\a*@[a-zA-Z@]*"
|
|
endif
|
|
endif
|
|
|
|
" TeX/LaTeX delimiters: {{{1
|
|
syn match texDelimiter "&"
|
|
syn match texDelimiter "\\\\"
|
|
|
|
" Tex/Latex Options: {{{1
|
|
syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
|
|
|
|
" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
|
|
if b:tex_stylish
|
|
syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
|
|
syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
|
|
else
|
|
syn match texAccent "\\[bcdvuH]\A"me=e-1
|
|
syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
|
|
endif
|
|
syn match texAccent "\\[bcdvuH]$"
|
|
syn match texAccent +\\[=^.\~"`']+
|
|
syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
|
|
syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
|
|
|
|
" \begin{}/\end{} section markers: {{{1
|
|
syn match texSectionMarker "\\begin\>\|\\end\>" nextgroup=texSectionName
|
|
syn region texSectionName matchgroup=Delimiter start="{" end="}" contained nextgroup=texSectionModifier
|
|
syn region texSectionModifier matchgroup=Delimiter start="\[" end="]" contained
|
|
|
|
" \documentclass, \documentstyle, \usepackage: {{{1
|
|
syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texSectionName,texDocTypeArgs
|
|
syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texSectionName
|
|
|
|
" TeX input: {{{1
|
|
syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
|
|
syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies
|
|
syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
|
|
syn match texInputCurlies "[{}]" contained
|
|
syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained
|
|
|
|
" Type Styles (LaTeX 2.09): {{{1
|
|
syn match texTypeStyle "\\rm\>"
|
|
syn match texTypeStyle "\\em\>"
|
|
syn match texTypeStyle "\\bf\>"
|
|
syn match texTypeStyle "\\it\>"
|
|
syn match texTypeStyle "\\sl\>"
|
|
syn match texTypeStyle "\\sf\>"
|
|
syn match texTypeStyle "\\sc\>"
|
|
syn match texTypeStyle "\\tt\>"
|
|
|
|
" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
|
|
syn match texTypeStyle "\\textbf\>"
|
|
syn match texTypeStyle "\\textit\>"
|
|
syn match texTypeStyle "\\textmd\>"
|
|
syn match texTypeStyle "\\textrm\>"
|
|
syn match texTypeStyle "\\textsc\>"
|
|
syn match texTypeStyle "\\textsf\>"
|
|
syn match texTypeStyle "\\textsl\>"
|
|
syn match texTypeStyle "\\texttt\>"
|
|
syn match texTypeStyle "\\textup\>"
|
|
syn match texTypeStyle "\\emph\>"
|
|
|
|
syn match texTypeStyle "\\mathbb\>"
|
|
syn match texTypeStyle "\\mathbf\>"
|
|
syn match texTypeStyle "\\mathcal\>"
|
|
syn match texTypeStyle "\\mathfrak\>"
|
|
syn match texTypeStyle "\\mathit\>"
|
|
syn match texTypeStyle "\\mathnormal\>"
|
|
syn match texTypeStyle "\\mathrm\>"
|
|
syn match texTypeStyle "\\mathsf\>"
|
|
syn match texTypeStyle "\\mathtt\>"
|
|
|
|
syn match texTypeStyle "\\rmfamily\>"
|
|
syn match texTypeStyle "\\sffamily\>"
|
|
syn match texTypeStyle "\\ttfamily\>"
|
|
|
|
syn match texTypeStyle "\\itshape\>"
|
|
syn match texTypeStyle "\\scshape\>"
|
|
syn match texTypeStyle "\\slshape\>"
|
|
syn match texTypeStyle "\\upshape\>"
|
|
|
|
syn match texTypeStyle "\\bfseries\>"
|
|
syn match texTypeStyle "\\mdseries\>"
|
|
|
|
" Some type sizes: {{{1
|
|
syn match texTypeSize "\\tiny\>"
|
|
syn match texTypeSize "\\scriptsize\>"
|
|
syn match texTypeSize "\\footnotesize\>"
|
|
syn match texTypeSize "\\small\>"
|
|
syn match texTypeSize "\\normalsize\>"
|
|
syn match texTypeSize "\\large\>"
|
|
syn match texTypeSize "\\Large\>"
|
|
syn match texTypeSize "\\LARGE\>"
|
|
syn match texTypeSize "\\huge\>"
|
|
syn match texTypeSize "\\Huge\>"
|
|
|
|
" Spacecodes (TeX'isms): {{{1
|
|
" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
|
|
syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
|
|
syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
|
|
|
|
" Sections, subsections, etc: {{{1
|
|
syn match texSection "\\\(sub\)*section\*\=\>"
|
|
syn match texSection "\\\(title\|author\|part\|chapter\|paragraph\|subparagraph\)\>"
|
|
syn match texSection "\\begin\s*{\s*abstract\s*}\|\\end\s*{\s*abstract\s*}"
|
|
|
|
" Bad Math (mismatched): {{{1
|
|
if !exists("tex_no_math")
|
|
syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
|
|
syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
|
|
syn match texBadMath "\\[\])]"
|
|
endif
|
|
|
|
" Math Zones: {{{1
|
|
if !exists("tex_no_math")
|
|
" TexNewMathZone: creates a mathzone with the given suffix and mathzone name. {{{2
|
|
" Starred forms are created if starform is true. Starred
|
|
" forms have syntax group and synchronization groups with a
|
|
" "S" appended. Handles: cluster, syntax, sync, and HiLink.
|
|
fun! TexNewMathZone(sfx,mathzone,starform)
|
|
let grpname = "texMathZone".a:sfx
|
|
let syncname = "texSyncMathZone".a:sfx
|
|
exe "syn cluster texMathZones add=".grpname
|
|
exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'
|
|
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
|
|
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
|
|
exe 'HiLink '.grpname.' texMath'
|
|
if a:starform
|
|
let grpname = "texMathZone".a:sfx.'S'
|
|
let syncname = "texSyncMathZone".a:sfx.'S'
|
|
exe "syn cluster texMathZones add=".grpname
|
|
exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'
|
|
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
|
|
exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
|
|
exe 'HiLink '.grpname.' texMath'
|
|
endif
|
|
endfun
|
|
|
|
" Standard Math Zones: {{{2
|
|
call TexNewMathZone("A","align",1)
|
|
call TexNewMathZone("B","alignat",1)
|
|
call TexNewMathZone("C","displaymath",1)
|
|
call TexNewMathZone("D","eqnarray",1)
|
|
call TexNewMathZone("E","equation",1)
|
|
call TexNewMathZone("F","flalign",1)
|
|
call TexNewMathZone("G","gather",1)
|
|
call TexNewMathZone("H","math",1)
|
|
call TexNewMathZone("I","multline",1)
|
|
call TexNewMathZone("J","subequations",0)
|
|
call TexNewMathZone("K","xalignat",1)
|
|
call TexNewMathZone("L","xxalignat",0)
|
|
|
|
" Inline Math Zones: {{{2
|
|
syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
|
|
syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
|
|
syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
|
|
syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
|
|
syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
|
|
|
|
syn match texMathOper "[_^=]" contained
|
|
|
|
" \left..something.. and \right..something.. support: {{{2
|
|
syn match texMathDelimBad contained "\S"
|
|
syn match texMathDelim contained "\\\(left\|right\|[bB]igg\=[lr]\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
|
|
syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
|
|
syn match texMathDelim contained "\\lefteqn\>"
|
|
syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
|
|
syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
|
|
syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
|
|
syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
|
|
syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
|
|
syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
|
|
syn keyword texMathDelimKey contained lbrace lvert rfloor
|
|
endif
|
|
|
|
" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
|
|
syn match texSpecialChar "\\[$&%#{}_]"
|
|
if b:tex_stylish
|
|
syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
|
|
else
|
|
syn match texSpecialChar "\\[SP@]\A"me=e-1
|
|
endif
|
|
syn match texSpecialChar "\\\\"
|
|
if !exists("tex_no_math")
|
|
syn match texOnlyMath "[_^]"
|
|
endif
|
|
syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
|
|
|
|
" Comments: {{{1
|
|
" Normal TeX LaTeX : %....
|
|
" Documented TeX Format: ^^A... -and- leading %s (only)
|
|
syn cluster texCommentGroup contains=texTodo,@Spell
|
|
syn case ignore
|
|
syn keyword texTodo contained combak fixme todo
|
|
syn case match
|
|
if b:extfname == "dtx"
|
|
syn match texComment "\^\^A.*$" contains=@texCommentGroup
|
|
syn match texComment "^%\+" contains=@texCommentGroup
|
|
else
|
|
syn match texComment "%.*$" contains=@texCommentGroup
|
|
endif
|
|
|
|
" Separate lines used for verb` and verb# so that the end conditions {{{1
|
|
" will appropriately terminate. Ideally vim would let me save a
|
|
" character from the start pattern and re-use it in the end-pattern.
|
|
syn region texZone start="\\begin{verbatim}" end="\\end{verbatim}\|%stopzone\>"
|
|
if version < 600
|
|
syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
|
|
syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
|
|
else
|
|
if b:tex_stylish
|
|
syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
|
|
else
|
|
syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
|
|
endif
|
|
endif
|
|
|
|
" Tex Reference Zones: {{{1
|
|
syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
syn region texRefZone matchgroup=texStatement start="\\cite\([tp]\*\=\)\={" end="}\|%stopzone\>" contains=@texRefGroup
|
|
syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
|
|
|
|
" Handle newcommand, newenvironment : {{{1
|
|
syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
|
|
syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
|
|
syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
|
|
syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
|
|
syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
|
|
syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
|
|
syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
|
|
syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
|
|
|
|
" Definitions/Commands: {{{1
|
|
syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
|
|
if b:tex_stylish
|
|
syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
|
|
syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
|
|
else
|
|
syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
|
|
syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
|
|
endif
|
|
syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
|
|
syn match texDefParm contained "#\d\+"
|
|
|
|
" TeX Lengths: {{{1
|
|
syn match texLength "\<\d\+\(\.\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
|
|
|
|
" TeX String Delimiters: {{{1
|
|
syn match texString "\(``\|''\|,,\)"
|
|
|
|
" LaTeX synchronization: {{{1
|
|
syn sync maxlines=200
|
|
syn sync minlines=50
|
|
|
|
syn sync match texSyncStop groupthere NONE "%stopzone\>"
|
|
|
|
" Synchronization: {{{1
|
|
" The $..$ and $$..$$ make for impossible sync patterns
|
|
" (one can't tell if a "$$" starts or stops a math zone by itself)
|
|
" The following grouptheres coupled with minlines above
|
|
" help improve the odds of good syncing.
|
|
if !exists("tex_no_math")
|
|
syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
|
|
syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
|
|
syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
|
|
syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
|
|
syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
|
|
syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
|
|
syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
|
|
syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
|
|
endif
|
|
|
|
" Highlighting: {{{1
|
|
if did_tex_syntax_inits == 1
|
|
let did_tex_syntax_inits= 2
|
|
" TeX highlighting groups which should share similar highlighting
|
|
if !exists("g:tex_no_error")
|
|
if !exists("tex_no_math")
|
|
HiLink texBadMath texError
|
|
HiLink texMathDelimBad texError
|
|
HiLink texMathError texError
|
|
if !b:tex_stylish
|
|
HiLink texOnlyMath texError
|
|
endif
|
|
endif
|
|
HiLink texError Error
|
|
endif
|
|
|
|
HiLink texDefCmd texDef
|
|
HiLink texDefName texDef
|
|
HiLink texDocType texCmdName
|
|
HiLink texDocTypeArgs texCmdArgs
|
|
HiLink texInputFileOpt texCmdArgs
|
|
HiLink texInputCurlies texDelimiter
|
|
HiLink texLigature texSpecialChar
|
|
if !exists("tex_no_math")
|
|
HiLink texMathDelimSet1 texMathDelim
|
|
HiLink texMathDelimSet2 texMathDelim
|
|
HiLink texMathDelimKey texMathDelim
|
|
HiLink texMathMatcher texMath
|
|
HiLink texMathZoneW texMath
|
|
HiLink texMathZoneX texMath
|
|
HiLink texMathZoneY texMath
|
|
HiLink texMathZoneZ texMath
|
|
endif
|
|
HiLink texSectionMarker texCmdName
|
|
HiLink texSectionName texSection
|
|
HiLink texSpaceCode texStatement
|
|
HiLink texTypeSize texType
|
|
HiLink texTypeStyle texType
|
|
|
|
" Basic TeX highlighting groups
|
|
HiLink texCmdArgs Number
|
|
HiLink texCmdName Statement
|
|
HiLink texComment Comment
|
|
HiLink texDef Statement
|
|
HiLink texDefParm Special
|
|
HiLink texDelimiter Delimiter
|
|
HiLink texInput Special
|
|
HiLink texInputFile Special
|
|
HiLink texLength Number
|
|
HiLink texMath Special
|
|
HiLink texMathDelim Statement
|
|
HiLink texMathOper Operator
|
|
HiLink texNewCmd Statement
|
|
HiLink texNewEnv Statement
|
|
HiLink texOption Number
|
|
HiLink texRefZone Special
|
|
HiLink texSection PreCondit
|
|
HiLink texSpaceCodeChar Special
|
|
HiLink texSpecialChar SpecialChar
|
|
HiLink texStatement Statement
|
|
HiLink texString String
|
|
HiLink texTodo Todo
|
|
HiLink texType Type
|
|
HiLink texZone PreCondit
|
|
|
|
delcommand HiLink
|
|
endif
|
|
|
|
" Current Syntax: {{{1
|
|
unlet b:extfname
|
|
let b:current_syntax = "tex"
|
|
" vim: ts=8 fdm=marker
|