123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353 |
- " Vim syntax file
- " Language: TeX
- " Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
- " Last Change: Apr 22, 2022
- " Version: 121
- " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
- "
- " 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
- "
- " 6. Please see :help latex-syntax for information on
- " syntax folding :help tex-folding
- " spell checking :help tex-nospell
- " commands and mathzones :help tex-runon
- " new command highlighting :help tex-morecommands
- " error highlighting :help tex-error
- " new math groups :help tex-math
- " new styles :help tex-style
- " using conceal mode :help tex-conceal
- " Version Clears: {{{1
- " quit when a syntax file was already loaded
- if exists("b:current_syntax")
- finish
- endif
- let s:keepcpo= &cpo
- set cpo&vim
- scriptencoding utf-8
- " by default, enable all region-based highlighting
- let s:tex_fast= "bcmMprsSvV"
- if exists("g:tex_fast")
- if type(g:tex_fast) != 1
- " g:tex_fast exists and is not a string, so
- " turn off all optional region-based highighting
- let s:tex_fast= ""
- else
- let s:tex_fast= g:tex_fast
- endif
- endif
- " let user determine which classes of concealment will be supported
- " a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
- if !exists("g:tex_conceal")
- let s:tex_conceal= 'abdmgsS'
- else
- let s:tex_conceal= g:tex_conceal
- endif
- if !exists("g:tex_superscripts")
- let s:tex_superscripts= '[0-9a-zA-W.,:;+-<>/()=]'
- else
- let s:tex_superscripts= g:tex_superscripts
- endif
- if !exists("g:tex_subscripts")
- let s:tex_subscripts= '[0-9aehijklmnoprstuvx,+-/().]'
- else
- let s:tex_subscripts= g:tex_subscripts
- 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 s:extfname=expand("%:e")
- if exists("g:tex_stylish")
- let b:tex_stylish= g:tex_stylish
- elseif !exists("b:tex_stylish")
- if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s: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 s:tex_fold_enabled= 0
- elseif g:tex_fold_enabled && !has("folding")
- let s:tex_fold_enabled= 0
- echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
- else
- let s:tex_fold_enabled= 1
- endif
- if s:tex_fold_enabled && &fdm == "manual"
- setl fdm=syntax
- endif
- if s:tex_fold_enabled && has("folding")
- com! -nargs=* TexFold <args> fold
- else
- com! -nargs=* TexFold <args>
- endif
- " (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
- " but _ is the only one that causes problems.
- " One may override this iskeyword setting by providing
- " g:tex_isk
- if exists("g:tex_isk")
- if b:tex_stylish && g:tex_isk !~ '@'
- let b:tex_isk= '@,'.g:tex_isk
- else
- let b:tex_isk= g:tex_isk
- endif
- elseif b:tex_stylish
- let b:tex_isk="@,48-57,a-z,A-Z,192-255"
- else
- let b:tex_isk="48-57,a-z,A-Z,192-255"
- endif
- if (v:version == 704 && has("patch-7.4.1142")) || v:version > 704
- exe "syn iskeyword ".b:tex_isk
- else
- exe "setl isk=".b:tex_isk
- endif
- if exists("g:tex_no_error") && g:tex_no_error
- let s:tex_no_error= 1
- else
- let s:tex_no_error= 0
- endif
- if exists("g:tex_comment_nospell") && g:tex_comment_nospell
- let s:tex_comment_nospell= 1
- else
- let s:tex_comment_nospell= 0
- endif
- if exists("g:tex_nospell") && g:tex_nospell
- let s:tex_nospell = 1
- else
- let s:tex_nospell = 0
- endif
- if exists("g:tex_matchcheck")
- let s:tex_matchcheck= g:tex_matchcheck
- else
- let s:tex_matchcheck= '[({[]'
- endif
- if exists("g:tex_excludematcher")
- let s:tex_excludematcher= g:tex_excludematcher
- else
- let s:tex_excludematcher= 0
- endif
- " Clusters: {{{1
- " --------
- syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,@texMathZones
- if !s: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,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texEmphStyle,texNoSpell
- syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell
- syn cluster texItalGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texEmphStyle,texItalBoldStyle,texNoSpell
- if !s:tex_excludematcher
- syn cluster texBoldGroup add=texMatcher
- syn cluster texItalGroup add=texMatcher
- endif
- if !s:tex_nospell
- if !s:tex_no_error
- syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell
- syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell
- syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher,@Spell
- else
- 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,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell
- syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,@Spell
- syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texBoldStyle,texBoldItalStyle,texItalStyle,texItalBoldStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher,@Spell
- endif
- else
- if !s:tex_no_error
- syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
- syn cluster texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
- syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texError,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher
- else
- 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 texMatchNMGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
- syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher
- endif
- endif
- syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
- syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
- if !exists("g:tex_no_math")
- syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcherNM,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
- 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=texBadPar,texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
- if !s: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
- if has("conceal") && &enc == 'utf-8'
- syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
- syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
- endif
- endif
- " Try to flag {}, [], and () mismatches: {{{1
- if s:tex_fast =~# 'm'
- if !s:tex_no_error
- if s:tex_matchcheck =~ '{'
- syn region texMatcher matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
- syn region texMatcherNM matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup,texError
- endif
- if s:tex_matchcheck =~ '\['
- syn region texMatcher matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
- syn region texMatcherNM matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchNMGroup,texError,@NoSpell
- endif
- else
- if s:tex_matchcheck =~ '{'
- syn region texMatcher matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
- syn region texMatcherNM matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchNMGroup
- endif
- if s:tex_matchcheck =~ '\['
- syn region texMatcher matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchGroup
- syn region texMatcherNM matchgroup=texDelimiter start="\[" end="]" transparent contains=@texMatchNMGroup
- endif
- endif
- if s:tex_matchcheck =~ '('
- if !s:tex_nospell
- syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
- else
- syn region texParen start="(" end=")" transparent contains=@texMatchGroup
- endif
- endif
- endif
- if !s:tex_no_error
- if s:tex_matchcheck =~ '('
- syn match texError "[}\]]"
- else
- syn match texError "[}\])]"
- endif
- endif
- if s:tex_fast =~# 'M'
- if !exists("g:tex_no_math")
- if !s:tex_no_error
- syn match texMathError "}" contained
- endif
- syn region texMathMatcher matchgroup=texDelimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
- endif
- 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 !s: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 texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
- if s:tex_fast =~# 'm'
- syn region texBeginEndName matchgroup=texDelimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
- syn region texBeginEndModifier matchgroup=texDelimiter start="\[" end="]" contained contains=texComment,@texMathZones,@NoSpell
- endif
- " \documentclass, \documentstyle, \usepackage: {{{1
- syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
- if s:tex_fast =~# 'm'
- syn region texDocTypeArgs matchgroup=texDelimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
- endif
- " Preamble syntax-based folding support: {{{1
- if s:tex_fold_enabled && has("folding")
- syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
- 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,texInputFileOpt
- syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
- syn match texInputCurlies "[{}]" contained
- if s:tex_fast =~# 'm'
- syn region texInputFileOpt matchgroup=texDelimiter start="\[" end="\]" contained contains=texComment
- endif
- " 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
- if s:tex_conceal !~# 'b'
- syn match texTypeStyle "\\textbf\>"
- syn match texTypeStyle "\\textit\>"
- syn match texTypeStyle "\\emph\>"
- endif
- syn match texTypeStyle "\\textmd\>"
- syn match texTypeStyle "\\textrm\>"
- syn match texTypeStyle "\\mathbf\>"
- syn match texTypeStyle "\\mathcal\>"
- 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 s:tex_fast =~# 'p'
- if !s:tex_nospell
- TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
- TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
- TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
- TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
- TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
- TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
- TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell
- TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell
- TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
- TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
- else
- TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
- TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
- TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
- TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
- TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
- TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
- TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
- TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
- TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
- TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup
- endif
- endif
- " particular support for bold and italic {{{1
- if s:tex_fast =~# 'b'
- if s:tex_conceal =~# 'b'
- if !exists("g:tex_nospell") || !g:tex_nospell
- syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
- syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
- syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
- syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
- syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
- syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
- syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
- syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
- else
- syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
- syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
- syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
- syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
- syn region texEmphStyle matchgroup=texTypeStyle start="\\emph\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
- syn region texEmphStyle matchgroup=texTypeStyle start="\\texts[cfl]\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
- syn region texEmphStyle matchgroup=texTypeStyle start="\\textup\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
- syn region texEmphStyle matchgroup=texTypeStyle start="\\texttt\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texEmphGroup
- endif
- endif
- endif
- " Bad Math (mismatched): {{{1
- if !exists("g:tex_no_math") && !s:tex_no_error
- syn match texBadMath "\\end\s*{\s*\(array\|[bBpvV]matrix\|split\|smallmatrix\)\s*}"
- syn match texBadMath "\\end\s*{\s*\(displaymath\|equation\|eqnarray\|math\)\*\=\s*}"
- syn match texBadMath "\\[\])]"
- syn match texBadPar contained "\%(\\par\>\|^\s*\n.\)"
- endif
- " Math Zones: {{{1
- if !exists("g: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 highlighting.
- fun! TexNewMathZone(sfx,mathzone,starform)
- let grpname = "texMathZone".a:sfx
- let syncname = "texSyncMathZone".a:sfx
- if s:tex_fold_enabled
- let foldcmd= " fold"
- else
- let foldcmd= ""
- endif
- exe "syn cluster texMathZones add=".grpname
- if s:tex_fast =~# 'M'
- exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
- 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*}"'
- endif
- exe 'hi def link '.grpname.' texMath'
- if a:starform
- let grpname = "texMathZone".a:sfx.'S'
- let syncname = "texSyncMathZone".a:sfx.'S'
- exe "syn cluster texMathZones add=".grpname
- if s:tex_fast =~# 'M'
- exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
- 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*}"'
- endif
- exe 'hi def link '.grpname.' texMath'
- endif
- endfun
- " Standard Math Zones: {{{2
- call TexNewMathZone("A","displaymath",1)
- call TexNewMathZone("B","eqnarray",1)
- call TexNewMathZone("C","equation",1)
- call TexNewMathZone("D","math",1)
- " Inline Math Zones: {{{2
- if s:tex_fast =~# 'M'
- if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'd'
- syn region texMathZoneV matchgroup=texDelimiter start="\\(" matchgroup=texDelimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
- syn region texMathZoneW matchgroup=texDelimiter start="\\\[" matchgroup=texDelimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
- syn region texMathZoneX matchgroup=texDelimiter start="\$" skip="\\\\\|\\\$" matchgroup=texDelimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
- syn region texMathZoneY matchgroup=texDelimiter start="\$\$" matchgroup=texDelimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
- else
- syn region texMathZoneV matchgroup=texDelimiter start="\\(" matchgroup=texDelimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
- syn region texMathZoneW matchgroup=texDelimiter start="\\\[" matchgroup=texDelimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
- syn region texMathZoneX matchgroup=texDelimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=texDelimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
- syn region texMathZoneY matchgroup=texDelimiter start="\$\$" matchgroup=texDelimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
- endif
- syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
- endif
- syn match texMathOper "[_^=]" contained
- " Text Inside Math Zones: {{{2
- if s:tex_fast =~# 'M'
- if !exists("g:tex_nospell") || !g:tex_nospell
- syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
- else
- syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
- endif
- endif
- " \left..something.. and \right..something.. support: {{{2
- syn match texMathDelimBad contained "\S"
- if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~# 'm'
- syn match texMathDelim contained "\\left\["
- syn match texMathDelim contained "\\left\\{" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
- syn match texMathDelim contained "\\right\\}" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
- let s:texMathDelimList=[
- \ ['<' , '<'] ,
- \ ['>' , '>'] ,
- \ ['(' , '('] ,
- \ [')' , ')'] ,
- \ ['\[' , '['] ,
- \ [']' , ']'] ,
- \ ['\\{' , '{'] ,
- \ ['\\}' , '}'] ,
- \ ['|' , '|'] ,
- \ ['\\|' , '‖'] ,
- \ ['\\backslash' , '\'] ,
- \ ['\\downarrow' , '↓'] ,
- \ ['\\Downarrow' , '⇓'] ,
- \ ['\\lbrace' , '['] ,
- \ ['\\lceil' , '⌈'] ,
- \ ['\\lfloor' , '⌊'] ,
- \ ['\\lgroup' , '⌊'] ,
- \ ['\\lmoustache' , '⎛'] ,
- \ ['\\rbrace' , ']'] ,
- \ ['\\rceil' , '⌉'] ,
- \ ['\\rfloor' , '⌋'] ,
- \ ['\\rgroup' , '⌋'] ,
- \ ['\\rmoustache' , '⎞'] ,
- \ ['\\uparrow' , '↑'] ,
- \ ['\\Uparrow' , '↑'] ,
- \ ['\\updownarrow', '↕'] ,
- \ ['\\Updownarrow', '⇕']]
- if &ambw == "double" || exists("g:tex_usedblwidth")
- let s:texMathDelimList= s:texMathDelimList + [
- \ ['\\langle' , '〈'] ,
- \ ['\\rangle' , '〉']]
- else
- let s:texMathDelimList= s:texMathDelimList + [
- \ ['\\langle' , '<'] ,
- \ ['\\rangle' , '>']]
- endif
- syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
- for texmath in s:texMathDelimList
- exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
- endfor
- else
- syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
- syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
- 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
- syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
- syn match texMathDelim contained "\\lefteqn\>"
- 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("g:tex_no_math")
- syn match texOnlyMath "[_^]"
- endif
- syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
- if s:tex_conceal !~# 'S'
- syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
- syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
- syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
- syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
- syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
- endif
- " Comments: {{{1
- " Normal TeX LaTeX : %....
- " Documented TeX Format: ^^A... -and- leading %s (only)
- if !s:tex_comment_nospell
- syn cluster texCommentGroup contains=texTodo,@Spell
- else
- syn cluster texCommentGroup contains=texTodo,@NoSpell
- endif
- syn case ignore
- syn keyword texTodo contained combak fixme todo xxx
- syn case match
- if s:extfname == "dtx"
- syn match texComment "\^\^A.*$" contains=@texCommentGroup
- syn match texComment "^%\+" contains=@texCommentGroup
- else
- if s:tex_fold_enabled
- " allows syntax-folding of 2 or more contiguous comment lines
- " single-line comments are not folded
- syn match texComment "%.*$" contains=@texCommentGroup
- if s:tex_fast =~# 'c'
- TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
- TexFold syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
- endif
- else
- syn match texComment "%.*$" contains=@texCommentGroup
- if s:tex_fast =~# 'c'
- syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
- endif
- endif
- endif
- " %begin-include ... %end-include acts like a texDocZone for \include'd files. Permits spell checking, for example, in such files.
- if !s:tex_nospell
- TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup,@Spell
- else
- TexFold syn region texDocZone matchgroup=texSection start='^\s*%begin-include\>' end='^\s*%end-include\>' contains=@texFoldGroup,@texDocGroup
- endif
- " Separate lines used for verb` and verb# so that the end conditions {{{1
- " will appropriately terminate.
- " If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
- if s:tex_fast =~# 'v'
- if exists("g:tex_verbspell") && g:tex_verbspell
- syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
- " listings package:
- if b:tex_stylish
- syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
- else
- syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
- endif
- else
- syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
- 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
- endif
- " Tex Reference Zones: {{{1
- if s:tex_fast =~# 'r'
- 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 region texRefOption contained matchgroup=texDelimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
- syn region texCite contained matchgroup=texDelimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
- endif
- syn match texRefZone '\\cite\%([tp]\*\=\)\=\>' nextgroup=texRefOption,texCite
- " Handle (re)newcommand, (re)newenvironment : {{{1
- syn match texNewCmd "\\\%(re\)\=newcommand\>" nextgroup=texCmdName skipwhite skipnl
- if s:tex_fast =~# 'V'
- syn region texCmdName contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
- syn region texCmdArgs contained matchgroup=texDelimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
- syn region texCmdBody contained matchgroup=texDelimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=texDelimiter end="}" contains=@texCmdGroup
- endif
- syn match texNewEnv "\\\%(re\)\=newenvironment\>" nextgroup=texEnvName skipwhite skipnl
- if s:tex_fast =~# 'V'
- syn region texEnvName contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
- syn region texEnvBgn contained matchgroup=texDelimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
- syn region texEnvEnd contained matchgroup=texDelimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
- endif
- " 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 "\(``\|''\|,,\)"
- " makeatletter -- makeatother sections
- if !s:tex_no_error
- if s:tex_fast =~# 'S'
- syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
- endif
- syn match texStyleStatement "\\[a-zA-Z@]\+" contained
- if s:tex_fast =~# 'S'
- syn region texStyleMatcher matchgroup=texDelimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
- syn region texStyleMatcher matchgroup=texDelimiter start="\[" end="]" contains=@texStyleGroup,texError contained
- endif
- endif
- " Conceal mode support (supports set cole=2) {{{1
- if has("conceal") && &enc == 'utf-8'
- " Math Symbols {{{2
- " (many of these symbols were contributed by Björn Winckler)
- if s:tex_conceal =~# 'm'
- let s:texMathList=[
- \ ['|' , '‖'],
- \ ['aleph' , 'ℵ'],
- \ ['amalg' , '∐'],
- \ ['angle' , '∠'],
- \ ['approx' , '≈'],
- \ ['ast' , '∗'],
- \ ['asymp' , '≍'],
- \ ['backslash' , '∖'],
- \ ['bigcap' , '∩'],
- \ ['bigcirc' , '○'],
- \ ['bigcup' , '∪'],
- \ ['bigodot' , '⊙'],
- \ ['bigoplus' , '⊕'],
- \ ['bigotimes' , '⊗'],
- \ ['bigsqcup' , '⊔'],
- \ ['bigtriangledown', '∇'],
- \ ['bigtriangleup' , '∆'],
- \ ['bigvee' , '⋁'],
- \ ['bigwedge' , '⋀'],
- \ ['bot' , '⊥'],
- \ ['bowtie' , '⋈'],
- \ ['bullet' , '•'],
- \ ['cap' , '∩'],
- \ ['cdot' , '·'],
- \ ['cdots' , '⋯'],
- \ ['circ' , '∘'],
- \ ['clubsuit' , '♣'],
- \ ['cong' , '≅'],
- \ ['coprod' , '∐'],
- \ ['copyright' , '©'],
- \ ['cup' , '∪'],
- \ ['dagger' , '†'],
- \ ['dashv' , '⊣'],
- \ ['ddagger' , '‡'],
- \ ['ddots' , '⋱'],
- \ ['diamond' , '⋄'],
- \ ['diamondsuit' , '♢'],
- \ ['div' , '÷'],
- \ ['doteq' , '≐'],
- \ ['dots' , '…'],
- \ ['downarrow' , '↓'],
- \ ['Downarrow' , '⇓'],
- \ ['ell' , 'ℓ'],
- \ ['emptyset' , '∅'],
- \ ['equiv' , '≡'],
- \ ['exists' , '∃'],
- \ ['flat' , '♭'],
- \ ['forall' , '∀'],
- \ ['frown' , '⁔'],
- \ ['ge' , '≥'],
- \ ['geq' , '≥'],
- \ ['gets' , '←'],
- \ ['gg' , '⟫'],
- \ ['hbar' , 'ℏ'],
- \ ['heartsuit' , '♡'],
- \ ['hookleftarrow' , '↩'],
- \ ['hookrightarrow' , '↪'],
- \ ['iff' , '⇔'],
- \ ['Im' , 'ℑ'],
- \ ['imath' , 'ɩ'],
- \ ['in' , '∈'],
- \ ['infty' , '∞'],
- \ ['int' , '∫'],
- \ ['jmath' , '𝚥'],
- \ ['land' , '∧'],
- \ ['lceil' , '⌈'],
- \ ['ldots' , '…'],
- \ ['le' , '≤'],
- \ ['left|' , '|'],
- \ ['left\\|' , '‖'],
- \ ['left(' , '('],
- \ ['left\[' , '['],
- \ ['left\\{' , '{'],
- \ ['leftarrow' , '←'],
- \ ['Leftarrow' , '⇐'],
- \ ['leftharpoondown', '↽'],
- \ ['leftharpoonup' , '↼'],
- \ ['leftrightarrow' , '↔'],
- \ ['Leftrightarrow' , '⇔'],
- \ ['leq' , '≤'],
- \ ['leq' , '≤'],
- \ ['lfloor' , '⌊'],
- \ ['ll' , '≪'],
- \ ['lmoustache' , '╭'],
- \ ['lor' , '∨'],
- \ ['mapsto' , '↦'],
- \ ['mid' , '∣'],
- \ ['models' , '╞'],
- \ ['mp' , '∓'],
- \ ['nabla' , '∇'],
- \ ['natural' , '♮'],
- \ ['ne' , '≠'],
- \ ['nearrow' , '↗'],
- \ ['neg' , '¬'],
- \ ['neq' , '≠'],
- \ ['ni' , '∋'],
- \ ['notin' , '∉'],
- \ ['nwarrow' , '↖'],
- \ ['odot' , '⊙'],
- \ ['oint' , '∮'],
- \ ['ominus' , '⊖'],
- \ ['oplus' , '⊕'],
- \ ['oslash' , '⊘'],
- \ ['otimes' , '⊗'],
- \ ['owns' , '∋'],
- \ ['P' , '¶'],
- \ ['parallel' , '║'],
- \ ['partial' , '∂'],
- \ ['perp' , '⊥'],
- \ ['pm' , '±'],
- \ ['prec' , '≺'],
- \ ['preceq' , '⪯'],
- \ ['prime' , '′'],
- \ ['prod' , '∏'],
- \ ['propto' , '∝'],
- \ ['rceil' , '⌉'],
- \ ['Re' , 'ℜ'],
- \ ['quad' , ' '],
- \ ['qquad' , ' '],
- \ ['rfloor' , '⌋'],
- \ ['right|' , '|'],
- \ ['right\\|' , '‖'],
- \ ['right)' , ')'],
- \ ['right]' , ']'],
- \ ['right\\}' , '}'],
- \ ['rightarrow' , '→'],
- \ ['Rightarrow' , '⇒'],
- \ ['rightleftharpoons', '⇌'],
- \ ['rmoustache' , '╮'],
- \ ['S' , '§'],
- \ ['searrow' , '↘'],
- \ ['setminus' , '∖'],
- \ ['sharp' , '♯'],
- \ ['sim' , '∼'],
- \ ['simeq' , '⋍'],
- \ ['smile' , '‿'],
- \ ['spadesuit' , '♠'],
- \ ['sqcap' , '⊓'],
- \ ['sqcup' , '⊔'],
- \ ['sqsubset' , '⊏'],
- \ ['sqsubseteq' , '⊑'],
- \ ['sqsupset' , '⊐'],
- \ ['sqsupseteq' , '⊒'],
- \ ['star' , '✫'],
- \ ['subset' , '⊂'],
- \ ['subseteq' , '⊆'],
- \ ['succ' , '≻'],
- \ ['succeq' , '⪰'],
- \ ['sum' , '∑'],
- \ ['supset' , '⊃'],
- \ ['supseteq' , '⊇'],
- \ ['surd' , '√'],
- \ ['swarrow' , '↙'],
- \ ['times' , '×'],
- \ ['to' , '→'],
- \ ['top' , '⊤'],
- \ ['triangle' , '∆'],
- \ ['triangleleft' , '⊲'],
- \ ['triangleright' , '⊳'],
- \ ['uparrow' , '↑'],
- \ ['Uparrow' , '⇑'],
- \ ['updownarrow' , '↕'],
- \ ['Updownarrow' , '⇕'],
- \ ['vdash' , '⊢'],
- \ ['vdots' , '⋮'],
- \ ['vee' , '∨'],
- \ ['wedge' , '∧'],
- \ ['wp' , '℘'],
- \ ['wr' , '≀']]
- if &ambw == "double" || exists("g:tex_usedblwidth")
- let s:texMathList= s:texMathList + [
- \ ['right\\rangle' , '〉'],
- \ ['left\\langle' , '〈']]
- else
- let s:texMathList= s:texMathList + [
- \ ['right\\rangle' , '>'],
- \ ['left\\langle' , '<']]
- endif
- for texmath in s:texMathList
- if texmath[0] =~# '\w$'
- exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
- else
- exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
- endif
- endfor
- if &ambw == "double"
- syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
- syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
- else
- syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
- syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
- endif
- syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
- syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
- syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
- syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
- syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
- syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
- syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
- syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
- syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
- syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
- syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
- syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
- syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
- syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
- syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
- syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
- syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
- syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
- syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
- syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
- " syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
- syn match texMathSymbol '\\dot{B}' contained conceal cchar=Ḃ
- syn match texMathSymbol '\\dot{b}' contained conceal cchar=ḃ
- syn match texMathSymbol '\\dot{D}' contained conceal cchar=Ḋ
- syn match texMathSymbol '\\dot{d}' contained conceal cchar=ḋ
- syn match texMathSymbol '\\dot{F}' contained conceal cchar=Ḟ
- syn match texMathSymbol '\\dot{f}' contained conceal cchar=ḟ
- syn match texMathSymbol '\\dot{H}' contained conceal cchar=Ḣ
- syn match texMathSymbol '\\dot{h}' contained conceal cchar=ḣ
- syn match texMathSymbol '\\dot{M}' contained conceal cchar=Ṁ
- syn match texMathSymbol '\\dot{m}' contained conceal cchar=ṁ
- syn match texMathSymbol '\\dot{N}' contained conceal cchar=Ṅ
- syn match texMathSymbol '\\dot{n}' contained conceal cchar=ṅ
- syn match texMathSymbol '\\dot{P}' contained conceal cchar=Ṗ
- syn match texMathSymbol '\\dot{p}' contained conceal cchar=ṗ
- syn match texMathSymbol '\\dot{R}' contained conceal cchar=Ṙ
- syn match texMathSymbol '\\dot{r}' contained conceal cchar=ṙ
- syn match texMathSymbol '\\dot{S}' contained conceal cchar=Ṡ
- syn match texMathSymbol '\\dot{s}' contained conceal cchar=ṡ
- syn match texMathSymbol '\\dot{T}' contained conceal cchar=Ṫ
- syn match texMathSymbol '\\dot{t}' contained conceal cchar=ṫ
- syn match texMathSymbol '\\dot{W}' contained conceal cchar=Ẇ
- syn match texMathSymbol '\\dot{w}' contained conceal cchar=ẇ
- syn match texMathSymbol '\\dot{X}' contained conceal cchar=Ẋ
- syn match texMathSymbol '\\dot{x}' contained conceal cchar=ẋ
- syn match texMathSymbol '\\dot{Y}' contained conceal cchar=Ẏ
- syn match texMathSymbol '\\dot{y}' contained conceal cchar=ẏ
- syn match texMathSymbol '\\dot{Z}' contained conceal cchar=Ż
- syn match texMathSymbol '\\dot{z}' contained conceal cchar=ż
- syn match texMathSymbol '\\dot{C}' contained conceal cchar=Ċ
- syn match texMathSymbol '\\dot{c}' contained conceal cchar=ċ
- syn match texMathSymbol '\\dot{E}' contained conceal cchar=Ė
- syn match texMathSymbol '\\dot{e}' contained conceal cchar=ė
- syn match texMathSymbol '\\dot{G}' contained conceal cchar=Ġ
- syn match texMathSymbol '\\dot{g}' contained conceal cchar=ġ
- syn match texMathSymbol '\\dot{I}' contained conceal cchar=İ
- syn match texMathSymbol '\\dot{A}' contained conceal cchar=Ȧ
- syn match texMathSymbol '\\dot{a}' contained conceal cchar=ȧ
- syn match texMathSymbol '\\dot{O}' contained conceal cchar=Ȯ
- syn match texMathSymbol '\\dot{o}' contained conceal cchar=ȯ
- endif
- " Greek {{{2
- if s:tex_conceal =~# 'g'
- fun! s:Greek(group,pat,cchar)
- exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
- endfun
- call s:Greek('texGreek','\\alpha\>' ,'α')
- call s:Greek('texGreek','\\beta\>' ,'β')
- call s:Greek('texGreek','\\gamma\>' ,'γ')
- call s:Greek('texGreek','\\delta\>' ,'δ')
- call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
- call s:Greek('texGreek','\\varepsilon\>' ,'ε')
- call s:Greek('texGreek','\\zeta\>' ,'ζ')
- call s:Greek('texGreek','\\eta\>' ,'η')
- call s:Greek('texGreek','\\theta\>' ,'θ')
- call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
- call s:Greek('texGreek','\\iota\>' ,'ι')
- call s:Greek('texGreek','\\kappa\>' ,'κ')
- call s:Greek('texGreek','\\lambda\>' ,'λ')
- call s:Greek('texGreek','\\mu\>' ,'μ')
- call s:Greek('texGreek','\\nu\>' ,'ν')
- call s:Greek('texGreek','\\xi\>' ,'ξ')
- call s:Greek('texGreek','\\pi\>' ,'π')
- call s:Greek('texGreek','\\varpi\>' ,'ϖ')
- call s:Greek('texGreek','\\rho\>' ,'ρ')
- call s:Greek('texGreek','\\varrho\>' ,'ϱ')
- call s:Greek('texGreek','\\sigma\>' ,'σ')
- call s:Greek('texGreek','\\varsigma\>' ,'ς')
- call s:Greek('texGreek','\\tau\>' ,'τ')
- call s:Greek('texGreek','\\upsilon\>' ,'υ')
- call s:Greek('texGreek','\\phi\>' ,'ϕ')
- call s:Greek('texGreek','\\varphi\>' ,'φ')
- call s:Greek('texGreek','\\chi\>' ,'χ')
- call s:Greek('texGreek','\\psi\>' ,'ψ')
- call s:Greek('texGreek','\\omega\>' ,'ω')
- call s:Greek('texGreek','\\Gamma\>' ,'Γ')
- call s:Greek('texGreek','\\Delta\>' ,'Δ')
- call s:Greek('texGreek','\\Theta\>' ,'Θ')
- call s:Greek('texGreek','\\Lambda\>' ,'Λ')
- call s:Greek('texGreek','\\Xi\>' ,'Ξ')
- call s:Greek('texGreek','\\Pi\>' ,'Π')
- call s:Greek('texGreek','\\Sigma\>' ,'Σ')
- call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
- call s:Greek('texGreek','\\Phi\>' ,'Φ')
- call s:Greek('texGreek','\\Chi\>' ,'Χ')
- call s:Greek('texGreek','\\Psi\>' ,'Ψ')
- call s:Greek('texGreek','\\Omega\>' ,'Ω')
- delfun s:Greek
- endif
- " Superscripts/Subscripts {{{2
- if s:tex_conceal =~# 's'
- if s:tex_fast =~# 's'
- syn region texSuperscript matchgroup=texDelimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
- syn region texSubscript matchgroup=texDelimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
- endif
- " s:SuperSub:
- fun! s:SuperSub(group,leader,pat,cchar)
- if a:pat =~# '^\\' || (a:leader == '\^' && a:pat =~# s:tex_superscripts) || (a:leader == '_' && a:pat =~# s:tex_subscripts)
- " call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
- exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
- exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
- endif
- endfun
- call s:SuperSub('texSuperscript','\^','0','⁰')
- call s:SuperSub('texSuperscript','\^','1','¹')
- call s:SuperSub('texSuperscript','\^','2','²')
- call s:SuperSub('texSuperscript','\^','3','³')
- call s:SuperSub('texSuperscript','\^','4','⁴')
- call s:SuperSub('texSuperscript','\^','5','⁵')
- call s:SuperSub('texSuperscript','\^','6','⁶')
- call s:SuperSub('texSuperscript','\^','7','⁷')
- call s:SuperSub('texSuperscript','\^','8','⁸')
- call s:SuperSub('texSuperscript','\^','9','⁹')
- call s:SuperSub('texSuperscript','\^','a','ᵃ')
- call s:SuperSub('texSuperscript','\^','b','ᵇ')
- call s:SuperSub('texSuperscript','\^','c','ᶜ')
- call s:SuperSub('texSuperscript','\^','d','ᵈ')
- call s:SuperSub('texSuperscript','\^','e','ᵉ')
- call s:SuperSub('texSuperscript','\^','f','ᶠ')
- call s:SuperSub('texSuperscript','\^','g','ᵍ')
- call s:SuperSub('texSuperscript','\^','h','ʰ')
- call s:SuperSub('texSuperscript','\^','i','ⁱ')
- call s:SuperSub('texSuperscript','\^','j','ʲ')
- call s:SuperSub('texSuperscript','\^','k','ᵏ')
- call s:SuperSub('texSuperscript','\^','l','ˡ')
- call s:SuperSub('texSuperscript','\^','m','ᵐ')
- call s:SuperSub('texSuperscript','\^','n','ⁿ')
- call s:SuperSub('texSuperscript','\^','o','ᵒ')
- call s:SuperSub('texSuperscript','\^','p','ᵖ')
- call s:SuperSub('texSuperscript','\^','r','ʳ')
- call s:SuperSub('texSuperscript','\^','s','ˢ')
- call s:SuperSub('texSuperscript','\^','t','ᵗ')
- call s:SuperSub('texSuperscript','\^','u','ᵘ')
- call s:SuperSub('texSuperscript','\^','v','ᵛ')
- call s:SuperSub('texSuperscript','\^','w','ʷ')
- call s:SuperSub('texSuperscript','\^','x','ˣ')
- call s:SuperSub('texSuperscript','\^','y','ʸ')
- call s:SuperSub('texSuperscript','\^','z','ᶻ')
- call s:SuperSub('texSuperscript','\^','A','ᴬ')
- call s:SuperSub('texSuperscript','\^','B','ᴮ')
- call s:SuperSub('texSuperscript','\^','D','ᴰ')
- call s:SuperSub('texSuperscript','\^','E','ᴱ')
- call s:SuperSub('texSuperscript','\^','G','ᴳ')
- call s:SuperSub('texSuperscript','\^','H','ᴴ')
- call s:SuperSub('texSuperscript','\^','I','ᴵ')
- call s:SuperSub('texSuperscript','\^','J','ᴶ')
- call s:SuperSub('texSuperscript','\^','K','ᴷ')
- call s:SuperSub('texSuperscript','\^','L','ᴸ')
- call s:SuperSub('texSuperscript','\^','M','ᴹ')
- call s:SuperSub('texSuperscript','\^','N','ᴺ')
- call s:SuperSub('texSuperscript','\^','O','ᴼ')
- call s:SuperSub('texSuperscript','\^','P','ᴾ')
- call s:SuperSub('texSuperscript','\^','R','ᴿ')
- call s:SuperSub('texSuperscript','\^','T','ᵀ')
- call s:SuperSub('texSuperscript','\^','U','ᵁ')
- call s:SuperSub('texSuperscript','\^','V','ⱽ')
- call s:SuperSub('texSuperscript','\^','W','ᵂ')
- call s:SuperSub('texSuperscript','\^',',','︐')
- call s:SuperSub('texSuperscript','\^',':','︓')
- call s:SuperSub('texSuperscript','\^',';','︔')
- call s:SuperSub('texSuperscript','\^','+','⁺')
- call s:SuperSub('texSuperscript','\^','-','⁻')
- call s:SuperSub('texSuperscript','\^','<','˂')
- call s:SuperSub('texSuperscript','\^','>','˃')
- call s:SuperSub('texSuperscript','\^','/','ˊ')
- call s:SuperSub('texSuperscript','\^','(','⁽')
- call s:SuperSub('texSuperscript','\^',')','⁾')
- call s:SuperSub('texSuperscript','\^','\.','˙')
- call s:SuperSub('texSuperscript','\^','=','˭')
- call s:SuperSub('texSubscript','_','0','₀')
- call s:SuperSub('texSubscript','_','1','₁')
- call s:SuperSub('texSubscript','_','2','₂')
- call s:SuperSub('texSubscript','_','3','₃')
- call s:SuperSub('texSubscript','_','4','₄')
- call s:SuperSub('texSubscript','_','5','₅')
- call s:SuperSub('texSubscript','_','6','₆')
- call s:SuperSub('texSubscript','_','7','₇')
- call s:SuperSub('texSubscript','_','8','₈')
- call s:SuperSub('texSubscript','_','9','₉')
- call s:SuperSub('texSubscript','_','a','ₐ')
- call s:SuperSub('texSubscript','_','e','ₑ')
- call s:SuperSub('texSubscript','_','h','ₕ')
- call s:SuperSub('texSubscript','_','i','ᵢ')
- call s:SuperSub('texSubscript','_','j','ⱼ')
- call s:SuperSub('texSubscript','_','k','ₖ')
- call s:SuperSub('texSubscript','_','l','ₗ')
- call s:SuperSub('texSubscript','_','m','ₘ')
- call s:SuperSub('texSubscript','_','n','ₙ')
- call s:SuperSub('texSubscript','_','o','ₒ')
- call s:SuperSub('texSubscript','_','p','ₚ')
- call s:SuperSub('texSubscript','_','r','ᵣ')
- call s:SuperSub('texSubscript','_','s','ₛ')
- call s:SuperSub('texSubscript','_','t','ₜ')
- call s:SuperSub('texSubscript','_','u','ᵤ')
- call s:SuperSub('texSubscript','_','v','ᵥ')
- call s:SuperSub('texSubscript','_','x','ₓ')
- call s:SuperSub('texSubscript','_',',','︐')
- call s:SuperSub('texSubscript','_','+','₊')
- call s:SuperSub('texSubscript','_','-','₋')
- call s:SuperSub('texSubscript','_','/','ˏ')
- call s:SuperSub('texSubscript','_','(','₍')
- call s:SuperSub('texSubscript','_',')','₎')
- call s:SuperSub('texSubscript','_','\.','‸')
- call s:SuperSub('texSubscript','_','r','ᵣ')
- call s:SuperSub('texSubscript','_','v','ᵥ')
- call s:SuperSub('texSubscript','_','x','ₓ')
- call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
- call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
- call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
- call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
- call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
- delfun s:SuperSub
- endif
- " Accented characters and Ligatures: {{{2
- if s:tex_conceal =~# 'a'
- 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
- syn match texLigature '--'
- syn match texLigature '---'
- else
- fun! s:Accents(chr,...)
- let i= 1
- for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
- if i > a:0
- break
- endif
- if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
- let i= i + 1
- continue
- endif
- if accent =~# '\a'
- exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
- else
- exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
- endif
- let i= i + 1
- endfor
- endfun
- " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
- call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
- call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
- call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
- call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
- call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
- call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
- call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
- call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
- call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
- call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
- call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
- call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
- call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
- call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
- call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
- call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
- call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
- call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
- call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
- call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
- call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
- call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
- call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
- call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
- call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
- call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
- call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
- call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
- call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
- call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
- call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
- call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
- call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
- call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
- call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
- call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
- call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
- call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
- " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
- delfun s:Accents
- syn match texAccent '\\aa\>' conceal cchar=å
- syn match texAccent '\\AA\>' conceal cchar=Å
- syn match texAccent '\\o\>' conceal cchar=ø
- syn match texAccent '\\O\>' conceal cchar=Ø
- syn match texLigature '\\AE\>' conceal cchar=Æ
- syn match texLigature '\\ae\>' conceal cchar=æ
- syn match texLigature '\\oe\>' conceal cchar=œ
- syn match texLigature '\\OE\>' conceal cchar=Œ
- syn match texLigature '\\ss\>' conceal cchar=ß
- syn match texLigature '--' conceal cchar=–
- syn match texLigature '---' conceal cchar=—
- endif
- endif
- endif
- " ---------------------------------------------------------------------
- " 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("g: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
- " Define the default highlighting. {{{1
- if !exists("skip_tex_syntax_inits")
- " TeX highlighting groups which should share similar highlighting
- if !exists("g:tex_no_error")
- if !exists("g:tex_no_math")
- hi def link texBadMath texError
- hi def link texBadPar texBadMath
- hi def link texMathDelimBad texError
- hi def link texMathError texError
- if !b:tex_stylish
- hi def link texOnlyMath texError
- endif
- endif
- hi def link texError Error
- endif
- hi texBoldStyle gui=bold cterm=bold
- hi texItalStyle gui=italic cterm=italic
- hi texBoldItalStyle gui=bold,italic cterm=bold,italic
- hi texItalBoldStyle gui=bold,italic cterm=bold,italic
- hi def link texEmphStyle texItalStyle
- hi def link texCite texRefZone
- hi def link texDefCmd texDef
- hi def link texDefName texDef
- hi def link texDocType texCmdName
- hi def link texDocTypeArgs texCmdArgs
- hi def link texInputFileOpt texCmdArgs
- hi def link texInputCurlies texDelimiter
- hi def link texLigature texSpecialChar
- if !exists("g:tex_no_math")
- hi def link texMathDelimSet1 texMathDelim
- hi def link texMathDelimSet2 texMathDelim
- hi def link texMathDelimKey texMathDelim
- hi def link texMathMatcher texMath
- hi def link texAccent texStatement
- hi def link texGreek texStatement
- hi def link texSuperscript texStatement
- hi def link texSubscript texStatement
- hi def link texSuperscripts texSuperscript
- hi def link texSubscripts texSubscript
- hi def link texMathSymbol texStatement
- hi def link texMathZoneV texMath
- hi def link texMathZoneW texMath
- hi def link texMathZoneX texMath
- hi def link texMathZoneY texMath
- hi def link texMathZoneV texMath
- hi def link texMathZoneZ texMath
- endif
- hi def link texBeginEnd texCmdName
- hi def link texBeginEndName texSection
- hi def link texSpaceCode texStatement
- hi def link texStyleStatement texStatement
- hi def link texTypeSize texType
- hi def link texTypeStyle texType
- " Basic TeX highlighting groups
- hi def link texCmdArgs Number
- hi def link texCmdName Statement
- hi def link texComment Comment
- hi def link texDef Statement
- hi def link texDefParm Special
- hi def link texDelimiter Delimiter
- hi def link texInput Special
- hi def link texInputFile Special
- hi def link texLength Number
- hi def link texMath Special
- hi def link texMathDelim Statement
- hi def link texMathOper Operator
- hi def link texNewCmd Statement
- hi def link texNewEnv Statement
- hi def link texOption Number
- hi def link texRefZone Special
- hi def link texSection PreCondit
- hi def link texSpaceCodeChar Special
- hi def link texSpecialChar SpecialChar
- hi def link texStatement Statement
- hi def link texString String
- hi def link texTodo Todo
- hi def link texType Type
- hi def link texZone PreCondit
- endif
- " Cleanup: {{{1
- delc TexFold
- unlet s:extfname
- let b:current_syntax = "tex"
- let &cpo = s:keepcpo
- unlet s:keepcpo
- " vim: ts=8 fdm=marker
|