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: Aug 02, 2005 6 7" Thanks to those who pointed out problems with this file or supplied fixes! 8 9" Initialization 10" ============== 11" For version 5.x: Clear all syntax items 12" For version 6.x: Quit when a syntax file was already loaded 13if version < 600 14 syntax clear 15elseif exists("b:current_syntax") 16 finish 17endif 18 19" Ignore case 20syn case ignore 21 22" Keywords 23" ======== 24syn keyword bibType contained article book booklet conference inbook 25syn keyword bibType contained incollection inproceedings manual 26syn keyword bibType contained mastersthesis misc phdthesis 27syn keyword bibType contained proceedings techreport unpublished 28syn keyword bibType contained string 29 30syn keyword bibEntryKw contained address annote author booktitle chapter 31syn keyword bibEntryKw contained crossref edition editor howpublished 32syn keyword bibEntryKw contained institution journal key month note 33syn keyword bibEntryKw contained number organization pages publisher 34syn keyword bibEntryKw contained school series title type volume year 35" Non-standard: 36syn keyword bibNSEntryKw contained abstract isbn issn keywords url 37 38" Clusters 39" ======== 40syn cluster bibVarContents contains=bibUnescapedSpecial,bibBrace,bibParen 41" This cluster is empty but things can be added externally: 42"syn cluster bibCommentContents 43 44" Matches 45" ======= 46syn match bibUnescapedSpecial contained /[^\\][%&]/hs=s+1 47syn match bibKey contained /\s*[^ \t}="]\+,/hs=s,he=e-1 nextgroup=bibField 48syn match bibVariable contained /[^{}," \t=]/ 49syn region bibComment start=/./ end=/^\s*@/me=e-1 contains=@bibCommentContents nextgroup=bibEntry 50syn region bibQuote contained start=/"/ end=/"/ skip=/\(\\"\)/ contains=@bibVarContents 51syn region bibBrace contained start=/{/ end=/}/ skip=/\(\\[{}]\)/ contains=@bibVarContents 52syn region bibParen contained start=/(/ end=/)/ skip=/\(\\[()]\)/ contains=@bibVarContents 53syn region bibField contained start="\S\+\s*=\s*" end=/[}),]/me=e-1 contains=bibEntryKw,bibNSEntryKw,bibBrace,bibParen,bibQuote,bibVariable 54syn region bibEntryData contained start=/[{(]/ms=e+1 end=/[})]/me=e-1 contains=bibKey,bibField 55" Actually, 5.8 <= Vim < 6.0 would ignore the `fold' keyword anyway, but Vim<5.8 would produce 56" an error, so we explicitly distinguish versions with and without folding functionality: 57if version < 600 58 syn region bibEntry start=/@\S\+[{(]/ end=/^\s*[})]/ transparent contains=bibType,bibEntryData nextgroup=bibComment 59else 60 syn region bibEntry start=/@\S\+[{(]/ end=/^\s*[})]/ transparent fold contains=bibType,bibEntryData nextgroup=bibComment 61endif 62syn region bibComment2 start=/@Comment[{(]/ end=/^\s*@/me=e-1 contains=@bibCommentContents nextgroup=bibEntry 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 HiLink bibComment2 Comment 90 delcommand HiLink 91endif 92 93let b:current_syntax = "bib" 94