xref: /vim-8.2.3635/runtime/syntax/bib.vim (revision 36e294c0)
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:	2014 Mar 26
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
19let s:cpo_save = &cpo
20set cpo&vim
21
22" Ignore case
23syn case ignore
24
25" Keywords
26" ========
27syn keyword bibType contained	article book booklet conference inbook
28syn keyword bibType contained	incollection inproceedings manual
29syn keyword bibType contained	mastersthesis misc phdthesis
30syn keyword bibType contained	proceedings techreport unpublished
31syn keyword bibType contained	string preamble
32
33syn keyword bibEntryKw contained	address annote author booktitle chapter
34syn keyword bibEntryKw contained	crossref edition editor howpublished
35syn keyword bibEntryKw contained	institution journal key month note
36syn keyword bibEntryKw contained	number organization pages publisher
37syn keyword bibEntryKw contained	school series title type volume year
38" Non-standard:
39syn keyword bibNSEntryKw contained	abstract isbn issn keywords url
40" AMS mref http://www.ams.org/mref
41syn keyword bibNSEntryKw contained	mrclass mrnumber mrreviewer fjournal coden
42
43" Clusters
44" ========
45syn cluster bibVarContents	contains=bibUnescapedSpecial,bibBrace,bibParen
46" This cluster is empty but things can be added externally:
47"syn cluster bibCommentContents
48
49" Matches
50" =======
51syn match bibUnescapedSpecial contained /[^\\][%&]/hs=s+1
52syn match bibKey contained /\s*[^ \t}="]\+,/hs=s,he=e-1 nextgroup=bibField
53syn match bibVariable contained /[^{}," \t=]/
54syn region bibComment start=/./ end=/^\s*@/me=e-1 contains=@bibCommentContents nextgroup=bibEntry
55syn region bibQuote contained start=/"/ end=/"/ skip=/\(\\"\)/ contains=@bibVarContents
56syn region bibBrace contained start=/{/ end=/}/ skip=/\(\\[{}]\)/ contains=@bibVarContents
57syn region bibParen contained start=/(/ end=/)/ skip=/\(\\[()]\)/ contains=@bibVarContents
58syn region bibField contained start="\S\+\s*=\s*" end=/[}),]/me=e-1 contains=bibEntryKw,bibNSEntryKw,bibBrace,bibParen,bibQuote,bibVariable
59syn region bibEntryData contained start=/[{(]/ms=e+1 end=/[})]/me=e-1 contains=bibKey,bibField
60" Actually, 5.8 <= Vim < 6.0 would ignore the `fold' keyword anyway, but Vim<5.8 would produce
61" an error, so we explicitly distinguish versions with and without folding functionality:
62if version < 600
63  syn region bibEntry start=/@\S\+\s*[{(]/ end=/^\s*[})]/ transparent contains=bibType,bibEntryData nextgroup=bibComment
64else
65  syn region bibEntry start=/@\S\+\s*[{(]/ end=/^\s*[})]/ transparent fold contains=bibType,bibEntryData nextgroup=bibComment
66endif
67syn region bibComment2 start=/@Comment\s*[{(]/ end=/^\s*[})]/me=e-1 contains=@bibCommentContents nextgroup=bibEntry
68
69" Synchronization
70" ===============
71syn sync match All grouphere bibEntry /^\s*@/
72syn sync maxlines=200
73syn sync minlines=50
74
75" Highlighting defaults
76" =====================
77" Define the default highlighting.
78" For version 5.7 and earlier: only when not done already
79" For version 5.8 and later: only when an item doesn't have highlighting yet
80if version >= 508 || !exists("did_bib_syn_inits")
81  if version < 508
82    let did_bib_syn_inits = 1
83    command -nargs=+ HiLink hi link <args>
84  else
85    command -nargs=+ HiLink hi def link <args>
86  endif
87  HiLink bibType	Identifier
88  HiLink bibEntryKw	Statement
89  HiLink bibNSEntryKw	PreProc
90  HiLink bibKey		Special
91  HiLink bibVariable	Constant
92  HiLink bibUnescapedSpecial	Error
93  HiLink bibComment	Comment
94  HiLink bibComment2	Comment
95  delcommand HiLink
96endif
97
98let b:current_syntax = "bib"
99
100let &cpo = s:cpo_save
101unlet s:cpo_save
102