mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 10:45:16 -07:00
07af492f63
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>
299 lines
13 KiB
VimL
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
|