codekingpro/portable-devtools
114k
1" Vim syntax file2" Language: rasi (Rofi Advanced Style Information)3" Maintainer: Pierrick Guillaume <pierguill@gmail.com>4" Last Change: 2024 May 215" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)6"7" Syntax support for rasi config file8 9" This file is based on syntax defined in rofi-theme man page10" https://man.archlinux.org/man/community/rofi/rofi-theme.5.en11 12if exists('b:current_syntax')13 finish14endif15let b:current_syntax = 'rasi'16let s:cpo_save = &cpo17set cpo&vim18 19" String {{{20syn region rasiString start=+"+ skip=+\\"+ end=+"+ oneline contained21syn match rasiCharacter +L\='[^\\]'+ contained22 23syn cluster rasiPropertyVals add=rasiString,rasiCharacter24" }}}25 26" Integer/Real {{{27syn match rasiNumber display contained '[+-]\?\d\+\(\.\d\+\)\?'28 29syn cluster rasiPropertyVals add=rasiNumber30" }}}31 32" Boolean {{{33syn keyword rasiBool contained true false34 35syn cluster rasiPropertyVals add=rasiBool36" }}}37 38" Image {{{39syn match rasiInvImage display contained 'url([^)]*)'40syn keyword rasiImageK contained url linear-gradient41 42syn match rasiImage display contained transparent 'url(\s*"\([^"]\|\\"\)\+"\(\s*,\s*\(none\|both\|width\|height\)\)\?\s*)' contains=rasiImageScale,rasiString,rasiImageK43syn keyword rasiImageScale contained none both width height44 45syn match rasiImage display contained transparent 'linear-gradient(\s*\(\(top\|left\|right\|bottom\)\s*,\s*\)\?[^,)]\+\s*\(,\s*[^,)]\+\s*\)\+)' contains=rasiImageDirection,@rasiColors,rasiImageK46syn keyword rasiImageDirection contained top left right bottom47 48syn match rasiImage display contained transparent 'linear-gradient(\s*\d\+\(rad\|grad\|deg\)\s*,\s*[^,)]\+\s*\(,\s*[^,)]\+\s*\)\+)' contains=rasiImageUnit,@rasiColor,@rasiInvColor,rasiNumber,rasiImageK49syn match rasiImageUnit display contained '\(rad\|grad\|deg\)\>'50 51syn cluster rasiPropertyVals add=rasiInvImage,rasiImage52" }}}53 54" Reference {{{55syn match rasiReference display contained '@[a-zA-Z0-9-]\+'56 57syn keyword rasiVarReferenceK contained var58 59syn match rasiInvVarReference display contained 'var([^)]*)'60syn match rasiVarReference display contained transparent 'var(\s*[a-zA-Z0-9-]\+\s*,\s*\(\a\+\s*([^)]*)\)\?[^),]*)' contains=rasiVarReferenceK,rasiPropertyIdRef,@rasiPropertyVals61syn match rasiPropertyIdRef display contained '\a[a-zA-Z0-9-]*'62 63syn cluster rasiPropertyVals add=rasiReference,rasiInvVarReference,rasiVarReference64" }}}65 66" Env variable {{{67syn match rasiInvEnv display contained '${[^}]*}'68syn match rasiEnv display contained '${\w\+}'hs=s+2,he=e-169 70syn keyword rasiEnvVarK contained env71 72syn match rasiInvEnvVar display contained 'env([^)]*)'73syn match rasiEnvVar display contained transparent 'env(\s*\w\+\s*,\s*\(\a\+([^)]*)\)\?[^),]*)' contains=rasiEnvVarK,rasiEnvRef,@rasiPropertyVals74syn match rasiEnvRef display contained '\a\w*'75 76syn cluster rasiPropertyVals add=rasiEnv,rasiInvEnv,rasiInvEnvVar,rasiEnvVar77" }}}78 79" Color {{{80syn keyword rasiColorK contained rgb[a] hsl[a] hwb[a] cmyk81 82syn match rasiHexColor display contained '#\x\{3,4}'83syn match rasiHexColor display contained '#\x\{6}'84syn match rasiHexColor display contained '#\x\{8}'85syn match rasiInvHexColor display contained '#\x\{5}\X'he=e-1,me=e-186syn match rasiInvHexColor display contained '#\x\{7}\X'he=e-1,me=e-187 88syn match rasiInvRGBColor display contained 'rgb\(a\)\?([^)]*)'89syn 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,rasiDistance90 91syn match rasiInvHSLColor display contained 'h\(sl\|wb\)\(a\)\?([^)]*)'92syn 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,rasiDistance93 94 95"this matches doesn't works properly (too long ?)96syn match rasiInvCMYKColor display contained 'cmyk([^)]*)'97syn match rasiCMYKColor display contained transparent 'cmyk(\s*\(\d\(\.\d*\)\?\|\d\{,3}%\)\s*\(,\s*\(\d\(\.\d*\)\?\|\d\{,3}%\)\s*\)\{3,4})' contains=rasiColorK,rasiNumber,rasiDistance98 99syn case ignore100syn keyword rasiNamedColor contained101 \ AliceBlue AntiqueWhite Aqua Aquamarine Azure Beige Bisque Black BlanchedAlmond Blue102 \ BlueViolet Brown BurlyWood CadetBlue Chartreuse Chocolate Coral CornflowerBlue Cornsilk103 \ Crimson Cyan DarkBlue DarkCyan DarkGoldenRod DarkGray DarkGrey DarkGreen DarkKhaki DarkMagenta104 \ DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen Dark SlateBlue105 \ DarkSlateGray DarkSlateGrey DarkTurquoise DarkViolet DeepPink DeepSkyBlue DimGray DimGrey106 \ DodgerBlue FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold GoldenRod107 \ Gray Grey Green GreenYellow HoneyDew HotPink IndianRed Indigo Ivory Khaki Lavender108 \ LavenderBlush LawnGreen LemonChiffon LightBlue LightCoral LightCyan LightGoldenRodYellow109 \ LightGray LightGrey LightGreen LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray110 \ LightSlateGrey LightSteelBlue LightYellow Lime LimeGreen Linen Magenta Maroon MediumAquaMarine111 \ MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen112 \ MediumTurquoise MediumVioletRed MidnightBlue MintCream MistyRose Moccasin NavajoWhite Navy113 \ OldLace Olive OliveDrab Orange OrangeRed Orchid PaleGoldenRod PaleGreen PaleTurquoise114 \ PaleVioletRed PapayaWhip PeachPuff Peru Pink Plum PowderBlue Purple RebeccaPurple Red115 \ RosyBrown RoyalBlue SaddleBrown Salmon SandyBrown SeaGreen SeaShell Sienna Silver SkyBlue116 \ SlateBlue SlateGray SlateGrey Snow SpringGreen SteelBlue Tan Teal Thistle Tomato Turquoise117 \ Violet Wheat White WhiteSmoke Yellow YellowGreen transparent[] "uses `[]` to escape keyword118 119syn cluster rasiColors add=rasiHexColor,rasiRGBColor,rasiHSLColor,rasiCMYKColor,rasiNamedColor120syn cluster rasiColors add=rasiInvHexColor,rasiInvRGBColor,rasiInvHSLColor,rasiInvCMYKColor121 122syn cluster rasiPropertyVals add=@rasiColors123" }}}124 125" Text-Style {{{126syn keyword rasiTextStyle contained bold italic underline strikethrough none127 128syn cluster rasiPropertyVals add=rasiTextStyle129" }}}130 131" Line-Style {{{132syn keyword rasiLineStyle contained dash solid133 134syn cluster rasiPropertyVals add=rasiLineStyle135" }}}136 137" Distance {{{138syn match rasiDistanceUnit display contained '\(px\|em\|ch\|%\|mm\)'139 140syn match rasiInvDistance display contained '[+-]\?\d\+\.\d\+\(px\|mm\)'141syn match rasiDistance display contained transparent '[-+]\?\d\+\(px\|mm\)' contains=rasiDistanceUnit,rasiNumber142syn match rasiDistance display contained transparent '[+-]\?\d\+\(\.\d\+\)\?\(em\|ch\|%\)' contains=rasiDistanceUnit,rasiNumber143 144syn keyword rasiDistanceCalc contained calc nextgroup=rasiDistanceCalcBody145syn region rasiDistanceCalcBody display contained start=+(+ end=+)+ contains=rasiDistanceCalcOp,rasiDistance,rasiInvDistance146syn match rasiDistanceCalcOp display contained '\(+\|-\|/\|\*\|%\|min\|max\)'147 148syn cluster rasiPropertyVals add=rasiInvDistance,rasiDistance,rasiDistanceCalc149" }}}150 151" Position {{{152syn keyword rasiPosition contained center east north west south153 154syn cluster rasiPropertyVals add=rasiPosition155" }}}156 157" Orientation {{{158syn keyword rasiOrientation contained horizontal vertical159 160syn cluster rasiPropertyVals add=rasiOrientation161" }}}162 163" Cursor {{{164syn keyword rasiCursor contained default pointer text165 166syn cluster rasiPropertyVals add=rasiCursor167" }}}168 169" Keyword List {{{170syn region rasiKeywordList contained start=+\[+ end=+\]+ contains=rasiPropertyIdRef171 172syn cluster rasiPropertyVals add=rasiKeywordList173" }}}174 175" Inherit {{{176syn keyword rasiInherit contained inherit children177 178syn cluster rasiPropertyVals add=rasiInherit179" }}}180 181syn match rasiGlobalImport display '^\s*@\(import\|theme\)' nextgroup=rasiString skipwhite182 183" Section {{{184" syn region rasiSection transparent start='^[^{]\+{'me=e-1 end='}' contains=rasiSectionOpenning,rasiSectionContent185syn match rasiSectionOpenning transparent '^[^{]\+{'me=e-1 contains=rasiGlobalSection,rasiWidgetName,rasiGlobalMedia nextgroup=rasiThemeSectionContent186" syn match rasiThemeInnerSectionOpenning transparent '^[^:${]\+{'me=e-1 contains=rasiWidgetName nextgroup=rasiThemeInnerSectionContent contained187 188syn match rasiGlobalMedia display contained '^\s*@media' nextgroup=rasiInvMediaBody,rasiMediaBody skipwhite189syn match rasiInvMediaBody display contained '([^)]*)'190syn match rasiMediaBody display contained '(\s*[a-z-]\+\s*:\s*\d\+\(px\|mm\)\?\s*)' contains=rasiMediaK,rasiNumber,rasiDistance191syn keyword rasiMediaK contained min-width max-width min-height max-height min-aspect-ratio max-aspect-ratio monitor-id192 193syn match rasiGlobalSection display contained '^*'194syn match rasiWidgetName display contained '[a-zA-Z0-9-]\+' nextgroup=rasiVisibleMod skipwhite195 196syn keyword rasiVisibleMod contained normal selected alternate nextgroup=rasiVisibleMod,rasiStateWrapper skipwhite197syn match rasiStateWrapper display contained transparent '\.\(normal\|active\|urgent\)' contains=rasiState198syn keyword rasiState contained normal active urgent199 200 201syn region rasiThemeSectionContent transparent start="{" end="}" contains=rasiProperty,rasiComment,rasiCommentL,rasiSectionOpenning contained202" syn region rasiThemeInnerSectionContent transparent start="{" end="}" contains=rasiProperty,rasiComment,rasiCommentL,rasiThemeInnerSectionOpenning contained203 204syn match rasiProperty transparent '^\s*\S\+\s*:.*;\s*$' keepend contained contains=rasiPropertyId,rasiInvPropertyId,rasiPropertyVal,rasiComment,rasiCommentL205syn match rasiInvPropertyId '^\([^:]\&[^/]\{2}\)*:'me=e-1 contained206syn match rasiPropertyId '^\s*[0-9a-zA-Z-]\+\s*:'me=e-1 contained207syn match rasiInvPropertyVal ':[^;];\s*\S\+\s*$'ms=s+1,hs=s+1208syn match rasiPropertyVal ':\s*[^;]\+;\s*$'ms=s+1,hs=s+1 contained contains=@rasiPropertyVals209" }}}210 211" Comment {{{212syn cluster rasiCommentGroup contains=rasiTodo,rasiBadContinuation213 214syn region rasiCommentL start="//" skip="\\$" end="$" keepend contains=@rasiCommentGroup,@Spell215syn region rasiComment start="/\*" end="\*/" contains=@rasiCommentGroup,rasiCommentStartError,@Spell fold extend216 217syn match rasiCommentError display '\*/'218 219syn keyword rasiTodo contained TODO FIXME XXX NOTE220 221if exists("rasi_minlines")222 let b:rasi_minlines = rasi_minlines223else224 let b:rasi_minlines = 50225endif226exec "syn sync ccomment rasiComment minlines=" . b:rasi_minlines227" }}}228 229 230 231" Highlighting: {{{232hi def link rasiError Error233 234hi def link rasiTodo Todo235hi def link rasiComment Comment236hi def link rasiCommentStart rasiComment237hi def link rasiCommentL rasiComment238hi def link rasiCommentError rasiError239 240hi def link rasiString String241hi def link rasiNumber Number242hi def link rasiBool Boolean243 244hi def link rasiImageK Function245hi def link rasiImageScale Keyword246hi def link rasiImageDirection Keyword247hi def link rasiImageUnit Type248hi def link rasiInvImage rasiError249 250hi def link rasiHexColor Number251hi def link rasiColorK Function252hi def link rasiNamedColor Number253hi def link rasiInvColor rasiError254hi def link rasiInvHexColor rasiInvColor255hi def link rasiInvRGBColor rasiInvColor256hi def link rasiInvHSLColor rasiInvColor257hi def link rasiInvCMYKColor rasiInvColor258 259hi def link rasiTextStyle Keyword260hi def link rasiLineStyle Keyword261 262hi def link rasiDistanceUnit Type263hi def link rasiDistanceCalc Function264hi def link rasiDistanceCalcOp Operator265hi def link rasiInvDistance rasiError266 267hi def link rasiPosition Keyword268hi def link rasiOrientation Keyword269hi def link rasiCursor Keyword270 271hi def link rasiReference Identifier272hi def link rasiPropertyIdRef Identifier273hi def link rasiVarReferenceK Function274hi def link rasiInvVarReference rasiError275 276hi def link rasiEnv Identifier277hi def link rasiEnvRef Identifier278hi def link rasiEnvVarK Function279hi def link rasiInvEnv rasiError280hi def link rasiInvEnvVar rasiError281 282hi def link rasiWidgetName StorageClass283hi def link rasiGlobalSection StorageClass284hi def link rasiVisibleMod Type285hi def link rasiState Tag286 287hi def link rasiInherit Identifier288 289hi def link rasiGlobalImport Include290 291hi def link rasiGlobalMedia Preproc292hi def link rasiMediaK Keyword293hi def link rasiInvMediaBody rasiError294 295hi def link rasiPropertyId Identifier296hi def link rasiInvProperty rasiError297hi def link rasiInvPropertyId rasiError298hi def link rasiInvPropertyVal rasiError299" }}}300 301let &cpo = s:cpo_save302unlet s:cpo_save303 304" vim:ts=8305 