Update runtime files
diff --git a/runtime/syntax/chordpro.vim b/runtime/syntax/chordpro.vim
index 5ccec26..41a0a1e 100644
--- a/runtime/syntax/chordpro.vim
+++ b/runtime/syntax/chordpro.vim
@@ -1,8 +1,7 @@
 " Vim syntax file
-" Language:     ChordPro (v. 3.6.2)
+" Language:     ChordPro 6 (https://www.chordpro.org)
 " Maintainer:   Niels Bo Andersen <niels@niboan.dk>
-" Last Change:	2006 Apr 30
-" Remark:       Requires VIM version 6.00 or greater
+" Last Change:  2022-04-15
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -12,54 +11,161 @@
 let s:cpo_save = &cpo
 set cpo&vim
 
-setlocal iskeyword+=-
-
 syn case ignore
 
-syn keyword chordproDirective contained
-  \ start_of_chorus soc end_of_chorus eoc new_song ns no_grid ng grid g
-  \ new_page np new_physical_page npp start_of_tab sot end_of_tab eot
-  \ column_break colb
+" Include embedded abc syntax
+syn include @Abc syntax/abc.vim
 
-syn keyword chordproDirWithOpt contained
-  \ comment c comment_italic ci comment_box cb title t subtitle st define
-  \ textfont textsize chordfont chordsize columns col
+" Lilypond and Pango syntaxes could be embedded as well, but they are not
+" available in the distribution.
 
-syn keyword chordproDefineKeyword contained base-fret frets
+" Directives without arguments
+syn keyword chordproDirective contained nextgroup=chordproConditional
+  \ new_song ns
+  \ start_of_chorus soc
+  \ chorus
+  \ start_of_verse sov
+  \ start_of_bridge sob
+  \ start_of_tab sot
+  \ start_of_grid sog
+  \ start_of_abc
+  \ start_of_ly
+  \ end_of_chorus eoc
+  \ end_of_verse eov
+  \ end_of_bridge eob
+  \ end_of_tab eot
+  \ end_of_grid eog
+  \ end_of_abc
+  \ end_of_ly
+  \ new_page np
+  \ new_physical_page npp
+  \ column_break cb
+  \ grid g
+  \ no_grid ng
+  \ transpose
+  \ chordfont cf chordsize cs chordcolour
+  \ footerfont footersize footercolour
+  \ gridfont gridsize gridcolour
+  \ tabfont tabsize tabcolour
+  \ tocfont tocsize toccolour
+  \ textfont tf textsize ts textcolour
+  \ titlefont titlesize titlecolour
 
