neovim/runtime/syntax/hlsplaylist.vim

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

121 lines
7.4 KiB
VimL
Raw Normal View History

" Vim syntax file
" Language: HLS Playlist
" Maintainer: Benoît Ryder <benoit@ryder.fr>
" 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