mirror of
				https://github.com/vim/vim.git
				synced 2025-10-31 09:57:14 -04:00 
			
		
		
		
	closes: #17121 Signed-off-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
		
			
				
	
	
		
			305 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			305 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
| " Vim syntax file
 | |
| " Language:	rasi (Rofi Advanced Style Information)
 | |
| " Maintainer:	Pierrick Guillaume  <pierguill@gmail.com>
 | |
| " Last Change:	2024 May 21
 | |
| " 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
 | |
| "
 | |
| " Syntax support for rasi config file
 | |
| 
 | |
| " This file is based on syntax defined in rofi-theme man page
 | |
| " https://man.archlinux.org/man/community/rofi/rofi-theme.5.en
 | |
| 
 | |
| if exists('b:current_syntax')
 | |
|   finish
 | |
| endif
 | |
| let b:current_syntax = 'rasi'
 | |
| let s:cpo_save = &cpo
 | |
| set cpo&vim
 | |
| 
 | |
| " String {{{
 | |
| syn region rasiString    start=+"+ skip=+\\"+ end=+"+ oneline contained
 | |
| syn match  rasiCharacter +L\='[^\\]'+ contained
 | |
| 
 | |
| syn cluster rasiPropertyVals add=rasiString,rasiCharacter
 | |
| " }}}
 | |
| 
 | |
| " Integer/Real {{{
 | |
| syn match rasiNumber  display contained '[+-]\?\d\+\(\.\d\+\)\?'
 | |
| 
 | |
| syn cluster rasiPropertyVals add=rasiNumber
 | |
| " }}}
 | |
| 
 | |
| " Boolean {{{
 | |
| syn keyword rasiBool  contained true false
 | |
| 
 | |
| syn cluster rasiPropertyVals add=rasiBool
 | |
| " }}}
 | |
| 
 | |
| " Image {{{
 | |
| syn match rasiInvImage        display contained 'url([^)]*)'
 | |
| syn keyword rasiImageK        contained url linear-gradient
 | |
| 
 | |
| syn match rasiImage           display contained transparent 'url(\s*"\([^"]\|\\"\)\+"\(\s*,\s*\(none\|both\|width\|height\)\)\?\s*)' contains=rasiImageScale,rasiString,rasiImageK
 | |
| syn keyword rasiImageScale  contained none both width height
 | |
| 
 | |
| syn match rasiImage           display contained transparent 'linear-gradient(\s*\(\(top\|left\|right\|bottom\)\s*,\s*\)\?[^,)]\+\s*\(,\s*[^,)]\+\s*\)\+)' contains=rasiImageDirection,@rasiColors,rasiImageK
 | |
| syn keyword rasiImageDirection contained top left right bottom
 | |
| 
 | |
| syn match rasiImage           display contained transparent 'linear-gradient(\s*\d\+\(rad\|grad\|deg\)\s*,\s*[^,)]\+\s*\(,\s*[^,)]\+\s*\)\+)' contains=rasiImageUnit,@rasiColor,@rasiInvColor,rasiNumber,rasiImageK
 | |
| syn match rasiImageUnit       display contained '\(rad\|grad\|deg\)\>'
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=rasiInvImage,rasiImage
 | |
| " }}}
 | |
| 
 | |
| " Reference {{{
 | |
| syn match rasiReference       display contained '@[a-zA-Z0-9-]\+'
 | |
| 
 | |
| syn keyword rasiVarReferenceK contained var
 | |
| 
 | |
| syn match rasiInvVarReference display contained 'var([^)]*)'
 | |
| syn match rasiVarReference    display contained transparent 'var(\s*[a-zA-Z0-9-]\+\s*,\s*\(\a\+\s*([^)]*)\)\?[^),]*)' contains=rasiVarReferenceK,rasiPropertyIdRef,@rasiPropertyVals
 | |
| syn match rasiPropertyIdRef   display contained '\a[a-zA-Z0-9-]*'
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=rasiReference,rasiInvVarReference,rasiVarReference
 | |
