1" Vim syntax file 2" Language: BibTeX (bibliographic database format for (La)TeX) 3" Maintainer: Bernd Feige <[email protected]> 4" Filenames: *.bib 5" Last Change: Apr 26, 2001 6" URL: http://home.t-online.de/home/Bernd.Feige/bib.vim 7 8" Thanks to those who pointed out problems with this file or supplied fixes! 9 10" Initialization 11" ============== 12" For version 5.x: Clear all syntax items 13" For version 6.x: Quit when a syntax file was already loaded 14if version < 600 15 syntax clear 16elseif exists("b:current_syntax") 17 finish 18endif 19 20" Ignore case 21syn case ignore 22 23" Keywords 24" ======== 25syn keyword bibType contained article book booklet conference inbook 26syn keyword bibType contained incollection inproceedings manual 27syn keyword bibType contained mastersthesis misc phdthesis 28syn keyword bibType contained proceedings techreport unpublished 29syn keyword bibType contained string 30 31syn keyword bibEntryKw contained address annote author booktitle chapter 32syn keyword bibEntryKw contained crossref edition editor howpublished 33syn keyword bibEntryKw contained institution journal key month note 34syn keyword bibEntryKw contained number organization pages publisher 35syn keyword bibEntryKw contained school series title type volume year 36" Non-standard: 37syn keyword bibNSEntryKw contained abstract isbn issn keywords url 38 39" Clusters 40" ======== 41syn cluster bibVarContents contains=bibUnescapedSpecial,bibBrace,bibParen 42" This cluster is empty but things can be added externally: 43"syn cluster bibCommentContents 44 45" Matches 46" ======= 47syn match bibUnescapedSpecial contained /[^\\][%&]/hs=s+1 48syn match bibKey contained /\s*[^ \t}="]\+,/hs=s,he=e-1 nextgroup=bibField 49syn match bibVariable contained /[^{}," \t=]/ 50syn region bibComment start=/^/ end=/^\s*@/me=e-1 contains=@bibCommentContents nextgroup=bibEntry 51syn region bibQuote contained start=/"/ end=/"/ skip=/\(\\"\)/ contains=@bibVarContents 52syn region bibBrace contained start=/{/ end=/}/ skip=/\(\\[{}]\)/ contains=@bibVarContents 53syn region bibParen contained start=/(/ end=/)/ skip=/\(\\[()]\)/ contains=@bibVarContents 54syn region bibField contained start="\S\+\s*=\s*" end=/[}),]/me=e-1 contains=bibEntryKw,bibNSEntryKw,bibBrace,bibParen,bibQuote,bibVariable 55syn region bibEntryData contained start=/[{(]/ms=e+1 end=/[})]/me=e-1 contains=bibKey,bibField 56" Actually, 5.8 <= Vim < 6.0 would ignore the `fold' keyword anyway, but Vim<5.8 would produce 57" an error, so we explicitly distinguish versions with and without folding functionality: 58if version < 600 59 syn region bibEntry start=/@\S\+[{(]/ end=/^\s*[})]/ transparent contains=bibType,bibEntryData nextgroup=bibComment 60else 61 syn region bibEntry start=/@\S\+[{(]/ end=/^\s*[})]/ transparent fold contains=bibType,bibEntryData nextgroup=bibComment 62endif 63 64" Synchronization 65" =============== 66syn sync match All grouphere bibEntry /^\s*@/ 67syn sync maxlines=200 68syn sync minlines=50 69 70" Highlighting defaults 71" ===================== 72" Define the default highlighting. 73" For version 5.7 and earlier: only when not done already 74" For version 5.8 and later: only when an item doesn't have highlighting yet 75if version >= 508 || !exists("did_bib_syn_inits") 76 if version < 508 77 let did_bib_syn_inits = 1 78 command -nargs=+ HiLink hi link <args> 79 else 80 command -nargs=+ HiLink hi def link <args> 81 endif 82 HiLink bibType Identifier 83 HiLink bibEntryKw Statement 84 HiLink bibNSEntryKw PreProc 85 HiLink bibKey Special 86 HiLink bibVariable Constant 87 HiLink bibUnescapedSpecial Error 88 HiLink bibComment Comment 89 delcommand HiLink 90endif 91 92let b:current_syntax = "bib" 93