mirror of
				https://github.com/vim/vim.git
				synced 2025-10-31 09:57:14 -04:00 
			
		
		
		
	
		
			
	
	
		
			121 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			121 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " 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 |