| " }}}
 | |
| 
 | |
| " Env variable {{{
 | |
| syn match rasiInvEnv          display contained '${[^}]*}'
 | |
| syn match rasiEnv             display contained '${\w\+}'hs=s+2,he=e-1
 | |
| 
 | |
| syn keyword rasiEnvVarK       contained env
 | |
| 
 | |
| syn match rasiInvEnvVar       display contained 'env([^)]*)'
 | |
| syn match rasiEnvVar          display contained transparent 'env(\s*\w\+\s*,\s*\(\a\+([^)]*)\)\?[^),]*)' contains=rasiEnvVarK,rasiEnvRef,@rasiPropertyVals
 | |
| syn match rasiEnvRef          display contained '\a\w*'
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=rasiEnv,rasiInvEnv,rasiInvEnvVar,rasiEnvVar
 | |
| " }}}
 | |
| 
 | |
| " Color {{{
 | |
| syn keyword rasiColorK        contained rgb[a] hsl[a] hwb[a] cmyk
 | |
| 
 | |
| syn match rasiHexColor        display contained '#\x\{3,4}'
 | |
| syn match rasiHexColor        display contained '#\x\{6}'
 | |
| syn match rasiHexColor        display contained '#\x\{8}'
 | |
| syn match rasiInvHexColor     display contained '#\x\{5}\X'he=e-1,me=e-1
 | |
| syn match rasiInvHexColor     display contained '#\x\{7}\X'he=e-1,me=e-1
 | |
| 
 | |
| syn match rasiInvRGBColor     display contained 'rgb\(a\)\?([^)]*)'
 | |
| syn match rasiRGBColor        display contained transparent 'rgb\(a\)\?(\s*\d\+\s*\(%\)\?\s*,\(\s*\d\+\s*\(%\)\?\s*\){2}\(,\s*\(\d\(\.\d*\)\?\|\d\{,3}%\)\s*\)\?)' contains=rasiColorK,rasiNumber,rasiDistance
 | |
| 
 | |
| syn match rasiInvHSLColor     display contained 'h\(sl\|wb\)\(a\)\?([^)]*)'
 | |
| syn match rasiHSLColor        display contained transparent 'h\(sl\|wb\)\(a\)\?(\s*\d\+\(\.\d*\)\?\(deg\|rad\|grad\|turn\)\?\s*\(,\s*\(\d\(\.\d*\)\?\|\d\{,3}%\)\s*\)\{2,3})' contains=rasiColorK,rasiNumber,rasiDistance
 | |
| 
 | |
| 
 | |
| "this matches doesn't works properly (too long ?)
 | |
| syn match rasiInvCMYKColor  display contained 'cmyk([^)]*)'
 | |
| syn match rasiCMYKColor     display contained transparent 'cmyk(\s*\(\d\(\.\d*\)\?\|\d\{,3}%\)\s*\(,\s*\(\d\(\.\d*\)\?\|\d\{,3}%\)\s*\)\{3,4})' contains=rasiColorK,rasiNumber,rasiDistance
 | |
| 
 | |
| syn case ignore
 | |
| syn keyword rasiNamedColor contained
 | |
|       \ AliceBlue AntiqueWhite Aqua Aquamarine Azure Beige Bisque Black BlanchedAlmond Blue
 | |
|       \ BlueViolet Brown BurlyWood CadetBlue Chartreuse Chocolate Coral CornflowerBlue Cornsilk
 | |
|       \ Crimson Cyan DarkBlue DarkCyan DarkGoldenRod DarkGray DarkGrey DarkGreen DarkKhaki DarkMagenta
 | |
|       \ DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen Dark SlateBlue
 | |
|       \ DarkSlateGray DarkSlateGrey DarkTurquoise DarkViolet DeepPink DeepSkyBlue DimGray DimGrey
 | |
|       \ DodgerBlue FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold GoldenRod
 | |
