blob: 245eee213b5728c457e447f707162a43e39de679 [file] [log] [blame]
Bram Moolenaar9fbdbb82022-09-27 17:30:34 +01001" Vim syntax file
2" Language: HLS Playlist
3" Maintainer: BenoƮt Ryder <benoit@ryder.fr>
4" Latest Revision: 2022-09-23
5
6if exists("b:current_syntax")
7 finish
8endif
9
10let s:cpo_save = &cpo
11set cpo&vim
12
13" Comment line
14syn match hlsplaylistComment "^#\(EXT\)\@!.*$"
15" Segment URL
16syn match hlsplaylistUrl "^[^#].*$"
17
18" Unknown tags, assume an attribute list or nothing
19syn match hlsplaylistTagUnknown "^#EXT[^:]*$"
20syn region hlsplaylistTagLine matchgroup=hlsplaylistTagUnknown start="^#EXT[^:]*\ze:" end="$" keepend contains=hlsplaylistAttributeList
21
22" Basic Tags
23syn match hlsplaylistTagHeader "^#EXTM3U$"
24syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-VERSION\ze:" end="$" keepend contains=hlsplaylistValueInt
25
26" Media or Multivariant Playlist Tags
27syn match hlsplaylistTagHeader "^#EXT-X-INDEPENDENT-SEGMENTS$"
28syn region hlsplaylistTagLine matchgroup=hlsplaylistTagDelimiter start="^#EXT-X-START\ze:" end="$" keepend contains=hlsplaylistAttributeList
29syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-DEFINE\ze:" end="$" keepend contains=hlsplaylistAttributeList
30
31" Media Playlist Tags
32syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-TARGETDURATION\ze:" end="$" keepend contains=hlsplaylistValueFloat
33syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-MEDIA-SEQUENCE\ze:" end="$" keepend contains=hlsplaylistValueInt
34syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-DISCONTINUITY-SEQUENCE\ze:" end="$" keepend contains=hlsplaylistValueInt
35syn match hlsplaylistTagDelimiter "^#EXT-X-ENDLIST$"
36syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-PLAYLIST-TYPE\ze:" end="$" keepend contains=hlsplaylistAttributeEnum
37syn match hlsplaylistTagStandard "^#EXT-X-I-FRAME-ONLY$"
38syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-PART-INF\ze:" end="$" keepend contains=hlsplaylistAttributeList
39syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-SERVER-CONTROL\ze:" end="$" keepend contains=hlsplaylistAttributeList
40
41" Media Segment Tags
42syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXTINF\ze:" end="$" keepend contains=hlsplaylistValueFloat,hlsplaylistExtInfDesc
43syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-BYTERANGE\ze:" end="$" keepend contains=hlsplaylistValueInt
44syn match hlsplaylistTagDelimiter "^#EXT-X-DISCONTINUITY$"
45syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-KEY\ze:" end="$" keepend contains=hlsplaylistAttributeList
46syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-MAP\ze:" end="$" keepend contains=hlsplaylistAttributeList
47syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-PROGRAM-DATE-TIME\ze:" end="$" keepend contains=hlsplaylistValueDateTime
48syn match hlsplaylistTagDelimiter "^#EXT-X-GAP$"
49syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-BITRATE\ze:" end="$" keepend contains=hlsplaylistValueFloat
50syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-PART\ze:" end="$" keepend contains=hlsplaylistAttributeList
51
52" Media Metadata Tags
53syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-DATERANGE\ze:" end="$" keepend contains=hlsplaylistAttributeList
54syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-SKIP\ze:" end="$" keepend contains=hlsplaylistAttributeList
55syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-PRELOAD-HINT\ze:" end="$" keepend contains=hlsplaylistAttributeList
56syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-RENDITION-REPORT\ze:" end="$" keepend contains=hlsplaylistAttributeList
57
58" Multivariant Playlist Tags
59syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-MEDIA\ze:" end="$" keepend contains=hlsplaylistAttributeList
60syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-STREAM-INF\ze:" end="$" keepend contains=hlsplaylistAttributeList
61syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-I-FRAME-STREAM-INF\ze:" end="$" keepend contains=hlsplaylistAttributeList
62syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-SESSION-DATA\ze:" end="$" keepend contains=hlsplaylistAttributeList
63syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-SESSION-KEY\ze:" end="$" keepend contains=hlsplaylistAttributeList
64syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-CONTENT-STEERING\ze:" end="$" keepend contains=hlsplaylistAttributeList
65
66" Attributes
67syn region hlsplaylistAttributeList start=":" end="$" keepend contained
68 \ contains=hlsplaylistAttributeName,hlsplaylistAttributeInt,hlsplaylistAttributeHex,hlsplaylistAttributeFloat,hlsplaylistAttributeString,hlsplaylistAttributeEnum,hlsplaylistAttributeResolution,hlsplaylistAttributeUri
69" Common attributes
70syn match hlsplaylistAttributeName "[A-Za-z-]\+\ze=" contained
71syn match hlsplaylistAttributeEnum "=\zs[A-Za-z][A-Za-z0-9-_]*" contained
72syn match hlsplaylistAttributeString +=\zs"[^"]*"+ contained
73syn match hlsplaylistAttributeInt "=\zs\d\+" contained
74syn match hlsplaylistAttributeFloat "=\zs-\?\d*\.\d*" contained
75syn match hlsplaylistAttributeHex "=\zs0[xX]\d*" contained
76syn match hlsplaylistAttributeResolution "=\zs\d\+x\d\+" contained
77" Allow different highligting for URI attributes
78syn region hlsplaylistAttributeUri matchgroup=hlsplaylistAttributeName start="\zsURI\ze" end="\(,\|$\)" contained contains=hlsplaylistUriQuotes
79syn region hlsplaylistUriQuotes matchgroup=hlsplaylistAttributeString start=+"+ end=+"+ keepend contained contains=hlsplaylistUriValue
80syn match hlsplaylistUriValue /[^" ]\+/ contained
81" Individual values
82syn match hlsplaylistValueInt "[0-9]\+" contained
83syn match hlsplaylistValueFloat "\(\d\+\|\d*\.\d*\)" contained
84syn match hlsplaylistExtInfDesc ",\zs.*$" contained
85syn match hlsplaylistValueDateTime "\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\(\.\d*\)\?\(Z\|\d\d:\?\d\d\)$" contained
86
87
88" Define default highlighting
89
90hi def link hlsplaylistComment Comment
91hi def link hlsplaylistUrl NONE
92
93hi def link hlsplaylistTagHeader Special
94hi def link hlsplaylistTagStandard Define
95hi def link hlsplaylistTagDelimiter Delimiter
96hi def link hlsplaylistTagStatement Statement
97hi def link hlsplaylistTagUnknown Special
98
99hi def link hlsplaylistUriQuotes String
100hi def link hlsplaylistUriValue Underlined
101hi def link hlsplaylistAttributeQuotes String
102hi def link hlsplaylistAttributeName Identifier
103hi def link hlsplaylistAttributeInt Number
104hi def link hlsplaylistAttributeHex Number
105hi def link hlsplaylistAttributeFloat Float
106hi def link hlsplaylistAttributeString String
107hi def link hlsplaylistAttributeEnum Constant
108hi def link hlsplaylistAttributeResolution Constant
109hi def link hlsplaylistValueInt Number
110hi def link hlsplaylistValueFloat Float
111hi def link hlsplaylistExtInfDesc String
112hi def link hlsplaylistValueDateTime Constant
113
114
115let b:current_syntax = "hlsplaylist"
116
117let &cpo = s:cpo_save
118unlet s:cpo_save
119
120" vim: sts=2 sw=2 et