-syn match chordproDirMatch /{\w*}/ contains=chordproDirective contained transparent
-syn match chordproDirOptMatch /{\w*:/ contains=chordproDirWithOpt contained transparent
+" Directives with arguments. Some directives are in both groups, as they can
+" be used both with and without arguments
+syn keyword chordproDirWithArg contained nextgroup=chordproConditional
+  \ title t
+  \ subtitle st
+  \ sorttitle
+  \ artist
+  \ composer
+  \ lyricist
+  \ arranger
+  \ copyright
+  \ album
+  \ year
+  \ key
+  \ time
+  \ tempo
+  \ duration
+  \ capo
+  \ comment c
+  \ highlight
+  \ comment_italic ci
+  \ comment_box cb
+  \ image
+  \ start_of_chorus soc
+  \ chorus
+  \ start_of_verse sov
+  \ start_of_bridge sob
+  \ start_of_tab sot
+  \ start_of_grid sog
+  \ start_of_abc
+  \ start_of_ly
+  \ define
+  \ chord
+  \ transpose
+  \ chordfont cf chordsize cs chordcolour
+  \ footerfont footersize footercolour
+  \ gridfont gridsize gridcolour
+  \ tabfont tabsize tabcolour
+  \ tocfont tocsize toccolour
+  \ textfont tf textsize ts textcolour
+  \ titlefont titlesize titlecolour
+  \ pagetype
+  \ titles
+  \ columns col
 
-" Workaround for a bug in VIM 6, which causes incorrect coloring of the first {
-if version < 700
-  syn region chordproOptions start=/{\w*:/ end=/}/ contains=chordproDirOptMatch contained transparent
-  syn region chordproOptions start=/{define:/ end=/}/ contains=chordproDirOptMatch, chordproDefineKeyword contained transparent
-else
-  syn region chordproOptions start=/{\w*:/hs=e+1 end=/}/he=s-1 contains=chordproDirOptMatch contained
-  syn region chordproOptions start=/{define:/hs=e+1 end=/}/he=s-1 contains=chordproDirOptMatch, chordproDefineKeyword contained
-endif
+syn keyword chordproMetaKeyword contained meta
+syn keyword chordproMetadata contained title sorttitle subtitle artist composer lyricist arranger copyright album year key time tempo duration capo
+syn keyword chordproStandardMetadata contained songindex page pages pagerange today tuning instrument user
+syn match chordproStandardMetadata /instrument\.type/ contained
+syn match chordproStandardMetadata /instrument\.description/ contained
+syn match chordproStandardMetadata /user\.name/ contained
+syn match chordproStandardMetadata /user\.fullname/ contained
 
-syn region chordproTag start=/{/ end=/}/ contains=chordproDirMatch,chordproOptions oneline
+syn keyword chordproDefineKeyword contained frets fingers
+syn match chordproDefineKeyword /base-fret/ contained
+
+syn match chordproArgumentsNumber /\d\+/ contained
+
+syn match chordproCustom /x_\w\+/ contained
+
+syn match chordproDirMatch /{\w\+\(-\w\+\)\?}/ contains=chordproDirective contained transparent
+syn match chordproDirArgMatch /{\w\+\(-\w\+\)\?[: ]/ contains=chordproDirWithArg contained transparent
+syn match chordproMetaMatch /{meta\(-\w\+\)\?[: ]\+\w\+/ contains=chordproMetaKeyword,chordproMetadata contained transparent
+syn match chordproCustomMatch /{x_\w\+\(-\w\+\)\?[: ]/ contains=chordproCustom contained transparent
+
+syn match chordproConditional /-\w\+/ contained
+
+syn match chordproMetaDataOperator /[=|]/ contained
+syn match chordproMetaDataValue /%{\w*/ contains=chordproMetaData,chordproStandardMetadata contained transparent
+" Handles nested metadata tags, but the end of the containing chordproTag is
+" not highlighted correctly, if there are more than two levels of nesting
+syn region chordproMetaDataTag start=/%{\w*/ skip=/%{[^}]*}/ end=/}/ contains=chordproMetaDataValue,chordproMetaDataOperator,chordproMetadataTag contained
+
+syn region chordproArguments start=/{\w\+\(-\w\+\)\?[: ]/hs=e+1 skip=/%{[^}]*}/ end=/}/he=s-1 contains=chordproDirArgMatch,chordproArgumentsNumber,chordproMetaDataTag contained
+syn region chordproArguments start=/{\(define\|chord\)\(-\w\+\)\?[: ]/hs=e+1 end=/}/he=s-1 contains=chordproDirArgMatch,chordproDefineKeyword,chordproArgumentsNumber contained
+syn region chordproArguments start=/{meta\(-\w\+\)\?[: ]/hs=e+1 skip=/%{[^}]*}/ end=/}/he=s-1 contains=chordproMetaMatch,chordproMetaDataTag contained
+syn region chordproArguments start=/{x_\w\+\(-\w\+\)\?[: ]/hs=e+1 end=/}/he=s-1 contains=chordproCustomMatch contained
+
+syn region chordproTag start=/{/ skip=/%{[^}]*}/ end=/}/ contains=chordproDirMatch,chordproArguments oneline
 
 syn region chordproChord matchgroup=chordproBracket start=/\[/ end=/]/ oneline
 
-syn region chordproTab start=/{start_of_tab}\|{sot}/hs=e+1 end=/{end_of_tab}\|{eot}/he=s-1 contains=chordproTag,chordproComment keepend
+syn region chordproAnnotation matchgroup=chordproBracket start=/\[\*/ end=/]/ oneline
 
-syn region chordproChorus start=/{start_of_chorus}\|{soc}/hs=e+1 end=/{end_of_chorus}\|{eoc}/he=s-1 contains=chordproTag,chordproChord,chordproComment keepend
+syn region chordproTab start=/{start_of_tab\(-\w\+\)\?\([: ].\+\)\?}\|{sot\(-\w\+\)\?\([: ].\+\)\?}/hs=e+1 end=/{end_of_tab}\|{eot}/me=s-1 contains=chordproTag,chordproComment keepend
+
+syn region chordproChorus start=/{start_of_chorus\(-\w\+\)\?\([: ].\+\)\?}\|{soc\(-\w\+\)\?\([: ].\+\)\?}/hs=e+1 end=/{end_of_chorus}\|{eoc}/me=s-1 contains=chordproTag,chordproChord,chordproAnnotation,chordproComment keepend
+
+syn region chordproBridge start=/{start_of_bridge\(-\w\+\)\?\([: ].\+\)\?}\|{sob\(-\w\+\)\?\([: ].\+\)\?}/hs=e+1 end=/{end_of_bridge}\|{eob}/me=s-1 contains=chordproTag,chordproChord,chordproAnnotation,chordproComment keepend
+
+syn region chordproAbc start=/{start_of_abc\(-\w\+\)\?\([: ].\+\)\?}/hs=e+1 end=/{end_of_abc}/me=s-1 contains=chordproTag,@Abc keepend
 
 syn match chordproComment /^#.*/
 
 " Define the default highlighting.
 hi def link chordproDirective Statement
-hi def link chordproDirWithOpt Statement
-hi def link chordproOptions Special
+hi def link chordproDirWithArg Statement
+hi def link chordproConditional Statement
+hi def link chordproCustom Statement
+hi def link chordproMetaKeyword Statement
+hi def link chordproMetaDataOperator Operator
+hi def link chordproMetaDataTag Function
+hi def link chordproArguments Special
+hi def link chordproArgumentsNumber Number
 hi def link chordproChord Type
+hi def link chordproAnnotation Identifier
 hi def link chordproTag Constant
 hi def link chordproTab PreProc
 hi def link chordproComment Comment
 hi def link chordproBracket Constant
-hi def link chordproDefineKeyword Type
+hi def link chordproDefineKeyword Identifier
+hi def link chordproMetadata Identifier
+hi def link chordproStandardMetadata Identifier
 hi def chordproChorus term=bold cterm=bold gui=bold
+hi def chordproBridge term=italic cterm=italic gui=italic
 
 let b:current_syntax = "chordpro"