|       \ Gray Grey Green GreenYellow HoneyDew HotPink IndianRed Indigo Ivory Khaki Lavender
 | |
|       \ LavenderBlush LawnGreen LemonChiffon LightBlue LightCoral LightCyan LightGoldenRodYellow
 | |
|       \ LightGray LightGrey LightGreen LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray
 | |
|       \ LightSlateGrey LightSteelBlue LightYellow Lime LimeGreen Linen Magenta Maroon MediumAquaMarine
 | |
|       \ MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen
 | |
|       \ MediumTurquoise MediumVioletRed MidnightBlue MintCream MistyRose Moccasin NavajoWhite Navy
 | |
|       \ OldLace Olive OliveDrab Orange OrangeRed Orchid PaleGoldenRod PaleGreen PaleTurquoise
 | |
|       \ PaleVioletRed PapayaWhip PeachPuff Peru Pink Plum PowderBlue Purple RebeccaPurple Red
 | |
|       \ RosyBrown RoyalBlue SaddleBrown Salmon SandyBrown SeaGreen SeaShell Sienna Silver SkyBlue
 | |
|       \ SlateBlue SlateGray SlateGrey Snow SpringGreen SteelBlue Tan Teal Thistle Tomato Turquoise
 | |
|       \ Violet Wheat White WhiteSmoke Yellow YellowGreen transparent[] "uses `[]` to escape keyword
 | |
| 
 | |
| syn cluster rasiColors        add=rasiHexColor,rasiRGBColor,rasiHSLColor,rasiCMYKColor,rasiNamedColor
 | |
| syn cluster rasiColors        add=rasiInvHexColor,rasiInvRGBColor,rasiInvHSLColor,rasiInvCMYKColor
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=@rasiColors
 | |
| " }}}
 | |
| 
 | |
| " Text-Style {{{
 | |
| syn keyword rasiTextStyle contained bold italic underline strikethrough none
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=rasiTextStyle
 | |
| " }}}
 | |
| 
 | |
| " Line-Style {{{
 | |
| syn keyword rasiLineStyle contained dash solid
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=rasiLineStyle
 | |
| " }}}
 | |
| 
 | |
| " Distance {{{
 | |
| syn match rasiDistanceUnit    display contained '\(px\|em\|ch\|%\|mm\)'
 | |
| 
 | |
| syn match rasiInvDistance     display contained '[+-]\?\d\+\.\d\+\(px\|mm\)'
 | |
| syn match rasiDistance        display contained transparent '[-+]\?\d\+\(px\|mm\)' contains=rasiDistanceUnit,rasiNumber
 | |
| syn match rasiDistance        display contained transparent '[+-]\?\d\+\(\.\d\+\)\?\(em\|ch\|%\)' contains=rasiDistanceUnit,rasiNumber
 | |
| 
 | |
| syn keyword rasiDistanceCalc  contained calc nextgroup=rasiDistanceCalcBody
 | |
| syn region rasiDistanceCalcBody display contained start=+(+ end=+)+ contains=rasiDistanceCalcOp,rasiDistance,rasiInvDistance
 | |
| syn match rasiDistanceCalcOp  display contained '\(+\|-\|/\|\*\|%\|min\|max\)'
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=rasiInvDistance,rasiDistance,rasiDistanceCalc
 | |
| " }}}
 | |
| 
 | |
| " Position {{{
 | |
| syn keyword rasiPosition    contained center east north west south
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=rasiPosition
 | |
| " }}}
 | |
| 
 | |
| " Orientation {{{
 | |
| syn keyword rasiOrientation   contained horizontal vertical
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=rasiOrientation
 | |
| " }}}
 | |
| 
 | |
| " Cursor {{{
 | |
| syn keyword rasiCursor        contained default pointer text
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=rasiCursor
 | |
| " }}}
 | |
| 
 | |
| " Keyword List {{{
 | |
| syn region rasiKeywordList    contained start=+\[+ end=+\]+ contains=rasiPropertyIdRef
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=rasiKeywordList
 | |
