blob: 48a5b1171cbdb1b64e9e60d53ae280332feba97b [file] [log] [blame]
Bram Moolenaar9712ff12022-09-18 13:04:22 +01001" Vim syntax file
2" Language: LyRiCs
3" Maintainer: ObserverOfTime <chronobserver@disroot.org>
4" Filenames: *.lrc
Denilson Sá Maia30377e02025-01-13 08:23:24 +01005" Last Change: 2025 Jan 13
Bram Moolenaar9712ff12022-09-18 13:04:22 +01006
7if exists('b:current_syntax')
8 finish
9endif
10
11let s:cpo_save = &cpoptions
12set cpoptions&vim
13
14syn case ignore
15
16" Errors
17syn match lrcError /^.\+$/
18
19" ID tags
20syn match lrcTag /^\s*\[\a\+:.\+\]\s*$/ contains=lrcTagName,lrcTagValue
21syn match lrcTagName contained nextgroup=lrcTagValue
22 \ /\[\zs\(al\|ar\|au\|by\|encoding\|la\|id\|length\|offset\|re\|ti\|ve\)\ze:/
23syn match lrcTagValue /:\zs.\+\ze\]/ contained
24
25" Lyrics
Denilson Sá Maia30377e02025-01-13 08:23:24 +010026syn match lrcLyricTime /^\s*\(\[\d\d:\d\d\.\d\d\d\?\]\)\+/
Bram Moolenaar9712ff12022-09-18 13:04:22 +010027 \ contains=lrcNumber nextgroup=lrcLyricLine
28syn match lrcLyricLine /.*$/ contained contains=lrcWordTime,@Spell
29syn match lrcWordTime /<\d\d:\d\d\.\d\d>/ contained contains=lrcNumber,@NoSpell
30syn match lrcNumber /[+-]\=\d\+/ contained
31
32hi def link lrcLyricTime Label
33hi def link lrcNumber Number
34hi def link lrcTag PreProc
35hi def link lrcTagName Identifier
36hi def link lrcTagValue String
37hi def link lrcWordTime Special
38hi def link lrcError Error
39
40let b:current_syntax = 'lyrics'
41
42let &cpoptions = s:cpo_save
43unlet s:cpo_save