" Vim syntax file " Language: HLS Playlist " Maintainer: BenoƮt Ryder " Latest Revision: 2022-09-23 if exists("b:current_syntax") finish endif let s:cpo_save = &cpo set cpo&vim " Comment line syn match hlsplaylistComment "^#\(EXT\)\@!.*$" " Segment URL syn match hlsplaylistUrl "^[^#].*$" " Unknown tags, assume an attribute list or nothing syn match hlsplaylistTagUnknown "^#EXT[^:]*$" syn region hlsplaylistTagLine matchgroup=hlsplaylistTagUnknown start="^#EXT[^:]*\ze:" end="$" keepend contains=hlsplaylistAttributeList " Basic Tags syn match hlsplaylistTagHeader "^#EXTM3U$" syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-VERSION\ze:" end="$" keepend contains=hlsplaylistValueInt " Media or Multivariant Playlist Tags syn match hlsplaylistTagHeader "^#EXT-X-INDEPENDENT-SEGMENTS$" syn region hlsplaylistTagLine matchgroup=hlsplaylistTagDelimiter start="^#EXT-X-START\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-DEFINE\ze:" end="$" keepend contains=hlsplaylistAttributeList " Media Playlist Tags syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-TARGETDURATION\ze:" end="$" keepend contains=hlsplaylistValueFloat syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-MEDIA-SEQUENCE\ze:" end="$" keepend contains=hlsplaylistValueInt syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-DISCONTINUITY-SEQUENCE\ze:" end="$" keepend contains=hlsplaylistValueInt syn match hlsplaylistTagDelimiter "^#EXT-X-ENDLIST$" syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-PLAYLIST-TYPE\ze:" end="$" keepend contains=hlsplaylistAttributeEnum syn match hlsplaylistTagStandard "^#EXT-X-I-FRAME-ONLY$" syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-PART-INF\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagHeader start="^#EXT-X-SERVER-CONTROL\ze:" end="$" keepend contains=hlsplaylistAttributeList " Media Segment Tags syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXTINF\ze:" end="$" keepend contains=hlsplaylistValueFloat,hlsplaylistExtInfDesc syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-BYTERANGE\ze:" end="$" keepend contains=hlsplaylistValueInt syn match hlsplaylistTagDelimiter "^#EXT-X-DISCONTINUITY$" syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-KEY\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-MAP\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-PROGRAM-DATE-TIME\ze:" end="$" keepend contains=hlsplaylistValueDateTime syn match hlsplaylistTagDelimiter "^#EXT-X-GAP$" syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-BITRATE\ze:" end="$" keepend contains=hlsplaylistValueFloat syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-PART\ze:" end="$" keepend contains=hlsplaylistAttributeList " Media Metadata Tags syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-DATERANGE\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-SKIP\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-PRELOAD-HINT\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-RENDITION-REPORT\ze:" end="$" keepend contains=hlsplaylistAttributeList " Multivariant Playlist Tags syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-MEDIA\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-STREAM-INF\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStatement start="^#EXT-X-I-FRAME-STREAM-INF\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-SESSION-DATA\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-SESSION-KEY\ze:" end="$" keepend contains=hlsplaylistAttributeList syn region hlsplaylistTagLine matchgroup=hlsplaylistTagStandard start="^#EXT-X-CONTENT-STEERING\ze:" end="$" keepend contains=hlsplaylistAttributeList " Attributes syn region hlsplaylistAttributeList start=":" end="$" keepend contained \ contains=hlsplaylistAttributeName,hlsplaylistAttributeInt,hlsplaylistAttributeHex,hlsplaylistAttributeFloat,hlsplaylistAttributeString,hlsplaylistAttributeEnum,hlsplaylistAttributeResolution,hlsplaylistAttributeUri " Common attributes syn match hlsplaylistAttributeName "[A-Za-z-]\+\ze=" contained syn match hlsplaylistAttributeEnum "=\zs[A-Za-z][A-Za-z0-9-_]*" contained syn match hlsplaylistAttributeString +=\zs"[^"]*"+ contained syn match hlsplaylistAttributeInt "=\zs\d\+" contained syn match hlsplaylistAttributeFloat "=\zs-\?\d*\.\d*" contained syn match hlsplaylistAttributeHex "=\zs0[xX]\d*" contained syn match hlsplaylistAttributeResolution "=\zs\d\+x\d\+" contained " Allow different highligting for URI attributes syn region hlsplaylistAttributeUri matchgroup=hlsplaylistAttributeName start="\zsURI\ze" end="\(,\|$\)" contained contains=hlsplaylistUriQuotes syn region hlsplaylistUriQuotes matchgroup=hlsplaylistAttributeString start=+"+ end=+"+ keepend contained contains=hlsplaylistUriValue syn match hlsplaylistUriValue /[^" ]\+/ contained " Individual values syn match hlsplaylistValueInt "[0-9]\+" contained syn match hlsplaylistValueFloat "\(\d\+\|\d*\.\d*\)" contained syn match hlsplaylistExtInfDesc ",\zs.*$" contained syn match hlsplaylistValueDateTime "\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\(\.\d*\)\?\(Z\|\d\d:\?\d\d\)$" contained " Define default highlighting hi def link hlsplaylistComment Comment hi def link hlsplaylistUrl NONE hi def link hlsplaylistTagHeader Special hi def link hlsplaylistTagStandard Define hi def link hlsplaylistTagDelimiter Delimiter hi def link hlsplaylistTagStatement Statement hi def link hlsplaylistTagUnknown Special hi def link hlsplaylistUriQuotes String hi def link hlsplaylistUriValue Underlined hi def link hlsplaylistAttributeQuotes String hi def link hlsplaylistAttributeName Identifier hi def link hlsplaylistAttributeInt Number hi def link hlsplaylistAttributeHex Number hi def link hlsplaylistAttributeFloat Float hi def link hlsplaylistAttributeString String hi def link hlsplaylistAttributeEnum Constant hi def link hlsplaylistAttributeResolution Constant hi def link hlsplaylistValueInt Number hi def link hlsplaylistValueFloat Float hi def link hlsplaylistExtInfDesc String hi def link hlsplaylistValueDateTime Constant let b:current_syntax = "hlsplaylist" let &cpo = s:cpo_save unlet s:cpo_save " vim: sts=2 sw=2 et