neovim/runtime/syntax/rasi.vim
Christian Clason 07af492f63 vim-patch:9.1.0453: filetype: rasi files are not recognized
Problem:  filetype: rasi files are not recognized
Solution: regonize '*.rasi' files as rasi filetype,
          include a filetype and syntax plugin
          (Pierrick Guillaume)

ported from: https://github.com/Fymyte/rasi.vim

closes: vim/vim#14821

280e5b13ca

Co-authored-by: Pierrick Guillaume <pierguill@gmail.com>
2024-05-31 14:11:20 +02:00

299 lines
13 KiB
VimL

" Vim syntax file
" Language: rasi (Rofi Advanced Style Information)
" Maintainer: Pierrick Guillaume <pierguill@gmail.com>
" Last Change: 2024 May 21
"
" 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'
" 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
" }}}
" vim:ts=8