| " }}}
 | |
| 
 | |
| " Inherit {{{
 | |
| syn keyword rasiInherit       contained inherit children
 | |
| 
 | |
| syn cluster rasiPropertyVals  add=rasiInherit
 | |
| " }}}
 | |
| 
 | |
| syn match rasiGlobalImport    display '^\s*@\(import\|theme\)' nextgroup=rasiString skipwhite
 | |
| 
 | |
| " Section {{{
 | |
| " syn region rasiSection transparent start='^[^{]\+{'me=e-1 end='}' contains=rasiSectionOpenning,rasiSectionContent
 | |
| syn match rasiSectionOpenning transparent '^[^{]\+{'me=e-1 contains=rasiGlobalSection,rasiWidgetName,rasiGlobalMedia nextgroup=rasiThemeSectionContent
 | |
| " syn match rasiThemeInnerSectionOpenning transparent '^[^:${]\+{'me=e-1 contains=rasiWidgetName nextgroup=rasiThemeInnerSectionContent contained
 | |
| 
 | |
| syn match rasiGlobalMedia     display contained '^\s*@media' nextgroup=rasiInvMediaBody,rasiMediaBody skipwhite
 | |
| syn match rasiInvMediaBody    display contained '([^)]*)'
 | |
| syn match rasiMediaBody       display contained '(\s*[a-z-]\+\s*:\s*\d\+\(px\|mm\)\?\s*)' contains=rasiMediaK,rasiNumber,rasiDistance
 | |
| syn keyword rasiMediaK        contained min-width max-width min-height max-height min-aspect-ratio max-aspect-ratio monitor-id
 | |
| 
 | |
| syn match rasiGlobalSection   display contained '^*'
 | |
| syn match rasiWidgetName      display contained '[a-zA-Z0-9-]\+' nextgroup=rasiVisibleMod skipwhite
 | |
| 
 | |
| syn keyword rasiVisibleMod    contained normal selected alternate nextgroup=rasiVisibleMod,rasiStateWrapper skipwhite
 | |
| syn match rasiStateWrapper    display contained transparent '\.\(normal\|active\|urgent\)' contains=rasiState
 | |
| syn keyword rasiState         contained normal active urgent
 | |
| 
 | |
| 
 | |
| syn region  rasiThemeSectionContent transparent start="{" end="}" contains=rasiProperty,rasiComment,rasiCommentL,rasiSectionOpenning contained
 | |
| " syn region  rasiThemeInnerSectionContent transparent start="{" end="}" contains=rasiProperty,rasiComment,rasiCommentL,rasiThemeInnerSectionOpenning contained
 | |
| 
 | |
| syn match rasiProperty transparent '^\s*\S\+\s*:.*;\s*$' keepend contained contains=rasiPropertyId,rasiInvPropertyId,rasiPropertyVal,rasiComment,rasiCommentL
 | |
| syn match rasiInvPropertyId '^\([^:]\&[^/]\{2}\)*:'me=e-1 contained
 | |
| syn match rasiPropertyId  '^\s*[0-9a-zA-Z-]\+\s*:'me=e-1 contained
 | |
| syn match rasiInvPropertyVal ':[^;];\s*\S\+\s*$'ms=s+1,hs=s+1
 | |
| syn match rasiPropertyVal ':\s*[^;]\+;\s*$'ms=s+1,hs=s+1 contained contains=@rasiPropertyVals
 | |
| " }}}
 | |
| 
 | |
| " Comment {{{
 | |
| syn cluster rasiCommentGroup  contains=rasiTodo,rasiBadContinuation
 | |
| 
 | |
| syn region rasiCommentL       start="//" skip="\\$" end="$" keepend contains=@rasiCommentGroup,@Spell
 | |
| syn region rasiComment        start="/\*" end="\*/" contains=@rasiCommentGroup,rasiCommentStartError,@Spell fold extend
 | |
| 
 | |
| syn match rasiCommentError    display '\*/'
 | |
