neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

rasi.vim (13025B)


      1 " Vim syntax file
      2 " Language:	rasi (Rofi Advanced Style Information)
      3 " Maintainer:	Pierrick Guillaume  <pierguill@gmail.com>
      4 " Last Change:	2024 May 21
      5 " 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
      6 "
      7 " Syntax support for rasi config file
      8 
      9 " This file is based on syntax defined in rofi-theme man page
     10 " https://man.archlinux.org/man/community/rofi/rofi-theme.5.en
     11 
     12 if exists('b:current_syntax')
     13  finish
     14 endif
     15 let b:current_syntax = 'rasi'
     16 let s:cpo_save = &cpo
     17 set cpo&vim
     18 
     19 " String {{{
     20 syn region rasiString    start=+"+ skip=+\\"+ end=+"+ oneline contained
     21 syn match  rasiCharacter +L\='[^\\]'+ contained
     22 
     23 syn cluster rasiPropertyVals add=rasiString,rasiCharacter
     24 " }}}
     25 
     26 " Integer/Real {{{
     27 syn match rasiNumber  display contained '[+-]\?\d\+\(\.\d\+\)\?'
     28 
     29 syn cluster rasiPropertyVals add=rasiNumber
     30 " }}}
     31 
     32 " Boolean {{{
     33 syn keyword rasiBool  contained true false
     34 
     35 syn cluster rasiPropertyVals add=rasiBool
     36 " }}}
     37 
     38 " Image {{{
     39 syn match rasiInvImage        display contained 'url([^)]*)'
     40 syn keyword rasiImageK        contained url linear-gradient
     41 
     42 syn match rasiImage           display contained transparent 'url(\s*"\([^"]\|\\"\)\+"\(\s*,\s*\(none\|both\|width\|height\)\)\?\s*)' contains=rasiImageScale,rasiString,rasiImageK
     43 syn keyword rasiImageScale  contained none both width height
     44 
     45 syn match rasiImage           display contained transparent 'linear-gradient(\s*\(\(top\|left\|right\|bottom\)\s*,\s*\)\?[^,)]\+\s*\(,\s*[^,)]\+\s*\)\+)' contains=rasiImageDirection,@rasiColors,rasiImageK
     46 syn keyword rasiImageDirection contained top left right bottom
     47 
     48 syn match rasiImage           display contained transparent 'linear-gradient(\s*\d\+\(rad\|grad\|deg\)\s*,\s*[^,)]\+\s*\(,\s*[^,)]\+\s*\)\+)' contains=rasiImageUnit,@rasiColor,@rasiInvColor,rasiNumber,rasiImageK
     49 syn match rasiImageUnit       display contained '\(rad\|grad\|deg\)\>'
     50 
     51 syn cluster rasiPropertyVals  add=rasiInvImage,rasiImage
     52 " }}}
     53 
     54 " Reference {{{
     55 syn match rasiReference       display contained '@[a-zA-Z0-9-]\+'
     56 
     57 syn keyword rasiVarReferenceK contained var
     58 
     59 syn match rasiInvVarReference display contained 'var([^)]*)'
     60 syn match rasiVarReference    display contained transparent 'var(\s*[a-zA-Z0-9-]\+\s*,\s*\(\a\+\s*([^)]*)\)\?[^),]*)' contains=rasiVarReferenceK,rasiPropertyIdRef,@rasiPropertyVals
     61 syn match rasiPropertyIdRef   display contained '\a[a-zA-Z0-9-]*'
     62 
     63 syn cluster rasiPropertyVals  add=rasiReference,rasiInvVarReference,rasiVarReference
     64 " }}}
     65 
     66 " Env variable {{{
     67 syn match rasiInvEnv          display contained '${[^}]*}'
     68 syn match rasiEnv             display contained '${\w\+}'hs=s+2,he=e-1
     69 
     70 syn keyword rasiEnvVarK       contained env
     71 
     72 syn match rasiInvEnvVar       display contained 'env([^)]*)'
     73 syn match rasiEnvVar          display contained transparent 'env(\s*\w\+\s*,\s*\(\a\+([^)]*)\)\?[^),]*)' contains=rasiEnvVarK,rasiEnvRef,@rasiPropertyVals
     74 syn match rasiEnvRef          display contained '\a\w*'
     75 
     76 syn cluster rasiPropertyVals  add=rasiEnv,rasiInvEnv,rasiInvEnvVar,rasiEnvVar
     77 " }}}
     78 
     79 " Color {{{
     80 syn keyword rasiColorK        contained rgb[a] hsl[a] hwb[a] cmyk
     81 
     82 syn match rasiHexColor        display contained '#\x\{3,4}'
     83 syn match rasiHexColor        display contained '#\x\{6}'
     84 syn match rasiHexColor        display contained '#\x\{8}'
     85 syn match rasiInvHexColor     display contained '#\x\{5}\X'he=e-1,me=e-1
     86 syn match rasiInvHexColor     display contained '#\x\{7}\X'he=e-1,me=e-1
     87 
     88 syn match rasiInvRGBColor     display contained 'rgb\(a\)\?([^)]*)'
     89 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
     90 
     91 syn match rasiInvHSLColor     display contained 'h\(sl\|wb\)\(a\)\?([^)]*)'
     92 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
     93 
     94 
     95 "this matches doesn't works properly (too long ?)
     96 syn match rasiInvCMYKColor  display contained 'cmyk([^)]*)'
     97 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
     98 
     99 syn case ignore
    100 syn keyword rasiNamedColor contained
    101      \ AliceBlue AntiqueWhite Aqua Aquamarine Azure Beige Bisque Black BlanchedAlmond Blue
    102      \ BlueViolet Brown BurlyWood CadetBlue Chartreuse Chocolate Coral CornflowerBlue Cornsilk
    103      \ Crimson Cyan DarkBlue DarkCyan DarkGoldenRod DarkGray DarkGrey DarkGreen DarkKhaki DarkMagenta
    104      \ DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen Dark SlateBlue
    105      \ DarkSlateGray DarkSlateGrey DarkTurquoise DarkViolet DeepPink DeepSkyBlue DimGray DimGrey
    106      \ DodgerBlue FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold GoldenRod
    107      \ Gray Grey Green GreenYellow HoneyDew HotPink IndianRed Indigo Ivory Khaki Lavender
    108      \ LavenderBlush LawnGreen LemonChiffon LightBlue LightCoral LightCyan LightGoldenRodYellow
    109      \ LightGray LightGrey LightGreen LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray
    110      \ LightSlateGrey LightSteelBlue LightYellow Lime LimeGreen Linen Magenta Maroon MediumAquaMarine
    111      \ MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen
    112      \ MediumTurquoise MediumVioletRed MidnightBlue MintCream MistyRose Moccasin NavajoWhite Navy
    113      \ OldLace Olive OliveDrab Orange OrangeRed Orchid PaleGoldenRod PaleGreen PaleTurquoise
    114      \ PaleVioletRed PapayaWhip PeachPuff Peru Pink Plum PowderBlue Purple RebeccaPurple Red
    115      \ RosyBrown RoyalBlue SaddleBrown Salmon SandyBrown SeaGreen SeaShell Sienna Silver SkyBlue
    116      \ SlateBlue SlateGray SlateGrey Snow SpringGreen SteelBlue Tan Teal Thistle Tomato Turquoise
    117      \ Violet Wheat White WhiteSmoke Yellow YellowGreen transparent[] "uses `[]` to escape keyword
    118 
    119 syn cluster rasiColors        add=rasiHexColor,rasiRGBColor,rasiHSLColor,rasiCMYKColor,rasiNamedColor
    120 syn cluster rasiColors        add=rasiInvHexColor,rasiInvRGBColor,rasiInvHSLColor,rasiInvCMYKColor
    121 
    122 syn cluster rasiPropertyVals  add=@rasiColors
    123 " }}}
    124 
    125 " Text-Style {{{
    126 syn keyword rasiTextStyle contained bold italic underline strikethrough none
    127 
    128 syn cluster rasiPropertyVals  add=rasiTextStyle
    129 " }}}
    130 
    131 " Line-Style {{{
    132 syn keyword rasiLineStyle contained dash solid
    133 
    134 syn cluster rasiPropertyVals  add=rasiLineStyle
    135 " }}}
    136 
    137 " Distance {{{
    138 syn match rasiDistanceUnit    display contained '\(px\|em\|ch\|%\|mm\)'
    139 
    140 syn match rasiInvDistance     display contained '[+-]\?\d\+\.\d\+\(px\|mm\)'
    141 syn match rasiDistance        display contained transparent '[-+]\?\d\+\(px\|mm\)' contains=rasiDistanceUnit,rasiNumber
    142 syn match rasiDistance        display contained transparent '[+-]\?\d\+\(\.\d\+\)\?\(em\|ch\|%\)' contains=rasiDistanceUnit,rasiNumber
    143 
    144 syn keyword rasiDistanceCalc  contained calc nextgroup=rasiDistanceCalcBody
    145 syn region rasiDistanceCalcBody display contained start=+(+ end=+)+ contains=rasiDistanceCalcOp,rasiDistance,rasiInvDistance
    146 syn match rasiDistanceCalcOp  display contained '\(+\|-\|/\|\*\|%\|min\|max\)'
    147 
    148 syn cluster rasiPropertyVals  add=rasiInvDistance,rasiDistance,rasiDistanceCalc
    149 " }}}
    150 
    151 " Position {{{
    152 syn keyword rasiPosition    contained center east north west south
    153 
    154 syn cluster rasiPropertyVals  add=rasiPosition
    155 " }}}
    156 
    157 " Orientation {{{
    158 syn keyword rasiOrientation   contained horizontal vertical
    159 
    160 syn cluster rasiPropertyVals  add=rasiOrientation
    161 " }}}
    162 
    163 " Cursor {{{
    164 syn keyword rasiCursor        contained default pointer text
    165 
    166 syn cluster rasiPropertyVals  add=rasiCursor
    167 " }}}
    168 
    169 " Keyword List {{{
    170 syn region rasiKeywordList    contained start=+\[+ end=+\]+ contains=rasiPropertyIdRef
    171 
    172 syn cluster rasiPropertyVals  add=rasiKeywordList
    173 " }}}
    174 
    175 " Inherit {{{
    176 syn keyword rasiInherit       contained inherit children
    177 
    178 syn cluster rasiPropertyVals  add=rasiInherit
    179 " }}}
    180 
    181 syn match rasiGlobalImport    display '^\s*@\(import\|theme\)' nextgroup=rasiString skipwhite
    182 
    183 " Section {{{
    184 " syn region rasiSection transparent start='^[^{]\+{'me=e-1 end='}' contains=rasiSectionOpenning,rasiSectionContent
    185 syn match rasiSectionOpenning transparent '^[^{]\+{'me=e-1 contains=rasiGlobalSection,rasiWidgetName,rasiGlobalMedia nextgroup=rasiThemeSectionContent
    186 " syn match rasiThemeInnerSectionOpenning transparent '^[^:${]\+{'me=e-1 contains=rasiWidgetName nextgroup=rasiThemeInnerSectionContent contained
    187 
    188 syn match rasiGlobalMedia     display contained '^\s*@media' nextgroup=rasiInvMediaBody,rasiMediaBody skipwhite
    189 syn match rasiInvMediaBody    display contained '([^)]*)'
    190 syn match rasiMediaBody       display contained '(\s*[a-z-]\+\s*:\s*\d\+\(px\|mm\)\?\s*)' contains=rasiMediaK,rasiNumber,rasiDistance
    191 syn keyword rasiMediaK        contained min-width max-width min-height max-height min-aspect-ratio max-aspect-ratio monitor-id
    192 
    193 syn match rasiGlobalSection   display contained '^*'
    194 syn match rasiWidgetName      display contained '[a-zA-Z0-9-]\+' nextgroup=rasiVisibleMod skipwhite
    195 
    196 syn keyword rasiVisibleMod    contained normal selected alternate nextgroup=rasiVisibleMod,rasiStateWrapper skipwhite
    197 syn match rasiStateWrapper    display contained transparent '\.\(normal\|active\|urgent\)' contains=rasiState
    198 syn keyword rasiState         contained normal active urgent
    199 
    200 
    201 syn region  rasiThemeSectionContent transparent start="{" end="}" contains=rasiProperty,rasiComment,rasiCommentL,rasiSectionOpenning contained
    202 " syn region  rasiThemeInnerSectionContent transparent start="{" end="}" contains=rasiProperty,rasiComment,rasiCommentL,rasiThemeInnerSectionOpenning contained
    203 
    204 syn match rasiProperty transparent '^\s*\S\+\s*:.*;\s*$' keepend contained contains=rasiPropertyId,rasiInvPropertyId,rasiPropertyVal,rasiComment,rasiCommentL
    205 syn match rasiInvPropertyId '^\([^:]\&[^/]\{2}\)*:'me=e-1 contained
    206 syn match rasiPropertyId  '^\s*[0-9a-zA-Z-]\+\s*:'me=e-1 contained
    207 syn match rasiInvPropertyVal ':[^;];\s*\S\+\s*$'ms=s+1,hs=s+1
    208 syn match rasiPropertyVal ':\s*[^;]\+;\s*$'ms=s+1,hs=s+1 contained contains=@rasiPropertyVals
    209 " }}}
    210 
    211 " Comment {{{
    212 syn cluster rasiCommentGroup  contains=rasiTodo,rasiBadContinuation
    213 
    214 syn region rasiCommentL       start="//" skip="\\$" end="$" keepend contains=@rasiCommentGroup,@Spell
    215 syn region rasiComment        start="/\*" end="\*/" contains=@rasiCommentGroup,rasiCommentStartError,@Spell fold extend
    216 
    217 syn match rasiCommentError    display '\*/'
    218 
    219 syn keyword rasiTodo          contained TODO FIXME XXX NOTE
    220 
    221 if exists("rasi_minlines")
    222  let b:rasi_minlines = rasi_minlines
    223 else
    224  let b:rasi_minlines = 50
    225 endif
    226 exec "syn sync ccomment rasiComment minlines=" . b:rasi_minlines
    227 " }}}
    228 
    229 
    230 
    231 " Highlighting: {{{
    232 hi def link rasiError           Error
    233 
    234 hi def link rasiTodo            Todo
    235 hi def link rasiComment         Comment
    236 hi def link rasiCommentStart    rasiComment
    237 hi def link rasiCommentL        rasiComment
    238 hi def link rasiCommentError    rasiError
    239 
    240 hi def link rasiString          String
    241 hi def link rasiNumber          Number
    242 hi def link rasiBool            Boolean
    243 
    244 hi def link rasiImageK          Function
    245 hi def link rasiImageScale      Keyword
    246 hi def link rasiImageDirection  Keyword
    247 hi def link rasiImageUnit       Type
    248 hi def link rasiInvImage        rasiError
    249 
    250 hi def link rasiHexColor        Number
    251 hi def link rasiColorK          Function
    252 hi def link rasiNamedColor      Number
    253 hi def link rasiInvColor        rasiError
    254 hi def link rasiInvHexColor     rasiInvColor
    255 hi def link rasiInvRGBColor     rasiInvColor
    256 hi def link rasiInvHSLColor     rasiInvColor
    257 hi def link rasiInvCMYKColor    rasiInvColor
    258 
    259 hi def link rasiTextStyle       Keyword
    260 hi def link rasiLineStyle       Keyword
    261 
    262 hi def link rasiDistanceUnit    Type
    263 hi def link rasiDistanceCalc    Function
    264 hi def link rasiDistanceCalcOp  Operator
    265 hi def link rasiInvDistance     rasiError
    266 
    267 hi def link rasiPosition        Keyword
    268 hi def link rasiOrientation     Keyword
    269 hi def link rasiCursor          Keyword
    270 
    271 hi def link rasiReference       Identifier
    272 hi def link rasiPropertyIdRef   Identifier
    273 hi def link rasiVarReferenceK   Function
    274 hi def link rasiInvVarReference rasiError
    275 
    276 hi def link rasiEnv             Identifier
    277 hi def link rasiEnvRef          Identifier
    278 hi def link rasiEnvVarK         Function
    279 hi def link rasiInvEnv          rasiError
    280 hi def link rasiInvEnvVar       rasiError
    281 
    282 hi def link rasiWidgetName      StorageClass
    283 hi def link rasiGlobalSection   StorageClass
    284 hi def link rasiVisibleMod      Type
    285 hi def link rasiState           Tag
    286 
    287 hi def link rasiInherit         Identifier
    288 
    289 hi def link rasiGlobalImport    Include
    290 
    291 hi def link rasiGlobalMedia     Preproc
    292 hi def link rasiMediaK          Keyword
    293 hi def link rasiInvMediaBody    rasiError
    294 
    295 hi def link rasiPropertyId      Identifier
    296 hi def link rasiInvProperty     rasiError
    297 hi def link rasiInvPropertyId   rasiError
    298 hi def link rasiInvPropertyVal  rasiError
    299 " }}}
    300 
    301 let &cpo = s:cpo_save
    302 unlet s:cpo_save
    303 
    304 " vim:ts=8