mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-03 17:24:29 +00:00 
			
		
		
		
	References:
https://chordpro.org/beta/directives-define/#defining-chords-for-keyboard-instruments
8dc98bf427
Co-authored-by: nibo <nibo@relim.de>
		
	
		
			
				
	
	
		
			175 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
" Vim syntax file
 | 
						|
" Language:     ChordPro 6 (https://www.chordpro.org)
 | 
						|
" Maintainer:   Niels Bo Andersen <niels@niboan.dk>
 | 
						|
" Last Change:  2022-04-15
 | 
						|
" 2024 Dec 31:  add "keys" as syntax keyword (via: https://groups.google.com/g/vim_dev/c/vP4epus0euM/m/mNoDY6hsCQAJ)
 | 
						|
 | 
						|
" Quit when a syntax file was already loaded
 | 
						|
if exists("b:current_syntax")
 | 
						|
  finish
 | 
						|
endif
 | 
						|
 | 
						|
let s:cpo_save = &cpo
 | 
						|
set cpo&vim
 | 
						|
 | 
						|
syn case ignore
 | 
						|
 | 
						|
" Include embedded abc syntax
 | 
						|
syn include @Abc syntax/abc.vim
 | 
						|
 | 
						|
" Lilypond and Pango syntaxes could be embedded as well, but they are not
 | 
						|
" available in the distribution.
 | 
						|
 | 
						|
" 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
 | 
						|
 | 
						|
" 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
 | 
						|
 | 
						|
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 keyword chordproDefineKeyword contained frets fingers keys
 | 
						|
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 chordproAnnotation matchgroup=chordproBracket start=/\[\*/ end=/]/ oneline
 | 
						|
 | 
						|
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 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 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"
 | 
						|
 | 
						|
let &cpo = s:cpo_save
 | 
						|
unlet s:cpo_save
 |