patch 9.1.0453: filetype: rasi files are not recognized

Commit: 
https://github.com/vim/vim/commit/280e5b13ca568ed592a894140bf1ac74356f4b33
Author: Pierrick Guillaume <piergu...@gmail.com>
Date:   Fri May 31 12:00:49 2024 +0200

    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: #14821
    
    Signed-off-by: Pierrick Guillaume <piergu...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS
index fd80c530f..dbc04868f 100644
--- a/.github/MAINTAINERS
+++ b/.github/MAINTAINERS
@@ -209,6 +209,7 @@ runtime/ftplugin/python.vim         @tpict
 runtime/ftplugin/qb64.vim              @dkearns
 runtime/ftplugin/qml.vim               @ChaseKnowlden
 runtime/ftplugin/racket.vim            @benknoble
+runtime/ftplugin/rasi.vim              @fymyte
 runtime/ftplugin/readline.vim          @dkearns
 runtime/ftplugin/rescript.vim          @ribru17
 runtime/ftplugin/routeros.vim          @zainin
@@ -479,6 +480,7 @@ runtime/syntax/racket.vim           @benknoble
 runtime/syntax/raml.vim                        @in3d
 runtime/syntax/rapid.vim               @KnoP-01
 runtime/syntax/ratpoison.vim           @trapd00r
+runtime/syntax/rasi.vim                        @fymyte
 runtime/syntax/rc.vim                  @chrisbra
 runtime/syntax/rcs.vim                 @hdima
 runtime/syntax/rebol.vim               @mrdubya
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 0c2ecaef5..94a5d3d7a 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*   For Vim version 9.1.  Last change: 2024 May 24
+*syntax.txt*   For Vim version 9.1.  Last change: 2024 May 31
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -3048,6 +3048,13 @@ To highlight R code in knitr chunk headers, add to your 
|vimrc|: >
        let rrst_syn_hl_chunk = 1
 
 
+RASI                                   *rasi.vim* *ft-rasi-syntax*
+
+Rasi stands for Rofi Advanced Style Information. It is used by the program
+|rofi| to style the rendering of the search window. The language is heavily
+inspired by CSS stylesheet. Files with the following extensions are recognized
+as rasi files: .rasi.
+
 READLINE                               *readline.vim* *ft-readline-syntax*
 
 The readline library is primarily used by the BASH shell, which adds quite a
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index 4da25ff6e..27879d497 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:  The Vim Project <https://github.com/vim/vim>
-" Last Change: 2024 May 23
+" Last Change: 2024 May 31
 " Former Maintainer:   Bram Moolenaar <b...@vim.org>
 
 " Listen very carefully, I will say this only once
@@ -3150,6 +3150,9 @@ au BufNewFile,BufRead yarn.lock                   setf 
yaml
 " Zathurarc
 au BufNewFile,BufRead zathurarc                        setf zathurarc
 
+" Rofi stylesheet
+au BufNewFile,BufRead *.rasi                   setf rasi
+
 " If the GUI is already running, may still need to install the Syntax menu.
 " Don't do it when the 'M' flag is included in 'guioptions'.
 if has("menu") && has("gui_running")
diff --git a/runtime/ftplugin/rasi.vim b/runtime/ftplugin/rasi.vim
new file mode 100644
index 000000000..5f8ce862d
--- /dev/null
+++ b/runtime/ftplugin/rasi.vim
@@ -0,0 +1,25 @@
+" Vim filetype plugin file
+" Language:            RASI
+" Maintainer:          Pierrick Guillaume <piergu...@gmail.com>
+" Last Change:         2024 May 21
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl com< cms< isk< inc<"
+
+setlocal comments=s1:/*,mb:*,ex:*/
+setlocal commentstring=//\ %s
+setlocal iskeyword+=-
+
+let &l:include = '^\s*@import\s\+\%(url(\)\='
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: ts=8
diff --git a/runtime/syntax/rasi.vim b/runtime/syntax/rasi.vim
new file mode 100644
index 000000000..40c3393fc
--- /dev/null
+++ b/runtime/syntax/rasi.vim
@@ -0,0 +1,298 @@
+" Vim syntax file
+" Language:    rasi (Rofi Advanced Style Information)
+" Maintainer:  Pierrick Guillaume  <piergu...@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*\( \+\s*([^)]*)\)\?[^),]*)' 
contains=rasiVarReferenceK,rasiPropertyIdRef,@rasiPropertyVals
+syn match rasiPropertyIdRef   display contained ' [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*\( \+([^)]*)\)\?[^),]*)' 
contains=rasiEnvVarK,rasiEnvRef,@rasiPropertyVals
+syn match rasiEnvRef          display contained ' \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
diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim
index 4468f86a1..2d60f37a1 100644
--- a/src/testdir/test_filetype.vim
+++ b/src/testdir/test_filetype.vim
@@ -180,6 +180,7 @@ def s:GetFilenameChecks(): dict<list<string>>
     csdl: ['file.csdl'],
     csp: ['file.csp', 'file.fdr'],
     css: ['file.css'],
+    rasi: ['file.rasi'],
     cterm: ['file.con'],
     csv: ['file.csv'],
     cucumber: ['file.feature'],
diff --git a/src/version.c b/src/version.c
index e5b8e4527..853569967 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    453,
 /**/
     452,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1sCzHu-000yCq-RH%40256bit.org.

Raspunde prin e-mail lui