| 
 | |
| syn keyword rasiTodo          contained TODO FIXME XXX NOTE
 | |
| 
 | |
| if exists("rasi_minlines")
 | |
|   let b:rasi_minlines = rasi_minlines
 | |
| else
 | |
|   let b:rasi_minlines = 50
 | |
| endif
 | |
| exec "syn sync ccomment rasiComment minlines=" . b:rasi_minlines
 | |
| " }}}
 | |
| 
 | |
| 
 | |
| 
 | |
| " Highlighting: {{{
 | |
| hi def link rasiError           Error
 | |
| 
 | |
| hi def link rasiTodo            Todo
 | |
| hi def link rasiComment         Comment
 | |
| hi def link rasiCommentStart    rasiComment
 | |
| hi def link rasiCommentL        rasiComment
 | |
| hi def link rasiCommentError    rasiError
 | |
| 
 | |
| hi def link rasiString          String
 | |
| hi def link rasiNumber          Number
 | |
| hi def link rasiBool            Boolean
 | |
| 
 | |
| hi def link rasiImageK          Function
 | |
| hi def link rasiImageScale      Keyword
 | |
| hi def link rasiImageDirection  Keyword
 | |
| hi def link rasiImageUnit       Type
 | |
| hi def link rasiInvImage        rasiError
 | |
| 
 | |
| hi def link rasiHexColor        Number
 | |
| hi def link rasiColorK          Function
 | |
| hi def link rasiNamedColor      Number
 | |
| hi def link rasiInvColor        rasiError
 | |
| hi def link rasiInvHexColor     rasiInvColor
 | |
| hi def link rasiInvRGBColor     rasiInvColor
 | |
| hi def link rasiInvHSLColor     rasiInvColor
 | |
| hi def link rasiInvCMYKColor    rasiInvColor
 | |
| 
 | |
| hi def link rasiTextStyle       Keyword
 | |
| hi def link rasiLineStyle       Keyword
 | |
| 
 | |
| hi def link rasiDistanceUnit    Type
 | |
| hi def link rasiDistanceCalc    Function
 | |
| hi def link rasiDistanceCalcOp  Operator
 | |
| hi def link rasiInvDistance     rasiError
 | |
| 
 | |
| hi def link rasiPosition        Keyword
 | |
| hi def link rasiOrientation     Keyword
 | |
| hi def link rasiCursor          Keyword
 | |
| 
 | |
| hi def link rasiReference       Identifier
 | |
| hi def link rasiPropertyIdRef   Identifier
 | |
| hi def link rasiVarReferenceK   Function
 | |
| hi def link rasiInvVarReference rasiError
 | |
| 
 | |
| hi def link rasiEnv             Identifier
 | |
| hi def link rasiEnvRef          Identifier
 | |
| hi def link rasiEnvVarK         Function
 | |
| hi def link rasiInvEnv          rasiError
 | |
| hi def link rasiInvEnvVar       rasiError
 | |
| 
 | |
| hi def link rasiWidgetName      StorageClass
 | |
| hi def link rasiGlobalSection   StorageClass
 | |
| hi def link rasiVisibleMod      Type
 | |
| hi def link rasiState           Tag
 | |
| 
 | |
| hi def link rasiInherit         Identifier
 | |
| 
 | |
| hi def link rasiGlobalImport    Include
 | |
| 
 | |
| hi def link rasiGlobalMedia     Preproc
 | |
| hi def link rasiMediaK          Keyword
 | |
| hi def link rasiInvMediaBody    rasiError
 | |
| 
 | |
| hi def link rasiPropertyId      Identifier
 | |
| hi def link rasiInvProperty     rasiError
 | |
| hi def link rasiInvPropertyId   rasiError
 | |
| hi def link rasiInvPropertyVal  rasiError
 | |
| " }}}
 | |
| 
 | |
| let &cpo = s:cpo_save
 | |
| unlet s:cpo_save
 | |
| 
 | |
| " vim:ts=8
 |