mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			545 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			545 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| " Vim syntax file
 | |
| " Language:	TeX
 | |
| " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
 | |
| " Last Change:	Feb 27, 2007
 | |
| " Version:	37
 | |
| " URL:		http://mysite.verizon.net/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 {{{1
 | |
| " 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
 | |
| 
 | |
| " handle folding {{{1
 | |
| if !exists("g:tex_fold_enabled")
 | |
|  let g:tex_fold_enabled= 0
 | |
| elseif g:tex_fold_enabled && !has("folding")
 | |
|  let g:tex_fold_enabled= 0
 | |
|  echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
 | |
| endif
 | |
| if g:tex_fold_enabled && &fdm == "manual"
 | |
|  set fdm=syntax
 | |
| 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 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
 | |
| 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
 | |
| 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
 | |
|  syn cluster texMathZoneGroup add=@NoSpell
 | |
|  " following used in the \part \chapter \section \subsection \subsubsection
 | |
|  " \paragraph \subparagraph \author \title highlighting
 | |
|  syn cluster texDocGroup		contains=texPartZone,@texPartGroup
 | |
|  syn cluster texPartGroup		contains=texChapterZone,texSectionZone,texParaZone
 | |
|  syn cluster texChapterGroup		contains=texSectionZone,texParaZone
 | |
|  syn cluster texSectionGroup		contains=texSubSectionZone,texParaZone
 | |
|  syn cluster texSubSectionGroup		contains=texSubSubSectionZone,texParaZone
 | |
|  syn cluster texSubSubSectionGroup	contains=texParaZone
 | |
|  syn cluster texParaGroup		contains=texSubParaZone
 | |
| 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,@Spell
 | |
| 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
 | |
| 
 | |
| " Preamble syntax-based folding support: {{{1
 | |
| if g:tex_fold_enabled && has("folding")
 | |
|  syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=@texMatchGroup
 | |
| endif
 | |
| 
 | |
| " 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
 | |
| if g:tex_fold_enabled && has("folding")
 | |
|  syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'	fold contains=@texFoldGroup,@texDocGroup,@Spell
 | |
|  syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\n\ze\s*\\part\>'		fold contains=@texFoldGroup,@texPartGroup,@Spell
 | |
|  syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\n\ze\s*\\chapter\>'	fold contains=@texFoldGroup,@texChapterGroup,@Spell
 | |
|  syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\n\ze\s*\\section\>'	fold contains=@texFoldGroup,@texSectionGroup,@Spell
 | |
|  syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\n\ze\s*\\subsection\>'	fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
 | |
|  syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		end='\n\ze\s*\\subsubsection\>'	fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
 | |
|  syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\n\ze\s*\\paragraph\>'	fold contains=@texFoldGroup,@texParaGroup,@Spell
 | |
|  syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\n\ze\s*\\subparagraph\>'	fold contains=@texFoldGroup,@Spell
 | |
|  syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'		fold contains=@texFoldGroup,@Spell
 | |
|  syn region texAbstract			matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'	fold contains=@texFoldGroup,@Spell
 | |
| else
 | |
|  syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'	contains=@texFoldGroup,@texDocGroup,@Spell
 | |
|  syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\n\ze\s*\\part\>'		contains=@texFoldGroup,@texPartGroup,@Spell
 | |
|  syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\n\ze\s*\\chapter\>'	contains=@texFoldGroup,@texChapterGroup,@Spell
 | |
|  syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\n\ze\s*\\section\>'	contains=@texFoldGroup,@texSectionGroup,@Spell
 | |
|  syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\n\ze\s*\\subsection\>'	contains=@texFoldGroup,@texSubSectionGroup,@Spell
 | |
|  syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		end='\n\ze\s*\\subsubsection\>'	contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
 | |
|  syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\n\ze\s*\\paragraph\>'	contains=@texFoldGroup,@texParaGroup,@Spell
 | |
|  syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\n\ze\s*\\subparagraph\>'	contains=@texFoldGroup,@Spell
 | |
|  syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'			contains=@texFoldGroup,@Spell
 | |
|  syn region texAbstract			matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'	contains=@texFoldGroup,@Spell
 | |
| endif
 | |
| 
 | |
| " 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: function 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	xxx
 | |
| syn case match
 | |
| if b:extfname == "dtx"
 | |
|   syn match texComment		"\^\^A.*$"	contains=@texCommentGroup
 | |
|   syn match texComment		"^%\+"		contains=@texCommentGroup
 | |
| else
 | |
|   if g:tex_fold_enabled
 | |
|    " allows syntax-folding of 2 or more contiguous comment lines
 | |
|    " single-line comments are not folded
 | |
|    syn match  texComment	"%.*$"		contains=@texCommentGroup
 | |
|    syn region texComment	start="^\zs\s*%.*\_s*%"	skip="^\s*%"	end='^\ze\s*[^%]' fold
 | |
|   else
 | |
|    syn match texComment		"%.*$"		contains=@texCommentGroup
 | |
|   endif
 | |
| 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\>"	contains=@Spell
 | |
| " listings package:
 | |
| syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"	contains=@Spell
 | |
| " moreverb package:
 | |
| syn region texZone		start="\\begin{verbatimtab}"		end="\\end{verbatimtab}\|%stopzone\>"	contains=@Spell
 | |
| syn region texZone		start="\\begin{verbatimwrite}"		end="\\end{verbatimwrite}\|%stopzone\>"	contains=@Spell
 | |
| syn region texZone		start="\\begin{boxedverbatim}"		end="\\end{boxedverbatim}\|%stopzone\>"	contains=@Spell
 | |
| 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="\\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
 | |
| syn match  texRefZone		'\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
 | |
| syn region texRefOption	contained	matchgroup=Delimiter start='\[' end=']'		contains=@texRefGroup	nextgroup=texRefOption,texCite
 | |
| syn region texCite	contained	matchgroup=Delimiter start='{' end='}'		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 texCite		texRefZone
 | |
|   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
 |